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

     Python 3.14.0, outubro 10, 2025

     Author name not set

     Copyright © 2001 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.14.0, outubro 10, 2025

     Author name not set

     Copyright © 2001 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.14: O que há de novo no Python 3 14.
* 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.14

* Resumo – Destaques da versão::
* Novas funcionalidades::
* Outras mudanças de linguagem::
* Novos módulos::
* Módulos melhorados::
* Otimizações::
* Removidos::
* Descontinuados::
* Alterações de bytecode do CPython::
* Alterações na API C::
* Build changes::
* Portando para o Python 3.14: Portando para o Python 3 14.

Novas funcionalidades

* PEP 649 e PEP 749; Avaliação adiada de anotações: PEP 649 e PEP 749 Avaliação adiada de anotações.
* PEP 734; Múltiplos interpretadores na biblioteca padrão: PEP 734 Múltiplos interpretadores na biblioteca padrão.
* PEP 750; literal de string template: PEP 750 literal de string template.
* PEP 768; Interface segura para depurador externo: PEP 768 Interface segura para depurador externo.
* Um novo tipo de interpretador::
* Melhorias no modo com threads livres::
* Mensagens de erro melhoradas::
* Suporte ao Zstandard na biblioteca padrão::
* Capacidades de introspecção assíncrona::
* Controle de avisos seguros simultâneos::

Outras mudanças de linguagem

* Embutidos::
* Linha de comando e ambiente::
* PEP 758; permite expressões except e except* sem parênteses: PEP 758 permite expressões except e except* sem parênteses.
* PEP 765; Fluxo de controle em blocos finally: PEP 765 Fluxo de controle em blocos finally.
* Coleta de lixo incremental::
* Console interativo padrão::

Módulos melhorados

* argparse::
* ast::
* asyncio::
* calendar::
* concurrent.futures: concurrent futures.
* configparser::
* contextvars::
* ctypes::
* curses::
* datetime::
* decimal::
* difflib::
* dis::
* errno::
* faulthandler::
* fnmatch::
* fractions::
* functools::
* getopt::
* getpass::
* graphlib::
* heapq::
* hmac::
* http::
* imaplib::
* inspect::
* io::
* json::
* linecache::
* logging.handlers: logging handlers.
* math::
* mimetypes::
* multiprocessing::
* operador::
* os::
* os.path: os path.
* pathlib::
* pdb::
* pickle::
* platform::
* pydoc::
* re::
* socket::
* ssl::
* struct::
* symtable::
* sys::
* sys.monitoring: sys monitoring.
* sysconfig::
* tarfile::
* threading::
* tkinter::
* turtle::
* tipos::
* typing::
* unicodedata::
* unittest::
* urllib::
* uuid::
* webbrowser::
* zipfile::

Otimizações

* asyncio: asyncio<2>.
* base64::
* bdb::
* difflib: difflib<2>.
* gc::
* io: io<2>.
* pathlib: pathlib<2>.
* pdb: pdb<2>.
* uuid: uuid<2>.
* zlib::

Removidos

* argparse: argparse<2>.
* ast: ast<2>.
* asyncio: asyncio<3>.
* email::
* importlib.abc: importlib abc.
* itertools::
* pathlib: pathlib<3>.
* pkgutil::
* pty::
* sqlite3::
* urllib: urllib<2>.

Descontinuados

* Novas descontinuações::
* 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.19: Remoção pendente no Python 3 19.
* Remoção pendente em versões futuras::

Alterações de bytecode do CPython

* Pseudoinstruções::

Alterações na API C

* Python configuration C API::
* Novos recursos na API C::
* Mudanças na API C limitada::
* APIs C removidas::
* APIs C descontinuadas::

APIs C descontinuadas

* 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 no Python 3.18: Remoção pendente no Python 3 18.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<2>.

Build changes

* build-details.json: build-details json.
* Descontinuação de assinaturas PGP::
* Free-threaded Python is officially supported::
* Versões binárias para o compilador experimental just-in-time::

Portando para o Python 3.14

* Alterações na API Python::
* Changes in annotations (PEP 649 and PEP 749): Changes in annotations PEP 649 and PEP 749.
* Alterações na API C: Alterações na API C<2>.

Changes in annotations (PEP 649 and PEP 749)

* Implicações para o código anotado::
* Implicações para leitores de __annotations__::
* Mudanças relacionadas::
* from __future__ import annotations::

O que há de novo no Python 3.13

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

Novas funcionalidades

* Um melhor interpretador interativo::
* Mensagens de erro melhoradas: Mensagens de erro melhoradas<2>.
* 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: argparse<3>.
* array::
* ast: ast<3>.
* asyncio: asyncio<4>.
* base64: base64<2>.
* compileall::
* concurrent.futures: concurrent futures<2>.
* configparser: configparser<2>.
* copy::
* ctypes: ctypes<2>.
* dbm::
* dis: dis<2>.
* doctest::
* email: email<2>.
* enum::
* fractions: fractions<2>.
* glob::
* importlib::
* io: io<3>.
* ipaddress::
* itertools: itertools<2>.
* marshal::
* math: math<2>.
* mimetypes: mimetypes<2>.
* mmap::
* multiprocessing: multiprocessing<2>.
* os: os<2>.
* os.path: os path<2>.
* pathlib: pathlib<4>.
* pdb: pdb<3>.
* queue::
* random::
* re: re<2>.
* shutil::
* site::
* sqlite3: sqlite3<2>.
* ssl: ssl<2>.
* statistics::
* subprocess::
* sys: sys<2>.
* tempfile::
* time::
* tkinter: tkinter<2>.
* traceback::
* types::
* typing: typing<2>.
* unicodedata: unicodedata<2>.
* venv::
* warnings::
* 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::
* embutidos::
* configparser: configparser<3>.
* importlib.metadata: importlib metadata.
* locale::
* opcode::
* optparse::
* pathlib: pathlib<5>.
* re: re<3>.
* tkinter.tix: tkinter tix.
* turtle: turtle<2>.
* typing: typing<3>.
* unittest: unittest<2>.
* urllib: urllib<3>.
* webbrowser: webbrowser<2>.

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<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>.

Alterações na API C

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

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<4>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<4>.
* 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<4>.

Portando para o Python 3.13

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

O que há de novo no Python 3.12

* Resumo – Destaques da versão: Resumo – Destaques da versão<3>.
* Novas funcionalidades: Novas funcionalidades<4>.
* Novos recursos relacionados a dicas de tipo::
* Outras mudanças na linguagem: Outras mudanças na linguagem<2>.
* Novos módulos: Novos módulos<3>.
* Módulos melhorados: Módulos melhorados<3>.
* Otimizações: Otimizações<3>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<3>.
* Ferramentas e daemons::
* Descontinuados: Descontinuados<2>.
* Removidos: Removidos<2>.
* 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<6>.

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<3>.

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<5>.
* calendar: calendar<2>.
* csv::
* dis: dis<3>.
* fractions: fractions<3>.
* importlib.resources: importlib resources.
* inspect: inspect<2>.
* itertools: itertools<3>.
* math: math<3>.
* os: os<3>.
* os.path: os path<3>.
* pathlib: pathlib<6>.
* platform: platform<2>.
* pdb: pdb<4>.
* random: random<2>.
* shutil: shutil<2>.
* sqlite3: sqlite3<3>.
* statistics: statistics<2>.
* sys: sys<3>.
* tempfile: tempfile<2>.
* threading: threading<2>.
* tkinter: tkinter<3>.
* tokenize::
* types: types<2>.
* typing: typing<4>.
* unicodedata: unicodedata<3>.
* unittest: unittest<3>.
* uuid: uuid<3>.

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<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 em versões futuras: Remoção pendente em versões futuras<5>.

Removidos

* asynchat e asyncore::
* configparser: configparser<4>.
* distutils::
* ensurepip::
* enum: enum<2>.
* ftplib::
* gzip::
* hashlib::
* importlib: importlib<2>.
* imp::
* io: io<4>.
* locale: locale<2>.
* smtpd::
* sqlite3: sqlite3<4>.
* ssl: ssl<3>.
* unittest: unittest<4>.
* webbrowser: webbrowser<3>.
* 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<3>.

Alterações na API C

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

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<6>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<6>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<6>.

O que há de novo no Python 3.11

* Resumo – Destaques da versão: Resumo – Destaques da versão<4>.
* Novas funcionalidades: Novas funcionalidades<6>.
* 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<4>.
* Módulos melhorados: Módulos melhorados<4>.
* Otimizações: Otimizações<4>.
* CPython mais rápido::
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<4>.
* Descontinuados: Descontinuados<4>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12.
* Removidos: Removidos<4>.
* 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<7>.
* 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<6>.
* contextlib::
* dataclasses::
* datetime: datetime<2>.
* enum: enum<3>.
* fcntl::
* fractions: fractions<4>.
* functools: functools<2>.
* gzip: gzip<2>.
* hashlib: hashlib<2>.
* IDLE e idlelib::
* inspect: inspect<3>.
* locale: locale<3>.
* logging::
* math: math<4>.
* operator::
* os: os<4>.
* pathlib: pathlib<7>.
* re: re<4>.
* shutil: shutil<3>.
* socket: socket<2>.
* sqlite3: sqlite3<5>.
* string::
* sys: sys<4>.
* sysconfig: sysconfig<2>.
* tempfile: tempfile<3>.
* threading: threading<3>.
* time: time<2>.
* tkinter: tkinter<4>.
* traceback: traceback<2>.
* typing: typing<5>.
* unicodedata: unicodedata<4>.
* unittest: unittest<5>.
* venv: venv<2>.
* warnings: warnings<2>.
* zipfile: zipfile<2>.

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<7>.
* Portando para Python 3.11: Portando para Python 3 11<2>.
* Descontinuados: Descontinuados<5>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12<2>.
* Removidos: Removidos<5>.

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<5>.
* Novas funcionalidades: Novas funcionalidades<8>.
* 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<5>.
* Módulos melhorados: Módulos melhorados<5>.
* Otimizações: Otimizações<5>.
* Descontinuados: Descontinuados<6>.
* Removidos: Removidos<6>.
* Portando para Python 3.10: Portando para Python 3 10.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<5>.
* Mudanças na construção: Mudanças na construção<4>.
* Alterações na API C: Alterações na API C<9>.
* 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<7>.
* argparse: argparse<4>.
* array: array<3>.
* asynchat, asyncore, smtpd: asynchat asyncore smtpd.
* base64: base64<3>.
* bdb: bdb<2>.
* bisect::
* codecs::
* collections.abc: collections abc.
* contextlib: contextlib<2>.
* curses: curses<2>.
* dataclasses: dataclasses<2>.
* distutils: distutils<2>.
* doctest: doctest<2>.
* encodings::
* enum: enum<4>.
* fileinput::
* faulthandler: faulthandler<2>.
* gc: gc<2>.
* glob: glob<2>.
* hashlib: hashlib<3>.
* hmac: hmac<2>.
* IDLE e idlelib: IDLE e idlelib<2>.
* importlib.metadata: importlib metadata<2>.
* inspect: inspect<4>.
* itertools: itertools<4>.
* linecache: linecache<2>.
* os: os<5>.
* os.path: os path<4>.
* pathlib: pathlib<8>.
* platform: platform<3>.
* pprint::
* py_compile::
* pyclbr::
* shelve::
* statistics: statistics<3>.
* site: site<2>.
* socket: socket<3>.
* ssl: ssl<4>.
* sqlite3: sqlite3<6>.
* sys: sys<5>.
* _thread::
* threading: threading<4>.
* traceback: traceback<3>.
* types: types<3>.
* typing: typing<6>.
* unittest: unittest<6>.
* 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<4>.
* Alterações na API C: Alterações na API C<8>.

Alterações na API C

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

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<6>.
* Você deve verificar DeprecationWarning no seu código::
* Novas funcionalidades: Novas funcionalidades<10>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<5>.
* Novos módulos: Novos módulos<6>.
* Módulos melhorados: Módulos melhorados<6>.
* Otimizações: Otimizações<6>.
* Descontinuados: Descontinuados<8>.
* Removidos: Removidos<8>.
* 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<11>.
* 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: graphlib<2>.

Módulos melhorados

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

Portando para Python 3.9

* 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>.

Alterações na API C

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

Alterações notáveis no Python 3.9.1

* typing: typing<8>.
* 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<7>.
* Novas funcionalidades: Novas funcionalidades<12>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<6>.
* Novos módulos: Novos módulos<7>.
* Módulos melhorados: Módulos melhorados<7>.
* Otimizações: Otimizações<7>.
* Mudanças a construções e API C::
* Descontinuados: Descontinuados<9>.
* 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<5>.
* asyncio: asyncio<9>.
* builtins::
* collections::
* cProfile::
* csv: csv<2>.
* curses: curses<4>.
* ctypes: ctypes<3>.
* datetime: datetime<4>.
* functools: functools<3>.
* gc: gc<4>.
* gettext::
* gzip: gzip<3>.
* IDLE e idlelib: IDLE e idlelib<4>.
* inspect: inspect<6>.
* io: io<5>.
* itertools: itertools<5>.
* json.tool: json tool.
* logging: logging<2>.
* math: math<6>.
* mmap: mmap<2>.
* multiprocessing: multiprocessing<4>.
* os: os<7>.
* os.path: os path<5>.
* pathlib: pathlib<10>.
* pickle: pickle<2>.
* plistlib::
* pprint: pprint<3>.
* py_compile: py_compile<2>.
* shlex::
* shutil: shutil<4>.
* socket: socket<5>.
* ssl: ssl<5>.
* statistics: statistics<4>.
* sys: sys<7>.
* tarfile: tarfile<5>.
* threading: threading<5>.
* tokenize: tokenize<2>.
* tkinter: tkinter<5>.
* time: time<4>.
* typing: typing<9>.
* unicodedata: unicodedata<6>.
* unittest: unittest<7>.
* 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<6>.
* Alterações na API C: Alterações na API C<12>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<7>.
* 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<7>.

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<8>.
* Novas funcionalidades: Novas funcionalidades<13>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<7>.
* Novos módulos: Novos módulos<8>.
* Módulos melhorados: Módulos melhorados<8>.
* Alterações na API C: Alterações na API C<13>.
* Mudanças na construção: Mudanças na construção<6>.
* Otimizações: Otimizações<8>.
* 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: contextvars<2>.
* dataclasses: dataclasses<3>.
* importlib.resources: importlib resources<2>.

Módulos melhorados

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

Deprecated Python modules, functions and methods

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

Porting to Python 3.7

* Changes in Python Behavior::
* Alterações na API Python: Alterações na API Python<8>.
* Alterações na API C: Alterações na API C<14>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<8>.
* 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<9>.
* Novas funcionalidades: Novas funcionalidades<14>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<8>.
* Novos módulos: Novos módulos<9>.
* Módulos melhorados: Módulos melhorados<9>.
* Otimizações: Otimizações<9>.
* Mudanças a construções e API C: Mudanças a construções e API C<2>.
* Other Improvements::
* Descontinuados: Descontinuados<10>.
* Removidos: Removidos<10>.
* 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<6>.
* asyncio: asyncio<12>.
* binascii: binascii<2>.
* cmath::
* collections: collections<4>.
* concurrent.futures: concurrent futures<5>.
* contextlib: contextlib<4>.
* datetime: datetime<6>.
* decimal: decimal<3>.
* distutils: distutils<5>.
* email: email<3>.
* encodings: encodings<2>.
* enum: enum<7>.
* faulthandler: faulthandler<3>.
* fileinput: fileinput<2>.
* hashlib: hashlib<5>.
* http.client: http client<2>.
* idlelib e IDLE: idlelib e IDLE<2>.
* importlib: importlib<6>.
* inspect: inspect<7>.
* json: json<2>.
* logging: logging<4>.
* math: math<8>.
* multiprocessing: multiprocessing<6>.
* os: os<9>.
* pathlib: pathlib<12>.
* pdb: pdb<7>.
* pickle: pickle<3>.
* pickletools::
* pydoc: pydoc<4>.
* random: random<4>.
* re: re<6>.
* readline::
* rlcompleter::
* shlex: shlex<2>.
* site: site<3>.
* sqlite3: sqlite3<8>.
* socket: socket<8>.
* socketserver: socketserver<2>.
* ssl: ssl<8>.
* statistics: statistics<5>.
* struct: struct<2>.
* subprocess: subprocess<3>.
* sys: sys<10>.
* telnetlib::
* time: time<6>.
* timeit::
* tkinter: tkinter<7>.
* traceback: traceback<4>.
* tracemalloc: tracemalloc<3>.
* typing: typing<10>.
* unicodedata: unicodedata<8>.
* unittest.mock: unittest mock<2>.
* urllib.request: urllib request.
* urllib.robotparser: urllib robotparser.
* venv: venv<5>.
* avisos: avisos<2>.
* winreg::
* winsound::
* xmlrpc.client: xmlrpc client.
* zipfile: zipfile<4>.
* zlib: zlib<2>.

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<10>.
* re: re<7>.
* ssl: ssl<9>.
* tkinter: tkinter<8>.
* 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<9>.
* Alterações na API C: Alterações na API C<15>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<9>.

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<10>.
* Novas funcionalidades: Novas funcionalidades<15>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<9>.
* Novos módulos: Novos módulos<10>.
* Módulos melhorados: Módulos melhorados<10>.
* Other module-level changes::
* Otimizações: Otimizações<10>.
* Mudanças a construções e API C: Mudanças a construções e API C<3>.
* Descontinuados: Descontinuados<11>.
* Removidos: Removidos<11>.
* 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<11>.
* zipapp: zipapp<2>.

Módulos melhorados

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

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<10>.
* Alterações na API C: Alterações na API C<16>.

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<11>.
* Novas funcionalidades: Novas funcionalidades<16>.
* Novos módulos: Novos módulos<11>.
* Módulos melhorados: Módulos melhorados<11>.
* CPython Implementation Changes::
* Descontinuados: Descontinuados<12>.
* Removidos: Removidos<12>.
* 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<14>.
* ensurepip: ensurepip<2>.
* enum: enum<9>.
* pathlib: pathlib<14>.
* selectors: selectors<2>.
* statistics: statistics<6>.
* tracemalloc: tracemalloc<4>.

Módulos melhorados

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

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<11>.
* Alterações na API C: Alterações na API C<17>.

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<12>.
* 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<12>.
* Módulos melhorados: Módulos melhorados<12>.
* Otimizações: Otimizações<11>.
* Mudanças a construções e API C: Mudanças a construções e API C<4>.
* Descontinuados: Descontinuados<13>.
* 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<5>.
* ipaddress: ipaddress<6>.
* lzma: lzma<2>.

Módulos melhorados

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

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<12>.
* 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<7>.
* elementtree::
* functools: functools<8>.
* itertools: itertools<8>.
* collections: collections<8>.
* threading: threading<10>.
* datetime and time::
* math: math<11>.
* abc: abc<3>.
* io: io<9>.
* 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<7>.
* os: os<14>.
* shutil: shutil<8>.
* sqlite3: sqlite3<12>.
* html: html<3>.
* socket: socket<12>.
* ssl: ssl<13>.
* nntp::
* сертифікати::
* imaplib: imaplib<5>.
* http.client: http client<4>.
* unittest: unittest<12>.
* random: random<5>.
* poplib: poplib<4>.
* asyncore: asyncore<2>.
* tempfile: tempfile<5>.
* inspect: inspect<11>.
* pydoc: pydoc<7>.
* dis: dis<6>.
* dbm: dbm<7>.
* ctypes: ctypes<4>.
* site: site<4>.
* sysconfig: sysconfig<4>.
* pdb: pdb<10>.
* configparser: configparser<6>.
* 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<13>.
* 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<14>.

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

* Inicializando pip por padrão::
* 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::
* 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<15>.
* 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

* Port-Specific Changes; Windows: Port-Specific Changes Windows.
* Port-Specific Changes; Mac OS X: Port-Specific Changes Mac OS X.
* 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<16>.

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<17>.

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<18>.

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<2>.
* 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<3>.
* 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<13>.
* 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.14.0 final: Python 3 14 0 final.
* Python 3.14.0 candidato a lançamento 3: Python 3 14 0 candidato a lançamento 3.
* Python 3.14.0 candidato a lançamento 2: Python 3 14 0 candidato a lançamento 2.
* Python 3.14.0 candidato a lançamento 1: Python 3 14 0 candidato a lançamento 1.
* Python 3.14.0 beta 4: Python 3 14 0 beta 4.
* Python 3.14.0 beta 3: Python 3 14 0 beta 3.
* Python 3.14.0 beta 2: Python 3 14 0 beta 2.
* Python 3.14.0 beta 1: Python 3 14 0 beta 1.
* Python 3.14.0 alpha 7: Python 3 14 0 alpha 7.
* Python 3.14.0 alpha 6: Python 3 14 0 alpha 6.
* Python 3.14.0 alpha 5: Python 3 14 0 alpha 5.
* Python 3.14.0 alpha 4: Python 3 14 0 alpha 4.
* Python 3.14.0 alpha 3: Python 3 14 0 alpha 3.
* Python 3.14.0 alpha 2: Python 3 14 0 alpha 2.
* Python 3.14.0 alpha 1: Python 3 14 0 alpha 1.
* 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

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

Python 3.14.0 final

* macOS::
* Windows::
* Ferramentas/Demos: Ferramentas/Demos<2>.
* Segurança: Segurança<2>.
* Biblioteca: Biblioteca<2>.

Python 3.14.0 candidato a lançamento 3

* Windows: Windows<2>.
* Ferramentas/Demos: Ferramentas/Demos<3>.
* Segurança: Segurança<3>.
* Biblioteca: Biblioteca<3>.
* Núcleo e embutidos: Núcleo e embutidos<2>.

Python 3.14.0 candidato a lançamento 2

* macOS: macOS<2>.
* Windows: Windows<3>.
* Biblioteca: Biblioteca<4>.
* Documentação: Documentação<2>.
* Núcleo e embutidos: Núcleo e embutidos<3>.
* API C::
* Construção: Construção<2>.

Python 3.14.0 candidato a lançamento 1

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

Python 3.14.0 beta 4

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

Python 3.14.0 beta 3

* Windows: Windows<4>.
* Testes: Testes<3>.
* Segurança: Segurança<6>.
* Biblioteca: Biblioteca<7>.
* Documentação: Documentação<4>.
* Núcleo e embutidos: Núcleo e embutidos<6>.
* API C: API C<4>.
* Construção: Construção<5>.

Python 3.14.0 beta 2

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

Python 3.14.0 beta 1

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

Python 3.14.0 alpha 7

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

Python 3.14.0 alpha 6

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

Python 3.14.0 alpha 5

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

Python 3.14.0 alpha 4

* macOS: macOS<6>.
* Ferramentas/Demos: Ferramentas/Demos<11>.
* Testes: Testes<9>.
* Biblioteca: Biblioteca<13>.
* Núcleo e embutidos: Núcleo e embutidos<12>.
* API C: API C<10>.
* Construção: Construção<11>.

Python 3.14.0 alpha 3

* Windows: Windows<9>.
* Ferramentas/Demos: Ferramentas/Demos<12>.
* Testes: Testes<10>.
* Segurança: Segurança<12>.
* Biblioteca: Biblioteca<14>.
* Documentação: Documentação<9>.
* Núcleo e embutidos: Núcleo e embutidos<13>.
* API C: API C<11>.
* Construção: Construção<12>.

Python 3.14.0 alpha 2

* Windows: Windows<10>.
* Ferramentas/Demos: Ferramentas/Demos<13>.
* Testes: Testes<11>.
* Segurança: Segurança<13>.
* Biblioteca: Biblioteca<15>.
* Documentação: Documentação<10>.
* Núcleo e embutidos: Núcleo e embutidos<14>.
* API C: API C<12>.
* Construção: Construção<13>.

Python 3.14.0 alpha 1

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

Python 3.13.0 beta 1

* Segurança: Segurança<15>.
* Núcleo e embutidos: Núcleo e embutidos<16>.
* Biblioteca: Biblioteca<17>.
* Documentação: Documentação<12>.
* Construção: Construção<15>.
* Windows: Windows<12>.
* macOS: macOS<8>.
* IDLE: IDLE<7>.
* API C: API C<14>.

Python 3.13.0 alpha 6

* Núcleo e embutidos: Núcleo e embutidos<17>.
* Biblioteca: Biblioteca<18>.
* Documentação: Documentação<13>.
* Testes: Testes<13>.
* Construção: Construção<16>.
* Windows: Windows<13>.
* API C: API C<15>.

Python 3.13.0 alpha 5

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

Python 3.13.0 alpha 4

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

Python 3.13.0 alpha 3

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

Python 3.13.0 alpha 2

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

Python 3.13.0 alpha 1

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

Python 3.12.0 beta 1

* Segurança: Segurança<20>.
* Núcleo e embutidos: Núcleo e embutidos<23>.
* Biblioteca: Biblioteca<24>.
* Documentação: Documentação<18>.
* Testes: Testes<19>.
* Construção: Construção<22>.
* Windows: Windows<19>.
* macOS: macOS<14>.
* IDLE: IDLE<13>.
* Ferramentas/Demos: Ferramentas/Demos<19>.
* API C: API C<21>.

Python 3.12.0 alpha 7

* Núcleo e embutidos: Núcleo e embutidos<24>.
* Biblioteca: Biblioteca<25>.
* Documentação: Documentação<19>.
* Testes: Testes<20>.
* Construção: Construção<23>.
* Windows: Windows<20>.
* Ferramentas/Demos: Ferramentas/Demos<20>.
* API C: API C<22>.

Python 3.12.0 alpha 6

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

Python 3.12.0 alpha 5

* Segurança: Segurança<22>.
* Núcleo e embutidos: Núcleo e embutidos<26>.
* Biblioteca: Biblioteca<27>.
* Documentação: Documentação<21>.
* Testes: Testes<22>.
* Construção: Construção<25>.
* Windows: Windows<22>.

Python 3.12.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<27>.
* Biblioteca: Biblioteca<28>.
* Documentação: Documentação<22>.
* Testes: Testes<23>.
* Construção: Construção<26>.
* Windows: Windows<23>.
* macOS: macOS<16>.
* Ferramentas/Demos: Ferramentas/Demos<21>.
* API C: API C<24>.

Python 3.12.0 alpha 3

* Segurança: Segurança<23>.
* Núcleo e embutidos: Núcleo e embutidos<28>.
* Biblioteca: Biblioteca<29>.
* Documentação: Documentação<23>.
* Testes: Testes<24>.
* Construção: Construção<27>.
* Windows: Windows<24>.
* macOS: macOS<17>.
* Ferramentas/Demos: Ferramentas/Demos<22>.
* API C: API C<25>.

Python 3.12.0 alpha 2

* Segurança: Segurança<24>.
* Núcleo e embutidos: Núcleo e embutidos<29>.
* Biblioteca: Biblioteca<30>.
* Documentação: Documentação<24>.
* Testes: Testes<25>.
* Construção: Construção<28>.
* Windows: Windows<25>.
* macOS: macOS<18>.
* API C: API C<26>.

Python 3.12.0 alpha 1

* Segurança: Segurança<25>.
* Núcleo e embutidos: Núcleo e embutidos<30>.
* Biblioteca: Biblioteca<31>.
* Documentação: Documentação<25>.
* Testes: Testes<26>.
* Construção: Construção<29>.
* Windows: Windows<26>.
* macOS: macOS<19>.
* IDLE: IDLE<14>.
* Ferramentas/Demos: Ferramentas/Demos<23>.
* API C: API C<27>.

Python 3.11.0 beta 1

* Segurança: Segurança<26>.
* Núcleo e embutidos: Núcleo e embutidos<31>.
* Biblioteca: Biblioteca<32>.
* Documentação: Documentação<26>.
* Testes: Testes<27>.
* Construção: Construção<30>.
* Windows: Windows<27>.
* macOS: macOS<20>.
* Ferramentas/Demos: Ferramentas/Demos<24>.
* API C: API C<28>.

Python 3.11.0 alpha 7

* Núcleo e embutidos: Núcleo e embutidos<32>.
* Biblioteca: Biblioteca<33>.
* Documentação: Documentação<27>.
* Testes: Testes<28>.
* Construção: Construção<31>.
* Windows: Windows<28>.
* macOS: macOS<21>.
* Ferramentas/Demos: Ferramentas/Demos<25>.
* API C: API C<29>.

Python 3.11.0 alpha 6

* Núcleo e embutidos: Núcleo e embutidos<33>.
* Biblioteca: Biblioteca<34>.
* Documentação: Documentação<28>.
* Testes: Testes<29>.
* Construção: Construção<32>.
* Windows: Windows<29>.
* IDLE: IDLE<15>.
* API C: API C<30>.

Python 3.11.0 alpha 5

* Núcleo e embutidos: Núcleo e embutidos<34>.
* Biblioteca: Biblioteca<35>.
* Documentação: Documentação<29>.
* Testes: Testes<30>.
* Construção: Construção<33>.
* Windows: Windows<30>.
* macOS: macOS<22>.
* IDLE: IDLE<16>.
* API C: API C<31>.

Python 3.11.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<35>.
* Biblioteca: Biblioteca<36>.
* Documentação: Documentação<30>.
* Testes: Testes<31>.
* Construção: Construção<34>.
* Windows: Windows<31>.
* macOS: macOS<23>.
* API C: API C<32>.

Python 3.11.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<36>.
* Biblioteca: Biblioteca<37>.
* Documentação: Documentação<31>.
* Testes: Testes<32>.
* Construção: Construção<35>.
* Windows: Windows<32>.
* macOS: macOS<24>.
* API C: API C<33>.

Python 3.11.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<37>.
* Biblioteca: Biblioteca<38>.
* Documentação: Documentação<32>.
* Testes: Testes<33>.
* Construção: Construção<36>.
* Windows: Windows<33>.
* macOS: macOS<25>.
* IDLE: IDLE<17>.
* API C: API C<34>.

Python 3.11.0 alpha 1

* Segurança: Segurança<27>.
* Núcleo e embutidos: Núcleo e embutidos<38>.
* Biblioteca: Biblioteca<39>.
* Documentação: Documentação<33>.
* Testes: Testes<34>.
* Construção: Construção<37>.
* Windows: Windows<34>.
* macOS: macOS<26>.
* IDLE: IDLE<18>.
* Ferramentas/Demos: Ferramentas/Demos<26>.
* API C: API C<35>.

Python 3.10.0 beta 1

* Segurança: Segurança<28>.
* Núcleo e embutidos: Núcleo e embutidos<39>.
* Biblioteca: Biblioteca<40>.
* Documentação: Documentação<34>.
* Testes: Testes<35>.
* Construção: Construção<38>.
* Windows: Windows<35>.
* macOS: macOS<27>.
* IDLE: IDLE<19>.
* API C: API C<36>.

Python 3.10.0 alpha 7

* Segurança: Segurança<29>.
* Núcleo e embutidos: Núcleo e embutidos<40>.
* Biblioteca: Biblioteca<41>.
* Documentação: Documentação<35>.
* Testes: Testes<36>.
* Construção: Construção<39>.
* Windows: Windows<36>.
* IDLE: IDLE<20>.
* API C: API C<37>.

Python 3.10.0 alpha 6

* Segurança: Segurança<30>.
* Núcleo e embutidos: Núcleo e embutidos<41>.
* Biblioteca: Biblioteca<42>.
* Documentação: Documentação<36>.
* Testes: Testes<37>.
* Construção: Construção<40>.
* Windows: Windows<37>.
* macOS: macOS<28>.
* IDLE: IDLE<21>.
* API C: API C<38>.

Python 3.10.0 alpha 5

* Segurança: Segurança<31>.
* Núcleo e embutidos: Núcleo e embutidos<42>.
* Biblioteca: Biblioteca<43>.
* Documentação: Documentação<37>.
* Testes: Testes<38>.
* Construção: Construção<41>.
* Windows: Windows<38>.
* macOS: macOS<29>.
* IDLE: IDLE<22>.
* API C: API C<39>.

Python 3.10.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<43>.
* Biblioteca: Biblioteca<44>.
* Documentação: Documentação<38>.
* Testes: Testes<39>.
* Construção: Construção<42>.
* macOS: macOS<30>.
* Ferramentas/Demos: Ferramentas/Demos<27>.
* API C: API C<40>.

Python 3.10.0 alpha 3

* Segurança: Segurança<32>.
* Núcleo e embutidos: Núcleo e embutidos<44>.
* Biblioteca: Biblioteca<45>.
* Documentação: Documentação<39>.
* Testes: Testes<40>.
* Construção: Construção<43>.
* Windows: Windows<39>.
* macOS: macOS<31>.
* IDLE: IDLE<23>.
* Ferramentas/Demos: Ferramentas/Demos<28>.
* API C: API C<41>.

Python 3.10.0 alpha 2

* Segurança: Segurança<33>.
* Núcleo e embutidos: Núcleo e embutidos<45>.
* Biblioteca: Biblioteca<46>.
* Documentação: Documentação<40>.
* Testes: Testes<41>.
* Construção: Construção<44>.
* Windows: Windows<40>.
* macOS: macOS<32>.
* IDLE: IDLE<24>.
* API C: API C<42>.

Python 3.10.0 alpha 1

* Segurança: Segurança<34>.
* Núcleo e embutidos: Núcleo e embutidos<46>.
* Biblioteca: Biblioteca<47>.
* Documentação: Documentação<41>.
* Testes: Testes<42>.
* Construção: Construção<45>.
* Windows: Windows<41>.
* macOS: macOS<33>.
* IDLE: IDLE<25>.
* API C: API C<43>.

Python 3.9.0 beta 1

* Segurança: Segurança<35>.
* Núcleo e embutidos: Núcleo e embutidos<47>.
* Biblioteca: Biblioteca<48>.
* Documentação: Documentação<42>.
* Testes: Testes<43>.
* Construção: Construção<46>.
* Windows: Windows<42>.
* macOS: macOS<34>.
* Ferramentas/Demos: Ferramentas/Demos<29>.
* API C: API C<44>.

Python 3.9.0 alpha 6

* Segurança: Segurança<36>.
* Núcleo e embutidos: Núcleo e embutidos<48>.
* Biblioteca: Biblioteca<49>.
* Documentação: Documentação<43>.
* Testes: Testes<44>.
* Construção: Construção<47>.
* Windows: Windows<43>.
* macOS: macOS<35>.
* IDLE: IDLE<26>.
* Ferramentas/Demos: Ferramentas/Demos<30>.
* API C: API C<45>.

Python 3.9.0 alpha 5

* Segurança: Segurança<37>.
* Núcleo e embutidos: Núcleo e embutidos<49>.
* Biblioteca: Biblioteca<50>.
* Documentação: Documentação<44>.
* Testes: Testes<45>.
* Construção: Construção<48>.
* Windows: Windows<44>.
* macOS: macOS<36>.
* IDLE: IDLE<27>.
* Ferramentas/Demos: Ferramentas/Demos<31>.
* API C: API C<46>.

Python 3.9.0 alpha 4

* Segurança: Segurança<38>.
* Núcleo e embutidos: Núcleo e embutidos<50>.
* Biblioteca: Biblioteca<51>.
* Documentação: Documentação<45>.
* Testes: Testes<46>.
* Construção: Construção<49>.
* Windows: Windows<45>.
* IDLE: IDLE<28>.
* API C: API C<47>.

Python 3.9.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<51>.
* Biblioteca: Biblioteca<52>.
* Documentação: Documentação<46>.
* Construção: Construção<50>.
* IDLE: IDLE<29>.
* API C: API C<48>.

Python 3.9.0 alpha 2

* Segurança: Segurança<39>.
* Núcleo e embutidos: Núcleo e embutidos<52>.
* Biblioteca: Biblioteca<53>.
* Documentação: Documentação<47>.
* Testes: Testes<47>.
* Construção: Construção<51>.
* Windows: Windows<46>.
* macOS: macOS<37>.
* IDLE: IDLE<30>.
* API C: API C<49>.

Python 3.9.0 alpha 1

* Segurança: Segurança<40>.
* Núcleo e embutidos: Núcleo e embutidos<53>.
* Biblioteca: Biblioteca<54>.
* Documentação: Documentação<48>.
* Testes: Testes<48>.
* Construção: Construção<52>.
* Windows: Windows<47>.
* macOS: macOS<38>.
* IDLE: IDLE<31>.
* Ferramentas/Demos: Ferramentas/Demos<32>.
* API C: API C<50>.

Python 3.8.0 beta 1

* Segurança: Segurança<41>.
* Núcleo e embutidos: Núcleo e embutidos<54>.
* Biblioteca: Biblioteca<55>.
* Documentação: Documentação<49>.
* Testes: Testes<49>.
* Construção: Construção<53>.
* Windows: Windows<48>.
* macOS: macOS<39>.
* IDLE: IDLE<32>.
* Ferramentas/Demos: Ferramentas/Demos<33>.
* API C: API C<51>.

Python 3.8.0 alpha 4

* Segurança: Segurança<42>.
* Núcleo e embutidos: Núcleo e embutidos<55>.
* Biblioteca: Biblioteca<56>.
* Documentação: Documentação<50>.
* Testes: Testes<50>.
* Construção: Construção<54>.
* Windows: Windows<49>.
* macOS: macOS<40>.
* IDLE: IDLE<33>.
* Ferramentas/Demos: Ferramentas/Demos<34>.
* API C: API C<52>.

Python 3.8.0 alpha 3

* Segurança: Segurança<43>.
* Núcleo e embutidos: Núcleo e embutidos<56>.
* Biblioteca: Biblioteca<57>.
* Documentação: Documentação<51>.
* Testes: Testes<51>.
* Construção: Construção<55>.
* Windows: Windows<50>.
* IDLE: IDLE<34>.
* Ferramentas/Demos: Ferramentas/Demos<35>.
* API C: API C<53>.

Python 3.8.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<57>.
* Biblioteca: Biblioteca<58>.
* Documentação: Documentação<52>.
* Testes: Testes<52>.
* Windows: Windows<51>.
* IDLE: IDLE<35>.

Python 3.8.0 alpha 1

* Segurança: Segurança<44>.
* Núcleo e embutidos: Núcleo e embutidos<58>.
* Biblioteca: Biblioteca<59>.
* Documentação: Documentação<53>.
* Testes: Testes<53>.
* Construção: Construção<56>.
* Windows: Windows<52>.
* macOS: macOS<41>.
* IDLE: IDLE<36>.
* Ferramentas/Demos: Ferramentas/Demos<36>.
* API C: API C<54>.

Python 3.7.0 final

* Biblioteca: Biblioteca<60>.
* API C: API C<55>.

Python 3.7.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<59>.
* Biblioteca: Biblioteca<61>.
* Documentação: Documentação<54>.
* Construção: Construção<57>.
* Windows: Windows<53>.
* IDLE: IDLE<37>.

Python 3.7.0 beta 5

* Núcleo e embutidos: Núcleo e embutidos<60>.
* Biblioteca: Biblioteca<62>.
* Documentação: Documentação<55>.
* Testes: Testes<54>.
* Construção: Construção<58>.
* macOS: macOS<42>.
* IDLE: IDLE<38>.

Python 3.7.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<61>.
* Biblioteca: Biblioteca<63>.
* Documentação: Documentação<56>.
* Testes: Testes<55>.
* Construção: Construção<59>.
* Windows: Windows<54>.
* macOS: macOS<43>.
* IDLE: IDLE<39>.
* Ferramentas/Demos: Ferramentas/Demos<37>.

Python 3.7.0 beta 3

* Segurança: Segurança<45>.
* Núcleo e embutidos: Núcleo e embutidos<62>.
* Biblioteca: Biblioteca<64>.
* Documentação: Documentação<57>.
* Testes: Testes<56>.
* Construção: Construção<60>.
* Windows: Windows<55>.
* macOS: macOS<44>.
* IDLE: IDLE<40>.
* Ferramentas/Demos: Ferramentas/Demos<38>.
* API C: API C<56>.

Python 3.7.0 beta 2

* Segurança: Segurança<46>.
* Núcleo e embutidos: Núcleo e embutidos<63>.
* Biblioteca: Biblioteca<65>.
* Documentação: Documentação<58>.
* Testes: Testes<57>.
* Construção: Construção<61>.
* Windows: Windows<56>.
* macOS: macOS<45>.
* IDLE: IDLE<41>.
* Ferramentas/Demos: Ferramentas/Demos<39>.

Python 3.7.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<64>.
* Biblioteca: Biblioteca<66>.
* Documentação: Documentação<59>.
* Testes: Testes<58>.
* Construção: Construção<62>.
* Windows: Windows<57>.
* macOS: macOS<46>.
* API C: API C<57>.

Python 3.7.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<65>.
* Biblioteca: Biblioteca<67>.
* Documentação: Documentação<60>.
* Testes: Testes<59>.
* Windows: Windows<58>.
* Ferramentas/Demos: Ferramentas/Demos<40>.
* API C: API C<58>.

Python 3.7.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<66>.
* Biblioteca: Biblioteca<68>.
* Documentação: Documentação<61>.
* Testes: Testes<60>.
* Construção: Construção<63>.
* Windows: Windows<59>.
* macOS: macOS<47>.
* IDLE: IDLE<42>.
* Ferramentas/Demos: Ferramentas/Demos<41>.
* API C: API C<59>.

Python 3.7.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<67>.
* Biblioteca: Biblioteca<69>.
* Documentação: Documentação<62>.
* Construção: Construção<64>.
* IDLE: IDLE<43>.
* API C: API C<60>.

Python 3.7.0 alpha 1

* Segurança: Segurança<47>.
* Núcleo e embutidos: Núcleo e embutidos<68>.
* Biblioteca: Biblioteca<70>.
* Documentação: Documentação<63>.
* Testes: Testes<61>.
* Construção: Construção<65>.
* Windows: Windows<60>.
* IDLE: IDLE<44>.
* Ferramentas/Demos: Ferramentas/Demos<42>.
* API C: API C<61>.

Python 3.6.6 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<69>.
* Biblioteca: Biblioteca<71>.
* Documentação: Documentação<64>.
* Testes: Testes<62>.
* Construção: Construção<66>.
* Windows: Windows<61>.
* macOS: macOS<48>.
* IDLE: IDLE<45>.
* Ferramentas/Demos: Ferramentas/Demos<43>.
* API C: API C<62>.

Python 3.6.5 final

* Testes: Testes<63>.
* Construção: Construção<67>.

Python 3.6.5 release candidate 1

* Segurança: Segurança<48>.
* Núcleo e embutidos: Núcleo e embutidos<70>.
* Biblioteca: Biblioteca<72>.
* Documentação: Documentação<65>.
* Testes: Testes<64>.
* Construção: Construção<68>.
* Windows: Windows<62>.
* macOS: macOS<49>.
* IDLE: IDLE<46>.
* Ferramentas/Demos: Ferramentas/Demos<44>.
* API C: API C<63>.

Python 3.6.4 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<71>.
* Biblioteca: Biblioteca<73>.
* Documentação: Documentação<66>.
* Testes: Testes<65>.
* Construção: Construção<69>.
* Windows: Windows<63>.
* macOS: macOS<50>.
* IDLE: IDLE<47>.
* Ferramentas/Demos: Ferramentas/Demos<45>.
* API C: API C<64>.

Python 3.6.3 final

* Biblioteca: Biblioteca<74>.
* Construção: Construção<70>.

Python 3.6.3 release candidate 1

* Segurança: Segurança<49>.
* Núcleo e embutidos: Núcleo e embutidos<72>.
* Biblioteca: Biblioteca<75>.
* Documentação: Documentação<67>.
* Testes: Testes<66>.
* Construção: Construção<71>.
* Windows: Windows<64>.
* IDLE: IDLE<48>.
* Ferramentas/Demos: Ferramentas/Demos<46>.

Python 3.6.2 release candidate 2

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

Python 3.6.2 release candidate 1

* Segurança: Segurança<51>.
* Núcleo e embutidos: Núcleo e embutidos<73>.
* Biblioteca: Biblioteca<76>.
* IDLE: IDLE<49>.
* API C: API C<65>.
* Construção: Construção<72>.
* Documentação: Documentação<68>.
* Ferramentas/Demos: Ferramentas/Demos<47>.
* Testes: Testes<67>.
* Windows: Windows<65>.

Python 3.6.1 final

* Núcleo e embutidos: Núcleo e embutidos<74>.
* Construção: Construção<73>.

Python 3.6.1 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<75>.
* Biblioteca: Biblioteca<77>.
* IDLE: IDLE<50>.
* Windows: Windows<66>.
* API C: API C<66>.
* Documentação: Documentação<69>.
* Testes: Testes<68>.
* Construção: Construção<74>.

Python 3.6.0 release candidate 2

* Núcleo e embutidos: Núcleo e embutidos<76>.
* Ferramentas/Demos: Ferramentas/Demos<48>.
* Windows: Windows<67>.
* Construção: Construção<75>.

Python 3.6.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<77>.
* Biblioteca: Biblioteca<78>.
* API C: API C<67>.
* Documentação: Documentação<70>.
* Ferramentas/Demos: Ferramentas/Demos<49>.

Python 3.6.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<78>.
* Biblioteca: Biblioteca<79>.
* Documentação: Documentação<71>.
* Testes: Testes<69>.
* Construção: Construção<76>.

Python 3.6.0 beta 3

* Núcleo e embutidos: Núcleo e embutidos<79>.
* Biblioteca: Biblioteca<80>.
* Windows: Windows<68>.
* Construção: Construção<77>.
* Testes: Testes<70>.

Python 3.6.0 beta 2

* Núcleo e embutidos: Núcleo e embutidos<80>.
* Biblioteca: Biblioteca<81>.
* Windows: Windows<69>.
* API C: API C<68>.
* Construção: Construção<78>.
* Testes: Testes<71>.

Python 3.6.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<81>.
* Biblioteca: Biblioteca<82>.
* IDLE: IDLE<51>.
* API C: API C<69>.
* Testes: Testes<72>.
* Construção: Construção<79>.
* Ferramentas/Demos: Ferramentas/Demos<50>.
* Windows: Windows<70>.

Python 3.6.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<82>.
* Biblioteca: Biblioteca<83>.
* IDLE: IDLE<52>.
* Testes: Testes<73>.
* Windows: Windows<71>.
* Construção: Construção<80>.

Python 3.6.0 alpha 3

* Segurança: Segurança<52>.
* Núcleo e embutidos: Núcleo e embutidos<83>.
* Biblioteca: Biblioteca<84>.
* IDLE: IDLE<53>.
* API C: API C<70>.
* Construção: Construção<81>.
* Ferramentas/Demos: Ferramentas/Demos<51>.
* Documentação: Documentação<72>.
* Testes: Testes<74>.

Python 3.6.0 alpha 2

* Segurança: Segurança<53>.
* Núcleo e embutidos: Núcleo e embutidos<84>.
* Biblioteca: Biblioteca<85>.
* IDLE: IDLE<54>.
* Documentação: Documentação<73>.
* Testes: Testes<75>.
* Windows: Windows<72>.
* Construção: Construção<82>.
* API C: API C<71>.
* Ferramentas/Demos: Ferramentas/Demos<52>.

Python 3.6.0 alpha 1

* Segurança: Segurança<54>.
* Núcleo e embutidos: Núcleo e embutidos<85>.
* Biblioteca: Biblioteca<86>.
* IDLE: IDLE<55>.
* Documentação: Documentação<74>.
* Testes: Testes<76>.
* Construção: Construção<83>.
* Windows: Windows<73>.
* Ferramentas/Demos: Ferramentas/Demos<53>.
* API C: API C<72>.

Python 3.5.5 release candidate 1

* Segurança: Segurança<55>.
* Núcleo e embutidos: Núcleo e embutidos<86>.
* Biblioteca: Biblioteca<87>.

Python 3.5.4 final

* Biblioteca: Biblioteca<88>.

Python 3.5.4 release candidate 1

* Segurança: Segurança<56>.
* Núcleo e embutidos: Núcleo e embutidos<87>.
* Biblioteca: Biblioteca<89>.
* Documentação: Documentação<75>.
* Testes: Testes<77>.
* Construção: Construção<84>.
* Windows: Windows<74>.
* API C: API C<73>.

Python 3.5.3 release candidate 1

* Segurança: Segurança<57>.
* Núcleo e embutidos: Núcleo e embutidos<88>.
* Biblioteca: Biblioteca<90>.
* IDLE: IDLE<56>.
* API C: API C<74>.
* Documentação: Documentação<76>.
* Testes: Testes<78>.
* Ferramentas/Demos: Ferramentas/Demos<54>.
* Windows: Windows<75>.
* Construção: Construção<85>.

Python 3.5.2 final

* Núcleo e embutidos: Núcleo e embutidos<89>.
* Testes: Testes<79>.
* IDLE: IDLE<57>.

Python 3.5.2 release candidate 1

* Segurança: Segurança<58>.
* Núcleo e embutidos: Núcleo e embutidos<90>.
* Biblioteca: Biblioteca<91>.
* IDLE: IDLE<58>.
* Documentação: Documentação<77>.
* Testes: Testes<80>.
* Construção: Construção<86>.
* Windows: Windows<76>.
* Ferramentas/Demos: Ferramentas/Demos<55>.

Python 3.5.1 final

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

Python 3.5.1 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<92>.
* Biblioteca: Biblioteca<92>.
* IDLE: IDLE<59>.
* Documentação: Documentação<78>.
* Testes: Testes<81>.
* Construção: Construção<87>.
* Windows: Windows<78>.
* Ferramentas/Demos: Ferramentas/Demos<56>.

Python 3.5.0 final

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

Python 3.5.0 release candidate 4

* Biblioteca: Biblioteca<93>.
* Construção: Construção<89>.

Python 3.5.0 release candidate 3

* Núcleo e embutidos: Núcleo e embutidos<93>.
* Biblioteca: Biblioteca<94>.

Python 3.5.0 release candidate 2

* Núcleo e embutidos: Núcleo e embutidos<94>.
* Biblioteca: Biblioteca<95>.

Python 3.5.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<95>.
* Biblioteca: Biblioteca<96>.
* IDLE: IDLE<60>.
* Documentação: Documentação<79>.
* Testes: Testes<82>.

Python 3.5.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<96>.
* Biblioteca: Biblioteca<97>.
* Construção: Construção<90>.

Python 3.5.0 beta 3

* Núcleo e embutidos: Núcleo e embutidos<97>.
* Biblioteca: Biblioteca<98>.
* Testes: Testes<83>.
* Documentação: Documentação<80>.
* Construção: Construção<91>.

Python 3.5.0 beta 2

* Núcleo e embutidos: Núcleo e embutidos<98>.
* Biblioteca: Biblioteca<99>.

Python 3.5.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<99>.
* Biblioteca: Biblioteca<100>.
* IDLE: IDLE<61>.
* Testes: Testes<84>.
* Documentação: Documentação<81>.
* Ferramentas/Demos: Ferramentas/Demos<57>.

Python 3.5.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<100>.
* Biblioteca: Biblioteca<101>.
* Construção: Construção<92>.
* Testes: Testes<85>.
* Ferramentas/Demos: Ferramentas/Demos<58>.
* API C: API C<75>.

Python 3.5.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<101>.
* Biblioteca: Biblioteca<102>.
* Construção: Construção<93>.
* Testes: Testes<86>.
* Ferramentas/Demos: Ferramentas/Demos<59>.

Python 3.5.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<102>.
* Biblioteca: Biblioteca<103>.
* Construção: Construção<94>.
* API C: API C<76>.
* Windows: Windows<79>.

Python 3.5.0 alpha 1

* Núcleo e embutidos: Núcleo e embutidos<103>.
* Biblioteca: Biblioteca<104>.
* IDLE: IDLE<62>.
* Construção: Construção<95>.
* API C: API C<77>.
* Documentação: Documentação<82>.
* Testes: Testes<87>.
* Ferramentas/Demos: Ferramentas/Demos<60>.
* 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: Linha de comando e ambiente<2>.
* 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::

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 ci::
* 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

* Gerenciador de instalação do Python::
* O pacote embutível::
* Os pacotes nuget.org: Os pacotes nuget org.
* Pacotes Alternativos::
* Supported Windows versions::
* Removendo a Limitação do MAX_PATH::
* Modo UTF-8::
* Encontrando módulos::
* Módulos adicionais::
* Compilando Python no Windows::
* The full installer (deprecated): The full installer deprecated.
* Python Launcher for Windows (Deprecated): Python Launcher for Windows Deprecated.

Gerenciador de instalação do Python

* Instalação::
* Uso básico::
* Comando help::
* Listando ambientes de execução::
* Instalando ambientes de execução::
* Instalações offline::
* Desinstalando ambientes de execução::
* Configuração::
* Shebang lines::
* Advanced Installation::
* Administrative Configuration::
* Instalando binários com threads livres::
* Troubleshooting::

O pacote embutível

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

Os pacotes nuget.org

* Pacotes com threads livres::

Módulos adicionais

* PyWin32::
* cx_Freeze::

The full installer (deprecated)

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

Python Launcher for Windows (Deprecated)

* 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::

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<3>.
* 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::

Conformidade com a App Store

* Código incompatível na biblioteca padrão::
* Manifestos de privacidade::

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::

Notação

* Definições lexicais e sintáticas::

Análise léxica

* Estrutura das linhas::
* Outros tokens::
* Nomes (identificadores e palavras reservadas): Nomes identificadores e palavras reservadas.
* Literais::
* Literais de string e bytes::
* Literais numéricos::
* Operators and delimiters::

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::
* Marcador de fim::

Nomes (identificadores e palavras reservadas)

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

Literais de string e bytes

* Strings entre aspas triplas::
* Prefixos de string::
* Gramática formal::
* Sequências de escape::
* Literais de bytes::
* Literais de string brutas::
* Literais de strings formatadas::
* Literais de strings templates (t-strings): Literais de strings templates t-strings.

Sequências de escape

* Fim de linha ignorado::
* Caracteres escapados::
* Caractere octal::
* Caractere hexadecimal::
* Caractere nomeado Unicode::
* Caracteres hexadecimais Unicode::
* Sequências de espace não reconhecidas::

Literais numéricos

* Inteiros literais::
* Literais de ponto flutuante::
* Literais imaginários::

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::
* Anotações::
* 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>.
* Runtime Components::

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::

Runtime Components

* General Computing Model::
* Python Runtime Model::

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::

Literais

* Concatenação de literal de string::

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::
* Anotações: Anotações<2>.

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<4>.

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.
* Resumo dos métodos de tipo de sequência binária e de texto::
* 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::
* Métodos adicionais em números complexos::
* 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

* Métodos de string::
* 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::
* string.templatelib — Suporte para literais de string template: string templatelib — Suporte para literais de string template.
* 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::
* Template strings ($-strings): Template strings $-strings.
* Funções auxiliares::

Sintaxe das strings de formato

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

string.templatelib — Suporte para literais de string template

* Strings template::
* Tipos::
* Funções auxiliares: Funções auxiliares<2>.

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 — Higher-order functions and operations on callable objects::
* 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 — Higher-order functions and operations on callable objects

* 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: Uso básico<2>.
* 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.
* Protocolos::

Caminhos puros

* Propriedades gerais::
* Operadores::
* 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::
* Copiando, movendo e excluindo: Copiando movendo 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>.
* Interface de linha de comando::

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: Interface de linha de comando<2>.

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

* O pacote compression::
* compression.zstd — Compactação compatível com o formato Zstandard: compression zstd — Compactação compatível com o formato Zstandard.
* 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::

compression.zstd — Compactação compatível com o formato Zstandard

* Exceções: Exceções<8>.
* Lendo e escrevendo arquivos comprimidos::
* Comprimindo e descomprimindo dados na memória::
* Dicionários de Zstandard::
* Advanced parameter control::
* Diversos: Diversos<3>.
* Exemplos: Exemplos<8>.

gzip — Suporte para arquivos gzip

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

Interface de linha de comando

* Opções da 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: Lendo e escrevendo arquivos comprimidos<2>.
* Comprimindo e descomprimindo dados na memória: Comprimindo e descomprimindo dados na memória<2>.
* Diversos: Diversos<4>.
* Especificando cadeias de filtros personalizadas::
* Exemplos: Exemplos<9>.

zipfile — Trabalha com arquivos ZIP

* Objetos ZipFile::
* Objetos Path::
* Objetos PyZipFile::
* Objetos ZipInfo::
* Interface de Linha de Comando::
* Armadilhas de descompressão::

Interface de Linha de Comando

* Opções de linha de comando::

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

* TarFile Objects::
* Objetos TarInfo::
* Filtros de extração::
* Interface de Linha de Comando: Interface de Linha de Comando<2>.
* Exemplos: Exemplos<10>.
* 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<2>.

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<11>.

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<9>.

tomllib — Analisa arquivos TOML

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

netrc — Arquivo de processamento netrc

* Objetos netrc::

plistlib — Gera e analisa arquivos Apple .plist

* Exemplos: Exemplos<13>.

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<14>.
* 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 — Tratadores de registro de eventos: logging handlers — Tratadores de registro de eventos.
* 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::
* High-level Module Interface::
* hierarquia de classe::
* Static Typing::
* 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::
* Configuration dictionary schema::
* Formato do arquivo de configuração::

Configuration dictionary schema

* Dictionary Schema Details::
* Incremental Configuration::
* Object connections::
* User-defined objects::
* Handler configuration order::
* Access to external objects::
* Access to internal objects::
* Import resolution and custom importers::
* Configuring QueueHandler and QueueListener::

logging.handlers — Tratadores de registro de eventos

* 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::
* Calling functions with your own custom data types::
* Specifying the required argument types (function prototypes): Specifying the required argument types function prototypes.
* 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 layout, alignment and byte order: Structure/union layout alignment and byte order.
* Bit fields in structures and unions::
* Arrays::
* Ponteiros::
* Thread safety without the GIL::
* Conversão de Tipos::
* Tipos Incompletos::
* Funções Callbacks::
* Accessing values exported from dlls::
* Surprises::
* Variable-sized data types::

Referência ctypes

* Finding shared libraries::
* Listing loaded shared libraries::
* Loading shared libraries::
* Foreign functions::
* Function prototypes::
* Funções utilitárias::
* Data types::
* Tipos de dados fundamentais: Tipos de dados fundamentais<2>.
* Structured data types::
* Arrays and pointers::
* Exceções: Exceções<10>.

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<11>.

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::
* suggest_on_error::
* cor::

O método add_argument()

* name ou flags::
* action::
* nargs::
* const::
* default::
* type::
* 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<12>.

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.
* concurrent.interpreters — Múltiplos interpretadores no mesmo processo: concurrent interpreters — Múltiplos interpretadores no mesmo processo.
* 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<15>.

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

* Process e exceções::
* Encadeamentos e filas::
* Diversos: Diversos<5>.
* 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::
* InterpreterPoolExecutor::
* `ProcessPoolExecutor`::
* Future Objects::
* Module Functions::
* Exception classes::

ThreadPoolExecutor

* Exemplo de ThreadPoolExecutor::

'ProcessPoolExecutor'

* ProcessPoolExecutor Example::

concurrent.interpreters — Múltiplos interpretadores no mesmo processo

* Detalhes-chave::
* Introdução: Introdução<10>.
* Referência: Referência<4>.
* Uso básico: Uso básico<3>.

Introdução

* Multiple Interpreters and Isolation::
* Running in an Interpreter::
* Concurrency and Parallelism::
* Communication Between Interpreters::
* “Sharing” Objects::

Referência

* Objetos interpretador::
* Exceções: Exceções<13>.
* Communicating Between Interpreters::

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<14>.

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(): Replacing os popen.

Notas

* Timeout Behavior::
* Converter uma sequência de argumentos em uma string no Windows::
* Disable use of posix_spawn(): Disable use of 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<16>.
* Call Graph Introspection::
* Laço de Eventos::
* Futuros::
* Transports and 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::
* Task Cancellation::
* Task Groups::
* Dormindo::
* Executando tarefas concorrentemente::
* Eager Task Factory::
* Protegendo contra cancelamento::
* Tempo limite::
* Primitivas de Espera::
* Executando em Threads::
* Agendando a partir de outras Threads::
* Introspecção::
* Objeto Task::

Task Groups

* Terminating a Task Group::

Streams

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

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<17>.

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<15>.
* Exemplos: Exemplos<18>.

Call Graph Introspection

* Low level utility functions::

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<19>.

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

* Future Functions::
* Future Object::

Transports and Protocols

* Transportes::
* Protocolos: Protocolos<2>.
* Exemplos: Exemplos<20>.

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::
* 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<17>.

Í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<3>.
* 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>.
* Detect never-awaited coroutines::
* Detect never-retrieved exceptions::

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<18>.
* 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<21>.
* 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<19>.
* 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<11>.
* Classes: Classes<4>.
* Exemplos: Exemplos<22>.

signal — Define manipuladores para eventos assíncronos

* Regras gerais::
* Conteúdo do módulo: Conteúdo do módulo<5>.
* Exemplos: Exemplos<23>.
* 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 — Manipulate mailboxes in various formats::
* 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<4>.
* Codificadores e decodificadores::
* Exceções: Exceções<20>.
* Conformidade e interoperabilidade entre padrões::
* Interface de linha de comando: Interface de linha de comando<4>.

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 de linha de comando: Opções de linha de comando<3>.

mailbox — Manipulate mailboxes in various formats

* Mailbox objects::
* Message objects::
* Exceções: Exceções<21>.
* Exemplos: Exemplos<24>.

Mailbox objects

* 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::
* Uso na linha de comando: Uso na linha de comando<4>.
* Exemplos na linha de comando: Exemplos na linha de comando<2>.

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 — Simple HTML and XHTML parser: html parser — Simple HTML and XHTML parser.
* 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 — Base classes for SAX handlers: xml sax handler — Base classes for SAX handlers.
* 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 — Simple HTML and XHTML parser

* Example HTML Parser Application::
* HTMLParser Methods::
* Exemplos: Exemplos<25>.

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<5>.
* Suporte a XInclude::
* Referência: Referência<6>.

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<22>.

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<23>.

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 — Base classes for SAX handlers

* 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 — HTTP modules::
* http.client — HTTP protocol client: http client — HTTP protocol client.
* ftplib — FTP protocol client::
* poplib — Cliente de protocolo POP3::
* imaplib — IMAP4 protocol client::
* smtplib — SMTP protocol client::
* uuid — Objetos UUID conforme RFC 9562::
* 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

* 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<26>.

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<27>.
* 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 — HTTP modules

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

http.client — HTTP protocol client

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

ftplib — FTP protocol client

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

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 — SMTP protocol client

* Objetos SMTP::
* Exemplo SMTP::

uuid — Objetos UUID conforme RFC 9562

* Uso na linha de comando: Uso na linha de comando<5>.
* 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<29>.

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<5>.
* 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<30>.

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<2>.

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<3>.

Operadores

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

Objetos de interface

* Operadores: Operadores<4>.

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 Arquivo (Console e Editor): Menu Arquivo Console e Editor.
* Edit menu (Shell and Editor): Edit menu Shell and Editor.
* Format menu (Editor window only): Format menu Editor window only.
* 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::
* Automatic indentation::
* Busca e Substituição::
* Completions::
* Calltips::
* Code Context::
* Shell window::
* Text colors::

Startup and Code Execution

* Uso na linha de comando: Uso na linha de comando<6>.
* 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<12>.
* 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::
* Inicie e encerre o preenchimento automaticamente::
* 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 — Unit testing framework::
* 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<4>.
* ABCs e protocolos 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<7>.
* 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 — Unit testing framework

* Exemplo Básico::
* Interface de Linha de Comando: Interface de Linha de Comando<3>.
* 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::
* Dumping the C stack::
* Fault handler state::
* Dumping the tracebacks after a timeout::
* Dumping the traceback on a user signal::
* Issue with file descriptors::
* Exemplo: Exemplo<13>.

Dumping the C stack

* C Stack Compatibility::

pdb — O depurador do Python

* 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<4>.
* Exemplos: Exemplos<31>.

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

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

Uso na linha de comando

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

tracemalloc — Trace memory allocations

* Exemplos: Exemplos<32>.
* 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<6>.
* 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<7>.
* API do Python::
* Exemplos: Exemplos<33>.
* 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::
* annotationlib — Funcionalidade para introspecção de anotações::
* 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::
* Evento descontinuado::
* 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<9>.

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::
* Concurrent safety of Context Managers::

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::
* 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<8>.

annotationlib — Funcionalidade para introspecção de anotações

* Semânticas de anotação::
* Classes: Classes<5>.
* Funções: Funções<12>.
* Receitas: Receitas<3>.
* Limitações do formato STRING::
* Limitações do formato FORWARDREF::
* Security implications of introspecting annotations::

Receitas

* Usando anotações em uma metaclasse::

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<9>.

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<34>.

modulefinder — Procura módulos usados por um script

* Exemplo de uso de ModuleFinder::

importlib — A implementação de import

* Introdução: Introdução<13>.
* Funções: Funções<13>.
* 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<35>.

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::
* Implementando provedores personalizados::

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::

Implementando provedores personalizados

* 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<10>.

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<11>.

tokenize — Tokenizador para código-fonte Python

* Tokenizando entradas::
* Uso na linha de comando: Uso na linha de comando<12>.
* Exemplos: Exemplos<36>.

pyclbr — Suporte a navegador de módulos do Python

* Objetos Function::
* Objetos Class::

py_compile — Compila arquivos fonte do Python

* Interface de Linha de Comando: Interface de Linha de Comando<5>.

compileall — Compilar bibliotecas do Python para bytecode

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

dis — Disassembler de bytecode do Python

* Interface de linha de comando: Interface de linha de comando<10>.
* 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<14>.
* Interface programática: Interface programática<2>.

Uso na linha de comando

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

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<14>.
* 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<37>.

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<14>.
* Estabilidade da API C::
* A camada de nível muito alto::
* Contagem de referências::
* Tratamento de Exceções::
* Definindo módulos de extensão::
* 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

* Compatibilidade com a versão da linguagem::
* 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<24>.
* 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: Tipos<2>.

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::

Tratamento de Exceções

* Impressão e limpeza::
* Lançando exceções::
* Emitindo advertências::
* 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::

Exception and warning types

* Exception types::
* OSError aliases::
* Warning types::

Definindo módulos de extensão

* Várias instâncias de módulo::
* Função de inicialização::
* Inicialização multifásica::
* Inicialização monofásica legada::

Utilitários

* Utilitários do sistema operacional::
* System Functions::
* Process Control::
* 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::
* 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::

API C PyTime

* Tipos: Tipos<3>.
* 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 Função::
* Outros Objetos::

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 Inteiros

* Export API::
* PyLongWriter API::

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 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::
* PyUnicodeWriter::
* Deprecated API::

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 Função

* Objetos Função: Objetos Função<2>.
* 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::
* Module definitions::
* Creating extension modules dynamically::
* Support functions::
* Objetos Iteradores::
* Objetos Descritores::
* Objetos Slice::
* Objetos MemoryView::
* 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 DateTime: Objetos DateTime<2>.
* Objetos de indicação de tipos::

Module definitions

* Module slots::

Support functions

* Module lookup (single-phase initialization): Module lookup single-phase initialization.

Objetos Slice

* Objeto Ellipsis::

Objetos Frame

* Frame Locals Proxies::
* Internal Frames::

Inicialização, finalização e threads

* Antes da inicialização do Python::
* Variáveis de configuração global::
* Inicializando e encerrando o interpretador::
* Process-wide parameters::
* 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>.

Estado de thread e a trava global do interpretador

* Desvinculação do estado de thread do código de extensão::
* Non-Python created threads::
* Supporting subinterpreters in non-Python threads::
* 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::

Configuração de Inicialização do Python

* PyInitConfig C API::
* Configuration Options::
* Runtime Python configuration API::
* PyConfig C API::
* Py_GetArgcArgv(): Py_GetArgcArgv.
* Delaying main module execution::

PyInitConfig C API

* Exemplo: Exemplo<17>.
* Create Config::
* Tratamento de erros: Tratamento de erros<2>.
* Get Options::
* Set Options::
* Module::
* Initialize Python::

PyConfig C API

* Exemplo: Exemplo<18>.
* PyWideStringList::
* PyStatus::
* PyPreConfig::
* Pré-inicializar Python com PyPreConfig::
* PyConfig::
* Initialization with PyConfig::
* Isolated Configuration::
* Configuração do Python::
* Python Path Configuration::

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<38>.

The pymalloc allocator

* Customize pymalloc Arena Allocator::

Suporte a implementação de Objetos

* Alocando objetos na heap::
* Ciclo de vida do objeto::
* Estruturas comuns de objetos::
* Type Object Structures::
* Suporte a Coleta Cíclica de Lixo::

Ciclo de vida do objeto

* Eventos de vida::
* Destruição de isolado cíclico::
* Funções: Funções<15>.

Estruturas comuns de objetos

* Base object types and macros::
* Implementing functions and methods::
* Accessing attributes of extension types::

Accessing attributes of extension types

* Member flags::
* Member types::
* Defining Getters and Setters::

Type Object Structures

* 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<39>.

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::

API e Versionamento de ABI

* Constantes de versão de tempo de construção::
* Versão de tempo de execução::
* Macros de empacotamento de bits::

Gerando eventos de execução

* Gerenciando o Estado de um Monitoramento::

Instalando módulos Python

* Termos chave::
* Uso básico: Uso básico<5>.
* 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 do Python para threads livres::
* Suporte a extensões da API C para threads livres::
* Protocolo de anexação de depuração remota::
* Requisitos de permissão::
* Localizando a estrutura de PyRuntime::
* Lendo _Py_DebugOffsets::
* Localizando o estado de thread e do interpretador::
* Escrevendo informações de controle::
* Resumo: Resumo<2>.

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::
* 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<15>.
* 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::
* Restricted Enum subclassing::
* 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<16>.
* 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<17>.
* 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<2>.
* 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::

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::
* Strategies For Unorderable Types and Values::
* 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<18>.
* Acessando URLs::
* Tratamento de exceções: Tratamento de exceções<2>.
* 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<40>.

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::
* Informações preliminares::
* Fazendo módulos seguros com múltiplos interpretadores::
* Tipos no heap: Tipos no heap<2>.
* Problemas em aberto::

Informações preliminares

* 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<41>.

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<42>.
* Ordens de resolução de métodos ruins::
* O fim::
* Recursos: Recursos<3>.

Suporte do Python para threads livres

* Instalação: Instalação<2>.
* Identificando um Python com threads livres::
* A trava global do interpretador no Python com threads livres::
* Segurança nas threads::
* Limitações conhecidas::
* Mudanças comportamentais::

Limitações conhecidas

* Imortalização::
* Objetos quadro: Objetos quadro<2>.
* Iteradores: Iteradores<3>.
* Desempenho com thread única::

Mudanças comportamentais

* Variáveis de contexto: Variáveis de contexto<2>.
* Filtros de aviso::

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::
* Seções críticas::
* 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::

Seções críticas

* O que são seções críticas?::
* Usando seções críticas::
* Como seções críticas funcionam::
* Prevenção de impasses::
* Considerações importantes::

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?::
* Como remover múltiplos itens de uma lista?::
* 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.15: Remoção pendente no Python 3 15<7>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<7>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<4>.
* Remoção pendente no Python 3.19: Remoção pendente no Python 3 19<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<7>.
* Descontinuações na API C::

Descontinuações na API C

* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<8>.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18<3>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<8>.

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<4>.
* cfuhash::
* libmpdec::
* Conjunto de testes C14N do W3C::
* mimalloc::
* asyncio: asyncio<15>.
* Global Unbounded Sequences (GUS): Global Unbounded Sequences GUS.
* Ligações Zstandard::



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.14: O que há de novo no Python 3 14.
* 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 14,  Next: O que há de novo no Python 3 13,  Up: O que há de novo no Python

1.1 O que há de novo no Python 3.14
===================================


Editores: Adam Turner e Hugo van Kemenade

Este artigo explica os novos recursos no Python 3.14, em comparação com
3.13.  Python 3.14 foi lançado em 7 de outubro de 2025.  Veja *note
changelog: 142. para uma lista completa de mudanças.

Ver também
..........

PEP 745(1) – Cronograma de lançamento do Python 3.14

* Menu:

* Resumo – Destaques da versão::
* Novas funcionalidades::
* Outras mudanças de linguagem::
* Novos módulos::
* Módulos melhorados::
* Otimizações::
* Removidos::
* Descontinuados::
* Alterações de bytecode do CPython::
* Alterações na API C::
* Build changes::
* Portando para o Python 3.14: Portando para o Python 3 14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0745/


File: python.info,  Node: Resumo – Destaques da versão,  Next: Novas funcionalidades,  Up: O que há de novo no Python 3 14

1.1.1 Resumo – Destaques da versão
----------------------------------

Python 3.14 é a versão estável mais recente da linguagem de programação
Python, com uma mistura de alterações na linguagem, na implementação e
na biblioteca padrão.  As maiores mudanças incluem *note literais de
string template: 144, *note avaliação adiada de anotações: 145. e
suporte para *note subinterpretadores: 146. na biblioteca padrão.

As mudanças na biblioteca incluem recursos significativamente melhorados
para *note introspecção no asyncio: 147, *note suporte para Zstandard:
148. por meio de um novo módulo *note compression.zstd: 23, destaque de
sintaxe no REPL, bem como as descontinuações e remoções habituais e
melhorias na facilidade de uso e correção.

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:
149. e *note Referência da Linguagem: 14a.  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.14: 14b.
para orientação sobre atualização a partir de versões anteriores do
Python.

__________________________________________________________________

Melhorias no interpretador:

   * PEP 649(1) e PEP 749(2): *note Avaliação adiada de anotações: 145.

   * PEP 734(3): *note Múltiplos interpretadores na biblioteca padrão:
     146.

   * PEP 750(4): *note Strings template: 144.

   * PEP 758(5): *note Permitir expressões except e except* sem
     parênteses: 14c.

   * PEP 765(6): *note Fluxo de controle em blocos finally: 14d.

   * PEP 768(7): *note Interface de depurador externo segura para
     CPython: 14e.

   * *note Um novo tipo de interpretador: 14f.

   * *note Melhorias no modo com threads livres: 150.

   * *note Mensagens de erro melhoradas: 151.

   * *note Coleta de lixo incremental: 152.

Melhorias significativas na biblioteca padrão:

   * PEP 784(8): *note Suporte ao Zstandard na biblioteca padrão: 148.

   * *note Capacidades de introspecção assíncrona: 147.

   * *note Controle de avisos seguros simultâneos: 153.

   * *note Realce de sintaxe no console interativo padrão: 154. e saída
     colorida em várias CLIs de biblioteca padrão

Melhorias na API C:

   * PEP 741(9): *note API C de configuração do Python: 155.

Suporte à plataforma:

   * PEP 776(10): Emscripten agora é uma *note plataforma oficialmente
     com suporte: 156, no nível 3(11).

Alterações na versão:

   * PEP 779(12): *note Python com threads livres é oficialmente
     suportado: 157.

   * PEP 761(13): *note Assinaturas PGP foram descontinuadas de
     lançamentos oficiais: 158.

   * *note Versões binárias de Windows e macOS agora oferecem suporte ao
     compilador experimental just-in-time: 159.

   * *note Versões binárias para Android são agora fornecidas: 159.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/

   (2) https://peps.python.org/pep-0749/

   (3) https://peps.python.org/pep-0734/

   (4) https://peps.python.org/pep-0750/

   (5) https://peps.python.org/pep-0758/

   (6) https://peps.python.org/pep-0765/

   (7) https://peps.python.org/pep-0768/

   (8) https://peps.python.org/pep-0784/

   (9) https://peps.python.org/pep-0741/

   (10) https://peps.python.org/pep-0776/

   (11) https://peps.python.org/pep-0011/#tier-3

   (12) https://peps.python.org/pep-0779/

   (13) https://peps.python.org/pep-0761/


File: python.info,  Node: Novas funcionalidades,  Next: Outras mudanças de linguagem,  Prev: Resumo – Destaques da versão,  Up: O que há de novo no Python 3 14

1.1.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 649 e PEP 749; Avaliação adiada de anotações: PEP 649 e PEP 749 Avaliação adiada de anotações.
* PEP 734; Múltiplos interpretadores na biblioteca padrão: PEP 734 Múltiplos interpretadores na biblioteca padrão.
* PEP 750; literal de string template: PEP 750 literal de string template.
* PEP 768; Interface segura para depurador externo: PEP 768 Interface segura para depurador externo.
* Um novo tipo de interpretador::
* Melhorias no modo com threads livres::
* Mensagens de erro melhoradas::
* Suporte ao Zstandard na biblioteca padrão::
* Capacidades de introspecção assíncrona::
* Controle de avisos seguros simultâneos::


File: python.info,  Node: PEP 649 e PEP 749 Avaliação adiada de anotações,  Next: PEP 734 Múltiplos interpretadores na biblioteca padrão,  Up: Novas funcionalidades

'PEP 649' e 'PEP 749': Avaliação adiada de anotações

As *note anotações: 15c. em funções, classes e módulos não são mais
avaliados de forma ansiosa.  Em vez disso, as anotações são armazenadas
em uma *note função de anotação: 15d. com propósito especial e avaliadas
somente quando necessário (exceto se ‘from __future__ import
annotations’ for usado).

Essa alteração foi projetada para melhorar o desempenho e usabilidade de
anotações no Python na maioria das circunstâncias.  O custo em tempo de
execução para definir anotação é minimizado, mas continua sendo possível
introspectar anotação em tempo de execução.  Não é mais necessário
incluir anotação em strings se eles contiverem referências futuras.

O novo módulo *note annotationlib: 6. fornece ferramentas para
inspecionar anotação adiada.  A anotação pode ser avaliada nos formatos
*note VALUE: 15e. (que avalia anotações para valores em tempo de
execução, semelhante ao comportamento nas versões anteriores do Python),
*note FORWARDREF: 15f. (que substitui nomes indefinidos por marcadores
especiais) e *note STRING: 160. (que retorna anotações como strings).

Este exemplo mostra como esses formatos se comportam:

     >>> from annotationlib import get_annotations, Format
     >>> def func(arg: Undefined):
     ...     pass
     >>> get_annotations(func, format=Format.VALUE)
     Traceback (most recent call last):
       ...
     NameError: name 'Undefined' is not defined
     >>> get_annotations(func, format=Format.FORWARDREF)
     {'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}
     >>> get_annotations(func, format=Format.STRING)
     {'arg': 'Undefined'}

A seção *note Portando: 161. contém orientações sobre alterações que
podem ser necessárias devido a essas mudanças, embora na maioria dos
casos, o código continuará funcionando como está.

(Contribuição de Jelle Zijlstra em PEP 749(1) e gh-119180(2), PEP 649(3)
foi escrita por Larry Hastings.)

Ver também
..........

PEP 649(4)

     Avaliação adiada de anotações usando descritores

PEP 749(5)

     Implementando a PEP 649

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0749/

   (2) https://github.com/python/cpython/issues/119180

   (3) https://peps.python.org/pep-0649/

   (4) https://peps.python.org/pep-0649/

   (5) https://peps.python.org/pep-0749/


File: python.info,  Node: PEP 734 Múltiplos interpretadores na biblioteca padrão,  Next: PEP 750 literal de string template,  Prev: PEP 649 e PEP 749 Avaliação adiada de anotações,  Up: Novas funcionalidades

'PEP 734': Múltiplos interpretadores na biblioteca padrão

O ambiente de execução do CPython permite a execução simultânea de
várias cópias do Python no mesmo processo há mais de 20 anos.  Cada uma
dessas cópias separadas é chamada de “interpretador”.  No entanto, o
recurso estava disponível apenas por meio da *note API C: 163.

Essa limitação foi removida no Python 3.14, com o novo módulo *note
concurrent.interpreters: 25.

Há pelo menos duas razões importantes pelas quais o uso de múltiplos
interpretadores traz benefícios significativos:

   * eles oferecem suporte a um novo modelo (para Python) de
     simultaneidade, amigável ao ser humano

   * verdadeiro paralelismo multi-core

Para alguns casos de uso, a simultaneidade em software melhora a
eficiência e pode simplificar o design em alto nível.  Ao mesmo tempo,
implementar e manter todos os tipos de simultaneidade, exceto as mais
simples, costuma ser uma luta para o cérebro humano.  Isso se aplica
especialmente a threads simples (por exemplo, *note threading: f3.),
onde toda a memória é compartilhada entre todas as threads.

With multiple isolated interpreters, you can take advantage of a class
of concurrency models, like Communicating Sequential Processes (CSP) or
the actor model, that have found success in other programming languages,
like Smalltalk, Erlang, Haskell, and Go.  Think of multiple interpreters
as threads but with opt-in sharing.

Sobre o paralelismo multinúcleo: a partir do Python 3.12, os
interpretadores agora estão suficientemente isolados uns dos outros para
serem usados em paralelo (veja PEP 684(1)).  Isso destrava uma variedade
de casos de uso intensivos de CPU para Python que eram limitados pela
*note GIL: 164.

O uso de múltiplos interpretadores é semelhante em muitos aspectos ao
*note multiprocessing: 98, pois ambos fornecem “processos” lógicos
isolados que podem ser executados em paralelo, sem compartilhamento por
padrão.  No entanto, ao usar múltiplos interpretadores, uma aplicação
usará menos recursos do sistema e operará com mais eficiência (já que
permanece dentro do mesmo processo).  Pense em múltiplos interpretadores
como se tivessem o isolamento de processos com a eficiência de threads.

While the feature has been around for decades, multiple interpreters
have not been used widely, due to low awareness and the lack of a
standard library module.  Consequently, they currently have several
notable limitations, which are expected to improve significantly now
that the feature is going mainstream.

Limitações atuais:

   * iniciar cada interpretador ainda não foi otimizado

   * cada interpretador usa mais memória do que o necessário (o trabalho
     continua no compartilhamento interno extensivo entre
     interpretadores)

   * não há muitas opções 'ainda' para realmente compartilhar objetos ou
     outros dados entre interpretadores (além de *note memoryview: 165.)

   * muitos módulos de extensão de terceiros no PyPI ainda não são
     compatíveis com múltiplos interpretadores (os módulos de extensão
     de biblioteca padrão 'são' compatíveis)

   * a abordagem para escrever aplicações que usam vários
     interpretadores isolados é, em grande parte, desconhecida para
     usuários do Python, por enquanto

O impacto dessas limitações dependerá de futuras melhorias no CPython,
do uso dos interpretadores e do que a comunidade resolver por meio dos
pacotes PyPI. Dependendo do caso de uso, as limitações podem não ter
muito impacto, então experimente!

Além disso, versões futuras do CPython reduzirão ou eliminarão a
sobrecarga e fornecerão utilitários menos apropriados no PyPI. Enquanto
isso, a maioria das limitações também pode ser solucionada por meio de
módulos de extensão, o que significa que os pacotes do PyPI podem
preencher qualquer lacuna da versão 3.14 e até mesmo da versão 3.12,
onde os interpretadores foram finalmente isolados adequadamente e
pararam de compartilhar a *note GIL: 164.  Da mesma forma, espera-se que
bibliotecas no PyPI surjam para abstrações de alto nível sobre os
interpretadores.

Em relação aos módulos de extensão, estamos trabalhando para atualizar
alguns projetos PyPI, bem como ferramentas como Cython, pybind11,
nanobind e PyO3.  As etapas para isolar um módulo de extensão podem ser
encontradas em *note Isolando módulos de extensão: 166.  O isolamento de
um módulo tem muitas sobreposições com o que é necessário para oferecer
suporte a *note threads livres: 150, portanto, o trabalho contínuo da
comunidade nessa área ajudará a acelerar o suporte a múltiplos
interpretadores.

Também adicionado no 3.14: *note
concurrent.futures.InterpreterPoolExecutor: 167.

(Contribuição de Eric Snow em gh-134939(2))

Ver também
..........

PEP 734(3)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0684/

   (2) https://github.com/python/cpython/issues/134939

   (3) https://peps.python.org/pep-0734/


File: python.info,  Node: PEP 750 literal de string template,  Next: PEP 768 Interface segura para depurador externo,  Prev: PEP 734 Múltiplos interpretadores na biblioteca padrão,  Up: Novas funcionalidades

'PEP 750': literal de string template

Strings template são um novo mecanismo para processamento personalizado
de strings.  Elas compartilham a sintaxe familiar das f-strings, mas,
diferentemente das f-strings, retornam um objeto que representa as
partes estáticas e interpoladas da string, em vez de um simples *note
str: 169.

Para escrever uma t-string, use um prefixo ‘'t'’ em vez de ‘'f'’:

     >>> variety = 'Stilton'
     >>> template = t'Experimente um pouco de queijo {variety}!'
     >>> type(template)
     <class 'string.templatelib.Template'>

Objetos *note Template: 16a. fornecem acesso às partes estáticas e
interpoladas (entre chaves) de uma string 'antes' de serem combinadas.
Itere sobre instâncias de ‘Template’ para acessar suas partes em ordem:

     >>> list(template)
     ['Experimente um pouco de queijo ', Interpolation('Stilton', 'variety', None, ''), '!']

É fácil escrever (ou chamar) código para processar instâncias de
‘Template’.  Por exemplo, aqui está uma função que renderiza partes
estáticas em minúsculas e instâncias de *note Interpolation: 16b. em
maiúsculas:

     from string.templatelib import Interpolation

     def lower_upper(template):
         """Render static parts lowercase and interpolations uppercase."""
         parts = []
         for part in template:
             if isinstance(part, Interpolation):
                 parts.append(str(part.value).upper())
             else:
                 parts.append(part.lower())
         return ''.join(parts)

     name = 'Wenslydale'
     template = t'Mister {name}'
     assert lower_upper(template) == 'mister WENSLYDALE'

Como as instâncias de ‘Template’ distinguem entre strings estáticas e
interpolações em tempo de execução, elas podem ser úteis para sanitizar
a entrada do usuário.  Escrever uma função ‘html()’ que escape a entrada
do usuário em HTML é um exercício deixado para o leitor!  O código de
processamento de template pode proporcionar maior flexibilidade.  Por
exemplo, uma função ‘html()’ mais avançada poderia aceitar um ‘dict’ de
atributos HTML diretamente no template:

     attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}
     template = t'<img {attributes}>'
     assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'

É claro que o código de processamento de template não precisa retornar
um resultado semelhante a uma string.  Uma função ‘html()’ ainda 'mais'
avançada poderia retornar um tipo personalizado representando uma
estrutura semelhante a um DOM.

Com t-strings, os desenvolvedores podem escrever sistemas higienizam
SQL, fazer operações de shell seguras, melhorar o registro, abordar
ideias modernas em desenvolvimento web (HTML, CSS e assim por diante) e
implementar DSLs comerciais leves e personalizadas.

(Contribuição de Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono,
Lysandros Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt
Tran e Pablo Galindo Salgado em gh-132661(1).)

Ver também
..........

PEP 750(2).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132661

   (2) https://peps.python.org/pep-0750/


File: python.info,  Node: PEP 768 Interface segura para depurador externo,  Next: Um novo tipo de interpretador,  Prev: PEP 750 literal de string template,  Up: Novas funcionalidades

'PEP 768': Interface segura para depurador externo

O Python 3.14 introduz uma interface de depuração sem sobrecarga que
permite que depuradores e perfiladores se conectem com segurança a
processos Python em execução sem interrompê-los ou reiniciá-los.  Esta é
uma melhoria significativa nos recursos de depuração do Python, o que
significa que alternativas inseguras não são mais necessárias.

A nova interface fornece pontos de execução seguros para anexar código
do depurador sem modificar o caminho de execução normal do interpretador
ou adicionar qualquer sobrecarga em tempo de execução.  Graças a isso,
as ferramentas agora podem inspecionar e interagir com aplicações Python
em tempo real, um recurso crucial para sistemas de alta disponibilidade
e ambientes de produção.

Por conveniência, essa interface é implementada na função *note
sys.remote_exec(): 16d.  Por exemplo:

     import sys
     from tempfile import NamedTemporaryFile

     with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
         script_path = f.name
         f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')

     # Executa no processo com PID 1234
     print('Behold! An offering:')
     sys.remote_exec(1234, script_path)

Esta função permite o envio de código Python para ser executado em um
processo de destino no próximo ponto de execução seguro.  No entanto, os
autores da ferramenta também podem implementar o protocolo diretamente,
conforme descrito na PEP, que detalha os mecanismos subjacentes usados
para anexar com segurança a processos em execução.

A interface de depuração foi cuidadosamente projetada com a segurança em
mente e inclui vários mecanismos para controlar o acesso:

   * Uma variável de ambiente *note PYTHON_DISABLE_REMOTE_DEBUG: 16e.

   * Uma opção de linha de comando *note -X disable-remote-debug: 16f.

   * Um sinalizador de configuração *note -without-remote-debug: 170.
     para desabilitar completamente o recurso no momento da construção.

(Contribuição de Pablo Galindo Salgado, Matt Wozniski e Ivona Stojanovic
em gh-131591(1).)

Ver também
..........

PEP 768(2).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131591

   (2) https://peps.python.org/pep-0768/


File: python.info,  Node: Um novo tipo de interpretador,  Next: Melhorias no modo com threads livres,  Prev: PEP 768 Interface segura para depurador externo,  Up: Novas funcionalidades

1.1.2.5 Um novo tipo de interpretador
.....................................

Um novo tipo de interpretador foi adicionado ao CPython.  Ele utiliza
chamadas de cauda entre pequenas funções C que implementam opcodes
Python individuais, em vez de uma única instrução ‘case’ C. Para alguns
compiladores mais recentes, este interpretador oferece desempenho
significativamente melhor.  Benchmarks preliminares sugerem uma média
geométrica de 3 a 5% mais rápida no conjunto de benchmarks padrão
‘pyperformance’, dependendo da plataforma e da arquitetura.  A linha de
base é o Python 3.14, construído com o Clang 19, sem este novo
interpretador.

This interpreter currently only works with Clang 19 and newer on x86-64
and AArch64 architectures.  However, a future release of GCC is expected
to support this as well.

Este recurso é opcional por enquanto.  É altamente recomendável
habilitar a otimização guiada por perfil ao usar o novo interpretador,
pois é a única configuração testada e validada para melhorar o
desempenho.  Para mais informações, consulte *note
-with-tail-call-interp: 172.

     Nota: Isso não deve ser confundido com a otimização de chamada de
     cauda(1) de funções Python, que atualmente não está implementada no
     CPython.

     Este novo tipo de interpretador é um detalhe de implementação
     interna do interpretador CPython.  Ele não altera em nada o
     comportamento visível dos programas Python.  Pode melhorar o
     desempenho deles, mas não altera nada mais.

(Contribuição de Ken Jin em gh-128563(2), com ideias sobre como
implementar isso em CPython por Mark Shannon, Garrett Gu, Haoran Xu e
Josh Haberman.)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Tail_call

   (2) https://github.com/python/cpython/issues/128563


File: python.info,  Node: Melhorias no modo com threads livres,  Next: Mensagens de erro melhoradas,  Prev: Um novo tipo de interpretador,  Up: Novas funcionalidades

1.1.2.6 Melhorias no modo com threads livres
............................................

O modo de threads livres do CPython ( PEP 703(1)), adicionado
inicialmente na versão 3.13, foi significativamente aprimorado no Python
3.14.  A implementação descrita no PEP 703 foi concluída, incluindo
alterações na API C, e soluções temporárias no interpretador foram
substituídas por soluções mais permanentes.  O interpretador adaptativo
especializado ( PEP 659(2)) agora está habilitado no modo de threads
livres, o que, juntamente com muitas outras otimizações, melhora
significativamente seu desempenho.  A perda de desempenho em código de
thread única no modo de threads livres agora é de aproximadamente 5 a
10%, dependendo da plataforma e do compilador C utilizados.

A partir do Python 3.14, ao compilar módulos de extensão para a
construção do CPython com threads livres no Windows, a variável de
pré-processador ‘Py_GIL_DISABLED’ agora precisa ser especificada pelo
backend de construção, pois não será mais determinada automaticamente
pelo compilador C. Para um interpretador em execução, a configuração
usada em tempo de compilação pode ser encontrada usando *note
sysconfig.get_config_var(): 174.

O novo sinalizador *note -X context_aware_warnings: 16f. controla se o
*note controle de avisos seguros concorrentes: 153. está habilitado.  O
sinalizador padrão é true para a construção com threads livres e false
para a construção com a GIL habilitada.

Um novo sinalizador *note thread_inherit_context: 175. foi adicionado, o
que, se habilitado, significa que threads criadas com *note
threading.Thread: 176. iniciam com uma cópia de *note Context(): 177. do
chamador de *note start(): 178.  Mais significativamente, isso faz com
que o contexto de filtragem de avisos estabelecido por *note
catch_warnings: 179. seja “herdado” por threads (ou tarefas assíncronas)
iniciadas dentro desse contexto.  Isso também afeta outros módulos que
usam variáveis ​​de contexto, como o gerenciador de contexto *note
decimal: 3a.  Este sinalizador assume como padrão true para a construção
com threads livres e false para a construção com a GIL habilitada.

(Contribuição de Sam Gross, Matt Page, Neil Schemenauer, Thomas Wouters,
Donghee Na, Kirill Podoprigora, Ken Jin, Itamar Oren, Brett Simmers,
Dino Viehland, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou, Kumar
Aditya, Edgar Margffoy e muitos outros.  Alguns desses colaboradores são
funcionários da Meta, que continuou a fornecer recursos de engenharia
significativos para dar suporte a este projeto.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/

   (2) https://peps.python.org/pep-0659/


File: python.info,  Node: Mensagens de erro melhoradas,  Next: Suporte ao Zstandard na biblioteca padrão,  Prev: Melhorias no modo com threads livres,  Up: Novas funcionalidades

1.1.2.7 Mensagens de erro melhoradas
....................................

   * O interpretador agora fornece sugestões úteis ao detectar erros de
     digitação em palavras reservadas do Python.  Ao encontrar uma
     palavra que se assemelha muito a uma palavra reservada do Python, o
     interpretador sugere a palavra reservada correta na mensagem de
     erro.  Esse recurso ajuda os programadores a identificar e corrigir
     rapidamente erros comuns de digitação.  Por exemplo:

          >>> whille True:
          ...     pass
          Traceback (most recent call last):
            File "<stdin>", line 1
              whille True:
              ^^^^^^
          SyntaxError: invalid syntax. Did you mean 'while'?

     Embora o recurso se concentre nos casos mais comuns, algumas
     variações de erros ortográficos ainda podem resultar em erros de
     sintaxe comuns.  (Contribuição de Pablo Galindo em gh-132449(1).)

   * Instruções *note elif: 17b. que seguem um bloco *note else: 17c.
     agora têm uma mensagem de erro específica.  (Contribuição de Steele
     Farnsworth em gh-129902(2).)

          >>> if who == "eu":
          ...     print("Sou eu!")
          ... else:
          ...     print("Não sou eu!")
          ... elif who is None:
          ...     print("Quem é?")
          File "<stdin>", line 5
            elif who is None:
            ^^^^
          SyntaxError: 'elif' block follows an 'else' block

   * Se uma instrução for passada para *note Expressões condicionais:
     17d. após *note else: 17c, ou uma dentre *note pass: 17e, *note
     break: 17f. ou *note continue: 180. for passada antes de *note if:
     181, a mensagem de erro destacará onde a *note expressão: 182. é
     necessária.  (Contribuição de Sergey Miryanov em gh-129515(3).)

          >>> x = 1 if True else pass
          Traceback (most recent call last):
            File "<string>", line 1
              x = 1 if True else pass
                                 ^^^^
          SyntaxError: expected expression after 'else', but statement is given

          >>> x = continue if True else break
          Traceback (most recent call last):
            File "<string>", line 1
              x = continue if True else break
                  ^^^^^^^^
          SyntaxError: expected expression before 'if', but statement is given

   * Quando strings fechadas incorretamente são detectadas, a mensagem
     de erro sugere que pode ser que a intenção era a string ser parte
     da string.  (Contribuição de Pablo Galindo em gh-88535(4).)

          >>> "O objeto interessante "O objeto interessante" é muito importante"
          Traceback (most recent call last):
          SyntaxError: invalid syntax. Is this intended to be part of the string?

   * Quando strings têm prefixos incompatíveis, o erro agora mostra
     quais prefixos são incompatíveis.  (Contribuição de Nikita Sobolev
     em gh-133197(5).)

          >>> ub'abc'
            File "<python-input-0>", line 1
              ub'abc'
              ^^
          SyntaxError: 'u' and 'b' prefixes are incompatible

   * Mensagens de erro aprimoradas ao usar ‘as’ com alvos incompatíveis
     em:

        - Importações: ‘import ... as ...’

        - Importações “from”: ‘from ... import ... as ...’

        - Manipuladores “except”: ‘except ... as ...’

        - Casos de correspondência de padrão: ‘case ... as ...’

     (Contribuição de Nikita Sobolev in gh-123539(6), gh-123562(7) e
     gh-123440(8).)

   * Mensagem de erro aprimorada ao tentar adicionar uma instância de um
     tipo não-hasheável a um *note dict: 183. ou *note set: 184.
     (Contribuição de CF Bolz-Tereick e Victor Stinner em gh-132828(9).)

          >>> s = set()
          >>> s.add({'pages': 12, 'grade': 'A'})
          Traceback (most recent call last):
            File "<python-input-1>", line 1, in <module>
              s.add({'pages': 12, 'grade': 'A'})
              ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          TypeError: cannot use 'dict' as a set element (unhashable type: 'dict')
          >>> d = {}
          >>> l = [1, 2, 3]
          >>> d[l] = 12
          Traceback (most recent call last):
            File "<python-input-4>", line 1, in <module>
              d[l] = 12
              ~^^^
          TypeError: cannot use 'list' as a dict key (unhashable type: 'list')

   * Melhoria na mensagem de erro quando um objeto que oferece suporte
     ao protocolo do gerenciador de contexto síncrono é inserido usando
     *note async with: 185. em vez de *note with: 186, e vice-versa para
     o protocolo do gerenciador de contexto assíncrono.  (Contribuição
     de Bénédikt Tran em gh-128398(10).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132449

   (2) https://github.com/python/cpython/issues/129902

   (3) https://github.com/python/cpython/issues/129515

   (4) https://github.com/python/cpython/issues/88535

   (5) https://github.com/python/cpython/issues/133197

   (6) https://github.com/python/cpython/issues/123539

   (7) https://github.com/python/cpython/issues/123562

   (8) https://github.com/python/cpython/issues/123440

   (9) https://github.com/python/cpython/issues/132828

   (10) https://github.com/python/cpython/issues/128398


File: python.info,  Node: Suporte ao Zstandard na biblioteca padrão,  Next: Capacidades de introspecção assíncrona,  Prev: Mensagens de erro melhoradas,  Up: Novas funcionalidades

1.1.2.8 Suporte ao Zstandard na biblioteca padrão
.................................................

O novo pacote ‘compression’ contém os módulos ‘compression.lzma’,
‘compression.bz2’, ‘compression.gzip’ e ‘compression.zlib’, que
reexportam os módulos *note lzma: 8e, *note bz2: 14, *note gzip: 6b. e
*note zlib: 139, respectivamente.  Os novos nomes de importação em
‘compression’ são os nomes preferidos para a importação desses módulos
de compactação no Python 3.14.  No entanto, os nomes dos módulos
existentes não foram descontinuados.  Qualquer descontinuação ou remoção
dos módulos de compressão existentes ocorrerá no mínimo cinco anos após
o lançamento da versão 3.14.

O novo módulo ‘compression.zstd’ fornece APIs de compactação e
descompactação para o formato Zstandard por meio de ligações à
biblioteca zstd da Meta(1).  O Zstandard é um formato de compactação
amplamente adotado, altamente eficiente e rápido.  Além das APIs
introduzidas em ‘compression.zstd’, o suporte para leitura e gravação de
arquivos compactados do Zstandard foi adicionado aos módulos *note
tarfile: e4, *note zipfile: 137. e *note shutil: ca.

Aqui está um exemplo de uso do novo módulo para compactar alguns dados:

     from compression import zstd
     import math

     data = str(math.pi).encode() * 20
     compressed = zstd.compress(data)
     ratio = len(compressed) / len(data)
     print(f"Achieved compression ratio of {ratio}")

Como pode ser visto, a API é semelhante às APIs dos módulos ‘lzma’ e
‘bz2’.

(Contribuição de Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas
Roun, Victor Stinner e Rogdham em gh-132983(2).)

Ver também
..........

PEP 784(3).

   ---------- Footnotes ----------

   (1) https://facebook.github.io/zstd/

   (2) https://github.com/python/cpython/issues/132983

   (3) https://peps.python.org/pep-0784/


File: python.info,  Node: Capacidades de introspecção assíncrona,  Next: Controle de avisos seguros simultâneos,  Prev: Suporte ao Zstandard na biblioteca padrão,  Up: Novas funcionalidades

1.1.2.9 Capacidades de introspecção assíncrona
..............................................

Foi adicionada uma nova interface de linha de comando para inspecionar
processos Python em execução usando tarefas assíncronas, disponível via
‘python -m asyncio ps PID’ ou ‘python -m asyncio pstree PID’.

O subcomando ‘ps’ inspeciona o ID do processo (PID) fornecido e exibe
informações sobre as tarefas assíncronas em execução.  Ela gera uma
tabela de tarefas: uma lista simples de todas as tarefas, seus nomes,
suas pilhas de corrotinas e quais tarefas as aguardam.

O subcomando ‘pstree’ busca as mesmas informações, mas em vez disso
renderiza uma árvore de chamadas assíncrona visual, mostrando os
relacionamentos das corrotinas em um formato hierárquico.  Este comando
é particularmente útil para depurar programas assíncronos de longa
duração ou travados.  Ele pode ajudar os desenvolvedores a identificar
rapidamente onde um programa está bloqueado, quais tarefas estão
pendentes e como as corrotinas estão encadeadas.

Por exemplo, dado este código:

     import asyncio

     async def play_track(track):
         await asyncio.sleep(5)
         print(f'🎵 Finished: {track}')

     async def play_album(name, tracks):
         async with asyncio.TaskGroup() as tg:
             for track in tracks:
                 tg.create_task(play_track(track), name=track)

     async def main():
         async with asyncio.TaskGroup() as tg:
             tg.create_task(
               play_album('Sundowning', ['TNDNBTG', 'Levitate']),
               name='Sundowning')
             tg.create_task(
               play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
               name='TMBTE')

     if __name__ == '__main__':
         asyncio.run(main())

Executar a nova ferramenta no processo em execução produzirá uma tabela
como esta:

     python -m asyncio ps 12345

     tid        task id              task name            coroutine stack                                    awaiter chain                                      awaiter name    awaiter id
     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     1935500    0x7fc930c18050       Task-1               TaskGroup._aexit -> TaskGroup.__aexit__ -> main                                                                       0x0
     1935500    0x7fc930c18230       Sundowning           TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
     1935500    0x7fc93173fa50       TMBTE                TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
     1935500    0x7fc93173fdf0       TNDNBTG              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
     1935500    0x7fc930d32510       Levitate             sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
     1935500    0x7fc930d32890       DYWTYLM              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50
     1935500    0x7fc93161ec30       Aqua Regia           sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50

ou uma árvore como esta:

     python -m asyncio pstree 12345

     └── (T) Task-1
         └──  main example.py:13
             └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                 └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                     ├── (T) Sundowning
                     │   └──  album example.py:8
                     │       └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                     │           └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                     │               ├── (T) TNDNBTG
                     │               │   └──  play example.py:4
                     │               │       └──  sleep Lib/asyncio/tasks.py:702
                     │               └── (T) Levitate
                     │                   └──  play example.py:4
                     │                       └──  sleep Lib/asyncio/tasks.py:702
                     └── (T) TMBTE
                         └──  album example.py:8
                             └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                                 └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                                     ├── (T) DYWTYLM
                                     │   └──  play example.py:4
                                     │       └──  sleep Lib/asyncio/tasks.py:702
                                     └── (T) Aqua Regia
                                         └──  play example.py:4
                                             └──  sleep Lib/asyncio/tasks.py:702

Se um ciclo for detectado no grafo async await (o que pode indicar um
problema de programação), a ferramenta levanta um erro e lista os
caminhos de ciclo que impedem a construção da árvore:

     python -m asyncio pstree 12345

     ERROR: await-graph contains cycles - cannot print a tree!

     cycle: Task-2 → Task-3 → Task-2

(Contribuição de Pablo Galindo, Łukasz Langa, Yury Selivanov e Marta
Gomez Macias em gh-91048(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91048


File: python.info,  Node: Controle de avisos seguros simultâneos,  Prev: Capacidades de introspecção assíncrona,  Up: Novas funcionalidades

1.1.2.10 Controle de avisos seguros simultâneos
...............................................

O gerenciador de contexto *note warnings.catch_warnings: 179. agora
usará opcionalmente uma variável de contexto para filtros de aviso.
Isso é habilitado definindo o sinalizador *note context_aware_warnings:
18a, seja com a opção de linha de comando ‘-X’ ou com uma variável de
ambiente.  Isso fornece controle previsível de avisos ao usar *note
catch_warnings: 179. combinado com múltiplas threads ou tarefas
assíncronas.  O sinalizador padrão é true para a construção com threads
livres e false para a construção com GIL habilitada.

(Contribuição de Neil Schemenauer e Kumar Aditya em gh-130010(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130010


File: python.info,  Node: Outras mudanças de linguagem,  Next: Novos módulos,  Prev: Novas funcionalidades,  Up: O que há de novo no Python 3 14

1.1.3 Outras mudanças de linguagem
----------------------------------

   * Todas as páginas de código do Windows agora são suportadas como
     codecs ‘cpXXX’ no Windows.  (Contribuição de Serhiy Storchaka em
     gh-123803(1).)

   * Implementa regras aritméticas de modo misto combinando números
     reais e complexos, conforme especificado pelo C padrão desde C99.
     (Contribuição de Sergey B Kirpichev em gh-69639(2).)

   * Mais erros de sintaxe agora são detectados, independentemente da
     otimização e da opção de linha de comando *note -O: 18c.  Isso
     inclui escritas no ‘__debug__’, uso incorreto de *note await: 18d.
     e compreensões assíncronas fora de funções assíncronas.  Por
     exemplo, ‘python -O -c 'assert (__debug__ := 1)'’ ou ‘python -O -c
     'assert await 1'’ agora produzem *note SyntaxError: 18e.s.
     (Contribuição de Irit Katriel e Jelle Zijlstra em gh-122245(3) e
     gh-121637(4).)

   * Ao criar uma subclasse de um tipo C puro, os slots C para o novo
     tipo não são mais substituídos por uma versão encapsulada na
     criação da classe, caso não sejam explicitamente substituídos na
     subclasse.  (Contribuição de Tomasz Pytel em gh-132284(5).)

* Menu:

* Embutidos::
* Linha de comando e ambiente::
* PEP 758; permite expressões except e except* sem parênteses: PEP 758 permite expressões except e except* sem parênteses.
* PEP 765; Fluxo de controle em blocos finally: PEP 765 Fluxo de controle em blocos finally.
* Coleta de lixo incremental::
* Console interativo padrão::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123803

   (2) https://github.com/python/cpython/issues/69639

   (3) https://github.com/python/cpython/issues/122245

   (4) https://github.com/python/cpython/issues/121637

   (5) https://github.com/python/cpython/issues/132284


File: python.info,  Node: Embutidos,  Next: Linha de comando e ambiente,  Up: Outras mudanças de linguagem

1.1.3.1 Embutidos
.................

   * Os métodos *note bytes.fromhex(): 190. e *note bytearray.fromhex():
     191. agora aceitam objetos ASCII *note bytes: 192. e *note
     similares: 193.  (Contribuição de Daniel Pope em gh-129349(1).)

   * Adiciona os métodos de classe *note float.from_number(): 194. e
     *note complex.from_number(): 195. para converter um número para o
     tipo *note float: 196. ou *note complex: 197, respectivamente.
     Eles levantam um *note TypeError: 198. se o argumento não for um
     número real.  (Contribuição de Serhiy Storchaka em gh-84978(2).)

   * Suporte para sublinhado e vírgula como separadores de milhares na
     parte fracionária para tipos de apresentação de ponto flutuante do
     novo estilo de formatação de string (com *note format(): 199. ou
     *note Literais de strings formatadas: 19a.).  (Contribuição de
     Sergey B Kirpichev em gh-87790(3).)

   * A função *note int(): 19b. não delega mais para *note __trunc__():
     19c.  Classes que desejam oferecer suporte a conversão para ‘int()’
     devem implementar *note __int__(): 19d. ou *note __index__(): 19e.
     (Contribuição de Mark Dickinson em gh-119743(4).)

   * A função *note map(): 19f. agora possui um sinalizador
     somente-nomeado opcional 'strict', como *note zip(): 1a0, para
     verificar se todos os iteráveis têm o mesmo comprimento.
     (Contribuição de Wannes Boeykens em gh-119793(5).)

   * O tipo *note memoryview: 165. agora oferece suporte a subscrição,
     tornando-o um *note tipo genérico: 1a1.  (Contribuição de Brian
     Schubert em gh-126012(6).)

   * Usa *note NotImplemented: 1a2. em um contexto booleano agora
     levantará *note TypeError: 198.  Isso levanta *note
     DeprecationWarning: 1a3. desde o Python 3.9.  (Contribuição de
     Jelle Zijlstra em gh-118767(7).)

   * *note pow(): 1a4. de três argumentos agora tenta chamar *note
     __rpow__(): 1a5. se necessário.  Anteriormente, ele só era chamado
     em ‘pow()’ de dois argumentos e no operador binário de potência.
     (Contribuição de Serhiy Storchaka em gh-130104(8).)

   * Os objetos *note super: 1a6. agora são *note copiáveis: 29. e *note
     serializáveis com pickle: ab.  (Contribuição de Serhiy Storchaka em
     gh-125767(9).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129349

   (2) https://github.com/python/cpython/issues/84978

   (3) https://github.com/python/cpython/issues/87790

   (4) https://github.com/python/cpython/issues/119743

   (5) https://github.com/python/cpython/issues/119793

   (6) https://github.com/python/cpython/issues/126012

   (7) https://github.com/python/cpython/issues/118767

   (8) https://github.com/python/cpython/issues/130104

   (9) https://github.com/python/cpython/issues/125767


File: python.info,  Node: Linha de comando e ambiente,  Next: PEP 758 permite expressões except e except* sem parênteses,  Prev: Embutidos,  Up: Outras mudanças de linguagem

1.1.3.2 Linha de comando e ambiente
...................................

   * O sinalizador de tempo de importação agora pode rastrear módulos já
     carregados (‘em cache’), por meio da nova opção *note -X
     importtime=2: 16f.  Quando um módulo desse tipo é importado, os
     tempos ‘self’ e ‘cumulative’ são substituídos pela string ‘cached’.

     Valores acima de ‘2’ para ‘-X importtime’ agora são reservados para
     uso futuro.

     (Contribuição de Noah Kim e Adam Turner em gh-118655(1).)

   * A opção de linha de comando *note -c: 1a8. agora recua
     automaticamente seu argumento de código antes da execução.  O
     comportamento de dedentação automática espelha *note
     textwrap.dedent(): 1a9.  (Contribuição de Jon Crall e Steven Sun em
     gh-103998(2).)

   * ‘-J’ não é mais um sinalizador reservado para Jython(3) e agora não
     tem nenhum significado especial.  (Contribuição de Adam Turner em
     gh-133336(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118655

   (2) https://github.com/python/cpython/issues/103998

   (3) https://www.jython.org/

   (4) https://github.com/python/cpython/issues/133336


File: python.info,  Node: PEP 758 permite expressões except e except* sem parênteses,  Next: PEP 765 Fluxo de controle em blocos finally,  Prev: Linha de comando e ambiente,  Up: Outras mudanças de linguagem

1.1.3.3 PEP 758: permite expressões ‘except’ e ‘except*’ sem parênteses
.......................................................................

As expressões *note except: 1ab. e *note except*: 1ac. agora permitem a
omissão de parênteses quando há vários tipos de exceção e a cláusula
‘as’ não é usada.  Por exemplo:

     try:
         connect_to_server()
     except TimeoutError, ConnectionRefusedError:
         print('A rede deixou de ser!')

(Contribuição de Pablo Galindo e Brett Cannon em PEP 758(1) e
gh-131831(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0758/

   (2) https://github.com/python/cpython/issues/131831


File: python.info,  Node: PEP 765 Fluxo de controle em blocos finally,  Next: Coleta de lixo incremental,  Prev: PEP 758 permite expressões except e except* sem parênteses,  Up: Outras mudanças de linguagem

1.1.3.4 PEP 765: Fluxo de controle em blocos ‘finally’
......................................................

O compilador agora emite uma *note SyntaxWarning: 1ae. quando uma
instrução *note return: 1af, *note break: 17f. ou *note continue: 180.
tem efeito ao sair de um bloco *note finally: 1b0.  Essa alteração é
especificada na PEP 765(1).

Em situações em que essa alteração é inconveniente (como aquelas em que
os avisos são redundantes devido à verificação de código), o *note
filtro de avisos: 1b1. pode ser usado para desativar todos os avisos de
sintaxe adicionando ‘ignore::SyntaxWarning’ como filtro.  Isso pode ser
especificado em combinação com um filtro que converte outros avisos em
erros (por exemplo, passando ‘-Werror -Wignore::SyntaxWarning’ como
opções da CLI ou definindo
‘PYTHONWARNINGS=error,ignore::SyntaxWarning’).

Observe que a aplicação desse filtro em tempo de execução usando o
módulo *note warnings: 118. só suprimirá o aviso no código compilado
'após' o ajuste do filtro.  O código compilado antes do ajuste do filtro
(por exemplo, quando um módulo é importado) ainda emitirá o aviso de
sintaxe.

(Contribuição de Irit Katriel em gh-130080(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0765/

   (2) https://github.com/python/cpython/issues/130080


File: python.info,  Node: Coleta de lixo incremental,  Next: Console interativo padrão,  Prev: PEP 765 Fluxo de controle em blocos finally,  Up: Outras mudanças de linguagem

1.1.3.5 Coleta de lixo incremental
..................................

O coletor de lixo cíclico agora é incremental.  Isso significa que os
tempos máximos de pausa são reduzidos em uma ordem de magnitude ou mais
para heaps maiores.

Agora existem apenas duas gerações: jovem e velha.  Quando *note
gc.collect(): 1b3. não é chamado diretamente, o coletor de lixo é
invocado com um pouco menos de frequência.  Quando invocado, ele coleta
a geração jovem e um incremento da geração antiga, em vez de coletar uma
ou mais gerações.

O comportamento de ‘gc.collect()’ muda ligeiramente:

   * ‘gc.collect(1)’: Executa um incremento da coleta de lixo, em vez de
     coletar a geração 1.

   * Outras chamadas para ‘gc.collect()’ não foram alteradas.

(Contribuição de Mark Shannon em gh-108362(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108362


File: python.info,  Node: Console interativo padrão,  Prev: Coleta de lixo incremental,  Up: Outras mudanças de linguagem

1.1.3.6 Console interativo padrão
.................................

   * O console *note interativo: 1b5. padrão agora realça a sintaxe
     Python.  O recurso é habilitado por padrão, exceto se *note
     PYTHON_BASIC_REPL: 1b6. ou qualquer outra variável de ambiente que
     desabilite cores estiver definida.  Consulte *note Controlando
     cores: 1b7. para obter detalhes.

     O tema de cores padrão para realce de sintaxe busca um bom
     contraste e usa exclusivamente os códigos de cores ANSI padrão VGA
     de 4 bits para obter a máxima compatibilidade.  O tema pode ser
     personalizado com o uso de uma API experimental
     ‘_colorize.set_theme()’.  Isso pode ser chamado interativamente ou
     no script *note PYTHONSTARTUP: 1b8.  Observe que esta função tem
     nenhuma garantia de estabilidade e pode ser alterada ou removida.

     (Contribuição de Łukasz Langa em gh-131507(1).)

   * O console *note interativo: 1b5. padrão agora oferece suporte ao
     preenchimento automático de importação.  Isso significa que digitar
     ‘import co’ e pressionar ‘<Tab>’ vai sugerir módulos que começam
     com ‘co’.  Da mesma forma, digitar ‘from concurrent import i’ vai
     sugerir submódulos de ‘concurrent’ que começam com ‘i’.  Observe
     que o preenchimento automático de atributos de módulo não é
     suportado atualmente.  (Contribuição de Tomas Roun em gh-69605(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131507

   (2) https://github.com/python/cpython/issues/69605


File: python.info,  Node: Novos módulos,  Next: Módulos melhorados,  Prev: Outras mudanças de linguagem,  Up: O que há de novo no Python 3 14

1.1.4 Novos módulos
-------------------

   * *note annotationlib: 6.: Para introspecção de *note anotações: 15c.
     Veja >>:pep:'PEP 749 <whatsnew314-deferred-annotations>'<< para
     mais detalhes.  (Contribuição de Jelle Zijlstra em gh-119180(1).)

   * *note compression: 22. (incluindo *note compression.zstd: 23.): Um
     pacote para módulos relacionados à compactação, incluindo um novo
     módulo para oferecer suporte ao formato de compactação Zstandard.
     Consulte *note PEP 784: 148. para mais detalhes.  (Contribuição de
     Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas Roun,
     Victor Stinner e Rogdham em gh-132983(2).)

   * *note concurrent.interpreters: 25.: Suporte para múltiplos
     interpretadores na biblioteca padrão.  Consulte *note PEP 734: 146.
     para mais detalhes.  (Contribuição de Eric Snow em gh-134939(3).)

   * *note string.templatelib: d9.: Suporte para literais de strings
     templates (t-strings).  Veja *note PEP 750: 144. para mais
     detalhes.  (Contribuição de Jim Baker, Guido van Rossum, Paul
     Everitt, Koudai Aono, Lysandros Nikolaou, Dave Peck, Adam Turner,
     Jelle Zijlstra, Bénédikt Tran e Pablo Galindo Salgado em
     gh-132661(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119180

   (2) https://github.com/python/cpython/issues/132983

   (3) https://github.com/python/cpython/issues/134939

   (4) https://github.com/python/cpython/issues/132661


File: python.info,  Node: Módulos melhorados,  Next: Otimizações,  Prev: Novos módulos,  Up: O que há de novo no Python 3 14

1.1.5 Módulos melhorados
------------------------

* Menu:

* argparse::
* ast::
* asyncio::
* calendar::
* concurrent.futures: concurrent futures.
* configparser::
* contextvars::
* ctypes::
* curses::
* datetime::
* decimal::
* difflib::
* dis::
* errno::
* faulthandler::
* fnmatch::
* fractions::
* functools::
* getopt::
* getpass::
* graphlib::
* heapq::
* hmac::
* http::
* imaplib::
* inspect::
* io::
* json::
* linecache::
* logging.handlers: logging handlers.
* math::
* mimetypes::
* multiprocessing::
* operador::
* os::
* os.path: os path.
* pathlib::
* pdb::
* pickle::
* platform::
* pydoc::
* re::
* socket::
* ssl::
* struct::
* symtable::
* sys::
* sys.monitoring: sys monitoring.
* sysconfig::
* tarfile::
* threading::
* tkinter::
* turtle::
* tipos::
* typing::
* unicodedata::
* unittest::
* urllib::
* uuid::
* webbrowser::
* zipfile::


File: python.info,  Node: argparse,  Next: ast,  Up: Módulos melhorados

1.1.5.1 argparse
................

   * O valor padrão do *note nome do programa: 1bc. para *note
     argparse.ArgumentParser: 1bd. agora reflete a maneira como o
     interpretador Python foi instruído a encontrar o código do módulo
     ‘__main__’.  (Contribuição de Serhiy Storchaka e Alyssa Coghlan em
     gh-66436(1).)

   * Foi introduzido o parâmetro opcional 'suggest_on_error' em *note
     argparse.ArgumentParser: 1bd, permitindo sugestões para escolhas de
     argumentos e nomes de subanalisadores caso sejam digitados
     incorretamente pelo usuário.  (Contribuição de Savannah Ostrowski
     em gh-124456(2).)

   * Habilita a cor do texto de ajuda, que pode ser desabilitada com o
     parâmetro opcional 'color' em *note argparse.ArgumentParser: 1bd.
     Isso também pode ser controlado por *note variáveis de ambiente:
     1b7.  (Contribuição de Hugo van Kemenade em gh-130645(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/66436

   (2) https://github.com/python/cpython/issues/124456

   (3) https://github.com/python/cpython/issues/130645


File: python.info,  Node: ast,  Next: asyncio,  Prev: argparse,  Up: Módulos melhorados

1.1.5.2 ast
...........

   * Adiciona *note compare(): 1bf, uma função para comparar dois ASTs.
     (Contribuição de Batuhan Taskaya e Jeremy Hylton em gh-60191(1).)

   * Adiciona suporte para *note copy.replace(): 1c0. para nós AST.
     (Contribuição de Bénédikt Tran em gh-121141(2).)

   * Docstrings agora são removidas de um AST otimizado no nível de
     otimização 2.  (Contribuição de Irit Katriel em gh-123958(3).)

   * A saída *note repr(): 1c1. para nós AST agora inclui mais
     informações.  (Contribuição de Tomas Roun em gh-116022(4).)

   * Quando chamado com um AST como entrada, a função *note parse():
     1c2. agora sempre verifica se o tipo de nó raiz é apropriado.
     (Contribuição de Irit Katriel em gh-130139(5).)

   * Adiciona novas opções à interface de linha de comando: *note
     -feature-version: 1c3, *note -optimize: 1c4. e *note -show-empty:
     1c5.  (Contribuição de Semyon Moroz em gh-133367(6).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/60191

   (2) https://github.com/python/cpython/issues/121141

   (3) https://github.com/python/cpython/issues/123958

   (4) https://github.com/python/cpython/issues/116022

   (5) https://github.com/python/cpython/issues/130139

   (6) https://github.com/python/cpython/issues/133367


File: python.info,  Node: asyncio,  Next: calendar,  Prev: ast,  Up: Módulos melhorados

1.1.5.3 asyncio
...............

   * A função e os métodos denominados ‘create_task()’ agora aceitam uma
     lista arbitrária de argumentos nomeados.  Todos os argumentos
     nomeados são passados para o construtor *note Task: 1c7. ou para a
     fábrica de tarefas personalizada.  (Consulte *note
     set_task_factory(): 1c8. para obter detalhes.)  Os argumentos
     nomeados ‘name’ e ‘context’ não são mais especiais; o nome agora
     deve ser definido usando o argumento nomeados ‘name’ da fábrica, e
     ‘context’ pode ser ‘None’.

     Isso afeta as seguintes funções e métodos: *note
     asyncio.create_task(): 1c9, *note asyncio.loop.create_task(): 1ca,
     *note asyncio.TaskGroup.create_task(): 1cb.

     (Contribuição de Thomas Grainger em gh-128307(1).)

   * Há duas novas funções utilitárias para introspecção e impressão do
     gráfico de chamadas de um programa: *note capture_call_graph():
     1cc. e *note print_call_graph(): 1cd.  Veja *note Capacidades de
     introspecção do asyncio: 147. para mais detalhes.  (Contribuição de
     Yury Selivanov, Pablo Galindo Salgado e Łukasz Langa em
     gh-91048(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128307

   (2) https://github.com/python/cpython/issues/91048


File: python.info,  Node: calendar,  Next: concurrent futures,  Prev: asyncio,  Up: Módulos melhorados

1.1.5.4 calendar
................

   * Por padrão, a data de hoje é destacada em cores na saída de texto
     da *note linha de comando: 1d0. do *note calendar: 15.  Isso pode
     ser controlado pelas *note variáveis de ambiente: 1b7.
     (Contribuição de Hugo van Kemenade em gh-128317(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128317


File: python.info,  Node: concurrent futures,  Next: configparser,  Prev: calendar,  Up: Módulos melhorados

1.1.5.5 concurrent.futures
..........................

   * Adiciona uma nova classe executora, *note InterpreterPoolExecutor:
     1d2, que expõe vários interpretadores Python no mesmo processo
     (‘subinterpretadores’) ao código Python.  Isso usa um conjunto de
     interpretadores Python independentes para executar chamadas de
     forma assíncrona.

     Isto é separado do novo módulo *note interpreters: 25. introduzido
     pela *note PEP 734: 146.  (Contribuição de Eric Snow em
     gh-124548(1).)

   * Em plataformas Unix diferentes do macOS, *note ‘forkserver’: 1d4.
     agora é o *note método de inicialização: 1d5. padrão para *note
     ProcessPoolExecutor: 1d6. (substituindo *note ‘fork’: 1d7.).  Essa
     alteração não afeta o Windows ou o macOS, onde *note ‘spawn’: 1d8.
     continua sendo o método de inicialização padrão.

     Se o método 'fork' incompatível com threading for necessário, você
     deverá solicitá-lo explicitamente fornecendo um contexto de
     multiprocessamento 'mp_context' para *note ProcessPoolExecutor:
     1d6.

     Veja as *note restrições de forkserver: 1d9. para obter informações
     e diferenças com o método 'fork' e como essa alteração pode afetar
     o código existente com variáveis globais compartilhadas mutáveis
     e/ou objetos compartilhados que não podem ser automaticamente *note
     serializadas com pickle: ab.

     (Contribuição de Gregory P. Smith em gh-84559(2).)

   * Adiciona dois novos métodos a *note ProcessPoolExecutor: 1d6, *note
     terminate_workers(): 1da. e *note kill_workers(): 1db, como formas
     de encerrar ou eliminar todos os processos de trabalho ativos no
     pool fornecido.  (Contribuição de Charles Machalow em
     gh-130849(3).)

   * Adiciona o parâmetro opcional 'buffersize' a :meth:' Executor.map
     <concurrent.futures.Executor.map>'.  para limitar o número de
     tarefas enviadas cujos resultados ainda não foram gerados.  Se o
     buffer estiver cheio, a iteração sobre os 'iteráveis' será pausada
     até que um resultado seja produzido pelo buffer.  (Contribuição de
     Enzo Bonnal e Josh Rosenberg em gh-74028(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124548

   (2) https://github.com/python/cpython/issues/84559

   (3) https://github.com/python/cpython/issues/130849

   (4) https://github.com/python/cpython/issues/74028


File: python.info,  Node: configparser,  Next: contextvars,  Prev: concurrent futures,  Up: Módulos melhorados

1.1.5.6 configparser
....................

   * ‘configparser’ will no longer write config files it cannot read, to
     improve security.  Attempting to *note write(): 1dd. keys
     containing delimiters or beginning with the section header pattern
     will raise an *note InvalidWriteError: 1de.  (Contributed by Jacob
     Lincoln in gh-129270(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129270


File: python.info,  Node: contextvars,  Next: ctypes,  Prev: configparser,  Up: Módulos melhorados

1.1.5.7 contextvars
...................

   * Support the *note context manager: 1e0. protocol for *note Token:
     1e1. objects.  (Contributed by Andrew Svetlov in gh-129889(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129889


File: python.info,  Node: ctypes,  Next: curses,  Prev: contextvars,  Up: Módulos melhorados

1.1.5.8 ctypes
..............

   * The layout of *note bit fields: 1e3. in *note Structure: 1e4. and
     *note Union: 1e5. objects is now a closer match to platform
     defaults (GCC/Clang or MSVC). In particular, fields no longer
     overlap.  (Contributed by Matthias Görgens in gh-97702(1).)

   * O atributo de classe *note Structure._layout_: 1e6. agora pode ser
     definido para ajudar a corresponder a uma ABI não padrão.
     (Contribuição de Petr Viktorin em gh-97702(2).)

   * A classe de descritores de campo *note Structure: 1e4./*note Union:
     1e5. agora está disponível como *note CField: 1e7. e possui novos
     atributos para auxiliar na depuração e na introspecção.
     (Contribuição de Petr Viktorin em gh-128715(3).)

   * No Windows, a exceção *note COMError: 1e8. agora é pública.
     (Contribuição de Jun Komoda em gh-126686(4).)

   * No Windows, a função *note CopyComPointer(): 1e9. agora é pública.
     (Contribuição de Jun Komoda em gh-127275(5).)

   * Add *note memoryview_at(): 1ea, a function to create a *note
     memoryview: 165. object that refers to the supplied pointer and
     length.  This works like *note ctypes.string_at(): 1eb. except it
     avoids a buffer copy, and is typically useful when implementing
     pure Python callback functions that are passed dynamically-sized
     buffers.  (Contributed by Rian Hunter in gh-112018(6).)

   * Complex types, *note c_float_complex: 1ec, *note c_double_complex:
     1ed, and *note c_longdouble_complex: 1ee, are now available if both
     the compiler and the ‘libffi’ library support complex C types.
     (Contributed by Sergey B Kirpichev in gh-61103(7).)

   * Adiciona *note ctypes.util.dllist(): 1ef. para listar as
     bibliotecas compartilhadas carregadas pelo processo atual.
     (Contribuição de Brian Ward em gh-119349(8).)

   * Move *note ctypes.POINTER(): 1f0. types cache from a global
     internal cache (‘_pointer_type_cache’) to the *note
     _CData.__pointer_type__: 1f1. attribute of the corresponding
     ‘ctypes’ types.  This will stop the cache from growing without
     limits in some situations.  (Contributed by Sergey Miryanov in
     gh-100926(9).)

   * The *note py_object: 1f2. type now supports subscription, making it
     a *note generic type: 1a1.  (Contributed by Brian Schubert in
     gh-132168(10).)

   * ‘ctypes’ now supports *note free-threading builds: 1f3.
     (Contributed by Kumar Aditya and Peter Bierma in gh-127945(11).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97702

   (2) https://github.com/python/cpython/issues/97702

   (3) https://github.com/python/cpython/issues/128715

   (4) https://github.com/python/cpython/issues/126686

   (5) https://github.com/python/cpython/issues/127275

   (6) https://github.com/python/cpython/issues/112018

   (7) https://github.com/python/cpython/issues/61103

   (8) https://github.com/python/cpython/issues/119349

   (9) https://github.com/python/cpython/issues/100926

   (10) https://github.com/python/cpython/issues/132168

   (11) https://github.com/python/cpython/issues/127945


File: python.info,  Node: curses,  Next: datetime,  Prev: ctypes,  Up: Módulos melhorados

1.1.5.9 curses
..............

   * Add the *note assume_default_colors(): 1f5. function, a refinement
     of the *note use_default_colors(): 1f6. function which allows
     changing the color pair ‘0’.  (Contributed by Serhiy Storchaka in
     gh-133139(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133139


File: python.info,  Node: datetime,  Next: decimal,  Prev: curses,  Up: Módulos melhorados

1.1.5.10 datetime
.................

   * Add the *note strptime(): 1f8. method to the *note datetime.date:
     1f9. and *note datetime.time: 1fa. classes.  (Contributed by Wannes
     Boeykens in gh-41431(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/41431


File: python.info,  Node: decimal,  Next: difflib,  Prev: datetime,  Up: Módulos melhorados

1.1.5.11 decimal
................

   * Add *note Decimal.from_number(): 1fc. as an alternative constructor
     for *note Decimal: 1fd.  (Contributed by Serhiy Storchaka in
     gh-121798(1).)

   * Expose *note IEEEContext(): 1fe. to support creation of contexts
     corresponding to the IEEE 754 (2008) decimal interchange formats.
     (Contributed by Sergey B Kirpichev in gh-53032(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121798

   (2) https://github.com/python/cpython/issues/53032


File: python.info,  Node: difflib,  Next: dis,  Prev: decimal,  Up: Módulos melhorados

1.1.5.12 difflib
................

   * Comparison pages with highlighted changes generated by the *note
     HtmlDiff: 200. class now support ‘dark mode’.  (Contributed by
     Jiahao Li in gh-129939(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129939


File: python.info,  Node: dis,  Next: errno,  Prev: difflib,  Up: Módulos melhorados

1.1.5.13 dis
............

   * Adiciona suporte para renderizar informações completas sobre o
     local da fonte de *note instruções: 202, em vez de apenas o número
     da linha.  Este recurso é adicionado às seguintes interfaces por
     meio do argumento nomeado 'show_positions':

        - *note dis.Bytecode: 203.

        - *note dis.dis(): 204.

        - *note dis.distb(): 205.

        - *note dis.disassemble(): 206.

     Esse recurso também é exposto via *note dis -show-positions: 207.
     (Contribuição de Bénédikt Tran em gh-123165(1).)

   * Adiciona a opção de linha de comando *note dis -specialized: 208.
     para mostrar o bytecode especializado.  (Contribuição de Bénédikt
     Tran em gh-127413(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123165

   (2) https://github.com/python/cpython/issues/127413


File: python.info,  Node: errno,  Next: faulthandler,  Prev: dis,  Up: Módulos melhorados

1.1.5.14 errno
..............

   * Add the *note EHWPOISON: 20a. error code constant.  (Contributed by
     James Roy in gh-126585(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126585


File: python.info,  Node: faulthandler,  Next: fnmatch,  Prev: errno,  Up: Módulos melhorados

1.1.5.15 faulthandler
.....................

   * Add support for printing the C stack trace on systems that *note
     support it: 20c. via the new *note dump_c_stack(): 20d. function or
     via the 'c_stack' argument in *note faulthandler.enable(): 20e.
     (Contributed by Peter Bierma in gh-127604(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127604


File: python.info,  Node: fnmatch,  Next: fractions,  Prev: faulthandler,  Up: Módulos melhorados

1.1.5.16 fnmatch
................

   * Add *note filterfalse(): 210, a function to reject names matching a
     given pattern.  (Contributed by Bénédikt Tran in gh-74598(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/74598


File: python.info,  Node: fractions,  Next: functools,  Prev: fnmatch,  Up: Módulos melhorados

1.1.5.17 fractions
..................

   * A *note Fraction: 212. object may now be constructed from any
     object with the ‘as_integer_ratio()’ method.  (Contributed by
     Serhiy Storchaka in gh-82017(1).)

   * Add *note Fraction.from_number(): 213. as an alternative
     constructor for *note Fraction: 212.  (Contributed by Serhiy
     Storchaka in gh-121797(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/82017

   (2) https://github.com/python/cpython/issues/121797


File: python.info,  Node: functools,  Next: getopt,  Prev: fractions,  Up: Módulos melhorados

1.1.5.18 functools
..................

   * Add the *note Placeholder: 215. sentinel.  This may be used with
     the *note partial(): 216. or *note partialmethod(): 217. functions
     to reserve a place for positional arguments in the returned *note
     partial object: 218.  (Contributed by Dominykas Grigonis in
     gh-119127(1).)

   * Allow the 'initial' parameter of *note reduce(): 219. to be passed
     as a keyword argument.  (Contributed by Sayandip Dutta in
     gh-125916(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119127

   (2) https://github.com/python/cpython/issues/125916


File: python.info,  Node: getopt,  Next: getpass,  Prev: functools,  Up: Módulos melhorados

1.1.5.19 getopt
...............

   * Adiciona suporte para opções com argumento opcional.  (Contribuição
     de Serhiy Storchaka em gh-126374(1).)

   * Adiciona suporte para retornar opções misturadas e argumentos
     não-opcionais em ordem.  (Contribuição de Serhiy Storchaka em
     gh-126390(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126374

   (2) https://github.com/python/cpython/issues/126390


File: python.info,  Node: getpass,  Next: graphlib,  Prev: getopt,  Up: Módulos melhorados

1.1.5.20 getpass
................

   * Support keyboard feedback in the *note getpass(): 21c. function via
     the keyword-only optional argument 'echo_char'.  Placeholder
     characters are rendered whenever a character is entered, and
     removed when a character is deleted.  (Contributed by Semyon Moroz
     in gh-77065(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/77065


File: python.info,  Node: graphlib,  Next: heapq,  Prev: getpass,  Up: Módulos melhorados

1.1.5.21 graphlib
.................

   * Allow *note TopologicalSorter.prepare(): 21e. to be called more
     than once as long as sorting has not started.  (Contributed by
     Daniel Pope in gh-130914(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130914


File: python.info,  Node: heapq,  Next: hmac,  Prev: graphlib,  Up: Módulos melhorados

1.1.5.22 heapq
..............

   * The ‘heapq’ module has improved support for working with max-heaps,
     via the following new functions:

        * *note heapify_max(): 220.

        * *note heappush_max(): 221.

        * *note heappop_max(): 222.

        * *note heapreplace_max(): 223.

        * *note heappushpop_max(): 224.


File: python.info,  Node: hmac,  Next: http,  Prev: heapq,  Up: Módulos melhorados

1.1.5.23 hmac
.............

   * Adiciona uma implementação embutido para HMAC ( RFC 2104(1)) usando
     código formalmente verificado do projeto HACL*(2).  Esta
     implementação é usada como fallback quando a implementação OpenSSL
     do HMAC não está disponível.  (Contribuição de Bénédikt Tran em
     gh-99108(3).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2104.html

   (2) https://github.com/hacl-star/hacl-star/

   (3) https://github.com/python/cpython/issues/99108


File: python.info,  Node: http,  Next: imaplib,  Prev: hmac,  Up: Módulos melhorados

1.1.5.24 http
.............

   * As páginas de erro e listas de diretórios geradas pelo módulo *note
     http.server: 76. permitem que o navegador aplique seu modo escuro
     padrão.  (Contribuição de Yorik Hansen em gh-123430(1).)

   * O módulo *note http.server: 76. agora provê suporte para HTTPS
     usando a classe *note http.server.HTTPSServer: 227.  Essa
     funcionalidade é exposta pela interface de linha de comando
     (‘python -m http.server’) por meio das seguintes opções:

        * *note -tls-cert <path>: 228.: Path to the TLS certificate
          file.

        * *note -tls-key <path>: 229.: Optional path to the private key
          file.

        * *note -tls-password-file <path>: 22a.: Optional path to the
          password file for the private key.

     (Contribuição de Semyon Moroz em gh-85162(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123430

   (2) https://github.com/python/cpython/issues/85162


File: python.info,  Node: imaplib,  Next: inspect,  Prev: http,  Up: Módulos melhorados

1.1.5.25 imaplib
................

   * Add *note IMAP4.idle(): 22c, implementing the IMAP4 ‘IDLE’ command
     as defined in RFC 2177(1).  (Contributed by Forest in gh-55454(2).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2177.html

   (2) https://github.com/python/cpython/issues/55454


File: python.info,  Node: inspect,  Next: io,  Prev: imaplib,  Up: Módulos melhorados

1.1.5.26 inspect
................

   * *note signature(): 22e. takes a new argument 'annotation_format' to
     control the *note annotationlib.Format: 22f. used for representing
     annotations.  (Contributed by Jelle Zijlstra in gh-101552(1).)

   * *note Signature.format(): 230. takes a new argument
     'unquote_annotations'.  If true, string *note annotations: 15c. are
     displayed without surrounding quotes.  (Contributed by Jelle
     Zijlstra in gh-101552(2).)

   * Add function *note ispackage(): 231. to determine whether an object
     is a *note package: 232. or not.  (Contributed by Zhikang Yan in
     gh-125634(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101552

   (2) https://github.com/python/cpython/issues/101552

   (3) https://github.com/python/cpython/issues/125634


File: python.info,  Node: io,  Next: json,  Prev: inspect,  Up: Módulos melhorados

1.1.5.27 io
...........

   * A leitura de texto de um fluxo sem bloqueio com ‘read’ pode agora
     levantar um *note BlockingIOError: 234. se a operação não puder
     imediatamente retornar bytes.  (Contribuição de Giovanni Siragusa
     em gh-109523(1).)

   * Add the *note Reader: 235. and *note Writer: 236. protocols as
     simpler alternatives to the pseudo-protocols *note typing.IO: 237,
     *note typing.TextIO: 238, and *note typing.BinaryIO: 239.
     (Contributed by Sebastian Rittau in gh-127648(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109523

   (2) https://github.com/python/cpython/issues/127648


File: python.info,  Node: json,  Next: linecache,  Prev: io,  Up: Módulos melhorados

1.1.5.28 json
.............

   * Add exception notes for JSON serialization errors that allow
     identifying the source of the error.  (Contributed by Serhiy
     Storchaka in gh-122163(1).)

   * Allow using the *note json: 86. module as a script using the *note
     -m: 23b. switch: ‘python -m json’.  This is now preferred to
     ‘python -m json.tool’, which is *note soft deprecated: 23c.  See
     the *note JSON command-line interface: 23d. documentation.
     (Contributed by Trey Hunner in gh-122873(2).)

   * Por padrão, a saída da *note interface de linha de comando JSON:
     23d. é destacada em cores.  Isso pode ser controlado por *note
     variáveis de ambiente: 1b7. .  (Contribuição de Tomas Roun em
     gh-131952(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122163

   (2) https://github.com/python/cpython/issues/122873

   (3) https://github.com/python/cpython/issues/131952


File: python.info,  Node: linecache,  Next: logging handlers,  Prev: json,  Up: Módulos melhorados

1.1.5.29 linecache
..................

   * *note getline(): 23f. can now retrieve source code for frozen
     modules.  (Contributed by Tian Gao in gh-131638(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131638


File: python.info,  Node: logging handlers,  Next: math,  Prev: linecache,  Up: Módulos melhorados

1.1.5.30 logging.handlers
.........................

   * *note QueueListener: 241. objects now support the *note context
     manager: 1e0. protocol.  (Contributed by Charles Machalow in
     gh-132106(1).)

   * *note QueueListener.start: 242. agora levanta *note RuntimeError:
     243. se o ouvinte já tiver sido iniciado.  (Contribuição de Charles
     Machalow em gh-132106(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132106

   (2) https://github.com/python/cpython/issues/132106


File: python.info,  Node: math,  Next: mimetypes,  Prev: logging handlers,  Up: Módulos melhorados

1.1.5.31 math
.............

   * Adicionadas mensagens de erro mais detalhadas para erros de domínio
     no módulo.  (Contribuição de Charlie Zhao e Sergey B Kirpichev em
     gh-101410(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101410


File: python.info,  Node: mimetypes,  Next: multiprocessing,  Prev: math,  Up: Módulos melhorados

1.1.5.32 mimetypes
..................

   * Add a public *note command-line: 246. for the module, invoked via
     ‘python -m mimetypes’.  (Contributed by Oleg Iarygin and Hugo van
     Kemenade in gh-93096(1).)

   * Add several new MIME types based on RFCs and common usage:

     Microsoft and
     .............

     RFC 8081(2) MIME types for fonts

        * Embedded OpenType: ‘application/vnd.ms-fontobject’

        * OpenType Layout (OTF) ‘font/otf’

        * TrueType: ‘font/ttf’

        * WOFF 1.0 ‘font/woff’

        * WOFF 2.0 ‘font/woff2’

     RFC 9559(3) MIME types for Matroska audiovisual data container
     structures

        * áudio com nenhum vídeo: ‘audio/matroska’ (‘.mka’)

        * vídeo: ‘video/matroska’ (‘.mkv’)

        * vídeo estereoscópico: ‘video/matroska-3d’ (‘.mk3d’)

     Images with RFCs
     ................

        * RFC 1494(4): CCITT Group 3 (‘.g3’)

        * RFC 3362(5): Real-time Facsimile, T.38 (‘.t38’)

        * RFC 3745(6): JPEG 2000 (‘.jp2’), extensão (‘.jpx’) e composto
          (‘.jpm’)

        * RFC 3950(7): Tag Image File Format Fax eXtended, TIFF-FX
          (‘.tfx’)

        * RFC 4047(8): Flexible Image Transport System (‘.fits’)

        * RFC 7903(9): Enhanced Metafile (‘.emf’) and Windows Metafile
          (‘.wmf’)

     Other MIME type additions and changes
     .....................................

        * RFC 2361(10): altera o tipo de ‘.avi’ para ‘video/vnd.avi’ e
          de ‘.wav’ para ‘audio/vnd.wave’

        * RFC 4337(11): adiciona MPEG-4 ‘audio/mp4’ (‘.m4a’)

        * RFC 5334(12): adiciona mídia Ogg (‘.oga’, ‘.ogg’ e ‘.ogx’)

        * RFC 6713(13): adiciona gzip ‘aplication/gzip’ (‘.gz’)

        * RFC 9639(14): adiciona FLAC ‘audio/flac’ (‘.flac’)

        * RFC 9512(15) ‘application/yaml’ MIME type for YAML files
          (‘.yaml’ and ‘.yml’)

        * Adiciona 7z ‘aplication/x-7z-compressed’ (‘.7z’)

        * Adiciona Android Package
          ‘application/vnd.android.package-archive’ (‘.apk’) quando não
          for rigoroso

        * Adiciona deb ‘application/x-debian-package’ (‘.deb’)

        * Adiciona glTF binário ‘model/gltf-binary’ (‘.glb’)

        * Adiciona glTF JSON/ASCII ‘model/gltf+json’ (‘.gltf’)

        * Adiciona M4V ‘video/x-m4v’ (‘.m4v’)

        * Adiciona PHP ‘application/x-httpd-php’ (‘.php’)

        * Adiciona RAR ‘application/vnd.rar’ (‘.rar’)

        * Adiciona RPM ‘application/x-rpm’ (‘.rpm’)

        * Adiciona STL ‘model/stl’ (‘.stl’)

        * Adiciona Windows Media Video ‘video/x-ms-wmv’ (‘.wmv’)

        * De facto: adiciona WebM ‘audio/webm’ (‘.weba’)

        * ECMA-376(16): adiciona tipos ‘.docx’, ‘.pptx’ e ‘.xlsx’

        * OASIS(17): adiciona tipos OpenDocument ‘.odg’, ‘.odp’, ‘.ods’
          e ‘.odt’

        * W3C(18): adiciona EPUB ‘application/epub+zip’ (‘.epub’)

     (Contributed by Sahil Prajapati and Hugo van Kemenade in
     gh-84852(19), by Sasha “Nelie” Chernykh and Hugo van Kemenade in
     gh-132056(20), and by Hugo van Kemenade in gh-89416(21),
     gh-85957(22), and gh-129965(23).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93096

   (2) https://datatracker.ietf.org/doc/html/rfc8081.html

   (3) https://datatracker.ietf.org/doc/html/rfc9559.html

   (4) https://datatracker.ietf.org/doc/html/rfc1494.html

   (5) https://datatracker.ietf.org/doc/html/rfc3362.html

   (6) https://datatracker.ietf.org/doc/html/rfc3745.html

   (7) https://datatracker.ietf.org/doc/html/rfc3950.html

   (8) https://datatracker.ietf.org/doc/html/rfc4047.html

   (9) https://datatracker.ietf.org/doc/html/rfc7903.html

   (10) https://datatracker.ietf.org/doc/html/rfc2361.html

   (11) https://datatracker.ietf.org/doc/html/rfc4337.html

   (12) https://datatracker.ietf.org/doc/html/rfc5334.html

   (13) https://datatracker.ietf.org/doc/html/rfc6713.html

   (14) https://datatracker.ietf.org/doc/html/rfc9639.html

   (15) https://datatracker.ietf.org/doc/html/rfc9512.html

   (16) 
https://ecma-international.org/publications-and-standards/standards/ecma-376/

   (17) 
https://docs.oasis-open.org/office/v1.2/cs01/OpenDocument-v1.2-cs01-part1.html#Appendix_C

   (18) https://www.w3.org/TR/epub-33/#app-media-type

   (19) https://github.com/python/cpython/issues/84852

   (20) https://github.com/python/cpython/issues/132056

   (21) https://github.com/python/cpython/issues/89416

   (22) https://github.com/python/cpython/issues/85957

   (23) https://github.com/python/cpython/issues/129965


File: python.info,  Node: multiprocessing,  Next: operador,  Prev: mimetypes,  Up: Módulos melhorados

1.1.5.33 multiprocessing
........................

   * On Unix platforms other than macOS, *note ‘forkserver’: 1d4. is now
     the the default *note start method: 1d5. (replacing *note ‘fork’:
     1d7.).  This change does not affect Windows or macOS, where *note
     ‘spawn’: 1d8. remains the default start method.

     If the threading incompatible 'fork' method is required, you must
     explicitly request it via a context from *note get_context(): 249.
     (preferred) or change the default via *note set_start_method():
     24a.

     Veja as *note restrições de forkserver: 1d9. para obter informações
     e diferenças com o método 'fork' e como essa alteração pode afetar
     o código existente com variáveis globais compartilhadas mutáveis
     e/ou objetos compartilhados que não podem ser automaticamente *note
     serializadas com pickle: ab.

     (Contribuição de Gregory P. Smith em gh-84559(1).)

   * *note multiprocessing: 98.’s ‘'forkserver'’ start method now
     authenticates its control socket to avoid solely relying on
     filesystem permissions to restrict what other processes could cause
     the forkserver to spawn workers and run code.  (Contributed by
     Gregory P. Smith for gh-97514(2).)

   * Os *note objetos proxies de multiprocessing: 24b. para os tipos
     'list' e 'dict' ganhou métodos anteriormente ausentes:

             * ‘clear()’ e ‘copy()’ para proxies de *note list: 24c.

             * *note fromkeys(): 24d, ‘reversed(d)’, ‘d | {}’, ‘{} | d’,
               ‘d |= {'b': 2}’ para proxies de *note dict: 183.

     (Contribuição de Roy Hyunjin Han em gh-103134(3).)

   * Add support for shared *note set: 184. objects via *note
     SyncManager.set(): 24e.  The *note set(): 184. in *note Manager():
     24f. method is now available.  (Contributed by Mingyu Park in
     gh-129949(4).)

   * Add the *note interrupt(): 250. to *note multiprocessing.Process:
     251. objects, which terminates the child process by sending *note
     SIGINT: 252.  This enables *note finally: 1b0. clauses to print a
     stack trace for the terminated process.  (Contributed by Artem
     Pulkin in gh-131913(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/84559

   (2) https://github.com/python/cpython/issues/97514

   (3) https://github.com/python/cpython/issues/103134

   (4) https://github.com/python/cpython/issues/129949

   (5) https://github.com/python/cpython/issues/131913


File: python.info,  Node: operador,  Next: os,  Prev: multiprocessing,  Up: Módulos melhorados

1.1.5.34 operador
.................

   * Add *note is_none(): 254. and *note is_not_none(): 255. as a pair
     of functions, such that ‘operator.is_none(obj)’ is equivalent to
     ‘obj is None’ and ‘operator.is_not_none(obj)’ is equivalent to ‘obj
     is not None’.  (Contributed by Raymond Hettinger and Nico Mexis in
     gh-115808(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115808


File: python.info,  Node: os,  Next: os path,  Prev: operador,  Up: Módulos melhorados

1.1.5.35 os
...........

   * Add the *note reload_environ(): 257. function to update *note
     os.environ: 258. and *note os.environb: 259. with changes to the
     environment made by *note os.putenv(): 25a, by *note os.unsetenv():
     25b, or made outside Python in the same process.  (Contributed by
     Victor Stinner in gh-120057(1).)

   * Add the *note SCHED_DEADLINE: 25c. and *note SCHED_NORMAL: 25d.
     constants to the ‘os’ module.  (Contributed by James Roy in
     gh-127688(2).)

   * Add the *note readinto(): 25e. function to read into a *note buffer
     object: 25f. from a file descriptor.  (Contributed by Cody Maloney
     in gh-129205(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120057

   (2) https://github.com/python/cpython/issues/127688

   (3) https://github.com/python/cpython/issues/129205


File: python.info,  Node: os path,  Next: pathlib,  Prev: os,  Up: Módulos melhorados

1.1.5.36 os.path
................

   * The 'strict' parameter to *note realpath(): 261. accepts a new
     value, *note ALLOW_MISSING: 262.  If used, errors other than *note
     FileNotFoundError: 263. will be re-raised; the resulting path can
     be missing but it will be free of symlinks.  (Contributed by Petr
     Viktorin for CVE 2025-4517(1).)

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2025-4517


File: python.info,  Node: pathlib,  Next: pdb,  Prev: os path,  Up: Módulos melhorados

1.1.5.37 pathlib
................

   * Adiciona métodos a *note pathlib.Path: 265. para copiar ou mover
     arquivos e diretórios recursivamente:

        * *note copy(): 266. copia um arquivo ou árvore de diretório
          para um destino.

        * *note copy_into(): 267. copia 'para' um diretório de destino.

        * *note move(): 268. move um arquivo ou árvore de diretórios
          para um destino.

        * *note move_into(): 269. move 'para' um diretório de destino.

     (Contribuição de Barney Gale em gh-73991(1).)

   * Add the *note info: 26a. attribute, which stores an object
     implementing the new *note pathlib.types.PathInfo: 26b. protocol.
     The object supports querying the file type and internally caching
     *note stat(): 26c. results.  Path objects generated by *note
     iterdir(): 26d. are initialized with file type information gleaned
     from scanning the parent directory.  (Contributed by Barney Gale in
     gh-125413(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/73991

   (2) https://github.com/python/cpython/issues/125413


File: python.info,  Node: pdb,  Next: pickle,  Prev: pathlib,  Up: Módulos melhorados

1.1.5.38 pdb
............

   * The *note pdb: aa. module now supports remote attaching to a
     running Python process using a new *note -p PID: 26f. command-line
     option:

          python -m pdb -p 1234

     Isso se conectará ao processo Python com o PID fornecido e
     permitirá que você o depure interativamente.  Observe que, devido
     ao funcionamento do interpretador Python, a conexão a um processo
     remoto bloqueado em uma chamada de sistema ou aguardando E/S só
     funcionará quando a próxima instrução de bytecode for executada ou
     quando o processo receber um sinal.

     This feature uses *note PEP 768: 14e. and the new *note
     sys.remote_exec(): 16d. function to attach to the remote process
     and send the PDB commands to it.

     (Contribuição de Matt Wozniski e Pablo Galindo em gh-131591(1).)

   * Hardcoded breakpoints (*note breakpoint(): 270. and *note
     set_trace(): 271.) now reuse the most recent *note Pdb: 272.
     instance that calls *note set_trace(): 273, instead of creating a
     new one each time.  As a result, all the instance specific data
     like *note display: 274. and *note commands: 275. are preserved
     across hardcoded breakpoints.  (Contributed by Tian Gao in
     gh-121450(2).)

   * Adiciona um novo argumento 'mode' a *note pdb.Pdb: 272.  Desabilita
     o comando ‘restart’ quando *note pdb: aa. estiver no modo ‘inline’.
     (Contribuição de Tian Gao em gh-123757(3).)

   * Um prompt de confirmação será exibido quando o usuário tentar sair
     do comando *note pdb: aa. no modo ‘inline’.  ‘y’, ‘Y’, ‘<Enter>’ ou
     ‘EOF’ confirmarão o encerramento e chamarão *note sys.exit(): 276,
     em vez de executar *note bdb.BdbQuit: 277.  (Contribuição de Tian
     Gao em gh-124704(4).)

   * Pontos de interrupção em linha como *note breakpoint(): 270. ou
     *note pdb.set_trace(): 271. sempre interromperão o programa no
     quadro da chamada, ignorando o padrão ‘skip’ (se houver).
     (Contribuição de Tian Gao em gh-130493(5).)

   * ‘<tab>’ no início da linha na entrada multilinha do *note pdb: aa.
     agora preencherá um recuo de 4 espaços, em vez de inserir um
     caractere ‘\t’.  (Contribuição de Tian Gao em gh-130471(6).)

   * A indentação automática foi introduzida na entrada multilinha do
     *note pdb: aa.  Ela mantém a indentação da última linha ou insere
     uma indentação de 4 espaços ao detectar um novo bloco de código.
     (Contribuição de Tian Gao em gh-133350(7).)

   * ‘$_asynctask’ foi adicionado para acessar a tarefa asyncio atual,
     se aplicável.  (Contribuição de Tian Gao em gh-124367(8).)

   * *note pdb.set_trace_async(): 278. foi adicionado para oferecer
     suporte à depuração de corrotinas assíncronas.  Instruções *note
     await: 18d. são suportadas com esta função.  (Contribuição de Tian
     Gao em gh-132576(9).)

   * Source code displayed in *note pdb: aa. will be syntax-highlighted.
     This feature can be controlled using the same methods as the
     default *note interactive: 1b5. shell, in addition to the newly
     added ‘colorize’ argument of *note pdb.Pdb: 272.  (Contributed by
     Tian Gao and Łukasz Langa in gh-133355(10).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131591

   (2) https://github.com/python/cpython/issues/121450

   (3) https://github.com/python/cpython/issues/123757

   (4) https://github.com/python/cpython/issues/124704

   (5) https://github.com/python/cpython/issues/130493

   (6) https://github.com/python/cpython/issues/130471

   (7) https://github.com/python/cpython/issues/133350

   (8) https://github.com/python/cpython/issues/124367

   (9) https://github.com/python/cpython/issues/132576

   (10) https://github.com/python/cpython/issues/133355


File: python.info,  Node: pickle,  Next: platform,  Prev: pdb,  Up: Módulos melhorados

1.1.5.39 pickle
...............

   * Define a versão do protocolo padrão no módulo *note pickle: ab.
     como 5.  Para mais detalhes, consulte *note protocolos pickle: 27a.

   * Add exception notes for pickle serialization errors that allow
     identifying the source of the error.  (Contributed by Serhiy
     Storchaka in gh-122213(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122213


File: python.info,  Node: platform,  Next: pydoc,  Prev: pickle,  Up: Módulos melhorados

1.1.5.40 platform
.................

   * Add *note invalidate_caches(): 27c, a function to invalidate cached
     results in the ‘platform’ module.  (Contributed by Bénédikt Tran in
     gh-122549(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122549


File: python.info,  Node: pydoc,  Next: re,  Prev: platform,  Up: Módulos melhorados

1.1.5.41 pydoc
..............

   * *note Anotações: 15c. na saída de ajuda agora são exibidas em um
     formato mais próximo ao da fonte original.  (Contribuição de Jelle
     Zijlstra em gh-101552(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101552


File: python.info,  Node: re,  Next: socket,  Prev: pydoc,  Up: Módulos melhorados

1.1.5.42 re
...........

   * Suporte a ‘\z’ como sinônimo de ‘\Z’ em *note expressões regulares:
     be.  É interpretado sem ambiguidade em muitos outros mecanismos de
     expressão regular, ao contrário de ‘\Z’, que tem um comportamento
     ligeiramente diferente.  (Contribuição de Serhiy Storchaka em
     gh-133306(1).)

   * ‘\B’ in *note regular expression: be. now matches the empty input
     string, meaning that it is now always the opposite of ‘\b’.
     (Contributed by Serhiy Storchaka in gh-124130(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133306

   (2) https://github.com/python/cpython/issues/124130


File: python.info,  Node: socket,  Next: ssl,  Prev: re,  Up: Módulos melhorados

1.1.5.43 socket
...............

   * Melhora e corrige o suporte para soquetes Bluetooth.

        * Corrige o suporte a soquetes Bluetooth no NetBSD e no
          DragonFly BSD. (Contribuição de Serhiy Storchaka em
          gh-132429(1).)

        * Corrige o suporte para *note BTPROTO_HCI: 280. no FreeBSD.
          (Contribuição de Victor Stinner em gh-111178(2).)

        * Adiciona suporte para *note BTPROTO_SCO: 281. no FreeBSD.
          (Contribuição de Serhiy Storchaka em gh-85302(3).)

        * Adiciona suporte para 'cid' e 'bdaddr_type' no endereço para
          *note BTPROTO_L2CAP: 282. no FreeBSD. (Contribuição de Serhiy
          Storchaka em gh-132429(4).)

        * Adiciona suporte para 'channel' no endereço para *note
          BTPROTO_HCI: 280. no Linux.  (Contribuição de Serhiy Storchaka
          em gh-70145(5).)

        * Aceita um inteiro como endereço para *note BTPROTO_HCI: 280.
          no Linux.  (Contribuição de Serhiy Storchaka em gh-132099(6).)

        * Retorna 'cid' em *note getsockname(): 283. para *note
          BTPROTO_L2CAP: 282.  (Contribuição de Serhiy Storchaka em
          gh-132429(7).)

        * Adiciona muitas novas constantes.  (Contribuição de Serhiy
          Storchaka em gh-132734(8).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132429

   (2) https://github.com/python/cpython/issues/111178

   (3) https://github.com/python/cpython/issues/85302

   (4) https://github.com/python/cpython/issues/132429

   (5) https://github.com/python/cpython/issues/70145

   (6) https://github.com/python/cpython/issues/132099

   (7) https://github.com/python/cpython/issues/132429

   (8) https://github.com/python/cpython/issues/132734


File: python.info,  Node: ssl,  Next: struct,  Prev: socket,  Up: Módulos melhorados

1.1.5.44 ssl
............

   * Indicate through the *note HAS_PHA: 285. Boolean whether the ‘ssl’
     module supports TLSv1.3 post-handshake client authentication (PHA).
     (Contributed by Will Childs-Klein in gh-128036(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128036


File: python.info,  Node: struct,  Next: symtable,  Prev: ssl,  Up: Módulos melhorados

1.1.5.45 struct
...............

   * Suporte aos tipos C float complex e double complex no módulo *note
     struct: db. (formatando os caracteres ‘'F'’ e ‘'D'’,
     respectivamente).  (Contribuição de Sergey B Kirpichev em
     gh-121249(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121249


File: python.info,  Node: symtable,  Next: sys,  Prev: struct,  Up: Módulos melhorados

1.1.5.46 symtable
.................

   * Expose the following *note Symbol: 288. methods:

        * *note is_comp_cell(): 289.

        * *note is_comp_iter(): 28a.

        * *note is_free_class(): 28b.

     (Contribuição de Bénédikt Tran em gh-120029(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120029


File: python.info,  Node: sys,  Next: sys monitoring,  Prev: symtable,  Up: Módulos melhorados

1.1.5.47 sys
............

   * The previously undocumented special function *note
     sys.getobjects(): 28d, which only exists in specialized builds of
     Python, may now return objects from other interpreters than the one
     it’s called in.  (Contributed by Eric Snow in gh-125286(1).)

   * Adiciona *note sys._is_immortal(): 28e. para determinar se um
     objeto é *note imortal: 28f.  (Contribuição de Peter Bierma em
     gh-128509(2).)

   * On FreeBSD, *note sys.platform: 290. no longer contains the major
     version number.  It is always ‘'freebsd'’, instead of ‘'freebsd13'’
     or ‘'freebsd14'’.  (Contributed by Michael Osipov in gh-129393(3).)

   * Levanta *note DeprecationWarning: 1a3. para *note
     sys._clear_type_cache(): 291.  Esta função foi descontinuada no
     Python 3.13, mas não levantava um aviso em tempo de execução.

   * Add *note sys.remote_exec(): 16d. to implement the new external
     debugger interface.  See *note PEP 768: 14e. for details.
     (Contributed by Pablo Galindo Salgado, Matt Wozniski, and Ivona
     Stojanovic in gh-131591(4).)

   * Add the *note sys._jit: 292. namespace, containing utilities for
     introspecting just-in-time compilation.  (Contributed by Brandt
     Bucher in gh-133231(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125286

   (2) https://github.com/python/cpython/issues/128509

   (3) https://github.com/python/cpython/issues/129393

   (4) https://github.com/python/cpython/issues/131591

   (5) https://github.com/python/cpython/issues/133231


File: python.info,  Node: sys monitoring,  Next: sysconfig,  Prev: sys,  Up: Módulos melhorados

1.1.5.48 sys.monitoring
.......................

   * Add two new monitoring events, *note BRANCH_LEFT: 294. and *note
     BRANCH_RIGHT: 295.  These replace and deprecate the ‘BRANCH’ event.
     (Contributed by Mark Shannon in gh-122548(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122548


File: python.info,  Node: sysconfig,  Next: tarfile,  Prev: sys monitoring,  Up: Módulos melhorados

1.1.5.49 sysconfig
..................

   * Add ‘ABIFLAGS’ key to *note get_config_vars(): 297. on Windows.
     (Contributed by Xuehai Pan in gh-131799(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131799


File: python.info,  Node: tarfile,  Next: threading,  Prev: sysconfig,  Up: Módulos melhorados

1.1.5.50 tarfile
................

   * *note data_filter(): 299. 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(): 29a. 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(): 29b. e *note extractall(): 29a. 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: 29c.  (Contribuição de Petr Viktorin para CVE
     2025-4330(5) e CVE 2024-12718(6).)

   * *note extract(): 29b. e *note extractall(): 29a. não extraem mais
     membros rejeitados quando *note errorlevel(): 29d. é 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: threading,  Next: tkinter,  Prev: tarfile,  Up: Módulos melhorados

1.1.5.51 threading
..................

   * *note threading.Thread.start(): 178. agora define o nome do thread
     do sistema operacional como *note threading.Thread.name: 29f.
     (Contribuição de Victor Stinner em gh-59705(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/59705


File: python.info,  Node: tkinter,  Next: turtle,  Prev: threading,  Up: Módulos melhorados

1.1.5.52 tkinter
................

   * Make *note tkinter: f6. widget methods ‘after()’ and ‘after_idle()’
     accept keyword arguments.  (Contributed by Zhikang Yan in
     gh-126899(1).)

   * Add ability to specify a name for ‘tkinter.OptionMenu’ and
     ‘tkinter.ttk.OptionMenu’.  (Contributed by Zhikang Yan in
     gh-130482(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126899

   (2) https://github.com/python/cpython/issues/130482


File: python.info,  Node: turtle,  Next: tipos,  Prev: tkinter,  Up: Módulos melhorados

1.1.5.53 turtle
...............

   * Add context managers for *note turtle.fill(): 2a2, *note
     turtle.poly(): 2a3, and *note turtle.no_animation(): 2a4.
     (Contributed by Marie Roald and Yngve Mardal Moe in gh-126350(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126350


File: python.info,  Node: tipos,  Next: typing,  Prev: turtle,  Up: Módulos melhorados

1.1.5.54 tipos
..............

   * *note types.UnionType: 2a6. agora é um apelido para *note
     typing.Union: 2a7.  Veja *note abaixo: 2a8. para mais detalhes.
     (Contribuição de Jelle Zijlstra em gh-105499(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105499


File: python.info,  Node: typing,  Next: unicodedata,  Prev: tipos,  Up: Módulos melhorados

1.1.5.55 typing
...............

   * The *note types.UnionType: 2a6. and *note typing.Union: 2a7. types
     are now aliases for each other, meaning that both old-style unions
     (created with ‘Union[int, str]’) and new-style unions (‘int | str’)
     now create instances of the same runtime type.  This unifies the
     behavior between the two syntaxes, but leads to some differences in
     behavior that may affect users who introspect types at runtime:

        - Both syntaxes for creating a union now produce the same string
          representation in *note repr(): 1c1.  For example,
          ‘repr(Union[int, str])’ is now ‘"int | str"’ instead of
          ‘"typing.Union[int, str]"’.

        - Unions created using the old syntax are no longer cached.
          Previously, running ‘Union[int, str]’ multiple times would
          return the same object (‘Union[int, str] is Union[int, str]’
          would be ‘True’), but now it will return two different
          objects.  Use ‘==’ to compare unions for equality, not ‘is’.
          New-style unions have never been cached this way.  This change
          could increase memory usage for some programs that use a large
          number of unions created by subscripting ‘typing.Union’.
          However, several factors offset this cost: unions used in
          annotations are no longer evaluated by default in Python 3.14
          because of PEP 649(1); an instance of *note types.UnionType:
          2a6. is itself much smaller than the object returned by
          ‘Union[]’ was on prior Python versions; and removing the cache
          also saves some space.  It is therefore unlikely that this
          change will cause a significant increase in memory usage for
          most users.

        - Previously, old-style unions were implemented using the
          private class ‘typing._UnionGenericAlias’.  This class is no
          longer needed for the implementation, but it has been retained
          for backward compatibility, with removal scheduled for Python
          3.17.  Users should use documented introspection helpers like
          *note get_origin(): 2aa. and *note typing.get_args(): 2ab.
          instead of relying on private implementation details.

        - Agora é possível usar o próprio *note typing.Union: 2a7. em
          verificações de *note isinstance(): 2ac.  Por exemplo,
          ‘isinstance(int | str, typing.Union)’ retornará ‘True’;
          anteriormente, isso levantava *note TypeError: 198.

        - The ‘__args__’ attribute of *note typing.Union: 2a7. objects
          is no longer writable.

        - It is no longer possible to set any attributes on *note Union:
          2a7. objects.  This only ever worked for dunder attributes on
          previous versions, was never documented to work, and was
          subtly broken in many cases.

     (Contribuição de Jelle Zijlstra em gh-105499(2).)

   * *note TypeAliasType: 2ad. now supports star unpacking.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/

   (2) https://github.com/python/cpython/issues/105499


File: python.info,  Node: unicodedata,  Next: unittest,  Prev: typing,  Up: Módulos melhorados

1.1.5.56 unicodedata
....................

   * O banco de dados Unicode foi atualizado para Unicode 16.0.0.


File: python.info,  Node: unittest,  Next: urllib,  Prev: unicodedata,  Up: Módulos melhorados

1.1.5.57 unittest
.................

   * A saída do *note unittest: 10c. agora é colorida por padrão.  Isso
     pode ser controlado pelas *note variáveis de ambiente: 1b7.
     (Contribuição de Hugo van Kemenade em gh-127221(1).)

   * O Unittest Discovery suporta novamente *note pacote de espaço de
     nomes: 2b1. como diretório inicial.  Ele foi removido no Python
     3.11.  (Contribuição de Jacob Walls em gh-80958(2).)

   * Vários novos métodos foram adicionados à classe *note TestCase:
     2b2. que fornecem testes mais especializados.

        - *note assertHasAttr(): 2b3. e *note assertNotHasAttr(): 2b4.
          verificam se o objeto tem um atributo específico.

        - *note assertIsSubclass(): 2b5. e *note assertNotIsSubclass():
          2b6. verificam se o objeto é uma subclasse de uma classe
          específica ou de uma tupla de classes.

        - *note assertStartsWith(): 2b7, *note assertNotStartsWith():
          2b8, *note assertEndsWith(): 2b9. e *note assertNotEndsWith():
          2ba. verificam se a sequência de caracteres Unicode ou de
          bytes começa ou termina com sequências de caracteres
          específicas.

     (Contribuição de Serhiy Storchaka em gh-71339(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127221

   (2) https://github.com/python/cpython/issues/80958

   (3) https://github.com/python/cpython/issues/71339


File: python.info,  Node: urllib,  Next: uuid,  Prev: unittest,  Up: Módulos melhorados

1.1.5.58 urllib
...............

   * Atualiza o algoritmo de autenticação de resumo HTTP para *note
     urllib.request: 111, oferecendo suporte à autenticação de resumo
     SHA-256, conforme especificado em RFC 7616(1).  (Contribuição de
     Calvin Bui em gh-128193(2).)

   * Melhora a ergonomia e a conformidade com os padrões ao analisar e
     emitir URLs ‘file:’.

     In *note url2pathname(): 2bc.:

        - Aceita uma URL completa quando o novo argumento
          'require_scheme' for definido como verdadeiro.

        - Descarta a autoridade de URL se ela corresponder ao nome de
          host local.

        - Descarta a autoridade de URL se ela for resolvida para um
          endereço IP local quando o novo argumento 'resolve_host' for
          definido como verdadeiro.

        - Descarta componentes de consulta e fragmento de URL.

        - Levanta *note URLError: 2bd. se uma autoridade de URL não for
          local, exceto no Windows, onde retornamos um caminho UNC como
          antes.

     In *note pathname2url(): 2be.:

        - Retorna uma URL completa quando o novo argumento 'add_scheme'
          for definido como verdadeiro.

        - Inclui uma autoridade de URL vazia quando um caminho começar
          com uma barra.  Por exemplo, o caminho ‘/etc/hosts’ é
          convertido para a URL ‘///etc/hosts’.

     No Windows, as letras de unidade não são mais convertidas em
     maiúsculas, e os caracteres ‘:’ que não seguem uma letra de unidade
     não causam mais o levantamento de uma exceção *note OSError: 2bf.

     (Contribuição de Barney Gale em gh-125866(3).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc7616.html

   (2) https://github.com/python/cpython/issues/128193

   (3) https://github.com/python/cpython/issues/125866


File: python.info,  Node: uuid,  Next: webbrowser,  Prev: urllib,  Up: Módulos melhorados

1.1.5.59 uuid
.............

   * Add support for UUID versions 6, 7, and 8 via *note uuid6(): 2c1,
     *note uuid7(): 2c2, and *note uuid8(): 2c3. respectively, as
     specified in RFC 9562(1).  (Contributed by Bénédikt Tran in
     gh-89083(2).)

   * *note NIL: 2c4. and *note MAX: 2c5. are now available to represent
     the Nil and Max UUID formats as defined by RFC 9562(3).
     (Contributed by Nick Pope in gh-128427(4).)

   * Allow generating multiple UUIDs simultaneously on the command-line
     via *note python -m uuid -count: 2c6.  (Contributed by Simon Legner
     in gh-131236(5).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc9562.html

   (2) https://github.com/python/cpython/issues/89083

   (3) https://datatracker.ietf.org/doc/html/rfc9562.html

   (4) https://github.com/python/cpython/issues/128427

   (5) https://github.com/python/cpython/issues/131236


File: python.info,  Node: webbrowser,  Next: zipfile,  Prev: uuid,  Up: Módulos melhorados

1.1.5.60 webbrowser
...................

   * Os nomes na variável de ambiente ‘BROWSER’ agora podem se referir a
     navegadores já registrados para o módulo *note webbrowser: 11b, em
     vez de sempre gerar um novo comando de navegador.

     Isso torna possível definir ‘BROWSER’ como o valor de um dos
     navegadores suportados no macOS.


File: python.info,  Node: zipfile,  Prev: webbrowser,  Up: Módulos melhorados

1.1.5.61 zipfile
................

   * Added *note ZipInfo._for_archive: 2c9, a method to resolve suitable
     defaults for a *note ZipInfo: 2ca. object as used by *note
     ZipFile.writestr: 2cb.  (Contributed by Bénédikt Tran in
     gh-123424(1).)

   * *note ZipFile.writestr(): 2cb. now respects the ‘SOURCE_DATE_EPOCH’
     environment variable in order to better support reproducible
     builds.  (Contributed by Jiahao Li in gh-91279(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123424

   (2) https://github.com/python/cpython/issues/91279


File: python.info,  Node: Otimizações,  Next: Removidos,  Prev: Módulos melhorados,  Up: O que há de novo no Python 3 14

1.1.6 Otimizações
-----------------

   * O tempo de importação para vários módulos de biblioteca padrão foi
     melhorado, incluindo *note annotationlib: 6, *note ast: 9, *note
     asyncio: b, *note base64: f, *note cmd: 1a, *note csv: 2d, *note
     gettext: 67, *note importlib.util: 81, *note locale: 8a, *note
     mimetypes: 93, *note optparse: a4, *note pickle: ab, *note pprint:
     b3, *note pstats: b5, *note shlex: c9, *note socket: d1, *note
     string: d8, *note subprocess: dc, *note threading: f3, *note
     tomllib: 102, *note types: 109. e *note zipfile: 137.

     (Contribuição de Adam Turner, Bénédikt Tran, Chris Markiewicz, Eli
     Schwartz, Hugo van Kemenade, Jelle Zijlstra e outros em
     gh-118761(1).)

   * The interpreter now avoids some reference count modifications
     internally when it’s safe to do so.  This can lead to different
     values being returned from *note sys.getrefcount(): 2cd. and *note
     Py_REFCNT(): 2ce. compared to previous versions of Python.  See
     *note below: 2cf. for details.

* Menu:

* asyncio: asyncio<2>.
* base64::
* bdb::
* difflib: difflib<2>.
* gc::
* io: io<2>.
* pathlib: pathlib<2>.
* pdb: pdb<2>.
* uuid: uuid<2>.
* zlib::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118761


File: python.info,  Node: asyncio<2>,  Next: base64,  Up: Otimizações

1.1.6.1 asyncio
...............

   * Standard benchmark results have improved by 10-20% following the
     implementation of a new per-thread doubly linked list for *note
     native tasks: 1c7, also reducing memory usage.  This enables
     external introspection tools such as *note python -m asyncio
     pstree: 147. to introspect the call graph of asyncio tasks running
     in all threads.  (Contributed by Kumar Aditya in gh-107803(1).)

   * O módulo agora conta com suporte de primeira classe para *note
     construção com threads livres: 1f3.  Isso permite a execução
     paralela de múltiplos laços de eventos em diferentes threads, com
     escala linear com o número de threads.  (Contribuição de Kumar
     Aditya em gh-128002(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/107803

   (2) https://github.com/python/cpython/issues/128002


File: python.info,  Node: base64,  Next: bdb,  Prev: asyncio<2>,  Up: Otimizações

1.1.6.2 base64
..............

   * *note b16decode(): 2d2. agora é até seis vezes mais rápido.
     (Contribuição de Bénédikt Tran, Chris Markiewicz e Adam Turner em
     gh-118761(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118761


File: python.info,  Node: bdb,  Next: difflib<2>,  Prev: base64,  Up: Otimizações

1.1.6.3 bdb
...........

   * O depurador básico agora conta com um backend baseado em *note
     sys.monitoring: e0, que pode ser selecionado passando
     ‘'monitoring'’ para o novo parâmetro 'backend' da classe *note Bdb:
     2d4.  (Contribuição de Tian Gao em gh-124533(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124533


File: python.info,  Node: difflib<2>,  Next: gc,  Prev: bdb,  Up: Otimizações

1.1.6.4 difflib
...............

   * A função *note IS_LINE_JUNK(): 2d6. agora é até duas vezes mais
     rápida.  (Contribuição de Adam Turner e Semyon Moroz em
     gh-130167(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130167


File: python.info,  Node: gc,  Next: io<2>,  Prev: difflib<2>,  Up: Otimizações

1.1.6.5 gc
..........

   * O novo *note coletor de lixo incremental: 152. significa que os
     tempos máximos de pausa são reduzidos em uma ordem de magnitude ou
     mais para heaps maiores.

     Devido a essa otimização, o significado dos resultados de *note
     get_threshold(): 2d8. e *note set_threshold(): 2d9. foi alterado,
     juntamente com *note get_count(): 2da. e *note get_stats(): 2db.

        - Para retrocompatibilidade, *note get_threshold(): 2d8.
          continua retornando uma tupla de três itens.  O primeiro valor
          é o limite para coleções novas, como antes; o segundo valor
          determina a taxa de varredura da coleção antiga (o padrão é
          10, e valores mais altos significam que a coleção antiga é
          varrida mais lentamente).  O terceiro valor agora não tem mais
          significado e é sempre zero.

        - *note set_threshold(): 2d9. agora ignora quaisquer itens após
          o segundo.

        - *note get_count(): 2da. e *note get_stats(): 2db. continuam
          retornando o mesmo formato de resultados.  A única diferença é
          que, em vez dos resultados se referirem às gerações jovem,
          idosa e idosa, os resultados se referem à geração jovem e aos
          espaços de envelhecimento e coleta da geração idosa.

     Em resumo, o código que tenta manipular o comportamento do ciclo de
     coleta de lixo pode não funcionar exatamente como o esperado, mas é
     muito improvável que seja prejudicial.  Todos os outros códigos
     funcionarão perfeitamente.

     (Contribuição de Mark Shannon em gh-108362(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108362


File: python.info,  Node: io<2>,  Next: pathlib<2>,  Prev: gc,  Up: Otimizações

1.1.6.6 io
..........

   * Abrir e ler arquivos agora executa menos chamadas de sistema.  Ler
     um pequeno arquivo em cache do sistema operacional na íntegra é até
     15% mais rápido.  (Contribuição de Cody Maloney e Victor Stinner em
     gh-120754(1) e gh-90102(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120754

   (2) https://github.com/python/cpython/issues/90102


File: python.info,  Node: pathlib<2>,  Next: pdb<2>,  Prev: io<2>,  Up: Otimizações

1.1.6.7 pathlib
...............

   * *note Path.read_bytes: 2de. agora usa o modo sem buffer para abrir
     arquivos, o que é entre 9% e 17% mais rápido para leitura completa.
     (Contribuição de Cody Maloney em gh-120754(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120754


File: python.info,  Node: pdb<2>,  Next: uuid<2>,  Prev: pathlib<2>,  Up: Otimizações

1.1.6.8 pdb
...........

   * *note pdb: aa. agora suporta dois backends, baseados em *note
     sys.settrace(): 2e0. ou *note sys.monitoring: e0.  Usar a *note CLI
     do pdb: 2e1. ou *note breakpoint(): 270. sempre usará o backend
     *note sys.monitoring: e0.  Instanciar explicitamente *note pdb.Pdb:
     272. e suas classes derivadas usará o backend *note sys.settrace():
     2e0. por padrão, que é configurável.  (Contribuição de Tian Gao em
     gh-124533(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124533


File: python.info,  Node: uuid<2>,  Next: zlib,  Prev: pdb<2>,  Up: Otimizações

1.1.6.9 uuid
............

   * *note uuid3(): 2e3. e *note uuid5(): 2e4. agora são aproximadamente
     40% mais rápidos para nomes de 16 bytes e 20% mais rápidos para
     nomes de 1024 bytes.  O desempenho para nomes mais longos permanece
     inalterado.  (Contribuição de Bénédikt Tran em gh-128150(1).)

   * *note uuid4(): 2e5. agora é cerca de 30% mais rápido.
     (Contribuição de Bénédikt Tran em gh-128150(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128150

   (2) https://github.com/python/cpython/issues/128150


File: python.info,  Node: zlib,  Prev: uuid<2>,  Up: Otimizações

1.1.6.10 zlib
.............

   * No Windows, zlib-ng(1) agora é usado como implementação do módulo
     *note zlib: 139. nos binários padrão.  Não há incompatibilidades
     conhecidas entre ‘zlib-ng’ e a implementação ‘zlib’ usada
     anteriormente.  Isso deve resultar em melhor desempenho em todos os
     níveis de compactação.

     Vale ressaltar que ‘zlib.Z_BEST_SPEED’ (‘1’) pode resultar em
     significativamente menos compressão do que a implementação
     anterior, além de reduzir significativamente o tempo necessário
     para compactar.

     (Contribuição de Steve Dower em gh-91349(2).)

   ---------- Footnotes ----------

   (1) https://github.com/zlib-ng/zlib-ng

   (2) https://github.com/python/cpython/issues/91349


File: python.info,  Node: Removidos,  Next: Descontinuados,  Prev: Otimizações,  Up: O que há de novo no Python 3 14

1.1.7 Removidos
---------------

* Menu:

* argparse: argparse<2>.
* ast: ast<2>.
* asyncio: asyncio<3>.
* email::
* importlib.abc: importlib abc.
* itertools::
* pathlib: pathlib<3>.
* pkgutil::
* pty::
* sqlite3::
* urllib: urllib<2>.


File: python.info,  Node: argparse<2>,  Next: ast<2>,  Up: Removidos

1.1.7.1 argparse
................

   * Remove os parâmetros 'type', 'choices' e 'metavar' de
     ‘BooleanOptionalAction’.  Eles estão descontinuados desde o Python
     3.12.  (Contribuição de Nikita Sobolev em gh-118805(1).)

   * Chamar *note add_argument_group(): 2e9. em um grupo de argumentos
     agora gera um *note ValueError: 2ea.  Da mesma forma, *note
     add_argument_group(): 2e9. ou *note add_mutually_exclusive_group():
     2eb. em um grupo mutuamente exclusivo agora levantam *note
     ValueError: 2ea.s.  Esse “aninhamento” nunca foi suportado,
     frequentemente não funcionava corretamente e era exposto
     involuntariamente por herança.  Essa funcionalidade está
     descontinuada desde o Python 3.11.  (Contribuição de Savannah
     Ostrowski em gh-127186(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118805

   (2) https://github.com/python/cpython/issues/127186


File: python.info,  Node: ast<2>,  Next: asyncio<3>,  Prev: argparse<2>,  Up: Removidos

1.1.7.2 ast
...........

   * Remove as seguintes classes, que são apelidos descontinuados de
     *note Constant: 2ed. desde o Python 3.8 e emitem avisos de
     descontinuação desde o Python 3.12:

        * ‘Bytes’

        * ‘Ellipsis’

        * ‘NameConstant’

        * ‘Num’

        * ‘Str’

     Como consequência dessas remoções, os métodos ‘visit_Num’,
     ‘visit_Str’, ‘visit_Bytes’, ‘visit_NameConstant’ e ‘visit_Ellipsis’
     definidos pelo usuário nas subclasses personalizadas *note
     NodeVisitor: 2ee. não serão mais chamados quando a subclasse
     ‘NodeVisitor’ estiver visitando uma AST. Em vez disso, defina um
     método ‘visit_Constant’.

     (Contribuição de Alex Waygood em gh-119562(1).)

   * Remove as seguintes propriedades descontinuadas em *note
     ast.Constant: 2ed, que estavam presentes para compatibilidade com
     as classes AST agora removidas:

        * ‘Constant.n’

        * ‘Constant.s’

     Em vez disso, use ‘Constant.value’.  (Contribuição de Alex Waygood
     em gh-119562(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119562

   (2) https://github.com/python/cpython/issues/119562


File: python.info,  Node: asyncio<3>,  Next: email,  Prev: ast<2>,  Up: Removidos

1.1.7.3 asyncio
...............

   * Remove as seguintes classes, métodos e funções, que foram
     descontinuados desde o Python 3.12:

        * ‘AbstractChildWatcher’

        * ‘FastChildWatcher’

        * ‘MultiLoopChildWatcher’

        * ‘PidfdChildWatcher’

        * ‘SafeChildWatcher’

        * ‘ThreadedChildWatcher’

        * ‘AbstractEventLoopPolicy.get_child_watcher()’

        * ‘AbstractEventLoopPolicy.set_child_watcher()’

        * ‘get_child_watcher()’

        * ‘set_child_watcher()’

     (Contribuição de Kumar Aditya em gh-120804(1).)

   * *note asyncio.get_event_loop(): 2f0. agora levanta uma *note
     RuntimeError: 243. se não houver um laço de eventos atual e não
     cria mais implicitamente um laço de eventos.

     (Contribuição de Kumar Aditya em gh-126353(2).)

     Existem alguns padrões que usam *note asyncio.get_event_loop():
     2f0, a maioria deles pode ser substituída por *note asyncio.run():
     2f1.

     Se você estiver executando uma função assíncrona, basta usar *note
     asyncio.run(): 2f1.

     Antes:

          async def main():
              ...


          loop = asyncio.get_event_loop()
          try:
              loop.run_until_complete(main())
          finally:
              loop.close()

     Depois:

          async def main():
              ...

          asyncio.run(main())

     Se você precisar iniciar algo, por exemplo, um servidor escutando
     em um soquete e depois rodar para sempre, use *note asyncio.run():
     2f1. e um *note asyncio.Event: 2f2.

     Antes:

          def start_server(loop): ...

          loop = asyncio.get_event_loop()
          try:
              start_server(loop)
              loop.run_forever()
          finally:
              loop.close()

     Depois:

          def start_server(loop): ...

          async def main():
              start_server(asyncio.get_running_loop())
              await asyncio.Event().wait()

          asyncio.run(main())

     Se você precisar executar algo em um laço de eventos, execute algum
     código de bloqueio em torno dele, use *note asyncio.Runner: 2f3.

     Antes:

          async def operation_one(): ...
          def blocking_code(): ...
          async def operation_two(): ...

          loop = asyncio.get_event_loop()
          try:
              loop.run_until_complete(operation_one())
              blocking_code()
              loop.run_until_complete(operation_two())
          finally:
              loop.close()

     Depois:

          async def operation_one(): ...
          def blocking_code(): ...
          async def operation_two(): ...

          with asyncio.Runner() as runner:
              runner.run(operation_one())
              blocking_code()
              runner.run(operation_two())

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120804

   (2) https://github.com/python/cpython/issues/126353


File: python.info,  Node: email,  Next: importlib abc,  Prev: asyncio<3>,  Up: Removidos

1.1.7.4 email
.............

   * Remove o parâmetro 'isdst' de *note email.utils.localtime(): 2f5,
     que foi descontinuado e é ignorado desde o Python 3.12.
     (Contribuição de Hugo van Kemenade em gh-118798(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118798


File: python.info,  Node: importlib abc,  Next: itertools,  Prev: email,  Up: Removidos

1.1.7.5 importlib.abc
.....................

   * Remove classes descontinuadas *note importlib.abc: 7c.:

        * ‘ResourceReader’ (use *note TraversableResources: 2f7.)

        * ‘Traversable’ (use *note Traversable: 2f8.)

        * ‘TraversableResources’ (use *note TraversableResources: 2f7.)

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93963


File: python.info,  Node: itertools,  Next: pathlib<3>,  Prev: importlib abc,  Up: Removidos

1.1.7.6 itertools
.................

   * Remove o suporte para operações de cópia, cópia profunda e de
     serialização com pickle dos iteradores *note itertools: 85.  Eles
     emitem um *note DeprecationWarning: 1a3. desde o Python 3.12.
     (Contribuição de Raymond Hettinger em gh-101588(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101588


File: python.info,  Node: pathlib<3>,  Next: pkgutil,  Prev: itertools,  Up: Removidos

1.1.7.7 pathlib
...............

   * Remove o suporte para passagem de argumentos nomeados adicionais
     para *note Path: 265.  Em versões anteriores, tais argumentos eram
     ignorados.  (Contribuição de Barney Gale em gh-74033(1).)

   * Remove o suporte para passagem de argumentos posicionais adicionais
     para *note PurePath.relative_to(): 2fb. e *note is_relative_to():
     2fc.  Em versões anteriores, tais argumentos eram unidos a 'other'.
     (Contribuição de Barney Gale em gh-78707(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/74033

   (2) https://github.com/python/cpython/issues/78707


File: python.info,  Node: pkgutil,  Next: pty,  Prev: pathlib<3>,  Up: Removidos

1.1.7.8 pkgutil
...............

   * Remove as funções ‘get_loader()’ e ‘find_loader()’, que foram
     descontinuadas desde o Python 3.12.  (Contribuição de Bénédikt Tran
     em gh-97850(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97850


File: python.info,  Node: pty,  Next: sqlite3,  Prev: pkgutil,  Up: Removidos

1.1.7.9 pty
...........

   * Remove as funções ‘master_open()’ e ‘slave_open()’, que foram
     descontinuadas desde o Python 3.12.  Em vez disso, use *note
     pty.openpty(): 2ff.  (Contribuição de Nikita Sobolev em
     gh-118824(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118824


File: python.info,  Node: sqlite3,  Next: urllib<2>,  Prev: pty,  Up: Removidos

1.1.7.10 sqlite3
................

   * Remove ‘version’ e ‘version_info’ do módulo *note sqlite3: d4.; use
     *note sqlite_version: 301. e *note sqlite_version_info: 302. para o
     número da versão real da biblioteca SQLite em tempo de execução.
     (Contribuição de Hugo van Kemenade em gh-118924(1).)

   * Usar uma sequência de parâmetros com espaços reservados nomeados
     agora levanta uma *note ProgrammingError: 303, que estava
     descontinuado desde o Python 3.12.  (Contribuição de Erlend E.
     Aasland em gh-118928(2) e gh-101693(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118924

   (2) https://github.com/python/cpython/issues/118928

   (3) https://github.com/python/cpython/issues/101693


File: python.info,  Node: urllib<2>,  Prev: sqlite3,  Up: Removidos

1.1.7.11 urllib
...............

   * Remove a classe ‘Quoter’ de *note urllib.parse: 110, que está
     descontinuada desde o Python 3.11.  (Contribuição de Nikita Sobolev
     em gh-118827(1).)

   * Remove as classes ‘URLopener’ e ‘FancyURLopener’ de *note
     urllib.request: 111, que foram descontinuadas desde o Python 3.3.

     ‘myopener.open()’ pode ser substituído por *note urlopen(): 305.
     ‘myopener.retrieve()’ pode ser substituído por *note urlretrieve():
     306.  Personalizações nas classes de abertura podem ser feitas
     passando manipuladores personalizados para *note build_opener():
     307.  (Contribuição de Barney Gale em gh-84850(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118827

   (2) https://github.com/python/cpython/issues/84850


File: python.info,  Node: Descontinuados,  Next: Alterações de bytecode do CPython,  Prev: Removidos,  Up: O que há de novo no Python 3 14

1.1.8 Descontinuados
--------------------

* Menu:

* Novas descontinuações::
* 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.19: Remoção pendente no Python 3 19.
* Remoção pendente em versões futuras::


File: python.info,  Node: Novas descontinuações,  Next: Remoção pendente no Python 3 15,  Up: Descontinuados

1.1.8.1 Novas descontinuações
.............................

   * Passar um número complexo como argumento 'real' ou 'imag' no
     construtor *note complex(): 197. agora está descontinuado; números
     complexos devem ser passados apenas como um único argumento
     posicional.  (Contribuição de Serhiy Storchaka em gh-109218(1).)

   * *note argparse: 7.:

        * A passagem do argumento nomeado não documentado 'prefix_chars'
          para o método *note add_argument_group(): 2e9. agora está
          descontinuado.  (Contribuição de Savannah Ostrowski em
          gh-125563(2).)

        * O conversor de tipo *note argparse.FileType: 30a. foi
          descontinuado.  Qualquer coisa relacionada a gerenciamento de
          recursos deve ser tratado posteriormente, após os argumentos
          terem sido analisados.  (Contribuição de Serhiy Storchaka em
          gh-58032(3).)

   * *note asyncio: b.:

        * A ‘asyncio.iscoroutinefunction()’ está agora descontinuado e
          será removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 30b. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(4).)

        * O sistema de políticas *note asyncio: b. está descontinuado e
          será removido no Python 3.16.  Em particular, as seguintes
          classes e funções estão descontinuadas:

             * *note asyncio.AbstractEventLoopPolicy: 30c.

             * *note asyncio.DefaultEventLoopPolicy: 30d.

             * *note asyncio.WindowsSelectorEventLoopPolicy: 30e.

             * *note asyncio.WindowsProactorEventLoopPolicy: 30f.

             * *note asyncio.get_event_loop_policy(): 310.

             * *note asyncio.set_event_loop_policy(): 311.

          Os usuários devem usar *note asyncio.run(): 2f1. ou *note
          asyncio.Runner: 2f3. com o argumento 'loop_factory' para usar
          a implementação de laço de eventos desejada.

          por exemplo, para usar *note asyncio.SelectorEventLoop: 312.
          no Windows:

               import asyncio

               async def main():
                   ...

               asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

          (Contribuição de Kumar Aditya em gh-127949(5).)

   * *note codecs: 1c.: A função *note codecs.open(): 313. está
     descontinuada e será removida em uma versão futura do Python.  Em
     vez disso, use *note open(): 314.  (Contribuição de Inada Naoki em
     gh-133036(6).)

   * *note ctypes: 2e.:

        * Em plataformas não Windows, a configuração de *note
          Structure._pack_: 315. para usar um layout de memória padrão
          compatível com MSVC foi também descontinuada em favor da
          configuração de *note Structure._layout_: 1e6. para ‘'ms'’, e
          será removida no Python 3.19.  (Contribuição de Petr Viktorin
          em gh-131747(7).)

        * A chamada de *note ctypes.POINTER(): 1f0. em uma string está
          agora descontinuada.  Use *note tipos incompletos: 316. para
          estruturas autorreferenciais.  Além disso, o
          ‘ctypes._pointer_type_cache’ interno está descontinuado.
          Consulte *note ctypes.POINTER(): 1f0. para obter detalhes de
          implementação atualizados.  (Contribuição de Sergey Myrianov
          em gh-100926(8).)

   * *note functools: 63.: Chamar a implementação Python de *note
     functools.reduce(): 219. com 'function' ou 'sequence' como
     argumentos nomeados agora está descontinuado; os parâmetros serão
     tornados somente-posicionais no Python 3.16.  (Contribuição de
     Kirill Podoprigora em gh-121676(9).)

   * *note logging: 8b.: O suporte para manipuladores de registro
     personalizados com o argumento 'strm' está agora descontinuado e
     está programado para ser removido no Python 3.16.  Em vez disso,
     defina manipuladores com o argumento 'stream'.  (Contribuição de
     Mariusz Felisiak em gh-115032(10).)

   * *note mimetypes: 93.: Extensões válidas estão vazias ou devem
     começar com ‘.’ para *note mimetypes.MimeTypes.add_type(): 317.
     Extensões sem ponto estão descontinuadas e levantarão uma exceção
     *note ValueError: 2ea. no Python 3.16.  (Contribuição de Hugo van
     Kemenade em gh-75223(11).)

   * ‘nturl2path’: Este módulo está descontinuado.  Em vez disso, chame
     *note urllib.request.url2pathname(): 2bc. e *note pathname2url():
     2be.  (Contribuição de Barney Gale em gh-125866(12).)

   * *note os: a5.: As funções *note os.popen(): 318. e *note os.spawn*:
     319. estão agora *note suavemente descontinuadas: 23c.  Elas não
     devem mais ser usadas para escrever código novo.  O módulo *note
     subprocess: dc. é recomendado em seu lugar.  (Contribuição de
     Victor Stinner em gh-120743(13).)

   * *note pathlib: a8.: ‘pathlib.PurePath.as_uri()’ está agora
     descontinuado e está programado para remoção no Python 3.19.  Em
     vez disso, use *note pathlib.Path.as_uri(): 31a.  (Contribuição de
     Barney Gale em gh-123599(14).)

   * *note pdb: aa.: O atributo não documentado
     ‘pdb.Pdb.curframe_locals’ agora é uma propriedade somente leitura
     descontinuada, que será removido em uma versão futura do Python.  O
     acesso dinâmico de baixa sobrecarga aos locais de quadro,
     adicionado no Python 3.13 pela PEP 667(15), significa que a
     referência ao cache de locais de quadro, armazenada anteriormente
     neste atributo, não é mais necessária.  Depuradores derivados devem
     acessar ‘pdb.Pdb.curframe.f_locals’ diretamente no Python 3.13 e
     versões posteriores.  (Contribuição de Tian Gao em gh-124369(16) e
     gh-125951(17).)

   * *note symtable: de.: Descontinua *note
     symtable.Class.get_methods(): 31b. por falta de interesse,
     programado para remoção no Python 3.16.  (Contribuição de Bénédikt
     Tran em gh-119698(18).)

   * *note tkinter: f6.: Os métodos ‘tkinter.Variable’
     ‘trace_variable()’, ‘trace_vdelete()’ e ‘trace_vinfo()’ estão
     descontinuados.  Em vez disso, use ‘trace_add()’, ‘trace_remove()’
     e ‘trace_info()’.  (Contribuição de Serhiy Storchaka em
     gh-120220(19).)

   * *note urllib.parse: 110.: Aceitar objetos com valores falsos (como
     ‘0’ e ‘[]’), exceto strings vazias, objetos bytes ou similares e
     ‘None’ nas funções *note parse_qsl(): 31c. e *note parse_qs(): 31d,
     agora está descontinuado.  (Contribuição de Serhiy Storchaka em
     gh-116897(20).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109218

   (2) https://github.com/python/cpython/issues/125563

   (3) https://github.com/python/cpython/issues/58032

   (4) https://github.com/python/cpython/issues/122875

   (5) https://github.com/python/cpython/issues/127949

   (6) https://github.com/python/cpython/issues/133036

   (7) https://github.com/python/cpython/issues/131747

   (8) https://github.com/python/cpython/issues/100926

   (9) https://github.com/python/cpython/issues/121676

   (10) https://github.com/python/cpython/issues/115032

   (11) https://github.com/python/cpython/issues/75223

   (12) https://github.com/python/cpython/issues/125866

   (13) https://github.com/python/cpython/issues/120743

   (14) https://github.com/python/cpython/issues/123599

   (15) https://peps.python.org/pep-0667/

   (16) https://github.com/python/cpython/issues/124369

   (17) https://github.com/python/cpython/issues/125951

   (18) https://github.com/python/cpython/issues/119698

   (19) https://github.com/python/cpython/issues/120220

   (20) https://github.com/python/cpython/issues/116897


File: python.info,  Node: Remoção pendente no Python 3 15,  Next: Remoção pendente no Python 3 16,  Prev: Novas descontinuações,  Up: Descontinuados

1.1.8.2 Remoção pendente no Python 3.15
.......................................

   * O sistema de importação:

        * A definição de *note __cached__: 31f. em um módulo enquanto
          falha na definição de *note __spec__.cached: 320. 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__: 321. em um módulo enquanto
          falha na definição de *note __spec__.parent: 322. 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: 2e.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 76.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 323. 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: 7b.:

        * Método ‘load_module()’: use ‘exec_module()’.

   * *note locale: 8a.:

        * A função *note getdefaultlocale(): 324. 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(): 325, *note
          setlocale(): 326. e *note getencoding(): 327.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a8.:

        * *note PurePath.is_reserved(): 328. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 329. para
          detectar caminhos reservados no Windows.

   * *note platform: af.:

        * *note java_ver(): 32a. 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: e1.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          32b. foi descontinuado desde o Python 3.12.

   * *note threading: f3.:

        * *note RLock(): 32c. 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: 109.:

        * *note types.CodeType: 32d.: o acesso a *note co_lnotab: 32e.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a3. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 10a.:

        * A não-documentada sintaxe de argumento nomeado para criar
          classes *note NamedTuple: 32f. (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: 330.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():
          331. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 10a, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 119.:

        * Os métodos *note getmark(): 332, ‘setmark()’ e *note
          getmarkers(): 333. das classes *note Wave_read: 334. e *note
          Wave_write: 335. foram descontinuados desde o Python 3.13.

   * *note zipimport: 138.:

        * *note load_module(): 336. está descontinuado desde o Python
          3.10.  Em vez disso, use *note exec_module(): 337.
          (Contribuição de Jiahao Li em gh-125746(7).)

   ---------- 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

   (7) https://github.com/python/cpython/issues/125746


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: Descontinuados

1.1.8.3 Remoção pendente no Python 3.16
.......................................

   * O sistema de importação:

        * A definição de *note __loader__: 339. em um módulo enquanto
          falha na definição de *note __spec__.loader: 33a. 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: 8.:

        * 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: 33b.) para caracteres Unicode.

   * *note asyncio: b.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 30b. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

        * O sistema de políticas *note asyncio: b. está descontinuado e
          será removido no Python 3.16.  Em particular, as seguintes
          classes e funções estão descontinuadas:

             * *note asyncio.AbstractEventLoopPolicy: 30c.

             * *note asyncio.DefaultEventLoopPolicy: 30d.

             * *note asyncio.WindowsSelectorEventLoopPolicy: 30e.

             * *note asyncio.WindowsProactorEventLoopPolicy: 30f.

             * *note asyncio.get_event_loop_policy(): 310.

             * *note asyncio.set_event_loop_policy(): 311.

          Os usuários devem usar *note asyncio.run(): 2f1. ou *note
          asyncio.Runner: 2f3. com 'loop_factory' para usar a
          implementação de loop de eventos desejada.

          por exemplo, para usar *note asyncio.SelectorEventLoop: 312.
          no Windows:

               import asyncio

               async def main():
                   ...

               asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

          (Contribuição de Kumar Aditya em gh-127949(2).)

   * *note builtins: 13.:

        * 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 functools: 63.:

        * A chamada da implementação Python de *note functools.reduce():
          219. com 'function' ou 'sequence' como argumentos nomeados foi
          descontinuada desde o Python 3.14.

   * *note logging: 8b.:

     O suporte para manipuladores de registro personalizados com o
     argumento 'strm' foi descontinuado e está programado para ser
     removido no Python 3.16.  Em vez disso, defina manipuladores com o
     argumento 'stream'.  (Contribuição de Mariusz Felisiak em
     gh-115032(3).)

   * *note mimetypes: 93.:

        * Extensões válidas começam com um ‘.’ ou estão vazias para
          *note mimetypes.MimeTypes.add_type(): 317.  Extensões sem
          ponto estão descontinuadas e levantarão uma exceção *note
          ValueError: 2ea. no Python 3.16.  (Contribuição de Hugo van
          Kemenade em gh-75223(4).)

   * *note shutil: ca.:

        * 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: 243.

   * *note symtable: de.:

        * O método *note Class.get_methods: 31b. foi descontinuado desde
          o Python 3.14.

   * *note sys: df.:

        * A função *note _enablelegacywindowsfsencoding(): 33c. foi
          descontinuada desde o Python 3.13.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 33d.

   * *note sysconfig: e1.:

        * A função ‘sysconfig.expand_makefile_vars()’ está descontinuada
          desde o Python 3.14.  Em vez disso, use o argumento ‘vars’ de
          *note sysconfig.get_paths(): 33e.

   * *note tarfile: e4.:

        * 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

   (2) https://github.com/python/cpython/issues/127949

   (3) https://github.com/python/cpython/issues/115032

   (4) https://github.com/python/cpython/issues/75223


File: python.info,  Node: Remoção pendente no Python 3 17,  Next: Remoção pendente no Python 3 19,  Prev: Remoção pendente no Python 3 16,  Up: Descontinuados

1.1.8.4 Remoção pendente no Python 3.17
.......................................

   * *note collections.abc: 1f.:

        - *note collections.abc.ByteString: 340. 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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: 10a.:

        - 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(): 2aa. e *note typing.get_args(): 2ab, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 343, 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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 19,  Next: Remoção pendente em versões futuras,  Prev: Remoção pendente no Python 3 17,  Up: Descontinuados

1.1.8.5 Remoção pendente no Python 3.19
.......................................

   * *note ctypes: 2e.:

        * Troca implícita para o layout de estrutura compatível com MSVC
          definindo *note _pack_: 315, mas não *note _layout_: 1e6. em
          plataformas não Windows.


File: python.info,  Node: Remoção pendente em versões futuras,  Prev: Remoção pendente no Python 3 19,  Up: Descontinuados

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: 7.:

        * O aninhamento de grupos de argumentos e o aninhamento de
          grupos mutuamente exclusivos estão descontinuado.

        * A passagem do argumento nomeado não documentado 'prefix_chars'
          para *note add_argument_group(): 2e9. agora está
          descontinuado.

        * O conversor de tipo *note argparse.FileType: 30a. está
          descontinuado.

   * *note builtins: 13.:

        * 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: 346, *note
          else: 17c, *note for: 347, *note if: 181, *note in: 348. ,
          *note is: 349. e *note or: 34a.  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: 19b.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 196.: esses métodos serão necessários
          para retornar uma instância de *note float: 196.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 197.: esses métodos serão
          necessários para retornar uma instância de *note complex: 197.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 197. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 15.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 34b. e *note calendar.FEBRUARY: 34c.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codecs: 1c.: use *note open(): 314. em vez de *note
     codecs.open(): 313.  (gh-133038(4))

   * *note codeobject.co_lnotab: 32e.: use o método *note
     codeobject.co_lines(): 34d.

   * *note datetime: 34.:

        * *note utcnow(): 34e.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 34f.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 67.: o valor de plural deve ser um número inteiro.

   * *note importlib: 7b.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          350. foi descontinuado: use o parâmetro 'optimization'.

   * *note importlib.metadata: 7e.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 8b.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 351.

   * *note mailbox: 8f.: o uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a5.: chame *note os.register_at_fork(): 352. 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: be.: 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(5).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: ca.: o parâmetro 'onerror' de *note rmtree(): 353.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d5.

        * *note ssl.SSLContext: 354. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 354.: *note set_npn_protocols(): 355. 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: f3.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          356.

        * ‘threading.Event.isSet()’: use *note is_set(): 357.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 358.: use o atributo *note
          threading.Thread.daemon: 359.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 35a.: use o atributo *note
          threading.Thread.name: 29f.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 35b.

        * ‘threading.activeCount()’: use *note threading.active_count():
          35c.

   * *note typing.Text: 35d. (gh-92332(6)).

   * A classe interna ‘typing._UnionGenericAlias’ não é mais usada para
     implementar *note typing.Union: 2a7.  Para preservar a
     compatibilidade com usuários que utilizam esta classe privada, uma
     correção de compatibilidade será fornecida pelo menos até a versão
     3.17 do Python.  (Contribuição de Jelle Zijlstra em gh-105499(7).)

   * *note unittest.IsolatedAsyncioTestCase: 35e.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 110.: use *note
     urlparse(): 35f.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note wsgiref: 11e.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 12b.: testar o valor verdade de um
     *note Element: 360. 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 sys._clear_type_cache(): 291. está descontinuada: use *note
     sys._clear_internal_caches(): 361.

   ---------- 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/133038

   (5) https://github.com/python/cpython/issues/91760

   (6) https://github.com/python/cpython/issues/92332

   (7) https://github.com/python/cpython/issues/105499


File: python.info,  Node: Alterações de bytecode do CPython,  Next: Alterações na API C,  Prev: Descontinuados,  Up: O que há de novo no Python 3 14

1.1.9 Alterações de bytecode do CPython
---------------------------------------

   * Substituído o opcode ‘BINARY_SUBSCR’ pelo opcode *note BINARY_OP:
     363. com o oparg ‘NB_SUBSCR’.  (Contribuição de Irit Katriel em
     gh-100239(1).)

   * Add the *note BUILD_INTERPOLATION: 364. and *note BUILD_TEMPLATE:
     365. opcodes to construct new *note Interpolation: 16b. and *note
     Template: 16a. instances, respectively.  (Contributed by Lysandros
     Nikolaou and others in gh-132661(2); see also *note PEP 750;
     Template strings: 144.).

   * Remove o opcode ‘BUILD_CONST_KEY_MAP’.  Em vez disso, use *note
     BUILD_MAP: 366.  (Contribuição de Mark Shannon em gh-122160(3).)

   * Substitui o opcode ‘LOAD_ASSERTION_ERROR’ por *note
     LOAD_COMMON_CONSTANT: 367. e adiciona suporte para carregar *note
     NotImplementedError: 368.

   * Adiciona os opcodes *note LOAD_FAST_BORROW: 369. e *note
     LOAD_FAST_BORROW_LOAD_FAST_BORROW: 36a. para reduzir a sobrecarga
     de contagem de referências quando o interpretador puder provar que
     a referência no quadro sobrevive à referência carregada na pilha.
     (Contribuição de Matt Page em gh-130704(4).)

   * Adiciona o opcode *note LOAD_SMALL_INT: 36b, que envia um inteiro
     pequeno igual a ‘oparg’ para a pilha.  O opcode ‘RETURN_CONST’ foi
     removido, pois não é mais usado.  (Contribuição de Mark Shannon em
     gh-125837(5).)

   * Adiciona a nova instrução *note LOAD_SPECIAL: 36c.  Gere código
     para as instruções *note with: 186. e *note async with: 185. usando
     a nova instrução.  Remove as instruções ‘BEFORE_WITH’ e
     ‘BEFORE_ASYNC_WITH’.  (Contribuição de Mark Shannon em
     gh-120507(6).

   * Adiciona o opcode *note POP_ITER: 36d. para oferecer suporte a
     iteradores “virtuais”.  (Contribuição de Mark Shannon em
     gh-132554(7).)

* Menu:

* Pseudoinstruções::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100239

   (2) https://github.com/python/cpython/issues/132661

   (3) https://github.com/python/cpython/issues/122160

   (4) https://github.com/python/cpython/issues/130704

   (5) https://github.com/python/cpython/issues/125837

   (6) https://github.com/python/cpython/issues/120507

   (7) https://github.com/python/cpython/issues/132554


File: python.info,  Node: Pseudoinstruções,  Up: Alterações de bytecode do CPython

1.1.9.1 Pseudoinstruções
........................

   * Add the ‘ANNOTATIONS_PLACEHOLDER’ pseudo instruction to support
     partially executed module-level annotations with *note deferred
     evaluation of annotations: 145.  (Contributed by Jelle Zijlstra in
     gh-130907(1).)

   * Adiciona a pseudoinstrução ‘BINARY_OP_EXTEND’ que executa um par de
     funções (funções de guarda e especialização) acessadas do cache
     inline.  (Contribuição de Irit Katriel em gh-100239(2).)

   * Adiciona três especializações para *note CALL_KW: 36f.;
     ‘CALL_KW_PY’ para chamadas de funções Python,
     ‘CALL_KW_BOUND_METHOD’ para chamadas de métodos vinculados e
     ‘CALL_KW_NON_PY’ para todas as outras chamadas.  (Contribuição de
     Mark Shannon em gh-118093(3).)

   * Adiciona as pseudoinstruções *note JUMP_IF_TRUE: 370. e *note
     JUMP_IF_FALSE: 371, saltos condicionais que não impactam a pilha.
     Substituídas pela sequência ‘COPY 1’, ‘TO_BOOL’,
     ‘POP_JUMP_IF_TRUE/FALSE’.  (Contribuição de Irit Katriel em
     gh-124285(4).)

   * Adiciona a pseudoinstrução ‘LOAD_CONST_MORTAL’.  (Contribuição de
     Mark Shannon em gh-128685(5).)

   * Adiciona a pseudoinstrução *note LOAD_CONST_IMMORTAL: 372, que faz
     o mesmo que ‘LOAD_CONST’, mas é mais eficiente para objetos
     imortais.  (Contribuição de Mark Shannon em gh-125837(6).)

   * Adiciona a pseudoinstrução *note NOT_TAKEN: 373, usada por *note
     sys.monitoring: e0. para registrar eventos de ramificação (como
     *note BRANCH_LEFT: 294.).  (Contribuição de Mark Shannon em
     gh-122548(7).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130907

   (2) https://github.com/python/cpython/issues/100239

   (3) https://github.com/python/cpython/issues/118093

   (4) https://github.com/python/cpython/issues/124285

   (5) https://github.com/python/cpython/issues/128685

   (6) https://github.com/python/cpython/issues/125837

   (7) https://github.com/python/cpython/issues/122548


File: python.info,  Node: Alterações na API C,  Next: Build changes,  Prev: Alterações de bytecode do CPython,  Up: O que há de novo no Python 3 14

1.1.10 Alterações na API C
--------------------------

* Menu:

* Python configuration C API::
* Novos recursos na API C::
* Mudanças na API C limitada::
* APIs C removidas::
* APIs C descontinuadas::


File: python.info,  Node: Python configuration C API,  Next: Novos recursos na API C,  Up: Alterações na API C

1.1.10.1 Python configuration C API
...................................

Adiciona uma *note PyInitConfig API C: 376. para configurar a
inicialização do Python sem depender de estruturas C e a capacidade de
fazer alterações compatíveis com ABI no futuro.

Complete the PEP 587(1) *note PyConfig C API: 377. by adding *note
PyInitConfig_AddModule(): 378. which can be used to add a built-in
extension module; a feature previously referred to as the “inittab”.

Adiciona as funções *note PyConfig_Get(): 379. e *note PyConfig_Set():
37a. para obter e definir a configuração de tempo de execução atual.

PEP 587(2) ‘Python Initialization Configuration’ unified all the ways to
configure Python’s initialization.  This PEP also unifies the
configuration of Python’s preinitialization and initialization in a
single API. Moreover, this PEP only provides a single choice to embed
Python, instead of having two ‘Python’ and ‘Isolated’ choices (PEP 587),
to further simplify the API.

The lower level PEP 587 PyConfig API remains available for use cases
with an intentionally higher level of coupling to CPython implementation
details (such as emulating the full functionality of CPython’s CLI,
including its configuration mechanisms).

(Contribuição de Victor Stinner em gh-107954(3).)

Ver também
..........

PEP 741(4) and PEP 587(5)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0587/

   (2) https://peps.python.org/pep-0587/

   (3) https://github.com/python/cpython/issues/107954

   (4) https://peps.python.org/pep-0741/

   (5) https://peps.python.org/pep-0587/


File: python.info,  Node: Novos recursos na API C,  Next: Mudanças na API C limitada,  Prev: Python configuration C API,  Up: Alterações na API C

1.1.10.2 Novos recursos na API C
................................

   * Adiciona *note Py_PACK_VERSION(): 37c. e *note
     Py_PACK_FULL_VERSION(): 37d, duas novas macros para empacotamento
     de bits de números de versão do Python.  Isso é útil para
     comparações com *note Py_Version: 37e. ou *note PY_VERSION_HEX:
     37f.  (Contribuição de Petr Viktorin em gh-128629(1).)

   * Adiciona a função *note PyBytes_Join(sep, iterable): 380,
     semelhante a ‘sep.join(iterable)’ em Python.  (Contribuição de
     Victor Stinner em gh-121645(2).)

   * Add functions to manipulate the configuration of the current
     runtime Python interpreter (*note PEP 741; Python configuration C
     API: 155.):

        * *note PyConfig_Get(): 379.

        * *note PyConfig_GetInt(): 381.

        * *note PyConfig_Set(): 37a.

        * *note PyConfig_Names(): 382.

     (Contribuição de Victor Stinner em gh-107954(3).)

   * Add functions to configure Python initialization (*note PEP 741;
     Python configuration C API: 155.):

        * *note Py_InitializeFromInitConfig(): 383.

        * *note PyInitConfig_AddModule(): 378.

        * *note PyInitConfig_Create(): 384.

        * *note PyInitConfig_Free(): 385.

        * *note PyInitConfig_FreeStrList(): 386.

        * *note PyInitConfig_GetError(): 387.

        * *note PyInitConfig_GetExitCode(): 388.

        * *note PyInitConfig_GetInt(): 389.

        * *note PyInitConfig_GetStr(): 38a.

        * *note PyInitConfig_GetStrList(): 38b.

        * *note PyInitConfig_HasOption(): 38c.

        * *note PyInitConfig_SetInt(): 38d.

        * *note PyInitConfig_SetStr(): 38e.

        * *note PyInitConfig_SetStrList(): 38f.

     (Contribuição de Victor Stinner em gh-107954(4).)

   * Adiciona a função *note Py_fopen(): 390. para abrir um arquivo.
     Isso funciona de forma semelhante à função padrão do C ‘fopen()’,
     aceitando um objeto Python como parâmetro 'path' e definindo uma
     exceção em caso de erro.  A nova função correspondente *note
     Py_fclose(): 391. deve ser usada para fechar um arquivo.
     (Contribuição de Victor Stinner em gh-127350(5).)

   * Adiciona *note Py_HashBuffer(): 392. para calcular e retornar o
     valor de hash de um buffer.  (Contribuição de Antoine Pitrou e
     Victor Stinner em gh-122854(6).)

   * Adiciona as funções auxiliares *note PyImport_ImportModuleAttr():
     393. e *note PyImport_ImportModuleAttrString(): 394. para importar
     um módulo e obter um atributo do módulo.  (Contribuição de Victor
     Stinner em gh-128911(7).)

   * Adiciona *note PyIter_NextItem(): 395. para substituir *note
     PyIter_Next(): 396, que tem um valor de retorno ambíguo.
     (Contribuição de Irit Katriel e Erlend Aasland em gh-105201(8).)

   * Adiciona a função *note PyLong_GetSign(): 397. para obter o sinal
     de objetos *note int: 19b.  (Contribuição de Sergey B Kirpichev em
     gh-116560(9).)

   * Adiciona *note PyLong_IsPositive(): 398, *note PyLong_IsNegative():
     399. e *note PyLong_IsZero(): 39a. para verificar se *note
     PyLongObject: 39b. é positivo, negativo ou zero, respectivamente.
     (Contribuição de James Roy e Sergey B Kirpichev em gh-126061(10).)

   * Adiciona novas funções para converter números C ‘<stdint.h>’
     para/de objetos *note int: 19b. Python:

        * *note PyLong_AsInt32(): 39c.

        * *note PyLong_AsInt64(): 39d.

        * *note PyLong_AsUInt32(): 39e.

        * *note PyLong_AsUInt64(): 39f.

        * *note PyLong_FromInt32(): 3a0.

        * *note PyLong_FromInt64(): 3a1.

        * *note PyLong_FromUInt32(): 3a2.

        * *note PyLong_FromUInt64(): 3a3.

     (Contribuição de Victor Stinner em gh-120389(11).)

   * Adiciona uma nova API de importação e exportação para objetos
     Python *note int: 19b. ( PEP 757(12)):

        * *note PyLong_GetNativeLayout(): 3a4.

        * *note PyLong_Export(): 3a5.

        * *note PyLong_FreeExport(): 3a6.

        * *note PyLongWriter_Create(): 3a7.

        * *note PyLongWriter_Finish(): 3a8.

        * *note PyLongWriter_Discard(): 3a9.

     (Contribuição de Sergey B Kirpichev e Victor Stinner em
     gh-102471(13).)

   * Adiciona *note PyMonitoring_FireBranchLeftEvent(): 3aa. e *note
     PyMonitoring_FireBranchRightEvent(): 3ab. para gerar eventos *note
     BRANCH_LEFT: 294. e *note BRANCH_RIGHT: 295, respectivamente.
     (Contribuição de Mark Shannon em gh-122548(14).)

   * Adiciona a função *note PyType_Freeze(): 3ac. para tornar um tipo
     imutável.  (Contribuição de Victor Stinner em gh-121654(15).)

   * Adiciona *note PyType_GetBaseByToken(): 3ad. e o slot *note
     Py_tp_token: 3ae. para facilitar a identificação da superclasse, o
     que tenta resolver o problema de verificação de tipos mencionado na
     PEP 630(16).  (Contribuição em gh-124153(17).)

   * Adiciona a nova função *note PyUnicode_Equal(): 3af. para testar se
     duas strings são iguais.  A função também foi adicionada à API C
     Limitada.  (Contribuição de Victor Stinner em gh-124502(18).)

   * Adiciona uma nova API *note PyUnicodeWriter: 3b0. para criar um
     objeto Python *note str: 169. com as seguintes funções:

        * *note PyUnicodeWriter_Create(): 3b1.

        * *note PyUnicodeWriter_DecodeUTF8Stateful(): 3b2.

        * *note PyUnicodeWriter_Discard(): 3b3.

        * *note PyUnicodeWriter_Finish(): 3b4.

        * *note PyUnicodeWriter_Format(): 3b5.

        * *note PyUnicodeWriter_WriteASCII(): 3b6.

        * *note PyUnicodeWriter_WriteChar(): 3b7.

        * *note PyUnicodeWriter_WriteRepr(): 3b8.

        * *note PyUnicodeWriter_WriteStr(): 3b9.

        * *note PyUnicodeWriter_WriteSubstring(): 3ba.

        * *note PyUnicodeWriter_WriteUCS4(): 3bb.

        * *note PyUnicodeWriter_WriteUTF8(): 3bc.

        * *note PyUnicodeWriter_WriteWideChar(): 3bd.

     (Contribuição de Victor Stinner em gh-119182(19).)

   * Os formatos ‘k’ e ‘K’ em *note PyArg_ParseTuple(): 3be. e funções
     similares agora usam *note __index__(): 19e. se disponível, assim
     como todos os outros formatos inteiros.  (Contribuição de Serhiy
     Storchaka em gh-112068(20).)

   * Adiciona suporte para uma nova unidade de formato ‘p’ em *note
     Py_BuildValue(): 3bf. que produz um objeto *note bool: 3c0. Python
     de um inteiro C. (Contribuição de Pablo Galindo em bpo-45325(21).)

   * Adiciona *note PyUnstable_IsImmortal(): 3c1. para determinar se um
     objeto é *note imortal: 28f, para fins de depuração.  (Contribuição
     de Peter Bierma em gh-128509(22).)

   * Adiciona *note PyUnstable_Object_EnableDeferredRefcount(): 3c2.
     para habilitar a contagem de referências adiada, conforme descrito
     em PEP 703(23).

   * Adiciona *note PyUnstable_Object_IsUniquelyReferenced(): 3c3. como
     substituto para ‘Py_REFCNT(op) == 1’ em construções com *note
     threads livres: 1f3.  (Contribuição de Peter Bierma em
     gh-133140(24).)

   * Adiciona *note PyUnstable_Object_IsUniqueReferencedTemporary():
     3c4. para determinar se um objeto é um objeto temporário exclusivo
     na pilha de operandos do interpretador.  Isso pode ser usado em
     alguns casos como um substituto para verificar se *note
     Py_REFCNT(): 2ce. é ‘1’ para objetos Python passados como
     argumentos para funções da API C. (Contribuição de Sam Gross em
     gh-133164(25).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128629

   (2) https://github.com/python/cpython/issues/121645

   (3) https://github.com/python/cpython/issues/107954

   (4) https://github.com/python/cpython/issues/107954

   (5) https://github.com/python/cpython/issues/127350

   (6) https://github.com/python/cpython/issues/122854

   (7) https://github.com/python/cpython/issues/128911

   (8) https://github.com/python/cpython/issues/105201

   (9) https://github.com/python/cpython/issues/116560

   (10) https://github.com/python/cpython/issues/126061

   (11) https://github.com/python/cpython/issues/120389

   (12) https://peps.python.org/pep-0757/

   (13) https://github.com/python/cpython/issues/102471

   (14) https://github.com/python/cpython/issues/122548

   (15) https://github.com/python/cpython/issues/121654

   (16) https://peps.python.org/pep-0630/#type-checking

   (17) https://github.com/python/cpython/issues/124153

   (18) https://github.com/python/cpython/issues/124502

   (19) https://github.com/python/cpython/issues/119182

   (20) https://github.com/python/cpython/issues/112068

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45325

   (22) https://github.com/python/cpython/issues/128509

   (23) https://peps.python.org/pep-0703/

   (24) https://github.com/python/cpython/issues/133140

   (25) https://github.com/python/cpython/issues/133164


File: python.info,  Node: Mudanças na API C limitada,  Next: APIs C removidas,  Prev: Novos recursos na API C,  Up: Alterações na API C

1.1.10.3 Mudanças na API C limitada
...................................

   * Na API C limitada versão 3.14 e versões mais novas, *note
     Py_TYPE(): 3c6. e *note Py_REFCNT(): 2ce. agora são implementadas
     como uma chamada de função opaca para ocultar detalhes de
     implementação.  (Contribuição de Victor Stinner em gh-120600(1) e
     gh-124127(2).)

   * Remove as macros *note PySequence_Fast_GET_SIZE: 3c7, *note
     PySequence_Fast_GET_ITEM: 3c8. e *note PySequence_Fast_ITEMS: 3c9.
     da API C limitada, já que elas estiveram quebradas na API C
     limitada.  (Contribuição de Victor Stinner em gh-91417(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120600

   (2) https://github.com/python/cpython/issues/124127

   (3) https://github.com/python/cpython/issues/91417


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
.........................

   * A criação de *note tipos imutáveis: 3cc. com bases mutáveis foi
     descontinuada no Python 3.12, e agora levanta *note TypeError: 198.
     (Contribuição de Nikita Sobolev em gh-119775(1).)

   * Remove o membro ‘PyDictObject.ma_version_tag’, que foi
     descontinuado no Python 3.12.  Em vez disso, use a API *note
     PyDict_AddWatcher(): 3cd.  (Contribuição de Sam Gross em
     gh-124296(2).)

   * Remova a função privada ‘_Py_InitializeMain()’.  Era uma *note API
     provisória: 3ce. adicionada ao Python 3.8 pela PEP 587(3).
     (Contribuição de Victor Stinner em gh-129033(4).)

   * Remove as APIs não documentadas ‘Py_C_RECURSION_LIMIT’ e
     ‘PyThreadState.c_recursion_remaining’.  Elas foram adicionadas no
     3.13 e foram removidas sem descontinuação.  Use *note
     Py_EnterRecursiveCall(): 3cf. para se proteger contra recursão
     descontrolada em código C. (Remoção por Petr Viktorin em
     gh-133079(5), veja também gh-130396(6).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119775

   (2) https://github.com/python/cpython/issues/124296

   (3) https://peps.python.org/pep-0587/

   (4) https://github.com/python/cpython/issues/129033

   (5) https://github.com/python/cpython/issues/133079

   (6) https://github.com/python/cpython/issues/130396


File: python.info,  Node: APIs C descontinuadas,  Prev: APIs C removidas,  Up: Alterações na API C

1.1.10.5 APIs C descontinuadas
..............................

   * A macro ‘Py_HUGE_VAL’ está agora *note suavemente descontinuada:
     23c.  Em vez disso, use ‘Py_INFINITY’.  (Contribuição de Sergey B
     Kirpichev em gh-120026(1).)

   * As macros ‘Py_IS_NAN’, ‘Py_IS_INFINITY’ e ‘Py_IS_FINITE’ estão
     agora *note suavemente descontinuadas: 23c.  Em vez delas, use
     ‘isnan’, ‘isinf’ e ‘isfinite’, disponíveis em ‘math.h’ desde C99.
     (Contribuição de Sergey B Kirpichev em gh-119613(2).)

   * Sequências não-tuplas estão agora descontinuadas como argumento
     para a unidade de formato ‘(items)’ em *note PyArg_ParseTuple():
     3be. e outras funções de *note análise de argumentos: 3d2. se
     'items' contiver unidades de formato que armazenam um *note buffer
     emprestado: 3d3. ou uma *note referência emprestada: 3d4.
     (Contribuição de Serhiy Storchaka em gh-50333(3).)

   * A função ‘_PyMonitoring_FireBranchEvent’ está agora descontinuada e
     deve ser substituída por chamadas para *note
     PyMonitoring_FireBranchLeftEvent(): 3aa. e *note
     PyMonitoring_FireBranchRightEvent(): 3ab.

   * A função *note PySequence_In(): 3d5, anteriormente não documentada,
     está agora *note suavemente descontinuado: 23c.  Em vez disso, use
     *note PySequence_Contains(): 3d6.  (Contribuição de Yuki Kobayashi
     em gh-127896(4).)

* Menu:

* 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 no Python 3.18: Remoção pendente no Python 3 18.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120026

   (2) https://github.com/python/cpython/issues/119613

   (3) https://github.com/python/cpython/issues/50333

   (4) https://github.com/python/cpython/issues/127896


File: python.info,  Node: Remoção pendente no Python 3 15<2>,  Next: Remoção pendente no Python 3 16<2>,  Up: APIs C descontinuadas

1.1.10.6 Remoção pendente no Python 3.15
........................................

   * The *note PyImport_ImportModuleNoBlock(): 3d8.: use *note
     PyImport_ImportModule(): 3d9.

   * *note PyWeakref_GetObject(): 3da. e *note PyWeakref_GET_OBJECT():
     3db.: Use *note PyWeakref_GetRef(): 3dc.  O projeto
     pythoncapi-compat(1) pode ser usado para usar *note
     PyWeakref_GetRef(): 3dc. no Python 3.12 e versões anteriores.

   * O tipo *note Py_UNICODE: 3dd. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3de.

   * ‘PyUnicode_AsDecodedUnicode()’: Use *note PyCodec_Decode(): 3de.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note str: 169, tal como *note bytes: 192.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 3df.

   * ‘PyUnicode_AsEncodedUnicode()’: Use *note PyCodec_Encode(): 3df.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note bytes: 192, tal com *note str: 169.

   * Funções de inicialização do Python, descontinuadas no Python 3.9:

        * *note Py_GetPath(): 3e0.: Use *note
          PyConfig_Get("module_search_paths"): 379. (*note sys.path:
          3e1.).

        * *note Py_GetPrefix(): 3e2.: Use *note
          PyConfig_Get("base_prefix"): 379. (*note sys.base_prefix:
          3e3.).  Use *note PyConfig_Get("prefix"): 379. (*note
          sys.prefix: 3e4.) se *note ambientes virtuais: 3e5. precisam
          ser tratados.

        * *note Py_GetExecPrefix(): 3e6.: Use *note
          PyConfig_Get("base_exec_prefix"): 379. (*note
          sys.base_exec_prefix: 3e7.).  Use *note
          PyConfig_Get("exec_prefix"): 379. (*note sys.exec_prefix:
          3e8.) se *note ambientes virtuais: 3e5. precisam ser tratados.

        * *note Py_GetProgramFullPath(): 3e9.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetProgramName(): 3eb.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetPythonHome(): 3ec.: Use *note
          PyConfig_Get("home"): 379. ou a variável de ambiente *note
          PYTHONHOME: 3ed.

     O projeto pythoncapi-compat(2) pode ser usado para obter *note
     PyConfig_Get(): 379. no Python 3.13 e versões anteriores.

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3ee.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3ee.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3ef.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3f0.

        * *note PySys_ResetWarnOptions(): 3f1.: apague *note
          sys.warnoptions: 3f2. e ‘warnings.filters’.

     Em vez disso, a API *note Py_InitializeFromConfig(): 3f3. deve ser
     usada com *note PyConfig: 3f4.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3f5.: Use *note PyConfig.parser_debug:
          3f6. ou *note PyConfig_Get("parser_debug"): 379.

        * *note Py_VerboseFlag: 3f7.: Use *note PyConfig.verbose: 3f8.
          ou *note PyConfig_Get("verbose"): 379.

        * *note Py_QuietFlag: 3f9.: Use *note PyConfig.quiet: 3fa. ou
          *note PyConfig_Get("quiet"): 379.

        * *note Py_InteractiveFlag: 3fb.: Use *note
          PyConfig.interactive: 3fc. ou *note
          PyConfig_Get("interactive"): 379.

        * *note Py_InspectFlag: 3fd.: Use *note PyConfig.inspect: 3fe.
          ou *note PyConfig_Get("inspect"): 379.

        * *note Py_OptimizeFlag: 3ff.: Use *note
          PyConfig.optimization_level: 400. ou *note
          PyConfig_Get("optimization_level"): 379.

        * *note Py_NoSiteFlag: 401.: Use *note PyConfig.site_import:
          402. ou *note PyConfig_Get("site_import"): 379.

        * *note Py_BytesWarningFlag: 403.: Use *note
          PyConfig.bytes_warning: 404. ou *note
          PyConfig_Get("bytes_warning"): 379.

        * *note Py_FrozenFlag: 405.: Use *note
          PyConfig.pathconfig_warnings: 406. ou *note
          PyConfig_Get("pathconfig_warnings"): 379.

        * *note Py_IgnoreEnvironmentFlag: 407.: Use *note
          PyConfig.use_environment: 408. ou *note
          PyConfig_Get("use_environment"): 379.

        * *note Py_DontWriteBytecodeFlag: 409.: Use *note
          PyConfig.write_bytecode: 40a. ou *note
          PyConfig_Get("write_bytecode"): 379.

        * *note Py_NoUserSiteDirectory: 40b.: Use *note
          PyConfig.user_site_directory: 40c. ou *note
          PyConfig_Get("user_site_directory"): 379.

        * *note Py_UnbufferedStdioFlag: 40d.: Use *note
          PyConfig.buffered_stdio: 40e. ou *note
          PyConfig_Get("buffered_stdio"): 379.

        * *note Py_HashRandomizationFlag: 40f.: Use *note
          PyConfig.use_hash_seed: 410. e *note PyConfig.hash_seed: 411.
          ou *note PyConfig_Get("hash_seed"): 379.

        * *note Py_IsolatedFlag: 412.: Use *note PyConfig.isolated: 413.
          ou *note PyConfig_Get("isolated"): 379.

        * *note Py_LegacyWindowsFSEncodingFlag: 414.: Use *note
          PyPreConfig.legacy_windows_fs_encoding: 415. ou *note
          PyConfig_Get("legacy_windows_fs_encoding"): 379.

        * *note Py_LegacyWindowsStdioFlag: 416.: Use *note
          PyConfig.legacy_windows_stdio: 417. ou *note
          PyConfig_Get("legacy_windows_stdio"): 379.

        * ‘Py_FileSystemDefaultEncoding’,
          ‘Py_HasFileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 418. ou *note
          PyConfig_Get("filesystem_encoding"): 379.

        * ‘Py_FileSystemDefaultEncodeErrors’: Use *note
          PyConfig.filesystem_errors: 419. ou *note
          PyConfig_Get("filesystem_errors"): 379.

        * ‘Py_UTF8Mode’: Use *note PyPreConfig.utf8_mode: 41a. ou *note
          PyConfig_Get("utf8_mode"): 379.  (veja *note
          Py_PreInitialize(): 41b.)

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4. para definir essas opções.  Ou *note
     PyConfig_Get(): 379. pode ser usado para obter essas opções em
     tempo de execução.

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: Remoção pendente no Python 3 16<2>,  Next: Remoção pendente no Python 3 18,  Prev: Remoção pendente no Python 3 15<2>,  Up: APIs C descontinuadas

1.1.10.7 Remoção pendente no Python 3.16
........................................

   * A cópia empacotada do ‘libmpdec’.


File: python.info,  Node: Remoção pendente no Python 3 18,  Next: Remoção pendente em versões futuras<2>,  Prev: Remoção pendente no Python 3 16<2>,  Up: APIs C descontinuadas

1.1.10.8 Remoção pendente no Python 3.18
........................................

   * As seguintes funções privadas estão descontinuado e planejadas para
     remoção no Python 3.18:

        * ‘_PyBytes_Join()’: use *note PyBytes_Join(): 380.

        * ‘_PyDict_GetItemStringWithError()’: use *note
          PyDict_GetItemStringRef(): 41e.

        * ‘_PyDict_Pop()’: use *note PyDict_Pop(): 41f.

        * ‘_PyLong_Sign()’: use *note PyLong_GetSign(): 397.

        * ‘_PyLong_FromDigits()’ e ‘_PyLong_New()’: use *note
          PyLongWriter_Create(): 3a7.

        * ‘_PyThreadState_UncheckedGet()’: use *note
          PyThreadState_GetUnchecked(): 420.

        * ‘_PyUnicode_AsString()’: use *note PyUnicode_AsUTF8(): 421.

        * ‘_PyUnicodeWriter_Init()’: substitua
          ‘_PyUnicodeWriter_Init(&writer)’ por *note writer =
          PyUnicodeWriter_Create(0): 3b1.

        * ‘_PyUnicodeWriter_Finish()’: substitua
          ‘_PyUnicodeWriter_Finish(&writer)’ por *note
          PyUnicodeWriter_Finish(writer): 3b4.

        * ‘_PyUnicodeWriter_Dealloc()’: substitua
          ‘_PyUnicodeWriter_Dealloc(&writer)’ por *note
          PyUnicodeWriter_Discard(writer): 3b3.

        * ‘_PyUnicodeWriter_WriteChar()’: substituta
          ‘_PyUnicodeWriter_WriteChar(&writer, ch)’ por *note
          PyUnicodeWriter_WriteChar(writer, ch): 3b7.

        * ‘_PyUnicodeWriter_WriteStr()’: substitua
          ‘_PyUnicodeWriter_WriteStr(&writer, str)’ por *note
          PyUnicodeWriter_WriteStr(writer, str): 3b9.

        * ‘_PyUnicodeWriter_WriteSubstring()’: substitua
          ‘_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)’
          por *note PyUnicodeWriter_WriteSubstring(writer, str, start,
          end): 3ba.

        * ‘_PyUnicodeWriter_WriteASCIIString()’: substitua
          ‘_PyUnicodeWriter_WriteASCIIString(&writer, str)’ por *note
          PyUnicodeWriter_WriteASCII(writer, str): 3b6.

        * ‘_PyUnicodeWriter_WriteLatin1String()’: substitua
          ‘_PyUnicodeWriter_WriteLatin1String(&writer, str)’ por *note
          PyUnicodeWriter_WriteUTF8(writer, str): 3bc.

        * ‘_PyUnicodeWriter_Prepare()’: (sem substituto).

        * ‘_PyUnicodeWriter_PrepareKind()’: (sem substituto).

        * ‘_Py_HashPointer()’: use *note Py_HashPointer(): 422.

        * ‘_Py_fopen_obj()’: use *note Py_fopen(): 390.

     O projeto pythoncapi-compat(1) pode ser usado para obter essas
     novas funções públicas no Python 3.13 e versões anteriores.
     (Contribuição de Victor Stinner em gh-128863(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/cpython/issues/128863


File: python.info,  Node: Remoção pendente em versões futuras<2>,  Prev: Remoção pendente no Python 3 18,  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: 424.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 425.: use *note PyErr_GetRaisedException():
     426.

   * *note PyErr_NormalizeException(): 427.: use *note
     PyErr_GetRaisedException(): 426.

   * *note PyErr_Restore(): 428.: use *note PyErr_SetRaisedException():
     429.

   * *note PyModule_GetFilename(): 42a.: use *note
     PyModule_GetFilenameObject(): 42b.

   * *note PyOS_AfterFork(): 42c.: use *note PyOS_AfterFork_Child():
     42d.

   * *note PySlice_GetIndicesEx(): 42e.: use *note PySlice_Unpack():
     42f. e *note PySlice_AdjustIndices(): 430.

   * *note PyUnicode_READY(): 431.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 432.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     433.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 434.: use *note
          PyThread_tss_alloc(): 435.

        * *note PyThread_delete_key(): 436.: use *note
          PyThread_tss_free(): 437.

        * *note PyThread_set_key_value(): 438.: use *note
          PyThread_tss_set(): 439.

        * *note PyThread_get_key_value(): 43a.: use *note
          PyThread_tss_get(): 43b.

        * *note PyThread_delete_key_value(): 43c.: use *note
          PyThread_tss_delete(): 43d.

        * *note PyThread_ReInitTLS(): 43e.: desnecessário desde o Python
          3.7.


File: python.info,  Node: Build changes,  Next: Portando para o Python 3 14,  Prev: Alterações na API C,  Up: O que há de novo no Python 3 14

1.1.11 Build changes
--------------------

   * PEP 776(1): Emscripten is now an officially supported platform at
     tier 3(2).  As a part of this effort, more than 25 bugs in
     Emscripten libc(3) were fixed.  Emscripten now includes support for
     *note ctypes: 2e, *note termios: e7, and *note fcntl: 5d, as well
     as experimental support for the new *note default interactive
     shell: 440.  (Contributed by R. Hood Chatham in gh-127146(4),
     gh-127683(5), and gh-136931(6).)

   * Official Android binary releases are now provided on python.org(7).

   * O GNU Autoconf 2.72 agora é necessário para gerar o ‘configure’.
     (Contribuição de Erlend Aasland em gh-115765(8).)

   * ‘wasm32-unknown-emscripten’ agora é uma plataforma de nível 3
     segundo a PEP 11(9).  (Contribuição de R. Hood Chatham em
     gh-127146(10), gh-127683(11) e gh-136931(12).)

   * A vinculação baseada em ‘#pragma’ com ‘python3*.lib’ agora pode ser
     desativada com *note Py_NO_LINK_LIB: 441.  (Contribuição de
     Jean-Christophe Fillion-Robin em gh-82909(13).)

   * O CPython agora habilita um conjunto de opções de compilador
     recomendadas por padrão para maior segurança.  Use as opções *note
     -disable-safety: 442. e ‘configure’ para desabilitá-las, ou a opção
     *note -enable-slower-safety: 443. para um conjunto maior de opções
     de compilador, embora com um custo de desempenho.

   * A macro ‘WITH_FREELISTS’ e a opção ‘--without-freelists’
     ‘configure’ foram removidas.

   * The new ‘configure’ option *note -with-tail-call-interp: 172. may
     be used to enable the experimental tail call interpreter.  See
     *note Um novo tipo de interpretador: 14f. for further details.

   * Para desabilitar o novo suporte à depuração remota, use as opções
     *note -without-remote-debug: 170. e ‘configure’.  Isso pode ser
     útil por motivos de segurança.

   * Aplicações iOS e macOS agora podem ser configurados para
     redirecionar o conteúdo ‘stdout’ e ‘stderr’ para o log do sistema.
     (Contribuição de Russell Keith-Magee em gh-127592(14).)

   * O ambiente de teste do iOS agora pode transmitir a saída do teste
     enquanto ele está em execução.  O ambiente de teste também pode ser
     usado para executar o conjunto de testes de outros projetos além do
     CPython.  (Contribuição de Russell Keith-Magee em gh-127592(15).)

* Menu:

* build-details.json: build-details json.
* Descontinuação de assinaturas PGP::
* Free-threaded Python is officially supported::
* Versões binárias para o compilador experimental just-in-time::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0776/

   (2) https://peps.python.org/pep-0011/#tier-3

   (3) 
https://emscripten.org/docs/porting/emscripten-runtime-environment.html

   (4) https://github.com/python/cpython/issues/127146

   (5) https://github.com/python/cpython/issues/127683

   (6) https://github.com/python/cpython/issues/136931

   (7) https://www.python.org/downloads/android/

   (8) https://github.com/python/cpython/issues/115765

   (9) https://peps.python.org/pep-0011/

   (10) https://github.com/python/cpython/issues/127146

   (11) https://github.com/python/cpython/issues/127683

   (12) https://github.com/python/cpython/issues/136931

   (13) https://github.com/python/cpython/issues/82909

   (14) https://github.com/python/cpython/issues/127592

   (15) https://github.com/python/cpython/issues/127592


File: python.info,  Node: build-details json,  Next: Descontinuação de assinaturas PGP,  Up: Build changes

1.1.11.1 ‘build-details.json’
.............................

As instalações do Python agora contêm um novo arquivo,
‘build-details.json’.  Este é um documento JSON estático contendo
detalhes da construção do CPython, permitindo introspecção sem a
necessidade de executar código.  Isso é útil para casos de uso como
inicializadores do Python, compilação cruzada e assim por diante.

‘build-details.json’ deve ser instalado no diretório da biblioteca
padrão independente de plataforma.  Isso corresponde ao caminho de
instalação *note ‘stdlib’: 446. *note sysconfig: e1, que pode ser
encontrado executando ‘sysconfig.get_path('stdlib')’.

Ver também
..........

PEP 739(1) – ‘build-details.json’ 1.0 – um arquivo de descrição estática
para detalhes de construção do Python

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0739/


File: python.info,  Node: Descontinuação de assinaturas PGP,  Next: Free-threaded Python is officially supported,  Prev: build-details json,  Up: Build changes

1.1.11.2 Descontinuação de assinaturas PGP
..........................................

Assinaturas PGP (Pretty Good Privacy) não serão fornecidas para versões
do Python 3.14 ou versões futuras.  Para verificar artefatos do CPython,
os usuários devem usar materiais de verificação do Sigstore(1).  As
versões são assinadas usando o Sigstore(2) desde o Python 3.11.

Essa mudança no processo de lançamento foi especificada em PEP 761(3).

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/metadata/sigstore/

   (2) https://www.sigstore.dev/

   (3) https://peps.python.org/pep-0761/


File: python.info,  Node: Free-threaded Python is officially supported,  Next: Versões binárias para o compilador experimental just-in-time,  Prev: Descontinuação de assinaturas PGP,  Up: Build changes

1.1.11.3 Free-threaded Python is officially supported
.....................................................

The free-threaded build of Python is now supported and no longer
experimental.  This is the start of phase II(1) where free-threaded
Python is officially supported but still optional.

The free-threading team are confident that the project is on the right
path, and appreciate the continued dedication from everyone working to
make free-threading ready for broader adoption across the Python
community.

With these recommendations and the acceptance of this PEP, the Python
developer community should broadly advertise that free-threading is a
supported Python build option now and into the future, and that it will
not be removed without a proper deprecation schedule.

Any decision to transition to phase III(2), with free-threading as the
default or sole build of Python is still undecided, and dependent on
many factors both within CPython itself and the community.  This
decision is for the future.

Ver também
..........

PEP 779(3)

PEP 779's acceptance(4)

   ---------- Footnotes ----------

   (1) https://discuss.python.org/t/37075

   (2) https://discuss.python.org/t/37075

   (3) https://peps.python.org/pep-0779/

   (4) https://discuss.python.org/t/84319/123


File: python.info,  Node: Versões binárias para o compilador experimental just-in-time,  Prev: Free-threaded Python is officially supported,  Up: Build changes

1.1.11.4 Versões binárias para o compilador experimental just-in-time
.....................................................................

Os binários oficiais de lançamento para macOS e Windows agora incluem um
compilador JIT (just-in-time) 'experimental'.  Embora 'não' seja
recomendado para uso em produção, ele pode ser testado definindo *note
PYTHON_JIT=1: 44a. como uma variável de ambiente.  Construções de
código-fonte downstream e redistribuidores podem usar a opção de
configuração *note -enable-experimental-jit=yes-off: 44b. para obter um
comportamento semelhante.

O JIT está em estágio inicial e ainda em desenvolvimento ativo.
Portanto, o impacto típico de sua ativação no desempenho pode variar de
10% mais lento a 20% mais rápido, dependendo da carga de trabalho.  Para
auxiliar nos testes e na avaliação, um conjunto de funções de
introspecção foi fornecido no espaço de nomes *note sys._jit: 292.
*note sys._jit.is_available(): 44c. pode ser usado para determinar se o
executável atual oferece suporte a compilação JIT, enquanto *note
sys._jit.is_enabled(): 44d. pode ser usado para informar se a compilação
JIT foi ativada para o processo atual.

Atualmente, a funcionalidade ausente mais significativa é que
depuradores e profilers nativos, como ‘gdb’ e ‘perf’, não conseguem
desenrolar quadros JIT (depuradores e profilers Python, como *note pdb:
aa. ou *note profile: b4, continuam funcionando sem modificações).
Construções com threads livres não oferecem suporte a compilação JIT.

Por favor, relate quaisquer bugs ou grandes regressões de desempenho que
você encontrar!

Ver também
..........

PEP 744(1)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0744/


File: python.info,  Node: Portando para o Python 3 14,  Prev: Build changes,  Up: O que há de novo no Python 3 14

1.1.12 Portando para o Python 3.14
----------------------------------

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::
* Changes in annotations (PEP 649 and PEP 749): Changes in annotations PEP 649 and PEP 749.
* Alterações na API C: Alterações na API C<2>.


File: python.info,  Node: Alterações na API Python,  Next: Changes in annotations PEP 649 and PEP 749,  Up: Portando para o Python 3 14

1.1.12.1 Alterações na API Python
.................................

   * On Unix platforms other than macOS, 'forkserver' is now the default
     *note start method: 1d5. for *note multiprocessing: 98. and *note
     ProcessPoolExecutor: 1d6, instead of 'fork'.

     Consulte *note (1): 1d3. e *note (2): 248. para detalhes.

     Se você encontrar *note NameError: 44f.s ou erros de serialização
     com pickle vindos de *note multiprocessing: 98. ou *note
     concurrent.futures: 24, consulte as *note restrições do forkserver:
     1d9.

     This change does not affect Windows or macOS, where *note ‘spawn’:
     1d8. remains the default start method.

   * *note functools.partial: 216. agora é um descritor de método.
     Envolva-o em *note staticmethod(): 450. se quiser preservar o
     comportamento antigo.  (Contribuição de Serhiy Storchaka e
     Dominykas Grigonis em gh-121027(1).)

   * O *note coletor de lixo agora é incremental: 152, o que significa
     que o comportamento de *note gc.collect(): 1b3. muda ligeiramente:

        * ‘gc.collect(1)’: Executa um incremento da coleta de lixo, em
          vez de coletar a geração 1.

        * Outras chamadas para ‘gc.collect()’ não foram alteradas.

   * A função *note locale.nl_langinfo(): 451. agora define
     temporariamente a localidade ‘LC_CTYPE’ em alguns casos.  Esta
     alteração temporária afeta outras threads.  (Contribuição de Serhiy
     Storchaka em gh-69998(2).)

   * *note types.UnionType: 2a6. agora é um apelido para *note
     typing.Union: 2a7, causando alterações em alguns comportamentos.
     Veja *note acima: 2a8. para mais detalhes.  (Contribuição de Jelle
     Zijlstra em gh-105499(3).)

   * The runtime behavior of annotations has changed in various ways;
     see *note above: 145. for details.  While most code that interacts
     with annotations should continue to work, some undocumented details
     may behave differently.

   * As part of making the *note mimetypes: 93. CLI public, it now exits
     with ‘1’ on failure instead of ‘0’ and ‘2’ on incorrect
     command-line parameters instead of ‘1’.  Error messages are now
     printed to stderr.

   * The ‘\B’ pattern in regular expression now matches the empty string
     when given as the entire pattern, which may cause behavioural
     changes.

   * On FreeBSD, *note sys.platform: 290. no longer contains the major
     version number.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121027

   (2) https://github.com/python/cpython/issues/69998

   (3) https://github.com/python/cpython/issues/105499


File: python.info,  Node: Changes in annotations PEP 649 and PEP 749,  Next: Alterações na API C<2>,  Prev: Alterações na API Python,  Up: Portando para o Python 3 14

1.1.12.2 Changes in annotations (
.................................

'PEP 649' and 'PEP 749')

This section contains guidance on changes that may be needed to
annotations or Python code that interacts with or introspects
annotations, due to the changes related to *note deferred evaluation of
annotations: 145.

In the majority of cases, working code from older versions of Python
will not require any changes.

* Menu:

* Implicações para o código anotado::
* Implicações para leitores de __annotations__::
* Mudanças relacionadas::
* from __future__ import annotations::


File: python.info,  Node: Implicações para o código anotado,  Next: Implicações para leitores de __annotations__,  Up: Changes in annotations PEP 649 and PEP 749

1.1.12.3 Implicações para o código anotado
..........................................

Se você definir anotação em seu código (por exemplo, para uso com um
verificador de tipo estático), essa alteração provavelmente não o
afetará: você pode continuar escrevendo anotação da mesma forma que
fazia com as versões anteriores de Python.

É provável que você consiga remover as strings entre aspas em anotações,
que são frequentemente usadas para referência futura.  Da mesma forma,
se você usar ‘from __future__ import annotations’ para evitar ter que
escrever strings em anotações, poderá remover essa importação se você
for manter seu código apenas para Python 3.14 e mais recentes.  No
entanto, se você depende de bibliotecas de terceiros que leem anotações,
essas bibliotecas podem precisar de alterações no suporte a anotações
sem aspas para funcionarem como esperado.


File: python.info,  Node: Implicações para leitores de __annotations__,  Next: Mudanças relacionadas,  Prev: Implicações para o código anotado,  Up: Changes in annotations PEP 649 and PEP 749

1.1.12.4 Implicações para leitores de ‘__annotations__’
.......................................................

If your code reads the *note __annotations__: 455. attribute on objects,
you may want to make changes in order to support code that relies on
deferred evaluation of annotations.  For example, you may want to use
*note annotationlib.get_annotations(): 456. with the *note FORWARDREF:
15f. format, as the *note dataclasses: 33. module now does.

O pacote externo typing_extensions(1) fornece compatibilidade retroativa
parcial de algumas das funcionalidades do módulo *note annotationlib: 6,
como a enumeração *note Format: 22f. e a função *note get_annotations():
456.  Eles podem ser usados para escrever código com versão-cruzada que
aproveite as vantagens do novo comportamento em Python 3.14.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/typing_extensions/


File: python.info,  Node: Mudanças relacionadas,  Next: from __future__ import annotations,  Prev: Implicações para leitores de __annotations__,  Up: Changes in annotations PEP 649 and PEP 749

1.1.12.5 Mudanças relacionadas
..............................

The changes in Python 3.14 are designed to rework how ‘__annotations__’
works at runtime while minimizing breakage to code that contains
annotations in source code and to code that reads ‘__annotations__’.
However, if you rely on undocumented details of the annotation behavior
or on private functions in the standard library, there are many ways in
which your code may not work in Python 3.14.  To safeguard your code
against future changes, only use the documented functionality of the
*note annotationlib: 6. module.

Em particular, não leia anotação diretamente do atributo dicionário com
o espaço de nomes dos objetos de tipo.  Use *note
annotationlib.get_annotate_from_class_namespace(): 458. durante a
construção da classe e *note annotationlib.get_annotations(): 456.
depois.

Em versões anteriores, às vezes era possível acessar as anotações da
classe a partir de uma instância de uma classe anotada.  Esse
comportamento não estava documentado e era acidental e não será mais
possível em Python 3.14.


File: python.info,  Node: from __future__ import annotations,  Prev: Mudanças relacionadas,  Up: Changes in annotations PEP 649 and PEP 749

1.1.12.6 ‘from __future__ import annotations’
.............................................

In Python 3.7, PEP 563(1) introduced the ‘from __future__ import
annotations’ *note future statement: 45a, which turns all annotations
into strings.

However, this statement is now deprecated and it is expected to be
removed in a future version of Python.  This removal will not happen
until after Python 3.13 reaches its end of life in 2029, being the last
version of Python without support for deferred evaluation of
annotations.

In Python 3.14, the behavior of code using ‘from __future__ import
annotations’ is unchanged.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0563/


File: python.info,  Node: Alterações na API C<2>,  Prev: Changes in annotations PEP 649 and PEP 749,  Up: Portando para o Python 3 14

1.1.12.7 Alterações na API C
............................

   * *note Py_Finalize(): 45c. agora exclui todas as strings
     internalizadas.  Isso é incompatível com versões anteriores de
     qualquer extensão C que retenha uma string internada após uma
     chamada para *note Py_Finalize(): 45c. e seja reutilizada após uma
     chamada para *note Py_Initialize(): 45d.  Quaisquer problemas
     decorrentes desse comportamento normalmente resultarão em
     travamentos durante a execução da chamada subsequente para *note
     Py_Initialize(): 45d. ao acessar memória não inicializada.  Para
     corrigir, use um sanitizador de endereços para identificar qualquer
     uso após liberação proveniente de uma string internalizada e
     desalocá-la durante o desligamento do módulo.  (Contribuição de
     Eddie Elizondo em gh-113601(1).)

   * A API C *note objetos de exceção Unicode: 45e. agora levanta *note
     TypeError: 198. se o argumento de exceção não for um objeto *note
     UnicodeError: 45f.  (Contribuição de Bénédikt Tran em
     gh-127691(2).)

   * O interpretador evita internamente algumas modificações na contagem
     de referências ao carregar objetos na pilha de operandos, *note
     pegando emprestadas: 3d4. referências quando possível.  Isso pode
     levar a valores menores de contagem de referências em comparação
     com versões anteriores do Python.  Extensões da API C que
     verificavam *note Py_REFCNT(): 2ce. de ‘1’ para determinar se um
     argumento de função não é referenciado por nenhum outro código
     devem, em vez disso, usar *note
     PyUnstable_Object_IsUniqueReferencedTemporary(): 3c4. como uma
     substituição mais segura.

   * Funções privadas promovidas para APIs C públicas:

        * ‘_PyBytes_Join()’: *note PyBytes_Join(): 380.

        * ‘_PyLong_IsNegative()’: *note PyLong_IsNegative(): 399.

        * ‘_PyLong_IsPositive()’: *note PyLong_IsPositive(): 398.

        * ‘_PyLong_IsZero()’: *note PyLong_IsZero(): 39a.

        * ‘_PyLong_Sign()’: *note PyLong_GetSign(): 397.

        * ‘_PyUnicodeWriter_Dealloc()’: *note PyUnicodeWriter_Discard():
          3b3.

        * ‘_PyUnicodeWriter_Finish()’: *note PyUnicodeWriter_Finish():
          3b4.

        * ‘_PyUnicodeWriter_Init()’: use *note PyUnicodeWriter_Create():
          3b1.

        * ‘_PyUnicodeWriter_Prepare()’: (sem substituto)

        * ‘_PyUnicodeWriter_PrepareKind()’: (sem substituto)

        * ‘_PyUnicodeWriter_WriteChar()’: *note
          PyUnicodeWriter_WriteChar(): 3b7.

        * ‘_PyUnicodeWriter_WriteStr()’: *note
          PyUnicodeWriter_WriteStr(): 3b9.

        * ‘_PyUnicodeWriter_WriteSubstring()’: *note
          PyUnicodeWriter_WriteSubstring(): 3ba.

        * ‘_PyUnicode_EQ()’: *note PyUnicode_Equal(): 3af.

        * ‘_PyUnicode_Equal()’: *note PyUnicode_Equal(): 3af.

        * ‘_Py_GetConfig()’: *note PyConfig_Get(): 379. e *note
          PyConfig_GetInt(): 381.

        * ‘_Py_HashBytes()’: *note Py_HashBuffer(): 392.

        * ‘_Py_fopen_obj()’: *note Py_fopen(): 390.

        * ‘PyMutex_IsLocked()’ : *note PyMutex_IsLocked(): 460.

     O projeto pythoncapi-compat(3) pode ser usado para obter a maioria
     dessas novas funções no Python 3.13 e versões anteriores.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113601

   (2) https://github.com/python/cpython/issues/127691

   (3) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: O que há de novo no Python 3 13,  Next: O que há de novo no Python 3 12,  Prev: O que há de novo no Python 3 14,  Up: O que há de novo no Python

1.2 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: 142. 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: Resumo – Destaques da versão<2>.
* Novas funcionalidades: Novas funcionalidades<2>.
* Outras mudanças na linguagem::
* Novos módulos: Novos módulos<2>.
* Módulos melhorados: Módulos melhorados<2>.
* Otimizações: Otimizações<2>.
* Módulos e APIs removidas::
* Novas descontinuações: Novas descontinuações<2>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<2>.
* Alterações na API C: Alterações na API C<3>.
* Mudanças na construção::
* Portando para o Python 3.13: Portando para o Python 3 13.
* Mudanças em teste de regressão::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0719/


File: python.info,  Node: Resumo – Destaques da versão<2>,  Next: Novas funcionalidades<2>,  Up: O que há de novo no Python 3 13

1.2.1 Resumo – Destaques da versão
----------------------------------

O Python 3.13 é uma versão estável 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: 465, suporte experimental para execução em um
*note modo de threads livres: 466. ( PEP 703(1)) e um *note compilador
Just-In-Time: 467. ( 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(): 468. agora tem *note semânticas definidas: 469.
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: 46a. 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:
149. e *note Referência da Linguagem: 14a.  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: 46b.
para orientação sobre atualização a partir de versões anteriores do
Python.

__________________________________________________________________

Melhorias no interpretador:

   * Um *note interpretador interativo: 465. bastante aprimorado e *note
     mensagens de erro aprimoradas: 46c.

   * PEP 667(4): a função embutida *note locals(): 468. agora tem *note
     semântica definida: 469. 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: 46d, ou GIL,
     desabilitada.  Veja *note CPython com threads livres: 466. para
     mais detalhes.

   * PEP 744(6): um *note compilador JIT: 467. 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: 465, bem
     como na saída de *note tracebacks: 46c. e de *note doctest: 46e.
     Isso pode ser desabilitado através das variáveis de ambiente *note
     PYTHON_COLORS: 46f. e NO_COLOR(7).

Melhorias no modelo de dados Python:

   * *note __static_attributes__: 470. armazena os nomes dos atributos
     acessados por meio de ‘self.X’ em qualquer função no corpo da
     classe.

   * *note __firstlineno__: 471. 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: 472,
     levantada quando uma operação é bloqueada durante a *note
     finalização: 473.

   * O módulo *note argparse: 7. agora oferece suporte a descontinuar
     opções de linha de comando, argumentos posicionais e subcomandos.

   * As novas funções *note base64.z85encode(): 474. e *note
     base64.z85decode(): 475. oferecem suporte à codificação e
     decodificação de dados Z85(8).

   * O módulo *note copy: 29. agora tem uma função *note copy.replace():
     1c0, com suporte para muitos tipos embutidos e qualquer classe que
     defina o método *note __replace__(): 476.

   * O novo módulo *note dbm.sqlite3: 39. agora é o backend *note dbm:
     35. padrão.

   * O módulo *note os: a5. tem um *note conjunto de novas funções: 477.
     para trabalhar com os descritores de arquivo de notificação de
     temporizador do Linux.

   * O módulo *note random: bd. agora tem uma *note interface de linha
     de comando: 478.

Melhorias de segurança:

   * *note ssl.create_default_context(): 479. define *note
     ssl.VERIFY_X509_PARTIAL_CHAIN: 47a. e *note ssl.VERIFY_X509_STRICT:
     47b. como sinalizadores padrão.

Melhorias na API C:

   * O slot *note Py_mod_gil: 47c. agora é usado para indicar que um
     módulo de extensão oferece suporte à execução com a *note GIL: 164.
     desabilitada.

   * A *note API C PyTime: 47d. foi adicionada, fornecendo acesso aos
     relógios do sistema.

   * *note PyMutex: 47e. é um novo mutex leve que ocupa um único byte.

   * Há um novo *note conjunto de funções: 47f. 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: 480, *note
     typing.ParamSpec: 481. e *note typing.TypeVarTuple: 482.) agora
     oferecem suporte a valores padrão.

   * PEP 702(11): o novo decorador *note warnings.deprecated(): 483.
     adiciona suporte para marcar descontinuações no sistema de tipos e
     ambiente de execução.

   * PEP 705(12): *note typing.ReadOnly: 484. pode ser usado para marcar
     um item de *note typing.TypedDict: 330. como somente leitura para
     verificadores de tipo.

   * PEP 742(13): *note typing.TypeIs: 485. fornece um comportamento de
     estreitamento de tipo mais intuitivo, como uma alternativa ao *note
     typing.TypeGuard: 486.

Suporte à plataforma:

   * PEP 730(14): iOS da Apple agora é uma *note plataforma oficialmente
     com suporte: 487, no tier 3(15).

   * PEP 738(16): Android é agora uma *note plataforma oficialmente com
     suporte: 487, 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: 46a.: 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: 488.

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<2>,  Next: Outras mudanças na linguagem,  Prev: Resumo – Destaques da versão<2>,  Up: O que há de novo no Python 3 13

1.2.2 Novas funcionalidades
---------------------------

* Menu:

* Um melhor interpretador interativo::
* Mensagens de erro melhoradas: Mensagens de erro melhoradas<2>.
* 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<2>,  Up: Novas funcionalidades<2>

1.2.2.1 Um melhor interpretador interativo
..........................................

Python agora usa um novo console *note interativo: 1b5. por padrão, com
base no código do projeto PyPy(1).  Quando o usuário inicia o *note
REPL: 48b. 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: 1b7.

   * 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 >>>: 48c. e *note …: 48d.

   * “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: 1b6.  Para mais informações sobre o
modo interativo, veja *note Modo interativo: 48e.

(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<2>,  Next: CPython com threads livres,  Prev: Um melhor interpretador interativo,  Up: Novas funcionalidades<2>

1.2.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: 1b7. por meio da
     nova variável de ambiente *note PYTHON_COLORS: 46f, 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<2>,  Up: Novas funcionalidades<2>

1.2.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: 46d. (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: 491. e
*note macOS: 492, ou o CPython pode ser construído a partir da fonte com
a opção *note -disable-gil: 493.

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: 494. ou a opção de linha de
comando *note -X gil=1: 16f.

Para verificar se o interpretador atual oferece suporte a threads
livres, *note python -VV: 495. e *note sys.version: 496. 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: 164. desabilitada devem usar o slot *note
Py_mod_gil: 47c.  Extensões que usam inicialização monofásica devem usar
*note PyUnstable_Module_SetGIL(): 497. 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: 494. ou a opção *note -X gil=0: 16f.  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<2>

1.2.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 ‘PYTHON_JIT=0’.

   * ‘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
     ‘PYTHON_JIT=1’.

   * ‘interpreter’: habilita o interpretador Tier 2, mas desabilita o
     JIT. O interpretador pode ser desabilitado executando com
     ‘PYTHON_JIT=0’.

A arquitetura interna é aproximadamente a seguinte:

   * Começamos com especializado 'bytecode de Tier 1'.  Veja *note O que
     há de novo no 3.11: 499. 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<2>

1.2.2.5 Definidas semânticas de mutação para ‘locals()’
.......................................................

Historicamente, o resultado esperado da mutação do valor de retorno de
*note locals(): 468. 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: 49b. (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(): 468. 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(): 49c. e *note eval(): 49d.).  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(): 49e. 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: 49f. 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: 4a0. e as *note APIs de
C: 4a1. 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<2>

1.2.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<2>,  Prev: Novas funcionalidades<2>,  Up: O que há de novo no Python 3 13

1.2.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:
     4a4. (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: 3e.

          >>> 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: 4a5. 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: 45a. 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: 4a6. agora são permitidas em blocos *note
     except: 1ab. quando esse global é usado no bloco *note else: 17c.
     Anteriormente, isso erroneamente levantava uma exceção *note
     SyntaxError: 18e.  (Contribuição de Irit Katriel em gh-111123(5).)

   * Adiciona *note PYTHON_FROZEN_MODULES: 4a7, 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: 16f.  (Contribuição de Yilei Yang em
     gh-111374(6).)

   * Adicionado *note suporte ao perfilador perf: 4a8. funcionando sem
     ponteiros de quadro(7) através da nova variável de ambiente *note
     PYTHON_PERF_JIT_SUPPORT: 4a9. e opção de linha de comando *note -X
     perf_jit: 16f.  (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: 4aa.
     (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__: 470.
     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(): 49c. e *note eval(): 49d. agora
     aceitam os argumentos 'globals' e 'locals' como nomeados.
     (Contribuição de Raphael Gaschignard em gh-105879(12))

   * A função embutida *note compile(): 4ab. 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__: 4ac. em objetos *note
     property: 4ad.  (Contribuição de Eugene Toder em gh-101860(14).)

   * Adiciona *note PythonFinalizationError: 472, uma nova exceção
     derivada de *note RuntimeError: 243. e usada para sinalizar quando
     as operações são bloqueadas durante a *note finalização: 473.  Os
     seguintes chamáveis agora levantam ‘PythonFinalizationError’, em
     vez de *note RuntimeError: 243.:

        * *note _thread.start_new_thread(): 4ae.

        * *note os.fork(): 4af.

        * *note os.forkpty(): 4b0.

        * *note subprocess.Popen: 4b1.

     (Contribuição de Victor Stinner em gh-114570(15).)

   * Permite que o argumento 'count' de *note str.replace(): 4b2. 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: 14, *note
     lzma: 8e, *note tarfile: e4. e *note zipfile: 137.  (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<2>,  Next: Módulos melhorados<2>,  Prev: Outras mudanças na linguagem,  Up: O que há de novo no Python 3 13

1.2.4 Novos módulos
-------------------

   * *note dbm.sqlite3: 39.: um backend SQLite para *note dbm: 35.
     (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<2>,  Next: Otimizações<2>,  Prev: Novos módulos<2>,  Up: O que há de novo no Python 3 13

1.2.5 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: argparse<3>,  Next: array,  Up: Módulos melhorados<2>

1.2.5.1 argparse
................

   * Adiciona o parâmetro 'deprecated' aos métodos *note add_argument():
     4b6. 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<3>,  Prev: argparse<3>,  Up: Módulos melhorados<2>

1.2.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: 4b8. como *note MutableSequence: 4b9.
     implementando o método *note clear(): 4ba.  (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<3>,  Next: asyncio<4>,  Prev: array,  Up: Módulos melhorados<2>

1.2.5.3 ast
...........

   * Os construtores dos tipos de nós no módulo *note ast: 9. 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(): 4bc.
     (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: 1a3.
     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: 4bd.
     definidas pelo usuário, a menos que a classe opte pelo novo
     comportamento definindo o mapeamento *note AST._field_types: 4be.

     (Contribuição de Jelle Zijlstra em gh-105858(1), gh-117486(2) e
     gh-118851(3).)

   * *note ast.parse(): 1c2. agora aceita um argumento opcional
     'optimize' que é passado para *note compile(): 4ab.  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<4>,  Next: base64<2>,  Prev: ast<3>,  Up: Módulos melhorados<2>

1.2.5.4 asyncio
...............

   * *note asyncio.as_completed(): 4c0. agora retorna um objeto que é ao
     mesmo tempo um *note iterador assíncrono: 4c1. e um *note iterator:
     4c2. simples de *note aguardáveis: 4c3.  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(): 4c4. agora removerá
     automaticamente o soquete Unix quando o servidor for fechado.
     (Contribuição de Pierre Ossman em gh-111246(2).)

   * *note DatagramTransport.sendto(): 4c5. 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: 4c6. e *note QueueShutDown: 4c7.
     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(): 4c8. e *note
     Server.abort_clients(): 4c9, 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():
     4ca, parando quando qualquer um deles for encontrado.
     (Contribuição de Bruce Merry em gh-81322(6).)

   * Melhora o comportamento de *note TaskGroup: 4cb. 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: 4cc, ele agora chamará o
     método *note cancel(): 4cd. da tarefa pai.  Isso garante que uma
     *note CancelledError: 4ce. será levantada no próximo *note await:
     18d, 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():
     4cf.).

     Para lidar com alguns casos extremos, *note uncancel(): 4d0. 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(): 1cb. é chamado em um *note
     TaskGroup: 4cb. inativo, a corrotina fornecida será fechada (o que
     evita um *note RuntimeWarning: 4d1. 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: 1c7. e para fábricas de tarefas
     personalizadas.

     Isso afeta as seguintes funções e métodos: *note
     asyncio.create_task(): 1c9, *note asyncio.loop.create_task(): 1ca,
     *note asyncio.TaskGroup.create_task(): 1cb.  (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<2>,  Next: compileall,  Prev: asyncio<4>,  Up: Módulos melhorados<2>

1.2.5.5 base64
..............

   * Adiciona as funções *note z85encode(): 474. e *note z85decode():
     475. para codificar *note bytes: 192. 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<2>,  Prev: base64<2>,  Up: Módulos melhorados<2>

1.2.5.6 compileall
..................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 4d4. em vez de
     *note os.cpu_count(): 4d5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: concurrent futures<2>,  Next: configparser<2>,  Prev: compileall,  Up: Módulos melhorados<2>

1.2.5.7 concurrent.futures
..........................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 4d4. em vez de
     *note os.cpu_count(): 4d5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: configparser<2>,  Next: copy,  Prev: concurrent futures<2>,  Up: Módulos melhorados<2>

1.2.5.8 configparser
....................

   * *note ConfigParser: 4d8. 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<2>,  Prev: configparser<2>,  Up: Módulos melhorados<2>

1.2.5.9 copy
............

   * A nova função *note replace(): 1c0. e o protocolo *note replace:
     476. 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(): 1c0. e implementam o protocolo replace:

        * *note collections.namedtuple(): 4da.

        * *note dataclasses.dataclass: 4db.

        * *note datetime.datetime: 4dc, *note datetime.date: 1f9, *note
          datetime.time: 1fa.

        * *note inspect.Signature: 4dd, *note inspect.Parameter: 4de.

        * *note types.SimpleNamespace: 4df.

        * *note objetos código: 4e0.

     Qualquer classe definida pelo usuário também pode ter suporte a
     *note copy.replace(): 1c0. definindo o método *note __replace__():
     476.  (Contribuição de Serhiy Storchaka em gh-108751(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108751


File: python.info,  Node: ctypes<2>,  Next: dbm,  Prev: copy,  Up: Módulos melhorados<2>

1.2.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: 1e4. têm um novo atributo *note
     _align_: 4e2. 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<2>,  Prev: ctypes<2>,  Up: Módulos melhorados<2>

1.2.5.11 dbm
............

   * Adiciona *note dbm.sqlite3: 39, 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<2>,  Next: doctest,  Prev: dbm,  Up: Módulos melhorados<2>

1.2.5.12 dis
............

   * Altera a saída das funções do módulo *note dis: 3c. 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: 4e5. ou o argumento
     'show_offsets'.  (Contribuição de Irit Katriel em gh-112137(1).)

   * *note get_instructions(): 4e6. não representa mais entradas de
     cache como instruções separadas.  Em vez disso, ele os retorna como
     parte de *note Instruction: 202, no novo campo 'cache_info'.  O
     argumento 'show_caches' para *note get_instructions(): 4e6. 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<2>,  Prev: dis<2>,  Up: Módulos melhorados<2>

1.2.5.13 doctest
................

   * A saída do *note doctest: 3e. é agora colorida por padrão.  Isso
     pode ser controlado através da nova variável de ambiente *note
     PYTHON_COLORS: 46f, bem como das variáveis de ambiente canônicas
     NO_COLOR(1) e FORCE_COLOR(2). Veja também *note Controlando cores:
     1b7.  (Contribuição de Hugo van Kemenade em gh-117225(3).)

   * O método *note DocTestRunner.run(): 4e8. agora conta o número de
     testes ignorados.  Adiciona os atributos *note DocTestRunner.skips:
     4e9. e *note TestResults.skipped: 4ea.  (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<2>,  Next: enum,  Prev: doctest,  Up: Módulos melhorados<2>

1.2.5.14 email
..............

   * Cabeçalhos com novas linhas embutidas são agora colocadas entre
     aspas na saída.  O *note generator: 44. 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: 4ec.  (Contribuição de Bas Bloemsaat e
     Petr Viktorin em gh-121650(1).)

   * *note getaddresses(): 4ed. e *note parseaddr(): 4ee. 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<2>,  Prev: email<2>,  Up: Módulos melhorados<2>

1.2.5.15 enum
.............

   * *note EnumDict: 4f0. foi tornada pública para melhor suporte às
     subclasses de *note EnumType: 4f1.


File: python.info,  Node: fractions<2>,  Next: glob,  Prev: enum,  Up: Módulos melhorados<2>

1.2.5.16 fractions
..................

   * Os objetos *note Fraction: 212. agora oferecem suporte às regras
     padrões da *note minilinguagem de especificação de formato: 4f3.
     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<2>,  Up: Módulos melhorados<2>

1.2.5.17 glob
.............

   * Adiciona *note translate(): 4f5, 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<3>,  Prev: glob,  Up: Módulos melhorados<2>

1.2.5.18 importlib
..................

   * As seguintes funções em *note importlib.resources: 7f. 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(): 4f7.

        * *note open_binary(): 4f8.

        * *note open_text(): 4f9.

        * *note path(): 4fa.

        * *note read_binary(): 4fb.

        * *note read_text(): 4fc.

     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(): 4fd. permanece descontinuada em favor da
     API completa *note Traversable: 2f8.  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<3>,  Next: ipaddress,  Prev: importlib,  Up: Módulos melhorados<2>

1.2.5.19 io
...........

   * O finalizador *note IOBase: 4ff. agora registra quaisquer erros
     levantados pelo método *note close(): 500. com *note
     sys.unraisablehook: 501.  Anteriormente, os erros eram ignorados
     silenciosamente por padrão e registrados apenas em *note Modo de
     Desenvolvimento do Python: 502. ou ao usar uma *note construção de
     depuração do Python: 503.  (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<2>,  Prev: io<3>,  Up: Módulos melhorados<2>

1.2.5.20 ipaddress
..................

   * Adiciona a propriedade *note IPv4Address.ipv6_mapped: 505, 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: 506, *note IPv6Address: 507, *note IPv4Network: 508. e
     *note IPv6Network: 509.  (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<2>,  Next: marshal,  Prev: ipaddress,  Up: Módulos melhorados<2>

1.2.5.21 itertools
..................

   * *note batched(): 50b. tem um novo parâmetro 'strict', que levanta
     uma *note ValueError: 2ea. 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<2>,  Prev: itertools<2>,  Up: Módulos melhorados<2>

1.2.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<2>,  Next: mimetypes<2>,  Prev: marshal,  Up: Módulos melhorados<2>

1.2.5.23 math
.............

   * A nova função *note fma(): 50e. 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<2>,  Next: mmap,  Prev: math<2>,  Up: Módulos melhorados<2>

1.2.5.24 mimetypes
..................

   * Adiciona a função *note guess_file_type(): 510. para adivinhar um
     tipo MIME de um caminho do sistema de arquivos.  Usar caminhos com
     *note guess_type(): 511. agora está *note suavemente descontinuada:
     23c.  (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<2>,  Prev: mimetypes<2>,  Up: Módulos melhorados<2>

1.2.5.25 mmap
.............

   * *note mmap: 513. 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: 513. tem um novo método *note seekable(): 514. que pode
     ser usado quando um objeto arquivo ou similar pesquisável é
     necessário.  O método *note seek(): 515. 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: 513.
     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<2>,  Next: os<2>,  Prev: mmap,  Up: Módulos melhorados<2>

1.2.5.26 multiprocessing
........................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 4d4. em vez de
     *note os.cpu_count(): 4d5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: os<2>,  Next: os path<2>,  Prev: multiprocessing<2>,  Up: Módulos melhorados<2>

1.2.5.27 os
...........

   * Adiciona a função *note process_cpu_count(): 4d4. 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(): 4d5. e *note process_cpu_count(): 4d4. podem ser
     substituídos através da nova variável de ambiente *note
     PYTHON_CPU_COUNT: 518. ou da nova opção de linha de comando *note
     -X cpu_count: 16f.  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: 477. aos ‘descritores
     de arquivo de temporizador(3)’ do Linux via *note timerfd_create():
     519, *note timerfd_settime(): 51a, *note timerfd_settime_ns(): 51b,
     *note timerfd_gettime(): 51c, *note timerfd_gettime_ns(): 51d,
     *note TFD_NONBLOCK: 51e, *note TFD_CLOEXEC: 51f, *note
     TFD_TIMER_ABSTIME: 520. e *note TFD_TIMER_CANCEL_ON_SET: 521.
     (Contribuição de Masaru Tsuchiyama em gh-108277(4).)

   * *note lchmod(): 522. e o argumento 'follow_symlinks' em *note
     chmod(): 523. 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(): 524. e suporte para descritores de arquivo em *note
     chmod(): 523. estão agora disponíveis no Windows.  (Contribuição de
     Serhiy Storchaka em gh-113191(6).)

   * No Windows, *note mkdir(): 525. e *note makedirs(): 526. 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(): 527. 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(): 528. 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(): 528. agora pode usar o atributo *note
     POSIX_SPAWN_CLOSEFROM: 529. 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<2>,  Next: pathlib<4>,  Prev: os<2>,  Up: Módulos melhorados<2>

1.2.5.28 os.path
................

   * Adiciona *note isreserved(): 329. 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(): 52b. 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(): 261. 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<4>,  Next: pdb<3>,  Prev: os path<2>,  Up: Módulos melhorados<2>

1.2.5.29 pathlib
................

   * Adiciona *note UnsupportedOperation: 52d, que é levantada em vez de
     *note NotImplementedError: 368. 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: 265. a
     partir de URIs ‘file’ (‘file:///’), *note Path.from_uri(): 52e.
     (Contribuição de Barney Gale em gh-107465(2).)

   * Adiciona *note PurePath.full_match(): 52f. 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: 530. para
     armazenar a implementação de *note os.path: a6. 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(): 531. e *note rglob(): 532.  (Contribuição de Barney
     Gale em gh-77609(4).)

   * *note Path.glob(): 531. e *note rglob(): 532. 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: 533, *note Path.is_dir: 534, *note Path.owner(): 535.
     e *note Path.group(): 536.  (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<3>,  Next: queue,  Prev: pathlib<4>,  Up: Módulos melhorados<2>

1.2.5.30 pdb
............

   * *note breakpoint(): 270. e *note set_trace(): 271. 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: 538. está
     definido.(Contribuição de Tian Gao e Christian Walther em
     gh-111762(2).)

   * *note zipapp: 136. 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(): 539. usando o novo comando
     *note exceptions [número_exc]: 53a. 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<3>,  Up: Módulos melhorados<2>

1.2.5.31 queue
..............

   * Adiciona *note Queue.shutdown: 53c. e *note ShutDown: 53d. 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<2>,  Prev: queue,  Up: Módulos melhorados<2>

1.2.5.32 random
...............

   * Adiciona uma *note interface de linha de comando: 478.
     (Contribuição de Hugo van Kemenade em gh-118131(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118131


File: python.info,  Node: re<2>,  Next: shutil,  Prev: random,  Up: Módulos melhorados<2>

1.2.5.33 re
...........

   * Renomeia ‘re.error’ para *note PatternError: 540. para maior
     clareza.  ‘re.error’ é mantido para compatibilidade com versões
     anteriores.


File: python.info,  Node: shutil,  Next: site,  Prev: re<2>,  Up: Módulos melhorados<2>

1.2.5.34 shutil
...............

   * Suporte aos argumentos nomeados 'dir_fd' e 'follow_symlinks' em
     *note chown(): 542.  (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<2>,  Prev: shutil,  Up: Módulos melhorados<2>

1.2.5.35 site
.............

   * Os arquivos ‘.pth’ agora são decodificados primeiro usando UTF-8 e
     depois usando *note codificação da localidade: 544. 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<2>,  Next: ssl<2>,  Prev: site,  Up: Módulos melhorados<2>

1.2.5.36 sqlite3
................

   * Uma *note ResourceWarning: 546. agora é emitida se um objeto *note
     Connection: 547. não for explicitamente *note fechado: 548.
     (Contribuição de Erlend E. Aasland em gh-105539(1).)

   * Adiciona o parâmetro somente-nomeado 'filter' a *note
     Connection.iterdump(): 549. 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<2>,  Next: statistics,  Prev: sqlite3<2>,  Up: Módulos melhorados<2>

1.2.5.37 ssl
............

   * A API *note create_default_context(): 479. agora inclui *note
     VERIFY_X509_PARTIAL_CHAIN: 47a. e *note VERIFY_X509_STRICT: 47b. em
     seus sinalizadores padrão.

          Nota: *note VERIFY_X509_STRICT: 47b. 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<2>,  Up: Módulos melhorados<2>

1.2.5.38 statistics
...................

   * Adiciona *note kde(): 54c. 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(): 54d. para amostragem de uma função de
     densidade de probabilidade estimada criada por *note kde(): 54c.
     (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<2>,  Prev: statistics,  Up: Módulos melhorados<2>

1.2.5.39 subprocess
...................

   * O módulo *note subprocess: dc. agora usa a função *note
     posix_spawn(): 528. em mais situações.

     Notavelmente, quando 'close_fds' é ‘True’ (o padrão), *note
     posix_spawn(): 528. 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: dc.
     a nunca usar *note posix_spawn(): 528.  Por favor, informe o motivo
     e os detalhes da plataforma no *note rastreador de problemas: 550.
     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<2>,  Next: tempfile,  Prev: subprocess,  Up: Módulos melhorados<2>

1.2.5.40 sys
............

   * Adiciona a função *note _is_interned(): 552. 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<2>,  Up: Módulos melhorados<2>

1.2.5.41 tempfile
.................

   * No Windows, o modo padrão ‘0o700’ usado por *note
     tempfile.mkdtemp(): 527. agora limita o acesso ao novo diretório
     devido a alterações em *note os.mkdir(): 525.  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<2>,  Prev: tempfile,  Up: Módulos melhorados<2>

1.2.5.42 time
.............

   * No Windows, *note monotonic(): 555. 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(): 556. 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<2>,  Next: traceback,  Prev: time,  Up: Módulos melhorados<2>

1.2.5.43 tkinter
................

   * Adiciona métodos de widget *note tkinter: f6.: ‘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: f6. 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:
     183, 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: 19b. 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(): 558. de *note tkinter.ttk.Style: 559.
     (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<2>,  Up: Módulos melhorados<2>

1.2.5.44 traceback
..................

   * Adiciona o atributo *note exc_type_str: 55b. a *note
     TracebackException: 55c, que contém uma exibição de string do
     'exc_type'.  Descontinua o atributo *note exc_type: 55d, 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(): 55e. para formatar
     (recursivamente) as exceções aninhadas de uma instância *note
     BaseExceptionGroup: 55f.  (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<2>,  Prev: traceback,  Up: Módulos melhorados<2>

1.2.5.45 types
..............

   * *note SimpleNamespace: 4df. 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<2>,  Next: unicodedata<2>,  Prev: types,  Up: Módulos melhorados<2>

1.2.5.46 typing
...............

   * PEP 705(1): adiciona *note ReadOnly: 484, uma construção especial
     de tipagem para marcar um item *note TypedDict: 330. como somente
     leitura para verificadores de tipo.

   * PEP 742(2): adiciona *note TypeIs: 485, uma construção de tipagem
     que pode ser usada para instruir um verificador de tipos sobre como
     restringir um tipo.

   * Adiciona *note NoDefault: 562, um objeto sinalizador usado para
     representar os padrões de alguns parâmetros no módulo *note typing:
     10a.  (Contribuição de Jelle Zijlstra em gh-116126(3).)

   * Adicione *note get_protocol_members(): 563. para retornar o
     conjunto de membros que definem uma *note typing.Protocol: 564.
     (Contribuição de Jelle Zijlstra em gh-104873(4).)

   * Adiciona *note is_protocol(): 565. para verificar se uma classe é
     uma *note Protocol: 564.  (Contribuição de Jelle Zijlstra em
     gh-104873(5).)

   * *note ClassVar: 566. agora pode ser aninhado em *note Final: 567, 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<2>,  Next: venv,  Prev: typing<2>,  Up: Módulos melhorados<2>

1.2.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: warnings,  Prev: unicodedata<2>,  Up: Módulos melhorados<2>

1.2.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: 56a. e *note
     create(): 56b.) 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: warnings,  Next: xml,  Prev: venv,  Up: Módulos melhorados<2>

1.2.5.49 warnings
.................

   * PEP 702(1): O novo decorador *note warnings.deprecated(): 483.
     fornece uma maneira de comunicar descontinuações para um *note
     verificador de tipo estático: 56d. e avisar sobre o uso de classes
     e funções obsoletas.  Um *note DeprecationWarning: 1a3. 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: warnings,  Up: Módulos melhorados<2>

1.2.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(): 56f.

        * *note xml.etree.ElementTree.XMLPullParser.flush(): 570.

        * *note xml.parsers.expat.xmlparser.GetReparseDeferralEnabled():
          571.

        * *note xml.parsers.expat.xmlparser.SetReparseDeferralEnabled():
          572.

        * ‘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(): 573. 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<2>

1.2.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<2>,  Next: Módulos e APIs removidas,  Prev: Módulos melhorados<2>,  Up: O que há de novo no Python 3 13

1.2.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: 10a. foi reduzido em cerca de um
     terço pela remoção de dependências em *note re: be. e *note
     contextlib: 27.  Outros módulos para aproveitar a aceleração no
     tempo de importação incluem *note email.utils: 54, *note enum: 5a,
     *note functools: 63, *note importlib.metadata: 7e. e *note
     threading: f3.  (Contribuição de Alex Waygood, Shantanu Jain, Adam
     Turner, Daniel Hollas e outros em gh-109653(1).)

   * *note textwrap.indent(): 576. 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: dc. agora a função *note posix_spawn():
     528. 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: 54f. 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<2>,  Prev: Otimizações<2>,  Up: O que há de novo no Python 3 13

1.2.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::
* embutidos::
* configparser: configparser<3>.
* importlib.metadata: importlib metadata.
* locale::
* opcode::
* optparse::
* pathlib: pathlib<5>.
* re: re<3>.
* tkinter.tix: tkinter tix.
* turtle: turtle<2>.
* typing: typing<3>.
* unittest: unittest<2>.
* urllib: urllib<3>.
* webbrowser: webbrowser<2>.


File: python.info,  Node: PEP 594 remove “baterias descarregadas” da biblioteca padrão,  Next: 2to3,  Up: Módulos e APIs removidas

1.2.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(): 31c. para solicitações ‘GET’ e
          ‘HEAD’, e o módulo *note email.message: 48. ou a biblioteca
          multipart(5) para solicitações ‘POST’ e ‘PUT’.

        * ‘cgi.parse()’ pode ser substituído chamando *note
          urllib.parse.parse_qs(): 31d. 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: 3f, que implementa os mesmos RFCs MIME.
          Por exemplo, com *note email.message.EmailMessage: 579.:

               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: 3f, que implementa os
          mesmos RFCs de MIME, ou pela biblioteca multipart(6).  Por
          exemplo, as classes *note email.message.EmailMessage: 579. e
          *note email.message.Message: 57a.

        * 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: 6c.
     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: 2e. 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: 93.

        * 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: dc. em vez disso.  Use
     *note shlex.quote(): 57b. 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: f. 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: embutidos,  Prev: PEP 594 remove “baterias descarregadas” da biblioteca padrão,  Up: Módulos e APIs removidas

1.2.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: embutidos,  Next: configparser<3>,  Prev: 2to3,  Up: Módulos e APIs removidas

1.2.7.3 embutidos
.................

   * Remove suporte aos descritores *note classmethod: 488. encadeados
     (introduzidos em gh-63272(1)).  Eles não podem mais serem usados
     para agrupar outros descritores como *note property: 4ad.  O design
     central desse recurso apresentava falhas e levou a problemas.  Para
     “passar” um *note classmethod: 488, 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(): 57e. em um quadro suspenso levanta
     *note RuntimeError: 243. (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<3>,  Next: importlib metadata,  Prev: embutidos,  Up: Módulos e APIs removidas

1.2.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<3>,  Up: Módulos e APIs removidas

1.2.7.5 importlib.metadata
..........................

   * Remove o acesso descontinuado a subscrito (*note __getitem__():
     581.) para objetos *note EntryPoint: 582.  (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.2.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.2.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: 3c,
     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<5>,  Prev: opcode,  Up: Módulos e APIs removidas

1.2.7.8 optparse
................

   * Este módulo não é mais considerado *note suavemente descontinuado:
     23c.  Enquanto o *note argparse: 7. 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<5>,  Next: re<3>,  Prev: optparse,  Up: Módulos e APIs removidas

1.2.7.9 pathlib
...............

   * Remove a capacidade de usar objetos *note Path: 265. 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<3>,  Next: tkinter tix,  Prev: pathlib<5>,  Up: Módulos e APIs removidas

1.2.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<2>,  Prev: re<3>,  Up: Módulos e APIs removidas

1.2.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<2>,  Next: typing<3>,  Prev: tkinter tix,  Up: Módulos e APIs removidas

1.2.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<3>,  Next: unittest<2>,  Prev: turtle<2>,  Up: Módulos e APIs removidas

1.2.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: 10a.
     (Contribuição de Sebastian Rittau em gh-92871(1).)

   * Remove o método de argumento nomeado de criação de tipos *note
     TypedDict: 330, 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<2>,  Next: urllib<3>,  Prev: typing<3>,  Up: Módulos e APIs removidas

1.2.7.14 unittest
.................

   * Remove as seguintes funções *note unittest: 10c, descontinuadas no
     Python 3.11:

        * ‘unittest.findTestCases()’

        * ‘unittest.makeSuite()’

        * ‘unittest.getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 58c.:

        * *note loadTestsFromModule(): 58d.

        * *note loadTestsFromTestCase(): 58e.

        * *note getTestCaseNames(): 58f.

     (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<3>,  Next: webbrowser<2>,  Prev: unittest<2>,  Up: Módulos e APIs removidas

1.2.7.15 urllib
...............

   * Remove os parâmetros 'cafile', 'capath' e 'cadefault' da função
     *note urllib.request.urlopen(): 305, descontinuada no Python 3.6.
     Em vez disso, use o parâmetro 'context' com uma instância de *note
     SSLContext: 354.  A função *note ssl.SSLContext.load_cert_chain():
     591. pode ser usada para carregar certificados específicos ou deixe
     *note ssl.create_default_context(): 479. 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<2>,  Prev: urllib<3>,  Up: Módulos e APIs removidas

1.2.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: 593.  (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<2>,  Next: Alterações de bytecode do CPython<2>,  Prev: Módulos e APIs removidas,  Up: O que há de novo no Python 3 13

1.2.8 Novas descontinuações
---------------------------

   * *note Funções definidas pelo usuário: 595.:

        * A atribuição ao atributo *note __code__: 596. 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: 8.:

        * 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: 33b.) para caracteres Unicode.
          (Contribuição de Hugo van Kemenade em gh-80480(2).)

   * *note ctypes: 2e.:

        * 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: 23c. a função *note ARRAY():
          597. em favor da multiplicação ‘type * length’.  (Contribuição
          de Victor Stinner em gh-105733(4).)

   * *note decimal: 3a.:

        * Descontinua o especificador de formato de *note Decimal: 1fd.
          não padrão e não documentado ‘'N'’, que só é suportado na
          implementação C do módulo ‘decimal’.  (Contribuição de Serhiy
          Storchaka em gh-89902(5).)

   * *note dis: 3c.:

        * Descontinua o separador ‘HAVE_ARGUMENT’.  Em vez disso,
          Verifique a associação em *note hasarg: 598.  (Contribuição de
          Irit Katriel em gh-109319(6).)

   * *note gettext: 67.:

        * 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: 68.:

        * Descontinua as funções não documentadas ‘glob0()’ e ‘glob1()’.
          Em vez disso, use *note glob(): 599. e passe um *note objeto
          caminho ou similar: 59a. especificando o diretório raiz para o
          parâmetro 'root_dir'.  (Contribuição de Barney Gale em
          gh-117337(8).)

   * *note http.server: 76.:

        * Descontinua *note CGIHTTPRequestHandler: 323, 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: 93.:

        * *note Descontinua suavemente: 23c. argumentos caminho de
          arquivo para *note guess_type(): 511, use *note
          guess_file_type(): 510. em vez disso.  (Contribuição de Serhiy
          Storchaka em gh-66543(11).)

   * *note re: be.:

        * 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(): 59b, *note sub(): 59c. e
          *note subn(): 59d.  Esses parâmetros se tornarão *note
          somente-nomeados: 59e. em uma versão futura do Python.
          (Contribuição de Serhiy Storchaka em gh-56166(12).)

   * *note pathlib: a8.:

        * Descontinua *note PurePath.is_reserved(): 328, a ser removido
          no Python 3.15.  Use *note os.path.isreserved(): 329. para
          detectar caminhos reservados no Windows.  (Contribuição de
          Barney Gale em gh-88569(13).)

   * *note platform: af.:

        * Descontinua *note java_ver(): 32a, 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: ba.:

        * Descontinua a função não documentada ‘ispackage()’.
          (Contribuição de Zackery Spytz em gh-64020(15).)

   * *note sqlite3: d4.:

        * Descontinua a passagem de mais de um argumento posicional para
          a função *note connect(): 59f. e o construtor *note
          Connection: 547.  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(): 5a0. e *note
          Connection.create_aggregate(): 5a1. 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(): 5a2,
          *note set_progress_handler(): 5a3. e *note
          set_trace_callback(): 5a4. da classe *note Connection: 547.
          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: df.:

        * Descontinua a função *note _enablelegacywindowsfsencoding():
          33c, para ser removida no Python 3.16.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 33d.
          (Contribuição de Inada Naoki em gh-73427(19).)

   * *note tarfile: e4.:

        * 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: 104.:

        * Descontinua o atributo *note TracebackException.exc_type: 55d.
          Em vez disso, use *note TracebackException.exc_type_str: 55b.
          (Contribuição de Irit Katriel em gh-112332(21).)

   * *note typing: 10a.:

        * Descontinua a não-documentada sintaxe de argumento nomeado
          para criação de classes *note NamedTuple: 32f. (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: 32f. ou *note typing.TypedDict: 330.
          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(): 331. para ser removido no
          Python 3.15.  Depois de oito anos no módulo *note typing: 10a,
          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: 5a5.  No Python 3.16, isso
          será removido de ‘typing.__all__’, e uma *note
          DeprecationWarning: 1a3. 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: 5a6.  (Contribuição de Michael
          The em gh-107116(26).)

   * *note wave: 119.:

        * Descontinua os métodos *note getmark(): 332, ‘setmark()’ e
          *note getmarkers(): 333. das classes *note Wave_read: 334. e
          *note Wave_write: 335, 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<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/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<3>,  Up: Novas descontinuações<2>

1.2.8.1 Remoção pendente no Python 3.14
.......................................

   * *note argparse: 7.: 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: 9.: os seguintes recursos foram descontinuados na
     documentação desde Python 3.8, agora fazem com que um *note
     DeprecationWarning: 1a3. 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: 2ed.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: b.:

        * As classes filhas dos observadores
          ‘asyncio.MultiLoopChildWatcher’, ‘asyncio.FastChildWatcher’,
          ‘asyncio.AbstractChildWatcher’ e ‘asyncio.SafeChildWatcher’
          foram descontinuadas e serão removidas no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(3).)

        * ‘asyncio.set_child_watcher()’, ‘asyncio.get_child_watcher()’,
          ‘asyncio.AbstractEventLoopPolicy.set_child_watcher()’ e
          ‘asyncio.AbstractEventLoopPolicy.get_child_watcher()’ 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(): 2f0. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a3.
          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 email: 3f.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2f5.  (Contribuição de Alan Williams em
     gh-72346(6).)

   * *note importlib.abc: 7c. descontinuou as classes:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes de *note importlib.resources.abc: 80.:

        * *note importlib.resources.abc.Traversable: 2f8.

        * *note importlib.resources.abc.TraversableResources: 2f7.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(7).)

   * *note itertools: 85. 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(8).)

   * *note multiprocessing: 98.: 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(9)).
     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(): 249. ou *note
     set_start_method(): 24a. para especificar explicitamente quando seu
     código 'requer' ‘'fork'’.  Veja *note Contextos e métodos de
     inicialização: 1d5.

   * *note pathlib: a8.: *note is_relative_to(): 2fc. e *note
     relative_to(): 2fb.: passar argumentos adicionais foi
     descontinuado.

   * *note pkgutil: ae.: ‘pkgutil.find_loader()’ e
     ‘pkgutil.get_loader()’ agora levantam *note DeprecationWarning:
     1a3.; use *note importlib.util.find_spec(): 5a8.  (Contribuição de
     Nikita Sobolev em gh-97850(10).)

   * *note pty: b6.:

        * ‘master_open()’: use *note pty.openpty(): 2ff.

        * ‘slave_open()’: use *note pty.openpty(): 2ff.

   * *note sqlite3: d4.:

        * ‘version’ e ‘version_info’.

        * *note execute(): 5a9. e *note executemany(): 5aa. se *note
          espaços reservados nomeados: 5ab. forem usados e 'parameters'
          for uma sequência em vez de um *note dict: 183. .

   * *note urllib: 10e.: ‘urllib.parse.Quoter’ está obsoleto: não foi
     planejado para ser uma API pública.  (Contribuição de Gregory P.
     Smith em gh-88168(11).)

   ---------- 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/72346

   (7) https://github.com/python/cpython/issues/93963

   (8) https://github.com/python/cpython/issues/101588

   (9) https://github.com/python/cpython/issues/84559

   (10) https://github.com/python/cpython/issues/97850

   (11) 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,  Up: Novas descontinuações<2>

1.2.8.2 Remoção pendente no Python 3.15
.......................................

   * O sistema de importação:

        * A definição de *note __cached__: 31f. em um módulo enquanto
          falha na definição de *note __spec__.loader: 320. 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__: 321. em um módulo enquanto
          falha na definição de *note __spec__.parent: 322. 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: 2e.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 76.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 323. 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: 7b.:

        * Método ‘load_module()’: use ‘exec_module()’.

   * *note locale: 8a.:

        * A função *note getdefaultlocale(): 324. 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(): 325, *note
          setlocale(): 326. e *note getencoding(): 327.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a8.:

        * *note PurePath.is_reserved(): 328. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 329. para
          detectar caminhos reservados no Windows.

   * *note platform: af.:

        * *note java_ver(): 32a. 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: e1.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          32b. foi descontinuado desde o Python 3.12.

   * *note threading: f3.:

        * *note RLock(): 32c. 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: 109.:

        * *note types.CodeType: 32d.: o acesso a *note co_lnotab: 32e.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a3. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 10a.:

        * A não-documentada sintaxe de argumento nomeado para criar
          classes *note NamedTuple: 32f. (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: 330.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():
          331. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 10a, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 119.:

        * Os métodos *note getmark(): 332, ‘setmark()’ e *note
          getmarkers(): 333. das classes *note Wave_read: 334. e *note
          Wave_write: 335. foram descontinuados desde o Python 3.13.

   * *note zipimport: 138.:

        * *note load_module(): 336. está descontinuado desde o Python
          3.10.  Em vez disso, use *note exec_module(): 337.
          (Contribuição de Jiahao Li em gh-125746(7).)

   ---------- 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

   (7) https://github.com/python/cpython/issues/125746


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: Novas descontinuações<2>

1.2.8.3 Remoção pendente no Python 3.16
.......................................

   * O sistema de importação:

        * A definição de *note __loader__: 339. em um módulo enquanto
          falha na definição de *note __spec__.loader: 33a. 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: 8.:

        * 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: 33b.) para caracteres Unicode.

   * *note asyncio: b.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 30b. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

        * O sistema de políticas *note asyncio: b. está descontinuado e
          será removido no Python 3.16.  Em particular, as seguintes
          classes e funções estão descontinuadas:

             * *note asyncio.AbstractEventLoopPolicy: 30c.

             * *note asyncio.DefaultEventLoopPolicy: 30d.

             * *note asyncio.WindowsSelectorEventLoopPolicy: 30e.

             * *note asyncio.WindowsProactorEventLoopPolicy: 30f.

             * *note asyncio.get_event_loop_policy(): 310.

             * *note asyncio.set_event_loop_policy(): 311.

          Os usuários devem usar *note asyncio.run(): 2f1. ou *note
          asyncio.Runner: 2f3. com 'loop_factory' para usar a
          implementação de loop de eventos desejada.

          por exemplo, para usar *note asyncio.SelectorEventLoop: 312.
          no Windows:

               import asyncio

               async def main():
                   ...

               asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

          (Contribuição de Kumar Aditya em gh-127949(2).)

   * *note builtins: 13.:

        * 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 functools: 63.:

        * A chamada da implementação Python de *note functools.reduce():
          219. com 'function' ou 'sequence' como argumentos nomeados foi
          descontinuada desde o Python 3.14.

   * *note logging: 8b.:

     O suporte para manipuladores de registro personalizados com o
     argumento 'strm' foi descontinuado e está programado para ser
     removido no Python 3.16.  Em vez disso, defina manipuladores com o
     argumento 'stream'.  (Contribuição de Mariusz Felisiak em
     gh-115032(3).)

   * *note mimetypes: 93.:

        * Extensões válidas começam com um ‘.’ ou estão vazias para
          *note mimetypes.MimeTypes.add_type(): 317.  Extensões sem
          ponto estão descontinuadas e levantarão uma exceção *note
          ValueError: 2ea. no Python 3.16.  (Contribuição de Hugo van
          Kemenade em gh-75223(4).)

   * *note shutil: ca.:

        * 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: 243.

   * *note symtable: de.:

        * O método *note Class.get_methods: 31b. foi descontinuado desde
          o Python 3.14.

   * *note sys: df.:

        * A função *note _enablelegacywindowsfsencoding(): 33c. foi
          descontinuada desde o Python 3.13.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 33d.

   * *note sysconfig: e1.:

        * A função ‘sysconfig.expand_makefile_vars()’ está descontinuada
          desde o Python 3.14.  Em vez disso, use o argumento ‘vars’ de
          *note sysconfig.get_paths(): 33e.

   * *note tarfile: e4.:

        * 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

   (2) https://github.com/python/cpython/issues/127949

   (3) https://github.com/python/cpython/issues/115032

   (4) https://github.com/python/cpython/issues/75223


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: Novas descontinuações<2>

1.2.8.4 Remoção pendente no Python 3.17
.......................................

   * *note collections.abc: 1f.:

        - *note collections.abc.ByteString: 340. 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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: 10a.:

        - 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(): 2aa. e *note typing.get_args(): 2ab, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 343, 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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: Novas descontinuações<2>

1.2.8.5 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: 7.:

        * O aninhamento de grupos de argumentos e o aninhamento de
          grupos mutuamente exclusivos estão descontinuado.

        * A passagem do argumento nomeado não documentado 'prefix_chars'
          para *note add_argument_group(): 2e9. agora está
          descontinuado.

        * O conversor de tipo *note argparse.FileType: 30a. está
          descontinuado.

   * *note builtins: 13.:

        * Geradores: a assinatura ‘throw(type, exc, tb)’ e ‘athrow(type,
          exc, tb)’ está descontinuada: use ‘throw(exc)’ e
          ‘athrow(exc)’, a assinatura com um único argumento.

        * 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: 346, *note
          else: 17c, *note for: 347, *note if: 181, *note in: 348. ,
          *note is: 349. e *note or: 34a.  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: 19b.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 196.: esses métodos serão necessários
          para retornar uma instância de *note float: 196.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 197.: esses métodos serão
          necessários para retornar uma instância de *note complex: 197.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 197. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 15.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 34b. e *note calendar.FEBRUARY: 34c.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codecs: 1c.: use *note open(): 314. em vez de *note
     codecs.open(): 313.  (gh-133038(4))

   * *note codeobject.co_lnotab: 32e.: use o método *note
     codeobject.co_lines(): 34d.

   * *note datetime: 34.:

        * *note utcnow(): 34e.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 34f.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 67.: o valor de plural deve ser um número inteiro.

   * *note importlib: 7b.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          350. foi descontinuado: use o parâmetro 'optimization'.

   * *note importlib.metadata: 7e.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 8b.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 351.

   * *note mailbox: 8f.: o uso da entrada StringIO e do modo de texto
     foi descontinuado, use BytesIO e o modo binário.

   * *note os: a5.: chamar *note os.register_at_fork(): 352. 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: be.: 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(5).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: ca.: o parâmetro 'onerror' de *note rmtree(): 353.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d5.

        * *note ssl.SSLContext: 354. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 354.: *note set_npn_protocols(): 355. 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: f3.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          356.

        * ‘threading.Event.isSet()’: use *note is_set(): 357.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 358.: use o atributo *note
          threading.Thread.daemon: 359.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 35a.: use o atributo *note
          threading.Thread.name: 29f.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 35b.

        * ‘threading.activeCount()’: use *note threading.active_count():
          35c.

   * *note typing.Text: 35d. (gh-92332(6)).

   * A classe interna ‘typing._UnionGenericAlias’ não é mais usada para
     implementar *note typing.Union: 2a7.  Para preservar a
     compatibilidade com usuários que utilizam esta classe privada, uma
     correção de compatibilidade será fornecida pelo menos até a versão
     3.17 do Python.  (Contribuição de Jelle Zijlstra em gh-105499(7).)

   * *note unittest.IsolatedAsyncioTestCase: 35e.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 110.: use *note
     urlparse(): 35f.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note wsgiref: 11e.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 12b.: testar o valor verdade de um
     *note Element: 360. 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 sys._clear_type_cache(): 291. está descontinuada: use *note
     sys._clear_internal_caches(): 361.

   ---------- 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/133038

   (5) https://github.com/python/cpython/issues/91760

   (6) https://github.com/python/cpython/issues/92332

   (7) https://github.com/python/cpython/issues/105499


File: python.info,  Node: Alterações de bytecode do CPython<2>,  Next: Alterações na API C<3>,  Prev: Novas descontinuações<2>,  Up: O que há de novo no Python 3 13

1.2.9 Alterações de bytecode do CPython
---------------------------------------

   * O oparg de *note YIELD_VALUE: 5b1. agora é ‘1’ se o yield fizer
     parte de um yield-from ou um await, e ‘0’ caso contrário.  O oparg
     de *note RESUME: 5b2. 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<3>,  Next: Mudanças na construção,  Prev: Alterações de bytecode do CPython<2>,  Up: O que há de novo no Python 3 13

1.2.10 Alterações na API C
--------------------------

* Menu:

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


File: python.info,  Node: Novas funcionalidades<3>,  Next: Alterações na API C<4>,  Up: Alterações na API C<3>

1.2.10.1 Novas funcionalidades
..............................

   * Adiciona a *note API C PyMonitoring C: 47f. para gerar eventos de
     monitoramento da PEP 669(1):

        * *note PyMonitoringState: 5b5.

        * *note PyMonitoring_FirePyStartEvent(): 5b6.

        * *note PyMonitoring_FirePyResumeEvent(): 5b7.

        * *note PyMonitoring_FirePyReturnEvent(): 5b8.

        * *note PyMonitoring_FirePyYieldEvent(): 5b9.

        * *note PyMonitoring_FireCallEvent(): 5ba.

        * *note PyMonitoring_FireLineEvent(): 5bb.

        * *note PyMonitoring_FireJumpEvent(): 5bc.

        * ‘PyMonitoring_FireBranchEvent’

        * *note PyMonitoring_FireCReturnEvent(): 5bd.

        * *note PyMonitoring_FirePyThrowEvent(): 5be.

        * *note PyMonitoring_FireRaiseEvent(): 5bf.

        * *note PyMonitoring_FireCRaiseEvent(): 5c0.

        * *note PyMonitoring_FireReraiseEvent(): 5c1.

        * *note PyMonitoring_FireExceptionHandledEvent(): 5c2.

        * *note PyMonitoring_FirePyUnwindEvent(): 5c3.

        * *note PyMonitoring_FireStopIterationEvent(): 5c4.

        * *note PyMonitoring_EnterScope(): 5c5.

        * *note PyMonitoring_ExitScope(): 5c6.

     (Contribuição de Irit Katriel em gh-111997(2)).

   * Adiciona *note PyMutex: 47e, um mutex leve que ocupa um único byte,
     e as novas funções *note PyMutex_Lock(): 5c7. e *note
     PyMutex_Unlock(): 5c8.  ‘PyMutex_Lock()’ irá liberar a *note GIL:
     164. (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: 47d, fornecendo acesso aos relógios
     do sistema.

        * *note PyTime_t: 5c9.

        * *note PyTime_MIN: 5ca. e *note PyTime_MAX: 5cb.

        * *note PyTime_AsSecondsDouble(): 5cc.

        * *note PyTime_Monotonic(): 5cd.

        * *note PyTime_MonotonicRaw(): 5ce.

        * *note PyTime_PerfCounter(): 5cf.

        * *note PyTime_PerfCounterRaw(): 5d0.

        * *note PyTime_Time(): 5d1.

        * *note PyTime_TimeRaw(): 5d2.

     (Contribuição de Victor Stinner e Petr Viktorin em gh-110850(4).)

   * Adiciona a função *note PyDict_ContainsString(): 5d3. com o mesmo
     comportamento de *note PyDict_Contains(): 5d4, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 5d5.*.  (Contribuição de Victor
     Stinner em gh-108314(5).)

   * Adiciona as funções *note PyDict_GetItemRef(): 5d6. e *note
     PyDict_GetItemStringRef(): 41e. functions, que são semelhantes a
     *note PyDict_GetItemWithError(): 5d7, mas retornam uma *note
     referência forte: 5d8. em vez de uma *note referência emprestada:
     3d4.  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(): 5d9, que é
     semelhante a *note PyDict_SetDefault(): 5da, mas retorna uma *note
     referência forte: 5d8. em vez de uma *note referência emprestada:
     3d4.  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(): 41f. e *note
     PyDict_PopString(): 5db. para remover uma chave de um dicionário e,
     opcionalmente, retornam o valor removido.  Isto é semelhante a
     *note dict.pop(): 5dc, mas sem o valor padrão e sem levantar *note
     KeyError: 5dd. se a chave estiver ausente.  (Contribuição de Stefan
     Behnel e Victor Stinner em gh-111262(8).)

   * Adiciona as funções *note PyMapping_GetOptionalItem(): 5de. e *note
     PyMapping_GetOptionalItemString(): 5df. como alternativas a *note
     PyObject_GetAttr(): 5e0. e *note PyObject_GetAttrString(): 5e1,
     respectivamente.  As novas funções não levantam *note KeyError:
     5dd. 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(): 5e2. e *note
     PyObject_GetOptionalAttrString(): 5e3, variantes de *note
     PyObject_GetAttr(): 5e0. e *note PyObject_GetAttrString(): 5e1,
     respectivamente.  Essas novas funções não levantam *note
     AttributeError: 5e4. 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(): 5e5. como uma
     extensão para *note PyErr_WriteUnraisable(): 5e6, 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:
     5d8. em vez de uma *note referência emprestada: 3d4. para quadros
     locais, globais, e embutidos, como parte de *note PEP 667: 469.:

        * *note PyEval_GetFrameBuiltins(): 5e7. substitui *note
          PyEval_GetBuiltins(): 5e8.

        * *note PyEval_GetFrameGlobals(): 5e9. substitui *note
          PyEval_GetGlobals(): 5ea.

        * *note PyEval_GetFrameLocals(): 5eb. substitui *note
          PyEval_GetLocals(): 5ec.

     (Contribuição de Mark Shannon e Tian Gao em gh-74929(12).)

   * Adiciona as funções *note Py_GetConstant(): 5ed. e *note
     Py_GetConstantBorrowed(): 5ee. para referências *note fortes: 5d8.
     ou *note emprestadas: 3d4. 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(): 5ef. como uma
     substituta para *note PyImport_AddModule(): 5f0. mas retorna uma
     *note referência forte: 5d8. em vez de uma *note referência
     emprestada: 3d4.  (Contribuição de Victor Stinner em
     gh-105922(14).)

   * Adiciona a função *note Py_IsFinalizing(): 5f1. para verificar se o
     interpretador Python principal está *note sendo desligado: 473.
     (Contribuição de Victor Stinner em gh-108014(15).)

   * Adiciona a função *note PyList_GetItemRef(): 5f2. como uma
     substituta para *note PyList_GetItem(): 5f3. mas que retorna uma
     *note referência forte: 5d8. em vez de uma *note referência
     emprestada: 3d4.  (Contribuição de Sam Gross em gh-114329(16).)

   * Adiciona as funções *note PyList_Extend(): 5f4. e *note
     PyList_Clear(): 5f5, espelhando os métodos *note list.extend():
     5f6. e *note list.clear(): 5f7. do Python.  (Contribuição de Victor
     Stinner em gh-111138(17).)

   * Adiciona a função *note PyLong_AsInt(): 5f8, semelhante à *note
     PyLong_AsLong(): 5f9, 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(): 5fa, *note
     PyLong_FromNativeBytes(): 5fb. e *note
     PyLong_FromUnsignedNativeBytes(): 5fc. para simplificar a conversão
     entre tipos inteiros nativos e objetos *note int: 19b. do Python.
     (Contribuição de Steve Dower em gh-111140(19).)

   * Adiciona a função *note PyModule_Add(): 5fd, que é semelhante a
     *note PyModule_AddObjectRef(): 5fe. e *note PyModule_AddObject():
     5ff, mas sempre rouba uma referência ao valor.  (Contribuição de
     Serhiy Storchaka em gh-86493(20).)

   * Adiciona a função *note PyObject_GenericHash(): 600. 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(): 422. para fazer hash de
     um ponteiro.  (Contribuição de Victor Stinner em gh-111545(22).)

   * Adiciona as funções *note PyObject_VisitManagedDict(): 601. e *note
     PyObject_ClearManagedDict(): 602. que devem ser chamadas pelas
     funções traverse e clear de um tipo usando o sinalizador *note
     Py_TPFLAGS_MANAGED_DICT: 603.  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(): 604. e *note
     PyRefTracer_GetTracer(): 605, que permitem rastrear a criação e
     destruição de objetos da mesma forma que o módulo *note
     tracemalloc: 105.  (Contribuição de Pablo Galindo em gh-93502(25).)

   * Adiciona a função *note PySys_AuditTuple(): 606. como uma
     alternativa à *note PySys_Audit(): 607, que recebe argumentos de
     evento como um objeto *note tuple: 608. do Python.  (Contribuição
     de Victor Stinner em gh-85283(26).)

   * Adiciona a função *note PyThreadState_GetUnchecked(): 420. como uma
     alternativa a *note PyThreadState_Get(): 609. 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(): 60a. para
     obter o nome totalmente qualificado do tipo.  O nome do módulo é
     prefixado se *note type.__module__: 60b. 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(): 60c. para obter o
     nome do módulo do tipo.  Isto é equivalente a obter o atributo
     *note type.__module__: 60b.  (Contribuição de Eric Snow e Victor
     Stinner em gh-111696(29).)

   * Adiciona as funções *note PyUnicode_EqualToUTF8AndSize(): 60d. e
     *note PyUnicode_EqualToUTF8(): 60e.: 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(): 3dc. como uma
     alternativa a *note PyWeakref_GetObject(): 3da, mas retorna uma
     *note referência forte: 5d8, 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(): 60f. substitui *note
          PyObject_HasAttr(): 610.

        * *note PyObject_HasAttrStringWithError(): 611. substitui *note
          PyObject_HasAttrString(): 612.

        * *note PyMapping_HasKeyWithError(): 613. substitui *note
          PyMapping_HasKey(): 614.

        * *note PyMapping_HasKeyStringWithError(): 615. substitui *note
          PyMapping_HasKeyString(): 616.

     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<4>,  Next: Mudanças na API C Limitada,  Prev: Novas funcionalidades<3>,  Up: Alterações na API C<3>

1.2.10.2 Alterações na API C
............................

   * O parâmetro 'keywords' das funções *note
     PyArg_ParseTupleAndKeywords(): 618. e *note
     PyArg_VaParseTupleAndKeywords(): 619. 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:
     61a.  (Contribuição de Serhiy Storchaka em gh-65210(1).)

   * *note PyArg_ParseTupleAndKeywords(): 618. 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(): 61b.
     (Contribuição de Bogdan Romanyuk em gh-115781(3).)

   * As funções *note PyDict_GetItem(): 61c, *note
     PyDict_GetItemString(): 61d, *note PyMapping_HasKey(): 614, *note
     PyMapping_HasKeyString(): 616, *note PyObject_HasAttr(): 610, *note
     PyObject_HasAttrString(): 612, e *note PySys_GetObject(): 61e, que
     apagam todos os erros que ocorrem ao chamá-las, agora reportam tais
     erros usando *note sys.unraisablehook(): 501.  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(): 61f.:

        * ‘%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: 620.  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: 503. ou *note
     com asserções: 621, *note PyTuple_SET_ITEM(): 622. e *note
     PyList_SET_ITEM(): 623. 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<2>,  Prev: Alterações na API C<4>,  Up: Alterações na API C<3>

1.2.10.3 Mudanças na API C Limitada
...................................

   * As seguintes funções agora estão incluídas na API C limitada:

        * *note PyMem_RawMalloc(): 625.

        * *note PyMem_RawCalloc(): 626.

        * *note PyMem_RawRealloc(): 627.

        * *note PyMem_RawFree(): 628.

        * *note PySys_Audit(): 607.

        * *note PySys_AuditTuple(): 606.

        * *note PyType_GetModuleByDef(): 629.

     (Contribuição de Victor Stinner em gh-85283(1), gh-85283(2) e
     gh-116936(3).)

   * Python construído com *note -with-trace-refs: 62a. (referências de
     rastreamento) agora oferece suporte à *note API Limitada: 62b.
     (Contribuição de Victor Stinner em gh-108634(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85283

   (2) https://github.com/python/cpython/issues/85283

   (3) https://github.com/python/cpython/issues/116936

   (4) https://github.com/python/cpython/issues/108634


File: python.info,  Node: APIs C removidas<2>,  Next: APIs C descontinuadas<2>,  Prev: Mudanças na API C Limitada,  Up: Alterações na API C<3>

1.2.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: 550. 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: 25f.

        * ‘PyObject_CheckReadBuffer()’: use *note
          PyObject_CheckBuffer(): 62d. para testar se o objeto oferece
          suporte ao protocolo de buffer.  Observe que *note
          PyObject_CheckBuffer(): 62d. não garante que *note
          PyObject_GetBuffer(): 62e. terá sucesso.  Para testar se o
          objeto é realmente legível, veja o próximo exemplo de *note
          PyObject_GetBuffer(): 62e.

        * ‘PyObject_AsCharBuffer()’, ‘PyObject_AsReadBuffer()’: use
          *note PyObject_GetBuffer(): 62e. e *note PyBuffer_Release():
          62f.:

               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():
          62e. e *note PyBuffer_Release(): 62f.:

               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(): 630. ou *note PyObject_Call():
          631.

               Aviso: Os argumentos posicionais de *note
               PyObject_Call(): 631. devem ser uma *note tuple: 608. e
               não podem ser ‘NULL’, os argumentos nomeados devem ser
               *note dict: 183. 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(): 631, passe uma tupla vazia como
               argumentos posicionais usando *note PyTuple_New(0): 632.

        * ‘PyEval_CallFunction()’: use *note PyObject_CallFunction():
          633.

        * ‘PyEval_CallMethod()’: use *note PyObject_CallMethod(): 634.

        * ‘PyCFunction_Call()’: use *note PyObject_Call(): 631.

     (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: 635.

        * ‘PySys_AddWarnOption()’: use *note PyConfig.warnoptions: 635.

        * ‘PySys_AddXOption()’: use *note PyConfig.xoptions: 636.

        * ‘PySys_HasWarnOptions()’: use *note PyConfig.xoptions: 636.

        * ‘PySys_SetPath()’: defina *note PyConfig.module_search_paths:
          637.

        * ‘Py_SetPath()’: defina *note PyConfig.module_search_paths:
          637.

        * ‘Py_SetStandardStreamEncoding()’: defina *note
          PyConfig.stdio_encoding: 638, e também talvez *note
          PyConfig.legacy_windows_stdio: 417. (no Windows).

        * ‘_Py_SetProgramFullPath()’: defina *note PyConfig.executable:
          639.

     Em vez disso, use a nova API *note PyConfig: 3f4. da *note
     Configuração de Inicialização do Python: 63a. ( 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(): 63b. e *note
          PyEval_RestoreThread(): 63c.;

        * *note PyEval_AcquireThread(): 63d. e *note
          PyEval_RestoreThread(): 63c. de baixo nível;

        * ou *note PyGILState_Ensure(): 63e. e *note
          PyGILState_Release(): 63f.

     (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(): 640. 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(): 640. 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<2>,  Prev: APIs C removidas<2>,  Up: Alterações na API C<3>

1.2.10.5 APIs C descontinuadas
..............................

   * Descontinua antigas funções de inicialização do Python:

        * *note PySys_ResetWarnOptions(): 3f1.: apague *note
          sys.warnoptions: 3f2. e ‘warnings.filters’.

        * *note Py_GetExecPrefix(): 3e6.: leia *note sys.exec_prefix:
          3e8.

        * *note Py_GetPath(): 3e0.: leia *note sys.path: 3e1.

        * *note Py_GetPrefix(): 3e2.: leia *note sys.prefix: 3e4.

        * *note Py_GetProgramFullPath(): 3e9.: leia *note
          sys.executable: 3ea.

        * *note Py_GetProgramName(): 3eb.: leia *note sys.executable:
          3ea.

        * *note Py_GetPythonHome(): 3ec.: leia *note PyConfig.home: 3f0.
          ou a variável de ambiente *note PYTHONHOME: 3ed.

     (Contribuição de Victor Stinner em gh-105145(1).)

   * *note Descontinua suavemente: 23c. as funções *note
     PyEval_GetBuiltins(): 5e8, *note PyEval_GetGlobals(): 5ea. e *note
     PyEval_GetLocals(): 5ec, que retornam uma *note referência
     emprestada: 3d4.  (Suavemente descontinuadas como parte da PEP
     667(2).)

   * Descontinua a função *note PyImport_ImportModuleNoBlock(): 3d8. que
     é apenas um apelido para *note PyImport_ImportModule(): 3d9. desde
     o Python 3.3.  (Contribuição de Victor Stinner em gh-105396(3).)

   * *note Descontinua suavemente: 23c. a função *note
     PyModule_AddObject(): 5ff.  Ela deve ser substituída por *note
     PyModule_Add(): 5fd. ou *note PyModule_AddObjectRef(): 5fe.
     (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(): 3da. e *note
     PyWeakref_GET_OBJECT(): 3db, que retornam uma *note referência
     emprestada: 3d4.  Em vez disso, use a nova função *note
     PyWeakref_GetRef(): 3dc, que retorna uma *note referência forte:
     5d8.  O projeto pythoncapi-compat(6) pode ser usado para obter
     *note PyWeakref_GetRef(): 3dc. 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<4>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<4>.
* 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<4>.

   ---------- 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<4>,  Up: APIs C descontinuadas<2>

1.2.10.6 Remoção pendente no Python 3.14
........................................

   * O campo ‘ma_version_tag’ em *note PyDictObject: 643. para módulos
     de extensão ( PEP 699(1); gh-101193(2)).

   * A criação de *note tipos imutáveis: 3cc. com bases mutáveis
     (gh-95388(3)).

   ---------- 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<2>,  Up: APIs C descontinuadas<2>

1.2.10.7 Remoção pendente no Python 3.15
........................................

   * *note PyImport_ImportModuleNoBlock(): 3d8.: use *note
     PyImport_ImportModule(): 3d9.

   * *note PyWeakref_GetObject(): 3da. e *note PyWeakref_GET_OBJECT():
     3db.: Use *note PyWeakref_GetRef(): 3dc.  O projeto
     pythoncapi-compat(1) pode ser usado para usar *note
     PyWeakref_GetRef(): 3dc. no Python 3.12 e versões anteriores.

   * O tipo *note Py_UNICODE: 3dd. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3de.

   * ‘PyUnicode_AsDecodedUnicode()’: Use *note PyCodec_Decode(): 3de.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note str: 169, tal como *note bytes: 192.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 3df.

   * ‘PyUnicode_AsEncodedUnicode()’: Use *note PyCodec_Encode(): 3df.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note bytes: 192, tal com *note str: 169.

   * Funções de inicialização do Python, descontinuadas no Python 3.9:

        * *note Py_GetPath(): 3e0.: Use *note
          PyConfig_Get("module_search_paths"): 379. (*note sys.path:
          3e1.).

        * *note Py_GetPrefix(): 3e2.: Use *note
          PyConfig_Get("base_prefix"): 379. (*note sys.base_prefix:
          3e3.).  Use *note PyConfig_Get("prefix"): 379. (*note
          sys.prefix: 3e4.) se *note ambientes virtuais: 3e5. precisam
          ser tratados.

        * *note Py_GetExecPrefix(): 3e6.: Use *note
          PyConfig_Get("base_exec_prefix"): 379. (*note
          sys.base_exec_prefix: 3e7.).  Use *note
          PyConfig_Get("exec_prefix"): 379. (*note sys.exec_prefix:
          3e8.) se *note ambientes virtuais: 3e5. precisam ser tratados.

        * *note Py_GetProgramFullPath(): 3e9.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetProgramName(): 3eb.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetPythonHome(): 3ec.: Use *note
          PyConfig_Get("home"): 379. ou a variável de ambiente *note
          PYTHONHOME: 3ed.

     O projeto pythoncapi-compat(2) pode ser usado para obter *note
     PyConfig_Get(): 379. no Python 3.13 e versões anteriores.

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3ee.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3ee.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3ef.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3f0.

        * *note PySys_ResetWarnOptions(): 3f1.: apague *note
          sys.warnoptions: 3f2. e ‘warnings.filters’.

     Em vez disso, a API *note Py_InitializeFromConfig(): 3f3. deve ser
     usada com *note PyConfig: 3f4.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3f5.: Use *note PyConfig.parser_debug:
          3f6. ou *note PyConfig_Get("parser_debug"): 379.

        * *note Py_VerboseFlag: 3f7.: Use *note PyConfig.verbose: 3f8.
          ou *note PyConfig_Get("verbose"): 379.

        * *note Py_QuietFlag: 3f9.: Use *note PyConfig.quiet: 3fa. ou
          *note PyConfig_Get("quiet"): 379.

        * *note Py_InteractiveFlag: 3fb.: Use *note
          PyConfig.interactive: 3fc. ou *note
          PyConfig_Get("interactive"): 379.

        * *note Py_InspectFlag: 3fd.: Use *note PyConfig.inspect: 3fe.
          ou *note PyConfig_Get("inspect"): 379.

        * *note Py_OptimizeFlag: 3ff.: Use *note
          PyConfig.optimization_level: 400. ou *note
          PyConfig_Get("optimization_level"): 379.

        * *note Py_NoSiteFlag: 401.: Use *note PyConfig.site_import:
          402. ou *note PyConfig_Get("site_import"): 379.

        * *note Py_BytesWarningFlag: 403.: Use *note
          PyConfig.bytes_warning: 404. ou *note
          PyConfig_Get("bytes_warning"): 379.

        * *note Py_FrozenFlag: 405.: Use *note
          PyConfig.pathconfig_warnings: 406. ou *note
          PyConfig_Get("pathconfig_warnings"): 379.

        * *note Py_IgnoreEnvironmentFlag: 407.: Use *note
          PyConfig.use_environment: 408. ou *note
          PyConfig_Get("use_environment"): 379.

        * *note Py_DontWriteBytecodeFlag: 409.: Use *note
          PyConfig.write_bytecode: 40a. ou *note
          PyConfig_Get("write_bytecode"): 379.

        * *note Py_NoUserSiteDirectory: 40b.: Use *note
          PyConfig.user_site_directory: 40c. ou *note
          PyConfig_Get("user_site_directory"): 379.

        * *note Py_UnbufferedStdioFlag: 40d.: Use *note
          PyConfig.buffered_stdio: 40e. ou *note
          PyConfig_Get("buffered_stdio"): 379.

        * *note Py_HashRandomizationFlag: 40f.: Use *note
          PyConfig.use_hash_seed: 410. e *note PyConfig.hash_seed: 411.
          ou *note PyConfig_Get("hash_seed"): 379.

        * *note Py_IsolatedFlag: 412.: Use *note PyConfig.isolated: 413.
          ou *note PyConfig_Get("isolated"): 379.

        * *note Py_LegacyWindowsFSEncodingFlag: 414.: Use *note
          PyPreConfig.legacy_windows_fs_encoding: 415. ou *note
          PyConfig_Get("legacy_windows_fs_encoding"): 379.

        * *note Py_LegacyWindowsStdioFlag: 416.: Use *note
          PyConfig.legacy_windows_stdio: 417. ou *note
          PyConfig_Get("legacy_windows_stdio"): 379.

        * ‘Py_FileSystemDefaultEncoding’,
          ‘Py_HasFileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 418. ou *note
          PyConfig_Get("filesystem_encoding"): 379.

        * ‘Py_FileSystemDefaultEncodeErrors’: Use *note
          PyConfig.filesystem_errors: 419. ou *note
          PyConfig_Get("filesystem_errors"): 379.

        * ‘Py_UTF8Mode’: Use *note PyPreConfig.utf8_mode: 41a. ou *note
          PyConfig_Get("utf8_mode"): 379.  (veja *note
          Py_PreInitialize(): 41b.)

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4. para definir essas opções.  Ou *note
     PyConfig_Get(): 379. pode ser usado para obter essas opções em
     tempo de execução.

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: Remoção pendente no Python 3 16<4>,  Next: Remoção pendente no Python 3 18<2>,  Prev: Remoção pendente no Python 3 15<4>,  Up: APIs C descontinuadas<2>

1.2.10.8 Remoção pendente no Python 3.16
........................................

   * A cópia empacotada do ‘libmpdec’.


File: python.info,  Node: Remoção pendente no Python 3 18<2>,  Next: Remoção pendente em versões futuras<4>,  Prev: Remoção pendente no Python 3 16<4>,  Up: APIs C descontinuadas<2>

1.2.10.9 Remoção pendente no Python 3.18
........................................

   * As seguintes funções privadas estão descontinuado e planejadas para
     remoção no Python 3.18:

        * ‘_PyBytes_Join()’: use *note PyBytes_Join(): 380.

        * ‘_PyDict_GetItemStringWithError()’: use *note
          PyDict_GetItemStringRef(): 41e.

        * ‘_PyDict_Pop()’: use *note PyDict_Pop(): 41f.

        * ‘_PyLong_Sign()’: use *note PyLong_GetSign(): 397.

        * ‘_PyLong_FromDigits()’ e ‘_PyLong_New()’: use *note
          PyLongWriter_Create(): 3a7.

        * ‘_PyThreadState_UncheckedGet()’: use *note
          PyThreadState_GetUnchecked(): 420.

        * ‘_PyUnicode_AsString()’: use *note PyUnicode_AsUTF8(): 421.

        * ‘_PyUnicodeWriter_Init()’: substitua
          ‘_PyUnicodeWriter_Init(&writer)’ com *note writer =
          PyUnicodeWriter_Create(0): 3b1.

        * ‘_PyUnicodeWriter_Finish()’: substitua
          ‘_PyUnicodeWriter_Finish(&writer)’ por *note
          PyUnicodeWriter_Finish(writer): 3b4.

        * ‘_PyUnicodeWriter_Dealloc()’: substitua
          ‘_PyUnicodeWriter_Dealloc(&writer)’ por *note
          PyUnicodeWriter_Discard(writer): 3b3.

        * ‘_PyUnicodeWriter_WriteChar()’: substituta
          ‘_PyUnicodeWriter_WriteChar(&writer, ch)’ com *note
          PyUnicodeWriter_WriteChar(writer, ch): 3b7.

        * ‘_PyUnicodeWriter_WriteStr()’: substitua
          ‘_PyUnicodeWriter_WriteStr(&writer, str)’ por *note
          PyUnicodeWriter_WriteStr(writer, str): 3b9.

        * ‘_PyUnicodeWriter_WriteSubstring()’: substitua
          ‘_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)’
          por *note PyUnicodeWriter_WriteSubstring(writer, str, start,
          end): 3ba.

        * ‘_PyUnicodeWriter_WriteASCIIString()’: substitua
          ‘_PyUnicodeWriter_WriteASCIIString(&writer, str)’ por *note
          PyUnicodeWriter_WriteASCII(writer, str): 3b6.

        * ‘_PyUnicodeWriter_WriteLatin1String()’: substitua
          ‘_PyUnicodeWriter_WriteLatin1String(&writer, str)’ por *note
          PyUnicodeWriter_WriteUTF8(writer, str): 3bc.

        * ‘_PyUnicodeWriter_Prepare()’: (sem substituto).

        * ‘_PyUnicodeWriter_PrepareKind()’: (sem substituto).

        * ‘_Py_HashPointer()’: use *note Py_HashPointer(): 422.

        * ‘_Py_fopen_obj()’: use *note Py_fopen(): 390.

     O projeto pythoncapi-compat(1) pode ser usado para obter essas
     novas funções públicas no Python 3.13 e versões anteriores.
     (Contribuição de Victor Stinner em gh-128863(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/cpython/issues/128863


File: python.info,  Node: Remoção pendente em versões futuras<4>,  Prev: Remoção pendente no Python 3 18<2>,  Up: APIs C descontinuadas<2>

1.2.10.10 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: 424.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 425.: use *note PyErr_GetRaisedException():
     426.

   * *note PyErr_NormalizeException(): 427.: use *note
     PyErr_GetRaisedException(): 426.

   * *note PyErr_Restore(): 428.: use *note PyErr_SetRaisedException():
     429.

   * *note PyModule_GetFilename(): 42a.: use *note
     PyModule_GetFilenameObject(): 42b.

   * *note PyOS_AfterFork(): 42c.: use *note PyOS_AfterFork_Child():
     42d.

   * *note PySlice_GetIndicesEx(): 42e.: use *note PySlice_Unpack():
     42f. e *note PySlice_AdjustIndices(): 430.

   * *note PyUnicode_READY(): 431.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 432.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     433.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 434.: use *note
          PyThread_tss_alloc(): 435.

        * *note PyThread_delete_key(): 436.: use *note
          PyThread_tss_free(): 437.

        * *note PyThread_set_key_value(): 438.: use *note
          PyThread_tss_set(): 439.

        * *note PyThread_get_key_value(): 43a.: use *note
          PyThread_tss_get(): 43b.

        * *note PyThread_delete_key_value(): 43c.: use *note
          PyThread_tss_delete(): 43d.

        * *note PyThread_ReInitTLS(): 43e.: 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<3>,  Up: O que há de novo no Python 3 13

1.2.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: 487. 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: 487. 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: d4.  (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:
     64a.  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: 64b. 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: 62a. (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: 503.  (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: 62b.  (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.2.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 Python<2>.
* Alterações na API C: Alterações na API C<5>.


File: python.info,  Node: Alterações na API Python<2>,  Next: Alterações na API C<5>,  Up: Portando para o Python 3 13

1.2.12.1 Alterações na API Python
.................................

   * *note PEP 667: 469. introduz várias mudanças na semântica de *note
     locals(): 468. e *note f_locals: 49f.:

        * Chamar *note locals(): 468. em um *note escopo otimizado: 49b.
          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(): 468. 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: 49f. em um *note escopo
          otimizado: 49b. 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: 216. agora emite uma *note FutureWarning:
     64d. quando é usado como método.  Seu comportamento será alterado
     em versões futuras do Python.  Envolva-a em *note staticmethod():
     450. se quiser preservar o comportamento antigo.  (Contribuição de
     Serhiy Storchaka em gh-121027(5).)

   * Uma exceção *note OSError: 2bf. agora é levantada por *note
     getpass.getuser(): 64e. para qualquer falha na recuperação de um
     nome de usuário, em vez de *note ImportError: 64f. em plataformas
     não-Unix ou *note KeyError: 5dd. em plataformas Unix onde o banco
     de dados de senhas está vazio.

   * O valor do atributo ‘mode’ de *note gzip.GzipFile: 650. 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(): 651. é agora ‘'rb'’ e
     não mais ‘'r'’.  (Contribuição de Serhiy Storchaka em
     gh-115961(6).)

   * *note mailbox.Maildir: 652. agora ignora arquivos com um ponto
     inicial (‘.’).  (Contribuição de Zackery Spytz em gh-65559(7).)

   * *note pathlib.Path.glob(): 531. e *note rglob(): 532. 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: f3. 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<5>,  Prev: Alterações na API Python<2>,  Up: Portando para o Python 3 13

1.2.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: 654. 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: 469. introduz várias mudanças em funções
     relacionadas a quadro:

        * Os efeitos da mutação do dicionário retornado de *note
          PyEval_GetLocals(): 5ec. em um *note escopo otimizado: 49b.
          foram alterados.  Novas entradas de dict adicionadas desta
          forma agora 'apenas' ficarão visíveis para chamadas *note
          PyEval_GetLocals(): 5ec. subsequentes nesse quadro, como *note
          PyFrame_GetLocals(): 655, *note locals(): 468. e *note
          FrameType.f_locals: 49f. 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(): 5ec. 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(): 655. em um *note escopo
          otimizado: 49b. 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():
          656.) ou chamando a nova API *note PyEval_GetFrameLocals():
          5eb.

        * ‘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(): 655. foi introduzido pela primeira vez.

        * ‘PyFrame_LocalsToFast()’ não tem mais efeito.  Chamar esta
          função é redundante agora que *note PyFrame_GetLocals(): 655.
          retorna um proxy de “write-through” para *note escopos
          otimizados: 49b.

   * O Python 3.13 removeu muitas funções privadas.  Algumas delas podem
     ser substituídas usando estas alternativas:

        * ‘_PyDict_Pop()’: *note PyDict_Pop(): 41f. ou *note
          PyDict_PopString(): 5db.;

        * ‘_PyDict_GetItemWithError()’: *note PyDict_GetItemRef(): 5d6.;

        * ‘_PyErr_WriteUnraisableMsg()’: *note PyErr_FormatUnraisable():
          5e5.;

        * ‘_PyEval_SetTrace()’: *note PyEval_SetTrace(): 657. ou *note
          PyEval_SetTraceAllThreads(): 658.;

        * ‘_PyList_Extend()’: *note PyList_Extend(): 5f4.;

        * ‘_PyLong_AsInt()’: *note PyLong_AsInt(): 5f8.;

        * ‘_PyMem_RawStrdup()’: ‘strdup()’;

        * ‘_PyMem_Strdup()’: ‘strdup()’;

        * ‘_PyObject_ClearManagedDict()’: *note
          PyObject_ClearManagedDict(): 602.;

        * ‘_PyObject_VisitManagedDict()’: *note
          PyObject_VisitManagedDict(): 601.;

        * ‘_PyThreadState_UncheckedGet()’: *note
          PyThreadState_GetUnchecked(): 420.;

        * ‘_PyTime_AsSecondsDouble()’: *note PyTime_AsSecondsDouble():
          5cc.;

        * ‘_PyTime_GetMonotonicClock()’: *note PyTime_Monotonic(): 5cd.
          ou *note PyTime_MonotonicRaw(): 5ce.;

        * ‘_PyTime_GetPerfCounter()’: *note PyTime_PerfCounter(): 5cf.
          ou *note PyTime_PerfCounterRaw(): 5d0.;

        * ‘_PyTime_GetSystemClock()’: *note PyTime_Time(): 5d1. ou *note
          PyTime_TimeRaw(): 5d2.;

        * ‘_PyTime_MAX’: *note PyTime_MAX: 5cb.;

        * ‘_PyTime_MIN’: *note PyTime_MIN: 5ca.;

        * ‘_PyTime_t’: *note PyTime_t: 5c9.;

        * ‘_Py_HashPointer()’: *note Py_HashPointer(): 422.;

        * ‘_Py_IsFinalizing()’: *note Py_IsFinalizing(): 5f1.

     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,  Prev: Portando para o Python 3 13,  Up: O que há de novo no Python 3 13

1.2.13 Mudanças em teste de regressão
-------------------------------------

   * Python construído com *note -with-pydebug: 65a. do ‘configure’
     agora oferece suporte a uma opção de linha de comando *note -X
     presite=pacote.módulo: 16f.  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: 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.3 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: 142. 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<3>.
* Novas funcionalidades: Novas funcionalidades<4>.
* Novos recursos relacionados a dicas de tipo::
* Outras mudanças na linguagem: Outras mudanças na linguagem<2>.
* Novos módulos: Novos módulos<3>.
* Módulos melhorados: Módulos melhorados<3>.
* Otimizações: Otimizações<3>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<3>.
* Ferramentas e daemons::
* Descontinuados: Descontinuados<2>.
* Removidos: Removidos<2>.
* 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<6>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0693/


File: python.info,  Node: Resumo – Destaques da versão<3>,  Next: Novas funcionalidades<4>,  Up: O que há de novo no Python 3 12

1.3.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: a5. e *note pathlib: a8. 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: 65f. tiveram muitas limitações removidas e as sugestões ‘Did
you mean …’ continuam a melhorar.  A nova *note sintaxe de parâmetro
type: 660. e a instrução *note type: 661. melhoram a ergonomia para usar
*note tipos genéricos: 1a1. e *note apelidos de tipos: 662. 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: 149. e *note Referência da Linguagem: 14a.  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: 660, sintaxe de parâmetro de tipo e a instrução
     *note type: 661.

Novos recursos de gramática:

   * *note PEP 701: 663, *note f-strings: 65f. na gramática

Melhorias no interpretador:

   * *note PEP 684: 664, uma única *note GIL: 46d. por interpretador

   * *note PEP 669: 665, monitoramento de baixo impacto

   * *note Aprimoradas as sugestões 'Did you mean ...': 666. para as
     exceções *note NameError: 44f, *note ImportError: 64f. e *note
     SyntaxError: 18e.

Melhorias no modelo de dados Python:

   * *note PEP 688: 667, usando o *note protocolo de buffer: 25f. do
     Python

Melhorias significativas na biblioteca padrão:

   * A classe *note pathlib.Path: 265. agora oferece suporte a fazer
     subclasses

   * O módulo *note os: a5. recebeu vários aprimoramentos para suporte
     ao Windows

   * Uma *note interface de linha de comando: 668. foi adicionada ao
     módulo *note sqlite3: d4.

   * As verificações de *note isinstance(): 2ac. para *note protocolos
     verificáveis em tempo de execução: 669. desfruta de um aumento de
     velocidade entre duas e 20 vezes

   * O pacote *note asyncio: b. teve vários aprimoramentos desempenho,
     com alguns benchmarks mostrando um aumento de 75% na velocidade.

   * Uma *note interface de linha de comando: 66a. foi adicionada ao
     módulo *note uuid: 116.

   * Devido às alterações na *note PEP 701: 663, a produção de tokens
     por meio do módulo *note tokenize: 101. é até 64% mais rápida.

Melhorias de segurança:

   * Substitui as implementações embutidas do *note hashlib: 6c. 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: 66b, tier instável de API C

   * *note PEP 683: 66c, objetos imortal

Melhorias na implementação do CPython:

   * *note PEP 709: 66d, inlining de compreensão

   * *note Suporte do CPython: 4a8. para o perfilador Linux ‘perf’

   * Implementa proteção contra estouro de pilha em plataformas
     suportadas

Novos recursos de tipagem:

   * *note PEP 692: 66e, usando *note TypedDict: 330. para anotar *note
     **kwargs: 66f.

   * *note PEP 698: 670, decorador *note typing.override(): 671.

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: 169. 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: 117.  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: 672.

   * Os módulos ‘asynchat’, ‘asyncore’ e ‘imp’ foram removidos,
     juntamente com vários *note apelidos de métodos: 673. de *note
     unittest.TestCase: 2b2.

   ---------- 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<4>,  Next: Novos recursos relacionados a dicas de tipo,  Prev: Resumo – Destaques da versão<3>,  Up: O que há de novo no Python 3 12

1.3.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<3>.


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<4>

1.3.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: 676. e *note funções: 677.:

     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: 678. usando a instrução *note type: 661, que cria uma
instância de *note TypeAliasType: 2ad.:

     type Point = tuple[float, float]

Os apelidos de tipo também podem ser *note genéricos: 679.:

     type Point[T] = tuple[T, T]

A nova sintaxe permite declarar os parâmetros *note TypeVarTuple: 482. e
*note ParamSpec: 481, bem como os parâmetros *note TypeVar: 480. 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: 67a.).  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: 5a6. 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: 4a5.  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: 15c. 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<4>

1.3.2.2 PEP 701: Formalização sintática de f-strings
....................................................

PEP 701(1) resolve algumas restrições no uso de *note f-strings: 65f.
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: 18e, 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: 67c. 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: 18e.:

     >>> 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<4>

1.3.2.3 PEP 684: Uma GIL por interpretador
..........................................

A PEP 684(1) introduz uma *note GIL: 46d. 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(): 67e. 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<4>

1.3.2.4 PEP 669: Monitoramento de baixo impacto para CPython
............................................................

A PEP 669(1) define uma nova *note API: e0. 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: e0. 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<4>

1.3.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:
25f. do código Python.  As classes que implementam o método *note
__buffer__(): 681. agora podem ser usadas como tipos de buffer.

O novo *note collections.abc.Buffer: 341. 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: 682. 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<3>,  Prev: PEP 688 Tornando o protocolo de buffer acessível no Python,  Up: Novas funcionalidades<4>

1.3.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: de. 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(): 468. 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<3>,  Prev: PEP 709 Fazendo inline de compreensão,  Up: Novas funcionalidades<4>

1.3.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: 44f. é 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: 44f. para
     instâncias.  Agora, se uma exceção *note NameError: 44f. 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: 18e. 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: 64f. 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<4>,  Up: O que há de novo no Python 3 12

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
dicas de tipo(1) e o módulo *note typing: 10a.

* 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.3.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.3.3.2 PEP 698: Substitui decorador para tipagem estática
..........................................................

Um novo decorador *note typing.override(): 671. foi adicionado ao módulo
*note typing: 10a.  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<3>,  Prev: Novos recursos relacionados a dicas de tipo,  Up: O que há de novo no Python 3 12

1.3.4 Outras mudanças na linguagem
----------------------------------

   * O analisador sintático agora exibe *note SyntaxError: 18e. 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:
     1ae, em vez de *note DeprecationWarning: 1a3.  Por exemplo,
     ‘re.compile("\d+\.\d+")’ agora emite um *note SyntaxWarning: 1ae.
     (‘"\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: 18e. acabará sendo levantada,
     em vez de *note SyntaxWarning: 1ae.  (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: 1ae, em vez de *note DeprecationWarning: 1a3.  Em
     uma versão futura do Python, eles serão eventualmente um *note
     SyntaxError: 18e.  (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: 243.  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: 4cc. e levanta uma outra exceção, essa exceção não
     é mais envolvida em uma *note ExceptionGroup: 4cc.  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(): 688. é 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: 3c0. e *note int: 19b.  (Contribuição de Serhiy
     Storchaka em gh-60203(10).)

   * *note memoryview: 165. 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: 689. 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(): 68a. 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(): 1c2. agora exibe *note SyntaxError: 18e. em vez
     de *note ValueError: 2ea. 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: e4. e *note
     shutil.unpack_archive(): 68b. 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: 68c. 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: 68d. 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: 4a8. por meio da nova
     variável de ambiente *note PYTHONPERFSUPPORT: 68e. e da opção de
     linha de comando *note -X perf: 16f, bem como das novas funções
     *note sys.activate_stack_trampoline(): 68f, *note
     sys.deactivate_stack_trampoline(): 690. e *note
     sys.is_stack_trampoline_active(): 691.  (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<3>,  Next: Módulos melhorados<3>,  Prev: Outras mudanças na linguagem<2>,  Up: O que há de novo no Python 3 12

1.3.5 Novos módulos
-------------------

   * Nenhum.


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 12

1.3.6 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: array<2>,  Next: asyncio<5>,  Up: Módulos melhorados<3>

1.3.6.1 array
.............

   * A classe *note array.array: 4b8. agora suporta subscrição,
     tornando-a um *note tipo genérico: 1a1.  (Contribuição de Jelle
     Zijlstra em gh-98658(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98658


File: python.info,  Node: asyncio<5>,  Next: calendar<2>,  Prev: array<2>,  Up: Módulos melhorados<3>

1.3.6.2 asyncio
...............

   * O desempenho da gravação em soquetes no *note asyncio: b. foi
     significativamente aprimorado.  O ‘asyncio’ agora evita cópias
     desnecessárias ao gravar em soquetes e usa o *note sendmsg(): 696.
     se a plataforma o suportar.  (Contribuição de Kumar Aditya em
     gh-91166(1).)

   * Adiciona as funções *note asyncio.eager_task_factory(): 697. e
     *note asyncio.create_eager_task_factory(): 698. 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: b. usa ‘asyncio.PidfdChildWatcher’ por
     padrão se *note os.pidfd_open(): 699. estiver disponível e
     funcional em vez de ‘asyncio.ThreadedChildWatcher’.  (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 (‘asyncio.PidfdChildWatcher’ se suportado e
     ‘asyncio.ThreadedChildWatcher’ 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(): 2f1.
     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(): 69a. para
     aceleração de 4x-6x.  (Contribuição de Itamar Oren e Pranav
     Thulasiram Bhat em gh-100344(8).)

   * *note asyncio.iscoroutine(): 69b. agora retorna ‘False’ para
     geradores, pois *note asyncio: b. não tem suporte a corrotinas
     legadas baseadas em geradores.  (Contribuição de Kumar Aditya em
     gh-102748(9).)

   * *note asyncio.wait(): 69c. e *note asyncio.as_completed(): 4c0.
     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<2>,  Next: csv,  Prev: asyncio<5>,  Up: Módulos melhorados<3>

1.3.6.3 calendar
................

   * Adiciona enums *note calendar.Month: 69e. e *note calendar.Day:
     69f. 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<3>,  Prev: calendar<2>,  Up: Módulos melhorados<3>

1.3.6.4 csv
...........

   * Adiciona os sinalizadores *note csv.QUOTE_NOTNULL: 6a1. e *note
     csv.QUOTE_STRINGS: 6a2. para fornecer um controle mais refinado de
     ‘None’ e strings vazias por objetos *note reader: 6a3. e *note
     writer: 6a4.


File: python.info,  Node: dis<3>,  Next: fractions<3>,  Prev: csv,  Up: Módulos melhorados<3>

1.3.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: 3c.  *note HAVE_ARGUMENT: 6a6. ainda é relevante para
     opcodes reais, mas não é útil para pseudo-instruções.  Use a nova
     coleção *note dis.hasarg: 598.  (Contribuição de Irit Katriel em
     gh-94216(1).)

   * Adiciona a coleção *note dis.hasexc: 6a7. 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<3>,  Next: importlib resources,  Prev: dis<3>,  Up: Módulos melhorados<3>

1.3.6.6 fractions
.................

   * Objetos do tipo *note fractions.Fraction: 212. 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<2>,  Prev: fractions<3>,  Up: Módulos melhorados<3>

1.3.6.7 importlib.resources
...........................

   * *note importlib.resources.as_file(): 6aa. 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():
     6ab. 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<2>,  Next: itertools<3>,  Prev: importlib resources,  Up: Módulos melhorados<3>

1.3.6.8 inspect
...............

   * Adiciona *note inspect.markcoroutinefunction(): 6ad. para marcar
     funções de sincronização que retornam uma *note corrotina: 6ae.
     para uso com *note inspect.iscoroutinefunction(): 30b.
     (Contribuição de Carlton Gibson em gh-99247(1).)

   * Adiciona *note inspect.getasyncgenstate(): 6af. e *note
     inspect.getasyncgenlocals(): 6b0. 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(): 6b1. 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<3>,  Next: math<3>,  Prev: inspect<2>,  Up: Módulos melhorados<3>

1.3.6.9 itertools
.................

   * Adiciona *note itertools.batched(): 50b. 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<3>,  Next: os<3>,  Prev: itertools<3>,  Up: Módulos melhorados<3>

1.3.6.10 math
.............

   * Adiciona *note math.sumprod(): 6b4. para calcular uma soma de
     produtos.  (Contribuição de Raymond Hettinger em gh-100485(1).)

   * Estende *note math.nextafter(): 6b5. 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<3>,  Next: os path<3>,  Prev: math<3>,  Up: Módulos melhorados<3>

1.3.6.11 os
...........

   * Adiciona *note os.PIDFD_NONBLOCK: 6b7. para abrir um descritor de
     arquivo para um processo com *note os.pidfd_open(): 699. em modo
     sem bloqueio.  (Contribuição de Kumar Aditya em gh-93312(1).)

   * *note os.DirEntry: 6b8. agora inclui um método *note
     os.DirEntry.is_junction(): 6b9. para verificar se a entrada é uma
     junção.  (Contribuição de Charles Machalow em gh-99547(2).)

   * Adiciona funções *note os.listdrives(): 6ba, *note
     os.listvolumes(): 6bb. e *note os.listmounts(): 6bc. no Windows
     para enumerar unidades, volumes e pontos de montagem.
     (Contribuição de Steve Dower em gh-102519(3).)

   * *note os.stat(): 26c. e *note os.lstat(): 6bd. 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<6>,  Prev: os<3>,  Up: Módulos melhorados<3>

1.3.6.12 os.path
................

   * Adiciona *note os.path.isjunction(): 6bf. para verificar se um
     determinado caminho é uma junção.  (Contribuição de Charles
     Machalow em gh-99547(1).)

   * Adiciona *note os.path.splitroot(): 6c0. 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<6>,  Next: platform<2>,  Prev: os path<3>,  Up: Módulos melhorados<3>

1.3.6.13 pathlib
................

   * Adiciona suporte para fazer subclasse de *note pathlib.PurePath:
     6c2. e *note pathlib.Path: 265, além de suas variantes específicas
     do Posix e do Windows.  As subclasses podem substituir o método
     *note pathlib.PurePath.with_segments(): 6c3. para passar
     informações entre instâncias de caminho.

   * Adiciona *note pathlib.Path.walk(): 6c4. para percorrer as árvores
     de diretórios e gerar todos os nomes de arquivos ou diretórios
     dentro delas, semelhante a *note os.walk(): 6c5.  (Contribuição de
     Stanislav Zmiev em gh-90385(1).)

   * Adiciona o parâmetro opcional 'walk_up' a *note
     pathlib.PurePath.relative_to(): 2fb. para permitir a inserção de
     entradas ‘..’ no resultado; este comportamento é mais consistente
     com *note os.path.relpath(): 6c6.  (Contribuição de Domenico Ragusa
     em gh-84538(2).)

   * Adiciona *note pathlib.Path.is_junction(): 6c7. como proxy para
     *note os.path.isjunction(): 6bf.  (Contribuição de Charles Machalow
     em gh-99547(3).)

   * Adiciona o parâmetro opcional 'case_sensitive' a *note
     pathlib.Path.glob(): 531, *note pathlib.Path.rglob(): 532. e *note
     pathlib.PurePath.match(): 6c8. 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<2>,  Next: pdb<4>,  Prev: pathlib<6>,  Up: Módulos melhorados<3>

1.3.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<4>,  Next: random<2>,  Prev: platform<2>,  Up: Módulos melhorados<3>

1.3.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<4>,  Up: Módulos melhorados<3>

1.3.6.16 random
...............

   * Adiciona *note random.binomialvariate(): 6cc.  (Contribuição de
     Raymond Hettinger em gh-81620(1).)

   * Adiciona um padrão de ‘lambd=1.0’ a *note random.expovariate():
     6cd.  (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<3>,  Prev: random<2>,  Up: Módulos melhorados<3>

1.3.6.17 shutil
...............

   * *note shutil.make_archive(): 6cf. 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(): 353. 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(): 6d0. 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<3>,  Next: statistics<2>,  Prev: shutil<2>,  Up: Módulos melhorados<3>

1.3.6.18 sqlite3
................

   * Adiciona uma *note interface de linha de comando: 668.
     (Contribuição de Erlend E. Aasland em gh-77617(1).)

   * Adiciona o atributo *note sqlite3.Connection.autocommit: 6d2. a
     *note sqlite3.Connection: 547. e o parâmetro 'autocommit' a *note
     sqlite3.connect(): 59f. para controlar a PEP 249(2) compatível com
     *note tratamento de transação: 6d3.  (Contribuição de Erlend E.
     Aasland em gh-83638(3).)

   * Adiciona o parâmetro somente-nomeado 'entrypoint' a *note
     sqlite3.Connection.load_extension(): 6d4, 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(): 6d5. e *note
     sqlite3.Connection.setconfig(): 6d6. a *note sqlite3.Connection:
     547. 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<3>,  Up: Módulos melhorados<3>

1.3.6.19 statistics
...................

   * Estende *note statistics.correlation(): 6d8. 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<3>

1.3.6.20 sys
............

   * Adiciona o espaço de nomes *note sys.monitoring: e0. para expor a
     nova API de monitoramento *note PEP 669: 665.  (Contribuição de
     Mark Shannon em gh-103082(1).)

   * Adiciona *note sys.activate_stack_trampoline(): 68f. e *note
     sys.deactivate_stack_trampoline(): 690. para ativar e desativar
     trampolins do perfilador de pilha e *note
     sys.is_stack_trampoline_active(): 691. 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: 6da. 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: 6db, *note
     sys.last_value: 6dc. e *note sys.last_traceback: 6dd.
     (Contribuição de Irit Katriel em gh-102778(3).)

   * *note sys._current_exceptions(): 6de. 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(): 6df. e *note
     sys.getrecursionlimit(): 6e0.  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<2>,  Prev: sys<3>,  Up: Módulos melhorados<3>

1.3.6.21 tempfile
.................

   * A função *note tempfile.NamedTemporaryFile: 6e2. tem um novo
     parâmetro opcional 'delete_on_close' (Contribuição de Evgeny Zorin
     em gh-58451(1).)

   * *note tempfile.mkdtemp(): 527. 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<2>,  Next: tkinter<3>,  Prev: tempfile<2>,  Up: Módulos melhorados<3>

1.3.6.22 threading
..................

   * Adiciona *note threading.settrace_all_threads(): 6e4. e *note
     threading.setprofile_all_threads(): 6e5. 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<3>,  Next: tokenize,  Prev: threading<2>,  Up: Módulos melhorados<3>

1.3.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<3>,  Up: Módulos melhorados<3>

1.3.6.24 tokenize
.................

   * O módulo *note tokenize: 101. 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: 6e8. para
     mais informações sobre as mudanças no módulo *note tokenize: 101.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0701/

   (2) https://github.com/python/cpython/issues/102856


File: python.info,  Node: types<2>,  Next: typing<4>,  Prev: tokenize,  Up: Módulos melhorados<3>

1.3.6.25 types
..............

   * Adiciona *note types.get_original_bases(): 6ea. para permitir uma
     introspecção adicional de *note Tipos genéricos definidos pelo
     usuário: 6eb. 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<4>,  Next: unicodedata<3>,  Prev: types<2>,  Up: Módulos melhorados<3>

1.3.6.26 typing
...............

   * As verificações de *note isinstance(): 2ac. com *note protocolos
     verificáveis em tempo de execução: 669. agora use *note
     inspect.getattr_static(): 6b1. em vez de *note hasattr(): 6ee. para
     verificar se existem atributos.  Isso significa que descritores e
     métodos *note __getattr__(): 6ef. 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(): 2ac. 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(): 2ac.
     com *note protocolos verificáveis em tempo de execução: 669. 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: 330. e *note
     typing.NamedTuple: 32f. 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(): 6f0.  (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<3>,  Next: unittest<3>,  Prev: typing<4>,  Up: Módulos melhorados<3>

1.3.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<3>,  Next: uuid<3>,  Prev: unicodedata<3>,  Up: Módulos melhorados<3>

1.3.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<3>,  Prev: unittest<3>,  Up: Módulos melhorados<3>

1.3.6.29 uuid
.............

   * Adiciona uma *note interface de linha de comando: 668.
     (Contribuição de Adam Chhina em gh-88597(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88597


File: python.info,  Node: Otimizações<3>,  Next: Alterações de bytecode do CPython<3>,  Prev: Módulos melhorados<3>,  Up: O que há de novo no Python 3 12

1.3.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(): 59c. e *note re.subn(): 59d. 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: 1c7. adiando a dispendiosa
     formatação de strings.  (Contribuição de Itamar Oren em
     gh-103793(6).)

   * As funções *note tokenize.tokenize(): 6f5. e *note
     tokenize.generate_tokens(): 6f6. 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: 101. .  (Contribuição de Marta Gómez Macías
     e Pablo Galindo em gh-102856(8).)

   * Acelera chamadas de métodos *note super(): 1a6. e carregamentos de
     atributos através da nova instrução *note LOAD_SUPER_ATTR: 6f7.
     (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<3>,  Next: Ferramentas e daemons,  Prev: Otimizações<3>,  Up: O que há de novo no Python 3 12

1.3.8 Alterações de bytecode do CPython
---------------------------------------

   * Remove a instrução ‘LOAD_METHOD’.  Ela foi mesclada em *note
     LOAD_ATTR: 6f9.  *note LOAD_ATTR: 6f9. 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: 6fa. e *note
     STORE_SLICE: 6fb.  (Contribuição de Mark Shannon em gh-94163(4).)

   * Adiciona as instruções *note CALL_INTRINSIC_1: 6fc.  (Contribuição
     de Mark Shannon em gh-99005(5).)

   * Adiciona a instrução *note CALL_INTRINSIC_2: 6fd.  (Contribuição de
     Irit Katriel em gh-101799(6).)

   * Adiciona a instrução *note CLEANUP_THROW: 6fe.  (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: 6ff. 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: 700.  (Contribuição de
     Dennis Sweeney em gh-93143(11).)

   * Adiciona os opcodes *note LOAD_FROM_DICT_OR_DEREF: 701, *note
     LOAD_FROM_DICT_OR_GLOBALS: 702. e *note LOAD_LOCALS: 703. como
     parte da implementação da PEP 695(12).  Remove o opcode
     ‘LOAD_CLASSDEREF’, que pode ser substituído por *note LOAD_LOCALS:
     703. mais *note LOAD_FROM_DICT_OR_DEREF: 701.  (Contribuição de
     Jelle Zijlstra em gh-103764(13).)

   * Adiciona a instrução *note LOAD_SUPER_ATTR: 6f7.  (Contribuição de
     Carl Meyer e Vladimir Matveev em gh-103497(14).)

   * Adiciona a instrução ‘RETURN_CONST’.  (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<2>,  Prev: Alterações de bytecode do CPython<3>,  Up: O que há de novo no Python 3 12

1.3.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<2>,  Next: Removidos<2>,  Prev: Ferramentas e daemons,  Up: O que há de novo no Python 3 12

1.3.10 Descontinuados
---------------------

   * *note argparse: 7.: 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: 9.: Os seguintes recursos *note ast: 9. foram
     descontinuados na documentação desde Python 3.8, agora fazem com
     que um *note DeprecationWarning: 1a3. 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’

     Usa *note ast.Constant: 2ed. em vez disso.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: b.:

        * As classes filhas dos observadores
          ‘asyncio.MultiLoopChildWatcher’, ‘asyncio.FastChildWatcher’,
          ‘asyncio.AbstractChildWatcher’ e ‘asyncio.SafeChildWatcher’
          foram descontinuadas e serão removidas no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(3).)

        * ‘asyncio.set_child_watcher()’, ‘asyncio.get_child_watcher()’,
          ‘asyncio.AbstractEventLoopPolicy.set_child_watcher()’ e
          ‘asyncio.AbstractEventLoopPolicy.get_child_watcher()’ 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(): 2f0. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a3.
          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: 15.: As constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 34b. e *note calendar.FEBRUARY: 34c.
     (Contribuição de Prince Roshan em gh-103636(6).)

   * *note collections.abc: 1f.: Descontinuou *note
     collections.abc.ByteString: 340.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 25f. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 341. 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: 192. e
     *note bytearray: 342.  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: 165, 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: 34.: *note utcnow(): 34e. e *note
     utcfromtimestamp(): 34f. da classe *note datetime.datetime: 4dc.
     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(): 706. e
     *note fromtimestamp(): 707. com o parâmetro 'tz' definido como
     *note datetime.UTC: 708.  (Contribuição de Paul Ganssle em
     gh-103857(9).)

   * *note email: 3f.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2f5.  (Contribuição de Alan Williams em
     gh-72346(10).)

   * *note importlib.abc: 7c.: 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 *note importlib.resources.abc: 80.:

        * *note importlib.resources.abc.Traversable: 2f8.

        * *note importlib.resources.abc.TraversableResources: 2f7.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(11).)

   * *note itertools: 85.: 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: 98.: No Python 3.14, o método de início
     padrão de *note multiprocessing: 98. 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(): 249. ou *note set_start_method(): 24a.
     para especificar explicitamente quando seu código 'requer'
     ‘'fork'’.  Veja *note contextos e métodos de início: 1d5.

   * *note pkgutil: ae.: ‘pkgutil.find_loader()’ e
     ‘pkgutil.get_loader()’ foram descontinuados e serão removidos no
     Python 3.14; use *note importlib.util.find_spec(): 5a8. em vez
     disso.  (Contribuição de Nikita Sobolev em gh-97850(14).)

   * *note pty: b6.: 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: 1a3.
     adequado em 3.12.  Remova-os em 3.14.  (Contribuição de Soumendra
     Ganguly e Gregory P. Smith em gh-85984(15).)

   * *note os: a5.:

        * Os campos ‘st_ctime’ retornados por *note os.stat(): 26c. e
          *note os.lstat(): 6bd. 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(): 4af. agora pode
          levantar uma exceção *note DeprecationWarning: 1a3. 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(): 4af. 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:
     98. ou *note concurrent.futures: 24, a correção é usar um método de
     início de *note multiprocessing: 98. diferente, como ‘"spawn"’ ou
     ‘"forkserver"’.

   * *note shutil: ca.: O argumento 'onerror' de *note shutil.rmtree():
     353. foi descontinuado; use 'onexc' em vez disso.  (Contribuição de
     Irit Katriel em gh-102828(18).)

   * *note sqlite3: d4.:

        * *note adaptadores e conversores padrão: 709. agora foram
          descontinuados.  Em vez disso, use *note Adapter and converter
          recipes: 70a. e adapte-os às suas necessidades.  (Contribuição
          de Erlend E. Aasland em gh-90016(19).)

        * Em *note execute(): 5a9, *note DeprecationWarning: 1a3. agora
          é emitida quando *note espaços reservados nomeados: 5ab. são
          usados junto com parâmetros fornecidos como *note sequência:
          70b. em vez de como *note dict: 183.  A partir do Python 3.14,
          usar espaços reservados nomeados com parâmetros fornecidos
          como uma sequência vai levantar uma *note ProgrammingError:
          303.  (Contribuição de Erlend E. Aasland em gh-101698(20).)

   * *note sys: df.: Os campos *note sys.last_type: 6db, *note
     sys.last_value: 6dc. e *note sys.last_traceback: 6dd. foram
     descontinuados.  Use *note sys.last_exc: 6da. em vez disso.
     (Contribuição de Irit Katriel em gh-102778(21).)

   * *note tarfile: e4.: 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: 68c. para
     detalhes.

   * *note typing: 10a.:

        * *note typing.Hashable: 70c. e *note typing.Sized: 70d,
          apelidos forem *note collections.abc.Hashable: 70e. e *note
          collections.abc.Sized: 70f. respectivamente, foram
          descontinuados.  (gh-94309(22).)

        * *note typing.ByteString: 343, descontinuado desde Python 3.9,
          agora faz com que um *note DeprecationWarning: 1a3. seja
          emitida quando é usado.  (Contribuição de Alex Waygood em
          gh-91896(23).)

   * *note xml.etree.ElementTree: 12b.: O módulo agora emite *note
     DeprecationWarning: 1a3. ao testar o valor verdade de um *note
     xml.etree.ElementTree.Element: 360.  Antes, a implementação Python
     emitia *note FutureWarning: 64d, 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(): 710, *note generator throw(): 711. e *note async
     generator throw(): 712. 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: 1a3. agora é levantada quando *note
     __package__: 321. em um módulo difere de *note __spec__.parent:
     322. (anteriormente era *note ImportWarning: 713.).  (Contribuição
     de Brett Cannon em gh-65961(26).)

   * Definir *note __package__: 321. ou *note __cached__: 31f. 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: 32e. em objetos de código foi
     descontinuado no Python 3.10 via PEP 626(29), mas só obteve um
     *note DeprecationWarning: 1a3. 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<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 em versões futuras: Remoção pendente em versões futuras<5>.

   ---------- 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<2>

1.3.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: 488. (gh-89519(11))

   * Métodos descontinuados de *note importlib.resources: 7f.:

        * ‘contents()’

        * ‘is_resource()’

        * ‘open_binary()’

        * ‘open_text()’

        * ‘path()’

        * ‘read_binary()’

        * ‘read_text()’

     Use *note importlib.resources.files(): 6ab. em vez disso.  Confira
     importlib-resources: Migrando do legado(12) , em inglês
     (gh-106531(13))

   ---------- 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

   (12) 
https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy

   (13) https://github.com/python/cpython/issues/106531


File: python.info,  Node: Remoção pendente no Python 3 14<3>,  Next: Remoção pendente no Python 3 15<5>,  Prev: Remoção pendente no Python 3 13,  Up: Descontinuados<2>

1.3.10.2 Remoção pendente no Python 3.14
........................................

   * *note argparse: 7.: 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: 9.: Os seguintes recursos foram descontinuados na
     documentação desde Python 3.8, agora fazem com que um *note
     DeprecationWarning: 1a3. 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’

     Usa *note ast.Constant: 2ed. em vez disso.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: b.:

        * As classes filhas dos observadores
          ‘asyncio.MultiLoopChildWatcher’, ‘asyncio.FastChildWatcher’,
          ‘asyncio.AbstractChildWatcher’ e ‘asyncio.SafeChildWatcher’
          foram descontinuadas e serão removidas no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(3).)

        * ‘asyncio.set_child_watcher()’, ‘asyncio.get_child_watcher()’,
          ‘asyncio.AbstractEventLoopPolicy.set_child_watcher()’ e
          ‘asyncio.AbstractEventLoopPolicy.get_child_watcher()’ 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(): 2f0. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a3.
          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 email: 3f.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2f5.  (Contribuição de Alan Williams em
     gh-72346(6).)

   * *note importlib.abc: 7c. descontinuou as classes:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes *note importlib.resources.abc: 80.:

        * *note importlib.resources.abc.Traversable: 2f8.

        * *note importlib.resources.abc.TraversableResources: 2f7.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(7).)

   * *note itertools: 85. 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(8).)

   * *note multiprocessing: 98.: 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(9)).
     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(): 249. ou *note
     set_start_method(): 24a. para especificar explicitamente quando seu
     código 'requer' ‘'fork'’.  Veja *note Contextos e métodos de
     inicialização: 1d5.

   * *note pathlib: a8.: *note is_relative_to(): 2fc. e *note
     relative_to(): 2fb.: passar argumentos adicionais foi
     descontinuado.

   * *note pkgutil: ae.: ‘pkgutil.find_loader()’ e
     ‘pkgutil.get_loader()’ agora levantam *note DeprecationWarning:
     1a3.; use *note importlib.util.find_spec(): 5a8.  (Contribuição de
     Nikita Sobolev em gh-97850(10).)

   * *note pty: b6.:

        * ‘master_open()’: use *note pty.openpty(): 2ff.

        * ‘slave_open()’: use *note pty.openpty(): 2ff.

   * *note sqlite3: d4.:

        * ‘version’ e ‘version_info’.

        * *note execute(): 5a9. e *note executemany(): 5aa. se *note
          espaços reservados nomeados: 5ab. forem usados e 'parameters'
          for uma sequência em vez de um *note dict: 183. .

   * *note urllib: 10e.: ‘urllib.parse.Quoter’ está obsoleto: não foi
     planejado para ser uma API pública.  (Contribuição de Gregory P.
     Smith em gh-88168(11).)

   ---------- 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/72346

   (7) https://github.com/python/cpython/issues/93963

   (8) https://github.com/python/cpython/issues/101588

   (9) https://github.com/python/cpython/issues/84559

   (10) https://github.com/python/cpython/issues/97850

   (11) 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<3>,  Up: Descontinuados<2>

1.3.10.3 Remoção pendente no Python 3.15
........................................

   * O sistema de importação:

        * A definição de *note __cached__: 31f. em um módulo enquanto
          falha na definição de *note __spec__.loader: 320. 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__: 321. em um módulo enquanto
          falha na definição de *note __spec__.parent: 322. 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: 2e.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 76.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 323. 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: 7b.:

        * Método ‘load_module()’: use ‘exec_module()’ em vez disso.

   * *note locale: 8a.:

        * A função *note getdefaultlocale(): 324. 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.  Use *note getlocale(): 325, *note setlocale(): 326. e
          *note getencoding(): 327.  (Contribuição de Hugo van Kemenade
          em gh-111187(4).)

   * *note pathlib: a8.:

        * *note PurePath.is_reserved(): 328. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 329. para
          detectar caminhos reservados no Windows.

   * *note platform: af.:

        * *note java_ver(): 32a. 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: e1.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          32b. foi descontinuado desde o Python 3.12.

   * *note threading: f3.:

        * *note RLock(): 32c. 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: 109.:

        * *note types.CodeType: 32d.: o acesso a *note co_lnotab: 32e.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a3. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 10a.:

        * A não-documentada sintaxe de argumento nomeado para criar
          classes *note NamedTuple: 32f. (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: 330.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():
          331. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 10a, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 119.:

        * Os métodos *note getmark(): 332, ‘setmark()’ e *note
          getmarkers(): 333. das classes *note Wave_read: 334. e *note
          Wave_write: 335. foram descontinuados desde o Python 3.13.

   * *note zipimport: 138.:

        * *note load_module(): 336. está descontinuado desde o Python
          3.10.  Em vez disso, use *note exec_module(): 337.
          (Contribuição de Jiahao Li em gh-125746(7).)

   ---------- 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

   (7) https://github.com/python/cpython/issues/125746


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: Descontinuados<2>

1.3.10.4 Remoção pendente no Python 3.16
........................................

   * O sistema de importação:

        * A definição de *note __loader__: 339. em um módulo enquanto
          falha na definição de *note __spec__.loader: 33a. 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: 8.:

        * O código de formato ‘'u'’ (‘wchar_t’) foi descontinuado na
          documentação desde o Python 3.3 e em tempo de execução desde o
          Python 3.13.  Use o código de formato ‘'w'’ (*note Py_UCS4:
          33b.) para caracteres Unicode.

   * *note asyncio: b.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 30b. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

        * O sistema de políticas *note asyncio: b. está descontinuado e
          será removido no Python 3.16.  Em particular, as seguintes
          classes e funções estão descontinuadas:

             * *note asyncio.AbstractEventLoopPolicy: 30c.

             * *note asyncio.DefaultEventLoopPolicy: 30d.

             * *note asyncio.WindowsSelectorEventLoopPolicy: 30e.

             * *note asyncio.WindowsProactorEventLoopPolicy: 30f.

             * *note asyncio.get_event_loop_policy(): 310.

             * *note asyncio.set_event_loop_policy(): 311.

          Os usuários devem usar *note asyncio.run(): 2f1. ou *note
          asyncio.Runner: 2f3. com 'loop_factory' para usar a
          implementação de loop de eventos desejada.

          por exemplo, para usar *note asyncio.SelectorEventLoop: 312.
          no Windows:

               import asyncio

               async def main():
                   ...

               asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

          (Contribuição de Kumar Aditya em gh-127949(2).)

   * *note builtins: 13.:

        * 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’).  Use ‘not x’ em
          vez disso 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 functools: 63.:

        * A chamada da implementação Python de *note functools.reduce():
          219. com 'function' ou 'sequence' como argumentos nomeados foi
          descontinuada desde o Python 3.14.

   * *note logging: 8b.:

     O suporte para manipuladores de registro personalizados com o
     argumento 'strm' foi descontinuado e está programado para ser
     removido no Python 3.16.  Em vez disso, defina manipuladores com o
     argumento 'stream'.  (Contribuição de Mariusz Felisiak em
     gh-115032(3).)

   * *note mimetypes: 93.:

        * Extensões válidas começam com um ‘.’ ou estão vazias para
          *note mimetypes.MimeTypes.add_type(): 317.  Extensões sem
          ponto estão descontinuadas e levantarão uma exceção *note
          ValueError: 2ea. no Python 3.16.  (Contribuição de Hugo van
          Kemenade em gh-75223(4).)

   * *note shutil: ca.:

        * 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: 243.

   * *note symtable: de.:

        * O método *note Class.get_methods: 31b. foi descontinuado desde
          o Python 3.14.

   * *note sys: df.:

        * A função *note _enablelegacywindowsfsencoding(): 33c. foi
          descontinuada desde o Python 3.13.  Use a variável de ambiente
          *note PYTHONLEGACYWINDOWSFSENCODING: 33d.

   * *note sysconfig: e1.:

        * A função ‘sysconfig.expand_makefile_vars()’ está descontinuada
          desde o Python 3.14.  Em vez disso, use o argumento ‘vars’ de
          *note sysconfig.get_paths(): 33e.

   * *note tarfile: e4.:

        * 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

   (2) https://github.com/python/cpython/issues/127949

   (3) https://github.com/python/cpython/issues/115032

   (4) https://github.com/python/cpython/issues/75223


File: python.info,  Node: Remoção pendente no Python 3 17<3>,  Next: Remoção pendente em versões futuras<5>,  Prev: Remoção pendente no Python 3 16<5>,  Up: Descontinuados<2>

1.3.10.5 Remoção pendente no Python 3.17
........................................

   * *note collections.abc: 1f.:

        - *note collections.abc.ByteString: 340. 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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: 10a.:

        - 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(): 2aa. e *note typing.get_args(): 2ab, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 343, 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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<5>,  Prev: Remoção pendente no Python 3 17<3>,  Up: Descontinuados<2>

1.3.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: 7.:

        * O aninhamento de grupos de argumentos e o aninhamento de
          grupos mutuamente exclusivos estão descontinuado.

        * A passagem do argumento nomeado não documentado 'prefix_chars'
          para *note add_argument_group(): 2e9. agora está
          descontinuado.

        * O conversor de tipo *note argparse.FileType: 30a. está
          descontinuado.

   * *note builtins: 13.:

        * 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: 346, *note
          else: 17c, *note for: 347, *note if: 181, *note in: 348. ,
          *note is: 349. e *note or: 34a.  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: 19b.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 196.: esses métodos serão necessários
          para retornar uma instância de *note float: 196.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 197.: esses métodos serão
          necessários para retornar uma instância de *note complex: 197.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 197. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 15.: As constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 34b. e *note calendar.FEBRUARY: 34c.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codecs: 1c.: use *note open(): 314. em vez de *note
     codecs.open(): 313.  (gh-133038(4))

   * *note codeobject.co_lnotab: 32e.: use o método *note
     codeobject.co_lines(): 34d.

   * *note datetime: 34.:

        * *note utcnow(): 34e.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 34f.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 67.: O valor de plural deve ser um número inteiro.

   * *note importlib: 7b.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          350. foi descontinuado: em vez disso, use o parâmetro
          'optimization'.

   * *note importlib.metadata: 7e.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 8b.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 351.

   * *note mailbox: 8f.: O uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a5.: Chamar *note os.register_at_fork(): 352. 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: be.: 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(5).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: ca.: O parâmetro 'onerror' de *note rmtree(): 353.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d5.

        * *note ssl.SSLContext: 354. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 354.: *note set_npn_protocols(): 355. 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: f3.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          356.

        * ‘threading.Event.isSet()’: use *note is_set(): 357.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 358.: use o atributo *note
          threading.Thread.daemon: 359.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 35a.: use o atributo *note
          threading.Thread.name: 29f.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 35b.

        * ‘threading.activeCount()’: use *note threading.active_count():
          35c.

   * *note typing.Text: 35d. (gh-92332(6)).

   * A classe interna ‘typing._UnionGenericAlias’ não é mais usada para
     implementar *note typing.Union: 2a7.  Para preservar a
     compatibilidade com usuários que utilizam esta classe privada, uma
     correção de compatibilidade será fornecida pelo menos até a versão
     3.17 do Python.  (Contribuição de Jelle Zijlstra em gh-105499(7).)

   * *note unittest.IsolatedAsyncioTestCase: 35e.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 110.: use *note
     urlparse(): 35f.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note wsgiref: 11e.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 12b.: testar o valor verdade de um
     *note Element: 360. 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 sys._clear_type_cache(): 291. está descontinuada: use *note
     sys._clear_internal_caches(): 361.

   ---------- 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/133038

   (5) https://github.com/python/cpython/issues/91760

   (6) https://github.com/python/cpython/issues/92332

   (7) https://github.com/python/cpython/issues/105499


File: python.info,  Node: Removidos<2>,  Next: Portando para Python 3 12,  Prev: Descontinuados<2>,  Up: O que há de novo no Python 3 12

1.3.11 Removidos
----------------

* Menu:

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


File: python.info,  Node: asynchat e asyncore,  Next: configparser<4>,  Up: Removidos<2>

1.3.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: b. 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<4>,  Next: distutils,  Prev: asynchat e asyncore,  Up: Removidos<2>

1.3.11.2 configparser
.....................

   * Vários nomes descontinuados no *note configparser: 26. na versão
     3.2 foram removidos por gh-89336(1):

        * *note configparser.ParsingError: 71e. não possui mais um
          argumento ou atributo ‘filename’.  Use o atributo e o
          argumento ‘source’.

        * *note configparser: 26. não possui mais uma classe
          ‘SafeConfigParser’.  Use o nome *note ConfigParser: 4d8. mais
          curto.

        * *note configparser.ConfigParser: 4d8. não possui mais um
          método ‘readfp’.  Use *note read_file(): 71f. em vez disso.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89336


File: python.info,  Node: distutils,  Next: ensurepip,  Prev: configparser<4>,  Up: Removidos<2>

1.3.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<2>

1.3.11.4 ensurepip
..................

   * Remove o wheel de setuptools incluído em *note ensurepip: 59. e
     para de instalar setuptools em ambientes criados por *note venv:
     117.

     ‘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<2>

1.3.11.5 enum
.............

   * Remove ‘EnumMeta.__getattr__’ de *note enum: 5a, 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<2>

1.3.11.6 ftplib
...............

   * Remove o atributo de classe ‘FTP_TLS.ssl_version’ do *note ftplib:
     62.: 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<2>

1.3.11.7 gzip
.............

   * Remove o atributo ‘filename’ do *note gzip.GzipFile: 650. de *note
     gzip: 6b, descontinuado desde Python 2.6, use o atributo *note
     name: 726. 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<2>

1.3.11.8 hashlib
................

   * Remove a implementação Python pura de *note hashlib.pbkdf2_hmac():
     728. de *note hashlib: 6c, 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(): 728.
     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<2>

1.3.11.9 importlib
..................

   * Foi concluída a remoção de muitos alvos de *note importlib: 7b. 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<4>,  Prev: importlib<2>,  Up: Removidos<2>

1.3.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(): 350.
                                                
                                                
          ‘imp.find_module()’                   *note importlib.util.find_spec(): 5a8.
                                                
                                                
          ‘imp.get_magic()’                     *note importlib.util.MAGIC_NUMBER: 72c.
                                                
                                                
          ‘imp.get_suffixes()’                  *note importlib.machinery.SOURCE_SUFFIXES: 72d, *note importlib.machinery.EXTENSION_SUFFIXES: 72e. e
                                                *note importlib.machinery.BYTECODE_SUFFIXES: 72f.
                                                
                                                
          ‘imp.get_tag()’                       *note sys.implementation.cache_tag: 730.
                                                
                                                
          ‘imp.load_module()’                   *note importlib.import_module(): 731.
                                                
                                                
          ‘imp.new_module(name)’                ‘types.ModuleType(name)’
                                                
                                                
          ‘imp.reload()’                        *note importlib.reload(): 732.
                                                
                                                
          ‘imp.source_from_cache()’             *note importlib.util.source_from_cache(): 733.
                                                
                                                
          ‘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<4>,  Next: locale<2>,  Prev: imp,  Up: Removidos<2>

1.3.11.11 io
............

   * Remove ‘io.OpenWrapper’ e ‘_pyio.OpenWrapper’ de *note io: 83,
     descontinuados em Python 3.10: basta usar *note open(): 314. em seu
     lugar.  A função *note open(): 314. (*note io.open(): 735.) é 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<4>,  Up: Removidos<2>

1.3.11.12 locale
................

   * Remove a função ‘locale.format()’ de *note locale: 8a,
     descontinuada no Python 3.7: use *note locale.format_string(): 737.
     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<4>,  Prev: locale<2>,  Up: Removidos<2>

1.3.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: b.  (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<4>,  Next: ssl<3>,  Prev: smtpd,  Up: Removidos<2>

1.3.11.14 sqlite3
.................

   * Os seguintes recursos não documentados do *note sqlite3: d4,
     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: 169. 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<3>,  Next: unittest<4>,  Prev: sqlite3<4>,  Up: Removidos<2>

1.3.11.15 ssl
.............

   * Remove a função ‘ssl.RAND_pseudo_bytes()’ do *note ssl: d5,
     descontinuada no Python 3.6: use *note os.urandom(): 73b. ou *note
     ssl.RAND_bytes(): 73c. 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: 354. e chame seu
     método *note ssl.SSLContext.wrap_socket: 73d.  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<4>,  Next: webbrowser<3>,  Prev: ssl<3>,  Up: Removidos<2>

1.3.11.16 unittest
..................

   * Remove recursos do *note unittest: 10c. há muito tempo
     descontinuados:

        * Vários apelidos de método de *note TestCase: 2b2.:

          Apelido descontinuado            Método                              Descontinuado em
                                                                               
          -----------------------------------------------------------------------------------------
                                                                               
          ‘failUnless’                     *note assertTrue(): 73f.            3.1
                                                                               
                                                                               
          ‘failIf’                         *note assertFalse(): 740.           3.1
                                                                               
                                                                               
          ‘failUnlessEqual’                *note assertEqual(): 741.           3.1
                                                                               
                                                                               
          ‘failIfEqual’                    *note assertNotEqual(): 742.        3.1
                                                                               
                                                                               
          ‘failUnlessAlmostEqual’          *note assertAlmostEqual(): 743.     3.1
                                                                               
                                                                               
          ‘failIfAlmostEqual’              *note assertNotAlmostEqual(): 744.  3.1
                                                                               
                                                                               
          ‘failUnlessRaises’               *note assertRaises(): 745.          3.1
                                                                               
                                                                               
          ‘assert_’                        *note assertTrue(): 73f.            3.2
                                                                               
                                                                               
          ‘assertEquals’                   *note assertEqual(): 741.           3.2
                                                                               
                                                                               
          ‘assertNotEquals’                *note assertNotEqual(): 742.        3.2
                                                                               
                                                                               
          ‘assertAlmostEquals’             *note assertAlmostEqual(): 743.     3.2
                                                                               
                                                                               
          ‘assertNotAlmostEquals’          *note assertNotAlmostEqual(): 744.  3.2
                                                                               
                                                                               
          ‘assertRegexpMatches’            *note assertRegex(): 746.           3.2
                                                                               
                                                                               
          ‘assertRaisesRegexp’             *note assertRaisesRegex(): 747.     3.2
                                                                               
                                                                               
          ‘assertNotRegexpMatches’         *note assertNotRegex(): 748.        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: 2b2. (descontinuado no Python 3.2).

        * Parâmetro não documentado 'use_load_tests' de *note
          TestLoader.loadTestsFromModule: 58d. (descontinuado e ignorado
          desde Python 3.5).

        * Um apelido da classe *note TextTestResult: 749.:
          ‘_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<3>,  Next: xml etree ElementTree,  Prev: unittest<4>,  Up: Removidos<2>

1.3.11.17 webbrowser
....................

   * Remove o suporte para navegadores descontinuados de *note
     webbrowser: 11b.  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<3>,  Up: Removidos<2>

1.3.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(): 74c. em seu lugar.  A implementação C de *note
     xml.etree.ElementTree: 12b. 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<2>

1.3.11.19 zipimport
...................

   * Remove os métodos ‘find_loader()’ e ‘find_module()’ do *note
     zipimport: 138, 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<2>

1.3.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: 62, *note imaplib: 78, *note poplib: b1. e *note smtplib:
     cf, e dos módulos 'key_file', 'cert_file' e 'check_hostname' do
     módulo *note http.client: 73, todos descontinuados desde Python
     3.6.  Use o parâmetro 'context' ('ssl_context' em *note imaplib:
     78.).  (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: 2e.  (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<2>,  Up: O que há de novo no Python 3 12

1.3.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<3>.


File: python.info,  Node: Alterações na API Python<3>,  Up: Portando para Python 3 12

1.3.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: 198.
     Além disso, a exceção levantada para valores não inteiros como
     ‘randrange(10.5)’ ou ‘randrange('10')’ foi alterada de *note
     ValueError: 2ea. para *note TypeError: 198.  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: 1bd. 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): 751.) para *note
     tratador de erros e codificação do sistema de arquivos: 752.  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: b. aiosmtpd(3).

   * *note shlex.split(): 753.: Passar ‘None’ para o argumento 's' agora
     levanta uma exceção, ao invés de ler *note sys.stdin: 754.  O
     recurso foi descontinuado no Python 3.9.  (Contribuição de Victor
     Stinner em gh-94352(4).)

   * O módulo *note os: a5. não aceita mais caminhos bytes ou similar,
     como os tipos *note bytearray: 342. e *note memoryview: 165.:
     apenas o tipo exato *note bytes: 192. é aceito para strings de
     bytes.  (Contribuição de Victor Stinner em gh-98393(5).)

   * *note syslog.openlog(): 755. e *note syslog.closelog(): 756. agora
     falham se usadas em subinterpretadores.  *note syslog.syslog():
     757. ainda pode ser usada em subinterpretadores, mas agora somente
     se *note syslog.openlog(): 755. 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: e2. é 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(): 758. 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(): 6de. 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: e4. ou *note
     shutil.unpack_archive(): 68b, passe o argumento 'filter' para
     limitar recursos que podem surpreender ou ser perigosos.  Veja
     *note Filtros de extração: 68c. para detalhes.

   * A saída das funções *note tokenize.tokenize(): 6f5. e *note
     tokenize.generate_tokens(): 6f6. 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: 759. como fazem strings multilinhas
          incompletas.

        * Algum código Python incompleto ou inválido agora levanta *note
          tokenize.TokenError: 759. 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: 75a.

   * O módulo *note threading: f3. 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<6>,  Prev: Portando para Python 3 12,  Up: O que há de novo no Python 3 12

1.3.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: 21. (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<6>,  Prev: Mudanças na construção<2>,  Up: O que há de novo no Python 3 12

1.3.14 Alterações na API C
--------------------------

* Menu:

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


File: python.info,  Node: Novas funcionalidades<5>,  Next: Portando para Python 3 12<2>,  Up: Alterações na API C<6>

1.3.14.1 Novas funcionalidades
..............................

   * PEP 697(1): Introduz o *note tier de API C Instável: 75e, 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: 75f. pode ser zero ou negativo
          para especificar a herança ou extensão do tamanho da classe
          base.

        - *note PyObject_GetTypeData(): 760. e *note
          PyType_GetTypeDataSize(): 761. adicionadas para permitir
          acesso a dados de instância específicos da subclasse.

        - *note Py_TPFLAGS_ITEMS_AT_END: 762. e *note
          PyObject_GetItemData(): 763. adicionadas para permitir a
          extensão segura de certos tipos de tamanho variável, incluindo
          *note PyType_Type: 764.

        - *note Py_RELATIVE_OFFSET: 765. adicionada para permitir a
          definição de *note membros: 766. em termos de uma estrutura
          específica da subclasse.

     (Contribuição de Petr Viktorin em gh-103509(5).)

   * Adiciona à *note API C limitada: 62b. a nova função *note
     PyType_FromMetaclass(): 767, que generaliza a *note
     PyType_FromModuleAndSpec(): 768. 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: 769. foi adicionada à *note API Limitada:
     76a.:

        * *note Py_TPFLAGS_HAVE_VECTORCALL: 76b.

        * *note PyVectorcall_NARGS(): 76c.

        * *note PyVectorcall_Call(): 76d.

        * *note vectorcallfunc: 76e.

     O sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL: 76b. agora é
     removido de uma classe quando o método *note __call__(): 76f. 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: 3cc.).  Tipos mutáveis que não
     substituem *note tp_call: 770. agora herdam o sinalizador
     ‘Py_TPFLAGS_HAVE_VECTORCALL’.  (Contribuição de Petr Viktorin em
     gh-93274(7).)

     Os sinalizadores *note Py_TPFLAGS_MANAGED_DICT: 603. e *note
     Py_TPFLAGS_MANAGED_WEAKREF: 771. foram adicionados.  Isso permite
     que as classes de extensões ofereçam suporte a objetos *note
     __dict__: 772. e weakrefs com menos trabalho, usando menos memória
     e com acesso mais rápido.

   * API para realizar chamadas usando *note o protocolo vectorcall:
     769. foi adicionada à *note API Limitada: 76a.:

        * *note PyObject_Vectorcall(): 773.

        * *note PyObject_VectorcallMethod(): 774.

        * *note PY_VECTORCALL_ARGUMENTS_OFFSET: 775.

     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: 76a.  (Contribuição de Wenzel Jakob em gh-98586(8).)

   * Adiciona duas novas funções públicas, *note
     PyEval_SetProfileAllThreads(): 776. e *note
     PyEval_SetTraceAllThreads(): 658, 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(): 777. à API
     C que define o campo vectorcall de um determinado *note
     PyFunctionObject: 778.  (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(): 3cd, *note PyDict_Watch(): 779. 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(): 77a. e *note
     PyType_Watch(): 77b. 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(): 77c. e *note
     PyCode_ClearWatcher(): 77d. 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(): 77e. e *note
     PyFrame_GetVarString(): 77f. para obter uma variável de quadro por
     seu nome.  (Contribuição de Victor Stinner em gh-91248(14).)

   * Adiciona *note PyErr_GetRaisedException(): 426. e *note
     PyErr_SetRaisedException(): 429. 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(): 425. e *note PyErr_Restore(): 428.  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(): 780. e *note
     PyException_SetArgs(): 781. como funções de conveniência para
     recuperar e modificar o *note args: 782. passado para o construtor
     da exceção.  (Contribuição de Mark Shannon em gh-101578(17).)

   * Adiciona *note PyErr_DisplayException(): 432, 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(): 67e. e *note PyInterpreterConfig:
     783, que podem ser usadas para criar subinterpretadores com suas
     próprias GILs.  (Veja *note PEP 684; Uma GIL por interpretador:
     664. 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(): 784. e
     *note Py_DECREF(): 785. 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<3>,  Prev: Novas funcionalidades<5>,  Up: Alterações na API C<6>

1.3.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():
     3be. 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: 787. 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__(): 788. (usando *note PyObject_CallMethod(): 634,
     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(): 61f. e *note PyUnicode_FromFormatV(): 789.
     (Contribuição de Serhiy Storchaka em gh-98836(1).)

   * Um caractere de formato não reconhecido em *note
     PyUnicode_FromFormat(): 61f. e *note PyUnicode_FromFormatV(): 789.
     agora define um *note SystemError: 78a.  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(): 61f. e *note PyUnicode_FromFormatV(): 789.
     (Contribuição de Philip Georgi em gh-95504(3).)

   * Classes de extensão que desejam adicionar um *note __dict__: 772.
     ou slot de referência fraca devem usar *note
     Py_TPFLAGS_MANAGED_DICT: 603. e *note Py_TPFLAGS_MANAGED_WEAKREF:
     771. 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: 603. 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(): 78b, como antes.

   * A função *note PyUnicode_FSDecoder(): 78c. não aceita mais caminhos
     bytes ou similar, como os tipos *note bytearray: 342. e *note
     memoryview: 165.: apenas o tipo exato *note bytes: 192. é aceito
     para strings de bytes.  (Contribuição de Victor Stinner em
     gh-98393(5).)

   * As macros *note Py_CLEAR: 78d, *note Py_SETREF: 78e. e *note
     Py_XSETREF: 78f. 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(): 790, *note
     PyErr_SetString(): 791. 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(): 792.

        * *note PyType_FromSpecWithBases(): 793.

        * *note PyType_FromModuleAndSpec(): 768.

     A criação de classes cujas substituições de metaclasse *note
     tp_new: 794. 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(): 767. (adicionada em
     Python 3.12) já não permite a criação de classes cuja metaclasse
     substitui ‘tp_new’ (*note __new__(): 795. 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: 796.

             - Se a metaclasse não precisa ser instanciada do Python,
               defina seu ‘tp_new’ como ‘NULL’ usando o sinalizador
               *note Py_TPFLAGS_DISALLOW_INSTANTIATION: 797.  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: 798. 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(): 179. do Python.

   * *note PyOS_InputHook: 799. e *note PyOS_ReadlineFunctionPointer:
     79a. não são mais chamados em *note subinterpretadores: 163.  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: 39b. teve seus componentes internos alterados
     para melhor desempenho.  Embora os internos de *note PyLongObject:
     39b. 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: 39b.s que cabe em uma única palavra de máquina:

        * *note PyUnstable_Long_IsCompact(): 79b.

        * *note PyUnstable_Long_CompactValue(): 79c.

   * Alocadores personalizados, definidos via *note
     PyMem_SetAllocator(): 79d, 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<3>,  Next: Removidos<3>,  Prev: Portando para Python 3 12<2>,  Up: Alterações na API C<6>

1.3.14.3 Descontinuados
.......................

   * Em conformidade com a PEP 699(1), o campo ‘ma_version_tag’ em *note
     PyDictObject: 643. 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: 3f5.: use *note PyConfig.parser_debug:
          3f6.

        * *note Py_VerboseFlag: 3f7.: use *note PyConfig.verbose: 3f8.

        * *note Py_QuietFlag: 3f9.: use *note PyConfig.quiet: 3fa.

        * *note Py_InteractiveFlag: 3fb.: use *note
          PyConfig.interactive: 3fc.

        * *note Py_InspectFlag: 3fd.: use *note PyConfig.inspect: 3fe.

        * *note Py_OptimizeFlag: 3ff.: use *note
          PyConfig.optimization_level: 400.

        * *note Py_NoSiteFlag: 401.: use *note PyConfig.site_import:
          402.

        * *note Py_BytesWarningFlag: 403.: use *note
          PyConfig.bytes_warning: 404.

        * *note Py_FrozenFlag: 405.: use *note
          PyConfig.pathconfig_warnings: 406.

        * *note Py_IgnoreEnvironmentFlag: 407.: use *note
          PyConfig.use_environment: 408.

        * *note Py_DontWriteBytecodeFlag: 409.: use *note
          PyConfig.write_bytecode: 40a.

        * *note Py_NoUserSiteDirectory: 40b.: use *note
          PyConfig.user_site_directory: 40c.

        * *note Py_UnbufferedStdioFlag: 40d.: use *note
          PyConfig.buffered_stdio: 40e.

        * *note Py_HashRandomizationFlag: 40f.: use *note
          PyConfig.use_hash_seed: 410. and *note PyConfig.hash_seed:
          411.

        * *note Py_IsolatedFlag: 412.: use *note PyConfig.isolated: 413.

        * *note Py_LegacyWindowsFSEncodingFlag: 414.: use *note
          PyPreConfig.legacy_windows_fs_encoding: 415.

        * *note Py_LegacyWindowsStdioFlag: 416.: use *note
          PyConfig.legacy_windows_stdio: 417.

        * ‘Py_FileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 418.

        * ‘Py_HasFileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 418.

        * ‘Py_FileSystemDefaultEncodeErrors’: use *note
          PyConfig.filesystem_errors: 419.

        * ‘Py_UTF8Mode’: use *note PyPreConfig.utf8_mode: 41a. (see
          *note Py_PreInitialize(): 41b.)

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4.  (Contribuição de Victor Stinner em
     gh-77782(3).)

   * A criação de *note tipos imutáveis: 3cc. 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: 766, *note PyMember_GetOne(): 79f. e *note
          PyMember_SetOne(): 7a0.

        - Macros de tipo como *note Py_T_INT: 7a1, *note Py_T_DOUBLE:
          7a2, etc.  (anteriormente ‘T_INT’, ‘T_DOUBLE’, etc.)

        - Os sinalizadores *note Py_READONLY: 7a3. (anteriormente
          ‘READONLY’) e *note Py_AUDIT_READ: 7a4. (anteriormente todas
          em maiúsculas)

     Vários itens não são expostos em ‘Python.h’:

        - *note T_OBJECT: 7a5. (use *note Py_T_OBJECT_EX: 7a6.)

        - *note T_NONE: 7a7. (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: 7a4.

        - 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(): 425. e *note PyErr_Restore(): 428. foram
     descontinuado.  Use *note PyErr_GetRaisedException(): 426. e *note
     PyErr_SetRaisedException(): 429. em vez disso.  (Contribuição de
     Mark Shannon em gh-101578(6).)

   * ‘PyErr_Display()’ foi descontinuada.  Use *note
     PyErr_DisplayException(): 432. 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(): 792, *note
     PyType_FromSpecWithBases(): 793. ou *note
     PyType_FromModuleAndSpec(): 768. para criar uma classe cujas
     substituições de metaclasse *note tp_new: 794. 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<6>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<6>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<6>.

   ---------- 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<6>,  Up: Descontinuados<3>

1.3.14.4 Remoção pendente no Python 3.14
........................................

   * O campo ‘ma_version_tag’ em *note PyDictObject: 643. para módulos
     de extensão ( PEP 699(1); gh-101193(2)).

   * A criação de *note tipos imutáveis: 3cc. com bases mutáveis
     (gh-95388(3)).

   ---------- 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 no Python 3 16<6>,  Prev: Remoção pendente no Python 3 14<4>,  Up: Descontinuados<3>

1.3.14.5 Remoção pendente no Python 3.15
........................................

   * The *note PyImport_ImportModuleNoBlock(): 3d8.: Use *note
     PyImport_ImportModule(): 3d9.

   * *note PyWeakref_GetObject(): 3da. e *note PyWeakref_GET_OBJECT():
     3db.: Use *note PyWeakref_GetRef(): 3dc.  O projeto
     pythoncapi-compat(1) pode ser usado para usar *note
     PyWeakref_GetRef(): 3dc. no Python 3.12 e versões anteriores.

   * O tipo *note Py_UNICODE: 3dd. e a macro ‘Py_UNICODE_WIDE’: Use
     ‘wchar_t’.

   * ‘PyUnicode_AsDecodedObject()’: Use *note PyCodec_Decode(): 3de.

   * ‘PyUnicode_AsDecodedUnicode()’: Use *note PyCodec_Decode(): 3de.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note str: 169, tal como *note bytes: 192.

   * ‘PyUnicode_AsEncodedObject()’: Use *note PyCodec_Encode(): 3df.

   * ‘PyUnicode_AsEncodedUnicode()’: Use *note PyCodec_Encode(): 3df.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note bytes: 192, tal com *note str: 169.

   * Funções de inicialização do Python, descontinuadas no Python 3.9:

        * *note Py_GetPath(): 3e0.: Use *note
          PyConfig_Get("module_search_paths"): 379. (*note sys.path:
          3e1.).

        * *note Py_GetPrefix(): 3e2.: Use *note
          PyConfig_Get("base_prefix"): 379. (*note sys.base_prefix:
          3e3.).  Use *note PyConfig_Get("prefix"): 379. (*note
          sys.prefix: 3e4.) se *note ambientes virtuais: 3e5. precisam
          ser tratados.

        * *note Py_GetExecPrefix(): 3e6.: Use *note
          PyConfig_Get("base_exec_prefix"): 379. (*note
          sys.base_exec_prefix: 3e7.).  Use *note
          PyConfig_Get("exec_prefix"): 379. (*note sys.exec_prefix:
          3e8.) se *note ambientes virtuais: 3e5. precisam ser tratados.

        * *note Py_GetProgramFullPath(): 3e9.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetProgramName(): 3eb.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetPythonHome(): 3ec.: Use *note
          PyConfig_Get("home"): 379. ou a variável de ambiente *note
          PYTHONHOME: 3ed.

     O projeto pythoncapi-compat(2) pode ser usado para obter *note
     PyConfig_Get(): 379. no Python 3.13 e versões anteriores.

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: Defina *note PyConfig.argv: 3ee.

        * ‘PySys_SetArgv()’: Defina *note PyConfig.argv: 3ee.

        * ‘Py_SetProgramName()’: Defina *note PyConfig.program_name:
          3ef.

        * ‘Py_SetPythonHome()’: Defina *note PyConfig.home: 3f0.

        * *note PySys_ResetWarnOptions(): 3f1.: Apague *note
          sys.warnoptions: 3f2. e ‘warnings.filters’.

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3f5.: Use *note PyConfig.parser_debug:
          3f6. ou *note PyConfig_Get("parser_debug"): 379.

        * *note Py_VerboseFlag: 3f7.: Use *note PyConfig.verbose: 3f8.
          ou *note PyConfig_Get("verbose"): 379.

        * *note Py_QuietFlag: 3f9.: Use *note PyConfig.quiet: 3fa. ou
          *note PyConfig_Get("quiet"): 379.

        * *note Py_InteractiveFlag: 3fb.: Use *note
          PyConfig.interactive: 3fc. ou *note
          PyConfig_Get("interactive"): 379.

        * *note Py_InspectFlag: 3fd.: Use *note PyConfig.inspect: 3fe.
          ou *note PyConfig_Get("inspect"): 379.

        * *note Py_OptimizeFlag: 3ff.: Use *note
          PyConfig.optimization_level: 400. ou *note
          PyConfig_Get("optimization_level"): 379.

        * *note Py_NoSiteFlag: 401.: Use *note PyConfig.site_import:
          402. ou *note PyConfig_Get("site_import"): 379.

        * *note Py_BytesWarningFlag: 403.: Use *note
          PyConfig.bytes_warning: 404. ou *note
          PyConfig_Get("bytes_warning"): 379.

        * *note Py_FrozenFlag: 405.: Use *note
          PyConfig.pathconfig_warnings: 406. ou *note
          PyConfig_Get("pathconfig_warnings"): 379.

        * *note Py_IgnoreEnvironmentFlag: 407.: Use *note
          PyConfig.use_environment: 408. ou *note
          PyConfig_Get("use_environment"): 379.

        * *note Py_DontWriteBytecodeFlag: 409.: Use *note
          PyConfig.write_bytecode: 40a. ou *note
          PyConfig_Get("write_bytecode"): 379.

        * *note Py_NoUserSiteDirectory: 40b.: Use *note
          PyConfig.user_site_directory: 40c. ou *note
          PyConfig_Get("user_site_directory"): 379.

        * *note Py_UnbufferedStdioFlag: 40d.: Use *note
          PyConfig.buffered_stdio: 40e. ou *note
          PyConfig_Get("buffered_stdio"): 379.

        * *note Py_HashRandomizationFlag: 40f.: Use *note
          PyConfig.use_hash_seed: 410. e *note PyConfig.hash_seed: 411.
          ou *note PyConfig_Get("hash_seed"): 379.

        * *note Py_IsolatedFlag: 412.: Use *note PyConfig.isolated: 413.
          ou *note PyConfig_Get("isolated"): 379.

        * *note Py_LegacyWindowsFSEncodingFlag: 414.: Use *note
          PyPreConfig.legacy_windows_fs_encoding: 415. ou *note
          PyConfig_Get("legacy_windows_fs_encoding"): 379.

        * *note Py_LegacyWindowsStdioFlag: 416.: Use *note
          PyConfig.legacy_windows_stdio: 417. ou *note
          PyConfig_Get("legacy_windows_stdio"): 379.

        * ‘Py_FileSystemDefaultEncoding’,
          ‘Py_HasFileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 418. ou *note
          PyConfig_Get("filesystem_encoding"): 379.

        * ‘Py_FileSystemDefaultEncodeErrors’: Use *note
          PyConfig.filesystem_errors: 419. ou *note
          PyConfig_Get("filesystem_errors"): 379.

        * ‘Py_UTF8Mode’: Use *note PyPreConfig.utf8_mode: 41a. ou *note
          PyConfig_Get("utf8_mode"): 379.  (veja *note
          Py_PreInitialize(): 41b.)

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4. para definir essas opções.  Ou *note
     PyConfig_Get(): 379. pode ser usado para obter essas opções em
     tempo de execução.

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: Remoção pendente no Python 3 16<6>,  Next: Remoção pendente em versões futuras<6>,  Prev: Remoção pendente no Python 3 15<6>,  Up: Descontinuados<3>

1.3.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<6>,  Prev: Remoção pendente no Python 3 16<6>,  Up: Descontinuados<3>

1.3.14.7 Remoção pendente em versões futuras
............................................

As APIs a seguir foram descontinuado e serão removidas, embora
atualmente não haja uma data agendada para sua remoção.

   * *note Py_TPFLAGS_HAVE_FINALIZE: 424.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 425.: Use *note PyErr_GetRaisedException():
     426.

   * *note PyErr_NormalizeException(): 427.: Use *note
     PyErr_GetRaisedException(): 426.

   * *note PyErr_Restore(): 428.: Use *note PyErr_SetRaisedException():
     429.

   * *note PyModule_GetFilename(): 42a.: Use *note
     PyModule_GetFilenameObject(): 42b.

   * *note PyOS_AfterFork(): 42c.: Use *note PyOS_AfterFork_Child():
     42d.

   * *note PySlice_GetIndicesEx(): 42e.: Use *note PySlice_Unpack():
     42f. e *note PySlice_AdjustIndices(): 430.

   * *note PyUnicode_READY(): 431.: Desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: Use *note PyErr_DisplayException(): 432.

   * ‘_PyErr_ChainExceptions()’: Use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     433.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 434.: Use *note
          PyThread_tss_alloc(): 435.

        * *note PyThread_delete_key(): 436.: Use *note
          PyThread_tss_free(): 437.

        * *note PyThread_set_key_value(): 438.: Use *note
          PyThread_tss_set(): 439.

        * *note PyThread_get_key_value(): 43a.: Use *note
          PyThread_tss_get(): 43b.

        * *note PyThread_delete_key_value(): 43c.: Use *note
          PyThread_tss_delete(): 43d.

        * *note PyThread_ReInitTLS(): 43e.: Desnecessário desde o Python
          3.7.


File: python.info,  Node: Removidos<3>,  Prev: Descontinuados<3>,  Up: Alterações na API C<6>

1.3.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.4 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: 142. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<4>.
* Novas funcionalidades: Novas funcionalidades<6>.
* 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<4>.
* Módulos melhorados: Módulos melhorados<4>.
* Otimizações: Otimizações<4>.
* CPython mais rápido::
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<4>.
* Descontinuados: Descontinuados<4>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12.
* Removidos: Removidos<4>.
* 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<7>.
* 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<4>,  Next: Novas funcionalidades<6>,  Up: O que há de novo no Python 3 11

1.4.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: 7b2. para detalhes.

Novos recursos de sintaxe:

   * *note PEP 654; Grupos de exceção e except*: 7b3.

Novos recursos embutidos:

   * *note PEP 678; Exceções podem ser enriquecidas com notas: 7b4.

Novos módulos da biblioteca padrão:

   * PEP 680(1): *note tomllib: 102. — Suporte para analisar TOML(2) na
     Biblioteca Padrão

Melhorias no interpretador:

   * *note PEP 657; Localizações de erros refinadas em tracebacks: 7b5.

   * Nova opção de linha de comando *note -P: 7b6. e variável de
     ambiente *note PYTHONSAFEPATH: 7b7. para *note desabilitar
     automaticamente a anteposição automática de caminhos potencialmente
     inseguros: 7b8. para *note sys.path: 3e1.

Novos recursos de tipagem:

   * *note PEP 646; Genéricos variádicos: 7b9.

   * *note PEP 655; Marcando itens TypedDict individuais como
     obrigatórios ou não obrigatórios: 7ba.

   * *note PEP 673; Tipo Self: 7bb.

   * *note PEP 675; Tipo de string literal arbitrário: 7bc.

   * *note PEP 681; Transformações de classe de dados: 7bd.

Descontinuações, remoções e restrições importantes:

   * PEP 594(3): *note Muitos módulos legados de biblioteca padrão foram
     descontinuados: 7be. e serão removidos no Python 3.13

   * PEP 624(4): *note APIs do codificador Py_UNICODE foram removidas:
     7bf.

   * PEP 670(5): *note Macros convertidos em funções estáticas em linha:
     7c0.

   ---------- 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<6>,  Next: Novos recursos relacionados a dicas de tipo<2>,  Prev: Resumo – Destaques da versão<4>,  Up: O que há de novo no Python 3 11

1.4.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<6>

1.4.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: 183. 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: 7c4. *note bytecode: 4a4. com
a localização do código-fonte.  Essas informações podem ser recuperadas
usando:

   - O método *note codeobject.co_positions(): 7c5. no Python.

   - A função *note PyCode_Addr2Location(): 7c6. 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: 7c7, 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: 16f. ou a variável de ambiente *note
     PYTHONNODEBUGRANGES: 7c8.

   ---------- 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<6>

1.4.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: 4cc. e *note BaseExceptionGroup:
55f. tornam possível agrupar exceções e criá-las juntas, e a nova
sintaxe *note except*: 1ac. generaliza *note except: 1ab. 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<6>

1.4.2.3 PEP 678: Exceções podem ser enriquecidas com notas
..........................................................

O método *note add_note(): 7cb. é adicionado a *note BaseException: 7cc.
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<6>

1.4.2.4 Melhorias no inicializador ‘py.exe’ do Windows
......................................................

A cópia do *note Gerenciador de instalação do Python: 7cf. 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<6>,  Up: O que há de novo no Python 3 11

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: 10a.

* 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.4.3.1 PEP 646: Genéricos variádicos
.....................................

PEP 484(1) introduzido anteriormente *note TypeVar: 480, permitindo a
criação de genéricos parametrizados com um único tipo.  PEP 646(2)
adiciona *note TypeVarTuple: 482, permitindo a parametrização com um
número 'arbitrário' de tipos.  Em outras palavras, uma *note
TypeVarTuple: 482. é 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.4.3.2 PEP 655: Marcando itens ‘TypedDict’ individuais como obrigatórios ou não obrigatórios
.............................................................................................

*note Required: 7d5. e *note NotRequired: 7d6. fornecem uma maneira
direta de marcar se itens individuais em um *note TypedDict: 330. 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.4.3.3 PEP 673: Tipo ‘Self’
............................

A nova anotação *note Self: 7d8. 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: 480.
especificada na PEP 484(1), mas é mais concisa e fácil de seguir.

Casos de uso comuns incluem construtores alternativos fornecidos como
*note classmethod: 488.s e métodos *note __enter__(): 7d9. 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: 7d8. 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.4.3.4 PEP 675: Tipo de string literal arbitrário
..................................................

A nova anotação *note LiteralString: 7db. 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.4.3.5 PEP 681: Transformações de classe de dados
..................................................

*note dataclass_transform: 6f0. 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:
4db.

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.4.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: 45a.) 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.4.4 Outras mudanças na linguagem
----------------------------------

   * Expressões de desempacotamento com asterisco agora podem ser usadas
     em instruções *note for: 347.  (Veja bpo-46725(1) para mais
     detalhes.)

   * *note Compreensões: 7e1. assíncronas agora são permitidas dentro de
     compreensões em *note funções assíncronas: 7e2.  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: 198. agora é levantada em vez de uma
     *note AttributeError: 5e4. em instruções *note with: 186. e *note
     contextlib.ExitStack.enter_context(): 7e3. para objetos que não
     oferecem suporte ao protocolo de *note gerenciador de contexto:
     1e0, e em instruções *note async with: 185. e *note
     contextlib.AsyncExitStack.enter_async_context(): 7e4. para objetos
     que não oferecem suporte ao protocolo de *note gerenciador de
     contexto assíncrono: 7e5.  (Contribuição de Serhiy Storchaka em
     bpo-12022(3) e bpo-44471(4).)

   * Adicionado *note object.__getstate__(): 7e6, que fornece a
     implementação padrão do método ‘__getstate__()’.  Fazer *note copy:
     29. e *note pickle: ab. de instâncias de subclasses de tipos
     embutidos *note bytearray: 342, *note set: 184, *note frozenset:
     7e7, *note collections.OrderedDict: 7e8, *note collections.deque:
     7e9, *note weakref.WeakSet: 7ea. e *note datetime.tzinfo: 7eb.
     agora copia e serializa com pickle atributos de instância
     implementados como *note slots: 7ec.  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__(): 7e6. 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: 7b6. e uma
     variável de ambiente *note PYTHONSAFEPATH: 7b7, que desativa o
     prefixo automático para *note sys.path: 3e1. do diretório do script
     ao executar um script ou o diretório atual ao usar *note -c: 1a8. e
     *note -m: 23b.  Isso garante que apenas os módulos stdlib e
     instalados sejam escolhidos por *note import: 7ed, 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: 4f3. 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: 3e1.  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: 7ee. e *note sys.path_importer_cache: 7ef. quando
     há uma mistura de chaves *note str: 169. e *note bytes: 192.
     (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<4>,  Prev: Outras mudanças na linguagem<3>,  Up: O que há de novo no Python 3 11

1.4.5 Outras mudanças na implementação do CPython
-------------------------------------------------

   * Os métodos especiais *note __complex__(): 7f2. para *note complex:
     197. e *note __bytes__(): 7f3. para *note bytes: 192. são
     implementados para oferecer suporte aos protocolos *note
     typing.SupportsComplex: 7f4. e *note typing.SupportsBytes: 7f5.
     (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: 169, *note
     bytes: 192. e alguns outros tipos agora o usam como o algoritmo
     padrão para *note hash(): 7f6.  *note Arquivos .pyc baseados em
     hash: 7f7. 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:
     7f8. 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: 1ab. 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: 7f9, ‘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: 7fa. agora deve ser
     definido como ‘1’ para a inicialização usar *note
     PyConfig.module_search_paths: 637. para inicializar *note sys.path:
     3e1.  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: 7fb. agora cabe em 50 linhas/80
     colunas.  Informações sobre as *note variáveis de ambiente do
     Python: 7fc. e a opção *note -X: 16f. agora estão disponíveis
     usando os respectivos sinalizadores *note -help-env: 7fd. e *note
     -help-xoptions: 7fe, e com o novo *note -help-all: 7ff.
     (Contribuição de Éric Araujo em bpo-46142(7).)

   * Converter entre *note int: 19b. e *note str: 169. 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:
     2ea. 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: df.  Veja a documentação de *note limitação de
     comprimento de conversão de string inteira: 800.  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<4>,  Next: Módulos melhorados<4>,  Prev: Outras mudanças na implementação do CPython,  Up: O que há de novo no Python 3 11

1.4.6 Novos módulos
-------------------

   * *note tomllib: 102.: Para analisar TOML(1). Veja PEP 680(2) para
     mais detalhes.  (Contribuição de Taneli Hukkinen em bpo-40059(3).)

   * *note wsgiref.types: 122.: 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<4>,  Next: Otimizações<4>,  Prev: Novos módulos<4>,  Up: O que há de novo no Python 3 11

1.4.7 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: asyncio<6>,  Next: contextlib,  Up: Módulos melhorados<4>

1.4.7.1 asyncio
...............

   * Adicionada a classe *note TaskGroup: 4cb, um *note assíncrono
     gerenciador de contexto: 807. contendo um grupo de tarefas que irá
     esperar por todas elas ao sair.  Para código novo, é recomendado
     usar *note create_task(): 1c9. e *note gather(): 808. diretamente.
     (Contribuição de Yury Selivanov e outros em gh-90908(1).)

   * Adicionado *note timeout(): 809, 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(): 80a.
     diretamente.  (Contribuição de Andrew Svetlov em gh-90927(2).)

   * Adicionada a classe *note Runner: 2f3, que expõe o maquinário usado
     por *note run(): 2f1.  (Contribuição de Andrew Svetlov em
     gh-91218(3).)

   * Adicionada a classe *note Barrier: 80b. às primitivas de
     sincronização na biblioteca asyncio, e a exceção *note
     BrokenBarrierError: 80c. 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(): 80d. para que vários erros de
     conexão possam ser levantados como *note ExceptionGroup: 4cc.

   * Adicionado o método *note asyncio.StreamWriter.start_tls(): 80e.
     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(): 80f, *note sock_recvfrom(): 810. e
     *note sock_recvfrom_into(): 811.  Eles têm implementações em *note
     SelectorEventLoop: 312. e *note ProactorEventLoop: 812.
     (Contribuição de Alex Grönholm em bpo-46805(6).)

   * Adicionados os métodos *note cancelling(): 4cf. e *note uncancel():
     4d0. a *note Task: 1c7.  Estes são destinados principalmente para
     uso interno, notadamente por *note TaskGroup: 4cb.

   ---------- 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<6>,  Up: Módulos melhorados<4>

1.4.7.2 contextlib
..................

   * Adicionado gerenciador de contexto não paralelo seguro *note
     chdir(): 815. para alterar o diretório de trabalho atual e depois
     restaurá-lo na saída.  Wrapper simples em torno de *note chdir():
     816.  (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<2>,  Prev: contextlib,  Up: Módulos melhorados<4>

1.4.7.3 dataclasses
...................

   * Alterar a verificação de mutabilidade padrão do campo, permitindo
     apenas padrões que são *note hasheáveis: 819. em vez de qualquer
     objeto que não seja uma instância de *note dict: 183, *note list:
     24c. ou *note set: 184.  (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<2>,  Next: enum<3>,  Prev: dataclasses,  Up: Módulos melhorados<4>

1.4.7.4 datetime
................

   * Adicione *note datetime.UTC: 708, um apelido de conveniência para
     *note datetime.timezone.utc: 81c.  (Contribuição de Kabir Kwatra em
     gh-91973(1).)

   * *note datetime.date.fromisoformat(): 81d, *note
     datetime.time.fromisoformat(): 81e. e *note
     datetime.datetime.fromisoformat(): 81f. 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<2>,  Up: Módulos melhorados<4>

1.4.7.5 enum
............

   * Renomeado ‘EnumMeta’ para *note EnumType: 4f1. (‘EnumMeta’ mantido
     como um apelido).

   * Adicionada *note StrEnum: 822, com membros que podem ser usados
     como (e devem ser) strings.

   * Adicionada *note ReprEnum: 823, que apenas modifica o *note
     __repr__(): 824. dos membros enquanto retorna seus valores literais
     (ao invés de nomes) para *note __str__(): 825. e *note
     __format__(): 826. (usado por *note str(): 169, *note format():
     199. e *note f-string: 65f.s).

   * Alterado *note Enum.__format__(): 827. (o padrão para *note
     format(): 199, *note str.format(): 828. e *note f-string: 65f.s)
     para sempre produz o mesmo resultado que *note Enum.__str__():
     829.: para enums herdados de *note ReprEnum: 823. 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: 82a. e *note FlagBoundary: 82b. com suas opções, para
     controlar como lidar com valores de sinalizadores fora do
     intervalo.

   * Adicionado o decorador de enum *note verify(): 82c. e o enum *note
     EnumCheck: 82d. com suas opções, para verificar classes de enum em
     relação a várias restrições específicas.

   * Adicionados os decoradores *note member(): 82e. e *note
     nonmember(): 82f, para garantir que o objeto decorado seja/não seja
     convertido em um membro enum.

   * Adicionado o decorador *note property(): 830, que funciona como
     *note property(): 4ad. exceto para enums.  Use isso em vez de *note
     types.DynamicClassAttribute(): 831.

   * Adicionado o decorador enum *note global_enum(): 832, que ajusta
     *note __repr__(): 824. e *note __str__(): 825. para mostrar valores
     como membros de seu módulo em vez da classe enum.  Por exemplo,
     ‘'re.ASCII'’ para o membro *note ASCII: 833. de *note re.RegexFlag:
     834. em vez de ‘'RegexFlag.ASCII'’.

   * Aprimorada *note Flag: 82a. para ter suporte a *note len(): 835,
     iteração e *note in: 348./*note not in: 836. em seus membros.  Por
     exemplo, o seguinte agora funciona: ‘len(AFlag(3)) == 2 and
     list(AFlag(3)) == (AFlag.ONE, AFlag.TWO)’

   * Alterada *note Enum: 837. e *note Flag: 82a. para que os membros
     sejam agora definidos antes de *note __init_subclass__(): 838. ser
     chamado; *note dir(): 839. agora inclui métodos, etc., de tipos de
     dados mistos.

   * Alterada *note Flag: 82a. 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<4>,  Prev: enum<3>,  Up: Módulos melhorados<4>

1.4.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<4>,  Next: functools<2>,  Prev: fcntl,  Up: Módulos melhorados<4>

1.4.7.7 fractions
.................

   * Suporte à inicialização no estilo PEP 515(1) de *note Fraction:
     212. da string.  (Contribuição de Sergey B Kirpichev em
     bpo-44258(2).)

   * *note Fraction: 212. 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<2>,  Next: gzip<2>,  Prev: fractions<4>,  Up: Módulos melhorados<4>

1.4.7.8 functools
.................

   * *note functools.singledispatch(): 840. agora oferece suporte a
     *note types.UnionType: 2a6. e *note typing.Union: 2a7. 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<2>,  Up: Módulos melhorados<4>

1.4.7.9 gzip
............

   * A função *note gzip.compress(): 843. 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(): 844.
     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: 6b.  Agora, ao usar *note
     compress(): 843. 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<4>

1.4.7.10 hashlib
................

   * *note hashlib.blake2b(): 847. e *note hashlib.blake2s(): 848. 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: 6c. 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(): 849, 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<3>,  Prev: hashlib<2>,  Up: Módulos melhorados<4>

1.4.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<3>,  Next: locale<3>,  Prev: IDLE e idlelib,  Up: Módulos melhorados<4>

1.4.7.12 inspect
................

   * Adiciona *note getmembers_static(): 84e. 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(): 84f. para verificar se o tipo de
     um objeto é um *note MethodWrapperType: 850.  (Contribuição de
     Hakan Çelik em bpo-29418(2).)

   * Altera as funções relacionadas a quadros no módulo *note inspect:
     82. para retornar novas instâncias de classe *note FrameInfo: 851.
     e *note Traceback: 852. (compatíveis com as anteriores interfaces
     do tipo *note tupla nomeada: 853.) 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(): 854.

        * *note inspect.getouterframes(): 855.

        * *note inspect.getinnerframes(): 856,

        * *note inspect.stack(): 857.

        * *note inspect.trace(): 858.

     (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<3>,  Up: Módulos melhorados<4>

1.4.7.13 locale
...............

   * Adiciona *note locale.getencoding(): 327. para obter a codificação
     local atual.  É semelhante a ‘locale.getpreferredencoding(False)’,
     mas ignora o *note Modo UTF-8 do Python: 85b.


File: python.info,  Node: logging,  Next: math<4>,  Prev: locale<3>,  Up: Módulos melhorados<4>

1.4.7.14 logging
................

   * Adicionada *note getLevelNamesMapping(): 85e. para retornar um
     mapeamento de nomes de nível de registro (por exemplo,
     ‘'CRITICAL'’) para os valores de seus *note Níveis de Logging: 85f.
     correspondentes (por exemplo, ‘50’, por padrão ).  (Contribuição de
     Andrei Kulakovin em gh-88024(1).)

   * Adicionado um método *note createSocket(): 860. a *note
     SysLogHandler: 861, para corresponder a *note
     SocketHandler.createSocket(): 862. .  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<4>,  Next: operator,  Prev: logging,  Up: Módulos melhorados<4>

1.4.7.15 math
.............

   * Adiciona *note math.exp2(): 865.: retorna 2 elevado à potência de
     x.  (Contribuição de Gideon Mitchell em bpo-45917(1).)

   * Adiciona *note math.cbrt(): 866.: 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(): 867.
     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: 2ea.  (Contribuição de Mark Dickinson em bpo-44339(3).)

   * O valor *note math.nan: 868. 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: operator,  Next: os<4>,  Prev: math<4>,  Up: Módulos melhorados<4>

1.4.7.16 operator
.................

   * 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<4>,  Next: pathlib<7>,  Prev: operator,  Up: Módulos melhorados<4>

1.4.7.17 os
...........

   * No Windows, *note os.urandom(): 73b. 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<7>,  Next: re<4>,  Prev: os<4>,  Up: Módulos melhorados<4>

1.4.7.18 pathlib
................

   * *note glob(): 531. e *note rglob(): 532. retornam apenas diretórios
     se 'pattern' terminar com um separador de componentes de nome de
     caminho: *note sep: 86f. ou *note altsep: 870.  (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<4>,  Next: shutil<3>,  Prev: pathlib<7>,  Up: Módulos melhorados<4>

1.4.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<2>,  Prev: re<4>,  Up: Módulos melhorados<4>

1.4.7.20 shutil
...............

   * Adicione o parâmetro opcional 'dir_fd' em *note shutil.rmtree():
     353.  (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<2>,  Next: sqlite3<5>,  Prev: shutil<3>,  Up: Módulos melhorados<4>

1.4.7.21 socket
...............

   * Adiciona suporte ao soquete CAN para NetBSD. (Contribuição de
     Thomas Klausner em bpo-30512(1).)

   * *note create_connection(): 877. tem a opção de levantar, em caso de
     falha na conexão, um *note ExceptionGroup: 4cc. 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<5>,  Next: string,  Prev: socket<2>,  Up: Módulos melhorados<4>

1.4.7.22 sqlite3
................

   * Agora você pode desabilitar o autorizador passando *note None: 87a.
     para *note set_authorizer(): 5a2.  (Contribuição de Erlend E.
     Aasland em bpo-44491(1).)

   * O nome do agrupamento *note create_collation(): 87b. agora pode
     conter qualquer caractere Unicode.  Nomes de agrupamento com
     caracteres inválidos agora levantar *note UnicodeEncodeError: 87c.
     em vez de *note sqlite3.ProgrammingError: 303.  (Contribuição de
     Erlend E. Aasland em bpo-44688(2).)

   * As exceções *note sqlite3: d4. agora incluem o código de erro
     estendido SQLite como *note sqlite_errorcode: 87d. e o nome do erro
     SQLite como *note sqlite_errorname: 87e.  (Contribuição de Aviv
     Palivoda, Daniel Shahaf e Erlend E. Aasland em bpo-16379(3) e
     bpo-24139(4).)

   * Adiciona *note setlimit(): 87f. e *note getlimit(): 880. a *note
     sqlite3.Connection: 547. para definir e obter limites SQLite por
     base de conexão.  (Contribuição de Erlend E. Aasland em
     bpo-45243(5).)

   * *note sqlite3: d4. agora define *note sqlite3.threadsafety: 881.
     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: d4. 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: 501. 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: 882.
     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(): 883. e *note deserialize(): 884. a
     *note sqlite3.Connection: 547. para serializar e desserializar
     bancos de dados.  (Contribuição de Erlend E. Aasland em
     bpo-41930(9).)

   * Adiciona *note create_window_function(): 885. a *note
     sqlite3.Connection: 547. para criar funções de janela agregadas.
     (Contribuição de Erlend E. Aasland em bpo-34916(10).)

   * Adiciona *note blobopen(): 886. a *note sqlite3.Connection: 547.
     *note sqlite3.Blob: 887. 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<5>,  Up: Módulos melhorados<4>

1.4.7.23 string
...............

   * Adiciona *note get_identifiers(): 88a. e *note is_valid(): 88b. a
     *note string.Template: 88c, 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<2>,  Prev: string,  Up: Módulos melhorados<4>

1.4.7.24 sys
............

   * *note sys.exc_info(): 88f. 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(): 890. 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: 891.
     (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<2>,  Next: tempfile<3>,  Prev: sys<4>,  Up: Módulos melhorados<4>

1.4.7.25 sysconfig
..................

   * Três novos *note esquemas de instalação: 446. ('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(): 894.  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: 117.  (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<3>,  Prev: sysconfig<2>,  Up: Módulos melhorados<4>

1.4.7.26 tempfile
.................

   * Objetos *note SpooledTemporaryFile: 897. agora implementam
     totalmente os métodos de *note io.BufferedIOBase: 898. ou *note
     io.TextIOBase: 899. (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<3>,  Next: time<2>,  Prev: tempfile<3>,  Up: Módulos melhorados<4>

1.4.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(): 89c. agora usa o relógio monotônico
     (*note time.CLOCK_MONOTONIC: 89d.) para o tempo limite, em vez de
     usar o relógio do sistema (*note time.CLOCK_REALTIME: 89e.), 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<4>,  Prev: threading<3>,  Up: Módulos melhorados<4>

1.4.7.28 time
.............

   * No Unix, *note time.sleep(): 8a1. 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(): 8a1. 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<4>,  Next: traceback<2>,  Prev: time<2>,  Up: Módulos melhorados<4>

1.4.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: 8a4.  (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<5>,  Prev: tkinter<4>,  Up: Módulos melhorados<4>

1.4.7.30 traceback
..................

   * Adiciona *note traceback.StackSummary.format_frame_summary(): 8a7.
     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(): 8a8, que
     imprime a instância formatada *note TracebackException: 55c. 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<5>,  Next: unicodedata<4>,  Prev: traceback<2>,  Up: Módulos melhorados<4>

1.4.7.31 typing
...............

Para alterações principais, veja *note Novos recursos relacionados a
dicas de tipo: 7d0.

   * Adiciona *note typing.assert_never(): 8ab. e *note typing.Never:
     8ac.  *note typing.assert_never(): 8ab. é ú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: 8ad.  (Contribuição de Jelle Zijlstra em
     gh-90633(1).)

   * Adiciona *note typing.reveal_type(): 8ae.  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(): 8af.  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: 330. agora podem ser genéricos.
     (Contribuição de Samodya Abeysiriwardane em gh-89026(4).)

   * Os tipos *note NamedTuple: 32f. agora podem ser genéricos.
     (Contribuição de Serhiy Storchaka em bpo-43923(5).)

   * Permite criar subclasse de *note typing.Any: 8b0.  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(): 8b1. 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(): 8b2. pode ser usada para
     introspecção das sobrecargas de uma função.  *note
     typing.clear_overloads(): 8b3. 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__(): 8b4. das subclasses *note Protocol: 564.
     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(): 8b5. agora tem suporte à avaliação
     de strings como referências diretas em *note apelidos genéricos da
     PEP 585: 8b6.  (Contribuição de Niklas Rosenstein em gh-85542(12).)

   * *note typing.get_type_hints(): 8b5. não adiciona mais *note
     Optional: 8b7. aos parâmetros com ‘None’ como padrão.
     (Contribuição de Nikita Sobolev em gh-90353(13).)

   * *note typing.get_type_hints(): 8b5. agora tem suporte à avaliação
     de anotações *note ClassVar: 566. de strings simples.
     (Contribuição de Gregory Beauregard em gh-90711(14).)

   * *note typing.no_type_check(): 8b8. 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<4>,  Next: unittest<5>,  Prev: typing<5>,  Up: Módulos melhorados<4>

1.4.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<5>,  Next: venv<2>,  Prev: unicodedata<4>,  Up: Módulos melhorados<4>

1.4.7.33 unittest
.................

   * Adicionados os métodos *note enterContext(): 8bd. e *note
     enterClassContext(): 8be. da classe *note TestCase: 2b2, método
     *note enterAsyncContext(): 8bf. da classe *note
     IsolatedAsyncioTestCase: 35e. e a função *note
     unittest.enterModuleContext(): 8c0.  (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: warnings<2>,  Prev: unittest<5>,  Up: Módulos melhorados<4>

1.4.7.34 venv
.............

   * Quando novos ambientes virtuais Python são criados, o *note esquema
     de instalação do sysconfig: 446. 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: warnings<2>,  Next: zipfile<2>,  Prev: venv<2>,  Up: Módulos melhorados<4>

1.4.7.35 warnings
.................

   * *note warnings.catch_warnings(): 179. agora aceita argumentos para
     *note warnings.simplefilter(): 8c5, 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<2>,  Prev: warnings<2>,  Up: Módulos melhorados<4>

1.4.7.36 zipfile
................

   * Adicionado suporte para especificar a codificação de nome de membro
     para leitura de metadados em um diretório *note ZipFile: 8c8. e
     cabeçalhos de arquivo.  (Contribuição de Stephen J. Turnbull e
     Serhiy Storchaka em bpo-28080(1).)

   * Adicionado *note ZipFile.mkdir(): 8c9. para criar novos diretórios
     dentro de arquivos ZIP. (Contribuição de Sam Ezeh em gh-49083(2).)

   * Adicionado *note stem: 8ca, *note suffix: 8cb. e *note suffixes:
     8cc. a *note zipfile.Path: 8cd.  (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<4>,  Next: CPython mais rápido,  Prev: Módulos melhorados<4>,  Up: O que há de novo no Python 3 11

1.4.8 Otimizações
-----------------

Esta seção cobre otimizações específicas independentes do projeto *note
CPython mais rápido: 7b2, que é abordado em sua própria seção.

   * O compilador agora otimiza a *note formatação simples de % no
     estilo printf: 8d0. 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: 65f. 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: 19b. por um valor menor que ‘2**30’.
     (Contribuição de Gregory P. Smith e Tim Peters em gh-90564(2).)

   * *note sum(): 68a. 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(): 8d1. em ≈15% e *note compreensões
     de lista: 8d2. 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: 183.  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: 8d3. 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(): 8d4. e *note perm(): 8d5. de *note math:
     92. 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(): 8d6, *note variance(): 8d7. e *note
     stdev(): 8d8. do *note statistics: d7. agora consomem iteradores em
     uma passagem em vez de convertê-los em uma *note list: 24c.
     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(): 8d9. 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<4>,  Prev: Otimizações<4>,  Up: O que há de novo no Python 3 11

1.4.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: 8db. e *note Tempo de execução mais rápido:
8dc.  Otimizações que não são abordadas neste projeto estão listadas em
*note Otimizações: 8cf.

* 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.4.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.4.9.2 Importações congeladas/objetos de código estático
.........................................................

O Python armazena o *note bytecode: 4a4. no diretório *note __pycache__:
8e0. 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:
7c7. (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.4.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.4.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: 8e4. agora são criados apenas quando
solicitados por depuradores ou por funções de introspecção do Python,
como *note sys._getframe(): 8e5. e *note inspect.currentframe(): 8e6.
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.4.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(): 6df.).  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.4.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: 4a4.

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: 19b, *note float: 196. e                                     Na, Brandt Bucher,
                    ‘x - x’                  *note str: 169. usam caminhos rápidos personalizados para                           Dennis Sweeney
                                             seus tipos subjacentes.                                                             
                    ‘x * x’                  
                    
                                                                                                                                 
Subscrição          ‘a[i]’                   Subscrever tipos contêineres como *note list: 24c,          10-25%                  Irit Katriel, Mark
                                             *note tuple: 608. e *note dict: 183. indexam diretamente                            Shannon
                                             as estruturas de dados subjacentes.                                                 
                                             
                                             Subscrever *note __getitem__(): 581. personalizado também
                                             é inserido em linha de forma similar a
                                             *note Chamadas de função Python em linha: 8e7.
                                             
                                                                                                                                 
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(): 835. e *note str: 169. 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: 24c. e *note tuple: 608.  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.4.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: 8ed. 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:
     be. 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.4.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.4.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.4.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.4.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.4.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.4.9.13 Sobre
..............

O Faster CPython explora otimizações para o *note CPython: 8fa.  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<4>,  Next: Descontinuados<4>,  Prev: CPython mais rápido,  Up: O que há de novo no Python 3 11

1.4.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: 8fd.  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<4>

1.4.10.1 Novos opcodes
......................

   * ‘ASYNC_GEN_WRAP’, *note RETURN_GENERATOR: 900. e *note SEND: 901,
     usados em geradores e corrotinas.

   * *note COPY_FREE_VARS: 902, que evita precisar de código especial no
     lado do chamado para fechamentos.

   * *note JUMP_BACKWARD_NO_INTERRUPT: 903, para usasr em certos loops
     nos quais o tratamento de interrupções é indesejável.

   * *note MAKE_CELL: 904, para criar *note Objeto célula: 905.

   * *note CHECK_EG_MATCH: 906. e ‘PREP_RERAISE_STAR’, para manipular
     *note novos grupos de exceção e except*: 7b3, adicionados na PEP
     654(1).

   * *note PUSH_EXC_INFO: 907, para uso em manipuladores de exceção.

   * *note RESUME: 5b2, 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<4>

1.4.10.2 Opcodes substituídos
.............................

Opcode(s) substituído(s)                 Novo(s) opcode(s)                        Notas
                                                                                  
--------------------------------------------------------------------------------------------------------------------------------
                                                                                  
     ‘BINARY_*’                          *note BINARY_OP: 363.                    Substituiu todos os opcodes numéricos
     ‘INPLACE_*’                                                                  binários/no local por um único opcode
                                                                                  
                                                                                  
     ‘CALL_FUNCTION’                          *note CALL: 90a.                    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: 90b.               atendimentos
                                                                                  
                                                                                  
     ‘DUP_TOP’                                *note COPY: 90c.                    Instruções de manipulação de pilha
     ‘DUP_TOP_TWO’                            *note SWAP: 90d.                    
     ‘ROT_TWO’                           
     ‘ROT_THREE’
     ‘ROT_FOUR’
     ‘ROT_N’

     ‘JUMP_IF_NOT_EXC_MATCH’                  *note CHECK_EXC_MATCH: 90e.         Agora efetua verificações, mas não pula
                                                                                  
                                                                                  
     ‘JUMP_ABSOLUTE’                          *note JUMP_BACKWARD: 90f.           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’                        ‘BEFORE_WITH’                            Configuração de bloco *note with: 186.
     ‘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<4>

1.4.10.3 Opcodes alterados/removidos
....................................

   * Alterados *note MATCH_CLASS: 914. e *note MATCH_KEYS: 915. 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<4>,  Next: Pendente remoção no Python 3 12,  Prev: Alterações de bytecode do CPython<4>,  Up: O que há de novo no Python 3 11

1.4.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: 919.
* Menu:

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


File: python.info,  Node: Linguagem/Embutidos,  Next: Módulos,  Up: Descontinuados<4>

1.4.11.1 Linguagem/Embutidos
............................

   * O encadeamento de descritores *note classmethod: 488. (introduzido
     em bpo-19072(1)) agora foi descontinuado.  Ele não pode mais ser
     usado para agrupar outros descritores como *note property: 4ad.  O
     design principal desse recurso era falho e causava vários problemas
     posteriores.  Para “passar” um *note classmethod: 488, 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: 1a3.  Em uma versão futura do Python, eles
     levantarão um *note SyntaxWarning: 1ae. e eventualmente um *note
     SyntaxError: 18e.  (Contribuição de Serhiy Storchaka em
     gh-81548(3).)

   * A delegação de *note int(): 19b. para *note __trunc__(): 19c. agora
     foi descontinuada.  Chamar ‘int(a)’ quando ‘type(a)’ implementa
     ‘__trunc__()’, mas não *note __int__(): 19d. ou *note __index__():
     19e, agora levanta uma exceção *note DeprecationWarning: 1a3.
     (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<4>

1.4.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<4>

1.4.11.3 Biblioteca Padrão
..........................

   * Os itens a seguir foram descontinuados em *note configparser: 26.
     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: 26.  Agora ela emite um *note DeprecationWarning:
     1a3. e será removida no Python 3.13.  Use *note
     configparser.BasicInterpolation: 921. ou *note
     configparser.ExtendedInterpolation: 922.  (Contribuição de Hugo van
     Kemenade em bpo-46607(2).)

   * O antigo conjunto de funções *note importlib.resources: 7f. 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(): 324. foi descontinuada e
     será removida no Python 3.15.  Use as funções *note
     locale.setlocale(): 326, *note locale.getpreferredencoding(False):
     751. e *note locale.getlocale(): 325.  (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: 923.  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:
     192. 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: be, 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(): 924. (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: 35d, 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: 169. 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: 330. 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: 11b.  (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: 2b2. e *note IsolatedAsyncioTestCase: 35e.
     (diferente do valor padrão ‘None’) foi descontinuado nesta versão.

   * Foram descontinuadas as seguintes funções *note unittest: 10c. 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: 58c.:

        * *note unittest.TestLoader.loadTestsFromModule(): 58d.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 58e.

        * *note unittest.TestLoader.getTestCaseNames(): 58f.

     (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<4>,  Prev: Descontinuados<4>,  Up: O que há de novo no Python 3 11

1.4.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: 928.

   * O módulo ‘asynchat’

   * O módulo ‘asyncore’

   * *note Todo o pacote distutils: 929.

   * O módulo ‘imp’

   * O espaço de nomes *note typing.io: 237.

   * O espaço de nomes *note typing.re: 92a.

   * ‘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: 10c.:

          Apelido descontinuado            Nome do método                      Descontinuado em
                                                                               
          -----------------------------------------------------------------------------------------
                                                                               
          ‘failUnless’                     *note assertTrue(): 73f.            3.1
                                                                               
                                                                               
          ‘failIf’                         *note assertFalse(): 740.           3.1
                                                                               
                                                                               
          ‘failUnlessEqual’                *note assertEqual(): 741.           3.1
                                                                               
                                                                               
          ‘failIfEqual’                    *note assertNotEqual(): 742.        3.1
                                                                               
                                                                               
          ‘failUnlessAlmostEqual’          *note assertAlmostEqual(): 743.     3.1
                                                                               
                                                                               
          ‘failIfAlmostEqual’              *note assertNotAlmostEqual(): 744.  3.1
                                                                               
                                                                               
          ‘failUnlessRaises’               *note assertRaises(): 745.          3.1
                                                                               
                                                                               
          ‘assert_’                        *note assertTrue(): 73f.            3.2
                                                                               
                                                                               
          ‘assertEquals’                   *note assertEqual(): 741.           3.2
                                                                               
                                                                               
          ‘assertNotEquals’                *note assertNotEqual(): 742.        3.2
                                                                               
                                                                               
          ‘assertAlmostEquals’             *note assertAlmostEqual(): 743.     3.2
                                                                               
                                                                               
          ‘assertNotAlmostEquals’          *note assertNotAlmostEqual(): 744.  3.2
                                                                               
                                                                               
          ‘assertRegexpMatches’            *note assertRegex(): 746.           3.2
                                                                               
                                                                               
          ‘assertRaisesRegexp’             *note assertRaisesRegex(): 747.     3.2
                                                                               
                                                                               
          ‘assertNotRegexpMatches’         *note assertNotRegex(): 748.        3.5
                                                                               


File: python.info,  Node: Removidos<4>,  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.4.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: 92e.

   * Removido o *note decorador: 92f. ‘@asyncio.coroutine()’ permitindo
     que corrotinas baseadas em gerador legado sejam compatíveis com o
     código *note async: 930. / *note await: 18d.  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: 7e2. 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():
     931, 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: 11. relacionadas e
     igualmente descontinuadas:

        * ‘binascii.a2b_hqx()’

        * ‘binascii.b2a_hqx()’

        * ‘binascii.rlecode_hqx()’

        * ‘binascii.rldecode_hqx()’

     A função *note binascii.crc_hqx(): 932. 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__(): 581. das classes *note
     xml.dom.pulldom.DOMEventStream: 933, *note
     wsgiref.util.FileWrapper: 934. e *note fileinput.FileInput: 935,
     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: 67.  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: 82.:

        * A função ‘getargspec()’, descontinuada desde o Python 3.0; use
          *note inspect.signature(): 22e. ou *note
          inspect.getfullargspec(): 936.

        * A função ‘formatargspec()’, descontinuada desde o Python 3.5;
          use a função *note inspect.signature(): 22e. ou o objeto *note
          inspect.Signature: 4dd. 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(): 937.

     (Contribuição de Hugo van Kemenade em bpo-45320(8).)

   * Removido o método *note __class_getitem__(): 938. de *note
     pathlib.PurePath: 6c2, 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: 10c.  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<4>,  Up: O que há de novo no Python 3 11

1.4.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:
93c.

   * *note open(): 314, *note io.open(): 735, *note codecs.open(): 313.
     e *note fileinput.FileInput: 935. 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: 93d. 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: 4bd. agora são validadas quando
     fornecidas para *note compile(): 4ab. e outras funções
     relacionadas.  Se posições inválidas forem detectadas, uma exceção
     *note ValueError: 2ea. será levantado.  (Contribuição de Pablo
     Galindo em gh-93351(2))

   * Proibido passar executores que não sejam *note
     concurrent.futures.ThreadPoolExecutor: 93e. para *note
     asyncio.loop.set_default_executor(): 93f. após uma descontinuação
     no Python 3.8.  (Contribuição de Illia Volochii em bpo-43234(3).)

   * *note calendar: 15.: As classes *note calendar.LocaleTextCalendar:
     940. e *note calendar.LocaleHTMLCalendar: 941. agora usam *note
     locale.getlocale(): 325, em vez de usar *note
     locale.getdefaultlocale(): 324, se nenhuma localidade é
     especificada.  (Contribuição de Victor Stinner em bpo-46659(4).)

   * O módulo *note pdb: aa. 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(): 942. deve ser
     uma sequência, e a conversão automática de *note set: 184.s para
     *note list: 24c.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: 2ea. é levantada.  (Contribuição de Raymond Hettinger
     em bpo-40465(6).)

   * O parâmetro opcional 'random' de *note random.shuffle(): 943. foi
     removido.  Anteriormente, era uma função aleatória arbitrária a ser
     usada para o shuffle; agora, *note random.random(): 944. (seu
     padrão anterior) sempre será usado.

   * Em *note Sintaxe de expressão regular: 923. do *note re: be,
     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: be, 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<7>,  Prev: Portando para Python 3 11,  Up: O que há de novo no Python 3 11

1.4.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: f6. 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: f6. 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: 947, 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 ‘--without-freelists’ 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: 19b. 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: 948. 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<7>,  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.4.16 Alterações na API C
--------------------------

* Menu:

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


File: python.info,  Node: Novas funcionalidades<7>,  Next: Portando para Python 3 11<2>,  Up: Alterações na API C<7>

1.4.16.1 Novas funcionalidades
..............................

   * Adiciona uma nova função *note PyType_GetName(): 94d. para obter o
     nome curto do tipo.  (Contribuição de Hai Shi em bpo-42035(1).)

   * Adiciona uma nova função *note PyType_GetQualName(): 94e. para
     obter o nome qualificado do tipo.  (Contribuição de Hai Shi em
     bpo-42035(2).)

   * Adiciona novas funções *note PyThreadState_EnterTracing(): 94f. e
     *note PyThreadState_LeaveTracing(): 950. à 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: 37e. que possui o mesmo
     valor que *note PY_VERSION_HEX: 37f.  (Contribuição de Gabriele N.
     Tornetta em bpo-43931(4).)

   * *note Py_buffer: 951. e APIs agora fazem parte da API limitada e da
     ABI estável:

        * *note PyObject_CheckBuffer(): 62d.

        * *note PyObject_GetBuffer(): 62e.

        * *note PyBuffer_GetPointer(): 952.

        * *note PyBuffer_SizeFromFormat(): 953.

        * *note PyBuffer_ToContiguous(): 954.

        * *note PyBuffer_FromContiguous(): 955.

        * *note PyObject_CopyData(): 956.

        * *note PyBuffer_IsContiguous(): 957.

        * *note PyBuffer_FillContiguousStrides(): 958.

        * *note PyBuffer_FillInfo(): 959.

        * *note PyBuffer_Release(): 62f.

        * *note PyMemoryView_FromBuffer(): 95a.

        * Slotes de tipo *note bf_getbuffer: 95b. e *note
          bf_releasebuffer: 95c.

     (Contribuição de Christian Heimes em bpo-45459(5).)

   * Adicionada a função *note PyType_GetModuleByDef(): 629, 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: 95d.).  (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(): 95e, *note
     PyFloat_Pack4(): 95f, *note PyFloat_Pack8(): 960, *note
     PyFloat_Unpack2(): 961. , *note PyFloat_Unpack4(): 962. e *note
     PyFloat_Unpack8(): 963.  (Contribuição de Victor Stinner em
     bpo-46906(7).)

   * Adiciona novas funções para obter atributos do objeto quadro: *note
     PyFrame_GetBuiltins(): 964, *note PyFrame_GetGenerator(): 965,
     *note PyFrame_GetGlobals(): 966, *note PyFrame_GetLasti(): 967.

   * Adicionadas duas novas funções para obter e definir a instância de
     exceção ativa: *note PyErr_GetHandledException(): 968. e *note
     PyErr_SetHandledException(): 969.  Estas são alternativas para
     *note PyErr_SetExcInfo(): 96a. e *note PyErr_GetExcInfo(): 96b. 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: 96c.  (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<5>,  Prev: Novas funcionalidades<7>,  Up: Alterações na API C<7>

1.4.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(): 96a. 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(): 96b. 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: 96e. 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(): 96f. 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: 970. não possui mais os campos ‘co_code’,
     ‘co_varnames’, ‘co_cellvars’ e ‘co_freevars’.  Em vez disso, use
     *note PyCode_GetCode(): 971, *note PyCode_GetVarnames(): 972, *note
     PyCode_GetCellvars(): 973. e *note PyCode_GetFreevars(): 974.
     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(): 975. agora levanta um erro se um
     tipo é definido com o sinalizador *note Py_TPFLAGS_HAVE_GC: 976.
     definido, mas não tem função transversal (*note
     PyTypeObject.tp_traverse: 977.).  (Contribuição de Victor Stinner
     em bpo-44263(11).)

   * Tipos de heap com o sinalizador *note Py_TPFLAGS_IMMUTABLETYPE:
     3cc. agora podem herdar o protocolo vectorcall da PEP 590(12).
     Anteriormente, isso só era possível para *note tipos estáticos:
     978.  (Contribuição de Erlend E. Aasland em bpo-43908(13))

   * Uma vez que *note Py_TYPE(): 3c6. é 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(): 979. (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(): 97a. é 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():
     97b. (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: 97c. 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(): 97d.

        * *note PyFrame_GetBack(): 97e.

        * *note PyFrame_GetBuiltins(): 964.

        * *note PyFrame_GetGenerator(): 965.

        * *note PyFrame_GetGlobals(): 966.

        * *note PyFrame_GetLasti(): 967.

        * *note PyFrame_GetLocals(): 655.

        * *note PyFrame_Type: 97f.

     (Contribuição de Victor Stinner em gh-93937(19).)

   * Os membros da estrutura *note PyFrameObject: 981. foram removidos
     da API C pública.

     Embora a documentação observe que os campos *note PyFrameObject:
     981. 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: 981.:

        * ‘f_back’: use *note PyFrame_GetBack(): 97e.

        * ‘f_blockstack’: removido.

        * ‘f_builtins’: use *note PyFrame_GetBuiltins(): 964.

        * ‘f_code’: use *note PyFrame_GetCode(): 982.

        * ‘f_gen’: use *note PyFrame_GetGenerator(): 965.

        * ‘f_globals’: use *note PyFrame_GetGlobals(): 966.

        * ‘f_iblock’: removido.

        * ‘f_lasti’: use *note PyFrame_GetLasti(): 967.  Código usando
          ‘f_lasti’ com ‘PyCode_Addr2Line()’ deve usar *note
          PyFrame_GetLineNumber(): 983, pois deve ser mais rápido.

        * ‘f_lineno’: use *note PyFrame_GetLineNumber(): 983.

        * ‘f_locals’: use *note PyFrame_GetLocals(): 655.

        * ‘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: 984.
     não deve ser acessado diretamente, já que seu valor agora também é
     calculado de forma “preguiçosa”.  A função *note PyFrame_GetBack():
     97e. deve ser chamada em seu lugar.

     Depuradores que acessam *note f_locals: 49f. diretamente 'devem'
     chamar *note PyFrame_GetLocals(): 655.  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: 985.:

        * ‘frame’: removido, use *note PyThreadState_GetFrame(): 986.
          (função adicionada ao Python 3.9 por bpo-40429(21)).  Aviso: a
          função retorna um *note referência forte: 5d8, precisa chamar
          *note Py_XDECREF(): 987.

        * ‘tracing’: alterado, use *note PyThreadState_EnterTracing():
          94f. e *note PyThreadState_LeaveTracing(): 950. (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: 7fa. agora deve ser
     definido como 1 para inicialização para usar *note
     PyConfig.module_search_paths: 637. para inicializar *note sys.path:
     3e1.  Caso contrário, a inicialização recalculará o caminho e
     substituirá quaisquer valores adicionados a ‘module_search_paths’.

   * *note PyConfig_Read(): 988. não calcula mais o caminho de pesquisa
     inicial e não preencherá nenhum valor em *note
     PyConfig.module_search_paths: 637.  Para calcular caminhos padrão e
     modificá-los, termine a inicialização e use *note
     PySys_GetObject(): 61e. para recuperar *note sys.path: 3e1. 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<5>,  Next: Pendente remoção no Python 3 12<2>,  Prev: Portando para Python 3 11<2>,  Up: Alterações na API C<7>

1.4.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: 3f4. da *note
     Configuração de Inicialização do Python: 63a. ( PEP 587(1)).
     (Contribuição de Victor Stinner em gh-88279(2).)

   * Descontinua o membro ‘ob_shash’ do *note PyBytesObject: 98a.  Use
     *note PyObject_Hash(): 433. 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<5>,  Prev: Descontinuados<5>,  Up: Alterações na API C<7>

1.4.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(): 431.

   * ‘PyUnicode_WSTR_LENGTH()’

   * ‘_PyUnicode_AsUnicode()’

   * ‘PyUnicode_WCHAR_KIND’

   * *note PyUnicodeObject: 98c.

   * ‘PyUnicode_InternImmortal()’


File: python.info,  Node: Removidos<5>,  Prev: Pendente remoção no Python 3 12<2>,  Up: Alterações na API C<7>

1.4.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: 654. é definida:

        * *note PyMarshal_WriteLongToFile(): 98e.

        * *note PyMarshal_WriteObjectToFile(): 98f.

        * *note PyMarshal_ReadObjectFromString(): 990.

        * *note PyMarshal_WriteObjectToString(): 991.

        * a macro ‘Py_MARSHAL_VERSION’

     Eles não fazem parte da *note API limitada: 992.

     (Contribuição de Victor Stinner em bpo-45474(6).)

   * Exclui *note PyWeakref_GET_OBJECT(): 3db. 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: 3dd, 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<7>,  Up: O que há de novo no Python 3 11

1.4.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.4.17.1 tarfile
................

   * Os métodos de extração em *note tarfile: e4. e *note
     shutil.unpack_archive(): 68b, 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: 68c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a3.  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.4.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.4.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.5 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: 142. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<5>.
* Novas funcionalidades: Novas funcionalidades<8>.
* 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<5>.
* Módulos melhorados: Módulos melhorados<5>.
* Otimizações: Otimizações<5>.
* Descontinuados: Descontinuados<6>.
* Removidos: Removidos<6>.
* Portando para Python 3.10: Portando para Python 3 10.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<5>.
* Mudanças na construção: Mudanças na construção<4>.
* Alterações na API C: Alterações na API C<9>.
* 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<5>,  Next: Novas funcionalidades<8>,  Up: O que há de novo no Python 3 10

1.5.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<8>,  Next: Novos recursos relacionados a dicas de tipo<3>,  Prev: Resumo – Destaques da versão<5>,  Up: O que há de novo no Python 3 10

1.5.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<8>

1.5.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<8>

1.5.2.2 Melhores mensagens de erro
..................................

* Menu:

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


File: python.info,  Node: SyntaxErrors,  Next: IndentationErrors,  Up: Melhores mensagens de erro

1.5.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: 18e. 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: 18e. 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.5.2.4 IndentationErrors
.........................

Muitas exceções *note IndentationError: 9a1. 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.5.2.5 AttributeErrors
.......................

Ao exibir *note AttributeError: 5e4, ‘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.5.2.6 NameErrors
..................

Ao exibir *note NameError: 44f. 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<8>

1.5.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: 9a5. de objetos de quadro sempre conterá o
número de linha esperado.

O atributo *note co_lnotab: 32e. *note code objects: 4e0. 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(): 34d.


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<8>

1.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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.5.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<8>

1.5.2.20 ‘EncodingWarning’ opcional e opção ‘encoding="locale"’
...............................................................

A codificação padrão de *note TextIOWrapper: 9b4. e *note open(): 314.
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:
891. é verdadeiro e a codificação padrão específica da localidade é
usada.

A opção ‘-X warn_default_encoding’ e *note PYTHONWARNDEFAULTENCODING:
9b5. são adicionadas para ativar o aviso.

Veja *note Codificação do texto: 9b6. 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<8>,  Up: O que há de novo no Python 3 10

1.5.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: 10a.

* 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.5.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:
2a7, 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: 2a7.:

     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(): 2ac. e *note issubclass(): 9ba.:

     >>> isinstance(1, int | str)
     True

Veja *note Tipo União: 9bb. 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.5.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: 10a.

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: 481.  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: 9bd.

Veja *note typing.Callable: 9be, *note typing.ParamSpec: 481, *note
typing.Concatenate: 9bd, *note typing.ParamSpecArgs: 9bf, *note
typing.ParamSpecKwargs: 9c0. 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.5.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: 10a. tem um valor especial *note TypeAlias:
9c2. 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.5.3.4 PEP 647: guardas de tipo definidas pelo usuário
.......................................................

*note TypeGuard: 486. foi adicionado ao módulo *note typing: 10a. 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: 486. 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<5>,  Prev: Novos recursos relacionados a dicas de tipo<3>,  Up: O que há de novo no Python 3 10

1.5.4 Outras mudanças na linguagem
----------------------------------

   * O tipo *note int: 19b. tem um novo método *note int.bit_count():
     9c5, 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(): 9c6, *note
     dict.values(): 9c7. e *note dict.items(): 9c8. agora têm um
     atributo ‘mapping’ que fornece um objeto *note
     types.MappingProxyType: 68d. que envolve o dicionário original.
     (Contribuição de Dennis Sweeney em bpo-40890(2).)

   * PEP 618(3): A função *note zip(): 1a0. 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: 1fd, *note Fraction: 212. e outros
     objetos que podem ser convertidos em inteiros apenas com uma perda
     (por exemplo, tem o método *note __int__(): 19d, mas não tem o
     método *note __index__(): 19e.).  (Contribuição de Serhiy Storchaka
     em bpo-37999(4).)

   * Se *note object.__ipow__(): 9c9. retorna *note NotImplemented: 1a2,
     o operador vai corretamente recorrer ao *note object.__pow__():
     9ca. e *note object.__rpow__(): 1a5. 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(): 9cb. e *note anext():
     9cc. foram adicionadas para fornecer contrapartes assíncronas para
     *note iter(): 9cd. e *note next(): 9ce, respectivamente.
     (Contribuição de Joshua Bronson, Daniel Pope e Justin Wang em
     bpo-31861(7).)

   * Static methods (*note @staticmethod: 450.) and class methods (*note
     @classmethod: 488.) now inherit the method attributes
     (‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’,
     ‘__annotations__’) and have a new ‘__wrapped__’ attribute.
     Moreover, static methods are now callable as regular functions.
     (Contributed by Victor Stinner in 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: 9cf.  (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: 196. e *note
     decimal.Decimal: 1fd. 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: 18e. (ao invés de uma *note NameError: 44f.)
     será levantada ao excluir a constante *note __debug__: 9d0.
     (Contribuição de Donghee Na em bpo-45000(15).)

   * Exceções *note SyntaxError: 18e. 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<5>,  Next: Módulos melhorados<5>,  Prev: Outras mudanças na linguagem<4>,  Up: O que há de novo no Python 3 10

1.5.5 Novos módulos
-------------------

   * Nenhum.


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 10

1.5.6 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: asyncio<7>,  Next: argparse<4>,  Up: Módulos melhorados<5>

1.5.6.1 asyncio
...............

Adiciona o método *note connect_accepted_socket(): 9d4. 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<4>,  Next: array<3>,  Prev: asyncio<7>,  Up: Módulos melhorados<5>

1.5.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<4>,  Up: Módulos melhorados<5>

1.5.6.3 array
.............

O método *note index(): 9d7. de *note array.array: 4b8. 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<3>,  Prev: array<3>,  Up: Módulos melhorados<5>

1.5.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: 1a3.
em tempo de importação agora foi adicionada a todos esses três módulos.


File: python.info,  Node: base64<3>,  Next: bdb<2>,  Prev: asynchat asyncore smtpd,  Up: Módulos melhorados<5>

1.5.6.5 base64
..............

Adiciona *note base64.b32hexencode(): 9da. e *note
base64.b32hexdecode(): 9db. para dar suporte a Codificação Base32 com
alfabeto hexa estendido.


File: python.info,  Node: bdb<2>,  Next: bisect,  Prev: base64<3>,  Up: Módulos melhorados<5>

1.5.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<2>,  Up: Módulos melhorados<5>

1.5.6.7 bisect
..............

Adicionada a possibilidade de fornecer uma função 'key' para as APIs no
módulo *note bisect: 12.  (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<5>

1.5.6.8 codecs
..............

Adiciona uma função *note codecs.unregister(): 9df. 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<5>

1.5.6.9 collections.abc
.......................

Os ‘__args__’ do *note genérico parametrizado: 8b6. para *note
collections.abc.Callable: 9e1. agora são consistentes com *note
typing.Callable: 9be.  A classe genérica *note collections.abc.Callable:
9e1. agora achata parâmetros de tipo, de forma semelhante ao que *note
typing.Callable: 9be. 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: 9e2. e uma subclasse será retornada ao fazer um
subscript do tipo *note collections.abc.Callable: 9e1.  Observe que uma
*note TypeError: 198. pode ser levantada para formas inválidas de
parametrizar *note collections.abc.Callable: 9e1. 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<2>,  Prev: collections abc,  Up: Módulos melhorados<5>

1.5.6.10 contextlib
...................

Adiciona um gerenciador de contexto *note contextlib.aclosing(): 9e4.
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(): 9e5.  (Contribuição de Tom Gringauz em
bpo-41543(2).)

Adiciona *note AsyncContextDecorator: 9e6, 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<2>,  Next: dataclasses<2>,  Prev: contextlib<2>,  Up: Módulos melhorados<5>

1.5.6.11 curses
...............

As funções de cores estendidas adicionadas no ncurses 6.1 serão usadas
transparentemente por *note curses.color_content(): 9e8, *note
curses.init_color(): 9e9, *note curses.init_pair(): 9ea. e *note
curses.pair_content(): 9eb.  Uma nova função, *note
curses.has_extended_color_support(): 9ec, 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: 2f.
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<2>,  Up: Módulos melhorados<5>

1.5.6.12 dataclasses
....................

* Menu:

* __slots__::
* Campos somente-nomeados::


File: python.info,  Node: __slots__,  Next: Campos somente-nomeados,  Up: dataclasses<2>

1.5.6.13 __slots__
..................

Adicionado o parâmetro ‘slots’ no decorador *note
dataclasses.dataclass(): 4db.  (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.5.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<5>

1.5.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:
af, *note shutil: ca, *note subprocess: dc. ou *note sysconfig: e1.).
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<5>

1.5.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<5>

1.5.6.17 encodings
..................

*note encodings.normalize_encoding(): 9f3. 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<5>

1.5.6.18 enum
.............

*note __repr__(): 824. do *note Enum: 837. agora retorna
‘enum_name.member_name’ e *note __str__(): 825. agora retorna
‘member_name’.  Os enums da stdlib disponíveis como constantes de módulo
têm *note repr(): 1c1. de ‘module_name.member_name’.  (Contribuição de
Ethan Furman em bpo-40066(1).)

Adiciona *note enum.StrEnum: 822. 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<2>,  Prev: enum<4>,  Up: Módulos melhorados<5>

1.5.6.19 fileinput
..................

Adiciona os parâmetros 'encoding' e 'errors' a *note fileinput.input():
9f6. e *note fileinput.FileInput: 935.  (Contribuição de Inada Naoki em
bpo-43712(1).)

*note fileinput.hook_compressed(): 9f7. agora retorna um objeto *note
TextIOWrapper: 9b4. 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<2>,  Next: gc<2>,  Prev: fileinput,  Up: Módulos melhorados<5>

1.5.6.20 faulthandler
.....................

O módulo *note faulthandler: 5c. 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<2>,  Next: glob<2>,  Prev: faulthandler<2>,  Up: Módulos melhorados<5>

1.5.6.21 gc
...........

Adiciona ganchos de auditoria para *note gc.get_objects(): 9fa, *note
gc.get_referrers(): 9fb. e *note gc.get_referents(): 9fc.  (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<2>,  Up: Módulos melhorados<5>

1.5.6.22 glob
.............

Adiciona os parâmetros 'root_dir' e 'dir_fd' em *note glob(): 599. e
*note iglob(): 9fe, 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<2>,  Prev: glob<2>,  Up: Módulos melhorados<5>

1.5.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(): 728. 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<2>,  Next: IDLE e idlelib<2>,  Prev: hashlib<3>,  Up: Módulos melhorados<5>

1.5.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<2>,  Up: Módulos melhorados<5>

1.5.6.25 IDLE e idlelib
.......................

Faz o IDLE invocar *note sys.excepthook(): a02. (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: a03. *note match: a04,
*note case: a04. e *note _: a05. 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<4>,  Prev: IDLE e idlelib<2>,  Up: Módulos melhorados<5>

1.5.6.26 importlib.metadata
...........................

Paridade de recursos com ‘importlib_metadata’ 4.6 (histórico(1)).

*note Pontos de entrada importlib.metadata: 582. agora oferecem uma
experiência melhor para selecionar pontos de entrada por grupo e nome
através do novo *note importlib.metadata.EntryPoints: 582.  Consulte a
Nota de Compatibilidade nos documentos para obter mais informações sobre
a descontinuação e uso.

Adicionada *note importlib.metadata.packages_distributions(): a07. para
resolver módulos e pacotes Python de alto nível com suas *note
importlib.metadata.Distribution: a08.

   ---------- Footnotes ----------

   (1) https://importlib-metadata.readthedocs.io/en/latest/history.html


File: python.info,  Node: inspect<4>,  Next: itertools<4>,  Prev: importlib metadata<2>,  Up: Módulos melhorados<5>

1.5.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(): a0a, 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(): a0a.
também pode desfazer a string corretamente de anotações em string.
*note inspect.get_annotations(): a0a. 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: 9cf.  Da
mesma forma, *note inspect.signature(): 22e, *note
inspect.Signature.from_callable(): 937. e
‘inspect.Signature.from_function()’ agora chamam *note
inspect.get_annotations(): a0a. para recuperar anotações.  Isso
significa que *note inspect.signature(): 22e. e *note
inspect.Signature.from_callable(): 937. 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<4>,  Next: linecache<2>,  Prev: inspect<4>,  Up: Módulos melhorados<5>

1.5.6.28 itertools
..................

Adiciona *note itertools.pairwise(): a0c.  (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<2>,  Next: os<5>,  Prev: itertools<4>,  Up: Módulos melhorados<5>

1.5.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<5>,  Next: os path<4>,  Prev: linecache<2>,  Up: Módulos melhorados<5>

1.5.6.30 os
...........

Adiciona suporte a *note os.cpu_count(): 4d5. para RTOS de VxWorks.
(Contribuição de Peixing Xin em bpo-41440(1).)

Adiciona uma nova função *note os.eventfd(): a0f. 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(): a10. 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: a11, *note O_FSYNC: a12, *note O_SYMLINK: a13.
e *note O_NOFOLLOW_ANY: a14. 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<8>,  Prev: os<5>,  Up: Módulos melhorados<5>

1.5.6.31 os.path
................

*note os.path.realpath(): 261. agora aceita um argumento somente-nomeado
'strict'.  Quando definido como ‘True’, a exceção *note OSError: 2bf. é
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<8>,  Next: platform<3>,  Prev: os path<4>,  Up: Módulos melhorados<5>

1.5.6.32 pathlib
................

Adiciona suporte a fatiamento a *note PurePath.parents: a17.
(Contribuição de Joshua Cannon em bpo-35498(1).)

Adiciona suporte a indexação negativa a *note PurePath.parents: a17.
(Contribuição de Yaroslav Pankovych em bpo-21041(2).)

Adiciona o método *note Path.hardlink_to: a18. que substitui
‘link_to()’.  O novo método tem a mesma ordem de argumentos que *note
symlink_to(): a19.  (Contribuição de Barney Gale em bpo-39950(3).)

*note pathlib.Path.stat(): a1a. e *note chmod(): a1b. agora aceita um
argumento somente-nomeado 'follow_symlinks' para consistência com as
funções correspondentes no módulo *note os: a5.  (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<3>,  Next: pprint,  Prev: pathlib<8>,  Up: Módulos melhorados<5>

1.5.6.33 platform
.................

Adiciona *note platform.freedesktop_os_release(): a1d. 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<3>,  Up: Módulos melhorados<5>

1.5.6.34 pprint
...............

*note pprint.pprint(): a1f. agora aceita um novo argumento nomeado
‘underscore_numbers’.  (Contribuição de sblondon em bpo-42914(1).)

*note pprint: b3. agora pode fazer impressão bonita de instâncias de
*note dataclasses.dataclass: 4db.  (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<5>

1.5.6.35 py_compile
...................

Adiciona a opção ‘--quiet’ à interface de linha de comando de *note
py_compile: b8.  (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<5>

1.5.6.36 pyclbr
...............

Adiciona um atributo ‘end_lineno’ aos objetos ‘Function’ e ‘Class’ na
árvore retornada por *note pyclbr.readmodule(): a22. e *note
pyclbr.readmodule_ex(): a23.  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<5>

1.5.6.37 shelve
...............

O módulo *note shelve: c8. agora usa *note pickle.DEFAULT_PROTOCOL: a25.
por padrão em vez do protocolo ‘3’ do *note pickle: ab. 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<5>

1.5.6.38 statistics
...................

Adiciona *note covariance(): a27, *note correlation(): 6d8. do Pearson,
e funções simples *note linear_regression(): a28.  (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<3>,  Prev: statistics<3>,  Up: Módulos melhorados<5>

1.5.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<3>,  Next: ssl<4>,  Prev: site<2>,  Up: Módulos melhorados<5>

1.5.6.40 socket
...............

A exceção *note socket.timeout: a2b. é agora um apelido de *note
TimeoutError: a2c.  (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<4>,  Next: sqlite3<6>,  Prev: socket<3>,  Up: Módulos melhorados<5>

1.5.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: a2e.  (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: 1a3.  *note ssl.SSLContext.options:
a2f. tem *note OP_NO_SSLv2: a30. e *note OP_NO_SSLv3: a31. definidos por
padrão e, portanto, não consegue avisar sobre a definição do sinalizador
novamente.  A *note seção de descontinuidade: a32. 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: 354. 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(): a33.  (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:
47a. 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<6>,  Next: sys<5>,  Prev: ssl<4>,  Up: Módulos melhorados<5>

1.5.6.42 sqlite3
................

Adiciona eventos de auditoria para *note connect(): 59f, *note
enable_load_extension(): a35. e *note load_extension(): 6d4.
(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<6>,  Up: Módulos melhorados<5>

1.5.6.43 sys
............

Adiciona o atributo *note sys.orig_argv: a37.: 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: a38, 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<4>,  Prev: sys<5>,  Up: Módulos melhorados<5>

1.5.6.44 _thread
................

*note _thread.interrupt_main(): a3a. agora aceita um número de sinal
opcional para simular (o padrão ainda é *note signal.SIGINT: 252.).
(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<4>,  Next: traceback<3>,  Prev: _thread,  Up: Módulos melhorados<5>

1.5.6.45 threading
..................

Adiciona *note threading.gettrace(): a3c. e *note
threading.getprofile(): a3d. para obter as funções definidas por *note
threading.settrace(): a3e. e *note threading.setprofile(): a3f,
respectivamente.  (Contribuição de Mario Corchero em bpo-42251(1).)

Adiciona *note threading.__excepthook__: a40. para permitir obtenção do
valor original de *note threading.excepthook(): a41. 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<4>,  Up: Módulos melhorados<5>

1.5.6.46 traceback
..................

As funções *note format_exception(): a43, *note format_exception_only():
a44. e *note print_exception(): a45. 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<6>,  Prev: traceback<3>,  Up: Módulos melhorados<5>

1.5.6.47 types
..............

Reintroduz as classes *note types.EllipsisType: a47, *note
types.NoneType: a48. e *note types.NotImplementedType: a49, 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<6>,  Next: unittest<6>,  Prev: types<3>,  Up: Módulos melhorados<5>

1.5.6.48 typing
...............

Para alterações principais, veja *note Novos recursos relacionados a
dicas de tipo: 9b7.

O comportamento de *note typing.Literal: a4b. 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:
     198. durante as comparações de igualdade se algum de seus
     parâmetros não for *note hasheáveis: 819.  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(): a4c. para fazer
introspecção se uma anotação for uma *note typing.TypedDict: 330.
(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():
669.  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: 1a3.  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: 10a.  (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<6>,  Next: urllib parse,  Prev: typing<6>,  Up: Módulos melhorados<5>

1.5.6.49 unittest
.................

Adiciona novo método new *note assertNoLogs(): a4e. para complementar o
existente *note assertLogs(): a4f.  (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<6>,  Up: Módulos melhorados<5>

1.5.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(): 31d. e *note urllib.parse.parse_qsl(): 31c.
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: 110. 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<5>

1.5.6.51 xml
............

Adiciona uma classe *note LexicalHandler: a52. ao módulo *note
xml.sax.handler: 130.  (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<5>

1.5.6.52 zipimport
..................

Adiciona métodos relacionados à PEP 451(1): *note find_spec(): a54,
*note zipimport.zipimporter.create_module(): a55. e *note
zipimport.zipimporter.exec_module(): 337.  (Contribuição de Brett Cannon
em bpo-42131(2).)

Adiciona o método *note invalidate_caches(): a56.  (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<5>,  Next: Descontinuados<6>,  Prev: Módulos melhorados<5>,  Up: O que há de novo no Python 3 10

1.5.7 Otimizações
-----------------

   * Os construtores *note str(): 169, *note bytes(): 192. e *note
     bytearray(): 342. 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: c3. 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: a58. 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: a59. 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: 14. / *note lzma: 8e. / *note zlib: 139. 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(): 19f, *note filter(): a5a, *note reversed(): a5b, *note
     bool(): 3c0. e *note float(): 196.  (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: a5c. 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: 6b. e *note lzma: 8e.
     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<6>,  Next: Removidos<6>,  Prev: Otimizações<5>,  Up: O que há de novo no Python 3 10

1.5.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: 346, *note else: 17c, *note for: 347,
     *note if: 181, *note in: 348, *note is: 349. e *note or: 34a.  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(): a5e.), *note load_module(): a5f. (substituído por
     *note exec_module(): a60.), ‘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: 7b.).  *note ImportWarning:
     713. e/ou *note DeprecationWarning: 1a3. 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: 929. para mais informações.

   * Argumentos não inteiros para *note random.randrange(): a61. foram
     descontinuados.  A exceção *note ValueError: 2ea. foi descontinuada
     em favor de uma exceção *note TypeError: 198.  (Contribuição de
     Serhiy Storchaka e Raymond Hettinger em bpo-37319(2).)

   * Os vários métodos de ‘load_module()’ de *note importlib: 7b. foram
     documentados como descontinuados desde Python 3.6, mas agora também
     irão disparar um *note DeprecationWarning: 1a3.  Use *note
     exec_module(): a60. 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(): 337.  (Contribuição de Brett
     Cannon em bpo-26131(4).)

   * O uso de *note load_module(): a5f. pelo sistema de importação agora
     dispara uma exceção *note ImportWarning: 713, pois *note
     exec_module(): a60. é 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: 713, pois
     *note importlib.abc.MetaPathFinder.find_spec(): a5e. e *note
     importlib.abc.PathEntryFinder.find_spec(): a62. são preferidos,
     respectivamente.  Você pode usar *note
     importlib.util.spec_from_loader(): a63. 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: 713,
     pois *note importlib.abc.PathEntryFinder.find_spec(): a62. é
     preferido.  Você pode usar *note importlib.util.spec_from_loader():
     a63. 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: 1a3. 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: a64.
     e *note importlib.abc.PathEntryFinder: a65. 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: 1a3. 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: 169.  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():
          35b.

        * ‘threading.activeCount’ => *note threading.active_count():
          35c.

        * ‘threading.Condition.notifyAll’ => *note
          threading.Condition.notify_all(): 356.

        * ‘threading.Event.isSet’ => *note threading.Event.is_set():
          357.

        * ‘threading.Thread.setName’ => *note threading.Thread.name:
          29f.

        * ‘threading.thread.getName’ => *note threading.Thread.name:
          29f.

        * ‘threading.Thread.isDaemon’ => *note threading.Thread.daemon:
          359.

        * ‘threading.Thread.setDaemon’ => *note threading.Thread.daemon:
          359.

     (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(): a18.
     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: d5. 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: a66. e *note maximum_version: a67.

        * ‘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: a68. e *note PROTOCOL_TLS_SERVER: a69.

        * ‘wrap_socket()’ foi substituída por *note
          ssl.SSLContext.wrap_socket(): 73d.

        * ‘match_hostname()’

        * ‘RAND_pseudo_bytes()’, ‘RAND_egd()’

        * Recurso de NPN como *note
          ssl.SSLSocket.selected_npn_protocol(): a6a. e *note
          ssl.SSLContext.set_npn_protocols(): 355. 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:
     503.  (Contribuição de Victor Stinner em bpo-44584(19).)

   * A importação dos submódulos ‘typing.io’ e ‘typing.re’ agora emitirá
     *note DeprecationWarning: 1a3.  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: 10a.
     (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<6>,  Next: Portando para Python 3 10,  Prev: Descontinuados<6>,  Up: O que há de novo no Python 3 10

1.5.9 Removidos
---------------

   * Removidos os métodos especiais ‘__int__’, ‘__float__’,
     ‘__floordiv__’, ‘__mod__’, ‘__divmod__’, ‘__rfloordiv__’,
     ‘__rmod__’ e ‘__rdivmod__’ da classe *note complex: 197.  Eles
     sempre levantavam uma exceção *note TypeError: 198.  (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: a6d. é 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: a6e. do módulo *note collections: 1e.  (Contribuição de
     Victor Stinner em bpo-37324(6).)

   * O parâmetro ‘loop’ foi removido da maioria da *note API de alto
     nível: a6f. do *note asyncio: b. 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: a70. 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<5>,  Prev: Removidos<6>,  Up: O que há de novo no Python 3 10

1.5.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<4>.
* Alterações na API C: Alterações na API C<8>.


File: python.info,  Node: Alterações na sintaxe Python,  Next: Alterações na API Python<4>,  Up: Portando para Python 3 10

1.5.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<4>,  Next: Alterações na API C<8>,  Prev: Alterações na sintaxe Python,  Up: Portando para Python 3 10

1.5.10.2 Alterações na API Python
.................................

   * Os parâmetros 'etype' das funções *note format_exception(): a43,
     *note format_exception_only(): a44. e *note print_exception(): a45.
     no módulo *note traceback: 104. foram renomeadas para 'exc'.
     (Contribuição de Zackery Spytz e Matthias Bussonnier em
     bpo-26389(1).)

   * *note atexit: d.: ao sair do Python, se uma função de retorno
     registrada com *note atexit.register(): a74. 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: 9be. 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(): 2ab. ou ‘__args__’ precisa levar em conta esta
     mudança.  Além disso, *note TypeError: 198. 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(): a75. e *note socket.ntohs(): a76. agora
     levantam *note OverflowError: a77. em vez de *note
     DeprecationWarning: 1a3. 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: a6f. do *note asyncio: b. 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(): a78.

     (Contribuição de Yurii Karabas, Andrew Svetlov, Yury Selivanov e
     Kyle Stanley em bpo-42392(5).)

   * O construtor *note types.FunctionType: a79. 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(): 49d. e *note
     exec(): 49c.  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<8>,  Prev: Alterações na API Python<4>,  Up: Portando para Python 3 10

1.5.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(): a7b.  O
     objeto código resultante pode ser então avaliado usando, por
     exemplo, *note PyEval_EvalCode(): a7c.

     Especificamente:

        * Uma chamada para ‘PyParser_SimpleParseStringFlags’ seguida por
          ‘PyNode_Compile’ pode ser substituída por *note
          Py_CompileString(): a7b.

        * 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(): a7b.

        * 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: 83. com
          *note PyImport_ImportModule(): 3d9, *note
          PyObject_CallMethod(): 634, *note PyBytes_AsString(): a7d. e
          *note Py_CompileString(): a7b, 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: a7e. 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(): a7f, por exemplo).  Observe também que o
          membro ‘f_lasti’ de objetos ‘FrameObject’ não é considerado
          estável: por favor, use *note PyFrame_GetLineNumber(): 983. em
          vez disso.


File: python.info,  Node: Alterações de bytecode do CPython<5>,  Next: Mudanças na construção<4>,  Prev: Portando para Python 3 10,  Up: O que há de novo no Python 3 10

1.5.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<9>,  Prev: Alterações de bytecode do CPython<5>,  Up: O que há de novo no Python 3 10

1.5.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: d4. 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: d. 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: a82. 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: a83. ao script
     ‘./configure’.  Se especificado, o módulo *note ensurepip: 59.
     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: a84. 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: a85. 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<9>,  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.5.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<9>.
* Portando para Python 3.10: Portando para Python 3 10<2>.
* Descontinuados: Descontinuados<7>.
* Removidos: Removidos<7>.


File: python.info,  Node: PEP 652 Mantendo a ABI estável,  Next: Novas funcionalidades<9>,  Up: Alterações na API C<9>

1.5.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: 76a. 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<9>,  Next: Portando para Python 3 10<2>,  Prev: PEP 652 Mantendo a ABI estável,  Up: Alterações na API C<9>

1.5.13.2 Novas funcionalidades
..............................

   * O resultado de *note PyNumber_Index(): a89. agora sempre tem o tipo
     exato *note int: 19b.  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: a8a. à estrutura *note
     PyConfig: 3f4.: 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(): a8b. e *note
     PyDateTime_TIME_GET_TZINFO(): a8c. foram adicionadas para acessar
     os atributos ‘tzinfo’ dos objetos *note datetime.datetime: 4dc. e
     *note datetime.time: 1fa.  (Contribuição de Zackery Spytz em
     bpo-30155(3).)

   * Adiciona uma função *note PyCodec_Unregister(): a8d. 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(): a8e. 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(): a8f. à API C limitada.
     (Contribuição de Alex Gaynor em bpo-41784(6).)

   * Adiciona a função *note PyModule_AddObjectRef(): 5fe.: semelhante a
     *note PyModule_AddObject(): 5ff, 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(): a90. e *note Py_XNewRef():
     a91. 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(): 793. e *note
     PyType_FromModuleAndSpec(): 768. agora aceitam uma única classe
     como o argumento 'bases'.  (Contribuição de Serhiy Storchaka em
     bpo-42423(9).)

   * A função *note PyType_FromModuleAndSpec(): 768. agora aceita o slot
     NULL ‘tp_doc’.  (Contribuição de Hai Shi em bpo-41832(10).)

   * A função *note PyType_GetSlot(): a92. pode aceitar *note tipos
     estáticos: 978.  (Contribuição de Hai Shi e Petr Viktorin em
     bpo-41073(11).)

   * Adiciona uma nova função *note PySet_CheckExact(): a93. à C-API
     para verificar se um objeto é uma instância de *note set: 184, mas
     não uma instância de um subtipo.  (Contribuição de Pablo Galindo em
     bpo-43277(12).)

   * Adiciona *note PyErr_SetInterruptEx(): a94. 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: 503. (se a macro ‘Py_DEBUG’ estiver
     definida).  Na API C limitada, as funções *note Py_INCREF(): 784. e
     *note Py_DECREF(): 785. agora são implementadas como chamadas de
     função opacas, em vez de acessar diretamente o membro *note
     PyObject.ob_refcnt: a95, 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: 5d5. é 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: 62a. (macro ‘Py_TRACE_REFS’).  (Contribuição de
     Victor Stinner em bpo-43688(15).)

   * Adiciona a função *note Py_Is(x, y): a96. 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(): a97, *note Py_IsTrue(): a98,
     *note Py_IsFalse(): a99. 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(): a9a, *note PyGC_Disable(): a9b, *note
     PyGC_IsEnabled(): a9c.  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: 64.

   * Adiciona um novo sinalizador de tipo *note
     Py_TPFLAGS_DISALLOW_INSTANTIATION: 797. 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: 3cc. 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<7>,  Prev: Novas funcionalidades<9>,  Up: Alterações na API C<9>

1.5.13.3 Portando para Python 3.10
..................................

   * A macro ‘PY_SSIZE_T_CLEAN’ deve agora ser definida para usar os
     formatos *note PyArg_ParseTuple(): 3be. e *note Py_BuildValue():
     3bf. que usam ‘#’: ‘es#’, ‘et#’, ‘s#’, ‘u#’, ‘y#’, ‘z#’, ‘U#’ e
     ‘Z#’.  Veja *note Análise de argumentos e construção de valores:
     3d2. e PEP 353(1).  (Contribuição de Victor Stinner em
     bpo-40943(2).)

   * Como *note Py_REFCNT(): 2ce. é 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(): a9e.
     (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(): 61c. sem a *note GIL: 164.
     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(): a9f. 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(): 3e0, *note Py_GetPrefix(): 3e2,
     *note Py_GetExecPrefix(): 3e6, *note Py_GetProgramFullPath(): 3e9,
     *note Py_GetPythonHome(): 3ec. e *note Py_GetProgramName(): 3eb.
     agora retornam ‘NULL’ se chamadas antes de *note Py_Initialize():
     45d. (antes do Python ser inicializado).  Use a nova API de *note
     Configuração de Inicialização do Python: 63a. para obter a *note
     Python Path Configuration: aa0.  (Contribuição de Victor Stinner em
     bpo-42260(7).)

   * As macros *note PyList_SET_ITEM(): 623, *note PyTuple_SET_ITEM():
     622. e *note PyCell_SET(): aa1. 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: 97c.  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: 3cc. para
     criar objetos de tipo imutável.  Não confie em *note
     Py_TPFLAGS_HEAPTYPE: aa2. para decidir se um objeto de tipo é
     mutável ou não; verifique se *note Py_TPFLAGS_IMMUTABLETYPE: 3cc.
     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<7>,  Next: Removidos<7>,  Prev: Portando para Python 3 10<2>,  Up: Alterações na API C<9>

1.5.13.4 Descontinuados
.......................

   * A função ‘PyUnicode_InternImmortal()’ agora foi descontinuada e
     será removida no Python 3.12: use *note PyUnicode_InternInPlace():
     aa4. 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<7>,  Prev: Descontinuados<7>,  Up: Alterações na API C<9>

1.5.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(): aa6. ou
          *note PyUnicode_GET_LENGTH: aa7.

        * ‘Py_UNICODE_strcat’: use *note PyUnicode_CopyCharacters():
          aa8. ou *note PyUnicode_FromFormat(): 61f.

        * ‘Py_UNICODE_strcpy’, ‘Py_UNICODE_strncpy’: use *note
          PyUnicode_CopyCharacters(): aa8. ou *note
          PyUnicode_Substring(): aa9.

        * ‘Py_UNICODE_strcmp’: use *note PyUnicode_Compare(): aaa.

        * ‘Py_UNICODE_strncmp’: use *note PyUnicode_Tailmatch(): aab.

        * ‘Py_UNICODE_strchr’, ‘Py_UNICODE_strrchr’: use *note
          PyUnicode_FindChar(): aac.

   * 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(): aad.  (Contribuição de Inada Naoki em
     bpo-41103(4).)

   * Removida ‘PyUnicode_AsUnicodeCopy()’.  Use *note
     PyUnicode_AsUCS4Copy(): aae. ou *note PyUnicode_AsWideCharString():
     aaf. (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: ab0.
     (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: ab0.  (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: ab1.
     (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: de. em vez disso.
     (Contribuição de Victor Stinner em bpo-43244(11).)

   * Remove *note PyOS_ReadlineFunctionPointer(): 79a. 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:
     9. 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<9>,  Up: O que há de novo no Python 3 10

1.5.14 Recursos de segurança notáveis no 3.10.7
-----------------------------------------------

Converter entre *note int: 19b. e *note str: 169. 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: 2ea. 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: df.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 800.  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.5.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.5.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.5.16.1 tarfile
................

   * Os métodos de extração em *note tarfile: e4. e *note
     shutil.unpack_archive(): 68b, 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: 68c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a3.  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.6 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: 142.  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<6>.
* Você deve verificar DeprecationWarning no seu código::
* Novas funcionalidades: Novas funcionalidades<10>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<5>.
* Novos módulos: Novos módulos<6>.
* Módulos melhorados: Módulos melhorados<6>.
* Otimizações: Otimizações<6>.
* Descontinuados: Descontinuados<8>.
* Removidos: Removidos<8>.
* 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<11>.
* 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<6>,  Next: Você deve verificar DeprecationWarning no seu código,  Up: O que há de novo no Python 3 9

1.6.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(): 699. 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: 92, *note operator: a3, *note resource: c1, *note time: f4,
     ‘_weakref’) agora usam inicialização multifásica conforme definido
     pela PEP 489;

   * vários módulos da biblioteca padrão (‘audioop’, *note ast: 9, *note
     grp: 6a, ‘_hashlib’, *note pwd: b7, ‘_posixsubprocess’, *note
     random: bd, *note select: c6, *note struct: db, *note termios: e7,
     *note zlib: 139.) 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: 13a.;

   * uma implementação de um tipo topológico de um grafo agora é
     fornecida no novo módulo *note graphlib: 69.

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<10>,  Prev: Resumo – Destaques da versão<6>,  Up: O que há de novo no Python 3 9

1.6.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: 1a3. por vários anos.  Por exemplo, usar
‘collections.Mapping’ em vez de ‘collections.abc.Mapping’ emite uma
*note DeprecationWarning: 1a3. desde Python 3.3, lançado em 2012.

Teste sua aplicação com a opção de linha de comando *note -W: abb.
‘default’ para ver *note DeprecationWarning: 1a3. e *note
PendingDeprecationWarning: abc, ou mesmo com *note -W: abb. ‘error’ para
tratá-los como erros.  *note Filtro de avisos: 1b1. 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: a6e. no módulo *note
collections: 1e, como o alias ‘collections.Mapping’ para *note
collections.abc.Mapping: abd, 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: 502, 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:
abe.


File: python.info,  Node: Novas funcionalidades<10>,  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.6.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<10>

1.6.3.1 Operadores de mesclagem & atualização de dicionário
...........................................................

Operadores de mesclagem (‘|’) e atualização (‘|=’) foram adicionados à
classe embutida *note dict: 183.  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<10>

1.6.3.2 Novos métodos de strings para remover prefixos e sufixos
................................................................

*note str.removeprefix(prefix): ac2. e *note str.removesuffix(suffix):
ac3. 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<10>

1.6.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<10>

1.6.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: 9. 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<6>,  Prev: Novas funcionalidades<10>,  Up: O que há de novo no Python 3 9

1.6.4 Outras mudanças na linguagem
----------------------------------

   * *note __import__(): ac7. agora levanta *note ImportError: 64f. em
     vez de *note ValueError: 2ea, 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(): 816.  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: 502. e na *note
     compilação de depuração: 503. , os argumentos 'encoding' e 'errors'
     agora são verificados quanto às operações de codificação e
     decodificação de strings.  Exemplos: *note open(): 314, *note
     str.encode(): ac8. e *note bytes.decode(): ac9.

     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: 192. e *note bytearray: 342.  (Contribuição de Serhiy
     Storchaka em bpo-28029(4).)

   * Qualquer expressão válida agora pode ser usada como *note
     decorador: 92f.  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(): aca. 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(): acb. / *note asend(): acc. /
     *note athrow(): 712. é 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: 348. e nas funções
     *note contains(): acd, *note indexOf(): ace. e *note countOf():
     acf. do módulo *note operator: a3.  (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<6>,  Next: Módulos melhorados<6>,  Prev: Outras mudanças na linguagem<5>,  Up: O que há de novo no Python 3 9

1.6.5 Novos módulos
-------------------

* Menu:

* zoneinfo::
* graphlib: graphlib<2>.


File: python.info,  Node: zoneinfo,  Next: graphlib<2>,  Up: Novos módulos<6>

1.6.5.1 zoneinfo
................

O módulo *note zoneinfo: 13a. oferece suporte ao banco de dados de fuso
horário da IANA para a biblioteca padrão.  Ele adiciona *note
zoneinfo.ZoneInfo: ad2, uma implementação concreta *note
datetime.tzinfo: 7eb, 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<2>,  Prev: zoneinfo,  Up: Novos módulos<6>

1.6.5.2 graphlib
................

Um novo módulo, *note graphlib: 69, foi adicionado contendo a classe
*note graphlib.TopologicalSorter: ad4. 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<6>,  Next: Otimizações<6>,  Prev: Novos módulos<6>,  Up: O que há de novo no Python 3 9

1.6.6 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: ast<4>,  Next: asyncio<8>,  Up: Módulos melhorados<6>

1.6.6.1 ast
...........

Adicionada a opção 'indent' a *note dump(): ad7, que permite produzir
uma saída indentada com várias linhas.  (Contribuição de Serhiy
Storchaka em bpo-37995(1).)

Adicionada *note ast.unparse(): ad8. como uma função no módulo *note
ast: 9. que pode ser usado para remover um objeto *note ast.AST: 4bd. e
produzir uma string com código que produziria um objeto *note ast.AST:
4bd. 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<8>,  Next: compileall<2>,  Prev: ast<4>,  Up: Módulos melhorados<6>

1.6.6.2 asyncio
...............

Devido a significativas preocupações de segurança, o parâmetro
'reuse_address' de *note asyncio.loop.create_datagram_endpoint(): 931.
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: 6ae. *note
shutdown_default_executor(): ada. que agenda um desligamento para o
executor padrão que espera na *note ThreadPoolExecutor: 93e. para
concluir o fechamento.  Além disso, *note asyncio.run(): 2f1. foi
atualizada para usar o novo *note corrotina: 6ae.  (Contribuição de Kyle
Stanley em bpo-34037(2).)

Adicionada ‘asyncio.PidfdChildWatcher’, 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: 6ae. *note asyncio.to_thread():
adb.  É 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():
adc. 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():
80a. 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: b. agora levanta *note TypeError: 198. ao chamar métodos
incompatíveis com um soquete *note ssl.SSLSocket: add.  (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<3>,  Prev: asyncio<8>,  Up: Módulos melhorados<6>

1.6.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<3>,  Next: curses<3>,  Prev: compileall<2>,  Up: Módulos melhorados<6>

1.6.6.4 concurrent.futures
..........................

Adicionado um novo parâmetro 'cancel_futures' em *note
concurrent.futures.Executor.shutdown(): ae0. 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: 93e. e *note
ProcessPoolExecutor: 1d6.  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: 1d6. 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<3>,  Next: datetime<3>,  Prev: concurrent futures<3>,  Up: Módulos melhorados<6>

1.6.6.5 curses
..............

Adicionadas as funções *note curses.get_escdelay(): ae2, *note
curses.set_escdelay(): ae3, *note curses.get_tabsize(): ae4. e *note
curses.set_tabsize(): ae5.  (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<3>,  Next: distutils<3>,  Prev: curses<3>,  Up: Módulos melhorados<6>

1.6.6.6 datetime
................

Os métodos *note isocalendar(): ae7. de *note datetime.date: 1f9. e
*note isocalendar(): ae8. de *note datetime.datetime: 4dc. agora
retornam uma *note namedtuple(): 4da. em vez de uma *note tuple: 608.
(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<3>,  Up: Módulos melhorados<6>

1.6.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<6>

1.6.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<3>,  Prev: fcntl<2>,  Up: Módulos melhorados<6>

1.6.6.9 ftplib
..............

*note FTP: aec. e *note FTP_TLS: aed. agora levantam a *note ValueError:
2ea. 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<3>,  Next: hashlib<4>,  Prev: ftplib<2>,  Up: Módulos melhorados<6>

1.6.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(): aef. 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<2>,  Prev: gc<3>,  Up: Módulos melhorados<6>

1.6.6.11 hashlib
................

O módulo *note hashlib: 6c. 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<2>,  Next: IDLE e idlelib<3>,  Prev: hashlib<4>,  Up: Módulos melhorados<6>

1.6.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: af2.
(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<2>,  Prev: http<2>,  Up: Módulos melhorados<6>

1.6.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(): a02. (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<2>,  Next: importlib<3>,  Prev: IDLE e idlelib<3>,  Up: Módulos melhorados<6>

1.6.6.14 imaplib
................

*note IMAP4: af5. e *note IMAP4_SSL: af6. agora possuem o parâmetro
opcional 'timeout' para seus construtores.  Também, o método *note
open(): af7. agora possui um parâmetro opcional 'timeout' com esta
alteração.  Os métodos substituídos de *note IMAP4_SSL: af6. e *note
IMAP4_stream: af8. foram aplicados nesta alteração.  (Contribuição de
Dong-hee Na em bpo-38615(1).)

*note imaplib.IMAP4.unselect(): af9. foi adicionado.  *note
imaplib.IMAP4.unselect(): af9. 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(): afa, 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<5>,  Prev: imaplib<2>,  Up: Módulos melhorados<6>

1.6.6.15 importlib
..................

Para melhorar a consistência com as instruções de importação, *note
importlib.util.resolve_name(): afc. agora levanta *note ImportError:
64f. em vez de *note ValueError: 2ea. 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(): 6ab. 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<5>,  Next: ipaddress<2>,  Prev: importlib<3>,  Up: Módulos melhorados<6>

1.6.6.16 inspect
................

*note inspect.BoundArguments.arguments: afe. 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<5>,  Prev: inspect<5>,  Up: Módulos melhorados<6>

1.6.6.17 ipaddress
..................

*note ipaddress: 84. 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: 507.  Se presente, o ID da zona de escopo está
disponível através do atributo *note scope_id: b00.  (Contribuição de
Oleksandr Pavliuk em bpo-34788(1).)

A partir do Python 3.9.5, o módulo *note ipaddress: 84. 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<5>,  Next: multiprocessing<3>,  Prev: ipaddress<2>,  Up: Módulos melhorados<6>

1.6.6.18 math
.............

Expandida a função *note math.gcd(): b02. 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(): b03.: 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(): 6b5.: 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(): b04.: 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<3>,  Next: nntplib,  Prev: math<5>,  Up: Módulos melhorados<6>

1.6.6.19 multiprocessing
........................

A classe *note multiprocessing.SimpleQueue: b06. tem um novo método
*note close(): b07. 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<6>,  Prev: multiprocessing<3>,  Up: Módulos melhorados<6>

1.6.6.20 nntplib
................

‘NNTP’ e ‘NNTP_SSL’ agora levantam uma exceção *note ValueError: 2ea. 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<6>,  Next: pathlib<9>,  Prev: nntplib,  Up: Módulos melhorados<6>

1.6.6.21 os
...........

Adicionadas as constantes *note CLD_KILLED: b0a. e *note CLD_STOPPED:
b0b. para ‘si_code’.  (Contribuição de Donghee Na em bpo-38493(1).)

Exposta *note os.pidfd_open(): 699. específica do Linux (bpo-38692(2)) e
*note os.P_PIDFD: b0c. (bpo-38713(3)) para gerenciamento de processos
com descritores de arquivo.

A função *note os.unsetenv(): 25b. agora também está disponível no
Windows.  (Contribuição de Victor Stinner em bpo-39413(4).)

As funções *note os.putenv(): 25a. e *note os.unsetenv(): 25b. estão
agora sempre disponíveis.  (Contribuição de Victor Stinner em
bpo-39395(5).)

Adicionada a função *note os.waitstatus_to_exitcode(): b0d.: 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<9>,  Next: pdb<5>,  Prev: os<6>,  Up: Módulos melhorados<6>

1.6.6.22 pathlib
................

Adicionado *note pathlib.Path.readlink(): b0f, que age de maneira
semelhante a *note os.readlink(): b10.  (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<5>,  Next: poplib,  Prev: pathlib<9>,  Up: Módulos melhorados<6>

1.6.6.23 pdb
............

No Windows, agora *note Pdb: 272. 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<5>,  Up: Módulos melhorados<6>

1.6.6.24 poplib
...............

*note POP3: b13. e *note POP3_SSL: b14. agora levantam a *note
ValueError: 2ea. 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<2>,  Prev: poplib,  Up: Módulos melhorados<6>

1.6.6.25 pprint
...............

*note pprint: b3. agora pode imprimir *note types.SimpleNamespace: 4df.
(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<2>,  Next: random<3>,  Prev: pprint<2>,  Up: Módulos melhorados<6>

1.6.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__: b17.  (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<2>,  Up: Módulos melhorados<6>

1.6.6.27 random
...............

Adicionado um novo método *note random.Random.randbytes(): b19.: 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<6>

1.6.6.28 signal
...............

Exposta a *note signal.pidfd_send_signal(): b1b. 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<4>,  Prev: signal,  Up: Módulos melhorados<6>

1.6.6.29 smtplib
................

*note SMTP: b1d. e *note SMTP_SSL: b1e. agora levantam uma *note
ValueError: 2ea. 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: b1f. 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<4>,  Next: time<3>,  Prev: smtplib,  Up: Módulos melhorados<6>

1.6.6.30 socket
...............

O módulo *note socket: d1. agora exporta a constante *note
CAN_RAW_JOIN_FILTERS: b21. 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: b22. 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(): b23. e
*note socket.recv_fds(): b24.  (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<4>,  Up: Módulos melhorados<6>

1.6.6.31 time
.............

No AIX, *note thread_time(): b26. 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<6>

1.6.6.32 sys
............

Adicionado um novo atributo *note sys.platlibdir: b28.: 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: b29. 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<7>,  Prev: sys<6>,  Up: Módulos melhorados<6>

1.6.6.33 tracemalloc
....................

Adicionada *note tracemalloc.reset_peak(): b2b. 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<7>,  Next: unicodedata<5>,  Prev: tracemalloc,  Up: Módulos melhorados<6>

1.6.6.34 typing
...............

PEP 593(1) introduziu um tipo *note typing.Annotated: b2d. para decorar
tipos existentes com metadados específicos de contexto e o novo
parâmetro ‘include_extras’ para *note typing.get_type_hints(): 8b5. 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<5>,  Next: venv<3>,  Prev: typing<7>,  Up: Módulos melhorados<6>

1.6.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<5>,  Up: Módulos melhorados<6>

1.6.6.36 venv
.............

Os scripts de ativação fornecidos por *note venv: 117. 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<6>

1.6.6.37 xml
............

Os caracteres de espaço em branco nos atributos agora são preservados ao
serializar *note xml.etree.ElementTree: 12b. 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<6>,  Next: Descontinuados<8>,  Prev: Módulos melhorados<6>,  Up: O que há de novo no Python 3 9

1.6.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: dc. 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(): b32. 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: b33, *note
     tuple: 608, *note set: 184, *note frozenset: 7e7, *note list: 24c,
     *note dict: 183.) 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: b34. de operação flutuante agora tem um
     melhor desempenho.  Além disso, a mensagem de *note
     ZeroDivisionError: b35. 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<8>,  Next: Removidos<8>,  Prev: Otimizações<6>,  Up: O que há de novo no Python 3 9

1.6.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(): b37. aceita instâncias da *note
     float: 196. com valores inteiros não negativos (como ‘5.0’).  Ela
     levanta uma *note ValueError: 2ea. para flutuadores não integrais e
     negativos.  Agora está descontinuado.  Nas versões futuras do
     Python, será levantada uma *note TypeError: 198. 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: 9.

   * 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: 1a2. 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: 198. em uma versão futura do
     Python.  (Contribuição de Josh Rosenberg em bpo-35712(3).)

   * O módulo *note random: bd. 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: 87a, *note int: 19b, *note float: 196, *note
     str: 169, *note bytes: 192. e *note bytearray: 342.

   * A abertura do arquivo *note GzipFile: 650. 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(): 69c. 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: 11. 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: 9. 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:
     9. 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:
     164. é inicializada por *note Py_Initialize(): 45d. 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(): 753. 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:
     abc.  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(): 943. 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<8>,  Next: Portando para Python 3 9,  Prev: Descontinuados<8>,  Up: O que há de novo no Python 3 9

1.6.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: 4b8.: 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:
     87a.  É 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(): b39. e *note
     sys.setswitchinterval(): b3a. 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(): b3b. 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: 176. foi removido.
     Ele foi descontinuado desde o Python 3.8.  Use *note is_alive():
     b3c. ao invés.  (Contribuição de Donghee Na em bpo-37804(8).)

   * Os métodos ‘getchildren()’ e ‘getiterator()’ das classes *note
     ElementTree: b3d. e *note Element: 360. no módulo *note
     ElementTree: 12b. 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: b0. foi removida.  Ela tinha sido
     descontinuada desde o Python 3.4.  Use as funções *note load():
     b3e, *note loads(): b3f, *note dump(): b40. e *note dumps(): b41.
     Além disso, o parâmetro 'use_builtin_types' foi removido, os
     objetos padrão *note bytes: 192. 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(): b42. e *note base64.decodebytes(): b43.
     (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(): b02. em seu
     lugar.  (Contribuição de Victor Stinner em bpo-39350(15).)

   * O parâmetro 'buffering' de *note bz2.BZ2File: a5c. foi removido.
     Desde Python 3.0, ele era ignorado e ao usá-lo emitia uma *note
     DeprecationWarning: 1a3.  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(): b44. foi removido.  A
     partir do Python 3.1, ele foi descontinuado e ignorado; usá-lo
     emitia uma *note DeprecationWarning: 1a3. 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: 3f4. 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: 32f.
     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(): 69a. e *note asyncio.all_tasks(): b45. em
     seu lugar.  (Contribuição de Rémi Lapeyre em bpo-40967(22))

   * O método ‘unescape()’ na classe *note html.parser.HTMLParser: a6d.
     foi removido (foi descontinuado desde o Python 3.4).  *note
     html.unescape(): b46. 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<8>,  Up: O que há de novo no Python 3 9

1.6.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<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>.


File: python.info,  Node: Alterações na API Python<5>,  Next: Alterações na API C<10>,  Up: Portando para Python 3 9

1.6.10.1 Alterações na API Python
.................................

   * *note __import__(): ac7. e *note importlib.util.resolve_name():
     afc. agora levanta *note ImportError: 64f. onde anteriormente
     levantava *note ValueError: 2ea.  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: 117. não são mais casos
     especiais quando ‘__VENV_PROMPT__’ está definido como ‘""’.

   * O método *note select.epoll.unregister(): b49. não ignora mais o
     erro *note EBADF: b4a.  (Contribuição de Victor Stinner em
     bpo-39239(1).)

   * O parâmetro 'compresslevel' de *note bz2.BZ2File: a5c. 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: 7b. agora ignora a variável de ambiente
     *note PYTHONCASEOK: b4b. quando as opções de linha de comando *note
     -E: b4c. ou *note -I: b4d. estão sendo usadas.

   * O parâmetro 'encoding' foi adicionado às classes *note ftplib.FTP:
     aec. e *note ftplib.FTP_TLS: aed. 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(): ada. foi adicionado
     a *note AbstractEventLoop: b4e, 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(): b4f. 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: 6c2. agora retorna *note
     NotImplemented: 1a2. ao invés de levantar um *note TypeError: 198.
     quando passado algo diferente de uma instância de ‘str’ ou *note
     PurePath: 6c2.  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: 84. 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(): b50. trata os zeros à esquerda como notação
     octal.  A implementação glibc de *note inet_pton(): b51. moderna
     não aceita nenhum zeros à esquerda.  (Contribuição de Christian
     Heimes em bpo-36384(10)).

   * *note codecs.lookup(): b52. agora normaliza o nome da codificação
     da mesma forma que *note encodings.normalize_encoding(): 9f3,
     exceto que *note codecs.lookup(): b52. 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<10>,  Next: Alterações de bytecode do CPython<6>,  Prev: Alterações na API Python<5>,  Up: Portando para Python 3 9

1.6.10.2 Alterações na API C
............................

   * Instâncias de *note tipos alocados por heap: b54. (como aquelas
     criadas com *note PyType_FromSpec(): 792. 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: 977, 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(PyObject *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: b54. 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(): 631. 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<6>,  Prev: Alterações na API C<10>,  Up: Portando para Python 3 9

1.6.10.3 Alterações de bytecode do CPython
..........................................

   * O opcode ‘LOAD_ASSERTION_ERROR’ foi adicionado para tratar a
     instrução *note assert: b56.  Anteriormente, a instrução assert não
     funcionava corretamente se a exceção *note AssertionError: 8ad.
     estivesse sendo ocultada.  (Contribuição de Zackery Spytz em
     bpo-34880(1).)

   * O código de operação *note COMPARE_OP: b57. 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<11>,  Prev: Portando para Python 3 9,  Up: O que há de novo no Python 3 9

1.6.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: b28.  Veja o atributo *note
     sys.platlibdir: b28. 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: b59.
     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<11>,  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.6.12 Alterações na API C
--------------------------

* Menu:

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


File: python.info,  Node: Novas funcionalidades<11>,  Next: Portando para Python 3 9<2>,  Up: Alterações na API C<11>

1.6.12.1 Novas funcionalidades
..............................

   * PEP 573(1): Adicionada *note PyType_FromModuleAndSpec(): 768. para
     associar um módulo a uma classe; *note PyType_GetModule(): b5c. e
     *note PyType_GetModuleState(): b5d. para obter o módulo e seu
     estado; e *note PyCMethod: 95d. e *note METH_METHOD: b5e. 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(): 982.: obtém um código
     de quadro.  Adiciona a função *note PyFrame_GetBack(): 97e.: obtém
     o próximo quadro externo.  (Contribuição de Victor Stinner em
     bpo-40421(3).)

   * Adicionada *note PyFrame_GetLineNumber(): 983. à API C limitada.
     (Contribuição de Victor Stinner em bpo-40421(4).)

   * Adicionada as funções *note PyThreadState_GetInterpreter(): b5f. e
     *note PyInterpreterState_Get(): 640. para obter o interpretador.
     Adiciona a função *note PyThreadState_GetFrame(): 986. para obter o
     quadro atual de um estado de thread do Python.  Adiciona a função
     *note PyThreadState_GetID(): b60.: 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():
     630. à 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(): 3cf. e *note
          Py_LeaveRecursiveCall(): b61. 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(): b62. é 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(): b63. e *note
     PyObject_GC_IsFinalized(): b64. 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(): b65. 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<9>,  Prev: Novas funcionalidades<11>,  Up: Alterações na API C<11>

1.6.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: b67, *note
     m_clear: b68. e *note m_free: b69. de *note PyModuleDef: b6a. 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:
     b6b.).  Mais precisamente, estas funções são são chamados se *note
     m_size: b6c. for maior que 0 e o estado do módulo (como retornado
     por *note PyModule_GetState(): b6d.) 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(): b6e. 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: 3e1. quando a opção ‘-E’ é usada (se *note
     PyConfig.use_environment: 408. 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: b6f. 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(): b70. é 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(): b71. foi convertida para uma
          função.

        * A macro ‘PyObject_NEW()’ se torna um apelido para a macro
          *note PyObject_New: b72. e a macro ‘PyObject_NEW_VAR()’ se
          torna um apelido para a macro *note PyObject_NewVar: b73.
          Elas não acessam mais diretamente o membro *note
          PyTypeObject.tp_basicsize: b74.

        * A macro ‘PyObject_GET_WEAKREFS_LISTPTR()’ foi convertida para
          uma função: a macro acessava diretamente o membro *note
          PyTypeObject.tp_weaklistoffset: b75.

        * A macro *note PyObject_CheckBuffer(): 62d. foi convertida para
          uma função: a macro acessava diretamente o membro *note
          PyTypeObject.tp_as_buffer: b76.

        * *note PyIndex_Check(): b77. 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: b78.

     (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<9>,  Prev: Portando para Python 3 9<2>,  Up: Alterações na API C<11>

1.6.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: b7a. 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():
     b7b. 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(): aab. 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<11>,  Up: O que há de novo no Python 3 9

1.6.13 Alterações notáveis no Python 3.9.1
------------------------------------------

* Menu:

* typing: typing<8>.
* 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<8>,  Next: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac,  Up: Alterações notáveis no Python 3 9 1

1.6.13.1 typing
...............

O comportamento de *note typing.Literal: a4b. 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:
     198. durante as comparações de igualdade se algum de seus
     parâmetros não for *note hasheável: 819.  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<8>,  Up: Alterações notáveis no Python 3 9 1

1.6.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.6.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.6.14.1 collections.abc
........................

*note collections.abc.Callable: 9e1. genérica agora nivela os parâmetros
de tipo, semelhante ao que *note typing.Callable: 9be. 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: 9e2. 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(): 2ab. ou ‘__args__’ precisa levar em conta esta
mudança.  Um *note DeprecationWarning: 1a3. 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:
1a3. se tornará uma *note TypeError: 198. 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.6.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(): 31d. e *note urllib.parse.parse_qsl(): 31c.
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.6.15 Alterações notáveis no Python 3.9.3
------------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: aec.
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.6.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.6.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: 110. 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.6.17 Recursos de segurança notáveis no 3.9.14
-----------------------------------------------

Converter entre *note int: 19b. e *note str: 169. 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: 2ea. 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: df.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 800.  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.6.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.6.18.1 tarfile
................

   * Os métodos de extração em *note tarfile: e4. e *note
     shutil.unpack_archive(): 68b, 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: 68c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a3.  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.7 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: 142. 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<6>.
* Novos módulos: Novos módulos<7>.
* Módulos melhorados: Módulos melhorados<7>.
* Otimizações: Otimizações<7>.
* Mudanças a construções e API C::
* Descontinuados: Descontinuados<9>.
* 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<7>,  Next: Novas funcionalidades<12>,  Up: O que há de novo no Python 3 8

1.7.1 Resumo – Destaques da versão
----------------------------------


File: python.info,  Node: Novas funcionalidades<12>,  Next: Outras mudanças na linguagem<6>,  Prev: Resumo – Destaques da versão<7>,  Up: O que há de novo no Python 3 8

1.7.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<12>

1.7.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(): 835. 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<12>

1.7.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(): b8f. 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():
835. 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: d7, 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: 1e.:

     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<12>

1.7.2.3 Cache do sistema de arquivos paralelo para arquivos de bytecode compilados
..................................................................................

A nova configuração *note PYTHONPYCACHEPREFIX: b91. (também disponível
como *note -X: 16f. ‘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: b92. (*note
None: 87a. 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<12>

1.7.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: 503. 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():
28d. e a variável de ambiente *note PYTHONDUMPREFS: b94, pode ser
configurada usando a nova opção de compilação *note ./configure
-with-trace-refs: 62a.  (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<12>

1.7.2.5 O suporte a f-strings ‘=’ para expressões de auto-documentação e depuração
..................................................................................

Adicionado um especificador ‘=’ para *note f-string: 65f.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: 19a. 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<12>

1.7.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<12>

1.7.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: 3f4.

   * *note PyPreConfig: b99.

   * *note PyStatus: b9a.

   * *note PyWideStringList: b9b.

Novas Funções:

   * *note PyConfig_Clear(): b9c.

   * *note PyConfig_InitIsolatedConfig(): b9d.

   * *note PyConfig_InitPythonConfig(): b9e.

   * *note PyConfig_Read(): 988.

   * *note PyConfig_SetArgv(): b9f.

   * *note PyConfig_SetBytesArgv(): ba0.

   * *note PyConfig_SetBytesString(): ba1.

   * *note PyConfig_SetString(): ba2.

   * *note PyPreConfig_InitIsolatedConfig(): ba3.

   * *note PyPreConfig_InitPythonConfig(): ba4.

   * *note PyStatus_Error(): ba5.

   * *note PyStatus_Exception(): ba6.

   * *note PyStatus_Exit(): ba7.

   * *note PyStatus_IsError(): ba8.

   * *note PyStatus_IsExit(): ba9.

   * *note PyStatus_NoMemory(): baa.

   * *note PyStatus_Ok(): bab.

   * *note PyWideStringList_Append(): bac.

   * *note PyWideStringList_Insert(): bad.

   * *note Py_BytesMain(): bae.

   * *note Py_ExitStatusException(): baf.

   * *note Py_InitializeFromConfig(): 3f3.

   * *note Py_PreInitialize(): 41b.

   * *note Py_PreInitializeFromArgs(): bb0.

   * *note Py_PreInitializeFromBytesArgs(): bb1.

   * *note Py_RunMain(): bb2.

Esse PEP também adiciona os campos ‘_PyRuntimeState.preconfig’ (tipo
*note PyPreConfig: b99.) e ‘PyInterpreterState.config’ (tipo *note
PyConfig: 3f4.) 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: 63a. 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<12>

1.7.2.8 PEP 590: Vectorcall: um protocolo de chamada rápida para CPython
........................................................................

*note O protocolo vectorcall: 769. é adicionado à API Python/C. Ele visa
formalizar as otimizações existentes que já foram feitas para várias
classes.  Qualquer *note tipo estático: 978. 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<12>

1.7.2.9 Protocolo de Pickle 5 com buffers de dados fora da banda
................................................................

Quando *note pickle: ab. é 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: ab. 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<7>,  Prev: Novas funcionalidades<12>,  Up: O que há de novo no Python 3 8

1.7.3 Outras mudanças na linguagem
----------------------------------

   * A instrução *note continue: 180. era ilegal na cláusula *note
     finally: 1b0. 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: 3c0, *note int: 19b. e *note
     fractions.Fraction: 212. agora têm o método *note
     as_integer_ratio(): bb6. como o encontrado em *note float: 196. e
     *note decimal.Decimal: 1fd.  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: 19b, *note float: 196. e *note
     complex: 197. agora usarão o método especial *note __index__():
     19e, se disponível, e o método correspondente *note __int__(): 19d,
     *note __float__(): bb7. ou *note __complex__(): 7f2. 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: be.:

          >>> 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(): a5b.  (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: bb8. e *note return: 1af. 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: 1ae. com uma
     sugestão útil.  Isso melhora apenas tendo um *note TypeError: 198.
     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: 1f9. ou *note datetime.datetime: 4dc. e *note
     datetime.timedelta: bb9. 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: bb9, como *note
     astimezone(): bba.  (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: bbb. 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: 32d. 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(): 1a4. 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__(): bbc. 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__(): bbd. 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<7>,  Next: Módulos melhorados<7>,  Prev: Outras mudanças na linguagem<6>,  Up: O que há de novo no Python 3 8

1.7.4 Novos módulos
-------------------

   * O novo módulo *note importlib.metadata: 7e. 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<7>,  Next: Otimizações<7>,  Prev: Novos módulos<7>,  Up: O que há de novo no Python 3 8

1.7.5 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: ast<5>,  Next: asyncio<9>,  Up: Módulos melhorados<7>

1.7.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(): bc1. 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(): 1c2. 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: 930. e *note await: 18d. 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<9>,  Next: builtins,  Prev: ast<5>,  Up: Módulos melhorados<7>

1.7.5.2 asyncio
...............

*note asyncio.run(): 2f1. passou da API provisória para a estável.  Esta
função pode ser usada para executar uma *note corrotina: 6ae. 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(): 2f1. 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: 18d.  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: 4ce. agora herda de *note
BaseException: 7cc. em vez de *note Exception: bc3. e não mais herda de
*note concurrent.futures.CancelledError: bc4.  (Contribuição de Yury
Selivanov em bpo-32528(3).)

No Windows, o loop de eventos padrão é agora *note ProactorEventLoop:
812.  (Contribuição de Victor Stinner em bpo-34687(4).)

*note ProactorEventLoop: 812. agora também tem suporte a UDP.
(Contribuição de Adam Meily e Andrew Svetlov em bpo-29883(5).)

*note ProactorEventLoop: 812. pode agora ser interrompido por *note
KeyboardInterrupt: bbb. (“CTRL+C”).  (Contribuição de Vladimir Matveev
em bpo-23057(6).)

Adicionado *note asyncio.Task.get_coro(): bc5. para obter a corrotina de
dentro de um *note asyncio.Task: 1c7.  (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(): 1c9. ou o método de
loop de evento *note create_task(): 1ca. ou chamando o método *note
set_name(): bc6. no objeto de tarefa.  O nome da tarefa é visível na
saída de ‘repr()’ de *note asyncio.Task: 1c7. e também pode ser
recuperado usando o método *note get_name(): bc7.  (Contribuição de Alex
Grönholm em bpo-34270(8).)

Adicionado suporte a Happy Eyeballs(9) para *note
asyncio.loop.create_connection(): 80d.  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,  Next: collections,  Prev: asyncio<9>,  Up: Módulos melhorados<7>

1.7.5.3 builtins
................

A função embutida *note compile(): 4ab. foi aprimorada para aceitar o
sinalizador ‘ast.PyCF_ALLOW_TOP_LEVEL_AWAIT’.  Com esse novo sinalizador
passado, *note compile(): 4ab. 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,  Up: Módulos melhorados<7>

1.7.5.4 collections
...................

O método *note _asdict(): bca. para *note collections.namedtuple(): 4da.
agora retorna a *note dict: 183. em vez de um *note
collections.OrderedDict: 7e8.  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<7>

1.7.5.5 cProfile
................

A classe *note cProfile.Profile: bcc. 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<4>,  Prev: cProfile,  Up: Módulos melhorados<7>

1.7.5.6 csv
...........

O *note csv.DictReader: bce. agora retorna instâncias de *note dict:
183. em vez de um *note collections.OrderedDict: 7e8.  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<4>,  Next: ctypes<3>,  Prev: csv<2>,  Up: Módulos melhorados<7>

1.7.5.7 curses
..............

Adicionada uma nova variável contendo informações de versão estruturada
para a biblioteca ncurses subjacente: *note ncurses_version: bd0.
(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<3>,  Next: datetime<4>,  Prev: curses<4>,  Up: Módulos melhorados<7>

1.7.5.8 ctypes
..............

No Windows, *note CDLL: bd2. 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(): bd3. .  (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<4>,  Next: functools<3>,  Prev: ctypes<3>,  Up: Módulos melhorados<7>

1.7.5.9 datetime
................

Adicionados novos construtores alternativos *note
datetime.date.fromisocalendar(): bd5. e *note
datetime.datetime.fromisocalendar(): bd6, que constroem objetos de *note
date: 1f9. e *note datetime: 4dc. 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<3>,  Next: gc<4>,  Prev: datetime<4>,  Up: Módulos melhorados<7>

1.7.5.10 functools
..................

*note functools.lru_cache(): bd8. 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(): 758,
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():
bd9. que converte métodos em *note funções genéricas: bda. usando *note
despacho único: bdb.:

     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<4>,  Next: gettext,  Prev: functools<3>,  Up: Módulos melhorados<7>

1.7.5.11 gc
...........

*note get_objects(): 9fa. 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<4>,  Up: Módulos melhorados<7>

1.7.5.12 gettext
................

Adicionado *note pgettext(): bde. 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<7>

1.7.5.13 gzip
.............

Adicionado o parâmetro 'mtime' em *note gzip.compress(): 843. para saída
reproduzível.  (Contribuição de Guo Ci Teo em bpo-34898(1).)

A exceção *note BadGzipFile: be0. agora é levantada em vez de *note
OSError: 2bf. 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<6>,  Prev: gzip<3>,  Up: Módulos melhorados<7>

1.7.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<6>,  Next: io<5>,  Prev: IDLE e idlelib<4>,  Up: Módulos melhorados<7>

1.7.5.15 inspect
................

A função *note inspect.getdoc(): be3. agora pode encontrar docstrings
para ‘__slots__’ se esse atributo for *note dict: 183. onde os valores
são docstrings.  Isso fornece opções de documentação semelhantes às que
já temos para *note property(): 4ad, *note classmethod(): 488. e *note
staticmethod(): 450.:

     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<5>,  Next: itertools<5>,  Prev: inspect<6>,  Up: Módulos melhorados<7>

1.7.5.16 io
...........

No modo de desenvolvimento (*note -X: 16f. ‘env’) e na *note compilação
de depuração: 503, o finalizador *note io.IOBase: 4ff. 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<5>,  Next: json tool,  Prev: io<5>,  Up: Módulos melhorados<7>

1.7.5.17 itertools
..................

A função *note itertools.accumulate(): be6. 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<5>,  Up: Módulos melhorados<7>

1.7.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<6>,  Prev: json tool,  Up: Módulos melhorados<7>

1.7.5.19 logging
................

Adicionado um argumento nomeado 'force' a *note logging.basicConfig():
be9.  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<6>,  Next: mmap<2>,  Prev: logging<2>,  Up: Módulos melhorados<7>

1.7.5.20 math
.............

Adicionada nova função *note math.dist(): beb. 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(): bec. 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(): bed, como função análoga a
*note sum(): 68a. 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(): 8d5. e
*note math.comb(): 8d4.:

     >>> 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(): bee. 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(): bef.:

     >>> 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(): b37. 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<4>,  Prev: math<6>,  Up: Módulos melhorados<7>

1.7.5.21 mmap
.............

A classe *note mmap.mmap: 513. agora possui o método *note madvise():
bf1. 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<4>,  Next: os<7>,  Prev: mmap<2>,  Up: Módulos melhorados<7>

1.7.5.22 multiprocessing
........................

Adicionado novo módulo *note multiprocessing.shared_memory: 9d.
(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<7>,  Next: os path<5>,  Prev: multiprocessing<4>,  Up: Módulos melhorados<7>

1.7.5.23 os
...........

Adicionada nova função *note add_dll_directory(): bd3. 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: 2e.
(Contribuição de Steve Dower em bpo-36085(1).)

Uma nova função *note os.memfd_create(): bf4. 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(): 26c.
agora percorrerá qualquer objeto suportado pelo sistema operacional,
enquanto *note os.lstat(): 6bd. abrirá apenas pontos de nova análise que
se identifiquem como “substitutos de nome”, enquanto outros serão
abertos como para *note os.stat(): 26c.  Em todos os casos, *note
os.stat_result.st_mode: bf5. 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: bf6.

No Windows, *note os.readlink(): b10. agora pode ler junções de
diretório.  Observe que *note islink(): bf7. 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(): b10. 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<10>,  Prev: os<7>,  Up: Módulos melhorados<7>

1.7.5.24 os.path
................

Funções de *note os.path: a6. que retornam um resultado booleano como
*note exists(): bf9, *note lexists(): bfa, *note isdir(): bfb, *note
isfile(): bfc, *note islink(): bf7. e *note ismount(): bfd. agora
retornam ‘False’ em vez de levantar *note ValueError: 2ea. ou suas
subclasses *note UnicodeEncodeError: 87c. e *note UnicodeDecodeError:
bfe. 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(): bff. 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(): bfb. no Windows não retorna mais ‘True’ para um link para
um diretório inexistente.

*note realpath(): 261. 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<10>,  Next: pickle<2>,  Prev: os path<5>,  Up: Módulos melhorados<7>

1.7.5.25 pathlib
................

Os métodos *note pathlib.Path: 265. que retornam um resultado booleano
como *note exists(): c01, *note is_dir(): 534, *note is_file(): 533,
*note is_mount(): c02, *note is_symlink(): c03, *note is_block_device():
c04, *note is_char_device(): c05, *note is_fifo(): c06, *note
is_socket(): c07. agora retornam ‘False’ em vez de levantar *note
ValueError: 2ea. ou sua subclasse *note UnicodeEncodeError: 87c. 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<2>,  Next: plistlib,  Prev: pathlib<10>,  Up: Módulos melhorados<7>

1.7.5.26 pickle
...............

Extensões de *note pickle: ab, que atuem como subclasse da classe
otimizada para C *note Pickler: c09, agora podem substituir a lógica de
“pickling” de funções e classes definindo o método especial *note
reducer_override(): c0a.  (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<2>,  Up: Módulos melhorados<7>

1.7.5.27 plistlib
.................

Adicionado novo *note plistlib.UID: c0c. 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<7>

1.7.5.28 pprint
...............

O módulo *note pprint: b3. 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():
c0e, que é como *note pprint.pprint(): a1f, 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<7>

1.7.5.29 py_compile
...................

*note py_compile.compile(): c10. 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<7>

1.7.5.30 shlex
..............

A nova função *note shlex.join(): c12. atua como o inverso da *note
shlex.split(): 753.  (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<5>,  Prev: shlex,  Up: Módulos melhorados<7>

1.7.5.31 shutil
...............

*note shutil.copytree(): c14. agora aceita um novo argumento nomeado
‘dirs_exist_ok’.  (Contribuição de Josh Bronson em bpo-20849(1).)

*note shutil.make_archive(): 6cf. 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: e4.  (Contribuição de C.A.M. Gerlach em
bpo-30661(2).)

*note shutil.rmtree(): 353. 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<5>,  Next: ssl<5>,  Prev: shutil<4>,  Up: Módulos melhorados<7>

1.7.5.32 socket
...............

Adicionadas as funções de conveniência *note create_server(): c16. e
*note has_dualstack_ipv6(): c17. 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(): c18, *note
socket.if_nametoindex(): c19. e *note socket.if_indextoname(): c1a.
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<5>,  Next: statistics<4>,  Prev: socket<5>,  Up: Módulos melhorados<7>

1.7.5.33 ssl
............

Adicionado *note post_handshake_auth: c1c. para ativar e *note
verify_client_post_handshake(): c1d. 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<5>,  Up: Módulos melhorados<7>

1.7.5.34 statistics
...................

Adicionada *note statistics.fmean(): c1f. como uma variante de ponto
flutuante mais rápida de *note statistics.mean(): 8d6.  (Contribuição de
Raymond Hettinger e Steven D’Aprano em bpo-35904(1).)

Adicionada *note statistics.geometric_mean(): c20. (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(): c21. 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: c22, 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<7>

1.7.5.35 sys
............

Adiciona uma nova função *note sys.unraisablehook(): 501, 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(): 1b3.).
(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<5>,  Prev: sys<7>,  Up: Módulos melhorados<7>

1.7.5.36 tarfile
................

O módulo *note tarfile: e4. 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<5>,  Next: tokenize<2>,  Prev: tarfile<5>,  Up: Módulos melhorados<7>

1.7.5.37 threading
..................

Adiciona uma nova função *note threading.excepthook(): a41. que manipula
a exceção não capturada *note threading.Thread.run(): c26.  Pode ser
substituída para controlar como exceções não capturadas *note
threading.Thread.run(): c26. são manipuladas.  (Contribuição de Victor
Stinner em bpo-1230540(1).)

Adiciona uma nova função *note threading.get_native_id(): c27. e um
atributo *note native_id: c28. à classe *note threading.Thread: 176.
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: c27. 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<5>,  Prev: threading<5>,  Up: Módulos melhorados<7>

1.7.5.38 tokenize
.................

O módulo *note tokenize: 101. 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<5>,  Next: time<4>,  Prev: tokenize<2>,  Up: Módulos melhorados<7>

1.7.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<9>,  Prev: tkinter<5>,  Up: Módulos melhorados<7>

1.7.5.40 time
.............

Adiciona o novo relógio *note CLOCK_UPTIME_RAW: c2c. 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<9>,  Next: unicodedata<6>,  Prev: time<4>,  Up: Módulos melhorados<7>

1.7.5.41 typing
...............

O módulo *note typing: 10a. incorpora vários novos recursos:

   * Um tipo de dicionário com tipos por chave.  Veja PEP 589(1) e *note
     typing.TypedDict: 330.  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: a4b.
     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: 567. e *note typing.final(): 8b1.  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:
     564. e *note typing.runtime_checkable(): 669.  ABCs simples como
     *note typing.SupportsInt: c2e. agora são subclasses de ‘Protocol’.

   * Nova classe de protocolo *note typing.SupportsIndex: c2f.

   * Novas funções *note typing.get_origin(): 2aa. e *note
     typing.get_args(): 2ab.

   ---------- 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<6>,  Next: unittest<7>,  Prev: typing<9>,  Up: Módulos melhorados<7>

1.7.5.42 unicodedata
....................

O módulo *note unicodedata: 10b. agora foi atualizado para usar o
Unicode 12.1.0(1).

A nova função *note is_normalized(): c31. 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<7>,  Next: venv<4>,  Prev: unicodedata<6>,  Up: Módulos melhorados<7>

1.7.5.43 unittest
.................

Adicionada *note AsyncMock: c33. para dar suporte a uma versão
assíncrona de *note Mock: c34.  Também foram adicionadas novas funções
apropriadas para teste.  (Contribuição de Lisa Roach em bpo-26467(1)).

Adicionados *note addModuleCleanup(): c35. e *note addClassCleanup():
c36. a unittest para dar suporte a limpezas para *note setUpModule():
c37. e *note setUpClass(): c38.  (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: 10c. ganhou suporte a corrotinas a serem usadas
como casos de teste com *note unittest.IsolatedAsyncioTestCase: 35e.
(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<7>,  Up: Módulos melhorados<7>

1.7.5.44 venv
.............

*note venv: 117. 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<7>

1.7.5.45 weakref
................

Os objetos proxy retornados por *note weakref.proxy(): c3b. 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<7>

1.7.5.46 xml
............

Como atenuação a DTD e recuperação de entidade externa, os módulos *note
xml.dom.minidom: 128. e *note xml.sax: 12f. 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: 12b.
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: 12b. fornece uma nova função *note
canonicalize(): c3d. que implementa C14N 2.0.  (Contribuição de Stefan
Behnel em bpo-13611(3).)

O objeto de destino de *note xml.etree.ElementTree.XMLParser: c3e. 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: c3f. 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<7>

1.7.5.47 xmlrpc
...............

*note xmlrpc.client.ServerProxy: c41. 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<7>,  Next: Mudanças a construções e API C,  Prev: Módulos melhorados<7>,  Up: O que há de novo no Python 3 8

1.7.6 Otimizações
-----------------

   * O módulo *note subprocess: dc. agora pode usar a função *note
     os.posix_spawn(): 528. 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(): c43, *note shutil.copy(): c44, *note
     shutil.copy2(): c45, *note shutil.copytree(): c14. e *note
     shutil.copytree(): c14. 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(): c43. usa um buffer padrão com
     tamanho maior (1 MiB em vez de 16 KiB) e é usada uma variante de
     *note shutil.copyfileobj(): c46. baseada em *note memoryview():
     165.  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: c47.  (Contribuição de Giampaolo Rodolà em
     bpo-33671(2).)

   * *note shutil.copytree(): c14. usa a função *note os.scandir(): c48.
     e todas as funções de cópia que dependem dela usam valores em cache
     de *note os.stat(): 26c.  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(): 26c. é reduzido em 38%,
     tornando *note shutil.copytree(): c14. 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: ab. 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: c49. 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: c4a. 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(): c4b. 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():
     4da.  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: 24c. 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<9>,  Prev: Otimizações<7>,  Up: O que há de novo no Python 3 8

1.7.7 Mudanças a construções e API C
------------------------------------

   * O *note sys.abiflags: c4d. 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(): 784, *note Py_DECREF(): 785.

        * *note Py_XINCREF(): c4e, *note Py_XDECREF(): 987.

        * ‘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(): c4f. 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(): 5f9, e funções de análise de argumentos,
     como *note PyArg_ParseTuple(): 3be, com unidades de formato de
     conversão de números inteiros, como ‘'i'’, agora usarão o método
     especial *note __index__(): 19e. em vez de *note __int__(): 19d, 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: 1fd. e *note Fraction: 212. ).  *note
     PyNumber_Check(): c50. agora retornará ‘1’ para objetos
     implementando ‘__index__()’.  *note PyNumber_Long(): c51, *note
     PyNumber_Float(): c52. e *note PyFloat_AsDouble(): c53. 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(): c54. (e sua macro paralela
     ‘PyObject_INIT’) em vez de em *note PyType_GenericAlloc(): c55.  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: 3ea. para o
     caminho completo do programa (*note Py_GetProgramFullPath(): 3e9.)
     em vez do nome do programa (*note Py_GetProgramName(): 3eb.).
     (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<9>,  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.7.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: 12b. agora emitem um *note
     DeprecationWarning: 1a3. em vez de *note PendingDeprecationWarning:
     abc.  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: 93e. para *note
     loop.set_default_executor(): 93f. foi descontinuado e será proibido
     no Python 3.9.  (Contribuição de Elvis Pranskevichus em
     bpo-34075(3).)

   * Os métodos *note __getitem__(): 581. de *note
     xml.dom.pulldom.DOMEventStream: 933, *note
     wsgiref.util.FileWrapper: 934. e *note fileinput.FileInput: 935.
     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: 32f. 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: 9. são consideradas descontinuadas e serão
     removidos em versões futuras do Python.  A *note Constant: 2ed.
     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: 2ee. estão agora descontinuados e não serão
     chamados nas versões futuras do Python.  Adicione o método *note
     visit_Constant(): c57. para manipular todos os nós constantes.
     (Contribuição de Serhiy Storchaka em bpo-36917(7).)

   * O *note decorador: 92f. ‘@asyncio.coroutine’ está descontinuado e
     será removido na versão 3.10.  Em vez de ‘@asyncio.coroutine’, use
     *note async def: 7e2.  (Contribuição de Andrew Svetlov em
     bpo-36921(8).)

   * Em *note asyncio: b, a passagem explícita de um argumento 'loop'
     foi descontinuado e será removido na versão 3.10 para os seguintes:
     *note asyncio.sleep(): c58, *note asyncio.gather(): 808, *note
     asyncio.shield(): c59, *note asyncio.wait_for(): 80a, *note
     asyncio.wait(): 69c, *note asyncio.as_completed(): 4c0, *note
     asyncio.Task: 1c7, *note asyncio.Lock: c5a, *note asyncio.Event:
     2f2, *note asyncio.Condition: c5b, *note asyncio.Semaphore: c5c,
     *note asyncio.BoundedSemaphore: c5d, *note asyncio.Queue: c5e,
     *note asyncio.create_subprocess_exec(): c5f. e *note
     asyncio.create_subprocess_shell(): c60.

   * A passagem explícita dos objetos da corrotina para *note
     asyncio.wait(): 69c. 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: 67.: ‘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(): c61. e *note install(): c62. 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: 176. 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: 1fd, de *note Fraction: 212. e quaisquer outros
     objetos que possam ser convertidos apenas em números inteiros com
     perda (por exemplo, que possuem o método *note __int__(): 19d, mas
     não têm o método *note __index__(): 19e.).  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(): 217, *note
          weakref.finalize(): c63, *note profile.Profile.runcall(): c64,
          ‘cProfile.Profile.runcall()’, *note bdb.Bdb.runcall(): c65,
          *note trace.Trace.runfunc(): c66. e *note curses.wrapper():
          c67.

        - 'function' em *note unittest.TestCase.addCleanup(): c68.

        - 'fn' no método *note submit(): c69. de *note
          concurrent.futures.ThreadPoolExecutor: 93e. e *note
          concurrent.futures.ProcessPoolExecutor: 1d6.

        - 'callback' em *note contextlib.ExitStack.callback(): c6a,
          ‘contextlib.AsyncExitStack.callback()’ e *note
          contextlib.AsyncExitStack.push_async_callback(): c6b.

        - 'c' e 'typeid' no metódo ‘create()’ de
          ‘multiprocessing.managers.Server’ e
          ‘multiprocessing.managers.SharedMemoryServer’.

        - 'obj' em *note weakref.finalize(): c63.

     Em versões futuras do Python, elas serão *note somente-posicionais:
     c6c.  (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<9>,  Up: O que há de novo no Python 3 8

1.7.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:
     1e. foi descontinuada e a importação deve ser feita de *note
     collections.abc: 1f.  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(): 318.  (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(): c6e. ou *note
     time.process_time(): c6f, 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: e4.  Não
     é documentada e foi descontinuada desde o Python 3.3.

   * O construtor *note XMLParser: c3e. 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: 59e.
     (Contribuição de Serhiy Storchaka em bpo-29209(6).)

   * Removido o método ‘doctype()’ de *note XMLParser: c3e.
     (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: d4. não
     expostos para o usuário.  (Contribuição de Aviv Palivoda em
     bpo-30262(9).)

   * O argumento nomeado ‘bufsize’ de *note fileinput.input(): 9f6. e
     *note fileinput.FileInput(): 935, 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.7.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<6>.
* Alterações na API C: Alterações na API C<12>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<7>.
* Ferramentas e daemons: Ferramentas e daemons<2>.


File: python.info,  Node: Alterações no comportamento do Python,  Next: Alterações na API Python<6>,  Up: Portando para o Python 3 8

1.7.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: 1ae. 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: 3c0, *note int: 19b, *note float: 196, *note complex: 197. e
     poucas classes da biblioteca padrão.  Agora eles herdam ‘__str__()’
     de *note object: c72.  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: 290. 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(): 63c,
     *note Py_END_ALLOW_THREADS(): c73. e *note PyGILState_Ensure():
     63e.  Se esse comportamento não for desejado, proteja a chamada
     verificando ‘_Py_IsFinalizing()’ ou *note sys.is_finalizing(): c74.
     (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<6>,  Next: Alterações na API C<12>,  Prev: Alterações no comportamento do Python,  Up: Portando para o Python 3 8

1.7.10.2 Alterações na API Python
.................................

   * A função *note os.getcwdb(): c76. 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: 4b1. agora pode usar *note
     os.posix_spawn(): 528. em alguns casos para melhor desempenho.  No
     Subsistema Windows para Linux e na Emulação de Usuário QEMU, o
     construtor *note Popen: 4b1. usando *note os.posix_spawn(): 528.
     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: c77. diferente de zero.  (Contribuição de Joannah
     Nanjekye e Victor Stinner em bpo-35537(3).)

   * O argumento 'preexec_fn' de * *note subprocess.Popen: 4b1. não é
     mais compatível com subinterpretadores.  O uso do parâmetro em um
     subinterpretador agora levanta *note RuntimeError: 243.
     (Contribuição de Eric Snow em bpo-34651(4), modificado por
     Christian Heimes em bpo-37951(5).)

   * O método *note imaplib.IMAP4.logout(): c78. 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(): 318.  (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(): c79. da classe *note
     tkinter.ttk.Treeview: c7a. 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(): c7b. para
     alterar a seleção.  (Contribuição de Serhiy Storchaka em
     bpo-31508(9).)

   * Os métodos *note writexml(): c7c, *note toxml(): c7d. e *note
     toprettyxml(): c7e. de *note xml.dom.minidom: 128. e o método *note
     write(): c7f. de *note xml.etree.ElementTree: 12b. 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: 36. aberto com sinalizadores
     ‘'r'’ agora é somente leitura.  *note dbm.dumb.open(): c80. 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:
     c3e. não será mais chamado e emitirá um *note RuntimeWarning: 4d1.
     em vez de um *note DeprecationWarning: 1a3.  Defina o método *note
     doctype(): c81. em um alvo para manipular uma declaração doctype
     XML. (Contribuição de Serhiy Storchaka em bpo-29209(12).)

   * Uma *note RuntimeError: 243. agora é levantada quando a metaclasse
     personalizada não fornece a entrada ‘__classcell__’ no espaço de
     nomes passado para ‘type.__new__’.  Uma *note DeprecationWarning:
     1a3. era emitida no Python 3.6-3.7.  (Contribuição de Serhiy
     Storchaka em bpo-23722(13).)

   * A classe *note cProfile.Profile: bcc. agora pode ser usada como um
     gerenciador de contexto.  (Contribuição de Scott Sanderson em
     bpo-29235(14).)

   * *note shutil.copyfile(): c43, *note shutil.copy(): c44, *note
     shutil.copy2(): c45, *note shutil.copytree(): c14. e *note
     shutil.copytree(): c14. 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: c47.).

   * O tamanho padrão do buffer de *note shutil.copyfile(): c43. 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: ab0. 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(): c82. 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: 128. e *note xml.sax: 12f. 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: 35. somente
     leitura (*note dbm.dumb: 36, *note dbm.gnu: 37. ou *note dbm.ndbm:
     38.) levanta ‘error’ (*note dbm.dumb.error: c83, *note
     dbm.gnu.error: c84. ou *note dbm.ndbm.error: c85.) em vez de *note
     KeyError: 5dd.  (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: 2ed.
     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(): bff. 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: 4ce. agora herda de *note
     BaseException: 7cc. em vez de *note Exception: bc3. e não mais
     herda de *note concurrent.futures.CancelledError: bc4.
     (Contribuição de Yury Selivanov em bpo-32528(22).)

   * A função *note asyncio.wait_for(): 80a. agora aguarda corretamente
     o cancelamento ao usar uma instância de *note asyncio.Task: 1c7.
     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(): c86. 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: c87. foi promovida a API estável.

   * As dependências de DLL para módulos de extensão e DLLs carregadas
     com *note ctypes: 2e. 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(): bd3. 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():
     bd3. 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: 32d. 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: 32d. pode ser usado
     para tornar o código à prova de futuro.

   * O parâmetro ‘digestmod’ para *note hmac.new(): c89. 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<12>,  Next: Alterações de bytecode do CPython<7>,  Prev: Alterações na API Python<6>,  Up: Portando para o Python 3 8

1.7.10.3 Alterações na API C
............................

   * A estrutura *note PyCompilerFlags: c8b. 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(): 42d.
     (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(): 3be, *note
     Py_BuildValue(): 3bf, *note PyObject_CallFunction(): 633, 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: 3d2. 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(): 792.) 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(): c55. para as
     funções de nível mais baixo, *note PyObject_Init(): c54. e
     ‘PyObject_INIT’.  Isso faz com que os tipos criados por meio de
     *note PyType_FromSpec(): 792. se comportem como outras classes em
     código gerenciado.

     *note Tipos alocados estaticamente: 978. 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: 784. do objeto de tipo após alocar uma
          instância, se houver.  Isso pode ocorrer após chamar *note
          PyObject_New: b72, *note PyObject_NewVar: b73, *note
          PyObject_GC_New(): c8c, *note PyObject_GC_NewVar(): c8d. ou
          qualquer outro alocador personalizado que use *note
          PyObject_Init(): c54. 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(): c8e. 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: c8f. 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: c90. (*note Py_TPFLAGS_HAVE_FINALIZE:
     424. não é mais verificado antes de ler *note tp_finalize: c90.).

     (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: c91. 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<7>,  Next: Ferramentas e daemons<2>,  Prev: Alterações na API C<12>,  Up: Portando para o Python 3 8

1.7.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: 17f, *note continue:
     180. e *note return: 1af.

     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: c93. para
     lidar com exceções geradas ao aguardar um próximo item em um loop
     *note async for: c94.  (Contribuição de Serhiy Storchaka em
     bpo-33041(2).)

   * O *note MAP_ADD: c95. 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<7>,  Up: Portando para o Python 3 8

1.7.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.7.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(): 931.
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.7.12 Alterações notáveis no Python 3.8.2
------------------------------------------

Corrigida uma regressão com o retorno de chamada ‘ignore’ de *note
shutil.copytree(): c14.  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.7.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.7.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(): 31d. e *note urllib.parse.parse_qsl(): 31c.
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.7.15 Alterações notáveis no Python 3.8.9
------------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: aec.
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.7.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.7.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.7.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.7.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: 110. 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.7.18 Alterações notáveis no Python 3.8.12
-------------------------------------------

* Menu:

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


File: python.info,  Node: Alterações na API Python<7>,  Up: Alterações notáveis no Python 3 8 12

1.7.18.1 Alterações na API Python
.................................

A partir do Python 3.8.12, o módulo *note ipaddress: 84. 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(): b50. trata os
zeros à esquerda como notação octal.  A implementação glibc de *note
inet_pton(): b51. 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.7.19 Recursos de segurança notáveis no 3.8.14
-----------------------------------------------

Converter entre *note int: 19b. e *note str: 169. 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: 2ea. 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: df.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 800.  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.7.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.7.20.1 tarfile
................

   * Os métodos de extração em *note tarfile: e4. e *note
     shutil.unpack_archive(): 68b, 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: 68c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a3.  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.8 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: 142. para uma lista completa de mudanças.

* 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<7>.
* Novos módulos: Novos módulos<8>.
* Módulos melhorados: Módulos melhorados<8>.
* Alterações na API C: Alterações na API C<13>.
* Mudanças na construção: Mudanças na construção<6>.
* Otimizações: Otimizações<8>.
* 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<8>,  Next: Novas funcionalidades<13>,  Up: O que há de novo no Python 3 7

1.8.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * *note PEP 563: ca9, avaliação postergada de anotações de tipos.

Alterações de sintaxe incompatíveis com versões anteriores:

   * *note async: 930. e *note await: 18d. são agora palavras chave
     reservadas.

Novos módulos de biblioteca:

   * *note contextvars: 28.: *note PEP 567 – Variáveis de Contexto: caa.

   * *note dataclasses: 33.: *note PEP 557 – Classes de Dados: cab.

   * *note importlib.resources: cac.

Novos recursos embutidos:

   * *note PEP 553: cad, a nova função *note breakpoint(): 270.;

Melhorias no modelo de dados Python:

   * *note PEP 562: cae, personalização de acesso aos atributos do
     módulo.

   * *note PEP 560: caf, 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: cb0. foi declarada(1) como uma parte oficial da especificação
     da linguagem Python.

Melhorias significativas na biblioteca padrão:

   * O módulo *note asyncio: b. recebeu novos recursos, significativo à
     *note melhorias de usabilidade e desempenho: cb1.

   * O módulo *note time: f4. ganhou suporte para *note funções com
     resolução de nanossegundos: cb2.

Melhorias na implementação do CPython:

   * Evitando o uso de ASCII como a codificação de texto padrão:

        * *note PEP 538: cb3, coerção de localidade C legada

        * *note PEP 540: cb4, modo de tempo de execução UTF-8 forçado.

   * *note PEP 552: cb5, .pycs determinísticos

   * *note Novo Modo de Desenvolvimento do Python: cb6.

   * *note PEP 565: cb7, aprimorada o tratamento de *note
     DeprecationWarning: 1a3.

Melhorias na API C:

   * *note PEP 539: cb8, nova API C para armazenamento local de thread

Melhorias na documentação:

   * *note PEP 545: cb9, 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: cba. 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: cbb.

   ---------- 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<13>,  Next: Outras mudanças na linguagem<7>,  Prev: Resumo – Destaques da versão<8>,  Up: O que há de novo no Python 3 7

1.8.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<13>

1.8.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<13>

1.8.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: cbf.  Configurar
automaticamente ‘LC_CTYPE’ desta forma significa que tanto o
interpretador central quanto as extensões C com reconhecimento da
localidade (como *note readline: bf.) 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:
754. e *note stdout: cc0. 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: b29. 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:
b29.) 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: cb4.

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<13>

1.8.2.3 PEP 540: Modo de tempo de execução UTF-8 forçado
........................................................

A nova opção de linha de comando *note -X: 16f. ‘utf8’ e a variável de
ambiente *note PYTHONUTF8: cc2. podem ser usadas para habilitar o *note
modo UTF-8 do Python: 85b.

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: 754. e *note sys.stdout: cc0. 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: cb4.).

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<13>

1.8.2.4 PEP 553: ‘breakpoint()’ embutida
........................................

Python 3.7 inclui a nova função embutida *note breakpoint(): 270. como
uma maneira fácil e consistente de entrar no depurador Python.

‘breakpoint()’ embutida chama *note sys.breakpointhook(): cc4.  Por
padrão, o último importa *note pdb: aa. 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: cc5. 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<13>

1.8.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):
cc7. 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): cc8. 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: cc9. 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<13>

1.8.2.6 PEP 562: Personalização de acesso aos atributos do módulo
.................................................................

Python 3.7 allows defining *note __getattr__(): ccb. on modules and will
call it whenever a module attribute is otherwise not found.  Defining
*note __dir__(): ccc. 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<13>

1.8.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(): 556. 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: f4.:

   * *note time.clock_gettime_ns(): cce.

   * *note time.clock_settime_ns(): ccf.

   * *note time.monotonic_ns(): cd0.

   * *note time.perf_counter_ns(): cd1.

   * *note time.process_time_ns(): cd2.

   * *note time.time_ns(): cd3.

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(): cd3. é aproximadamente 3 vezes melhor do que *note
time.time(): 556.

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<13>

1.8.2.8 PEP 565: Mostra DeprecationWarning em ‘__main__’
........................................................

O tratamento padrão de *note DeprecationWarning: 1a3. 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: 64d.: 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: 1a3.: 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: abc.: 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: 1a3. ou *note FutureWarning: 64d.

Anteriormente, ambas *note DeprecationWarning: 1a3. e *note
PendingDeprecationWarning: abc. 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<13>

1.8.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: 10a. module are extensively used by the community,
so this restriction is removed.  The PEP introduces two special methods
*note __class_getitem__(): 938. and *note __mro_entries__(): cd6, these
methods are now used by most classes and special constructs in *note
typing: 10a.  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: 10a. 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<13>

1.8.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:
b8. ou *note compileall: 21.

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: 7f7. 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<13>

1.8.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<13>

1.8.2.12 Modo de Desenvolvimento do Python (-X dev)
...................................................

A nova opção de linha de comando *note -X: 16f. ‘dev’ ou a nova variável
de ambiente *note PYTHONDEVMODE: cda. pode ser usada para habilitar
*note Modo de Desenvolvimento do Python: 502.  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: 502. para a
descrição completa.


File: python.info,  Node: Outras mudanças na linguagem<7>,  Next: Novos módulos<8>,  Prev: Novas funcionalidades<13>,  Up: O que há de novo no Python 3 7

1.8.3 Outras mudanças na linguagem
----------------------------------

   * Uma expressão *note await: 18d. e compreensões contendo uma
     cláusula *note async for: c94. eram ilegais nas expressões em *note
     literais de strings formatadas: 19a. 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(): 190. e *note bytearray.fromhex(): 191. 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: 169, *note bytes: 192. e *note bytearray: 342. ganharam
     suporte para o novo método *note isascii(): cdc, 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: 64f. 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: cdd. agora pode ser instanciado a
     partir do código Python, e o atributo *note tb_next: cde. em *note
     tracebacks: cdf. agora é gravável.  (Contribuição de Nathaniel J.
     Smith em bpo-30579(8).)

   * Ao usar a opção *note -m: 23b, ‘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: 16f. ‘importtime’ ou a variável de ambiente
     *note PYTHONPROFILEIMPORTTIME: ce0. 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<8>,  Next: Módulos melhorados<8>,  Prev: Outras mudanças na linguagem<7>,  Up: O que há de novo no Python 3 7

1.8.4 Novos módulos
-------------------

* Menu:

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


File: python.info,  Node: contextvars<2>,  Next: dataclasses<3>,  Up: Novos módulos<8>

1.8.4.1 contextvars
...................

O novo módulo *note contextvars: 28. e um conjunto de *note novas APIs
C: ce3. 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: b. e *note decimal: 3a. 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<2>,  Up: Novos módulos<8>

1.8.4.2 dataclasses
...................

O novo decorador *note dataclass(): 4db. 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__(): 824, *note __eq__(): ce5. e *note
__hash__(): ce6. 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<8>

1.8.4.3 importlib.resources
...........................

The new *note importlib.resources: 7f. 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: ce8. 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<8>,  Next: Alterações na API C<13>,  Prev: Novos módulos<8>,  Up: O que há de novo no Python 3 7

1.8.5 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: argparse<5>,  Next: asyncio<10>,  Up: Módulos melhorados<8>

1.8.5.1 argparse
................

O novo método *note ArgumentParser.parse_intermixed_args(): ceb. 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<10>,  Next: binascii,  Prev: argparse<5>,  Up: Módulos melhorados<8>

1.8.5.2 asyncio
...............

O módulo *note asyncio: b. recebeu muitos novos recursos, usabilidade e
*note melhorias de desempenho: ced.  Mudanças notáveis incluem:

   * A nova função *note provisória: 3ce. *note asyncio.run(): 2f1. 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: 28.  *note
     loop.call_soon(): cee, *note loop.call_soon_threadsafe(): cef,
     ‘loop.call_later()’, *note loop.call_at(): cf0. e *note
     Future.add_done_callback(): cf1. têm um novo parâmetro
     somente-nomeado opcional 'context'.  *note Tasks: 1c7. 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(): 1c9. 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(): cf2. 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(): cf3. 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(): 69a. retorna a
     instância *note Task: 1c7. atualmente em execução, e a nova função
     *note asyncio.all_tasks(): b45. 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: c87. 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(): cf4. retorna o laço
     atualmente em execução e levanta uma exceção *note RuntimeError:
     243. se nenhum laço estiver em execução.  Isto contrasta com *note
     asyncio.get_event_loop(): 2f0, 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(): cf5.
     permite esperar até que o gravador de fluxo seja fechado.  O novo
     método *note StreamWriter.is_closing(): cf6. 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(): cf7. permite
     enviar arquivos usando *note os.sendfile: cf8. quando possível.
     (Contribuição de Andrew Svetlov em bpo-32410(11).)

   * Os novos métodos *note Future.get_loop(): cf9. e ‘Task.get_loop()’
     retornam a instância do laço no qual uma tarefa ou um future foi
     criado.  *note Server.get_loop(): cfa. permite fazer o mesmo para
     objetos *note asyncio.Server: cfb.  (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: cfb. 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(): cfc. e
     *note loop.create_unix_server(): 4c4, bem como *note
     Server.start_serving(): cfd. e *note Server.serve_forever(): cfe.
     podem ser usados para dissociar a instanciação e o serviço do
     servidor.  O novo método *note Server.is_serving(): cff. retorna
     ‘True’ se o servidor estiver servindo.  Os objetos *note Server:
     cfb. 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(): d00. ganharam o novo método *note when(): d01.
     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(): 931. ganhou suporte
     para soquetes Unix.  (Contribuição de Quentin Dawans em
     bpo-31245(16).)

   * As funções *note asyncio.open_connection(): d02, *note
     asyncio.start_server(): d03, os métodos *note
     loop.create_connection(): 80d, *note loop.create_server(): cfc,
     *note loop.create_accepted_socket(): 9d4. 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(): d04. 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:
     930./*note await: 18d.  (Contribuição de Andrew Svetlov em
     bpo-32193(19).)

   * O novo método *note ReadTransport.is_reading(): d05. pode ser usado
     para determinar o estado de leitura do transporte.  Além disso,
     chamadas para *note ReadTransport.resume_reading(): d06. e *note
     ReadTransport.pause_reading(): d07. 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: 59a.  (Contributed by Yury Selivanov in
     bpo-32066(21).)

   * In *note asyncio: b. 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: d08.

   ---------- 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<3>,  Prev: asyncio<10>,  Up: Módulos melhorados<8>

1.8.5.3 binascii
................

The *note b2a_uu(): d0a. 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<3>,  Next: collections<2>,  Prev: binascii,  Up: Módulos melhorados<8>

1.8.5.4 calendar
................

The *note HTMLCalendar: d0c. 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<3>,  Up: Módulos melhorados<8>

1.8.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<4>,  Prev: collections<2>,  Up: Módulos melhorados<8>

1.8.5.6 compileall
..................

*note compileall.compile_dir(): d0f. learned the new 'invalidation_mode'
parameter, which can be used to enable *note hash-based .pyc
invalidation: cb5.  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<4>,  Next: contextlib<3>,  Prev: compileall<3>,  Up: Módulos melhorados<8>

1.8.5.7 concurrent.futures
..........................

*note ProcessPoolExecutor: 1d6. and *note ThreadPoolExecutor: 93e. now
support the new 'initializer' and 'initargs' constructor arguments.
(Contributed by Antoine Pitrou in bpo-21423(1).)

The *note ProcessPoolExecutor: 1d6. 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<4>,  Up: Módulos melhorados<8>

1.8.5.8 contextlib
..................

The new *note nullcontext(): 9e5. is a simpler and faster no-op context
manager than *note ExitStack: d12.  (Contributed by Jesse-Bakker in
bpo-10049(1).)

The new *note asynccontextmanager(): d13, *note
AbstractAsyncContextManager: d14, and *note AsyncExitStack: d15. 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<8>

1.8.5.9 cProfile
................

The *note cProfile: 2b. 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<5>,  Prev: cProfile<2>,  Up: Módulos melhorados<8>

1.8.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<5>,  Next: dbm<2>,  Prev: crypt,  Up: Módulos melhorados<8>

1.8.5.11 datetime
.................

The new *note datetime.fromisoformat(): 81f. method constructs a *note
datetime: 4dc. object from a string in one of the formats output by
*note datetime.isoformat(): d19.  (Contributed by Paul Ganssle in
bpo-15873(1).)

The *note tzinfo: 7eb. 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<2>,  Prev: datetime<5>,  Up: Módulos melhorados<8>

1.8.5.12 dbm
............

*note dbm.dumb: 36. now supports reading read-only files and no longer
writes the index file when it is not changed.


File: python.info,  Node: decimal<2>,  Next: dis<4>,  Prev: dbm<2>,  Up: Módulos melhorados<8>

1.8.5.13 decimal
................

The *note decimal: 3a. module now uses *note context variables: caa. 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<4>,  Next: distutils<4>,  Prev: decimal<2>,  Up: Módulos melhorados<8>

1.8.5.14 dis
............

The *note dis(): 204. 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<4>,  Up: Módulos melhorados<8>

1.8.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<4>,  Prev: distutils<4>,  Up: Módulos melhorados<8>

1.8.5.16 enum
.............

The *note Enum: 837. 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:
837. classes will raise a *note TypeError: 198. (e.g.  ‘1 in Color’);
similarly, attempting to check for non-Flag objects in a *note Flag:
82a. member will raise *note TypeError: 198. (e.g.  ‘1 in Perm.RW’);
currently, both operations return *note False: d1f. 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<4>,  Next: gc<5>,  Prev: enum<5>,  Up: Módulos melhorados<8>

1.8.5.17 functools
..................

*note functools.singledispatch(): 840. 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<5>,  Next: hmac<3>,  Prev: functools<4>,  Up: Módulos melhorados<8>

1.8.5.18 gc
...........

The new *note gc.freeze(): d22. 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(): d23. functions reverses this operation.  Additionally,
*note gc.get_freeze_count(): d24. 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<3>,  Next: http client,  Prev: gc<5>,  Up: Módulos melhorados<8>

1.8.5.19 hmac
.............

The *note hmac: 6e. module now has an optimized one-shot *note digest():
d26. function, which is up to three times faster than *note HMAC(): d27.
(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<3>,  Up: Módulos melhorados<8>

1.8.5.20 http.client
....................

*note HTTPConnection: d29. and *note HTTPSConnection: d2a. 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<8>

1.8.5.21 http.server
....................

*note SimpleHTTPRequestHandler: d2c. 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: d2c. 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: d2d. class uses threads to handle
requests using *note ThreadingMixIn: d2e.  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<8>

1.8.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<6>,  Prev: idlelib e IDLE,  Up: Módulos melhorados<8>

1.8.5.23 importlib
..................

The *note importlib.abc.ResourceReader: ce8. ABC was introduced to
support the loading of resources from packages.  See also *note
importlib.resources: cac.  (Contributed by Barry Warsaw, Brett Cannon in
bpo-32248(1).)

*note importlib.reload(): 732. now raises *note ModuleNotFoundError:
d31. if the module lacks a spec.  (Contributed by Garvit Khatri in
bpo-29851(2).)

*note importlib.util.find_spec(): 5a8. now raises *note
ModuleNotFoundError: d31. instead of *note AttributeError: 5e4. 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(): d32. can be used to compute
the hash of the passed source.  A *note hash-based .pyc file: cb5.
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<6>,  Next: ipaddress<3>,  Prev: importlib<4>,  Up: Módulos melhorados<8>

1.8.5.24 io
...........

The new *note TextIOWrapper.reconfigure(): d34. 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<6>,  Prev: io<6>,  Up: Módulos melhorados<8>

1.8.5.25 ipaddress
..................

The new ‘subnet_of()’ and ‘supernet_of()’ methods of *note
ipaddress.IPv6Network: 509. and *note ipaddress.IPv4Network: 508. 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<6>,  Next: locale<4>,  Prev: ipaddress<3>,  Up: Módulos melhorados<8>

1.8.5.26 itertools
..................

*note itertools.islice(): d37. now accepts *note integer-like objects:
19e. 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<6>,  Up: Módulos melhorados<8>

1.8.5.27 locale
...............

The new 'monetary' argument to *note locale.format_string(): 737. 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(): 751. function now always
returns ‘'UTF-8'’ on Android or when in the *note forced UTF-8 mode:
cb4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10379


File: python.info,  Node: logging<3>,  Next: math<7>,  Prev: locale<4>,  Up: Módulos melhorados<8>

1.8.5.28 logging
................

*note Logger: d3a. instances can now be pickled.  (Contributed by Vinay
Sajip in bpo-30520(1).)

The new *note StreamHandler.setStream(): d3b. 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(): d3c.
(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<7>,  Next: mimetypes<3>,  Prev: logging<3>,  Up: Módulos melhorados<8>

1.8.5.29 math
.............

The new *note math.remainder(): d3e. 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<3>,  Next: msilib,  Prev: math<7>,  Up: Módulos melhorados<8>

1.8.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<5>,  Prev: mimetypes<3>,  Up: Módulos melhorados<8>

1.8.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<5>,  Next: os<8>,  Prev: msilib,  Up: Módulos melhorados<8>

1.8.5.32 multiprocessing
........................

The new *note Process.close(): d42. method explicitly closes the process
object and releases all resources associated with it.  *note ValueError:
2ea. is raised if the underlying process is still running.  (Contributed
by Antoine Pitrou in bpo-30596(1).)

The new *note Process.kill(): d43. method can be used to terminate the
process using the *note SIGKILL: d44. signal on Unix.  (Contributed by
Vitor Pereira in bpo-30794(2).)

Non-daemonic threads created by *note Process: 251. 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<8>,  Next: pathlib<11>,  Prev: multiprocessing<5>,  Up: Módulos melhorados<8>

1.8.5.33 os
...........

*note os.fwalk(): d46. now accepts the 'path' argument as *note bytes:
192.  (Contributed by Serhiy Storchaka in bpo-28682(1).)

*note os.scandir(): c48. gained support for *note file descriptors: d47.
(Contributed by Serhiy Storchaka in bpo-25996(2).)

The new *note register_at_fork(): 352. function allows registering
Python callbacks to be executed at process fork.  (Contributed by
Antoine Pitrou in bpo-16500(3).)

Added *note os.preadv(): d48. (combine the functionality of *note
os.readv(): d49. and *note os.pread(): d4a.) and *note os.pwritev():
d4b. functions (combine the functionality of *note os.writev(): d4c. and
*note os.pwrite(): d4d.).  (Contributed by Pablo Galindo in
bpo-31368(4).)

The mode argument of *note os.makedirs(): 526. no longer affects the
file permission bits of newly created intermediate-level directories.
(Contributed by Serhiy Storchaka in bpo-19930(5).)

*note os.dup2(): d4e. 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(): 26c. now contains the *note
st_fstype: d4f. 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<11>,  Next: pdb<6>,  Prev: os<8>,  Up: Módulos melhorados<8>

1.8.5.34 pathlib
................

The new *note Path.is_mount(): c02. 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<6>,  Next: py_compile<3>,  Prev: pathlib<11>,  Up: Módulos melhorados<8>

1.8.5.35 pdb
............

*note pdb.set_trace(): 271. 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: aa. 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<3>,  Prev: pdb<6>,  Up: Módulos melhorados<8>

1.8.5.36 py_compile
...................

*note py_compile.compile(): c10. – and by extension, *note compileall:
21. – 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<3>,  Next: queue<2>,  Prev: py_compile<3>,  Up: Módulos melhorados<8>

1.8.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<5>,  Prev: pydoc<3>,  Up: Módulos melhorados<8>

1.8.5.38 queue
..............

The new *note SimpleQueue: d55. 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<5>,  Next: signal<2>,  Prev: queue<2>,  Up: Módulos melhorados<8>

1.8.5.39 re
...........

The flags *note re.ASCII: 833, *note re.LOCALE: d57. and *note
re.UNICODE: d58. can be set within the scope of a group.  (Contributed
by Serhiy Storchaka in bpo-31690(1).)

*note re.split(): 59b. 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: d57. 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: 64d. 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(): 74c. and *note copy.deepcopy(): d59.  (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<6>,  Prev: re<5>,  Up: Módulos melhorados<8>

1.8.5.40 signal
...............

The new 'warn_on_full_buffer' argument to the *note
signal.set_wakeup_fd(): d5b. 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<6>,  Next: socketserver,  Prev: signal<2>,  Up: Módulos melhorados<8>

1.8.5.41 socket
...............

The new *note socket.getblocking(): d5d. 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(): d5e. function closes the passed socket
file descriptor.  This function should be used instead of *note
os.close(): d5f. for better compatibility across platforms.
(Contributed by Christian Heimes in bpo-32454(2).)

The *note socket: d1. module now exposes the *note
socket.TCP_CONGESTION: d60. (Linux 2.6.13), *note
socket.TCP_USER_TIMEOUT: d60. (Linux 2.6.37), and *note
socket.TCP_NOTSENT_LOWAT: d60. (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: d61. 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<7>,  Prev: socket<6>,  Up: Módulos melhorados<8>

1.8.5.42 socketserver
.....................

*note socketserver.ThreadingMixIn.server_close: d63. now waits until all
non-daemon threads complete.  *note
socketserver.ForkingMixIn.server_close: d63. now waits until all child
processes complete.

Add a new *note socketserver.ForkingMixIn.block_on_close: d64. class
attribute to *note socketserver.ForkingMixIn: d65. and *note
socketserver.ThreadingMixIn: d2e. classes.  Set the class attribute to
‘False’ to get the pre-3.7 behaviour.


File: python.info,  Node: sqlite3<7>,  Next: ssl<6>,  Prev: socketserver,  Up: Módulos melhorados<8>

1.8.5.43 sqlite3
................

*note sqlite3.Connection: 547. now exposes the *note backup(): d67.
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(): 59f. now accepts any
*note path-like object: 59a, 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<6>,  Next: string<2>,  Prev: sqlite3<7>,  Up: Módulos melhorados<8>

1.8.5.44 ssl
............

The *note ssl: d5. 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: d69. 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: d6a.  (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: d6b. 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: d6c. 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: d6d.  (Contributed by Christian Heimes
in bpo-32947(7), bpo-20995(8), bpo-29136(9), bpo-30622(10) and
bpo-33618(11))

*note SSLSocket: add. and *note SSLObject: d6e. no longer have a public
constructor.  Direct instantiation was never a documented and supported
feature.  Instances must be created with *note SSLContext: 354. methods
*note wrap_socket(): 73d. and *note wrap_bio(): d6f.  (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: a66. and
*note SSLContext.maximum_version: a67.  Supported protocols are
indicated by several new flags, such as *note HAS_TLSv1_1: d70.
(Contributed by Christian Heimes in bpo-32609(13).)

Added *note ssl.SSLContext.post_handshake_auth: c1c. to enable and *note
ssl.SSLSocket.verify_client_post_handshake(): c1d. 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<6>,  Up: Módulos melhorados<8>

1.8.5.45 string
...............

*note string.Template: 88c. 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<8>

1.8.5.46 subprocess
...................

The *note subprocess.run(): d73. function accepts the new
'capture_output' keyword argument.  When true, stdout and stderr will be
captured.  This is equivalent to passing *note subprocess.PIPE: d74. as
'stdout' and 'stderr' arguments.  (Contributed by Bo Bayles in
bpo-32102(1).)

The ‘subprocess.run’ function and the *note subprocess.Popen: 4b1.
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: 4b1.  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: bbb. during *note subprocess.call(): d75, *note
subprocess.run(): d73, or in a *note Popen: 4b1. 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<8>

1.8.5.47 sys
............

The new *note sys.breakpointhook(): cc4. hook function is called by the
built-in *note breakpoint(): 270.  (Contributed by Barry Warsaw in
bpo-31353(1).)

On Android, the new *note sys.getandroidapilevel(): d77. returns the
build-time Android API version.  (Contributed by Victor Stinner in
bpo-28740(2).)

The new *note sys.get_coroutine_origin_tracking_depth(): d78. function
returns the current coroutine origin tracking depth, as set by the new
*note sys.set_coroutine_origin_tracking_depth(): d79.  *note asyncio: b.
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<6>,  Prev: sys<8>,  Up: Módulos melhorados<8>

1.8.5.48 time
.............

PEP 564(1) adds six new functions with nanosecond resolution to the
*note time: f4. module:

   * *note time.clock_gettime_ns(): cce.

   * *note time.clock_settime_ns(): ccf.

   * *note time.monotonic_ns(): cd0.

   * *note time.perf_counter_ns(): cd1.

   * *note time.process_time_ns(): cd2.

   * *note time.time_ns(): cd3.

New clock identifiers have been added:

   * *note time.CLOCK_BOOTTIME: d7b. (Linux): Identical to *note
     time.CLOCK_MONOTONIC: 89d, except it also includes any time that
     the system is suspended.

   * *note time.CLOCK_PROF: d7c. (FreeBSD, NetBSD and OpenBSD):
     High-resolution per-process CPU timer.

   * *note time.CLOCK_UPTIME: d7d. (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(): b26. and *note time.thread_time_ns():
d7e. 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(): d7f. 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<6>,  Next: tracemalloc<2>,  Prev: time<5>,  Up: Módulos melhorados<8>

1.8.5.49 tkinter
................

The new *note tkinter.ttk.Spinbox: d81. 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<6>,  Up: Módulos melhorados<8>

1.8.5.50 tracemalloc
....................

*note tracemalloc.Traceback: d83. behaves more like regular tracebacks,
sorting the frames from oldest to most recent.  *note
Traceback.format(): d84. 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<7>,  Prev: tracemalloc<2>,  Up: Módulos melhorados<8>

1.8.5.51 types
..............

The new *note WrapperDescriptorType: d86, *note MethodWrapperType: 850,
*note MethodDescriptorType: d87, and *note ClassMethodDescriptorType:
d88. 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(): d89. 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<7>,  Next: unittest<8>,  Prev: types<4>,  Up: Módulos melhorados<8>

1.8.5.52 unicodedata
....................

The internal *note unicodedata: 10b. 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<8>,  Next: unittest mock,  Prev: unicodedata<7>,  Up: Módulos melhorados<8>

1.8.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<8>,  Up: Módulos melhorados<8>

1.8.5.54 unittest.mock
......................

The *note sentinel: d8d. attributes now preserve their identity when
they are *note copied: 29. or *note pickled: ab.  (Contributed by Serhiy
Storchaka in bpo-20804(1).)

The new *note seal(): d8e. function allows sealing *note Mock: c34.
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<8>

1.8.5.55 urllib.parse
.....................

*note urllib.parse.quote(): d90. 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<4>,  Prev: urllib parse<5>,  Up: Módulos melhorados<8>

1.8.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<4>,  Next: avisos,  Prev: uu,  Up: Módulos melhorados<8>

1.8.5.57 uuid
.............

The new *note UUID.is_safe: d93. 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(): d94. 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(): d95.  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,  Next: xml<5>,  Prev: uuid<4>,  Up: Módulos melhorados<8>

1.8.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: 7ee. and the new CPython-specific *note -X: 16f. ‘dev’
     option) are always passed to the warnings machinery via the *note
     sys.warnoptions: 3f2. attribute.

   * warnings filters enabled via the command line or the environment
     now have the following order of precedence:

        * the ‘BytesWarning’ filter for *note -b: 7ee. (or ‘-bb’)

        * any filters specified with the *note -W: abb. option

        * any filters specified with the *note PYTHONWARNINGS: d97.
          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: 503, 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__: cb7. 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,  Up: Módulos melhorados<8>

1.8.5.59 xml
............

As mitigation against DTD and external entity retrieval, the *note
xml.dom.minidom: 128. and *note xml.sax: 12f. 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<8>

1.8.5.60 xml.etree
..................

*note ElementPath: d9a. 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<8>

1.8.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<3>,  Prev: xmlrpc server,  Up: Módulos melhorados<8>

1.8.5.62 zipapp
...............

Function *note create_archive(): d9d. 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(): d9d. 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<3>,  Prev: zipapp,  Up: Módulos melhorados<8>

1.8.5.63 zipfile
................

*note ZipFile: 8c8. 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<13>,  Next: Mudanças na construção<6>,  Prev: Módulos melhorados<8>,  Up: O que há de novo no Python 3 7

1.8.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: cb8. for an overview
and *note Thread Specific Storage (TSS) API: cc8. for a complete
reference.  (Contributed by Masayuki Yamamoto in bpo-25658(1).)

The new *note context variables: caa. functionality exposes a number of
*note new C APIs: ce3.

The new *note PyImport_GetModule(): da0. function returns the previously
imported module with the given name.  (Contributed by Eric Snow in
bpo-28411(2).)

The new *note Py_RETURN_RICHCOMPARE: da1. macro eases writing rich
comparison functions.  (Contributed by Petr Victorin in bpo-23699(3).)

The new *note Py_UNREACHABLE: da2. macro can be used to mark unreachable
code paths.  (Contributed by Barry Warsaw in bpo-31338(4).)

The *note tracemalloc: 105. now exposes a C API through the new *note
PyTraceMalloc_Track(): da3. and *note PyTraceMalloc_Untrack(): da4.
functions.  (Contributed by Victor Stinner in bpo-30054(5).)

The new *note import__find__load__start: da5. and *note
import__find__load__done: da5. 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: 766, *note
PyGetSetDef: da6, *note PyStructSequence_Field: da7, *note
PyStructSequence_Desc: da8, 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(): a8f. and *note
PyUnicode_AsUTF8(): 421. is now of type ‘const char *’ rather of ‘char
*’.  (Contributed by Serhiy Storchaka in bpo-28769(8).)

The result of *note PyMapping_Keys(): da9, *note PyMapping_Values():
daa. and *note PyMapping_Items(): dab. 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(): 42f. and *note
PySlice_AdjustIndices(): 430.  (Contributed by Serhiy Storchaka in
bpo-27867(10).)

*note PyOS_AfterFork(): 42c. is deprecated in favour of the new
functions *note PyOS_BeforeFork(): dac, *note PyOS_AfterFork_Parent():
dad. and *note PyOS_AfterFork_Child(): 42d.  (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(): dae. and *note PyTimeZone_FromOffsetAndName():
daf, and access to the UTC singleton with *note PyDateTime_TimeZone_UTC:
db0.  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(): db1. changed from long to unsigned long.
(Contributed by Serhiy Storchaka in bpo-6532(15).)

*note PyUnicode_AsWideCharString(): aaf. now raises a *note ValueError:
2ea. 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(): 45d. 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: cbb.
section in this document and the *note Antes da inicialização do Python:
db2. section in the C API documentation for more details.

The new *note PyInterpreterState_GetID(): db3. returns the unique ID for
a given interpreter.  (Contributed by Eric Snow in bpo-29102(17).)

*note Py_DecodeLocale(): db4, *note Py_EncodeLocale(): db5. now use the
UTF-8 encoding when the *note UTF-8 mode: cb4. is enabled.  (Contributed
by Victor Stinner in bpo-29240(18).)

*note PyUnicode_DecodeLocaleAndSize(): db6. and *note
PyUnicode_EncodeLocale(): db7. 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(): aac. 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<8>,  Prev: Alterações na API C<13>,  Up: O que há de novo no Python 3 7

1.8.7 Mudanças na construção
----------------------------

Support for building ‘--without-threads’ has been removed.  The *note
threading: f3. 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: 2e. 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: d5. 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<8>,  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.8.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: b. module received
a number of notable optimizations for commonly used functions:

   * The *note asyncio.get_event_loop(): 2f0. 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: dba. callback management has been optimized.
     (Contributed by Yury Selivanov in bpo-32348(9).)

   * *note asyncio.gather(): 808. is now up to 15% faster.  (Contributed
     by Yury Selivanov in bpo-32355(10).)

   * *note asyncio.sleep(): c58. 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: caf, the import time of *note typing:
10a. 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(): dbb. and *note list.sort(): dbc. have been optimized for
common cases to be up to 40-75% faster.  (Contributed by Elliot
Gorokhovsky in bpo-28685(14).)

*note dict.copy(): dbd. is now up to 5.5 times faster.  (Contributed by
Yury Selivanov in bpo-31179(15).)

*note hasattr(): 6ee. and *note getattr(): dbe. are now about 4 times
faster when 'name' is not found and 'obj' does not override *note
object.__getattr__(): 6ef. or *note object.__getattribute__(): dbf.
(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(): 4da. 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(): dc0. and *note
datetime.date.fromtimestamp(): dc1. are now up to 30% faster in the
common case.  (Contributed by Paul Ganssle in bpo-32403(19).)

The *note os.fwalk(): d46. function is now up to 2 times faster thanks
to the use of *note os.scandir(): c48.  (Contributed by Serhiy Storchaka
in bpo-25996(20).)

The speed of the *note shutil.rmtree(): 353. function has been improved
by 20–40% thanks to the use of the *note os.scandir(): c48. function.
(Contributed by Serhiy Storchaka in bpo-28564(21).)

Optimized case-insensitive matching and searching of *note regular
expressions: be.  Searching some patterns can now be up to 20 times
faster.  (Contributed by Serhiy Storchaka in bpo-30285(22).)

*note re.compile(): dc2. 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(): dc3. methods of classes *note
selectors.EpollSelector: dc4, *note selectors.PollSelector: dc5. and
*note selectors.DevpollSelector: dc6. 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(): 2ac. and *note issubclass(): 9ba. 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: 1f9. and *note datetime.datetime: 4dc. 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: 4b8. 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(): dc7. and *note math.erfc(): dc8. 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<8>,  Up: O que há de novo no Python 3 7

1.8.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: dca. and *note
     f_trace_opcodes: dcb. 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(): 468. 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.8.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: dcd.
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: 1a3. when
compiled, in Python 3.8 this will be a *note SyntaxError: 18e.
(Contributed by Serhiy Storchaka in bpo-10544(1).)

Returning a subclass of *note complex: 197. from *note
object.__complex__(): 7f2. is deprecated and will be an error in future
Python versions.  This makes ‘__complex__()’ consistent with *note
object.__int__(): 19d. and *note object.__float__(): bb7.  (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.8.11 Deprecated Python modules, functions and methods
-------------------------------------------------------

* Menu:

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


File: python.info,  Node: aifc,  Next: asyncio<11>,  Up: Deprecated Python modules functions and methods

1.8.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<11>,  Next: collections<3>,  Prev: aifc,  Up: Deprecated Python modules functions and methods

1.8.11.2 asyncio
................

Support for directly ‘await’-ing instances of *note asyncio.Lock: c5a.
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<11>,  Up: Deprecated Python modules functions and methods

1.8.11.3 collections
....................

In Python 3.8, the abstract base classes in *note collections.abc: 1f.
will no longer be exposed in the regular *note collections: 1e. 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.8.11.4 dbm
............

*note dbm.dumb: 36. 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.8.11.5 enum
.............

In Python 3.8, attempting to check for non-Enum objects in *note Enum:
837. classes will raise a *note TypeError: 198. (e.g.  ‘1 in Color’);
similarly, attempting to check for non-Flag objects in a *note Flag:
82a. member will raise *note TypeError: 198. (e.g.  ‘1 in Perm.RW’);
currently, both operations return *note False: d1f. 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.8.11.6 gettext
................

Using non-integer value for selecting a plural form in *note gettext:
67. 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.8.11.7 importlib
..................

Methods ‘MetaPathFinder.find_module()’ (replaced by *note
MetaPathFinder.find_spec(): a5e.) and ‘PathEntryFinder.find_loader()’
(replaced by *note PathEntryFinder.find_spec(): a62.) both deprecated in
Python 3.4 now emit *note DeprecationWarning: 1a3.  (Contributed by
Matthias Bussonnier in bpo-29576(1).)

The *note importlib.abc.ResourceLoader: dd6. ABC has been deprecated in
favour of *note importlib.abc.ResourceReader: ce8.

   ---------- 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.8.11.8 locale
...............

‘locale.format()’ has been deprecated, use *note locale.format_string():
737. 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<6>,  Prev: locale<5>,  Up: Deprecated Python modules functions and methods

1.8.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<6>,  Next: socket<7>,  Prev: macpath,  Up: Deprecated Python modules functions and methods

1.8.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: f3. 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<7>,  Next: ssl<7>,  Prev: threading<6>,  Up: Deprecated Python modules functions and methods

1.8.11.11 socket
................

The silent argument value truncation in *note socket.htons(): a75. and
*note socket.ntohs(): a76. 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<7>,  Next: sunau,  Prev: socket<7>,  Up: Deprecated Python modules functions and methods

1.8.11.12 ssl
.............

‘ssl.wrap_socket()’ is deprecated.  Use *note
ssl.SSLContext.wrap_socket(): 73d. 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<7>,  Up: Deprecated Python modules functions and methods

1.8.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.8.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.8.11.15 wave
..............

‘wave.openfp()’ has been deprecated and will be removed in Python 3.9.
Use *note wave.open(): b3b. 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.8.12 Deprecated functions and types of the C API
--------------------------------------------------

Function *note PySlice_GetIndicesEx(): 42e. 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(): 42c. has been deprecated.  Use *note
PyOS_BeforeFork(): dac, *note PyOS_AfterFork_Parent(): dad. or *note
PyOS_AfterFork_Child(): 42d. 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.8.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.14/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.8.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(): 59c. were deprecated in
     Python 3.5, and will now cause an error.

   * Removed support of the 'exclude' argument in *note
     tarfile.TarFile.add(): de2.  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(): de3. instead.

   * *note collections.namedtuple(): 4da. 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(): 3c0, *note float(): 196, *note list(): 24c.
     and *note tuple(): 608. no longer take keyword arguments.  The
     first argument of *note int(): 19b. can now be passed only as
     positional argument.

   * Removed previously deprecated in Python 2.4 classes ‘Plist’, ‘Dict’
     and ‘_InternalDict’ in the *note plistlib: b0. 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(): de4. 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: b. no longer exports the *note selectors: c7. and
     ‘_overlapped’ modules as ‘asyncio.selectors’ and
     ‘asyncio._overlapped’.  Replace ‘from asyncio import selectors’
     with ‘import selectors’.

   * Direct instantiation of *note ssl.SSLSocket: add. and *note
     ssl.SSLObject: d6e. 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: 354.  (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.8.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.8.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.8.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<8>.
* Alterações na API C: Alterações na API C<14>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<8>.
* 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<8>,  Up: Porting to Python 3 7

1.8.17.1 Changes in Python Behavior
...................................

   * *note async: 930. and *note await: 18d. names are now reserved
     keywords.  Code using these names as identifiers will now raise a
     *note SyntaxError: 18e.  (Contributed by Jelle Zijlstra in
     bpo-30406(1).)

   * PEP 479(2) is enabled for all code in Python 3.7, meaning that
     *note StopIteration: de9. exceptions raised directly or indirectly
     in coroutines and generators are transformed into *note
     RuntimeError: 243. exceptions.  (Contributed by Yury Selivanov in
     bpo-32670(3).)

   * *note object.__aiter__(): dea. 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: 18e, 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: 23b. switch, the initial working directory
     is now added to *note sys.path: 3e1, 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<8>,  Next: Alterações na API C<14>,  Prev: Changes in Python Behavior,  Up: Porting to Python 3 7

1.8.17.2 Alterações na API Python
.................................

   * *note socketserver.ThreadingMixIn.server_close: d63. now waits
     until all non-daemon threads complete.  Set the new *note
     socketserver.ThreadingMixIn.block_on_close: d64. 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: d63. now waits until
     all child processes complete.  Set the new *note
     socketserver.ForkingMixIn.block_on_close: d64. 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(): dec. 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(): ded. now raises a *note ValueError:
     2ea. 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(): dee.
     is now *note positional-only: c6c.  Passing it as a keyword
     argument was deprecated in Python 3.5.  (Contributed by Serhiy
     Storchaka in bpo-29193(7).)

   * Attributes *note key: def, *note value: df0. and *note coded_value:
     df1. of class *note http.cookies.Morsel: df2. are now read-only.
     Assigning to them was deprecated in Python 3.5.  Use the *note
     set(): df3. method for setting them.  (Contributed by Serhiy
     Storchaka in bpo-29192(8).)

   * The 'mode' argument of *note os.makedirs(): 526. 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: df4. type is now *note str: 169.
     instead of *note bytes: 192.  (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: d1, calling *note
     socket.fromshare(): df5. on a socket created by *note socket.share:
     df6. in older Python versions is not supported.

   * ‘repr’ for *note BaseException: 7cc. 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: bb9. has changed to include
     the keyword arguments in the output.  (Contributed by Utkarsh
     Upadhyay in bpo-30302(13).)

   * Because *note shutil.rmtree(): 353. is now implemented using the
     *note os.scandir(): c48. 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: 64d. 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: be.
     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: 64d. 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(): 59c. 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(): df7. 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: d83. frames are now sorted from oldest
     to most recent to be more consistent with *note traceback: 104.
     (Contributed by Jesse Bakker in bpo-32121(19).)

   * On OSes that support *note socket.SOCK_NONBLOCK: df8. or *note
     socket.SOCK_CLOEXEC: df9. bit flags, the *note socket.type: dfa. 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: 4b1. was changed from *note False: d1f. to *note
     True: dfb. when redirecting the standard handles.  If you
     previously depended on handles being inherited when using *note
     subprocess.Popen: 4b1. with standard io redirection, you will have
     to pass ‘close_fds=False’ to preserve the previous behaviour, or
     use *note STARTUPINFO.lpAttributeList: dfc.

   * *note importlib.machinery.PathFinder.invalidate_caches(): dfd. –
     which implicitly affects *note importlib.invalidate_caches(): dfe.
     – now deletes entries in *note sys.path_importer_cache: 7ef. which
     are set to ‘None’.  (Contributed by Brett Cannon in bpo-33169(21).)

   * In *note asyncio: b, *note loop.sock_recv(): dff, *note
     loop.sock_sendall(): e00, *note loop.sock_accept(): e01, *note
     loop.getaddrinfo(): e02, *note loop.getnameinfo(): e03. have been
     changed to be proper coroutine methods to match their
     documentation.  Previously, these methods returned *note
     asyncio.Future: dba. instances.  (Contributed by Yury Selivanov in
     bpo-32327(22).)

   * *note asyncio.Server.sockets: e04. 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: df4. is now a *note str: 169. instance instead
     of a *note bytes: 192. instance.  (Contributed by Victor Stinner in
     bpo-21071(24).)

   * *note argparse: 7. subparsers can now be made mandatory by passing
     ‘required=True’ to *note ArgumentParser.add_subparsers(): e05.
     (Contributed by Anthony Sottile in bpo-26510(25).)

   * *note ast.literal_eval(): e06. is now stricter.  Addition and
     subtraction of arbitrary numbers are no longer allowed.
     (Contributed by Serhiy Storchaka in bpo-31778(26).)

   * *note Calendar.itermonthdates: e07. 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: e08. and
     *note Calendar.itermonthdays4: e09. can be used.  The new methods
     return tuples and are not restricted by the range supported by
     *note datetime.date: 1f9.  (Contributed by Alexander Belopolsky in
     bpo-28292(27).)

   * *note collections.ChainMap: e0a. now preserves the order of the
     underlying mappings.  (Contributed by Raymond Hettinger in
     bpo-32792(28).)

   * The ‘submit()’ method of *note
     concurrent.futures.ThreadPoolExecutor: 93e. and *note
     concurrent.futures.ProcessPoolExecutor: 1d6. now raises a *note
     RuntimeError: 243. if called during interpreter shutdown.
     (Contributed by Mark Nemec in bpo-33097(29).)

   * The *note configparser.ConfigParser: 4d8. 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<14>,  Next: Alterações de bytecode do CPython<8>,  Prev: Alterações na API Python<8>,  Up: Porting to Python 3 7

1.8.17.3 Alterações na API C
............................

The function *note PySlice_GetIndicesEx(): 42e. is considered unsafe for
resizable sequences.  If the slice indices are not instances of *note
int: 19b, 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(): 42f. and *note
PySlice_AdjustIndices(): 430.  (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<8>,  Next: Windows-only Changes<2>,  Prev: Alterações na API C<14>,  Up: Porting to Python 3 7

1.8.17.4 Alterações de bytecode do CPython
..........................................

There are two new opcodes: ‘LOAD_METHOD’ 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<8>,  Up: Porting to Python 3 7

1.8.17.5 Windows-only Changes
.............................

The file used to override *note sys.path: 3e1. is now called
‘<python-executable>._pth’ instead of ‘'sys.path'’.  See *note
Encontrando módulos: e0e. 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.8.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: 403. to a value greater than one is
no longer sufficient to both emit *note BytesWarning: e10. 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.8.18 Notable changes in Python 3.7.1
--------------------------------------

Starting in 3.7.1, *note Py_Initialize(): 45d. now consistently reads
and respects all of the same environment settings as *note Py_Main():
e12. (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: 407. to 1 before calling *note
Py_Initialize(): 45d.

In 3.7.1 the C API for Context Variables *note was updated: e13. to use
*note PyObject: 5d5. pointers.  See also bpo-34762(2).

In 3.7.1 the *note tokenize: 101. 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.8.19 Notable changes in Python 3.7.2
--------------------------------------

In 3.7.2, *note venv: 117. 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.8.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(): 931.
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.8.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(): 31d. e *note urllib.parse.parse_qsl(): 31c.
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.8.22 Notable changes in Python 3.7.11
---------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: aec.
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(): 110. 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.8.23 Notable security feature in 3.7.14
-----------------------------------------

Converter entre *note int: 19b. e *note str: 169. 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: 2ea. 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: df.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 800.  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.9 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<9>.
* Novas funcionalidades: Novas funcionalidades<14>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<8>.
* Novos módulos: Novos módulos<9>.
* Módulos melhorados: Módulos melhorados<9>.
* Otimizações: Otimizações<9>.
* Mudanças a construções e API C: Mudanças a construções e API C<2>.
* Other Improvements::
* Descontinuados: Descontinuados<10>.
* Removidos: Removidos<10>.
* 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<9>,  Next: Novas funcionalidades<14>,  Up: What’s New In Python 3 6

1.9.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * *note PEP 498: e1d, formatted string literals.

   * *note PEP 515: e1e, underscores in numeric literals.

   * *note PEP 526: e1f, syntax for variable annotations.

   * *note PEP 525: e20, asynchronous generators.

   * *note PEP 530: e21.: asynchronous comprehensions.

Novos módulos de biblioteca:

   * *note secrets: c5.: *note PEP 506 – Adding A Secrets Module To The
     Standard Library: e22.

Melhorias na implementação do CPython:

   * The *note dict: cb0. type has been reimplemented to use a *note
     more compact representation: e23. 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: e24.

   * The class attribute definition order is *note now preserved: e25.

   * The order of elements in ‘**kwargs’ now *note corresponds to the
     order: e26. in which keyword arguments were passed to the function.

   * DTrace and SystemTap *note probing support: e27. has been added.

   * The new *note PYTHONMALLOC: e28. environment variable can now be
     used to debug the interpreter memory allocation and access errors.

Melhorias significativas na biblioteca padrão:

   * The *note asyncio: b. 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: e29. has been implemented to
     support *note path-like objects: 59a.  All standard library
     functions operating on paths have been updated to work with the new
     protocol.

   * The *note datetime: 34. module has gained support for *note Local
     Time Disambiguation: e2a.

   * The *note typing: 10a. module received a number of *note
     improvements: e2b.

   * The *note tracemalloc: 105. module has been significantly reworked
     and is now used to provide better output for *note ResourceWarning:
     546. as well as provide better diagnostics for memory allocation
     errors.  See the *note PYTHONMALLOC section: e28. for more
     information.

Melhorias de Segurança:

   * The new *note secrets: c5. 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(): 73b. 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: 6c. and *note ssl: d5. modules now support
     OpenSSL 1.1.0.

   * The default settings and feature set of the *note ssl: d5. module
     have been improved.

   * The *note hashlib: 6c. module received support for the BLAKE2,
     SHA-3 and SHAKE hash algorithms and the *note scrypt(): e2c. key
     derivation function.

Melhorias do Windows:

   * *note PEP 528: e2d. and *note PEP 529: e2e, 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: e2f. 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: e0e. for more information.

   * A ‘python36.zip’ file now works as a landmark to infer *note
     PYTHONHOME: 3ed.  See *note the documentation: e0e. 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<14>,  Next: Outras mudanças na linguagem<8>,  Prev: Resumo – Destaques da versão<9>,  Up: What’s New In Python 3 6

1.9.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<14>

1.9.2.1 PEP 498: Formatted string literals
..........................................

PEP 498(1) introduces a new kind of string literals: 'f-strings', or
*note formatted string literals: 19a.

Formatted string literals are prefixed with ‘'f'’ and are similar to the
format strings accepted by *note str.format(): 828.  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(): 199. 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: 19a.

   ---------- 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<14>

1.9.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<14>

1.9.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: 4f3. 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<14>

1.9.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<14>

1.9.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<14>

1.9.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(): 1a6. calls to work
correctly from *note __init_subclass__(): 838. implementations, custom
metaclasses must ensure that the new ‘__classcell__’ namespace entry is
propagated to ‘type.__new__’ (as described in *note Criando o objeto
classe: e38.).

Ver também
..........

PEP 487(1) – Simpler customization of class creation

     PEP written and implemented by Martin Teichmann.

*note Feature documentation: e39.

   ---------- 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<14>

1.9.2.7 PEP 487: Descriptor Protocol Enhancements
.................................................

PEP 487(1) extends the descriptor protocol to include the new optional
*note __set_name__(): e3c. 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: e3d.

   ---------- 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<14>

1.9.2.8 PEP 519: Adding a file system path protocol
...................................................

File system paths have historically been represented as *note str: 169.
or *note bytes: 192. 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: 19b. 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: a8. from working with pre-existing
code, including Python’s standard library.

To fix this situation, a new interface represented by *note os.PathLike:
e3f. has been defined.  By implementing the *note __fspath__(): e40.
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:
169. or *note bytes: 192. object.  This means an object is considered
*note path-like: 59a. if it implements *note os.PathLike: e3f. or is a
*note str: 169. or *note bytes: 192. object which represents a file
system path.  Code can use *note os.fspath(): e41, *note os.fsdecode():
e42, or *note os.fsencode(): e43. to explicitly get a *note str: 169.
and/or *note bytes: 192. representation of a path-like object.

The built-in *note open(): 314. function has been updated to accept
*note os.PathLike: e3f. objects, as have all relevant functions in the
*note os: a5. and *note os.path: a6. modules, and most other functions
and classes in the standard library.  The *note os.DirEntry: 6b8. class
and relevant classes in *note pathlib: a8. have also been updated to
implement *note os.PathLike: e3f.

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: 59a. without any code changes, or at least
very minimal ones (e.g.  calling *note os.fspath(): e41. 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: 265. 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<14>

1.9.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: 4dc. and *note datetime.time: 1fa. 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: e45. 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<14>

1.9.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(): e47, which now defaults
to ‘'utf-8'’.

Applications that do not use str to represent paths should use *note
os.fsencode(): e43. and *note os.fsdecode(): e42. to ensure their bytes
are correctly encoded.  To revert to the previous behaviour, set *note
PYTHONLEGACYWINDOWSFSENCODING: 33d. or call *note
sys._enablelegacywindowsfsencoding(): 33c.

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<14>

1.9.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: e49.

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<14>

1.9.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__: e4b. attribute.

Also, the effective default class 'execution' namespace (returned from
*note type.__prepare__(): e4c.) 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<14>

1.9.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<14>

1.9.2.14 New dict implementation
................................

The *note dict: cb0. 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(): 183. 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<14>

1.9.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<14>

1.9.2.16 PYTHONMALLOC environment variable
..........................................

The new *note PYTHONMALLOC: e52. 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(): e53. called on a memory block allocated by
     *note PyMem_Malloc(): e54.

   * 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: 46d. is held when allocator functions of
     *note PYMEM_DOMAIN_OBJ: e55. (ex: *note PyObject_Malloc(): e56.)
     and *note PYMEM_DOMAIN_MEM: e57. (ex: *note PyMem_Malloc(): e54.)
     domains are called.

Checking if the GIL is held is also a new feature of Python 3.6.

See the *note PyMem_SetupDebugHooks(): e58. 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: 105. 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<14>

1.9.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: 503. or
providing application-specific profiling/debugging code.

More details in *note Instrumentando o CPython com DTrace e SystemTap:
e5a.

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<9>,  Prev: Novas funcionalidades<14>,  Up: What’s New In Python 3 6

1.9.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: 1ae.

   * It is now possible to set a *note special method: e5c. to ‘None’ to
     indicate that the corresponding operation is not available.  For
     example, if a class sets *note __iter__(): e5d. 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: e5e. for an example).  (Contributed by Emanuel Barry in
     bpo-26823(2).)

   * Import now raises the new exception *note ModuleNotFoundError: d31.
     (subclass of *note ImportError: 64f.) 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<9>,  Next: Módulos melhorados<9>,  Prev: Outras mudanças na linguagem<8>,  Up: What’s New In Python 3 6

1.9.4 Novos módulos
-------------------

* Menu:

* segredos::


File: python.info,  Node: segredos,  Up: Novos módulos<9>

1.9.4.1 segredos
................

The main purpose of the new *note secrets: c5. 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:
     bd. module should 'NOT' be used for security purposes.  Use *note
     secrets: c5. on Python 3.6+ and *note os.urandom(): 73b. 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<9>,  Next: Otimizações<9>,  Prev: Novos módulos<9>,  Up: What’s New In Python 3 6

1.9.5 Módulos melhorados
------------------------

* Menu:

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


File: python.info,  Node: array<4>,  Next: ast<6>,  Up: Módulos melhorados<9>

1.9.5.1 array
.............

Exhausted iterators of *note array.array: 4b8. 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<6>,  Next: asyncio<12>,  Prev: array<4>,  Up: Módulos melhorados<9>

1.9.5.2 ast
...........

The new *note ast.Constant: 2ed. 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<12>,  Next: binascii<2>,  Prev: ast<6>,  Up: Módulos melhorados<9>

1.9.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: b. module since Python 3.5.0 (all
backported to 3.5.x due to the provisional status):

   * The *note get_event_loop(): 2f0. 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(): e65. function and all functions that use
     it, such as *note loop.run_until_complete(): e66, now accept all
     kinds of *note awaitable objects: 4c3.  (Contributed by Yury
     Selivanov.)

   * New *note run_coroutine_threadsafe(): a78. function to submit
     coroutines to event loops from other threads.  (Contributed by
     Vincent Michel.)

   * New *note Transport.is_closing(): e67. method to check if the
     transport is closing or closed.  (Contributed by Yury Selivanov.)

   * The *note loop.create_server(): cfc. method can now accept a list
     of hosts.  (Contributed by Yann Sionneau.)

   * New *note loop.create_future(): e68. method to create Future
     objects.  This allows alternative event loop implementations, such
     as uvloop(2), to provide a faster *note asyncio.Future: dba.
     implementation.  (Contributed by Yury Selivanov in bpo-27041(3).)

   * New *note loop.get_exception_handler(): e69. method to get the
     current exception handler.  (Contributed by Yury Selivanov in
     bpo-27040(4).)

   * New *note StreamReader.readuntil(): 4ca. method to read data from
     the stream until a separator bytes sequence appears.  (Contributed
     by Mark Korenberg.)

   * The performance of *note StreamReader.readexactly(): e6a. has been
     improved.  (Contributed by Mark Korenberg in bpo-28370(5).)

   * The *note loop.getaddrinfo(): e02. 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(): e6b. 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: e6c. will now raise *note TypeError:
     198. when passed an instance of the *note StopIteration: de9.
     exception.  (Contributed by Chris Angelico in bpo-26221(7).)

   * New *note loop.connect_accepted_socket(): 9d4. 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(): e6d. to properly close pending
     asynchronous generators before closing the loop.  (Contributed by
     Yury Selivanov in bpo-28003(10).)

   * *note Future: dba. and *note Task: 1c7. 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<12>,  Up: Módulos melhorados<9>

1.9.5.4 binascii
................

The *note b2a_base64(): e6f. 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<9>

1.9.5.5 cmath
.............

The new *note cmath.tau: e71. ('τ') constant has been added.
(Contributed by Lisa Roach in bpo-12345(1), see PEP 628(2) for details.)

New constants: *note cmath.inf: e72. and *note cmath.nan: e73. to match
*note math.inf: e74. and *note math.nan: 868, and also *note cmath.infj:
e75. and *note cmath.nanj: e76. 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<5>,  Prev: cmath,  Up: Módulos melhorados<9>

1.9.5.6 collections
...................

The new *note Collection: e78. 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: e79. abstract base class represents iterable
classes that also provide the *note __reversed__(): e7a. method.
(Contributed by Ivan Levkivskyi in bpo-25987(2).)

The new *note AsyncGenerator: e7b. abstract base class represents
asynchronous generators.  (Contributed by Yury Selivanov in
bpo-28720(3).)

The *note namedtuple(): 4da. function now accepts an optional keyword
argument 'module', which, when specified, is used for the *note
__module__: 60b. attribute of the returned named tuple class.
(Contributed by Raymond Hettinger in bpo-17941(4).)

The 'verbose' and 'rename' arguments for *note namedtuple(): 4da. are
now keyword-only.  (Contributed by Raymond Hettinger in bpo-25628(5).)

Recursive *note collections.deque: 7e9. 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<5>,  Next: contextlib<4>,  Prev: collections<4>,  Up: Módulos melhorados<9>

1.9.5.7 concurrent.futures
..........................

The *note ThreadPoolExecutor: 93e. 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<6>,  Prev: concurrent futures<5>,  Up: Módulos melhorados<9>

1.9.5.8 contextlib
..................

The *note contextlib.AbstractContextManager: e7e. 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: 10a. module as *note typing.ContextManager:
e7f.  (Contributed by Brett Cannon in bpo-25609(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25609


File: python.info,  Node: datetime<6>,  Next: decimal<3>,  Prev: contextlib<4>,  Up: Módulos melhorados<9>

1.9.5.9 datetime
................

The *note datetime: 4dc. and *note time: 1fa. classes have the new *note
fold: e81. attribute used to disambiguate local time when necessary.
Many functions in the *note datetime: 34. have been updated to support
local time disambiguation.  See *note Local Time Disambiguation: e2a.
section for more information.  (Contributed by Alexander Belopolsky in
bpo-24773(1).)

The *note datetime.strftime(): e82. and *note date.strftime(): e83.
methods now support ISO 8601 date directives ‘%G’, ‘%u’ and ‘%V’.
(Contributed by Ashley Anderson in bpo-12006(2).)

The *note datetime.isoformat(): d19. 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(): e84. 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<3>,  Next: distutils<5>,  Prev: datetime<6>,  Up: Módulos melhorados<9>

1.9.5.10 decimal
................

New *note Decimal.as_integer_ratio(): e86. method that returns a pair
‘(n, d)’ of integers that represent the given *note Decimal: 1fd.
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<3>,  Prev: decimal<3>,  Up: Módulos melhorados<9>

1.9.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<3>,  Next: encodings<2>,  Prev: distutils<5>,  Up: Módulos melhorados<9>

1.9.5.12 email
..............

The new email API, enabled via the 'policy' keyword to various
constructors, is no longer provisional.  The *note email: 3f.
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: 49. classes now all accept an optional 'policy'
keyword.  (Contributed by Berker Peksag in bpo-27331(2).)

The *note DecodedGenerator: e89. now supports the 'policy' keyword.

There is a new *note policy: 53. attribute, *note message_factory: e8a,
that controls what class is used by default when the parser creates new
message objects.  For the *note email.policy.compat32: e8b. policy this
is *note Message: 57a, for the new policies it is *note EmailMessage:
579.  (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<3>,  Up: Módulos melhorados<9>

1.9.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<3>,  Prev: encodings<2>,  Up: Módulos melhorados<9>

1.9.5.14 enum
.............

Two new enumeration base classes have been added to the *note enum: 5a.
module: *note Flag: 82a. and *note IntFlag: e8e.  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: e8e. class for their constants.

The new *note enum.auto: e8f. 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<3>,  Next: fileinput<2>,  Prev: enum<7>,  Up: Módulos melhorados<9>

1.9.5.15 faulthandler
.....................

On Windows, the *note faulthandler: 5c. module now installs a handler
for Windows exceptions: see *note faulthandler.enable(): 20e.
(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<3>,  Up: Módulos melhorados<9>

1.9.5.16 fileinput
..................

*note hook_encoded(): e92. 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<9>

1.9.5.17 hashlib
................

*note hashlib: 6c. 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(): 847.
and *note blake2s(): 848. 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(): e94, *note sha3_256(): e95,
*note sha3_384(): e96, *note sha3_512(): e97, and SHAKE hash functions
*note shake_128(): e98. and *note shake_256(): e99. 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(): e2c. 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<9>

1.9.5.18 http.client
....................

*note HTTPConnection.request(): e9b. and *note endheaders(): e9c. 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<9>

1.9.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<7>,  Prev: idlelib e IDLE<2>,  Up: Módulos melhorados<9>

1.9.5.20 importlib
..................

Import now raises the new exception *note ModuleNotFoundError: d31.
(subclass of *note ImportError: 64f.) 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: e9f. now calls *note create_module():
ea0. on the wrapped loader, removing the restriction that *note
importlib.machinery.BuiltinImporter: ea1. and *note
importlib.machinery.ExtensionFileLoader: ea2. couldn’t be used with
*note importlib.util.LazyLoader: e9f.

*note importlib.util.cache_from_source(): 350, *note
importlib.util.source_from_cache(): 733, and *note
importlib.util.spec_from_file_location(): ea3. now accept a *note
path-like object: 59a.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15767


File: python.info,  Node: inspect<7>,  Next: json<2>,  Prev: importlib<6>,  Up: Módulos melhorados<9>

1.9.5.21 inspect
................

The *note inspect.signature(): 22e. 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(): 936. has been reversed.  While this
function is convenient for single/source Python 2/3 code bases, the
richer *note inspect.signature(): 22e. 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<2>,  Next: logging<4>,  Prev: inspect<7>,  Up: Módulos melhorados<9>

1.9.5.22 json
.............

*note json.load(): ea6. and *note json.loads(): b44. 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<8>,  Prev: json<2>,  Up: Módulos melhorados<9>

1.9.5.23 logging
................

The new *note WatchedFileHandler.reopenIfNeeded(): ea8. 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<8>,  Next: multiprocessing<6>,  Prev: logging<4>,  Up: Módulos melhorados<9>

1.9.5.24 math
.............

The tau ('τ') constant has been added to the *note math: 92. and *note
cmath: 19. 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<6>,  Next: os<9>,  Prev: math<8>,  Up: Módulos melhorados<9>

1.9.5.25 multiprocessing
........................

*note Proxy Objects: 24b. returned by *note multiprocessing.Manager():
24f. 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<9>,  Next: pathlib<12>,  Prev: multiprocessing<6>,  Up: Módulos melhorados<9>

1.9.5.26 os
...........

See the summary of *note PEP 519: e29. for details on how the *note os:
a5. and *note os.path: a6. modules now support *note path-like objects:
59a.

*note scandir(): c48. now supports *note bytes: 192. paths on Windows.

A new *note close(): eac. method allows explicitly closing a *note
scandir(): c48. iterator.  The *note scandir(): c48. iterator now
supports the *note context manager: 1e0. protocol.  If a ‘scandir()’
iterator is neither exhausted nor explicitly closed a *note
ResourceWarning: 546. will be emitted in its destructor.  (Contributed
by Serhiy Storchaka in bpo-25994(1).)

On Linux, *note os.urandom(): 73b. 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(): ead. 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<12>,  Next: pdb<7>,  Prev: os<9>,  Up: Módulos melhorados<9>

1.9.5.27 pathlib
................

*note pathlib: a8. now supports *note path-like objects: 59a.
(Contributed by Brett Cannon in bpo-27186(1).)

See the summary of *note PEP 519: e29. for details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27186


File: python.info,  Node: pdb<7>,  Next: pickle<3>,  Prev: pathlib<12>,  Up: Módulos melhorados<9>

1.9.5.28 pdb
............

The *note Pdb: 272. class constructor has a new optional 'readrc'
argument to control whether ‘.pdbrc’ files should be read.


File: python.info,  Node: pickle<3>,  Next: pickletools,  Prev: pdb<7>,  Up: Módulos melhorados<9>

1.9.5.29 pickle
...............

Objects that need ‘__new__’ called with keyword arguments can now be
pickled using *note pickle protocols: 27a. 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<4>,  Prev: pickle<3>,  Up: Módulos melhorados<9>

1.9.5.30 pickletools
....................

*note pickletools.dis(): eb2. 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<4>,  Next: random<4>,  Prev: pickletools,  Up: Módulos melhorados<9>

1.9.5.31 pydoc
..............

The *note pydoc: ba. module has learned to respect the ‘MANPAGER’
environment variable.  (Contributed by Matthias Klose in bpo-8637(1).)

*note help(): aca. and *note pydoc: ba. 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<6>,  Prev: pydoc<4>,  Up: Módulos melhorados<9>

1.9.5.32 random
...............

The new *note choices(): eb5. 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<6>,  Next: readline,  Prev: random<4>,  Up: Módulos melhorados<9>

1.9.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: eb7. objects now support *note index-like objects: 19e. 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<6>,  Up: Módulos melhorados<9>

1.9.5.34 readline
.................

Added *note set_auto_history(): eb9. 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<9>

1.9.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<9>

1.9.5.36 shlex
..............

The *note shlex: ebc. has much *note improved shell compatibility: ebd.
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<8>,  Prev: shlex<2>,  Up: Módulos melhorados<9>

1.9.5.37 site
.............

When specifying paths to add to *note sys.path: 3e1. 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<8>,  Next: socket<8>,  Prev: site<3>,  Up: Módulos melhorados<9>

1.9.5.38 sqlite3
................

*note sqlite3.Cursor.lastrowid: ec0. 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<8>,  Next: socketserver<2>,  Prev: sqlite3<8>,  Up: Módulos melhorados<9>

1.9.5.39 socket
...............

The *note ioctl(): ec2. function now supports the *note
SIO_LOOPBACK_FAST_PATH: ec3. control code.  (Contributed by Daniel
Stokes in bpo-26536(1).)

The *note getsockopt(): ec4. constants ‘SO_DOMAIN’, ‘SO_PROTOCOL’,
‘SO_PEERSEC’, and ‘SO_PASSSEC’ are now supported.  (Contributed by
Christian Heimes in bpo-26907(2).)

The *note setsockopt(): ec5. 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: ec6. to
interface with Linux Kernel crypto API. ‘ALG_*’, ‘SOL_ALG’ and *note
sendmsg_afalg(): ec7. 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<8>,  Prev: socket<8>,  Up: Módulos melhorados<9>

1.9.5.40 socketserver
.....................

Servers based on the *note socketserver: d2. module, including those
defined in *note http.server: 76, *note xmlrpc.server: 135. and *note
wsgiref.simple_server: 121, now support the *note context manager: 1e0.
protocol.  (Contributed by Aviv Palivoda in bpo-26404(1).)

The *note wfile: ec9. attribute of *note StreamRequestHandler: eca.
classes now implements the *note io.BufferedIOBase: 898. writable
interface.  In particular, calling *note write(): ecb. 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<8>,  Next: statistics<5>,  Prev: socketserver<2>,  Up: Módulos melhorados<9>

1.9.5.41 ssl
............

*note ssl: d5. 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: 354. 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: ecd. 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(): ece. 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: ecf. and
*note IntFlag: e8e.  (Contributed by Christian Heimes in bpo-28025(6).)

Server and client-side specific TLS protocols for *note SSLContext: 354.
were added.  (Contributed by Christian Heimes in bpo-28085(7).)

Added *note ssl.SSLContext.post_handshake_auth: c1c. to enable and *note
ssl.SSLSocket.verify_client_post_handshake(): c1d. 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<2>,  Prev: ssl<8>,  Up: Módulos melhorados<9>

1.9.5.42 statistics
...................

A new *note harmonic_mean(): ed1. 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<2>,  Next: subprocess<3>,  Prev: statistics<5>,  Up: Módulos melhorados<9>

1.9.5.43 struct
...............

*note struct: db. 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<2>,  Up: Módulos melhorados<9>

1.9.5.44 subprocess
...................

*note subprocess.Popen: 4b1. destructor now emits a *note
ResourceWarning: 546. warning if the child process is still running.
Use the context manager protocol (‘with proc: ...’) or explicitly call
the *note wait(): ed4. method to read the exit status of the child
process.  (Contributed by Victor Stinner in bpo-26741(1).)

The *note subprocess.Popen: 4b1. 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<9>

1.9.5.45 sys
............

The new *note getfilesystemencodeerrors(): ed6. 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(): ed7.
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<9>

1.9.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<9>

1.9.5.47 time
.............

The *note struct_time: eda. attributes ‘tm_gmtoff’ and ‘tm_zone’ are now
available on all platforms.


File: python.info,  Node: timeit,  Next: tkinter<7>,  Prev: time<6>,  Up: Módulos melhorados<9>

1.9.5.48 timeit
...............

The new *note Timer.autorange(): edc. convenience method has been added
to call *note Timer.timeit(): edd. 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: f5. 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<7>,  Next: traceback<4>,  Prev: timeit,  Up: Módulos melhorados<9>

1.9.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<7>,  Up: Módulos melhorados<9>

1.9.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<10>,  Prev: traceback<4>,  Up: Módulos melhorados<9>

1.9.5.51 tracemalloc
....................

The *note tracemalloc: 105. module now supports tracing memory
allocations in multiple different address spaces.

The new *note DomainFilter: ee1. 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<10>,  Next: unicodedata<8>,  Prev: tracemalloc<3>,  Up: Módulos melhorados<9>

1.9.5.52 typing
...............

Since the *note typing: 10a. module is *note provisional: 3ce, all
changes introduced in Python 3.6 have also been backported to Python
3.5.x.

The *note typing: 10a. 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: e7f. class has been added for
representing *note contextlib.AbstractContextManager: e7e.  (Contributed
by Brett Cannon in bpo-25609(2).)

The *note typing.Collection: ee3. class has been added for representing
*note collections.abc.Collection: e78.  (Contributed by Ivan Levkivskyi
in bpo-27598(3).)

The *note typing.ClassVar: 566. 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: ee4. 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(): ee5. 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<8>,  Next: unittest mock<2>,  Prev: typing<10>,  Up: Módulos melhorados<9>

1.9.5.53 unicodedata
....................

The *note unicodedata: 10b. 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<8>,  Up: Módulos melhorados<9>

1.9.5.54 unittest.mock
......................

The *note Mock: c34. class has the following improvements:

   * Two new methods, *note Mock.assert_called(): ee8. and *note
     Mock.assert_called_once(): ee9. to check if the mock object was
     called.  (Contributed by Amit Saha in bpo-26323(1).)

   * The *note Mock.reset_mock(): eea. 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<9>

1.9.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: eec. 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<9>

1.9.5.56 urllib.robotparser
...........................

*note RobotFileParser: eee. 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<2>,  Prev: urllib robotparser,  Up: Módulos melhorados<9>

1.9.5.57 venv
.............

*note venv: 117. 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<2>,  Next: winreg,  Prev: venv<5>,  Up: Módulos melhorados<9>

1.9.5.58 avisos
...............

A new optional 'source' parameter has been added to the *note
warnings.warn_explicit(): ef1. function: the destroyed object which
emitted a *note ResourceWarning: 546.  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: 546. warning is logged, the *note
tracemalloc: 105. 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: 105. is tracing Python memory allocations and if the
*note warnings: 118. 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<2>,  Up: Módulos melhorados<9>

1.9.5.59 winreg
...............

Added the 64-bit integer type *note REG_QWORD: ef3.  (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<9>

1.9.5.60 winsound
.................

Allowed keyword arguments to be passed to *note Beep: ef5, *note
MessageBeep: ef6, and *note PlaySound: ef7. (bpo-27982(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27982


File: python.info,  Node: xmlrpc client,  Next: zipfile<4>,  Prev: winsound,  Up: Módulos melhorados<9>

1.9.5.61 xmlrpc.client
......................

The *note xmlrpc.client: 134. 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<4>,  Next: zlib<2>,  Prev: xmlrpc client,  Up: Módulos melhorados<9>

1.9.5.62 zipfile
................

A new *note ZipInfo.from_file(): efa. class method allows making a *note
ZipInfo: 2ca. instance from a filesystem file.  A new *note
ZipInfo.is_dir(): efb. method can be used to check if the *note ZipInfo:
2ca. instance represents a directory.  (Contributed by Thomas Kluyver in
bpo-26039(1).)

The *note ZipFile.open(): 651. 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<2>,  Prev: zipfile<4>,  Up: Módulos melhorados<9>

1.9.5.63 zlib
.............

The *note compress(): 844. and *note decompress(): efd. 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<9>,  Next: Mudanças a construções e API C<2>,  Prev: Módulos melhorados<9>,  Up: What’s New In Python 3 6

1.9.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: dba. class now has an optimized C
     implementation.  (Contributed by Yury Selivanov and INADA Naoki in
     bpo-26081(3).)

   * The *note asyncio.Task: 1c7. class now has an optimized C
     implementation.  (Contributed by Yury Selivanov in bpo-28544(4).)

   * Various implementation improvements in the *note typing: 10a.
     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(): 190. and *note bytearray.fromhex():
     191.: 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(): e54. domain (*note
     PYMEM_DOMAIN_MEM: e57.) now use the *note pymalloc memory
     allocator: eff. 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(): f00. and *note pickle.loads(): f01. are now up
     to 10% faster when deserializing many small objects (Contributed by
     Victor Stinner in bpo-27056(14)).

   * Passing *note keyword arguments: f02. to a function has an overhead
     in comparison with passing *note positional arguments: f03.  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(): 599. and *note iglob(): 9fe. functions in
     the *note glob: 68. module; they are now about 3–6 times faster.
     (Contributed by Serhiy Storchaka in bpo-25596(16)).

   * Optimized globbing in *note pathlib: a8. by using *note
     os.scandir(): c48.; it is now about 1.5–4 times faster.
     (Contributed by Serhiy Storchaka in bpo-26032(17)).

   * *note xml.etree.ElementTree: 12b. 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: 212. 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<9>,  Up: What’s New In Python 3 6

1.9.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: 46d. must now be held when allocator functions of
     *note PYMEM_DOMAIN_OBJ: e55. (ex: *note PyObject_Malloc(): e56.)
     and *note PYMEM_DOMAIN_MEM: e57. (ex: *note PyMem_Malloc(): e54.)
     domains are called.

   * New *note Py_FinalizeEx(): f05. API which indicates if flushing
     buffered data failed.  (Contributed by Martin Panter in
     bpo-5319(5).)

   * *note PyArg_ParseTupleAndKeywords(): 618. now supports *note
     positional-only parameters: c6c.  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(): f06. function allows
     for specifying a subclass of *note ImportError: 64f. to raise.
     (Contributed by Eric Snow in bpo-15767(8).)

   * The new *note PyErr_ResourceWarning(): f07. function can be used to
     generate a *note ResourceWarning: 546. providing the source of the
     resource allocation.  (Contributed by Victor Stinner in
     bpo-26567(9).)

   * The new *note PyOS_FSPath(): f08. function returns the file system
     representation of a *note path-like object: 59a.  (Contributed by
     Brett Cannon in bpo-27186(10).)

   * The *note PyUnicode_FSConverter(): f09. and *note
     PyUnicode_FSDecoder(): 78c. functions will now accept *note
     path-like objects: 59a.

   ---------- 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<10>,  Prev: Mudanças a construções e API C<2>,  Up: What’s New In Python 3 6

1.9.8 Other Improvements
------------------------

   * When *note -version: f0b. (short form: *note -V: 495.) is supplied
     twice, Python prints *note sys.version: 496. 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<10>,  Next: Removidos<10>,  Prev: Other Improvements,  Up: What’s New In Python 3 6

1.9.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<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.  Starting in Python 3.6, the
use of ‘async’ or ‘await’ as names will generate a *note
DeprecationWarning: 1a3.

   ---------- 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<10>

1.9.9.2 Deprecated Python behavior
..................................

Raising the *note StopIteration: de9. exception inside a generator will
now generate a *note DeprecationWarning: 1a3, and will trigger a *note
RuntimeError: 243. in Python 3.7.  See *note PEP 479; Change
StopIteration handling inside generators: f0f. for details.

The *note __aiter__(): dea. 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:
1a3.  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: 1a3.  Although this will
eventually become a *note SyntaxError: 18e, 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: 713.  (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<10>

1.9.9.3 Deprecated Python modules, functions and methods
........................................................

* Menu:

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


File: python.info,  Node: asynchat,  Next: asyncore,  Up: Deprecated Python modules functions and methods<2>

1.9.9.4 asynchat
................

The ‘asynchat’ has been deprecated in favor of *note asyncio: b.
(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.9.9.5 asyncore
................

The ‘asyncore’ has been deprecated in favor of *note asyncio: b.
(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.9.9.6 dbm
...........

Unlike other *note dbm: 35. implementations, the *note dbm.dumb: 36.
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.9.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.9.9.8 grp
...........

The support of non-integer arguments in *note getgrgid(): f16. 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<10>,  Prev: grp,  Up: Deprecated Python modules functions and methods<2>

1.9.9.9 importlib
.................

The *note importlib.machinery.SourceFileLoader.load_module(): f18. and
*note importlib.machinery.SourcelessFileLoader.load_module(): f19.
methods are now deprecated.  They were the only remaining
implementations of *note importlib.abc.Loader.load_module(): a5f. in
*note importlib: 7b. that had not been deprecated in previous versions
of Python in favour of *note importlib.abc.Loader.exec_module(): a60.

The *note importlib.machinery.WindowsRegistryFinder: f1a. class is now
deprecated.  As of 3.6.0, it is still added to *note sys.meta_path: f1b.
by default (on Windows), but this may change in future releases.


File: python.info,  Node: os<10>,  Next: re<7>,  Prev: importlib<7>,  Up: Deprecated Python modules functions and methods<2>

1.9.9.10 os
...........

Undocumented support of general *note bytes-like objects: 193. as paths
in *note os: a5. functions, *note compile(): 4ab. 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<7>,  Next: ssl<9>,  Prev: os<10>,  Up: Deprecated Python modules functions and methods<2>

1.9.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<9>,  Next: tkinter<8>,  Prev: re<7>,  Up: Deprecated Python modules functions and methods<2>

1.9.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: d5. 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: 62, *note http.client: 73, *note imaplib: 78, *note
poplib: b1, and *note smtplib: cf. 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: d5. 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<8>,  Next: venv<6>,  Prev: ssl<9>,  Up: Deprecated Python modules functions and methods<2>

1.9.9.13 tkinter
................

The ‘tkinter.tix’ module is now deprecated.  *note tkinter: f6. users
should use *note tkinter.ttk: ff. instead.


File: python.info,  Node: venv<6>,  Prev: tkinter<8>,  Up: Deprecated Python modules functions and methods<2>

1.9.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<10>

1.9.9.15 xml
............

   * As mitigation against DTD and external entity retrieval, the *note
     xml.dom.minidom: 128. and *note xml.sax: 12f. 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<10>

1.9.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: f24. instead.


File: python.info,  Node: Deprecated Build Options,  Prev: Deprecated functions and types of the C API<2>,  Up: Descontinuados<10>

1.9.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<10>,  Next: Porting to Python 3 6,  Prev: Descontinuados<10>,  Up: What’s New In Python 3 6

1.9.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<10>

1.9.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(): 59c. they are still allowed, but deprecated.  The
     *note re.LOCALE: d57. flag can now only be used with binary
     patterns.

   * ‘inspect.getmoduleinfo()’ was removed (was deprecated since CPython
     3.3).  *note inspect.getmodulename(): f28. 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: 104. 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: f6. widget classes were removed (corresponding Tk
     commands were obsolete since Tk 4.0).

   * The *note open(): 651. method of the *note zipfile.ZipFile: 8c8.
     class no longer supports the ‘'U'’ mode (was deprecated since
     Python 3.4).  Use *note io.TextIOWrapper: 9b4. for reading
     compressed text files in *note universal newlines: f29. 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<10>,  Up: What’s New In Python 3 6

1.9.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<9>.
* Alterações na API C: Alterações na API C<15>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<9>.


File: python.info,  Node: Changes in ‘python’ Command Behavior,  Next: Alterações na API Python<9>,  Up: Porting to Python 3 6

1.9.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<9>,  Next: Alterações na API C<15>,  Prev: Changes in ‘python’ Command Behavior,  Up: Porting to Python 3 6

1.9.11.2 Alterações na API Python
.................................

   * *note open(): 314. will no longer allow combining the ‘'U'’ mode
     flag with ‘'+'’.  (Contributed by Jeff Balogh and John O’Connor in
     bpo-2091(1).)

   * *note sqlite3: d4. no longer implicitly commits an open transaction
     before DDL statements.

   * On Linux, *note os.urandom(): 73b. now blocks until the system
     urandom entropy pool is initialized to increase the security.

   * When *note importlib.abc.Loader.exec_module(): a60. is defined,
     *note importlib.abc.Loader.create_module(): ea0. must also be
     defined.

   * *note PyErr_SetImportError(): f2d. now sets *note TypeError: 198.
     when its 'msg' argument is not set.  Previously only ‘NULL’ was
     returned.

   * The format of the *note co_lnotab: 32e. 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: 9a5,
     ‘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: 21. 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(): f2e.
     and *note urlparse(): 35f. results now raises *note ValueError:
     2ea. for out-of-range values, rather than returning *note None:
     87a.  See bpo-20059(4).

   * The ‘imp’ module now raises a *note DeprecationWarning: 1a3.
     instead of *note PendingDeprecationWarning: abc.

   * The following modules have had missing APIs added to their *note
     __all__: f2f. attributes to match the documented APIs: *note
     calendar: 15, ‘cgi’, *note csv: 2d, *note ElementTree: 12b, *note
     enum: 5a, *note fileinput: 5f, *note ftplib: 62, *note logging: 8b,
     *note mailbox: 8f, *note mimetypes: 93, *note optparse: a4, *note
     plistlib: b0, ‘smtpd’, *note subprocess: dc, *note tarfile: e4,
     *note threading: f3. and *note wave: 119.  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: 713.
     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: 64f. will be raised.  Previously, *note
     SystemError: 78a. could be raised.  (Contributed by Brett Cannon in
     bpo-18018(7).)

   * Servers based on the *note socketserver: d2. module, including
     those defined in *note http.server: 76, *note xmlrpc.server: 135.
     and *note wsgiref.simple_server: 121, now only catch exceptions
     derived from *note Exception: bc3.  Therefore if a request handler
     raises an exception like *note SystemExit: f30. or *note
     KeyboardInterrupt: bbb, *note handle_error(): f31. 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: f32. instead
     of *note KeyError: 5dd. if the user doesn’t have privileges.

   * The *note socket.socket.close(): f33. 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(): f34, *note dumps():
     f35, *note load(): ea6. and *note loads(): b44. functions and *note
     JSONEncoder: f36. and *note JSONDecoder: f37. class constructors in
     the *note json: 86. module are now *note keyword-only: 59e.
     (Contributed by Serhiy Storchaka in bpo-18726(10).)

   * Subclasses de *note type: f38. 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: f38. (other than the metaclass hint, ‘metaclass’) is
     now consistently delegated to *note object.__init_subclass__():
     838.  This means that *note type.__new__: 795. and *note
     type.__init__: 8b4. both now accept arbitrary keyword arguments,
     but *note object.__init_subclass__(): 838. (which is called from
     *note type.__new__: 795.) will reject them by default.  Custom
     metaclasses accepting additional keyword arguments will need to
     adjust their calls to *note type.__new__: 795. (whether direct or
     via *note super: 1a6.) 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: 111. module and the *note
     http.client.HTTPConnection.request(): e9b. 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: bce. now returns rows of type *note
     OrderedDict: 7e8.  (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(): 4da.
     are now keyword-only.  (Contributed by Raymond Hettinger in
     bpo-25628(15).)

   * On Linux, *note ctypes.util.find_library(): f39. now looks in
     ‘LD_LIBRARY_PATH’ for shared libraries.  (Contributed by Vinay
     Sajip in bpo-9998(16).)

   * The *note imaplib.IMAP4: af5. 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(): f3a. 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(): f3b. and *note
     pkgutil.walk_packages(): ded. functions now return *note
     ModuleInfo: f3c. named tuples.  (Contributed by Ramchandra Apte in
     bpo-17211(19).)

   * *note re.sub(): 59c. 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: 8c8. will now raise *note
     NotImplementedError: 368. for unrecognized compression values.
     Previously a plain *note RuntimeError: 243. was raised.
     Additionally, calling *note ZipFile: 8c8. methods on a closed
     ZipFile or calling the *note write(): f3d. method on a ZipFile
     created with mode ‘'r'’ will raise a *note ValueError: 2ea.
     Previously, a *note RuntimeError: 243. was raised in those
     scenarios.

   * when custom metaclasses are combined with zero-argument *note
     super(): 1a6. 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: 1a3. in Python 3.6 and a *note RuntimeError:
     243. in Python 3.8.

   * With the introduction of *note ModuleNotFoundError: d31, import
     system consumers may start expecting import system replacements to
     raise that more specific exception when appropriate, rather than
     the less-specific *note ImportError: 64f.  To provide future
     compatibility with such consumers, implementers of alternative
     import systems that completely replace *note __import__(): ac7.
     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<15>,  Next: Alterações de bytecode do CPython<9>,  Prev: Alterações na API Python<9>,  Up: Porting to Python 3 6

1.9.11.3 Alterações na API C
............................

   * The *note PyMem_Malloc(): e54. allocator family now uses the *note
     pymalloc allocator: eff. rather than the system ‘malloc()’.
     Applications calling *note PyMem_Malloc(): e54. without holding the
     GIL can now crash.  Set the *note PYTHONMALLOC: e52. environment
     variable to ‘debug’ to validate the usage of memory allocators in
     your application.  See bpo-26249(1).

   * *note Py_Exit(): f3f. (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<9>,  Prev: Alterações na API C<15>,  Up: Porting to Python 3 6

1.9.11.4 Alterações de bytecode do CPython
..........................................

There have been several major changes to the *note bytecode: 4a4. 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: f41. opcodes as part
     of the *note formatted string literal: e1d. implementation.
     (Contributed by Eric Smith in bpo-25483(3) and Serhiy Storchaka in
     bpo-27078(4).)

   * The new ‘BUILD_CONST_KEY_MAP’ 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:
     f42, ‘CALL_FUNCTION’, ‘CALL_FUNCTION_KW’ and
     ‘BUILD_MAP_UNPACK_WITH_CALL’ opcodes have been modified, the new
     *note CALL_FUNCTION_EX: f43. 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: f44. and ‘STORE_ANNOTATION’
     opcodes have been added to support the new *note variable
     annotation: f45. 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.9.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.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.6.2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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.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.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.9.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.9.14 Notable changes in Python 3.6.5
--------------------------------------

The *note locale.localeconv(): dec. 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.9.15 Notable changes in Python 3.6.7
--------------------------------------

*note xml.dom.minidom: 128. and *note xml.sax: 12f. modules no longer
process external entities by default.  See also gh-61441(1).

In 3.6.7 the *note tokenize: 101. 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.9.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(): 931.
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.9.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(): 31d. e *note urllib.parse.parse_qsl(): 31c.
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.9.18 Notable changes in Python 3.6.14
---------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: aec.
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(): 110. 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.10 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<10>.
* Novas funcionalidades: Novas funcionalidades<15>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<9>.
* Novos módulos: Novos módulos<10>.
* Módulos melhorados: Módulos melhorados<10>.
* Other module-level changes::
* Otimizações: Otimizações<10>.
* Mudanças a construções e API C: Mudanças a construções e API C<3>.
* Descontinuados: Descontinuados<11>.
* Removidos: Removidos<11>.
* 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<10>,  Next: Novas funcionalidades<15>,  Up: O que há de novo no Python 3 5

1.10.1 Resumo – Destaques da versão
-----------------------------------

Novos recursos de sintaxe:

   * *note PEP 492: f53, coroutines with async and await syntax.

   * *note PEP 465: f54, a new matrix multiplication operator: ‘a @ b’.

   * *note PEP 448: f55, additional unpacking generalizations.

Novos módulos de biblioteca:

   * *note typing: 10a.: *note PEP 484 – Type Hints: f56.

   * *note zipapp: 136.: *note PEP 441 Improving Python ZIP Application
     Support: f57.

Novos recursos embutidos:

   * ‘bytes % args’, ‘bytearray % args’: *note PEP 461: f58. – Adding
     ‘%’ formatting to bytes and bytearray.

   * New *note bytes.hex(): f59, *note bytearray.hex(): f5a. and *note
     memoryview.hex(): f5b. methods.  (Contributed by Arnon Yaari in
     bpo-9951(1).)

   * *note memoryview: 165. 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: f5c. 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: 754. and *note sys.stdout: cc0. 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: f5d.)

   * 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: f5e.)

Melhorias significativas na biblioteca padrão:

   * *note collections.OrderedDict: 7e8. is now *note implemented in C:
     f5f, which makes it 4 to 100 times faster.

   * The *note ssl: d5. module gained *note support for Memory BIO: f60,
     which decouples SSL protocol handling from network IO.

   * The new *note os.scandir(): c48. function provides a *note better
     and significantly faster way: f61. of directory traversal.

   * *note functools.lru_cache(): bd8. has been mostly *note
     reimplemented in C: f62, yielding much better performance.

   * The new *note subprocess.run(): d73. function provides a *note
     streamlined way to run subprocesses: f63.

   * The *note traceback: 104. module has been significantly *note
     enhanced: f64. 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: 354.
     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: c91. 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<15>,  Next: Outras mudanças na linguagem<9>,  Prev: Resumo – Destaques da versão<10>,  Up: O que há de novo no Python 3 5

1.10.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<15>

1.10.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: 4c3, *note coroutine
functions: f67, *note asynchronous iteration: f68, and *note
asynchronous context managers: 7e5.

Coroutine functions are declared using the new *note async def: 7e2.
syntax:

     >>> async def coro():
     ...     return 'spam'

Inside a coroutine function, the new *note await: 18d. 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:
4c3. protocol by defining the *note __await__(): f69. method.

PEP 492 also adds *note async for: c94. 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: c94. and *note async with: 185. can only
be used inside a coroutine function declared with *note async def: 7e2.

Coroutine functions are intended to be run inside a compatible event
loop, such as the *note asyncio loop: f6a.

     Nota: 
     Alterado na versão 3.5.2: Starting with CPython 3.5.2, ‘__aiter__’
     can directly return *note asynchronous iterators: 4c1.  Returning
     an *note awaitable: 4c3. object will result in a *note
     PendingDeprecationWarning: abc.

     See more details in the *note Iteradores assíncronos: f6b.
     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<15>

1.10.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__(): f6d, *note
__rmatmul__(): f6e, and *note __imatmul__(): f6f. 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<15>

1.10.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: f71.:

     >>> 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: f72. and *note Sintaxes de
criação de dicionário: f73.):

     >>> *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<15>

1.10.2.4 PEP 461 - percent formatting support for bytes and bytearray
.....................................................................

PEP 461(1) adds support for the ‘%’ *note interpolation operator: f75.
to *note bytes: 192. and *note bytearray: 342.

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<15>

1.10.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: 3ce. 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 *note
__annotations__: 455. 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: 8b0. which is consistent with (i.e.  assignable to and from)
all types.

Ver também
..........

   * *note typing: 10a. 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<15>

1.10.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():
c48, to the standard library.  Additionally, *note os.walk(): 6c5. 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(): 26c. 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(): c48. to
display all the files (excluding directories) in the given 'path' that
don’t start with ‘'.'’.  The *note entry.is_file(): f78. 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<15>

1.10.2.7 PEP 475: Retry system calls failing with EINTR
.......................................................

An *note errno.EINTR: f7b. 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: f7c. 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:
f7c. 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(): 314. and *note io.open(): 735.;

   * functions of the *note faulthandler: 5c. module;

   * *note os: a5. functions: *note fchdir(): f7d, *note fchmod(): 524,
     *note fchown(): f7e, *note fdatasync(): f7f, *note fstat(): f80,
     *note fstatvfs(): f81, *note fsync(): f82, *note ftruncate(): f83,
     *note mkfifo(): f84, *note mknod(): f85, *note open(): f86, *note
     posix_fadvise(): f87, *note posix_fallocate(): f88, *note pread():
     d4a, *note pwrite(): d4d, *note read(): f89, *note readv(): d49,
     *note sendfile(): cf8, *note wait3(): f8a, *note wait4(): f8b,
     *note wait(): f8c, *note waitid(): f8d, *note waitpid(): f8e, *note
     write(): f8f, *note writev(): d4c.;

   * special cases: *note os.close(): d5f. and *note os.dup2(): d4e. now
     ignore *note EINTR: f7b. errors; the syscall is not retried (see
     the PEP for the rationale);

   * *note select: c6. functions: *note devpoll.poll(): f90, *note
     epoll.poll(): f91, *note kqueue.control(): f92, *note poll.poll():
     f93, *note select(): f94.;

   * methods of the *note socket: f95. class: *note accept(): f96, *note
     connect(): f97. (except for non-blocking sockets), *note recv():
     f98, *note recvfrom(): f99, *note recvmsg(): f9a, *note send():
     f9b, *note sendall(): f9c, *note sendmsg(): 696, *note sendto():
     f9d.;

   * *note signal.sigtimedwait(): f9e. and *note signal.sigwaitinfo():
     f9f.;

   * *note time.sleep(): 8a1.

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<15>

1.10.2.8 PEP 479: Change StopIteration handling inside generators
.................................................................

The interaction of generators and *note StopIteration: de9. 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: 243. before it exits the generator frame.  The main goal
of this change is to ease debugging in the situation where an unguarded
*note next(): 9ce. 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__: fa1. 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: abc.
will be raised whenever a *note StopIteration: de9. 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<15>

1.10.2.9 PEP 485: A function for testing approximate equality
.............................................................

PEP 485(1) adds the *note math.isclose(): fa4. and *note
cmath.isclose(): fa5. 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<15>

1.10.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<15>

1.10.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: 18c. or *note -OO: fa9.
Consequently, bytecode files generated from *note -O: 18c, and *note
-OO: fa9. may now exist simultaneously.  *note
importlib.util.cache_from_source(): 350. 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<15>

1.10.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<10>,  Prev: Novas funcionalidades<15>,  Up: O que há de novo no Python 3 5

1.10.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: 7ee. option now affects comparisons of *note bytes:
     192. with *note int: 19b.  (Contributed by Serhiy Storchaka in
     bpo-23681(3).)

   * New Kazakh ‘kz1048’ and Tajik ‘koi8_t’ *note codecs: fac.
     (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(): 4da. 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<10>,  Next: Módulos melhorados<10>,  Prev: Outras mudanças na linguagem<9>,  Up: O que há de novo no Python 3 5

1.10.4 Novos módulos
--------------------

* Menu:

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


File: python.info,  Node: typing<11>,  Next: zipapp<2>,  Up: Novos módulos<10>

1.10.4.1 typing
...............

The new *note typing: 10a. *note provisional: 3ce. module provides
standard definitions and tools for function type annotations.  See *note
Type Hints: f56. for more information.


File: python.info,  Node: zipapp<2>,  Prev: typing<11>,  Up: Novos módulos<10>

1.10.4.2 zipapp
...............

The new *note zipapp: 136. 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<10>,  Next: Other module-level changes,  Prev: Novos módulos<10>,  Up: O que há de novo no Python 3 5

1.10.5 Módulos melhorados
-------------------------

* Menu:

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


File: python.info,  Node: argparse<6>,  Next: asyncio<13>,  Up: Módulos melhorados<10>

1.10.5.1 argparse
.................

The *note ArgumentParser: 1bd. class now allows disabling *note
abbreviated usage: fb2. of long options by setting *note allow_abbrev:
fb3. 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<13>,  Next: bz2,  Prev: argparse<6>,  Up: Módulos melhorados<10>

1.10.5.2 asyncio
................

Since the *note asyncio: b. module is *note provisional: 3ce, all
changes introduced in Python 3.5 have also been backported to Python
3.4.x.

Notable changes in the *note asyncio: b. module since Python 3.4.0:

   * New debugging APIs: *note loop.set_debug(): fb5. and *note
     loop.get_debug(): fb6. 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(): fb7. method to check if the event
     loop is closed.  (Contributed by Victor Stinner in bpo-21326(2).)

   * A new *note loop.create_task(): 1ca. to conveniently create and
     schedule a new *note Task: 1c7. for a coroutine.  The ‘create_task’
     method is also used by all asyncio functions that wrap coroutines
     into tasks, such as *note asyncio.wait(): 69c, *note
     asyncio.gather(): 808, etc.  (Contributed by Victor Stinner.)

   * A new *note transport.get_write_buffer_limits(): fb8. 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(): e65.  (Contributed by Yury Selivanov.)

   * New *note loop.set_task_factory(): 1c8. and *note
     loop.get_task_factory(): fb9. methods to customize the task factory
     that *note loop.create_task(): 1ca. method uses.  (Contributed by
     Yury Selivanov.)

   * New *note Queue.join(): fba. and *note Queue.task_done(): fbb.
     queue methods.  (Contributed by Victor Stinner.)

   * The ‘JoinableQueue’ class was removed, in favor of the *note
     asyncio.Queue: c5e. class.  (Contributed by Victor Stinner.)

Updates in 3.5.1:

   * The *note ensure_future(): e65. function and all functions that use
     it, such as *note loop.run_until_complete(): e66, now accept all
     kinds of *note awaitable objects: 4c3.  (Contributed by Yury
     Selivanov.)

   * New *note run_coroutine_threadsafe(): a78. function to submit
     coroutines to event loops from other threads.  (Contributed by
     Vincent Michel.)

   * New *note Transport.is_closing(): e67. method to check if the
     transport is closing or closed.  (Contributed by Yury Selivanov.)

   * The *note loop.create_server(): cfc. method can now accept a list
     of hosts.  (Contributed by Yann Sionneau.)

Updates in 3.5.2:

   * New *note loop.create_future(): e68. method to create Future
     objects.  This allows alternative event loop implementations, such
     as uvloop(3), to provide a faster *note asyncio.Future: dba.
     implementation.  (Contributed by Yury Selivanov.)

   * New *note loop.get_exception_handler(): e69. method to get the
     current exception handler.  (Contributed by Yury Selivanov.)

   * New *note StreamReader.readuntil(): 4ca. method to read data from
     the stream until a separator bytes sequence appears.  (Contributed
     by Mark Korenberg.)

   * The *note loop.create_connection(): 80d. and *note
     loop.create_server(): cfc. 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): fbc. 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<13>,  Up: Módulos melhorados<10>

1.10.5.3 bz2
............

The *note BZ2Decompressor.decompress: fbe. 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<10>

1.10.5.4 cgi
............

The ‘FieldStorage’ class now supports the *note context manager: 1e0.
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<10>

1.10.5.5 cmath
..............

A new function *note isclose(): fa5. 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<10>

1.10.5.6 código
...............

The *note InteractiveInterpreter.showtraceback(): fc2. 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<10>

1.10.5.7 collections
....................

The *note OrderedDict: 7e8. 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(): a5b. iteration.  (Contributed by
Serhiy Storchaka in bpo-19505(2).)

The *note deque: 7e9. class now defines *note index(): fc4, *note
insert(): fc5, and *note copy(): fc6, and supports the ‘+’ and ‘*’
operators.  This allows deques to be recognized as a *note
MutableSequence: 4b9. and improves their substitutability for lists.
(Contributed by Raymond Hettinger in bpo-23704(3).)

Docstrings produced by *note namedtuple(): 4da. 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: fc7. class now implements the *note
__getnewargs__(): fc8, *note __rmod__(): fc9, *note casefold(): fca,
*note format_map(): fcb, *note isprintable(): fcc, and *note
maketrans(): fcd. methods to match the corresponding methods of *note
str: 169.  (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<10>

1.10.5.8 collections.abc
........................

The ‘Sequence.index()’ method now accepts 'start' and 'stop' arguments
to match the corresponding methods of *note tuple: 608, *note list: 24c,
etc.  (Contributed by Devin Jeanpierre in bpo-23086(1).)

A new *note Generator: fcf. abstract base class.  (Contributed by Stefan
Behnel in bpo-24018(2).)

New *note Awaitable: fd0, *note Coroutine: fd1, *note AsyncIterator:
fd2, and *note AsyncIterable: fd3. 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<6>,  Prev: collections abc<3>,  Up: Módulos melhorados<10>

1.10.5.9 compileall
...................

A new *note compileall: 21. option, ‘-j N’, allows running 'N' workers
simultaneously to perform parallel bytecode compilation.  The *note
compile_dir(): d0f. 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(): d0f, *note
compile_file(): fd5, and *note compile_path(): fd6. 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<6>,  Next: configparser<5>,  Prev: compileall<4>,  Up: Módulos melhorados<10>

1.10.5.10 concurrent.futures
............................

The *note Executor.map(): fd8. method now accepts a 'chunksize' argument
to allow batching of tasks to improve performance when *note
ProcessPoolExecutor(): 1d6. is used.  (Contributed by Dan O’Reilly in
bpo-11271(1).)

The number of workers in the *note ThreadPoolExecutor: 93e. 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<5>,  Next: contextlib<5>,  Prev: concurrent futures<6>,  Up: Módulos melhorados<10>

1.10.5.11 configparser
......................

*note configparser: 26. now provides a way to customize the conversion
of values by specifying a dictionary of converters in the *note
ConfigParser: 4d8. 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<5>,  Up: Módulos melhorados<10>

1.10.5.12 contextlib
....................

The new *note redirect_stderr(): fdb. *note context manager: 1e0.
(similar to *note redirect_stdout(): fdc.) makes it easier for utility
scripts to handle inflexible APIs that write their output to *note
sys.stderr: b29. 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<5>,  Prev: contextlib<5>,  Up: Módulos melhorados<10>

1.10.5.13 csv
.............

The *note writerow(): fde. 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<5>,  Next: dbm<5>,  Prev: csv<3>,  Up: Módulos melhorados<10>

1.10.5.14 curses
................

The new *note update_lines_cols(): fe0. function updates the *note
LINES: fe1. and *note COLS: fe2. 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<3>,  Prev: curses<5>,  Up: Módulos melhorados<10>

1.10.5.15 dbm
.............

*note dumb.open: c80. 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<3>,  Next: distutils<7>,  Prev: dbm<5>,  Up: Módulos melhorados<10>

1.10.5.16 difflib
.................

The charset of HTML documents generated by *note HtmlDiff.make_file():
fe5. 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(): fe6. 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<3>,  Up: Módulos melhorados<10>

1.10.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<4>,  Prev: distutils<7>,  Up: Módulos melhorados<10>

1.10.5.18 doctest
.................

The *note DocTestSuite(): fe9. function returns an empty *note
unittest.TestSuite: fea. if 'module' contains no docstrings, instead of
raising *note ValueError: 2ea.  (Contributed by Glenn Jones in
bpo-15916(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15916


File: python.info,  Node: email<4>,  Next: enum<8>,  Prev: doctest<3>,  Up: Módulos melhorados<10>

1.10.5.19 email
...............

A new policy option *note Policy.mangle_from_: fec. 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: e8b. and ‘False’ for all other policies.  (Contributed by
Milan Oberkirch in bpo-20098(1).)

A new *note Message.get_content_disposition(): fed. 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: fee. 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: fef. constructor now accepts a *note
charset.Charset: ff0. 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<4>,  Prev: email<4>,  Up: Módulos melhorados<10>

1.10.5.20 enum
..............

The *note Enum: 837. 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<4>,  Next: functools<5>,  Prev: enum<8>,  Up: Módulos melhorados<10>

1.10.5.21 faulthandler
......................

The *note enable(): 20e, *note register(): ff3, *note dump_traceback():
ff4. and *note dump_traceback_later(): ff5. 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<5>,  Next: glob<3>,  Prev: faulthandler<4>,  Up: Módulos melhorados<10>

1.10.5.22 functools
...................

Most of the *note lru_cache(): bd8. 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<5>,  Up: Módulos melhorados<10>

1.10.5.23 glob
..............

The *note iglob(): 9fe. and *note glob(): 599. 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<2>,  Prev: glob<3>,  Up: Módulos melhorados<10>

1.10.5.24 gzip
..............

The 'mode' argument of the *note GzipFile: 650. 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<2>,  Next: http<3>,  Prev: gzip<4>,  Up: Módulos melhorados<10>

1.10.5.25 heapq
...............

Element comparison in *note merge(): ffa. can now be customized by
passing a *note key function: ffb. 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<3>,  Next: http client<3>,  Prev: heapq<2>,  Up: Módulos melhorados<10>

1.10.5.26 http
..............

A new *note HTTPStatus: af2. 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<3>,  Up: Módulos melhorados<10>

1.10.5.27 http.client
.....................

*note HTTPConnection.getresponse(): ffe. now raises a *note
RemoteDisconnected: fff. exception when a remote server connection is
closed unexpectedly.  Additionally, if a *note ConnectionError: 1000.
(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<3>,  Prev: http client<3>,  Up: Módulos melhorados<10>

1.10.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<3>,  Next: imghdr,  Prev: idlelib e IDLE<3>,  Up: Módulos melhorados<10>

1.10.5.29 imaplib
.................

The *note IMAP4: af5. class now supports the *note context manager: 1e0.
protocol.  When used in a *note with: 186. 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: 78. module now supports RFC 5161(2) (ENABLE
Extension) and RFC 6855(3) (UTF-8 Support) via the *note IMAP4.enable():
1003. method.  A new *note IMAP4.utf8_enabled: 1004. 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: 78. 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<3>,  Up: Módulos melhorados<10>

1.10.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<8>,  Prev: imghdr,  Up: Módulos melhorados<10>

1.10.5.31 importlib
...................

The *note util.LazyLoader: e9f. 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(): 1007. 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(): 1008. function is now the
preferred way to create a new module.  As opposed to creating a *note
types.ModuleType: 1009. 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<8>,  Next: io<7>,  Prev: importlib<8>,  Up: Módulos melhorados<10>

1.10.5.32 inspect
.................

Both the *note Signature: 4dd. and *note Parameter: 4de. classes are now
picklable and hashable.  (Contributed by Yury Selivanov in bpo-20726(1)
and bpo-20334(2).)

A new *note BoundArguments.apply_defaults(): 100b. 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(): 937. makes
subclassing of *note Signature: 4dd. easier.  (Contributed by Yury
Selivanov and Eric Snow in bpo-17373(4).)

The *note signature(): 22e. 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: f67. and
*note coroutine objects: 6ae. has been added: *note iscoroutine(): 100c,
*note iscoroutinefunction(): 30b, *note isawaitable(): 100d, *note
getcoroutinelocals(): 100e, and *note getcoroutinestate(): 100f.
(Contributed by Yury Selivanov in bpo-24017(6) and bpo-24400(7).)

The *note stack(): 857, *note trace(): 858, *note getouterframes(): 855,
and *note getinnerframes(): 856. 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<7>,  Next: ipaddress<4>,  Prev: inspect<8>,  Up: Módulos melhorados<10>

1.10.5.33 io
............

A new *note BufferedIOBase.readinto1(): 1011. method, that uses at most
one call to the underlying raw stream’s *note RawIOBase.read(): 1012. or
*note RawIOBase.readinto(): 1013. 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<3>,  Prev: io<7>,  Up: Módulos melhorados<10>

1.10.5.34 ipaddress
...................

Both the *note IPv4Network: 508. and *note IPv6Network: 509. 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: 1015. attribute for the *note IPv4Address:
506. and *note IPv6Address: 507. 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<3>,  Next: linecache<3>,  Prev: ipaddress<4>,  Up: Módulos melhorados<10>

1.10.5.35 json
..............

The *note json.tool: 87. 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: 1017. instead of *note
ValueError: 2ea. 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<3>,  Next: locale<6>,  Prev: json<3>,  Up: Módulos melhorados<10>

1.10.5.36 linecache
...................

A new *note lazycache(): 1019. function can be used to capture
information about a non-file-based module to permit getting its lines
later via *note getline(): 23f.  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<3>,  Up: Módulos melhorados<10>

1.10.5.37 locale
................

A new *note delocalize(): 101b. 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<10>

1.10.5.38 logging
.................

All logging methods (*note Logger: d3a. *note log(): 101d, *note
exception(): 101e, *note critical(): 101f, *note debug(): 1020, 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: 1021. class now accepts an optional
*note ssl.SSLContext: 354. instance to configure SSL settings used in an
HTTP connection.  (Contributed by Alex Gaynor in bpo-22788(2).)

The *note handlers.QueueListener: 241. 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<9>,  Prev: logging<5>,  Up: Módulos melhorados<10>

1.10.5.39 lzma
..............

The *note LZMADecompressor.decompress(): 1023. 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<9>,  Next: multiprocessing<7>,  Prev: lzma,  Up: Módulos melhorados<10>

1.10.5.40 math
..............

Two new constants have been added to the *note math: 92. module: *note
inf: e74. and *note nan: 868.  (Contributed by Mark Dickinson in
bpo-23185(1).)

A new function *note isclose(): fa4. provides a way to test for
approximate equality.  (Contributed by Chris Barker and Tal Einat in
bpo-24270(2).)

A new *note gcd(): b02. 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<7>,  Next: operador<2>,  Prev: math<9>,  Up: Módulos melhorados<10>

1.10.5.41 multiprocessing
.........................

*note sharedctypes.synchronized(): 1026. objects now support the *note
context manager: 1e0. 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<11>,  Prev: multiprocessing<7>,  Up: Módulos melhorados<10>

1.10.5.42 operador
..................

*note attrgetter(): 1028, *note itemgetter(): c4b, and *note
methodcaller(): 1029. objects now support pickling.  (Contributed by
Josh Rosenberg and Serhiy Storchaka in bpo-22955(1).)

New *note matmul(): 102a. and *note imatmul(): 102b. 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<11>,  Next: pathlib<13>,  Prev: operador<2>,  Up: Módulos melhorados<10>

1.10.5.43 os
............

The new *note scandir(): c48. function returning an iterator of *note
DirEntry: 6b8. objects has been added.  If possible, *note scandir():
c48. 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: 102d. 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(): 73b. 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(): 102e. and *note set_blocking(): 102f.
functions allow getting and setting a file descriptor’s blocking mode
(*note O_NONBLOCK: 1030.)  (Contributed by Victor Stinner in
bpo-22054(4).)

The *note truncate(): 1031. and *note ftruncate(): f83. functions are
now supported on Windows.  (Contributed by Steve Dower in bpo-23668(5).)

There is a new *note os.path.commonpath(): 1032. function returning the
longest common sub-path of each passed pathname.  Unlike the *note
os.path.commonprefix(): 1033. 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<13>,  Next: pickle<4>,  Prev: os<11>,  Up: Módulos melhorados<10>

1.10.5.44 pathlib
.................

The new *note Path.samefile(): 1035. method can be used to check whether
the path points to the same file as another path, which can be either
another *note Path: 265. 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(): 1036. method now accepts a new optional
'exist_ok' argument to match ‘mkdir -p’ and *note os.makedirs(): 526.
functionality.  (Contributed by Berker Peksag in bpo-21539(2).)

There is a new *note Path.expanduser(): 1037. method to expand ‘~’ and
‘~user’ prefixes.  (Contributed by Serhiy Storchaka and Claudiu Popa in
bpo-19776(3).)

A new *note Path.home(): 1038. class method can be used to get a *note
Path: 265. instance representing the user’s home directory.
(Contributed by Victor Salgado and Mayank Tripathi in bpo-19777(4).)

New *note Path.write_text(): 1039, *note Path.read_text(): 103a, *note
Path.write_bytes(): 103b, *note Path.read_bytes(): 2de. 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<4>,  Next: poplib<2>,  Prev: pathlib<13>,  Up: Módulos melhorados<10>

1.10.5.45 pickle
................

Nested objects, such as unbound methods or nested classes, can now be
pickled using *note pickle protocols: 27a. 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<8>,  Prev: pickle<4>,  Up: Módulos melhorados<10>

1.10.5.46 poplib
................

A new *note POP3.utf8(): 103e. 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<8>,  Next: readline<2>,  Prev: poplib<2>,  Up: Módulos melhorados<10>

1.10.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(): 59c. and *note subn(): 59d. 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: 540. exceptions have new attributes, *note msg:
1040, *note pattern: 1041, *note pos: 1042, *note lineno: 1043, and
*note colno: 1044, 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<8>,  Up: Módulos melhorados<10>

1.10.5.48 readline
..................

A new *note append_history_file(): 1046. 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<10>

1.10.5.49 selectors
...................

The new *note DevpollSelector: dc6. 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<10>

1.10.5.50 shutil
................

The *note move(): 1049. function now accepts a 'copy_function' argument,
allowing, for example, the *note copy(): c44. function to be used
instead of the default *note copy2(): c45. if there is a need to ignore
file metadata when moving.  (Contributed by Claudiu Popa in
bpo-19840(1).)

The *note make_archive(): 6cf. 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<10>

1.10.5.51 signal
................

On Windows, the *note set_wakeup_fd(): d5b. function now also supports
socket handles.  (Contributed by Victor Stinner in bpo-22018(1).)

Various ‘SIG*’ constants in the *note signal: cb. module have been
converted into *note Enums: 5a.  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<10>

1.10.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<10>

1.10.5.53 smtplib
.................

A new *note SMTP.auth(): 104d. method provides a convenient way to
implement custom authentication mechanisms.  (Contributed by Milan
Oberkirch in bpo-15014(1).)

The *note SMTP.set_debuglevel(): 104e. 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(): 104f. and *note SMTP.send_message():
1050. 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<9>,  Prev: smtplib<2>,  Up: Módulos melhorados<10>

1.10.5.54 sndhdr
................

The ‘what()’ and ‘whathdr()’ functions now return a *note namedtuple():
4da.  (Contributed by Claudiu Popa in bpo-18615(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18615


File: python.info,  Node: socket<9>,  Next: ssl<10>,  Prev: sndhdr,  Up: Módulos melhorados<10>

1.10.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(): 1053. method allows sending a file over a
socket by using the high-performance *note os.sendfile(): cf8. function
on UNIX, resulting in uploads being from 2 to 3 times faster than when
using plain *note socket.send(): f9b.  (Contributed by Giampaolo Rodola’
in bpo-17552(2).)

The *note socket.sendall(): f9c. 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(): 1054. method is now
optional.  By default it is set to *note SOMAXCONN: 1055. 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<10>,  Next: sqlite3<9>,  Prev: socket<9>,  Up: Módulos melhorados<10>

1.10.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<10>

1.10.5.57 Підтримка BIO пам’яті
...............................

(Contributed by Geert Jansen in bpo-21965(1).)

The new *note SSLObject: d6e. class has been added to provide SSL
protocol support for cases when the network I/O capabilities of *note
SSLSocket: add. 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: 1058. 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:
add.’s readiness model (“select/poll”) is inefficient.

A new *note SSLContext.wrap_bio(): d6f. 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<10>

1.10.5.58 Application-Layer Protocol Negotiation Support
........................................................

(Contributed by Benjamin Peterson in bpo-20188(1).)

Where OpenSSL support is present, the *note ssl: d5. module now
implements the 'Application-Layer Protocol Negotiation' TLS extension as
described in RFC 7301(2).

The new *note SSLContext.set_alpn_protocols(): 105a. can be used to
specify which protocols a socket should advertise during the TLS
handshake.

The new *note SSLSocket.selected_alpn_protocol(): 105b. returns the
protocol that was selected during the TLS handshake.  The *note
HAS_ALPN: 105c. 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<10>

1.10.5.59 Other Changes
.......................

There is a new *note SSLSocket.version(): 105e. method to query the
actual protocol version in use.  (Contributed by Antoine Pitrou in
bpo-20421(1).)

The *note SSLSocket: add. 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: 105f. or *note ssl.SSLWantWriteError: 1060.
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(): 1061. 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: 19b.  (Contributed by Akira Li
in bpo-19940(5).)

New ‘SSLObject.shared_ciphers()’ and *note SSLSocket.shared_ciphers():
1062. 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(): 1063, *note SSLSocket.read(): 1064,
‘SSLSocket.shutdown()’, and *note SSLSocket.write(): 1065. methods of
the *note SSLSocket: add. 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<9>,  Next: subprocess<4>,  Prev: ssl<10>,  Up: Módulos melhorados<10>

1.10.5.60 sqlite3
.................

The *note Row: 1067. class now fully supports the sequence protocol, in
particular *note reversed(): a5b. 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<9>,  Up: Módulos melhorados<10>

1.10.5.61 subprocess
....................

The new *note run(): d73. function has been added.  It runs the
specified command and returns a *note CompletedProcess: 1069. 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<3>,  Prev: subprocess<4>,  Up: Módulos melhorados<10>

1.10.5.62 sys
.............

A new ‘set_coroutine_wrapper()’ function allows setting a global hook
that will be called whenever a *note coroutine object: 6ae. is created
by an *note async def: 7e2. function.  A corresponding
‘get_coroutine_wrapper()’ can be used to obtain a currently set wrapper.
Both functions are *note provisional: 3ce, and are intended for
debugging purposes only.  (Contributed by Yury Selivanov in
bpo-24017(1).)

A new *note is_finalizing(): c74. function can be used to check if the
Python interpreter is *note shutting down: 473.  (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<3>,  Next: tarfile<7>,  Prev: sys<11>,  Up: Módulos melhorados<10>

1.10.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<7>,  Prev: sysconfig<3>,  Up: Módulos melhorados<10>

1.10.5.64 tarfile
.................

The 'mode' argument of the *note open(): 106d. function now accepts
‘"x"’ to request exclusive creation.  (Contributed by Berker Peksag in
bpo-21717(1).)

The *note TarFile.extractall(): 29a. and *note TarFile.extract(): 29b.
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(): 106e. now accepts an optional 'members'
keyword argument that can be set to a subset of the list returned by
*note TarFile.getmembers(): 106f.  (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<7>,  Next: time<7>,  Prev: tarfile<7>,  Up: Módulos melhorados<10>

1.10.5.65 threading
...................

Both the *note Lock.acquire(): 89c. and *note RLock.acquire(): 1071.
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<7>,  Up: Módulos melhorados<10>

1.10.5.66 time
..............

The *note monotonic(): 555. 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<9>,  Prev: time<7>,  Up: Módulos melhorados<10>

1.10.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(): 1074. 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<9>,  Next: traceback<5>,  Prev: timeit<2>,  Up: Módulos melhorados<10>

1.10.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<9>,  Up: Módulos melhorados<10>

1.10.5.69 traceback
...................

New *note walk_stack(): 1077. and *note walk_tb(): 1078. functions to
conveniently traverse frame and *note traceback objects: cdf.
(Contributed by Robert Collins in bpo-17911(1).)

New lightweight classes: *note TracebackException: 55c, *note
StackSummary: 1079, and *note FrameSummary: 107a.  (Contributed by
Robert Collins in bpo-17911(2).)

Both the *note print_tb(): 107b. and *note print_stack(): 107c.
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<9>,  Prev: traceback<5>,  Up: Módulos melhorados<10>

1.10.5.70 types
...............

A new *note coroutine(): 107e. function to transform *note generator:
dcd. and *note generator-like: fcf. objects into *note awaitables: 4c3.
(Contributed by Yury Selivanov in bpo-24017(1).)

A new type called *note CoroutineType: 107f, which is used for *note
coroutine: 6ae. objects created by *note async def: 7e2. 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<9>,  Next: unittest<9>,  Prev: types<5>,  Up: Módulos melhorados<10>

1.10.5.71 unicodedata
.....................

The *note unicodedata: 10b. module now uses data from Unicode 8.0.0(1).

   ---------- Footnotes ----------

   (1) https://unicode.org/versions/Unicode8.0.0/


File: python.info,  Node: unittest<9>,  Next: unittest mock<3>,  Prev: unicodedata<9>,  Up: Módulos melhorados<10>

1.10.5.72 unittest
..................

The *note TestLoader.loadTestsFromModule(): 58d. 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: 1082. attribute of the *note TestLoader: 58c.
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<4>,  Prev: unittest<9>,  Up: Módulos melhorados<10>

1.10.5.73 unittest.mock
.......................

The *note Mock: c34. class has the following improvements:

   * The class constructor has a new 'unsafe' parameter, which causes
     mock objects to raise *note AttributeError: 5e4. on attribute names
     starting with ‘"assert"’.  (Contributed by Kushal Das in
     bpo-21238(1).)

   * A new *note Mock.assert_not_called(): 1084. method to check if the
     mock object was called.  (Contributed by Kushal Das in
     bpo-21262(2).)

The *note MagicMock: 1085. class now supports *note __truediv__(): 1086,
*note __divmod__(): 1087. and *note __matmul__(): f6d. 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(): 1088. 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<4>,  Next: wsgiref,  Prev: unittest mock<3>,  Up: Módulos melhorados<10>

1.10.5.74 urllib
................

A new *note request.HTTPPasswordMgrWithPriorAuth: 108a. 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(): 108b.
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(): 305. function accepts an *note
ssl.SSLContext: 354. 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(): 108c. 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<4>,  Up: Módulos melhorados<10>

1.10.5.75 wsgiref
.................

The 'headers' argument of the *note headers.Headers: 108e. 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<10>

1.10.5.76 xmlrpc
................

The *note client.ServerProxy: c41. class now supports the *note context
manager: 1e0. protocol.  (Contributed by Claudiu Popa in bpo-20627(1).)

The *note client.ServerProxy: c41. constructor now accepts an optional
*note ssl.SSLContext: 354. 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<5>,  Prev: xmlrpc<2>,  Up: Módulos melhorados<10>

1.10.5.77 xml.sax
.................

SAX parsers now support a character stream of the *note
xmlreader.InputSource: 1091. object.  (Contributed by Serhiy Storchaka
in bpo-2175(1).)

*note parseString(): 1092. now accepts a *note str: 169. 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<5>,  Prev: xml sax,  Up: Módulos melhorados<10>

1.10.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(): 651. 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<10>,  Prev: Módulos melhorados<10>,  Up: O que há de novo no Python 3 5

1.10.6 Other module-level changes
---------------------------------

Many functions in the *note mmap: 94, ‘ossaudiodev’, *note socket: d1,
*note ssl: d5, and *note codecs: 1c. modules now accept writable *note
bytes-like objects: 193.  (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<10>,  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.10.7 Otimizações
------------------

The *note os.walk(): 6c5. 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(): c48. 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: 84. *note IPv4Network: 508. and
*note IPv6Network: 509. have been massively sped up, such as *note
subnets(): 1096, *note supernet(): 1097, *note
summarize_address_range(): 1098, *note collapse_addresses(): 1099.  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: 84. objects was optimized to produce
significantly smaller output.  (Contributed by Serhiy Storchaka in
bpo-23133(7).)

Many operations on *note io.BytesIO: 109a. 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(): 109b. 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(): f35. 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(): 109c. and *note PyObject_IsSubclass():
109d. functions have been sped up in the common case that the second
argument has *note type: f38. 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: bd. module now use 50% less memory on
64-bit builds.  (Contributed by Serhiy Storchaka in bpo-23488(17).)

The *note property(): 4ad. getter calls are up to 25% faster.
(Contributed by Joe Jevnik in bpo-23910(18).)

Instantiation of *note fractions.Fraction: 212. is now up to 30% faster.
(Contributed by Stefan Behnel in bpo-22464(19).)

String methods *note find(): 109e, *note rfind(): 109f, *note split():
10a0, *note partition(): 10a1. and the *note in: 348. 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<11>,  Prev: Otimizações<10>,  Up: O que há de novo no Python 3 5

1.10.8 Mudanças a construções e API C
-------------------------------------

New ‘calloc’ functions were added:

   * *note PyMem_RawCalloc(): 626,

   * *note PyMem_Calloc(): 10a3,

   * *note PyObject_Calloc(): 10a4.

(Contribuição de Victor Stinner em bpo-21233(1).)

New encoding/decoding helper functions:

   * *note Py_DecodeLocale(): db4. (replaced ‘_Py_char2wchar()’),

   * *note Py_EncodeLocale(): db5. (replaced ‘_Py_wchar2char()’).

(Contribuição de Victor Stinner em bpo-18395(2).)

A new *note PyCodec_NameReplaceErrors(): 10a5. function to replace the
unicode encode error with ‘\N{...}’ escapes.  (Contributed by Serhiy
Storchaka in bpo-19676(3).)

A new *note PyErr_FormatV(): 10a6. function similar to *note
PyErr_Format(): 10a7, but accepts a ‘va_list’ argument.  (Contributed by
Antoine Pitrou in bpo-18711(4).)

A new *note PyExc_RecursionError: 10a8. exception.  (Contributed by
Georg Brandl in bpo-19235(5).)

New *note PyModule_FromDefAndSpec(): 10a9, *note
PyModule_FromDefAndSpec2(): 10aa, and *note PyModule_ExecDef(): 10ab.
functions introduced by PEP 489(6) – multi-phase extension module
initialization.  (Contributed by Petr Viktorin in bpo-24268(7).)

New *note PyNumber_MatrixMultiply(): 10ac. and *note
PyNumber_InPlaceMatrixMultiply(): 10ad. 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: c90. 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<11>,  Next: Removidos<11>,  Prev: Mudanças a construções e API C<3>,  Up: O que há de novo no Python 3 5

1.10.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<11>

1.10.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<11>

1.10.9.2 Comportamento do Python descontinuado
..............................................

Raising the *note StopIteration: de9. exception inside a generator will
now generate a silent *note PendingDeprecationWarning: abc, which will
become a non-silent deprecation warning in Python 3.6 and will trigger a
*note RuntimeError: 243. in Python 3.7.  See *note PEP 479; Change
StopIteration handling inside generators: f0f. 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<11>

1.10.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<11>

1.10.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(): e65.

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: def, *note value: df0. and
*note coded_value: df1. of *note http.cookies.Morsel: df2. objects is
deprecated.  Use the *note set(): df3. method instead.  In addition, the
undocumented 'LegalChars' parameter of *note set(): df3. is deprecated,
and is now ignored.

Passing a format string as keyword argument 'format_string' to the *note
format(): dee. method of the *note string.Formatter: 10b3. 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: 4dd. are deprecated.  Use the new *note
Signature.from_callable(): 937. 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: 82. *note getfullargspec(): 936, *note getcallargs():
10b4, and ‘formatargspec()’ functions are deprecated in favor of the
*note inspect.signature(): 22e. API. (Contributed by Yury Selivanov in
bpo-20438(5).)

*note getargvalues(): 10b5. and *note formatargvalues(): 10b6. functions
were inadvertently marked as deprecated with the release of Python
3.5.0.

Use of *note re.LOCALE: d57. flag with str patterns or *note re.ASCII:
833. 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(): 58d. 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<11>,  Next: Porting to Python 3 5,  Prev: Descontinuados<11>,  Up: O que há de novo no Python 3 5

1.10.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<11>

1.10.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: 62. 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: b. 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<11>,  Up: O que há de novo no Python 3 5

1.10.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<10>.
* Alterações na API C: Alterações na API C<16>.


File: python.info,  Node: Alterações no comportamento do Python<2>,  Next: Alterações na API Python<10>,  Up: Porting to Python 3 5

1.10.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: 18e, 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<10>,  Next: Alterações na API C<16>,  Prev: Alterações no comportamento do Python<2>,  Up: Porting to Python 3 5

1.10.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: f7c. if the
     Python signal handler does not raise an exception.

   * Before Python 3.5, a *note datetime.time: 1fa. 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: 105f. or *note ssl.SSLWantWriteError: 1060.
     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: a6d,
     ‘HTMLParser.error()’, and the ‘HTMLParserError’ exception have been
     removed.  (Contributed by Ezio Melotti in bpo-15114(5).)  The
     'convert_charrefs' argument of *note HTMLParser: a6d. 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: 193. 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: 263. will no longer be raised
     and instead *note find_spec(): 10bc. will return ‘None’ 'without'
     caching ‘None’ in *note sys.path_importer_cache: 7ef, which is
     different than the typical case (bpo-22834(8)).

   * HTTP status code and messages from *note http.client: 73. and *note
     http.server: 76. were refactored into a common *note HTTPStatus:
     af2. enum.  The values in *note http.client: 73. and *note
     http.server: 76. remain available for backwards compatibility.
     (Contributed by Demian Brecht in bpo-21793(9).)

   * When an import loader defines *note exec_module(): a60. it is now
     expected to also define *note create_module(): ea0. (raises a *note
     DeprecationWarning: 1a3. now, will be an error in Python 3.6).  If
     the loader inherits from *note importlib.abc.Loader: 10bd. then
     there is nothing to do, else simply define *note create_module():
     ea0. to return ‘None’.  (Contributed by Brett Cannon in
     bpo-23014(10).)

   * The *note re.split(): 59b. 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(): 59b. 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: df2. dict-like interface has been
     made self consistent: morsel comparison now takes the *note key:
     def. and *note value: df0. into account, *note copy(): 10be. now
     results in a *note Morsel: df2. instance rather than a *note dict:
     183, and *note update(): 10bf. 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(): df3. 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(): 350. 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: d1. module now exports the *note
     CAN_RAW_FD_FRAMES: 10c0. constant on linux 3.6 and greater.

   * The *note ssl.cert_time_to_seconds(): 1061. 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: 19b.
     (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: cf. module now uses *note sys.stderr: b29.
     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(): 10c1. and *note str.endswith(): 10c2.
     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(): be3. 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: ba. module and the *note
     help(): aca. function.  (Contributed by Serhiy Storchaka in
     bpo-15582(17).)

   * Nested *note functools.partial(): 216. calls are now flattened.  If
     you were relying on the previous behavior, you can now either add
     an attribute to a *note functools.partial(): 216. object or you can
     create a subclass of *note functools.partial(): 216.  (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<16>,  Prev: Alterações na API Python<10>,  Up: Porting to Python 3 5

1.10.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: 10c4. and a new ‘calloc’ field was added.

   * Removed non-documented macro ‘PyObject_REPR()’ which leaked
     references.  Use format character ‘%R’ in *note
     PyUnicode_FromFormat(): 61f.-like functions to format the *note
     repr(): 1c1. of the object.  (Contributed by Serhiy Storchaka in
     bpo-22453(1).)

   * Because the lack of the *note __module__: 60b. attribute breaks
     pickling and introspection, a deprecation warning is now raised for
     builtin types without the *note __module__: 60b. attribute.  This
     will be an *note AttributeError: 5e4. 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: c8f. was replaced with a *note tp_as_async:
     10c5. slot.  Refer to *note Objetos corrotina: 10c6. 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.10.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.10.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.14/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.10.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.11 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<11>.
* Novas funcionalidades: Novas funcionalidades<16>.
* Novos módulos: Novos módulos<11>.
* Módulos melhorados: Módulos melhorados<11>.
* CPython Implementation Changes::
* Descontinuados: Descontinuados<12>.
* Removidos: Removidos<12>.
* 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<11>,  Next: Novas funcionalidades<16>,  Up: O que há de novo no Python 3 4

1.11.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: 10ce. ( PEP 453(1)).

   * *note Newly created file descriptors are non-inheritable: 10cf. (
     PEP 446(2)).

   * command line option for *note isolated mode: 10d0. (bpo-16499(3)).

   * *note improvements in the handling of codecs: 10d1. that are not
     text encodings (multiple issues).

   * *note A ModuleSpec Type: 10d2. for the Import System ( PEP 451(4)).
     (Affects importer authors.)

   * The *note marshal: 91. format has been made *note more compact and
     efficient: 10d3. (bpo-16475(5)).

Novos módulos de biblioteca:

   * *note asyncio: b.: *note New provisional API for asynchronous IO:
     10d4. ( PEP 3156(6)).

   * *note ensurepip: 59.: *note Bootstrapping the pip installer: 10d5.
     ( PEP 453(7)).

   * *note enum: 5a.: *note Support for enumeration types: 10d6. ( PEP
     435(8)).

   * *note pathlib: a8.: *note Object-oriented filesystem paths: 10d7. (
     PEP 428(9)).

   * *note selectors: c7.: *note High-level and efficient I/O
     multiplexing: 10d8, built upon the *note select: c6. module
     primitives (part of PEP 3156(10)).

   * *note statistics: d7.: A basic *note numerically stable statistics
     library: 10d9. ( PEP 450(11)).

   * *note tracemalloc: 105.: *note Trace Python memory allocations:
     10da. ( PEP 454(12)).

Módulos de biblioteca significativamente melhorados:

   * *note Single-dispatch generic functions: 10db. in *note functools:
     63. ( PEP 443(13)).

   * New *note pickle: ab. *note protocol 4: 10dc. ( PEP 3154(14)).

   * *note multiprocessing: 98. now has *note an option to avoid using
     os.fork on Unix: 10dd. (bpo-8713(15)).

   * *note email: 3f. has a new submodule, *note contentmanager: 41, and
     a new *note Message: 57a. subclass (*note EmailMessage: 579.) that
     *note simplify MIME handling: 10de. (bpo-18891(16)).

   * The *note inspect: 82. and *note pydoc: ba. modules are now capable
     of correct introspection of a much wider variety of callable
     objects, which improves the output of the Python *note help(): aca.
     system.

   * The *note ipaddress: 84. module API has been declared stable

Melhorias de segurança:

   * *note Secure and interchangeable hash algorithm: 10df. ( PEP
     456(17)).

   * *note Make newly created file descriptors non-inheritable: 10cf. (
     PEP 446(18)) to avoid leaking file descriptors to child processes.

   * New command line option for *note isolated mode: 10d0,
     (bpo-16499(19)).

   * *note multiprocessing: 98. now has *note an option to avoid using
     os.fork on Unix: 10dd.  'spawn' and 'forkserver' are more secure
     because they avoid sharing data with child processes.

   * *note multiprocessing: 98. child processes on Windows no longer
     inherit all of the parent’s inheritable handles, only the necessary
     ones.

   * A new *note hashlib.pbkdf2_hmac(): 728. function provides the
     PKCS#5 password-based key derivation function 2(20).

   * *note TLSv1.1 and TLSv1.2 support: 10e0. for *note ssl: d5.

   * *note Retrieving certificates from the Windows system cert store
     support: 10e1. for *note ssl: d5.

   * *note Server-side SNI (Server Name Indication) support: 10e2. for
     *note ssl: d5.

   * The *note ssl.SSLContext: 354. class has a *note lot of
     improvements: 10e3.

   * 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(): 10e4.).

Melhorias na implementação do CPython:

   * *note Safe object finalization: 10e5. ( PEP 442(21)).

   * Leveraging PEP 442(22), in most cases *note module globals are no
     longer set to None during finalization: 10e5. (bpo-18214(23)).

   * *note Configurable memory allocators: 10e6. ( PEP 445(24)).

   * *note Argument Clinic: 10e7. ( 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<16>,  Next: Novos módulos<11>,  Prev: Resumo – Destaques da versão<11>,  Up: O que há de novo no Python 3 4

1.11.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<16>

1.11.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.11.2.2 Bootstrapping pip By Default
.....................................

The new *note ensurepip: 59. 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: 117. module make
use of the *note ensurepip: 59. 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: 117. module *note
API: 10eb. installation of ‘pip’ must be requested explicitly.

For CPython *note source builds on POSIX systems: 10ec, 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.11.2.3 Mudanças na documentação
.................................

As part of this change, the *note Instalando módulos Python: 10ee. 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: 10ef. e *note Construindo extensões C e C ++ com
setuptools: 10f0.

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<16>

1.11.2.4 PEP 446: Newly Created File Descriptors Are Non-Inheritable
....................................................................

PEP 446(1) makes newly created file descriptors *note non-inheritable:
10f2.  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(): 10f3, *note os.set_inheritable(): 10f4.

   * *note os.get_handle_inheritable(): 10f5, *note
     os.set_handle_inheritable(): 10f6.

   * *note socket.socket.get_inheritable(): 10f7, *note
     socket.socket.set_inheritable(): 10f8.

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<16>

1.11.2.5 Melhorias no manuseio de Codecs
........................................

Since it was first introduced, the *note codecs: 1c. 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: 169, *note bytes: 192. and *note bytearray: 342. types, has
historically obscured that fact.

As a key step in clarifying the situation, the *note codecs.encode():
10fa. and *note codecs.decode(): 10fb. convenience functions are now
properly documented in Python 2.7, 3.3 and 3.4.  These functions have
existed in the *note codecs: 1c. 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: 169, *note bytes: 192. and
*note bytearray: 342, the *note codecs: 1c. 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: 10fc. and *note Text Transforms:
10fd.

(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<16>

1.11.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: 10ff. 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<16>

1.11.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(): 1101. and *note max(): 1102. 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: 1103.

   * 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: fac. ‘cp273’.  (Contributed by
     Michael Bierenfeld and Andrew Kuchling in bpo-1097797(4).)

   * New Ukrainian *note codec: fac. ‘cp1125’.  (Contributed by Serhiy
     Storchaka in bpo-19668(5).)

   * *note bytes: 192.join() and *note bytearray: 342.join() now accept
     arbitrary buffer objects as arguments.  (Contributed by Antoine
     Pitrou in bpo-15958(6).)

   * The *note int: 19b. 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(): 57e. method that clears all
     references to local variables from the frame.  (Contributed by
     Antoine Pitrou in bpo-17934(8).)

   * *note memoryview: 165. is now registered as a *note Sequence: 1f,
     and supports the *note reversed(): a5b. builtin.  (Contributed by
     Nick Coghlan and Claudiu Popa in bpo-18690(9) and bpo-19078(10).)

   * Signatures reported by *note help(): aca. have been modified and
     improved in several cases as a result of the introduction of
     Argument Clinic and other changes to the *note inspect: 82. and
     *note pydoc: ba. modules.

   * *note __length_hint__(): 1104. 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<11>,  Next: Módulos melhorados<11>,  Prev: Novas funcionalidades<16>,  Up: O que há de novo no Python 3 4

1.11.3 Novos módulos
--------------------

* Menu:

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


File: python.info,  Node: asyncio<14>,  Next: ensurepip<2>,  Up: Novos módulos<11>

1.11.3.1 asyncio
................

The new *note asyncio: b. 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: 3ce.

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<14>,  Up: Novos módulos<11>

1.11.3.2 ensurepip
..................

The new *note ensurepip: 59. 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: 59. 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<14>,  Prev: ensurepip<2>,  Up: Novos módulos<11>

1.11.3.3 enum
.............

The new *note enum: 5a. module (defined in PEP 435(1)) provides a
standard implementation of enumeration types, allowing other modules
(such as *note socket: d1.) 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<14>,  Next: selectors<2>,  Prev: enum<9>,  Up: Novos módulos<11>

1.11.3.4 pathlib
................

The new *note pathlib: a8. 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: 3ce.

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<14>,  Up: Novos módulos<11>

1.11.3.5 selectors
..................

The new *note selectors: c7. module (created as part of implementing PEP
3156(1)) allows high-level and efficient I/O multiplexing, built upon
the *note select: c6. 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<11>

1.11.3.6 statistics
...................

The new *note statistics: d7. 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<11>

1.11.3.7 tracemalloc
....................

The new *note tracemalloc: 105. 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 escrita e implementada 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<11>,  Next: CPython Implementation Changes,  Prev: Novos módulos<11>,  Up: O que há de novo no Python 3 4

1.11.4 Módulos melhorados
-------------------------

* Menu:

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


File: python.info,  Node: abc,  Next: aifc<2>,  Up: Módulos melhorados<11>

1.11.4.1 abc
............

New function *note abc.get_cache_token(): 110f. 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: 1110. has *note ABCMeta: 1111. 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<7>,  Prev: abc,  Up: Módulos melhorados<11>

1.11.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: 186. 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: 193.  (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<7>,  Next: audioop,  Prev: aifc<2>,  Up: Módulos melhorados<11>

1.11.4.3 argparse
.................

The *note FileType: 30a. class now accepts 'encoding' and 'errors'
arguments, which are passed through to *note open(): 314.  (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<4>,  Prev: argparse<7>,  Up: Módulos melhorados<11>

1.11.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: 193.
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<4>,  Next: collections<6>,  Prev: audioop,  Up: Módulos melhorados<11>

1.11.4.5 base64
...............

The encoding and decoding functions in *note base64: f. now accept any
*note bytes-like object: 193. in cases where it previously required a
*note bytes: 192. or *note bytearray: 342. instance.  (Contributed by
Nick Coghlan in bpo-17839(1).)

New functions *note a85encode(): 1116, *note a85decode(): 1117, *note
b85encode(): 1118, and *note b85decode(): 1119. 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<4>,  Up: Módulos melhorados<11>

1.11.4.6 collections
....................

The *note ChainMap.new_child(): 111b. 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<11>

1.11.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<11>

1.11.4.8 contextlib
...................

The new *note contextlib.suppress: 111e. 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(): fdc. context manager makes
it easier for utility scripts to handle inflexible APIs that write their
output to *note sys.stdout: cc0. and don’t provide any options to
redirect it.  Using the context manager, the *note sys.stdout: cc0.
output can be redirected to any other stream or, in conjunction with
*note io.StringIO: 111f, 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:
cc0.  (Contributed by Raymond Hettinger in bpo-15805(3).)

The *note contextlib: 27. documentation has also been updated to include
a *note discussion: 1120. 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<5>,  Prev: contextlib<6>,  Up: Módulos melhorados<11>

1.11.4.9 dbm
............

*note dbm.open(): 1122. objects now support the context management
protocol.  When used in a *note with: 186. 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<5>,  Next: doctest<4>,  Prev: dbm<6>,  Up: Módulos melhorados<11>

1.11.4.10 dis
.............

Functions *note show_code(): 1124, *note dis(): 204, *note distb(): 205,
and *note disassemble(): 206. now accept a keyword-only 'file' argument
that controls where they write their output.

The *note dis: 3c. module is now built around an *note Instruction: 202.
class that provides object oriented access to the details of each
individual bytecode operation.

A new method, *note get_instructions(): 4e6, 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:
3c. 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: 3c. module have been
rewritten to use these new components.

In addition, a new application-friendly class *note Bytecode: 203.
provides an object-oriented API for inspecting bytecode in both in
human-readable form and for iterating over instructions.  The *note
Bytecode: 203. constructor takes the same arguments that *note
get_instructions(): 4e6. does (plus an optional 'current_offset'), and
the resulting object can be iterated to produce *note Instruction: 202.
objects.  But it also has a *note dis: 1125. method, equivalent to
calling *note dis: 204. 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: 203. also has a class method, *note from_traceback():
1126, 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(): 1127. 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<5>,  Prev: dis<5>,  Up: Módulos melhorados<11>

1.11.4.11 doctest
.................

A new *note option flag: 1129, *note FAIL_FAST: 112a, 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: 3e. command line interface now uses *note argparse:
7, and has two new options, ‘-o’ and ‘-f’.  ‘-o’ allows *note doctest
options: 1129. 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: 10c. CLI). (Contributed by R. David Murray in
bpo-11390(2).)

*note doctest: 3e. 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<5>,  Next: filecmp,  Prev: doctest<4>,  Up: Módulos melhorados<11>

1.11.4.12 email
...............

*note as_string(): 112c. 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: 44. in order to
pass formatting parameters to its ‘flatten’ method.  (Contributed by R.
David Murray in bpo-18600(1).)

New method *note as_bytes(): 112d. 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: 57a. *note __bytes__(): 112e. 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(): 112f. 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: 57a. have
been added (*note EmailMessage: 579. and *note MIMEPart: 1130.), along
with a new sub-module, *note contentmanager: 41. and a new *note policy:
53. attribute *note content_manager: 1131.  All documentation is
currently in the new module, which is being added as part of email’s new
*note provisional API: 3ce.  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:
41. documentation and the *note email; Exemplos: 1132.  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<6>,  Prev: email<5>,  Up: Módulos melhorados<11>

1.11.4.13 filecmp
.................

A new *note clear_cache(): 1134. function provides the ability to clear
the *note filecmp: 5e. comparison cache, which uses *note os.stat():
26c. 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: 1135. provides the list of
directories that are used as the default value for the 'ignore'
parameter of the *note dircmp(): 1136. 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<6>,  Next: gc<6>,  Prev: filecmp,  Up: Módulos melhorados<11>

1.11.4.14 functools
...................

The new *note partialmethod(): 217. descriptor brings partial argument
application to descriptors, just as *note partial(): 216. provides for
normal callables.  The new descriptor also makes it easier to get
arbitrary callables (including *note partial(): 216. 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(): 840. 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(): 1138. now supports a return value of *note
NotImplemented: 1a2. from the underlying comparison function.
(Contributed by Katie Miller in bpo-10042(3).)

A pure-python version of the *note partial(): 216. 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<6>,  Next: glob<4>,  Prev: functools<6>,  Up: Módulos melhorados<11>

1.11.4.15 gc
............

New function *note get_stats(): 2db. 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<6>,  Up: Módulos melhorados<11>

1.11.4.16 glob
..............

A new function *note escape(): 113b. 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<4>,  Prev: glob<4>,  Up: Módulos melhorados<11>

1.11.4.17 hashlib
.................

A new *note hashlib.pbkdf2_hmac(): 728. function provides the PKCS#5
password-based key derivation function 2(1).  (Contributed by Christian
Heimes in bpo-18582(2).)

The *note name: 113d. attribute of *note hashlib: 6c. hash objects is
now a formally supported interface.  It has always existed in CPython’s
*note hashlib: 6c. (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<4>,  Next: html,  Prev: hashlib<6>,  Up: Módulos melhorados<11>

1.11.4.18 hmac
..............

*note hmac: 6e. now accepts ‘bytearray’ as well as ‘bytes’ for the 'key'
argument to the *note new(): c89. function, and the 'msg' parameter to
both the *note new(): c89. function and the *note update(): 113f. method
now accepts any type supported by the *note hashlib: 6c. module.
(Contributed by Jonas Borgström in bpo-18240(1).)

The 'digestmod' argument to the *note hmac.new(): c89. function may now
be any hash digest name recognized by *note hashlib: 6c.  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: 1140. and *note name: 1141.
attributes (and the formal documentation of the *note digest_size: 1142.
attribute), the *note hmac: 6e. 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<4>,  Prev: hmac<4>,  Up: Módulos melhorados<11>

1.11.4.19 html
..............

New function *note unescape(): b46. function converts HTML5 character
references to the corresponding Unicode characters.  (Contributed by
Ezio Melotti in bpo-2927(1).)

*note HTMLParser: a6d. 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: a6d. 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<4>,  Next: idlelib e IDLE<4>,  Prev: html,  Up: Módulos melhorados<11>

1.11.4.20 http
..............

*note send_error(): 1145. 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:
1146. attribute and sent as the body of the error response.
(Contributed by Karl Cow in bpo-12921(1).)

The *note http.server: 76. *note command line interface: 1147. 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<4>,  Up: Módulos melhorados<11>

1.11.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<9>,  Prev: idlelib e IDLE<4>,  Up: Módulos melhorados<11>

1.11.4.22 importlib
...................

The *note InspectLoader: 114a. ABC defines a new method, *note
source_to_code(): 1007. 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: 114a. also now has a default implementation for the
*note get_code(): 114b. 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(): 732. function has been moved from ‘imp’ to *note
importlib: 7b. as part of the ‘imp’ module deprecation.  (Contributed by
Berker Peksag in bpo-18193(3).)

*note importlib.util: 81. now has a *note MAGIC_NUMBER: 72c. 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: 81. functions *note cache_from_source(): 350.
and *note source_from_cache(): 733. replace the same-named functions in
the deprecated ‘imp’ module.  (Contributed by Brett Cannon in
bpo-18194(5).)

The *note importlib: 7b. bootstrap *note NamespaceLoader: 114c. now
conforms to the *note InspectLoader: 114a. 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: 81. has a new function *note decode_source():
114d. that decodes source from bytes using universal newline processing.
This is useful for implementing *note InspectLoader.get_source(): 114e.
methods.

*note importlib.machinery.ExtensionFileLoader: ea2. now has a *note
get_filename(): 114f. 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<9>,  Next: ipaddress<5>,  Prev: importlib<9>,  Up: Módulos melhorados<11>

1.11.4.23 inspect
.................

The *note inspect: 82. module now offers a basic *note command line
interface: 1151. 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(): 1152. makes it easy to unravel wrapper function chains
created by *note functools.wraps(): 1153. (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: 5a. module, the
*note inspect: 82. 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(): 936. and ‘getargspec()’ now use the *note
signature(): 22e. 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():
216. objects and more.  Note that, unlike *note signature(): 22e, 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(): 22e. directly if those
features are desired.  (Contributed by Yury Selivanov in bpo-17481(5).)

*note signature(): 22e. 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<9>,  Up: Módulos melhorados<11>

1.11.4.24 ipaddress
...................

*note ipaddress: 84. was added to the standard library in Python 3.3 as
a *note provisional API: 3ce.  With the release of Python 3.4, this
qualification has been removed: *note ipaddress: 84. is now considered a
stable API, covered by the normal standard library requirements to
maintain backwards compatibility.

A new *note is_global: 1155. 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<11>

1.11.4.25 logging
.................

The *note TimedRotatingFileHandler: 1157. 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: 1158. and *note DatagramHandler: 1159. now support
Unix domain sockets (by setting 'port' to ‘None’).  (Contributed by
Vinay Sajip in commit ce46195b56a9.)

*note fileConfig(): d3c. now accepts a *note
configparser.RawConfigParser: 115a. 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(): d3c.  (Contributed by Vinay Sajip in bpo-16110(2).)

Logging configuration data received from a socket via the *note
logging.config.listen(): 115b. 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<11>

1.11.4.26 marshal
.................

The default *note marshal: 91. 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<8>,  Prev: marshal<2>,  Up: Módulos melhorados<11>

1.11.4.27 mmap
..............

mmap objects are now *note weakly referenceable: 1103.  (Contributed by
Valerie Lambert in bpo-4885(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4885


File: python.info,  Node: multiprocessing<8>,  Next: operador<3>,  Prev: mmap<3>,  Up: Módulos melhorados<11>

1.11.4.28 multiprocessing
.........................

On Unix two new *note start methods: 1d5, ‘spawn’ and ‘forkserver’, have
been added for starting processes using *note multiprocessing: 98.
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(): 115f.
reports all start methods available on the platform, *note
get_start_method(): 1160. reports the current start method, and *note
set_start_method(): 24a. sets the start method.  (Contributed by Richard
Oudkerk in bpo-8713(1).)

*note multiprocessing: 98. also now has the concept of a ‘context’,
which determines how child processes are created.  New function *note
get_context(): 249. returns a context that uses a specified start
method.  It has the same API as the *note multiprocessing: 98. module
itself, so you can use it to create *note Pool: 1161.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: 98. now relies on *note runpy: c3. (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<12>,  Prev: multiprocessing<8>,  Up: Módulos melhorados<11>

1.11.4.29 operador
..................

New function *note length_hint(): 1163. provides an implementation of
the specification for how the *note __length_hint__(): 1104. 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: a3. 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<12>,  Next: pdb<8>,  Prev: operador<3>,  Up: Módulos melhorados<11>

1.11.4.30 os
............

There are new functions to get and set the *note inheritable flag: 10f2.
of a file descriptor (*note os.get_inheritable(): 10f3, *note
os.set_inheritable(): 10f4.) or a Windows handle (*note
os.get_handle_inheritable(): 10f5, *note os.set_handle_inheritable():
10f6.).

New function *note cpu_count(): 4d5. 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():
1165. 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(): 1166. is now available on the Windows platform
(and the *note os.path.samefile(): 1167. implementation is now shared
between Unix and Windows).  (Contributed by Brian Curtin in
bpo-11939(2).)

*note os.path.ismount(): bfd. now recognizes volumes mounted below a
drive root on Windows.  (Contributed by Tim Golden in bpo-9035(3).)

*note os.open(): f86. supports two new flags on platforms that provide
them, *note O_PATH: 1168. (un-opened file descriptor), and *note
O_TMPFILE: 1169. (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<8>,  Next: pickle<5>,  Prev: os<12>,  Up: Módulos melhorados<11>

1.11.4.31 pdb
.............

*note pdb: aa. has been enhanced to handle generators, *note yield: bb8,
and ‘yield from’ in a more useful fashion.  This is especially helpful
when debugging *note asyncio: b. based programs.  (Contributed by Andrew
Svetlov and Xavier de Gaye in bpo-16596(1).)

The ‘print’ command has been removed from *note pdb: aa, restoring
access to the Python *note print(): 116b. 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: 116c. 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<5>,  Next: plistlib<2>,  Prev: pdb<8>,  Up: Módulos melhorados<11>

1.11.4.32 pickle
................

*note pickle: ab. 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__(): 795. 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<5>,  Up: Módulos melhorados<11>

1.11.4.33 plistlib
..................

*note plistlib: b0. now has an API that is similar to the standard
pattern for stdlib serialization protocols, with new *note load(): b3e,
*note dump(): b40, *note loads(): b3f, and *note dumps(): b41.
functions.  (The older API is now deprecated.)  In addition to the
already supported XML plist format (*note FMT_XML: 116f.), it also now
supports the binary plist format (*note FMT_BINARY: 1170.).
(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<11>

1.11.4.34 poplib
................

Two new methods have been added to *note poplib: b1.: *note capa():
1172, which returns the list of capabilities advertised by the POP
server, and *note stls(): 1173, 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<2>,  Prev: poplib<3>,  Up: Módulos melhorados<11>

1.11.4.35 pprint
................

The *note pprint: b3. module’s *note PrettyPrinter: 1175. class and its
*note pformat(): 1176, and *note pprint(): a1f. 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<2>,  Next: pydoc<5>,  Prev: pprint<4>,  Up: Módulos melhorados<11>

1.11.4.36 pty
.............

*note pty.spawn(): 1178. now returns the status value from *note
os.waitpid(): f8e. on the child process, instead of ‘None’.
(Contributed by Gregory P. Smith.)


File: python.info,  Node: pydoc<5>,  Next: re<9>,  Prev: pty<2>,  Up: Módulos melhorados<11>

1.11.4.37 pydoc
...............

The *note pydoc: ba. module is now based directly on the *note
inspect.signature(): 22e. 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: ba. 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: ba.
directly, its handling of custom ‘__dir__’ methods and various
descriptor behaviours has also been improved substantially by the
underlying changes in the *note inspect: 82. module.

As the *note help(): aca. builtin is based on *note pydoc: ba, the above
changes also affect the behaviour of *note help(): aca.

   ---------- 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<9>,  Next: resource,  Prev: pydoc<5>,  Up: Módulos melhorados<11>

1.11.4.38 re
............

New *note fullmatch(): 117b. function and *note Pattern.fullmatch():
117c. 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: 117d. now includes the pattern and the
flags; the repr of *note match objects: 117e. 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<9>,  Up: Módulos melhorados<11>

1.11.4.39 resource
..................

New *note prlimit(): 1180. 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: 1181, *note RLIMIT_NICE:
1182, *note RLIMIT_RTPRIO: 1183, *note RLIMIT_RTTIME: 1184, and *note
RLIMIT_SIGPENDING: 1185.  (Contributed by Christian Heimes in
bpo-19324(2).)

On FreeBSD version 9 and later, there some new FreeBSD specific
constants: *note RLIMIT_SBSIZE: 1186, *note RLIMIT_SWAP: 1187, and *note
RLIMIT_NPTS: 1188.  (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<11>

1.11.4.40 select
................

*note epoll: 118a. objects now support the context management protocol.
When used in a *note with: 186. statement, the *note close(): 118b.
method will be called automatically at the end of the block.
(Contributed by Serhiy Storchaka in bpo-16488(1).)

*note devpoll: 118c. objects now have *note fileno(): 118d. and *note
close(): 118e. methods, as well as a new attribute *note closed: 118f.
(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<11>

1.11.4.41 shelve
................

*note Shelf: 1191. instances may now be used in *note with: 186.
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<11>

1.11.4.42 shutil
................

*note copyfile(): c43. now raises a specific *note Error: 1193.
subclass, *note SameFileError: 1194, 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<11>

1.11.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<10>,  Prev: smtpd<3>,  Up: Módulos melhorados<11>

1.11.4.44 smtplib
.................

*note SMTPException: 1197. is now a subclass of *note OSError: 2bf,
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<10>,  Next: sqlite3<10>,  Prev: smtplib<3>,  Up: Módulos melhorados<11>

1.11.4.45 socket
................

The socket module now supports the *note CAN_BCM: 1199. 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: 10f2, *note get_inheritable(): 10f7. and *note set_inheritable():
10f8.

The ‘socket.AF_*’ and ‘socket.SOCK_*’ constants are now enumeration
values using the new *note enum: 5a. module.  This allows meaningful
names to be printed during debugging, instead of integer “magic
numbers”.

The *note AF_LINK: 119a. constant is now available on BSD and OSX.

*note inet_pton(): b51. and *note inet_ntop(): 119b. 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<10>,  Next: ssl<11>,  Prev: socket<10>,  Up: Módulos melhorados<11>

1.11.4.46 sqlite3
.................

A new boolean parameter to the *note connect(): 59f. 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<11>,  Next: stat,  Prev: sqlite3<10>,  Up: Módulos melhorados<11>

1.11.4.47 ssl
.............

*note PROTOCOL_TLSv1_1: 119e. and *note PROTOCOL_TLSv1_2: 119f. (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(): 479. provides a standard way to
obtain an *note SSLContext: 354. 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:
354. 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(): 479. to obtain an *note
SSLContext: 354. 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: 354. method *note load_verify_locations(): 10e4.
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(): 11a0. returns a named
tuple of the paths and environment variables that the *note
set_default_verify_paths(): 11a1. 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: 354. has a new method, *note cert_store_stats(): 11a2,
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(): 11a3. 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: 354. has a new
attribute *note verify_flags: 11a4. that can be used to control the
certificate verification process by setting it to some combination of
the new constants *note VERIFY_DEFAULT: 11a5, *note
VERIFY_CRL_CHECK_LEAF: 11a6, *note VERIFY_CRL_CHECK_CHAIN: 11a7, or
*note VERIFY_X509_STRICT: 47b.  OpenSSL does not do any CRL verification
by default.  (Contributed by Christien Heimes in bpo-8813(6).)

New *note SSLContext: 354. method *note load_default_certs(): 11a8.
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: 11a9.) for a client to use to verify a server, and
certificates for a server to use in verifying client certificates
(‘purpose=’*note CLIENT_AUTH: 11aa.).  (Contributed by Christian Heimes
in bpo-19292(7).)  Two new windows-only functions, *note
enum_certificates(): 11ab. and *note enum_crls(): 11ac. 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(): 11ad.
method.  (Contributed by Daniel Black in bpo-8109(9).)

The dictionary returned by *note SSLSocket.getpeercert(): 11ae. 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<3>,  Prev: ssl<11>,  Up: Módulos melhorados<11>

1.11.4.48 stat
..............

The *note stat: d6. 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: 11b0. flags, *note S_IFDOOR:
11b1, *note S_IFPORT: 11b2, and *note S_IFWHT: 11b3.  (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<3>,  Next: subprocess<5>,  Prev: stat,  Up: Módulos melhorados<11>

1.11.4.49 struct
................

New function *note iter_unpack: 11b5. and a new *note
struct.Struct.iter_unpack(): 11b6. 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<3>,  Up: Módulos melhorados<11>

1.11.4.50 subprocess
....................

*note check_output(): 11b8. 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(): 11b9. and *note getstatusoutput(): 11ba. 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<11>

1.11.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: 186. 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: 193.  (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<11>

1.11.4.52 sys
.............

New function *note sys.getallocatedblocks(): 11bd. 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(): e56. 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: 440, it
checks for an *note __interactivehook__: 11be. attribute on the *note
sys: df. 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: 1b8. file is read, so it can be set
there.  The *note site: cc. module *note sets it: 11bf. to a function
that enables tab completion and history saving (in ‘~/.python-history’)
if the platform supports *note readline: bf.  If you do not want this
(new) behavior, you can override it in *note PYTHONSTARTUP: 1b8, *note
sitecustomize: cd, or *note usercustomize: 114. by deleting this
attribute from *note sys: df. (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<11>

1.11.4.53 tarfile
.................

The *note tarfile: e4. module now supports a simple *note Interface de
Linha de Comando: 11c1. 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<8>,  Prev: tarfile<8>,  Up: Módulos melhorados<11>

1.11.4.54 textwrap
..................

The *note TextWrapper: 11c3. class has two new attributes/constructor
arguments: *note max_lines: 11c4, which limits the number of lines in
the output, and *note placeholder: 11c5, 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(): 11c6. 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<8>,  Next: traceback<6>,  Prev: textwrap,  Up: Módulos melhorados<11>

1.11.4.55 threading
...................

The *note Thread: 176. object representing the main thread can be
obtained from the new *note main_thread(): 11c8. 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<8>,  Up: Módulos melhorados<11>

1.11.4.56 traceback
...................

A new *note traceback.clear_frames(): 11ca. 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<5>,  Prev: traceback<6>,  Up: Módulos melhorados<11>

1.11.4.57 types
...............

A new *note DynamicClassAttribute(): 831. 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: 5a. 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<5>,  Next: unittest<10>,  Prev: types<6>,  Up: Módulos melhorados<11>

1.11.4.58 urllib
................

*note urllib.request: 111. now supports ‘data:’ URLs via the *note
DataHandler: 11cd. class.  (Contributed by Mathias Panzenböck in
bpo-16423(1).)

The http method that will be used by a *note Request: 11ce. class can
now be specified by setting a *note method: 11cf. class attribute on the
subclass.  (Contributed by Jason R Coombs in bpo-18978(2).)

*note Request: 11ce. objects are now reusable: if the *note full_url:
11d0. or *note data: 11d1. attributes are modified, all relevant
internal properties are updated.  This means, for example, that it is
now possible to use the same *note Request: 11ce. object in more than
one *note OpenerDirector.open(): 11d2. call with different 'data'
arguments, or to modify a *note Request: 11ce.‘s ‘url’ rather than
recomputing it from scratch.  There is also a new *note remove_header():
11d3. method that can be used to remove headers from a *note Request:
11ce.  (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: 11d4. objects now have a *note headers: 11d5. 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<10>,  Next: venv<7>,  Prev: urllib<5>,  Up: Módulos melhorados<11>

1.11.4.59 unittest
..................

The *note TestCase: 2b2. class has a new method, *note subTest(): 11d7,
that produces a context manager whose *note with: 186. 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: 11d8. for the full version of
this example.  (Contributed by Antoine Pitrou in bpo-16997(1).)

*note unittest.main(): 11d9. 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: 11da. 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(): 11db. now sorts the discovered files to provide
consistent test ordering.  (Contributed by Martin Melin and Jeff Ramnani
in bpo-16709(4).)

*note TestSuite: fea. 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: fea. 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(): a4f, will
ensure that a given block of code emits a log message using the *note
logging: 8b. 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: 11dc.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: 10d. 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(): 11dd. 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<10>,  Up: Módulos melhorados<11>

1.11.4.60 venv
..............

*note venv: 117. now includes activation scripts for the ‘csh’ and
‘fish’ shells.  (Contributed by Andrew Svetlov in bpo-15417(1).)

*note EnvBuilder: 56a. and the *note create(): 56b. convenience function
take a new keyword argument 'with_pip', which defaults to ‘False’, that
controls whether or not *note EnvBuilder: 56a. 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<11>

1.11.4.61 wave
..............

The *note getparams(): 11e0. method now returns a namedtuple rather than
a plain tuple.  (Contributed by Claudiu Popa in bpo-17487(1).)

*note wave.open(): b3b. now supports the context management protocol.
(Contributed by Claudiu Popa in bpo-17616(2).)

*note wave: 119. can now *note write output to unseekable files: 11e1.
(Contributed by David Jones, Guilherme Polo, and Serhiy Storchaka in
bpo-5202(3).)

The *note writeframesraw(): 11e2. and *note writeframes(): 11e3. methods
now accept any *note bytes-like object: 193.  (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<11>

1.11.4.62 weakref
.................

New *note WeakMethod: 11e5. class simulates weak references to bound
methods.  (Contributed by Antoine Pitrou in bpo-14631(1).)

New *note finalize: c63. 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: 11e6. is now exposed
via the *note __callback__: 11e7. 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<6>,  Prev: weakref<2>,  Up: Módulos melhorados<11>

1.11.4.63 xml.etree
...................

A new parser, *note XMLPullParser: 11e9, 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: 11ea.  (Contributed by Antoine
Pitrou in bpo-17741(1).)

The *note xml.etree.ElementTree: 12b. *note tostring(): 11eb. and *note
tostringlist(): 11ec. functions, and the *note ElementTree: b3d. *note
write(): c7f. method, now have a 'short_empty_elements' *note
keyword-only parameter: 59e. 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<6>,  Prev: xml etree<2>,  Up: Módulos melhorados<11>

1.11.4.64 zipfile
.................

The *note writepy(): 11ee. method of the *note PyZipFile: 11ef. 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: 8c8. and *note PyZipFile:
11ef. 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<12>,  Prev: Módulos melhorados<11>,  Up: O que há de novo no Python 3 4

1.11.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.11.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.11.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__(): 11f3.
methods, as well as generators with *note finally: 1b0. 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: 87a. 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.11.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: 11f5. 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.11.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: ba. and *note inspect:
82. 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.11.5.5 Other Alterações a compilações e API C
...............................................

   * The new *note PyType_GetSlot(): a92. 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(): 61f. 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(): 11f8. supplements
     the existing *note PyStructSequence_InitType(): 11f9. 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(): 11fa. is the C API
     equivalent of *note operator.length_hint(): 1163.  (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.11.5.6 Other Improvements
...........................

   * The *note python: 11fd. command has a new *note option: 11fe, ‘-I’,
     which causes it to run in “isolated mode”, which means that *note
     sys.path: 3e1. 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: bf.  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: 7.
     (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: 11ff.
     now also checks for memory allocation leaks, using *note
     sys.getallocatedblocks(): 11bd.  (Contributed by Antoine Pitrou in
     bpo-13390(9).)

   * ‘python -m’ now works with namespace packages.

   * The *note stat: d6. 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__: e4c.  (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: 1200. 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: 14, *note lzma: 8e, and *note gzip: 6b. 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.11.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: be, *note collections: 1e. and *note locale:
     8a. 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: a5c. is now as fast or faster than the Python2
     version for most cases.  *note lzma.LZMAFile: 1202. has also been
     optimized.  (Contributed by Serhiy Storchaka and Nadeem Vawda in
     bpo-16034(8).)

   * *note random.getrandbits(): 1203. 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: dc.
     (Contributed by Richard Oudkerk in bpo-15758(11).)

   * *note html.escape(): 1204. 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(): 73b. 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<12>,  Next: Removidos<12>,  Prev: CPython Implementation Changes,  Up: O que há de novo no Python 3 4

1.11.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: 1a3. 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<12>

1.11.6.1 Deprecations in the Python API
.......................................

   * As mentioned in *note PEP 451; A ModuleSpec Type for the Import
     System: 10d2, a number of *note importlib: 7b. methods and
     functions are deprecated: ‘importlib.find_loader()’ is replaced by
     *note importlib.util.find_spec(): 5a8.;
     ‘importlib.machinery.PathFinder.find_module()’ is replaced by *note
     importlib.machinery.PathFinder.find_spec(): 1207.;
     ‘importlib.abc.MetaPathFinder.find_module()’ is replaced by *note
     importlib.abc.MetaPathFinder.find_spec(): a5e.;
     ‘importlib.abc.PathEntryFinder.find_loader()’ and ‘find_module()’
     are replaced by *note importlib.abc.PathEntryFinder.find_spec():
     a62.; 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(): a60, *note
     importlib.abc.InspectLoader.exec_module(): 1208. *note
     importlib.abc.SourceLoader.exec_module(): 1209.) 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(): c89.
     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: 62. module has been
     documented as deprecated in its docstring for quite some time.  It
     now emits a *note DeprecationWarning: 1a3. and will be removed
     completely in Python 3.5.

   * The undocumented 'endtime' argument to *note
     subprocess.Popen.wait(): ed4. 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: a6d. is deprecated.

   * The *note plistlib: b0. ‘readPlist()’, ‘writePlist()’,
     ‘readPlistFromBytes()’, and ‘writePlistToBytes()’ functions are
     deprecated in favor of the corresponding new functions *note
     load(): b3e, *note dump(): b40, *note loads(): b3f, and *note
     dumps(): b41.  ‘Data()’ is deprecated in favor of just using the
     *note bytes: 192. constructor.

   * The *note sysconfig: e1. 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: 9b4. (if needed) and
     its 'newline' argument.

   * The 'parser' argument of *note xml.etree.ElementTree.iterparse():
     573. has been deprecated, as has the 'html' argument of *note
     XMLParser(): c3e.  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<12>

1.11.6.2 Deprecated Features
............................

   * Running *note IDLE — editor e console Python: 120b. 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<12>,  Next: Porting to Python 3 4,  Prev: Descontinuados<12>,  Up: O que há de novo no Python 3 4

1.11.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<12>

1.11.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<12>

1.11.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: 7b.  (Contributed by Taras Lyapun in bpo-15641(4).)

   * The 'strict' argument to *note HTTPConnection: d29. and *note
     HTTPSConnection: d2a. has been removed.  HTTP 0.9-style “Simple
     Responses” are no longer supported.

   * The deprecated *note urllib.request.Request: 11ce. 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: 91.  (Contributed by Dan Riti in bpo-15480(5).)

   * *note inspect.Signature: 4dd.: positional-only parameters are now
     required to have a valid name.

   * *note object.__format__(): 826. no longer accepts non-empty format
     strings, it now raises a *note TypeError: 198. 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: 198. 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: 120f. 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<12>

1.11.7.3 Code Cleanups
......................

   * The unused and undocumented internal ‘Scanner’ class has been
     removed from the *note pydoc: ba. module.

   * The private and effectively unused ‘_gestalt’ module has been
     removed, along with the private *note platform: af. 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: d6. constants that were
     included in the *note tarfile: e4. 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<12>,  Up: O que há de novo no Python 3 4

1.11.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<11>.
* Alterações na API C: Alterações na API C<17>.


File: python.info,  Node: Changes in ‘python’ Command Behavior<2>,  Next: Alterações na API Python<11>,  Up: Porting to Python 3 4

1.11.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: 1213. to an empty value was 'not'
     equivalent to not setting it at all: setting *note PYTHONPATH:
     1213. 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: 7.) now output ‘--version’ information to ‘stdout’
     instead of ‘stderr’ (for issue list see *note Other Improvements:
     11fc. above).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17323


File: python.info,  Node: Alterações na API Python<11>,  Next: Alterações na API C<17>,  Prev: Changes in ‘python’ Command Behavior<2>,  Up: Porting to Python 3 4

1.11.8.2 Alterações na API Python
.................................

   * The ABCs defined in *note importlib.abc: 7c. now either raise the
     appropriate exception or return a default value instead of raising
     *note NotImplementedError: 368. blindly.  This will only affect
     code calling *note super(): 1a6. and falling through all the way to
     the ABCs.  For compatibility, catch both *note NotImplementedError:
     368. or the appropriate exception as needed.

   * The module type now initializes the *note __package__: 321. and
     *note __loader__: 339. 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:
     1215, or if Python 2 compatibility is necessary you can use
     ‘imp.is_frozen()’.

   * *note py_compile.compile(): c10. now raises *note FileExistsError:
     1216. 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(): 1217. no longer
     raises *note ImportError: 64f. when the source code being loaded
     triggers a *note SyntaxError: 18e. or *note UnicodeDecodeError:
     bfe.  As *note ImportError: 64f. 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(): 1218. e *note functools.wraps():
     1153. 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(): 1152. para acessar a primeira função na
     cadeia que não possui nenhum atributo ‘__wrapped__’.

   * *note inspect.getfullargspec(): 936. foi reimplementada em cima de
     *note inspect.signature(): 22e. 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(): 936.
     falhará em chamáveis não-Python pode precisar ser ajustado de
     acordo.

   * *note importlib.machinery.PathFinder: 1219. now passes on the
     current working directory to objects in *note sys.path_hooks: 121a.
     for the empty string.  This results in *note
     sys.path_importer_cache: 7ef. never containing ‘''’, thus iterating
     through *note sys.path_importer_cache: 7ef. based on *note
     sys.path: 3e1. 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: d29.
     and *note HTTPSConnection: d2a. 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: 18e.  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(): 11ae. and *note
     ssl.SSLSocket.do_handshake(): 1063. now raise an *note OSError:
     2bf. with ‘ENOTCONN’ when the ‘SSLSocket’ is not connected, instead
     of the previous behavior of raising an *note AttributeError: 5e4.
     In addition, *note getpeercert(): 11ae. will raise a *note
     ValueError: 2ea. if the handshake has not yet been done.

   * *note base64.b32decode(): 121b. now raises a *note binascii.Error:
     121c. when the input string contains non-b32-alphabet characters,
     instead of a *note TypeError: 198.  This particular *note
     TypeError: 198. was missed when the other *note TypeError: 198.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: 2ea. rather than the previous more
     mysterious *note AttributeError: 5e4. (bpo-9177(8)).

   * *note slice.indices(): 121d. no longer produces an *note
     OverflowError: a77. for huge values.  As a consequence of this fix,
     *note slice.indices(): 121d. now raises a *note ValueError: 2ea. if
     given a negative length; previously it returned nonsense values
     (bpo-14794(9)).

   * The *note complex: 197. constructor, unlike the *note cmath: 19.
     functions, was incorrectly accepting *note float: 196. values if an
     object’s ‘__complex__’ special method returned one.  This now
     raises a *note TypeError: 198.  (bpo-16290(10).)

   * The *note int: 19b. constructor in 3.2 and 3.3 erroneously accepts
     *note float: 196. values for the 'base' parameter.  It is unlikely
     anyone was doing this, but if so, it will now raise a *note
     TypeError: 198. (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(): 4af.  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__: 121e.  (Contributed by
     Yury Selivanov in bpo-20625(14).)

   * *note hashlib.hash.name: 113d. 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: fea. now drops references to
     tests after they are run, test harnesses that reuse a *note
     TestSuite: fea. 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: 10c. is designed to provide.  However, if the lack of
     isolation is considered acceptable, the old behavior can be
     restored by creating a *note TestSuite: fea. subclass that defines
     a ‘_removeTestAtIndex’ method that does nothing (see *note
     TestSuite.__iter__(): 121f.) (bpo-11798(16)).

   * *note unittest: 10c. now uses *note argparse: 7. 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(): 59b, *note re.findall(): 1220, and *note
     re.sub(): 59c. functions, and the *note group(): 1221. and *note
     groups(): 1222. methods of ‘match’ objects now always return a
     'bytes' object when the string to be matched is a *note bytes-like
     object: 193.  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: a6d.
     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: a6d. calls in your code (bpo-13633(18)).

   * Since the 'digestmod' argument to the *note hmac.new(): c89.
     function will in the future have no default, all calls to *note
     hmac.new(): c89. should be changed to explicitly specify a
     'digestmod' (bpo-17276(19)).

   * Calling *note sysconfig.get_config_var(): 174. with the ‘SO’ key,
     or looking ‘SO’ up in the results of a call to *note
     sysconfig.get_config_vars(): 297. 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: 9b4. 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(): f34. and *note
     json.dumps(): f35. 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: 3e. 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: 1f. 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:
     1e. automatically imports *note collections.abc: 1f.  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<17>,  Prev: Alterações na API Python<11>,  Up: Porting to Python 3 4

1.11.8.3 Alterações na API C
............................

   * *note PyEval_EvalFrameEx(): 1224, *note PyObject_Repr(): 1225, and
     *note PyObject_Str(): 1226, 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(): 425. or is being
     deliberately replaced with a different exception), an explicit
     *note PyErr_Clear(): 1227. 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(): f2d. now sets *note TypeError: 198.
     when its 'msg' argument is not set.  Previously only ‘NULL’ was
     returned with no exception set.

   * The result of the *note PyOS_ReadlineFunctionPointer: 79a. callback
     must now be a string allocated by *note PyMem_RawMalloc(): 625. or
     *note PyMem_RawRealloc(): 627, or ‘NULL’ if an error occurred,
     instead of a string allocated by *note PyMem_Malloc(): e54. or
     *note PyMem_Realloc(): 1228. (bpo-16742(1))

   * *note PyThread_set_key_value(): 438. 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:
     981. 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.11.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.11.9.1 PEP 476: Habilitando verificação de certificado por padrão para clientes http stdlib
.............................................................................................

*note http.client: 73. and modules which use it, such as *note
urllib.request: 111. and *note xmlrpc.client: 134, 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.12 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<12>.
* 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<12>.
* Módulos melhorados: Módulos melhorados<12>.
* Otimizações: Otimizações<11>.
* Mudanças a construções e API C: Mudanças a construções e API C<4>.
* Descontinuados: Descontinuados<13>.
* 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<12>,  Next: PEP 405 Ambientes Virtuais,  Up: O que há de novo no Python 3 3

1.12.1 Resumo – Destaques da versão
-----------------------------------

Novos recursos de sintaxe:

   * New ‘yield from’ expression for *note generator delegation: 1230.

   * A sintaxe ‘u'unicode'’ é aceita novamente para objetos tipo *note
     str: 169.

Novos módulos de biblioteca:

   * *note faulthandler: 5c. (helps debugging low-level crashes)

   * *note ipaddress: 84. (high-level objects representing IP addresses
     and masks)

   * *note lzma: 8e. (compressão de dados usando o algoritmo XZ / LZMA)

   * *note unittest.mock: 10d. (replace parts of your system under test
     with mock objects)

   * *note venv: 117. (Python *note virtual environments: 1231, as in
     the popular ‘virtualenv’ package)

Novos recursos embutidos:

   * Reworked *note I/O exception hierarchy: 1232.

Melhorias na implementação:

   * Rewritten *note import machinery: 1233. based on *note importlib:
     7b.

   * More compact *note unicode strings: 1234.

   * More compact *note attribute dictionaries: 1235.

Significantly Improved Library Modules:

   * C Accelerator for the *note decimal: 1236. module.

   * Better unicode handling in the *note email: 1237. module (*note
     provisional: 1238.).

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<12>,  Up: O que há de novo no Python 3 3

1.12.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: 117. 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.12.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.12.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.12.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.12.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: 123f. and
     *note Porting C code: 1240.

(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.12.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.12.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(): 835. 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: 1243. 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.12.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.12.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 Gerenciador de instalação do Python: 7cf.

Installer PATH modification: *note Gerenciador de instalação do Python:
1247.

   ---------- 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.12.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: 2bf, *note IOError: 1249, *note
EnvironmentError: 124a, *note WindowsError: 124b, ‘mmap.error’, *note
socket.error: 124c. or *note select.error: 124d.  All these exception
types are now only one: *note OSError: 2bf.  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: 5b. module, you can catch the adequate
*note OSError: 2bf. subclass.  The available subclasses are the
following:

   * *note BlockingIOError: 234.

   * *note ChildProcessError: 124e.

   * *note ConnectionError: 1000.

   * *note FileExistsError: 1216.

   * *note FileNotFoundError: 263.

   * *note InterruptedError: f7c.

   * *note IsADirectoryError: 124f.

   * *note NotADirectoryError: 1250.

   * *note PermissionError: f32.

   * *note ProcessLookupError: 1251.

   * *note TimeoutError: a2c.

And the *note ConnectionError: 1000. itself has finer-grained
subclasses:

   * *note BrokenPipeError: 1252.

   * *note ConnectionAbortedError: 1253.

   * *note ConnectionRefusedError: 1254.

   * *note ConnectionResetError: 1255.

Thanks to the new exceptions, common usages of the *note errno: 5b. 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: 5b. 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.12.8 PEP 380: Syntax for Delegating to a Subgenerator
-------------------------------------------------------

PEP 380 adds the ‘yield from’ expression, allowing a *note generator:
1257. to delegate part of its operations to another generator.  This
allows a section of code containing *note yield: bb8. 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.12.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.12.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.12.11 PEP 3155: Qualified name for classes and functions
----------------------------------------------------------

Functions and class objects have a new *note __qualname__: 125b.
attribute representing the “path” from the module top-level to their
definition.  For global functions and classes, this is the same as *note
__name__: 125c.  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.12.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.12.13 PEP 362: Function Signature Object
------------------------------------------

A new function *note inspect.signature(): 22e. 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(): 216. objects.  New classes *note inspect.Signature:
4dd, *note inspect.Parameter: 4de. and *note inspect.BoundArguments:
125f. 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.12.14 PEP 421: Adding sys.implementation
------------------------------------------

A new attribute on the *note sys: df. module exposes details specific to
the implementation of the currently running interpreter.  The initial
set of attributes on *note sys.implementation: 730. 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: 7b. 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.12.14.1 SimpleNamespace
.........................

The implementation of ‘sys.implementation’ also introduces a new type to
Python: *note types.SimpleNamespace: 4df.  In contrast to a
mapping-based namespace, like *note dict: 183, ‘SimpleNamespace’ is
attribute-based, like *note object: c72.  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.12.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__(): ac7. function is now powered by *note
importlib.__import__(): 1263.  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: 1264. 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.12.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:
7b. package.

The abstract base classes defined in *note importlib.abc: 7c. have been
expanded to properly delineate between *note meta path finders: 1266.
and *note path entry finders: 1267. by introducing *note
importlib.abc.MetaPathFinder: a64. and *note
importlib.abc.PathEntryFinder: a65, 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: 1268. 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:
121a.

For loaders, the new abstract base class *note importlib.abc.FileLoader:
1269. 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: 126a.), sourceless bytecode files
(*note importlib.machinery.SourcelessFileLoader: 126b.), and extension
modules (*note importlib.machinery.ExtensionFileLoader: ea2.) are now
available for direct use.

*note ImportError: 64f. 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(): dfe. function will now call the
method with the same name on all finders cached in *note
sys.path_importer_cache: 7ef. 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.12.15.2 Visible Changes
.........................

For potential required changes to code, see the *note Porting Python
code: 1264. section.

Beyond the expanse of what *note importlib: 7b. now exposes, there are
other visible changes to import.  The biggest is that *note
sys.meta_path: f1b. and *note sys.path_hooks: 121a. 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: 7b. and import itself is setting the
attribute post-load.

‘None’ is now inserted into *note sys.path_importer_cache: 7ef. when no
finder can be found on *note sys.path_hooks: 121a.  Since
‘imp.NullImporter’ is not directly exposed on *note sys.path_hooks:
121a. 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: 1264. 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.12.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(): 126e. and ‘'\N{...}'’ now resolve name
     aliases, and *note unicodedata.lookup(): 126e. 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(): b33. 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: 192. and *note bytearray: 342. 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:
     192. and *note bytearray: 342. now accept a *note bytearray: 342.
     for the ‘fill’ argument.  (Contributed by Petri Lehtinen in
     bpo-12380(4).)

   * New methods have been added to *note list: 24c. and *note
     bytearray: 342.: ‘copy()’ and ‘clear()’ (bpo-10516(5)).
     Consequently, *note MutableSequence: 4b9. 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(): 126f. 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.12.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(): 3d8. 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<12>,  Prev: A Finer-Grained Import Lock,  Up: O que há de novo no Python 3 3

1.12.18 Builtin functions and types
-----------------------------------

   * *note open(): 314. 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: 1272. for example.  The ‘'x'’ mode
     was added: open for exclusive creation, failing if the file already
     exists.

   * *note print(): 116b.: added the 'flush' keyword argument.  If the
     'flush' keyword argument is true, the stream is forcibly flushed.

   * *note hash(): 7f6.: hash randomization is enabled by default, see
     *note object.__hash__(): ce6. and *note PYTHONHASHSEED: 1273.

   * The *note str: 169. type gets a new *note casefold(): fca. 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<12>,  Next: Módulos melhorados<12>,  Prev: Builtin functions and types,  Up: O que há de novo no Python 3 3

1.12.19 Novos módulos
---------------------

* Menu:

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


File: python.info,  Node: faulthandler<5>,  Next: ipaddress<6>,  Up: Novos módulos<12>

1.12.19.1 faulthandler
......................

This new debug module *note faulthandler: 5c. 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(): 20e. to install fault handlers for the *note
SIGSEGV: 1276, *note SIGFPE: 1277, *note SIGABRT: 1278, *note SIGBUS:
1279, and *note SIGILL: 127a. signals.  You can also enable them at
startup by setting the *note PYTHONFAULTHANDLER: 127b. environment
variable or by using *note -X: 16f. ‘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<5>,  Up: Novos módulos<12>

1.12.19.2 ipaddress
...................

The new *note ipaddress: 84. 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<12>

1.12.19.3 lzma
..............

The newly added *note lzma: 8e. 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<12>,  Next: Otimizações<11>,  Prev: Novos módulos<12>,  Up: O que há de novo no Python 3 3

1.12.20 Módulos melhorados
--------------------------

* Menu:

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


File: python.info,  Node: abc<2>,  Next: array<5>,  Up: Módulos melhorados<12>

1.12.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: 1280. has been deprecated, use *note
     property: 4ad. with *note abc.abstractmethod(): 1281. instead.

   * *note abc.abstractclassmethod: 1282. has been deprecated, use *note
     classmethod: 488. with *note abc.abstractmethod(): 1281. instead.

   * *note abc.abstractstaticmethod: 1283. has been deprecated, use
     *note staticmethod: 450. with *note abc.abstractmethod(): 1281.
     instead.

(Contributed by Darren Dale in bpo-11610(1).)

*note abc.ABCMeta.register(): 1284. 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<5>,  Prev: abc<2>,  Up: Módulos melhorados<12>

1.12.20.2 array
...............

The *note array: 8. 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<5>,  Next: binascii<3>,  Prev: array<5>,  Up: Módulos melhorados<12>

1.12.20.3 base64
................

ASCII-only Unicode strings are now accepted by the decoding functions of
the *note base64: f. 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<5>,  Up: Módulos melhorados<12>

1.12.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<12>

1.12.20.5 bz2
.............

The *note bz2: 14. module has been rewritten from scratch.  In the
process, several new features have been added:

   * New *note bz2.open(): 1289. function: open a bzip2-compressed file
     in binary or text mode.

   * *note bz2.BZ2File: a5c. 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: a5c. and *note bz2.decompress(): 128a. can now
     decompress multi-stream inputs (such as those produced by the
     ‘pbzip2’ tool).  *note bz2.BZ2File: a5c. 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: a5c. now implements all of the *note
     io.BufferedIOBase: 898. 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<12>

1.12.20.6 codecs
................

The *note mbcs: 57. codec has been rewritten to handle correctly
‘replace’ and ‘ignore’ error handlers on all Windows versions.  The
*note mbcs: 57. 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<12>

1.12.20.7 collections
.....................

Addition of a new *note ChainMap: e0a. 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: 1f. module, to better differentiate between the
abstract and the concrete collections classes.  Aliases for ABCs are
still present in the *note collections: 1e. module to preserve existing
imports.  (bpo-11085(3))

The *note Counter: 128d. 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<12>

1.12.20.8 contextlib
....................

*note ExitStack: d12. 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: f3. module).

(bpo-13585(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13585


File: python.info,  Node: crypt<2>,  Next: curses<6>,  Prev: contextlib<7>,  Up: Módulos melhorados<12>

1.12.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<6>,  Next: datetime<7>,  Prev: crypt<2>,  Up: Módulos melhorados<12>

1.12.20.10 curses
.................

   * If the *note curses: 2f. 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: 1291. has a new *note curses.window.encoding:
     1292. attribute.

   * The *note curses.window: 1291. class has a new *note get_wch():
     1293. method to get a wide character

   * The *note curses: 2f. module has a new *note unget_wch(): 1294.
     function to push a wide character so the next *note get_wch():
     1293. 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<7>,  Next: decimal<4>,  Prev: curses<6>,  Up: Módulos melhorados<12>

1.12.20.11 datetime
...................

   * Equality comparisons between naive and aware *note datetime: 4dc.
     instances now return *note False: d1f. instead of raising *note
     TypeError: 198. (bpo-15006(1)).

   * New *note datetime.datetime.timestamp(): 1296. method: Return POSIX
     timestamp corresponding to the *note datetime: 4dc. instance.

   * The *note datetime.datetime.strftime(): e82. method supports
     formatting years older than 1000.

   * The *note datetime.datetime.astimezone(): bba. 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<4>,  Next: email<6>,  Prev: datetime<7>,  Up: Módulos melhorados<12>

1.12.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<4>

1.12.20.13 Recursos
...................

   * The *note FloatOperation: 1299. 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: 129a. is set to ‘False’.


File: python.info,  Node: Mudanças na API<2>,  Prev: Recursos<2>,  Up: decimal<4>

1.12.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: 129c.            ‘425000000’          ‘999999999999999999’
                                                                
                                                                
          *note MAX_EMAX: 129d.            ‘425000000’          ‘999999999999999999’
                                                                
                                                                
          *note MIN_EMIN: 129e.            ‘-425000000’         ‘-999999999999999999’
                                                                

   * In the context templates (*note DefaultContext: 129f, *note
     BasicContext: 12a0. and *note ExtendedContext: 12a1.) the magnitude
     of *note Emax: 12a2. and *note Emin: 12a3. has changed to ‘999999’.

   * The *note Decimal: 1fd. 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: 12a4. is raised and the
     result is NaN. In the latter case it is always possible to use
     *note create_decimal(): 12a5. 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(): 12a6. and *note ln(): 12a7. 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: 12a8.  For speed reasons, *note flags:
     12a9. and *note traps: 12aa. always refer to the same *note
     MutableMapping: 12a8. that the context was initialized with.  If a
     new signal dictionary is assigned, *note flags: 12a9. and *note
     traps: 12aa. are updated with the new values, but they do not
     reference the RHS dictionary.

   * Pickling a *note Context: 12ab. 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: 12ab. constructor has
     been changed to match the order displayed by *note repr(): 1c1.

   * The ‘watchexp’ parameter in the *note quantize(): 12ac. method is
     deprecated.


File: python.info,  Node: email<6>,  Next: ftplib<3>,  Prev: decimal<4>,  Up: Módulos melhorados<12>

1.12.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<6>

1.12.20.16 Policy Framework
...........................

The email package now has a *note policy: 53. framework.  A *note
Policy: 12af. 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: 12b0. 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: 52, or when
a *note Message: 57a. object is created, or when an email is serialized
using a *note generator: 44.  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: e8b.

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(): 12b1. 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<6>

1.12.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: 1238.
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: 12b3, and add the
following additional controls:

refold_source       Controls whether or not headers parsed by a
                    *note parser: 52. are refolded by the
                    *note generator: 44.  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: 45. *note decode_header():
12b4. or *note make_header(): 12b5. 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<6>

1.12.20.18 Other API Changes
............................

New *note BytesHeaderParser: 12b7, added to the *note parser: 52. module
to complement *note HeaderParser: 12b8. and complete the Bytes API.

New utility functions:

   * *note format_datetime(): 12b9.: given a *note datetime: 4dc,
     produce a string formatted for use in an email header.

   * *note parsedate_to_datetime(): 12ba.: given a date string from an
     email header, convert it into an aware *note datetime: 4dc, or a
     naive *note datetime: 4dc. if the offset is ‘-0000’.

   * *note localtime(): 2f5.: With no argument, returns the current
     local time as an aware *note datetime: 4dc. using the local *note
     timezone: 12bb.  Given an aware *note datetime: 4dc, converts it
     into an aware *note datetime: 4dc. using the local *note timezone:
     12bb.


File: python.info,  Node: ftplib<3>,  Next: functools<7>,  Prev: email<6>,  Up: Módulos melhorados<12>

1.12.20.19 ftplib
.................

   * *note ftplib.FTP: aec. 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: aed. class now provides a new *note ccc(): 12bd.
     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(): 12be. method which provides a
     parsable directory listing format and deprecates *note
     ftplib.FTP.nlst(): 12bf. and *note ftplib.FTP.dir(): 12c0.
     (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<7>,  Next: gc<7>,  Prev: ftplib<3>,  Up: Módulos melhorados<12>

1.12.20.20 functools
....................

The *note functools.lru_cache(): bd8. 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<7>,  Next: hmac<5>,  Prev: functools<7>,  Up: Módulos melhorados<12>

1.12.20.21 gc
.............

It is now possible to register callbacks invoked by the garbage
collector before and after collection using the new *note callbacks:
12c3. list.


File: python.info,  Node: hmac<5>,  Next: http<5>,  Prev: gc<7>,  Up: Módulos melhorados<12>

1.12.20.22 hmac
...............

A new *note compare_digest(): 12c5. 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<5>,  Next: html<2>,  Prev: hmac<5>,  Up: Módulos melhorados<12>

1.12.20.23 http
...............

*note http.server.BaseHTTPRequestHandler: 12c7. now buffers the headers
and writes them all at once when *note end_headers(): 12c8. is called.
A new method *note flush_headers(): 12c9. can be used to directly manage
when the accumulated headers are sent.  (Contributed by Andrew Schaaf in
bpo-3709(1).)

*note http.server: 76. now produces valid ‘HTML 4.01 strict’ output.
(Contributed by Ezio Melotti in bpo-13295(2).)

*note http.client.HTTPResponse: 12ca. now has a *note readinto(): 12cb.
method, which means it can be used as an *note io.RawIOBase: 12cc.
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<4>,  Prev: http<5>,  Up: Módulos melhorados<12>

1.12.20.24 html
...............

*note html.parser.HTMLParser: a6d. 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: 12ce. 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: 70. module.  The
dictionary is now also used by *note HTMLParser: a6d.  (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<4>,  Next: inspect<10>,  Prev: html<2>,  Up: Módulos melhorados<12>

1.12.20.25 imaplib
..................

The *note IMAP4_SSL: af6. 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<10>,  Next: io<8>,  Prev: imaplib<4>,  Up: Módulos melhorados<12>

1.12.20.26 inspect
..................

A new *note getclosurevars(): 12d1. 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(): 12d2. 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<8>,  Next: itertools<7>,  Prev: inspect<10>,  Up: Módulos melhorados<12>

1.12.20.27 io
.............

The *note open(): 735. function has a new ‘'x'’ mode that can be used to
exclusively create a new file, and raise a *note FileExistsError: 1216.
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: 9b4. 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: 9b4. 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<7>,  Next: logging<7>,  Prev: io<8>,  Up: Módulos melhorados<12>

1.12.20.28 itertools
....................

*note accumulate(): be6. now takes an optional ‘func’ argument for
providing a user-supplied binary function.


File: python.info,  Node: logging<7>,  Next: math<10>,  Prev: itertools<7>,  Up: Módulos melhorados<12>

1.12.20.29 logging
..................

The *note basicConfig(): be9. 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: 861. 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<10>,  Next: mmap<4>,  Prev: logging<7>,  Up: Módulos melhorados<12>

1.12.20.30 math
...............

The *note math: 92. module has a new function, *note log2(): 12d7, 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<9>,  Prev: math<10>,  Up: Módulos melhorados<12>

1.12.20.31 mmap
...............

The *note read(): 12d9. 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<9>,  Next: nntplib<2>,  Prev: mmap<4>,  Up: Módulos melhorados<12>

1.12.20.32 multiprocessing
..........................

The new *note multiprocessing.connection.wait(): 12db. 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: 12dc. objects can now be
transferred over multiprocessing connections.  (Contributed by Richard
Oudkerk in bpo-4892(2).)

*note multiprocessing.Process: 251. 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: 12dd. allows a
program to wait on multiple *note Process: 251. objects at one time
using the appropriate OS primitives (for example, *note select: c6. on
posix systems).

New methods *note multiprocessing.pool.Pool.starmap(): 12de. and *note
starmap_async(): 12df. provide *note itertools.starmap(): 12e0.
equivalents to the existing *note multiprocessing.pool.Pool.map(): 12e1.
and *note map_async(): 12e2. 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<13>,  Prev: multiprocessing<9>,  Up: Módulos melhorados<12>

1.12.20.33 nntplib
..................

The ‘nntplib.NNTP’ class now supports the context management protocol to
unconditionally consume *note socket.error: 124c. 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<13>,  Next: pdb<9>,  Prev: nntplib<2>,  Up: Módulos melhorados<12>

1.12.20.34 os
.............

   * The *note os: a5. module has a new *note pipe2(): 12e5. function
     that makes it possible to create a pipe with *note O_CLOEXEC: 1272.
     or *note O_NONBLOCK: 1030. flags set atomically.  This is
     especially useful to avoid race conditions in multi-threaded
     programs.

   * The *note os: a5. module has a new *note sendfile(): cf8. 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(): cf8. 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: a5. module has a new *note fwalk(): d46.
          function similar to *note walk(): 6c5. 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: 12e6.) and/or
          'follow_symlinks' (*note not following symlinks: 12e7.): *note
          access(): 12e8, *note chflags(): 12e9, *note chmod(): 523,
          *note chown(): 12ea, *note link(): 12eb, *note lstat(): 6bd,
          *note mkdir(): 525, *note mkfifo(): f84, *note mknod(): f85,
          *note open(): f86, *note readlink(): b10, *note remove():
          12ec, *note rename(): 12ed, *note replace(): 12ee, *note
          rmdir(): 12ef, *note stat(): 26c, *note symlink(): 12f0, *note
          unlink(): 12f1, *note utime(): 12f2.  Platform support for
          using these parameters can be checked via the sets *note
          os.supports_dir_fd: 12f3. and *note
          os.supports_follow_symlinks: 12f4.

        - The following functions now support a file descriptor for
          their path argument: *note chdir(): 816, *note chmod(): 523,
          *note chown(): 12ea, *note execve(): 12f5, *note listdir():
          12f6, *note pathconf(): 12f7, *note exists(): bf9, *note
          stat(): 26c, *note statvfs(): 12f8, *note utime(): 12f2.
          Platform support for this can be checked via the *note
          os.supports_fd: 12f9. set.

   * *note access(): 12e8. 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: 12fa. set.

   * The *note os: a5. module has two new functions: *note
     getpriority(): 12fb. and *note setpriority(): 12fc.  They can be
     used to get or set process niceness/priority in a fashion similar
     to *note os.nice(): 12fd. 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(): 12ee. function allows cross-platform
     renaming of a file with overwriting the destination.  With *note
     os.rename(): 12ed, 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(): 26c, *note fstat():
     f80, and *note lstat(): 6bd.) now support reading a file’s
     timestamps with nanosecond precision.  Symmetrically, *note
     utime(): 12f2. can now write file timestamps with nanosecond
     precision.  (Contributed by Larry Hastings in bpo-14127(7).)

   * The new *note os.get_terminal_size(): 12fe. function queries the
     size of the terminal attached to a file descriptor.  See also *note
     shutil.get_terminal_size(): 12ff.  (Contributed by Zbigniew
     Jędrzejewski-Szmek in bpo-13609(8).)

   * New functions to support Linux extended attributes (bpo-12720(9)):
     *note getxattr(): 1300, *note listxattr(): 1301, *note
     removexattr(): 1302, *note setxattr(): 1303.

   * 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(): 1304, *note
     sched_get_priority_min(): 1305, *note sched_getaffinity(): 1306,
     *note sched_getparam(): 1307, *note sched_getscheduler(): 1308,
     *note sched_rr_get_interval(): 1309, *note sched_setaffinity():
     130a, *note sched_setparam(): 130b, *note sched_setscheduler():
     130c, *note sched_yield(): 130d,

   * New functions to control the file system:

        * *note posix_fadvise(): f87.: Announces an intention to access
          data in a specific pattern thus allowing the kernel to make
          optimizations.

        * *note posix_fallocate(): f88.: Ensures that enough disk space
          is allocated for a file.

        * *note sync(): 130e.: Force write of everything to disk.

   * Additional new posix functions:

        * *note lockf(): 130f.: Apply, test or remove a POSIX lock on an
          open file descriptor.

        * *note pread(): d4a.: Read from a file descriptor at an offset,
          the file offset remains unchanged.

        * *note pwrite(): d4d.: Write to a file descriptor from an
          offset, leaving the file offset unchanged.

        * *note readv(): d49.: Read from a file descriptor into a number
          of writable buffers.

        * *note truncate(): 1031.: Truncate the file corresponding to
          'path', so that it is at most 'length' bytes in size.

        * *note waitid(): f8d.: Wait for the completion of one or more
          child processes.

        * *note writev(): d4c.: Write the contents of 'buffers' to a
          file descriptor, where 'buffers' is an arbitrary sequence of
          buffers.

        * *note getgrouplist(): 1310. (bpo-9344(10)): Return list of
          group ids that specified user belongs to.

   * *note times(): 1311. and *note uname(): 1312.: Return type changed
     from a tuple to a tuple-like object with named attributes.

   * Some platforms now support additional constants for the *note
     lseek(): 1313. function, such as ‘os.SEEK_HOLE’ and ‘os.SEEK_DATA’.

   * New constants *note RTLD_LAZY: 1314, *note RTLD_NOW: 1315, *note
     RTLD_GLOBAL: 1316, *note RTLD_LOCAL: 1317, *note RTLD_NODELETE:
     1318, *note RTLD_NOLOAD: 1319, and *note RTLD_DEEPBIND: 131a. are
     available on platforms that support them.  These are for use with
     the *note sys.setdlopenflags(): 131b. function, and supersede the
     similar constants defined in *note ctypes: 2e. and ‘DLFCN’.
     (Contributed by Victor Stinner in bpo-13226(11).)

   * *note os.symlink(): 12f0. 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<9>,  Next: pickle<6>,  Prev: os<13>,  Up: Módulos melhorados<12>

1.12.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<6>,  Next: pydoc<6>,  Prev: pdb<9>,  Up: Módulos melhorados<12>

1.12.20.36 pickle
.................

*note pickle.Pickler: c09. objects now have an optional *note
dispatch_table: 131e. 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<6>,  Next: re<10>,  Prev: pickle<6>,  Up: Módulos melhorados<12>

1.12.20.37 pydoc
................

The Tk GUI and the ‘serve()’ function have been removed from the *note
pydoc: ba. module: ‘pydoc -g’ and ‘serve()’ have been deprecated in
Python 3.2.


File: python.info,  Node: re<10>,  Next: sched,  Prev: pydoc<6>,  Up: Módulos melhorados<12>

1.12.20.38 re
.............

*note str: 169. 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<10>,  Up: Módulos melhorados<12>

1.12.20.39 sched
................

   * *note run(): 1322. 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: 1323. in
     non-blocking applications.  (Contributed by Giampaolo Rodolà in
     bpo-13449(1).)

   * *note scheduler: 1323. 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: 1323.
     class constructor are now optional and defaults to *note
     time.time(): 556. and *note time.sleep(): 8a1. respectively.
     (Contributed by Chris Clark in bpo-13245(3).)

   * *note enter(): 1324. and *note enterabs(): 1325. 'argument'
     parameter is now optional.  (Contributed by Chris Clark in
     bpo-13245(4).)

   * *note enter(): 1324. and *note enterabs(): 1325. 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<12>

1.12.20.40 select
.................

Solaris and derivative platforms have a new class *note select.devpoll:
118c. 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<12>

1.12.20.41 shlex
................

The previously undocumented helper function ‘quote’ from the ‘pipes’
modules has been moved to the *note shlex: c9. module and documented.
*note quote(): 57b. 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<12>

1.12.20.42 shutil
.................

   * Novas Funções:

        * *note disk_usage(): 1329.: provides total, used and free disk
          space statistics.  (Contributed by Giampaolo Rodolà in
          bpo-12442(1).)

        * *note chown(): 542.: 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(): 12ff.: 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(): c45. and *note copystat(): 132a. 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(): 1049.
     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(): 1049. now also returns the ‘dst’ argument as its result.

   * *note rmtree(): 353. is now resistant to symlink attacks on
     platforms which support the new ‘dir_fd’ parameter in *note
     os.open(): f86. and *note os.unlink(): 12f1.  (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<12>

1.12.20.43 signal
.................

   * The *note signal: cb. module has new functions:

        * *note pthread_sigmask(): 132c.: fetch and/or change the signal
          mask of the calling thread (Contributed by Jean-Paul Calderone
          in bpo-8407(1));

        * *note pthread_kill(): 132d.: send a signal to a thread;

        * *note sigpending(): 132e.: examine pending functions;

        * *note sigwait(): 132f.: wait a signal;

        * *note sigwaitinfo(): f9f.: wait for a signal, returning
          detailed information about it;

        * *note sigtimedwait(): f9e.: like *note sigwaitinfo(): f9f. 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(): 1330. and *note signal.siginterrupt(): 1331.
     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<12>

1.12.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<11>,  Prev: smtpd<4>,  Up: Módulos melhorados<12>

1.12.20.45 smtplib
..................

The *note SMTP: b1d, *note SMTP_SSL: b1e, and *note LMTP: b1f. 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: b1d. 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: b1e. constructor and the *note starttls(): 1334.
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<11>,  Next: socketserver<3>,  Prev: smtplib<4>,  Up: Módulos melhorados<12>

1.12.20.46 socket
.................

   * The *note socket: f95. class now exposes additional methods to
     process ancillary data when supported by the underlying platform:

        * *note sendmsg(): 696.

        * *note recvmsg(): f9a.

        * *note recvmsg_into(): 1336.

     (Contributed by David Watson in bpo-6560(1), based on an earlier
     patch by Heiko Wundram)

   * The *note socket: f95. 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: f95. 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: f95. class now supports the ‘PF_SYSTEM’ protocol
     family on OS X. (Contributed by Michael Goderbauer in
     bpo-13777(4).)

   * New function *note sethostname(): 1337. 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<11>,  Prev: socket<11>,  Up: Módulos melhorados<12>

1.12.20.47 socketserver
.......................

*note BaseServer: 1339. now has an overridable method *note
service_actions(): 133a. that is called by the *note serve_forever():
133b. method in the service loop.  *note ForkingMixIn: d65. 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<11>,  Next: ssl<12>,  Prev: socketserver<3>,  Up: Módulos melhorados<12>

1.12.20.48 sqlite3
..................

New *note sqlite3.Connection: 547. method *note set_trace_callback():
5a4. 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<12>,  Next: stat<2>,  Prev: sqlite3<11>,  Up: Módulos melhorados<12>

1.12.20.49 ssl
..............

   * The *note ssl: d5. module has two new random generation functions:

        * *note RAND_bytes(): 73c.: generate cryptographically strong
          pseudo-random bytes.

        * ‘RAND_pseudo_bytes()’: generate pseudo-random bytes.

     (Contributed by Victor Stinner in bpo-12049(1).)

   * The *note ssl: d5. 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(): 591. 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(): 133e. and
     *note set_ecdh_curve(): 133f. methods.  (Contributed by Antoine
     Pitrou in bpo-13626(4) and bpo-13627(5).)

   * SSL sockets have a new *note get_channel_binding(): 1340. 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(): 1341. method.  The new
     attribute *note OP_NO_COMPRESSION: 1342. 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(): 355. method.
     (Contributed by Colin Marc in bpo-14204(8).)

   * SSL errors can now be introspected more easily thanks to *note
     library: 1343. and *note reason: 1344. attributes.  (Contributed by
     Antoine Pitrou in bpo-14837(9).)

   * The *note get_server_certificate(): a33. function now supports
     IPv6.  (Contributed by Charles-François Natali in bpo-11811(10).)

   * New attribute *note OP_CIPHER_SERVER_PREFERENCE: 1345. 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<4>,  Prev: ssl<12>,  Up: Módulos melhorados<12>

1.12.20.50 stat
...............

The undocumented tarfile.filemode function has been moved to *note
stat.filemode(): 1347.  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<4>,  Next: subprocess<6>,  Prev: stat<2>,  Up: Módulos melhorados<12>

1.12.20.51 struct
.................

The *note struct: db. 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<4>,  Up: Módulos melhorados<12>

1.12.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: 134a. 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<12>

1.12.20.53 sys
..............

The *note sys: df. module has a new *note thread_info: 134c. *note named
tuple: 853. 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<12>

1.12.20.54 tarfile
..................

*note tarfile: e4. now supports ‘lzma’ encoding via the *note lzma: 8e.
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<12>

1.12.20.55 tempfile
...................

*note tempfile.SpooledTemporaryFile: 897.'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<9>,  Prev: tempfile<4>,  Up: Módulos melhorados<12>

1.12.20.56 textwrap
...................

The *note textwrap: f2. module has a new *note indent(): 576. 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<9>,  Next: time<8>,  Prev: textwrap<2>,  Up: Módulos melhorados<12>

1.12.20.57 threading
....................

*note threading.Condition: 1351, *note threading.Semaphore: 1352, *note
threading.BoundedSemaphore: 1353, *note threading.Event: 1354, and *note
threading.Timer: 1355, 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: 176. 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(): 1356.  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<9>,  Up: Módulos melhorados<12>

1.12.20.58 time
...............

The PEP 418(1) added new functions to the *note time: f4. module:

   * *note get_clock_info(): 1358.: Get information on a clock.

   * *note monotonic(): 555.: Monotonic clock (cannot go backward), not
     affected by system clock updates.

   * *note perf_counter(): c6e.: Performance counter with the highest
     available resolution to measure a short duration.

   * *note process_time(): c6f.: Sum of the system and user CPU time of
     the current process.

Other new functions:

   * *note clock_getres(): 1359, *note clock_gettime(): 135a. and *note
     clock_settime(): 135b. functions with ‘CLOCK_XXX’ constants.
     (Contributed by Victor Stinner in bpo-10278(2).)

To improve cross platform consistency, *note sleep(): 8a1. now raises a
*note ValueError: 2ea. 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<11>,  Prev: time<8>,  Up: Módulos melhorados<12>

1.12.20.59 types
................

Add a new *note types.MappingProxyType: 68d. class: Read-only proxy of a
mapping.  (bpo-14386(1))

The new functions *note types.new_class(): 135d. and *note
types.prepare_class(): 135e. 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<11>,  Next: urllib<6>,  Prev: types<7>,  Up: Módulos melhorados<12>

1.12.20.60 unittest
...................

*note assertRaises(): 745, *note assertRaisesRegex(): 747, *note
assertWarns(): 1360, and *note assertWarnsRegex(): 1361. 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(): 1362. now returns the *note TestResult:
1363. object.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10775


File: python.info,  Node: urllib<6>,  Next: webbrowser<4>,  Prev: unittest<11>,  Up: Módulos melhorados<12>

1.12.20.61 urllib
.................

The *note Request: 11ce. class, now accepts a 'method' argument used by
*note get_method(): 1365. 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<4>,  Next: xml etree ElementTree<2>,  Prev: urllib<6>,  Up: Módulos melhorados<12>

1.12.20.62 webbrowser
.....................

The *note webbrowser: 11b. 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<3>,  Prev: webbrowser<4>,  Up: Módulos melhorados<12>

1.12.20.63 xml.etree.ElementTree
................................

The *note xml.etree.ElementTree: 12b. 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: 360. 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<3>,  Prev: xml etree ElementTree<2>,  Up: Módulos melhorados<12>

1.12.20.64 zlib
...............

New attribute *note zlib.Decompress.eof: 1369. 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: 136a. 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<11>,  Next: Mudanças a construções e API C<4>,  Prev: Módulos melhorados<12>,  Up: O que há de novo no Python 3 3

1.12.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<13>,  Prev: Otimizações<11>,  Up: O que há de novo no Python 3 3

1.12.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(): 136c.

   * PEP 393(2) added new Unicode types, macros and functions:

        * High-level API:

             * *note PyUnicode_CopyCharacters(): aa8.

             * *note PyUnicode_FindChar(): aac.

             * *note PyUnicode_GetLength(): aa6, *note
               PyUnicode_GET_LENGTH: aa7.

             * *note PyUnicode_New(): a9f.

             * *note PyUnicode_Substring(): aa9.

             * *note PyUnicode_ReadChar(): 136d, *note
               PyUnicode_WriteChar(): 136e.

        * Low-level API:

             * *note Py_UCS1: 136f, *note Py_UCS2: 1370, *note Py_UCS4:
               33b. types

             * *note PyASCIIObject: 1371. and *note
               PyCompactUnicodeObject: 1372. structures

             * *note PyUnicode_READY: 431.

             * *note PyUnicode_FromKindAndData(): 1373.

             * *note PyUnicode_AsUCS4(): 1374, *note
               PyUnicode_AsUCS4Copy(): aae.

             * *note PyUnicode_DATA: 1375, *note PyUnicode_1BYTE_DATA:
               1376, *note PyUnicode_2BYTE_DATA: 1377, *note
               PyUnicode_4BYTE_DATA: 1378.

             * *note PyUnicode_KIND: 1379. with ‘PyUnicode_Kind’ enum:
               ‘PyUnicode_WCHAR_KIND’, *note PyUnicode_1BYTE_KIND: 137a,
               *note PyUnicode_2BYTE_KIND: 137b, *note
               PyUnicode_4BYTE_KIND: 137c.

             * *note PyUnicode_READ: 137d, *note PyUnicode_READ_CHAR:
               137e, *note PyUnicode_WRITE: 137f.

             * *note PyUnicode_MAX_CHAR_VALUE: 1380.

   * *note PyArg_ParseTuple: 3be. now accepts a *note bytearray: 342.
     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<13>,  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.12.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<13>

1.12.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<13>

1.12.23.2 Deprecated Python modules, functions and methods
..........................................................

   * Passing a non-empty string to ‘object.__format__()’ is deprecated,
     and will produce a *note TypeError: 198. 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(): 12bf. and *note ftplib.FTP.dir(): 12c0.:
     use *note ftplib.FTP.mlsd(): 12be.

   * ‘platform.popen()’: use the *note subprocess: dc. module.  Check
     especially the *note Replacing Older Functions with the subprocess
     Module: 1384. section (bpo-11377(3)).

   * bpo-13374(4): The Windows bytes API has been deprecated in the
     *note os: a5. 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(): c6e. or *note time.process_time():
     c6f. 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: 1280. has been deprecated, use
          *note property: 4ad. with *note abc.abstractmethod(): 1281.
          instead.

        * *note abc.abstractclassmethod: 1282. has been deprecated, use
          *note classmethod: 488. with *note abc.abstractmethod(): 1281.
          instead.

        * *note abc.abstractstaticmethod: 1283. has been deprecated, use
          *note staticmethod: 450. with *note abc.abstractmethod():
          1281. instead.

   * *note importlib: 7b. package:

        * *note importlib.abc.SourceLoader.path_mtime(): 1385. is now
          deprecated in favour of *note
          importlib.abc.SourceLoader.path_stats(): 1386. 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<13>

1.12.23.3 Deprecated functions and types of the C API
.....................................................

The *note Py_UNICODE: 3dd. 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: 3dd. and *note
Py_UNICODE: 3dd.* types:

   * ‘PyUnicode_FromUnicode’: use *note PyUnicode_FromWideChar(): 1388.
     or *note PyUnicode_FromKindAndData(): 1373.

   * ‘PyUnicode_AS_UNICODE’, ‘PyUnicode_AsUnicode()’,
     ‘PyUnicode_AsUnicodeAndSize()’: use *note
     PyUnicode_AsWideCharString(): aaf.

   * ‘PyUnicode_AS_DATA’: use *note PyUnicode_DATA: 1375. with *note
     PyUnicode_READ: 137d. and *note PyUnicode_WRITE: 137f.

   * ‘PyUnicode_GET_SIZE’, ‘PyUnicode_GetSize()’: use *note
     PyUnicode_GET_LENGTH: aa7. or *note PyUnicode_GetLength(): aa6.

   * ‘PyUnicode_GET_DATA_SIZE’: use ‘PyUnicode_GET_LENGTH(str) *
     PyUnicode_KIND(str)’ (only work on ready strings)

   * ‘PyUnicode_AsUnicodeCopy()’: use *note PyUnicode_AsUCS4Copy(): aae.
     or *note PyUnicode_AsWideCharString(): aaf.

   * ‘PyUnicode_GetMax()’

Functions and macros manipulating Py_UNICODE* strings:

   * ‘Py_UNICODE_strlen()’: use *note PyUnicode_GetLength(): aa6. or
     *note PyUnicode_GET_LENGTH: aa7.

   * ‘Py_UNICODE_strcat()’: use *note PyUnicode_CopyCharacters(): aa8.
     or *note PyUnicode_FromFormat(): 61f.

   * ‘Py_UNICODE_strcpy()’, ‘Py_UNICODE_strncpy()’, ‘Py_UNICODE_COPY()’:
     use *note PyUnicode_CopyCharacters(): aa8. or *note
     PyUnicode_Substring(): aa9.

   * ‘Py_UNICODE_strcmp()’: use *note PyUnicode_Compare(): aaa.

   * ‘Py_UNICODE_strncmp()’: use *note PyUnicode_Tailmatch(): aab.

   * ‘Py_UNICODE_strchr()’, ‘Py_UNICODE_strrchr()’: use *note
     PyUnicode_FindChar(): aac.

   * ‘Py_UNICODE_FILL()’: use *note PyUnicode_Fill(): 1389.

   * ‘Py_UNICODE_MATCH’

Encoders:

   * ‘PyUnicode_Encode()’: use ‘PyUnicode_AsEncodedObject()’

   * ‘PyUnicode_EncodeUTF7()’

   * ‘PyUnicode_EncodeUTF8()’: use *note PyUnicode_AsUTF8(): 421. or
     *note PyUnicode_AsUTF8String(): 138a.

   * ‘PyUnicode_EncodeUTF32()’

   * ‘PyUnicode_EncodeUTF16()’

   * ‘PyUnicode_EncodeUnicodeEscape()’ use *note
     PyUnicode_AsUnicodeEscapeString(): 138b.

   * ‘PyUnicode_EncodeRawUnicodeEscape()’ use *note
     PyUnicode_AsRawUnicodeEscapeString(): 138c.

   * ‘PyUnicode_EncodeLatin1()’: use *note PyUnicode_AsLatin1String():
     138d.

   * ‘PyUnicode_EncodeASCII()’: use *note PyUnicode_AsASCIIString():
     138e.

   * ‘PyUnicode_EncodeCharmap()’

   * ‘PyUnicode_TranslateCharmap()’

   * ‘PyUnicode_EncodeMBCS()’: use *note PyUnicode_AsMBCSString(): 138f.
     or *note PyUnicode_EncodeCodePage(): 1390. (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<13>

1.12.23.4 Deprecated features
.............................

The *note array: 8. module’s ‘'u'’ format code is now deprecated and
will be removed in Python 4 together with the rest of the (*note
Py_UNICODE: 3dd.) API.


File: python.info,  Node: Porting to Python 3 3,  Prev: Descontinuados<13>,  Up: O que há de novo no Python 3 3

1.12.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.12.24.1 Porting Python code
.............................

   * Hash randomization is enabled by default.  Set the *note
     PYTHONHASHSEED: 1273. environment variable to ‘0’ to disable hash
     randomization.  See also the *note object.__hash__(): ce6. 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: f4. and *note datetime:
     34.: *note OverflowError: a77. is now raised instead of *note
     ValueError: 2ea. if a timestamp is out of range.  *note OSError:
     2bf. 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(): dfe. to clear out the cache for the
     finders to notice the new file.

   * *note ImportError: 64f. 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__(): ac7. 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(): 731. rather than call *note
     __import__(): ac7. directly.

   * *note __import__(): ac7. 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: f1b. and *note sys.path_hooks: 121a.
     now have finders on them by default, you will most likely want to
     use *note list.insert(): 1394. instead of *note list.append(): 8d1.
     to add to those lists.

   * Because ‘None’ is now inserted into *note sys.path_importer_cache:
     7ef, 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: 7ef. 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: 1267.

   * *note pkgutil: ae. has been converted to use *note importlib: 7b.
     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(): 1395. and *note pkgutil.walk_packages():
     ded. 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(): 12b4. 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(): 1396. 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(): 1397. may now raise protocol errors like
     all other ‘poplib’ methods.  Code that assumes ‘quit’ does not
     raise *note poplib.error_proto: 1398. 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: 1399,
     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: 3a. module.  It was previously replaced by the
     public attribute *note clamp: 139a.  (See bpo-8540(9).)

   * The undocumented internal helper class ‘SSLFakeFile’ has been
     removed from *note smtplib: cf, since its functionality has long
     been provided directly by *note socket.socket.makefile(): 139b.

   * Passing a negative value to *note time.sleep(): 8a1. 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: 8a4. to make the decision.

   * Code that used to work around the fact that the *note threading:
     f3. 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.12.24.2 Porting C code
........................

   * In the course of changes to the buffer API the undocumented
     ‘smalltable’ member of the *note Py_buffer: 951. 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: 1234, the *note Py_UNICODE: 3dd. 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: 139c.

     However, if you only have been using high-level functions such as
     *note PyUnicode_Concat(): 139d, *note PyUnicode_Join(): 139e. or
     *note PyUnicode_FromFormat(): 61f, your code will automatically
     take advantage of the new unicode representations.

   * *note PyImport_GetMagicNumber(): 139f. now returns ‘-1’ upon
     failure.

   * As a negative value for the 'level' argument to *note __import__():
     ac7. is no longer valid, the same now holds for *note
     PyImport_ImportModuleLevel(): 13a0.  This also means that the value
     of 'level' used by *note PyImport_ImportModuleEx(): 13a1. 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.12.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.12.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: 13a4, ‘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.13 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<12>.
* 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.13.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.13.2 PEP 389: Argparse Command Line Parsing Module
----------------------------------------------------

A new module for command line parsing, *note argparse: 7, was introduced
to overcome the limitations of *note optparse: a4. 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: 7. 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: 7. 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: 13aa. for details on the
differences from *note optparse: a4.

   ---------- 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.13.3 PEP 391: Dictionary Based Configuration for Logging
----------------------------------------------------------

The *note logging: 8b. 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: 26. 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(): 13ac. 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.13.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: 24. was inspired by the
'java.util.concurrent' package.  In that model, a running call and its
result are represented by a *note Future: 13ae. 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(): c69. for scheduling a callable and returning a *note Future:
13ae. object; *note map(): fd8. for scheduling many asynchronous calls
at a time, and *note shutdown(): ae0. for freeing resources.  The class
is a *note context manager: 1e0. and can be used in a *note with: 186.
statement to assure that resources are automatically released when
currently pending futures are done executing.

A simple of example of *note ThreadPoolExecutor: 93e. 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: 13af, an example using
threads to fetch multiple web pages in parallel.

*note Code for computing prime numbers in parallel: 13b0, an example
demonstrating *note ProcessPoolExecutor: 1d6.

   ---------- 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.13.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__: 31f. 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: b8. and *note compileall: 21. 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: 7c. module has been updated with new *note
     abstract base classes: 13b2. 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.13.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: e1. 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.13.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: 169. 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: 169. 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: 11e. module has a
new function, *note wsgiref.handlers.read_environ(): 13b5. for
transcoding CGI variables from *note os.environ: 258. 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.13.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(): 199. and *note str.format():
     828. 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(): fcb. method that
     extends the capabilities of the existing *note str.format(): 828.
     method by accepting arbitrary *note mapping: 13b7. objects.  This
     new method makes it possible to use string formatting with any of
     Python’s many dictionary-like objects such as *note defaultdict:
     13b8, *note Shelf: 1191, *note ConfigParser: 4d8, or *note dbm: 35.
     It is also useful with custom *note dict: 183. subclasses that
     normalize keys before look-up or that supply a *note __missing__():
     13b9. 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: 891. 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(): 6ee. function works by calling *note
     getattr(): dbe. and detecting whether an exception is raised.  This
     technique allows it to detect methods created dynamically by *note
     __getattr__(): 6ef. or *note __getattribute__(): dbf. 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:
     5e4. 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(): 169. of a float or complex number is now the same
     as its *note repr(): 1c1.  Previously, the *note str(): 169. form
     was shorter but that just caused confusion and is no longer needed
     now that the shortest possible *note repr(): 1c1. 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: 165. objects now have a *note release(): 13ba.
     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:
     1ab. clause is cleared, so this code which used to work with Python
     2.6, raised a *note SyntaxError: 18e. 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: 13bb. are now subclasses of tuple.
     This means that C structures like those returned by *note
     os.stat(): 26c, *note time.gmtime(): 13bc, and *note
     sys.version_info: 8a4. now work like a *note named tuple: 853. 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:
     d97. 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: 546, 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: 118. module, or on the command line.

     A *note ResourceWarning: 546. is issued at interpreter shutdown if
     the *note gc.garbage: 13bd. list isn’t empty, and if *note
     gc.DEBUG_UNCOLLECTABLE: 13be. 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: 546. is also issued when a *note file
     object: 13bf. 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: b33. objects now support 'index' and 'count' methods.
     This is part of an effort to make more objects fully implement the
     *note collections.Sequence: 13c0. *note abstract base class: 13b2.
     As a result, the language will have a more uniform API. In
     addition, *note range: b33. objects now support slicing and
     negative indices, even with values larger than *note sys.maxsize:
     13c1.  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(): 13c2. builtin function from Py2.x was
     resurrected.  It provides a concise, readable alternative to using
     an *note abstract base class: 13b2. 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.13.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: 3f. package,
*note mailbox: 8f. 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: 1e0. to
support convenient and reliable resource clean-up using a *note with:
186. statement.

* Menu:

* email: email<7>.
* elementtree::
* functools: functools<8>.
* itertools: itertools<8>.
* collections: collections<8>.
* threading: threading<10>.
* datetime and time::
* math: math<11>.
* abc: abc<3>.
* io: io<9>.
* 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<7>.
* os: os<14>.
* shutil: shutil<8>.
* sqlite3: sqlite3<12>.
* html: html<3>.
* socket: socket<12>.
* ssl: ssl<13>.
* nntp::
* сертифікати::
* imaplib: imaplib<5>.
* http.client: http client<4>.
* unittest: unittest<12>.
* random: random<5>.
* poplib: poplib<4>.
* asyncore: asyncore<2>.
* tempfile: tempfile<5>.
* inspect: inspect<11>.
* pydoc: pydoc<7>.
* dis: dis<6>.
* dbm: dbm<7>.
* ctypes: ctypes<4>.
* site: site<4>.
* sysconfig: sysconfig<4>.
* pdb: pdb<10>.
* configparser: configparser<6>.
* urllib.parse: urllib parse<6>.
* mailbox::
* turtledemo::


File: python.info,  Node: email<7>,  Next: elementtree,  Up: New Improved and Deprecated Modules

1.13.9.1 email
..............

The usability of the *note email: 3f. 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: 192. rather than *note str: 169. 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(): 13c5. and *note
     message_from_binary_file(): 13c6, and new classes *note
     BytesFeedParser: 13c7. and *note BytesParser: 13c8. allow binary
     message data to be parsed into model objects.

   * Given bytes input to the model, *note get_payload(): 13c9. 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: 13ca. 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: 13cb. 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: cf. *note SMTP: b1d. class now accepts a byte
     string for the 'msg' argument to the *note sendmail(): 104f.
     method, and a new method, *note send_message(): 1050. accepts a
     *note Message: 57a. 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<8>,  Prev: email<7>,  Up: New Improved and Deprecated Modules

1.13.9.2 elementtree
....................

The *note xml.etree.ElementTree: 12b. 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(): 13cd. which builds an
     XML document from a sequence of fragments

   * *note xml.etree.ElementTree.register_namespace(): 13ce. for
     registering a global namespace prefix

   * *note xml.etree.ElementTree.tostringlist(): 11ec. for string
     representation including all sublists

   * *note xml.etree.ElementTree.Element.extend(): 13cf. for appending a
     sequence of zero or more elements

   * *note xml.etree.ElementTree.Element.iterfind(): 13d0. searches an
     element and subelements

   * *note xml.etree.ElementTree.Element.itertext(): 13d1. creates a
     text iterator over an element and its subelements

   * *note xml.etree.ElementTree.TreeBuilder.end(): 13d2. closes the
     current element

   * *note xml.etree.ElementTree.TreeBuilder.doctype(): c81. 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<8>,  Next: itertools<8>,  Prev: elementtree,  Up: New Improved and Deprecated Modules

1.13.9.3 functools
..................

   * The *note functools: 63. module includes a new decorator for
     caching function calls.  *note functools.lru_cache(): bd8. 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(): 1153. decorator now adds a
     ‘__wrapped__’ attribute pointing to the original callable function.
     This allows wrapped functions to be introspected.  It also copies
     *note __annotations__: 13d4. if defined.  And now it also
     gracefully skips over missing attributes such as *note __doc__:
     13d5. 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(): 1138. will use existing equality
     and inequality methods to fill in the remaining methods.

     For example, supplying '__eq__' and '__lt__' will enable *note
     total_ordering(): 1138. 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(): 13d6. function converts an old-style
     comparison function to modern *note key function: ffb.:

          >>> # 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<8>,  Next: collections<8>,  Prev: functools<8>,  Up: New Improved and Deprecated Modules

1.13.9.4 itertools
..................

   * The *note itertools: 85. module has a new *note accumulate(): be6.
     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(): be6, see the *note
     examples for the random module: 13d8.

     (Contributed by Raymond Hettinger and incorporating design
     suggestions from Mark Dickinson.)


File: python.info,  Node: collections<8>,  Next: threading<10>,  Prev: itertools<8>,  Up: New Improved and Deprecated Modules

1.13.9.5 collections
....................

   * The *note collections.Counter: 128d. class now has two forms of
     in-place subtraction, the existing '-=' operator for saturating
     subtraction(1) and the new *note subtract(): 13da. 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: 7e8. class has a new method
     *note move_to_end(): 13db. 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: 7e9. class grew two new methods *note
     count(): 13dc. and *note reverse(): 13dd. that make them more
     substitutable for *note list: 24c. 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<10>,  Next: datetime and time,  Prev: collections<8>,  Up: New Improved and Deprecated Modules

1.13.9.6 threading
..................

The *note threading: f3. module has a new *note Barrier: 13df.
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: 13df. 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(): 13e0, 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: 13e1.
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<11>,  Prev: threading<10>,  Up: New Improved and Deprecated Modules

1.13.9.7 datetime and time
..........................

   * The *note datetime: 34. module has a new type *note timezone: 12bb.
     that implements the *note tzinfo: 7eb. 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: bb9. objects can now be multiplied by *note
     float: 196. and divided by *note float: 196. and *note int: 19b.
     objects.  And *note timedelta: bb9. objects can now divide one
     another.

   * The *note datetime.date.strftime(): e83. 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: 1a3.  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(): 13e3.
     function will accept any year that fits in a C int, while the *note
     time.mktime(): 13e4. and *note time.strftime(): 13e5. 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<11>,  Next: abc<3>,  Prev: datetime and time,  Up: New Improved and Deprecated Modules

1.13.9.8 math
.............

The *note math: 92. module has been updated with six new functions
inspired by the C99 standard.

The *note isfinite(): 13e7. 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(): 13e8. 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(): dc7. function computes a probability integral or
Gaussian error function(1).  The complementary error function, *note
erfc(): dc8, 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(): 13e9. 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():
13ea. 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<9>,  Prev: math<11>,  Up: New Improved and Deprecated Modules

1.13.9.9 abc
............

The *note abc: 4. module now supports *note abstractclassmethod(): 1282.
and *note abstractstaticmethod(): 1283.

These tools make it possible to define an *note abstract base class:
13b2. that requires a particular *note classmethod(): 488. or *note
staticmethod(): 450. 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<9>,  Next: reprlib,  Prev: abc<3>,  Up: New Improved and Deprecated Modules

1.13.9.10 io
............

The *note io.BytesIO: 109a. has a new method, *note getbuffer(): 13ed,
which provides functionality similar to *note memoryview(): 165.  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<9>,  Up: New Improved and Deprecated Modules

1.13.9.11 reprlib
.................

When writing a *note __repr__(): 824. 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: 24c. and
*note set: 184. handle self-reference by displaying “…” in the recursive
part of the representation string.

To help write such *note __repr__(): 824. methods, the *note reprlib:
c0. module has a new decorator, *note recursive_repr(): 13ef, 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.13.9.12 logging
.................

In addition to dictionary-based configuration described above, the *note
logging: 8b. package has many other improvements.

The logging documentation has been augmented by a *note basic tutorial:
13f1, an *note advanced tutorial: 13f2, and a *note cookbook: 13f3. of
logging recipes.  These documents are the fastest way to learn about
logging.

The *note logging.basicConfig(): be9. 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(): 828. style, or can be set to “$” for the
shell-style formatting provided by *note string.Template: 88c.  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: 13f4. directed
to *note sys.stderr: b29. 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: 13f5.  The new default handler
is stored in *note logging.lastResort: 13f6.

The use of filters has been simplified.  Instead of creating a *note
Filter: 13f7. 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.13.9.13 csv
.............

The *note csv: 2d. module now supports a new dialect, *note
unix_dialect: 13f9, 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: 13fa. has a new method, *note writeheader():
13fb. 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.13.9.14 contextlib
....................

There is a new and slightly mind-blowing tool *note ContextDecorator:
13fd. that is helpful for creating a *note context manager: 1e0. that
does double duty as a function decorator.

As a convenience, this new functionality is used by *note
contextmanager(): 13fe. 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: 186. 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(): 13fe. 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: 186. 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.13.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: 11f5, 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: 1fd. constructor now accepts *note
     float: 196. objects directly so there in no longer a need to use
     the *note from_float(): 1400. method (bpo-8257(2)).

   * Mixed type comparisons are now fully supported so that *note
     Decimal: 1fd. objects can be directly compared with *note float:
     196. and *note fractions.Fraction: 212. (bpo-2531(3) and
     bpo-8188(4)).

Similar changes were made to *note fractions.Fraction: 212. so that the
*note from_float(): 1401. and *note from_decimal(): 1402. 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: 3a. module is that the
*note Context.clamp: 139a. 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.13.9.16 ftp
.............

The *note ftplib.FTP: aec. class now supports the context management
protocol to unconditionally consume *note socket.error: 124c. 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: 513. and *note
fileinput.input(): 9f6. 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: aed. class now accepts a 'context' parameter, which
is a *note ssl.SSLContext: 354. 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.13.9.17 popen
...............

The *note os.popen(): 318. and *note subprocess.Popen(): 4b1. functions
now support *note with: 186. 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.13.9.18 select
................

The *note select: c6. module now exposes a new, constant attribute,
*note PIPE_BUF: 1406, which gives the minimum number of bytes which are
guaranteed not to block when *note select.select(): f94. 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.13.9.19 gzip and zipfile
..........................

*note gzip.GzipFile: 650. now implements the *note io.BufferedIOBase:
898. *note abstract base class: 13b2. (except for ‘truncate()’).  It
also has a *note peek(): 1408. method and supports unseekable as well as
zero-padded file objects.

The *note gzip: 6b. module also gains the *note compress(): 843. and
*note decompress(): 1409. functions for easier in-memory compression and
decompression.  Keep in mind that text needs to be encoded as *note
bytes: 192. 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: 651. 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:
140a. 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.13.9.20 tarfile
.................

The *note TarFile: 140c. class can now be used as a context manager.  In
addition, its *note add(): de2. 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: f02.  The user-supplied
filter function accepts a *note TarInfo: 140d. object and returns an
updated *note TarInfo: 140d. 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<7>,  Prev: tarfile<10>,  Up: New Improved and Deprecated Modules

1.13.9.21 hashlib
.................

The *note hashlib: 6c. 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<7>,  Next: os<14>,  Prev: hashlib<7>,  Up: New Improved and Deprecated Modules

1.13.9.22 ast
.............

The *note ast: 9. module has a wonderful a general-purpose tool for
safely evaluating expression strings using the Python literal syntax.
The *note ast.literal_eval(): e06. function serves as a secure
alternative to the builtin *note eval(): 49d. function which is easily
abused.  Python 3.2 adds *note bytes: 192. and *note set: 184. 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<14>,  Next: shutil<8>,  Prev: ast<7>,  Up: New Improved and Deprecated Modules

1.13.9.23 os
............

Different operating systems use various encodings for filenames and
environment variables.  The *note os: a5. module provides two new
functions, *note fsencode(): e43. and *note fsdecode(): e42, 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: 1411. constant
will be true.

For direct access to encoded environment variables (if available), use
the new *note os.getenvb(): 1412. function or use *note os.environb:
259. which is a bytes version of *note os.environ: 258.

(Contributed by Victor Stinner.)


File: python.info,  Node: shutil<8>,  Next: sqlite3<12>,  Prev: os<14>,  Up: New Improved and Deprecated Modules

1.13.9.24 shutil
................

The *note shutil.copytree(): c14. 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(): c45. is used by default.

(Contributed by Tarek Ziadé.)

In addition, the *note shutil: ca. module now supports *note archiving
operations: 1414. 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(): 6cf. and *note
unpack_archive(): 68b.  By default, both operate on the current
directory (which can be set by *note os.chdir(): 816.) 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<12>,  Next: html<3>,  Prev: shutil<8>,  Up: New Improved and Deprecated Modules

1.13.9.25 sqlite3
.................

The *note sqlite3: d4. 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(): a35. and
     *note sqlite3.Connection.load_extension(): 6d4. 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<12>,  Prev: sqlite3<12>,  Up: New Improved and Deprecated Modules

1.13.9.26 html
..............

A new *note html: 6f. module was introduced with only a single function,
*note escape(): 1204, 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<12>,  Next: ssl<13>,  Prev: html<3>,  Up: New Improved and Deprecated Modules

1.13.9.27 socket
................

The *note socket: d1. module has two new improvements.

   * Socket objects now have a *note detach(): 1418. 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(): 877. now supports the context
     management protocol to unconditionally consume *note socket.error:
     124c. 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<13>,  Next: nntp,  Prev: socket<12>,  Up: New Improved and Deprecated Modules

1.13.9.28 ssl
.............

The *note ssl: d5. module added a number of features to satisfy common
requirements for secure (encrypted, authenticated) internet connections:

   * A new class, *note SSLContext: 354, 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(): 73d. 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(): 73d. 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: d5.
     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(): 73d.

   * Various options have been added to the *note ssl: d5. module, such
     as *note OP_NO_SSLv2: a30. 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: 141a. (a string),
     *note ssl.OPENSSL_VERSION_INFO: 141b. (a 5-tuple), and *note
     ssl.OPENSSL_VERSION_NUMBER: 141c. (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<13>,  Up: New Improved and Deprecated Modules

1.13.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<5>,  Prev: nntp,  Up: New Improved and Deprecated Modules

1.13.9.30 сертифікати
.....................

*note http.client.HTTPSConnection: d2a, *note
urllib.request.HTTPSHandler: 141f. and *note urllib.request.urlopen():
305. 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<5>,  Next: http client<4>,  Prev: сертифікати,  Up: New Improved and Deprecated Modules

1.13.9.31 imaplib
.................

Support for explicit TLS on standard IMAP4 connections has been added
through the new *note imaplib.IMAP4.starttls: 1421. 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<12>,  Prev: imaplib<5>,  Up: New Improved and Deprecated Modules

1.13.9.32 http.client
.....................

There were a number of small API improvements in the *note http.client:
73. 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: d29. and *note HTTPSConnection: d2a. 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: d2a.

The *note request(): e9b. method on connection objects allowed an
optional 'body' argument so that a *note file object: 13bf. could be
used to supply the content of the request.  Conveniently, the 'body'
argument now also accepts an *note iterable: 1423. 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(): 1424. method that sets the host and port for HTTP
Connect tunneling.

To match the behavior of *note http.server: 76, 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<12>,  Next: random<5>,  Prev: http client<4>,  Up: New Improved and Deprecated Modules

1.13.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: 2b2. class can now be instantiated without
     arguments:

          >>> from unittest import TestCase
          >>> TestCase().assertEqual(pow(2, 3), 8)

     (Contributed by Michael Foord.)

   * The *note unittest: 10c. module has two new methods, *note
     assertWarns(): 1360. and *note assertWarnsRegex(): 1361. 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(): 1426. 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: 1427. 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(): 746. is the new name for
     ‘assertRegexpMatches()’ which was misnamed because the test uses
     *note re.search(): 1428, not *note re.match(): 1429.  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: be. 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(): 73f.
                                              
                                              
          ‘assertEquals()’                    *note assertEqual(): 741.
                                              
                                              
          ‘assertNotEquals()’                 *note assertNotEqual(): 742.
                                              
                                              
          ‘assertAlmostEquals()’              *note assertAlmostEqual(): 743.
                                              
                                              
          ‘assertNotAlmostEquals()’           *note assertNotAlmostEqual(): 744.
                                              

     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<12>,  Up: New Improved and Deprecated Modules

1.13.9.34 random
................

The integer methods in the *note random: bd. 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(): a61, *note randint(): 142b, *note choice(): 142c,
*note shuffle(): 943. and *note sample(): 942.

(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.13.9.35 poplib
................

*note POP3_SSL: b14. class now accepts a 'context' parameter, which is a
*note ssl.SSLContext: 354. 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.13.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<11>,  Prev: asyncore<2>,  Up: New Improved and Deprecated Modules

1.13.9.37 tempfile
..................

The *note tempfile: e6. module has a new context manager, *note
TemporaryDirectory: 1430. 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<11>,  Next: pydoc<7>,  Prev: tempfile<5>,  Up: New Improved and Deprecated Modules

1.13.9.38 inspect
.................

   * The *note inspect: 82. module has a new function *note
     getgeneratorstate(): 1432. 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: 82. module has a new function, *note
     getattr_static(): 6b1.  Unlike *note hasattr(): 6ee, 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<7>,  Next: dis<6>,  Prev: inspect<11>,  Up: New Improved and Deprecated Modules

1.13.9.39 pydoc
...............

The *note pydoc: ba. 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<6>,  Next: dbm<7>,  Prev: pydoc<7>,  Up: New Improved and Deprecated Modules

1.13.9.40 dis
.............

The *note dis: 3c. module gained two new functions for inspecting code,
*note code_info(): 1435. and *note show_code(): 1124.  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(): 204. 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<4>,  Prev: dis<6>,  Up: New Improved and Deprecated Modules

1.13.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<4>,  Next: site<4>,  Prev: dbm<7>,  Up: New Improved and Deprecated Modules

1.13.9.42 ctypes
................

A new type, *note ctypes.c_ssize_t: 1438. represents the C ‘ssize_t’
datatype.


File: python.info,  Node: site<4>,  Next: sysconfig<4>,  Prev: ctypes<4>,  Up: New Improved and Deprecated Modules

1.13.9.43 site
..............

The *note site: cc. module has three new functions useful for reporting
on the details of a given Python installation.

   * *note getsitepackages(): 143a. lists all global site-packages
     directories.

   * *note getuserbase(): 143b. reports on the user’s base directory
     where data can be stored.

   * *note getusersitepackages(): 143c. 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<4>,  Next: pdb<10>,  Prev: site<4>,  Up: New Improved and Deprecated Modules

1.13.9.44 sysconfig
...................

The new *note sysconfig: e1. 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(): 143e. returning values like 'linux-i586' or
     'macosx-10.6-ppc'.

   * *note get_python_version(): 143f. 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(): 33e. makes a dictionary containing installation
     paths for the current installation scheme.

   * *note get_config_vars(): 297. 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<10>,  Next: configparser<6>,  Prev: sysconfig<4>,  Up: New Improved and Deprecated Modules

1.13.9.45 pdb
.............

The *note pdb: aa. 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: 272. 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<6>,  Next: urllib parse<6>,  Prev: pdb<10>,  Up: New Improved and Deprecated Modules

1.13.9.46 configparser
......................

The *note configparser: 26. 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: 4d8.  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: 922.:

     >>> 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<6>,  Up: New Improved and Deprecated Modules

1.13.9.47 urllib.parse
......................

A number of usability improvements were made for the *note urllib.parse:
110. module.

The *note urlparse(): 35f. 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(): 1443. function now returns a *note named tuple:
853.:

     >>> 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(): 108b. 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(): 1444. 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: 1445, all
the *note urllib.parse: 110. 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.13.9.48 mailbox
.................

Thanks to a concerted effort by R. David Murray, the *note mailbox: 8f.
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: 192. because various parts of a
message may have different encodings.

The solution harnessed the *note email: 3f. package’s binary support for
parsing arbitrary email messages.  In addition, the solution required a
number of API changes.

As expected, the *note add(): 1447. method for *note mailbox.Mailbox:
1448. objects now accepts binary input.

*note StringIO: 111f. 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(): 1449.
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(): 144a. method that returns a *note bytes: 192.
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(): 144b. method, but that approach is not very useful.
Instead, it is best to extract messages from a *note Message: 144c.
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.13.9.49 turtledemo
....................

The demonstration code for the *note turtle: 107. 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: 3e1, 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<12>,  Prev: New Improved and Deprecated Modules,  Up: O que há de novo no Python 3 2

1.13.10 Multi-threading
-----------------------

   * The mechanism for serializing execution of concurrently running
     Python threads (generally known as the *note GIL: 164. 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(): b3a.
     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(): 89c. method.  (Contributed by
     Antoine Pitrou; bpo-7316(2).)

   * Similarly, *note threading.Semaphore.acquire(): 144f. 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<12>,  Next: Unicode,  Prev: Multi-threading,  Up: O que há de novo no Python 3 2

1.13.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: 184. as a *note frozenset: 7e7.
     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: ab.
     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(): dbc. and *note
     sorted(): dbb. now runs faster and uses less memory when called
     with a *note key function: ffb.  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(): 32c.
     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(): 10a0, *note rsplit(): 1451, *note splitlines(): 1452. and
     *note replace(): 4b2. methods on *note bytes: 192, *note bytearray:
     342. and *note str: 169. objects.  Likewise, the algorithm is also
     used by *note rfind(): 109f, *note rindex(): 1453, *note rsplit():
     1451. and *note rpartition(): 1454.

     (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: 12c7. has more efficient buffering (bpo-3709(14)
by Andrew Schaaf).  The *note operator.attrgetter(): 1028. function has
been sped-up (bpo-10160(15) by Christos Georgiou).  And *note
ConfigParser: 4d8. 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<12>,  Up: O que há de novo no Python 3 2

1.13.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.13.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: bfe. when it
encounters an undecodable byte sequence and an *note UnicodeEncodeError:
87c. 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: e4. 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.13.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: 1458.  In the case of
     *note itertools: 85, 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: 63. 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: be. module has an extensive section, *note Exemplos de
     expressão regular: 1459.  Likewise, the *note itertools: 85. module
     continues to be updated with new *note Receitas com itertools:
     145a.

   * The *note datetime: 34. 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.14/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.13.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.13.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.13.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(): 145e. now returns the correct value for
     large code points, and *note repr(): 1c1. 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: 145f,
     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: 184. and
     *note dict: 183. 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: 1460. without also modifying
     *note sys.path: 3e1. (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(): 1461.
     which is analogous to *note PyLong_AsLongAndOverflow(): 1462.  They
     both serve to convert Python *note int: 19b. into a native
     fixed-width type while providing detection of cases where the
     conversion won’t fit (bpo-7767(9)).

   * The *note PyUnicode_CompareWithASCIIString(): 1463. function now
     returns 'not equal' if the Python string is 'NUL' terminated.

   * There is a new function *note PyErr_NewExceptionWithDoc(): 1464.
     that is like *note PyErr_NewException(): 1465. 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.13.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: 26. 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():
          1467. and *note set(): 1468. 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(): 1468. and *note add_section(): 1469. 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: 146a. or *note
          DuplicateOptionError: 146b.  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: 342. objects can no longer be used as filenames;
     instead, they should be converted to *note bytes: 192.

   * The ‘array.tostring()’ and ‘array.fromstring()’ have been renamed
     to *note array.tobytes(): 146c. and *note array.frombytes(): 146d.
     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: 146e. 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(): 146f. 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():
     1470. and *note bytearray.maketrans(): 1471.  This change solves
     the confusion around which types were supported by the *note
     string: d8. module.  Now, *note str: 169, *note bytes: 192, and
     *note bytearray: 342. 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: 186. 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(): 1472. 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: 12b. class now raises an *note
     xml.etree.ElementTree.ParseError: 1473. when a parse fails.
     Previously it raised an *note xml.parsers.expat.ExpatError: 1474.

   * The new, longer *note str(): 169. value on floats may break
     doctests which rely on the old output format.

   * In *note subprocess.Popen: 4b1, 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: 111. and *note http.client: 73.  Such support is
     still present on the server side (in *note http.server: 76.).

     (Contributed by Antoine Pitrou, bpo-10711(5).)

   * SSL sockets in timeout mode now raise *note socket.timeout: a2b.
     when a timeout occurs, rather than a generic *note SSLError: 1475.

     (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(): 63b.
     and *note PyEval_RestoreThread(): 63c.) 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: 164. implementation,
     ‘PyEval_InitThreads()’ cannot be called before *note
     Py_Initialize(): 45d. 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.14 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<13>.
* 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.14.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: 7e8. 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: 26. 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(): 4da. agora retorna um dicionário
ordenado com os valores aparecendo na mesma ordem que os índices de
tupla subjacentes.  O módulo *note json: 86. 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.14.2 PEP 378: Especificador de formato para separador de milhares
-------------------------------------------------------------------

The built-in *note format(): 199. function and the *note str.format():
828. 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: 19b, *note float: 196, *note complex:
197. and *note decimal.Decimal: 1fd.

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.14.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(): 19b. 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(): 199. 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(): 1470. and *note
     bytearray.maketrans(): 1471.  This change solves the confusion
     around which types were supported by the *note string: d8. module.
     Now, *note str: 169, *note bytes: 192, and *note bytearray: 342.
     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: 186. 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<13>,  Prev: Outras mudanças na linguagem<13>,  Up: O que há de novo no Python 3 1

1.14.4 New, Improved, and Deprecated Modules
--------------------------------------------

   * Added a *note collections.Counter: 128d. 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: ff. 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: 650. and *note bz2.BZ2File: a5c. 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: 3a. module now supports methods for creating a
     decimal object from a binary *note float: 196.  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: 85. module grew two new functions.  The *note
     itertools.combinations_with_replacement(): 147d. function is one of
     four for generating combinatorics including permutations and
     Cartesian products.  The *note itertools.compress(): 147e. function
     mimics its namesake from APL. Also, the existing *note
     itertools.count(): 147f. function now has an optional 'step'
     argument and can accept any type of counting sequence including
     *note fractions.Fraction: 212. and *note decimal.Decimal: 1fd.:

          >>> [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(): 4da. 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(): 59c, *note re.subn(): 59d. and *note
     re.split(): 59b. functions now accept a flags parameter.

     (Contributed by Gregory Smith.)

   * The *note logging: 8b. module now implements a simple *note
     logging.NullHandler: 1480. 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: c3. 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: aa. module can now access and display source code
     loaded via *note zipimport: 138. (or any other conformant PEP
     302(6) loader).

     (Contributed by Alexander Belopolsky; bpo-4201(7).)

   * *note functools.partial: 216. objects can now be pickled.

     (Suggested by Antoine Pitrou and Jesse Noller.  Implemented by Jack
     Diederich; bpo-5228(8).)

   * Add *note pydoc: ba. help topics for symbols so that ‘help('@')’
     works as expected in the interactive environment.

     (Contributed by David Laban; bpo-4739(9).)

   * The *note unittest: 10c. 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: 186. statement:

          def test_division_by_zero(self):
              with self.assertRaises(ZeroDivisionError):
                  x / 0

     In addition, several new assertion methods were added including
     *note assertSetEqual(): 1481, *note assertDictEqual(): 1482,
     ‘assertDictContainsSubset()’, *note assertListEqual(): 1483, *note
     assertTupleEqual(): 1484, *note assertSequenceEqual(): 1485, *note
     assertRaisesRegexp(): 747, *note assertIsNone(): 1486, and *note
     assertIsNotNone(): 1487.

     (Contributed by Benjamin Peterson and Antoine Pitrou.)

   * The *note io: 83. module has three new constants for the *note
     seek(): 1488. method: *note SEEK_SET: 1489, *note SEEK_CUR: 148a,
     and *note SEEK_END: 148b.

   * The *note sys.version_info: 8a4. 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: 78. modules now support IPv6.

     (Contributed by Derek Morr; bpo-1655(11) and bpo-1664(12).)

   * The *note pickle: ab. 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: 7b. was added.  It provides a
     complete, portable, pure Python reference implementation of the
     *note import: 7ed. statement and its counterpart, the *note
     __import__(): ac7. 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<13>,  Next: IDLE<2>,  Prev: New Improved and Deprecated Modules<2>,  Up: O que há de novo no Python 3 1

1.14.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: 86. 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: 169, not with *note bytes: 192.
     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<13>,  Up: O que há de novo no Python 3 1

1.14.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.14.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: 148f. 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(): 1490. function now handles a
     negative 'pylong' by raising *note OverflowError: a77. instead of
     *note TypeError: 198.

     (Contributed by Mark Dickinson and Lisandro Dalcrin; bpo-5175(2).)

   * Deprecated ‘PyNumber_Int()’.  Use *note PyNumber_Long(): c51.
     instead.

     (Contributed by Mark Dickinson; bpo-4910(3).)

   * Added a new *note PyOS_string_to_double(): 1491. function to
     replace the deprecated functions ‘PyOS_ascii_strtod()’ and
     ‘PyOS_ascii_atof()’.

     (Contributed by Mark Dickinson; bpo-5914(4).)

   * Added *note PyCapsule: 146e. 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.14.8 Porting to Python 3.1
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções de bugs que podem exigir alterações em 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.15 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.15.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.15.1.1 print é uma função
...........................

A instrução ‘print’ foi substituída por uma função *note print(): 116b,
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(): 116b. 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(): 116b, 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.15.1.2 Visualizações e iteradores em vez de listas
....................................................

Algumas APIs conhecidas não retornam mais listas:

   * Os métodos *note dict.keys(): 9c6, *note dict.items(): 9c8. e *note
     dict.values(): 9c7. de *note dict: 183. 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(): 19f. e *note filter(): a5a. 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(): 19f. em *note list(): 24c, 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:
     1499.), ou reescrever o código para que ele não precise de uma
     lista.  Particularmente complicado é *note map(): 19f. invocado
     para os efeitos colaterais da função; a transformação correta é
     usar um laço *note for: 347. regular (já que criar uma lista seria
     apenas desperdício).

     Se as sequências de entrada não tiverem o mesmo comprimento, *note
     map(): 19f. irá parar no término da mais curta das sequências.
     Para compatibilidade total com *note map(): 19f. do Python 2.x,
     também envolva as sequências em *note itertools.zip_longest():
     149a, por exemplo, ‘map(func, *sequences)’ se torna ‘list(map(func,
     itertools.zip_longest(*sequences)))’.

   * *note range(): b33. 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(): 1a0. 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.15.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: 198. 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(): dbb. e *note list.sort(): dbc. 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__(): 149c. para
     classificação, *note __eq__(): ce5. com *note __hash__(): ce6. 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.15.1.4 Inteiros
.................

   * PEP 237(1): Essencialmente, ‘long’ foi renomeado para *note int:
     19b.  Ou seja, há apenas um tipo integral embutido, chamado *note
     int: 19b.; 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: 13c1.
     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(): 1c1. 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(): 169. 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.15.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: 169, o
     tipo usado para armazenar dados é *note bytes: 192.  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: 198, 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: bfe. 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:
     169. 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: 169. e *note bytes: 192. não podem ser
     misturados, você deve sempre converter explicitamente entre eles.
     Use *note str.encode(): ac8. para ir de *note str: 169. para *note
     bytes: 192, e *note bytes.decode(): ac9. para ir de *note bytes:
     192. para *note str: 169.  Você também pode usar ‘bytes(s,
     encoding=...)’ e ‘str(b, encoding=...)’, respectivamente.

   * Assim como *note str: 169, o tipo *note bytes: 192. é imutável.  Há
     um tipo 'mutável' separado para armazenar dados binários em buffer,
     *note bytearray: 342.  Quase todas as APIs que aceitam *note bytes:
     192. também aceitam *note bytearray: 342.  A API mutável é baseada
     em *note collections.MutableSequence: 4b9.

   * 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:
     169. em vez disso.  Os tipos *note str: 169. e *note bytes: 192.
     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: 169.

   * Arquivos abertos como arquivos texto (ainda o modo padrão para
     *note open(): 314.) 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: 1c.

   * Os valores iniciais de *note sys.stdin: 754, *note sys.stdout: cc0.
     e *note sys.stderr: b29. agora são arquivos texto somente unicode
     (ou seja, são instâncias de *note io.TextIOBase: 899.).  Para ler e
     gravar dados de bytes com esses fluxos, você precisa usar o
     atributo *note io.TextIOBase.buffer: 149f. 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(): 314. e
     muitas funções no módulo *note os: a5.) que aceitam nomes de
     arquivo aceitam objetos *note bytes: 192. assim como strings, e
     algumas APIs têm uma maneira de pedir um valor de retorno *note
     bytes: 192.  Assim, *note os.listdir(): 12f6. retorna uma lista de
     instâncias *note bytes: 192. se o argumento for uma instância *note
     bytes: 192, e *note os.getcwdb(): c76. retorna o diretório de
     trabalho atual como uma instância *note bytes: 192.  Observe que
     quando *note os.listdir(): 12f6. 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: 45f.

   * Algumas APIs de sistema como *note os.environ: 258. e *note
     sys.argv: 1460. 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(): 1c1. 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: 83. e use *note io.StringIO: 111f. ou
     *note io.BytesIO: 109a. para texto e dados, respectivamente.

   * Veja também o guia *note Unicode: 14a0, 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.15.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.15.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 *note __annotations__: 455.  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: 14a3.  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(): 14a4.

   * Literais de bytes são introduzidos com um ‘b’ ou ‘B’ no início, e
     há uma nova função embutida correspondente, *note bytes(): 192.

   ---------- 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.15.2.2 Sintaxe alterada
.........................

   * PEP 3109(1) e PEP 3134(2): nova sintaxe da instrução *note raise:
     7f8.: ‘raise [EXPR [from EXPR]]’.  Veja abaixo.

   * ‘as’ e *note with: 186. 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: 1ab. '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: c72.)

   * 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(): 24c. 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.15.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(): 1c1.).

   * Removido ‘<>’ (use ‘!=’).

   * Removida palavra reservada: *note exec(): 49c. 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(): 49c. 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: 14a7. 'módulo' *note import: 7ed. ‘*’ é
     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: 7ed. 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.15.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: 14a9. devem ser consultadas para descrições mais
longas.

   * *note PEP 343; The ‘with’ statement: 14aa.  A instrução *note with:
     186. agora é um recurso padrão e não precisa mais ser importada de
     *note __future__: 0.  Confira também *note Writing Context
     Managers: 14ab. e *note The contextlib module: 14ac.

   * *note PEP 366; Explicit Relative Imports From a Main Module: 14ad.
     Isso aumenta a utilidade da opção *note -m: 23b. quando o módulo
     referenciado reside em um pacote.

   * *note PEP 370; Per-user site-packages Directory: 14ae.

   * *note PEP 371; The multiprocessing Package: 14af.

   * *note PEP 3101; Advanced String Formatting: 14b0.  Nota: a
     descrição da versão 2.6 menciona o método *note format(): 199. para
     strings de 8 bits e Unicode.  No 3.0, apenas o tipo *note str: 169.
     (strings de texto com suporte a Unicode) tem suporte a esse método;
     o tipo *note bytes: 192. 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: 14b1.  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: 14b2.  A sintaxe *note
     except: 1ab. '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: 14b3.  A notação de literal de
     string ‘b"..."’ (e suas variantes como ‘b'...'’, ‘b"""..."""’ e
     ‘br"..."’) agora produz um literal do tipo *note bytes: 192.

   * *note PEP 3116; New I/O Library: 14b4.  O módulo *note io: 83.
     agora é a maneira padrão de fazer E/S de arquivo.  A função
     embutida *note open(): 314. agora é um apelido para *note
     io.open(): 735. e tem argumentos nomeados adicionais 'encoding',
     'errors', 'newline' e 'closefd'.  Observe também que um argumento
     'mode' inválido agora levanta *note ValueError: 2ea, não *note
     IOError: 1249.  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: 14b5.  A antiga função
     embutida ‘buffer()’ agora realmente se foi; a nova função embutida
     *note memoryview(): 165. fornece funcionalidade (principalmente)
     semelhante.

   * *note PEP 3119; Abstract Base Classes: 14b6.  O módulo *note abc:
     4. e as ABCs definidas no módulo *note collections: 1e. desempenham
     um papel um pouco mais proeminente na linguagem agora, e tipos
     embutidos de coleção como *note dict: 183. e *note list: 24c. estão
     em conformidade com as ABCs *note collections.MutableMapping: 12a8.
     e *note collections.MutableSequence: 4b9, respectivamente.

   * *note PEP 3127; Integer Literal Support and Syntax: 14b7.  Conforme
     mencionado acima, a nova notação de literal octal é a única
     suportada, e literais binários foram adicionados.

   * *note PEP 3129; Class Decorators: 14b8.

   * *note PEP 3141; A Type Hierarchy for Numbers: 14b9.  O módulo *note
     numbers: a2. é outro novo uso de ABCs, definindo a “torre numérica”
     do Python.  Observe também o novo módulo *note fractions: 61. que
     implementa *note numbers.Rational: 14ba.


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.15.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: 6c.), 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:

     Antigo nome                 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: ab. 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: ab. / ‘cPickle’
     recebeu esse tratamento.  O módulo *note profile: b4. está na lista
     para 3.1.  O módulo ‘StringIO’ foi transformado em uma classe no
     módulo *note io: 83.

   * 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: 35. (‘anydbm’, ‘dbhash’, ‘dbm’, ‘dumbdbm’, ‘gdbm’,
          ‘whichdb’).

        * *note html: 6f. (‘HTMLParser’, ‘htmlentitydefs’).

        * *note http: 72. (‘httplib’, ‘BaseHTTPServer’, ‘CGIHTTPServer’,
          ‘SimpleHTTPServer’, ‘Cookie’, ‘cookielib’).

        * *note tkinter: f6. (todos os módulos relacionados a ‘Tkinter’,
          exceto *note turtle: 107.).  O público-alvo de *note turtle:
          107. não se importa muito com *note tkinter: f6.  Observe
          também que, a partir do Python 2.6, a funcionalidade de *note
          turtle: 107. foi bastante aprimorada.

        * *note urllib: 10e. (‘urllib’, ‘urllib2’, ‘urlparse’,
          ‘robotparse’).

        * *note xmlrpc: 133. (‘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(): 184.

   * Limpeza do módulo *note sys: df.: removidos ‘sys.exitfunc()’,
     ‘sys.exc_clear()’, ‘sys.exc_type’, ‘sys.exc_value’,
     ‘sys.exc_traceback’.  (Observe que *note sys.last_type: 6db. etc.
     permanecem.)

   * Limpeza do tipo *note array.array: 4b8.: os métodos ‘read()’ e
     ‘write()’ foram removidos; use *note fromfile(): 14bc. e *note
     tofile(): 14bd. 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: a3. module: removed
     ‘sequenceIncludes()’ and ‘isCallable()’.

   * Limpeza do módulo ‘thread’: ‘acquire_lock()’ e ‘release_lock()’
     foram removidos; use *note acquire(): 89c. e *note release(): 14be.
     em vez disso.

   * Cleanup of the *note random: bd. 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: e6. module.

   * O módulo *note tokenize: 101. foi alterado para funcionar com
     bytes.  O ponto de entrada principal agora é *note
     tokenize.tokenize(): 6f5, em vez de generate_tokens.

   * ‘string.letters’ and its friends (‘string.lowercase’ and
     ‘string.uppercase’) are gone.  Use *note string.ascii_letters:
     14bf. 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: 13. (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: 13, 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.15.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: 7cc.  Esta é a raiz da
     hierarquia de exceções.  Isso não é novo como recomendação, mas o
     'requisito' para herdar de *note BaseException: 7cc. é 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: bc3.;
     *note BaseException: 7cc. deve ser usado apenas como uma classe
     base para exceções que devem ser manipuladas apenas no nível
     superior, como *note SystemExit: f30. ou *note KeyboardInterrupt:
     bbb.  O idioma recomendado para manipular todas as exceções, exceto
     para esta última categoria, é usar *note except: 1ab. *note
     Exception: bc3.

   * ‘StandardError’ was removed.

   * Exceptions no longer behave as sequences.  Use the *note args: 782.
     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__: 14c2. (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: 1ab. é 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: 1ab. ou *note finally: 1b0.  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__: 14c3. 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__: 14c4. 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__: 14c3. 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__: 14c2.  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(): 88f.
     (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.15.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.15.7.1 Operadores e métodos especiais
.......................................

   * ‘!=’ agora retorna o oposto de ‘==’, a menos que ‘==’ retorne *note
     NotImplemented: 1a2.

   * 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__(): 14c7. or
     *note __delitem__(): 14c8, when used as an assignment or deletion
     target, respectively).

   * PEP 3114(1): o método padrão *note next(): 9ce. foi renomeado para
     *note __next__(): 14c9.

   * The ‘__oct__()’ and ‘__hex__()’ special methods are removed – *note
     oct(): 14ca. and *note hex(): 14cb. use *note __index__(): 19e. 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__: 14cc, *note __code__: 596, *note __defaults__: 14cd,
     *note __dict__: 14ce, *note __doc__: 13d5, *note __globals__: 14cf,
     *note __name__: 14d0, respectivamente.

   * ‘__nonzero__()’ agora é *note __bool__(): 14d1.

   ---------- 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.15.7.2 Funções embutidas
..........................

   * PEP 3135(1): Nova função *note super(): 1a6.  Agora você pode
     invocar *note super(): 1a6. sem argumentos e (presumindo que isso
     esteja em um método de instância regular definido dentro de uma
     instrução *note class: 14d3.) a classe e instância corretas serão
     automaticamente escolhidas.  Com argumentos, o comportamento de
     *note super(): 1a6. não é alterado.

   * PEP 3111(2): ‘raw_input()’ was renamed to *note input(): 14d4.
     That is, the new *note input(): 14d4. function reads a line from
     *note sys.stdin: 754. and returns it with the trailing newline
     stripped.  It raises *note EOFError: 14d5. if the input is
     terminated prematurely.  To get the old behavior of *note input():
     14d4, use ‘eval(input())’.

   * Uma nova função embutido *note next(): 9ce. foi adicionada para
     chamar o método *note __next__(): 14c9. em um objeto.

   * A estratégia de arredondamento da função *note round(): 14d6. 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(): 14d7.

   * Removed: ‘apply()’.  Instead of ‘apply(f, args)’ use ‘f(*args)’.

   * Removed *note callable(): 13c2.  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(): 314.  There are now
     several different kinds of streams that open can return in the
     *note io: 83. module.

   * Removed ‘reduce()’.  Use *note functools.reduce(): 219. if you
     really need it; however, 99 percent of the time an explicit *note
     for: 347. loop is more readable.

   * Removed ‘reload()’.  Use ‘imp.reload()’.

   * Removed.  ‘dict.has_key()’ – use the *note in: 348. 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.15.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: 14d9. 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(): 3d8, funciona como
     *note PyImport_ImportModule(): 3d9, 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.15.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.15.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: 14dc.


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.16 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: 1fd.
Existem algumas adições úteis à biblioteca padrão, como um módulo *note
unittest: 10c. bastante aprimorado, o módulo *note argparse: 7. para
analisar as opções da linha de comando, classes convenientes *note
OrderedDict: 7e8. e *note Counter: 128d. no módulo *note collections:
1e. 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.16.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: 14e2. 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.16.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: 1a3. 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: 1a3. 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: 1a3. 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:
1a3. executando Python com a opção *note -Wdefault: abb. (forma curta:
*note -Wd: abb.) ou definindo a variável de ambiente *note
PYTHONWARNINGS: d97. 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.16.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:
     186.

   * Uma nova versão da biblioteca *note io: 83, 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: 14e5.

   * O novo especificador de formato ‘","’ descrito na *note PEP 378;
     Especificador de formato para separador de milhares: 14e6.

   * O objeto *note memoryview: 165.

   * Um pequeno subconjunto do módulo *note importlib: 7b, *note
     descrito sob: 14e7.

   * O *note repr(): 1c1. 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():
     14d6. também está agora corretamente arredondada.

   * O tipo *note PyCapsule: 146e, usado para fornecer uma API C para
     módulos de extensão.

   * A função de API C *note PyLong_AsLongAndOverflow(): 1462.

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.16.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: 7e8. no
módulo *note collections: 1e.

A API *note OrderedDict: 7e8. 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(): 14e9. 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: 7e8. com um dicionário regular ignora a
ordem de inserção e apenas compara as chaves e valores.

Como funciona a *note OrderedDict: 7e8.?  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: 26. 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(): bca. para *note collections.namedtuple():
     4da. 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: f37. do módulo *note
     json: 86. 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.16.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: 8a,
que pode usar diferentes separadores (“,” na América do Norte, “.” na
Europa) e diferentes tamanhos de agrupamento, mas *note locale: 8a. é
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(): 828.  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: 8a, 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.16.6 PEP 389: O módulo argparse para analisar linhas de comando
-----------------------------------------------------------------

O módulo *note argparse: 7. para analisar argumentos de linha de comando
foi adicionado como um substituto mais poderoso para o módulo *note
optparse: a4.

Isso significa que Python agora oferece suporte a três módulos
diferentes para analisar argumentos de linha de comando: *note getopt:
65, *note optparse: a4. e *note argparse: 7.  O módulo *note getopt: 65.
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: a4. 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: 7. consistente com a interface de *note
optparse: a4. 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: 7. ao invés de *note optparse: a4.

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: a4, 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: 7. tem uma validação muito mais sofisticada que *note
optparse: a4.; 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: 30a, que abrirá arquivos automaticamente para você e entende
que ‘'-'’ significa entrada ou saída padrão.

Ver também
..........

Documentação do *note argparse: 7.

     A página de documentação do módulo argparse.

*note Migrando código optparse para argparse: 13aa.

     Parte da documentação do Python, descrevendo como converter o
     código que usa *note optparse: a4.

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.16.7 PEP 391: Configuração baseada em dicionário para logging
---------------------------------------------------------------

O módulo *note logging: 8b. é 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: 8b. também suporta uma função *note
fileConfig(): d3c. 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(): 13ac. 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: 14ed.

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: 8b, todas implementadas
por Vinay Sajip, são:

   * A classe *note SysLogHandler: 861. 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: 14ee. para
     UDP ou *note socket.SOCK_STREAM: 14ef. para TCP. O protocolo padrão
     permanece UDP.

   * As instâncias *note Logger: d3a. ganharam um método *note
     getChild(): 14f0. 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: 14f1. ganhou um método *note
     isEnabledFor(): 14f2. 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.16.8 PEP 3106: Views de dicionário
------------------------------------

Os métodos de dicionário *note keys(): 9c6, *note values(): 9c7. e *note
items(): 9c8. 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(): 9c6, *note
values(): 9c7. e *note items(): 9c8. 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(): 9c6,
*note values(): 9c7. e *note items(): 9c8.

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.16.9 PEP 3137: O objeto memoryview
------------------------------------

O objeto *note memoryview: 165. fornece uma visão do conteúdo da memória
de outro objeto que corresponde à interface do tipo *note bytes: 192.

     >>> 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: 165. 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.16.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: 186. 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(): 169. em floats e números complexos; os
     construtores *note float: 196. e *note complex: 197.; formatação
     numérica; serializar e desserializar floats e números complexos
     usando os módulos *note marshal: 91, *note pickle: ab. e *note
     json: 86.; análise de float e literais imaginários no código
     Python; e a conversão *note Decimal: 1fd.-para-float.

     Relacionado a isso, o *note repr(): 1c1. 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:
     14f6, 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(): 828. agora tem suporte à numeração
     automática dos campos de substituição.  Isso torna o uso de *note
     str.format(): 828. 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(): 828, 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(): 199, 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__():
     826. agora aciona um *note PendingDeprecationWarning: abc. se for
     passado uma string de formato, porque o método ‘__format__()’ para
     *note object: c72. 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(): 19b. 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: 7ed. 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(): 14f7. do tipo *note bytearray: 342.
     agora aceita ‘None’ como seu primeiro argumento.  (Correção de
     Georg Brandl; bpo-4759(15).)

   * When using *note @classmethod: 488. and *note @staticmethod: 450.
     to wrap methods as class or static methods, the wrapper object now
     exposes the wrapped function as their *note __func__: 14f8.
     attribute.  (Contributed by Amaury Forgeot d’Arc, after a
     suggestion by 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: 5e4. 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: 1249. 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(): 4ab. 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<14>.

   ---------- 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<14>,  Up: Outras mudanças na linguagem<14>

1.16.10.1 Alterações no interpretador
.....................................

Uma nova variável de ambiente, *note PYTHONWARNINGS: d97, permite
controlar os avisos.  Deve ser definido como uma string contendo
configurações de aviso, equivalentes àquelas usadas com a opção *note
-W: abb, 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: 75. 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<14>,  Prev: Alterações no interpretador,  Up: Outras mudanças na linguagem<14>

1.16.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: 186, procurando os métodos *note
     __enter__(): 7d9. e *note __exit__(): 14fc.  (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)

     (Contribuição de 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: 342.) 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: ab. 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.16.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: 10. *note Bdb: 2d4.
     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: 11. agora oferece suporte à API de buffer,
     então ele pode ser usado com instâncias *note memoryview: 165. 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: a5c. do módulo *note bz2: 14. 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: 128d. no módulo *note
     collections: 1e. é útil para contabilizar dados.  As instâncias
     *note Counter: 128d. se comportam principalmente como dicionários,
     mas retornam zero para chaves ausentes em vez de levantar uma
     exceção *note KeyError: 5dd.:

          >>> 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: 128d. adicionais.  *note
     most_common(): 14fe. retorna os N elementos mais comuns e suas
     contagens.  *note elements(): 14ff. retorna um iterador sobre os
     elementos contidos, repetindo cada elemento tantas vezes quanto sua
     contagem.  *note subtract(): 13da. 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: 7e8. é descrita na seção anterior
     *note PEP 372; Adicionando um dicionário ordenado a coleções: 14e5.

     Novo método: O tipo de dados *note deque: 7e9. agora tem um método
     *note count(): 13dc. que retorna o número de elementos contidos
     igual ao argumento fornecido 'x', e um *note reverse(): 13dd.
     método que inverte os elementos do deque no local.  *note deque:
     7e9. também expõe seu comprimento máximo como o atributo somente
     leitura *note maxlen: 1500.  (Ambos os recursos adicionados por
     Raymond Hettinger.)

     A classe *note namedtuple: 4da. 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: abd. agora
     retorna *note NotImplemented: 1a2. 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: 26. 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: 186, foi descontinuada porque a instrução ‘with’ agora
     oferece suporte a múltiplos contextos gerentes.

   * O módulo *note cookielib: 74. 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(): d59. do módulo *note copy: 29. agora
     copiará corretamente os métodos de instância vinculados.
     (Implementado por Robert Collins; bpo-1515(11).)

   * O módulo *note ctypes: 2e. 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: bb9. do módulo *note
     datetime: 34. ganhou um método *note total_seconds(): 1501. 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: 1fd. ganhou um método de
     classe *note from_float(): 1400. 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: 1fd. 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: 1fd. 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: 12ab. agora aceitam
     números inteiros, bem como instâncias *note Decimal: 1fd.; as
     únicas exceções são os métodos *note canonical(): 1502. e *note
     is_canonical(): 1503.  (Patch de Juan José Conti; bpo-7633(20).)

     Ao usar instâncias *note Decimal: 1fd. com o método *note format():
     828. 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: 12a4. 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: 3b. 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: 1504. do módulo *note
     doctest: 3e. 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: 57a. do módulo *note email: 3f. 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: 212. agora aceita uma única instância
     float ou *note Decimal: 1fd, 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: 198.  Isso corrige um
     descuido, fazendo com que *note Fraction: 212. corresponda aos
     outros tipos numéricos.

   * Nova classe: *note FTP_TLS: aed. no módulo *note ftplib: 62.
     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(): 1505. 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(): 1138. no módulo
     *note functools: 63. pega uma classe que define um método *note
     __eq__(): ce5. e um de *note __lt__(): 149c. , *note __le__():
     1506, *note __gt__(): 1507. ou *note __ge__(): 1508. 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(): 13d6. 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(): dbb, *note min(): 1101. e *note max():
     1102, 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(): 1509. do módulo *note gc: 64.
     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: 650. do módulo *note gzip: 6b. 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: 898. ABC, então você pode envolvê-lo com *note
     io.BufferedReader: 140a. 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: 6b. agora consumirá esses bytes
     finais.  (Correção de Tadek Pietraszek e Brian Curtin;
     bpo-2846(36).)

   * Novo atributo: o módulo *note hashlib: 6c. 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: 12ca. usada pelo módulo *note
     httplib: 72. 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: d29. e *note HTTPSConnection: d2a.
     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: 78. agora oferece suporte a endereços IPv6.
     (Contribuição de Derek Morr; bpo-1655(40).)

   * Nova função: *note getcallargs(): 10b4. do módulo *note inspect:
     82. 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: 83. 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: 899.
     agora tem um atributo *note errors: 150a. 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: 150b. agora levanta uma exceção *note
     OSError: 2bf. quando passa um descritor de arquivo inválido.
     (Implementado por Benjamin Peterson; bpo-4991(42).)  O método *note
     truncate(): 150c. 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():
     150d, 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(): 147f. agora tem um argumento
     'step' que permite incrementar por valores diferentes de 1.  *note
     count(): 147f. agora também permite argumentos nomeados e o uso de
     valores não inteiros, como floats ou *note Decimal: 1fd.
     instâncias.  (Implementação de Raymond Hettinger; bpo-5032(44).)

     *note itertools.combinations(): 150d. e *note itertools.product():
     150e. anteriormente levantavam *note ValueError: 2ea. 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: 86. 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:
     7e8, *note json.load(): ea6. 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: 652. do módulo *note mailbox: 8f. 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: 92. ganhou *note erf(): dc7. e
     *note erfc(): dc8. para a função de erro e a função de erro
     complementar, *note expm1(): 13e8. que calcula ‘e**x - 1’ com mais
     precisão do que usar *note exp(): 150f. e subtrair 1, *note
     gamma(): 13e9. para a função Gamma, e *note lgamma(): 13ea. 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: 98. 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: 1161, 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: a5. envolve as seguintes chamadas
     de sistema POSIX: *note getresgid(): 1510. e *note getresuid():
     1511, que retornam os GIDs e UIDs reais, efetivos e salvos ; *note
     setresgid(): 1512. e *note setresuid(): 1513, que definem GIDs e
     UIDs reais, efetivos e salvos para novos valores; *note
     initgroups(): 1514, 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(): 4af. agora reinicializa a trava de
     importação no processo filho; isso corrige problemas no Solaris
     quando *note fork(): 4af. é chamado de um thread.  (Correção de
     Zsolt Cserna; bpo-7242(56).)

   * No módulo *note os.path: a6, as funções *note normpath(): 1515. e
     *note abspath(): 1516. 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(): 1515. corrigido por Matt Giuca
     em bpo-5827(57); *note abspath(): 1516. corrigido por Ezio Melotti
     em bpo-3426(58).)

   * O módulo *note pydoc: ba. 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: be. *note split(): 59b, *note sub(): 59c. e
     *note subn(): 59d. 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(): 49e. no módulo *note runpy: c3.
     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: c3.
     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: ca, *note make_archive(): 6cf.
     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(): c43. e *note copytree(): c14. de *note
     shutil: ca. agora levantam uma exceção *note SpecialFileError:
     1517. 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: cb. 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: cc, três novas funções
     retornam vários caminhos específicos do site e do usuário.  *note
     getsitepackages(): 143a. retorna uma lista contendo todos os
     diretórios globais de pacotes de sites, *note
     getusersitepackages(): 143c. retorna o caminho do diretório de
     pacotes de sites do usuário e *note getuserbase(): 143b. retorna o
     valor da variável de ambiente *note USER_BASE: 1518, 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: cc. agora reporta exceções que ocorrem quando
     o módulo *note sitecustomize: cd. é importado, e não irá mais
     capturar e engolir a exceção *note KeyboardInterrupt: bbb.
     (Correção de Victor Stinner; bpo-3137(64).)

   * A função *note create_connection(): 877. 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(): 1519. e *note recvfrom_into(): 151a.
     agora escreverão em objetos que oferecem suporte à API de buffer,
     mais utilmente objetos *note bytearray: 342. e *note memoryview:
     165.  (Implementação de Antoine Pitrou; bpo-8104(66).)

   * A classe *note TCPServer: 151b. do módulo *note SocketServer: d2.
     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: 151c. 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(): 151d. será chamado e *note
     handle_request(): 151e. retornará.  (Contribuição de Kristján Valur
     Jónsson; bpo-6192(67) e bpo-6267(68).)

   * Módulo atualizado: o módulo *note sqlite3: d4. 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(): 6d4. para carregar uma biblioteca
     compartilhada específica.  (Atualização de Gerhard Häring.)

   * Os objetos *note SSLSocket: add. do módulo *note ssl: d5. 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(): 73d. 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: 141a. (uma string), *note
     ssl.OPENSSL_VERSION_INFO: 141b. (uma tupla de 5) e *note
     ssl.OPENSSL_VERSION_NUMBER: 141c. (um número inteiro).  (Adição de
     Antoine Pitrou; bpo-8321(75).)

   * O módulo *note struct: db. 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: 151f.  (Alteração de Mark
     Dickinson; bpo-1523(76).)  A função *note pack(): 1472. também
     tentará usar *note __index__(): 19e. para converter e empacotar
     números não inteiros antes de tentar o método *note __int__(): 19d.
     ou relatar um erro.  (Alteração de Mark Dickinson; bpo-8300(77).)

   * Nova função: o *note check_output(): 11b8. do módulo *note
     subprocess: dc. 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: 1520. 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: dc. agora tentará novamente suas
     chamadas internas do sistema ao receber um sinal *note EINTR: f7b.
     (Relato por várias pessoas; patch final por Gregory P. Smith em
     bpo-1068268(78).)

   * Nova função: *note is_declared_global(): 1521. no módulo *note
     symtable: de. 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: e2. 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: 8a4. agora é uma tupla nomeada, com
     atributos chamados ‘major’, ‘minor’, ‘micro’, ‘releaselevel’ e
     ‘serial’.  (Contribuição de Ross Light; bpo-4285(80).)

     *note sys.getwindowsversion(): ed7. 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: e4. 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: e4. agora oferece suporte à filtragem de objetos
     *note TarInfo: 140d. sendo adicionados a um arquivo tar.  Quando
     você chama *note add(): de2, você pode fornecer um argumento
     'filter' opcional que é chamável.  O chamável 'filter' receberá o
     *note TarInfo: 140d. 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:
     140c. 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(): 1522. da classe *note threading.Event: 1354.
     agora retorna o sinalizador interno na saída.  Isso significa que o
     método geralmente retornará verdadeiro porque *note wait(): 1522.
     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:
     10b. 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(): f2e. do módulo *note urlparse: 110.
     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: 110. 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: 7ea. no módulo *note weakref:
     11a. é 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: 12b. 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: 134. e *note SimpleXMLRPCServer: 135, 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: 1523, 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: 8c8. do módulo *note zipfile: 137. 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: 137. 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(): 1524. e ‘readline()’ agora funciona
     corretamente.  (Contribuição de Nir Aides; bpo-7610(95).)

     A função *note is_zipfile(): 1525. 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(): 2cb. 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:
     8c8.  (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.16.11.1 Novo módulo: importlib
................................

Python 3.1 inclui o pacote *note importlib: 7b, uma reimplementação da
lógica subjacente à instrução *note import: 7ed. do Python.  *note
importlib: 7b. é ú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: 7b. completo, mas em vez disso possui um pequeno
subconjunto que contém uma única função, *note import_module(): 731.

‘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(): 731. 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: 7b. 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.16.11.2 Novo módulo: sysconfig
................................

O módulo *note sysconfig: e1. foi retirado do pacote Distutils,
tornando-se um novo módulo de nível independente.  *note sysconfig: e1.
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(): 174. retorna variáveis do Makefile do
     Python e do arquivo ‘pyconfig.h’.

   * *note get_config_vars(): 297. retorna um dicionário contendo todas
     as variáveis de configuração.

   * *note get_path(): 1528. 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(): 32b. 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: e1. para mais detalhes e
para uma lista completa de funções.

O pacote Distutils e *note sysconfig: e1. 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.16.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: ff.  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: ff. 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.16.11.4 Módulo atualizado: unittest
.....................................

O módulo *note unittest: 10c. 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: 10c. para mais
detalhes.  (Desenvolvido em bpo-6001(4).)

A função *note main(): 11d9. oferece suporte a algumas outras novas
opções:

   * *note -b: 152c. 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: 152d. 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(): 152e. que pode ser
     usado para marcar testes que devem ter o manuseio de control-C
     desabilitado.

   * *note -f: 152f. 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: 11da. para
pular um teste (bpo-1034053(6)).

As mensagens de erro para falhas *note assertEqual(): 741, *note
assertTrue(): 73f. e *note assertFalse(): 740. agora fornecem mais
informações.  Se você definir o atributo *note longMessage: 1530. de
suas classes *note TestCase: 2b2. 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(): 745. 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(): c37. e *note tearDownModule(): 1531.  As classes podem
ter métodos *note setUpClass(): c38. e *note tearDownClass(): 1532. 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(): c68. e *note doCleanups(): 1533. foram
adicionados.  *note addCleanup(): c68. permite adicionar funções de
limpeza que serão chamadas incondicionalmente (após *note setUp(): 1534.
se *note setUp(): 1534. falhar, caso contrário, após *note tearDown():
1535.).  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: 10c.

   * *note assertIsNone(): 1486. e *note assertIsNotNone(): 1487. pegam
     uma expressão e verificam se o resultado é ou não ‘None’.

   * *note assertIs(): 1536. e *note assertIsNot(): 1537. 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(): 1538. e *note assertNotIsInstance():
     1539. 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(): 153a, *note assertGreaterEqual(): 153b,
     *note assertLess(): 153c, e *note assertLessEqual(): 153d. comparam
     duas quantidades.

   * *note assertMultiLineEqual(): 153e. 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(): 741.

   * *note assertRegexpMatches(): 746. e *note assertNotRegexpMatches():
     748. 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(): 747. 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(): 153f. e *note assertNotIn(): 1540. testa se
     'primeiro' está ou não em 'segundo'.

   * *note assertItemsEqual(): 1426. testa se duas sequências fornecidas
     contêm os mesmos elementos.

   * *note assertSetEqual(): 1481. 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(): 1483. e *note
     assertTupleEqual(): 1484. 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(): 741.  De forma
     mais geral, *note assertSequenceEqual(): 1485. compara duas
     sequências e pode opcionalmente verificar se ambas as sequências
     são de um tipo específico.

   * *note assertDictEqual(): 1482. compara dois dicionários e relata as
     diferenças; agora é usado por padrão quando você compara dois
     dicionários usando *note assertEqual(): 741.
     ‘assertDictContainsSubset()’ verifica se todos os pares chave/valor
     em 'first' são encontrados em 'second'.

   * *note assertAlmostEqual(): 743. e *note assertNotAlmostEqual():
     744. 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(): 1541. respeita corretamente o atributo
     *note suiteClass: 1542. do *note TestLoader: 58c.  (Correção de
     Mark Roddy; bpo-6866(13).)

   * Um novo gancho permite estender o método *note assertEqual(): 741.
     para lidar com novos tipos de dados.  O método *note
     addTypeEqualityFunc(): 1543. 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(): 11d9. agora recebe um argumento ‘exit’ opcional.
Se for falso, *note main(): 11d9. não chama *note sys.exit(): 276,
permitindo que *note main(): 11d9. seja usado a partir do interpretador
interativo.  (Contribuição de J. Pablo Fernández; bpo-3379(14).)

*note TestResult: 1363. tem novos métodos *note startTestRun(): 1544. e
*note stopTestRun(): 1545. 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.16.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: c3e. 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: 1473, 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(): c7f.
     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: 1548. 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(): 13ce.  No modo XML, você pode usar o
     parâmetro true/false 'xml_declaration' para suprimir a declaração
     XML.

   * Novo método *note Element: 360.: *note extend(): 13cf. 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: 360.: *note iter(): 1549. 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: 360.: *note itertext(): 13d1. 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: 64d.  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.16.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(): b6e. 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(): 154b. 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(): 1464. cria uma nova
     classe de exceção, assim como a *note PyErr_NewException(): 1465.
     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(): 983. 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(): 1462. e *note
     PyLong_AsLongLongAndOverflow(): 1461. 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():
     1491. 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: ‘Py_ISALNUM’, ‘Py_ISALPHA’, ‘Py_ISDIGIT’,
     ‘Py_ISLOWER’, ‘Py_ISSPACE’, ‘Py_ISUPPER’, ‘Py_ISXDIGIT’,
     ‘Py_TOLOWER’ e ‘Py_TOUPPER’.  Todas essas funções são análogas às
     macros padrão do C para classificação de caracteres, mas ignoram a
     configuração de localidade atual, pois em vários lugares o Python
     precisa analisar caracteres de forma independente da localidade.
     (Adicionado por 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(): 10a7. 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(): 4af. pode falhar porque o filho é criado com apenas um
     único thread em execução, a thread executando *note os.fork(): 4af.
     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(): 4af, e também limpará quaisquer travas criadas usando o
     módulo *note threading: f3.  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(): 45c. 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: 766. 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: 2e. 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: 12c. 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.16.12.1 Capsules
..................

Python 3.1 adiciona um novo tipo de dados C, *note PyCapsule: 146e, 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:
d1. é exposta como ‘socket.CAPI’, e *note unicodedata: 10b. 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(): 154e.
detectaria o nome incompatível e retornaria falso.  Consulte *note
Fornecendo uma API C para um módulo de extensão: 154f. 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: abc, 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.16.12.2 Alterações específicas da porta: Windows
..................................................

   * O módulo *note msvcrt: 97. agora contém algumas constantes do
     arquivo de cabeçalho ‘crtassem.h’: *note CRT_ASSEMBLY_VERSION:
     1551, *note VC_ASSEMBLY_PUBLICKEYTOKEN: 1552. e *note
     LIBRARIES_ASSEMBLY_NAME_PREFIX: 1553.  (Contribuição de David
     Cournapeau; bpo-4365(1).)

   * O módulo *note _winreg: 11c. para acessar o registro agora
     implementa as funções *note CreateKeyEx(): 1554. e *note
     DeleteKeyEx(): 1555, versões estendidas de funções suportadas
     anteriormente que recebem vários argumentos extras.  Os *note
     DisableReflectionKey(): 1556, *note EnableReflectionKey(): 1557. e
     *note QueryReflectionKey(): 1558. 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(): 1559. agora funciona no Windows.  O valor
     do sinal pode ser as constantes *note CTRL_C_EVENT: 155a, *note
     CTRL_BREAK_EVENT: 155b. 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(): 12f6. agora falha corretamente para um
     caminho vazio.  (Correção de Hirokazu Yamamoto; bpo-5913(5).)

   * O módulo *note mimetypes: 93. 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.16.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.16.12.4 Alterações específicas da porta: FreeBSD
..................................................

   * Constante ‘SO_SETFIB’ do FreeBSD 7.1, usada com os métodos *note
     getsockopt(): ec4. e *note setsockopt(): ec5. do *note socket():
     f95. para selecionar uma tabela de roteamento alternativa, agora
     está disponível no módulo *note socket: d1.  (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.16.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(): 314.
     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: 155f.
     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.16.14 Portando para Python 2.7
--------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções de bugs que podem exigir alterações em seu código:

   * A função *note range(): b33. processa seus argumentos de forma mais
     consistente; agora ele chamará *note __int__(): 19d. 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(): 199. 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(): 169.  (Alteração de Eric Smith; bpo-5920(2).)

   * Por causa de uma otimização para a instrução *note with: 186, os
     métodos especiais *note __enter__(): 7d9. e *note __exit__(): 14fc.
     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: c72.) 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__(): 14fc. 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: 5e4. como seria de esperar.  Correção de Benjamin
     Peterson; bpo-7604(5).)

Na biblioteca padrão:

   * Operações com instâncias *note datetime: 4dc. que resultaram em um
     ano fora do intervalo suportado nem sempre levantam *note
     OverflowError: a77.  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: 1fd. com o método *note format():
     199. 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: 12a4. 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: 12b. 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: 111f. 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: e2. 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: e4. 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(): f2e. do módulo *note urlparse: 110.
     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: 198. em vez de disparar uma *note DeprecationWarning:
     1a3. (bpo-5080(14)).

   * Use a nova função *note PyOS_string_to_double(): 1491. 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.16.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.16.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.16.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.16.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(): 12c5. 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(): 728. 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: d5. do Python 3.4 foi portada.
     Isso significa que *note ssl: d5. agora provê suporte a indicar de
     nome de servidor, configurações TLS1.x, acesso ao armazenamento de
     certificados da plataforma, a classe *note SSLContext: 354. 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(): 73b. 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: 1565. e *note
     hashlib.algorithms_available: 1566. 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.16.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:

* Inicializando pip por padrão::
* 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: Inicializando pip por padrão,  Next: Mudanças na documentação<2>,  Up: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7

1.16.15.5 Inicializando pip por padrão
......................................

O novo módulo *note ensurepip: 59. (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: 10ec, 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.

No Windows e Mac OS X, os instaladores do CPython agora instalam o ‘pip’
junto com o próprio CPython (os usuários podem optar por não instalá-lo
durante o processo de instalação).  Os usuários do Windows precisarão
optar pelas modificações automáticas do ‘PATH’ para ter o ‘pip’
disponível na linha de comando por padrão, caso contrário ele ainda
poderá ser acessado através do iniciador Python para Windows como ‘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: Inicializando pip por padrão,  Up: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7

1.16.15.6 Mudanças na documentação
..................................

Como parte desta mudança, as seções *note Instalando módulos Python:
10ee. e distributing-index da documentação foram completamente
redesenhadas como breves documentos de introdução e FAQ. A maior parte
da documentação de empacotamento agora foi transferida para o Python
Packaging Authority, mantido no Guia de Usuário para Empacotamento de
Python(1) e na documentação dos projetos individuais.

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: 10ef. e *note Construindo extensões C e C ++ com
setuptools: 10f0.

Ver também
..........

PEP 453(2) – Inicialização explícita do pip em instalações Python

     PEP escrita por Donald Stufft e Nick Coghlan, implementada por
     Donald Stufft, Nick Coghlan, Martin von Löwis e 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.16.15.7 PEP 476: Habilitando verificação de certificado por padrão para clientes http stdlib
..............................................................................................

PEP 476(1) atualizou *note httplib: 72. e módulos que o utilizam, como
*note urllib2: 111. e *note xmlrpclib: 134, 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.16.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.16.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.14/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.16.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.16.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.17 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: 98. and *note json: 86. 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::
* 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.17.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(): 219. 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(): 14a4. 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.17.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.17.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.17.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.17.3 PEP 343: The ‘with’ statement
------------------------------------

The previous version, Python 2.5, added the ‘*note with: 186.’ 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: 186.’ 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: 186.’ 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__(): 7d9. and *note __exit__(): 14fc. methods).

The object’s *note __enter__(): 7d9. 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__(): 14fc. 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: 186.’ 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: 347. loop raised an
exception part-way through the block.

     Nota: In this case, 'f' is the same object created by *note open():
     314, because *note __enter__(): 7d9. returns 'self'.

The *note threading: f3. module’s locks and condition variables also
support the ‘*note with: 186.’ 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(): 1578. function in the *note decimal: 3a.
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.17.3.1 Writing Context Managers
.................................

Under the hood, the ‘*note with: 186.’ 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__(): 7d9. and *note __exit__(): 14fc. methods.

   * The context manager’s *note __enter__(): 7d9. 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__(): 14fc. method is called with three arguments, the
     exception details (‘type, value, traceback’, the same values
     returned by *note sys.exc_info(): 88f, 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: 186.’ statement will never realize
     anything went wrong.

   * If 'BLOCK' didn’t raise an exception, the *note __exit__(): 14fc.
     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__(): 7d9. 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: 186.’ 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__(): 14fc. 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: 1af. 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.17.3.2 The contextlib module
..............................

The *note contextlib: 27. module provides some functions and a decorator
that are useful when writing objects for use with the ‘*note with: 186.’
statement.

The decorator is called *note contextmanager(): 13fe, 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: bb8. will be executed as the *note __enter__(): 7d9. method, and
the value yielded will be the method’s return value that will get bound
to the variable in the ‘*note with: 186.’ statement’s ‘as’ clause, if
any.  The code after the ‘yield’ will be executed in the *note
__exit__(): 14fc. 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: 27. 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: 186.’ 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(): 157b. 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: 186.’ statement, which can be
     helpful in learning how the statement works.

The documentation for the *note contextlib: 27. 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.17.4 PEP 366: Explicit Relative Imports From a Main Module
------------------------------------------------------------

Python’s *note -m: 23b. 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__: 321. attribute.
When this attribute is present, relative imports will be relative to the
value of this attribute instead of the *note __name__: 157d. attribute.

PEP 302-style importers can then set *note __package__: 321. as
necessary.  The *note runpy: c3. module that implements the *note -m:
23b. 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.17.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: 157f. 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: 1580. option or setting the *note PYTHONNOUSERSITE: 1581.
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.17.6 PEP 371: The ‘multiprocessing’ Package
---------------------------------------------

The new *note multiprocessing: 98. 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: 98. module started out as an exact emulation
of the *note threading: f3. 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: 251, which is passed a callable object and a collection
of arguments.  The *note start(): 1583. method sets the callable running
in a subprocess, after which you can call the *note is_alive(): 1584.
method to check whether the subprocess is still running and the *note
join(): 1585. 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: 1586. is used to communicate the result of the factorial.
The *note Queue: 1586. 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: 1586, 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: 1161. and *note Manager: 24f, provide
higher-level interfaces.  *note Pool: 1161. will create a fixed number
of worker processes, and requests can then be distributed to the workers
by calling *note apply(): 1587. or *note apply_async(): 1588. to add a
single request, and *note map(): 12e1. or *note map_async(): 12e2. to
add a number of requests.  The following code uses a *note Pool: 1161.
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: 24f. 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(): 183. 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: 24f.’s methods also include *note Lock(): 1589, *note RLock():
158a, and *note Semaphore(): 158b. 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: 98. 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.17.7 PEP 3101: Advanced String Formatting
-------------------------------------------

In Python 3.0, the ‘%’ operator is supplemented by a more powerful
string formatting method, *note format(): 199.  Support for the *note
str.format(): 828. 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: 158d.; 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__(): 826. 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(): 199. builtin that will format a single
value.  It calls the type’s *note __format__(): 826. method with the
provided specifier:

     >>> format(75.6564, '.2f')
     '75.66'

Ver também
..........

*note Sintaxe das strings de formato: 158d.

     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.17.8 PEP 3105: ‘print’ As a Function
--------------------------------------

The ‘print’ statement becomes the *note print(): 116b. function in
Python 3.0.  Making *note print(): 116b. 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.17.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: 198. and
*note ValueError: 2ea. exceptions, but this code actually does something
different: it will catch *note TypeError: 198. and bind the resulting
exception object to the local name ‘"ValueError"’.  The *note
ValueError: 2ea. 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.17.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: 192. constructor.  For future compatibility, Python 2.6
adds *note bytes: 192. as a synonym for the *note str: 169. type, and it
also supports the ‘b''’ notation.

The 2.6 *note str: 169. differs from 3.0’s *note bytes: 192. 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(): 169. of the list.

The primary use of *note bytes: 192. 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:
192. or *note str: 169. 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: 98a.
Python 2.6 uses ‘#define’ to support using the names *note
PyBytesObject(): 98a, *note PyBytes_Check(): 1591, *note
PyBytes_FromStringAndSize(): 1592, and all the other functions and
macros used with strings.

Instances of the *note bytes: 192. type are immutable just as strings
are.  A new *note bytearray: 342. 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(): 1593./*note endswith(): 1594, *note find(): 1595./*note
rfind(): 1596, and some of the methods of lists, such as *note append():
1597, *note pop(): 1598, and *note reverse(): 1599.

     >>> 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():
159a, *note PyByteArray_FromStringAndSize(): 159b, 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.17.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: 83. 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: 83. module:

   * *note RawIOBase: 12cc. defines raw I/O operations: *note read():
     1012, *note readinto(): 1013, *note write(): 159d, *note seek():
     1488, *note tell(): 159e, *note truncate(): 150c, and *note
     close(): 500.  Most of the methods of this class will often map to
     a single system call.  There are also *note readable(): 159f, *note
     writable(): 15a0, and *note seekable(): 15a1. 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: 898. 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: 12cc, and adds a *note raw: 15a2. attribute
     holding the underlying raw object.

     There are five concrete classes implementing this ABC. *note
     BufferedWriter: 15a3. and *note BufferedReader: 140a. are for
     objects that support write-only or read-only usage that have a
     *note seek(): 1488. method for random access.  *note
     BufferedRandom: 15a4. objects support read and write access upon
     the same underlying stream, and *note BufferedRWPair: 15a5. is for
     objects such as TTYs that have both read and write operations
     acting upon unconnected streams of data.  The *note BytesIO: 109a.
     class supports reading, writing, and seeking over an in-memory
     buffer.

   * *note TextIOBase: 899.: Provides functions for reading and writing
     strings (remember, strings will be Unicode in Python 3.0), and
     supporting *note universal newlines: f29.  *note TextIOBase: 899.
     defines the *note readline(): bf. method and supports iteration
     upon objects.

     There are two concrete implementations.  *note TextIOWrapper: 9b4.
     wraps a buffered I/O object, supporting all of the methods for text
     I/O and adding a *note buffer: 149f. attribute for access to the
     underlying object.  *note StringIO: 111f. simply buffers everything
     in memory without ever writing anything to disk.

     (In Python 2.6, *note io.StringIO: 111f. 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: 83. 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: 83. 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.17.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: be. 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(): 62e. specifies
constraints upon the memory returned.  Some examples are:

   * *note PyBUF_WRITABLE: 15a7. indicates that the memory must be
     writable.

   * ‘PyBUF_LOCK’ requests a read-only or exclusive lock on the memory.

   * *note PyBUF_C_CONTIGUOUS: 15a8. and *note PyBUF_F_CONTIGUOUS: 15a9.
     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(): 3be, ‘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.17.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: 1111, special handling of
this metaclass by the *note isinstance(): 2ac. and *note issubclass():
9ba. 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: 1e. module includes a number of
different ABCs that represent these distinctions.  ‘Iterable’ indicates
that a class defines *note __iter__(): e5d, and ‘Container’ means the
class defines a *note __contains__(): 15ab. 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(): 1284. method:

     import collections

     class Storage:
         ...

     collections.MutableMapping.register(Storage)

For classes that you write, deriving from the ABC is probably clearer.
The *note register(): 1284. 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: 1281. 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.17.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(): 14ca. builtin still returns numbers prefixed with a
leading zero, and a new *note bin(): 14a4. builtin returns the binary
representation for a number:

     >>> oct(42)
     '052'
     >>> future_builtins.oct(42)
     '0o52'
     >>> bin(173)
     '0b10101101'

The *note int(): 19b. 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.17.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.17.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: a2. 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:
61. module.  (It’s called ‘Fraction’ instead of ‘Rational’ to avoid a
name clash with *note numbers.Rational: 14ba.)

‘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(): 14d6, *note math.floor(): 15af, *note math.ceil(): 15b0, and
adds a new one, *note math.trunc(): 15b1, that’s been backported to
Python 2.6.  *note math.trunc(): 15b1. 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.17.16.1 The ‘fractions’ Module
................................

To fill out the hierarchy of numeric types, the *note fractions: 61.
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: 61. 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,  Prev: PEP 3141 A Type Hierarchy for Numbers,  Up: O que há de novo no Python 2 6

1.17.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(): 6ee. 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(): 6ee. seria, portanto, ‘False’.  Esta
     lógica não deve ser aplicada a *note KeyboardInterrupt: bbb. e
     *note SystemExit: f30, entretanto; O Python 2.6 não descartará mais
     tais exceções quando *note hasattr(): 6ee. 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: de9. exception will be raised.
     (Backported in bpo-2719(5).)

   * Tuples now have *note index(): 15b4. and *note count(): 15b5.
     methods matching the list type’s *note index(): 15b6. and *note
     count(): 15b7. 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(): 196.
     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: 92. 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(): 14cb. 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(): 197. 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: 198. 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(): 15b8.
     (Fixed by Nick Coghlan and Amaury Forgeot d’Arc; bpo-2235(10).)

   * The *note GeneratorExit: 15b9. exception now subclasses *note
     BaseException: 7cc. instead of *note Exception: bc3.  This means
     that an exception handler that does ‘except Exception:’ will not
     inadvertently catch *note GeneratorExit: 15b9.  (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(): 4ab. built-in function now accepts keyword
     arguments as well as positional parameters.  (Contributed by Thomas
     Wouters; bpo-1444529(13).)

   * The *note complex(): 197. 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(): 839. 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(): 839. 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__: 15ba, and ‘im_func’ is also available as *note
     __func__: 14f8.  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(): 468. function
     inside a *note class: 14d3. 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<15>.
* 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<15>,  Next: Alterações no interpretador<2>,  Up: Outras mudanças na linguagem<15>

1.17.17.1 Otimizações
.....................

   * The *note warnings: 118. 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: db. 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__(): 14fc. 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<15>,  Up: Outras mudanças na linguagem<15>

1.17.17.2 Alterações no interpretador
.....................................

Two command-line options have been reserved for use by other Python
implementations.  The ‘-J’ switch has been reserved for use by Jython
for Jython-specific options, such as switches that are passed to the
underlying JVM. *note -X: 16f. 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: 15be. switch to the Python interpreter, or by
setting the *note PYTHONDONTWRITEBYTECODE: 15bf. 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: 1200. 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,  Next: Deprecations and Removals,  Prev: Outras mudanças na linguagem<15>,  Up: O que há de novo no Python 2 6

1.17.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: 110. module.  The
     versions still available in the ‘cgi’ module will trigger *note
     PendingDeprecationWarning: abc. messages in 2.6 (bpo-600362(4)).

   * The *note cmath: 19. 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: 19. 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: 19. 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: 1e. 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: 1e. 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: 75. module’s *note Morsel: df2. objects now
     support an *note httponly: 15c1. 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: 2f. 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: 32. 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: 34. 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: 3a. 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: 3b. 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: aec. 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: 63. module.  In Python 3.0, the builtin has been dropped
     and ‘reduce()’ is only available from *note functools: 63.;
     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: 66. 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(): 599. 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: 6d. 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: 6d. is now implemented to only use less-than
     comparison, instead of the less-than-or-equal comparison it
     previously used.  This makes *note heapq: 6d.’s usage of a type
     match the *note list.sort(): dbc. method.  (Contributed by Raymond
     Hettinger.)

   * An optional ‘timeout’ parameter, specifying a timeout measured in
     seconds, was added to the *note httplib.HTTPConnection: d29. and
     *note HTTPSConnection: d2a. class constructors.  (Added by Facundo
     Batista.)

   * Most of the *note inspect: 82. 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: 85. 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: 85. 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: 8b. 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: 92. module:

        * *note isinf(): 15c2. and *note isnan(): 15c3. determine
          whether a given float is a (positive or negative) infinity or
          a NaN (Not a Number), respectively.

        * *note copysign(): 15c4. 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(): b37. computes the factorial of a number.
          (Contributed by Raymond Hettinger; bpo-2138(12).)

        * *note fsum(): 15c5. 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(): 15c6, *note asinh(): 15c7. and *note atanh():
          15c8. compute the inverse hyperbolic functions.

        * *note log1p(): 15c9. 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: 14b9.

   * The *note math: 92. 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: 2ea. 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: 2ea.  Where Annex ‘F’ of the C99 standard recommends
     signaling ‘overflow’, Python will raise *note OverflowError: a77.
     (See bpo-711019(14) and bpo-1640(15).)

     (Contributed by Christian Heimes and Mark Dickinson.)

   * *note mmap: 513. 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: a3. 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: a5. 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:
     d6. 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: dc.
     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(): 25b. in addition
     to clearing the object’s keys.  (Contributed by Martin Horcicka;
     bpo-1181(17).)

   * The *note os.walk(): 6c5. 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: a6. 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(): 15ca. 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: aa. 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(): 15cb. function, used to begin
     debugging a traceback, will now use the traceback returned by *note
     sys.exc_info(): 88f. if no traceback is supplied.  (Contributed by
     Facundo Batista; bpo-1106316(23).)

   * The *note pickletools: ac. 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: ae. 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: bd. 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: be.
     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: c2. module’s ‘Completer.complete()’ method
     will now ignore exceptions triggered while evaluating a name.
     (Fixed by Lorenz Quack; bpo-2250(30).)

   * The *note sched: c4. module’s ‘scheduler’ instances now have a
     read-only *note queue: bb. 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: c6. 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(): c14. 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: ca. 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: cb.
     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():
     15cc, 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: cf. 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: d1. 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: d2. module now support
     calling a *note handle_timeout(): 151d. method after a span of
     inactivity specified by the server’s *note timeout: 151c.
     attribute.  (Contributed by Michael Pomraning.)  The *note
     serve_forever(): 133b. 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: d4. 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: db. module now supports the C99 _Bool type, using
     the format character ‘'?'’.  (Contributed by David Remahl.)

   * The *note Popen: 4b1. objects provided by the *note subprocess: dc.
     module now have *note terminate(): 15cd, *note kill(): 15ce, and
     *note send_signal(): 15cf. methods.  On Windows, ‘send_signal()’
     only supports the *note SIGTERM: 15d0. signal, and all these
     methods are aliases for the Win32 API function
     ‘TerminateProcess()’.  (Contributed by Christian Heimes.)

   * A new variable in the *note sys: df. 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:
     15be. switch to the Python interpreter, or by setting the *note
     PYTHONDONTWRITEBYTECODE: 15bf. 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(): 15d1. and *note
     sys.gettrace(): 15d2.  (Contributed by Georg Brandl; bpo-1648(45).)

   * The *note tarfile: e4. 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: 6e2. 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: ea. module gained a number of context
     managers useful for writing tests.  *note EnvironmentVarGuard():
     15d3. 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: f2. 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: f3. 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: f3. 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: f5. 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: 107. 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: 305. function and the ‘urllib.ftpwrapper’ class
     constructor, as well as the *note urllib2.urlopen: 305. 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: 10b. module
     has been updated to version 5.1.0.  (Updated by Martin von Löwis;
     bpo-3811(54).)

   * The *note warnings: 118. 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:
     118. 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: 135. and *note
     DocXMLRPCServer: 135. 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: 134. module no longer automatically converts
     *note datetime.date: 1f9. and *note datetime.time: 1fa. to the
     *note xmlrpclib.DateTime: 15d4. type; the conversion semantics were
     not necessarily correct for all applications.  Code using
     ‘xmlrpclib’ should convert ‘date’ and *note time: 1fa. 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: 137. 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(): 314, ‘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: 137. 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

1.17.18.1 The ‘ast’ module
..........................

The *note ast: 9. 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(): 49d. 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

1.17.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(): 1c1.  In Python 3.0,
     *note repr(): 1c1. will return a Unicode string, while *note
     ascii(): 15d7. 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(): 14ca. 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

1.17.18.3 The ‘json’ module: JavaScript Object Notation
.......................................................

The new *note json: 86. 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: 86. 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: 86. (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

1.17.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: b0. 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

1.17.18.5 ctypes Enhancements
.............................

Thomas Heller continued to maintain and enhance the *note ctypes: 2e.
module.

*note ctypes: 2e. now supports a ‘c_bool’ datatype that represents the
C99 ‘bool’ type.  (Contributed by David Remahl; bpo-1649190(1).)

The *note ctypes: 2e. 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: 2e. 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: 2e. 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

1.17.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: d5, 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: d1. 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: d5. 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,  Up: O que há de novo no Python 2 6

1.17.19 Deprecations and Removals
---------------------------------

   * String exceptions have been removed.  Attempting to use them raises
     a *note TypeError: 198.

   * Changes to the *note Exception: bc3. 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: 782. 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: 3f. package instead.

   * The ‘md5’ module has been deprecated; use the *note hashlib: 6c.
     module instead.

   * The ‘posixfile’ module has been deprecated; *note fcntl.lockf():
     15dd. provides better locking.

   * The ‘popen2’ module has been deprecated; use the *note subprocess:
     dc. module.

   * The ‘rgbimg’ module has been removed.

   * The ‘sets’ module has been deprecated; it’s better to use the
     built-in *note set: 184. and *note frozenset: 7e7. types.

   * The ‘sha’ module has been deprecated; use the *note hashlib: 6c.
     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.17.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: 15a6, adds *note PyObject_GetBuffer(): 62e. and *note
     PyBuffer_Release(): 62f, 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: 64f.  A new API
     function, *note PyImport_ImportModuleNoBlock(): 3d8, 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: 64f. is raised.  (Contributed by
     Christian Heimes.)

   * Several functions return information about the platform’s
     floating-point support.  *note PyFloat_GetMax(): 15df. returns the
     maximum representable floating-point value, and *note
     PyFloat_GetMin(): 15e0. returns the minimum positive value.  *note
     PyFloat_GetInfo(): 15e1. 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():
     15e2. will now accept arguments that have a ‘__complex__()’ method.
     In particular, the functions in the *note cmath: 19. 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: 15e3. and *note
     PyModule_AddIntMacro(): 15e4.  (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(): 97a, ‘Py_Type()’ became *note Py_TYPE(): 3c6, and
     ‘Py_Refcnt()’ became *note Py_REFCNT(): 2ce.  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:

* Port-Specific Changes; Windows: Port-Specific Changes Windows.
* Port-Specific Changes; Mac OS X: Port-Specific Changes Mac OS X.
* 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: Port-Specific Changes Windows,  Next: Port-Specific Changes Mac OS X,  Up: Mudanças a construções e API C<9>

1.17.20.1 Port-Specific Changes: 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: 97. module now supports both the normal and wide
     char variants of the console I/O API. The *note getwch(): 15e6.
     function reads a keypress and returns a Unicode value, as does the
     *note getwche(): 15e7. function.  The *note putwch(): 15e8.
     function takes a Unicode character and writes it to the console.
     (Contributed by Christian Heimes.)

   * *note os.path.expandvars(): 15ca. 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: d1. module’s socket objects now have an *note
     ioctl(): ec2. method that provides a limited interface to the
     ‘WSAIoctl()’ system interface.

   * The *note _winreg: 11c. module now has a function, *note
     ExpandEnvironmentStrings(): 15e9, 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: 186. statements.  (Contributed by
     Christian Heimes.)

     *note _winreg: 11c. also has better support for x64 systems,
     exposing the *note DisableReflectionKey(): 1556, *note
     EnableReflectionKey(): 1557, and *note QueryReflectionKey(): 1558.
     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: Port-Specific Changes Mac OS X,  Next: Port-Specific Changes IRIX,  Prev: Port-Specific Changes Windows,  Up: Mudanças a construções e API C<9>

1.17.20.2 Port-Specific Changes: 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: Port-Specific Changes Mac OS X,  Up: Mudanças a construções e API C<9>

1.17.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.17.21 Porting to Python 2.6
-----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções de bugs que podem exigir alterações em 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: 198.

   * The ‘__init__()’ method of *note collections.deque: 7e9. 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__(): 8b4. 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:
     198.  This will affect ‘__init__()’ methods that end up calling the
     corresponding method on *note object: c72. (perhaps through using
     *note super(): 1a6.).  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__(): ac7. 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: 64f.

   * C API: the *note PyImport_Import(): 15ed. and *note
     PyImport_ImportModule(): 3d9. 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():
     15b8.

   * The *note socket: d1. module exception *note socket.error: 124c.
     now inherits from *note IOError: 1249.  Previously it wasn’t a
     subclass of ‘StandardError’ but now it is, through *note IOError:
     1249.  (Implemented by Gregory P. Smith; bpo-1706815(2).)

   * The *note xmlrpclib: 134. module no longer automatically converts
     *note datetime.date: 1f9. and *note datetime.time: 1fa. to the
     *note xmlrpclib.DateTime: 15d4. type; the conversion semantics were
     not necessarily correct for all applications.  Code using
     ‘xmlrpclib’ should convert ‘date’ and *note time: 1fa. instances.
     (bpo-1330538(3))

   * (3.0-warning mode) The *note Exception: bc3. class now warns when
     accessed using slicing or index access; having *note Exception:
     bc3. 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.

For applications that embed 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.17.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.18 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: 2e. 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: 15f3.  The new ‘*note with: 186.’ statement will make
writing cleanup code easier (section *note PEP 343; The ‘with’
statement: 15f4.).  Values can now be passed into generators (section
*note PEP 342; New Generator Features: 15f5.).  Imports are now visible
as either absolute or relative (section *note PEP 328; Absolute and
Relative Imports: 15f6.).  Some corner cases of exception handling are
handled better (section *note PEP 341; Unified try/except/finally:
15f7.).  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.18.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.18.2 PEP 309: Partial Function Application
--------------------------------------------

The *note functools: 63. 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: 63. 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.18.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.18.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: d8. 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: d8.
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: 7ed.’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: d8. 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.18.5 PEP 338: Executing Modules as Scripts
--------------------------------------------

The *note -m: 23b. 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: c3.

The *note runpy: c3. 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: 138. module.  This means you can
add a .zip archive’s path to ‘sys.path’ and then use the *note -m: 23b.
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.18.6 PEP 341: Unified try/except/finally
------------------------------------------

Until Python 2.5, the *note try: 8ed. statement came in two flavours.
You could use a *note finally: 1b0. block to ensure that code is always
executed, or one or more *note except: 1ab. 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: 1ab. blocks and a *note
finally: 1b0. 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: 1ab. 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.18.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: bb8. 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(): 9ce. method, picking up
after the ‘yield’ statement.

In Python 2.3, *note yield: bb8. 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: bb8.
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:
bb8.-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: bb8.
expression returns the specified 'value'.  If the regular *note next():
9ce. method is called, the ‘yield’ returns *note None: 87a.

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: bb8. will usually return *note None: 87a, 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: bb8. expression where the generator’s execution is
     paused.

   * ‘close()’ raises a new *note GeneratorExit: 15b9. exception inside
     the generator to terminate the iteration.  On receiving this
     exception, the generator’s code must either raise *note
     GeneratorExit: 15b9. or *note StopIteration: de9.  Catching the
     *note GeneratorExit: 15b9. exception and returning a value is
     illegal and will trigger a *note RuntimeError: 243.; 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: 15b9.
     occurs, I suggest using a ‘try: ... finally:’ suite instead of
     catching *note GeneratorExit: 15b9.

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: 1af. statement), but
coroutines can be entered, exited, and resumed at many different points
(the *note yield: bb8. 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: 1b0. clause will now always get a chance to run.  The syntactic
restriction that you couldn’t mix *note yield: bb8. 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: 186.
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.18.8 PEP 343: The ‘with’ statement
------------------------------------

The ‘*note with: 186.’ 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: 186.’ 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__(): 7d9. and *note __exit__(): 14fc. methods.

The object’s *note __enter__(): 7d9. 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__(): 14fc. 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: 186.’ 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: 347. loop raised an
exception part-way through the block.

     Nota: In this case, 'f' is the same object created by *note open():
     314, because *note __enter__(): 7d9. returns 'self'.

As travas e variáveis de condição do módulo *note threading: f3. também
oferecem suporte à instrução ‘*note with: 186.’:

     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: 3a. 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.18.8.1 Writing Context Managers
.................................

Under the hood, the ‘*note with: 186.’ 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__(): 7d9. and *note __exit__(): 14fc. methods.

   * The context manager’s *note __enter__(): 7d9. 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(): 88f.  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: 186.’
     statement will never realize anything went wrong.

   * If 'BLOCK' didn’t raise an exception, the *note __exit__(): 14fc.
     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__(): 7d9. 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: 186.’ 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__(): 14fc. 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: 1af. 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.18.8.2 The contextlib module
..............................

The new *note contextlib: 27. module provides some functions and a
decorator that are useful for writing objects for use with the ‘*note
with: 186.’ 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: bb8.
will be executed as the *note __enter__(): 7d9. method, and the value
yielded will be the method’s return value that will get bound to the
variable in the ‘*note with: 186.’ statement’s ‘as’ clause, if any.  The
code after the *note yield: bb8. will be executed in the *note
__exit__(): 14fc. 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: 27. 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: 186.’ 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: 186.’ statement, which can be
     helpful in learning how the statement works.

The documentation for the *note contextlib: 27. 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.18.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: bc3. class and all the
standard built-in exceptions (*note NameError: 44f, *note ValueError:
2ea, 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: bbb.
and *note SystemExit: f30. aren’t errors, though, and usually represent
an explicit action such as the user hitting ‘Control’-‘C’ or code
calling *note sys.exit(): 276.  A bare ‘except:’ will catch all
exceptions, so you commonly need to list *note KeyboardInterrupt: bbb.
and *note SystemExit: f30. 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: bbb. and *note SystemExit: f30. 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: 7cc. or some descendant of *note
BaseException: 7cc, 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: bc3. 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.18.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:
c49. 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: 5d5. 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: c49. to store their size.  Functions such as *note
PyList_Size(): 160b. now return *note Py_ssize_t: c49.  Code in
extension modules may therefore need to have some variables changed to
*note Py_ssize_t: c49.

The *note PyArg_ParseTuple(): 3be. and *note Py_BuildValue(): 3bf.
functions have a new conversion code, ‘n’, for *note Py_ssize_t: c49.
*note PyArg_ParseTuple(): 3be.’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: c49.

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.18.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: 198. if this requirement isn’t met.

A corresponding *note nb_index: 160e. slot was added to the C-level
*note PyNumberMethods: 160f. 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.18.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: 183. 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: 1e.
     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(): 1101. and *note max(): 1102. 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(): 1101./*note max(): 1102. 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(): 1612. and *note all():
     1613, evaluate whether an iterator contains any true or false
     values.  *note any(): 1612. returns *note True: dfb. if any value
     returned by the iterator is true; otherwise it will return *note
     False: d1f.  *note all(): 1613. returns *note True: dfb. 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(): 1614. 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: 1615, 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: bfe.
     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: bfe. 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:
     1615. 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: 1616. switch to log all the paths searched.  In
     Python 2.5, a new *note ImportWarning: 713. 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: abb. 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<16>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0263/


File: python.info,  Node: Interactive Interpreter Changes,  Next: Otimizações<16>,  Up: Outras mudanças na linguagem<16>

1.18.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:
7fb. and *note -version: f0b.; on Windows, it also accepts the *note /?:
1619. option for displaying a help message.  (Implemented by Georg
Brandl.)


File: python.info,  Node: Otimizações<16>,  Prev: Interactive Interpreter Changes,  Up: Outras mudanças na linguagem<16>

1.18.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:
     184. and *note frozenset: 7e7. 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():
     bf./‘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: 2ea. from the ‘read*()’ method.  (Implemented
     by Thomas Wouters.)

   * The *note struct: db. 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: be. 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.18.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: 1c. 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: 1c. module documentation for details.  (Designed
     and implemented by Walter Dörwald.)

   * The *note collections: 1e. module gained a new type, ‘defaultdict’,
     that subclasses the standard *note dict: 183. 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(): 24c. or *note
     int(): 19b.  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: 1e. module now has a ‘remove(value)’ method that
     removes the first occurrence of 'value' in the queue, raising *note
     ValueError: 2ea. if the value isn’t found.  (Contributed by Raymond
     Hettinger.)

   * New module: The *note contextlib: 27. module contains helper
     functions for use with the new ‘*note with: 186.’ statement.  See
     section *note The contextlib module: 1605. for more about this
     module.

   * New module: The *note cProfile: 2b. module is a C implementation of
     the existing *note profile: b4. module that has much lower
     overhead.  The module’s interface is the same as *note profile:
     b4.: 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: b4. module’s interface, will continue to be
     maintained in future versions of Python.  (Contributed by Armin
     Rigo.)

     Also, the *note pstats: b5. 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: 2d. 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: 4dc. class in the *note datetime: 34. 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(): 161e. and *note
     time.strftime(): 13e5.:

          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: 3b. 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: 3e. 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: 3f. package has been updated to version 4.0.
     (Contributed by Barry Warsaw.)

   * The *note fileinput: 5f. module was made more flexible.  Unicode
     filenames are now supported, and a 'mode' parameter that defaults
     to ‘"r"’ was added to the *note input(): 14d4. function to allow
     opening files in binary or *note universal newlines: f29. mode.
     Another new parameter, 'openhook', lets you use a function other
     than *note open(): 314. to open the input files.  Once you’re
     iterating over the set of files, the ‘FileInput’ object’s new *note
     fileno(): 161f. returns the file descriptor for the currently
     opened file.  (Contributed by Georg Brandl.)

   * In the *note gc: 64. 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():
     1b3. 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:
     6d. module now support a ‘key’ keyword parameter similar to the one
     provided by the *note min(): 1101./*note max(): 1102. 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(): d37. 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(): 199. function in the *note locale: 8a. module
     has been modified and two new functions were added,
     ‘format_string()’ and ‘currency()’.

     The *note format(): 199. 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(): 199. 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: 8f. 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: a3. 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: a4. 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: a5. module underwent several changes.  The
     ‘stat_float_times’ variable now defaults to true, meaning that
     *note os.stat(): 26c. will now return time values as floats.  (This
     doesn’t necessarily mean that *note os.stat(): 26c. will return
     times that are precise to fractions of a second; not all systems
     support such precision.)

     Constants named *note os.SEEK_SET: 1489, *note os.SEEK_CUR: 148a,
     and *note os.SEEK_END: 148b. have been added; these are the
     parameters to the *note os.lseek(): 1313. function.  Two new
     constants for locking are *note os.O_SHLOCK: 1620. and *note
     os.O_EXLOCK: 1621.

     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(): 1622. function.  ‘wait4(pid)’ does take a
     process ID. (Contributed by Chad J. Schroeder.)

     On FreeBSD, the *note os.stat(): 26c. 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: aa. 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: ab. and ‘cPickle’ modules no longer accept a
     return value of ‘None’ from the *note __reduce__(): bbc. 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: ae. 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: 1586. 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: c2. module is no longer dependent on
     importing the *note readline: bf. module and therefore now works on
     non-Unix platforms.  (Patch from Robert Kiendl.)

   * The *note SimpleXMLRPCServer: 135. and *note DocXMLRPCServer: 135.
     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: d1. 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: db. is now faster because it compiles format
     strings into ‘Struct’ objects with ‘pack()’ and ‘unpack()’ methods.
     This is similar to how the *note re: be. 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(): 1623. 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(): 1624, 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: e4. 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: f3. 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: 10b. 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: 1625.

   * New module: the *note uuid: 116. 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: 11a. 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: 11b. 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(): 314. 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: 134. module now supports returning *note
     datetime: 4dc. objects for the XML-RPC date type.  Supply
     ‘use_datetime=True’ to the *note loads(): 1626. function or the
     ‘Unmarshaller’ class to enable this feature.  (Contributed by Skip
     Montanaro.)

   * The *note zipfile: 137. 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: 139. module’s ‘Compress’ and ‘Decompress’ objects
     now support a *note copy(): 29. 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.18.13.1 The ctypes package
............................

The *note ctypes: 2e. package, written by Thomas Heller, has been added
to the standard library.  *note ctypes: 2e. 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: 2e. 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: 2e. 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: 1f2. type constructor that will create a *note PyObject:
5d5.* 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(): 1f2.; if it’s omitted you end up
with a segmentation fault.

*note ctypes: 2e. has been around for a while, but people still write
and distribution hand-coded extension modules because you can’t rely on
*note ctypes: 2e. being present.  Perhaps developers will begin to write
Python wrappers atop a library accessed through *note ctypes: 2e.
instead of extension modules, now that *note ctypes: 2e. 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: 2e. module.


File: python.info,  Node: The ElementTree package,  Next: The hashlib package,  Prev: The ctypes package,  Up: New Improved and Removed Modules

1.18.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.18.13.3 The hashlib package
.............................

A new *note hashlib: 6c. module, written by Gregory P. Smith, has been
added to replace the ‘md5’ and ‘sha’ modules.  *note hashlib: 6c. 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(): 29. returns a new
hashing object with the same digest state.

Ver também
..........

The documentation for the *note hashlib: 6c. module.


File: python.info,  Node: The sqlite3 package,  Next: The wsgiref package,  Prev: The hashlib package,  Up: New Improved and Removed Modules

1.18.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: d4.

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: d4. 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.18.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: 11e. 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.18.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: c49. type
     definition instead of int.  See the earlier section *note PEP 353;
     Using ssize_t as the index type: 1609. 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(): 4ab. 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(): e54, *note PyMem_Realloc(): 1228, and *note
     PyMem_Free(): 1633. are one family that allocates raw memory, while
     *note PyObject_Malloc(): e56, *note PyObject_Realloc(): 1634, and
     *note PyObject_Free(): e53. 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(): 1635. and *note PyFrozenSet_New(): 1636. to create a
     new set, *note PySet_Add(): 1637. and *note PySet_Discard(): 1638.
     to add and remove elements, and *note PySet_Contains(): 1639. and
     *note PySet_Size(): 163a. 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(): 1623.
     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.  ‘Py_LOCAL(type)’ declares the function as returning a value
     of the specified 'type' and uses a fast-calling qualifier.
     ‘Py_LOCAL_INLINE(type)’ 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(): 163b, 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.18.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.18.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: 15f5, it’s now
     possible for ‘gi_frame’ to be ‘None’.

   * A new warning, *note UnicodeWarning: 1615, 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:
     bfe. exception.

   * Library: the *note csv: 2d. 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: 8a. module’s *note format(): 199.
     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: ab. and ‘cPickle’ modules no longer
     accept a return value of ‘None’ from the *note __reduce__(): bbc.
     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: 135. and *note
     DocXMLRPCServer: 135. 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: c49. 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: 1609. 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.18.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.19 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.19.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(): 7e7. type is an immutable version of *note set():
184.  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.19.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: 64d. 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.19.3 PEP 289: Generator Expressions
-------------------------------------

The iterator feature introduced in Python 2.2 and the *note itertools:
85. 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.19.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: 2ea, 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: d8. 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: 5dd.  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.19.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: 1649. statement in the usual way, and pass the resulting
method to a *note staticmethod(): 450. or *note classmethod(): 488.
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(): 488. 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(): 488, *note staticmethod(): 450, 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: 14d0. 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.19.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(): a5b. is easier to read, runs faster, and uses substantially
less memory.

Note that *note reversed(): a5b. only accepts sequences, not arbitrary
iterators.  If you want to reverse an iterator, first convert it to a
list with *note list(): 24c.

     >>> 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.19.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: dc.
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: dc.
contains a single class called *note subprocess.Popen: 4b1. 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(): 164c. 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: f29. 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(): 164c.:

     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: dc.
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.19.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.19.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.19.8.2 The ‘Decimal’ type
...........................

A new module, *note decimal: 3a, 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: 92. and *note cmath:
19. 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.19.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: 3a.
     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: 3a.
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.19.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: 7ed. 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) - Imports: Multi-Line and Absolute/Relative

     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.19.10 PEP 331: Locale-Independent Float/String Conversions
------------------------------------------------------------

The *note locale: 8a. 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: 8a. 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.19.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(): 184. and *note frozenset(): 7e7. 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(): 1654. method now accepts the same argument
     forms as the *note dict: 183. 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: 1499. 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(): dbc. 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: 23b, 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(): 1a0. built-in function and ‘itertools.izip()’ now
     return an empty list if called with no arguments.  Previously they
     raised a *note TypeError: 198. 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: 87a. 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<17>.

   ---------- 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<17>,  Up: Outras mudanças na linguagem<17>

1.19.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(): 5f6. was also optimized and no
     longer converts its argument into a temporary list before extending
     the base list.  (Contributed by Raymond Hettinger.)

   * *note list(): 24c, *note tuple(): 608, *note map(): 19f, *note
     filter(): a5a, and *note zip(): 1a0. 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.19.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: f. 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: 12. 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: 1e. 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: f3.
     modules, now take advantage of *note collections.deque: 7e9. for
     improved performance.  (Contributed by Raymond Hettinger.)

   * The *note ConfigParser: 26. classes have been enhanced slightly.
     The *note read(): 1657. method now returns a list of the files that
     were successfully parsed, and the *note set(): 1468. method raises
     *note TypeError: 198. if passed a 'value' argument that isn’t a
     string.  (Contributed by John Belmonte and David Goodger.)

   * The *note curses: 2f. 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: 3b. 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: 3f. 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: 6d. 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: 72. 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: 78. module now supports IMAP’s THREAD command
     (contributed by Yves Dionne) and new ‘deleteacl()’ and ‘myrights()’
     methods (contributed by Arnaud Mazin).

   * The *note itertools: 85. 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: 85. 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():
     24c. 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: 8a. 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: 8b.
     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: 8b. 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: 91. 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: a3. 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(): 19f. or *note sorted(): dbb.  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: a4. module was updated in various ways.  The
     module now passes its messages through *note gettext.gettext():
     1658, 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: 3f. package.  To
     this end, the *note email.Utils.formatdate: 1659. 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: a5. 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: b2. module
     that underlies the *note os: a5. module.  (Contributed by J.
     Raynor.)

   * The *note poplib: b1. module now supports POP over SSL.
     (Contributed by Hector Urtubia.)

   * The *note profile: b4. module can now profile C extension
     functions.  (Contributed by Nick Bastin.)

   * The *note random: bd. 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: be.
     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: be. 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: 243. 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: cb. module now performs tighter error-checking on
     the parameters to the *note signal.signal(): 1330. 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: 243. exception.

   * Two new functions were added to the *note socket: d1. 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: d. module, which correctly handles
     calling multiple exit functions.  Eventually ‘sys.exitfunc()’ will
     become a purely internal interface, accessed only by *note atexit:
     d.

   * The *note tarfile: e4. module now generates GNU-format tar files by
     default.  (Contributed by Lars Gustäbel.)

   * The *note threading: f3. 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: f5. 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: 11a. 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: 134. 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.19.12.1 cookielib
...................

The *note cookielib: 74. library supports client-side handling for HTTP
cookies, mirroring the *note Cookie: 75. 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: 111. has been changed to interact with *note cookielib:
74.: ‘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.19.12.2 doctest
.................

The *note doctest: 3e. module underwent considerable refactoring thanks
to Edward Loper and Tim Peters.  Testing can still be as simple as
running *note doctest.testmod(): 165c, 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: 165d. 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: 165e. (unified diffs),
*note doctest.REPORT_CDIFF: 165f. (context diffs), or *note
doctest.REPORT_NDIFF: 1660. (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:
165e. 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.19.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: 1662, *note
     Py_RETURN_TRUE: 1663, and *note Py_RETURN_FALSE: 1664.
     (Contributed by Brett Cannon.)

   * Another new macro, *note Py_CLEAR: 78d, 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 Py_IS_NAN(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(): 619, is the
     same as *note PyArg_ParseTupleAndKeywords(): 618. but takes a
     ‘va_list’ instead of a number of arguments.  (Contributed by Greg
     Chapman.)

   * A new method flag, *note METH_COEXIST: 1665, allows a function
     defined in slots to co-exist with a *note PyCFunction: 1666. 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.19.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.19.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: 64d. 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(): 1a0. built-in function and ‘itertools.izip()’ now
     return an empty list instead of raising a *note TypeError: 198.
     exception if called with no arguments.

   * You can no longer compare the ‘date’ and *note datetime: 4dc.
     instances provided by the *note datetime: 34. module.  Two
     instances of different classes will now always be unequal, and
     relative comparisons (‘<’, ‘>’) will raise a *note TypeError: 198.

   * ‘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(): 1669. now warns if the 'mutate' argument is
     omitted and relevant.

   * The *note tarfile: e4. 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: 87a. 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:
     243. 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.19.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.20 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(): 68a. and *note enumerate(): 166f.  The
*note in: 348. operator can now be used for substring searches (e.g.
‘"ab" in "abc"’ returns *note True: dfb.).

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.20.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(): 1671. and *note intersection(): 1672. 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(): 1673.

     >>> 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(): 1674.

     >>> 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.20.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: bb8. 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: 1af.
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: bb8, 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: bb8. statement, the generator
outputs the value of ‘i’, similar to a *note return: 1af. 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: 8ed. 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: 1af. 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: de9. 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(): 9ce. 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: 181. 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.20.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: 1a3. 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.20.4 PEP 273: Importing Modules from ZIP Archives
---------------------------------------------------

The new *note zipimport: 138. 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: 167a. 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.20.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(): 314. built-in function.  If a
Unicode string is passed to *note os.listdir(): 12f6, 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: 45f. to be raised.  Applications can test whether
arbitrary Unicode strings are supported as file names by checking *note
os.path.supports_unicode_filenames: 167c, a Boolean value.

Under MacOS, *note os.listdir(): 12f6. 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.20.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: f29. 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.20.7 PEP 279: enumerate()
---------------------------

A new built-in function, *note enumerate(): 166f, 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(): 166f. 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.20.8 PEP 282: The logging Package
-----------------------------------

A standard package for writing logs, *note logging: 8b, 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: d3a. class is the primary class.  Most application
code will deal with one or more *note Logger: d3a. objects, each one
used by a particular subsystem of the application.  Each *note Logger:
d3a. is identified by a name, and names are organized into a hierarchy
using ‘.’ as the component separator.  For example, you might have *note
Logger: d3a. 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: d3a. that’s the parent of all other loggers.

For simple uses, the *note logging: 8b. 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(): 1681. method on the root logger.

Notice the *note warning(): 351. 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(): 1682. 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: d3a. can prevent this by setting its *note propagate: 1683.
attribute to *note False: d1f.

There are more classes provided by the *note logging: 8b. package that
can be customized.  When a *note Logger: d3a. instance is told to log a
message, it creates a *note LogRecord: 11dc. instance that is sent to
any number of different *note Handler: 1684. instances.  Loggers and
handlers can also have an attached list of filters, and each filter can
cause the *note LogRecord: 11dc. to be ignored or can modify the record
before passing it along.  When they’re finally output, *note LogRecord:
11dc. instances are converted to text by a *note Formatter: 1685. class.
All of these classes can be replaced by your own specially written
classes.

With all of these features the *note logging: 8b. 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.20.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: dfb. and *note False: d1f.  (*note
True: dfb. and *note False: d1f. 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: 3c0.; the
constructor for it takes any Python value and converts it to *note True:
dfb. or *note False: d1f.

     >>> 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: 181. 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: 19b. 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: dfb. and *note False: d1f. in a sentence: they’re
alternative ways to spell the integer values 1 and 0, with the single
difference that *note str(): 169. and *note repr(): 1c1. 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.20.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:
45f.), “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(): 1689, and codecs then can access the error
handler with *note codecs.lookup_error(): 168a.  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.20.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.20.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: df.
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: 64f. 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.20.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: 2d. package is much simpler:

     import csv

     input = open('datafile', 'rb')
     reader = csv.reader(input)
     for line in reader:
         print line

The *note reader(): 6a3. 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: 6a4. 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.20.14 PEP 307: Pickle Enhancements
------------------------------------

The *note pickle: ab. 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(): 1692. 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: 1693, can be used to select the fanciest
protocol available.

Unpickling is no longer considered a safe operation.  2.2’s *note
pickle: ab. 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__(): 7e6, *note __setstate__(): bbd, and *note
__getnewargs__(): fc8.  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.20.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: 198. 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__(): 581.
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(): b33.  ‘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: 689.
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: 19b,
*note str: 169, 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.20.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: bb8. statement is now always a keyword, as
     described in section *note PEP 255; Simple Generators: 1676. of
     this document.

   * A new built-in function *note enumerate(): 166f. was added, as
     described in section *note PEP 279; enumerate(): 167f. of this
     document.

   * Two new constants, *note True: dfb. and *note False: d1f. were
     added along with the built-in *note bool: 3c0. type, as described
     in section *note PEP 285; A Boolean Type: 1687. of this document.

   * The *note int(): 19b. type constructor will now return a long
     integer instead of raising an *note OverflowError: a77. 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: 1695. 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(): 68a. 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: 5dd. 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(): 183. 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: b56. statement no longer checks the ‘__debug__’
     flag, so you can no longer disable assertions by assigning to
     ‘__debug__’.  Running Python with the *note -O: 18c. 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: 109. 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: abc. 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;;: abb. on the command line or
     use *note warnings.filterwarnings(): 1697.

   * The process of deprecating string-based exceptions, as in ‘raise
     "Error occurred"’, has begun.  Raising a string will now trigger
     *note PendingDeprecationWarning: abc.

   * Using ‘None’ as a variable name will now result in a *note
     SyntaxWarning: 1ae. 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: 1698, 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__:
     1699. and *note __bases__: 169a. 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__: 169b. attribute.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.3910


File: python.info,  Node: String Changes,  Next: Otimizações<18>,  Up: Outras mudanças na linguagem<18>

1.20.16.1 String Changes
........................

   * The *note in: 348. 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:
     dfb. if 'X' is a substring of 'Y'. If 'X' is the empty string, the
     result is always *note True: dfb.

          >>> '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(): 109e. string method.

   * The *note strip(): 169d, *note lstrip(): 169e, and *note rstrip():
     169f. 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(): 10c1. and *note endswith(): 10c2. string
     methods now accept negative numbers for the 'start' and 'end'
     parameters.

   * Another new string method is *note zfill(): 16a0, originally a
     function in the *note string: d8. module.  *note zfill(): 16a0.
     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(): 16a0.

          >>> '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: dfb. 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<18>,  Prev: String Changes,  Up: Outras mudanças na linguagem<18>

1.20.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(): dbc. 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: 16a2. 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.20.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: 8. 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: 14. module is an interface to the bz2 data
     compression library.  bz2-compressed data is usually smaller than
     corresponding *note zlib: 139.-compressed data.  (Contributed by
     Gustavo Niemeyer.)

   * A set of standard date/time types has been added in the new *note
     datetime: 34. 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:
     16a4, *note CFLAGS: 16a5, ‘CPP’, *note LDFLAGS: 16a6, and *note
     CPPFLAGS: 16a7. environment variables, using them to override the
     settings in Python’s configuration (contributed by Robert Weber).

   * Previously the *note doctest: 3e. 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():
     fe9. function creates a *note unittest.TestSuite: fea. object from
     a set of *note doctest: 3e. tests.

   * The new ‘gc.get_referents(object)’ function returns a list of all
     the objects referenced by 'object'.

   * The *note getopt: 65. module gained a new function, *note
     gnu_getopt(): 16a8, that supports the same arguments as the
     existing *note getopt(): 16a9. function but uses GNU-style scanning
     mode.  The existing *note getopt(): 16a9. 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: 6a, *note pwd: b7, and *note resource: c1. modules
     now return enhanced tuples:

          >>> import grp
          >>> g = grp.getgrnam('amk')
          >>> g.gr_name, g.gr_gid
          ('amk', 500)

   * The *note gzip: 6b. module can now handle files exceeding 2 GiB.

   * The new *note heapq: 6d. 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: 6d. module provides *note heappush(): 16aa. and
     *note heappop(): 16ab. 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: 77. package.

   * The *note imaplib: 78. module now supports IMAP over SSL.
     (Contributed by Piers Lauder and Tino Lange.)

   * The *note itertools: 85. 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: dfb, 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: 92. module, ‘degrees(rads)’
     and ‘radians(degs)’, convert between radians and degrees.  Other
     functions in the *note math: 92. module such as *note math.sin():
     16ac. and *note math.cos(): 16ad. have always required input values
     measured in radians.  Also, an optional 'base' argument was added
     to *note math.log(): 16ae. 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: b2. module that underlies the *note os:
     a5. module.  (Contributed by Gustavo Niemeyer, Geert Jansen, and
     Denis S. Otkidach.)

   * In the *note os: a5. 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(): 556.

     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: 16af. 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: a4. 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: af. 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: 12c. 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: 16b0. attribute to
     *note True: dfb. will enable buffering.

   * The ‘sample(population, k)’ function was added to the *note random:
     bd. module.  'population' is a sequence or ‘xrange’ object
     containing the elements of a population, and *note sample(): 942.
     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: bd. 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: bf. module also gained a number of new
     functions: *note get_history_item(): 16b1, *note
     get_current_history_length(): 16b2, and *note redisplay(): 16b3.

   * The ‘rexec’ and ‘Bastion’ modules have been declared dead, and
     attempts to import them will fail with a *note RuntimeError: 243.
     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: ca. 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: cb. but then removed again as it proved impossible to
     make it work reliably across platforms.

   * The *note socket: d1. 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: a2b. exception.

     The original timeout implementation was by Tim O’Malley.  Michael
     Gilfix integrated it into the Python *note socket: d1. 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: d1. 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: e4. module allows reading from and writing
     to ‘tar’-format archive files.  (Contributed by Lars Gustäbel.)

   * The new *note textwrap: f2. 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(): 16b4. is built on top of *note wrap(): 16b5.  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: 11c3. class that
     actually implements the text wrapping strategy.  Both the *note
     TextWrapper: 11c3. class and the *note wrap(): 16b5. and *note
     fill(): 16b4. 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: f3. 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: f3. module.  Code can call functions and use
     classes in ‘_threading’ whether or not threads are supported,
     avoiding an *note if: 181. 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: f4. module’s *note strptime(): 161e. function has
     long been an annoyance because it uses the platform C library’s
     *note strptime(): 161e. 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: f5. 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: 16b6.
     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: c8. module.

     Adding the mix-in as a superclass provides the full dictionary
     interface whenever the class defines *note __getitem__(): 581,
     *note __setitem__(): 14c7, *note __delitem__(): 14c8, 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: 128. can now
     generate XML output in a particular encoding by providing an
     optional encoding argument to the *note toxml(): c7d. and *note
     toprettyxml(): c7e. 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: d1. 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: 62.) also support Unicode host
     names; ‘httplib’ also sends HTTP ‘Host’ headers using the ACE
     version of the domain name.  *note urllib: 10e. 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: da. 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.20.17.1 Date/Time Type
........................

Date and time types suitable for expressing timestamps were added as the
*note datetime: 34. 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: 1f9, representing a day, month,
and year; *note time: 1fa, consisting of hour, minute, and second; and
*note datetime: 4dc, which contains all the attributes of both *note
date: 1f9. and *note time: 1fa.  There’s also a *note timedelta: bb9.
class representing differences between two points in time, and time zone
logic is implemented by classes inheriting from the abstract *note
tzinfo: 7eb. class.

You can create instances of *note date: 1f9. and *note time: 1fa. 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(): 16b8. 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(): 16b9. method allows modifying one or more fields of
a *note date: 1f9. or *note datetime: 4dc. 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(): d19.).  *note date: 1f9. and
*note datetime: 4dc. instances can be subtracted from each other, and
added to *note timedelta: bb9. instances.  The largest missing feature
is that there’s no standard library support for parsing strings and
getting back a *note date: 1f9. or *note datetime: 4dc.

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.20.17.2 The optparse Module
.............................

The *note getopt: 65. module provides simple parsing of command-line
arguments.  The new *note optparse: a4. 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: 16bb. 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():
16bc. 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.20.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(): e56, it
has to be freed using *note PyObject_Free(): e53, 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(): e54, *note
     PyMem_Realloc(): 1228, and *note PyMem_Free(): 1633.

   * 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(): e56, *note
     PyObject_Realloc(): 1634, and *note PyObject_Free(): e53.

   * To allocate and free Python objects, use the “object” family *note
     PyObject_New: b72, *note PyObject_NewVar: b73, and *note
     PyObject_Del(): 16bf.

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.20.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: 16c1, 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: 16c2. 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: 16c2.

   * *note PyArg_ParseTuple(): 3be. 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: 16c3. or
     *note METH_STATIC: 16c4. flags in a method’s *note PyMethodDef:
     16c5. 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__: 60b. and *note __name__: 1699. 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.20.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(): 5d. 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.20.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: 16c8. 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:
     16c9. 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: aa.).  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: 18c.

     C extensions that access the *note f_lineno: 9a5. 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: 9a5. attribute of frame objects, changing the line
     that will be executed next.  A ‘jump’ command has been added to the
     *note pdb: aa. 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.20.21 Porting to Python 2.3
-----------------------------

This section lists previously described changes that may require changes
to your code:

   * *note yield: bb8. 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(): 19b. type constructor will now return a long
     integer instead of raising an *note OverflowError: a77. 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: 1678. 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: 64d.  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: 1ae. 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.20.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.21 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<2>.
* 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.21.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.21.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: 16d2. 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__(): 6ef. 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: 16d3, “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.21.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: c72, 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: c72.:

     class C(object):
         def __init__ (self):
             ...
         ...

This means that *note class: 14d3. 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: c72.)

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(): 19b, *note float(): 196, and *note str(): 169.  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(): 183. 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.21.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__: 772. 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__: 125c. is the attribute’s name.

   * *note __doc__: b17. 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__: 16d6. 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(): 450. 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.21.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():
1a6, 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(): 1a6. 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.21.2.4 Attribute Access
.........................

A fair number of sophisticated Python classes define hooks for attribute
access using *note __getattr__(): 6ef.; 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__(): dbf. is 'always' called whenever any
attribute is accessed, while the old *note __getattr__(): 6ef. 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__: 772.  *note __getattr__(): 6ef. methods also end up
being called by Python when it checks for other methods such as *note
__repr__(): 824. 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: 4ad. 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__: 772.  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__: 16d9. 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__: 16d9. 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: 5e4. on the attempt to assign
to an attribute not listed in *note __slots__: 16d9.


File: python.info,  Node: Related Links,  Prev: Attribute Access,  Up: PEPs 252 and 253 Type and Class Changes

1.21.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: 16db. 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.21.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__(): 581. method that looks
something like this:

     def __getitem__(self, index):
         return <next item>

*note __getitem__(): 581. 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: 347. 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__(): 581. calls will be made with 'index' incrementing by one
each time.  In other words, the presence of the *note __getitem__():
581. 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__(): 581. 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: 16dd. function in order to return an
iterator, and extension types that want to behave as iterators can
define a *note tp_iternext: 16de. function.

So, after all this, what do iterators actually do?  They have one
required method, *note next(): 9ce, which takes no arguments and returns
the next value.  When there are no more values to be returned, calling
*note next(): 9ce. should raise the *note StopIteration: de9. 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: 347. statement no longer expects a sequence;
it expects something for which *note iter(): 9cd. 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: 16dd. 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(): 9cd. 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: 348. 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(): bf.
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(): 9ce. 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.21.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: 1af.
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: bb8, 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: bb8. statement, the generator
outputs the value of ‘i’, similar to a *note return: 1af. 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: 8ed.…*note finally:
1b0. 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: 1af. 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: de9. 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(): 9ce. 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: 181. 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.21.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: 198. 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: a77. 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(): f38.
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.21.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__(): 1086. and
     *note __floordiv__(): 16e2. to overload the two division operators.
     At the C level, there are also slots in the *note PyNumberMethods:
     160f. 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.21.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: 2ea.
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: 139. 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<2>,  Prev: Unicode Changes,  Up: What’s New in Python 2 2

1.21.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: 44f. 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: 1499. 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: 1649, *note class: 14d3,
or *note import: 7ed. 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: 1499. expressions with
free variables, the compiler will flag this by raising a *note
SyntaxError: 18e. 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<2>,  Next: Interpreter Changes and Fixes,  Prev: PEP 227 Nested Scopes,  Up: What’s New in Python 2 2

1.21.9 Módulos novos ou aprimorados
-----------------------------------

   * The *note xmlrpclib: 134. 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: 135. 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: 6e. 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:
     16e6.  The enhanced functions include *note stat(): 26c, *note
     fstat(): f80, *note statvfs(): 12f8, and *note fstatvfs(): f81. in
     the *note os: a5. module, and *note localtime(): 16e7, *note
     gmtime(): 13bc, and *note strptime(): 161e. in the *note time: f4.
     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: d1. 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: db.
     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(): aca. that uses the *note pydoc: ba. module
     introduced in Python 2.1 to provide interactive help.
     ‘help(object)’ displays any available help text about 'object'.
     *note help(): aca. 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: ba. module.)

   * Various bugfixes and performance improvements have been made to the
     SRE engine underlying the *note re: be. module.  For example, the
     *note re.sub(): 59c. and *note re.split(): 59b. 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():
     16e8. 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: cf. 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: cf. also supports SMTP authentication.
     (Contributed by Gerhard Häring.)

   * The *note imaplib: 78. 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: 3f, 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: 3b. 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: d8. 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: 93. module now makes it easier to use
     alternative MIME-type databases by the addition of a *note
     MimeTypes: 16e9. class, which takes a list of filenames to be
     parsed.  (Contributed by Fred L. Drake, Jr.)

   * A *note Timer: 1355. class was added to the *note threading: f3.
     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<2>,  Up: What’s New in Python 2 2

1.21.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(): 16eb. and *note PyEval_SetTrace(): 657.  The
     existing *note sys.setprofile(): 16ec. and *note sys.settrace():
     2e0. 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(): 16ed. and *note
     PyInterpreterState_Next(): 16ee. let a caller walk through all the
     existing interpreter objects; *note
     PyInterpreterState_ThreadHead(): 16ef. and *note
     PyThreadState_Next(): 16f0. 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: 976.

   * 
     Use *note PyObject_GC_New(): c8c. or *note PyObject_GC_NewVar(): c8d. to allocate

          objects, and *note PyObject_GC_Del(): 16f1. to deallocate
          them.

   * Rename ‘PyObject_GC_Init()’ to *note PyObject_GC_Track(): 16f2. and
     ‘PyObject_GC_Fini()’ to *note PyObject_GC_UnTrack(): 16f3.

   * 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():
     3be.; ‘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():
     16f4, 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: 5d5.* variables that will be filled in with
     argument values.

   * Two new flags *note METH_NOARGS: 16c2. and *note METH_O: 16f5. 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: 16f6.  Also, the old ‘METH_OLDARGS’
     style of writing C methods is now officially deprecated.

   * Two new wrapper functions, *note PyOS_snprintf(): 16f7. and *note
     PyOS_vsnprintf(): 16f8. 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(): 16f9. 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.21.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: 198. 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: 16fb. exception has
     therefore moved from the *note weakref: 11a. 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(): 4ab, 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: 348. 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(): 16fc. and *note
     sys.setdlopenflags(): 131b. functions.  (Contributed by Bram
     Stolk.)

   * The *note pow(): 1a4. 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: 198. 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.21.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.22 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<3>.
* 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.22.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.22.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: 44f. 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: 1499. expression
clumsier, and this was a problem in practice.  In code which uses *note
lambda: 1499. 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: 1649, *note class: 14d3,
or *note import: 7ed. 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: 1499. expressions with
free variables, the compiler will flag this by raising a *note
SyntaxError: 18e. 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.22.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: 7ed. 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.22.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__(): 149c.
                
                
‘<=’            *note __le__(): 1506.
                
                
‘>’             *note __gt__(): 1507.
                
                
‘>=’            *note __ge__(): 1508.
                
                
‘==’            *note __eq__(): ce5.
                
                
‘!=’            *note __ne__(): 1705.
                

(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.22.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: 118. 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(): 1707.
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: be. 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: 1a3. 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.22.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.22.7 PEP 205: Weak References
-------------------------------

Weak references, available through the *note weakref: 11a. 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: 11a. 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.22.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__: 13d5. 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__: 14ce.  Unlike the *note __dict__: e4b. attribute of
class instances, in functions you can actually assign a new dictionary
to *note __dict__: 14ce, 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.22.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: 7ed. 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: 64f. 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: b4b. 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.22.10 PEP 217: Interactive Display Hook
-----------------------------------------

When using the Python interpreter interactively, the output of commands
is displayed using the built-in *note repr(): 1c1. function.  In Python
2.1, the variable *note sys.displayhook(): 170d. can be set to a
callable object which will be called instead of *note repr(): 1c1.  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.22.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: 198. 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: 198, 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<3>,  Prev: PEP 208 New Coercion Model,  Up: What’s New in Python 2 1

1.22.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<3>,  Next: Outras alterações e correções<4>,  Prev: PEP 241 Metadata in Python Packages,  Up: What’s New in Python 2 1

1.22.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: 3e. 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: 3b. module contains a class, *note
     SequenceMatcher: 120f, 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: 31, 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: 126.
     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(): a02. can be set to a callable
     object.  When an exception isn’t caught by any *note try:
     8ed.…*note except: 1ab. blocks, the exception will be passed to
     *note sys.excepthook(): a02, 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: f4. module, such as *note
     asctime(): 13e3. and *note localtime(): 16e7, 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: 62. 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: 62. 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:
     d1. module, contributed by Grant Edwards.

   * The *note pstats: b5. 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(): 8e5. 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<3>,  Up: What’s New in Python 2 1

1.22.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:
     1712, it has to be freed using *note PyMem_Del(): 1713, 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(): bf.
     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(): 1714, 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: df. or *note
     string: d8, ‘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(): 1c1. 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(): 3d9, 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.22.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.23 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<13>.
* 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.23.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.23.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.23.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.23.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: 10b, 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: 1c. 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:
be. 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.23.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(): 19f. and *note filter(): a5a. 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: 1499. 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.23.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.23.7 String Methods
---------------------

Until now string-manipulation functionality was in the *note string: d8.
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: d8. 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: d8. 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.23.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: 64. 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.23.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.23.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(): 1c1. 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(): 169. 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: 348. 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: 1723. 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: 44f. 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: 44f. exception is
raised, while 2.0 raises a new *note UnboundLocalError: 1724. exception.
*note UnboundLocalError: 1724. is a subclass of *note NameError: 44f, so
any existing code that expects *note NameError: 44f. to be raised should
still work.

     def f():
         print "i=",i
         i = i + 1
     f()

Two new exceptions, *note TabError: 75a. and *note IndentationError:
9a1, have been introduced.  They’re both subclasses of *note
SyntaxError: 18e, 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.23.9.2 Changes to Built-in Functions
......................................

A new built-in, ‘zip(seq1, seq2, ...)’, has been added.  *note zip():
1a0. returns a list of tuples where each tuple contains the i-th element
from each of the argument sequences.  The difference between *note
zip(): 1a0. and ‘map(None, seq1, seq2)’ is that *note map(): 19f. pads
the sequences with ‘None’ if the sequences aren’t all of the same
length, while *note zip(): 1a0. truncates the returned list to the
length of the shortest argument sequence.

The *note int(): 19b. 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: 198. 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: df. 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(): 6e0. and *note sys.setrecursionlimit(): 6df.
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.23.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(): 8d1. and *note insert(): 1394.  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:
198. 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(): 3be, 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: d1. 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:
1727. and *note socket.bind: 1728. 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: d1. 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: 5e4. and *note NameError: 44f. 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: 198.  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(): 169. of
a long integer no longer has a trailing ‘L’ character, though *note
repr(): 1c1. 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(): 1c1. of a float now uses a different formatting
precision than *note str(): 169.  *note repr(): 1c1. uses ‘%.17g’ format
string for C’s ‘sprintf()’, while *note str(): 169. uses ‘%.12g’ as
before.  The effect is that *note repr(): 1c1. may occasionally show
more decimal places than *note str(): 169, 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.23.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(): 2ac. and *note issubclass(): 9ba.  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(): 5ff, *note PyModule_AddIntConstant(): 172a, and
*note PyModule_AddStringConstant(): 172b.  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(): 172c. gets a signal handler and *note PyOS_setsig():
172d. 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.23.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.23.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: 126. 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.23.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(): 1731.
and *note endElement(): 1732. methods are called for every starting and
end tag encountered by the parser, the *note characters(): 1733. 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.23.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: 128. 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.23.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: 126. package.

The answer is that Python 2.0’s *note xml: 126. 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: 126. 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<13>,  Prev: XML Modules,  Up: What’s New in Python 2 0

1.23.14 Module changes
----------------------

Lots of improvements and bugfixes were made to Python’s extensive
standard library; some of the affected modules include *note readline:
bf, *note ConfigParser: 26, ‘cgi’, *note calendar: 15, *note posix: b2,
*note readline: bf, ‘xmllib’, ‘aifc’, ‘chunk’, *note wave: 119, *note
random: bd, *note shelve: c8, and ‘nntplib’.  Consult the CVS logs for
the exact patch-by-patch details.

Brian Gallew contributed OpenSSL support for the *note socket: d1.
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: d1. module: ‘socket.ssl(socket,
keyfile, certfile)’, which takes a socket object and returns an SSL
socket.  The *note httplib: 72. and *note urllib: 10e. modules were also
changed to support ‘https://’ URLs, though no one has implemented FTP or
SMTP over SSL.

The *note httplib: 72. 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: 2f. 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: be. 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<13>,  Next: IDLE Improvements,  Prev: Module changes,  Up: What’s New in Python 2 0

1.23.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: d.: 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: d. module
     instead, importing *note atexit: d. and calling *note
     atexit.register(): a74. with the function to be called on exit.
     (Contributed by Skip Montanaro.)

   * *note codecs: 1c, ‘encodings’, *note unicodedata: 10b.: Added as
     part of the new Unicode support.

   * *note filecmp: 5e.: Supersedes the old ‘cmp’, ‘cmpcache’ and
     ‘dircmp’ modules, which have now become deprecated.  (Contributed
     by Gordon MacMillan and Moshe Zadka.)

   * *note gettext: 67.: 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: 94.: 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: be.
     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: 113.: 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: e3.: 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: 11b.: 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: 10e. 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: 11c.: 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: 137.: 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: 6b. 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<13>,  Up: What’s New in Python 2 0

1.23.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.23.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.23.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.14/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.24 Changelog
==============

* Menu:

* Python seguinte::
* Python 3.14.0 final: Python 3 14 0 final.
* Python 3.14.0 candidato a lançamento 3: Python 3 14 0 candidato a lançamento 3.
* Python 3.14.0 candidato a lançamento 2: Python 3 14 0 candidato a lançamento 2.
* Python 3.14.0 candidato a lançamento 1: Python 3 14 0 candidato a lançamento 1.
* Python 3.14.0 beta 4: Python 3 14 0 beta 4.
* Python 3.14.0 beta 3: Python 3 14 0 beta 3.
* Python 3.14.0 beta 2: Python 3 14 0 beta 2.
* Python 3.14.0 beta 1: Python 3 14 0 beta 1.
* Python 3.14.0 alpha 7: Python 3 14 0 alpha 7.
* Python 3.14.0 alpha 6: Python 3 14 0 alpha 6.
* Python 3.14.0 alpha 5: Python 3 14 0 alpha 5.
* Python 3.14.0 alpha 4: Python 3 14 0 alpha 4.
* Python 3.14.0 alpha 3: Python 3 14 0 alpha 3.
* Python 3.14.0 alpha 2: Python 3 14 0 alpha 2.
* Python 3.14.0 alpha 1: Python 3 14 0 alpha 1.
* 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 14 0 final,  Up: Changelog

1.24.1 Python seguinte
----------------------

'Data de lançamento: XXXX-XX-XX'

* Menu:

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


File: python.info,  Node: Ferramentas/Demos,  Next: Testes,  Up: Python seguinte

1.24.1.1 Ferramentas/Demos
..........................

   - gh-137484(1): Have ‘Tools/wasm/wasi’ put the build Python into a
     directory named after the build triple instead of “build”.

   - gh-137248(2): Add a ‘--logdir’ option to ‘Tools/wasm/wasi’ for
     specifying where to write log files.

   - gh-137243(3): Have Tools/wasm/wasi detect a WASI SDK install in
     /opt when it was directly extracted from a release tarball.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137484

   (2) https://github.com/python/cpython/issues/137248

   (3) https://github.com/python/cpython/issues/137243


File: python.info,  Node: Testes,  Next: Segurança,  Prev: Ferramentas/Demos,  Up: Python seguinte

1.24.1.2 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,  Next: Biblioteca,  Prev: Testes,  Up: Python seguinte

1.24.1.3 Segurança
..................

   - gh-139700(1): Check consistency of the zip64 end of central
     directory record.  Support records with “zip64 extensible data” if
     there are no bytes prepended to the ZIP file.

   - gh-139283(2): *note sqlite3: d4.: correctly handle maximum number
     of rows to fetch in *note Cursor.fetchmany: 1742. and reject
     negative values for *note Cursor.arraysize: 1743.  Patch by
     Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139700

   (2) https://github.com/python/cpython/issues/139283


File: python.info,  Node: Biblioteca,  Next: IDLE<3>,  Prev: Segurança,  Up: Python seguinte

1.24.1.4 Biblioteca
...................

   - gh-139845(1): Fix to not print KeyboardInterrupt twice in default
     asyncio REPL.

   - gh-139783(2): Fix *note inspect.getsourcelines(): 1745. for the
     case when a decorator is followed by a comment or an empty line.

   - gh-139809(3): Prevent premature colorization of subparser ‘prog’ in
     *note argparse.ArgumentParser.add_subparsers(): e05. to respect
     color environment variable changes after parser creation.

   - gh-139736(4): Fix excessive indentation in the default *note
     argparse: 7. ‘HelpFormatter’.  Patch by Alexander Edland.

   - gh-70765(5): *note http.server: 76.: fix default handling of
     HTTP/0.9 requests in *note BaseHTTPRequestHandler: 12c7.
     Previously, ‘BaseHTTPRequestHandler.parse_request`()’ incorrectly
     waited for headers in the request although those are not supported
     in HTTP/0.9.  Patch by Bénédikt Tran.

   - gh-139391(6): Fix an issue when, on non-Windows platforms, it was
     not possible to gracefully exit a ‘python -m asyncio’ process
     suspended by Ctrl+Z and later resumed by ‘fg(7)’ other than with
     ‘kill(8)’.

   - gh-139210(9): Fix use-after-free when reporting unknown event in
     *note xml.etree.ElementTree.iterparse(): 573.  Patch by Ken Jin.

   - gh-112729(10): Fix crash when calling *note
     concurrent.interpreters.create(): 1746. when the process is out of
     memory.

   - gh-135729(11): Fix unraisable exception during finalization when
     using *note concurrent.interpreters: 25. in the REPL.

   - gh-139076(12): Corrige um bug no módulo *note pydoc: ba. 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-138813(13): ‘multiprocessing.BaseProcess’ defaults ‘kwargs’ to
     ‘None’ instead of a shared dictionary.

   - gh-130567(14): Corrige possível falha em *note locale.strxfrm():
     1747. devido a um bug de plataforma no macOS.

   - gh-138779(15): Suporte a números de dispositivos maiores que
     ‘2**63-1’ para o campo *note st_rdev: 1748. da estrutura *note
     os.stat_result: 16af.

   - gh-137706(16): Fix the partial evaluation of annotations that use
     ‘typing.Annotated[T, x]’ where ‘T’ is a forward reference.

   - gh-88375(17): Corrige a normalização das regras e URLs ‘robots.txt’
     no módulo *note urllib.robotparser: 113.  Não ignora mais o ‘?’
     final.  Distingue os caracteres especiais brutos ‘?’, ‘=’ e ‘&’ dos
     codificados em porcentagem.

   - gh-111788(18): Corrige erros de análise no módulo *note
     urllib.robotparser: 113.  Não falhe ao tentar analisar caminhos
     estranhos.  Não falha ao tentar decodificar arquivos ‘robots.txt’
     não UTF-8.

   - gh-138432(19): *note zoneinfo.reset_tzpath(): 1749. agora
     converterá quaisquer objetos *note os.PathLike: e3f. 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: e3f.
     que represente um caminho relativo, ele levantará ‘ValueError’ em
     vez de ‘TypeError’ e apresentará uma mensagem de erro mais
     informativa.

   - gh-138008(20): Corrige falhas de segmentação no módulo *note
     ctypes: 2e. devido a *note argtypes: 174a. inválido.  Patch por
     Dung Nguyen.

   - gh-60462(21): Corrige *note locale.strxfrm(): 1747. no Solaris (e
     possivelmente em outras plataformas).

   - gh-138239(22): The REPL now highlights *note type: 661. as a soft
     keyword in *note type statements: 661.

   - gh-138204(23): Proibe expansão de *note mapas de memória: 94.
     anônimos compartilhados no Linux, o que causou um erro de
     barramento.

   - gh-138010(24): Corrige um problema em que a definição de uma classe
     com uma classe base decorada com *note @warnings.deprecated: 483.
     poderia não invocar o método correto *note __init_subclass__():
     838. em casos envolvendo herança múltipla.  Patch por Brian
     Schubert.

   - gh-137317(25): *note inspect.signature(): 22e. agora trata
     corretamente classes que usam um descritor em um método encapsulado
     ‘__init__()’ ou ‘__new__()’.  Contribuição de Yongyu Yan.

   - gh-137754(26): Corrige a importação do módulo *note zoneinfo: 13a.
     se a implementação C do módulo *note datetime: 34. não estiver
     disponível.

   - gh-137490(27): Manipula *note ECANCELED: 174b. da mesma forma que
     *note EINTR: f7b. em *note signal.sigwaitinfo(): f9f. no NetBSD.

   - gh-137477(28): Corrige ‘inspect.getblock()’, *note
     inspect.getsourcelines(): 1745. e *note inspect.getsource(): 174c.
     para expressões geradoras.

   - gh-137044(29): Return large limit values as positive integers
     instead of negative integers in *note resource.getrlimit(): 174d.
     Accept large values and reject negative values (except *note
     RLIM_INFINITY: 174e.) for limits in *note resource.setrlimit():
     174f.

   - gh-75989(30): *note tarfile.TarFile.extractall(): 29a. and *note
     tarfile.TarFile.extract(): 29b. now overwrite symlinks when
     extracting hardlinks.  (Contributed by Alexander Enrique Urieles
     Nieto in gh-75989(31).)

   - gh-137017(32): Fix *note threading.Thread.is_alive: b3c. to remain
     ‘True’ until the underlying OS thread is fully cleaned up.  This
     avoids false negatives in edge cases involving thread monitoring or
     premature *note threading.Thread.is_alive: b3c. calls.

   - gh-137273(33): Fix debug assertion failure in *note
     locale.setlocale(): 326. on Windows.

   - gh-137239(34): *note heapq: 6d.: Update ‘heapq.__all__’ with
     ‘*_max’ functions.

   - gh-81325(35): *note tarfile.TarFile: 140c. now accepts a *note
     path-like: 59a. when working on a tar archive.  (Contributed by
     Alexander Enrique Urieles Nieto in gh-81325(36).)

   - gh-137185(37): Fix a potential async-signal-safety issue in *note
     faulthandler: 5c. when printing C stack traces.

   - gh-136914(38): Fix retrieval of *note doctest.DocTest.lineno: 1750.
     for objects decorated with *note functools.cache(): 1751. or *note
     functools.cached_property: 758.

   - gh-136912(39): *note hmac.digest(): d26. now properly handles large
     keys and messages by falling back to the pure Python implementation
     when necessary.  Patch by Bénédikt Tran.

   - gh-83424(40): Allows creating a *note ctypes.CDLL: bd2. without
     name when passing a handle as an argument.

   - gh-136234(41): Fix *note asyncio.WriteTransport.writelines(): 1752.
     to be robust to connection failure, by using the same behavior as
     *note write(): 1753.

   - gh-136507(42): Fix mimetypes CLI to handle multiple file
     parameters.

   - gh-135386(43): Fix opening a *note dbm.sqlite3: 39. database for
     reading from read-only file or directory.

   - gh-135444(44): Fix *note asyncio.DatagramTransport.sendto(): 4c5.
     to account for datagram header size when data cannot be sent.

   - gh-126631(45): Fix *note multiprocessing: 98. ‘forkserver’ bug
     which prevented ‘__main__’ from being preloaded.

   - gh-134698(46): Fix a crash when calling methods of *note
     ssl.SSLContext: 354. or *note ssl.SSLSocket: add. across multiple
     threads.

   - gh-132551(47): Make *note io.BytesIO: 109a. safe in *note
     free-threaded: 1f3. build.

   - gh-118981(48): Fix potential hang in
     ‘multiprocessing.popen_spawn_posix’ that can happen when the child
     proc dies early by closing the child fds right away.

   - gh-78319(49): UTF8 support for the IMAP APPEND command has been
     made RFC compliant.

   - bpo-38735(50): Fix failure when importing a module from the root
     directory on unix-like platforms with sys.pycache_prefix set.

   - bpo-41839(51): Allow negative priority values from *note
     os.sched_get_priority_min(): 1305. and *note
     os.sched_get_priority_max(): 1304. functions.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139845

   (2) https://github.com/python/cpython/issues/139783

   (3) https://github.com/python/cpython/issues/139809

   (4) https://github.com/python/cpython/issues/139736

   (5) https://github.com/python/cpython/issues/70765

   (6) https://github.com/python/cpython/issues/139391

   (7) https://manpages.debian.org/fg

   (8) https://manpages.debian.org/kill

   (9) https://github.com/python/cpython/issues/139210

   (10) https://github.com/python/cpython/issues/112729

   (11) https://github.com/python/cpython/issues/135729

   (12) https://github.com/python/cpython/issues/139076

   (13) https://github.com/python/cpython/issues/138813

   (14) https://github.com/python/cpython/issues/130567

   (15) https://github.com/python/cpython/issues/138779

   (16) https://github.com/python/cpython/issues/137706

   (17) https://github.com/python/cpython/issues/88375

   (18) https://github.com/python/cpython/issues/111788

   (19) https://github.com/python/cpython/issues/138432

   (20) https://github.com/python/cpython/issues/138008

   (21) https://github.com/python/cpython/issues/60462

   (22) https://github.com/python/cpython/issues/138239

   (23) https://github.com/python/cpython/issues/138204

   (24) https://github.com/python/cpython/issues/138010

   (25) https://github.com/python/cpython/issues/137317

   (26) https://github.com/python/cpython/issues/137754

   (27) https://github.com/python/cpython/issues/137490

   (28) https://github.com/python/cpython/issues/137477

   (29) https://github.com/python/cpython/issues/137044

   (30) https://github.com/python/cpython/issues/75989

   (31) https://github.com/python/cpython/issues/75989

   (32) https://github.com/python/cpython/issues/137017

   (33) https://github.com/python/cpython/issues/137273

   (34) https://github.com/python/cpython/issues/137239

   (35) https://github.com/python/cpython/issues/81325

   (36) https://github.com/python/cpython/issues/81325

   (37) https://github.com/python/cpython/issues/137185

   (38) https://github.com/python/cpython/issues/136914

   (39) https://github.com/python/cpython/issues/136912

   (40) https://github.com/python/cpython/issues/83424

   (41) https://github.com/python/cpython/issues/136234

   (42) https://github.com/python/cpython/issues/136507

   (43) https://github.com/python/cpython/issues/135386

   (44) https://github.com/python/cpython/issues/135444

   (45) https://github.com/python/cpython/issues/126631

   (46) https://github.com/python/cpython/issues/134698

   (47) https://github.com/python/cpython/issues/132551

   (48) https://github.com/python/cpython/issues/118981

   (49) https://github.com/python/cpython/issues/78319

   (50) https://bugs.python.org/issue?@action=redirect&bpo=38735

   (51) https://bugs.python.org/issue?@action=redirect&bpo=41839


File: python.info,  Node: IDLE<3>,  Next: Núcleo e embutidos,  Prev: Biblioteca,  Up: Python seguinte

1.24.1.5 IDLE
.............

   - gh-139742(1): Colorize t-string prefixes for template strings in
     IDLE, as done for f-string prefixes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139742


File: python.info,  Node: Núcleo e embutidos,  Next: Construção,  Prev: IDLE<3>,  Up: Python seguinte

1.24.1.6 Núcleo e embutidos
...........................

   - gh-139748(1): Fix reference leaks in error branches of functions
     accepting path strings or bytes such as *note compile(): 4ab. and
     *note os.system(): 164c.  Patch by Bénédikt Tran.

   - gh-139516(2): Fix lambda colon erroneously start format spec in
     f-string in tokenizer.

   - gh-116738(3): Make *note mmap: 94. thread-safe on the *note free
     threaded: 1f3. build.

   - gh-138558(4): Fix handling of unusual t-string annotations in
     annotationlib.  Patch by Dave Peck.

   - gh-134466(5): Don’t run PyREPL in a degraded environment where
     setting termios attributes is not allowed.

   - gh-105487(6): Remove non-existent *note __copy__(): 1756, *note
     __deepcopy__(): 1757, and *note __bases__: 169a. from the *note
     __dir__(): 1758. entries of *note types.GenericAlias: 9e2.

   - gh-69605(7): Fix some standard library submodules missing from the
     *note REPL: 48b. auto-completion of imports.

   - gh-116738(8): Make *note cProfile: 2b. thread-safe on the *note
     free threaded: 1f3. build.

   - gh-138004(9): On Solaris/Illumos platforms, thread names are now
     encoded as ASCII to avoid errors on systems (e.g.  OpenIndiana)
     that don’t support non-ASCII names.

   - gh-137433(10): Fix a potential deadlock in the *note free
     threading: 1f3. build when daemon threads enable or disable
     profiling or tracing while the main thread is shutting down the
     interpreter.

   - gh-137400(11): Corrige uma falha na construção com *note threads
     livres: 1f3. ao desabilitar a criação de perfil ou o rastreamento
     em todos os threads com *note PyEval_SetProfileAllThreads(): 776.
     ou *note PyEval_SetTraceAllThreads(): 658. ou seus equivalentes em
     Python *note threading.settrace_all_threads(): 6e4. e *note
     threading.setprofile_all_threads(): 6e5.

   - gh-58124(12): Fix name of the Python encoding in Unicode errors of
     the code page codec: use “cp65000” and “cp65001” instead of
     “CP_UTF7” and “CP_UTF8” which are not valid Python code names.
     Patch by Victor Stinner.

   - gh-133400(13): Fixed Ctrl+D (^D) behavior in _pyrepl module to
     match old pre-3.13 REPL behavior.

   - gh-128640(14): Fix a crash when using threads inside of a
     subinterpreter.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139748

   (2) https://github.com/python/cpython/issues/139516

   (3) https://github.com/python/cpython/issues/116738

   (4) https://github.com/python/cpython/issues/138558

   (5) https://github.com/python/cpython/issues/134466

   (6) https://github.com/python/cpython/issues/105487

   (7) https://github.com/python/cpython/issues/69605

   (8) https://github.com/python/cpython/issues/116738

   (9) https://github.com/python/cpython/issues/138004

   (10) https://github.com/python/cpython/issues/137433

   (11) https://github.com/python/cpython/issues/137400

   (12) https://github.com/python/cpython/issues/58124

   (13) https://github.com/python/cpython/issues/133400

   (14) https://github.com/python/cpython/issues/128640


File: python.info,  Node: Construção,  Prev: Núcleo e embutidos,  Up: Python seguinte

1.24.1.7 Construção
...................

   - gh-138489(1): When cross-compiling for WASI by ‘build_wasm’ or
     ‘build_emscripten’, the ‘build-details.json’ step is now included
     in the build process, just like with native builds.

     This fixes the ‘libinstall’ task which requires the
     ‘build-details.json’ file during the process.

   - gh-123681(2): Check the ‘strftime()’ behavior at runtime instead of
     at the compile time to support cross-compiling.  Remove the
     internal macro ‘_Py_NORMALIZE_CENTURY’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/138489

   (2) https://github.com/python/cpython/issues/123681


File: python.info,  Node: Python 3 14 0 final,  Next: Python 3 14 0 candidato a lançamento 3,  Prev: Python seguinte,  Up: Changelog

1.24.2 Python 3.14.0 final
--------------------------

'Release date: 2025-10-07'

* Menu:

* macOS::
* Windows::
* Ferramentas/Demos: Ferramentas/Demos<2>.
* Segurança: Segurança<2>.
* Biblioteca: Biblioteca<2>.


File: python.info,  Node: macOS,  Next: Windows,  Up: Python 3 14 0 final

1.24.2.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,  Next: Ferramentas/Demos<2>,  Prev: macOS,  Up: Python 3 14 0 final

1.24.2.2 Windows
................

   - gh-139573(1): Atualizada a versão empacotada do OpenSSL para
     3.0.18.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139573


File: python.info,  Node: Ferramentas/Demos<2>,  Next: Segurança<2>,  Prev: Windows,  Up: Python 3 14 0 final

1.24.2.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-132006(2): XCframeworks agora incluem manifestos de privacidade
     para atender aos requisitos de envio da Apple App Store.

   - gh-138171(3): Foi adicionado um script para a construção de um
     framework iOS XC. Como parte dessa alteração, a pasta de nível
     superior ‘iOS’ foi movida para um subdiretório da pasta ‘Apple’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139330

   (2) https://github.com/python/cpython/issues/132006

   (3) https://github.com/python/cpython/issues/138171


File: python.info,  Node: Segurança<2>,  Next: Biblioteca<2>,  Prev: Ferramentas/Demos<2>,  Up: Python 3 14 0 final

1.24.2.4 Segurança
..................

   - gh-139400(1): *note xml.parsers.expat: 12c.: Garante que os
     analisadores Expat pais sejam coletados como lixo somente quando
     não forem mais referenciados por subanalisadores criados por *note
     ExternalEntityParserCreate(): 175f.  Patch por Sebastian Pipping.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139400


File: python.info,  Node: Biblioteca<2>,  Prev: Segurança<2>,  Up: Python 3 14 0 final

1.24.2.5 Biblioteca
...................

   - gh-139312(1): Atualiza libexpat empacotado para 2.7.3

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139312


File: python.info,  Node: Python 3 14 0 candidato a lançamento 3,  Next: Python 3 14 0 candidato a lançamento 2,  Prev: Python 3 14 0 final,  Up: Changelog

1.24.3 Python 3.14.0 candidato a lançamento 3
---------------------------------------------

'Data de lançamento: 2025-09-18'

* Menu:

* Windows: Windows<2>.
* Ferramentas/Demos: Ferramentas/Demos<3>.
* Segurança: Segurança<3>.
* Biblioteca: Biblioteca<3>.
* Núcleo e embutidos: Núcleo e embutidos<2>.


File: python.info,  Node: Windows<2>,  Next: Ferramentas/Demos<3>,  Up: Python 3 14 0 candidato a lançamento 3

1.24.3.1 Windows
................

   - gh-138896(1): Corrige erro ao instalar o runtime do C em máquinas
     Windows não atualizadas

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/138896


File: python.info,  Node: Ferramentas/Demos<3>,  Next: Segurança<3>,  Prev: Windows<2>,  Up: Python 3 14 0 candidato a lançamento 3

1.24.3.2 Ferramentas/Demos
..........................

   - gh-137873(1): 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/137873


File: python.info,  Node: Segurança<3>,  Next: Biblioteca<3>,  Prev: Ferramentas/Demos<3>,  Up: Python 3 14 0 candidato a lançamento 3

1.24.3.3 Segurança
..................

   - gh-135661(1): Corrige a análise da seção CDATA em *note
     html.parser.HTMLParser: a6d. 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/135661


File: python.info,  Node: Biblioteca<3>,  Next: Núcleo e embutidos<2>,  Prev: Segurança<3>,  Up: Python 3 14 0 candidato a lançamento 3

1.24.3.4 Biblioteca
...................

   - gh-138998(1): Atualiza libexpat empacotado para 2.7.2

   - gh-118803(2): Adiciona novamente *note collections.abc.ByteString:
     340. e *note typing.ByteString: 343.  Ambas foram removidas nas
     versões alfa, beta e candidatos a lançamento anteriores do Python
     3.14, mas sua remoção foi adiada para o Python 3.17.

   - gh-137226(3): Corrige chamadas *note typing.get_type_hints(): 8b5.
     em classes genéricas *note typing.TypedDict: 330. definidas com
     anotações de string.

   - gh-138804(4): Levanta *note TypeError: 198. em vez de *note
     AttributeError: 5e4. quando um argumento de tipo incorreto for
     passado para *note shlex.quote(): 57b.  Isso restaura o
     comportamento da função anterior à versão 3.14.

   - gh-128636(5): Corrige falha no PyREPL quando os.environ é
     substituído por um valor inválido para Mac

   - gh-138514(6): Levanta *note ValueError: 2ea. quando uma string com
     vários caracteres é passada para o parâmetro 'echo_char' de *note
     getpass.getpass(): 21c.  Patch de Benjamin Johnson.

   - gh-138515(7): *note email: 3f. é adicionado à construção
     Emscripten.

   - gh-99948(8): *note ctypes.util.find_library(): f39. agora funciona
     em construções Emscripten.

   - gh-138253(9): Adiciona o parâmetro 'block' nos métodos ‘put()’ e
     ‘get()’ das filas *note concurrent.interpreters: 25. para
     compatibilidade com a interface *note queue.Queue: 1586.

   - gh-138133(10): Evita laço infinito de traceback ao enviar CTRL^C
     para Python através de ‘strace’.

   - gh-134869(11): 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-90548(12): Corrige a detecção de ‘musl’ para *note
     platform.libc_ver(): 1766. no Alpine Linux se compilado com
     –strip-all.

   - gh-136134(13): ‘SMTP.auth_cram_md5()’ agora levanta uma *note
     SMTPException: 1197. em vez de uma *note ValueError: 2ea. se o
     Python tiver sido construído sem suporte a MD5.  Em particular,
     clientes *note SMTP: b1d. 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(14): *note IMAP4.login_cram_md5: 1767. agora levanta
     *note IMAP4.error: 1768. se a autenticação CRAM-MD5 não for
     suportada.  Patch por Bénédikt Tran.

   - gh-134953(15): Expande o tema ‘_colorize’ com ‘keyword_constant’ e
     implementa no *note repl: 48b.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/138998

   (2) https://github.com/python/cpython/issues/118803

   (3) https://github.com/python/cpython/issues/137226

   (4) https://github.com/python/cpython/issues/138804

   (5) https://github.com/python/cpython/issues/128636

   (6) https://github.com/python/cpython/issues/138514

   (7) https://github.com/python/cpython/issues/138515

   (8) https://github.com/python/cpython/issues/99948

   (9) https://github.com/python/cpython/issues/138253

   (10) https://github.com/python/cpython/issues/138133

   (11) https://github.com/python/cpython/issues/134869

   (12) https://github.com/python/cpython/issues/90548

   (13) https://github.com/python/cpython/issues/136134

   (14) https://github.com/python/cpython/issues/136134

   (15) https://github.com/python/cpython/issues/134953


File: python.info,  Node: Núcleo e embutidos<2>,  Prev: Biblioteca<3>,  Up: Python 3 14 0 candidato a lançamento 3

1.24.3.5 Núcleo e embutidos
...........................

   - gh-71810(1): Levanta *note OverflowError: a77. para
     ‘(-1).to_bytes()’ para conversões com sinal quando a contagem de
     bytes for zero.  Patch por Sergey B Kirpichev.

   - gh-138192(2): Corrige a inicialização de *note contextvars: 28.
     para que todos os subinterpretadores recebam o valor *note MISSING:
     176a.

   - gh-138479(3): Corrige uma falha quando ‘__typing_subst__’ de um
     objeto genérico retorna um objeto que não é uma *note tuple: 608.

   - gh-138372(4): Correção de *note SyntaxWarning: 1ae. emitido para
     subscrito expressão errôneo envolvendo *note literal de string
     template: 176b.  Patch por Brian Schubert.

   - gh-138318(5): O REPL padrão agora evita destacar nomes embutidos
     (por exemplo, *note set: 184. ou *note format(): 199.) quando eles
     são usados como nomes de atributos (por exemplo, em ‘value.set’ ou
     ‘text.format’).

   - gh-138349(6): Corrige falha em certos casos em que um módulo contém
     uma anotação de nível de módulo e uma compreensão.

   - gh-137384(7): Correção de uma falha ao usar o *note warnings: 118.
     módulo em um finalizador no desligamento.  Patch por Kumar Aditya .

   - gh-137883(8): Corrige recursão descontrolada ao chamar uma função
     com argumentos nomeados.

   - gh-137079(9): Correção do reconhecimento de erros de digitação em
     palavra reservada ao analisar arquivos.  Patch por Pablo Galindo.

   - gh-137728(10): Corrige o tratamento de muitas variáveis locais pelo
     JIT. Isso anteriormente causava uma falha de segmentação.

   - gh-137576(11): Correção para código-fonte incorreto exibido em
     tracebacks do REPL básico quando *note PYTHONSTARTUP: 1b8. é
     fornecido.  Patch por Adam Hartz.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/71810

   (2) https://github.com/python/cpython/issues/138192

   (3) https://github.com/python/cpython/issues/138479

   (4) https://github.com/python/cpython/issues/138372

   (5) https://github.com/python/cpython/issues/138318

   (6) https://github.com/python/cpython/issues/138349

   (7) https://github.com/python/cpython/issues/137384

   (8) https://github.com/python/cpython/issues/137883

   (9) https://github.com/python/cpython/issues/137079

   (10) https://github.com/python/cpython/issues/137728

   (11) https://github.com/python/cpython/issues/137576


File: python.info,  Node: Python 3 14 0 candidato a lançamento 2,  Next: Python 3 14 0 candidato a lançamento 1,  Prev: Python 3 14 0 candidato a lançamento 3,  Up: Changelog

1.24.4 Python 3.14.0 candidato a lançamento 2
---------------------------------------------

'Data de lançamento: 14-08-2025'

* Menu:

* macOS: macOS<2>.
* Windows: Windows<3>.
* Biblioteca: Biblioteca<4>.
* Documentação: Documentação<2>.
* Núcleo e embutidos: Núcleo e embutidos<3>.
* API C::
* Construção: Construção<2>.


File: python.info,  Node: macOS<2>,  Next: Windows<3>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.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: Biblioteca<4>,  Prev: macOS<2>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.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: Biblioteca<4>,  Next: Documentação<2>,  Prev: Windows<3>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.3 Biblioteca
...................

   - gh-137426(1): Remove a descontinuação de código de
     ‘importlib.abc.ResourceLoader’.  Ele está documentado como
     descontinuado, mas foi mantido pela retrocompatibilidade com outras
     classes em ‘importlib.abc’.

   - gh-137282(2): Corrige o preenchimento por tabulação e *note dir():
     839. em *note concurrent.futures: 24.

   - gh-137257(3): Sobe a versão do pip empacotado em ensurepip para a
     versão 25.2.

   - gh-137226(4): Corrige o comportamento de *note
     annotationlib.ForwardRef.evaluate(): 1770. quando o parâmetro
     'type_params' é passado e o nome de um parâmetro de tipo também
     está presente em um escopo envolvente.

   - gh-130522(5): Corrige *note TypeError: 198. não levantável
     levantada durante *note desligamento do interpretador: 473. no
     módulo *note threading: f3.

   - gh-137059(6): Corrige o tratamento de URLs de arquivo com uma letra
     de unidade do Windows na autoridade de URL por *note
     urllib.request.url2pathname(): 2bc.  Isso corrige uma regressão em
     versões anteriores do Python 3.14.

   - gh-130577(7): *note tarfile: e4. 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-135228(9): Quando *note dataclasses: 33. substitui uma classe
     por uma dataclass com slot, a classe original agora pode ser
     coletada como lixo novamente.  Alterações anteriores no Python 3.14
     fizeram com que essa classe permanecesse sempre em existência,
     juntamente com a classe substituta sintetizada por *note
     dataclasses: 33.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137426

   (2) https://github.com/python/cpython/issues/137282

   (3) https://github.com/python/cpython/issues/137257

   (4) https://github.com/python/cpython/issues/137226

   (5) https://github.com/python/cpython/issues/130522

   (6) https://github.com/python/cpython/issues/137059

   (7) https://github.com/python/cpython/issues/130577

   (8) https://github.com/python/cpython/issues/130577

   (9) https://github.com/python/cpython/issues/135228


File: python.info,  Node: Documentação<2>,  Next: Núcleo e embutidos<3>,  Prev: Biblioteca<4>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.4 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<3>,  Next: API C,  Prev: Documentação<2>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.5 Núcleo e embutidos
...........................

   - gh-137400(1): Corrige uma falha na construção com *note threads
     livres: 1f3. ao desabilitar a criação de perfil ou o rastreamento
     em todos os threads com *note PyEval_SetProfileAllThreads(): 776.
     ou *note PyEval_SetTraceAllThreads(): 658. ou seus equivalentes em
     Python *note threading.settrace_all_threads(): 6e4. e *note
     threading.setprofile_all_threads(): 6e5.

   - 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-137308(3): Uma docstring independente no corpo de um nó é
     otimizada como uma instrução *note pass: 17e. para garantir que o
     corpo do nó nunca fique vazio.  Caso contrário, havia um *note
     ValueError: 2ea. em *note compile(): 4ab.

   - gh-137288(4): Corrige bug em que algumas instruções de bytecode de
     uma expressão booleana não estão associadas ao manipulador de
     exceção correto.

   - gh-134291(5): Remove alguns usos mais recentes da API do macOS do
     compilador JIT para restaurar a compatibilidade com destinos de
     implantação mais antigos do OSX 10.15.

   - gh-131338(6): Desabilita verificações de limite de pilha computada
     em plataformas Linux não-glibc para corrigir travamentos em
     recursão profunda.

   - gh-136870(7): Corrige disputas de dados ao desinstrumentar o
     bytecode de objetos código executados simultaneamente em threads.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137400

   (2) https://github.com/python/cpython/issues/137314

   (3) https://github.com/python/cpython/issues/137308

   (4) https://github.com/python/cpython/issues/137288

   (5) https://github.com/python/cpython/issues/134291

   (6) https://github.com/python/cpython/issues/131338

   (7) https://github.com/python/cpython/issues/136870


File: python.info,  Node: API C,  Next: Construção<2>,  Prev: Núcleo e embutidos<3>,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.6 API C
..............

   - gh-137573(1): Marca ‘_PyOptimizer_Optimize’ como *note
     Py_NO_INLINE: 1774. para evitar travamentos de estouro de pilha no
     macOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137573


File: python.info,  Node: Construção<2>,  Prev: API C,  Up: Python 3 14 0 candidato a lançamento 2

1.24.4.7 Construção
...................

   - gh-132339(1): Adiciona suporte para OpenSSL 3.5.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132339


File: python.info,  Node: Python 3 14 0 candidato a lançamento 1,  Next: Python 3 14 0 beta 4,  Prev: Python 3 14 0 candidato a lançamento 2,  Up: Changelog

1.24.5 Python 3.14.0 candidato a lançamento 1
---------------------------------------------

'Data de lançamento: 2025-07-22'

* Menu:

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


File: python.info,  Node: Ferramentas/Demos<4>,  Next: Segurança<4>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.1 Ferramentas/Demos
..........................

   - gh-136251(1): Correções e melhorias de usabilidade para
     ‘Tools/wasm/emscripten/web_example’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136251


File: python.info,  Node: Segurança<4>,  Next: Biblioteca<5>,  Prev: Ferramentas/Demos<4>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.2 Segurança
..................

   - gh-135661(1): Corrige atributos de análise com espaços em branco ao
     redor do separador ‘=’ em *note html.parser.HTMLParser: a6d. de
     acordo com o padrão HTML5.

   - gh-118350(2): Corrige suporte ao modo de texto bruto escapável
     (elementos “textarea” e “title”) em *note html.parser.HTMLParser:
     a6d.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135661

   (2) https://github.com/python/cpython/issues/118350


File: python.info,  Node: Biblioteca<5>,  Next: Núcleo e embutidos<4>,  Prev: Segurança<4>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.3 Biblioteca
...................

   - gh-136170(1): Foi removida a propriedade não lançada
     ‘zipfile.ZipFile.data_offset’ adicionada na versão 3.14.0a7, pois
     não estava totalmente claro qual comportamento ela deveria ter em
     algumas situações, então o resultado nem sempre era o que o usuário
     esperava.

   - gh-124621(2): pyrepl agora funciona em Emscripten.

   - gh-136874(3): Descarta consulta e fragmento de URL em *note
     urllib.request.url2pathname(): 2bc.

   - gh-130645(4): Habilita ajuda de cores por padrão em *note argparse:
     7.

   - gh-136549(5): Corrige assinatura de *note threading.excepthook():
     a41.

   - gh-136523(6): Corrige *note wave.Wave_write: 335. emitindo uma
     exceção não levantável quando open a levanta.

   - gh-52876(7): Adiciona o parâmetro ‘keepends’ ausente (padrão
     ‘True’) para ‘codecs.StreamReaderWriter.readline()’ e
     ‘codecs.StreamReaderWriter.readlines()’.

   - gh-136470(8): Corrige o nome da thread padrão de *note
     concurrent.futures.InterpreterPoolExecutor: 1d2.

   - gh-136476(9): Corrige um bug que estava fazendo com que a função
     ‘get_async_stack_trace’ perdesse alguns quadros no stack trace
     (situação da pilha de execução).

   - gh-136434(10): Corrige geração de documentos de ‘UnboundItem’ em
     *note concurrent.interpreters: 25. ao executar com *note -OO: fa9.

   - gh-136380(11): LEvanta *note AttributeError: 5e4. ao acessar *note
     concurrent.futures.InterpreterPoolExecutor: 1d2. e
     subinterpretadores não estão disponíveis.

   - gh-134759(12): Corrige *note UnboundLocalError: 1724. em *note
     email.message.Message.get_payload(): 13c9. quando o payload a ser
     decodificado for um objeto *note bytes: 192.  Patch por Kliment
     Lamonov.

   - gh-134657(13): *note asyncio: b.: Remove alguns nomes privados de
     ‘asyncio.__all__’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136170

   (2) https://github.com/python/cpython/issues/124621

   (3) https://github.com/python/cpython/issues/136874

   (4) https://github.com/python/cpython/issues/130645

   (5) https://github.com/python/cpython/issues/136549

   (6) https://github.com/python/cpython/issues/136523

   (7) https://github.com/python/cpython/issues/52876

   (8) https://github.com/python/cpython/issues/136470

   (9) https://github.com/python/cpython/issues/136476

   (10) https://github.com/python/cpython/issues/136434

   (11) https://github.com/python/cpython/issues/136380

   (12) https://github.com/python/cpython/issues/134759

   (13) https://github.com/python/cpython/issues/134657


File: python.info,  Node: Núcleo e embutidos<4>,  Next: API C<2>,  Prev: Biblioteca<5>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.4 Núcleo e embutidos
...........................

   - gh-136801(1): Corrige o destaque de sintaxe do PyREPL em casos de
     correspondência após casos multilinhas.  Contribuição de Olga
     Matoula.

   - gh-136421(2): Corrige falha ao inicializar *note datetime: 34.
     simultaneamente.

   - 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-136517(4): Corrigido um erro de digitação que impedia a exibição
     de objetos não colecionáveis quando o modo *note
     gc.DEBUG_UNCOLLECTABLE: 13be. estava definido.

   - gh-136525(5): Corrige problema em que o bytecode por thread não era
     instrumentado para threads recém-criadas.

   - gh-132661(6): ‘Interpolation.expression’ agora tem um padrão, a
     string vazia.

   - gh-132661(7): Reflete a recente mudança PEP 750(8).

     Não permite a concatenação de ‘string.templatelib.Template’ e
     ‘str`’.  Também não permite a concatenação implícita de literais de
     t-string com strings e literais de f-strings.

   - gh-116738(9): Torna as funções em *note grp: 6a. seguros para
     thread na construção com *note threads livres: 1f3.

   - 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: 1f3. quando um dicionário ou lista grande é
     redimensionado e acessado por várias threads.

   - gh-91153(12): Corrige uma falha quando um *note bytearray: 342. é
     mutado simultaneamente durante a atribuição de item.

   - gh-127971(13): Corrige leituras fora de um ponto além do final de
     uma string na pesquisa de string.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136801

   (2) https://github.com/python/cpython/issues/136421

   (3) https://github.com/python/cpython/issues/136541

   (4) https://github.com/python/cpython/issues/136517

   (5) https://github.com/python/cpython/issues/136525

   (6) https://github.com/python/cpython/issues/132661

   (7) https://github.com/python/cpython/issues/132661

   (8) https://peps.python.org/pep-0750/

   (9) https://github.com/python/cpython/issues/116738

   (10) https://github.com/python/cpython/issues/135148

   (11) https://github.com/python/cpython/issues/133136

   (12) https://github.com/python/cpython/issues/91153

   (13) https://github.com/python/cpython/issues/127971


File: python.info,  Node: API C<2>,  Next: Construção<3>,  Prev: Núcleo e embutidos<4>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.5 API C
..............

   - gh-112068(1): Reverte suporte de argumentos anuláveis em *note
     PyArg_Parse(): 177c.

   - gh-133296(2): Novas variantes para a API da seção crítica que
     aceitam um ou dois ponteiros *note PyMutex: 47e. em vez de
     instâncias *note PyObject: 5d5. agora são públicas na API C não
     limitada.

   - gh-134009(3): Expõe *note PyMutex_IsLocked(): 460. como parte da
     API C pública.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112068

   (2) https://github.com/python/cpython/issues/133296

   (3) https://github.com/python/cpython/issues/134009


File: python.info,  Node: Construção<3>,  Prev: API C<2>,  Up: Python 3 14 0 candidato a lançamento 1

1.24.5.6 Construção
...................

   - gh-135621(1): O PyREPL não depende mais da biblioteca padrão *note
     curses: 2f.  Contribuição de Łukasz Langa.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135621


File: python.info,  Node: Python 3 14 0 beta 4,  Next: Python 3 14 0 beta 3,  Prev: Python 3 14 0 candidato a lançamento 1,  Up: Changelog

1.24.6 Python 3.14.0 beta 4
---------------------------

'Data de lançamento: 2025-07-08'

* Menu:

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


File: python.info,  Node: Ferramentas/Demos<5>,  Next: Testes<2>,  Up: Python 3 14 0 beta 4

1.24.6.1 Ferramentas/Demos
..........................

   - gh-135968(1): Os stubs para ‘strip’ agora são fornecidos como parte
     de uma instalação do iOS.

   - gh-133600(2): Reorganização de arquivos de backport para
     Tools/wasm/wasi.

     Isso deve facilitar fazer o backport de futuras alterações de
     código.  Também simplifica as instruções sobre como fazer
     construções WASI no guia do desenvolvedor.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135968

   (2) https://github.com/python/cpython/issues/133600


File: python.info,  Node: Testes<2>,  Next: Segurança<5>,  Prev: Ferramentas/Demos<5>,  Up: Python 3 14 0 beta 4

1.24.6.2 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.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135966

   (2) https://github.com/python/cpython/issues/135494


File: python.info,  Node: Segurança<5>,  Next: Biblioteca<6>,  Prev: Testes<2>,  Up: Python 3 14 0 beta 4

1.24.6.3 Segurança
..................

   - gh-136053(1): *note marshal: 91.: corrige uma possível falha ao
     desserializar objetos *note slice: 689.

   - gh-135661(2): Corrige a análise das tags de início e fim em *note
     html.parser.HTMLParser: a6d. 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”.

        * [Revertido em gh-136927(3)] Espaços em branco entre o
          separador ‘=’ e o nome ou valor do atributo não são mais
          ignorados.  Por exemplo, ‘<a foo =bar>’ produz dois atributos
          “foo” e “=bar”, ambos com valor None; ‘<a foo= bar>’ produz
          dois atributos: “foo” com valor “” e “bar” com valor None.

   - gh-102555(4): Corrige a análise de comentários em *note
     html.parser.HTMLParser: a6d. 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.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136053

   (2) https://github.com/python/cpython/issues/135661

   (3) https://github.com/python/cpython/issues/136927

   (4) https://github.com/python/cpython/issues/102555


File: python.info,  Node: Biblioteca<6>,  Next: Documentação<3>,  Prev: Segurança<5>,  Up: Python 3 14 0 beta 4

1.24.6.4 Biblioteca
...................

   - gh-136286(1): Corrigir falhas de serialização com pickle para os
     protocolos 0 e 1 para muitos objetos relacionados a
     subinterpretadores.

   - gh-136316(2): Melhora o suporte para avaliar referências aninhadas
     em *note typing.evaluate_forward_ref(): 1783.

   - gh-85702(3): Se ‘zoneinfo._common.load_tzdata’ receber um pacote
     sem um recurso, um *note zoneinfo.ZoneInfoNotFoundError: 1784. será
     levantada em vez de uma *note PermissionError: f32.  Patch por
     Victor Stinner.

   - gh-136028(4): Corrige a análise de nomes de meses contendo “İ”
     (U+0130, LETRA I MAIÚSCULA COM PONTO EM CIMA) em *note
     time.strptime(): 161e.  Isso afeta as localidades az_AZ, ber_DZ,
     ber_MA e crh_UA.

   - gh-135995(5): Na codificação palmos, faz o byte ‘0x9b’ ser
     decodificado para ‘›’ (U+203A - ASPAS ÚNICAS DE ÂNGULO À DIREITA).

   - gh-53203(6): Corrige *note time.strptime(): 161e. 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(7): Uma alteração anterior, introduzida na versão
     3.14.0b2, foi revertida.  Ela desabilitava o registro de um
     registrador durante o processamento de mensagens de registro para
     esse registrador.  Desde a reversão, o comportamento deve ser o
     mesmo de antes da versão 3.14.0b2.

   - gh-135878(8): Corrige uma falha de *note types.SimpleNamespace:
     4df. em construções com *note threads livres: 1f3, quando várias
     threads estavam chamando seu método *note __repr__(): 824. ao mesmo
     tempo.

   - gh-135836(9): Corrige *note IndexError: 1723. em *note
     asyncio.loop.create_connection(): 80d. que poderia ocorrer quando
     uma exceção não-*note OSError: 2bf. fosse levantada durante a
     conexão e o ‘close()’ do soquete levantasse ‘OSError’.

   - gh-135836(10): Corrige *note IndexError: 1723. em *note
     asyncio.loop.create_connection(): 80d. que poderia ocorrer quando o
     algoritmo Happy Eyeballs resultava em uma lista de exceções vazia
     durante tentativas de conexão.

   - gh-135855(11): Levanta *note TypeError: 198. em vez de *note
     SystemError: 78a. quando ‘_interpreters.set___main___attrs()’
     recebe um objeto não dict.  Patch por Brian Schubert.

   - gh-135815(12): *note netrc: 9f.: Ignora as verificações de
     segurança se *note os.getuid(): 1785. estiver ausente.  Patch por
     Bénédikt Tran.

   - gh-135640(13): Corrigido um bug que permitia chamar *note
     xml.etree.ElementTree.ElementTree.write(): c7f. em um objeto
     ElementTree com um elemento raiz inválido.  Esse comportamento
     apagava o arquivo passado para ‘write’ caso ele já existisse.

   - gh-135645(14): Adicionado campo ‘supports_isolated_interpreters’ a
     *note sys.implementation: 730.

   - gh-135646(15): Levanta exceções consistentes *note NameError: 44f.
     em *note annotationlib.ForwardRef.evaluate(): 1770.

   - gh-135557(16): Corrige corridas em atualizações de *note heapq: 6d.
     e leituras de *note list: 24c. na construção com *note threads
     livres: 1f3.

   - gh-119180(17): Busca globais e locais somente se necessário em
     *note annotationlib.get_annotations(): 456.

   - gh-135561(18): Corrige uma falha em construções DEBUG quando uma
     rotina HACL* HMAC falha.  Patch por Bénédikt Tran.

   - gh-135487(19): Corrige ‘reprlib.Repr.repr_int()’ quando são
     fornecidos inteiros com mais de *note sys.get_int_max_str_digits():
     1786. dígitos.  Patch por Bénédikt Tran.

   - gh-135335(20): *note multiprocessing: 98.: Limpa ‘stdout’ e
     ‘stderr’ após pré-carregar módulos no ‘forkserver’.

   - gh-135069(21): Corrige a exceção “Invalid error handling” em
     ‘encodings.idna.IncrementalDecoder’ para substituir corretamente o
     parâmetro ‘errors’.

   - gh-130662(22): Aceita zeros à esquerda em campos de precisão e
     largura para formatação *note Decimal: 1fd, por exemplo
     ‘format(Decimal(1.25), '.016f')’.

   - gh-130662(23): Aceita zeros à esquerda em campos de precisão e
     largura para formatação *note Fraction: 212, por exemplo
     ‘format(Fraction(1, 3), '.016f')’.

   - gh-87790(24): Adicionado suporte para sublinhado e vírgula como
     separadores de milhares na parte fracionária para a formatação de
     *note Fraction: 212.  Patch por Sergey B Kirpichev.

   - gh-87790(25): Suporte para sublinhado e vírgula como separadores de
     milhares na parte fracionária para a formatação de *note Decimal:
     1fd.  Patch por Sergey B Kirpichev.

   - gh-130664(26): Lida com maiúsculas e minúsculas para a formatação
     de *note Fraction: 212.: 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: 196.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136286

   (2) https://github.com/python/cpython/issues/136316

   (3) https://github.com/python/cpython/issues/85702

   (4) https://github.com/python/cpython/issues/136028

   (5) https://github.com/python/cpython/issues/135995

   (6) https://github.com/python/cpython/issues/53203

   (7) https://github.com/python/cpython/issues/91555

   (8) https://github.com/python/cpython/issues/135878

   (9) https://github.com/python/cpython/issues/135836

   (10) https://github.com/python/cpython/issues/135836

   (11) https://github.com/python/cpython/issues/135855

   (12) https://github.com/python/cpython/issues/135815

   (13) https://github.com/python/cpython/issues/135640

   (14) https://github.com/python/cpython/issues/135645

   (15) https://github.com/python/cpython/issues/135646

   (16) https://github.com/python/cpython/issues/135557

   (17) https://github.com/python/cpython/issues/119180

   (18) https://github.com/python/cpython/issues/135561

   (19) https://github.com/python/cpython/issues/135487

   (20) https://github.com/python/cpython/issues/135335

   (21) https://github.com/python/cpython/issues/135069

   (22) https://github.com/python/cpython/issues/130662

   (23) https://github.com/python/cpython/issues/130662

   (24) https://github.com/python/cpython/issues/87790

   (25) https://github.com/python/cpython/issues/87790

   (26) https://github.com/python/cpython/issues/130664


File: python.info,  Node: Documentação<3>,  Next: Núcleo e embutidos<5>,  Prev: Biblioteca<6>,  Up: Python 3 14 0 beta 4

1.24.6.5 Documentação
.....................

   - gh-136155(1): As construções de EPUB são corrigidas pela exclusão
     de tags não compatíveis com XHTML.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136155


File: python.info,  Node: Núcleo e embutidos<5>,  Next: API C<3>,  Prev: Documentação<3>,  Up: Python 3 14 0 beta 4

1.24.6.6 Núcleo e embutidos
...........................

   - gh-109700(1): Corrige tratamento de erro de memória em *note
     PyDict_SetDefault(): 5da.

   - gh-78465(2): 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-129958(3): Diferencia entre t-strings e f-strings em erros de
     sintaxe para novas linhas em especificadores de formato de strings
     interpoladas entre aspas simples.

   - gh-135871(4): 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: 1f3.

   - gh-135106(5): Restringe o mecanismo da lixeira aos objetos
     coletados pelo GC e cancele o rastreamento deles enquanto estiverem
     na lixeira para evitar conflitos entre os mecanismos do GC e da
     lixeira.

   - gh-135607(6): Corrige possíveis corridas *note weakref: 11a. no
     destrutor de um objeto na construção com *note threads livres: 1f3.

   - gh-135608(7): Corrige uma falha no JIT envolvendo atributos de
     módulos.

   - gh-135543(8): Emite o evento de auditoria ‘sys.remote_exec’ quando
     *note sys.remote_exec(): 16d. for chamado e migra
     ‘remote_debugger_script’ para ‘cpython.remote_debugger_script’.

   - gh-134280(9): Desabilita a dobragem constante para ‘~’ com um
     argumento booleano.  Isso move o aviso de descontinuação do tempo
     de compilação para o tempo de execução.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109700

   (2) https://github.com/python/cpython/issues/78465

   (3) https://github.com/python/cpython/issues/129958

   (4) https://github.com/python/cpython/issues/135871

   (5) https://github.com/python/cpython/issues/135106

   (6) https://github.com/python/cpython/issues/135607

   (7) https://github.com/python/cpython/issues/135608

   (8) https://github.com/python/cpython/issues/135543

   (9) https://github.com/python/cpython/issues/134280


File: python.info,  Node: API C<3>,  Next: Construção<4>,  Prev: Núcleo e embutidos<5>,  Up: Python 3 14 0 beta 4

1.24.6.7 API C
..............

   - gh-135906(1): Corrige erros de construção ao compilar os cabeçalhos
     internos com um compilador C++.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135906


File: python.info,  Node: Construção<4>,  Prev: API C<3>,  Up: Python 3 14 0 beta 4

1.24.6.8 Construção
...................

   - gh-134273(1): Adiciona suporte para configurar sinalizadores do
     compilador para o JIT com ‘CFLAGS_JIT’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134273


File: python.info,  Node: Python 3 14 0 beta 3,  Next: Python 3 14 0 beta 2,  Prev: Python 3 14 0 beta 4,  Up: Changelog

1.24.7 Python 3.14.0 beta 3
---------------------------

'Data de lançamento: 2025-06-17'

* Menu:

* Windows: Windows<4>.
* Testes: Testes<3>.
* Segurança: Segurança<6>.
* Biblioteca: Biblioteca<7>.
* Documentação: Documentação<4>.
* Núcleo e embutidos: Núcleo e embutidos<6>.
* API C: API C<4>.
* Construção: Construção<5>.


File: python.info,  Node: Windows<4>,  Next: Testes<3>,  Up: Python 3 14 0 beta 3

1.24.7.1 Windows
................

   - gh-135099(1): Corrige uma falha que poderia ocorrer no Windows
     quando uma thread em segundo plano aguarda um *note PyMutex: 47e.
     enquanto o thread principal está desligando o interpretador.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135099


File: python.info,  Node: Testes<3>,  Next: Segurança<6>,  Prev: Windows<4>,  Up: Python 3 14 0 beta 3

1.24.7.2 Testes
...............

   - gh-132815(1): Corrige test__opcode: adiciona ‘JUMP_BACKWARD’ às
     estatísticas de especialização.

   - gh-135489(2): Exibe saída detalhada para testes com falha durante a
     etapa de criação de perfil do PGO com –enable-optimizations.

   - gh-135120(3): Adiciona ‘test.support.subTests()’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132815

   (2) https://github.com/python/cpython/issues/135489

   (3) https://github.com/python/cpython/issues/135120


File: python.info,  Node: Segurança<6>,  Next: Biblioteca<7>,  Prev: Testes<3>,  Up: Python 3 14 0 beta 3

1.24.7.3 Segurança
..................

   - gh-135462(1): Corrigida a complexidade quadrática no processamento
     de entradas especialmente criadas em *note html.parser.HTMLParser:
     a6d.  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-135034(2): 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(3), CVE 2025-4138(4), CVE 2025-4330(5) e
     CVE 2025-4517(6).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135462

   (2) https://github.com/python/cpython/issues/135034

   (3) https://www.cve.org/CVERecord?id=CVE-2024-12718

   (4) https://www.cve.org/CVERecord?id=CVE-2025-4138

   (5) https://www.cve.org/CVERecord?id=CVE-2025-4330

   (6) https://www.cve.org/CVERecord?id=CVE-2025-4517


File: python.info,  Node: Biblioteca<7>,  Next: Documentação<4>,  Prev: Segurança<6>,  Up: Python 3 14 0 beta 3

1.24.7.4 Biblioteca
...................

   - gh-65697(1): A mensagem de erro do *note configparser: 26. ao
     tentar escrever uma chave inválida agora é mais útil.

   - gh-135497(2): Corrige falha em *note os.getlogin(): 1790. para
     nomes de usuários mais longos em plataformas baseadas em BSD.

   - gh-135429(3): Corrige a incompatibilidade de argumentos em
     ‘_lsprof’ para o evento ‘PY_THROW’.

   - gh-135368(4): Corrige a geração de *note unittest.mock.Mock: c34.
     em objetos *note dataclasses.dataclass(): 4db.  Agora, todos os
     atributos especiais são definidos como antes de gh-124429(5).

   - gh-133967(6): Não normaliza o nome *note locale: 8a. ‘C.UTF-8’ para
     ‘en_US.UTF-8’.

   - gh-135321(7): Levanta uma exceção correta para valores maiores que
     0x7fffffff para o opcode ‘BINSTRING’ na implementação C de *note
     pickle: ab.

   - gh-135276(8): 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-135244(9): *note uuid: 116.: quando o endereço MAC não pode ser
     determinado, o ID do nó de 48 bits agora é gerado com um gerador de
     números pseudoaleatórios criptograficamente seguro (CSPRNG),
     conforme RFC 9562, §6.10.3(10).  Isso afeta *note uuid1(): d95. e
     *note uuid6(): 2c1.

   - gh-134970(11): Corrige a exceção “ação desconhecida” em *note
     argparse.ArgumentParser.add_argument_group(): 2e9. para substituir
     corretamente a classe de ação.

   - gh-134718(12): *note ast.dump(): ad7. agora só omite os valores
     ‘None’ e ‘[]’ se forem valores padrão.

   - gh-134939(13): Adiciona o módulo *note concurrent.interpreters: 25.
     Veja PEP 734(14).

   - gh-134885(15): Corrige possível falha no módulo *note
     compression.zstd: 23. relacionada à configuração de tipos de
     parâmetros.  Patch por Jelle Zijlstra.

   - gh-134857(16): Melhoria no relatório de erros para *note doctest:
     3e. executado com *note unittest: 10c.  Remoção de quadros do
     módulo ‘doctest’ de tracebacks e caracteres de quebra de linha
     redundantes de mensagens de falha.

   - gh-128840(17): Corrige a análise de endereços IPv6 longos com
     endereço IPv4 incorporado.

   - gh-134637(18): Corrige regressão de desempenho ao chamar um
     ponteiro de função *note ctypes: 2e. em *note threads livres: 1f3.

   - gh-134696(19): Implementações HACL* e OpenSSL embutidas de
     construtores de funções hash agora aceitam corretamente os mesmos
     argumentos nomeados 'documentados'.  Por exemplo, *note md5():
     1791. 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-134151(20): *note email: 3f.: Corrige *note TypeError: 198. em
     *note email.utils.decode_params(): 1792. ao classificar
     continuações RFC 2231(21) que contêm uma seção não numerada.

   - gh-134210(22): *note curses.window.getch(): 1793. agora manipula
     sinais corretamente.  Patch por Bénédikt Tran.

   - gh-134152(23): *note email: 3f.: Corrige análise de ID de mensagem
     de e-mail com domínio inválido.

   - gh-133489(24): *note random.getrandbits(): 1203. agora pode gerar
     mais de 2^31 bits.  *note random.randbytes(): 1794. agora pode
     gerar mais de 256 MiB.

   - gh-132813(25): Melhora as mensagens de erro para tipos e valores
     incorretos de atributos *note csv.Dialect: 1795.

   - gh-132969(26): Impede que a thread executora *note
     ProcessPoolExecutor: 1d6, que permanece em execução quando *note
     shutdown(wait=False): ae0, 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-127081(27): Corrige problemas de segurança do thread libc com
     *note os: a5. substituindo ‘getlogin’ pela versão reentrante
     ‘getlogin_r’.

   - gh-131884(28): Corrige problemas de formatação em *note
     json.dump(): f34. quando 'indent' e 'skipkeys' são usados.

   - gh-130999(29): Evita sair do novo REPL e oferece sugestões mesmo se
     houver candidatos que não sejam strings quando ocorrerem erros.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/65697

   (2) https://github.com/python/cpython/issues/135497

   (3) https://github.com/python/cpython/issues/135429

   (4) https://github.com/python/cpython/issues/135368

   (5) https://github.com/python/cpython/issues/124429

   (6) https://github.com/python/cpython/issues/133967

   (7) https://github.com/python/cpython/issues/135321

   (8) https://github.com/python/cpython/issues/135276

   (9) https://github.com/python/cpython/issues/135244

   (10) 
https://datatracker.ietf.org/doc/html/rfc9562.html#section-6.10-3

   (11) https://github.com/python/cpython/issues/134970

   (12) https://github.com/python/cpython/issues/134718

   (13) https://github.com/python/cpython/issues/134939

   (14) https://peps.python.org/pep-0734/

   (15) https://github.com/python/cpython/issues/134885

   (16) https://github.com/python/cpython/issues/134857

   (17) https://github.com/python/cpython/issues/128840

   (18) https://github.com/python/cpython/issues/134637

   (19) https://github.com/python/cpython/issues/134696

   (20) https://github.com/python/cpython/issues/134151

   (21) https://datatracker.ietf.org/doc/html/rfc2231.html

   (22) https://github.com/python/cpython/issues/134210

   (23) https://github.com/python/cpython/issues/134152

   (24) https://github.com/python/cpython/issues/133489

   (25) https://github.com/python/cpython/issues/132813

   (26) https://github.com/python/cpython/issues/132969

   (27) https://github.com/python/cpython/issues/127081

   (28) https://github.com/python/cpython/issues/131884

   (29) https://github.com/python/cpython/issues/130999


File: python.info,  Node: Documentação<4>,  Next: Núcleo e embutidos<6>,  Prev: Biblioteca<7>,  Up: Python 3 14 0 beta 3

1.24.7.5 Documentação
.....................

   - gh-135171(1): Documenta que o *note iterador: 4c2. para a cláusula
     ‘for’ mais à esquerda na expressão geradora é criado imediatamente.

   - bpo-45210(2): Documenta que o indicador de erro pode ser definido
     em tp_dealloc e como evitar sobrecarregá-lo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135171

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45210


File: python.info,  Node: Núcleo e embutidos<6>,  Next: API C<4>,  Prev: Documentação<4>,  Up: Python 3 14 0 beta 3

1.24.7.6 Núcleo e embutidos
...........................

   - gh-135496(1): Corrige erro de digitação no tipo de conversão de
     f-strings (“exclamanation” -> “exclamation”).

   - gh-135371(2): Corrige as ferramentas de depuração *note asyncio: b.
     para exibir corretamente as pilhas de chamadas de corrotinas
     internas juntamente com as dependências de tarefas externas.  Os
     comandos ‘python -m asyncio ps’ e ‘python -m asyncio pstree’ agora
     mostram o contexto de execução completo.  Patch por Pablo Galindo.

   - gh-127319(3): Define a variável de classe ‘allow_reuse_port’ como
     ‘False’ nos servidores XMLRPC, de registro e HTTP. Isso corresponde
     ao comportamento das versões anteriores do Python, que era não
     permitir a reutilização de portas.

   - gh-135171(4): Reverte o comportamento de expressões geradoras
     assíncronas quando criadas com objeto sem o método __aiter__ para o
     comportamento pré-3.13 de levantar um TypeError.

   - gh-130077(5): 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-135171(6): Reverte o comportamento das expressões geradoras,
     quando criadas com um não iterável, para o comportamento anterior à
     versão 3.13, que era levantar uma exceção TypeError.  Não é mais
     possível causar uma falha no depurador alterando as variáveis
     locais da expressão geradora.  Isso é possível movendo a instrução
     ‘GET_ITER’ de volta para a criação da expressão geradora e
     adicionando uma verificação adicional a ‘FOR_ITER’.

   - gh-116738(7): Torna os métodos em *note heapq: 6d. seguros para
     thread na construção com *note threads livres: 1f3.

   - gh-134876(8): Adiciona suporte à depuração remota PEP 768(9) para
     kernels Linux que não tenham CONFIG_CROSS_MEMORY_ATTACH
     configurado.

   - gh-134889(10): Corrige o tratamento de alguns opcodes que deixam
     operandos na pilha ao otimizar ‘LOAD_FAST’.

   - gh-134908(11): Corrige falha ao iterar sobre linhas em um arquivo
     texto na construção com *note threads livres: 1f3.

   - gh-132617(12): Corrige verificação de modificação *note
     dict.update(): 1654. 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-134679(13): Corrige falha no código QSBR da construção com *note
     threads livres: 1f3. que poderia ocorrer ao alterar o atributo
     ‘__dict__’ de um objeto.

   - gh-127682(14): 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.

   - gh-133912(15): Corrige a função da API C ‘PyObject_GenericSetDict’
     para manipular classes de extensão com valores embutidos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135496

   (2) https://github.com/python/cpython/issues/135371

   (3) https://github.com/python/cpython/issues/127319

   (4) https://github.com/python/cpython/issues/135171

   (5) https://github.com/python/cpython/issues/130077

   (6) https://github.com/python/cpython/issues/135171

   (7) https://github.com/python/cpython/issues/116738

   (8) https://github.com/python/cpython/issues/134876

   (9) https://peps.python.org/pep-0768/

   (10) https://github.com/python/cpython/issues/134889

   (11) https://github.com/python/cpython/issues/134908

   (12) https://github.com/python/cpython/issues/132617

   (13) https://github.com/python/cpython/issues/134679

   (14) https://github.com/python/cpython/issues/127682

   (15) https://github.com/python/cpython/issues/133912


File: python.info,  Node: API C<4>,  Next: Construção<5>,  Prev: Núcleo e embutidos<6>,  Up: Python 3 14 0 beta 3

1.24.7.7 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(): 1799. e *note
     PyObject_DelAttrString(): 179a. como macros na API C limitada 3.12
     e anteriores.  Patch por Victor Stinner.

   - gh-133968(3): Adiciona a função *note PyUnicodeWriter_WriteASCII():
     3b6. para escrever uma string ASCII em um *note PyUnicodeWriter:
     3b0.  A função é mais rápida que *note PyUnicodeWriter_WriteUTF8():
     3bc, mas tem um comportamento indefinido se a string de entrada
     contiver caracteres não ASCII. Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134989

   (2) https://github.com/python/cpython/issues/134989

   (3) https://github.com/python/cpython/issues/133968


File: python.info,  Node: Construção<5>,  Prev: API C<4>,  Up: Python 3 14 0 beta 3

1.24.7.8 Construção
...................

   - gh-119132(1): Remove a tag “experimental” da construção com threads
     livres do CPython.

   - gh-135497(2): Corrige a detecção de ‘MAXLOGNAME’ no script
     ‘configure.ac’.

   - gh-134923(3): 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-134774(4): Corrige os avisos de redefinição da macro *note
     Py_DEBUG: 179c. em construções de depuração do Windows.  Patch por
     Chris Eibl.

   - gh-134632(5): Corrigida a geração de ‘build-details.json’ para usar
     ‘INCLUDEPY’, a fim de referenciar o subdiretório ‘pythonX.Y’ do
     diretório include, conforme exigido em PEP 739(6), em vez do
     diretório include de nível superior.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119132

   (2) https://github.com/python/cpython/issues/135497

   (3) https://github.com/python/cpython/issues/134923

   (4) https://github.com/python/cpython/issues/134774

   (5) https://github.com/python/cpython/issues/134632

   (6) https://peps.python.org/pep-0739/


File: python.info,  Node: Python 3 14 0 beta 2,  Next: Python 3 14 0 beta 1,  Prev: Python 3 14 0 beta 3,  Up: Changelog

1.24.8 Python 3.14.0 beta 2
---------------------------

'Data de lançamento: 2025-05-26'

* Menu:

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


File: python.info,  Node: Windows<5>,  Next: Ferramentas/Demos<6>,  Up: Python 3 14 0 beta 2

1.24.8.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(): 261. ignore o
     erro 1005 do Windows quando estiver no modo não estrito.

   - gh-133779(3): Reverte a alteração para gerar arquivos ‘pyconfig.h’
     diferentes com base nas configurações do compilador, pois isso
     frequentemente causava falhas nas construções de extensões.  Em
     particular, a variável de pré-processador ‘Py_GIL_DISABLED’ agora
     deve ser sempre definida explicitamente ao compilar para o tempo de
     execução experimental de threads livres.  A função *note
     sysconfig.get_config_var(): 174. pode ser usada para determinar se
     o tempo de execução atual foi compilado com esse sinalizador ou
     não.

   - gh-133626(4): Garante que os pacotes não sejam acidentalmente
     agrupados no instalador tradicional.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130727

   (2) https://github.com/python/cpython/issues/76023

   (3) https://github.com/python/cpython/issues/133779

   (4) https://github.com/python/cpython/issues/133626


File: python.info,  Node: Ferramentas/Demos<6>,  Next: Testes<4>,  Prev: Windows<5>,  Up: Python 3 14 0 beta 2

1.24.8.2 Ferramentas/Demos
..........................

   - gh-134215(1): Autopreenchimento de importação do *note REPL: 48b.
     sugere apenas módulos privados quando explicitamente especificado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134215


File: python.info,  Node: Testes<4>,  Next: Segurança<7>,  Prev: Ferramentas/Demos<6>,  Up: Python 3 14 0 beta 2

1.24.8.3 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-133682(2): Corrigido caso de teste
     ‘test.test_annotationlib.TestStringFormat.test_displays’ que
     garante o tratamento adequado de estruturas de dados complexas
     (listas, conjuntos, dicionários e tuplas) em anotações de string.

   - gh-133639(3): Corrige
     ‘TestPyReplAutoindent.test_auto_indent_default()’ não executar
     ‘input_code’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133744

   (2) https://github.com/python/cpython/issues/133682

   (3) https://github.com/python/cpython/issues/133639


File: python.info,  Node: Segurança<7>,  Next: Biblioteca<8>,  Prev: Testes<4>,  Up: Python 3 14 0 beta 2

1.24.8.4 Segurança
..................

   - gh-133767(1): Corrige uso após liberação no decodificador
     “unicode-escape” com um tratador de erros não “estrito”.

   - gh-128840(2): Faz um curto-circuito no processamento de endereços
     IPv6 longos no início de *note ipaddress: 84. para evitar consumo
     excessivo de memória e uma pequena negação de serviço.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133767

   (2) https://github.com/python/cpython/issues/128840


File: python.info,  Node: Biblioteca<8>,  Next: Núcleo e embutidos<7>,  Prev: Segurança<7>,  Up: Python 3 14 0 beta 2

1.24.8.5 Biblioteca
...................

   - gh-132710(1): Se possível, garante que *note uuid.getnode(): d94.
     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-80334(2): *note multiprocessing.freeze_support(): 17a3. agora
     verifica o trabalho em qualquer plataforma de método de
     inicialização “spawn”, em vez de apenas no Windows.

   - gh-134582(3): Corrige erros de ida e volta de tokenize.untokenize()
     relacionados a chaves de escape de t-strings

   - gh-134546(4): Garante que o script de depuração remota *note pdb:
     aa. seja legível pelo processo Python remoto.

   - gh-134451(5): Convertido ‘asyncio.tools.CycleFoundException’ de
     dataclass para um tipo de exceção regular.

   - gh-114177(6): Corrige *note asyncio: b. para não fechar
     encadeamentos de subprocesso, o que de outra forma geraria erro
     quando o laço de eventos já estivesse fechado.

   - gh-90871(7): Corrigido um erro de um erro referente ao parâmetro
     backlog em *note create_unix_server(): 4c4.  Contribuição de
     Christian Harries.

   - gh-134323(8): Corrige o método *note threading.RLock.locked():
     17a4.

   - gh-86802(9): Corrigido vazamento de memória assíncrona em tarefas
     de escudo canceladas.  Para tarefas protegidas em que o escudo foi
     cancelado, registre possíveis exceções por meio do tratador de
     exceções.  Contribuição de Christian Harries.

   - gh-134209(10): *note curses: 2f.: Os métodos *note
     curses.window.instr(): 17a5. e *note curses.window.getstr(): 17a6.
     agora alocam seu buffer interno no heap em vez da heap; além disso,
     o tamanho máximo do buffer foi aumentado de 1023 para 2047.

   - gh-134235(11): Atualizada a complementação de tabulação no REPL
     para incluir módulos embutidos.  Contribuição de Tom Wang e Hunter
     Young.

   - gh-134152(12): Corrigida *note UnboundLocalError: 1724. que poderia
     ocorrer durante a análise do cabeçalho *note email: 3f. se um
     delimitador final esperado estivesse faltando em alguns contextos.

   - gh-134168(13): *note http.server: 76.: Corrige a ligação de
     endereço IPv6 e tratamento de *note -directory: 17a7. ao usar
     HTTPS.

   - gh-62184(14): Remove a importação da implementação C de *note
     io.FileIO: 150b. da implementação Python que tem sua própria
     implementação

   - gh-133982(15): Emite *note RuntimeWarning: 4d1. na implementação
     Python de *note io: 83. quando o *note objeto arquivo ou similar:
     13bf. não for fechado explicitamente na presença de múltiplas
     camadas de E/S.

   - gh-133890(16): O módulo *note tarfile: e4. agora manipula *note
     UnicodeEncodeError: 87c. da mesma forma que *note OSError: 2bf.
     quando não é possível extrair um membro.

   - gh-134097(17): Corrige interação da *note REPL: 48b. e a nova opção
     de linha de comando *note -X showrefcount: 16f.

   - gh-133889(18): A página de listagem de diretório gerada em *note
     http.server.SimpleHTTPRequestHandler: d2c. agora mostra apenas o
     componente do caminho decodificado da URL solicitada, e não a
     consulta e o fragmento.

   - gh-134098(19): Corrige caminhos de manipulação que terminam com uma
     barra codificada em porcentagem (‘%2f’ ou ‘%2F’) em *note
     http.server.SimpleHTTPRequestHandler: d2c.

   - gh-132124(20): Em sistemas compatíveis com POSIX,
     ‘multiprocessing.util.get_temp_dir()’ agora ignora ‘TMPDIR’ (e
     variáveis de ambiente semelhantes) se o comprimento do caminho dos
     arquivos de soquete ‘AF_UNIX’ exceder o comprimento máximo
     específico da plataforma ao usar o método de inicialização *note
     forkserver: 1d4.  Patch por Bénédikt Tran.

   - gh-134062(21): *note ipaddress: 84.: corrige colisões em *note
     __hash__(): ce6. para objetos *note IPv4Network: 508. e *note
     IPv6Network: 509.

   - gh-133970(22): Torna ‘string.templatelib.Template’ e
     ‘string.templatelib.Interpolation’ genéricos.

   - gh-71253(23): Levanta *note ValueError: 2ea. em *note open(): 314.
     se 'opener' retornar um descritor de arquivo negativo na
     implementação Python de *note io: 83. para corresponder à
     implementação C.

   - gh-133960(24): Simplifica e aprimora *note
     typing.evaluate_forward_ref(): 1783.  Agora, ele não levanta mais
     erros em determinados tipos inválidos.  Em diversas situações,
     agora é possível avaliar referências futuras que antes não eram
     suportadas.

   - gh-133925(25): Torna a classe privada ‘typing._UnionGenericAlias’
     hasheável.

   - gh-133653(26): Corrige *note argparse.ArgumentParser: 1bd. com o
     argumento 'formatter_class'.  Corrige TypeError quando
     'formatter_class' for uma subclasse personalizada de
     ‘HelpFormatter’.  Corrige TypeError quando 'formatter_class' não
     for uma subclasse de ‘HelpFormatter’ e 'prefix_char' não padrão for
     usado.  Corrige suporte à colorização quando 'formatter_class' não
     for uma subclasse de ‘HelpFormatter’.

   - gh-132641(27): Corrigida uma corrida em *note
     functools.lru_cache(): bd8. em threads livres.

   - gh-133783(28): Corrige bug ao aplicar *note copy.replace(): 1c0. a
     objetos *note ast: 9.  Atributos cujo padrão é ‘None’ eram tratados
     incorretamente como obrigatórios para nós de AST criados
     manualmente.

   - gh-133684(29): Corrige bug em que *note
     annotationlib.get_annotations(): 456. retornaria o resultado errado
     para determinadas classes que fazem parte de uma hierarquia de
     classes onde ‘from __future__ import annotations’ é usado.

   - gh-77057(30): Corrige o tratamento de declarações de marcação
     inválidas em *note html.parser.HTMLParser: a6d.

   - gh-130328(31): Aceleração da colagem em ‘PyREPL’ no Windows em um
     console antigo.  Patch por Chris Eibl.

   - gh-133701(32): Corrige bug onde classes *note typing.TypedDict:
     330. definidas em ‘from __future__ import annotations’ e herdadas
     de outro ‘TypedDict’ tinham um atributo ‘__annotations__’
     incorreto.

   - gh-133581(33): Melhoria na desanálise de t-strings em *note
     ast.unparse(): ad8. e ‘from __future__ import annotations’.
     T-strings vazias agora realizam a ida e volta corretamente e a
     formatação em interpolações é preservada.  Patch por Jelle
     Zijlstra.

   - gh-133551(34): Suporte a t-strings ( PEP 750(35)) em *note
     annotationlib: 6.  Patch por Jelle Zijlstra.

   - gh-133439(36): Corrige comandos ponto com espaços à direita são
     confundidos com instruções SQL multilinha na interface de linha de
     comando sqlite3.

   - gh-132493(37): Evita acessar ‘__annotations__’ desnecessariamente
     em *note inspect.signature(): 22e.

   - gh-132876(38): ‘ldexp()’ no Windows não arredonda resultados abaixo
     do normal antes do Windows 11, mas deveria.  O invólucro de *note
     math.ldexp(): 17a8. 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-133009(39): *note xml.etree.ElementTree: 12b.: Corrige uma falha
     em *note Element.__deepcopy__: 1757. quando o elemento sofre
     mutação simultânea.  Patch por Bénédikt Tran.

   - gh-91555(40): 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-125028(41): *note functools.Placeholder: 215. não pode ser
     passado para *note functools.partial(): 216. como um argumento
     nomeado.

   - gh-62824(42): Correção de apelidos para codificação ‘iso8859_8’.
     Patch por Dave Goncalves.

   - gh-86155(43): *note html.parser.HTMLParser.close(): 17a9. não perde
     mais dados quando a tag ‘<script>’ não está fechada.  Patch por
     Waylan Limberg.

   - gh-69426(44): Corrige *note html.parser.HTMLParser: a6d. 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-28494(45): Melhora a taxa de falsos positivos na validação de
     arquivo Zip em *note zipfile.is_zipfile(): 1525.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132710

   (2) https://github.com/python/cpython/issues/80334

   (3) https://github.com/python/cpython/issues/134582

   (4) https://github.com/python/cpython/issues/134546

   (5) https://github.com/python/cpython/issues/134451

   (6) https://github.com/python/cpython/issues/114177

   (7) https://github.com/python/cpython/issues/90871

   (8) https://github.com/python/cpython/issues/134323

   (9) https://github.com/python/cpython/issues/86802

   (10) https://github.com/python/cpython/issues/134209

   (11) https://github.com/python/cpython/issues/134235

   (12) https://github.com/python/cpython/issues/134152

   (13) https://github.com/python/cpython/issues/134168

   (14) https://github.com/python/cpython/issues/62184

   (15) https://github.com/python/cpython/issues/133982

   (16) https://github.com/python/cpython/issues/133890

   (17) https://github.com/python/cpython/issues/134097

   (18) https://github.com/python/cpython/issues/133889

   (19) https://github.com/python/cpython/issues/134098

   (20) https://github.com/python/cpython/issues/132124

   (21) https://github.com/python/cpython/issues/134062

   (22) https://github.com/python/cpython/issues/133970

   (23) https://github.com/python/cpython/issues/71253

   (24) https://github.com/python/cpython/issues/133960

   (25) https://github.com/python/cpython/issues/133925

   (26) https://github.com/python/cpython/issues/133653

   (27) https://github.com/python/cpython/issues/132641

   (28) https://github.com/python/cpython/issues/133783

   (29) https://github.com/python/cpython/issues/133684

   (30) https://github.com/python/cpython/issues/77057

   (31) https://github.com/python/cpython/issues/130328

   (32) https://github.com/python/cpython/issues/133701

   (33) https://github.com/python/cpython/issues/133581

   (34) https://github.com/python/cpython/issues/133551

   (35) https://peps.python.org/pep-0750/

   (36) https://github.com/python/cpython/issues/133439

   (37) https://github.com/python/cpython/issues/132493

   (38) https://github.com/python/cpython/issues/132876

   (39) https://github.com/python/cpython/issues/133009

   (40) https://github.com/python/cpython/issues/91555

   (41) https://github.com/python/cpython/issues/125028

   (42) https://github.com/python/cpython/issues/62824

   (43) https://github.com/python/cpython/issues/86155

   (44) https://github.com/python/cpython/issues/69426

   (45) https://bugs.python.org/issue?@action=redirect&bpo=28494


File: python.info,  Node: Núcleo e embutidos<7>,  Next: API C<5>,  Prev: Biblioteca<8>,  Up: Python 3 14 0 beta 2

1.24.8.6 Núcleo e embutidos
...........................

   - gh-134381(1): Corrige *note RuntimeError: 243. ao usar um *note
     threading.Thread: 176. não iniciado após chamar *note os.fork():
     4af.

   - gh-127960(2): O shell interativo do PyREPL não inicia mais com os
     nomes globais ‘__package__’ e ‘__file__’ definidos como internos do
     pacote ‘_pyrepl’.  Contribuição de Yuichiro Tachibana.

   - gh-130397(3): Remove o uso de maiúsculas e minúsculas especiais
     para os limites de profundidade da pilha C para WASI. Devido à
     proteção de pilha embutida do WebAssembly, isso não representa um
     problema de segurança.

   - gh-128066(4): 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-69605(5): Ao completar automaticamente uma importação no *note
     REPL: 48b, não encontrar candidatos agora não emite nenhuma
     sugestão, em vez de sugestões do espaço de nomes atual.

   - gh-134158(6): Corrige a coloração de chaves duplas em f-strings e
     t-strings no *note REPL: 48b.

   - gh-134119(7): Corrige falha ao chamar *note next(): 9ce. em um
     iterador de string template esgotado.  Patch por Jelle Zijlstra.

   - gh-134100(8): Corrige um bug de uso após liberação que ocorre
     quando um módulo importado não está em *note sys.modules: 17ab.
     após sua importação inicial.  Patch por Nico-Posada.

   - gh-133999(9): Corrige regressão *note SyntaxError: 18e. na análise
     de *note except: 1ab. após gh-123440(10).

   - gh-133886(11): Corrige *note sys.remote_exec(): 16d. para caminhos
     não-ASCII em localidades não-UTF-8 e caminhos não-UTF-8 em
     localidades UTF-8.

   - gh-133703(12): Corrige que a tabela de hash no dicionário pode ser
     maior do que o pretendido em algumas situações.

   - gh-133778(13): Corrige bug onde atribuir a atributos *note
     __annotations__: 17ac. de classes definidas em ‘from __future__
     import annotations’ não tinham efeito.

   - gh-132762(14): *note fromkeys(): 24d. 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-133541(15): Indentação inconsistente na entrada do usuário
     travava o novo REPL quando o realce de sintaxe estava ativo.  Isso
     já foi corrigido.

   - gh-133516(16): Levanta *note ValueError: 2ea. quando as constantes
     ‘True’, ‘False’ ou ‘None’ forem usadas como um identificador após a
     normalização NFKC.

   - gh-132542(17): Atualiza *note Thread.native_id: c28. após
     ‘fork(2)(18)’ para garantir a precisão.  Patch por Noam Cohen.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134381

   (2) https://github.com/python/cpython/issues/127960

   (3) https://github.com/python/cpython/issues/130397

   (4) https://github.com/python/cpython/issues/128066

   (5) https://github.com/python/cpython/issues/69605

   (6) https://github.com/python/cpython/issues/134158

   (7) https://github.com/python/cpython/issues/134119

   (8) https://github.com/python/cpython/issues/134100

   (9) https://github.com/python/cpython/issues/133999

   (10) https://github.com/python/cpython/issues/123440

   (11) https://github.com/python/cpython/issues/133886

   (12) https://github.com/python/cpython/issues/133703

   (13) https://github.com/python/cpython/issues/133778

   (14) https://github.com/python/cpython/issues/132762

   (15) https://github.com/python/cpython/issues/133541

   (16) https://github.com/python/cpython/issues/133516

   (17) https://github.com/python/cpython/issues/132542

   (18) https://manpages.debian.org/fork(2)


File: python.info,  Node: API C<5>,  Next: Construção<6>,  Prev: Núcleo e embutidos<7>,  Up: Python 3 14 0 beta 2

1.24.8.7 API C
..............

   - gh-134144(1): Corrige falha ao chamar *note Py_EndInterpreter():
     17ae. com um *note estado de thread: 17af. que não é a thread
     inicial do interpretador.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134144


File: python.info,  Node: Construção<6>,  Prev: API C<5>,  Up: Python 3 14 0 beta 2

1.24.8.8 Construção
...................

   - gh-134455(1): Corrigida a geração de ‘build-details.json’ para usar
     o ‘c_api.headers’ correto, conforme definido em PEP 739(2), em vez
     de ‘c_api.include’.

   - gh-131769(3): Corrige a detecção de quando a construção Python em
     uma construção cruzada é uma construção de pydebug.

   - gh-117088(4): O ligador AIX não oferece suporte à opção -h,
     portanto, evita-a por meio da verificação da plataforma

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134455

   (2) https://peps.python.org/pep-0739/

   (3) https://github.com/python/cpython/issues/131769

   (4) https://github.com/python/cpython/issues/117088


File: python.info,  Node: Python 3 14 0 beta 1,  Next: Python 3 14 0 alpha 7,  Prev: Python 3 14 0 beta 2,  Up: Changelog

1.24.9 Python 3.14.0 beta 1
---------------------------

'Data de lançamento: 2025-05-06'

* Menu:

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


File: python.info,  Node: Windows<6>,  Next: Ferramentas/Demos<7>,  Up: Python 3 14 0 beta 1

1.24.9.1 Windows
................

   - gh-132930(1): Marca o instalador para Windows como descontinuado e
     atualiza a documentação para abranger o novo gerenciador de
     instalação do Python.

   - gh-127405(2): Adiciona ‘ABIFLAGS’ a *note
     sysconfig.get_config_vars(): 297. no Windows.  Patch por Xuehai
     Pan.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132930

   (2) https://github.com/python/cpython/issues/127405


File: python.info,  Node: Ferramentas/Demos<7>,  Next: Testes<5>,  Prev: Windows<6>,  Up: Python 3 14 0 beta 1

1.24.9.2 Ferramentas/Demos
..........................

   - gh-130453(1): Permite a passagem de múltiplos argumentos nomeados
     com o mesmo nome de função em ‘pygettext’.

   - gh-130195(2): Adiciona mensagens de aviso quando a opção não
     implementada ‘-a/--extract-all’ do ‘pygettext’ for chamada.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130453

   (2) https://github.com/python/cpython/issues/130195


File: python.info,  Node: Testes<5>,  Next: Segurança<8>,  Prev: Ferramentas/Demos<7>,  Up: Python 3 14 0 beta 1

1.24.9.3 Testes
...............

   - gh-133131(1): 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-91048(2): Adiciona a capacidade de inspecionar externamente
     todas as tarefas asyncio pendentes, mesmo que nenhuma tarefa esteja
     inserida no laço de eventos.

   - gh-109981(3): 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.

   - gh-132678(4): Adiciona ‘--prioritize’ a ‘-m test’.  Esta opção
     permite ao usuário especificar quais testes selecionados devem ser
     executados primeiro, mesmo que a ordem seja aleatória.  Isso é
     particularmente útil para testes que demoram mais tempo para serem
     executados.

   - gh-131290(5): Os testes em ‘Lib/test’ agora podem ser executados
     corretamente como scripts independentes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133131

   (2) https://github.com/python/cpython/issues/91048

   (3) https://github.com/python/cpython/issues/109981

   (4) https://github.com/python/cpython/issues/132678

   (5) https://github.com/python/cpython/issues/131290


File: python.info,  Node: Segurança<8>,  Next: Biblioteca<9>,  Prev: Testes<5>,  Up: Python 3 14 0 beta 1

1.24.9.4 Segurança
..................

   - gh-115322(1): Os módulos de extensão subjacentes a *note readline:
     bf.:, *note subprocess: dc. e *note ctypes: 2e. agora levantam
     eventos de auditoria em caminhos de código previamente descobertos,
     que podem levar ao acesso ao sistema de arquivos relacionado à
     chamada de função C e à execução de binários externos.  O gancho de
     auditoria ‘ctypes.call_function’ também foi corrigido para usar um
     valor sem sinal para seu ‘function pointer’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115322


File: python.info,  Node: Biblioteca<9>,  Next: IDLE<4>,  Prev: Segurança<8>,  Up: Python 3 14 0 beta 1

1.24.9.5 Biblioteca
...................

   - gh-133490(1): Adiciona suporte de cores ao PDB no modo remoto.

   - gh-132493(2): Evita avaliar ansiosamente anotações em funções
     decoradas com *note reprlib.recursive_repr(): 13ef.

   - gh-130645(3): Adiciona cor às CLIs de argparse da stdlib.  Patch
     por Hugo van Kemenade.

   - gh-119180(4): Faz com que *note annotationlib.get_annotations():
     456. tenha sucesso com o formato ‘FORWARDREF’ se a avaliação das
     anotações gerar uma exceção diferente de *note NameError: 44f. ou
     *note AttributeError: 5e4.

   - gh-133351(5): Corrige o PDB remoto para solicitar corretamente a
     conclusão de tabulações para expressões Python do servidor ao
     concluir uma linha de continuação de um bloco Python de várias
     linhas.

   - gh-133367(6): Adiciona as opções ‘--feature-version’, ‘--optimize’
     e ‘--show-empty’ à interface de linha de comando *note ast: 9.
     Patch por Semyon Moroz.

   - gh-133363(7): A classe *note cmd.Cmd: 17b7. foi corrigida para
     chamar de forma confiável o método ‘completedefault’ sempre que o
     método ‘do_shell’ não estiver definido e a conclusão da tabulação
     for solicitada para uma linha que começa com ‘!’.

   - gh-113081(8): Realça a sintaxe no código-fonte em *note pdb: aa.

   - gh-133349(9): Introduzida a indentação automática na entrada
     multilinha *note pdb: aa.

   - gh-133306(10): Usa ‘\z’ em vez de ‘\Z’ em *note
     fnmatch.translate(): 17b8. e *note glob.translate(): 4f5.

   - gh-133306(11): Suporte a ‘\z’ como sinônimo de ‘\Z’ em *note
     expressões regulares: be.

   - gh-133300(12): Torna ‘suggest_on_error’ de *note
     argparse.ArgumentParser: 1bd. um parâmetro somente-nomeado.  Patch
     por Hugo van Kemenade.

   - gh-133290(13): Corrige problema de armazenamento em cache de
     atributo ao definir *note ctypes._Pointer._type_: 17b9. na função
     não documentada e descontinuada ‘ctypes.SetPointerType()’ e no
     método não documentado ‘set_type()’.

   - gh-133223(14): Quando o PDB estiver anexado a um processo remoto,
     faz um trabalho melhor de interceptar Ctrl+C e encaminhá-lo ao
     processo remoto.

   - gh-133153(15): Não conclui os comandos *note pdb: aa. no modo
     ‘interact’ do *note pdb: aa.

   - gh-133139(16): Adiciona a função *note
     curses.assume_default_colors(): 1f5, um refinamento da função *note
     curses.use_default_colors(): 1f6. que permite alterar o par de
     cores ‘0’.

   - gh-133089(17): Usa o valor de tempo limite original para *note
     subprocess.TimeoutExpired: 17ba. quando a função *note
     subprocess.run(): d73. 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-133036(18): *note codecs.open(): 313. está descontinuada.  Em
     vez disso, use *note open(): 314.  Contribuição de Inada Naoki.

   - gh-132987(19): Muitas funções embutidas e de extensão que aceitam
     um argumento inteiro sem sinal agora usam *note __index__(): 19e.
     se disponível.

   - gh-124703(20): Define o código de retorno como ‘1’ ao abortar o
     processo de *note pdb: aa.

   - gh-133005(21): Suporte à passagem da opção ‘preset’ para *note
     tarfile.open(): 106d. ao usar o modo ‘'w|xz'’.

   - gh-115032(22): O suporte para manipuladores de registro
     personalizados com o argumento 'strm' foi descontinuado e está
     programado para ser removido no Python 3.16.  Em vez disso, defina
     manipuladores com o argumento 'stream'.  Patch por Mariusz
     Felisiak.

   - gh-132991(23): Adiciona a constante ‘socket.IP_FREEBIND’ no Linux
     2.4 e posteriores.

   - gh-132995(24): Aumenta a versão do pip incluído no EnsurePip para a
     versão 25.1.1

   - gh-132933(25): O módulo zipapp agora aplica o filtro ao criar a
     lista de arquivos a serem adicionados, em vez de esperar até que o
     arquivo seja adicionado ao arquivo.

   - gh-121249(26): Sempre suporte os tipos C float complex e double
     complex no módulo *note struct: db.  Patch por Sergey B Kirpichev.

   - gh-132915(27): *note fcntl.fcntl(): 17bb. e *note fcntl.ioctl():
     1669. agora podem detectar um estouro de buffer e levantar *note
     SystemError: 78a.  A pilha e a memória podem ser corrompidas nesse
     caso, portanto, trata esse erro como fatal.

   - gh-132017(28): Corrige erro quando ‘pyrepl’ é suspenso e depois
     retomado e encerrado.

   - gh-132893(29): Precisão aprimorada de *note
     statistics.NormalDist.cdf(): 17bc. para entradas menores que a
     média.

   - gh-130328(30): Aceleração da colagem em ‘PyREPL’ no Windows.
     Correção por Chris Eibl.

   - gh-132882(31): Corrige a cópia de objetos *note typing.Union: 2a7.
     contendo objetos que não oferecem o suporte ao operador ‘|’.

   - gh-93696(32): Corrigido o erro de exibição do ponto de interrupção
     para módulos congelados em *note pdb: aa.

   - gh-129965(33): Adiciona tipos MIME para ‘.7z’, ‘.apk’, ‘.deb’,
     ‘.glb’, ‘.gltf’, ‘.gz’, ‘.m4v’, ‘.php’, ‘.rar’, ‘.rpm’, ‘.stl’ e
     ‘.wmv’.  Patch por Hugo van Kemenade.

   - gh-132742(34): *note fcntl.fcntl(): 17bb. agora oferece suporte a
     *note objetos bytes ou similares: 193. arbitrários, não apenas
     *note bytes: 192.  *note fcntl.ioctl(): 1669. agora tenta novamente
     chamadas de sistema que falham com EINTR e libera a GIL durante uma
     chamada de sistema, mesmo para grandes objetos bytes ou similares.

   - gh-132451(35): A CLI do depurador PDB agora aceita o argumento ‘-p
     PID’ para permitir a anexação a um processo em execução.  O
     processo deve estar executando a mesma versão do Python que o PDB.

   - gh-125618(36): Adiciona um parâmetro 'format' a *note
     annotationlib.ForwardRef.evaluate(): 1770.  A avaliação de
     anotações no formato ‘FORWARDREF’ agora é bem-sucedida em mais
     casos que antes levantavam uma exceção.

   - gh-132805(37): Corrige tratamento incorreto de valores não
     constantes aninhados no formato FORWARDREF em *note annotationlib:
     6.

   - gh-132734(38): Adiciona novas constantes para Bluetooth *note
     sockets: d1.

   - gh-132673(39): Corrige *note AssertionError: 8ad. levantada em
     *note ctypes.Structure: 1e4. com ‘_align_ = 0’ e ‘_fields_ = []’.

   - gh-132578(40): Renomeia o campo ‘threading.Thread._handle’ para
     evitar sombrear métodos definidos em subclasses de
     ‘threading.Thread’.

   - gh-132561(41): Corrige o método público ‘locked’ da classe
     ‘multiprocessing.SemLock’.  Adiciona também 2 testes para as
     classes derivadas *note multiprocessing.Lock: 17bd. e *note
     multiprocessing.RLock: 17be.

   - gh-121468(42): Adiciona a função *note pdb.set_trace_async(): 278.
     para oferece suporte a instruções *note await: 18d. em *note pdb:
     aa.

   - gh-132493(43): *note typing.Protocol: 564. agora usa *note
     annotationlib.get_annotations(): 456. ao verificar se uma instância
     implementa ou não o protocolo com *note isinstance(): 2ac.  Isso
     habilita o suporte para verificações ‘isinstance’ em classes com
     anotações adiadas.

   - gh-132536(44): Não desabilitar o evento *note PY_THROW: 17bf. em
     *note bdb: 10. porque ele não pode ser desabilitado.

   - gh-132527(45): Inclui o typecode válido ‘w’ na mensagem de erro
     quando um typecode inválido for passado para *note array.array:
     4b8.

   - gh-132099(46): O soquete Bluetooth com o protocolo *note
     BTPROTO_HCI: 280. no Linux agora aceita um endereço no formato de
     um inteiro ‘device_id’, não apenas uma tupla ‘(device_id,)’.

   - gh-81793(47): Corrige *note os.link(): 12eb. em plataformas (como
     Linux) onde a função de sistema ‘link()’ não segue links
     simbólicos.  No Linux, agora ela segue links simbólicos por padrão
     ou se ‘follow_symlinks=True’ for especificado.  No Windows, agora
     levanta um erro se ‘follow_symlinks=True’ for passado.  No macOS,
     agora levanta um erro se ‘follow_symlinks=False’ for passado e a
     função de sistema ‘linkat()’ não estiver disponível em tempo de
     execução.

   - gh-132493(48): Suporte à criação de classes *note typing.Protocol:
     564. com anotações que não podem ser resolvidas no momento da
     criação da classe.

   - gh-132491(49): Renomeia ‘annotationlib.value_to_string’ para *note
     annotationlib.type_repr(): 17c0. e forneça melhor tratamento para
     objetos função.

   - gh-132426(50): Adiciona *note
     annotationlib.get_annotate_from_class_namespace(): 458. como um
     auxiliar para acessar anotações em metaclasses e remova
     ‘annotationlib.get_annotate_function’.

   - gh-70145(51): Adiciona suporte para canais no protocolo Bluetooth
     HCI (*note BTPROTO_HCI: 280.).

   - gh-131913(52): Adiciona uma função de atalho *note
     multiprocessing.Process.interrupt(): 250. junto com as existentes
     *note multiprocessing.Process.terminate(): 17c1. e *note
     multiprocessing.Process.kill(): d43. para um controle melhorado
     sobre o término do processo filho.

   - gh-132439(53): Corrigido ‘PyREPL’ no Windows: caracteres inseridos
     via AltGr são engolidos.  Patch por Chris Eibl.

   - gh-132429(54): Corrige o suporte a soquetes Bluetooth no NetBSD e
     no DragonFly BSD. Adiciona suporte para 'cid' e 'bdaddr_type' no
     endereço BTPROTO_L2CAP no FreeBSD. Retorna 'cid' em ‘getsockname()’
     para BTPROTO_L2CAP se for diferente de zero.

   - gh-132106(55): *note QueueListener.start: 242. agora levanta uma
     *note RuntimeError: 243. se o listener já estiver iniciado.

   - gh-132417(56): Corrige uma desreferência de ponteiro ‘NULL’ quando
     uma função C chamada usando *note ctypes: 2e. com ‘restype’ *note
     py_object: 1f2. retorna ‘NULL’.

   - gh-132385(57): Corrige sugestões de erro de instância que acionam
     possíveis exceções em *note object.__getattr__(): 6ef. em *note
     traceback: 104.

   - gh-125866(58): Adiciona o argumento opcional 'add_scheme' a *note
     urllib.request.pathname2url(): 2be.; quando definido como
     verdadeiro, uma URL completa é retornada.  Da mesma forma, adicione
     o argumento opcional 'require_scheme' a *note url2pathname(): 2bc.;
     quando definido como verdadeiro, uma URL completa é aceita.

   - gh-132308(59): Uma exceção *note traceback.TracebackException: 55c.
     agora renderiza corretamente os atributos ‘__context__’ e
     ‘__cause__’ da *note Exception: bc3. *note falsa: 17c2, e o
     atributo ‘exceptions’ de falsey *note ExceptionGroup: 4cc.

   - gh-130645(60): Adiciona cor à saída de ajuda do *note argparse: 7.
     Patch por Hugo van Kemenade.

   - gh-127495(61): No PyREPL, adicione uma nova entrada ao arquivo
     ‘PYTHON_HISTORY’ 'após' cada instrução.  Isso deve preservar o
     histórico da linha de comando após o encerramento do interpretador.
     Patch por Sergey B Kirpichev.

   - gh-129463(62): A comparação de objetos *note
     annotationlib.ForwardRef: 17c3. não usa mais os atributos internos
     ‘__code__’ e ‘__ast_node__’, que são usados como caches.

   - gh-132250(63): Corrigida a *note SystemError: 78a. em *note
     cProfile: 2b. quando localizar a função C real de um método levanta
     uma exceção.

   - gh-132064(64): *note annotationlib.get_annotations(): 456. agora
     usa o atributo ‘__annotate__’ se estiver presente, mesmo que
     ‘__annotations__’ não esteja presente.  Além disso, a função agora
     levanta uma exceção *note TypeError: 198. se for passado um objeto
     que não possui nenhuma anotação.

   - gh-130664(65): Suporte ao separador de dígitos ‘'_'’ na formatação
     da parte integral de *note Decimal: 1fd.’s.  Patch por Sergey B
     Kirpichev.

   - gh-131952(66): Adiciona a saída de cor à CLI ‘json’.  Patch por
     Tomas Roun.

   - gh-132063(67): 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: 1d6. e *note
     concurrent.futures.ThreadPoolExecutor: 93e.

   - gh-132106(68): *note logging.handlers.QueueListener: 241. agora
     implementa o protocolo do gerenciador de contexto, permitindo que
     ele seja usado em uma instrução *note with: 186.

   - gh-132054(69): O tipo mime ‘application/yaml’ ( RFC 9512(70)) agora
     é suportado por *note mimetypes: 93.  Patch por Sasha “Nelie”
     Chernykh e Hugo van Kemenade.

   - gh-119605(71): Respeita ‘follow_wrapped’ para os métodos
     ‘__init__()’ e ‘__new__()’ ao obter a assinatura de classe para uma
     classe com *note inspect.signature(): 22e.  Preserva a assinatura
     de classe após o encapsulamento com *note warnings.deprecated():
     483.  Patch por Xuehai Pan.

   - gh-118761(72): Melhora o tempo de importação do módulo *note shlex:
     c9. em até 33x e o desempenho de *note shlex.quote(): 57b. em até
     12x.  Patch por Adam Turner.

   - gh-85302(73): Adiciona suporte para *note BTPROTO_SCO: 281. em
     soquetes no FreeBSD.

   - gh-131757(74): Faz com que *note functools.lru_cache(): bd8. chame
     a função destravada em cache para permitir a simultaneidade.

   - gh-131423(75): *note ssl: d5. pode exibir descrições de erros
     adicionados no OpenSSL 3.4.1.  Patch por Bénédikt Tran.

   - gh-131434(76): Melhora o relatório de erros para formato incorreto
     em *note time.strptime(): 161e.

   - gh-131524(77): Adicionada mensagem de ajuda à interface de linha de
     comando *note platform: af.  Contribuição de Harry Lees.

   - gh-100926(78): Move o cache dos tipos *note ctypes.POINTER(): 1f0.
     de um cache interno global (‘_pointer_type_cache’) para o atributo
     *note ctypes._CData.__pointer_type__: 1f1. dos tipos *note ctypes:
     2e. correspondentes.  Isso impedirá que o cache cresça sem limites
     em algumas situações.

   - gh-85702(79): Se ‘zoneinfo._common.load_tzdata’ receber um pacote
     sem um recurso, uma ‘ZoneInfoNotFoundError’ será levantada em vez
     de uma *note IsADirectoryError: 124f.

   - gh-123471(80): Torna as iterações simultâneas sobre *note
     itertools.repeat: 17c4. seguras sob threads livres

   - gh-131127(81): Sistemas que usam LibreSSL agora são construídos com
     sucesso.

   - gh-89157(82): Cria a implementação Python pura de *note
     datetime.date.fromisoformat(): 81d, aceitando apenas strings ASCII
     para consistência com a implementação C.

   - gh-130941(83): Corrige *note configparser.ConfigParser: 4d8.
     analisando interpolação vazia com ‘allow_no_value’ definido como
     ‘True’.

   - gh-110067(84): Torna públicas as funções max-heap *note heapq:
     6d.*note heapq.heapify_max(): 220, *note heapq.heappush_max(): 221,
     *note heapq.heappop_max(): 222. e *note heapq.heapreplace_max():
     223.  A nomenclatura sublinhada anterior foi mantida para
     retrocompatibilidade.  Além disso, a função ausente *note
     heapq.heappushpop_max(): 224. foi adicionada às implementações em C
     e Python.

   - gh-129098(85): Corrige o relatório de traceback do REPL ao usar
     *note compile(): 4ab. com um arquivo inexistente.  Patch por
     Bénédikt Tran.

   - gh-130631(86): ‘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-130482(87): Adiciona a capacidade de especificar o nome para
     ‘tkinter.OptionMenu’ e ‘tkinter.ttk.OptionMenu’.

   - gh-77065(88): Adiciona o argumento somente-nomeado opcional
     'echo_char' para *note getpass.getpass(): 21c. para suporte
     opcional ao feedback visual do teclado.  Patch por Semyon Moroz.

   - gh-130317(89): Corrige *note PyFloat_Pack2(): 95e. e *note
     PyFloat_Unpack2(): 961. para NaNs com payload.  Isso corrige a idea
     e volta para *note struct.unpack(): 17c5. e *note struct.pack():
     1472. no caso do tipo IEEE 754 binary16 de “meia precisão”.  Patch
     por Sergey B Kirpichev.

   - gh-130402(90): A união de threads de daemon em execução durante o
     desligamento do interpretador agora levanta *note
     PythonFinalizationError: 472.

   - gh-130167(91): Melhoria na velocidade de *note
     difflib.IS_LINE_JUNK(): 2d6.  Patch por Semyon Moroz.

   - gh-101410(92): Adicionadas mensagens mais detalhadas para erros de
     domínio no módulo *note math: 92.

   - gh-128384(93): Faz com que *note warnings.catch_warnings: 179. use
     uma variável de contexto para manter o estado de filtragem de
     avisos se o sinalizador *note sys.flags.context_aware_warnings:
     18a. estiver definido como true.  Isso torna o uso do gerenciador
     de contexto seguro para thread em programas multithread.  O
     sinalizador é verdadeiro por padrão em construções com threads
     livres e, caso contrário, é falso.  O valor do sinalizador pode ser
     substituído pela opção de linha de comando *note -X
     context_aware_warnings: 16f. ou pela variável de ambiente *note
     PYTHON_CONTEXT_AWARE_WARNINGS: 17c6.

   - gh-129719(94): 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-129027(95): Levanta *note DeprecationWarning: 1a3. para *note
     sys._clear_type_cache(): 291.  Esta função foi descontinuada no
     Python 3.13, mas não levanta um aviso em tempo de execução.

   - gh-128307(96): Adiciona o argumento nomeado ‘eager_start’ a *note
     asyncio.loop.create_task(): 1ca.

   - gh-127604(97): Adiciona suporte para exibir o stack trace (situação
     da pilha de execução) C em sistemas que oferece suporte a ele via
     *note faulthandler.dump_c_stack(): 20d. ou via argumento 'c_stack'
     em *note faulthandler.enable(): 20e.

   - gh-127385(98): Adiciona a constante ‘F_DUPFD_QUERY’ ao módulo *note
     fcntl: 5d.

   - gh-126838(99): Adiciona o parâmetro somente-nomeado 'resolve_host'
     a *note urllib.request.url2pathname(): 2bc. e corrige o tratamento
     de URLs de arquivo com autoridades.

   - gh-82129(100): Corrige *note NameError: 44f. ao chamar *note
     typing.get_type_hints(): 8b5. em uma *note dataclasses.dataclass():
     4db. criado por *note dataclasses.make_dataclass(): 17c7. com
     campos não anotados.

   - gh-122559(101): Remove os métodos ‘__reduce__()’ e
     ‘__reduce_ex__()’ que sempre levantam *note TypeError: 198. na
     implementação em C de *note io.FileIO: 150b, *note
     io.BufferedReader: 140a, *note io.BufferedWriter: 15a3. e *note
     io.BufferedRandom: 15a4. 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(102): *note hashlib.file_digest(): 849. agora levanta
     *note BlockingIOError: 234. quando não há dados disponíveis durante
     E/S não bloqueantes.  Antes, ele adicionava bytes nulos espúrios ao
     resumo.

   - gh-53032(103): Expõe *note decimal.IEEEContext(): 1fe. para
     oferecer suporte à criação de contextos correspondentes aos
     formatos de intercâmbio decimal do IEEE 754 (2008).  Patch por
     Sergey B Kirpichev.

   - gh-120220(104): Descontinua os métodos ‘trace_variable()’,
     ‘trace_vdelete()’ e ‘trace_vinfo()’ de ‘tkinter.Variable’.  Os
     métodos ‘trace_add()’, ‘trace_remove()’ e ‘trace_info()’ podem ser
     usados em seu lugar.

   - gh-113539(105): *note webbrowser: 11b.: Os nomes na variável de
     ambiente ‘BROWSER’ agora podem se referir a navegadores web já
     registrados, em vez de sempre gerar um novo comando do navegador.

     Isso torna possível definir ‘BROWSER’ como o valor de um dos
     navegadores suportados no macOS.

   - bpo-44172(106): Mantém uma referência às janelas originais *note
     curses: 2f. nas subjanelas para que a janela original não seja
     excluída antes das subjanelas.

   - gh-75223(107): Descontinua extensões sem pontos em *note
     mimetypes.MimeTypes.add_type(): 317.  Patch por Hugo van Kemenade.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133490

   (2) https://github.com/python/cpython/issues/132493

   (3) https://github.com/python/cpython/issues/130645

   (4) https://github.com/python/cpython/issues/119180

   (5) https://github.com/python/cpython/issues/133351

   (6) https://github.com/python/cpython/issues/133367

   (7) https://github.com/python/cpython/issues/133363

   (8) https://github.com/python/cpython/issues/113081

   (9) https://github.com/python/cpython/issues/133349

   (10) https://github.com/python/cpython/issues/133306

   (11) https://github.com/python/cpython/issues/133306

   (12) https://github.com/python/cpython/issues/133300

   (13) https://github.com/python/cpython/issues/133290

   (14) https://github.com/python/cpython/issues/133223

   (15) https://github.com/python/cpython/issues/133153

   (16) https://github.com/python/cpython/issues/133139

   (17) https://github.com/python/cpython/issues/133089

   (18) https://github.com/python/cpython/issues/133036

   (19) https://github.com/python/cpython/issues/132987

   (20) https://github.com/python/cpython/issues/124703

   (21) https://github.com/python/cpython/issues/133005

   (22) https://github.com/python/cpython/issues/115032

   (23) https://github.com/python/cpython/issues/132991

   (24) https://github.com/python/cpython/issues/132995

   (25) https://github.com/python/cpython/issues/132933

   (26) https://github.com/python/cpython/issues/121249

   (27) https://github.com/python/cpython/issues/132915

   (28) https://github.com/python/cpython/issues/132017

   (29) https://github.com/python/cpython/issues/132893

   (30) https://github.com/python/cpython/issues/130328

   (31) https://github.com/python/cpython/issues/132882

   (32) https://github.com/python/cpython/issues/93696

   (33) https://github.com/python/cpython/issues/129965

   (34) https://github.com/python/cpython/issues/132742

   (35) https://github.com/python/cpython/issues/132451

   (36) https://github.com/python/cpython/issues/125618

   (37) https://github.com/python/cpython/issues/132805

   (38) https://github.com/python/cpython/issues/132734

   (39) https://github.com/python/cpython/issues/132673

   (40) https://github.com/python/cpython/issues/132578

   (41) https://github.com/python/cpython/issues/132561

   (42) https://github.com/python/cpython/issues/121468

   (43) https://github.com/python/cpython/issues/132493

   (44) https://github.com/python/cpython/issues/132536

   (45) https://github.com/python/cpython/issues/132527

   (46) https://github.com/python/cpython/issues/132099

   (47) https://github.com/python/cpython/issues/81793

   (48) https://github.com/python/cpython/issues/132493

   (49) https://github.com/python/cpython/issues/132491

   (50) https://github.com/python/cpython/issues/132426

   (51) https://github.com/python/cpython/issues/70145

   (52) https://github.com/python/cpython/issues/131913

   (53) https://github.com/python/cpython/issues/132439

   (54) https://github.com/python/cpython/issues/132429

   (55) https://github.com/python/cpython/issues/132106

   (56) https://github.com/python/cpython/issues/132417

   (57) https://github.com/python/cpython/issues/132385

   (58) https://github.com/python/cpython/issues/125866

   (59) https://github.com/python/cpython/issues/132308

   (60) https://github.com/python/cpython/issues/130645

   (61) https://github.com/python/cpython/issues/127495

   (62) https://github.com/python/cpython/issues/129463

   (63) https://github.com/python/cpython/issues/132250

   (64) https://github.com/python/cpython/issues/132064

   (65) https://github.com/python/cpython/issues/130664

   (66) https://github.com/python/cpython/issues/131952

   (67) https://github.com/python/cpython/issues/132063

   (68) https://github.com/python/cpython/issues/132106

   (69) https://github.com/python/cpython/issues/132054

   (70) https://datatracker.ietf.org/doc/html/rfc9512.html

   (71) https://github.com/python/cpython/issues/119605

   (72) https://github.com/python/cpython/issues/118761

   (73) https://github.com/python/cpython/issues/85302

   (74) https://github.com/python/cpython/issues/131757

   (75) https://github.com/python/cpython/issues/131423

   (76) https://github.com/python/cpython/issues/131434

   (77) https://github.com/python/cpython/issues/131524

   (78) https://github.com/python/cpython/issues/100926

   (79) https://github.com/python/cpython/issues/85702

   (80) https://github.com/python/cpython/issues/123471

   (81) https://github.com/python/cpython/issues/131127

   (82) https://github.com/python/cpython/issues/89157

   (83) https://github.com/python/cpython/issues/130941

   (84) https://github.com/python/cpython/issues/110067

   (85) https://github.com/python/cpython/issues/129098

   (86) https://github.com/python/cpython/issues/130631

   (87) https://github.com/python/cpython/issues/130482

   (88) https://github.com/python/cpython/issues/77065

   (89) https://github.com/python/cpython/issues/130317

   (90) https://github.com/python/cpython/issues/130402

   (91) https://github.com/python/cpython/issues/130167

   (92) https://github.com/python/cpython/issues/101410

   (93) https://github.com/python/cpython/issues/128384

   (94) https://github.com/python/cpython/issues/129719

   (95) https://github.com/python/cpython/issues/129027

   (96) https://github.com/python/cpython/issues/128307

   (97) https://github.com/python/cpython/issues/127604

   (98) https://github.com/python/cpython/issues/127385

   (99) https://github.com/python/cpython/issues/126838

   (100) https://github.com/python/cpython/issues/82129

   (101) https://github.com/python/cpython/issues/122559

   (102) https://github.com/python/cpython/issues/122179

   (103) https://github.com/python/cpython/issues/53032

   (104) https://github.com/python/cpython/issues/120220

   (105) https://github.com/python/cpython/issues/113539

   (106) https://bugs.python.org/issue?@action=redirect&bpo=44172

   (107) https://github.com/python/cpython/issues/75223


File: python.info,  Node: IDLE<4>,  Next: Documentação<5>,  Prev: Biblioteca<9>,  Up: Python 3 14 0 beta 1

1.24.9.6 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: Núcleo e embutidos<8>,  Prev: IDLE<4>,  Up: Python 3 14 0 beta 1

1.24.9.7 Documentação
.....................

   - gh-107006(1): Move a documentação e o código de exemplo para *note
     threading.local: 17ca. da docstring para a documentação oficial.

   - gh-125142(2): Como parte do texto de introdução da ajuda embutida,
     mostre os atalhos de teclado para o novo REPL não básico (F1, F2 e
     F3).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/107006

   (2) https://github.com/python/cpython/issues/125142


File: python.info,  Node: Núcleo e embutidos<8>,  Next: API C<6>,  Prev: Documentação<5>,  Up: Python 3 14 0 beta 1

1.24.9.8 Núcleo e embutidos
...........................

   - gh-133336(1): ‘-J’ não está mais reservado para uso do Jython.
     Patch por Adam Turner.

   - gh-133261(2): Corrige um bug em que o ciclo GC não conseguia
     rastrear objetos na lixeira porque eles pareciam imortais.  Quando
     objetos são adicionados à lixeira, tomamos cuidado para garantir
     que eles mantenham uma contagem de referências mortal.

   - gh-133346(3): Adicionado suporte experimental para temas de cores
     ao módulo ‘_colorize’.

   - gh-132917(4): Para a construção com threads livres, verifica o
     aumento no uso de memória do processo antes de acionar uma coleta
     de lixo automática completa.  Se a memória usada não tiver
     aumentado 10% desde a última coleta, adia-a.

   - gh-91048(5): Adiciona uma nova interface de linha de comando
     ‘python -m asyncio ps PID’ para inspecionar tarefas assíncronas em
     um processo Python em execução.  Exibe uma tabela simples de
     relacionamentos de espera.  Uma variante que mostra uma
     visualização em árvore também está disponível como ‘python -m
     asyncio pstree PID’.  Ambas são úteis para depuração de código
     assíncrono.  Patch por Pablo Galindo, Łukasz Langa, Yury Selivanov
     e Marta Gomez Macias.

   - gh-133304(6): Solução alternativa para a “canonização” do NaN em
     *note PyFloat_Pack4(): 95f. e *note PyFloat_Unpack4(): 962. no
     RISC-V.

   - gh-133197(7): Melhora as mensagens de erro *note SyntaxError: 18e.
     para prefixos de strings / bytes incompatíveis.

   - gh-133231(8): Adiciona novos utilitários de observação da
     compilação JIT: *note sys._jit.is_available(): 44c, *note
     sys._jit.is_enabled(): 44d. e *note sys._jit.is_active(): 17cc.

   - gh-133194(9): *note ast.parse(): 1c2. não analisará mais a nova
     sintaxe PEP 758(10) com a 'feature_version' mais antiga passada.

   - gh-131798(11): Divide ‘CALL_LEN’ em vários UOPs, permitindo que o
     JIT os remova durante a otimização.  Patch por Diego Russo.

   - gh-131798(12): Usa ‘sym_new_type’ em vez de ‘sym_new_not_null’ para
     _BUILD_STRING, _BUILD_SET

   - gh-132942(13): 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-131798(14): Propaga o tipo de retorno de
     ‘_BINARY_OP_SUBSCR_TUPLE_INT’ em JIT. Patch por Tomas Roun

   - gh-132952(15): Acelera a inicialização com o argumento ‘-S’
     importando o módulo privado ‘_io’ em vez de *note io: 83.  Isso
     corrige uma regressão de desempenho introduzida anteriormente no
     desenvolvimento do Python 3.14 e restaura o desempenho ao nível do
     Python 3.13.

   - gh-131798(16): Permite que o JIT remova as proteções int após
     ‘_CALL_LEN’ definindo o tipo de retorno como int.  Patch por Diego
     Russo

   - gh-131798(17): Divide ‘CALL_TUPLE_1’ em vários UOPs, permitindo que
     o JIT remova alguns deles.  Patch por Tomas Roun

   - gh-131798(18): Divide ‘CALL_STR_1’ em vários UOPs, permitindo que o
     JIT remova alguns deles.  Patch por Tomas Roun

   - gh-132825(19): Melhorias nas mensagens de erro de chaves/elementos
     não fragmentáveis para *note dict: 183. e *note set: 184.  Patch
     por Victor Stinner.

   - gh-131591(20): Redefine qualquer chamada pendente de depuração
     remota PEP 768(21) em filhos após chamadas *note os.fork(): 4af.

   - gh-132713(22): 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-132661(23): Implementa PEP 750(24) (Template Strings).  Adiciona
     nova sintaxe para t-strings e implementa novos tipos internos
     ‘string.templatelib.Template’ e ‘string.templatelib.Interpolation’.

   - gh-132479(25): Corrige travamento do compilador em determinadas
     circunstâncias em que várias anotações em nível de módulo incluem
     compreensões e outros escopos aninhados.

   - gh-132747(26): Corrige uma falha ao chamar *note __get__(): 16d6.
     de um *note method: 17cd. com um segundo argumento *note None: 87a.

   - gh-132744(27): Certas chamadas agora verificam a recursão
     descontrolada e respeitam o limite de recursão do sistema.

   - gh-132449(28): Erros de sintaxe que parecem erros de ortografia de
     palavra reservada do Python agora oferecem uma sugestão útil de
     correção.  Contribuição de Pablo Galindo Salgado.

   - gh-132737(29): Suporte a código de criação de perfil que requer
     ‘__main__’, como *note pickle: ab.

   - gh-132639(30): Adicionadas *note PyLong_AsNativeBytes(): 5fa, *note
     PyLong_FromNativeBytes(): 5fb. e *note
     PyLong_FromUnsignedNativeBytes(): 5fc. à API C limitada.

   - gh-100239(31): Adiciona especialização para ‘BINARY_OP/SUBSCR’ na
     lista e no fatiamento.

   - gh-132508(32): Utiliza inteiros marcados na pilha de avaliação para
     representar os deslocamentos de instrução ao levantar novamente uma
     exceção.  Isso evita a necessidade de encapsular o inteiro, o que
     poderia falhar em condições de pouca memória.

   - gh-124476(33): Corrige decodificação da codificação local no local
     C.UTF-8.

   - gh-131927(34): 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: 118.

   - gh-132457(35): Torna *note staticmethod(): 450. e *note
     classmethod(): 488. genéricos.

   - gh-131798(36): Usa ‘sym_new_type’ em vez de ‘sym_new_not_null’ para
     _BUILD_LIST, _BUILD_SET, _BUILD_MAP

   - gh-131798(37): Divide ‘CALL_TYPE_1’ em vários uops, permitindo que
     o JIT remova alguns deles.

   - gh-132386(38): Corrige falha ao passar uma subclasse dict como
     parâmetro ‘globals’ para *note exec(): 49c.

   - gh-127682(39): 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-132261(40): O armazenamento interno para anotações e funções de
     anotação em classes agora usa chaves diferentes no dicionário de
     classes.  Isso elimina vários casos extremos em que o acesso aos
     atributos ‘__annotate__’ e ‘__annotations__’ se comportaria de
     forma imprevisível.

   - gh-132284(41): Não envolve slots base ‘PyCFunction’ na criação da
     classe se não forem substituídos.

   - gh-130415(42): Melhora a capacidade do JIT de remover cargas
     constantes e variáveis locais não utilizadas e corrige um problema
     em que a desalocação de valores não utilizados poderia fazer com
     que o código JIT travasse ou se comportasse incorretamente.

   - gh-126703(43): Corrige possível uso após free em casos em que a
     definição de um método tem o mesmo tempo de vida que seu ‘self’.

   - gh-132286(44): Corrige que *note type.__annotate__: 17ce. não foi
     excluído quando *note type.__annotations__: 17ac. foi excluído.

   - gh-131798(45): Permite que o JIT remova uma instrução extra
     ‘_TO_BOOL_BOOL’ após ‘_CONTAINS_OP_DICT’ definindo o tipo de
     retorno como bool.

   - gh-124715(46): Evita estouros de pilha ao chamar *note Py_DECREF():
     785.  Objetos de extensão de terceiros não precisam mais usar o
     mecanismo de “lixeira”, pois a proteção agora está incorporada à
     macro *note Py_DECREF(): 785.

   - gh-131798(47): Permite que o compilador JIT remova algumas
     verificações de tipo para operações em listas, tuplas, dicionários
     e conjuntos.

   - gh-128398(48): Melhoria na mensagem de erro quando um objeto que
     ofereça suporte ao protocolo de gerenciador de contexto síncrono
     (ou assíncrono) é inserido usando *note async with: 185. (ou seja,
     *note with: 186.) em vez de *note with: 186. (ou seja, *note async
     with: 185.).  Patch por Bénédikt Tran.

   - gh-131798(49): Permite que o JIT remova as proteções Unicode após
     ‘_BINARY_OP_SUBSCR_STR_INT’ definindo o tipo de retorno como
     string.

   - gh-131878(50): Trata exceções não capturadas no laço de entrada
     principal para o novo REPL.

   - gh-131878(51): Corrige suporte a caracteres Unicode com dois ou
     mais pontos de código no Windows no novo REPL.

   - gh-126835(52): Move a dobragem de constante para o otimizador de
     olho mágico.  Renomeia os arquivos relacionados à otimização AST
     (Python/ast_opt.c -> Python/ast_preprocess.c), structs
     (_PyASTOptimizeState -> _PyASTPreprocessState) e funções
     (_PyAST_Optimize -> _PyAST_Preprocess, _PyCompile_AstOptimize ->
     _PyCompile_AstPreprocess).

   - gh-114809(53): Adiciona suporte para construções multiarquitetura
     do macOS com o JIT habilitado

   - gh-131507(54): O PyREPL agora oferece suporte a realce de sintaxe.
     Contribuição de Łukasz Langa.

   - gh-130907(55): Se as ‘__annotations__’ de um objeto de módulo forem
     acessadas enquanto o módulo estiver em execução, retorne as
     anotações que foram definidas até agora, sem armazená-las em cache.

   - gh-130104(56): *note pow(): 1a4. de três argumentos agora tenta
     chamar *note __rpow__(): 1a5. se necessário.  Anteriormente, ele só
     era chamado em ‘pow()’ de dois argumentos e no operador binário de
     potência.

   - gh-130070(57): Corrigido um erro de asserção para *note exec():
     49c. passando uma string ‘source’ e uma ‘closure’ não ‘None’.
     Patch por Bartosz Sławecki.

   - gh-129958(58): Corrige um bug que permitia quebras de linha
     inconsistentes em especificadores de formato para f-strings entre
     aspas simples.  Patch por Pablo Galindo.

   - gh-129858(59): instruções ‘elif’ que seguem um bloco ‘else’ agora
     têm uma mensagem de erro específica.

   - gh-69605(60): Adiciona o módulo autocomplete ao PyREPL.

   - gh-128555(61): Adiciona o sinalizador *note
     sys.flags.thread_inherit_context: 175.

        * Este sinalizador é definido como verdadeiro por padrão na
          construção com threads livres e como falso caso contrário.  Se
          o sinalizador for verdadeiro, iniciar uma nova thread usando
          *note threading.Thread: 176. usará, por padrão, uma cópia de
          *note contextvars.Context: 177. do chamador de *note
          threading.Thread.start(): 178. em vez de usar um contexto
          vazio.

        * Adiciona a opção de linha de comando *note -X
          thread_inherit_context: 16f. e a variável de ambiente *note
          PYTHON_THREAD_INHERIT_CONTEXT: 17cf, que definem o sinalizador
          *note thread_inherit_context: 175.

        * Adiciona o parâmetro nomeado ‘context’ a *note Thread: 176.
          Ele pode ser usado para passar explicitamente um valor de
          contexto a ser usado por uma nova thread.

        * Torna o módulo ‘_contextvars’ embutido.

   - gh-123539(62): Melhora a mensagem *note SyntaxError: 18e. para usar
     ‘import ... as’ e ‘from ... import ... as’ sem um nome.

   - gh-102567(63): *note -X importtime: 16f. agora aceita o valor ‘2’,
     que indica que uma entrada ‘importtime’ também deve ser impressa se
     um módulo importado já tiver sido carregado.  Patch por Noah Kim e
     Adam Turner.

   - gh-116436(64): Melhora a mensagem de erro quando *note TypeError:
     198. ocorre durante *note dict.update(): 1654.

   - gh-103997(65): Argumentos de string passados para “-c” agora são
     dedentados automaticamente como se fossem *note textwrap.dedent():
     1a9.  Isso permite que invocações de “python -c” sejam recuadas em
     scripts de shell sem causar erros de indentação.  (Patch por Jon
     Crall e Steven Sun)

   - gh-89562(66): Remove o membro ‘hostflags’ da struct ‘PySSLContext’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133336

   (2) https://github.com/python/cpython/issues/133261

   (3) https://github.com/python/cpython/issues/133346

   (4) https://github.com/python/cpython/issues/132917

   (5) https://github.com/python/cpython/issues/91048

   (6) https://github.com/python/cpython/issues/133304

   (7) https://github.com/python/cpython/issues/133197

   (8) https://github.com/python/cpython/issues/133231

   (9) https://github.com/python/cpython/issues/133194

   (10) https://peps.python.org/pep-0758/

   (11) https://github.com/python/cpython/issues/131798

   (12) https://github.com/python/cpython/issues/131798

   (13) https://github.com/python/cpython/issues/132942

   (14) https://github.com/python/cpython/issues/131798

   (15) https://github.com/python/cpython/issues/132952

   (16) https://github.com/python/cpython/issues/131798

   (17) https://github.com/python/cpython/issues/131798

   (18) https://github.com/python/cpython/issues/131798

   (19) https://github.com/python/cpython/issues/132825

   (20) https://github.com/python/cpython/issues/131591

   (21) https://peps.python.org/pep-0768/

   (22) https://github.com/python/cpython/issues/132713

   (23) https://github.com/python/cpython/issues/132661

   (24) https://peps.python.org/pep-0750/

   (25) https://github.com/python/cpython/issues/132479

   (26) https://github.com/python/cpython/issues/132747

   (27) https://github.com/python/cpython/issues/132744

   (28) https://github.com/python/cpython/issues/132449

   (29) https://github.com/python/cpython/issues/132737

   (30) https://github.com/python/cpython/issues/132639

   (31) https://github.com/python/cpython/issues/100239

   (32) https://github.com/python/cpython/issues/132508

   (33) https://github.com/python/cpython/issues/124476

   (34) https://github.com/python/cpython/issues/131927

   (35) https://github.com/python/cpython/issues/132457

   (36) https://github.com/python/cpython/issues/131798

   (37) https://github.com/python/cpython/issues/131798

   (38) https://github.com/python/cpython/issues/132386

   (39) https://github.com/python/cpython/issues/127682

   (40) https://github.com/python/cpython/issues/132261

   (41) https://github.com/python/cpython/issues/132284

   (42) https://github.com/python/cpython/issues/130415

   (43) https://github.com/python/cpython/issues/126703

   (44) https://github.com/python/cpython/issues/132286

   (45) https://github.com/python/cpython/issues/131798

   (46) https://github.com/python/cpython/issues/124715

   (47) https://github.com/python/cpython/issues/131798

   (48) https://github.com/python/cpython/issues/128398

   (49) https://github.com/python/cpython/issues/131798

   (50) https://github.com/python/cpython/issues/131878

   (51) https://github.com/python/cpython/issues/131878

   (52) https://github.com/python/cpython/issues/126835

   (53) https://github.com/python/cpython/issues/114809

   (54) https://github.com/python/cpython/issues/131507

   (55) https://github.com/python/cpython/issues/130907

   (56) https://github.com/python/cpython/issues/130104

   (57) https://github.com/python/cpython/issues/130070

   (58) https://github.com/python/cpython/issues/129958

   (59) https://github.com/python/cpython/issues/129858

   (60) https://github.com/python/cpython/issues/69605

   (61) https://github.com/python/cpython/issues/128555

   (62) https://github.com/python/cpython/issues/123539

   (63) https://github.com/python/cpython/issues/102567

   (64) https://github.com/python/cpython/issues/116436

   (65) https://github.com/python/cpython/issues/103997

   (66) https://github.com/python/cpython/issues/89562


File: python.info,  Node: API C<6>,  Next: Construção<7>,  Prev: Núcleo e embutidos<8>,  Up: Python 3 14 0 beta 1

1.24.9.9 API C
..............

   - gh-133166(1): Corrige regressão onde *note PyType_GetModuleByDef():
     629. retorna NULL sem definir *note TypeError: 198. quando um tipo
     estático é passado.

   - gh-133164(2): Adicionada a função *note
     PyUnstable_Object_IsUniqueReferencedTemporary(): 3c4. para
     determinar se um objeto existe como uma variável temporária única
     na pilha do interpretador.  Esta função substitui alguns casos em
     que verificar se *note Py_REFCNT(): 2ce. é uma variável temporária
     não é mais suficiente para determinar se é seguro modificar um
     objeto Python no local sem efeitos colaterais visíveis.

   - gh-133140(3): Adiciona *note
     PyUnstable_Object_IsUniquelyReferenced(): 3c3. como um substituto
     para ‘Py_REFNCT(op) == 1’ em construções com *note threads livres:
     1f3. do Python.

   - gh-131747(4): Em plataformas não Windows, descontinua o uso de
     *note ctypes.Structure._pack_: 315. para usar um layout compatível
     com o Windows.  O layout deve ser especificado explicitamente
     definindo *note ctypes.Structure._layout_: 1e6. como ‘'ms'’.

   - gh-128972(5): Para construções sem threads livres, o layout de
     memória de *note PyASCIIObject: 1371. é revertido para corresponder
     ao Python 3.13.  (Observe que a estrutura não faz parte da ABI
     estável e, portanto, seu layout de memória tem 'garantia' de
     estabilidade.)

   - gh-133079(6): As APIs não documentadas ‘Py_C_RECURSION_LIMIT’ e
     ‘PyThreadState.c_recursion_remaining’, adicionadas na versão 3.13,
     foram removidas sem um período de descontinuação.

   - gh-132987(7): Os formatos ‘k’ e ‘K’ em *note PyArg_Parse(): 177c.
     agora oferecem suporte ao método especial *note __index__(): 19e,
     como todos os outros formatos inteiros.

   - gh-132909(8): Corrige um estouro ao manipular o formato *note K:
     17d1. em *note Py_BuildValue(): 3bf.  Patch por Bénédikt Tran.

   - gh-132798(9): As funções descontinuadas e não documentadas
     ‘PyUnicode_AsEncodedObject()’, ‘PyUnicode_AsDecodedObject()’,
     ‘PyUnicode_AsEncodedUnicode()’ e ‘PyUnicode_AsDecodedUnicode()’
     estão programadas para remoção na versão 3.15.

   - gh-132470(10): Cria um *note ctypes.CField: 1e7. com um 'byte_size'
     que não corresponde ao tamanho do tipo real agora levanta um *note
     ValueError: 2ea. em vez de travar o interpretador.

   - gh-112068(11): [Revertido em gh-136991(12)] Adicionado suporte a
     argumentos anuláveis em *note PyArg_Parse(): 177c. e funções
     similares.  Adicionar ‘?’ após qualquer unidade de formato faz com
     que ‘None’ seja aceito como valor.

   - gh-50333(13): Sequências não-tuplas estão descontinuadas como
     argumento para a unidade de formato ‘(items)’ em *note
     PyArg_ParseTuple(): 3be. e outras funções de *note análise de
     argumentos: 3d2. se 'items' contiver unidades de formato que
     armazenam um *note buffer emprestado: 3d3. ou uma *note referência
     emprestada: 3d4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133166

   (2) https://github.com/python/cpython/issues/133164

   (3) https://github.com/python/cpython/issues/133140

   (4) https://github.com/python/cpython/issues/131747

   (5) https://github.com/python/cpython/issues/128972

   (6) https://github.com/python/cpython/issues/133079

   (7) https://github.com/python/cpython/issues/132987

   (8) https://github.com/python/cpython/issues/132909

   (9) https://github.com/python/cpython/issues/132798

   (10) https://github.com/python/cpython/issues/132470

   (11) https://github.com/python/cpython/issues/112068

   (12) https://github.com/python/cpython/issues/136991

   (13) https://github.com/python/cpython/issues/50333


File: python.info,  Node: Construção<7>,  Prev: API C<6>,  Up: Python 3 14 0 beta 1

1.24.9.10 Construção
....................

   - gh-113464(1): Use o repositório “externals” cpython-bin-deps para o
     gerenciamento de dependências do Windows LLVM. A instalação manual
     do LLVM não é mais necessária para construções JIT do Windows.

   - 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-133171(4): Como as construções com threads livres não oferecem
     suporte ao compilador JIT experimental, evita que essas
     configurações sejam combinadas.

   - gh-132758(5): Corrige construção com interpretador de chamada de
     cauda e pystats.

   - gh-132649(6): O script ‘PClayout’ agora permite passar
     ‘--include-tcltk’ no Windows ARM64.

   - gh-132257(7): Altera os sinalizadores LTO padrão no GCC para não
     passar ‘-flto-partition=none’ e permitir a paralelização de LTO.
     Para versões GNU mais recentes e GCC, isso representa um aumento de
     velocidade múltiplo nos tempos de construção com LTO, sem perda
     perceptível de desempenho.

   - gh-132026(8): 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/113464

   (2) https://github.com/python/cpython/issues/133183

   (3) https://github.com/python/cpython/issues/133167

   (4) https://github.com/python/cpython/issues/133171

   (5) https://github.com/python/cpython/issues/132758

   (6) https://github.com/python/cpython/issues/132649

   (7) https://github.com/python/cpython/issues/132257

   (8) https://github.com/python/cpython/issues/132026


File: python.info,  Node: Python 3 14 0 alpha 7,  Next: Python 3 14 0 alpha 6,  Prev: Python 3 14 0 beta 1,  Up: Changelog

1.24.10 Python 3.14.0 alpha 7
-----------------------------

'Data de lançamento: 2025-04-08'

* Menu:

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


File: python.info,  Node: macOS<3>,  Next: Windows<7>,  Up: Python 3 14 0 alpha 7

1.24.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.

   ---------- 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


File: python.info,  Node: Windows<7>,  Next: Ferramentas/Demos<8>,  Prev: macOS<3>,  Up: Python 3 14 0 alpha 7

1.24.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-131453(2): Algumas constantes ‘SND_*’ e ‘MB_*’ foram adicionadas
     ao *note winsound: 11d.

   - gh-91349(3): Substitui nossa cópia de ‘zlib’ por ‘zlib-ng’, para
     melhorias de desempenho em *note zlib: 139.

   - gh-131025(4): Atualiza o instalador do Windows para ser fornecido
     com o SQLite 3.49.1.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131423

   (2) https://github.com/python/cpython/issues/131453

   (3) https://github.com/python/cpython/issues/91349

   (4) https://github.com/python/cpython/issues/131025


File: python.info,  Node: Ferramentas/Demos<8>,  Next: Testes<6>,  Prev: Windows<7>,  Up: Python 3 14 0 alpha 7

1.24.10.3 Ferramentas/Demos
...........................

   - gh-132121(1): Sempre escapa caracteres Unicode não imprimíveis em
     ‘pygettext’.

   - gh-131852(2): ‘msgfmt’ não adiciona mais ‘POT-Creation-Date’ aos
     arquivos ‘.mo’ gerados para consistência com GNU ‘msgfmt’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132121

   (2) https://github.com/python/cpython/issues/131852


File: python.info,  Node: Testes<6>,  Next: Segurança<9>,  Prev: Ferramentas/Demos<8>,  Up: Python 3 14 0 alpha 7

1.24.10.4 Testes
................

   - gh-131277(1): Permite remover a configuração de uma ou mais
     variáveis de ambiente simultaneamente via *note
     EnvironmentVarGuard.unset(): 17d8.  Patch por Bénédikt Tran.

   - gh-131050(2): ‘test_ssl.test_dh_params’ é ignorado se a biblioteca
     TLS subjacente não oferecer suporte a Diffie-Hellman efêmero de
     campo finito.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131277

   (2) https://github.com/python/cpython/issues/131050


File: python.info,  Node: Segurança<9>,  Next: Biblioteca<10>,  Prev: Testes<6>,  Up: Python 3 14 0 alpha 7

1.24.10.5 Segurança
...................

   - gh-131809(1): Atualiza libexpat empacotado para 2.7.1

   - gh-131261(2): Atualiza para libexpat 2.7.0

   - gh-121284(3): 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/121284


File: python.info,  Node: Biblioteca<10>,  Next: Documentação<6>,  Prev: Segurança<9>,  Up: Python 3 14 0 alpha 7

1.24.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: dc. para
     controlar o uso de *note os.posix_spawn(): 528.

   - gh-132159(4): Não oculta argumentos de usuário em ‘__new__()’
     gerado pelo decorador *note warnings.deprecated: 483.  Patch por
     Xuehai Pan.

   - gh-132168(5): O tipo *note ctypes.py_object: 1f2. agora oferece
     suporte a subscrição, tornando-o um *note tipo genérico: 1a1.

   - gh-84481(6): Adiciona o atributo ‘zipfile.ZipFile.data_offset’, que
     armazena o deslocamento para o início dos dados ZIP em um arquivo,
     quando disponível.  Quando o atributo *note zipfile.ZipFile: 8c8.
     for aberto no modo ‘'w'’ ou ‘'x'’ e o arquivo subjacente não
     oferecer suporte a ‘tell()’, o valor será ‘None’.

   - gh-132075(7): Corrige possível uso de estruturas de endereço *note
     socket: d1. com membros não inicializados.  Agora, todos os membros
     da estrutura são inicializados com zeros por padrão.

   - gh-118761(8): Melhora o tempo de importação em até 27x para o
     módulo *note string: d8.  Patch por Adam Turner.

   - gh-125434(9): Exibe o nome da thread em *note faulthandler: 5c.
     Patch por Victor Stinner.

   - gh-132002(10): Corrige falha ao desalocar *note
     contextvars.ContextVar: 17db. com nomes de strings estranhos e não
     hasheáveis.

   - gh-131938(11): *note xml.etree.ElementTree: 12b.: Atualiza a
     mensagem de erro quando um elemento a ser removido via *note
     Element.remove: 17dc. não é encontrado.  Patch por Bénédikt Tran.

   - gh-115942(12): Adiciona *note threading.RLock.locked(): 17a4, *note
     multiprocessing.Lock.locked(): 17dd, *note
     multiprocessing.RLock.locked(): 17de. e permite *note
     multiprocessing.managers.SyncManager.Lock(): 1589. e *note
     multiprocessing.managers.SyncManager.RLock(): 158a. intermediar
     chamada de ‘locked()’.

   - gh-131974(13): Corrige vários problemas de segurança de thread em
     *note ctypes: 2e. na construção com *note threads livres: 1f3.

   - gh-118761(14): Melhora o tempo de importação do módulo *note ast:
     9. extraindo a função *note unparse(): ad8. para um módulo
     auxiliar.

   - gh-107369(15): Melhorado o desempenho de *note textwrap.indent():
     576. em uma média de ~1,3x.  Patch por Adam Turner.

   - gh-131792(16): Melhorado o desempenho de *note textwrap.dedent():
     1a9. em uma média de ~2,4x (com melhorias de até 4x para entradas
     grandes) e corrigimos um bug em que linhas em branco com caracteres
     de espaço em branco diferentes de espaço ou tabulação horizontal
     não eram normalizadas para quebra de linha.  Patch por Adam Turner,
     Marius Juston e Pieter Eendebak.

   - gh-131668(17): *note socket: d1.: Corrige código que analisa
     endereços de soquete AF_BLUETOOTH.

   - gh-60115(18): suporte a módulos congelados para *note
     linecache.getline(): 23f.

   - gh-131492(19): Corrige um vazamento de recursos quando a construção
     de um *note gzip.GzipFile: 650. com um nome de arquivo falha, por
     exemplo, ao passar um ‘compresslevel’ inválido.

   - gh-131435(20): Melhoria de desempenho de 10-20% de *note
     random.randint(): 142b.

   - gh-131461(21): Corrige *note ResourceWarning: 546. ao construir um
     *note gzip.GzipFile: 650. no modo de gravação com um objeto de
     arquivo quebrado.

   - gh-125866(22): Descontinua o módulo ‘nturl2path’.  Em vez disso,
     chame *note urllib.request.url2pathname(): 2bc. e *note
     pathname2url(): 2be.

   - gh-126367(23): Corrige problema em que *note
     urllib.request.url2pathname(): 2bc. levantava *note OSError: 2bf.
     ao receber um URI do Windows contendo um caractere de dois pontos
     que não seguia uma letra de unidade, como antes de um fluxo de
     dados alternativo NTFS.

   - gh-120144(24): Desabilita o evento ‘CALL’ em *note bdb: 10. no
     backend ‘monitoring’ quando não precisarmos de novos eventos no
     objeto código para obter um melhor desempenho.

   - gh-131358(25): Registra ‘cseuckr’ como um apelido de codificação
     para ‘euc_kr’.

   - gh-131325(26): Corrige implementação de fallback do sendfile para
     drenar dados após gravar no transporte em *note asyncio: b.

   - gh-90548(27): *note platform.libc_ver(): 1766. agora pode detectar
     e relatar a versão de ‘musl’ no Alpine Linux.

   - gh-129843(28): Corrige passagem de argumento incorreta em *note
     warnings.warn_explicit(): ef1.

   - gh-70647(29): Ao criar um objeto *note datetime: 34. com uma data
     fora do intervalo, um erro mais informativo é levantado.

   - gh-130914(30): Permite que *note
     graphlib.TopologicalSorter.prepare(): 21e. seja chamado mais de uma
     vez, desde que a classificação não tenha sido iniciada.  Patch por
     Daniel Pope.

   - gh-131236(31): Permite gerar vários UUIDs de uma só vez via *note
     python -m uuid -count: 2c6.

   - gh-126895(32): Corrige *note readline: bf. em construção com *note
     threads livres: 1f3.

   - gh-121468(33): ‘$_asynctask’ é adicionado como uma variável de
     conveniência *note pdb: aa. para acessar a tarefa asyncio atual, se
     aplicável.

   - gh-118761(34): Melhoria no tempo de importação de *note locale: 8a.
     usando a importação preguiçosa ‘re’.  Patch por Semyon Moroz.

   - gh-129598(35): Corrige *note ast.unparse(): ad8. quando *note
     ast.Interactive: 17df. contém múltiplas instruções.

   - gh-85162(36): O módulo *note http.server: 76. agora inclui suporte
     embutido para servidores HTTPS expostos por *note
     http.server.HTTPSServer: 227.  Essa funcionalidade é exposta pela
     interface de linha de comando (‘python -m http.server’) por meio
     das opções ‘--tls-cert’, ‘--tls-key’ e ‘--tls-password-file’.
     Patch por Semyon Moroz.

   - gh-129463(37): As implementações de igualdade e hash para *note
     annotationlib.ForwardRef: 17c3. agora usam todos os atributos do
     objeto.  Dois objetos ‘ForwardRef’ são iguais somente se todos os
     atributos forem iguais.

   - gh-128593(38): Objetos *note annotationlib.ForwardRef: 17c3. não
     armazenam mais seus valores em cache quando são avaliados com
     sucesso.  Chamadas sucessivas para *note
     annotationlib.ForwardRef.evaluate(): 1770. podem retornar valores
     diferentes.

   - gh-117779(39): Corrigida a leitura de entradas duplicadas em *note
     zipfile: 137. por nome.  A leitura de entradas duplicadas (exceto a
     última) por ‘ZipInfo’ agora emite um aviso em vez de levantar uma
     exceção.

   - gh-128715(40): A classe de descritores de campo *note Structure:
     1e4./*note Union: 1e5. agora está disponível como *note CField:
     1e7. e tem novos atributos para auxiliar na depuração e
     introspecção.

   - gh-128055(41): Corrige
     ‘test.test_sysconfig.test_sysconfigdata_json’ ao executar fora do
     diretório de construção (por exemplo, após a instalação).

   - gh-126037(42): *note xml.etree.ElementTree: 12b.: Corrige uma falha
     em *note Element.find: 17e0, *note Element.findtext: 17e1. e *note
     Element.findall: 17e2. quando a tag a ser encontrada implementa um
     método *note __eq__(): ce5. que altera o elemento que está sendo
     consultado.  Patch por Bénédikt Tran.

   - gh-127794(43): Quando cabeçalhos são adicionados aos objetos *note
     email.message.Message: 57a, por meio de *note
     email.message.Message.__setitem__(): 17e3. ou *note
     email.message.Message.add_header(): 17e4, o nome do campo agora é
     validado de acordo com RFC 5322, Seção 2.2(44) e uma *note
     ValueError: 2ea. é levantada se o nome do campo contiver caracteres
     inválidos.

   - gh-123599(45): Descontinua ‘pathlib.PurePath.as_uri()’; em vez
     disso, use *note pathlib.Path.as_uri(): 31a.

   - gh-126033(46): *note xml.etree.ElementTree: 12b.: Corrige uma falha
     em *note Element.remove: 17dc. quando o elemento é mutado
     simultaneamente.  Patch por Bénédikt Tran.

   - gh-120144(47): Adiciona o backend opcional de ‘sys.monitoring’ a
     *note bdb: 10. e usa-o para *note pdb: aa.

   - gh-74598(48): Adiciona *note fnmatch.filterfalse(): 210. para
     excluir nomes que correspondam a um padrão.  Patch por Bénédikt
     Tran.

   - gh-114917(49): Adiciona suporte para AI_NUMERICSERV na emulação
     getaddrinfo

   - bpo-17254(50): Adicionados apelidos para o idioma tailandês usando
     o Microsoft Code Pages.

   ---------- 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/132168

   (6) https://github.com/python/cpython/issues/84481

   (7) https://github.com/python/cpython/issues/132075

   (8) https://github.com/python/cpython/issues/118761

   (9) https://github.com/python/cpython/issues/125434

   (10) https://github.com/python/cpython/issues/132002

   (11) https://github.com/python/cpython/issues/131938

   (12) https://github.com/python/cpython/issues/115942

   (13) https://github.com/python/cpython/issues/131974

   (14) https://github.com/python/cpython/issues/118761

   (15) https://github.com/python/cpython/issues/107369

   (16) https://github.com/python/cpython/issues/131792

   (17) https://github.com/python/cpython/issues/131668

   (18) https://github.com/python/cpython/issues/60115

   (19) https://github.com/python/cpython/issues/131492

   (20) https://github.com/python/cpython/issues/131435

   (21) https://github.com/python/cpython/issues/131461

   (22) https://github.com/python/cpython/issues/125866

   (23) https://github.com/python/cpython/issues/126367

   (24) https://github.com/python/cpython/issues/120144

   (25) https://github.com/python/cpython/issues/131358

   (26) https://github.com/python/cpython/issues/131325

   (27) https://github.com/python/cpython/issues/90548

   (28) https://github.com/python/cpython/issues/129843

   (29) https://github.com/python/cpython/issues/70647

   (30) https://github.com/python/cpython/issues/130914

   (31) https://github.com/python/cpython/issues/131236

   (32) https://github.com/python/cpython/issues/126895

   (33) https://github.com/python/cpython/issues/121468

   (34) https://github.com/python/cpython/issues/118761

   (35) https://github.com/python/cpython/issues/129598

   (36) https://github.com/python/cpython/issues/85162

   (37) https://github.com/python/cpython/issues/129463

   (38) https://github.com/python/cpython/issues/128593

   (39) https://github.com/python/cpython/issues/117779

   (40) https://github.com/python/cpython/issues/128715

   (41) https://github.com/python/cpython/issues/128055

   (42) https://github.com/python/cpython/issues/126037

   (43) https://github.com/python/cpython/issues/127794

   (44) https://datatracker.ietf.org/doc/html/rfc5322.html#section-2.2

   (45) https://github.com/python/cpython/issues/123599

   (46) https://github.com/python/cpython/issues/126033

   (47) https://github.com/python/cpython/issues/120144

   (48) https://github.com/python/cpython/issues/74598

   (49) https://github.com/python/cpython/issues/114917

   (50) https://bugs.python.org/issue?@action=redirect&bpo=17254


File: python.info,  Node: Documentação<6>,  Next: Núcleo e embutidos<9>,  Prev: Biblioteca<10>,  Up: Python 3 14 0 alpha 7

1.24.10.7 Documentação
......................

   - gh-131417(1): Menciona *note asyncio.Future: dba. e *note
     asyncio.Task: 1c7. na lista de classes genéricas.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131417


File: python.info,  Node: Núcleo e embutidos<9>,  Next: API C<7>,  Prev: Documentação<6>,  Up: Python 3 14 0 alpha 7

1.24.10.8 Núcleo e embutidos
............................

   - gh-131798(1): Permite que o JIT remova uma instrução extra
     ‘_TO_BOOL_BOOL’ após ‘_CONTAINS_OP_SET’ definindo o tipo de retorno
     como bool.

   - gh-132011(2): Corrige falha ao chamar *note list.append(): 8d1.
     como um método não vinculado.

   - gh-131998(3): Corrige uma falha ao usar um objeto de método não
     vinculado *note descritor: 17e7. em uma função onde um descritor de
     método vinculado foi usado.

   - gh-131591(4): Implementa a PEP 768(5) (interface de depuração
     externa segura para CPython).  Adiciona uma nova função *note
     sys.remote_exec(): 16d. ao módulo *note sys: df.  Esta função
     agenda a execução de um arquivo Python em um processo separado.
     Patch por Pablo Galindo, Matt Wozniski e Ivona Stojanovic.

   - gh-131798(6): Permite que o JIT omita a proteção str no teste de
     veracidade quando o tipo str for conhecido.

   - gh-131833(7): Adiciona suporte para a remoção opcional de
     parênteses de agrupamento ao usar vários tipos de exceção, conforme
     a PEP 758(8).  Patch por Pablo Galindo.

   - gh-130924(9): O uso de um nome em uma anotação de escopo de função
     não aciona mais a criação de uma célula para essa variável.  Isso
     corrige uma regressão em versões alfa anteriores do Python 3.14.

   - gh-131800(10): Melhora a capacidade do JIT experimental de remover
     verificações de tipo para determinadas operações de subscrição.

   - gh-131738(11): O compilador emite código otimizado para chamadas
     any/all/tuple embutidas sobre uma expressão geradora.

   - gh-131719(12): Corrige a falta de verificação de NULL em
     ‘_PyMem_FreeDelayed’ na construção com *note threads livres: 1f3.

   - gh-131670(13): Corrige falha em *note anext(): 9cc. na
     sincronização *note __anext__(): 17e8. levantando uma exceção.

   - gh-131666(14): Correção da assinatura dos objetos
     ‘anext_awaitable.close’.  Patch por Bénédikt Tran.

   - gh-130415(15): Otimiza a comparação de duas constantes em
     construções JIT

   - gh-129149(16): Adiciona um atalho para inteiros pequenos e médios
     em *note PyLong_FromInt32(): 3a0, *note PyLong_FromUInt32(): 3a2,
     *note PyLong_FromInt64(): 3a1. e *note PyLong_FromUInt64(): 3a3.
     Patch por Chris Eibl.

   - gh-130887(17): Otimiza a geração de código AArch64 para o JIT.
     Patch por Diego Russo

   - gh-130956(18): Otimiza a geração de código AArch64 para o JIT.
     Patch por Diego Russo

   - gh-130928(19): Corrige mensagem de erro ao formatar bytes usando o
     sinalizador ‘'i'’.  Patch por Maxim Ageev.

   - gh-130935(20): Anotações em nível de classe e módulo definidas
     condicionalmente agora só são refletidas em ‘__annotations__’ se o
     bloco em que se encontram for executado.  Patch por Jelle Zijlstra.

   - gh-130775(21): Não falha em ‘column’ negativo e ‘end_column’ em
     locais *note ast: 9.

   - gh-130704(22): Otimize ‘LOAD_FAST’ e sua forma de superinstrução
     para reduzir a sobrecarga na contagem de referências.  Essas
     instruções são substituídas por variantes mais rápidas que carregam
     referências emprestadas na pilha de operandos quando podemos provar
     que a referência no quadro sobrevive à referência carregada na
     pilha.

   - gh-88887(23): Corrigindo vazamento do processo de
     multiprocessamento Resource Tracker, geralmente observado ao
     executar Python como PID 1.

   - gh-130115(24): Corrige um problema com identificadores de thread
     sendo estendidos por sinal em algumas plataformas.

   - gh-99108(25): Adiciona suporte para implementação embutida de HMAC
     ( RFC 2104(26)) com base em HACL*.  Patch por Bénédikt Tran.

   - gh-130080(27): Implementa a PEP 765: Não permitir
     return/break/continue que saiam de um bloco finally.

   - gh-129900(28): Corrige códigos de retorno dentro de *note
     SystemExit: f30. que não estão sendo retornados pelo REPL.

   - gh-128632(29): 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-126703(30): Melhora o desempenho dos métodos embutidos usando
     uma freelist.

   - gh-126703(31): Melhora o desempenho de *note range: b33. usando uma
     freelist.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131798

   (2) https://github.com/python/cpython/issues/132011

   (3) https://github.com/python/cpython/issues/131998

   (4) https://github.com/python/cpython/issues/131591

   (5) https://peps.python.org/pep-0768/

   (6) https://github.com/python/cpython/issues/131798

   (7) https://github.com/python/cpython/issues/131833

   (8) https://peps.python.org/pep-0758/

   (9) https://github.com/python/cpython/issues/130924

   (10) https://github.com/python/cpython/issues/131800

   (11) https://github.com/python/cpython/issues/131738

   (12) https://github.com/python/cpython/issues/131719

   (13) https://github.com/python/cpython/issues/131670

   (14) https://github.com/python/cpython/issues/131666

   (15) https://github.com/python/cpython/issues/130415

   (16) https://github.com/python/cpython/issues/129149

   (17) https://github.com/python/cpython/issues/130887

   (18) https://github.com/python/cpython/issues/130956

   (19) https://github.com/python/cpython/issues/130928

   (20) https://github.com/python/cpython/issues/130935

   (21) https://github.com/python/cpython/issues/130775

   (22) https://github.com/python/cpython/issues/130704

   (23) https://github.com/python/cpython/issues/88887

   (24) https://github.com/python/cpython/issues/130115

   (25) https://github.com/python/cpython/issues/99108

   (26) https://datatracker.ietf.org/doc/html/rfc2104.html

   (27) https://github.com/python/cpython/issues/130080

   (28) https://github.com/python/cpython/issues/129900

   (29) https://github.com/python/cpython/issues/128632

   (30) https://github.com/python/cpython/issues/126703

   (31) https://github.com/python/cpython/issues/126703


File: python.info,  Node: API C<7>,  Next: Construção<8>,  Prev: Núcleo e embutidos<9>,  Up: Python 3 14 0 alpha 7

1.24.10.9 API C
...............

   - gh-131740(1): Atualiza PyUnstable_GC_VisitObjects para percorrer a
     geração permanente.

   - gh-131525(2): O PyTupleObject agora armazena em cache o valor de
     hash calculado no novo campo ob_hash.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131740

   (2) https://github.com/python/cpython/issues/131525


File: python.info,  Node: Construção<8>,  Prev: API C<7>,  Up: Python 3 14 0 alpha 7

1.24.10.10 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-131691(3): O clang-cl no Windows precisa da opção ‘/EHa’ para
     oferecer suporte a SEH (gerenciamento de exceções estruturadas)
     corretamente.  Correção por Chris Eibl.

   - gh-131278(4): Adiciona o sinalizador de otimização
     ‘WITH_COMPUTED_GOTOS’ às construções do Windows para quando usar um
     compilador compatível (atualmente clang-cl).  Patch por Chris Eibl.

   - gh-130213(5): Atualiza a biblioteca HACL* fornecida para corrigir
     problemas de construção com compiladores clang mais antigos.

   - gh-130673(6): Corrige possível erro ‘KeyError’ ao manipular seções
     de objetos durante o processo de construção JIT.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131865

   (2) https://github.com/python/cpython/issues/131675

   (3) https://github.com/python/cpython/issues/131691

   (4) https://github.com/python/cpython/issues/131278

   (5) https://github.com/python/cpython/issues/130213

   (6) https://github.com/python/cpython/issues/130673


File: python.info,  Node: Python 3 14 0 alpha 6,  Next: Python 3 14 0 alpha 5,  Prev: Python 3 14 0 alpha 7,  Up: Changelog

1.24.11 Python 3.14.0 alpha 6
-----------------------------

'Data de lançamento: 2025-03-14'

* Menu:

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


File: python.info,  Node: macOS<4>,  Next: Windows<8>,  Up: Python 3 14 0 alpha 6

1.24.11.1 macOS
...............

   - gh-128540(1): Garante que o navegador da web seja iniciado por
     *note webbrowser.open(): 17ed. no macOS, mesmo para URLs ‘file://’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128540


File: python.info,  Node: Windows<8>,  Next: Ferramentas/Demos<9>,  Prev: macOS<4>,  Up: Python 3 14 0 alpha 6

1.24.11.2 Windows
.................

   - gh-131020(1): pylauncher(2) detecta corretamente um BOM ao procurar
     pelo shebang.  Correção por Chris Eibl.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131020

   (2) https://github.com/python/cpython/tree/3.14/PC/launcher2.c


File: python.info,  Node: Ferramentas/Demos<9>,  Next: Testes<7>,  Prev: Windows<8>,  Up: Python 3 14 0 alpha 6

1.24.11.3 Ferramentas/Demos
...........................

   - gh-130453(1): Torna possível substituir palavra reservada padrão em
     ‘pygettext’.

   - gh-85012(2): Redefine corretamente ‘msgctxt’ ao compilar mensagens
     em ‘msgfmt’.

   - gh-130453(3): Estende o suporte para especificar palavras
     reservadas personalizadas em ‘pygettext’.

   - gh-130195(4): Adiciona mensagens de aviso quando a opção
     ‘-a/--extract-all’ não implementada ‘pygettext’ for chamada.

   - gh-130057(5): Adiciona suporte para comentários do tradutor em
     ‘pygettext.py’.

   - gh-130025(6): O ambiente de teste do iOS agora manipula
     corretamente links simbólicos usados como referências de framework
     Python.

   - gh-129911(7): Corrige a entrada de palavra reservada na saída de
     ajuda de ‘pygettext’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130453

   (2) https://github.com/python/cpython/issues/85012

   (3) https://github.com/python/cpython/issues/130453

   (4) https://github.com/python/cpython/issues/130195

   (5) https://github.com/python/cpython/issues/130057

   (6) https://github.com/python/cpython/issues/130025

   (7) https://github.com/python/cpython/issues/129911


File: python.info,  Node: Testes<7>,  Next: Segurança<10>,  Prev: Ferramentas/Demos<9>,  Up: Python 3 14 0 alpha 6

1.24.11.4 Testes
................

   - gh-129200(1): 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(2): 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(3): Os testes de colorização terminal não são mais
     sensíveis ao valor da variável ‘TERM’ no ambiente de teste.

   - gh-129401(4): Corrige um teste instável em ‘test_repr_rlock’ que
     verifica a representação de *note multiprocessing.RLock: 17be.

   - gh-126332(5): Adiciona testes de unidade para pyrepl.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129200

   (2) https://github.com/python/cpython/issues/130292

   (3) https://github.com/python/cpython/issues/130293

   (4) https://github.com/python/cpython/issues/129401

   (5) https://github.com/python/cpython/issues/126332


File: python.info,  Node: Segurança<10>,  Next: Biblioteca<11>,  Prev: Testes<7>,  Up: Python 3 14 0 alpha 6

1.24.11.5 Segurança
...................

   - gh-127371(1): 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.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127371


File: python.info,  Node: Biblioteca<11>,  Next: Documentação<7>,  Prev: Segurança<10>,  Up: Python 3 14 0 alpha 6

1.24.11.6 Biblioteca
....................

   - gh-131204(1): Usa a fonte monoespaçada do System Font Stack para
     suporte multiplataforma em *note difflib.HtmlDiff: 200.

   - gh-131196(2): Melhora o desempenho de *note uuid.UUID.hex: 17f3. e
     *note uuid.UUID.__str__: 825.

   - gh-130940(3): O comportamento de ‘PyConfig.use_system_logger’ foi
     modificado para ser habilitado por padrão no iOS. Ele permanece
     desabilitado por padrão no macOS.

   - gh-131123(4): Complementações suportadas para atributos de
     variáveis de conveniência em *note pdb: aa.

   - gh-93096(5): Removida CLI não documentado ‘python -m difflib’.  Em
     vez disso, use ‘python -m doctest Lib/difflib.py -v’.  Patch por
     Semyon Moroz.

   - gh-93096(6): Removidos os argumentos não documentados ‘-t’ e ‘-v’
     de ‘python -m pickle’.  Use ‘python -m doctest Lib/pickle.py -v’ em
     seu lugar.  Patch por Semyon Moroz.

   - gh-81267(7): Corrige a mensagem de erro *note time.sleep(): 8a1.
     quando um objeto que não pode ser interpretado como um inteiro ou
     float é fornecido.

   - gh-93096(8): Removidos os argumentos não documentados ‘-t’ e ‘-v’
     de ‘python -m pickletools’.  Em vez disso, use ‘python -m doctest
     Lib/pickletools.py -v’.  Patch por Semyon Moroz.

   - gh-131045(9): Corrige problema com ‘__contains__’, valores e
     pseudomembros para *note enum.Flag: 82a.

   - gh-130959(10): Corrige implementação puro Python de *note
     datetime.time.fromisoformat(): 81e. 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-130806(11): Exclui *note gzip.GzipFile: 650. antes de ser
     fechado agora emite uma *note ResourceWarning: 546.

   - gh-130637(12): Adiciona validação para dados de resposta numérica
     no método poplib.POP3.stat()

   - gh-130665(13): Aplica somente a localidade à *note CLI calendar:
     1d0. quando definido via ‘--locale’ e não via variável de ambiente
     ‘LANG’.

   - gh-130660(14): ‘sys.ps1’ e ‘sys.ps2’ agora são restaurados após a
     chamada *note code.interact(): 17f4.

   - gh-130608(15): Remove o argumento 'dirs_exist_ok' de *note
     pathlib.Path.copy(): 266. e *note copy_into(): 267.  Esses métodos
     são novos no Python 3.14.

   - gh-130461(16): Remove as diretivas ‘.. index::’ da documentação do
     módulo *note uuid: 116.  Essas diretivas criavam entradas no índice
     geral para *note getnode(): d94, bem como para as funções
     construtoras *note uuid1(): d95, *note uuid3(): 2e3, *note uuid4():
     2e5, *note uuid5(): 2e4. e *note uuid8(): 2c3.

   - 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-82987(18): Pontos de interrupção em linha como *note
     breakpoint(): 270. ou *note pdb.set_trace(): 271. sempre
     interromperão o programa ao chamar o quadro, ignorando o padrão
     ‘skip’ (se houver).

   - gh-125377(19): ‘<tab>’ no início da linha em *note pdb: aa. a
     entrada multilinha preencherá uma indentação de 4 espaços agora, em
     vez de inserir um caractere ‘\t’.

   - gh-125413(20): Certifica-se de que o caminho retornado de *note
     pathlib.Path.copy(): 266. ou *note move(): 268. tenha *note info:
     26a. atualizado.

   - gh-65697(21): O configparser do stdlib agora tentará validar se as
     chaves que ele grava não resultarão em corrupção de arquivo
     (criando um arquivo que não poderá ser analisado com precisão por
     uma futura chamada read() do mesmo analisador sintático).  Tentar
     corromper o comando write() levantará uma InvalidWriteError.

   - gh-125413(22): Acelera *note Path.copy: 266. fazendo melhor uso de
     *note info: 26a. internamente.

   - gh-130285(23): Corrige casos extremos para *note random.sample():
     942. 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-124703(24): Executa o comando ‘quit’ em *note pdb: aa. levantará
     *note bdb.BdbQuit: 277. quando *note pdb: aa. for iniciado em um
     console interativo usando *note breakpoint(): 270. ou *note
     pdb.set_trace(): 271.

   - gh-107773(25): Torna a subclasse *note datetime: 34. *note
     __repr__(): 824. consistente em ambas as implementações.  Patch por
     Semyon Moroz.

   - gh-130250(26): Corrige uma regressão em ‘traceback.print_last()’.

   - gh-123471(27): Torna as iterações simultâneas sobre *note
     itertools.batched: 50b. seguras sob threads livres.

   - gh-57537(28): Suporte a pontos de interrupção para módulos *note
     zipimport: 138. em *note pdb: aa.

   - gh-130230(29): Corrige falha em *note pow(): 1a4. com apenas *note
     Decimal: 1fd. terceiro argumento.

   - gh-126944(30): Mostra erros explícitos quando os argumentos
     obrigatórios dos comandos *note pdb: aa. estiverem faltando

   - gh-127750(31): Melhora a representação dos métodos e descritores
     *note functools.singledispatchmethod: bd9.

   - gh-128520(32): Aplica conversão de tipo consistentemente nos
     métodos *note pathlib.PurePath: 6c2. e *note Path: 265. pode
     aceitar um objeto de caminho como argumento, como *note match():
     6c8. e *note rename(): 17f5.  O argumento agora é convertido em
     objeto de caminho se não possuir o atributo *note with_segments():
     6c3, e não em caso contrário.

   - gh-118761(33): Reverte uma alteração na versão anterior, tentando
     tornar preguiçosas algumas importações stdlib usadas no módulo
     *note subprocess: dc, pois isso estava causando erros durante os
     finalizadores ‘__del__’ que chamavam métodos como ‘terminate’,
     ‘kill’ ou ‘send_signal’.

   - gh-130164(34): Corrigia uma falha ao levantar *note TypeError: 198.
     em *note inspect.Signature.bind(): 17f6. para argumentos somente
     posicionais fornecidos como nomeados quando um argumento nomeado
     variável (por exemplo, ‘**kwargs’) está presente.

   - gh-130151(35): Corrigir vazamentos de referência em
     ‘_hashlib.hmac_new()’ e ‘_hashlib.hmac_digest()’.  Patch por
     Bénédikt Tran.

   - gh-130145(36): Corrige ‘asyncio.AbstractEventloop.run_forever()’
     quando outro laço já estiver em execução.

   - gh-130139(37): Corrige bug onde *note ast.parse(): 1c2. não gerava
     erro na entrada AST que não era do tipo correto, quando chamado com
     optimize=False.

   - gh-127260(38): Proibição do uso de dois pontos (“:”) como separador
     de componentes fracionários e outras melhorias na consistência de
     levantar erros entre as implementações em C e Python de *note
     datetime.time.fromisoformat(): 81e. e *note
     datetime.datetime.fromisoformat(): 81f.  Patch por Semyon Moroz.

   - gh-85795(39): O uso de *note super(): 1a6. e ‘__class__’ *note
     variável de clausura: 17f7. em métodos definidos pelo usuário das
     subclasses *note typing.NamedTuple: 32f. agora é explicitamente
     proibido em tempo de execução.  Contribuição de Bartosz Sławecki em
     gh-130082(40).

   - gh-118761(41): Melhora o tempo de importação de *note cmd: 1a.
     importando lentamente *note inspect: 82. e removendo *note string:
     d8.  Patch por Semyon Moroz.

   - gh-129726(42): Corrige *note gzip.GzipFile: 650. 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: 11a.

   - gh-127750(43): Remove o armazenamento em cache quebrado *note
     functools.singledispatchmethod(): bd9. introduzido em gh-85160(44).
     Obtém o mesmo desempenho usando otimizações diferentes.

   - gh-129948(45): Adiciona suporte para *note set: 184. compartilhado
     para *note multiprocessing.managers.SyncManager: 17f8. via *note
     SyncManager.set(): 24e.

   - gh-129965(46): Atualização dos tipos MIME para ‘.avi’ e ‘.wav’.
     Adição dos tipos MIME para ‘.docx’, ‘.pptx’, ‘.xlsx’, ‘.epub’,
     ‘.flac’, ‘.m4a’, ‘.odg’, ‘.odp’, ‘.ods’, ‘.odt’, ‘.oga’, ‘.ogg’,
     ‘.ogx’ e ‘.weba’.  Patch por Hugo van Kemenade.

   - gh-129889(47): Suporte ao protocolo do gerenciador de contexto por
     *note contextvars.Token: 1e1.  Patch por Andrew Svetlov.

   - gh-97850(48): Atualiza o aviso de descontinuação de *note
     importlib.abc.Loader.load_module(): a5f.

   - gh-129678(49): *note configparser.ConfigParser: 4d8.: não escreve
     uma seção vazia sem nome

   - gh-128641(50): Restaura o desempenho de *note
     configparser.ConfigParser.read(): 1657.

   - gh-129569(51): Corrige *note unicodedata.normalize(): 8d9. para
     sempre retornar um objeto embutido *note str: 169. quando receber
     uma entrada de uma subclasse *note str: 169, independentemente de a
     string já estar normalizada.

   - gh-128231(52): 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-96092(53): Corrige um bug em *note traceback.walk_stack(): 1077.
     chamado com None, que estava pulando mais quadros do que nas
     versões anteriores.  Esta correção de bug também altera o
     walk_stack para percorrer a pilha no quadro em que foi chamado, em
     vez de onde foi usado pela primeira vez.

   - gh-129288(54): Adiciona os campos opcionais ‘l2_cid’ e
     ‘l2_bdaddr_type’ à tupla sockaddr *note socket: d1.
     ‘BTPROTO_L2CAP’.

   - gh-128703(55): Corrige *note mimetypes.guess_type(): 511. para usar
     o mapeamento padrão para ‘Content-Type’ vazio no registro.

   - gh-128647(56): Escreve rapidamente nos buffers passados para as
     implementações *note readinto(): 17f9. e *note readinto1(): 1011.
     de *note gzip.GzipFile: 650, evitando alocações desnecessárias.
     Patch por Chris Markiewicz.

   - gh-128184(57): Melhoria na exibição do objeto *note
     annotationlib.ForwardRef: 17c3. dentro das representações *note
     inspect.Signature: 4dd.  Isso também corrige uma *note NameError:
     44f. levantada ao usar *note dataclasses.dataclass(): 4db. em
     classes com referências futuras não resolvíveis.

   - gh-128041(58): Adiciona *note
     concurrent.futures.ProcessPoolExecutor.terminate_workers(): 1da. e
     *note concurrent.futures.ProcessPoolExecutor.kill_workers(): 1db.
     como formas de encerrar ou eliminar todos os processos de trabalho
     ativos no pool fornecido.  (Contribuição de Charles Machalow em
     gh-130849(59).)

   - gh-127647(60): Adiciona os protocolos *note io.Reader: 235. e *note
     io.Writer: 236. como alternativas para *note typing.IO: 237, *note
     typing.TextIO: 238. e *note typing.BinaryIO: 239.

   - gh-109798(61): Adicionadas informações adicionais às mensagens de
     erro em *note datetime: 34. e tornando as mensagens mais
     consistentes entre as implementações em C e Python.  Patch por
     Semyon Moroz.

   - gh-125746(62): Adia o tempo de remoção do *note
     zipimport.zipimporter.load_module(): 336. descontinuado para 3.15.
     Em vez disso, usar *note zipimport.zipimporter.exec_module(): 337.

   - gh-74028(63): Adiciona o parâmetro opcional ‘buffersize’ a *note
     concurrent.futures.Executor.map(): fd8. para limitar o número de
     tarefas enviadas cujos resultados ainda não foram produzidos.  Se o
     buffer estiver cheio, a iteração sobre os 'iteráveis' será pausada
     até que um resultado seja produzido pelo buffer.

   - gh-124927(64): Caracteres não imprimíveis agora são manipulados
     corretamente no novo REPL.

   - gh-124096(65): 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-89083(66): Adiciona *note uuid.uuid7(): 2c2. para gerar objetos
     UUIDv7, conforme especificado em RFC 9562(67).  Patch por Bénédikt
     Tran.

   - gh-89083(68): Adiciona *note uuid.uuid6(): 2c1. para gerar objetos
     UUIDv6, conforme especificado em RFC 9562(69).  Patch por Bénédikt
     Tran.

   - gh-117151(70): Aumenta ‘io.DEFAULT_BUFFER_SIZE’ de 8k para 128k e
     ajusta ‘open`()’ em plataformas onde *note os.fstat(): f80. fornece
     um campo ‘st_blksize’ (como Linux) para usar ‘max(min(blocksize, 8
     MiB), io.DEFAULT_BUFFER_SIZE)’ em vez de sempre usar o tamanho do
     bloco do dispositivo.  Isso deve melhorar o desempenho de E/S.
     Patch por Romain Morotti.

   - gh-105499(71): Transforma *note types.UnionType: 2a6. em um apelido
     para *note typing.Union: 2a7.  Tanto ‘int | str’ quanto ‘Union[int,
     str]’ agora criam instâncias do mesmo tipo.  Patch por Jelle
     Zijlstra.

   - gh-93096(72): Documenta a linha de comando para *note mimetypes:
     93.  Agora, ele sai com ‘1’ em caso de falha, em vez de ‘0’, e ‘2’
     em caso de parâmetros de linha de comando incorretos, em vez de
     ‘1’.  Além disso, os erros são exibidos em stderr em vez de stdout,
     e seu texto ficou mais conciso.  Patch por Oleg Iarygin e Hugo van
     Kemenade.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131204

   (2) https://github.com/python/cpython/issues/131196

   (3) https://github.com/python/cpython/issues/130940

   (4) https://github.com/python/cpython/issues/131123

   (5) https://github.com/python/cpython/issues/93096

   (6) https://github.com/python/cpython/issues/93096

   (7) https://github.com/python/cpython/issues/81267

   (8) https://github.com/python/cpython/issues/93096

   (9) https://github.com/python/cpython/issues/131045

   (10) https://github.com/python/cpython/issues/130959

   (11) https://github.com/python/cpython/issues/130806

   (12) https://github.com/python/cpython/issues/130637

   (13) https://github.com/python/cpython/issues/130665

   (14) https://github.com/python/cpython/issues/130660

   (15) https://github.com/python/cpython/issues/130608

   (16) https://github.com/python/cpython/issues/130461

   (17) https://github.com/python/cpython/issues/130379

   (18) https://github.com/python/cpython/issues/82987

   (19) https://github.com/python/cpython/issues/125377

   (20) https://github.com/python/cpython/issues/125413

   (21) https://github.com/python/cpython/issues/65697

   (22) https://github.com/python/cpython/issues/125413

   (23) https://github.com/python/cpython/issues/130285

   (24) https://github.com/python/cpython/issues/124703

   (25) https://github.com/python/cpython/issues/107773

   (26) https://github.com/python/cpython/issues/130250

   (27) https://github.com/python/cpython/issues/123471

   (28) https://github.com/python/cpython/issues/57537

   (29) https://github.com/python/cpython/issues/130230

   (30) https://github.com/python/cpython/issues/126944

   (31) https://github.com/python/cpython/issues/127750

   (32) https://github.com/python/cpython/issues/128520

   (33) https://github.com/python/cpython/issues/118761

   (34) https://github.com/python/cpython/issues/130164

   (35) https://github.com/python/cpython/issues/130151

   (36) https://github.com/python/cpython/issues/130145

   (37) https://github.com/python/cpython/issues/130139

   (38) https://github.com/python/cpython/issues/127260

   (39) https://github.com/python/cpython/issues/85795

   (40) https://github.com/python/cpython/issues/130082

   (41) https://github.com/python/cpython/issues/118761

   (42) https://github.com/python/cpython/issues/129726

   (43) https://github.com/python/cpython/issues/127750

   (44) https://github.com/python/cpython/issues/85160

   (45) https://github.com/python/cpython/issues/129948

   (46) https://github.com/python/cpython/issues/129965

   (47) https://github.com/python/cpython/issues/129889

   (48) https://github.com/python/cpython/issues/97850

   (49) https://github.com/python/cpython/issues/129678

   (50) https://github.com/python/cpython/issues/128641

   (51) https://github.com/python/cpython/issues/129569

   (52) https://github.com/python/cpython/issues/128231

   (53) https://github.com/python/cpython/issues/96092

   (54) https://github.com/python/cpython/issues/129288

   (55) https://github.com/python/cpython/issues/128703

   (56) https://github.com/python/cpython/issues/128647

   (57) https://github.com/python/cpython/issues/128184

   (58) https://github.com/python/cpython/issues/128041

   (59) https://github.com/python/cpython/issues/130849

   (60) https://github.com/python/cpython/issues/127647

   (61) https://github.com/python/cpython/issues/109798

   (62) https://github.com/python/cpython/issues/125746

   (63) https://github.com/python/cpython/issues/74028

   (64) https://github.com/python/cpython/issues/124927

   (65) https://github.com/python/cpython/issues/124096

   (66) https://github.com/python/cpython/issues/89083

   (67) https://datatracker.ietf.org/doc/html/rfc9562.html

   (68) https://github.com/python/cpython/issues/89083

   (69) https://datatracker.ietf.org/doc/html/rfc9562.html

   (70) https://github.com/python/cpython/issues/117151

   (71) https://github.com/python/cpython/issues/105499

   (72) https://github.com/python/cpython/issues/93096


File: python.info,  Node: Documentação<7>,  Next: Núcleo e embutidos<10>,  Prev: Biblioteca<11>,  Up: Python 3 14 0 alpha 6

1.24.11.7 Documentação
......................

   - gh-125722(1): Requer Sphinx 8.2.0 ou posterior para construir a
     documentação do Python.  Patch por Adam Turner.

   - gh-129712(2): As tags de wheels suportadas por cada opção do macOS
     Universal SDK agora estão documentadas.

   - gh-46236(3): API C: Documenta *note PyUnicode_RSplit(): 17fb, *note
     PyUnicode_Partition(): 17fc. e *note PyUnicode_RPartition(): 17fd.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125722

   (2) https://github.com/python/cpython/issues/129712

   (3) https://github.com/python/cpython/issues/46236


File: python.info,  Node: Núcleo e embutidos<10>,  Next: API C<8>,  Prev: Documentação<7>,  Up: Python 3 14 0 alpha 6

1.24.11.8 Núcleo e embutidos
............................

   - gh-131141(1): Corrige disputa de dados na instrumentação *note
     sys.monitoring: e0. ao registrar retorno de chamada.

   - gh-130804(2): Corrige suporte a caracteres Unicode no Windows no
     novo REPL.

   - gh-130932(3): Corrige tratamento de exceção incorreto em
     ‘_PyModule_IsPossiblyShadowing’

   - gh-122029(4): *note sys.setprofile(): 16ec. e *note sys.settrace():
     2e0. não gerarão um evento ‘c_call’ para
     ‘INSTRUMENTED_CALL_FUNCTION_EX’ se o método chamável for um método
     com uma função C encapsulada, porque não geramos um evento
     ‘c_return’ nesse caso.

   - gh-129964(5): Corrige travamento do JIT no Windows no Arm.  Patch
     por Diego Russo e Brandt Bucher.

   - gh-130851(6): Corrige uma falha na construção com *note threads
     livres: 1f3. ao construir um objeto *note code: 1b. com *note
     co_consts: 17ff. que contém instâncias de tipos que não são gerados
     pelo compilador de bytecode.

   - gh-128534(7): Certifica-se de que os ramos esquerdo e direito
     tenham a mesma origem para laços ‘async for’.  Adicione esses ramos
     ao iterador ‘co_branches()’.

   - gh-130794(8): Corrige vazamento de memória na construção com *note
     threads livres: 1f3. ao redimensionar uma lista ou dicionário
     compartilhado de vários threads de curta duração.

   - gh-130415(9): Melhora a compreensão do JIT de números inteiros em
     contexto booleano.

   - gh-130382(10): Corrige ‘PyRefTracer_DESTROY’ não sendo enviado de
     ‘Py_DECREF()’ de ‘Python/ceval.c’

   - gh-130574(11): Renumera *note RESUME: 5b2. de 149 para 128.

   - gh-124878(12): Corrige condições de corrida durante a finalização
     do tempo de execução que poderiam levar ao acesso à memória
     liberada.

   - gh-130415(13): Melhora a capacidade do JIT experimental de
     restringir valores booleanos com base nos resultados de testes de
     veracidade.

   - gh-130618(14): 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-123044(15): Certifica-se de que a localização dos alvos de
     ramificação nos casos ‘match’ esteja no corpo, não no padrão.

   - gh-128534(16): Adiciona monitoramento de ramificação (eventos
     ‘BRANCH_LEFT’ e ‘BRANCH_RIGHT’) para laços ‘async for’.

   - gh-130163(17): Corrige possíveis travamentos relacionados à
     alteração simultânea e ao uso dos atributos do módulo *note sys:
     df.

   - gh-122029(18): ‘INSTRUMENTED_CALL_KW’ expandirá o método antes do
     monitoramento para refletir o comportamento real com mais precisão.

   - gh-130415(19): Melhora a capacidade do JIT de otimizar strings em
     contextos booleanos.

   - gh-130396(20): Usa limites de pilha reais (de
     ‘pthread_getattr_np(3)(21)’) para Linux e outros sistemas com
     ‘_GNU_SOURCE’ definido ao determinar limites para proteção de pilha
     C.

   - gh-128396(22): Corrige uma falha que ocorre ao chamar *note
     locals(): 468. 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-129107(23): Corrige mais duas funções *note bytearray: 342. para
     *note threads livres: 1f3.

   - gh-127705(24): Usa referências marcadas (‘_PyStackRef’) para a
     construção padrão, bem como para a construção com threads livres.
     Isso tem um pequeno impacto negativo no desempenho a curto prazo,
     mas permitirá acelerações maiores no futuro e reduzirá
     significativamente os custos de manutenção, permitindo uma única
     implementação de referências marcadas no futuro.

   - gh-130094(25): Corrige duas condições de corrida envolvendo
     importações simultâneas que poderiam levar a falhas espúrias com
     *note ModuleNotFoundError: d31.

   - gh-129107(26): Torna o iterador *note bytearray: 342. seguro sob
     *note threads livres: 1f3.

   - gh-115802(27): Use o modelo de código “médio” mais eficiente para
     código compilado JIT em plataformas suportadas.

   - gh-107956(28): Um arquivo ‘build-details.json’ agora está instalado
     no diretório da biblioteca padrão independente de plataforma
     (implementação da PEP 739(29)).

   - gh-116042(30): Corrige local para SyntaxErrors de escapes inválidos
     no tokenizador.  Patch por Pablo Galindo

   - gh-91079(31): Altera a proteção contra estouro de pilha em C para
     considerar a quantidade de pilha consumida, em vez de um contador.
     Isso permite recursão mais profunda em muitos casos, mas permanece
     seguro.

   - gh-129715(32): Melhora o tratamento do JIT experimental de retornos
     para chamadores desconhecidos.

   - gh-129983(33): Corrige corrida de dados em compile_template em
     ‘sre.c’.

   - gh-129967(34): Corrige uma condição de corrida na construção com
     *note threads livres: 1f3. quando ‘repr(set)’ é chamado
     simultaneamente com ‘set.clear()’.

   - gh-129953(35): A pilha interna (de avaliação) agora é transferida
     para a memória sempre que a execução escapa do interpretador ou do
     código compilado por JIT. Isso não deve ter efeito observável em
     Python ou em extensões embutidas, mas permitirá várias otimizações
     importantes no futuro.

   - gh-129515(36): Esclarece mensagens de erro de sintaxe para
     expressões condicionais quando uma instrução é especificada antes
     de uma palavra reservada *note if: 181. ou depois de uma palavra
     reservada *note else: 17c.

   - gh-129349(37): *note bytes.fromhex(): 190. e *note
     bytearray.fromhex(): 191. agora aceita ASCII *note bytes: 192. e
     *note objetos bytes ou similares: 193.

   - gh-129149(38): Adiciona um atalho para inteiros de tamanho médio em
     *note PyLong_FromSsize_t(): 1800.  Patch por Chris Eibl.

   - gh-129107(39): Torne o *note bytearray: 342. seguro em *note
     threads livres: 1f3.

   - gh-128974(40): Corrige uma falha em *note UnicodeError.__str__:
     825. quando atributos personalizados implementam *note __str__():
     825. com efeitos colaterais.  Patch por Bénédikt Tran.

   - gh-126085(41): *note typing.TypeAliasType: 2ad. agora oferece
     suporte a desempacotamento em estrela.

   - gh-125331(42): ‘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(): 4ab.  Patch por Pablo
     Galindo.

   - gh-121464(43): Torna iterações simultâneas sobre o mesmo iterador
     *note enumerate(): 166f. seguras em threads livres.  Consulte
     Estratégia para Iteradores em Threads Livres(44).

   - gh-87790(45): Suporte para sublinhado e vírgula como separadores de
     milhares na parte fracionária para tipos de apresentação de ponto
     flutuante do novo estilo de formatação de string (com *note
     format(): 199. ou *note Literais de strings formatadas: 19a.).
     Patch por Sergey B Kirpichev.

   - gh-124445(46): Corrige a especialização de apelidos genéricos que
     são genéricos em uma *note typing.ParamSpec: 481. e foram
     especializados com um tipo variável aninhado.

   - gh-120608(47): Adapta *note reversed(): a5b. para uso na construção
     com threads livres.  *note reversed(): a5b. ainda não é seguro para
     thread, no sentido de que iterações simultâneas podem ver o mesmo
     objeto, mas não corromperão o estado do interpretador.

   - gh-100388(48): Corrige o método ‘platform._sys_version()’ quando
     ‘__DATE__’ não estiver definido no momento da compilação, alterando
     a string de data e hora padrão do momento da construção para a
     época UNIX.

   - bpo-44369(49): Melhoria nos erros de sintaxe para strings fechadas
     incorretamente.  Patch por Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131141

   (2) https://github.com/python/cpython/issues/130804

   (3) https://github.com/python/cpython/issues/130932

   (4) https://github.com/python/cpython/issues/122029

   (5) https://github.com/python/cpython/issues/129964

   (6) https://github.com/python/cpython/issues/130851

   (7) https://github.com/python/cpython/issues/128534

   (8) https://github.com/python/cpython/issues/130794

   (9) https://github.com/python/cpython/issues/130415

   (10) https://github.com/python/cpython/issues/130382

   (11) https://github.com/python/cpython/issues/130574

   (12) https://github.com/python/cpython/issues/124878

   (13) https://github.com/python/cpython/issues/130415

   (14) https://github.com/python/cpython/issues/130618

   (15) https://github.com/python/cpython/issues/123044

   (16) https://github.com/python/cpython/issues/128534

   (17) https://github.com/python/cpython/issues/130163

   (18) https://github.com/python/cpython/issues/122029

   (19) https://github.com/python/cpython/issues/130415

   (20) https://github.com/python/cpython/issues/130396

   (21) https://manpages.debian.org/pthread_getattr_np(3)

   (22) https://github.com/python/cpython/issues/128396

   (23) https://github.com/python/cpython/issues/129107

   (24) https://github.com/python/cpython/issues/127705

   (25) https://github.com/python/cpython/issues/130094

   (26) https://github.com/python/cpython/issues/129107

   (27) https://github.com/python/cpython/issues/115802

   (28) https://github.com/python/cpython/issues/107956

   (29) https://peps.python.org/pep-0739/

   (30) https://github.com/python/cpython/issues/116042

   (31) https://github.com/python/cpython/issues/91079

   (32) https://github.com/python/cpython/issues/129715

   (33) https://github.com/python/cpython/issues/129983

   (34) https://github.com/python/cpython/issues/129967

   (35) https://github.com/python/cpython/issues/129953

   (36) https://github.com/python/cpython/issues/129515

   (37) https://github.com/python/cpython/issues/129349

   (38) https://github.com/python/cpython/issues/129149

   (39) https://github.com/python/cpython/issues/129107

   (40) https://github.com/python/cpython/issues/128974

   (41) https://github.com/python/cpython/issues/126085

   (42) https://github.com/python/cpython/issues/125331

   (43) https://github.com/python/cpython/issues/121464

   (44) https://github.com/python/cpython/issues/124397

   (45) https://github.com/python/cpython/issues/87790

   (46) https://github.com/python/cpython/issues/124445

   (47) https://github.com/python/cpython/issues/120608

   (48) https://github.com/python/cpython/issues/100388

   (49) https://bugs.python.org/issue?@action=redirect&bpo=44369


File: python.info,  Node: API C<8>,  Next: Construção<9>,  Prev: Núcleo e embutidos<10>,  Up: Python 3 14 0 alpha 6

1.24.11.9 API C
...............

   - gh-111178(1): Correção da API *note PyCMethod: 95d.: substituição
     de ‘size_t nargs’ por ‘Py_ssize_t nargs’ em *note PyCMethod: 95d.
     Patch por Victor Stinner.

   - gh-130947(2): Adiciona novamente *note PySequence_Fast(): 1802. à
     API C limitada.  Patch por Victor Stinner.

   - gh-128863(3): As seguintes funções privadas estão descontinuado e
     planejadas para remoção no Python 3.18:

        * ‘_PyUnicodeWriter_Init()’: substitua
          ‘_PyUnicodeWriter_Init(&writer)’ com *note writer =
          PyUnicodeWriter_Create(0): 3b1.

        * ‘_PyUnicodeWriter_Finish()’: substitua
          ‘_PyUnicodeWriter_Finish(&writer)’ por *note
          PyUnicodeWriter_Finish(writer): 3b4.

        * ‘_PyUnicodeWriter_Dealloc()’: substitua
          ‘_PyUnicodeWriter_Dealloc(&writer)’ por *note
          PyUnicodeWriter_Discard(writer): 3b3.

        * ‘_PyUnicodeWriter_WriteChar()’: substituta
          ‘_PyUnicodeWriter_WriteChar(&writer, ch)’ com *note
          PyUnicodeWriter_WriteChar(writer, ch): 3b7.

        * ‘_PyUnicodeWriter_WriteStr()’: substitua
          ‘_PyUnicodeWriter_WriteStr(&writer, str)’ por *note
          PyUnicodeWriter_WriteStr(writer, str): 3b9.

        * ‘_PyUnicodeWriter_WriteSubstring()’: substitua
          ‘_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)’
          por *note PyUnicodeWriter_WriteSubstring(writer, str, start,
          end): 3ba.

        * ‘_PyUnicodeWriter_WriteASCIIString()’: substitua
          ‘_PyUnicodeWriter_WriteASCIIString(&writer, str)’ por *note
          PyUnicodeWriter_WriteUTF8(writer, str): 3bc.

        * ‘_PyUnicodeWriter_WriteLatin1String()’: substitua
          ‘_PyUnicodeWriter_WriteLatin1String(&writer, str)’ por *note
          PyUnicodeWriter_WriteUTF8(writer, str): 3bc.

        * ‘_PyUnicodeWriter_Prepare()’: (sem substituto).

        * ‘_PyUnicodeWriter_PrepareKind()’: (sem substituto).

     O projeto pythoncapi-compat(4) pode ser usado para obter essas
     novas funções públicas no Python 3.13 e versões anteriores.

     Patch por Victor Stinner.

   - gh-45325(5): Adiciona um novo parâmetro de formato ‘p’ a *note
     Py_BuildValue(): 3bf. que permite pegar um inteiro em C e produzir
     um objeto Python *note bool: 3c0.  Patch por Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111178

   (2) https://github.com/python/cpython/issues/130947

   (3) https://github.com/python/cpython/issues/128863

   (4) https://github.com/python/pythoncapi-compat/

   (5) https://github.com/python/cpython/issues/45325


File: python.info,  Node: Construção<9>,  Prev: API C<8>,  Up: Python 3 14 0 alpha 6

1.24.11.10 Construção
.....................

   - gh-131035(1): Usa ‘-flto=thin’ para tempos de construção mais
     rápidos usando clang-cl no Windows.  Patch por Chris Eibl.

   - gh-130740(2): 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-130090(3): Construir com ‘PlatformToolset=ClangCL’ no Windows
     agora oferece suporte a PGO (otimização guiada por perfil).  Patch
     por Chris Eibl com apoio inestimável de Steve Dover.

   - gh-129819(4): Permite a construção do JIT com o interpretador de
     chamada de cauda.

   - gh-129989(5): Corrige um bug em que o interpretador da chamada de
     cauda era habilitado quando ‘--without-tail-call-interp’ era
     fornecido ao script configure.

   - gh-129838(6): Não redefine ‘_Py_NO_SANITIZE_UNDEFINED’ ao compilar
     com uma versão recente do GCC e um sanitizador indefinido
     habilitado.

   - gh-82909(7): ‘#pragma’-based linking with ‘python3*.lib’ agora pode
     ser desabilitado com *note Py_NO_LINK_LIB: 441.  Patch por
     Jean-Christophe Fillion-Robin.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131035

   (2) https://github.com/python/cpython/issues/130740

   (3) https://github.com/python/cpython/issues/130090

   (4) https://github.com/python/cpython/issues/129819

   (5) https://github.com/python/cpython/issues/129989

   (6) https://github.com/python/cpython/issues/129838

   (7) https://github.com/python/cpython/issues/82909


File: python.info,  Node: Python 3 14 0 alpha 5,  Next: Python 3 14 0 alpha 4,  Prev: Python 3 14 0 alpha 6,  Up: Changelog

1.24.12 Python 3.14.0 alpha 5
-----------------------------

'Data de lançamento: 2025-02-11'

* Menu:

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


File: python.info,  Node: macOS<5>,  Next: Ferramentas/Demos<10>,  Up: Python 3 14 0 alpha 5

1.24.12.1 macOS
...............

   - gh-91132(1): Atualiza o instalador do macOS para usar o ncurses
     6.5.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91132


File: python.info,  Node: Ferramentas/Demos<10>,  Next: Testes<8>,  Prev: macOS<5>,  Up: Python 3 14 0 alpha 5

1.24.12.2 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-104400(2): Corrige vários bugs na extração mudando para um
     analisador sintático de AST em ‘pygettext’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129248

   (2) https://github.com/python/cpython/issues/104400


File: python.info,  Node: Testes<8>,  Next: Segurança<11>,  Prev: Ferramentas/Demos<10>,  Up: Python 3 14 0 alpha 5

1.24.12.3 Testes
................

   - gh-129386(1): Adiciona ‘test.support.reset_code’, que pode ser
     usado para redefinir várias otimizações em nível de bytecode e
     instrumentação local para uma função.

   - gh-128474(2): Desabilita os casos de teste ‘test_embed’ que
     apresentam falhas de segmentação em binários de instrumentos BOLT.
     Os testes são desabilitados somente quando o BOLT está habilitado.

   - gh-128003(3): Adiciona a opção ‘--parallel-threads=N’ ao executor
     de testes de regressão, que executa testes individuais em múltiplas
     threads em paralelo para encontrar bugs de simultaneidade.  Observe
     que a maior parte do conjunto de testes ainda não foi revisada
     quanto à segurança de threads nem anotada com ‘@thread_unsafe’
     quando necessário.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129386

   (2) https://github.com/python/cpython/issues/128474

   (3) https://github.com/python/cpython/issues/128003


File: python.info,  Node: Segurança<11>,  Next: Biblioteca<12>,  Prev: Testes<8>,  Up: Python 3 14 0 alpha 5

1.24.12.4 Segurança
...................

   - gh-105704(1): Ao usar *note urllib.parse.urlsplit(): f2e. e *note
     urllib.parse.urlparse(): 35f, 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-126108(3): Corrige uma possível desreferência de ponteiro ‘NULL’
     em ‘PySys_AddWarnOptionUnicode()’.

   - gh-80222(4): 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(5): Corrige uma potencial negação de serviço no módulo
     *note imaplib: 78.  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: 1809. 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/126108

   (4) https://github.com/python/cpython/issues/80222

   (5) https://github.com/python/cpython/issues/119511


File: python.info,  Node: Biblioteca<12>,  Next: IDLE<5>,  Prev: Segurança<11>,  Up: Python 3 14 0 alpha 5

1.24.12.5 Biblioteca
....................

   - gh-129939(1): Páginas de comparação com alterações destacadas
     geradas pela classe *note difflib.HtmlDiff: 200. agora oferecem
     suporte ao modo escuro.

   - gh-129928(2): Levanta *note sqlite3.ProgrammingError: 303. se uma
     função SQL definida pelo usuário com um número inválido de
     parâmetros for criada.  Patch por Erlend Aasland.

   - gh-129583(3): Atualiza pip empacotado para 25.0.1

   - gh-129766(4): Corrige falha em *note warnings: 118, ao chamar
     ‘_release_lock()’ sem trava existente.

   - gh-129005(5): ‘_pyio.FileIO.readall()’ agora aloca, redimensiona e
     preenche um buffer de dados usando o mesmo algoritmo que
     ‘_io.FileIO.readall()’ usa.

   - gh-129646(6): Atualiza o mapeamento de apelido de localidade no
     módulo *note locale: 8a. para corresponder ao mapeamento de apelido
     de localidade mais recente do X Org e oferecer suporte a novas
     localidades no Glibc 2.41.

   - gh-128317(7): Coloca o destaque do calendário CLI na classe
     privada, removendo ‘highlight_day’ da API pública *note
     calendar.TextCalendar: 180b.  Patch por Hugo van Kemenade.

   - gh-129603(8): Corrige bugs onde objetos *note sqlite3.Row: 1067.
     poderiam sofrer segfault se seu *note description: 180c. herdado
     fosse definido como ‘None’.  Patch por Erlend Aasland.

   - gh-129559(9): Adiciona o método *note bytearray.resize(): 180d.
     para que *note bytearray: 342. possa ser redimensionado
     eficientemente internamente.

   - gh-129502(10): Erros improváveis na preparação de argumentos para o
     retorno de chamada *note ctypes: 2e. 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(): 501. em vez de *note sys.excepthook(): a02. e
     não definindo *note sys.last_exc: 6da. e outras variáveis.

   - gh-129403(11): Corrigida a mensagem de *note ValueError: 2ea. para
     *note asyncio.Barrier: 80b. e *note threading.Barrier: 13df.

   - gh-129409(12): Corrige um estouro de inteiro no módulo *note csv:
     2d. ao gravar um campo de dados maior que 2 GB.

   - gh-126400(13): Adicione um argumento nomeado de soquete 'timeout' a
     *note logging.handlers.SysLogHandler: 861.

   - gh-118761(14): Sempre faz importação preguiçosa de ‘warnings’ em
     *note threading: f3.  Patch por Taneli Hukkinen.

   - gh-118761(15): Melhora o tempo de importação de *note subprocess:
     dc. importando ‘locale’ e ‘signal’ de forma preguiçosa.  Patch por
     Taneli Hukkinen.

   - gh-129346(16): Em *note sqlite3: d4, manipula a falta de memória ao
     criar funções SQL definidas pelo usuário.

   - gh-129005(17): Otimiza ‘_pyio.FileIO.readinto’ evitando objetos e
     cópias desnecessários usando *note os.readinto(): 25e.

   - gh-129195(18): Suporte para geração de relatórios de informações do
     grafo de chamadas de ‘asyncio.staggered.staggered_race()’.

   - gh-129205(19): Adiciona *note os.readinto(): 25e. para ler um *note
     objeto buffer: 25f. de um descritor de arquivo.

   - gh-128772(20): Corrige *note pydoc: ba. para métodos com o atributo
     ‘__module__’ igual a ‘None’.

   - gh-129061(21): Corrige FORCE_COLOR e NO_COLOR quando strings
     vazias.  Patch por Hugo van Kemenade.

   - gh-92897(22): Foi agendada a descontinuação do argumento
     ‘check_home’ de *note sysconfig.is_python_build(): 32b. para o
     Python 3.15.

   - gh-129064(23): Descontinua ‘sysconfig.expand_makefile_vars()’, em
     favor do uso de *note sysconfig.get_paths(): 33e. com o argumento
     ‘vars’.

   - gh-128550(24): Foi removida uma otimização incorreta relacionada a
     tarefas ansiosas em *note asyncio.TaskGroup: 4cb. que resultava em
     cancelamentos perdidos.

   - gh-128991(25): Libera a referência do quadro de entrada dentro do
     retorno de chamada *note bdb: 10.

   - gh-118761(26): Reduz o tempo de importação de *note pstats: b5. e
     *note zipfile: 137. em até 20%, removendo importações
     desnecessárias para *note typing: 10a.  Patch por Bénédikt Tran.

   - gh-128978(27): Corrige uma exceção *note NameError: 44f. em
     ‘sysconfig.expand_makefile_vars()’.  Patch por Bénédikt Tran.

   - gh-128961(28): Corrige uma falha ao definir o estado em um iterador
     *note array.array: 4b8. esgotado.

   - gh-128894(29): Corrige
     ‘traceback.TracebackException._format_syntax_error’ para não falhar
     em exceções com metadados personalizados.

   - gh-128916(30): 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-118761(31): Melhorado o tempo de importação de *note tomllib:
     102. removendo as importações ‘typing’, ‘string’ e
     ‘tomllib._types’.  Patch por Taneli Hukkinen.

   - gh-128679(32): *note tracemalloc: 105.: Corrige condições de
     corrida quando *note tracemalloc.stop(): 180e. é chamado por uma
     thread, enquanto outras threads estão rastreando alocações de
     memória.  Patch por Victor Stinner.

   - gh-128891(33): Adiciona opcodes especializados a ‘opcode.opname’.

   - gh-118761(34): Reduz o tempo de importação de *note gettext: 67. em
     até dez vezes, importando *note re: be. sob demanda.  Em
     particular, ‘re’ não é mais exposto implicitamente como
     ‘gettext.re’.  Patch por Eli Schwartz.

   - gh-118761(35): Reduz o tempo de importação de *note optparse: a4.
     quando nenhum texto de ajuda for impresso.  Patch por Eli Schwartz.

   - gh-128657(36): Corrige possível referência extra ao usar objetos
     retornados por *note hashlib.sha256(): 180f. em *note threads
     livres: 1f3.

   - gh-118761(37): Reduz o tempo de importação de *note csv: 2d. em até
     cinco vezes, importando *note re: be. sob demanda.  Em particular,
     ‘re’ não é mais exposto implicitamente como ‘csv.re’.  Patch por
     Bénédikt Tran.

   - gh-128308(38): Adiciona suporte ao argumento nomeado 'name' para
     tarefas ansiosas em *note asyncio.loop.create_task(): 1ca, *note
     asyncio.create_task(): 1c9. e *note
     asyncio.TaskGroup.create_task(): 1cb, passando todos os 'kwargs'
     para a fábrica de tarefas definida por *note
     asyncio.loop.set_task_factory(): 1c8.

   - gh-118761(39): Melhora o desempenho de *note base64.b16decode():
     2d2. em até dez vezes, verificando com mais eficiência a sequência
     de bytes em busca de dígitos hexadecimais.  Reduz o tempo de
     importação de *note base64: f. em até seis vezes, não importando
     mais *note re: be.  Patch por Bénédikt Tran, Chris Markiewicz e
     Adam Turner.

   - gh-128156(40): Ao usar o sistema macOS ‘libffi’, o suporte para
     tipos complexos em *note ctypes: 2e. agora é verificado em tempo de
     execução (macOS 10.15 ou mais recente).  Os tipos também devem
     estar disponíveis em tempo de construção.

   - gh-128636(41): Corrige falha do PyREPL quando *note os.environ:
     258. é substituído por um valor inválido.

   - gh-128498(42): Padrão para stdout isatty para detecção de cor em
     vez de stderr.  Patch por Hugo van Kemenade.

   - gh-128384(43): Adiciona trava para *note warnings: 118. para evitar
     algumas disputas de dados quando uma construção com threads livres
     for usado.  Altera ‘_warnings_runtime_state.mutex’ para um mutex
     recursivo e expõe-o a *note warnings: 118, por meio das funções
     ‘_acquire_lock()’ e ‘_release_lock()’.  A trava é mantido quando
     ‘filters’ e ‘_filters_version’ são atualizados.

   - gh-128509(44): Adiciona *note sys._is_immortal(): 28e. para
     identificar objetos *note imortais: 28f. em tempo de execução.

   - gh-128479(45): Corrige ‘asyncio.staggered.staggered_race()’ vazando
     tarefas e emitindo uma exceção não tratada.

   - gh-128427(46): *note uuid.NIL: 2c4. e *note uuid.MAX: 2c5. agora
     estão disponíveis para representar os formatos UUID Nil e Max,
     conforme definido por RFC 9562(47).

   - gh-91279(48): *note zipfile.ZipFile.writestr(): 2cb. agora respeita
     ‘SOURCE_DATE_EPOCH’ que as distribuições podem definir centralmente
     e fazer com que as ferramentas de construção consumam isso para
     produzir uma saída reproduzível.

   - gh-112064(49): Corrige tratamento incorreto de tamanhos de leitura
     negativos em *note HTTPResponse.read: 1810.  Patch por Yury
     Manushkin.

   - gh-58956(50): Corrigido um vazamento de referência de quadro em
     *note bdb: 10.

   - gh-128131(51): Suporte completo ao acesso aleatório de arquivos zip
     somente leitura, não criptografados e descompactados obtidos por
     *note ZipFile.open: 651.

   - gh-127975(52): Evita reutilizar tipos de aspas em *note
     ast.unparse(): ad8. se não for necessário.

   - gh-115514(53): Corrige exceções e escritas incompletas após
     ‘asyncio._SelectorTransport’ ser fechado antes das gravações serem
     concluídas.

   - gh-121604(54): Adiciona avisos de Deprecation em falta para *note
     importlib.machinery.DEBUG_BYTECODE_SUFFIXES: 1811, *note
     importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES: 1812, *note
     importlib.machinery.WindowsRegistryFinder: f1a, *note
     importlib.abc.ResourceLoader: dd6, *note
     importlib.abc.SourceLoader.path_mtime(): 1385.

   - gh-127873(55): 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-125413(56): Adiciona o atributo *note pathlib.Path.info: 26a,
     que armazena um objeto que implementa o protocolo *note
     pathlib.types.PathInfo: 26b. (também novo).  O objeto oferece
     suporte à consulta do tipo de arquivo e o armazenamento em cache
     interno dos resultados de *note stat(): 26c.  Objetos de caminho
     gerados por *note iterdir(): 26d. são inicializados com informações
     do tipo de arquivo obtidas a partir da varredura do diretório pai.

   - gh-127712(57): Corrige o tratamento do argumento ‘secure’ de *note
     logging.handlers.SMTPHandler: 1813.

   - gh-127096(58): Não recria a seção sem nome em cada leitura em *note
     configparser.ConfigParser: 4d8.  Patch por Andrey Efremov.

   - gh-124369(59): Descontinua ‘pdb.Pdb.curframe_locals’

   - gh-126332(60): Corrige falha do _pyrepl ao dar dois CTRL-Z em uma
     linha que transborda.

   - gh-125553(61): Corrige invariância de ida e volta para continuações
     de contrabarra em *note tokenize.untokenize(): 1814.

   - gh-91048(62): Adiciona funções *note asyncio.capture_call_graph():
     1cc. e *note asyncio.print_call_graph(): 1cd.

   - gh-124703(63): Sair do *note pdb: aa. no modo ‘inline’ emitirá um
     prompt de confirmação e sairá normalmente, em vez de exibir um
     traceback de exceção.

   - gh-123987(64): 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-119349(65): Adiciona a função *note ctypes.util.dllist(): 1ef.
     para listar as bibliotecas compartilhadas carregadas para o
     processo atual.

   - gh-55454(66): Adiciona suporte a IMAP4 ‘IDLE’ ao módulo *note
     imaplib: 78.  Patch por Forest.

   - gh-119257(67): 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

   - gh-101410(68): Suporte a mensagens personalizadas para erros de
     domínio no módulo *note math: 92. (*note math.sqrt(): bef, *note
     math.log(): 16ae. e *note math.atanh(): 15c8. foram modificados
     como exemplos).  Patch por Charlie Zhao e Sergey B Kirpichev.

   - gh-81340(69): Usa *note os.copy_file_range(): 1815. nas funções
     *note shutil.copy(): c44, *note shutil.copy2(): c45. e *note
     shutil.copyfile(): c43. por padrão.  Uma chamada de sistema Linux
     subjacente oferece aos sistemas de arquivos a oportunidade de
     implementar o uso de cópia na gravação (no caso de btrfs e XFS) ou
     cópia do lado do servidor (no caso de NFS). Patch por Illia
     Volochii.

   - bpo-27307(70): Adiciona suporte a atributos e acesso a itens para
     *note string.Formatter: 10b3. no modo de numeração automática, o
     que permite strings de formato como ‘{.name}’ e ‘{[1]}’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129939

   (2) https://github.com/python/cpython/issues/129928

   (3) https://github.com/python/cpython/issues/129583

   (4) https://github.com/python/cpython/issues/129766

   (5) https://github.com/python/cpython/issues/129005

   (6) https://github.com/python/cpython/issues/129646

   (7) https://github.com/python/cpython/issues/128317

   (8) https://github.com/python/cpython/issues/129603

   (9) https://github.com/python/cpython/issues/129559

   (10) https://github.com/python/cpython/issues/129502

   (11) https://github.com/python/cpython/issues/129403

   (12) https://github.com/python/cpython/issues/129409

   (13) https://github.com/python/cpython/issues/126400

   (14) https://github.com/python/cpython/issues/118761

   (15) https://github.com/python/cpython/issues/118761

   (16) https://github.com/python/cpython/issues/129346

   (17) https://github.com/python/cpython/issues/129005

   (18) https://github.com/python/cpython/issues/129195

   (19) https://github.com/python/cpython/issues/129205

   (20) https://github.com/python/cpython/issues/128772

   (21) https://github.com/python/cpython/issues/129061

   (22) https://github.com/python/cpython/issues/92897

   (23) https://github.com/python/cpython/issues/129064

   (24) https://github.com/python/cpython/issues/128550

   (25) https://github.com/python/cpython/issues/128991

   (26) https://github.com/python/cpython/issues/118761

   (27) https://github.com/python/cpython/issues/128978

   (28) https://github.com/python/cpython/issues/128961

   (29) https://github.com/python/cpython/issues/128894

   (30) https://github.com/python/cpython/issues/128916

   (31) https://github.com/python/cpython/issues/118761

   (32) https://github.com/python/cpython/issues/128679

   (33) https://github.com/python/cpython/issues/128891

   (34) https://github.com/python/cpython/issues/118761

   (35) https://github.com/python/cpython/issues/118761

   (36) https://github.com/python/cpython/issues/128657

   (37) https://github.com/python/cpython/issues/118761

   (38) https://github.com/python/cpython/issues/128308

   (39) https://github.com/python/cpython/issues/118761

   (40) https://github.com/python/cpython/issues/128156

   (41) https://github.com/python/cpython/issues/128636

   (42) https://github.com/python/cpython/issues/128498

   (43) https://github.com/python/cpython/issues/128384

   (44) https://github.com/python/cpython/issues/128509

   (45) https://github.com/python/cpython/issues/128479

   (46) https://github.com/python/cpython/issues/128427

   (47) https://datatracker.ietf.org/doc/html/rfc9562.html

   (48) https://github.com/python/cpython/issues/91279

   (49) https://github.com/python/cpython/issues/112064

   (50) https://github.com/python/cpython/issues/58956

   (51) https://github.com/python/cpython/issues/128131

   (52) https://github.com/python/cpython/issues/127975

   (53) https://github.com/python/cpython/issues/115514

   (54) https://github.com/python/cpython/issues/121604

   (55) https://github.com/python/cpython/issues/127873

   (56) https://github.com/python/cpython/issues/125413

   (57) https://github.com/python/cpython/issues/127712

   (58) https://github.com/python/cpython/issues/127096

   (59) https://github.com/python/cpython/issues/124369

   (60) https://github.com/python/cpython/issues/126332

   (61) https://github.com/python/cpython/issues/125553

   (62) https://github.com/python/cpython/issues/91048

   (63) https://github.com/python/cpython/issues/124703

   (64) https://github.com/python/cpython/issues/123987

   (65) https://github.com/python/cpython/issues/119349

   (66) https://github.com/python/cpython/issues/55454

   (67) https://github.com/python/cpython/issues/119257

   (68) https://github.com/python/cpython/issues/101410

   (69) https://github.com/python/cpython/issues/81340

   (70) https://bugs.python.org/issue?@action=redirect&bpo=27307


File: python.info,  Node: IDLE<5>,  Next: Documentação<8>,  Prev: Biblioteca<12>,  Up: Python 3 14 0 alpha 5

1.24.12.6 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<8>,  Next: Núcleo e embutidos<11>,  Prev: IDLE<5>,  Up: Python 3 14 0 alpha 5

1.24.12.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: 1818. não é
     imprimível no sentido POSIX. Em particular, *note
     string.printable.isprintable(): fcc. retorna *note False: d1f.
     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: Núcleo e embutidos<11>,  Next: API C<9>,  Prev: Documentação<8>,  Up: Python 3 14 0 alpha 5

1.24.12.8 Núcleo e embutidos
............................

   - gh-100239(1): Substitui o opcode BINARY_SUBSCR e sua família por
     BINARY_OP com oparg NB_SUBSCR.

   - gh-129732(2): Corrigida uma corrida em ‘_Py_qsbr_reserve’ na
     construção com threads livres.

   - gh-129763(3): Remove a macro interna ‘LLTRACE’ (use *note Py_DEBUG:
     179c. em vez disso).

   - gh-129715(4): Melhora o desempenho JIT dos geradores.

   - gh-129643(5): Corrige a segurança de thread de *note
     PyList_Insert(): 181a. em construções com threads livres.

   - gh-129668(6): Corrige condição de corrida ao levantar *note
     MemoryError: 1809. na construção com threads livres.

   - gh-129643(7): Corrige a segurança de thread de *note
     PyList_SetItem(): 181b. em construções com threads livres.  Patch
     por Kumar Aditya.

   - gh-128563(8): Corrige um problema em que o recurso de depuração
     “lltrace” poderia ter sido habilitado incorretamente para alguns
     quadros.

   - gh-129393(9): No FreeBSD, *note sys.platform: 290. não contém mais
     a versão principal.  É sempre ‘'freebsd'’, em vez de ‘'freebsd13'’
     ou ‘'freebsd14'’.

   - gh-129345(10): Corrige desreferência de ponteiro nulo em *note
     syslog.openlog(): 755. quando um gancho de auditoria levanta uma
     exceção.

   - gh-129231(11): Melhora o layout de memória dos rastreamentos JIT.
     Patch por Diego Russo

   - gh-129149(12): Adiciona um caminho rápido para inteiros de tamanho
     médio em *note PyLong_FromUnsignedLong(): 181c, *note
     PyLong_FromUnsignedLongLong(): 181d. e *note PyLong_FromSize_t():
     181e.

   - gh-129201(13): A versão com threads livres do coletor de lixo
     cíclico foi otimizada para usar condicionalmente instruções de
     pré-busca da CPU durante a coleta.  Isso pode reduzir o tempo de
     coleta, aumentando a probabilidade de os dados estarem no cache da
     CPU quando necessário.  As instruções de pré-busca são habilitadas
     se o número de objetos de longa duração (objetos que sobrevivem a
     uma coleta completa) exceder um limite.

   - gh-129093(14): Corrige f-strings como ‘f'{expr=}'’ que às vezes não
     exibem a expressão completa quando a expressão contém ‘!=’.

   - gh-124363(15): Trata expressões de depuração em f-string como
     strings brutas.  Patch por Pablo Galindo

   - gh-128714(16): 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-128799(17): Adiciona o quadro ‘except*’ ao traceback quando ele
     encapsula uma exceção simples.

   - gh-128842(18): Coleta estatísticas de memória JIT usando pystats.
     Patch por Diego Russo.

   - gh-100239(19): Especializa ‘BINARY_OP’ para operações lógicas bit a
     bit em inteiros compactos.

   - gh-128910(20): As funções privadas, não documentadas e não
     utilizadas ‘_PyTrash_begin’ e ‘_PyTrash_end’ da API C foram
     removidas.

   - gh-128807(21): Adiciona uma fase de marcação ao coletor de lixo com
     threads livres.  Isso é semelhante ao que foi feito em
     gh-126491(22).  Como o coletor de lixo com threads livres não
     possui gerações e não é incremental, a fase de marcação procura
     todos os objetos acessíveis a partir de raízes conhecidas.  As
     raízes são objetos que se sabe não serem lixo, como o dicionário de
     módulos para *note sys: df.  Para a maioria dos programas, essa
     fase de marcação deve tornar o coletor de lixo um pouco mais
     rápido, já que normalmente menos trabalho é feito por objeto.

   - gh-100239(23): Adiciona o opcode ‘BINARY_OP_EXTEND’ que executa um
     par de funções (funções de guarda e especialização) acessadas do
     cache inline.

   - gh-128563(24): Um novo tipo de interpretador foi adicionado ao
     CPython.  Este interpretador utiliza chamadas de cauda para seus
     manipuladores de instruções.  Resultados preliminares de benchmark
     sugerem uma velocidade média geométrica de 7 a 11% no pyperformance
     (dependendo da plataforma) e até 30% mais rápida em cargas de
     trabalho com uso intensivo de Python.  Atualmente, este
     interpretador funciona apenas em compiladores mais recentes, como o
     ‘clang-19’.  Outros compiladores continuarão usando o interpretador
     antigo.  Patch por Ken Jin, com ideias de como implementar isso no
     CPython por Mark Shannon, Garret Gu, Haoran Xu e Josh Haberman.

   - gh-126703(25): Melhora o desempenho da iteração em listas e tuplas
     usando uma lista livre para os objetos iterador.

   - gh-127953(26): 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-128330(27): Restaura caracteres de controle do terminal na saída
     do REPL.

   - gh-128016(28): A mensagem ‘SyntaxWarning’ para sequências de escape
     inválidas foi aprimorada para esclarecer que tais sequências
     levantarão um ‘SyntaxError’ em versões futuras do Python.  A nova
     mensagem também sugere uma possível correção, ou seja, ‘Did you
     mean "\\e"?’.

   - gh-126004(29): Corrige o tratamento dos valores *note
     UnicodeError.start: 181f. e *note UnicodeError.end: 1820. no
     tratador de erros *note codecs.replace_errors(): 1821.  Patch por
     Bénédikt Tran.

   - gh-126004(30): Corrige o tratamento dos valores *note
     UnicodeError.start: 181f. e *note UnicodeError.end: 1820. no
     tratador de erros *note codecs.backslashreplace_errors(): 1822.
     Patch por Bénédikt Tran.

   - gh-126004(31): Corrige o tratamento dos valores *note
     UnicodeError.start: 181f. e *note UnicodeError.end: 1820. no
     tratador de erros *note codecs.xmlcharrefreplace_errors(): 1823.
     Patch por Bénédikt Tran.

   - gh-127119(32): Otimiza ligeiramente o desalocador *note int: 19b.

   - gh-127349(33): Corrigido o erro ao redimensionar o terminal no
     Python REPL. Patch por Semyon Moroz.

   - gh-125723(34): Corrige falha com ‘gi_frame.f_locals’ quando os
     frames do gerador duram mais que o gerador.  Patch por Mikhail
     Efimov.

   - gh-126349(35): Adiciona os gerenciadores de contexto *note
     turtle.fill(): 2a2, *note turtle.poly(): 2a3. e *note
     turtle.no_animation(): 2a4.  Patch por Marie Roald e Yngve Mardal
     Moe.

   - gh-115911(36): Se o diretório de trabalho atual não puder ser
     determinado devido às permissões, a importação não levantará mais
     *note PermissionError: f32.  Patch por Alex Willmer.

   - gh-112713(37): Adicionado suporte para o sinalizador de cookie
     ‘Partitioned’ em *note http.cookies: 75.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100239

   (2) https://github.com/python/cpython/issues/129732

   (3) https://github.com/python/cpython/issues/129763

   (4) https://github.com/python/cpython/issues/129715

   (5) https://github.com/python/cpython/issues/129643

   (6) https://github.com/python/cpython/issues/129668

   (7) https://github.com/python/cpython/issues/129643

   (8) https://github.com/python/cpython/issues/128563

   (9) https://github.com/python/cpython/issues/129393

   (10) https://github.com/python/cpython/issues/129345

   (11) https://github.com/python/cpython/issues/129231

   (12) https://github.com/python/cpython/issues/129149

   (13) https://github.com/python/cpython/issues/129201

   (14) https://github.com/python/cpython/issues/129093

   (15) https://github.com/python/cpython/issues/124363

   (16) https://github.com/python/cpython/issues/128714

   (17) https://github.com/python/cpython/issues/128799

   (18) https://github.com/python/cpython/issues/128842

   (19) https://github.com/python/cpython/issues/100239

   (20) https://github.com/python/cpython/issues/128910

   (21) https://github.com/python/cpython/issues/128807

   (22) https://github.com/python/cpython/issues/126491

   (23) https://github.com/python/cpython/issues/100239

   (24) https://github.com/python/cpython/issues/128563

   (25) https://github.com/python/cpython/issues/126703

   (26) https://github.com/python/cpython/issues/127953

   (27) https://github.com/python/cpython/issues/128330

   (28) https://github.com/python/cpython/issues/128016

   (29) https://github.com/python/cpython/issues/126004

   (30) https://github.com/python/cpython/issues/126004

   (31) https://github.com/python/cpython/issues/126004

   (32) https://github.com/python/cpython/issues/127119

   (33) https://github.com/python/cpython/issues/127349

   (34) https://github.com/python/cpython/issues/125723

   (35) https://github.com/python/cpython/issues/126349

   (36) https://github.com/python/cpython/issues/115911

   (37) https://github.com/python/cpython/issues/112713


File: python.info,  Node: API C<9>,  Next: Construção<10>,  Prev: Núcleo e embutidos<11>,  Up: Python 3 14 0 alpha 5

1.24.12.9 API C
...............

   - gh-129533(1): Atualiza *note PyGC_Enable(): a9a, *note
     PyGC_Disable(): a9b, *note PyGC_IsEnabled(): a9c. para usar
     operação atômica para segurança de thread em construção com threads
     livres.  Patch por Donghee Na.

   - gh-89188(2): Implementa *note PyUnicode_KIND(): 1379. e *note
     PyUnicode_DATA(): 1375. como funções, além das macros com os mesmos
     nomes.  As macros dependem de campos de bits C com layout
     específico do compilador.  Patch por Victor Stinner.

   - gh-91417(3): Remove *note PySequence_Fast(): 1802. da API C
     limitada, pois esta função precisa ser usada com *note
     PySequence_Fast_GET_ITEM: 3c8, que nunca funcionou na API C
     limitada.  Patch por Victor Stinner.

   - gh-128509(4): Adiciona *note PyUnstable_IsImmortal(): 3c1. para
     determinar se um objeto é *note imortal: 28f.

   - gh-129033(5): Remove as funções privadas
     ‘_PyInterpreterState_GetConfigCopy()’ e
     ‘_PyInterpreterState_SetConfig()’.  Em vez disso, use *note
     PyConfig_Get(): 379. e *note PyConfig_Set(): 37a, API C pública
     adicionada por PEP 741(6) “API C de Configuração do Python”.  Patch
     por Victor Stinner.

   - gh-129033(7): Remova a função privada ‘_Py_InitializeMain()’.  Era
     uma *note API provisória: 3ce. adicionada ao Python 3.8 pela PEP
     587(8).  Patch por Victor Stinner.

   - gh-128844(9): Adiciona as APIs instáveis *note
     PyUnstable_TryIncRef(): 1825. e *note PyUnstable_EnableTryIncRef():
     1826.  Elas são auxiliares para lidar com referências sem dono de
     forma segura para thread, principalmente na versão com threads
     livres.

   - gh-128911(10): Adiciona as funções auxiliares *note
     PyImport_ImportModuleAttr(): 393. e *note
     PyImport_ImportModuleAttrString(): 394. para importar um módulo e
     obter um atributo do módulo.  Patch por Victor Stinner.

   - gh-128863(11): As seguintes funções privadas estão descontinuado e
     planejadas para remoção no Python 3.18:

        * ‘_PyBytes_Join()’: use *note PyBytes_Join(): 380.

        * ‘_PyDict_GetItemStringWithError()’: use *note
          PyDict_GetItemStringRef(): 41e.

        * ‘_PyDict_Pop()’: use *note PyDict_Pop(): 41f.

        * ‘_PyLong_Sign()’: use *note PyLong_GetSign(): 397.

        * ‘_PyLong_FromDigits()’ e ‘_PyLong_New()’: use *note
          PyLongWriter_Create(): 3a7.

        * ‘_PyThreadState_UncheckedGet()’: use *note
          PyThreadState_GetUnchecked(): 420.

        * ‘_PyUnicode_AsString()’: use *note PyUnicode_AsUTF8(): 421.

        * ‘_Py_HashPointer()’: use *note Py_HashPointer(): 422.

        * ‘_Py_fopen_obj()’: use *note Py_fopen(): 390.

     O projeto pythoncapi-compat(12) pode ser usado para obter essas
     novas funções públicas no Python 3.13 e versões anteriores.

     Patch por Victor Stinner.

   - gh-126599(13): Remove algumas APIs de teste internas para o
     compilador JIT experimental.

   - gh-127925(14): Converte o módulo *note decimal: 3a. para usar a API
     C PEP 757(15) (exportação e importação de inteiros), oferecendo
     alguma aceleração se a parte inteira da instância *note Decimal:
     1fd. for pequena.  Patch por Sergey B Kirpichev.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129533

   (2) https://github.com/python/cpython/issues/89188

   (3) https://github.com/python/cpython/issues/91417

   (4) https://github.com/python/cpython/issues/128509

   (5) https://github.com/python/cpython/issues/129033

   (6) https://peps.python.org/pep-0741/

   (7) https://github.com/python/cpython/issues/129033

   (8) https://peps.python.org/pep-0587/

   (9) https://github.com/python/cpython/issues/128844

   (10) https://github.com/python/cpython/issues/128911

   (11) https://github.com/python/cpython/issues/128863

   (12) https://github.com/python/pythoncapi-compat/

   (13) https://github.com/python/cpython/issues/126599

   (14) https://github.com/python/cpython/issues/127925

   (15) https://peps.python.org/pep-0757/


File: python.info,  Node: Construção<10>,  Prev: API C<9>,  Up: Python 3 14 0 alpha 5

1.24.12.10 Construção
.....................

   - gh-129660(1): Remove ‘test_embed’ do treinamento de PGO, cuja
     contribuição em versões recentes é considerada ignorável.

   - gh-128902(2): Corrige erros de compilação com Clang 9 e versões
     anteriores devido à falta de suporte a
     ‘__attribute__((fallthrough))’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129660

   (2) https://github.com/python/cpython/issues/128902


File: python.info,  Node: Python 3 14 0 alpha 4,  Next: Python 3 14 0 alpha 3,  Prev: Python 3 14 0 alpha 5,  Up: Changelog

1.24.13 Python 3.14.0 alpha 4
-----------------------------

'Data de lançamento: 2025-01-14'

* Menu:

* macOS: macOS<6>.
* Ferramentas/Demos: Ferramentas/Demos<11>.
* Testes: Testes<9>.
* Biblioteca: Biblioteca<13>.
* Núcleo e embutidos: Núcleo e embutidos<12>.
* API C: API C<10>.
* Construção: Construção<11>.


File: python.info,  Node: macOS<6>,  Next: Ferramentas/Demos<11>,  Up: Python 3 14 0 alpha 4

1.24.13.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: Ferramentas/Demos<11>,  Next: Testes<9>,  Prev: macOS<6>,  Up: Python 3 14 0 alpha 4

1.24.13.2 Ferramentas/Demos
...........................

   - gh-128152(1): 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/128152


File: python.info,  Node: Testes<9>,  Next: Biblioteca<13>,  Prev: Ferramentas/Demos<11>,  Up: Python 3 14 0 alpha 4

1.24.13.3 Testes
................

   - gh-128690(1): Temporariamente, não use test_embed em construções de
     perfil PGO até que o problema com test_init_pyvenv_cfg falhando em
     algumas configurações seja resolvido.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128690


File: python.info,  Node: Biblioteca<13>,  Next: Núcleo e embutidos<12>,  Prev: Testes<9>,  Up: Python 3 14 0 alpha 4

1.24.13.4 Biblioteca
....................

   - gh-128731(1): Corrige *note ResourceWarning: 546. em *note
     urllib.robotparser.RobotFileParser.read(): 182d.

   - gh-71339(2): Adiciona novos métodos de asserção para *note
     unittest: 10c.: *note assertHasAttr(): 2b3, *note
     assertNotHasAttr(): 2b4, *note assertIsSubclass(): 2b5, *note
     assertNotIsSubclass(): 2b6. *note assertStartsWith(): 2b7, *note
     assertNotStartsWith(): 2b8, *note assertEndsWith(): 2b9. e *note
     assertNotEndsWith(): 2ba.

   - gh-118761(3): Melhora o tempo de importação de *note pickle: ab. em
     25% removendo uma expressão regular desnecessária.  Dessa forma,
     *note re: be. não está mais implicitamente disponível como
     ‘pickle.re’.  Patch por Bénédikt Tran.

   - gh-128661(4): Corrige *note typing.evaluate_forward_ref(): 1783.
     não mostrando descontinuação quando o argumento ‘type_params’ não é
     passado.

   - gh-128562(5): Corrige possíveis conflitos nos nomes dos widgets
     *note tkinter: f6. gerados se o nome da classe do widget terminar
     com um dígito.

   - gh-128559(6): Tempo de importação melhorado de *note asyncio: b.

   - gh-128552(7): Corrige lixo cíclico introduzido por *note
     asyncio.loop.create_task(): 1ca. e *note
     asyncio.TaskGroup.create_task(): 1cb. mantendo uma referência à
     tarefa criada se ela estiver ansiosa.

   - gh-128340(8): Adiciona um identificador interno seguro para thread
     para ser usado em *note asyncio.loop.call_soon_threadsafe(): cef.
     para cancelamento seguro para thread.

   - gh-128182(9): Corrige falha ao usar ponteiros *note ctypes: 2e.
     simultaneamente na construção com *note threads livres: 1f3.

   - gh-128400(10): Exibe somente a thread atual em *note faulthandler:
     5c. na construção com *note threads livres: 1f3. para evitar
     corridas.

   - gh-128400(11): Corrige falha ao usar *note
     faulthandler.dump_traceback(): ff4. enquanto outras threads
     estiverem ativas na construção com *note threads livres: 1f3.

   - gh-128388(12): 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-88834(13): Unifica a verificação de instância para *note
     typing.Union: 2a7. e *note types.UnionType: 2a6.: ‘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(14): Corrige
     ‘xml.dom.xmlbuilder.DOMEntityResolver.resolveEntity()’, que foi
     quebrado pela transição do Python 3.0.

   - gh-128317(15): Realça today em cores na saída da CLI do *note
     calendar: 15.  Patch por Hugo van Kemenade.

   - gh-128302(16): Permite que ‘xml.dom.xmlbuilder.DOMParser.parse()’
     manipule corretamente instâncias
     ‘xml.dom.xmlbuilder.DOMInputSource’ que tenham apenas um atributo
     ‘systemId’ definido.

   - gh-128151(17): Melhoria de 30% na geração de objetos *note UUID:
     c4a. nas versões 3, 4, 5 e 8 por meio de suas funções dedicadas.
     Patch por Bénédikt Tran.

   - gh-128118(18): Melhora o desempenho de *note copy.copy(): 74c. em
     30% por meio de um caminho rápido para tipos atômicos e tipos de
     contêiner.

   - gh-127946(19): Corrige falha ao modificar objetos *note
     ctypes._CFuncPtr: 182e. simultaneamente na construção com *note
     threads livres: 1f3.

   - gh-128062(20): Reverte a fonte da barra de menu do *note
     turtledemo: 108. para seu valor padrão e exibe as teclas de atalho
     na posição correta.

   - gh-128014(21): Corrige a redefinição do ícone da janela padrão
     passando ‘default=''’ para o método ‘wm_iconbitmap()’ do *note
     tkinter: f6.

   - gh-41872(22): Corrige extração rápida de docstrings de módulo de um
     arquivo em *note pydoc: ba.  Agora ele oferece suporte a docstrings
     com aspas simples, sequências de escape, literais de strings brutas
     e outras sintaxes Python.

   - gh-127060(23): 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(24): Corrige o suporte de mensagens de erro localizadas
     relatadas por ‘dlerror(3)(25)’ e ‘gdbm_strerror(26)’ nas funções
     *note ctypes: 2e. e *note dbm.gnu: 37. respectivamente.  Patch por
     Bénédikt Tran.

   - gh-122548(27): Adiciona dois novos eventos locais ao
     sys.monitoring, ‘BRANCH_LEFT’ e ‘BRANCH_RIGHT’.  Isso permite que
     os dois braços de ramificação sejam desabilitados
     independentemente, o que deve melhorar significativamente o
     desempenho das ferramentas de cobertura em nível de ramificação.  O
     antigo evento de ramificação, ‘BRANCH’, agora está descontinuado.

   - gh-127847(28): 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(): 651.

   - gh-127688(29): Adiciona as constantes *note SCHED_DEADLINE: 25c. e
     *note SCHED_NORMAL: 25d. ao módulo *note os: a5.

   - gh-83662(30): Adiciona o método ‘__class_getitem__’ ausente à
     implementação Python de *note functools.partial(): 216, 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(31): *note multiprocessing.pool.Pool: 1161. agora
     restaura corretamente os manipuladores de sinais bloqueados da
     thread mãe ao criar processos via 'spawn' ou 'forkserver'.

   - gh-98188(32): Corrige um problema em *note
     email.message.Message.get_payload(): 13c9. 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-127529(33): Corrige o comportamento de
     ‘asyncio.selector_events.BaseSelectorEventLoop._accept_connection()’
     ao lidar com *note ConnectionAbortedError: 1253. em um laço.  Isso
     melhora o desempenho no OpenBSD.

   - gh-127360(34): Quando uma mensagem de erro descritiva não pode ser
     fornecida para um *note ssl.SSLError: 1475, a mensagem “erro
     desconhecido” agora mostra o código de erro interno (conforme
     recuperado por ‘ERR_get_error’ e funções OpenSSL semelhantes).

   - gh-127196(35): Corrige falha quando um dicionário com chaves em
     codificação inválida era passado para diversas funções no módulo
     ‘_interpreters’.

   - gh-124130(36): Corrige um bug na correspondência da expressão
     regular ‘\B’ em uma string de entrada vazia.  Agora é sempre o
     oposto de ‘\b’.  Para obter um comportamento antigo, use
     ‘(?!\A\Z)\B’.  Para obter um novo comportamento em versões antigas
     do Python, use ‘(?!\b)’.

   - gh-126639(37): *note tempfile.NamedTemporaryFile: 6e2. agora
     emitirá um *note ResourceWarning: 546. quando for finalizado pelo
     coletor de lixo sem ser explicitamente fechado.

   - gh-126624(38): Expõe o código de erro *note XML_ERROR_NOT_STARTED:
     182f. do Expat >=2.6.4 em *note xml.parsers.expat.errors: 12d.

   - gh-126225(39): *note getopt: 65. e *note optparse: a4. 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: 7, 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-124761(40): Adiciona a constante *note SO_REUSEPORT_LB: 1830. ao
     *note socket: d1. para FreeBSD.

   - gh-121720(41): *note enum.EnumDict: 4f0. agora pode ser usada sem
     recorrer à API privada.

   - gh-123424(42): Adicionada *note zipfile.ZipInfo._for_archive():
     2c9. definindo propriedades padrão em objetos *note ZipInfo: 2ca.
     Patch por Bénédikt Tran e Jason R. Coombs.

   - gh-121676(43): Descontinua a chamada da implementação Python de
     *note functools.reduce(): 219. com uma ‘function’ ou ‘sequence’
     como um *note argumento nomeado: f02.  Isso será proibido no Python
     3.16 para corresponder à implementação em C.

   - gh-112015(44): *note ctypes.memoryview_at(): 1ea. agora existe para
     criar um objeto *note memoryview: 165. que se refere ao ponteiro e
     comprimento fornecidos.  Isso funciona como *note
     ctypes.string_at(): 1eb, exceto que evita uma cópia de buffer e é
     normalmente útil ao implementar funções de retorno de chamada
     Python puras que recebem buffers de tamanho dinâmico.

   - gh-95371(45): Adicionado suporte para outros formatos de imagem
     (PNG, PGM e PPM) ao módulo turtle.  Patch por Shin-myoung-serp.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128731

   (2) https://github.com/python/cpython/issues/71339

   (3) https://github.com/python/cpython/issues/118761

   (4) https://github.com/python/cpython/issues/128661

   (5) https://github.com/python/cpython/issues/128562

   (6) https://github.com/python/cpython/issues/128559

   (7) https://github.com/python/cpython/issues/128552

   (8) https://github.com/python/cpython/issues/128340

   (9) https://github.com/python/cpython/issues/128182

   (10) https://github.com/python/cpython/issues/128400

   (11) https://github.com/python/cpython/issues/128400

   (12) https://github.com/python/cpython/issues/128388

   (13) https://github.com/python/cpython/issues/88834

   (14) https://github.com/python/cpython/issues/128302

   (15) https://github.com/python/cpython/issues/128317

   (16) https://github.com/python/cpython/issues/128302

   (17) https://github.com/python/cpython/issues/128151

   (18) https://github.com/python/cpython/issues/128118

   (19) https://github.com/python/cpython/issues/127946

   (20) https://github.com/python/cpython/issues/128062

   (21) https://github.com/python/cpython/issues/128014

   (22) https://github.com/python/cpython/issues/41872

   (23) https://github.com/python/cpython/issues/127060

   (24) https://github.com/python/cpython/issues/126742

   (25) https://manpages.debian.org/dlerror(3)

   (26) https://manpages.debian.org/gdbm(3)

   (27) https://github.com/python/cpython/issues/122548

   (28) https://github.com/python/cpython/issues/127847

   (29) https://github.com/python/cpython/issues/127688

   (30) https://github.com/python/cpython/issues/83662

   (31) https://github.com/python/cpython/issues/127586

   (32) https://github.com/python/cpython/issues/98188

   (33) https://github.com/python/cpython/issues/127529

   (34) https://github.com/python/cpython/issues/127360

   (35) https://github.com/python/cpython/issues/127196

   (36) https://github.com/python/cpython/issues/124130

   (37) https://github.com/python/cpython/issues/126639

   (38) https://github.com/python/cpython/issues/126624

   (39) https://github.com/python/cpython/issues/126225

   (40) https://github.com/python/cpython/issues/124761

   (41) https://github.com/python/cpython/issues/121720

   (42) https://github.com/python/cpython/issues/123424

   (43) https://github.com/python/cpython/issues/121676

   (44) https://github.com/python/cpython/issues/112015

   (45) https://github.com/python/cpython/issues/95371


File: python.info,  Node: Núcleo e embutidos<12>,  Next: API C<10>,  Prev: Biblioteca<13>,  Up: Python 3 14 0 alpha 4

1.24.13.5 Núcleo e embutidos
............................

   - gh-128078(1): Corrige um *note SystemError: 78a. ao usar *note
     anext(): 9cc. com um valor de tupla padrão.  Patch por Bénédikt
     Tran.

   - gh-128717(2): Corrige uma falha ao definir o limite de recursão
     enquanto outros threads estão ativos na construção com *note
     threads livres: 1f3.

   - gh-124483(3): Trata ‘Py_DECREF’ e variantes como escape ao gerar
     opcode e metadados UOP. Isso evita a possibilidade de um método
     ‘__del__’ causar comportamento incorreto do JIT.

   - gh-126703(4): Melhora o desempenho dos métodos de classe usando uma
     freelist.

   - gh-128137(5): Atualização do layout *note PyASCIIObject: 1371. para
     manipular campos internos com a operação atômica.  Patch por
     Donghee Na.

   - gh-128192(6): Atualiza o algoritmo de autenticação de resumo HTTP
     para *note urllib.request: 111. dando suporte à autenticação de
     resumo SHA-256 conforme especificado em RFC 7616(7).

   - gh-126868(8): Aumenta o uso de freelist para alocação de *note int:
     19b.

   - gh-114203(9): Otimiza ‘Py_BEGIN_CRITICAL_SECTION’ para chamadas
     recursivas simples.

   - gh-127705(10): Adiciona depuração de stackref quando
     ‘Py_STACKREF_DEBUG’ está definido.  Encontra todos os fechamentos
     duplos e vazamentos, registrando a origem e o último empréstimo.

     Inspirado no modo de depuração do HPy.
     ‘https://docs.hpyproject.org/en/latest/debug-mode.html’

   - gh-128079(11): Corrige um bug em que *note except*: 1ac. não
     verifica corretamente o valor de retorno de uma função *note
     split(): 1832. de *note ExceptionGroup: 4cc, levando a uma falha em
     alguns casos.  Agora, quando *note split(): 1832. retorna um objeto
     inválido, *note except*: 1ac. levanta *note TypeError: 198. com o
     objeto *note ExceptionGroup: 4cc. levantado originalmente encadeado
     a ele.

   - gh-128030(12): 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-128035(13): Indica através de *note ssl.HAS_PHA: 285. se o
     módulo *note ssl: d5. oferece suporte a autenticação de cliente
     pós-handshake (PHA) TLSv1.3.  Patch por Will Childs-Klein.

   - gh-127274(14): Adiciona um novo sinalizador, ‘CO_METHOD’, a *note
     co_flags: 1833. que indica se o objeto código pertence a uma função
     definida no escopo da classe.

   - gh-66409(15): Durante a *note inicialização do caminho: 1834, agora
     verificamos se ‘base_exec_prefix’ é o mesmo que ‘base_prefix’ antes
     de retornar à pesquisa no diretório do interpretador Python.

   - gh-127970(16): Agora usamos o local da biblioteca de tempo de
     execução ‘libpython’ usada no processo atual para determinar *note
     sys.base_prefix: 3e3. em todas as plataformas que implementam a
     função dladdr(17) definida pelo padrão UNIX — isso inclui Linux,
     Android, macOS, iOS, FreeBSD, etc.  Isso já acontecia nas
     construções do Windows e do macOS Framework.

   - gh-127773(18): Não usa o cache de atributos de tipo para tipos com
     uma *note MRO: 1835. incompatível.

   - gh-127903(19): ‘Objects/unicodeobject.c’: corrige uma falha em
     compilações de depuração em ‘_copy_characters’ quando não há nada
     para copiar.

   - gh-127809(20): Corrige um problema em que o JIT experimental pode
     inferir um tipo de resultado incorreto para exponenciação (‘**’ e
     ‘**=’), levando a bugs ou travamentos.

   - gh-126862(21): 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.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128078

   (2) https://github.com/python/cpython/issues/128717

   (3) https://github.com/python/cpython/issues/124483

   (4) https://github.com/python/cpython/issues/126703

   (5) https://github.com/python/cpython/issues/128137

   (6) https://github.com/python/cpython/issues/128192

   (7) https://datatracker.ietf.org/doc/html/rfc7616.html

   (8) https://github.com/python/cpython/issues/126868

   (9) https://github.com/python/cpython/issues/114203

   (10) https://github.com/python/cpython/issues/127705

   (11) https://github.com/python/cpython/issues/128079

   (12) https://github.com/python/cpython/issues/128030

   (13) https://github.com/python/cpython/issues/128035

   (14) https://github.com/python/cpython/issues/127274

   (15) https://github.com/python/cpython/issues/66409

   (16) https://github.com/python/cpython/issues/127970

   (17) 
https://pubs.opengroup.org/onlinepubs/9799919799/functions/dladdr.html

   (18) https://github.com/python/cpython/issues/127773

   (19) https://github.com/python/cpython/issues/127903

   (20) https://github.com/python/cpython/issues/127809

   (21) https://github.com/python/cpython/issues/126862


File: python.info,  Node: API C<10>,  Next: Construção<11>,  Prev: Núcleo e embutidos<12>,  Up: Python 3 14 0 alpha 4

1.24.13.6 API C
...............

   - gh-128400(1): *note Py_FatalError(): b70. não mostra mais todos os
     threads na construção com *note threads livres: 1f3. para evitar
     travamentos.

   - gh-128629(2): Adiciona macros *note Py_PACK_VERSION(): 37c. e *note
     Py_PACK_FULL_VERSION(): 37d. para empacotamento de bits de números
     de versão do Python.

   - gh-128008(3): Adiciona a função *note PyWeakref_IsDead(): 1837, que
     testa se uma referência fraca está morta.

   - gh-127350(4): Adiciona a função *note Py_fopen(): 390. para abrir
     um arquivo.  Semelhante à função ‘fopen()’, mas o parâmetro 'path'
     é um objeto Python e uma exceção é definida em caso de erro.
     Adiciona também a função *note Py_fclose(): 391. para fechar um
     arquivo, função necessária para suporte ao Windows.  Patch por
     Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128400

   (2) https://github.com/python/cpython/issues/128629

   (3) https://github.com/python/cpython/issues/128008

   (4) https://github.com/python/cpython/issues/127350


File: python.info,  Node: Construção<11>,  Prev: API C<10>,  Up: Python 3 14 0 alpha 4

1.24.13.7 Construção
....................

   - gh-128627(1): Para construções do Emscripten, a chamada de
     conversão do ponteiro de função trampoline agora usa a instrução
     wasm-gc ref.test se estiver disponível em vez da reflexão do tipo
     Wasm JS.

   - gh-128472(2): Ignora a otimização BOLT de funções usando gotos
     computados, corrigindo erros na compilação com LLVM 19.

   - gh-115765(3): O GNU Autoconf 2.72 agora é necessário para gerar o
     ‘configure’.  Patch de Erlend Aasland.

   - gh-123925(4): Corrige a construção do módulo *note curses: 2f. em
     plataformas com libncurses, mas sem libncursesw.

   - gh-90905(5): Adiciona suporte para compilação cruzada para x86_64
     no macOS aarch64/arm64.

   - gh-128321(6): Define ‘LIBS’ em vez de ‘LDFLAGS’ ao verificar se as
     funções de biblioteca *note sqlite3: d4. 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-100384(7): Erro em ‘unguarded-availability’ em construções do
     macOS, impedindo o uso inválido de símbolos que não estão
     disponíveis em versões mais antigas do sistema operacional.

   - gh-128104(8): Remoção das condições ‘Py_STRFTIME_C99_SUPPORT’ em
     favor da exigência de suporte ao especificador C99 ‘strftime(3)(9)’
     em tempo de construção.  Na compilação cruzada, não há verificação
     em tempo de construção e o suporte é presumido.

   - gh-127951(10): Adiciona a opção ‘--pystats’ à construção do Windows
     para habilitar a coleta de estatísticas de desempenho.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128627

   (2) https://github.com/python/cpython/issues/128472

   (3) https://github.com/python/cpython/issues/115765

   (4) https://github.com/python/cpython/issues/123925

   (5) https://github.com/python/cpython/issues/90905

   (6) https://github.com/python/cpython/issues/128321

   (7) https://github.com/python/cpython/issues/100384

   (8) https://github.com/python/cpython/issues/128104

   (9) https://manpages.debian.org/strftime(3)

   (10) https://github.com/python/cpython/issues/127951


File: python.info,  Node: Python 3 14 0 alpha 3,  Next: Python 3 14 0 alpha 2,  Prev: Python 3 14 0 alpha 4,  Up: Changelog

1.24.14 Python 3.14.0 alpha 3
-----------------------------

'Data de lançamento: 2024-12-17'

* Menu:

* Windows: Windows<9>.
* Ferramentas/Demos: Ferramentas/Demos<12>.
* Testes: Testes<10>.
* Segurança: Segurança<12>.
* Biblioteca: Biblioteca<14>.
* Documentação: Documentação<9>.
* Núcleo e embutidos: Núcleo e embutidos<13>.
* API C: API C<11>.
* Construção: Construção<12>.


File: python.info,  Node: Windows<9>,  Next: Ferramentas/Demos<12>,  Up: Python 3 14 0 alpha 3

1.24.14.1 Windows
.................

   - gh-127353(1): Permite forçar a saída de cores no Windows usando
     variáveis de ambiente.  Patch por Andrey Efremov.

   - gh-125729(2): Torna a presença do módulo *note turtle: 107.
     dependente da opção do instalador Tcl/Tk.  Anteriormente, o módulo
     era sempre instalado, mas seria inutilizável sem o Tcl/Tk.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127353

   (2) https://github.com/python/cpython/issues/125729


File: python.info,  Node: Ferramentas/Demos<12>,  Next: Testes<10>,  Prev: Windows<9>,  Up: Python 3 14 0 alpha 3

1.24.14.2 Ferramentas/Demos
...........................

   - gh-126700(1): Adiciona suporte para funções multi-argumentos *note
     gettext: 67. em ‘pygettext.py’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126700


File: python.info,  Node: Testes<10>,  Next: Segurança<12>,  Prev: Ferramentas/Demos<12>,  Up: Python 3 14 0 alpha 3

1.24.14.3 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: 3c.  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.

   - gh-127076(4): Desabilita testes de chamada de sistema baseados em
     strace quando LD_PRELOAD estiver definido.

   - gh-127076(5): Filtra chamadas ‘mmap’, ‘munmap’ e ‘mprotect’
     relacionadas à memória daquelas relacionadas ao arquivo ao testar o
     comportamento de *note io: 83. usando strace.

   ---------- 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

   (4) https://github.com/python/cpython/issues/127076

   (5) https://github.com/python/cpython/issues/127076


File: python.info,  Node: Segurança<12>,  Next: Biblioteca<14>,  Prev: Testes<10>,  Up: Python 3 14 0 alpha 3

1.24.14.4 Segurança
...................

   - gh-127655(1): 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(): 1752.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127655


File: python.info,  Node: Biblioteca<14>,  Next: Documentação<9>,  Prev: Segurança<12>,  Up: Python 3 14 0 alpha 3

1.24.14.5 Biblioteca
....................

   - gh-126907(1): Corrige falha ao usar *note atexit: d.
     simultaneamente na construção com *note threads livres: 1f3.

   - gh-127870(2): Detecta chamadas recursivas no tratamento de ctypes
     ‘_as_parameter_’.  Patch por Victor Stinner.

   - gh-127732(3): O módulo *note platform: af. agora detecta
     corretamente o Windows Server 2025.

   - gh-126789(4): Corrigidas *note sysconfig.get_config_vars(): 297,
     *note sysconfig.get_paths(): 33e. e similares, que retornavam dados
     em cache desatualizados caso o valor de *note sys.prefix: 3e4. ou
     *note sys.exec_prefix: 3e8. fosse alterado.  A substituição de
     *note sys.prefix: 3e4. ou *note sys.exec_prefix: 3e8. ainda é
     desencorajada, pois isso poderia danificar outras partes do código.

   - gh-127718(5): Adiciona cor à saída de ajuda do *note test.regrtest:
     e9.  Patch por Hugo van Kemenade.

   - gh-127610(6): Adicionada validação para mais de um parâmetro
     var-posicional ou var-keyword em *note inspect.Signature: 4dd.
     Patch por Maxim Ageev.

   - gh-127627(7): Adicionado ‘posix._emscripten_debugger()’ para ajudar
     na depuração do conjunto de testes no alvo Emscripten.

   - gh-126821(8): 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(9): Inclui ‘<sys/pidfd.h>’ para obter a constante
     ‘os.PIDFD_NONBLOCK’.  Patch por Victor Stinner.

   - gh-127481(10): Adiciona a constante ‘EPOLLWAKEUP’ ao módulo *note
     select: c6.

   - gh-127065(11): Torna *note operator.methodcaller(): 1029. seguro
     para thread e seguro para reentrância.

   - gh-127321(12): *note pdb.set_trace(): 271. não parará em um opcode
     que não tenha mais um número de linha associado.

   - gh-127429(13): Corrigido um bug em que, em construções cruzadas, os
     dados POSIX *note sysconfig: e1. estavam sendo gerados com o
     ‘Makefile’ do Python host.  Os dados agora são gerados a partir do
     ‘Makefile’ da construção atual.

   - gh-127413(14): Adiciona a opção de linha de comando *note dis
     -specialized: 208. para mostrar o bytecode especializado.  Patch
     por Bénédikt Tran.

   - gh-125413(15): Revert addition of ‘pathlib.Path.scandir()’.  This
     method was added in 3.14.0a2.  The optimizations remain for file
     system paths, but other subclasses should only have to implement
     *note pathlib.Path.iterdir(): 26d.

   - gh-127257(16): Em *note ssl: d5, falhas de chamada de sistema que o
     OpenSSL relata usando ‘ERR_LIB_SYS’ agora são levantadas como *note
     OSError: 2bf.

   - gh-59705(17): On Linux, *note threading.Thread: 176. now sets the
     thread name to the operating system.  Patch by Victor Stinner.

   - gh-127303(18): Expõe publicamente *note EXACT_TOKEN_TYPES: 183f. em
     ‘token.__all__’.

   - gh-127331(19): *note ssl: d5. can show descriptions for errors
     added in OpenSSL 3.4.

   - gh-123967(20): 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-127178(21): A ‘_sysconfig_vars_(...).json’ file is now shipped
     in the standard library directory.  It contains the output of *note
     sysconfig.get_config_vars(): 297. on the default environment
     encoded as JSON data.  This is an implementation detail, and may
     change at any time.

   - gh-127072(22): Remove outdated ‘socket.NETLINK_*’ constants not
     present in Linux kernels beyond 2.6.17.

   - gh-127255(23): The *note CopyComPointer(): 1e9. function is now
     public.  Previously, this was private and only available in
     ‘_ctypes’.

   - gh-127182(24): Corrige o travamento de
     ‘io.StringIO.__setstate__()’, quando *note None: 87a. foi passado
     como o primeiro valor.

   - gh-127217(25): Corrige *note urllib.request.pathname2url(): 2be.
     para caminhos começando com várias barras no Posix.

   - gh-125866(26): *note urllib.request.pathname2url(): 2be. now adds
     an empty authority when generating a URL for a path that begins
     with exactly one slash.  For example, the path ‘/etc/hosts’ is
     converted to the scheme-less URL ‘///etc/hosts’.  As a result of
     this change, URLs without authorities are only generated for
     relative paths.

   - gh-127221(27): Add colour to *note unittest: 10c. output.  Patch by
     Hugo van Kemenade.

   - gh-127035(28): Corrige *note shutil.which: 6d0. 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(29): Suporte ao histórico de PyREPL no Windows.  Patch
     por devdanzin e Victor Stinner.

   - gh-125866(30): *note urllib.request.pathname2url(): 2be. and *note
     url2pathname(): 2bc. no longer convert Windows drive letters to
     uppercase.

   - gh-127078(31): Corrige o problema em que *note
     urllib.request.url2pathname(): 2bc. falhava ao descartar uma barra
     extra antes de uma unidade UNC no caminho da URL no Windows.

   - gh-126766(32): Corrige o problema em que *note
     urllib.request.url2pathname(): 2bc. falhava ao descartar qualquer
     autoridade ‘localhost’ presente na URL.

   - gh-127065(33): Corrige o travamento ao chamar uma instância *note
     operator.methodcaller(): 1029. de vários threads na construção com
     threads livres.

   - gh-127090(34): Fix value of *note urllib.response.addinfourl.url:
     1840. for ‘file:’ URLs that express relative paths and absolute
     Windows paths.  The canonical URL generated by *note
     urllib.request.pathname2url(): 2be. is now used.

   - gh-126992(35): Fix LONG and INT opcodes to only use base 10 for
     string to integer conversion in *note pickle: ab.

   - gh-126997(36): Corrige o suporte de opcodes STRING e GLOBAL com
     argumentos não ASCII em *note pickletools: ac.  *note
     pickletools.dis(): eb2. agora emite bytes não ASCII em argumentos
     STRING, BINSTRING e SHORT_BINSTRING como escape (‘\\xXX’).

   - gh-126316(37): *note grp: 6a.: Torna *note grp.getgrall(): 1841.
     seguro para thread adicionando um mutex.  Patch por Victor Stinner.

   - gh-126618(38): Corrige a representação de objetos *note
     itertools.count: 147f. quando o valor da contagem é *note
     sys.maxsize: 13c1.

   - gh-126615(39): The *note COMError: 1e8. exception is now public.
     Previously, this was private and only available in ‘_ctypes’.

   - gh-126985(40): When running under a virtual environment with the
     *note site: cc. disabled (see *note -S: 13a4.), *note sys.prefix:
     3e4. and *note sys.base_prefix: 3e3. will now point to the virtual
     environment, instead of the base installation.

   - gh-112192(41): In the *note trace: 103. module, increase the
     coverage precision (‘cov%’) to one decimal.

   - gh-118761(42): Improve import time of *note mimetypes: 93. by
     around 11-16 times.  Patch by Hugo van Kemenade.

   - gh-126947(43): Raise *note TypeError: 198. in
     ‘_pydatetime.timedelta.__new__()’ if the passed arguments are not
     *note int: 19b. or *note float: 196, so that the Python
     implementation is in line with the C implementation.

   - gh-126946(44): Improve the *note GetoptError: 1842. error message
     when a long option prefix matches multiple accepted options in
     *note getopt.getopt(): 16a9. and *note getopt.gnu_getopt(): 16a8.

   - gh-126899(45): Make tkinter widget methods ‘after()’ and
     ‘after_idle()’ accept arguments passed by keyword.

   - gh-85168(46): Corrige problema em que *note
     urllib.request.url2pathname(): 2bc. e *note pathname2url(): 2be.
     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: 752.

   - gh-126780(47): Corrige *note os.path.normpath(): 1515. para
     caminhos relativos à unidade no Windows.

   - gh-126775(48): Torna *note linecache.checkcache(): 1843. seguro
     para thread e seguro para reentrada do GC.

   - gh-126601(49): Fix issue where *note urllib.request.pathname2url():
     2be. raised *note OSError: 2bf. when given a Windows path
     containing a colon character not following a drive letter, such as
     before an NTFS alternate data stream.

   - gh-126727(50): ‘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-85046(51): Add *note EHWPOISON: 20a. error code to *note errno:
     5b.

   - gh-118201(52): Falhas intermitentes corrigidas de *note os.confstr:
     1844, *note os.pathconf: 12f7. e *note os.sysconf: 1845. no iOS e
     no Android.

   - gh-86463(53): The ‘usage’ parameter of *note
     argparse.ArgumentParser: 1bd. no longer affects the default value
     of the ‘prog’ parameter in subparsers.

   - gh-124008(54): 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-123401(55): O módulo *note http.cookies: 75. agora suporta
     análise de formatos de data obsoletos de RFC 850(56), de acordo com
     os requisitos do RFC 9110(57).  Patch por Nano Zheng.

   - gh-122431(58): *note readline.append_history_file(): 1046. agora
     levanta *note ValueError: 2ea. quando recebe um valor negativo.

   - gh-122356(59): Guarantee that the position of a file-like object
     passed to *note zipfile.is_zipfile(): 1525. is left untouched after
     the call.  Patch by Bénédikt Tran.

   - gh-122288(60): Improve the performances of *note
     fnmatch.translate(): 17b8. by a factor 1.7.  Patch by Bénédikt
     Tran.

   - gh-88110(61): Corrigido *note multiprocessing.Process: 251.
     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: 93e.

   - gh-97514(62): Authentication was added to the *note
     multiprocessing: 98. forkserver start method control socket so that
     only processes with the authentication key generated by the process
     that spawned the forkserver can control it.  This is an enhancement
     over the other gh-97514(63) fixes so that access is no longer
     limited only by filesystem permissions.

     The file descriptor exchange of control pipes with the forked
     worker process now requires an explicit acknowledgement byte to be
     sent over the socket after the exchange on all forkserver
     supporting platforms.  That makes testing the above much easier.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126907

   (2) https://github.com/python/cpython/issues/127870

   (3) https://github.com/python/cpython/issues/127732

   (4) https://github.com/python/cpython/issues/126789

   (5) https://github.com/python/cpython/issues/127718

   (6) https://github.com/python/cpython/issues/127610

   (7) https://github.com/python/cpython/issues/127627

   (8) https://github.com/python/cpython/issues/126821

   (9) https://github.com/python/cpython/issues/93312

   (10) https://github.com/python/cpython/issues/127481

   (11) https://github.com/python/cpython/issues/127065

   (12) https://github.com/python/cpython/issues/127321

   (13) https://github.com/python/cpython/issues/127429

   (14) https://github.com/python/cpython/issues/127413

   (15) https://github.com/python/cpython/issues/125413

   (16) https://github.com/python/cpython/issues/127257

   (17) https://github.com/python/cpython/issues/59705

   (18) https://github.com/python/cpython/issues/127303

   (19) https://github.com/python/cpython/issues/127331

   (20) https://github.com/python/cpython/issues/123967

   (21) https://github.com/python/cpython/issues/127178

   (22) https://github.com/python/cpython/issues/127072

   (23) https://github.com/python/cpython/issues/127255

   (24) https://github.com/python/cpython/issues/127182

   (25) https://github.com/python/cpython/issues/127217

   (26) https://github.com/python/cpython/issues/125866

   (27) https://github.com/python/cpython/issues/127221

   (28) https://github.com/python/cpython/issues/127035

   (29) https://github.com/python/cpython/issues/122273

   (30) https://github.com/python/cpython/issues/125866

   (31) https://github.com/python/cpython/issues/127078

   (32) https://github.com/python/cpython/issues/126766

   (33) https://github.com/python/cpython/issues/127065

   (34) https://github.com/python/cpython/issues/127090

   (35) https://github.com/python/cpython/issues/126992

   (36) https://github.com/python/cpython/issues/126997

   (37) https://github.com/python/cpython/issues/126316

   (38) https://github.com/python/cpython/issues/126618

   (39) https://github.com/python/cpython/issues/126615

   (40) https://github.com/python/cpython/issues/126985

   (41) https://github.com/python/cpython/issues/112192

   (42) https://github.com/python/cpython/issues/118761

   (43) https://github.com/python/cpython/issues/126947

   (44) https://github.com/python/cpython/issues/126946

   (45) https://github.com/python/cpython/issues/126899

   (46) https://github.com/python/cpython/issues/85168

   (47) https://github.com/python/cpython/issues/126780

   (48) https://github.com/python/cpython/issues/126775

   (49) https://github.com/python/cpython/issues/126601

   (50) https://github.com/python/cpython/issues/126727

   (51) https://github.com/python/cpython/issues/85046

   (52) https://github.com/python/cpython/issues/118201

   (53) https://github.com/python/cpython/issues/86463

   (54) https://github.com/python/cpython/issues/124008

   (55) https://github.com/python/cpython/issues/123401

   (56) https://datatracker.ietf.org/doc/html/rfc850.html

   (57) https://datatracker.ietf.org/doc/html/rfc9110.html

   (58) https://github.com/python/cpython/issues/122431

   (59) https://github.com/python/cpython/issues/122356

   (60) https://github.com/python/cpython/issues/122288

   (61) https://github.com/python/cpython/issues/88110

   (62) https://github.com/python/cpython/issues/97514

   (63) https://github.com/python/cpython/issues/97514


File: python.info,  Node: Documentação<9>,  Next: Núcleo e embutidos<13>,  Prev: Biblioteca<14>,  Up: Python 3 14 0 alpha 3

1.24.14.6 Documentação
......................

   - gh-127347(1): Publicly expose *note traceback.print_list(): 1847.
     in ‘traceback.__all__’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127347


File: python.info,  Node: Núcleo e embutidos<13>,  Next: API C<11>,  Prev: Documentação<9>,  Up: Python 3 14 0 alpha 3

1.24.14.7 Núcleo e embutidos
............................

   - gh-127740(1): Fix error message in *note bytes.fromhex(): 190. when
     given an odd number of digits to properly indicate that an even
     number of hexadecimal digits is required.

   - gh-127058(2): ‘PySequence_Tuple’ now creates the resulting tuple
     atomically, preventing partially created tuples being visible to
     the garbage collector or through ‘gc.get_referrers()’

   - gh-127599(3): 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(4): Ao levantar *note ImportError: 64f. para símbolos
     ausentes em importações ‘from’, use ‘__file__’ na mensagem de erro
     se ‘__spec__.origin’ não for um local

   - gh-127582(5): 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(6): Os shims do compilador iOS agora podem aceitar
     argumentos com espaços.

   - gh-127536(7): Adiciona travas faltando em torno de algumas
     operações de atribuição de lista na construção com threads livres.

   - gh-127085(8): Fix race when exporting a buffer from a *note
     memoryview: 165. object on the *note free-threaded: 1f3. build.

   - gh-127238(9): Correct error message for *note
     sys.set_int_max_str_digits(): 1849.

   - gh-113841(10): Corrige possível comportamento indefinido de divisão
     por zero em *note complex: 197.’s *note _Py_c_pow(): 184a.

   - gh-127133(11): Calling *note
     argparse.ArgumentParser.add_argument_group(): 2e9. on an argument
     group, and calling *note
     argparse.ArgumentParser.add_argument_group(): 2e9. or *note
     argparse.ArgumentParser.add_mutually_exclusive_group(): 2eb. on a
     mutually exclusive group now raise exceptions.  This nesting was
     never supported, often failed to work correctly, and was
     unintentionally exposed through inheritance.  This functionality
     has been deprecated since Python 3.11.

   - gh-126491(12): Add a marking phase to the GC. All objects that can
     be transitively reached from builtin modules or the stacks are
     marked as reachable before cycle detection.  This reduces the
     amount of work done by the GC by approximately half.

   - gh-127020(13): Corrige uma falha na construção com threads livres
     quando *note PyCode_GetCode(): 971, *note PyCode_GetVarnames():
     972, *note PyCode_GetCellvars(): 973. ou *note
     PyCode_GetFreevars(): 974. eram chamados de várias threads ao mesmo
     tempo.

   - gh-127010(14): Simplify GC tracking of dictionaries.  All
     dictionaries are tracked when created, rather than being lazily
     tracked when a trackable object was added to them.  This simplifies
     the code considerably and results in a slight speedup.

   - gh-126980(15): Corrige *note __buffer__(): 681. de *note bytearray:
     342. travando quando *note READ: 184b. ou *note WRITE: 184c. são
     passados como sinalizadores.

   - gh-126937(16): Fix *note TypeError: 198. when a *note
     ctypes.Structure: 1e4. has a field size that doesn’t fit into an
     unsigned 16-bit integer.  Instead, the maximum number of 'bits' is
     *note sys.maxsize: 13c1.

   - gh-126868(17): Increase performance of *note int: 19b. by adding a
     freelist for compact ints.

   - gh-126881(18): Corrige falha na finalização do estado dtoa.  Patch
     por Kumar Aditya.

   - gh-126892(19): Require cold or invalidated code to “warm up” before
     being JIT compiled again.

   - gh-126091(20): Ensure stack traces are complete when throwing into
     a generator chain that ends in a custom generator.

   - gh-126024(21): Optimize decoding of short UTF-8 sequences
     containing non-ASCII characters by approximately 15%.

   - gh-125420(22): Add *note memoryview.index(): 184d. to *note
     memoryview: 165. objects.  Patch by Bénédikt Tran.

   - gh-125420(23): Add *note memoryview.count(): 184e. to *note
     memoryview: 165. objects.  Patch by Bénédikt Tran.

   - gh-124470(24): Fix crash in free-threaded builds when replacing
     object dictionary while reading attribute on another thread

   - gh-69639(25): Implement mixed-mode arithmetic rules combining real
     and complex numbers as specified by C standards since C99.  Patch
     by Sergey B Kirpichev.

   - gh-120010(26): Correct invalid corner cases which resulted in
     ‘(nan+nanj)’ output in complex multiplication, e.g.,
     ‘(1e300+1j)*(nan+infj)’.  Patch by Sergey B Kirpichev.

   - gh-109746(27): 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/127740

   (2) https://github.com/python/cpython/issues/127058

   (3) https://github.com/python/cpython/issues/127599

   (4) https://github.com/python/cpython/issues/127651

   (5) https://github.com/python/cpython/issues/127582

   (6) https://github.com/python/cpython/issues/127434

   (7) https://github.com/python/cpython/issues/127536

   (8) https://github.com/python/cpython/issues/127085

   (9) https://github.com/python/cpython/issues/127238

   (10) https://github.com/python/cpython/issues/113841

   (11) https://github.com/python/cpython/issues/127133

   (12) https://github.com/python/cpython/issues/126491

   (13) https://github.com/python/cpython/issues/127020

   (14) https://github.com/python/cpython/issues/127010

   (15) https://github.com/python/cpython/issues/126980

   (16) https://github.com/python/cpython/issues/126937

   (17) https://github.com/python/cpython/issues/126868

   (18) https://github.com/python/cpython/issues/126881

   (19) https://github.com/python/cpython/issues/126892

   (20) https://github.com/python/cpython/issues/126091

   (21) https://github.com/python/cpython/issues/126024

   (22) https://github.com/python/cpython/issues/125420

   (23) https://github.com/python/cpython/issues/125420

   (24) https://github.com/python/cpython/issues/124470

   (25) https://github.com/python/cpython/issues/69639

   (26) https://github.com/python/cpython/issues/120010

   (27) https://github.com/python/cpython/issues/109746


File: python.info,  Node: API C<11>,  Next: Construção<12>,  Prev: Núcleo e embutidos<13>,  Up: Python 3 14 0 alpha 3

1.24.14.8 API C
...............

   - gh-127896(1): The previously undocumented function *note
     PySequence_In(): 3d5. is *note soft deprecated: 23c.  Use *note
     PySequence_Contains(): 3d6. instead.

   - gh-127791(2): Corrige perda de retornos de chamada após mais de uma
     chamada para *note PyUnstable_AtExit(): 1850.

   - gh-127691(3): The *note Unicode Exception Objects: 45e. C API now
     raises a *note TypeError: 198. if its exception argument is not a
     *note UnicodeError: 45f. object.  Patch by Bénédikt Tran.

   - gh-123378(4): Ensure that the value of *note
     UnicodeEncodeError.end: 1820. retrieved by *note
     PyUnicodeEncodeError_GetEnd(): 1851. lies in ‘[min(1, objlen),
     max(min(1, objlen), objlen)]’ where 'objlen' is the length of *note
     UnicodeEncodeError.object: 1852.  Similar arguments apply to *note
     UnicodeDecodeError: bfe. and *note UnicodeTranslateError: 1853. and
     their corresponding C interface.  Patch by Bénédikt Tran.

   - gh-127314(5): Improve error message when calling the C API without
     an active thread state on the *note free-threaded: 1f3. build.

   - gh-123378(6): Ensure that the value of *note
     UnicodeEncodeError.start: 181f. retrieved by *note
     PyUnicodeEncodeError_GetStart(): 1854. lies in ‘[0, max(0, objlen -
     1)]’ where 'objlen' is the length of *note
     UnicodeEncodeError.object: 1852.  Similar arguments apply to *note
     UnicodeDecodeError: bfe. and *note UnicodeTranslateError: 1853. and
     their corresponding C interface.  Patch by Bénédikt Tran.

   - gh-109523(7): Reading text from a non-blocking stream with ‘read’
     may now raise a *note BlockingIOError: 234. if the operation cannot
     immediately return bytes.

   - gh-102471(8): Add a new import and export API for Python *note int:
     19b. objects ( PEP 757(9)):

        * *note PyLong_GetNativeLayout(): 3a4.;

        * *note PyLong_Export(): 3a5.;

        * *note PyLong_FreeExport(): 3a6.;

        * *note PyLongWriter_Create(): 3a7.;

        * *note PyLongWriter_Finish(): 3a8.;

        * *note PyLongWriter_Discard(): 3a9.

     Patch por Victor Stinner.

   - gh-121058(10): ‘PyThreadState_Clear()’ now warns (and calls
     ‘sys.excepthook’) if the thread state still has an active
     exception.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127896

   (2) https://github.com/python/cpython/issues/127791

   (3) https://github.com/python/cpython/issues/127691

   (4) https://github.com/python/cpython/issues/123378

   (5) https://github.com/python/cpython/issues/127314

   (6) https://github.com/python/cpython/issues/123378

   (7) https://github.com/python/cpython/issues/109523

   (8) https://github.com/python/cpython/issues/102471

   (9) https://peps.python.org/pep-0757/

   (10) https://github.com/python/cpython/issues/121058


File: python.info,  Node: Construção<12>,  Prev: API C<11>,  Up: Python 3 14 0 alpha 3

1.24.14.9 Construção
....................

   - gh-127865(1): Corrige falha de construção em sistemas sem suporte a
     thread-locals.

   - gh-127629(2): Emscripten builds now include ctypes support.

   - gh-127111(3): Updated the Emscripten web example to use ES6 modules
     and be built into a distinct ‘web_example’ subfolder.

   - gh-115869(4): Make ‘jit_stencils.h’ (which is produced during JIT
     builds) reproducible.

   - gh-126898(5): The Emscripten build of Python is now based on ES6
     modules.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127865

   (2) https://github.com/python/cpython/issues/127629

   (3) https://github.com/python/cpython/issues/127111

   (4) https://github.com/python/cpython/issues/115869

   (5) https://github.com/python/cpython/issues/126898


File: python.info,  Node: Python 3 14 0 alpha 2,  Next: Python 3 14 0 alpha 1,  Prev: Python 3 14 0 alpha 3,  Up: Changelog

1.24.15 Python 3.14.0 alpha 2
-----------------------------

'Data de lançamento: 2024-11-19'

* Menu:

* Windows: Windows<10>.
* Ferramentas/Demos: Ferramentas/Demos<13>.
* Testes: Testes<11>.
* Segurança: Segurança<13>.
* Biblioteca: Biblioteca<15>.
* Documentação: Documentação<10>.
* Núcleo e embutidos: Núcleo e embutidos<14>.
* API C: API C<12>.
* Construção: Construção<13>.


File: python.info,  Node: Windows<10>,  Next: Ferramentas/Demos<13>,  Up: Python 3 14 0 alpha 2

1.24.15.1 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: af. 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: 78a. quando *note
     sys.exit(): 276. é chamado com ‘0xffffffff’ no Windows.

   - gh-125550(8): Habilita o *note Gerenciador de instalação do Python:
     7cf. para detectar instalações do Python 3.14 da Windows Store.

   - gh-123803(9): All Windows code pages are now supported as “cpXXX”
     codecs on Windows.

   ---------- 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/123803


File: python.info,  Node: Ferramentas/Demos<13>,  Next: Testes<11>,  Prev: Windows<10>,  Up: Python 3 14 0 alpha 2

1.24.15.2 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<11>,  Next: Segurança<13>,  Prev: Ferramentas/Demos<13>,  Up: Python 3 14 0 alpha 2

1.24.15.3 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-125730(2): Change ‘make test’ to not run GUI tests by default.
     Use ‘make ci’ to run tests with GUI tests instead.

   - gh-124295(3): Adiciona testes de tradução ao módulo *note argparse:
     7.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126909

   (2) https://github.com/python/cpython/issues/125730

   (3) https://github.com/python/cpython/issues/124295


File: python.info,  Node: Segurança<13>,  Next: Biblioteca<15>,  Prev: Testes<11>,  Up: Python 3 14 0 alpha 2

1.24.15.4 Segurança
...................

   - gh-126623(1): Atualiza libexpat para 2.6.4

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126623


File: python.info,  Node: Biblioteca<15>,  Next: Documentação<10>,  Prev: Segurança<13>,  Up: Python 3 14 0 alpha 2

1.24.15.5 Biblioteca
....................

   - gh-85957(1): Add missing MIME types for images with RFCs: emf,
     fits, g3fax, jp2, jpm, jpx, t38, tiff-fx and wmf.  Patch by Hugo
     van Kemenade.

   - gh-126920(2): Fix the ‘prefix’ and ‘exec_prefix’ keys from *note
     sysconfig.get_config_vars(): 297. incorrectly having the same value
     as *note sys.base_prefix: 3e3. and *note sys.base_exec_prefix: 3e7,
     respectively, inside virtual environments.  They now accurately
     reflect *note sys.prefix: 3e4. and *note sys.exec_prefix: 3e8.

   - gh-67877(3): Corrige vazamentos de memória quando a correspondência
     de *note expressão regular: be. termina abruptamente, seja por
     causa de um sinal ou porque a alocação de memória falha.

   - gh-125063(4): *note marshal: 91. now supports *note slice: 689.
     objects.  The marshal format version was increased to 5.

   - gh-126789(5): Corrigidos os valores de *note
     sysconfig.get_config_vars(): 297, *note sysconfig.get_paths(): 33e.
     e seus irmãos quando a inicialização de *note site: cc. acontece
     após *note sysconfig: e1. ter construído um cache para *note
     sysconfig.get_config_vars(): 297.

   - gh-126188(6): Atualiza pip empacotado para 24.3.1

   - gh-126766(7): Corrige problema em que *note
     urllib.request.url2pathname(): 2bc. falhava ao descartar duas
     barras iniciais introduzindo uma seção de autoridade vazia.

   - gh-126705(8): Allow *note os.PathLike: e3f. to be a base for
     Protocols.

   - gh-126699(9): Permite que *note collections.abc.AsyncIterator: fd2.
     seja uma base para Protocols.

   - gh-126654(10): Corrige falha quando um objeto não dicionário era
     passado para várias funções no módulo ‘_interpreters’.

   - gh-104745(11): Limita o início de um patcher (de *note
     unittest.mock.patch(): 1088. ou *note unittest.mock.patch.object():
     185c.) mais de uma vez sem pará-lo

   - gh-126595(12): Corrige falha ao instanciar *note itertools.count:
     147f. com uma contagem inicial de *note sys.maxsize: 13c1. em
     construções de depuração.  Patch por Bénédikt Tran.

   - gh-120423(13): Corrige problema em que *note
     urllib.request.pathname2url(): 2be. manipulava incorretamente
     caminhos do Windows com barras inseridas.

   - gh-126565(14): Melhora o desempenho de *note zipfile.Path.open():
     185d. para modos que não sejam de leitura.

   - gh-126505(15): Corrige bugs na compilação de *note expressões
     regulares: be. 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(16): Corrigido o processo de forkserver do método de
     início *note multiprocessing: 98. ‘"forkserver"’ para herdar
     corretamente o *note sys.path: 3e1. do pai durante a importação de
     módulos *note multiprocessing.set_forkserver_preload(): 185e. da
     mesma maneira que *note sys.path: 3e1. é configurado em workers
     antes de executar itens de trabalho.

     This bug caused some forkserver module preloading to silently fail
     to preload.  This manifested as a performance degradation in child
     processes when the ‘sys.path’ was required due to additional
     repeated work in every worker.

     Também poderia ter um efeito colateral de ‘""’ permanecer em *note
     sys.path: 3e1. durante importações de pré-carregamento do
     forkserver em vez do caminho absoluto de *note os.getcwd(): 185f.
     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(17): Os valores de *note multiprocessing.Lock: 17bd. e
     *note multiprocessing.RLock: 17be. ‘repr’ não dizem mais “unknown”
     no macOS.

   - gh-126476(18): Levanta *note calendar.IllegalMonthError: 1860.
     (agora uma subclasse de *note IndexError: 1723.) para *note
     calendar.month(): 1861. quando o mês de entrada não está correto.

   - gh-126489(19): A implementação Python de *note pickle: ab. não
     chama mais *note pickle.Pickler.persistent_id(): 1862. para o
     resultado de ‘persistent_id()’.

   - gh-126451(20): Register the *note contextvars.Context: 177. type to
     *note collections.abc.Mapping: abd.

   - gh-126175(21): Add ‘msg’, ‘doc’, ‘pos’, ‘lineno’ and ‘colno’
     attributes to *note tomllib.TOMLDecodeError: 1863.  Deprecate
     instantiating with free-form arguments.

   - gh-89416(22): Add RFC 9559(23) MIME types for Matroska audiovisual
     container formats.  Patch by Hugo van Kemenade.

   - gh-126417(24): Register the ‘multiprocessing.managers.DictProxy’
     and ‘multiprocessing.managers.ListProxy’ types in *note
     multiprocessing.managers: 9b. to *note
     collections.abc.MutableMapping: 12a8. and *note
     collections.abc.MutableSequence: 4b9, respectively.

   - gh-126390(25): Add support for returning intermixed options and
     non-option arguments in order in *note getopt.gnu_getopt(): 16a8.

   - gh-126374(26): Add support for options with optional arguments in
     the *note getopt: 65. module.

   - gh-126363(27): Speed up pattern parsing in *note
     pathlib.Path.glob(): 531. by skipping creation of a *note
     pathlib.Path: 265. object for the pattern.

   - gh-126353(28): *note asyncio.get_event_loop(): 2f0. now does not
     implicitly creates an event loop.  It now raises a *note
     RuntimeError: 243. if there is no set event loop.  Patch by Kumar
     Aditya.

   - gh-126313(29): Corrige um problema em *note curses.napms(): 1864.
     quando *note curses.initscr(): 1865. ainda não foi chamado.  Patch
     por Bénédikt Tran.

   - gh-126303(30): Corrige serializar com pickle e cópia de objetos
     *note os.sched_param: 1866.

   - gh-126138(31): Corrige uma falha de uso após liberação em objetos
     *note asyncio.Task: 1c7. cuja corrotina subjacente produz um objeto
     que implementa um *note __getattribute__(): dbf. maligno.  Patch
     por Nico Posada.

   - gh-120057(32): Replace the ‘os.environ.refresh()’ method with a new
     *note os.reload_environ(): 257. function.  Patch by Victor Stinner.

   - gh-126220(33): Corrige falha em ‘cProfile.Profile’ e
     ‘_lsprof.Profiler’ quando seus retornos de chamada eram chamados
     diretamente com 0 argumentos.

   - gh-126212(34): Corrige problema em que *note
     urllib.request.pathname2url(): 2be. e *note url2pathname(): 2bc.
     removiam barras de caminhos de unidade DOS do Windows e URLs.

   - gh-126223(35): Levanta *note UnicodeEncodeError: 87c. em vez de um
     *note SystemError: 78a. ao chamar ‘_interpreters.create()’ com um
     caractere Unicode inválido.

   - gh-126205(36): Corrige o problema em que *note
     urllib.request.pathname2url(): 2be. gerava URLs começando com
     quatro barras (em vez de duas) quando recebia um caminho UNC do
     Windows.

   - gh-126156(37): Improved performances of creating *note Morsel: df2.
     objects by a factor of 3.8x.

   - gh-126105(38): Corrige uma falha em *note ast: 9. quando o atributo
     *note ast.AST._fields: 1867. é excluído.

   - gh-126106(39): Corrige uma possível desreferência de ponteiro
     ‘NULL’ em *note ssl: d5.

   - gh-126080(40): Corrige uma falha de uso após liberação em objetos
     *note asyncio.Task: 1c7. para os quais o loop de eventos subjacente
     implementa um *note __getattribute__(): dbf. maligno.  Relatado por
     Nico-Posada.  Patch por Bénédikt Tran.

   - gh-125322(41): Correct detection of complex numbers support in
     libffi.

   - gh-126083(42): Corrige um vazamento de referência em objetos *note
     asyncio.Task: 1c7. ao reinicializar o mesmo objeto com um contexto
     não ‘None’.  Patch por Nico Posada.

   - gh-126068(43): Fix exceptions in the *note argparse: 7. module so
     that only error messages for ArgumentError and ArgumentTypeError
     are now translated.  ArgumentError is now only used for command
     line errors, not for logical errors in the program.  TypeError is
     now raised instead of ValueError for some logical errors.

   - gh-125413(44): Add ‘pathlib.Path.scandir()’ method to efficiently
     fetch directory children and their file attributes.  This is a
     trivial wrapper of *note os.scandir(): c48.

   - gh-125984(45): Corrige falhas de uso após liberação em objetos
     *note asyncio.Future: dba. para os quais o laço de eventos
     subjacente implementa um *note __getattribute__(): dbf. maligno.
     Relatado por Nico-Posada.  Patch por Bénédikt Tran.

   - gh-125926(46): Fix *note urllib.parse.urljoin(): 108c. for base URI
     with undefined authority.  Although RFC 3986(47) only specify
     reference resolution for absolute base URI, ‘urljoin()’ should
     continue to return sensible result for relative base URI.

   - gh-125969(48): Corrige uma falha fora dos limites quando um *note
     asyncio.loop.call_soon(): cee. maligno altera o comprimento da
     lista de retornos de chamada internos.  Patch por Bénédikt Tran.

   - gh-125966(49): Corrige uma falha de uso após liberação em *note
     asyncio.Future.remove_done_callback(): 1868.  Patch por Bénédikt
     Tran.

   - gh-125789(50): 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-126916(51): Allow the 'initial' parameter of *note
     functools.reduce(): 219. to be passed as a keyword argument.  Patch
     by Sayandip Dutta.

   - gh-124452(52): Corrige um problema em *note
     email.policy.EmailPolicy.header_source_parse(): 1869. e *note
     email.policy.Compat32.header_source_parse(): 186a. 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-117941(53): ‘argparse.BooleanOptionalAction’ now rejects option
     names starting with ‘--no-’.

   - gh-125884(54): Corrige o bug para *note pdb: aa. onde ele não pode
     definir pontos de interrupção em funções com certas anotações.

   - gh-125355(55): Corrige vários bugs em *note
     argparse.ArgumentParser.parse_intermixed_args(): ceb.

        * 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-125767(56): *note super: 1a6. objects are now *note pickleable:
     ab. and *note copyable: 29.

   - gh-124969(57): ‘locale.nl_langinfo(locale.ALT_DIGITS)’ now returns
     a string again.  The returned value consists of up to 100
     semicolon-separated symbols.

   - gh-84850(58): Remove ‘URLopener’ and ‘FancyURLopener’ classes from
     *note urllib.request: 111.  They had previously raised *note
     DeprecationWarning: 1a3. since Python 3.3.

   - gh-125666(59): Evita a saída do interpretador se um byte nulo for
     fornecido como entrada no novo REPL.

   - gh-125710(60): [Enum] corrige comparações hasheável<->não-hasheável
     para valores de membros

   - gh-125631(61): Restaura a capacidade de definir atributos *note
     persistent_id: 1862. e *note persistent_load: 186b. de instâncias
     das classes ‘Pickler’ e ‘Unpickler’ no módulo *note pickle: ab.

   - gh-125378(62): Corrige o bug em *note pdb: aa. onde após um comando
     multilinha, uma linha vazia repete a primeira linha do comando
     multilinha, em vez do comando completo.

   - gh-125682(63): Rejeita dígitos não ASCII na implementação Python de
     *note json.loads(): b44. em conformidade com a especificação JSON.

   - gh-125660(64): Rejeita escapes unicode inválidos para implementação
     Python de *note json.loads(): b44.

   - gh-52551(65): Use ‘wcsftime()’ to implement *note time.strftime():
     13e5. on Windows.

   - gh-125259(66): Corrige a lógica de remoção de notas para erros
     lançados na inicialização de enumeração.

   - gh-125633(67): Add function *note inspect.ispackage(): 231. to
     determine whether an object is a *note package: 232. or not.

   - gh-125614(68): In the *note FORWARDREF: 15f. format of *note
     annotationlib: 6, fix bug where nested expressions were not
     returned as *note annotationlib.ForwardRef: 17c3. format.

   - gh-125590(69): Permite que ‘FrameLocalsProxy’ exclua e remova se a
     chave não for uma variável rápida.

   - gh-125600(70): Only show stale code warning in *note pdb: aa. when
     we display source code.

   - gh-125542(71): Deprecate passing keyword-only 'prefix_chars'
     argument to *note argparse.ArgumentParser.add_argument_group():
     2e9.

   - gh-125541(72): Pressing ‘Ctrl’-‘C’ while blocked in *note
     threading.Lock.acquire(): 89c, *note threading.RLock.acquire():
     1071, and *note threading.Thread.join(): 13e0. now interrupts the
     function call and raises a *note KeyboardInterrupt: bbb. exception
     on Windows, similar to how those functions behave on macOS and
     Linux.

   - gh-125519(73): Melhora o traceback se *note importlib.reload():
     732. for chamado com um objeto que não seja um módulo.  Patch por
     Alex Waygood.

   - gh-125451(74): Corrige um impasse quando *note
     concurrent.futures.ProcessPoolExecutor: 1d6. desliga
     simultaneamente com um erro ao alimentar um trabalho para um
     processo de trabalho.

   - gh-125115(75): Corrige um bug em *note pdb: aa. onde argumentos
     começando com ‘-’ não podem ser passados para o script depurado.

   - gh-125398(76): Corrige a conversão do caminho ‘VIRTUAL_ENV’ no
     script activate em *note venv: 117. ao executar no Git Bash para
     Windows.

   - gh-125245(77): Corrige condição de corrida ao importar *note
     collections.abc: 1f, que poderia retornar incorretamente um módulo
     vazio.

   - gh-52551(78): Corrige problemas de codificação em *note
     time.strftime(): 13e5, o método *note strftime(): e82. das classes
     *note datetime: 34. *note datetime: 4dc, *note date: 1f9. e *note
     time: 1fa. 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-124984(79): Corrige segurança de thread em *note ssl: d5. na
     construção com threads livres.  As operações OpenSSL agora são
     protegidas por uma trava por objeto.

   - gh-124651(80): Coloca corretamente entre aspas as strings template
     em scripts de ativação *note venv: 117.

   - gh-124694(81): We’ve added *note
     concurrent.futures.InterpreterPoolExecutor: 1d2, which allows you
     to run code in multiple isolated interpreters.  This allows you to
     circumvent the limitations of CPU-bound threads (due to the GIL).
     Patch by Eric Snow.

     This addition is unrelated to PEP 734(82).

   - gh-58032(83): Deprecate the *note argparse.FileType: 30a. type
     converter.

   - gh-99749(84): Adds a feature to optionally enable suggestions for
     argument choices and subparser names if mistyped by the user.

   - gh-58956(85): Corrigido um bug em *note pdb: aa. 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-124111(86): The tkinter module can now be built to use either
     the new version 9.0.0 of Tcl/Tk or the latest release 8.6.15 of
     Tcl/Tk 8.  Tcl/Tk 9 includes many improvements, both to the Tcl
     language and to the appearance and utility of the graphical user
     interface provided by Tk.

   - gh-80958(87): unittest discovery supports PEP 420 namespace
     packages as start directory again.

   - gh-123370(88): Corrige a tela que não limpa após executar o relógio
     turtledemo.

   - gh-89083(89): Add *note uuid.uuid8(): 2c3. for generating UUIDv8
     objects as specified in RFC 9562(90).  Patch by Bénédikt Tran

   - gh-122549(91): Add *note platform.invalidate_caches(): 27c. to
     invalidate cached results.

   - gh-120754(92): Atualiza chamadas ‘read’ ilimitadas em *note
     zipfile: 137. 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-121267(93): Improve the performance of *note tarfile: e4. when
     writing files, by caching user names and group names.

   - gh-70764(94): Corrigido um problema em que *note
     inspect.getclosurevars(): 12d1. 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(95): ‘posixpath.realpath()’ agora levanta *note
     NotADirectoryError: 1250. quando o modo 'strict' está habilitado e
     um caminho sem diretório com uma barra final é fornecido.

   - gh-119826(96): Sempre retorna um caminho absoluto para *note
     os.path.abspath(): 1516. no Windows.

   - gh-97850(97): Remove deprecated ‘pkgutil.get_loader()’ and
     ‘pkgutil.find_loader()’.

   - gh-118986(98): Add ‘socket.IPV6_RECVERR’ constant (available since
     Linux 2.2).

   - gh-116897(99): Accepting objects with false values (like ‘0’ and
     ‘[]’) except empty strings, byte-like objects and ‘None’ in *note
     urllib.parse: 110. functions *note parse_qsl(): 31c. and *note
     parse_qs(): 31d. is now deprecated.

   - gh-101955(100): Corrige SystemError ao corresponder ao padrão de
     expressão regular contendo alguma combinação de quantificador
     possessivo, alternativo e grupo de captura.

   - gh-71936(101): Corrigir uma condição de corrida em *note
     multiprocessing.pool.Pool: 1161.

   - bpo-46128(102): Remove quadros de pilha *note
     unittest.IsolatedAsyncioTestCase: 35e. de stacktraces relatados.

   - gh-84852(103): Add MIME types for MS Embedded OpenType, OpenType
     Layout, TrueType, WOFF 1.0 and 2.0 fonts.  Patch by Sahil Prajapati
     and Hugo van Kemenade.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85957

   (2) https://github.com/python/cpython/issues/126920

   (3) https://github.com/python/cpython/issues/67877

   (4) https://github.com/python/cpython/issues/125063

   (5) https://github.com/python/cpython/issues/126789

   (6) https://github.com/python/cpython/issues/126188

   (7) https://github.com/python/cpython/issues/126766

   (8) https://github.com/python/cpython/issues/126705

   (9) https://github.com/python/cpython/issues/126699

   (10) https://github.com/python/cpython/issues/126654

   (11) https://github.com/python/cpython/issues/104745

   (12) https://github.com/python/cpython/issues/126595

   (13) https://github.com/python/cpython/issues/120423

   (14) https://github.com/python/cpython/issues/126565

   (15) https://github.com/python/cpython/issues/126505

   (16) https://github.com/python/cpython/issues/117378

   (17) https://github.com/python/cpython/issues/125679

   (18) https://github.com/python/cpython/issues/126476

   (19) https://github.com/python/cpython/issues/126489

   (20) https://github.com/python/cpython/issues/126451

   (21) https://github.com/python/cpython/issues/126175

   (22) https://github.com/python/cpython/issues/89416

   (23) https://datatracker.ietf.org/doc/html/rfc9559.html

   (24) https://github.com/python/cpython/issues/126417

   (25) https://github.com/python/cpython/issues/126390

   (26) https://github.com/python/cpython/issues/126374

   (27) https://github.com/python/cpython/issues/126363

   (28) https://github.com/python/cpython/issues/126353

   (29) https://github.com/python/cpython/issues/126313

   (30) https://github.com/python/cpython/issues/126303

   (31) https://github.com/python/cpython/issues/126138

   (32) https://github.com/python/cpython/issues/120057

   (33) https://github.com/python/cpython/issues/126220

   (34) https://github.com/python/cpython/issues/126212

   (35) https://github.com/python/cpython/issues/126223

   (36) https://github.com/python/cpython/issues/126205

   (37) https://github.com/python/cpython/issues/126156

   (38) https://github.com/python/cpython/issues/126105

   (39) https://github.com/python/cpython/issues/126106

   (40) https://github.com/python/cpython/issues/126080

   (41) https://github.com/python/cpython/issues/125322

   (42) https://github.com/python/cpython/issues/126083

   (43) https://github.com/python/cpython/issues/126068

   (44) https://github.com/python/cpython/issues/125413

   (45) https://github.com/python/cpython/issues/125984

   (46) https://github.com/python/cpython/issues/125926

   (47) https://datatracker.ietf.org/doc/html/rfc3986.html

   (48) https://github.com/python/cpython/issues/125969

   (49) https://github.com/python/cpython/issues/125966

   (50) https://github.com/python/cpython/issues/125789

   (51) https://github.com/python/cpython/issues/126916

   (52) https://github.com/python/cpython/issues/124452

   (53) https://github.com/python/cpython/issues/117941

   (54) https://github.com/python/cpython/issues/125884

   (55) https://github.com/python/cpython/issues/125355

   (56) https://github.com/python/cpython/issues/125767

   (57) https://github.com/python/cpython/issues/124969

   (58) https://github.com/python/cpython/issues/84850

   (59) https://github.com/python/cpython/issues/125666

   (60) https://github.com/python/cpython/issues/125710

   (61) https://github.com/python/cpython/issues/125631

   (62) https://github.com/python/cpython/issues/125378

   (63) https://github.com/python/cpython/issues/125682

   (64) https://github.com/python/cpython/issues/125660

   (65) https://github.com/python/cpython/issues/52551

   (66) https://github.com/python/cpython/issues/125259

   (67) https://github.com/python/cpython/issues/125633

   (68) https://github.com/python/cpython/issues/125614

   (69) https://github.com/python/cpython/issues/125590

   (70) https://github.com/python/cpython/issues/125600

   (71) https://github.com/python/cpython/issues/125542

   (72) https://github.com/python/cpython/issues/125541

   (73) https://github.com/python/cpython/issues/125519

   (74) https://github.com/python/cpython/issues/125451

   (75) https://github.com/python/cpython/issues/125115

   (76) https://github.com/python/cpython/issues/125398

   (77) https://github.com/python/cpython/issues/125245

   (78) https://github.com/python/cpython/issues/52551

   (79) https://github.com/python/cpython/issues/124984

   (80) https://github.com/python/cpython/issues/124651

   (81) https://github.com/python/cpython/issues/124694

   (82) https://peps.python.org/pep-0734/

   (83) https://github.com/python/cpython/issues/58032

   (84) https://github.com/python/cpython/issues/99749

   (85) https://github.com/python/cpython/issues/58956

   (86) https://github.com/python/cpython/issues/124111

   (87) https://github.com/python/cpython/issues/80958

   (88) https://github.com/python/cpython/issues/123370

   (89) https://github.com/python/cpython/issues/89083

   (90) https://datatracker.ietf.org/doc/html/rfc9562.html

   (91) https://github.com/python/cpython/issues/122549

   (92) https://github.com/python/cpython/issues/120754

   (93) https://github.com/python/cpython/issues/121267

   (94) https://github.com/python/cpython/issues/70764

   (95) https://github.com/python/cpython/issues/118289

   (96) https://github.com/python/cpython/issues/119826

   (97) https://github.com/python/cpython/issues/97850

   (98) https://github.com/python/cpython/issues/118986

   (99) https://github.com/python/cpython/issues/116897

   (100) https://github.com/python/cpython/issues/101955

   (101) https://github.com/python/cpython/issues/71936

   (102) https://bugs.python.org/issue?@action=redirect&bpo=46128

   (103) https://github.com/python/cpython/issues/84852


File: python.info,  Node: Documentação<10>,  Next: Núcleo e embutidos<14>,  Prev: Biblioteca<15>,  Up: Python 3 14 0 alpha 2

1.24.15.6 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-60712(3): Inclui o tipo *note object: c72. nas listas de tipos
     documentados.  Alteração por Furkan Onder e Martin Panter.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126622

   (2) https://github.com/python/cpython/issues/125277

   (3) https://github.com/python/cpython/issues/60712


File: python.info,  Node: Núcleo e embutidos<14>,  Next: API C<12>,  Prev: Documentação<10>,  Up: Python 3 14 0 alpha 2

1.24.15.7 Núcleo e embutidos
............................

   - gh-126795(1): Increase the threshold for JIT code warmup.
     Depending on platform and workload, this can result in performance
     gains of 1-9% and memory savings of 3-5%.

   - gh-126341(2): Agora *note ValueError: 2ea. é levantada em vez de
     *note SystemError: 78a. ao tentar iterar sobre um objeto *note
     memoryview: 165. liberado.

   - gh-126688(3): Corrige uma falha ao chamar *note os.fork(): 4af. em
     alguns sistemas operacionais, incluindo SerenityOS.

   - gh-126066(4): Corrige *note importlib: 7b. 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.

   - gh-126222(5): Do not include count of “peek” items in
     ‘_PyUop_num_popped’.  This ensures that the correct number of items
     are popped from the stack when a micro-op exits with an error.

   - gh-126366(6): Fix crash when using ‘yield from’ on an object that
     raises an exception in its ‘__iter__’.

   - gh-126209(7): Fix an issue with ‘skip_file_prefixes’ parameter
     which resulted in an inconsistent behaviour between the C and
     Python implementations of *note warnings.warn(): 1707.  Patch by
     Daehee Kim.

   - gh-126312(8): Corrige travamento durante a coleta de lixo em um
     objeto congelado por *note gc.freeze(): d22. na construção com
     threads livres.

   - gh-103951(9): Relax optimization requirements to allow fast
     attribute access to module subclasses.

   - gh-126072(10): Following gh-126101(11), for *note Objetos código:
     7c7. like lambda, annotation and type alias, we no longer add
     ‘None’ to its *note co_consts: 17ff.

   - gh-126195(12): Improve JIT performance by 1.4% on macOS Apple
     Silicon by using platform-specific memory protection APIs.  Patch
     by Diego Russo.

   - gh-126139(13): Fornece melhor localização de erro ao tentar usar
     uma *note instrução future: fa1. com um recurso futuro
     desconhecido.

   - gh-126072(14): Add a new attribute in *note co_flags: 1833. to
     indicate whether the first item in *note co_consts: 17ff. is the
     docstring.  If a code object has no docstring, ‘None’ will 'NOT' be
     inserted.

   - gh-126076(15): Objetos realocados, como objetos ‘tuple’, ‘bytes’ e
     ‘str’ são rastreados corretamente por *note tracemalloc: 105. e
     seus ganchos associados.  Patch por Pablo Galindo.

   - gh-90370(16): Avoid temporary tuple creation for vararg in argument
     passing with Argument Clinic generated code (if arguments either
     vararg or positional-only).

   - gh-126018(17): Corrige travamento em *note sys.audit(): 186e. ao
     passar uma não string como primeiro argumento e o Python foi
     compilado no modo de depuração.

   - gh-126012(18): The *note memoryview: 165. type now supports
     subscription, making it a *note generic type: 1a1.

   - gh-125837(19): Adds *note LOAD_SMALL_INT: 36b. and *note
     LOAD_CONST_IMMORTAL: 372. instructions.  ‘LOAD_SMALL_INT’ pushes a
     small integer equal to the ‘oparg’ to the stack.
     ‘LOAD_CONST_IMMORTAL’ does the same as ‘LOAD_CONST’ but is more
     efficient for immortal objects.  Removes ‘RETURN_CONST’
     instruction.

   - gh-125942(20): No Android, a configuração ‘errors’ de *note
     sys.stdout: cc0. foi alterada de ‘surrogateescape’ para
     ‘backslashreplace’.

   - gh-125859(21): Corrige uma falha na construção com threads livres
     quando *note gc.get_objects(): 9fa. ou *note gc.get_referrers():
     9fb. é chamado durante uma coleta de lixo em andamento.

   - gh-125868(22): It was possible in 3.14.0a1 only for attribute
     lookup to give the wrong value.  This was due to an incorrect
     specialization in very specific circumstances.  This is fixed in
     3.14.0a2.

   - gh-125498(23): The JIT has been updated to leverage Clang 19’s new
     ‘preserve_none’ attribute, which supports more platforms and is
     more useful than LLVM’s existing ‘ghccc’ calling convention.  This
     also removes the need to manually patch the calling convention in
     LLVM IR, simplifying the JIT compilation process.

   - gh-125703(24): Honra corretamente os ganchos *note tracemalloc:
     105. em caminhos ‘Py_DECREF’ especializados.  Patch por Pablo
     Galindo

   - gh-125593(25): Usa cores para destacar locais de erro no traceback
     do grupo de exceções

   - gh-125017(26): Fix crash on certain accesses to the
     ‘__annotations__’ of *note staticmethod: 450. and *note
     classmethod: 488. objects.

   - gh-125588(27): The Python PEG generator can now use f-strings in
     the grammar actions.  Patch by Pablo Galindo

   - gh-125444(28): Corrige instruções ilegais para arquiteturas Arm
     mais antigas.  Patch por Diego Russo, testes de Ross Burton.

   - gh-118423(29): Add a new ‘INSTRUCTION_SIZE’ macro to the cases
     generator which returns the current instruction size.

   - gh-125038(30): Corrige falha ao iterar sobre uma expressão geradora
     após alterações diretas em ‘gi_frame.f_locals’.  Patch por Mikhail
     Efimov.

   - gh-124855(31): Don’t allow the JIT and perf support to be active at
     the same time.  Patch by Pablo Galindo

   - gh-123714(32): Update JIT compilation to use LLVM 19

   - gh-123930(33): Melhora a mensagem de erro quando um script que faz
     “shadowing” de um módulo da biblioteca padrão faz com que *note
     ImportError: 64f. 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-119793(34): The *note map(): 19f. built-in now has an optional
     keyword-only 'strict' flag like *note zip(): 1a0. to check that all
     the iterables are of equal length.  Patch by Wannes Boeykens.

   - gh-118950(35): 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(36): 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/126795

   (2) https://github.com/python/cpython/issues/126341

   (3) https://github.com/python/cpython/issues/126688

   (4) https://github.com/python/cpython/issues/126066

   (5) https://github.com/python/cpython/issues/126222

   (6) https://github.com/python/cpython/issues/126366

   (7) https://github.com/python/cpython/issues/126209

   (8) https://github.com/python/cpython/issues/126312

   (9) https://github.com/python/cpython/issues/103951

   (10) https://github.com/python/cpython/issues/126072

   (11) https://github.com/python/cpython/issues/126101

   (12) https://github.com/python/cpython/issues/126195

   (13) https://github.com/python/cpython/issues/126139

   (14) https://github.com/python/cpython/issues/126072

   (15) https://github.com/python/cpython/issues/126076

   (16) https://github.com/python/cpython/issues/90370

   (17) https://github.com/python/cpython/issues/126018

   (18) https://github.com/python/cpython/issues/126012

   (19) https://github.com/python/cpython/issues/125837

   (20) https://github.com/python/cpython/issues/125942

   (21) https://github.com/python/cpython/issues/125859

   (22) https://github.com/python/cpython/issues/125868

   (23) https://github.com/python/cpython/issues/125498

   (24) https://github.com/python/cpython/issues/125703

   (25) https://github.com/python/cpython/issues/125593

   (26) https://github.com/python/cpython/issues/125017

   (27) https://github.com/python/cpython/issues/125588

   (28) https://github.com/python/cpython/issues/125444

   (29) https://github.com/python/cpython/issues/118423

   (30) https://github.com/python/cpython/issues/125038

   (31) https://github.com/python/cpython/issues/124855

   (32) https://github.com/python/cpython/issues/123714

   (33) https://github.com/python/cpython/issues/123930

   (34) https://github.com/python/cpython/issues/119793

   (35) https://github.com/python/cpython/issues/118950

   (36) https://github.com/python/cpython/issues/113570


File: python.info,  Node: API C<12>,  Next: Construção<13>,  Prev: Núcleo e embutidos<14>,  Up: Python 3 14 0 alpha 2

1.24.15.8 API C
...............

   - gh-126554(1): Corrige o tratamento de erros em objetos *note
     ctypes.CDLL: bd2. que podem resultar em uma falha em situações
     raras.

   - gh-126061(2): Add *note PyLong_IsPositive(): 398, *note
     PyLong_IsNegative(): 399. and *note PyLong_IsZero(): 39a. for
     checking if a *note PyLongObject: 39b. is positive, negative, or
     zero, respectively.

   - gh-125608(3): Corrige um bug em que os observadores de dicionário
     (por exemplo, *note PyDict_Watch(): 779.) no dicionário de
     atributos de um objeto (*note __dict__: 772.) não eram acionados
     quando os atributos do objeto eram modificados.

   - gh-123619(4): Added the *note
     PyUnstable_Object_EnableDeferredRefcount(): 3c2. function for
     enabling PEP 703(5) deferred reference counting.

   - gh-121654(6): Add *note PyType_Freeze(): 3ac. function to make a
     type immutable.  Patch by Victor Stinner.

   - gh-120026(7): The ‘Py_HUGE_VAL’ macro is *note soft deprecated:
     23c.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126554

   (2) https://github.com/python/cpython/issues/126061

   (3) https://github.com/python/cpython/issues/125608

   (4) https://github.com/python/cpython/issues/123619

   (5) https://peps.python.org/pep-0703/

   (6) https://github.com/python/cpython/issues/121654

   (7) https://github.com/python/cpython/issues/120026


File: python.info,  Node: Construção<13>,  Prev: API C<12>,  Up: Python 3 14 0 alpha 2

1.24.15.9 Construção
....................

   - gh-126691(1): Removed the ‘--with-emscripten-target’ configure
     flag.  We unified the ‘node’ and ‘browser’ options and the same
     build can now be used, independent of target runtime.

   - gh-123877(2): Use ‘wasm32-wasip1’ as the target triple for WASI
     instead of ‘wasm32-wasi’.  The latter will eventually be reclaimed
     for WASI 1.0 while CPython currently only supports WASI preview1.

   - gh-126458(3): Disable SIMD support for HACL under WASI.

   - gh-89640(4): Codifica a ordem de palavras float como little endian
     no WASM.

   - gh-126206(5): ‘make clinic’ now runs Argument Clinic using the
     ‘--force’ option, thus forcefully regenerating generated code.

   - gh-126187(6): Introduced ‘Tools/wasm/emscripten.py’ to simplify
     doing Emscripten builds.

   - gh-124932(7): For cross builds, there is now support for having a
     different install ‘prefix’ than the ‘host_prefix’ used by
     ‘getpath.py’.  This is set to ‘/’ by default for Emscripten, on
     other platforms the default behavior is the same as before.

   - gh-125946(8): The minimum supported Android version is now 7.0 (API
     level 24).

   - gh-125940(9): A construção no Android agora oferece suporte a
     tamanhos de página de 16 KB(10).

   - gh-89640(11): Melhora a detecção da ordem de palavras flutuantes no
     Linux quando as otimizações de tempo de link estiverem habilitadas.

   - gh-124928(12): Emscripten builds now require node >= 18.

   - gh-115382(13): Corrige falhas de compilação cruzada quando o host e
     o SOABIs de destino correspondem.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126691

   (2) https://github.com/python/cpython/issues/123877

   (3) https://github.com/python/cpython/issues/126458

   (4) https://github.com/python/cpython/issues/89640

   (5) https://github.com/python/cpython/issues/126206

   (6) https://github.com/python/cpython/issues/126187

   (7) https://github.com/python/cpython/issues/124932

   (8) https://github.com/python/cpython/issues/125946

   (9) https://github.com/python/cpython/issues/125940

   (10) https://developer.android.com/guide/practices/page-sizes

   (11) https://github.com/python/cpython/issues/89640

   (12) https://github.com/python/cpython/issues/124928

   (13) https://github.com/python/cpython/issues/115382


File: python.info,  Node: Python 3 14 0 alpha 1,  Next: Python 3 13 0 beta 1,  Prev: Python 3 14 0 alpha 2,  Up: Changelog

1.24.16 Python 3.14.0 alpha 1
-----------------------------

'Data de lançamento: 2024-10-15'

* Menu:

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


File: python.info,  Node: macOS<7>,  Next: Windows<11>,  Up: Python 3 14 0 alpha 1

1.24.16.1 macOS
...............

   - gh-124448(1): Atualiza o Tcl/Tk empacotado no instalador do macOS
     para 8.6.15.

   - gh-123797(2): Verifica a disponibilidade do tempo de execução da
     função ‘ptsname_r’ no macOS.

   - gh-123418(3): Construção do instalador do macOS atualizada para
     usar o OpenSSL 3.0.15.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124448

   (2) https://github.com/python/cpython/issues/123797

   (3) https://github.com/python/cpython/issues/123418


File: python.info,  Node: Windows<11>,  Next: Ferramentas/Demos<14>,  Prev: macOS<7>,  Up: Python 3 14 0 alpha 1

1.24.16.2 Windows
.................

   - gh-124487(1): Increases Windows required OS and API level to
     Windows 10.

   - gh-124609(2): Corrige ‘_Py_ThreadId’ para construções do Windows
     usando MinGW. Patch por Tony Roberts.

   - gh-124448(3): Tcl/Tk empacotado atualizado para 8.6.15.

   - gh-124254(4): Garante que binários experimentais de threads livres
     permaneçam instalados durante a atualização.

   - gh-123915(5): Garante que ‘Tools\\msi\\buildrelease.bat’ use
     diretórios diferentes para compilações AMD64 e ARM64.

   - gh-123418(6): Construção do Windows atualizada para usar o OpenSSL
     3.0.15.

   - gh-123476(7): Add support for ‘socket.TCP_QUICKACK’ on Windows
     platforms.

   - gh-122573(8): A construção do Windows do CPython agora requer 3.10
     ou mais recente.

   - gh-100256(9): *note mimetypes: 93. não falha mais quando encontra
     uma chave de registro inacessível.

   - gh-119679(10): Garante que bibliotecas de importação corretas sejam
     incluídas nas instalações do Windows.

   - gh-119690(11): Adiciona suporte a Unicode e corrige eventos de
     auditoria para ‘_winapi.CreateNamedPipe’.

   - gh-111201(12): Adiciona suporte para o novo pyrepl no Windows

   - gh-119070(13): 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(14): 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(15): Evita travamentos em *note mmap: 94. no Windows
     quando a memória mapeada estiver inacessível devido a erros do
     sistema de arquivos ou violações de acesso.

   - gh-79846(16): 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/124487

   (2) https://github.com/python/cpython/issues/124609

   (3) https://github.com/python/cpython/issues/124448

   (4) https://github.com/python/cpython/issues/124254

   (5) https://github.com/python/cpython/issues/123915

   (6) https://github.com/python/cpython/issues/123418

   (7) https://github.com/python/cpython/issues/123476

   (8) https://github.com/python/cpython/issues/122573

   (9) https://github.com/python/cpython/issues/100256

   (10) https://github.com/python/cpython/issues/119679

   (11) https://github.com/python/cpython/issues/119690

   (12) https://github.com/python/cpython/issues/111201

   (13) https://github.com/python/cpython/issues/119070

   (14) https://github.com/python/cpython/issues/117505

   (15) https://github.com/python/cpython/issues/118209

   (16) https://github.com/python/cpython/issues/79846


File: python.info,  Node: Ferramentas/Demos<14>,  Next: Testes<12>,  Prev: Windows<11>,  Up: Python 3 14 0 alpha 1

1.24.16.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<12>,  Next: Segurança<14>,  Prev: Ferramentas/Demos<14>,  Up: Python 3 14 0 alpha 1

1.24.16.4 Testes
................

   - gh-125041(1): Reativa testes ignorados para *note zlib: 139. 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-124378(2): Atualizado ‘test_ttk’ para passar com Tcl/Tk 8.6.15.

   - gh-124213(3): Detect whether the test suite is running inside a
     systemd-nspawn container with ‘--suppress-sync=true’ option, and
     skip the ‘test_os’ and ‘test_mmap’ tests that are failing in this
     scenario.

   - gh-124190(4): Add capability to ignore entire files or directories
     in check warning CI tool

   - gh-121921(5): Update ‘Lib/test/crashers/bogus_code_obj.py’ so that
     it crashes properly again.

   - gh-112301(6): Add tooling to check for changes in compiler
     warnings.  Patch by Nate Ohlson.

   - gh-59022(7): Adiciona testes para *note pkgutil.extend_path():
     1876.  Patch por Andreas Stocker.

   - gh-99242(8): *note os.getloadavg(): 1877. pode levantar *note
     OSError: 2bf. 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.

   - gh-121084(9): 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(10): Adiciona um teste para *note
     readline.set_history_length(): 1878.  Observe que este teste pode
     falhar em bibliotecas readline.

   - gh-121200(11): 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(12): 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.

   - gh-120801(13): Cleaned up fixtures for importlib.metadata tests and
     consolidated behavior with ‘test.support.os_helper’.

   - gh-119727(14): Adiciona a opção de linha de comando
     ‘--single-process’ ao executor de testes Python (regrtest).  Patch
     por Victor Stinner.

   - gh-119273(15): Python test runner no longer runs tests using TTY
     (ex: test_ioctl) in a process group (using ‘setsid()’).
     Previously, tests using TTY were skipped.  Patch by Victor Stinner.

   - gh-119050(16): Executor de teste regrtest: Adiciona suporte XML ao
     verificador de reflexos (opção -R). Patch de Victor Stinner.

   - gh-101525(17): Ignora ‘test_gdb’ se o binário for realocado pelo
     BOLT. Patch por Donghee Na.

   - gh-107562(18): Test certificates have been updated to expire far in
     the future.  This allows testing Y2038 with system time set to
     after that, so that actual Y2038 issues can be exposed, and not
     masked by expired certificate errors.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125041

   (2) https://github.com/python/cpython/issues/124378

   (3) https://github.com/python/cpython/issues/124213

   (4) https://github.com/python/cpython/issues/124190

   (5) https://github.com/python/cpython/issues/121921

   (6) https://github.com/python/cpython/issues/112301

   (7) https://github.com/python/cpython/issues/59022

   (8) https://github.com/python/cpython/issues/99242

   (9) https://github.com/python/cpython/issues/121084

   (10) https://github.com/python/cpython/issues/121160

   (11) https://github.com/python/cpython/issues/121200

   (12) https://github.com/python/cpython/issues/121188

   (13) https://github.com/python/cpython/issues/120801

   (14) https://github.com/python/cpython/issues/119727

   (15) https://github.com/python/cpython/issues/119273

   (16) https://github.com/python/cpython/issues/119050

   (17) https://github.com/python/cpython/issues/101525

   (18) https://github.com/python/cpython/issues/107562


File: python.info,  Node: Segurança<14>,  Next: Biblioteca<16>,  Prev: Testes<12>,  Up: Python 3 14 0 alpha 1

1.24.16.5 Segurança
...................

   - gh-125140(1): Remove o diretório atual de ‘sys.path’ ao usar
     PyREPL.

   - gh-123678(2): Atualiza o libexpat para 2.6.3

   - gh-112301(3): Enable compiler options that warn of potential
     security vulnerabilities.

   - gh-122792(4): 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’.

   - gh-112301(5): Add ability to ignore warnings per file with warning
     count in warning checking tooling.  Patch by Nate Ohlson.

   - gh-112301(6): Add macOS warning tracking to warning check tooling.
     Patch by Nate Ohlson.

   - gh-122133(7): 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(8): 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’.

   - gh-112301(9): Enable runtime protections for glibc to abort
     execution when unsafe behavior is encountered, for all platforms
     except Windows.

   - gh-121285(10): Remove o backtracking da análise de cabeçalho do
     arquivo tar para ‘hdrcharset’, PAX e cabeçalhos esparsos GNU.

   - gh-112301(11): Add default compiler options to improve security.
     Enable -Wimplicit-fallthrough, -fstack-protector-strong,
     -Wtrampolines.

   - gh-118773(12): Corrige a criação de ACLs em *note os.mkdir(): 525.
     no Windows para funcionar corretamente em máquinas que não falam
     inglês.

   - gh-118486(13): *note os.mkdir(): 525. no Windows agora aceita o
     'modo' de ‘0o700’ para restringir o novo diretório ao usuário
     atual.  Isso corrige CVE 2024-4030(14) afetando *note
     tempfile.mkdtemp(): 527. 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/125140

   (2) https://github.com/python/cpython/issues/123678

   (3) https://github.com/python/cpython/issues/112301

   (4) https://github.com/python/cpython/issues/122792

   (5) https://github.com/python/cpython/issues/112301

   (6) https://github.com/python/cpython/issues/112301

   (7) https://github.com/python/cpython/issues/122133

   (8) https://github.com/python/cpython/issues/121957

   (9) https://github.com/python/cpython/issues/112301

   (10) https://github.com/python/cpython/issues/121285

   (11) https://github.com/python/cpython/issues/112301

   (12) https://github.com/python/cpython/issues/118773

   (13) https://github.com/python/cpython/issues/118486

   (14) https://www.cve.org/CVERecord?id=CVE-2024-4030


File: python.info,  Node: Biblioteca<16>,  Next: IDLE<6>,  Prev: Segurança<14>,  Up: Python 3 14 0 alpha 1

1.24.16.6 Biblioteca
....................

   - gh-125422(1): Corrige o bug onde *note pdb: aa. e *note bdb: 10.
     podem entrar no quadro do chamador inferior.

   - gh-100141(2): Corrige o bug onde *note pdb: aa. ficará preso em um
     laço infinito ao depurar um arquivo vazio.

   - gh-53203(3): Corrige *note time.strptime(): 161e. 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-125206(4): Workaround for old libffi versions is added.  Module
     ctypes supports double complex only with libffi >= 3.3.0.  Patch by
     Mikhail Efimov.

   - gh-89967(5): Make *note WeakKeyDictionary: 187b. and *note
     WeakValueDictionary: 187c. safe against concurrent mutations from
     other threads.  Patch by Kumar Aditya.

   - gh-125260(6): The *note gzip.compress(): 843. 'mtime' parameter now
     defaults to 0 for reproducible output.  Patch by Bernhard M.
     Wiedemann and Adam Turner.

   - gh-125243(7): Corrige corrida de dados ao criar objetos *note
     zoneinfo.ZoneInfo: ad2. na construção com threads livres.

   - gh-125254(8): Corrige um bug em que ArgumentError inclui a opção
     ambígua incorreta em *note argparse: 7.

   - gh-125235(9): Mantém os caminhos TCL *note tkinter: f6. em venv
     apontando para a instalação base no Windows.

   - gh-61011(10): Corrige herança de grupos mutuamente exclusivos
     aninhados do analisador pai em *note argparse.ArgumentParser: 1bd.
     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-125118(11): Não copia valores arbitrários para _Bool no módulo
     *note struct: db.

   - gh-125069(12): Corrige um problema em que fornecer um objeto *note
     pathlib.PurePath: 6c2. como um argumento inicializador para um
     segundo objeto *note PurePath: 6c2. com um *note parser: 530.
     diferente resultava em argumentos para o inicializador do objeto
     anterior sendo unidos pelo analisador do objeto posterior.

   - gh-125096(13): Se a variável de ambiente *note PYTHON_BASIC_REPL:
     1b6. estiver definida, o módulo *note site: cc. não importa mais o
     módulo ‘_pyrepl’.  Além disso, o módulo *note site: cc. agora
     respeita as opções de linha de comando *note -E: b4c. e *note -I:
     b4d.: ignore *note PYTHON_BASIC_REPL: 1b6. neste caso.  Patch por
     Victor Stinner.

   - gh-124969(14): Fix ‘locale.nl_langinfo(locale.ALT_DIGITS)’.  Now it
     returns a tuple of up to 100 strings (an empty tuple on most
     locales).  Previously it returned the first item of that tuple or
     an empty string.

   - gh-124960(15): Corrige suporte para o sinalizador future
     ‘barry_as_FLUFL’ no novo REPL.

   - gh-69998(16): Fix *note locale.nl_langinfo(): 451. in case when
     different categories have different locales.  The function now sets
     temporarily the ‘LC_CTYPE’ locale in some cases.  This temporary
     change affects other threads.

   - gh-124958(17): Corrige refcycles em exceções levantadas de *note
     asyncio.TaskGroup: 4cb. e a implementação python de *note
     asyncio.Future: dba.

   - gh-53203(18): Corrige *note time.strptime(): 161e. 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-123961(19): Convert *note curses: 2f. to multi-phase
     initialization ( PEP 489(20)), thereby fixing reference leaks at
     interpreter shutdown.  Patch by Bénédikt Tran.

   - gh-124944(21): Add ‘SO_ORIGINAL_DST’ to the *note socket: d1.
     module.

   - gh-117151(22): The default buffer size used by *note
     shutil.copyfileobj(): c46. has been increased from 64k to 256k on
     non-Windows platforms.  It was already larger on Windows.

   - gh-90102(23): Skip the ‘isatty’ system call during open() when the
     file is known to not be a character device.  This provides a slight
     performance improvement when reading whole files.

   - gh-124917(24): Permite chamar *note os.path.exists(): bf9. e *note
     os.path.lexists(): bfa. com argumentos de palavra-chave no Windows.
     Corrige uma regressão em 3.13.0.

   - gh-65865(25): *note argparse: 7. now raises early error for invalid
     ‘help’ arguments to *note add_argument(): 4b6, *note
     add_subparsers(): e05. and ‘add_parser()’.

   - gh-124653(26): Corrige a detecção da API de fila mínima necessária
     pelo módulo *note logging: 8b.  Patch por Bénédikt Tran.

   - gh-91818(27): The CLI of many modules (*note ast: 9, *note
     ensurepip: 59, *note json: 86, *note pdb: aa, *note sqlite3: d4,
     *note tokenize: 101, *note venv: 117.) now uses the actual
     executable name instead of simply “python” to display in the usage
     message.

   - gh-124858(28): Corrige ciclos de referência deixados em tracebacks
     em *note asyncio.open_connection(): d02. quando usado com
     ‘happy_eyeballs_delay’

   - gh-124390(29): Fixed *note AssertionError: 8ad. when using
     ‘asyncio.staggered.staggered_race()’ with *note
     asyncio.eager_task_factory: 697.

   - gh-85935(30): *note argparse.ArgumentParser.add_argument(): 4b6.
     now raises an exception if an *note action: 187d. that does not
     consume arguments (like ‘store_const’ or ‘store_true’) or explicit
     ‘nargs=0’ are specified for positional arguments.

   - gh-124835(31): Make *note tomllib.loads(): 187e. raise *note
     TypeError: 198. not *note AttributeError: 5e4. on bad input types
     that do not have the ‘replace’ attribute.  Improve error message
     when *note bytes: 192. is received.

   - gh-124693(32): Fix a bug where *note argparse: 7. doesn’t recognize
     negative complex numbers or negative numbers using scientific
     notation.

   - gh-124787(33): Fix *note typing.TypeAliasType: 2ad. with incorrect
     ‘type_params’ argument.  Now it raises a *note TypeError: 198. when
     a type parameter without a default follows one with a default, and
     when an entry in the ‘type_params’ tuple is not a type parameter
     object.

   - gh-66436(34): Improved *note prog: 1bc. default value for *note
     argparse.ArgumentParser: 1bd.  It will now include the name of the
     Python executable along with the module or package name, or the
     path to a directory, ZIP file, or directory within a ZIP file if
     the code was run that way.

   - gh-116850(35): Corrige *note argparse: 7. para espaços de nomes com
     dict não diretamente gravável (por exemplo, classes).

   - gh-101552(36): Add an 'annoation_format' parameter to *note
     inspect.signature(): 22e.  Add an 'quote_annotation_strings'
     parameter to *note inspect.Signature.format(): 230.  Use the new
     functionality to improve the display of annotations in signatures
     in *note pydoc: ba.  Patch by Jelle Zijlstra.

   - gh-58573(37): Corrige conflitos entre opções longas abreviadas no
     analisador pai e subanalisadores em *note argparse: 7.

   - gh-124594(38): Todos os prompts REPL *note asyncio: b. são
     executados no mesmo *note context: 177.  Contribuição de Bartosz
     Sławecki.

   - gh-61181(39): Corrige suporte de *note choices: 187f. com valor de
     string em *note argparse: 7.  Substrings da string especificada não
     são mais considerados valores válidos.

   - gh-116750(40): Provide *note sys.monitoring.clear_tool_id(): 1880.
     to unregister all events and callbacks set by the tool.

   - gh-124552(41): Improve the accuracy of *note bdb: 10.’s check for
     the possibility of breakpoint in a frame.  This makes it possible
     to disable unnecessary events in functions.

   - gh-124538(42): Corrige falha ao usar *note gc.get_referents(): 9fc.
     em um objeto cápsula.

   - gh-80259(43): Corrige suporte de *note argparse: 7. de argumentos
     posicionais com ‘nargs='?'’, ‘default=argparse.SUPPRESS’ e ‘type’
     especificado.

   - gh-120378(44): Corrige uma falha relacionada a um estouro de
     inteiro em *note curses.resizeterm(): 1881. e *note
     curses.resize_term(): 1882.

   - gh-124498(45): Corrige *note typing.TypeAliasType: 2ad. para não
     ser genérico, quando ‘type_params’ é uma tupla vazia.

   - gh-53834(46): Fix support of arguments with *note choices: 187f. in
     *note argparse: 7.  Positional arguments with *note nargs: 1883.
     equal to ‘'?'’ or ‘'*'’ no longer check *note default: 1884.
     against ‘choices’.  Optional arguments with ‘nargs’ equal to ‘'?'’
     no longer check *note const: 1885. against ‘choices’.

   - gh-123884(47): 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-123017(48): Devido a resultados não confiáveis em alguns
     dispositivos, *note time.strftime(): 13e5. não aceita mais anos
     negativos no Android.

   - gh-123014(49): *note os.pidfd_open(): 699. e *note
     signal.pidfd_send_signal(): b1b. 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-124176(50): Add support for *note dataclasses.dataclass(): 4db.
     in *note unittest.mock.create_autospec(): 1886.  Now
     ‘create_autospec’ will check for potential dataclasses and use
     *note dataclasses.fields(): 1887. function to retrieve the spec
     information.

   - gh-124345(51): *note argparse: 7. supports abbreviated single-dash
     long options separated by ‘=’ from its value.

   - gh-124400(52): Fixed a *note pdb: aa. bug where ‘until’ has no
     effect when it appears in a ‘commands’ sequence.  Also avoid
     printing the frame information at a breakpoint that has a command
     list containing a command that resumes execution.

   - gh-90562(53): Modify dataclasses to support zero-argument super()
     when ‘slots=True’ is specified.  This works by modifying all
     references to ‘__class__’ to point to the newly created class.

   - gh-104860(54): Corrigido a falta de permissão de abreviação de
     opções longas de traço simples em *note argparse: 7. com
     ‘allow_abbrev=False’.

   - gh-63143(55): Corrigida a análise de argumentos mutuamente
     exclusivos em *note argparse: 7.  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(56): Argumentos posicionais com *note nargs: 1883. 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(57): Corrige análise de argumento posicional com *note
     nargs: 1883. igual a ‘'?'’ ou ‘'*'’ se for precedido por uma opção
     e outro argumento posicional.

   - gh-100980(58): The *note _fields_: 1888. attribute of *note
     ctypes.Structure: 1e4. and *note Union: 1e5. is no longer set if
     the setattr operation raises an error.

   - gh-53780(59): *note argparse: 7. agora ignora o primeiro ‘"--"’
     (traço duplo) entre uma opção e um comando.

   - gh-124217(60): Adicionar bloco IPv6 reservado do RFC 9637
     ‘3fff::/20’ no módulo *note ipaddress: 84.

   - gh-111513(61): Improve the error message that may be raised by
     *note datetime.date.fromtimestamp(): dc1.

   - gh-124248(62): Corrige possível falha ao usar *note struct: db.
     para processar campos ‘Pascal string’ de largura zero (‘0p’).

   - gh-81691(63): Corrige manipulação de múltiplos ‘"--"’ (traços
     duplos) em *note argparse: 7.  Apenas o primeiro foi removido,
     todos os subsequentes agora são tomados literalmente.

   - gh-87041(64): Corrige um bug em *note argparse: 7. onde a ajuda de
     argumento de sub-analisador longa é indentada incorretamente.

   - gh-84559(65): The default *note multiprocessing: 98. start method
     on Linux and other POSIX systems has been changed away from often
     unsafe ‘"fork"’ to ‘"forkserver"’ (when the platform supports
     sending file handles over pipes as most do) or ‘"spawn"’.  Mac and
     Windows are unchanged as they already default to ‘"spawn"’.

   - gh-124212(66): Corrige variável inválida em *note venv: 117.
     manipulação de link simbólico com falha no Windows

   - gh-124171(67): 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-123978(68): Remove *note time.thread_time(): b26. e *note
     time.thread_time_ns(): d7e. quebrados no NetBSD.

   - gh-123934(69): Fix *note unittest.mock.MagicMock: 1085. resetting
     magic methods return values after ‘.reset_mock(return_value=True)’
     was called.

   - gh-124016(70): Update *note unicodedata: 10b. database to Unicode
     16.0.0.

   - gh-123968(71): Corrige a interface de linha de comando para o
     módulo *note random: bd. para selecionar floats entre 0 e N, não 1
     e N.

   - gh-123945(72): Fix a bug where *note argparse: 7. doesn’t recognize
     negative numbers with underscores

   - gh-123935(73): Corrige detecção de slots pai para dataclasses que
     herdam de classes com ‘__dictoffset__’.

   - gh-123892(74): Adicionar ‘"_wmi"’ a *note sys.stdlib_module_names:
     a38.  Patch por Victor Stinner.

   - gh-84808(75): Fix error handling in *note socket: f95. method *note
     connect_ex(): 1727. on platforms where ‘errno’ can be negative.

   - gh-123756(76): Added a new argument ‘mode’ to *note pdb.Pdb: 272.
     Only allow *note pdb: aa. from command line to use ‘restart’
     command.

   - gh-122765(77): Corrige erros de aspas desbalanceadas que ocorrem
     quando activate.csh em *note venv: 117. era carregado com um prompt
     personalizado contendo aspas desemparelhadas ou novas linhas.

   - gh-123657(78): Corrige o travamento e o vazamento de memória em
     *note decimal.getcontext(): 1889.  Ele travava ao usar um contexto
     local de thread por ‘--with-decimal-contextvar=no’.

   - gh-123339(79): Corrige *note inspect.getsource(): 174c. para
     classes nos módulos *note collections.abc: 1f. e *note decimal: 3a.
     (para implementação Python pura).  *note inspect.getcomments():
     188a. agora levanta OSError em vez de IndexError se o valor
     ‘__firstlineno__’ para uma classe estiver fora dos limites.

   - gh-123374(80): Remove check for redefined memo entry in *note
     pickletools.dis(): eb2.

   - gh-123504(81): Fixed reference leak in the finalization of *note
     tkinter: f6.

   - gh-123430(82): Pages generated by the *note http.server: 76. module
     allow the browser to apply its default dark mode.

   - gh-123446(83): Fix empty function name in *note TypeError: 198.
     when *note csv.reader(): 6a3, *note csv.writer(): 6a4, or *note
     csv.register_dialect(): 188b. are used without the required args.

   - gh-123448(84): Corrigido vazamento de memória de *note
     typing.NoDefault: 562. movendo-o para o vetor de tipos estáticos.

   - gh-123409(85): Corrige a saída de *note
     ipaddress.IPv6Address.reverse_pointer: 188c. de acordo com RFC
     3596, §2.5(86).  Patch por Bénédikt Tran.

   - gh-123089(87): Make *note weakref.WeakSet: 7ea. safe against
     concurrent mutations while it is being iterated.  Patch by Kumar
     Aditya.

   - gh-123363(88): Show string value of *note CONTAINS_OP: 188d. oparg
     in *note dis: 3c. output.  Patch by Alexandr153.

   - gh-123341(89): Add *note __class_getitem__(): 938. to
     ‘tkinter.Event’ for type subscript support at runtime.  Patch by
     Adonis Rakateli.

   - gh-123340(90): Show string value of *note IS_OP: 188e. oparg in
     *note dis: 3c. output.

   - gh-119518(91): Speed up normalization of *note pathlib.PurePath:
     6c2. and *note Path: 265. objects by not interning string parts.

   - gh-123270(92): Aplicada uma correção mais cirúrgica para payloads
     malformados em *note zipfile.Path: 8cd. causando loops infinitos
     (gh-122905(93)) sem quebrar o conteúdo usando caracteres legítimos.

   - gh-73991(94): Add *note pathlib.Path.copy_into(): 267. and *note
     move_into(): 269, which copy and move files and directories into
     'existing' directories.

   - gh-123228(95): Corrige tipo de retorno para
     ‘_pyrepl.readline._ReadlineWrapper.get_line_buffer()’ para ser
     *note str(): 169.  Patch por Sergey B Kirpichev.

   - gh-123240(96): Levanta eventos de auditoria para *note input():
     14d4. no novo REPL.

   - gh-76960(97): Fix *note urllib.parse.urljoin(): 108c. and *note
     urllib.parse.urldefrag(): 1443. for URIs containing empty
     components.  For example, ‘urljoin()’ with relative reference “?”
     now sets empty query and removes fragment.  Preserve empty
     components (authority, params, query, fragment) in ‘urljoin()’.
     Preserve empty components (authority, params, query) in
     ‘urldefrag()’.

   - gh-116810(98): Resolve um vazamento de memória introduzido no *note
     ssl: d5. do CPython 3.10 quando a propriedade *note
     ssl.SSLSocket.session: 188f. 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-123243(99): Corrige vazamento de memória em ‘_decimal’.

   - gh-122546(100): Usar consistentemente o mesmo nome de arquivo para
     diferentes exceções no novo repl.  Patch por Sergey B Kirpichev.

   - gh-123213(101): *note xml.etree.ElementTree.Element.extend(): 13cf.
     and *note Element: 360. assignment no longer hide the internal
     exception if an erroneous generator is passed.  Patch by Bar Harel.

   - gh-85110(102): Preserva caminho relativo em URL sem netloc em *note
     urllib.parse.urlunsplit(): 1890. e *note urllib.parse.urlunparse():
     1891.

   - gh-123165(103): Add support for rendering *note Positions: 1892. in
     *note dis: 3c.

   - gh-122909(104): In urllib.request when URLError is raised opening
     an ftp URL, the exception argument is now consistently a string.
     Earlier versions passed either a string or an ftplib exception
     instance as the argument to URLError.

   - gh-123084(105): Deprecate ‘shutil.ExecError’, which hasn’t been
     raised by any *note shutil: ca. function since Python 3.4.  It’s
     now an alias for *note RuntimeError: 243.

   - gh-123085(106): In a bare call to *note
     importlib.resources.files(): 6ab, ensure the caller’s frame is
     properly detected when ‘importlib.resources’ is itself available as
     a compiled module only (no source).

   - gh-123067(107): Corrige complexidade quadrática na análise de
     valores de cookies entre aspas ‘"’ com contrabarras por *note
     http.cookies: 75.

   - gh-123049(108): Add support for *note UNNAMED_SECTION: 1893. in
     *note configparser.ConfigParser.add_section(): 1469.

   - gh-121735(109): 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-122981(110): Corrige *note inspect.getsource(): 174c. para
     classes geradas com classes base Python (por exemplo, enums).

   - gh-122903(111): ‘zipfile.Path.glob’ agora corresponde corretamente
     aos diretórios em vez de omiti-los silenciosamente.

   - gh-122905(112): Objetos *note zipfile.Path: 8cd. agora sanitizam
     nomes do arquivo zip.

   - gh-122873(113): Enable *note json: 86. module to work as a script
     using the *note -m: 23b. switch: ‘python -m json’.  See the *note
     JSON command-line interface: 23d. documentation.  Patch by Trey
     Hunner.

   - gh-122858(114): Deprecate ‘asyncio.iscoroutinefunction()’ in favor
     of *note inspect.iscoroutinefunction(): 30b.

   - gh-116263(115): *note logging.handlers.RotatingFileHandler: 1894.
     não substitui mais arquivos de log vazios.

   - gh-105376(116): Restaura o método descontinuado ‘warn()’ do *note
     logging: 8b.  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-122311(117): Improve errors in the *note pickle: ab. module.
     *note PicklingError: 1895. is now raised more often instead of
     *note UnicodeEncodeError: 87c, *note ValueError: 2ea. and *note
     AttributeError: 5e4, and the original exception is chained to it.
     Improve and unify error messages in Python and C implementations.

   - gh-122744(118): Sobe a versão do pip empacotado em ensurepip para a
     versão 24.2.

   - gh-118761(119): Improve import time of *note pprint: b3. by around
     seven times.  Patch by Hugo van Kemenade.

   - gh-118974(120): Add ‘decorator’ parameter to *note
     dataclasses.make_dataclass(): 17c7. to customize the functional
     creation of dataclasses.

   - gh-118814(121): Corrige o construtor *note typing.TypeVar: 480.
     quando o nome for passado como argumento nomeado.

   - gh-122637(122): Adjust ‘cmath.tanh(nanj)’ and ‘cmath.tanh(infj)’
     for recent C standards.

   - gh-122478(123): Remove internal frames from tracebacks shown in
     *note code.InteractiveInterpreter: 1896. with non-default *note
     sys.excepthook(): a02.  Save correct tracebacks in *note
     sys.last_traceback: 6dd. and update ‘__traceback__’ attribute of
     *note sys.last_value: 6dc. and *note sys.last_exc: 6da.

   - gh-116622(124): No Android, as constantes ‘FICLONE’ e
     ‘FICLONERANGE’ não são mais expostas por *note fcntl: 5d, pois
     esses ioctls são bloqueados pelo SELinux.

   - gh-82378(125): Garante que o novo *note REPL: 48b. interprete *note
     sys.tracebacklimit: 1897. da mesma forma que o REPL clássico.

   - gh-122334(126): Corrige o travamento ao importar *note ssl: d5.
     após a reinicialização do interpretador principal.

   - gh-122459(127): Optimize *note pickling: ab. by name objects
     without the ‘__module__’ attribute.

   - gh-87320(128): Em *note code.InteractiveInterpreter: 1896, trata
     exceções causadas pela chamada de um *note sys.excepthook(): a02.
     não padrão.  Antes, a exceção era apresentada para o chamador,
     encerrando o *note REPL: 48b.

   - gh-122272(129): On some platforms such as Linux, year with century
     was not 0-padded when formatted by *note strftime(): e82. with
     C99-specific specifiers ‘'%C'’ or ‘'%F'’.  The 0-padding behavior
     is now guaranteed when the format specifiers ‘'%C'’ and ‘'%F'’ are
     supported by the C library.  Patch by Ben Hsing

   - gh-122400(130): Lida com *note ValueError: 2ea.s levantados por
     *note os.stat(): 26c. em *note filecmp.dircmp: 1136. e *note
     filecmp.cmpfiles(): 1898.  Patch por Bénédikt Tran.

   - gh-122311(131): Corrige algumas mensagens de erro em *note pickle:
     ab.

   - gh-121650(132): Cabeçalhos *note email: 3f. com quebras de linha
     incorporadas agora são citados na saída.  O *note generator: 44.
     agora se recusará a serializar (escrever) cabeçalhos que são
     dobrados ou delimitados de forma insegura; consulte *note
     verify_generated_headers: 4ec.  (Contribuição de Bas Bloemsaat e
     Petr Viktorin em gh-121650(133).)

   - gh-122332(134): Corrigido segfault com *note
     asyncio.Task.get_coro(): bc5. ao usar uma fábrica de tarefas
     ansiosa.

   - gh-105733(135): a função *note ctypes.ARRAY(): 597. agora está
     *note suavemente descontinuada: 23c.: ela não emite mais avisos de
     descontinuação e não está programada para remoção.

   - gh-122213(136): Add notes for pickle serialization errors that
     allow to identify the source of the error.

   - gh-119180(137): As part of PEP 749(138), add the following
     attributes for customizing evaluation of annotation scopes:

        * ‘evaluate_value’ on *note typing.TypeAliasType: 2ad.

        * ‘evaluate_bound’, ‘evaluate_constraints’, and
          ‘evaluate_default’ on *note typing.TypeVar: 480.

        * ‘evaluate_default’ on *note typing.ParamSpec: 481.

        * ‘evaluate_default’ on *note typing.TypeVarTuple: 482.

   - gh-119180(139): Fix handling of classes with custom metaclasses in
     ‘annotationlib.get_annotations’.

   - gh-122170(140): Lida com *note ValueError: 2ea.s levantadas por
     *note os.stat(): 26c. em *note linecache: 89.  Patch por Bénédikt
     Tran.

   - gh-122163(141): Add notes for JSON serialization errors that allow
     to identify the source of the error.

   - gh-122129(142): Improve support of method descriptors and wrappers
     in the help title.

   - gh-122145(143): 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-121723(144): Faz *note logging.config.dictConfig(): 13ac.
     aceitar qualquer objeto que implemente a API pública Queue.  Veja a
     seção *note configuração de fila: 1899. para detalhes.  Patch por
     Bénédikt Tran.

   - gh-82951(145): 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-120754(146): ‘Pathlib.read_bytes’ no longer opens the file in
     Python’s buffered I/O mode.  This reduces overheads as the code
     reads a file in whole leading to a modest speedup.

   - gh-113785(147): *note csv: 2d. agora analisa corretamente campos
     numéricos (quando usados com *note csv.QUOTE_NONNUMERIC: 189a. ou
     *note csv.QUOTE_STRINGS: 6a2.) que começam com um caractere de
     escape.

   - gh-122088(148): *note @warnings.deprecated: 483. now copies the
     coroutine status of functions and methods so that *note
     inspect.iscoroutinefunction(): 30b. returns the correct result.

   - gh-122081(149): Corrige uma falha na função opcional
     ‘decimal.IEEEContext()’ disponível por meio do sinalizador de
     configuração ‘EXTRA_FUNCTIONALITY’.

   - gh-73991(150): Add *note pathlib.Path.move(): 268, which moves a
     file or directory tree.

   - gh-121268(151): Remove workarounds for non-IEEE 754 systems in
     *note cmath: 19.

   - gh-119698(152): Due to the lack of interest for *note
     symtable.Class.get_methods(): 31b, the method is marked as
     deprecated and will be removed in Python 3.16.  Patch by Bénédikt
     Tran.

   - gh-121889(153): Adjusts ‘cmath.acosh(complex('0+nanj'))’ for recent
     C standards.

   - gh-121804(154): Mostra corretamente os locais de erro quando *note
     SyntaxError: 18e. é levantada em um novo repl.  Patch por Sergey B
     Kirpichev.

   - gh-121797(155): Add alternative *note Fraction: 212. constructor
     *note Fraction.from_number(): 213.

   - gh-121798(156): Add alternative *note Decimal: 1fd. constructor
     *note Decimal.from_number(): 1fc.

   - gh-120930(157): Corrigido um bug introduzido por gh-92081(158) que
     adicionava um espaço extra incorreto para palavras codificadas
     ocorrendo em cabeçalhos encapsulados.

   - gh-57141(159): O argumento 'shallow' para *note filecmp.dircmp:
     1136. (novo no Python 3.13) agora é somente-nomeado.

   - gh-121245(160): 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-121249(161): Support the float complex and double complex C
     types in the *note struct: db. module if the compiler has C11
     complex arithmetic.  Patch by Sergey B Kirpichev.

   - gh-121486(162): *note math: 92. functions *note isqrt(): bee, *note
     log(): 16ae, *note log2(): 12d7. and *note log10(): 189b. now
     support integers larger than ‘2**2**32’ on 32-bit platforms.

   - gh-121474(163): Corrigida a verificação de sanidade ausente para o
     argumento ‘parties’ no construtor *note threading.Barrier: 13df.
     Patch por Clinton Christian (pygeek).

   - gh-121450(164): Hard-coded breakpoints (*note breakpoint(): 270.
     and *note pdb.set_trace(): 271.) now reuse the most recent ‘Pdb’
     instance that calls ‘Pdb.set_trace()’, instead of creating a new
     one each time.  As a result, all the instance specific data like
     ‘display’ and ‘commands’ are preserved across Hard-coded
     breakpoints.

   - gh-119169(165): Slightly speed up *note os.walk(): 6c5. by
     simplifying exception handling.

   - gh-121423(166): Improve import time of *note socket: d1. by lazy
     importing modules and writing ‘socket.errorTab’ as a constant.

   - gh-59110(167): *note zipimport: 138. supports now namespace
     packages when no directory entry exists.

   - gh-119004(168): Corrige uma falha em *note OrderedDict.__eq__:
     189c. quando operandos são mutados durante a verificação.  Patch
     por Bénédikt Tran.

   - gh-121313(169): Limit the reading size in the *note
     multiprocessing.connection.Connection: 12dc. class to 64 KiB to
     prevent memory overallocation and unnecessary memory management
     system calls.

   - gh-121332(170): Corrige o construtor de nós *note ast: 9. com
     ‘_attributes’ personalizados.  Anteriormente, passar atributos
     personalizados levantaria *note DeprecationWarning: 1a3.  Passar
     argumentos para o construtor que não estão em ‘_fields’ ou
     ‘_attributes’ continua descontinuado.  Patch por Jelle Zijlstra.

   - gh-121245(171): Corrige um bug no tratamento do histórico de
     comandos do novo *note REPL: 48b. que fazia com que o arquivo de
     histórico fosse apagado na saída do REPL.

   - gh-121210(172): Handle AST nodes with missing runtime fields or
     attributes in *note ast.compare(): 1bf.  Patch by Bénédikt Tran.

   - gh-121163(173): Add support for ‘all’ as an valid ‘action’ for
     *note warnings.simplefilter(): 8c5. and *note
     warnings.filterwarnings(): 1697.

   - gh-121151(174): Corrige o encapsulamento de texto de uso longo de
     argumentos dentro de um grupo mutuamente exclusivo em *note
     argparse: 7.

   - gh-121141(175): Add support for *note copy.replace(): 1c0. to AST
     nodes.  Patch by Bénédikt Tran.

   - gh-87744(176): Corrige a corrida waitpid ao chamar *note
     send_signal(): 189d. em asyncio.  Patch por Kumar Aditya.

   - gh-121027(177): Adiciona um aviso futuro em
     ‘functools.partial.__get__()’.  Em versões futuras do Python, *note
     functools.partial: 216. será um descritor de método.

   - gh-121027(178): Make the *note functools.partial: 216. object a
     method descriptor.

   - gh-117784(179): CPython now detects whether its linked TLS library
     supports TLSv1.3 post-handshake authentication and disables that
     feature if support is lacking.

   - gh-121025(180): Melhora o *note __repr__(): 824. de *note
     functools.partialmethod: 217.  Patch por Bénédikt Tran.

   - gh-121018(181): Fixed issues where
     ‘argparse.ArgumentParser.parse_args()’ did not honor
     ‘exit_on_error=False’.  Based on patch by Ben Hsing.

   - gh-119614(182): Corrige truncamento de strings com caracteres nulos
     incorporados em algumas operações internas em *note tkinter: f6.

   - gh-120910(183): Ao ler arquivos instalados de um egg, usa
     ‘relative_to(walk_up=True)’ para honrar arquivos instalados fora da
     raiz da instalação.

   - gh-61103(184): Support float complex, double complex and long
     double complex C types in *note ctypes: 2e. as *note
     c_float_complex: 1ec, *note c_double_complex: 1ed. and *note
     c_longdouble_complex: 1ee. if the compiler has C11 complex
     arithmetic.  Patch by Sergey B Kirpichev.

   - gh-120888(185): Atualiza pip wheel empacotado com ensurepip (pip
     24.1.1)

   - gh-101830(186): Acessar a representação de string do objeto *note
     tkinter: f6. não converte mais o objeto Tcl subjacente em uma
     string no Windows.

   - gh-120678(187): 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-120811(188): Corrige possível vazamento de memória em *note
     contextvars.Context.run(): 189e.

   - gh-120782(189): Corrigidas referências erradas dos tipos *note
     datetime: 34. após recarregar o módulo.

   - gh-120713(190): *note datetime.datetime.strftime(): e82. 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-120769(191): Faz com que uma linha vazia em *note pdb: aa.
     repita o último comando mesmo quando o comando é de ‘cmdqueue’.

   - gh-120780(192): Show string value of LOAD_SPECIAL oparg in *note
     dis: 3c. output.

   - gh-41431(193): Add *note datetime.time.strptime(): 189f. and *note
     datetime.date.strptime(): 1f8.  Contributed by Wannes Boeykens.

   - gh-120743(194): *note Soft deprecate: 23c. *note os.popen(): 318.
     and *note os.spawn*: 319. functions.  They should no longer be used
     to write new code.  The *note subprocess: dc. module is recommended
     instead.  Patch by Victor Stinner.

   - gh-120732(195): Corrige ‘name’ passando para o objeto *note
     unittest.mock.Mock: c34. ao usar *note
     unittest.mock.create_autospec(): 1886.

   - gh-111259(196): *note re: be. now handles patterns like ‘"[\s\S]"’
     or ‘"\s|\S"’ which match any character as effectively as a dot with
     the ‘DOTALL’ modifier (‘"(?s:.)"’).

   - gh-120683(197): Corrige um erro em *note logging.LogRecord: 11dc,
     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-118710(198): *note ipaddress.IPv4Address: 506. and *note
     ipaddress.IPv6Address: 507. attributes ‘version’ and
     ‘max_prefixlen’ are now available on the class.

   - gh-120633(199): Move a barra de rolagem e remova os menus
     destacáveis no turtledemo.

   - gh-120606(200): Allow users to use EOF to exit ‘commands’
     definition in *note pdb: aa.

   - gh-120284(201): Allow *note asyncio.Runner.run(): 18a0. to accept
     *note awaitable: 4c3. objects instead of simply *note coroutine:
     6ae.s.

   - gh-120541(202): Melhora o prompt no pager “less” quando *note
     help(): aca. é chamado com argumento não-string.

   - gh-120495(203): Corrige o tratamento de exceção incorreto no Tab
     Nanny.  Patch por Wulian233.

   - gh-120388(204): Improve a warning message when a test method in
     *note unittest: 10c. returns something other than ‘None’.  Now we
     show the returned object type and optional asyncio-related tip.

   - gh-120381(205): Corrige *note inspect.ismethoddescriptor(): 18a1.
     para verificar também a falta de *note __delete__(): 18a2.  Patch
     por Jan Kaliszewski.

   - gh-90425(206): O byte do SO em cabeçalhos gzip agora é sempre
     definido como 255 ao usar *note gzip.compress(): 843.

   - gh-120343(207): Corrige o relatório de deslocamento de coluna para
     tokens que vêm depois de f-strings multilinhas no módulo *note
     tokenize: 101.

   - gh-119180(208): As part of implementing PEP 649(209) and PEP
     749(210), add a new module ‘annotationlib’.  Add support for
     unresolved forward references in annotations to *note dataclasses:
     33, *note typing.TypedDict: 330, and *note typing.NamedTuple: 32f.

   - gh-119600(211): Corrige *note unittest.mock.patch(): 1088. para não
     ler atributos do alvo quando ‘new_callable’ estiver definido.
     Patch por Robert Collins.

   - gh-120289(212): Corrigido o problema de uso após liberação em *note
     cProfile: 2b. ao desabilitar ‘disable()’ e ‘clear()’ em
     temporizadores externos.

   - gh-82017(213): Added support for converting any objects that have
     the ‘as_integer_ratio()’ method to a *note Fraction: 212.

   - gh-114053(214): Corrige bug de caso extremo em que *note
     typing.get_type_hints(): 8b5. 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(215): Corrige *note NameError: 44f. errôneo ao chamar
     *note inspect.get_annotations(): a0a. com ‘eval_str=True`’ em uma
     classe que fazia uso de parâmetros do tipo PEP 695(216) em um
     módulo que tinha ‘from __future__ import annotations’ no topo do
     arquivo.  Patch por Alex Waygood.

   - gh-120268(217): Proíbe passar ‘None’ para *note
     datetime.date.fromtimestamp(): dc1. Python puro para obter
     consistência com a implementação da extensão C.

   - gh-120244(218): Corrige vazamento de memória em *note re.sub():
     59c. quando a string de substituição contém referências anteriores.

   - gh-120254(219): Added ‘commands’ argument to *note pdb.set_trace():
     271. which allows users to send debugger commands from the source
     file.

   - gh-120211(220): Corrige *note tkinter.ttk: ff. com Tcl/Tk 9.0.

   - gh-71587(221): Corrige travamento na versão C de *note
     datetime.datetime.strptime(): 18a3. quando chamado novamente no
     interpretador reiniciado.

   - gh-117983(222): Adia a importação de ‘threading’ em
     ‘importlib.util’ até que o carregamento preguiçoso seja usado.

   - gh-120157(223): Remove unused constant
     ‘concurrent.futures._base._FUTURE_STATES’ in *note
     concurrent.futures: 24.  Patch by Clinton Christian (pygeek).

   - gh-120161(224): *note datetime: 34. não trava mais em certas
     situações complexas de ciclo de referência.

   - gh-119698(225): Corrige *note symtable.Class.get_methods(): 31b. e
     documenta seu comportamento.  Patch por Bénédikt Tran.

   - gh-120121(226): Adiciona *note
     concurrent.futures.InvalidStateError: 18a4. ao módulo ‘__all__’.

   - gh-119933(227): Adiciona a enumeração *note
     symtable.SymbolTableType: 18a5. para representar as possíveis
     saídas do método *note symtable.SymbolTable.get_type: 18a6.  Patch
     por Bénédikt Tran.

   - gh-120029(228): Expose *note symtable.Symbol: 288. methods *note
     is_free_class(): 28b, *note is_comp_iter(): 28a. and *note
     is_comp_cell(): 289.  Patch by Bénédikt Tran.

   - gh-120108(229): Corrige chamada de *note copy.deepcopy(): d59. em
     árvores *note ast: 9. que foram modificadas para ter referências a
     nós pais.  Patch por Jelle Zijlstra.

   - gh-120056(230): Add ‘socket.IP_RECVERR’ and ‘socket.IP_RECVTTL’
     constants (both available since Linux 2.2).  And
     ‘socket.IP_RECVORIGDSTADDR’ constant (available since Linux
     2.6.29).

   - gh-112672(231): Suporte para construção de *note tkinter: f6. com
     Tcl 9.0.

   - gh-120057(232): Added the *note os.environ.refresh(): 258. method
     to update *note os.environ: 258. with changes to the environment
     made by *note os.putenv(): 25a, by *note os.unsetenv(): 25b, or
     made outside Python in the same process.  Patch by Victor Stinner.

   - gh-120029(233): Expose *note symtable.Symbol.is_type_parameter():
     18a7. in the *note symtable: de. module.  Patch by Bénédikt Tran.

   - gh-119819(234): Corrige regressão para permitir configuração de
     registro com tipos de fila de multiprocessamento.

   - gh-65454(235): *note unittest.mock.Mock.attach_mock(): 18a8. não
     dispara mais uma chamada para um ‘PropertyMock’ sendo anexado.

   - gh-117142(236): O módulo *note ctypes: 2e. agora pode ser importado
     em todos os subinterpretadores, incluindo aqueles que têm sua
     própria GIL.

   - gh-118835(237): Corrige falha do _pyrepl ao usar prompt
     personalizado com códigos de escape ANSI.

   - gh-81936(238): 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-117398(239): O módulo ‘_datetime’ (implementação C para *note
     datetime: 34.) agora oferece suporte a importação em múltiplos
     interpretadores.

   - gh-119824(240): Print stack entry in *note pdb: aa. when and only
     when user input is needed.

   - gh-119838(241): In mixed arithmetic operations with *note Fraction:
     212. and complex, the fraction is now converted to *note float:
     196. instead of *note complex: 197.

   - gh-119770(242): Make *note termios: e7. ‘ioctl()’ constants
     positive.  Patch by Victor Stinner.

   - gh-89727(243): Corrige problema com *note shutil.rmtree(): 353.
     onde uma *note RecursionError: f5c. é levantada em árvores de
     diretório profundas.

   - gh-119577(244): O *note DeprecationWarning: 1a3. emitido ao testar
     o valor verdade de um *note xml.etree.ElementTree.Element: 360.
     agora descreve o retorno incondicional de ‘True’ em uma versão
     futura em vez de gerar uma exceção no Python 3.14.

   - gh-89727(245): Corrige parcialmente o problema com *note
     shutil.rmtree(): 353. onde uma *note RecursionError: f5c. é
     levantada em árvores de diretório profundas.  Um erro de recursão
     não é mais levantado quando ‘rmtree.avoids_symlink_attacks’ é
     falso.

   - gh-93963(246): Remove deprecated names from ‘importlib.abc’ as
     found in ‘importlib.resources.abc’.

   - gh-119118(247): Corrige regressão de desempenho no módulo *note
     tokenize: 101. armazenando em cache o atributo de token ‘line’ e
     calculando o deslocamento da coluna de forma mais eficiente.

   - gh-89727(248): Corrige problema com *note os.fwalk(): d46. onde uma
     *note RecursionError: f5c. era levantada em árvores de diretório
     profundas ajustando a implementação para ser iterativa em vez de
     recursiva.

   - gh-119594(249): If one calls pow(fractions.Fraction, x, module)
     with modulo not None, the error message now says that the types are
     incompatible rather than saying pow only takes 2 arguments.  Patch
     by Wim Jeantine-Glenn and Mark Dickinson.

   - gh-119588(250): ‘zipfile.Path.is_symlink’ agora avalia se o caminho
     fornecido é um link simbólico.

   - gh-119562(251): Remove ‘ast.Num’, ‘ast.Str’, ‘ast.Bytes’,
     ‘ast.NameConstant’ and ‘ast.Ellipsis’.  They had all emitted
     deprecation warnings since Python 3.12.  Patch by Alex Waygood.

   - gh-119555(252): Captura *note SyntaxError: 18e. de *note compile():
     4ab. no método runsource() do InteractiveColoredConsole.  Patch por
     Sergey B Kirpichev.

   - gh-118908(253): 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-117865(254): Improve the import time of the *note ast: 9. module
     by deferring the import of *note re: be.  Patch by Jelle Zijlstra.

   - gh-119127(255): Positional arguments of *note functools.partial():
     216. objects now support placeholders via *note
     functools.Placeholder: 215.

   - gh-113892(256): Agora, o método ‘sock_connect’ de *note
     asyncio.ProactorEventLoop: 812. levanta um *note ValueError: 2ea.
     se o soquete fornecido não estiver no modo não bloqueante, bem como
     em outras implementações de laço.

   - gh-119506(257): Corrige o método ‘io.TextIOWrapper.write()’ que
     quebra o buffer interno quando o método é chamado novamente durante
     a descarga do buffer interno.

   - gh-69214(258): Fix ‘fcntl.ioctl()’ 'request' parameter: use an
     ‘unsigned long’ instead of an ‘unsigned int’ for the 'request'
     parameter of *note fcntl.ioctl(): 1669. to support requests larger
     than ‘UINT_MAX’.  Patch by Victor Stinner.

   - gh-119105(259): ‘difflib’’s ‘DIffer.compare()’ (and so also
     ‘ndiff’) can no longer be provoked into cubic-time behavior, or
     into unbounded recursion, and should generally be faster in
     ordinary cases too.  Results may change in some cases, although
     that should be rare.  Correctness of diffs is not affected.  Some
     similar lines far apart may be reported as deleting one and adding
     the other, where before they were displayed on adjacent output
     lines with markup showing the intraline differences.

   - gh-119443(260): O REPL interativo não é mais executado com ‘from
     __future__ import annotations’ habilitado.  Patch por Jelle
     Zijlstra.

   - gh-119461(261): Add ‘socket.VMADDR_CID_LOCAL’ constant.  Patch by
     Victor Stinner.

   - gh-117398(262): 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(263): *note asyncio: b. O REPL agora tem os mesmos
     recursos do PyREPL.

   - gh-118830(264): Bump *note pickle: ab. default protocol to ‘5’.

   - gh-118911(265): 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-115225(266): Raise error on certain technically valid but
     pathological ISO 8601 strings passed to *note
     datetime.time.fromisoformat(): 81e. that were previously parsed
     incorrectly.

   - gh-111201(267): Remove dependência para *note readline: bf. do novo
     REPL do Python.

   - gh-119189(268): Ao usar o operador ‘**’ ou *note pow(): 1a4. com
     *note Fraction: 212. 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-119174(269): Corrige DPI alto que causa janelas borradas no
     turtledemo (exemplos do turtle-graphics) Patch por Wulian233 e
     Terry Jan Reedy

   - gh-119121(270): Corrige um NameError acontecendo em
     ‘asyncio.staggered.staggered_race’.  Esta função agora está
     testada.

   - gh-119105(271): ‘difflib.Differ’ is much faster for some cases of
     diffs where many pairs of lines are equally similar.

   - gh-119113(272): Corrige problema em que *note
     pathlib.PurePath.with_suffix(): 18a9. não levantava *note
     TypeError: 198. quando dado ‘None’ como sufixo.

   - gh-118643(273): Corrige um AttributeError no módulo *note email:
     3f. 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-73991(274): Add *note pathlib.Path.copy(): 266, which copies a
     file or directory to another.

   - gh-58933(275): Faz *note pdb: aa. retornar ao quadro do chamador
     corretamente quando ‘f_trace’ do quadro do chamador não estiver
     definido

   - gh-82805(276): Support single-dot file extensions in *note
     pathlib.PurePath.suffix: 18aa. and related attributes and methods.
     For example, the *note suffixes: 18ab. of ‘PurePath('foo.bar.')’
     are now ‘['.bar', '.']’ rather than ‘[]’.  This brings file
     extension splitting in line with *note os.path.splitext(): 18ac.

   - gh-118924(277): Remove ‘version’ and ‘version_info’ from *note
     sqlite3: d4.  Patch by Hugo van Kemenade.

   - gh-118928(278): Disallow using a sequence of parameters with named
     placeholders in *note sqlite3: d4. queries.  Patch by Erlend E.
     Aasland.

   - gh-118895(279): Define atributos em *note typing.NoDefault: 562.
     agora levanta *note AttributeError: 5e4. em vez de *note TypeError:
     198.

   - gh-118868(280): Corrigido o problema em que kwargs não eram mais
     passados para o manipulador de registro QueueHandler

   - gh-118827(281): Remove deprecated ‘Quoter’ class from *note
     urllib.parse: 110.  It had previously raised a *note
     DeprecationWarning: 1a3. since Python 3.11.  Patch by Nikita
     Sobolev.

   - gh-118824(282): Remove deprecated ‘pty.master_open()’ and
     ‘pty.slave_open()’.  Use *note pty.openpty(): 2ff. instead.  Patch
     by Nikita Sobolev.

   - gh-118851(283): Argumentos ‘ctx’ para os construtores de classes de
     nó *note ast: 9. agora são padronizados para *note ast.Load(): 4bc.
     Patch por Jelle Zijlstra.

   - gh-101588(284): Remove copy, deepcopy, and pickle from itertools.
     These had previously raised a DeprecationWarning since Python 3.12.

   - gh-118805(285): Remove 'type', 'choices', and 'metavar' parameters
     of ‘argparse.BooleanOptionalAction’.  They were deprecated since
     Python 3.12.

   - gh-118803(286): ‘typing.ByteString’ and
     ‘collections.abc.ByteString’ are removed.  They had previously
     raised a *note DeprecationWarning: 1a3. since Python 3.12.

   - gh-118798(287): The 'isdst' parameter has been removed from *note
     email.utils.localtime(): 2f5.  Patch by Hugo van Kemenade.

   - gh-118760(288): Restaura o valor padrão de ‘tkiter.wantobjects’
     para ‘1’.

   - gh-118760(289): Corrige erros ao chamar ligações Tkinter no
     Windows.

   - gh-74033(290): Drop support for passing keyword arguments to *note
     pathlib.Path: 265.

   - gh-101357(291): Suppress all *note OSError: 2bf. exceptions from
     *note pathlib.Path.exists(): c01. and ‘is_*()’ methods, rather than
     a selection of more common errors.  The new behaviour is consistent
     with *note os.path.exists(): bf9, *note os.path.isdir(): bfb, etc.
     Use *note pathlib.Path.stat(): a1a. to retrieve the file status
     without suppressing exceptions.

   - gh-78707(292): Drop support for passing additional positional
     arguments to *note pathlib.PurePath.relative_to(): 2fb. and *note
     is_relative_to(): 2fc.

   - gh-118507(293): Corrige *note os.path.isfile(): bfc. no Windows
     para pipes.  Acelera *note os.path.isjunction(): 6bf. e *note
     os.path.lexists(): bfa. no Windows com uma implementação nativa.

   - gh-118772(294): Permite que instâncias *note typing.TypeVar: 480.
     sem um padrão sigam instâncias sem um padrão em alguns casos.
     Patch por Jelle Zijlstra.

   - gh-118714(295): Permite ‘restart’ na depuração post-mortem de *note
     pdb: aa.  Removida a mensagem de reinicialização quando o usuário
     sai do pdb do modo post-mortem.

   - gh-118673(296): Removed executable bits and shebang from stdlib
     modules.

   - gh-110863(297): *note os.path.realpath(): 261. agora suprime
     qualquer *note OSError: 2bf. de *note os.readlink(): b10. quando o
     modo 'strict' está desabilitado (o padrão).

   - gh-118263(298): Acelera *note os.path.splitroot(): 6c0. e *note
     os.path.normpath(): 1515. com uma chamada C direta.

   - gh-110190(299): Fix ctypes structs with array on SPARC by setting
     ‘MAX_STRUCT_SIZE’ to 32 in stgdict.  Patch by Jakub Kulik

   - gh-118033(300): Corrige *note dataclasses.dataclass(): 4db. não
     criando um slot ‘__weakref__’ ao subclassificar *note
     typing.Generic: 18ad.

   - gh-117766(301): Sempre usa *note str(): 169. para exibir ‘choices’
     em *note argparse: 7.

   - gh-106531(302): Em *note importlib.resources: 7f, sincronizar com
     importlib_resources 6.3.2(303), 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-115937(304): Removed extra preprocessing for the ‘__signature__’
     attribute: the code just check if it’s a *note inspect.Signature:
     4dd. instance.  Patch by Sergey B Kirpichev.

   - gh-115808(305): Add *note operator.is_none(): 254. and *note
     operator.is_not_none(): 255. functions.

   - gh-114264(306): Improve performance of *note copy.deepcopy(): d59.
     by adding a fast path for atomic types.

   - gh-113878(307): Add 'doc' parameter to *note dataclasses.field():
     18ae, so it can be stored and shown as a documentation / metadata.
     If ‘@dataclass(slots=True)’ is used, then the supplied string is
     available in the *note __slots__: 16d9. dict.  Otherwise, the
     supplied string is only available in the corresponding *note
     dataclasses.Field: 18af. object.

     In order to support this feature we are changing the ‘__slots__’
     format in dataclasses from *note tuple: 608. to *note dict: 183.
     when documentation / metadata is present.

   - gh-113978(308): Ignora avisos sobre conclusão de texto dentro do
     REPL.

   - gh-113008(309): Correct argparse usage output for required,
     mutually exclusive groups containing a positional argument

   - gh-108172(310): ‘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(311): 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(): 18b0. e *note
     ssl.SSLSocket.get_unverified_chain(): 18b1.

     Contribuição de Mateusz Nowak.

   - gh-105623(312): Corrige degradação de desempenho em *note
     logging.handlers.RotatingFileHandler: 1894.  Patch por Craig
     Robson.

   - gh-102450(313): Add missing ISO-8601 24:00 alternative to midnight
     of next day to *note datetime.datetime.fromisoformat(): 81f. and
     *note datetime.time.fromisoformat(): 81e.  Patch by Izan
     “TizzySaurus” Robinson (<tizzysaurus@gmail.com>)

   - gh-103956(314): Corrige a falta de caracteres de nova linha na
     saída do módulo *note trace: 103. 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(315): 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(316): 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: 3c0, *note str: 169, *note
     bytearray: 342. ou *note int: 19b.

   - gh-87106(317): Corrigida a manipulação em *note
     inspect.Signature.bind(): 17f6. de argumentos nomeados com o mesmo
     nome que argumentos somente-posicionais quando um argumento nomeado
     variádico (por exemplo, ‘**kwargs’) estiver presente.

   - gh-103134(318): Add additional methods to *note proxy objects: 24b.
     in the ‘multiprocessing’ module:

        * ‘clear()’ e ‘copy()’ para proxies de *note list: 24c.

        * *note fromkeys(): 24d, ‘reversed(d)’, ‘d | {}’, ‘{} | d’, ‘d
          |= {'b': 2}’ para proxies de *note dict: 183.

   - bpo-45767(319): Corrige conversão de inteiros em *note os.major():
     18b2, *note os.minor(): 18b3. e *note os.makedev(): 18b4.  Suporte
     a números de dispositivos maiores que ‘2**63-1’.  Suporte a número
     de dispositivos inexistente (‘NODEV’).

   - bpo-44864(320): Não traduz strings fornecidas pelo usuário em *note
     argparse.ArgumentParser: 1bd.

   - bpo-41843(321): Solaris now uses *note os.sendfile(): cf8.
     fast-copy syscall for more efficient *note shutil: ca. file copy
     related functions.

   - bpo-15987(322): Implemented *note ast.compare(): 1bf. for comparing
     two ASTs.  Patch by Batuhan Taskaya with some help from Jeremy
     Hylton.

   - gh-67693(323): Corrige *note urllib.parse.urlunparse(): 1891. e
     *note urllib.parse.urlunsplit(): 1890. para URIs com caminho
     começando com várias barras e sem autoridade.  Baseado no patch de
     Ashwin Ramaswami.

   - bpo-14074(324): Corrige o processamento de metavariável de *note
     argparse: 7. para permitir que argumentos posicionais tenham uma
     metavar de tupla.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125422

   (2) https://github.com/python/cpython/issues/100141

   (3) https://github.com/python/cpython/issues/53203

   (4) https://github.com/python/cpython/issues/125206

   (5) https://github.com/python/cpython/issues/89967

   (6) https://github.com/python/cpython/issues/125260

   (7) https://github.com/python/cpython/issues/125243

   (8) https://github.com/python/cpython/issues/125254

   (9) https://github.com/python/cpython/issues/125235

   (10) https://github.com/python/cpython/issues/61011

   (11) https://github.com/python/cpython/issues/125118

   (12) https://github.com/python/cpython/issues/125069

   (13) https://github.com/python/cpython/issues/125096

   (14) https://github.com/python/cpython/issues/124969

   (15) https://github.com/python/cpython/issues/124960

   (16) https://github.com/python/cpython/issues/69998

   (17) https://github.com/python/cpython/issues/124958

   (18) https://github.com/python/cpython/issues/53203

   (19) https://github.com/python/cpython/issues/123961

   (20) https://peps.python.org/pep-0489/

   (21) https://github.com/python/cpython/issues/124944

   (22) https://github.com/python/cpython/issues/117151

   (23) https://github.com/python/cpython/issues/90102

   (24) https://github.com/python/cpython/issues/124917

   (25) https://github.com/python/cpython/issues/65865

   (26) https://github.com/python/cpython/issues/124653

   (27) https://github.com/python/cpython/issues/91818

   (28) https://github.com/python/cpython/issues/124858

   (29) https://github.com/python/cpython/issues/124390

   (30) https://github.com/python/cpython/issues/85935

   (31) https://github.com/python/cpython/issues/124835

   (32) https://github.com/python/cpython/issues/124693

   (33) https://github.com/python/cpython/issues/124787

   (34) https://github.com/python/cpython/issues/66436

   (35) https://github.com/python/cpython/issues/116850

   (36) https://github.com/python/cpython/issues/101552

   (37) https://github.com/python/cpython/issues/58573

   (38) https://github.com/python/cpython/issues/124594

   (39) https://github.com/python/cpython/issues/61181

   (40) https://github.com/python/cpython/issues/116750

   (41) https://github.com/python/cpython/issues/124552

   (42) https://github.com/python/cpython/issues/124538

   (43) https://github.com/python/cpython/issues/80259

   (44) https://github.com/python/cpython/issues/120378

   (45) https://github.com/python/cpython/issues/124498

   (46) https://github.com/python/cpython/issues/53834

   (47) https://github.com/python/cpython/issues/123884

   (48) https://github.com/python/cpython/issues/123017

   (49) https://github.com/python/cpython/issues/123014

   (50) https://github.com/python/cpython/issues/124176

   (51) https://github.com/python/cpython/issues/124345

   (52) https://github.com/python/cpython/issues/124400

   (53) https://github.com/python/cpython/issues/90562

   (54) https://github.com/python/cpython/issues/104860

   (55) https://github.com/python/cpython/issues/63143

   (56) https://github.com/python/cpython/issues/72795

   (57) https://github.com/python/cpython/issues/59317

   (58) https://github.com/python/cpython/issues/100980

   (59) https://github.com/python/cpython/issues/53780

   (60) https://github.com/python/cpython/issues/124217

   (61) https://github.com/python/cpython/issues/111513

   (62) https://github.com/python/cpython/issues/124248

   (63) https://github.com/python/cpython/issues/81691

   (64) https://github.com/python/cpython/issues/87041

   (65) https://github.com/python/cpython/issues/84559

   (66) https://github.com/python/cpython/issues/124212

   (67) https://github.com/python/cpython/issues/124171

   (68) https://github.com/python/cpython/issues/123978

   (69) https://github.com/python/cpython/issues/123934

   (70) https://github.com/python/cpython/issues/124016

   (71) https://github.com/python/cpython/issues/123968

   (72) https://github.com/python/cpython/issues/123945

   (73) https://github.com/python/cpython/issues/123935

   (74) https://github.com/python/cpython/issues/123892

   (75) https://github.com/python/cpython/issues/84808

   (76) https://github.com/python/cpython/issues/123756

   (77) https://github.com/python/cpython/issues/122765

   (78) https://github.com/python/cpython/issues/123657

   (79) https://github.com/python/cpython/issues/123339

   (80) https://github.com/python/cpython/issues/123374

   (81) https://github.com/python/cpython/issues/123504

   (82) https://github.com/python/cpython/issues/123430

   (83) https://github.com/python/cpython/issues/123446

   (84) https://github.com/python/cpython/issues/123448

   (85) https://github.com/python/cpython/issues/123409

   (86) https://datatracker.ietf.org/doc/html/rfc3596.html#section-2.5

   (87) https://github.com/python/cpython/issues/123089

   (88) https://github.com/python/cpython/issues/123363

   (89) https://github.com/python/cpython/issues/123341

   (90) https://github.com/python/cpython/issues/123340

   (91) https://github.com/python/cpython/issues/119518

   (92) https://github.com/python/cpython/issues/123270

   (93) https://github.com/python/cpython/issues/122905

   (94) https://github.com/python/cpython/issues/73991

   (95) https://github.com/python/cpython/issues/123228

   (96) https://github.com/python/cpython/issues/123240

   (97) https://github.com/python/cpython/issues/76960

   (98) https://github.com/python/cpython/issues/116810

   (99) https://github.com/python/cpython/issues/123243

   (100) https://github.com/python/cpython/issues/122546

   (101) https://github.com/python/cpython/issues/123213

   (102) https://github.com/python/cpython/issues/85110

   (103) https://github.com/python/cpython/issues/123165

   (104) https://github.com/python/cpython/issues/122909

   (105) https://github.com/python/cpython/issues/123084

   (106) https://github.com/python/cpython/issues/123085

   (107) https://github.com/python/cpython/issues/123067

   (108) https://github.com/python/cpython/issues/123049

   (109) https://github.com/python/cpython/issues/121735

   (110) https://github.com/python/cpython/issues/122981

   (111) https://github.com/python/cpython/issues/122903

   (112) https://github.com/python/cpython/issues/122905

   (113) https://github.com/python/cpython/issues/122873

   (114) https://github.com/python/cpython/issues/122858

   (115) https://github.com/python/cpython/issues/116263

   (116) https://github.com/python/cpython/issues/105376

   (117) https://github.com/python/cpython/issues/122311

   (118) https://github.com/python/cpython/issues/122744

   (119) https://github.com/python/cpython/issues/118761

   (120) https://github.com/python/cpython/issues/118974

   (121) https://github.com/python/cpython/issues/118814

   (122) https://github.com/python/cpython/issues/122637

   (123) https://github.com/python/cpython/issues/122478

   (124) https://github.com/python/cpython/issues/116622

   (125) https://github.com/python/cpython/issues/82378

   (126) https://github.com/python/cpython/issues/122334

   (127) https://github.com/python/cpython/issues/122459

   (128) https://github.com/python/cpython/issues/87320

   (129) https://github.com/python/cpython/issues/122272

   (130) https://github.com/python/cpython/issues/122400

   (131) https://github.com/python/cpython/issues/122311

   (132) https://github.com/python/cpython/issues/121650

   (133) https://github.com/python/cpython/issues/121650

   (134) https://github.com/python/cpython/issues/122332

   (135) https://github.com/python/cpython/issues/105733

   (136) https://github.com/python/cpython/issues/122213

   (137) https://github.com/python/cpython/issues/119180

   (138) https://peps.python.org/pep-0749/

   (139) https://github.com/python/cpython/issues/119180

   (140) https://github.com/python/cpython/issues/122170

   (141) https://github.com/python/cpython/issues/122163

   (142) https://github.com/python/cpython/issues/122129

   (143) https://github.com/python/cpython/issues/122145

   (144) https://github.com/python/cpython/issues/121723

   (145) https://github.com/python/cpython/issues/82951

   (146) https://github.com/python/cpython/issues/120754

   (147) https://github.com/python/cpython/issues/113785

   (148) https://github.com/python/cpython/issues/122088

   (149) https://github.com/python/cpython/issues/122081

   (150) https://github.com/python/cpython/issues/73991

   (151) https://github.com/python/cpython/issues/121268

   (152) https://github.com/python/cpython/issues/119698

   (153) https://github.com/python/cpython/issues/121889

   (154) https://github.com/python/cpython/issues/121804

   (155) https://github.com/python/cpython/issues/121797

   (156) https://github.com/python/cpython/issues/121798

   (157) https://github.com/python/cpython/issues/120930

   (158) https://github.com/python/cpython/issues/92081

   (159) https://github.com/python/cpython/issues/57141

   (160) https://github.com/python/cpython/issues/121245

   (161) https://github.com/python/cpython/issues/121249

   (162) https://github.com/python/cpython/issues/121486

   (163) https://github.com/python/cpython/issues/121474

   (164) https://github.com/python/cpython/issues/121450

   (165) https://github.com/python/cpython/issues/119169

   (166) https://github.com/python/cpython/issues/121423

   (167) https://github.com/python/cpython/issues/59110

   (168) https://github.com/python/cpython/issues/119004

   (169) https://github.com/python/cpython/issues/121313

   (170) https://github.com/python/cpython/issues/121332

   (171) https://github.com/python/cpython/issues/121245

   (172) https://github.com/python/cpython/issues/121210

   (173) https://github.com/python/cpython/issues/121163

   (174) https://github.com/python/cpython/issues/121151

   (175) https://github.com/python/cpython/issues/121141

   (176) https://github.com/python/cpython/issues/87744

   (177) https://github.com/python/cpython/issues/121027

   (178) https://github.com/python/cpython/issues/121027

   (179) https://github.com/python/cpython/issues/117784

   (180) https://github.com/python/cpython/issues/121025

   (181) https://github.com/python/cpython/issues/121018

   (182) https://github.com/python/cpython/issues/119614

   (183) https://github.com/python/cpython/issues/120910

   (184) https://github.com/python/cpython/issues/61103

   (185) https://github.com/python/cpython/issues/120888

   (186) https://github.com/python/cpython/issues/101830

   (187) https://github.com/python/cpython/issues/120678

   (188) https://github.com/python/cpython/issues/120811

   (189) https://github.com/python/cpython/issues/120782

   (190) https://github.com/python/cpython/issues/120713

   (191) https://github.com/python/cpython/issues/120769

   (192) https://github.com/python/cpython/issues/120780

   (193) https://github.com/python/cpython/issues/41431

   (194) https://github.com/python/cpython/issues/120743

   (195) https://github.com/python/cpython/issues/120732

   (196) https://github.com/python/cpython/issues/111259

   (197) https://github.com/python/cpython/issues/120683

   (198) https://github.com/python/cpython/issues/118710

   (199) https://github.com/python/cpython/issues/120633

   (200) https://github.com/python/cpython/issues/120606

   (201) https://github.com/python/cpython/issues/120284

   (202) https://github.com/python/cpython/issues/120541

   (203) https://github.com/python/cpython/issues/120495

   (204) https://github.com/python/cpython/issues/120388

   (205) https://github.com/python/cpython/issues/120381

   (206) https://github.com/python/cpython/issues/90425

   (207) https://github.com/python/cpython/issues/120343

   (208) https://github.com/python/cpython/issues/119180

   (209) https://peps.python.org/pep-0649/

   (210) https://peps.python.org/pep-0749/

   (211) https://github.com/python/cpython/issues/119600

   (212) https://github.com/python/cpython/issues/120289

   (213) https://github.com/python/cpython/issues/82017

   (214) https://github.com/python/cpython/issues/114053

   (215) https://github.com/python/cpython/issues/114053

   (216) https://peps.python.org/pep-0695/

   (217) https://github.com/python/cpython/issues/120268

   (218) https://github.com/python/cpython/issues/120244

   (219) https://github.com/python/cpython/issues/120254

   (220) https://github.com/python/cpython/issues/120211

   (221) https://github.com/python/cpython/issues/71587

   (222) https://github.com/python/cpython/issues/117983

   (223) https://github.com/python/cpython/issues/120157

   (224) https://github.com/python/cpython/issues/120161

   (225) https://github.com/python/cpython/issues/119698

   (226) https://github.com/python/cpython/issues/120121

   (227) https://github.com/python/cpython/issues/119933

   (228) https://github.com/python/cpython/issues/120029

   (229) https://github.com/python/cpython/issues/120108

   (230) https://github.com/python/cpython/issues/120056

   (231) https://github.com/python/cpython/issues/112672

   (232) https://github.com/python/cpython/issues/120057

   (233) https://github.com/python/cpython/issues/120029

   (234) https://github.com/python/cpython/issues/119819

   (235) https://github.com/python/cpython/issues/65454

   (236) https://github.com/python/cpython/issues/117142

   (237) https://github.com/python/cpython/issues/118835

   (238) https://github.com/python/cpython/issues/81936

   (239) https://github.com/python/cpython/issues/117398

   (240) https://github.com/python/cpython/issues/119824

   (241) https://github.com/python/cpython/issues/119838

   (242) https://github.com/python/cpython/issues/119770

   (243) https://github.com/python/cpython/issues/89727

   (244) https://github.com/python/cpython/issues/119577

   (245) https://github.com/python/cpython/issues/89727

   (246) https://github.com/python/cpython/issues/93963

   (247) https://github.com/python/cpython/issues/119118

   (248) https://github.com/python/cpython/issues/89727

   (249) https://github.com/python/cpython/issues/119594

   (250) https://github.com/python/cpython/issues/119588

   (251) https://github.com/python/cpython/issues/119562

   (252) https://github.com/python/cpython/issues/119555

   (253) https://github.com/python/cpython/issues/118908

   (254) https://github.com/python/cpython/issues/117865

   (255) https://github.com/python/cpython/issues/119127

   (256) https://github.com/python/cpython/issues/113892

   (257) https://github.com/python/cpython/issues/119506

   (258) https://github.com/python/cpython/issues/69214

   (259) https://github.com/python/cpython/issues/119105

   (260) https://github.com/python/cpython/issues/119443

   (261) https://github.com/python/cpython/issues/119461

   (262) https://github.com/python/cpython/issues/117398

   (263) https://github.com/python/cpython/issues/118894

   (264) https://github.com/python/cpython/issues/118830

   (265) https://github.com/python/cpython/issues/118911

   (266) https://github.com/python/cpython/issues/115225

   (267) https://github.com/python/cpython/issues/111201

   (268) https://github.com/python/cpython/issues/119189

   (269) https://github.com/python/cpython/issues/119174

   (270) https://github.com/python/cpython/issues/119121

   (271) https://github.com/python/cpython/issues/119105

   (272) https://github.com/python/cpython/issues/119113

   (273) https://github.com/python/cpython/issues/118643

   (274) https://github.com/python/cpython/issues/73991

   (275) https://github.com/python/cpython/issues/58933

   (276) https://github.com/python/cpython/issues/82805

   (277) https://github.com/python/cpython/issues/118924

   (278) https://github.com/python/cpython/issues/118928

   (279) https://github.com/python/cpython/issues/118895

   (280) https://github.com/python/cpython/issues/118868

   (281) https://github.com/python/cpython/issues/118827

   (282) https://github.com/python/cpython/issues/118824

   (283) https://github.com/python/cpython/issues/118851

   (284) https://github.com/python/cpython/issues/101588

   (285) https://github.com/python/cpython/issues/118805

   (286) https://github.com/python/cpython/issues/118803

   (287) https://github.com/python/cpython/issues/118798

   (288) https://github.com/python/cpython/issues/118760

   (289) https://github.com/python/cpython/issues/118760

   (290) https://github.com/python/cpython/issues/74033

   (291) https://github.com/python/cpython/issues/101357

   (292) https://github.com/python/cpython/issues/78707

   (293) https://github.com/python/cpython/issues/118507

   (294) https://github.com/python/cpython/issues/118772

   (295) https://github.com/python/cpython/issues/118714

   (296) https://github.com/python/cpython/issues/118673

   (297) https://github.com/python/cpython/issues/110863

   (298) https://github.com/python/cpython/issues/118263

   (299) https://github.com/python/cpython/issues/110190

   (300) https://github.com/python/cpython/issues/118033

   (301) https://github.com/python/cpython/issues/117766

   (302) https://github.com/python/cpython/issues/106531

   (303) 
https://importlib-resources.readthedocs.io/en/latest/history.html#v6-3-2

   (304) https://github.com/python/cpython/issues/115937

   (305) https://github.com/python/cpython/issues/115808

   (306) https://github.com/python/cpython/issues/114264

   (307) https://github.com/python/cpython/issues/113878

   (308) https://github.com/python/cpython/issues/113978

   (309) https://github.com/python/cpython/issues/113008

   (310) https://github.com/python/cpython/issues/108172

   (311) https://github.com/python/cpython/issues/109109

   (312) https://github.com/python/cpython/issues/105623

   (313) https://github.com/python/cpython/issues/102450

   (314) https://github.com/python/cpython/issues/103956

   (315) https://github.com/python/cpython/issues/92081

   (316) https://github.com/python/cpython/issues/103194

   (317) https://github.com/python/cpython/issues/87106

   (318) https://github.com/python/cpython/issues/103134

   (319) https://bugs.python.org/issue?@action=redirect&bpo=45767

   (320) https://bugs.python.org/issue?@action=redirect&bpo=44864

   (321) https://bugs.python.org/issue?@action=redirect&bpo=41843

   (322) https://bugs.python.org/issue?@action=redirect&bpo=15987

   (323) https://github.com/python/cpython/issues/67693

   (324) https://bugs.python.org/issue?@action=redirect&bpo=14074


File: python.info,  Node: IDLE<6>,  Next: Documentação<11>,  Prev: Biblioteca<16>,  Up: Python 3 14 0 alpha 1

1.24.16.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.

   - gh-112938(2): Corrige travamento ininterrupto quando o console
     obtém saída rápida e contínua.

   - gh-122482(3): 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.

   - gh-78889(4): 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.

   - gh-120083(5): 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.

   - gh-120104(6): Corrige preenchimento em janelas de diálogo de
     configuração e pesquisa no IDLE.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122392

   (2) https://github.com/python/cpython/issues/112938

   (3) https://github.com/python/cpython/issues/122482

   (4) https://github.com/python/cpython/issues/78889

   (5) https://github.com/python/cpython/issues/120083

   (6) https://github.com/python/cpython/issues/120104


File: python.info,  Node: Documentação<11>,  Next: Núcleo e embutidos<15>,  Prev: IDLE<6>,  Up: Python 3 14 0 alpha 1

1.24.16.8 Documentação
......................

   - gh-124872(1): Adicionadas as definições para *note contexto: 18b7,
     *note contexto atual: 18b8. e *note protocolo de gerenciamento de
     contexto: 18b9, atualizadas definições relacionadas para serem
     consistentes e expandida a documentação para *note
     contextvars.Context: 177.

   - gh-125018(2): A documentação *note importlib.metadata: 7e. 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(): 18ba. agora
     funcionarão conforme o esperado.

   - gh-124720(3): 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-124457(4): Remove coverity scan from the CPython repo.  It has
     not been used since 2020 and is currently unmaintained.

   - gh-116622(5): Adiciona um guia de plataforma Android e sinaliza
     módulos não disponíveis no Android.

   - gh-123976(6): Refresh docs around custom providers.

   - gh-70870(7): 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(8): Os escritores da documentação do CPython agora podem
     usar ‘next’ como a versão para as diretivas ‘versionchanged’,
     ‘versionadded’, ‘deprecated’.

   - gh-117765(9): Improved documentation for *note
     unittest.mock.patch.dict(): 18bb.

   - gh-121749(10): Corrige documentação para *note
     PyModule_AddObjectRef(): 5fe.

   - gh-120012(11): Esclarece os comportamentos de *note
     multiprocessing.Queue.empty(): 18bc. e *note
     multiprocessing.SimpleQueue.empty(): 18bd. em filas fechadas.
     Patch por Bénédikt Tran.

   - gh-119574(12): Added some missing environment variables to the
     output of *note -help-env: 7fd.

   - bpo-34008(13): A documentação *note Py_Main(): e12. 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/124872

   (2) https://github.com/python/cpython/issues/125018

   (3) https://github.com/python/cpython/issues/124720

   (4) https://github.com/python/cpython/issues/124457

   (5) https://github.com/python/cpython/issues/116622

   (6) https://github.com/python/cpython/issues/123976

   (7) https://github.com/python/cpython/issues/70870

   (8) https://github.com/python/cpython/issues/121277

   (9) https://github.com/python/cpython/issues/117765

   (10) https://github.com/python/cpython/issues/121749

   (11) https://github.com/python/cpython/issues/120012

   (12) https://github.com/python/cpython/issues/119574

   (13) https://bugs.python.org/issue?@action=redirect&bpo=34008


File: python.info,  Node: Núcleo e embutidos<15>,  Next: API C<13>,  Prev: Documentação<11>,  Up: Python 3 14 0 alpha 1

1.24.16.9 Núcleo e embutidos
............................

   - gh-124375(1): Corrige uma falha na construção com threads livres
     quando o GC é executado simultaneamente com uma nova thread
     iniciando.

   - gh-125221(2): Corrige possível condição de corrida ao chamar *note
     __reduce_ex__(): 18bf. pela primeira vez na construção com threads
     livres.

   - gh-125174(3): Make the handling of reference counts of immortal
     objects more robust.  Immortal objects with reference counts that
     deviate from their original reference count by up to a billion
     (half a billion on 32 bit builds) are still counted as immortal.

   - gh-125039(4): Make ‘this_instr’ and ‘prev_instr’ const in cases
     generator.

   - gh-125008(5): Corrige *note tokenize.untokenize(): 1814. produzindo
     sintaxe inválida para chaves duplas precedidas por certos
     caracteres de escape.

   - gh-124871(6): Corrige bug do compilador (em algumas versões do
     3.13) onde uma asserção falha durante a análise de acessibilidade.

   - gh-123378(7): Corrige uma falha no método *note __str__(): 825. de
     objetos *note UnicodeError: 45f. quando os valores *note
     UnicodeError.start: 181f. e *note UnicodeError.end: 1820. são
     inválidos ou estão fora do intervalo.  Patch por Bénédikt Tran.

   - gh-118093(8): Improve the experimental JIT compiler’s ability to
     stay “on trace” when encountering highly-biased branches.

   - gh-124642(9): Corrigido problema de escalabilidade em construções
     com threads livres para leituras sem travas de dicionários em
     cenários de multithread

   - gh-116510(10): 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-116510(11): 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-119180(12): The ‘__main__’ module no longer always contains an
     ‘__annotations__’ dictionary in its global namespace.

   - gh-124547(13): 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(14): Corrige uma falha no construtor FrameLocalsProxy:
     verifica o número de argumentos.  Patch por Victor Stinner.

   - gh-124442(15): Corrige não determinismo na compilação classificando
     o valor de *note __static_attributes__: 470.  Patch por kp2pml30.

   - gh-124285(16): Fix bug where ‘bool(a)’ can be invoked more than
     once during the evaluation of a compound boolean expression.

   - gh-123856(17): Corrige falha do PyREPL quando uma interrupção de
     teclado é acionada após usar uma pesquisa de histórico

   - gh-65961(18): Deprecate the setting and using ‘__package__’ and
     ‘__cached__’.

   - gh-119726(19): The JIT now generates more efficient code for calls
     to C functions resulting in up to 0.8% memory savings and 1.5%
     speed improvement on AArch64.  Patch by Diego Russo.

   - gh-122878(20): Usa o binário ‘pager’, se disponível (por exemplo,
     no Debian e derivados), para exibir REPL ‘help()’.

   - gh-124188(21): Fix reading and decoding a line from the source file
     with non-UTF-8 encoding for syntax errors raised in the compiler.

   - gh-124027(22): Suporte às chaves ‘<page up>’, ‘<page down>’ e
     ‘<delete>’ no Python REPL quando ‘$TERM’ estiver definido como
     ‘vt100’.

   - gh-124022(23): Fix bug where docstring is removed from classes in
     interactive mode.

   - gh-123958(24): docstrings are now removed from the optimized AST in
     optimization level 2.

   - gh-123923(25): The ‘f_executable’ field in the internal *note
     _PyInterpreterFrame: 18c0. struct now uses a tagged pointer.
     Profilers and debuggers that uses this field should clear the least
     significant bit to recover the *note PyObject: 5d5.* pointer.

   - gh-77894(26): Corrige possível travamento no coletor de lixo quando
     ele tenta quebrar um laço de referência contendo um objeto *note
     memoryview: 165.  Agora, um objeto ‘memoryview’ só pode ser limpo
     se não houver buffers que o referenciem.

   - gh-120221(27): o REPL do asyncio agora está reconhecendo
     corretamente KeyboardInterrupts.  A exibição de exceções levantadas
     em threads secundárias foi corrigida.

   - gh-119310(28): 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(29): Corrige mapeamentos de teclas para várias teclas F
     no Windows para o novo REPL. Patch por devdanzin

   - gh-123614(30): Add *note turtle.save(): 18c1. to easily save Turtle
     drawings as PostScript files.  Patch by Marie Roald and Yngve
     Mardal Moe.

   - gh-123339(31): 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.

   - gh-119034(32): 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-123562(33): Improve *note SyntaxError: 18e. message for using
     ‘case ... as ...’ with not a name.

   - gh-123545(34): Corrige um decref duplo em casos raros em
     construções JIT experimentais.

   - gh-123484(35): Corrige ‘_Py_DebugOffsets’ para objetos longos para
     serem relativos ao início do objeto em vez do início de um
     subobjeto.

   - gh-123446(36): Fix empty function name in *note TypeError: 198.
     when builtin magic methods are used without the required args.

   - gh-123440(37): Improve *note SyntaxError: 18e. message for using
     ‘except as’ with not a name.

   - gh-116017(38): Improved JIT memory consumption by periodically
     freeing memory used by infrequently-executed code.  This change is
     especially likely to improve the memory footprint of long-running
     programs.

   - gh-123344(39): Adiciona otimizações AST para padrões de parâmetros
     de tipo.

   - gh-123321(40): 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(41): Corrige um bug que causava o aparecimento de prompts
     perdidos no meio de linhas quebradas no novo REPL.

   - gh-122982(42): Estende o período de descontinuação para inversão de
     bool (‘~’) em dois anos.

   - gh-123271(43): Make concurrent iterations over the same *note
     zip(): 1a0. iterator safe under free-threading.

   - gh-123275(44): Suporte a *note -X gil=1: 16f. e a *note
     PYTHON_GIL=1: 494. em construções sem threads livres.

   - gh-123177(45): Desativa quebra de linha no Apple Terminal por meio
     de um código de escape ANSI. Patch por Pablo Galindo

   - gh-123229(46): Corrige o aviso valgrind inicializando os buffers
     f-string para 0 no tokenizador.  Patch por Pablo Galindo

   - gh-122298(47): Restore printout of GC stats when
     ‘gc.set_debug(gc.DEBUG_STATS)’ is called.  This feature was
     accidentally removed when implementing incremental GC.

   - gh-121804(48): Mostra corretamente os locais de erro quando uma
     *note SyntaxError: 18e. é levanta no REPL básico.  Patch por Sergey
     B Kirpichev.

   - gh-115776(49): Enables inline values (Python’s equivalent of hidden
     classes) on any class who’s instances are of a fixed size.

   - gh-123142(50): Corrige o local de origem muito amplo em tracebacks
     de exceção provenientes de iteráveis quebrados em compreensões.

   - gh-123048(51): Corrige um bug em que o código de correspondência de
     padrões poderia emitir um *note JUMP_FORWARD: 18c2. sem local de
     origem.

   - gh-118093(52): Break up ‘CALL_ALLOC_AND_ENTER_INIT’ into micro-ops
     and relax requirement for exact args, in order to increase the
     amount of code supported by tier 2.

   - gh-123123(53): Corrige a exibição de exceções *note SyntaxError:
     18e. cobrindo várias linhas.  Patch por Pablo Galindo

   - gh-123083(54): Corrige um possível uso após liberação em
     ‘STORE_ATTR_WITH_HINT’.

   - gh-123022(55): Corrige falha em construção com threads livres ao
     chamar *note Py_Initialize(): 45d. de uma thread não principal.

   - gh-118093(56): Add three specializations for *note CALL_KW: 36f.:

        * ‘CALL_KW_PY’ for calls to Python functions

        * ‘CALL_KW_BOUND_METHOD’ for calls to bound methods

        * ‘CALL_KW_NON_PY’ for all other calls

   - gh-122821(57): Make sure that branches in *note while: 18c3.
     statements have consistent offsets for *note sys.monitoring: e0.
     ‘while’ statements are now compiled with a simple jump at the end
     of the body, instead of duplicating the test.

   - gh-122907(58): 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’.)

   - gh-122888(59): Corrige falha em certas chamadas para ‘str()’ com
     argumentos posicionais do tipo errado.  Patch por Jelle Zijlstra.

   - gh-118093(60): Improve the experimental JIT’s handling of
     polymorphic code.

   - gh-122697(61): Fixed memory leaks at interpreter shutdown in the
     free-threaded build, and also reporting of leaked memory blocks via
     *note -X showrefcount: 16f.

   - gh-116622(62): Corrige mensagens stdout e stderr do Android sendo
     truncadas ou perdidas.

   - gh-122527(63): 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: b74. do tipo agora considera
     campos não sequenciais que não estão incluídos no *note Py_SIZE:
     97a. da sequência.

   - gh-122445(64): Adiciona somente campos que são modificados via
     self.* para *note __static_attributes__: 470.

   - gh-122417(65): In the free-threaded build, the reference counts for
     heap type objects are now partially stored in a distributed manner
     in per-thread arrays.  This reduces contention on the heap type’s
     reference count fields when creating or destroying instances of the
     same type from multiple threads concurrently.

   - gh-116090(66): Corrige um problema em construções JIT que impediam
     alguns loops *note for: 347. de disparar corretamente eventos de
     monitoramento *note RAISE: 18c4.

   - gh-122300(67): Preserva nós AST para f-string com especificadores
     de formato de elemento único.  Patch por Pablo Galindo

   - gh-120906(68): *note frame.f_locals: 49f. agora oferece suporte a
     objetos hash arbitrários como chaves.

   - gh-122239(69): When a *note list: 24c, *note tuple: 608. or *note
     dict: 183. with too many elements is unpacked, show the actual
     length in the error message.

   - gh-122245(70): Detection of writes to ‘__debug__’ is moved from the
     compiler’s codegen stage to the symtable.  This means that these
     errors are now detected even in code that is optimized away before
     codegen (such as assertions with the *note -O: 18c. command line
     option).

   - gh-122234(71): Specializations for sums with float and complex
     inputs in *note sum(): 68a. now always use compensated summation.
     Also, for integer items in above specializations: *note
     PyLong_AsDouble(): 18c5. is used, instead of *note
     PyLong_AsLongAndOverflow(): 1462.  Patch by Sergey B Kirpichev.

   - gh-122208(72): 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-122160(73): Remove the ‘BUILD_CONST_KEY_MAP’ opcode.  Use *note
     BUILD_MAP: 366. instead.

   - gh-122029(74): Emite eventos ‘c_call’ em *note sys.setprofile():
     16ec. quando um ‘PyMethodObject’ apontando para um ‘PyCFunction’ é
     chamado.

   - gh-122026(75): 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-99108(76): Python’s hashlib now unconditionally uses the
     vendored HACL* library for Blake2.  Python no longer accepts libb2
     as an optional dependency for Blake2.

     We refreshed HACL* to the latest version, and now vendor HACL*’s
     128-bit and 256-bit wide vector implementations for Blake2, which
     are used on x86/x64 toolchains when the required CPU features are
     available at runtime.

     HACL*’s 128-bit wide vector implementation of Blake2 can also run
     on ARM NEON and Power8, but lacking evidence of a performance gain,
     these are not enabled (yet).

   - gh-121999(77): The default extraction filter for the *note tarfile:
     e4. module is now set to *note 'data': 299.

   - gh-121860(78): Corrige travamento ao rematerializar um dicionário
     gerenciado após ele ter sido excluído.

   - gh-121795(79): Improve performance of set membership testing,
     ‘set.remove()’ and ‘set.discard()’ when the argument is a set.

   - gh-121814(80): Corrigido o SegFault quando *note PyEval_SetTrace():
     657. é usado sem nenhum quadro Python na pilha.

   - gh-121295(81): Corrigido o console PyREPL entrando em um estado
     bloqueado após interromper uma colagem longa

   - gh-121794(82): 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(83): Melhorada a mensagem de *note SyntaxError: 18e. se o
     usuário tentar usar *note yield from: bb8. fora de uma função.

   - gh-121609(84): Corrigido o ato de colar caracteres contendo unicode
     character joiners no novo REPL. Patch por Marta Gomez Macias

   - gh-121297(85): Previously, incorrect usage of *note await: 18d. or
     asynchronous comprehensions in code removed by the *note -O: 18c.
     option was not flagged by the Python compiler.  Now, such code
     raises *note SyntaxError: 18e.  Patch by Jelle Zijlstra.

   - gh-117482(86): Invólucros de slot inesperados não são mais criados
     para tipos estáticos embutidos em subinterpretadores.

   - gh-121562(87): Optimized performance of hex_from_char by replacing
     switch-case with a lookup table

   - gh-121499(88): 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(89): 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(90): A execução do nível 2 agora garante que os
     iteradores de lista permaneçam esgotados, uma vez que se esgotem.

   - gh-121439(91): Permite que tuplas de comprimento 20 na lista de
     liberação sejam reutilizadas.

   - gh-121288(92): *note ValueError: 2ea. messages for *note
     list.index(): 15b6, *note range.index(): 18c6, ‘deque.index()’,
     ‘deque.remove()’ and ‘ShareableList.index()’ no longer contain the
     repr of the searched value (which can be arbitrary large) and are
     consistent with error messages for other *note index(): 18c7. and
     *note remove(): 18c8. methods.

   - gh-121368(93): 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-121149(94): Added specialization for summation of complexes,
     this also improves accuracy of builtin *note sum(): 68a. for such
     inputs.  Patch by Sergey B Kirpichev.

   - gh-121130(95): Corrige f-strings com expressões de depuração em
     especificadores de formato.  Patch por Pablo Galindo

   - gh-121381(96): Remove ‘subprocess._USE_VFORK’ escape hatch code and
     documentation.  It was added just in case, and doesn’t have any
     known cases that require it.

   - gh-119726(97): Optimize code layout for calls to C functions from
     the JIT on AArch64.  Patch by Diego Russo.

   - gh-121115(98): *note PyLong_AsNativeBytes(): 5fa. não usa mais
     métodos *note __index__(): 19e. por padrão.  O sinalizador
     ‘Py_ASNATIVEBYTES_ALLOW_INDEX’ foi adicionado para permitir isso.

   - gh-120838(99): *note Py_Finalize(): 45c. e *note Py_FinalizeEx():
     f05. agora sempre são executados com o interpretador principal
     ativo.

   - gh-113433(100): Subinterpretadores agora são limpos automaticamente
     durante a finalização do tempo de execução.

   - gh-119726(101): Improve the speed and memory use of C function
     calls from JIT code on AArch64.  Patch by Diego Russo

   - gh-116017(102): Simplify the warmup mechanism used for “side exits”
     in JIT code, resulting in slightly better performance and slightly
     lower memory usage for most platforms.

   - gh-98442(103): Corrige localizações de origem muito amplas das
     instruções de limpeza de uma declaração with.

   - gh-120754(104): Reduce the number of system calls invoked when
     reading a whole file (ex.  ‘open('a.txt').read()’).  For a sample
     program that reads the contents of the 400+ ‘.rst’ files in the
     cpython repository ‘Doc’ folder, there is an over 10% reduction in
     system call count.

   - gh-119462(105): Make sure that invariants of type versioning are
     maintained: * Superclasses always have their version number
     assigned before subclasses * The version tag is always zero if the
     tag is not valid.  * The version tag is always non-if the tag is
     valid.

   - gh-120437(106): Corrige problemas de otimização
     ‘_CHECK_STACK_SPACE’ introduzidos em gh-118322(107).

   - gh-120722(108): Define corretamente a posição do bytecode em
     instruções de retorno dentro de lambdas.  Patch por Jelle Zijlstra.

   - gh-120367(109): 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-120507(110): Remove the ‘BEFORE_WITH’ and ‘BEFORE_ASYNC_WITH’
     instructions.  Add the new *note LOAD_SPECIAL: 36c. instruction.
     Generate code for ‘with’ and ‘async with’ statements using the new
     instruction.

   - gh-113993(111): Strings internalizadas com *note sys.intern():
     14d7. 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(): aa4. 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: 169.

   - gh-120485(112): Add an override of ‘allow_reuse_port’ on classes
     subclassing ‘socketserver.TCPServer’ where ‘allow_reuse_address’ is
     also overridden.

   - gh-120384(113): Fix an array out of bounds crash in
     ‘list_ass_subscript’, which could be invoked via some specifically
     tailored input: including concurrent modification of a list object,
     where one thread assigns a slice and another clears it.

   - gh-120367(114): 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.

   - gh-120380(115): Corrige implementação Python de *note
     pickle.Pickler: c09. para objetos *note bytes: 192. e *note
     bytearray: 342. ao usar o protocolo versão 5.  Patch por Bénédikt
     Tran.

   - gh-120397(116): Improve the throughput by up to two times for the
     *note str.count(): 18c9, *note bytes.count(): 18ca. and *note
     bytearray.count(): 18cb. methods for counting single characters.

   - gh-120221(117): Entrega sinais reais em Ctrl-C e Ctrl-Z no novo
     REPL. Patch por Pablo Galindo

   - gh-120346(118): Respect *note PYTHON_BASIC_REPL: 1b6. when running
     in interactive inspect mode (‘python -i’).  Patch by Pablo Galindo

   - gh-93691(119): Corrige os locais de origem das instruções geradas
     para o iterador de uma instrução for.

   - gh-120198(120): Corrige uma falha quando vários threads leem e
     escrevem na mesma ‘__class__’ de um objeto simultaneamente.

   - gh-120298(121): Fix use-after free in ‘list_richcompare_impl’ which
     can be invoked via some specifically tailored evil input.

   - gh-119666(122): Corrige uma falha do compilador no caso em que duas
     compreensões no escopo da classe referenciam ‘__class__’.

   - gh-119726(123): JIT: Re-use trampolines on AArch64 when creating
     stencils.  Patch by Diego Russo

   - gh-120225(124): Corrige a falha no compilador em bloco vazio no
     final do manipulador de exceção.

   - gh-93691(125): Corrige localizações de origem de instruções geradas
     para declarações with.

   - gh-120097(126): ‘FrameLocalsProxy’ agora é uma subclasse de
     ‘collections.abc.Mapping’ e pode ser correspondido como um
     mapeamento em instruções ‘match’

   - gh-120080(127): Direct call to the ‘int.__round__()’ now accepts
     ‘None’ as a valid argument.

   - gh-119933(128): Melhora as mensagens *note SyntaxError: 18e. 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.

   - gh-119724(129): 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-119879(130): String search is now slightly faster for certain
     cases.  It now utilizes last character gap (good suffix rule) for
     two-way periodic needles.

   - gh-119842(131): Honra *note PyOS_InputHook(): 799. no novo REPL.
     Patch por Pablo Galindo

   - gh-119180(132): *note classmethod(): 488. and *note staticmethod():
     450. now wrap the *note __annotations__: 455. and *note
     __annotate__: 18cc. attributes of their underlying callable lazily.
     See PEP 649(133).  Patch by Jelle Zijlstra.

   - gh-119821(134): Corrige a execução de *note escopos de anotação:
     4a5. dentro de classes quando ‘globals’ estiver definido como um
     não-dict.  Patch por Jelle Zijlstra.

   - gh-118934(135): Faz ‘PyEval_GetLocals’ retornar referência
     emprestada

   - gh-119740(136): Remove the previously-deprecated delegation of
     *note int(): 19b. to *note __trunc__(): 19c.

   - gh-119689(137): Generate stack effect metadata for pseudo
     instructions from bytecodes.c.

   - gh-109218(138): *note complex(): 197. accepts now a string only as
     a positional argument.  Passing a complex number as the “real” or
     “imag” argument is deprecated; it should only be passed as a single
     positional argument.

   - gh-119548(139): Adiciona um comando ‘clear’ ao REPL. Patch por
     Pablo Galindo

   - gh-111999(140): Corrige a assinatura de *note str.format_map():
     fcb.

   - gh-119560(141): 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(142): 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(143): 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-119258(144): Eliminate type version guards in the tier two
     interpreter.

     Note that setting the ‘tp_version_tag’ manually (which has never
     been supported) may result in crashes.

   - gh-119311(145): Corrige bug onde nomes são inesperadamente cortados
     nas bases de classes genéricas.

   - gh-119395(146): Corrige bug onde nomes aparecendo após uma classe
     genérica são cortados como se estivessem na classe genérica.

   - gh-119372(147): Correct invalid corner cases in complex division
     (resulted in ‘(nan+nanj)’ output), e.g.  ‘1/complex('(inf+infj)')’.
     Patch by Sergey B Kirpichev.

   - gh-119180(148): Evaluation of annotations is now deferred.  See PEP
     649(149) for details.

   - gh-119180(150): Replace ‘LOAD_ASSERTION_ERROR’ opcode with *note
     LOAD_COMMON_CONSTANT: 367. and add support for *note
     NotImplementedError: 368.

   - gh-119213(151): 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(152): Corrige ‘type.__type_params__’ para retornar uma
     tupla vazia em vez de um descritor.

   - gh-118692(153): Evita criar instâncias *note StopIteration: de9.
     desnecessárias para monitoramento.

   - gh-119180(154): Add an ‘__annotate__’ attribute to functions,
     classes, and modules as part of PEP 649(155).  Patch by Jelle
     Zijlstra.

   - gh-119049(156): Corrige a exibição da linha de origem para avisos
     criados pela API C se o módulo *note warnings: 118. ainda não tiver
     sido importado.

   - gh-119057(157): Improve *note ZeroDivisionError: b35. error
     message.  Now, all error messages are harmonized: all ‘/’, ‘//’,
     and ‘%’ operations just use “division by zero” message.  And ‘0 **
     -1’ operation uses “zero to a negative power”.

   - gh-118844(158): Corrige falhas de construção ao configurar com
     ‘--disable-gil’ e ‘--enable-experimental-jit’.

   - gh-118921(159): Adiciona o método ‘copy()’ para ‘FrameLocalsProxy’
     que retorna um ‘dict’ para variáveis locais.

   - gh-117657(160): 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-118750(161): If the C version of the ‘decimal’ module is
     available, ‘int(str)’ now uses it to supply an asymptotically much
     faster conversion.  However, this only applies if the string
     contains over about 2 million digits.

   - gh-118767(162): Using *note NotImplemented: 1a2. in a boolean
     context now raises *note TypeError: 198.  Contributed by Jelle
     Zijlstra.

   - gh-118561(163): Fix race condition in free-threaded build where
     *note list.extend(): 5f6. could expose uninitialised memory to
     concurrent readers.

   - gh-117139(164): Convert the Python evaluation stack to use internal
     stack references.  The purpose is to support tagged pointers.  In
     PEP 703(165), this will allow for its form of deferred reference
     counting.  For both the default and free-threaded builds, this sets
     up the infrastructure for unboxed integers in the future.

   - gh-115801(166): Raise ‘TypeError’ when passing a string to *note
     difflib.unified_diff(): 18cd. and *note difflib.context_diff():
     18ce.

   - gh-117558(167): Improve error messages when a string, bytes or
     bytearray object of length 1 is expected.

   - gh-117195(168): Evita falha de asserção para construções de
     depuração ao chamar ‘object.__sizeof__(1)’

   - gh-116022(169): Improve the *note __repr__(): 824. output of *note
     AST: 4bd. nodes.

   - gh-114091(170): Changed the error message for awaiting something
     that can’t be awaited from “object <type> can’t be used in an await
     expression” to “’<type>’ object can’t be awaited”.

   - gh-113190(171): *note Py_Finalize(): 45c. now deletes all interned
     strings.

   - gh-84978(172): Add class methods *note float.from_number(): 194.
     and *note complex.from_number(): 195.

   - gh-95144(173): Improve the error message from ‘a in b’ when ‘b’ is
     not a container to mention the term “container”.

   - bpo-24766(174): Corrige manipulação do argumento ‘doc’ para
     subclasses de ‘property’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124375

   (2) https://github.com/python/cpython/issues/125221

   (3) https://github.com/python/cpython/issues/125174

   (4) https://github.com/python/cpython/issues/125039

   (5) https://github.com/python/cpython/issues/125008

   (6) https://github.com/python/cpython/issues/124871

   (7) https://github.com/python/cpython/issues/123378

   (8) https://github.com/python/cpython/issues/118093

   (9) https://github.com/python/cpython/issues/124642

   (10) https://github.com/python/cpython/issues/116510

   (11) https://github.com/python/cpython/issues/116510

   (12) https://github.com/python/cpython/issues/119180

   (13) https://github.com/python/cpython/issues/124547

   (14) https://github.com/python/cpython/issues/124513

   (15) https://github.com/python/cpython/issues/124442

   (16) https://github.com/python/cpython/issues/124285

   (17) https://github.com/python/cpython/issues/123856

   (18) https://github.com/python/cpython/issues/65961

   (19) https://github.com/python/cpython/issues/119726

   (20) https://github.com/python/cpython/issues/122878

   (21) https://github.com/python/cpython/issues/124188

   (22) https://github.com/python/cpython/issues/124027

   (23) https://github.com/python/cpython/issues/124022

   (24) https://github.com/python/cpython/issues/123958

   (25) https://github.com/python/cpython/issues/123923

   (26) https://github.com/python/cpython/issues/77894

   (27) https://github.com/python/cpython/issues/120221

   (28) https://github.com/python/cpython/issues/119310

   (29) https://github.com/python/cpython/issues/123572

   (30) https://github.com/python/cpython/issues/123614

   (31) https://github.com/python/cpython/issues/123339

   (32) https://github.com/python/cpython/issues/119034

   (33) https://github.com/python/cpython/issues/123562

   (34) https://github.com/python/cpython/issues/123545

   (35) https://github.com/python/cpython/issues/123484

   (36) https://github.com/python/cpython/issues/123446

   (37) https://github.com/python/cpython/issues/123440

   (38) https://github.com/python/cpython/issues/116017

   (39) https://github.com/python/cpython/issues/123344

   (40) https://github.com/python/cpython/issues/123321

   (41) https://github.com/python/cpython/issues/123177

   (42) https://github.com/python/cpython/issues/122982

   (43) https://github.com/python/cpython/issues/123271

   (44) https://github.com/python/cpython/issues/123275

   (45) https://github.com/python/cpython/issues/123177

   (46) https://github.com/python/cpython/issues/123229

   (47) https://github.com/python/cpython/issues/122298

   (48) https://github.com/python/cpython/issues/121804

   (49) https://github.com/python/cpython/issues/115776

   (50) https://github.com/python/cpython/issues/123142

   (51) https://github.com/python/cpython/issues/123048

   (52) https://github.com/python/cpython/issues/118093

   (53) https://github.com/python/cpython/issues/123123

   (54) https://github.com/python/cpython/issues/123083

   (55) https://github.com/python/cpython/issues/123022

   (56) https://github.com/python/cpython/issues/118093

   (57) https://github.com/python/cpython/issues/122821

   (58) https://github.com/python/cpython/issues/122907

   (59) https://github.com/python/cpython/issues/122888

   (60) https://github.com/python/cpython/issues/118093

   (61) https://github.com/python/cpython/issues/122697

   (62) https://github.com/python/cpython/issues/116622

   (63) https://github.com/python/cpython/issues/122527

   (64) https://github.com/python/cpython/issues/122445

   (65) https://github.com/python/cpython/issues/122417

   (66) https://github.com/python/cpython/issues/116090

   (67) https://github.com/python/cpython/issues/122300

   (68) https://github.com/python/cpython/issues/120906

   (69) https://github.com/python/cpython/issues/122239

   (70) https://github.com/python/cpython/issues/122245

   (71) https://github.com/python/cpython/issues/122234

   (72) https://github.com/python/cpython/issues/122208

   (73) https://github.com/python/cpython/issues/122160

   (74) https://github.com/python/cpython/issues/122029

   (75) https://github.com/python/cpython/issues/122026

   (76) https://github.com/python/cpython/issues/99108

   (77) https://github.com/python/cpython/issues/121999

   (78) https://github.com/python/cpython/issues/121860

   (79) https://github.com/python/cpython/issues/121795

   (80) https://github.com/python/cpython/issues/121814

   (81) https://github.com/python/cpython/issues/121295

   (82) https://github.com/python/cpython/issues/121794

   (83) https://github.com/python/cpython/issues/121657

   (84) https://github.com/python/cpython/issues/121609

   (85) https://github.com/python/cpython/issues/121297

   (86) https://github.com/python/cpython/issues/117482

   (87) https://github.com/python/cpython/issues/121562

   (88) https://github.com/python/cpython/issues/121499

   (89) https://github.com/python/cpython/issues/121497

   (90) https://github.com/python/cpython/issues/121012

   (91) https://github.com/python/cpython/issues/121439

   (92) https://github.com/python/cpython/issues/121288

   (93) https://github.com/python/cpython/issues/121368

   (94) https://github.com/python/cpython/issues/121149

   (95) https://github.com/python/cpython/issues/121130

   (96) https://github.com/python/cpython/issues/121381

   (97) https://github.com/python/cpython/issues/119726

   (98) https://github.com/python/cpython/issues/121115

   (99) https://github.com/python/cpython/issues/120838

   (100) https://github.com/python/cpython/issues/113433

   (101) https://github.com/python/cpython/issues/119726

   (102) https://github.com/python/cpython/issues/116017

   (103) https://github.com/python/cpython/issues/98442

   (104) https://github.com/python/cpython/issues/120754

   (105) https://github.com/python/cpython/issues/119462

   (106) https://github.com/python/cpython/issues/120437

   (107) https://github.com/python/cpython/issues/118322

   (108) https://github.com/python/cpython/issues/120722

   (109) https://github.com/python/cpython/issues/120367

   (110) https://github.com/python/cpython/issues/120507

   (111) https://github.com/python/cpython/issues/113993

   (112) https://github.com/python/cpython/issues/120485

   (113) https://github.com/python/cpython/issues/120384

   (114) https://github.com/python/cpython/issues/120367

   (115) https://github.com/python/cpython/issues/120380

   (116) https://github.com/python/cpython/issues/120397

   (117) https://github.com/python/cpython/issues/120221

   (118) https://github.com/python/cpython/issues/120346

   (119) https://github.com/python/cpython/issues/93691

   (120) https://github.com/python/cpython/issues/120198

   (121) https://github.com/python/cpython/issues/120298

   (122) https://github.com/python/cpython/issues/119666

   (123) https://github.com/python/cpython/issues/119726

   (124) https://github.com/python/cpython/issues/120225

   (125) https://github.com/python/cpython/issues/93691

   (126) https://github.com/python/cpython/issues/120097

   (127) https://github.com/python/cpython/issues/120080

   (128) https://github.com/python/cpython/issues/119933

   (129) https://github.com/python/cpython/issues/119724

   (130) https://github.com/python/cpython/issues/119879

   (131) https://github.com/python/cpython/issues/119842

   (132) https://github.com/python/cpython/issues/119180

   (133) https://peps.python.org/pep-0649/

   (134) https://github.com/python/cpython/issues/119821

   (135) https://github.com/python/cpython/issues/118934

   (136) https://github.com/python/cpython/issues/119740

   (137) https://github.com/python/cpython/issues/119689

   (138) https://github.com/python/cpython/issues/109218

   (139) https://github.com/python/cpython/issues/119548

   (140) https://github.com/python/cpython/issues/111999

   (141) https://github.com/python/cpython/issues/119560

   (142) https://github.com/python/cpython/issues/119369

   (143) https://github.com/python/cpython/issues/119525

   (144) https://github.com/python/cpython/issues/119258

   (145) https://github.com/python/cpython/issues/119311

   (146) https://github.com/python/cpython/issues/119395

   (147) https://github.com/python/cpython/issues/119372

   (148) https://github.com/python/cpython/issues/119180

   (149) https://peps.python.org/pep-0649/

   (150) https://github.com/python/cpython/issues/119180

   (151) https://github.com/python/cpython/issues/119213

   (152) https://github.com/python/cpython/issues/119011

   (153) https://github.com/python/cpython/issues/118692

   (154) https://github.com/python/cpython/issues/119180

   (155) https://peps.python.org/pep-0649/

   (156) https://github.com/python/cpython/issues/119049

   (157) https://github.com/python/cpython/issues/119057

   (158) https://github.com/python/cpython/issues/118844

   (159) https://github.com/python/cpython/issues/118921

   (160) https://github.com/python/cpython/issues/117657

   (161) https://github.com/python/cpython/issues/118750

   (162) https://github.com/python/cpython/issues/118767

   (163) https://github.com/python/cpython/issues/118561

   (164) https://github.com/python/cpython/issues/117139

   (165) https://peps.python.org/pep-0703/

   (166) https://github.com/python/cpython/issues/115801

   (167) https://github.com/python/cpython/issues/117558

   (168) https://github.com/python/cpython/issues/117195

   (169) https://github.com/python/cpython/issues/116022

   (170) https://github.com/python/cpython/issues/114091

   (171) https://github.com/python/cpython/issues/113190

   (172) https://github.com/python/cpython/issues/84978

   (173) https://github.com/python/cpython/issues/95144

   (174) https://bugs.python.org/issue?@action=redirect&bpo=24766


File: python.info,  Node: API C<13>,  Next: Construção<14>,  Prev: Núcleo e embutidos<15>,  Up: Python 3 14 0 alpha 1

1.24.16.10 API C
................

   - gh-123961(1): Convert the *note curses.window: 18d0. static type
     exposed by the ‘PyCursesWindow_Type’ macro in ‘Include/py_curses.h’
     to a *note heap type: b54.  Patch by Bénédikt Tran.

   - gh-124502(2): Add *note PyUnicode_Equal(): 3af. function to the
     limited C API: test if two strings are equal.  Patch by Victor
     Stinner.

   - gh-124296(3): *note PyDictObject: 643. no longer maintains a
     private version tag field ‘ma_version_tag’ per PEP 699(4).  This
     field was originally added in Python 3.6 ( PEP 509(5)) and
     deprecated in Python 3.12.

   - gh-124160(6): Corrige travamento ao importar módulos contendo
     inicialização de estado e fase única em um subinterpretador.

   - gh-124153(7): Add *note PyType_GetBaseByToken(): 3ad. and *note
     Py_tp_token: 3ae. slot for easier type checking, related to PEP
     489(8) and PEP 630(9).

   - gh-124127(10): In the limited C API 3.14 and newer, *note
     Py_REFCNT(): 2ce. is now implemented as an opaque function call to
     hide implementation details.  Patch by Victor Stinner.

   - gh-123880(11): Corrige um bug que impedia importações circulares de
     módulos de extensão que usam inicialização de fase única.

   - gh-123909(12): *note PyType_FromSpec(): 792, *note
     PyType_FromSpecWithBases(): 793. and *note
     PyType_FromModuleAndSpec(): 768. will now fail if the metaclass of
     the new type has custom *note tp_new: 794.

   - gh-107954(13): Add functions to configure the Python initialization
     ( PEP 741(14)):

        * *note PyInitConfig_Create(): 384.

        * *note PyInitConfig_Free(): 385.

        * *note PyInitConfig_GetError(): 387.

        * *note PyInitConfig_GetExitCode(): 388.

        * *note PyInitConfig_HasOption(): 38c.

        * *note PyInitConfig_GetInt(): 389.

        * *note PyInitConfig_GetStr(): 38a.

        * *note PyInitConfig_GetStrList(): 38b.

        * *note PyInitConfig_FreeStrList(): 386.

        * *note PyInitConfig_SetInt(): 38d.

        * *note PyInitConfig_SetStr(): 38e.

        * *note PyInitConfig_SetStrList(): 38f.

        * *note PyInitConfig_AddModule(): 378.

        * *note Py_InitializeFromInitConfig(): 383.

     Patch por Victor Stinner.

   - gh-107954(15): Add functions to get and set the current runtime
     Python configuration:

        * *note PyConfig_Get(): 379.

        * *note PyConfig_GetInt(): 381.

        * *note PyConfig_Set(): 37a.

        * *note PyConfig_Names(): 382.

     Patch por Victor Stinner.

   - gh-123465(16): *note Py_RELATIVE_OFFSET: 765. is now allowed in
     *note PyMemberDef: 766. for the special offset member
     ‘"__vectorcalloffset__"’, as well as the discouraged special offset
     members ‘"__dictoffset__"’ and ‘"__weaklistoffset__"’

   - gh-100554(17): Added a slot ‘Py_tp_vectorcall’ to set *note
     tp_vectorcall: 18d1. via the *note PyType_FromSpec(): 792. function
     family.  Limited API extensions can use this feature to provide
     more efficient vector call-based implementation of ‘__new__’ and
     ‘__init__’.

   - gh-122854(18): Add *note Py_HashBuffer(): 392. to compute and
     return the hash value of a buffer.  Patch by Antoine Pitrou and
     Victor Stinner.

   - gh-122728(19): Corrige *note PyEval_GetLocals(): 5ec. para evitar
     *note SystemError: 78a. (“argumento ruim para função interna”).
     Patch por Victor Stinner.

   - gh-116622(20): Faz *note PyObject_Print: 18d2. contornar um bug no
     Android e OpenBSD que o impedia de levantar uma exceção ao tentar
     gravar em um fluxo somente leitura.

   - gh-105201(21): Add *note PyIter_NextItem(): 395. to replace *note
     PyIter_Next(): 396, which has an ambiguous return value.  Patch by
     Irit Katriel and Erlend Aasland.

   - gh-121489(22): Exporta ‘_PyBytes_Join()’ privada novamente.

   - gh-121645(23): Add *note PyBytes_Join(sep, iterable): 380.
     function, similar to ‘sep.join(iterable)’ in Python.  Patch by
     Victor Stinner.

   - gh-89364(24): Exporta a função *note PySignal_SetWakeupFd(): 15cc.
     Anteriormente, a função era documentada, mas não podia ser usada em
     código de terceiros.  Patch por Victor Stinner.

   - gh-113993(25): *note PyUnicode_InternInPlace(): aa4. 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(): 18d3, *note PyDict_SetItemString():
     18d4, *note PyObject_SetAttrString(): 18d5, *note
     PyObject_DelAttrString(): 179a, *note PyUnicode_InternFromString():
     18d3. e funções de conveniência ‘PyModule_Add*’.

   - gh-113601(26): 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(27): 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.

   - gh-120642(28): 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(29): *note PyDict_Next(): 18d6. 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(30): 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-120389(31): Add new functions to convert C ‘<stdint.h>’ numbers
     from/to Python *note int: 19b.:

        * *note PyLong_FromInt32(): 3a0.

        * *note PyLong_FromUInt32(): 3a2.

        * *note PyLong_FromInt64(): 3a1.

        * *note PyLong_FromUInt64(): 3a3.

        * *note PyLong_AsInt32(): 39c.

        * *note PyLong_AsUInt32(): 39e.

        * *note PyLong_AsInt64(): 39d.

        * *note PyLong_AsUInt64(): 39f.

     Patch por Victor Stinner.

   - gh-120600(32): In the limited C API 3.14 and newer, *note
     Py_TYPE(): 3c6. is now implemented as an opaque function call to
     hide implementation details.  Patch by Victor Stinner.

   - gh-70278(33): *note PyUnicode_FromFormat(): 61f. no longer produces
     the ending ‘\ufffd’ character for truncated C string when use
     precision with ‘%s’ and ‘%V’.  It now truncates the string before
     the start of truncated multibyte sequences.

   - gh-119771(34): Set *note errno: 5b. in *note _Py_c_pow(): 184a. on
     overflows.  Patch by Sergey B Kirpichev.

   - gh-119182(35): Add a new *note PyUnicodeWriter: 3b0. API to create
     a Python *note str: 169. object:

        * *note PyUnicodeWriter_Create(): 3b1.

        * *note PyUnicodeWriter_Discard(): 3b3.

        * *note PyUnicodeWriter_Finish(): 3b4.

        * *note PyUnicodeWriter_WriteChar(): 3b7.

        * *note PyUnicodeWriter_WriteUTF8(): 3bc.

        * *note PyUnicodeWriter_WriteUCS4(): 3bb.

        * *note PyUnicodeWriter_WriteWideChar(): 3bd.

        * *note PyUnicodeWriter_WriteStr(): 3b9.

        * *note PyUnicodeWriter_WriteRepr(): 3b8.

        * *note PyUnicodeWriter_WriteSubstring(): 3ba.

        * *note PyUnicodeWriter_Format(): 3b5.

        * *note PyUnicodeWriter_DecodeUTF8Stateful(): 3b2.

     Patch por Victor Stinner.

   - gh-119613(36): Soft deprecate the ‘Py_MEMCPY’ macro: use directly
     ‘memcpy()’ instead.  Patch by Victor Stinner.

   - gh-119775(37): Creating *note immutable types: 3cc. with mutable
     bases was deprecated since 3.12 and now raises a *note TypeError:
     198.

   - gh-119585(38): Corrige travamento quando um estado de thread que
     foi criado por *note PyGILState_Ensure(): 63e. chama um destruidor
     que durante *note PyThreadState_Clear(): 18d7. chama de volta para
     *note PyGILState_Ensure(): 63e. e *note PyGILState_Release(): 63f.
     Isso pode ocorrer quando na construção com threads livres ou ao
     usar variáveis de thread local cujos destruidores chamam *note
     PyGILState_Ensure(): 63e.

   - gh-119613(39): Macros ‘Py_IS_NAN’, ‘Py_IS_INFINITY’ and
     ‘Py_IS_FINITE’ are *note soft deprecated: 23c.

   - gh-119336(40): Restaura a função ‘_PyLong_NumBits()’ removida.  Ela
     é usada pelo projeto pywin32.  Patch por Ethan Smith

   - gh-119344(41): A API da seção crítica agora é pública como parte da
     API C não limitada.

   - gh-119333(42): Add *note PyContext_AddWatcher(): 18d8. and *note
     PyContext_ClearWatcher(): 18d9. APIs to register callbacks to
     receive notification on enter and exit of context objects.

   - gh-119247(43): 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(44): Adicionar constante *note PyHASH_MULTIPLIER: 18da.:
     multiplicador primo usado em string e vários outros hashes.  Patch
     por Victor Stinner.

   - gh-118771(45): Several C declarations with names that didn’t start
     with the ‘Py’ or ‘_Py’ prefixes, which were added by mistake in
     3.13 alpha and beta releases, were moved to internal headers.

   - gh-116984(46): 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(47): Adiciona *note
     PyUnstable_Object_ClearWeakRefsNoCallbacks(): 18db, que limpa
     weakrefs sem chamar seus callbacks.

   - gh-118789(48): Restaura ‘_PyWeakref_ClearRef’ que foi removido
     anteriormente no Python 3.13 alpha 1.

   - gh-117511(49): Torna o *note PyMutex: 47e. público na API C não
     limitada.

   - gh-116560(50): Add *note PyLong_GetSign(): 397. function.  Patch by
     Sergey B Kirpichev.

   - gh-97588(51): Fix creating bitfields in *note ctypes: 2e.
     structures and unions.  Fields no longer overlap.

   - gh-87135(52): 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.

     The ‘PyThread_exit_thread’ function is now deprecated.  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.

   - bpo-34008(53): 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/123961

   (2) https://github.com/python/cpython/issues/124502

   (3) https://github.com/python/cpython/issues/124296

   (4) https://peps.python.org/pep-0699/

   (5) https://peps.python.org/pep-0509/

   (6) https://github.com/python/cpython/issues/124160

   (7) https://github.com/python/cpython/issues/124153

   (8) https://peps.python.org/pep-0489/

   (9) https://peps.python.org/pep-0630/

   (10) https://github.com/python/cpython/issues/124127

   (11) https://github.com/python/cpython/issues/123880

   (12) https://github.com/python/cpython/issues/123909

   (13) https://github.com/python/cpython/issues/107954

   (14) https://peps.python.org/pep-0741/

   (15) https://github.com/python/cpython/issues/107954

   (16) https://github.com/python/cpython/issues/123465

   (17) https://github.com/python/cpython/issues/100554

   (18) https://github.com/python/cpython/issues/122854

   (19) https://github.com/python/cpython/issues/122728

   (20) https://github.com/python/cpython/issues/116622

   (21) https://github.com/python/cpython/issues/105201

   (22) https://github.com/python/cpython/issues/121489

   (23) https://github.com/python/cpython/issues/121645

   (24) https://github.com/python/cpython/issues/89364

   (25) https://github.com/python/cpython/issues/113993

   (26) https://github.com/python/cpython/issues/113601

   (27) https://github.com/python/cpython/issues/112136

   (28) https://github.com/python/cpython/issues/120642

   (29) https://github.com/python/cpython/issues/120858

   (30) https://github.com/python/cpython/issues/120642

   (31) https://github.com/python/cpython/issues/120389

   (32) https://github.com/python/cpython/issues/120600

   (33) https://github.com/python/cpython/issues/70278

   (34) https://github.com/python/cpython/issues/119771

   (35) https://github.com/python/cpython/issues/119182

   (36) https://github.com/python/cpython/issues/119613

   (37) https://github.com/python/cpython/issues/119775

   (38) https://github.com/python/cpython/issues/119585

   (39) https://github.com/python/cpython/issues/119613

   (40) https://github.com/python/cpython/issues/119336

   (41) https://github.com/python/cpython/issues/119344

   (42) https://github.com/python/cpython/issues/119333

   (43) https://github.com/python/cpython/issues/119247

   (44) https://github.com/python/cpython/issues/111389

   (45) https://github.com/python/cpython/issues/118771

   (46) https://github.com/python/cpython/issues/116984

   (47) https://github.com/python/cpython/issues/118789

   (48) https://github.com/python/cpython/issues/118789

   (49) https://github.com/python/cpython/issues/117511

   (50) https://github.com/python/cpython/issues/116560

   (51) https://github.com/python/cpython/issues/97588

   (52) https://github.com/python/cpython/issues/87135

   (53) https://bugs.python.org/issue?@action=redirect&bpo=34008


File: python.info,  Node: Construção<14>,  Prev: API C<13>,  Up: Python 3 14 0 alpha 1

1.24.16.11 Construção
.....................

   - gh-125269(1): Corrige a detecção de se ‘-latomic’ é necessário ao
     fazer compilação cruzada do CPython usando o script configure.

   - gh-123990(2): Remove ‘WITH_FREELISTS’ macro and
     ‘--without-freelists’ build configuration

   - gh-124102(3): Update internal documentation under PCbuild, so it
     now correctly states that Windows requires VS2017 or later and
     Python 3.10 or later

   - gh-124043(4): Construir usando *note -with-trace-refs: 62a. é
     (temporariamente) proibido quando a GIL está desabilitado.

   - gh-123418(5): Atualizada construção do Android para usar OpenSSL
     3.0.15.

   - gh-123297(6): Propaga o valor de ‘LDFLAGS’ para ‘LDCXXSHARED’ em
     *note sysconfig: e1.  Patch por Pablo Galindo

   - gh-121634(7): Permite especificar o triplo de compilação de destino
     para WASI.

   - gh-122578(8): Usa WASI SDK 24 para testes.

   - gh-116622(9): 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(10): 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-121996(11): Introduce ./configure –disable-safety and
     –enable-slower-safety options.  Patch by Donghee Na.

   - gh-120522(12): Adicionada uma opção *note
     -with-app-store-compliance: 18dd. para corrigir problemas
     conhecidos com processos de revisão da App Store do macOS/iOS.

   - gh-120371(13): Suporta WASI SDK 22 ignorando explicitamente funções
     que são apenas stubs em wasi-libc.

   - gh-121731(14): Corrige erro de construção mimalloc no GNU/Hurd

   - gh-121487(15): Corrige aviso de descontinuação para ATOMIC_VAR_INIT
     em mimalloc.

   - gh-121467(16): Corrige um bug do Makefile que impedia a instalação
     de arquivos de cabeçalho mimalloc.

   - gh-121103(17): 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(18): A versão mínima padrão do iOS foi aumentada para
     13.0.

   - gh-121082(19): Fix build failure when the developer use
     ‘--enable-pystats’ arguments in configuration command after
     #118450.

   - gh-120671(20): Corrige testes de configuração com falha devido a um
     espaço ausente ao anexar a CFLAGS.

   - gh-120602(21): Manipula corretamente instalações LLVM com
     ‘LLVM_VERSION_SUFFIX’ ao construir com ‘--enable-experimental-jit’.

   - gh-120688(22): On WASI in debug mode, Python is now built with
     compiler flag ‘-O3’ instead of ‘-Og’, to support more recursive
     calls.  Patch by Victor Stinner.

   - gh-118943(23): Corrige uma possível condição de corrida afetando
     construções paralelas configuradas com ‘--enable-experimental-jit’,
     em que *note FileNotFoundError: 263. poderia ser causado por outro
     processo que já estava movendo ‘jit_stencils.h.new’ para
     ‘jit_stencils.h’.

   - gh-120326(24): No Windows, corrige o erro de construção quando as
     opções ‘--disable-gil’ e ‘--experimental-jit’ são combinadas.

   - gh-120291(25): Torna o script de shell ‘python-config’ compatível
     com shells além do bash.

   - gh-113565(26): Melhora as verificações de dependência *note curses:
     2f. e *note curses.panel: 31. em ‘configure’.

   - gh-119729(27): 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-119400(28): ‘make_ssl_certs’, the script that prepares
     certificate data for the test suite, now allows specifying
     expiration dates.

   - gh-115119(29): Retorna ao libmpdec empacotado se uma versão do
     sistema não puder ser encontrada.

   - gh-119132(30): Atualiza *note sys.version: 496. para identificar se
     a construção é a construção padrão ou a construção com threads
     livres.  Patch por Donghee Na.

   - gh-118836(31): Corrige um ‘AssertionError’ ao construir com
     ‘--enable-experimental-jit’ e o compilador emite uma seção
     ‘SHT_NOTE’.

   - gh-118943(32): 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/125269

   (2) https://github.com/python/cpython/issues/123990

   (3) https://github.com/python/cpython/issues/124102

   (4) https://github.com/python/cpython/issues/124043

   (5) https://github.com/python/cpython/issues/123418

   (6) https://github.com/python/cpython/issues/123297

   (7) https://github.com/python/cpython/issues/121634

   (8) https://github.com/python/cpython/issues/122578

   (9) https://github.com/python/cpython/issues/116622

   (10) https://github.com/python/cpython/issues/118943

   (11) https://github.com/python/cpython/issues/121996

   (12) https://github.com/python/cpython/issues/120522

   (13) https://github.com/python/cpython/issues/120371

   (14) https://github.com/python/cpython/issues/121731

   (15) https://github.com/python/cpython/issues/121487

   (16) https://github.com/python/cpython/issues/121467

   (17) https://github.com/python/cpython/issues/121103

   (18) https://github.com/python/cpython/issues/120831

   (19) https://github.com/python/cpython/issues/121082

   (20) https://github.com/python/cpython/issues/120671

   (21) https://github.com/python/cpython/issues/120602

   (22) https://github.com/python/cpython/issues/120688

   (23) https://github.com/python/cpython/issues/118943

   (24) https://github.com/python/cpython/issues/120326

   (25) https://github.com/python/cpython/issues/120291

   (26) https://github.com/python/cpython/issues/113565

   (27) https://github.com/python/cpython/issues/119729

   (28) https://github.com/python/cpython/issues/119400

   (29) https://github.com/python/cpython/issues/115119

   (30) https://github.com/python/cpython/issues/119132

   (31) https://github.com/python/cpython/issues/118836

   (32) https://github.com/python/cpython/issues/118943


File: python.info,  Node: Python 3 13 0 beta 1,  Next: Python 3 13 0 alpha 6,  Prev: Python 3 14 0 alpha 1,  Up: Changelog

1.24.17 Python 3.13.0 beta 1
----------------------------

'Data de lançamento: 2024-05-08'

* Menu:

* Segurança: Segurança<15>.
* Núcleo e embutidos: Núcleo e embutidos<16>.
* Biblioteca: Biblioteca<17>.
* Documentação: Documentação<12>.
* Construção: Construção<15>.
* Windows: Windows<12>.
* macOS: macOS<8>.
* IDLE: IDLE<7>.
* API C: API C<14>.


File: python.info,  Node: Segurança<15>,  Next: Núcleo e embutidos<16>,  Up: Python 3 13 0 beta 1

1.24.17.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: 6c. 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<16>,  Next: Biblioteca<17>,  Prev: Segurança<15>,  Up: Python 3 13 0 beta 1

1.24.17.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.

   - gh-95382(4): Melhora o desempenho de *note json.dumps(): f35. e
     *note json.dump(): f34. ao usar o argumento 'indent'.  Dependendo
     dos dados, a codificação usando *note json.dumps(): f35. com
     'indent' pode ser de 2 a 3 vezes mais rápida.

   - gh-116322(5): 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(6): Corrige *note UnboundLocalError: 1724. 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(7): 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(8): 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(9): Interrompe um laço entre a implementação Python do
     módulo *note decimal: 3a. 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(10): Corrige *note sys.set_asyncgen_hooks(): 18e1. para
     não ser parcialmente definido ao levantar *note TypeError: 198.

   - gh-118465(11): 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(12): Corrige um problema em que o cache de tipos pode
     expor um atributo acessado anteriormente quando um finalizador é
     executado.

   - gh-117714(13): atualiza ‘async_generator.athrow().close()’ e
     ‘async_generator.asend().close()’ para fechar sua seção do gerador
     assíncrono subjacente

   - gh-111201(14): O interpretador *note interativo: 1b5. 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(15): Implementa PEP 667: convertido *note
     FrameType.f_locals: 49f. e *note PyFrame_GetLocals(): 655. para
     retornar um objeto proxy de gravação quando o quadro se refere a
     uma função ou compreensão.

   - gh-116767(16): Corrige travamento no compilador em ‘async with’ que
     tem muitos gerenciadores de contexto.

   - gh-118335(17): 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(18): Atualiza a compilação JIT para usar LLVM 18

   - gh-118160(19): *note Escopos de anotação: 4a5. 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(20): Corrige bug onde ‘generator.close’ não libera os
     locais do quadro do gerador.

   - gh-118216(21): Não considera importações *note __future__: 0. com
     pontos antes do nome do módulo.

   - gh-118074(22): Garante que os objetos Executor no array COLD_EXITS
     não sejam considerados GC-able (o que acessaria bytes fora do
     objeto).

   - gh-107674(23): Usa carregamento preguiçoso do número da linha do
     quadro para melhorar o desempenho do rastreamento

   - gh-118082(24): Melhora a mensagem *note SyntaxError: 18e. para
     importações sem nomes, como nos casos ‘from x import’ e ‘import’.
     Agora, ele indica aos usuários que *note import: 7ed. espera pelo
     menos um nome depois dele.

   - gh-118090(25): Melhora a mensagem *note SyntaxError: 18e. para
     colchetes de parâmetros de tipo vazios.

   - gh-117958(26): 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(27): Adiciona uma opção para o codegen do compilador para
     salvar sequências de instruções aninhadas para introspecção.

   - gh-116622(28): Redireciona stdout e stderr para o log do sistema
     quando incorporado em um aplicativo Android.

   - gh-109118(29): *note o escopo de anotação: 4a5. dentro de escopos
     de classe agora pode conter lambdas.

   - gh-117894(30): Impede que objetos ‘agen.aclose()’ sejam
     reutilizados após ‘.throw()’.

   - gh-117881(31): impede acesso simultâneo a um gerador assíncrono via
     athrow().throw() ou asend().throw()

   - gh-117536(32): Corrige um *note RuntimeWarning: 4d1. ao chamar
     ‘agen.aclose().throw(Exception)’.

   - gh-117755(33): 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(34): 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(35): Melhora o desempenho dos seguintes métodos *note
     bytes: 192. e *note bytearray: 342. adaptando-os à convenção de
     chamada *note METH_FASTCALL: 18e2.:

        * ‘count()’

        * ‘find()’

        * ‘index()’

        * ‘rfind()’

        * ‘rindex()’

   - gh-117709(36): Acelera as chamadas para *note str(): 169. com
     argumento somente posicional, usando a convenção de chamada PEP
     590(37) ‘vectorcall’.  Patch por Erlend Aasland.

   - gh-117680(38): Dá a ‘_PyInstructionSequence’ uma interface Python e
     use-a em testes.

   - gh-115776(39): 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(40): Remove eventos ‘PY_MONITORING_EVENT_BRANCH’ e
     ‘PY_MONITORING_EVENT_EXCEPTION_HANDLED’ não manipulados de *note
     sys.settrace(): 2e0.

   - gh-116322(41): 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(42): Implementa PEP 696(43), adicionando suporte para
     padrões em parâmetros de tipo.  Patch por Jelle Zijlstra.

   - gh-93502(44): Adiciona duas novas funções à API C, *note
     PyRefTracer_SetTracer(): 604. e *note PyRefTracer_GetTracer(): 605,
     que permite rastrear a criação e destruição de objetos da mesma
     forma que o módulo *note tracemalloc: 105. faz.  Patch por Pablo
     Galindo

   - gh-107674(45): Melhora significativamente o desempenho de *note
     sys.settrace(): 2e0.

   - gh-95754(46): Melhora a mensagem de erro quando um script que faz
     shadowing de um módulo da biblioteca padrão faz com que *note
     AttributeError: 5e4. 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(47): Elimina indicadores de traceback não informativos em
     instruções ‘return’ e ‘assignment’ simples.  Patch por Pablo
     Galindo.

   - gh-105879(48): Permite que os argumentos 'globals' e 'locals' para
     *note exec(): 49c. e *note eval(): 49d. sejam passados como
     nomeados.

   ---------- 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

   (4) https://github.com/python/cpython/issues/95382

   (5) https://github.com/python/cpython/issues/116322

   (6) https://github.com/python/cpython/issues/118513

   (7) https://github.com/python/cpython/issues/118518

   (8) https://github.com/python/cpython/issues/117514

   (9) https://github.com/python/cpython/issues/118164

   (10) https://github.com/python/cpython/issues/118473

   (11) https://github.com/python/cpython/issues/118465

   (12) https://github.com/python/cpython/issues/118492

   (13) https://github.com/python/cpython/issues/117714

   (14) https://github.com/python/cpython/issues/111201

   (15) https://github.com/python/cpython/issues/74929

   (16) https://github.com/python/cpython/issues/116767

   (17) https://github.com/python/cpython/issues/118335

   (18) https://github.com/python/cpython/issues/118306

   (19) https://github.com/python/cpython/issues/118160

   (20) https://github.com/python/cpython/issues/118272

   (21) https://github.com/python/cpython/issues/118216

   (22) https://github.com/python/cpython/issues/118074

   (23) https://github.com/python/cpython/issues/107674

   (24) https://github.com/python/cpython/issues/118082

   (25) https://github.com/python/cpython/issues/118090

   (26) https://github.com/python/cpython/issues/117958

   (27) https://github.com/python/cpython/issues/117901

   (28) https://github.com/python/cpython/issues/116622

   (29) https://github.com/python/cpython/issues/109118

   (30) https://github.com/python/cpython/issues/117894

   (31) https://github.com/python/cpython/issues/117881

   (32) https://github.com/python/cpython/issues/117536

   (33) https://github.com/python/cpython/issues/117755

   (34) https://github.com/python/cpython/issues/117750

   (35) https://github.com/python/cpython/issues/117431

   (36) https://github.com/python/cpython/issues/117709

   (37) https://peps.python.org/pep-0590/

   (38) https://github.com/python/cpython/issues/117680

   (39) https://github.com/python/cpython/issues/115776

   (40) https://github.com/python/cpython/issues/117385

   (41) https://github.com/python/cpython/issues/116322

   (42) https://github.com/python/cpython/issues/116129

   (43) https://peps.python.org/pep-0696/

   (44) https://github.com/python/cpython/issues/93502

   (45) https://github.com/python/cpython/issues/107674

   (46) https://github.com/python/cpython/issues/95754

   (47) https://github.com/python/cpython/issues/99180

   (48) https://github.com/python/cpython/issues/105879


File: python.info,  Node: Biblioteca<17>,  Next: Documentação<12>,  Prev: Núcleo e embutidos<16>,  Up: Python 3 13 0 beta 1

1.24.17.3 Biblioteca
....................

   - gh-118418(1): Uma *note DeprecationWarning: 1a3. 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: e7f. e *note
     typing.AsyncContextManager: 18e4, representando os tipos de retorno
     de *note __exit__(): 14fc. e *note __aexit__(): 18e5.
     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: 18e6. e *note typing.AsyncGenerator: 18e7.

   - gh-101137(5): O tipo MIME ‘text/x-rst’ agora é suportado por *note
     mimetypes: 93.

   - 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: aa. para zipapps

   - gh-118406(9): Adiciona assinatura para objetos *note
     sqlite3.Connection: 547.

   - gh-101732(10): Usa uma função de tempo openssl compatível com Y2038
     quando disponível.

   - gh-118404(11): Corrige *note inspect.signature(): 22e. para
     chamáveis não comparáveis.

   - gh-118402(12): Corrige *note inspect.signature(): 22e. para o
     resultado da chamada *note functools.cmp_to_key(): 13d6.

   - gh-116622(13): No Android, *note sysconfig.get_platform: 143e.
     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: 1028, *note operator.itemgetter: c4b. e *note
     operator.methodcaller: 1029.

   - gh-118314(16): Corrige um caso extremo no modo estrito *note
     binascii.a2b_base64(): 18e8, 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(): 549. poderia falhar se um *note row
     factory: 18e9. 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(): 6b1. 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:
     82.  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(): a0c. no caso
     comum em até 1,8x.

   - gh-117486(23): Melhora o comportamento das subclasses definidas
     pelo usuário de *note ast.AST: 4bd.  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: 9. no Python 3.13.
     Patch por Jelle Zijlstra.

   - gh-90848(24): Corrigida *note unittest.mock.create_autospec():
     1886. para configurar o mock pai com argumentos nomeados.

   - gh-118168(25): Corrige a substituição incorreta de argumentos
     quando *note typing.Unpack: 18ea. é usado com a *note tuple: 608.
     embutido.  ‘typing.Unpack’ agora levanta *note TypeError: 198.
     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: bd.  Patch por Hugo van Kemenade.

   - gh-118107(27): Corrige *note zipimport: 138. leitura de arquivos
     ZIP64 com entradas de arquivo muito grandes ou muito deslocadas.

   - gh-102511(28): Corrige *note os.path.normpath(): 1515. para
     caminhos UNC no Windows.  Acelera *note os.path.splitroot(): 6c0.
     com uma implementação nativa.

   - gh-117535(29): Altera o nome de arquivo desconhecido de *note
     warnings: 118. de ‘sys’ para ‘<sys>’ para esclarecer que não é um
     nome de arquivo real.

   - gh-114053(30): Corrige *note NameError: 44f. errôneo ao chamar
     *note typing.get_type_hints(): 8b5. 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(): 18eb.

   - gh-117995(33): Não levanta *note DeprecationWarning: 1a3. quando
     uma *note sequência: 70b. 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(): 13c9. 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: e4. 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(): 531. omitindo uma
     chamada inicial *note is_dir(): 534.  Como resultado dessa
     alteração, *note glob(): 531. não pode mais levantar *note OSError:
     2bf.

   - gh-77102(41): O módulo *note site: cc. agora analisa o arquivo
     ‘.pth’ com UTF-8 primeiro, e *note codificação da localidade: 544.
     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(): 531. não
     escaneando diretórios para segmentos de padrões não curinga.

   - gh-117727(45): Acelera *note pathlib.Path.iterdir(): 26d. usando
     *note os.scandir(): c48. internamente.

   - gh-117586(46): Acelera *note pathlib.Path.walk(): 6c4. trabalhando
     com strings internamente.

   - gh-117722(47): Altera o novo suporte a múltiplos separadores em
     *note asyncio.StreamReader.readuntil(): 4ca. para aceitar apenas
     tuplas de separadores em vez de iteráveis arbitrários.

   - gh-117692(48): Corrige um bug quando *note doctest.DocTestFinder:
     18ec. 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(): 1032. 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(): 18ed.

   - gh-117618(53): Suporte a ‘package.module’ como ‘filename’ para o
     comando ‘break’ de *note pdb: aa.

   - 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(): 6c6.

   - gh-117586(56): Aceleração de *note pathlib.Path.glob(): 531.
     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(): 18ee.
     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():
     261. 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:
     4cb. 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: 4cc, ele agora
     chamará o método *note cancel(): 4cd. da tarefa pai.  Isso garante
     que uma *note asyncio.CancelledError: 4ce. será levantada no
     próximo *note await: 18d, 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(): 4cf.).

     Para lidar com alguns casos extremos, *note
     asyncio.Task.uncancel(): 4d0. 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: 485, 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(): bff. no Posix.

   - gh-117394(64): *note os.path.ismount(): bfd. 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: 3f.
     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():
     510. que funciona com o caminho do arquivo.  Passar o caminho do
     arquivo em vez da URL em *note guess_type(): 511. está *note
     suavemente descontinuado: 23c.

   - 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: 5e4. e
     *note ImportError: 64f. 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(): ad7. 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: 14, *note lzma: 8e, *note tarfile: e4. e *note zipfile: 137.
     O valor do atributo ‘mode’ de *note gzip.GzipFile: 650. 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(): 651. foi alterado de
     ‘'r'’ para ‘'rb'’.

   - gh-82062(73): Corrige *note inspect.signature(): 22e. 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: d. para todos os métodos de
     inicialização *note multiprocessing: 98.

   - gh-113081(75): Imprime exceção colorida assim como o traceback
     embutido em *note pdb: aa.

   - gh-112855(76): Acelera a serialização com pickle de objetos *note
     pathlib.PurePath: 6c2.  Patch por Barney Gale.

   - gh-111744(77): Suporte a eventos de opcode em *note bdb: 10.

   - 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: aa. 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__(): 938. a *note
     types.GeneratorType: 18ef. e *note types.CoroutineType: 107f. para
     fins de dicas de tipo.  Patch por James Hilton-Balfe.

   - gh-108191(81): O *note types.SimpleNamespace: 4df. 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: 7. 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: 18f0. 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: f6. 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(): 542. 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<12>,  Next: Construção<15>,  Prev: Biblioteca<17>,  Up: Python 3 13 0 beta 1

1.24.17.4 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<15>,  Next: Windows<12>,  Prev: Documentação<12>,  Up: Python 3 13 0 beta 1

1.24.17.5 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: 64b.
     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: 3a. se a opção *note
     -with-system-libmpdec: 64b. 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<15>,  Up: Python 3 13 0 beta 1

1.24.17.6 Windows
.................

   - gh-115119(1): Atualiza o instalador do Windows para usar
     libmpdecimal 4.0.0.

   - gh-118486(2): *note os.mkdir(): 525. 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<7>,  Prev: Windows<12>,  Up: Python 3 13 0 beta 1

1.24.17.7 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<7>,  Next: API C<14>,  Prev: macOS<8>,  Up: Python 3 13 0 beta 1

1.24.17.8 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<14>,  Prev: IDLE<7>,  Up: Python 3 13 0 beta 1

1.24.17.9 API C
...............

   - gh-118124(1): Corrige ‘Py_BUILD_ASSERT’ e ‘Py_BUILD_ASSERT_EXPR’
     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(): 5ce.

        * *note PyTime_PerfCounterRaw(): 5d0.

        * *note PyTime_TimeRaw(): 5d2.

     Patch por Victor Stinner.

   - gh-117987(3): Restaura funções removidas no Python 3.13 alpha 1:

        * *note Py_SetPythonHome(): 18f7.

        * *note Py_SetProgramName(): 18f8.

        * *note PySys_SetArgvEx(): 18f9.

        * *note PySys_SetArgv(): 18fa.

     Patch por Victor Stinner.

   - gh-117929(4): Restaura função removida *note PyEval_InitThreads():
     18fb.  Patch por Victor Stinner.

   - gh-117534(5): Melhora a lógica de validação na implementação C de
     *note datetime.datetime.fromisoformat(): 81f. 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.24.18 Python 3.13.0 alpha 6
-----------------------------

'Data de lançamento: 2024-04-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<17>.
* Biblioteca: Biblioteca<18>.
* Documentação: Documentação<13>.
* Testes: Testes<13>.
* Construção: Construção<16>.
* Windows: Windows<13>.
* API C: API C<15>.


File: python.info,  Node: Núcleo e embutidos<17>,  Next: Biblioteca<18>,  Up: Python 3 13 0 alpha 6

1.24.18.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: 192. e *note bytearray: 342. adaptando-os à convenção de
     chamada *note METH_FASTCALL: 18e2.:

        * ‘endswith()’

        * ‘startswith()’

   - gh-117431(4): Melhora o desempenho dos seguintes métodos *note str:
     169. adaptando-os à convenção de chamada *note METH_FASTCALL:
     18e2.:

        * *note count(): 18c9.

        * *note endswith(): 10c2.

        * *note find(): 109e.

        * *note index(): 18fe.

        * *note rfind(): 109f.

        * *note rindex(): 1453.

        * *note startswith(): 10c1.

   - 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: 4bd.  Essas classes agora devem
     definir o atributo ‘_field_types’.

   - gh-99108(8): Atualizado o código C do projeto HACL*(9) do *note
     hashlib: 6c. 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: 18ff.

   - gh-113964(13): Iniciar novas threads e a criação de processos por
     meio de *note os.fork(): 4af. 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: 18ff.

   - 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.

   - gh-109870(20): Dataclasses agora chamam *note exec(): 49c. 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(21): O tipo MIME ‘text/rtf’ agora é suportado por *note
     mimetypes: 93.

   - bpo-24612(22): Melhora o *note SyntaxError: 18e. que acontece
     quando ‘not’ aparece após um operador.  Patch por Pablo Galindo

   ---------- 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

   (20) https://github.com/python/cpython/issues/109870

   (21) https://github.com/python/cpython/issues/97901

   (22) https://bugs.python.org/issue?@action=redirect&bpo=24612


File: python.info,  Node: Biblioteca<18>,  Next: Documentação<13>,  Prev: Núcleo e embutidos<17>,  Up: Python 3 13 0 alpha 6

1.24.18.2 Biblioteca
....................

   - gh-117648(1): Melhora o desempenho de *note os.path.join(): 18ed. e
     *note os.path.expanduser(): bff.

   - gh-117584(2): Raise *note TypeError: 198. for non-paths in *note
     posixpath.relpath: 6c6.

   - gh-117467(3): Preserve mailbox ownership when rewriting in *note
     mailbox.mbox.flush: 1901.  Patch by Tony Mountifield.

   - gh-114848(4): Levanta *note FileNotFoundError: 263. 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: a2c. 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(): 599. e passe um diretório
     para seu argumento 'root_dir'.

   - gh-117349(8): Otimiza várias funções em *note os.path: a6.

   - 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: 4d8. agora aceita
     seções sem nome antes das nomeadas, se configurado para isso.

   - gh-88014(12): Na documentação de *note gzip.GzipFile: 650. 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: d5. 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: dc, 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(): d0f. 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: 3c. 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: 1009.

   - gh-117084(22): Corrige a extração de *note zipfile: 137. para
     entradas de diretório com o nome contendo barras invertidas no
     Windows.

   - gh-117114(23): Torna *note os.path.isdevdrive(): 1902. 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: 8b0. 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(): 18a3. e
     *note time.strptime(): 161e. que sempre falha ao analisar uma
     sequência de datas com um *note ValueError: 2ea. 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(): ed4. 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(): 556. 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: 110. *note parse_qs(): 31d. e *note
     parse_qsl(): 31c.  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: 1903. (veja estas
          documentações para detalhes)

        * *note ipaddress.IPv4Address.is_global: 1155.

        * *note ipaddress.IPv6Address.is_private: 1904.

        * *note ipaddress.IPv6Address.is_global: 1905.

     Também nos atributos correspondentes *note ipaddress.IPv4Network:
     508. e *note ipaddress.IPv6Network: 509.

   - gh-63283(40): Em *note encodings.idna: 56, 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(): 1906, que
     fornece informações sobre o dispositivo e o sistema operacional no
     Android.

   - gh-73468(42): Adicionada a nova função *note math.fma(): 50e,
     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: 7f. *note
     is_resource(): 4f7, *note open_binary(): 4f8, *note open_text():
     4f9, *note path(): 4fa, *note read_binary(): 4fb. e *note
     read_text(): 4fc. não estão mais descontinuadas e oferecem suporte
     a subdiretórios por meio de vários argumentos posicionais.  A
     função *note contents(): 4fd. 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: 2e, 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(): d46. e *note
     shutil.rmtree(): 353. ao abrir o encadeamento nomeado.

   - gh-71052(47): Implementa *note ctypes.util.find_library(): f39. 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: 116.: ‘_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:
     d5. 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(): 261. 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(): 4c8. e *note
     asyncio.Server.abort_clients(): 4c9. 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: aa. agora permite argumentos CLI para
     ‘pdb -m’.

   - gh-112948(56): Torna a conclusão de *note pdb: aa. 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: c5e. com o
     método *note shutdown(): 4c6.

   - gh-89739(59): O módulo *note zipimport: 138. agora pode ler
     arquivos ZIP64.

   - bpo-33533(60): *note asyncio.as_completed(): 4c0. 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(): 1907.  Patch por Justin Arthur.

   - bpo-27578(61): *note inspect.getsource(): 174c. (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(): 4ca, parando quando um deles for
     encontrado.

   - gh-66543(63): Faz *note mimetypes.guess_type(): 511. 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(): 11db. 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<13>,  Next: Testes<13>,  Prev: Biblioteca<18>,  Up: Python 3 13 0 alpha 6

1.24.18.3 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<13>,  Next: Construção<16>,  Prev: Documentação<13>,  Up: Python 3 13 0 alpha 6

1.24.18.4 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<16>,  Next: Windows<13>,  Prev: Testes<13>,  Up: Python 3 13 0 alpha 6

1.24.18.5 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<15>,  Prev: Construção<16>,  Up: Python 3 13 0 alpha 6

1.24.18.6 Windows
.................

   - gh-117267(1): Garante que ‘DirEntry.stat().st_ctime’ se comporte
     consistentemente com *note os.stat(): 26c. 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(): 190c.
     usando uma API de sistema alternativa quando disponível.
     Contribuição de vxiiduu.

   - gh-88494(3): No Windows, *note time.monotonic(): 555. 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<15>,  Prev: Windows<13>,  Up: Python 3 13 0 alpha 6

1.24.18.7 API C
...............

   - gh-117642(1): Corrige a implementação de PEP 737(2) para ‘%#T’ e
     ‘%#N’.

   - gh-87193(3): *note _PyBytes_Resize(): 190e. 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 ‘PyLong_AsPid()’ 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(): 61b.
     (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(): 629. à 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(): 5ed. e
     *note Py_GetConstantBorrowed(): 5ee. para obter constantes.  Por
     exemplo, ‘Py_GetConstant(Py_CONSTANT_ZERO)’ retorna uma *note
     referência forte: 5d8. 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(): 61f.: formata o nome
     totalmente qualificado de um tipo de objeto e de um tipo: chama
     *note PyType_GetModuleName(): 60c.  Veja PEP 737(14) para mais
     informações.  Patch por Victor Stinner.

   - gh-111696(15): Adiciona a função *note PyType_GetModuleName(): 60c.
     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(): 60a. 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: 62b.  Patch por Victor Stinner.

   - gh-111140(18): Adiciona sinalizadores adicionais a *note
     PyLong_AsNativeBytes(): 5fa. e *note PyLong_FromNativeBytes(): 5fb.
     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(): 600.

   ---------- 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.24.19 Python 3.13.0 alpha 5
-----------------------------

'Data de lançamento: 2024-03-12'

* Menu:

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


File: python.info,  Node: Segurança<16>,  Next: Núcleo e embutidos<18>,  Up: Python 3 13 0 alpha 5

1.24.19.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(): 56f.

        * *note xml.etree.ElementTree.XMLPullParser.flush(): 570.

        * *note xml.parsers.expat.xmlparser.GetReparseDeferralEnabled():
          571.

        * *note xml.parsers.expat.xmlparser.SetReparseDeferralEnabled():
          572.

        * ‘xml.sax.expatreader.ExpatParser.flush()’

   - gh-114572(3): *note ssl.SSLContext.cert_store_stats(): 11a2. e
     *note ssl.SSLContext.get_ca_certs(): 11a3. agora travam
     corretamente o acesso ao armazenamento de certificados, quando o
     *note ssl.SSLContext: 354. é 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<18>,  Next: Biblioteca<19>,  Prev: Segurança<16>,  Up: Python 3 13 0 alpha 5

1.24.19.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(): 688. e o
     disjuntor de avaliação.  Patch por Pablo Galindo

   - gh-112087(2): *note list: 24c. 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: 18e. 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(): 1912. é chamado com um objeto
     *note str: 169.

   - gh-112175(12): Cada ‘PyThreadState’ agora tem seu próprio
     ‘eval_breaker’, permitindo que threads específicos sejam
     interrompidos.

   - gh-115154(13): Corrige um bug que estava fazendo com que a função
     *note tokenize.untokenize(): 1814. manipulasse literais nomeados
     unicode incorretamente.  Patch por Pablo Galindo

   - gh-115154(14): Corrige um bug que estava fazendo com que a função
     *note tokenize.untokenize(): 1814. manipulasse literais nomeados
     unicode incorretamente.  Patch por Pablo Galindo

   - gh-104090(15): 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.

   - gh-105858(16): Melhora os construtores para nós *note ast: 9.  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(17): Expor atributo ‘__name__’ na propriedade.

   - gh-96497(18): 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/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

   (13) https://github.com/python/cpython/issues/115154

   (14) https://github.com/python/cpython/issues/115154

   (15) https://github.com/python/cpython/issues/104090

   (16) https://github.com/python/cpython/issues/105858

   (17) https://github.com/python/cpython/issues/101860

   (18) https://github.com/python/cpython/issues/96497


File: python.info,  Node: Biblioteca<19>,  Next: Documentação<14>,  Prev: Núcleo e embutidos<18>,  Up: Python 3 13 0 alpha 5

1.24.19.3 Biblioteca
....................

   - gh-116600(1): Corrige *note repr(): 1c1. para membros globais *note
     Flag: 82a.

   - gh-116349(2): *note platform.java_ver(): 32a. 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: 10a.: implementa PEP 705(5) que
     adiciona suporte a *note typing.ReadOnly: 484. para *note
     typing.TypedDict: 330.

   - gh-116325(6): *note typing: 10a.: levanta *note SyntaxError: 18e.
     em vez de *note AttributeError: 5e4. 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: aa.

   - 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: ba.

   - 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: 11b. 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():
     1886. para passar a chamada para o objeto encapsulado para retornar
     o resultado real.

   - gh-115881(18): Corrige problema em que *note ast.parse(): 1c2.
     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: 1914.

   - 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: f4. 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: 110. *note parse_qs():
     31d. e *note parse_qsl(): 31c. agora suportam argumentos de bytes
     contendo dados não ASCII brutos e codificados em porcentagem.

   - gh-67044(25): *note csv.writer(): 6a4. 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: 2d.  *note csv.writer(): 6a4.
     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(): ad8. 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: b. 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: 4ad.
     *note getter(): 1915, *note setter(): 1916. e *note deleter():
     1917.

   - 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(): 1152. para tipos com
     o descritor de dados ‘__wrapper__’.  Corrige *note
     inspect.Signature.from_callable(): 937. para embutido *note
     classmethod(): 488. e *note staticmethod(): 450.

   - 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(): 937.

   - gh-103092(35): Isola ‘_lsprof’ (aplica a PEP 687(36)).

   - gh-113942(37): *note pydoc: ba. 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: e9f. 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: 2ea. quando passado um iterável vazio.
     Anteriormente, *note IndexError: 1723. era levantada.

     ‘posixpath.commonpath()’ agora levanta uma exceção *note TypeError:
     198. quando passado ‘None’.  Anteriormente, *note ValueError: 2ea.
     era levantada.

   - gh-114610(43): Corrige bug onde *note pathlib.PurePath.with_stem():
     1918. convertia um sufixo de caminho não vazio em um radical quando
     recebia um argumento 'stem' vazio.  Agora levanta *note ValueError:
     2ea, assim como *note pathlib.PurePath.with_suffix(): 18a9. 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: 47a. e
     ‘VERIFY_X509_STRICT’ ao contexto SSL padrão criado com *note
     ssl.create_default_context(): 479.

   - gh-112281(45): Permite a criação de *note união de tipos: 9bb. para
     *note typing.Annotated: b2d. 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: 71e. dos
     métodos *note read(): 1657. e *note read_file(): 71f. de *note
     configparser.ConfigParser: 4d8. 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: 1499, 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: 1136. como *note filecmp.cmp(): 1919.  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: 191a. name in the
     *note repr(): 1c1. of *note functools.partial(): 216. 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: 7. quando
     todas as opções em um grupo mutuamente exclusivo são suprimidas.

   - gh-93205(60): Corrige um bug em *note
     logging.handlers.TimedRotatingFileHandler: 1157. 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: 7.

   - bpo-43952(63): Corrige *note
     multiprocessing.connection.Listener.accept(): 191b. 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(): bd9. 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__: 11be. na inicialização.  A implementação
     padrão de *note sys.__interactivehook__: 11be. 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<14>,  Next: Testes<14>,  Prev: Biblioteca<19>,  Up: Python 3 13 0 alpha 5

1.24.19.4 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: 116. 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<14>,  Next: Construção<17>,  Prev: Documentação<14>,  Up: Python 3 13 0 alpha 5

1.24.19.5 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<17>,  Next: Windows<14>,  Prev: Testes<14>,  Up: Python 3 13 0 alpha 5

1.24.19.6 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: 290. 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<17>,  Up: Python 3 13 0 alpha 5

1.24.19.7 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 Gerenciador de instalação do Python: 7cf.  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 Gerenciador de instalação do Python: 7cf. 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<8>,  Prev: Windows<14>,  Up: Python 3 13 0 alpha 5

1.24.19.8 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<8>,  Next: Ferramentas/Demos<15>,  Prev: macOS<9>,  Up: Python 3 13 0 alpha 5

1.24.19.9 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<15>,  Next: API C<16>,  Prev: IDLE<8>,  Up: Python 3 13 0 alpha 5

1.24.19.10 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<16>,  Prev: Ferramentas/Demos<15>,  Up: Python 3 13 0 alpha 5

1.24.19.11 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: 1924,
     *note PyHASH_BITS: 1925, *note PyHASH_INF: 1926. e *note
     PyHASH_IMAG: 1927.  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.24.20 Python 3.13.0 alpha 4
-----------------------------

'Data de lançamento: 2024-02-15'

* Menu:

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


File: python.info,  Node: Segurança<17>,  Next: Núcleo e embutidos<19>,  Up: Python 3 13 0 alpha 4

1.24.20.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(): fc4. 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<19>,  Next: Biblioteca<20>,  Prev: Segurança<17>,  Up: Python 3 13 0 alpha 4

1.24.20.2 Núcleo e embutidos
............................

   - gh-112087(1): Para um iterador reverso vazio for, lista será
     reduzida para *note reversed(): a5b.  Patch por Donghee Na

   - gh-114570(2): Adiciona exceção *note PythonFinalizationError: 472.
     Esta exceção derivada de *note RuntimeError: 243. é levantada
     quando uma operação é bloqueada durante a *note finalização do
     Python: 473.  Patch por Victor Stinner.

   - gh-114695(3): Adiciona *note sys._clear_internal_caches(): 361, que
     limpa todos os caches internos relacionados ao desempenho (e
     descontinua a função menos geral *note sys._clear_type_cache():
     291.).

   - gh-114828(4): Corrige travamentos de compilação em exemplos de
     código incomuns usando *note super(): 1a6. dentro de uma
     compreensão em um corpo de classe.

   - gh-112069(5): Adapta os métodos *note set: 184. e *note frozenset:
     7e7. 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__(): 19e. como para *note
     int: 19b.

   - gh-114887(7): Alterada a validação do tipo de soquete em *note
     create_datagram_endpoint(): 931. 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(): 192b. agora sempre
     levanta *note ValueError: 2ea. para valores fora do intervalo
     válido.  Anteriormente, levantava *note OverflowError: a77. 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: 4d1. emitido ao
     atribuir um valor inteiro que não é uma instância de *note int:
     19b. a um atributo que corresponde a um membro struct C de *note
     type: 192c. T_UINT e T_ULONG. Corrige um *note RuntimeWarning: 4d1.
     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: d55. 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: 7e9. para usar
     Argument Clinic.

   - gh-112050(25): Torna os métodos em *note collections.deque: 7e9.
     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: f38. 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<20>,  Next: Documentação<15>,  Prev: Núcleo e embutidos<19>,  Up: Python 3 13 0 alpha 4

1.24.20.3 Biblioteca
....................

   - gh-115392(1): Corrige um bug em *note doctest: 3e. onde números de
     linha incorretos seriam relatados para funções decoradas.

   - gh-114563(2): Corrige vários bugs de *note format(): 199. ao usar a
     implementação C de *note Decimal: 1fd.: * 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: 212. e *note complex: 197.

   - 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: 10a. (incluindo aliases genéricos
     criados usando *note typing.Annotated: b2d.).  Anteriormente,
     apenas *note AttributeError: 5e4. 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: 11e9. 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(): 599. recursivo.

   - gh-67837(9): Evita condições de corrida na criação de diretórios
     durante a extração simultânea em *note tarfile: e4. e *note
     zipfile: 137.

   - gh-115060(10): Acelera *note pathlib.Path.glob(): 531. 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: e7.

   - gh-114965(14): Atualiza pip empacotado para 24.0

   - gh-114959(15): *note tarfile: e4. não ignora mais erros ao tentar
     extrair um diretório em cima de um arquivo.

   - gh-114894(16): Adiciona *note array.array.clear(): 4ba.

   - 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: 7. (por exemplo, ‘--option=--’).

   - gh-49766(19): Corrige comparação *note date: 1f9.-*note datetime:
     4dc.  Agora, os métodos de comparação especiais como ‘__eq__’ e
     ‘__lt__’ retornam *note NotImplemented: 1a2. 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: 198.  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: 1fd. 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(): 531. 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: 7e. e *note email.utils: 54.

   - gh-113280(24): Corrige um vazamento de soquete aberto em casos
     raros quando ocorria um erro na criação de *note ssl.SSLSocket:
     add.

   - gh-77749(25): *note email.policy.EmailPolicy.fold(): 192e. agora
     sempre codifica caracteres não ASCII em cabeçalhos se *note utf8:
     fee. for falso.

   - gh-83383(26): A sincronização do banco de dados *note dbm.dumb: 36.
     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: 36. 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(): 549. 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: 12bb.  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(): 573.

   - gh-109653(30): Reduz o tempo de importação do módulo *note
     threading: f3. em ~50%.  Patch por Daniel Hollas.

   - gh-114492(31): Torna o resultado de *note termios.tcgetattr():
     192f. reproduzível no Alpine Linux.  Anteriormente, ele poderia
     deixar um lixo aleatório em alguns campos.

   - gh-114315(32): Torna *note threading.Lock: 1930. uma classe real,
     não uma função de fábrica.  Adiciona ‘__new__’ ao tipo
     ‘_thread.lock’.

   - gh-100414(33): Adiciona *note dbm.sqlite3: 39. como um backend para
     *note dbm: 35, 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: 2bf. 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(): f39. e retorna apenas ‘None’ no Linux.

   - gh-114321(39): Expõe mais constantes específicas da plataforma no
     módulo *note fcntl: 5d. no Linux, macOS, FreeBSD e NetBSD.

   - gh-114328(40): A *note tty.setcbreak(): 1931. e a nova *note
     tty.cfmakecbreak(): 1932. 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: 33. agora tem o primeiro argumento chamado ‘self’, em
     vez de ‘obj’.

   - gh-104522(45): *note OSError: 2bf. 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: 7.

   - 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: 59a. como
     padrões em *note pathlib.Path.glob(): 531. e *note rglob(): 532.

   - gh-112202(51): Garante que uma chamada *note
     asyncio.Condition.notify(): 1933. 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: ba.
     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: 1795.  *note ValueError: 2ea. agora é
     levantada se o mesmo caractere for usado em funções diferentes.

   - gh-113732(55): Corrige suporte de *note QUOTE_NOTNULL: 6a1. e *note
     QUOTE_STRINGS: 6a2. em *note csv.reader(): 6a3.

   - gh-113225(56): Acelera *note pathlib.Path.walk(): 6c4. usando *note
     os.DirEntry.path: 1934. 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():
     16b9, *note datetime.date.replace(): 1935. e *note
     datetime.time.replace(): 1936.

   - 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: aa.

   - 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: 93.

   - gh-43457(63): Corrige o método do widget *note tkinter: f6.
     ‘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: aa.

   - 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: 103.
     Em vez de verificar se um diretório existe e criá-lo, chame
     diretamente *note os.makedirs(): 526. com o kwarg ‘exist_ok=True’.

   - gh-75705(68): Define o envelope unixfrom em *note mailbox.mbox:
     1937. e *note mailbox.MMDF: 1938.

   - gh-106233(69): Corrige o stacklevel em ‘InvalidTZPathWarning’
     durante a importação do módulo *note zoneinfo: 13a.

   - gh-105102(70): Permita que *note ctypes.Union: 1e5. seja aninhado
     em *note ctypes.Structure: 1e4. 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: 1586. com
     *note shutdown(): 53c.

   - 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(): 1939, *note os.grantpt(): 193a, *note
     os.unlockpt(): 193b. e *note os.ptsname(): 193c.

   - gh-102512(75): Quando *note os.fork(): 4af. é 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(): 329, 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(): 328.

   - 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<15>,  Next: Testes<15>,  Prev: Biblioteca<20>,  Up: Python 3 13 0 alpha 4

1.24.20.4 Documentação
......................

   - gh-115233(1): Corrige um exemplo para *note LoggerAdapter: 14f1. no
     Logging Cookbook.

   - gh-114123(2): Move a docstring do módulo *note csv: 2d. 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<15>,  Next: Construção<18>,  Prev: Documentação<15>,  Up: Python 3 13 0 alpha 4

1.24.20.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<18>,  Next: Windows<15>,  Prev: Testes<15>,  Up: Python 3 13 0 alpha 4

1.24.20.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: 6a.

   ---------- 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<18>,  Up: Python 3 13 0 alpha 4

1.24.20.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: 98. 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<9>,  Prev: Windows<15>,  Up: Python 3 13 0 alpha 4

1.24.20.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(): 1942.

   - 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<9>,  Next: Ferramentas/Demos<16>,  Prev: macOS<10>,  Up: Python 3 13 0 alpha 4

1.24.20.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<16>,  Next: API C<17>,  Prev: IDLE<9>,  Up: Python 3 13 0 alpha 4

1.24.20.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: 1945.
     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<17>,  Prev: Ferramentas/Demos<16>,  Up: Python 3 13 0 alpha 4

1.24.20.11 API C
................

   - gh-111140(1): Adiciona as funções *note PyLong_AsNativeBytes():
     5fa, *note PyLong_FromNativeBytes(): 5fb. e *note
     PyLong_FromUnsignedNativeBytes(): 5fc.

   - gh-114685(2): *note PyBuffer_FillInfo(): 959. agora levanta uma
     *note SystemError: 78a. se chamada com *note PyBUF_READ: 1947. ou
     *note PyBUF_WRITE: 1948. como sinalizadores.  Esses sinalizadores
     devem ser usados apenas com a API C ‘PyMemoryView_*’.

   - gh-114685(3): *note PyObject_GetBuffer(): 62e. agora levanta uma
     *note SystemError: 78a. se chamado com *note PyBUF_READ: 1947. ou
     *note PyBUF_WRITE: 1948. 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(): 5f2, que é
     semelhante a *note PyList_GetItem(): 5f3, mas retorna uma *note
     referência forte: 5d8. em vez de uma *note referência emprestada:
     3d4.

   - gh-110850(6): Adiciona a API C de PyTime:

        * Tipo *note PyTime_t: 5c9.

        * Constantes *note PyTime_MIN: 5ca. e *note PyTime_MAX: 5cb.

        * Funções *note PyTime_AsSecondsDouble(): 5cc, *note
          PyTime_Monotonic(): 5cd, *note PyTime_PerfCounter(): 5cf. e
          *note PyTime_Time(): 5d1.

     Patch por Victor Stinner.

   - gh-112066(7): Adiciona *note PyDict_SetDefaultRef(): 5d9.: insere
     uma chave e um valor em um dicionário se a chave ainda não estiver
     presente.  Isto é similar a *note dict.setdefault(): 126f, mas
     retorna um valor inteiro indicando se a chave já estava presente.
     Também é similar a *note PyDict_SetDefault(): 5da, 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.24.21 Python 3.13.0 alpha 3
-----------------------------

'Data de lançamento: 2024-01-17'

* Menu:

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


File: python.info,  Node: Segurança<18>,  Next: Núcleo e embutidos<20>,  Up: Python 3 13 0 alpha 3

1.24.21.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<20>,  Next: Biblioteca<21>,  Prev: Segurança<18>,  Up: Python 3 13 0 alpha 3

1.24.21.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: 1d.
     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: 1a6.

   - 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(): 1c2.  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(): 1101. e
     *note max(): 1102.

   - gh-112943(25): Calcula corretamente os deslocamentos de coluna
     final para tokens multilinha no módulo *note tokenize: 101.  Patch
     por Pablo Galindo

   - gh-112125(26): Corrige ‘None.__ne__(None)’ retornando
     ‘NotImplemented’ em vez de ‘False’.

   - gh-74616(27): *note input(): 14d4. 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(): 194c. e
     *note binascii.crc32(): 194d. poderiam produzir resultados
     incorretos em entradas de vários gigabytes.  Incluindo ao usar
     *note zipfile: 137. 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(): 100f. e *note
     getgeneratorstate(): 1432. 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(): 194e./*note
     PyComplex_ImagAsDouble(): 194f. agora tenta converter um objeto
     para uma instância *note complex: 197. 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(): 552.

   ---------- 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<21>,  Next: Documentação<16>,  Prev: Núcleo e embutidos<20>,  Up: Python 3 13 0 alpha 3

1.24.21.3 Biblioteca
....................

   - gh-114077(1): Corrige possível *note OverflowError: a77. em *note
     socket.socket.sendfile(): 1053. ao passar 'count' maior que 2 GiB
     em plataforma de 32 bits.

   - gh-111803(2): *note plistlib: b0. agora oferece suporte ao
     carregamento de listas aninhadas mais profundamente em formato
     binário.

   - gh-114014(3): Corrige um bug em *note fractions.Fraction: 212. 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(): 549. 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: 2ca. 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:
     f6. no Windows de 64 bits.

   - gh-113868(7): Adicionados *note mmap.MAP_NORESERVE: 1951, *note
     mmap.MAP_NOEXTEND: 1952, *note mmap.MAP_HASSEMAPHORE: 1953, *note
     mmap.MAP_NOCACHE: 1954, *note mmap.MAP_JIT: 1955, *note
     mmap.MAP_RESILIENT_CODESIGN: 1956, *note mmap.MAP_RESILIENT_MEDIA:
     1957, *note mmap.MAP_32BIT: 1958, *note
     mmap.MAP_TRANSLATED_ALLOW_EXECUTE: 1959, *note mmap.MAP_UNIX03:
     195a. e *note mmap.MAP_TPRO: 195b.  Todos eles são sinalizadores
     ‘mmap(2)’ no macOS.

   - gh-113848(8): Os gerenciadores de contexto *note
     asyncio.TaskGroup(): 4cb. e *note asyncio.timeout(): 809. agora
     manipulam as subclasses *note CancelledError: 4ce, 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: a2c. no contexto da
     exceção que foi levantada durante a saída de um bloco *note
     asyncio.timeout(): 809. 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(): 195c. 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(): 195d. quando interrompido com uma
     ‘CancelledError’.

   - gh-113791(14): Adiciona ‘CLOCK_MONOTONIC_RAW_APPROX’ e
     ‘CLOCK_UPTIME_RAW_APPROX’ a *note time: f4. no macOS. Esses são
     relógios disponíveis no macOS 10.12 ou posterior.

   - gh-112932(15): Restaura a capacidade de *note zipfile: 137. 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: 6c2. e não de sua classe base privada
     ‘PurePathBase’.

   - gh-113594(17): Corrige *note UnicodeEncodeError: 87c. em *note
     email: 3f. 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: 91.  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: ab. e *note
     pickletools: ac.

   - gh-113537(21): Suporte a cargas de ‘str’ em *note plistlib.loads():
     b3f.

   - gh-89850(22): Adiciona implementações padrão dos métodos *note
     pickle.Pickler.persistent_id(): 1862. e *note
     pickle.Unpickler.persistent_load(): 186b. na implementação C.
     Chamar ‘super().persistent_id()’ e ‘super().persistent_load()’ em
     subclasses da implementação C das classes *note pickle.Pickler:
     c09. e *note pickle.Unpickler: 195e. 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(): 195f.

   - gh-101225(24): Aumenta o backlog para objetos *note
     multiprocessing.connection.Listener: 1960. 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:
     12dc. para eles.

   - gh-113568(25): Levanta eventos de auditoria de *note pathlib.Path:
     265. 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: ab, 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: 10d.
     quando o CPython é construído sem docstrings.

   - gh-113320(31): Corrige uma regressão no Python 3.12 onde classes
     *note Protocol: 564. que não foram marcadas como *note
     runtime-checkable: 669. 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: b0. 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: de9. em *note RuntimeError: 243. em
     vez de travar ou apresentar outro comportamento incorreto.
     Contribuição de patch de Jamie Phan.

   - gh-113225(38): Acelera *note pathlib.Path.glob(): 531. usando *note
     os.DirEntry.path: 1934. 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: dc. agora pode usar a
     função *note os.posix_spawn(): 528. 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(): 524. e um
     descritor de arquivo em *note os.chmod(): 523. no Windows.

   - gh-113188(43): Corrige *note shutil.copymode(): 1961. e *note
     shutil.copystat(): 132a. 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(): 528. 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(): 522. e o
     argumento 'follow_symlinks' em *note os.chmod(): 523. no Windows.
     Observe que o valor padrão de 'follow_symlinks' em ‘os.lchmod()’ é
     ‘False’ no Windows.

   - gh-112559(49): *note signal.signal(): 1330. e *note
     signal.getsignal(): 1962. não chamam mais ‘repr’ em manipuladores
     chamáveis.  *note asyncio.run(): 2f1. e *note asyncio.Runner.run():
     18a0. não chamam mais ‘repr’ nos resultados da tarefa.  Patch por
     Yilei Yang.

   - gh-112962(50): As funções do módulo *note dis: 3c. adicionam
     informações de cache à instância *note Instruction: 202. em vez de
     criar instâncias falsas *note Instruction: 202. para representar as
     entradas de cache.

   - gh-112989(51): Reduz a sobrecarga para conectar soquetes com
     SelectorEventLoop do *note asyncio: b.

   - 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: e2, todos eles constantes usados no macOS.

   - gh-112800(56): Corrige *note asyncio: b.
     ‘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: e7.  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(): 1430. no Windows.

   - gh-94692(59): *note shutil.rmtree(): 353. 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(): 1963.  Patch
     por Barney Gale.

   - gh-74690(62): Aceleração de verificações de *note issubclass():
     9ba. em relação a *note protocolos runtime-checkable: 669. simples
     em cerca de 6%.  Patch por Alex Waygood.

   - gh-74690(63): Aceleração de verificações de *note isinstance():
     2ac. em cerca de 20% para *note protocolos verificáveis em tempo de
     execução: 669. que têm apenas um membro chamável.  Aceleração de
     verificações de *note issubclass(): 9ba. 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(): 353.

   - gh-112640(65): Adiciona o parâmetro ‘kwdefaults’ a *note
     types.FunctionType: a79. 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(): 1c9.

   - gh-112618(67): Corrige um bug de armazenamento em cache relacionado
     a *note typing.Annotated: b2d.  ‘Annotated[str, True]’ não é mais
     idêntico a ‘Annotated[str, 1]’.

   - gh-112334(68): Corrige uma regressão de desempenho no *note
     subprocess: dc. 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: 4b1. 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():
     c1a. com valor específico (UINT_MAX). Corrigir um estouro de
     inteiro em *note socket.if_indextoname(): c1a. em plataformas não
     Windows de 64 bits.

   - gh-112578(71): Corrige uma *note RuntimeWarning: 4d1. espúrio ao
     executar o módulo *note zipfile: 137.

   - gh-112516(72): Atualiza a cópia empacotada do pip para a versão
     23.3.1.

   - gh-112510(73): Adiciona *note readline.backend: 1964. 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: 330.  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: d5.

   - gh-112414(78): Corrige regressão no Python 3.12 onde chamar *note
     repr(): 1c1. em um módulo que foi importado usando um *note loader:
     1965. personalizado poderia falhar com *note AttributeError: 5e4.
     Patch por Alex Waygood.

   - gh-112358(79): Reverte alteração na inicialização *note
     struct.Struct: 1966. que quebrou alguns casos de extensão de
     classes.

   - gh-112405(80): Otimiza *note pathlib.PurePath.relative_to(): 2fb.
     Patch por Alex Waygood.

   - gh-94722(81): Corrige bug onde a comparação entre instâncias de
     *note DocTest: 1967. falha se uma delas tiver ‘None’ como seu
     lineno.

   - gh-112361(82): Acelera um pequeno punhado de métodos *note pathlib:
     a8. removendo alguns objetos temporários.

   - gh-112345(83): Melhora a mensagem de erro ao tentar chamar *note
     issubclass(): 9ba. contra um *note typing.Protocol: 564. que tem
     membros não-método.  Patch por Randolf Scholz.

   - gh-112137(84): Altera a saída *note dis: 3c. para exibir no-lineno
     como “–” em vez de “None”.

   - gh-112332(85): Descontinua o campo ‘exc_type’ de *note
     traceback.TracebackException: 55c.  Adiciona ‘exc_type_str’ para
     substituí-lo.

   - gh-81620(86): Adiciona testes extras para *note
     random.binomialvariate(): 6cc.

   - gh-112292(87): Corrige uma falha em *note readline: bf. quando
     importado de um subinterpretador.  Patch por Anthony Shaw

   - gh-77621(88): Melhora ligeiramente o tempo de importação do módulo
     *note pathlib: a8. adiando algumas importações.  Patch por Barney
     Gale.

   - gh-112137(89): Altera a saída *note dis: 3c. 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: ba. para renderizar assinaturas mais legíveis que tenham
     novas linhas entre parâmetros.

   - gh-112105(91): Faz *note readline.set_completer_delims(): 1968.
     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: 32f,
     garante que *note __set_name__(): e3c. 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(): 558.

   - 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: aa. 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: f6. 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:
     212.

   - gh-111049(101): Corrige travamento durante coleta de lixo do objeto
     buffer *note io.BytesIO: 109a.

   - gh-102980(102): Redireciona a saída do comando ‘interact’ de *note
     pdb: aa. para o mesmo canal do depurador.  Adiciona testes e
     melhore a documentação.

   - gh-102988(103): *note email.utils.getaddresses(): 4ed. e *note
     email.utils.parseaddr(): 4ee. 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(): 1969. agora limpa
     docstrings com *note inspect.cleandoc(): 196a. antes de
     escrevê-las.  Patch por Filip Łapkiewicz.

   - gh-82300(106): Adiciona o parâmetro ‘track’ a *note
     multiprocessing.shared_memory.SharedMemory: 1914. 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: 6c2. que omite certos
     métodos mágicos.  Pode ser tornado público (junto com ‘_PathBase’)
     no futuro.

   - gh-109858(108): Protege *note zipfile: 137. 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: a0c.

   - 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(): 535. e *note
     group(): 536, com o padrão ‘True’.

   - gh-102130(112): Suporte para conclusão de tabulação em *note cmd:
     1a. para ‘editline’.

   - gh-99437(113): *note runpy.run_path(): 49e. 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(): 483, 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: 196b. 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: 1430, 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(): 64e. agora levanta *note
     OSError: 2bf. para todas as falhas em vez de *note ImportError:
     64f. em sistemas sem o módulo *note pwd: b7. ou *note KeyError:
     5dd. se o banco de dados de senhas estiver vazio.

   - bpo-34321(122): *note mmap.mmap: 513. 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(): 353. agora ignora
     erros ao chamar *note os.close(): d5f. quando 'ignore_errors' é
     ‘True’, e *note os.close(): d5f. não é mais tentado novamente após
     erro.

   - bpo-35928(124): *note io.TextIOWrapper: 9b4. agora manipula
     corretamente o buffer de decodificação após ‘read()’ e ‘write()’.

   - bpo-26791(125): *note shutil.move(): 1049. 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: c09. e *note pickle.Unpickler: 195e. 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(): 1697. e *note
     warnings.simplefilter(): 8c5. 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(): 353. 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: 4aa. para definir o local de um arquivo
     ‘.python_history’.

   - bpo-21360(134): *note mailbox.Maildir: 652. 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<16>,  Next: Testes<16>,  Prev: Biblioteca<21>,  Up: Python 3 13 0 alpha 3

1.24.21.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: b. 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<16>,  Next: Construção<19>,  Prev: Documentação<16>,  Up: Python 3 13 0 alpha 3

1.24.21.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(): 52b. 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: 6cf.

   - gh-112769(7): Os testes agora comparam corretamente a versão zlib
     quando *note zlib.ZLIB_RUNTIME_VERSION: 136a. 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: dc. 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<19>,  Next: Windows<16>,  Prev: Testes<16>,  Up: Python 3 13 0 alpha 3

1.24.21.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(): 18b2, *note
     os.makedev(): 18b4. e *note os.minor(): 18b3. 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<19>,  Up: Python 3 13 0 alpha 3

1.24.21.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(): 26c. 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: 98.: 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: af. no Windows se o usuário atual não tiver permissão
     para o WMI.

   - gh-73427(9): Descontinua *note
     sys._enablelegacywindowsfsencoding(): 33c.  Use *note
     PYTHONLEGACYWINDOWSFSENCODING: 33d. 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: 513. 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<10>,  Prev: Windows<16>,  Up: Python 3 13 0 alpha 3

1.24.21.8 macOS
...............

   - gh-113666(1): Adiciona as seguintes constantes ao módulo *note
     stat: d6.: ‘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(): f8d. 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: 38. 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<10>,  Next: API C<18>,  Prev: macOS<11>,  Up: Python 3 13 0 alpha 3

1.24.21.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<18>,  Prev: IDLE<10>,  Up: Python 3 13 0 alpha 3

1.24.21.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(): 3be.

   - gh-111545(3): Adiciona a função *note Py_HashPointer(): 422. 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(): 618. e *note
     PyArg_VaParseTupleAndKeywords(): 619. 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.24.22 Python 3.13.0 alpha 2
-----------------------------

'Data de lançamento: 2023-11-22'

* Menu:

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


File: python.info,  Node: Núcleo e embutidos<21>,  Next: Biblioteca<22>,  Up: Python 3 13 0 alpha 2

1.24.22.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__: 772. 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(): 57e. 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(): 1975,
     *note BaseExceptionGroup.subgroup(): 1976. e *note
     BaseExceptionGroup.split(): 1832. 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: 5b1. 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: 1d. que estava
     fazendo com que exceções *note SyntaxError: 18e. 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: 1ae. 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: 4a7.  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: 16f.

   - gh-111354(28): Remove ‘oparg’ de *note YIELD_VALUE: 5b1.  Altera
     ‘oparg’ de *note RESUME: 5b2. 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:
     4a6. em um bloco *note except: 1ab. é rejeitada quando o global é
     usado no bloco *note else: 17c.

   - 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: 1809. usando o módulo *note traceback: 104.  Patch por
     Pablo Galindo

   - gh-109894(35): Corrige falha devido a *note MemoryError: 1809.
     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: 503. 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: 488. (introduzidos em bpo-19072(44)).  Isso não pode
     mais ser usado para encapsular outros descritores como *note
     property: 4ad.  O design principal desse recurso era falho e
     causava uma série de problemas posteriores.  Para “passar” um *note
     classmethod: 488, 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<22>,  Next: Testes<17>,  Prev: Núcleo e embutidos<21>,  Up: Python 3 13 0 alpha 2

1.24.22.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: d1. quando presente em C no momento da compilação para uso
     com *note socket.getnameinfo(): 1978.

   - gh-109538(3): Emite mensagem de aviso em vez de exibir *note
     RuntimeError: 243. quando o laço de eventos já foi fechado em
     ‘StreamWriter.__del__()’.

   - gh-111942(4): Corrige travamentos em *note
     io.TextIOWrapper.reconfigure(): d34. ao passar argumentos
     inválidos, por exemplo, codificação não string.

   - gh-111460(5): *note curses: 2f.: restaura o suporte a caracteres
     amplos (incluindo *note curses.unget_wch(): 1294. e *note
     get_wch(): 1293.) no macOS, que estava indisponível devido a uma
     regressão no Python 3.12.

   - gh-103791(6): *note contextlib.suppress: 111e. agora oferece
     suporte à supressão de exceções levantadas como parte de um *note
     BaseExceptionGroup: 55f, além do suporte recente para *note
     ExceptionGroup: 4cc.

   - gh-111835(7): A classe *note mmap.mmap: 513. agora tem um método
     *note seekable(): 514. que pode ser usado quando um objeto arquivo
     ou similar pesquisável é necessário.  O método *note seek(): 515.
     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(): 25a. e *note os.unsetenv(): 25b.
     no Windows.

   - gh-111768(10): *note wsgiref.util.is_hop_by_hop(): 1979. agora é
     exposto corretamente em ‘__all__’.

   - gh-80731(11): Evita executar a função padrão em *note cmd.Cmd:
     17b7. em um bloco except

   - gh-111541(12): Corrige *note doctest: 3e. para subclasses não
     embutidas de *note SyntaxError: 18e.

   - gh-111719(13): Adiciona validação de argumento extra para o comando
     ‘alias’ em *note pdb: aa.

   - gh-111482(14): *note time: f4.: Torna as funções *note
     time.clock_gettime(): 135a. e *note time.clock_gettime_ns(): cce.
     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(): d03. 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: f6.

   - gh-111246(17): *note asyncio.loop.create_unix_server(): 4c4. agora
     removerá automaticamente o soquete Unix quando o servidor for
     fechado.

   - gh-111356(18): Adicionados *note io.text_encoding(): 197a, *note
     io.DEFAULT_BUFFER_SIZE: 197b. e *note io.IncrementalNewlineDecoder:
     197c. 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(): 2fb. e
     *note is_relative_to(): 2fc.

   - gh-111342(21): Corrigido erro de digitação em *note math.sumprod():
     6b4.

   - gh-68166(22): Remove menção de tipo de elemento “vsapi” não
     suportado em *note tkinter.ttk.Style.element_create(): 558.
     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(): a44, que permite formatar
     instâncias *note ExceptionGroup: 4cc.

   - gh-79033(24): Outra tentativa de corrigir *note
     asyncio.Server.wait_closed(): 197d.  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: a8.

   - gh-111295(26): Corrige *note time: f4. 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: c6. não verificando erros ao
     inicializar.

   - gh-111230(30): Corrige *note ssl: d5. não verificando erros ao
     inicializar.

   - gh-111174(31): Corrige travamento em *note io.BytesIO.getbuffer():
     13ed. 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: 3e. para
     exceções com notas.

   - gh-110910(34): Corrige manipulação de estado inválido em *note
     asyncio.TaskGroup: 4cb. e *note asyncio.Timeout: 197e.  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: aa.

   - gh-110745(37): Adicionado o parâmetro 'newline' para *note
     pathlib.Path.read_text(): 103a.  Patch por Junya Okabe.

   - gh-84583(38): Faz *note pdb: aa. entrar no modo post-mortem mesmo
     para *note SyntaxError: 18e.

   - gh-80675(39): Define ‘f_trace_lines = True’ em todos os quadros em
     *note pdb.set_trace(): 271.

   - 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: 2f3. em *note unittest.IsolatedAsyncioTestCase:
     35e.

   - gh-110392(42): Corrige *note tty.setraw(): 197f. e *note
     tty.setcbreak(): 1931.: anteriormente eles retornavam uma lista
     parcialmente modificada dos atributos tty originais.  *note
     tty.cfmakeraw(): 1980. e *note tty.cfmakecbreak(): 1932. 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: aa.

   - gh-88434(44): Emite aviso de descontinuação para números não
     inteiros em funções e métodos *note gettext: 67. que consideram
     formas plurais, mesmo que a tradução não tenha sido encontrada.

   - gh-110395(45): Garante que os objetos *note select.kqueue(): 1981.
     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: 505, que retorna o endereço IPv6
     mapeado para IPv4.

   - gh-85098(49): Implementa a CLI do módulo *note symtable: de. e
     melhorar o repr de *note Symbol: 288.

   - gh-108791(50): Tratamento de erros aprimorado na interface de linha
     de comando *note pdb: aa, fazendo com que ela produza mensagens de
     erro mais concisas.

   - gh-105931(51): Altera *note compileall: 21. 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: 8b6. de *note multiprocessing.managers: 9b.
     para uso ‘[]’ em contextos de tipagem.

   - gh-72904(53): Adiciona *note glob.translate(): 4f5.  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: a5. fiquem disponíveis.

   - gh-90890(55): Novos métodos *note mailbox.Maildir.get_info(): 1982,
     *note mailbox.Maildir.set_info(): 1983, *note
     mailbox.Maildir.get_flags(): 1984, *note
     mailbox.Maildir.set_flags(): 1985, *note
     mailbox.Maildir.add_flag(): 1986, *note
     mailbox.Maildir.remove_flag(): 1987.  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(): 17f4. 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: 73.

   - 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<17>,  Next: Construção<20>,  Prev: Biblioteca<22>,  Up: Python 3 13 0 alpha 2

1.24.22.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:
     ea.

   - 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: cc.

   ---------- 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<20>,  Next: Windows<17>,  Prev: Testes<17>,  Up: Python 3 13 0 alpha 2

1.24.22.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: 62b.  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<20>,  Up: Python 3 13 0 alpha 2

1.24.22.5 Windows
.................

   - gh-111856(1): Corrige *note fstat(): f80. 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: 198b. 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<11>,  Prev: Windows<17>,  Up: Python 3 13 0 alpha 2

1.24.22.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(): 18f0.

   ---------- 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<11>,  Next: Ferramentas/Demos<17>,  Prev: macOS<12>,  Up: Python 3 13 0 alpha 2

1.24.22.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<17>,  Next: API C<19>,  Prev: IDLE<11>,  Up: Python 3 13 0 alpha 2

1.24.22.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<19>,  Prev: Ferramentas/Demos<17>,  Up: Python 3 13 0 alpha 2

1.24.22.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(): 420.  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(): 41f. e *note
     PyDict_PopString(): 5db.: remover uma chave de um dicionário e,
     opcionalmente, retornar o valor removido.  Isso é semelhante a
     *note dict.pop(): 5dc, mas sem o valor padrão e não levantando
     *note KeyError: 5dd. 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(): 5f4. e
     *note PyList_Clear(): 5f5.: 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(): a9e. agora é implementada como uma chamada de
     função opaca.  Patch por Victor Stinner.

   - gh-108082(13): Adiciona a função *note PyErr_FormatUnraisable():
     5e5.

   - 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(): 618.

   - 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(): 607. à API C
     limitada.  Patch por Victor Stinner.

   - gh-85283(18): Adiciona *note PyMem_RawMalloc(): 625, *note
     PyMem_RawCalloc(): 626, *note PyMem_RawRealloc(): 627. e *note
     PyMem_RawFree(): 628. à API C limitada.  Patch por Victor Stinner.

   - gh-106672(19): Funções *note PyDict_GetItem(): 61c, *note
     PyDict_GetItemString(): 61d, *note PyMapping_HasKey(): 614, *note
     PyMapping_HasKeyString(): 616, *note PyObject_HasAttr(): 610, *note
     PyObject_HasAttrString(): 612. e *note PySys_GetObject(): 61e, que
     limpam todos os erros ocorridos durante a chamada da função, agora
     os relatam usando *note sys.unraisablehook(): 501.

   - gh-67565(20): Remove a verificação redundante de contiguidade C em
     ‘getargs.c’, *note binascii: 11, *note ssl: d5. 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.24.23 Python 3.13.0 alpha 1
-----------------------------

'Data de lançamento: 2023-10-13'

* Menu:

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


File: python.info,  Node: Segurança<19>,  Next: Núcleo e embutidos<22>,  Up: Python 3 13 0 alpha 1

1.24.23.1 Segurança
...................

   - gh-108310(1): Corrigido um problema em que instâncias de *note
     ssl.SSLSocket: add. 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: 54. lançada na 3.12beta4 que involuntariamente fez com
     que *note email.utils.getaddresses: 4ed. 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: 6c. 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: 39b.  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<22>,  Next: Biblioteca<23>,  Prev: Segurança<19>,  Up: Python 3 13 0 alpha 1

1.24.23.2 Núcleo e embutidos
............................

   - gh-110782(1): Corrige o travamento quando *note typing.TypeVar:
     480. é 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: 104. 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: 184, 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: 16f. habilitado.

   - gh-110514(8): Adiciona ‘PY_THROW’ para eventos *note
     sys.setprofile(): 16ec.

   - gh-110489(9): Otimiza *note math.ceil(): 15b0. 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: 16f. para substituir os resultados de retorno de *note
     os.cpu_count(): 4d5. e *note os.process_cpu_count(): 4d4.  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(): 785. 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: 1993.

   - 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: 366.

   - 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: 18e.

   - 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: 36f, 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: 16f. 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: 90f. no final de um laço for.

   - gh-108113(59): A função embutida *note compile(): 4ab. 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(): 1c2. agora aceita um argumento opcional
     ‘optimize’ que é passado para o *note compile(): 4ab. 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: 16f.
     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: 16c2. e *note METH_O: 16f5.

   - 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():
     1994. e *note ctypes.POINTER(): 1f0.

   - gh-105848(70): Modifica o bytecode para que o chamável real para um
     *note CALL: 90a. 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: 169.
     por índices *note int: 19b.

   - 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: 1995, *note
     ctypes.c_wchar_p: 1996. e *note ctypes.c_void_p: 1997.

   - 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:
     16f. 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: 6a. e *note socket: d1.  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:
     38.  Patch por Donghee Na.

   - gh-107122(92): Adiciona ‘dbm.gnu.gdbm.clear()’ a *note dbm.gnu: 37.
     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(): 1c2.

   - gh-106917(94): Corrige chamadas ao método *note super(): 1a6. no
     estilo classmethod (ou seja, onde o segundo argumento para *note
     super(): 1a6, 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: 16f. 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: 1998.
     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(): 4b2. seja nomeado.  Patch por Hugo van Kemenade.

   - gh-96844(106): Melhora a mensagem de erro de *note list.remove():
     1999.  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: 199a. vazio para ela, em vez de um nó *note
     ast.JoinedStr: 199a. de um elemento com uma string vazia *note
     ast.Constant: 2ed.

   - gh-100288(109): Especializa *note LOAD_ATTR: 6f9. 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: 87a. 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(): e47. e *note
     sys.getfilesystemencodeerrors: ed6. 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: 199b. 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(): 1832. e *note
     BaseExceptionGroup.subgroup(): 1976.

   - 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: 199c,
     que realiza conversões booleanas para *note POP_JUMP_IF_TRUE: 199d,
     *note POP_JUMP_IF_FALSE: 199e. e *note UNARY_NOT: 199f. (que agora
     esperam valores *note bool: 3c0. exatos).  Além disso, modifique o
     oparg de *note COMPARE_OP: b57. para incluir um sinalizador
     opcional de “conversão booleana”.

   - gh-98931(120): Garante que mensagens de erro personalizadas *note
     SyntaxError: 18e. 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: 1ae. 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: 2ea. se o argumento
     ‘delay’ para *note asyncio.sleep(): c58. for um NaN (correspondente
     a *note time.sleep(): 8a1.).

   - 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: 101.  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: 9. 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: 13, 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(): 19a0, 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: 759. em vez de *note SyntaxError: 18e. 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: 101.
     Patch por Pablo Galindo

   - gh-104635(142): Elimina instruções redundantes *note STORE_FAST:
     19a1. no compilador.  Patch por Donghee Na e Carl Meyer.

   - gh-105324(143): Corrige a função principal do módulo *note
     tokenize: 101. 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: 4ad. 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: 5e4. 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: a04.  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: 9. 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: 198.
     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(): 1a6. em tipos
     com implementação personalizada de *note tp_getattro: 19a2. (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(): 174c.  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 ‘DEDENT’
     ‘tokenize.TokenInfo’ finais emitidos pelo módulo *note tokenize:
     101. 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: 101. estejam sempre
     corretos.  Patch por Pablo Galindo

   - gh-104955(162): Corrige a assinatura para o novo slot de *note
     __release_buffer__(): 19a3.  Patch por Jelle Zijlstra.

   - gh-104690(163): Iniciar novas threads e criar processos através de
     *note os.fork(): 4af. durante o desligamento do interpretador (como
     a partir de manipuladores *note atexit: d.) 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: f3. 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: 101.
     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(): 19a4.

   - gh-89091(167): Levanta *note RuntimeWarning: 4d1. para métodos de
     gerador assíncronos não aguardados, como *note asend(): acc, *note
     athrow(): 712. e *note aclose(): acb.  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__():
     18bf. ou *note __reduce__(): bbc. como ‘None’, a operação de pickle
     resultará em um *note TypeError: 198.

   - gh-101006(170): Melhora o tratamento de erros ao ler dados *note
     marshal: 91.

   - 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<23>,  Next: Documentação<17>,  Prev: Núcleo e embutidos<22>,  Up: Python 3 13 0 alpha 1

1.24.23.3 Biblioteca
....................

   - gh-110786(1): A CLI de *note sysconfig: e1. agora ignora *note
     BrokenPipeError: 1252, 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: e1. 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: 19a6. para uso com
     o kwarg *note asyncio.run(): 2f1. 'loop_factory' para evitar chamar
     o sistema de políticas asyncio.

   - gh-110682(5): *note protocolos runtime-checkable: 669. 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(): 19a7.: 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: 198. era substituído por *note OverflowError: a77.
     quando o argumento 'code' era uma lista de não-ints.

   - gh-65052(8): Impede que *note pdb: aa. 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: 67. 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: 1fd.  Ele não foi documentado e
     suportado apenas na implementação em C.

   - gh-110378(11): Os gerenciadores de contexto *note contextmanager():
     13fe. e *note asynccontextmanager(): d13. agora fecham um objeto
     gerador subjacente inválido que produz mais de um valor.

   - gh-106670(12): Em *note pdb: aa, defina a variável de conveniência
     ‘$_exception’ para depuração post mortem.

   - gh-110365(13): Corrige o bug em *note termios.tcsetattr(): 19a8.
     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: 118. dentro desses módulos.  Patch por Alex Waygood.

   - gh-110273(15): *note dataclasses.replace(): 19a9. 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: bd.  Patch por Alex Waygood.

   - gh-110222(18): Adiciona suporte a objetos sequência struct em *note
     copy.replace(): 1c0.  Patch por Xuehai Pan.

   - gh-109649(19): *note multiprocessing: 98, *note concurrent.futures:
     24, *note compileall: 21.: Substitui *note os.cpu_count(): 4d5. por
     *note os.process_cpu_count(): 4d4. 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: f32. 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: f32.  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: de. para suportar
     os novos escopos introduzidos por PEP 695(24).

   - gh-88402(25): Adiciona novas variáveis a *note
     sysconfig.get_config_vars(): 297. no Windows: ‘LIBRARY’,
     ‘LDLIBRARY’, ‘LIBDIR’, ‘SOABI’ e ‘Py_NOGIL’.

   - gh-109631(26): Funções do *note re: be. como *note re.findall():
     1220, *note re.split(): 59b, *note re.search(): 1428. e *note
     re.sub(): 59c, 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:
     54. em cerca de 43%.  Isso resulta em uma redução de cerca de 18%
     no tempo de importação de *note email.message: 48, o que, por sua
     vez, reduz o tempo de importação de *note importlib.metadata: 7e.
     em cerca de 6%.  Patch por Alex Waygood.

   - gh-109818(28): Corrige *note reprlib.recursive_repr(): 13ef. que
     não copiava ‘__type_params__’ da função decorada.

   - gh-109047(29): *note concurrent.futures: 24.: 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:
     243.  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():
     bfb. seja idêntica em todas as plataformas.  Patch por Amin Alaee.

   - gh-109653(31): Melhora o tempo de importação de *note functools:
     63. em cerca de 13%.  Patch por Alex Waygood.

   - gh-109590(32): *note shutil.which(): 6d0. 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(): 6d0.
     aja de forma mais semelhante ao comportamento anterior no Python
     3.11.

   - gh-109653(33): Reduz o tempo de importação de *note enum: 5a. 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: 10a. em
     cerca de um terço.  Patch por Alex Waygood.

   - gh-109649(36): Adiciona a função *note os.process_cpu_count(): 4d4.
     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(): 26c. e *note
     os.DirEntry.stat(): 19aa.: 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(): 18b0. e *note
     ssl.SSLSocket.get_unverified_chain(): 18b1.

     Contribuição de Mateusz Nowak.

   - gh-109559(41): Atualiza o banco de dados *note unicodedata: 10b.
     para Unicode 15.1.0.

   - gh-109543(42): Remove a verificação desnecessária de *note
     hasattr(): 6ee. durante a criação de *note typing.TypedDict: 330.

   - gh-109495(43): Remove ‘__slots__’ extras desnecessários na
     implementação em Python puro de *note datetime: 4dc. para reduzir o
     tamanho da memória, pois são definidos na superclasse.  Patch por
     James Hilton-Balfe

   - gh-109461(44): *note logging: 8b.: Usa um gerenciador de contexto
     para aquisição de travas.

   - gh-109096(45): *note http.server.CGIHTTPRequestHandler: 323. 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: aa. ‘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: 19ab. agora é
     copiável e pode ser selecionado.  Patch por Robert Lehmann e Furkan
     Onder.

   - gh-109187(51): *note pathlib.Path.resolve(): 19ac. agora trata
     laços de links simbólicos como outros erros: no modo estrito, *note
     OSError: 2bf. é 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: 1c. 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:
     4df. em *note copy.replace(): 1c0.

   - gh-109164(54): *note pdb: aa.: Substitui *note getopt: 65. por
     *note argparse: 7. 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: 668. (‘python -m
     sqlite3’).

   - gh-108987(56): Corrige a condição de corrida *note
     _thread.start_new_thread(): 4ae.  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(): ad8. ao
     desfazer a análise de f-strings contendo muitos tipos de aspas.

   - gh-108469(60): *note ast.unparse(): ad8. agora oferece suporte à
     nova sintaxe *note f-string: 65f. introduzida no Python 3.12.
     Observe que as aspas *note f-string: 65f. foram selecionadas
     novamente para simplificar a nova sintaxe.  (Patch por Steven Sun)

   - gh-108751(61): Adiciona a função *note copy.replace(): 1c0, 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: 198. 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:
     547.:

        * *note set_authorizer(): 5a2.

        * *note set_progress_handler(): 5a3.

        * *note set_trace_callback(): 5a4.

     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: 480.

   - gh-108463(66): Faz com que expressões/instruções funcionem conforme
     o esperado no pdb

   - gh-108277(67): Adiciona *note os.timerfd_create(): 519, *note
     os.timerfd_settime(): 51a, *note os.timerfd_gettime(): 51c, *note
     os.timerfd_settime_ns(): 51b. e *note os.timerfd_gettime_ns(): 51d.
     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: e4.: 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(): 549.  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(): 8a1. 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: 547.:

        * *note create_function(): 5a0.

        * *note create_aggregate(): 5a1.

     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: 7e8. 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: 547. e *note sqlite3.Connection.close(): 548,
     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: d4. agora emite uma *note
     ResourceWarning: 546. se um objeto *note sqlite3.Connection: 547.
     não for ‘fechado’ explicitamente.  Patch por Erlend E. Aasland.

   - gh-107995(80): O atributo ‘__module__’ em instâncias de *note
     functools.cached_property: 758. 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: 3e.  Patch por Tyler Smart.

   - gh-107963(81): Corrige *note
     multiprocessing.set_forkserver_preload(): 185e. para verificar a
     lista de nomes de módulos fornecida.  Patch por Donghee Na.

   - gh-106242(82): Corrige *note os.path.normpath(): 1515. para
     manipular caracteres nulos incorporados sem truncar o caminho.

   - gh-81555(83): *note xml.dom.minidom: 128. agora coloca apenas aspas
     ‘"’ em atributos.

   - gh-50002(84): *note xml.dom.minidom: 128. agora preserva espaços em
     branco em atributos.

   - gh-93057(85): Passa mais de um argumento posicional para *note
     sqlite3.connect(): 59f. e o construtor *note sqlite3.Connection:
     547. 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: 14f1.

   - gh-107913(87): Corrige possíveis perdas dos valores ‘errno’ e
     ‘winerror’ em exceções *note OSError: 2bf. 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(): 299. 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: 107.

   - gh-107782(91): *note pydoc: ba. 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(): 59b, *note re.sub(): 59c. e *note re.subn(): 59d. como
     posicionais.  Eles devem ser passados apenas como nomeados.

   - gh-107710(93): Acelera *note logging.getHandlerNames(): 19ad.

   - gh-107715(94): Corrige *note doctest.DocTestFinder.find(): 19ae. 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: f6.:
     ‘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: 546. quando *note
     asyncio.StreamWriter: 19af. 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(): 52e.

   - 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(): 6ea. 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(): 13ef.

   - gh-107406(105): Implementa o novo método ‘__repr__()’ para *note
     struct.Struct: 1966.  Agora ele retorna ‘Struct(<format repr>)’.

   - gh-107369(106): Otimiza *note textwrap.indent(): 576.  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(): 26d. não levantava *note OSError: 2bf. até
     ser iterado.

   - gh-105578(108): Descontinua *note typing.AnyStr: 5a5. em favor da
     nova sintaxe de parâmetro de tipo.  Consulte PEP 695.

   - gh-62519(109): Faz com que *note gettext.pgettext(): bde. busque
     definições no plural quando a tradução não for encontrada.

   - gh-107089(110): Prateleiras abertas com *note shelve.open(): 19b0.
     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: b. *note os.sendfile(): cf8.

   - gh-83006(112): Documenta o comportamento de *note
     shutil.disk_usage(): 1329. 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: 1399. 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:
     2ea. 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:
     3c. 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(): 174c. mais
     inteligente para classes com definições de mesmo nome

   - gh-106789(123): Remove importação de *note pprint: b3. de *note
     sysconfig: e1.

   - gh-105726(124): Adiciona ‘__slots__’ a *note
     contextlib.AbstractContextManager: e7e. e *note
     contextlib.AbstractAsyncContextManager: d14. 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: c7.: 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: d5.

   - gh-106734(129): Desabilita o preenchimento automático com tabulação
     no modo multilinha de *note pdb: aa.

   - 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: 5a.

   - gh-106664(133): *note selectors: c7.: 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: 117, mesmo quando
     ‘VIRTUAL_ENV_DISABLE_PROMPT’ estiver definido.

   - gh-106530(136): Reverte uma alteração em *note
     colorsys.rgb_to_hls(): 19b1. 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: c7.: 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: a6. 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: b.

   - 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: be.: 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: 480, *note
     typing.ParamSpec: 481, *note typing.ParamSpecArgs: 9bf, *note
     typing.ParamSpecKwargs: 9c0. e *note typing.TypeVarTuple: 482.
     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(): 758.  Isso corresponde melhor ao
     comportamento anterior à versão 3.12 e melhora a compatibilidade
     para usuários que subclassificam *note functools.cached_property():
     758. 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(): 6c8.  Este bug foi
     introduzido no Python 3.12.0 beta 1.

   - gh-106309(155): Descontinua *note typing.no_type_check_decorator():
     331.  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: 64f. 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: f3, 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: 2b. 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():
     e41. 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: b.

   - gh-105974(165): Corrige bug em que uma classe *note
     typing.Protocol: 564. que tinha um ou mais membros não-chamáveis
     levantava *note TypeError: 198. quando *note issubclass(): 9ba. 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: 198.
     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: 52d,
     que é levantada em vez de *note NotImplementedError: 368. 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(): 1127. 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(): ad8. 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(): 534. e *note
     is_file(): 533, com o padrão ‘True’.

   - gh-105570(174): Descontinua dois métodos de criação de classes
     *note typing.TypedDict: 330. 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: 2e.: 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(): bc6.
     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(): 19b2. para
     ‘None’ e não ‘{}’.

   - gh-105375(181): Corrige bugs em *note sys: df, 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: 3a, 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: 4b8, 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: b2, 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: 13a, onde exceções
     poderiam ser sobrescritas.

   - gh-105375(191): Corrige bugs em *note errno: 5b, onde exceções
     poderiam ser sobrescritas.

   - gh-105566(192): Descontinua a criação de uma classe *note
     typing.NamedTuple: 32f. 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: b2d. 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: 10a.

   - gh-105375(196): Corrige bugs em *note pickle: ab, onde exceções
     podiam ser sobrescritas.

   - gh-70303(197): Emite *note FutureWarning: 64d. de *note
     pathlib.Path.glob(): 531. e *note rglob(): 532. 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: d4. onde uma
     exceção poderia ser sobrescrita no retorno de chamada de *note
     collation: 87b.

   - gh-105382(199): Remove os parâmetros 'cafile', 'capath' e
     'cadefault' da função *note urllib.request.urlopen(): 305,
     descontinuados no Python 3.6.  Patch por Victor Stinner.

   - gh-105376(200): *note logging: 8b.: 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(): 19b3, ‘logging.LoggerAdapter.warning()’ e
     *note logging.warning(): 351.  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(): a44. para recursivamente
     retornar à exceção aninhada de um *note BaseExceptionGroup: 55f.

   - 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: 564. no
     Python 3.12.

   - gh-80480(205): *note array: 8.: 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(): 22e.

   - gh-105144(209): Uma regressão recente foi corrigida no módulo *note
     typing: 10a.  A regressão significava que executar ‘class Foo(X,
     typing.Protocol)’, onde ‘X’ era uma classe que tinha *note
     abc.ABCMeta: 1111. como metaclasse, faria com que chamadas
     subsequentes de ‘isinstance(1, X)’ levantassem erroneamente *note
     TypeError: 198.  Patch por Alex Waygood.

   - gh-62948(210): O finalizador *note io.IOBase: 4ff. agora registra
     os erros do método ‘close()’ com *note sys.unraisablehook: 501.
     Anteriormente, os erros eram ignorados silenciosamente por padrão e
     registrados apenas no *note Modo de Desenvolvimento Python: 502. ou
     no *note Python construído em modo de depuração: 503.  Patch por
     Victor Stinner.

   - gh-105096(211): *note wave: 119.: Descontinua os métodos
     ‘getmark()’, ‘setmark()’ e ‘getmarkers()’ das classes *note
     wave.Wave_read: 334. e *note wave.Wave_write: 335.  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: 6c2. 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: 19b4. 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(): 669. e *note typing.Generic: 18ad. 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__: 16d9. ausente a *note
     os.PathLike: e3f.

   - 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: 330.
     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(): 563.
     para retornar o conjunto de membros que definem um *note
     typing.Protocol: 564.  Adiciona *note typing.is_protocol(): 565.
     para verificar se uma classe é um *note typing.Protocol: 564.
     Patch por Jelle Zijlstra.

   - gh-104874(254): Documenta os atributos ‘__name__’ e ‘__supertype__’
     de *note typing.NewType: ee5.  Patch por Jelle Zijlstra.

   - gh-104835(255): Removidas as seguintes funções *note unittest: 10c,
     descontinuadas no Python 3.11:

        * ‘unittest.findTestCases()’

        * ‘unittest.makeSuite()’

        * ‘unittest.getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 58c.:

        * *note unittest.TestLoader.loadTestsFromModule(): 58d.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 58e.

        * *note unittest.TestLoader.getTestCaseNames(): 58f.

     Patch por Hugo van Kemenade.

   - gh-104804(256): Remove the untested and undocumented *note
     webbrowser: 11b. ‘MacOSX’ class, deprecated in Python 3.11.  Patch
     by Hugo van Kemenade.

   - gh-83863(257): Support for using *note pathlib.Path: 265. 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: 19b5, *note
     ast.AsyncFunctionDef: 19b6, and *note ast.FunctionDef: 19b7. to
     better preserve backward compatibility.  Patch by Jelle Zijlstra

   - gh-104797(260): Allow *note typing.Protocol: 564. classes to
     inherit from *note collections.abc.Buffer: 341.  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: dc. 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: 6c. 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():
     531. when expanding a pattern with a non-terminal “‘**’” component
     by filtering walked paths through a regular expression, rather than
     calling *note os.scandir(): c48. 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: 202.

   - gh-103558(276): Fixed ‘parent’ argument validation mechanism of
     *note argparse: 7.  Improved test coverage.

   - gh-103464(277): Provide helpful usage messages when parsing
     incorrect *note pdb: aa. 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:
     aa.

   - gh-101162(280): Forbid using ‘builtins.issubclass()’ with *note
     types.GenericAlias: 9e2. 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(): 531. and *note rglob(): 532, defaulting to
     false.

   - gh-102541(284): Hide traceback in *note help(): aca. 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(): 32c.

   - 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(): 6c8.

   - gh-84867(290): *note unittest.TestLoader: 58c. no longer loads test
     cases from exact *note unittest.TestCase: 2b2. and *note
     unittest.FunctionTestCase: 19b8. classes.

   - gh-99203(291): Restore following CPython <= 3.10.5 behavior of
     *note shutil.make_archive(): 6cf.: do not create an empty archive
     if ‘root_dir’ is not a directory, and, in that case, raise *note
     FileNotFoundError: 263. or *note NotADirectoryError: 1250.
     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: 1a3. for *note array:
     8.’s ‘'u'’ type code, deprecated in docs since Python 3.3.

   - gh-94924(293): *note unittest.mock.create_autospec(): 1886. now
     properly returns coroutine functions compatible with *note
     inspect.iscoroutinefunction(): 30b.

   - gh-94777(294): Fix hanging *note multiprocessing: 98.
     ‘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: 10a. 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: 84.  Patch by Oleksandr Pavliuk.

   - bpo-44850(298): Improve performance of *note
     operator.methodcaller(): 1029. using the PEP 590(299) ‘vectorcall’
     convention.  Patch by Anthony Lee and Pieter Eendebak.

   - bpo-44185(300): *note unittest.mock.mock_open(): 11dd. 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: bd9. by caching the generated
     dispatch wrapper.  Optimization suggested by frederico.  Patch by
     @mental32, Alex Waygood and Pieter Eendebak.

   - bpo-41768(302): *note unittest.mock: 10d. 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: 10d.
     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<17>,  Next: Testes<18>,  Prev: Biblioteca<23>,  Up: Python 3 13 0 alpha 1

1.24.23.4 Documentação
......................

   - gh-109209(1): The minimum Sphinx version required for the
     documentation is now 4.2.

   - gh-108826(2): *note dis: 3c. module command-line interface is now
     mentioned in documentation.

   - gh-107305(3): Add documentation for *note PyInterpreterConfig: 783.
     and *note Py_NewInterpreterFromConfig(): 67e.  Also clarify some of
     the nearby docs relative to per-interpreter GIL.

   - gh-107008(4): Document the *note curses: 2f. module variables *note
     LINES: fe1. and *note COLS: fe2.

   - 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(): bd8. 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: 55c. class.

   - gh-89412(10): Add missing documentation for the ‘end_lineno’ and
     ‘end_offset’ attributes of the *note traceback.TracebackException:
     55c. class.

   - gh-104943(11): Remove mentions of old Python versions in *note
     typing.NamedTuple: 32f.

   - gh-54738(12): Add documentation on how to localize the *note
     argparse: 7. module.

   - gh-102823(13): Document the return type of ‘x // y’ when ‘x’ and
     ‘y’ have type *note float: 196.

   - 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<18>,  Next: Construção<21>,  Prev: Documentação<17>,  Up: Python 3 13 0 alpha 1

1.24.23.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: 106.

   - gh-81002(5): Add tests for *note termios: e7.

   - 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():
     8a1. 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(): 146f.
     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: ea.
     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(): 4e8. method
     now counts the number of skipped tests.  Add *note
     doctest.DocTestRunner.skips: 4e9. and *note
     doctest.TestResults.skipped: 4ea. 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(): 19bb.

   - 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: 15. 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<21>,  Next: Windows<18>,  Prev: Testes<18>,  Up: Python 3 13 0 alpha 1

1.24.23.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: 19bd. 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:
     62a. (tracing references) is now ABI compatible with Python release
     build and *note debug build: 503.  Patch by Victor Stinner.

   - gh-85283(10): The ‘_stat’ C extension is now built with the *note
     limited C API: 62b.  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: d4. 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<21>,  Up: Python 3 13 0 alpha 1

1.24.23.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(): 261. 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(): 261. to behave consistently
     when passed a path containing an embedded null character on
     Windows.  In strict mode, it now raises *note OSError: 2bf. instead
     of the unexpected *note ValueError: 2ea, and in non-strict mode
     will make the path absolute.

   - gh-83180(6): Changes the *note Gerenciador de instalação do Python:
     7cf. 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(): c45. 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(): 26c. 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(): 1902. 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<12>,  Prev: Windows<18>,  Up: Python 3 13 0 alpha 1

1.24.23.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<12>,  Next: Ferramentas/Demos<18>,  Prev: macOS<13>,  Up: Python 3 13 0 alpha 1

1.24.23.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<18>,  Next: API C<20>,  Prev: IDLE<12>,  Up: Python 3 13 0 alpha 1

1.24.23.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: 62b.: 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<20>,  Prev: Ferramentas/Demos<18>,  Up: Python 3 13 0 alpha 1

1.24.23.11 API C
................

   - gh-85283(1): If the *note Py_LIMITED_API: 654. 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(): 60d. and
     *note PyUnicode_EqualToUTF8(): 60e. functions.

   - gh-110235(3): Raise *note TypeError: 198. 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(): 19c3. now sets
     RuntimeError if it fails to get *note sys.path_hooks: 121a. or
     *note sys.path_importer_cache: 7ef. 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: 47e. internal-only lightweight
     locking API.

   - gh-85283(7): Add *note PySys_AuditTuple(): 606. function: similar
     to *note PySys_Audit(): 607, but pass event arguments as a Python
     *note tuple: 608. object.  Patch by Victor Stinner.

   - gh-108867(8): Add *note PyThreadState_GetUnchecked(): 420.
     function: similar to *note PyThreadState_Get(): 609, 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():
     60f, *note PyObject_HasAttrStringWithError(): 611, *note
     PyMapping_HasKeyWithError(): 613. and *note
     PyMapping_HasKeyStringWithError(): 615.

   - gh-107073(14): Add *note PyObject_VisitManagedDict(): 601. and
     *note PyObject_ClearManagedDict(): 602. functions which must be
     called by the traverse and clear functions of a type using *note
     Py_TPFLAGS_MANAGED_DICT: 603. flag.  Patch by Victor Stinner.

   - gh-108634(15): Python built with ‘configure’ *note
     -with-trace-refs: 62a. (tracing references) now supports the *note
     Limited API: 62b.  Patch by Victor Stinner.

   - gh-108014(16): Add *note PyLong_AsInt(): 5f8. function: similar to
     *note PyLong_AsLong(): 5f9, 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(): 5d3. function:
     same as *note PyDict_Contains(): 5d4, but 'key' is specified as a
     const char* UTF-8 encoded bytes string, rather than a *note
     PyObject: 5d5.*.  Patch by Victor Stinner.

   - gh-108337(18): Add atomic operations on additional data types in
     pyatomic.h.

   - gh-108014(19): Add *note Py_IsFinalizing(): 5f1. function: check if
     the main Python interpreter is *note shutting down: 473.  Patch by
     Victor Stinner.

   - gh-107916(20): C API functions *note
     PyErr_SetFromErrnoWithFilename(): 19c4, *note
     PyErr_SetExcFromWindowsErrWithFilename(): 19c5. and *note
     PyErr_SetFromWindowsErrWithFilename(): 19c6. save now the error
     code before calling *note PyUnicode_DecodeFSDefault(): 19c7.

   - 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: 1a3. for uses of
     *note PyType_Spec: 19c8. with metaclasses that have custom
     ‘tp_new’.

   - gh-107249(23): Implement the *note Py_UNUSED: 19c9. macro for
     Windows MSVC compiler.  Patch by Victor Stinner.

   - gh-107226(24): *note PyModule_AddObjectRef(): 5fe. 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(): 421.  It was kept for backward
     compatibility with Python 3.0 - 3.2.  The *note PyUnicode_AsUTF8():
     421. is available since Python 3.3.  The *note
     PyUnicode_AsUTF8String(): 138a. function can be used to keep
     compatibility with Python 3.2 and older.  Patch by Victor Stinner.

   - gh-106572(26): Convert *note PyObject_DelAttr(): 1799. and *note
     PyObject_DelAttrString(): 179a. macros to functions.  Patch by
     Victor Stinner.

   - gh-106307(27): Add *note PyMapping_GetOptionalItem(): 5de.
     function.

   - gh-106521(28): Add *note PyObject_GetOptionalAttr(): 5e2. and *note
     PyObject_GetOptionalAttrString(): 5e3. functions.

   - gh-106320(29): Remove ‘_PyInterpreterState_Get()’ alias to *note
     PyInterpreterState_Get(): 640. 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: 503. or
     *note with assertions: 621, *note PyTuple_SET_ITEM(): 622. and
     *note PyList_SET_ITEM(): 623. 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(): 5d6. and *note
     PyDict_GetItemStringRef(): 41e. functions: similar to *note
     PyDict_GetItemWithError(): 5d7. but returning a *note strong
     reference: 5d8. instead of a *note borrowed reference: 3d4.  Patch
     by Victor Stinner.

   - gh-105927(36): Deprecate the *note PyWeakref_GetObject(): 3da. and
     *note PyWeakref_GET_OBJECT(): 3db. functions: use the new *note
     PyWeakref_GetRef(): 3dc. function instead.  Patch by Victor
     Stinner.

   - gh-105927(37): Add *note PyWeakref_GetRef(): 3dc. function: similar
     to *note PyWeakref_GetObject(): 3da. but returns a *note strong
     reference: 5d8, or ‘NULL’ if the referent is no longer live.  Patch
     by Victor Stinner.

   - gh-105922(38): Add *note PyImport_AddModuleRef(): 5ef.: similar to
     *note PyImport_AddModule(): 5f0, but return a *note strong
     reference: 5d8. instead of a *note borrowed reference: 3d4.  Patch
     by Victor Stinner.

   - gh-105227(39): The new *note PyType_GetDict(): 19ca. provides the
     dictionary for the given type object that is normally exposed by
     ‘cls.__dict__’.  Normally it’s sufficient to use *note tp_dict:
     19cb, 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(): 19cc. 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(): 784. and *note Py_DECREF(): 785. functions are now
     implemented as opaque function calls to hide implementation
     details.  Patch by Victor Stinner.

   - gh-105396(43): Deprecate the *note PyImport_ImportModuleNoBlock():
     3d8. function which is just an alias to *note
     PyImport_ImportModule(): 3d9. since Python 3.3.  Patch by Victor
     Stinner.

   - gh-103968(44): *note PyType_FromMetaclass(): 767. 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(): 3f1.

        * *note Py_GetExecPrefix(): 3e6.

        * *note Py_GetPath(): 3e0.

        * *note Py_GetPrefix(): 3e2.

        * *note Py_GetProgramFullPath(): 3e9.

        * *note Py_GetProgramName(): 3eb.

        * *note Py_GetPythonHome(): 3ec.

     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(): 62e. and *note PyBuffer_Release(): 62f.

   - 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(): 630. and *note PyObject_Call():
          631. (positional arguments must not be 'NULL') instead.

        * ‘PyEval_CallFunction()’: use *note PyObject_CallFunction():
          633.

        * ‘PyEval_CallMethod()’: use *note PyObject_CallMethod(): 634.

        * ‘PyCFunction_Call()’: use *note PyObject_Call(): 631.

     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*: 1ac.

   - gh-104922(55): ‘PY_SSIZE_T_CLEAN’ is no longer required to use
     ‘'#'’ formats in APIs like *note PyArg_ParseTuple(): 3be. and *note
     Py_BuildValue(): 3bf.  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: 799. or *note
     PyOS_ReadlineFunctionPointer: 79a. 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(): 5fd. function: similar to
     *note PyModule_AddObjectRef(): 5fe. and *note PyModule_AddObject():
     5ff, but always steals a reference to the value.

   - bpo-40309(59): Properly handle trailing spaces before closing
     parenthesis in *note Py_BuildValue(): 3bf. 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.24.24 Python 3.12.0 beta 1
----------------------------

'Data de lançamento: 2023-05-22'

* Menu:

* Segurança: Segurança<20>.
* Núcleo e embutidos: Núcleo e embutidos<23>.
* Biblioteca: Biblioteca<24>.
* Documentação: Documentação<18>.
* Testes: Testes<19>.
* Construção: Construção<22>.
* Windows: Windows<19>.
* macOS: macOS<14>.
* IDLE: IDLE<13>.
* Ferramentas/Demos: Ferramentas/Demos<19>.
* API C: API C<21>.


File: python.info,  Node: Segurança<20>,  Next: Núcleo e embutidos<23>,  Up: Python 3 12 0 beta 1

1.24.24.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: 6c. 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(): f2e. 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: Núcleo e embutidos<23>,  Next: Biblioteca<24>,  Prev: Segurança<20>,  Up: Python 3 12 0 beta 1

1.24.24.2 Núcleo e embutidos
............................

   - gh-102856(1): Implement PEP 701 changes in the *note tokenize: 101.
     module.  Patch by Marta Gómez Macías and Pablo Galindo Salgado

   - gh-104615(2): Fix wrong ordering of assignments in code like ‘a, a
     = x, y’.  Contributed by Carl Meyer.

   - gh-104572(3): Improve syntax error message for invalid constructs
     in PEP 695(4) contexts and in annotations when ‘from __future__
     import annotations’ is active.

   - gh-104482(5): Fix three error handling bugs in ast.c’s validation
     of pattern matching statements.

   - gh-102818(6): 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(7): Fix an issue where some *note bytecode: 4a4.
     instructions could ignore PEP 523(8) when “inlining” calls.

   - gh-103082(9): 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(10): 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(11): 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(12): 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(13): 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(14): Fix an issue where *note list: 24c. or *note tuple:
     608. repetition could fail to respect PEP 683(15).

   - gh-104078(16): Improve the performance of *note
     PyObject_HasAttrString(): 612.

   - gh-104066(17): Improve the performance of *note hasattr(): 6ee. for
     module objects with a missing attribute.

   - gh-104028(18): Reduce object creation while calling callback
     function from gc.  Patch by Donghee Na.

   - gh-104018(19): Disallow the “z” format specifier in %-format of
     bytes objects.

   - gh-102213(20): Fix performance loss when accessing an object’s
     attributes with ‘__getattr__’ defined.

   - gh-103895(21): 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(22): Don’t modify the refcounts of known immortal objects
     (*note True: dfb, *note False: d1f, and *note None: 87a.) in the
     main interpreter loop.

   - gh-103899(23): Provide a helpful hint in the *note TypeError: 198.
     message when accidentally calling a *note module: 191a. object that
     has a callable attribute of the same name (such as *note dis.dis():
     204. or *note datetime.datetime: 4dc.).

   - gh-103845(24): Remove both line and instruction instrumentation
     before adding new ones for monitoring, to avoid newly added
     instrumentation being removed immediately.

   - gh-103763(25): Implement PEP 695(26), 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.

   - gh-103801(27): Adds three minor linting fixes to the wasm module
     caught that were caught by ruff.

   - gh-103793(28): 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.

   - gh-102310(29): Change the error range for invalid bytes literals.

   - gh-103590(30): Do not wrap a single exception raised from a
     ‘try-except*’ construct in an *note ExceptionGroup: 4cc.

   - gh-103650(31): Change the perf map format to remove the ‘0x’ prefix
     from the addresses

   - gh-102856(32): 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(33): Clarify the error message raised when the called
     part of a class pattern isn’t actually a class.

   - gh-101517(34): Fix bug in line numbers of instructions emitted for
     *note except*: 1ac.

   - gh-103492(35): Clarify *note SyntaxWarning: 1ae. 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(36): Add *note LOAD_SUPER_ATTR: 6f7. (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(37): 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(38): 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(39): Exceptions raised in a typeobject’s ‘__set_name__’
     method are no longer wrapped by a *note RuntimeError: 243.  Context
     information is added to the exception as a PEP 678(40) note.

   - gh-103333(41): *note AttributeError: 5e4. now retains the ‘name’
     attribute when pickled and unpickled.

   - gh-103242(42): Migrate *note set_ecdh_curve(): 133f. method not to
     use deprecated OpenSSL APIs.  Patch by Donghee Na.

   - gh-103323(43): 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(44): 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(45): Allow built-in modules to be submodules.  This
     allows submodules to be statically linked into a CPython binary.

   - gh-103082(46): Implement PEP 669(47) Low Impact Monitoring for
     CPython.

   - gh-88691(48): Reduce the number of inline *note CACHE: 8fd. entries
     for *note CALL: 90a.

   - gh-102500(49): Make the buffer protocol accessible in Python code
     using the new ‘__buffer__’ and ‘__release_buffer__’ magic methods.
     See PEP 688(50) for details.  Patch by Jelle Zijlstra.

   - gh-97933(51): PEP 709(52): inline list, dict and set comprehensions
     to improve performance and reduce bytecode size.

   - gh-99184(53): Bypass instance attribute access of ‘__name__’ in
     ‘repr’ of *note weakref.ref: 11e6.

   - gh-98003(54): Complex function calls are now faster and consume no
     C stack space.

   - bpo-39610(55): ‘len()’ for 0-dimensional *note memoryview: 165.
     objects (such as ‘memoryview(ctypes.c_uint8(42))’) now raises a
     *note TypeError: 198.  Previously this returned ‘1’, which was not
     consistent with ‘mem_0d[0]’ raising an *note IndexError: 1723.

   - bpo-31821(56): Fix ‘pause_reading()’ to work when called from
     ‘connection_made()’ in *note asyncio: b.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102856

   (2) https://github.com/python/cpython/issues/104615

   (3) https://github.com/python/cpython/issues/104572

   (4) https://peps.python.org/pep-0695/

   (5) https://github.com/python/cpython/issues/104482

   (6) https://github.com/python/cpython/issues/102818

   (7) https://github.com/python/cpython/issues/104405

   (8) https://peps.python.org/pep-0523/

   (9) https://github.com/python/cpython/issues/103082

   (10) https://github.com/python/cpython/issues/104263

   (11) https://github.com/python/cpython/issues/99113

   (12) https://github.com/python/cpython/issues/99113

   (13) https://github.com/python/cpython/issues/104108

   (14) https://github.com/python/cpython/issues/104142

   (15) https://peps.python.org/pep-0683/

   (16) https://github.com/python/cpython/issues/104078

   (17) https://github.com/python/cpython/issues/104066

   (18) https://github.com/python/cpython/issues/104028

   (19) https://github.com/python/cpython/issues/104018

   (20) https://github.com/python/cpython/issues/102213

   (21) https://github.com/python/cpython/issues/103895

   (22) https://github.com/python/cpython/issues/103907

   (23) https://github.com/python/cpython/issues/103899

   (24) https://github.com/python/cpython/issues/103845

   (25) https://github.com/python/cpython/issues/103763

   (26) https://peps.python.org/pep-0695/

   (27) https://github.com/python/cpython/issues/103801

   (28) https://github.com/python/cpython/issues/103793

   (29) https://github.com/python/cpython/issues/102310

   (30) https://github.com/python/cpython/issues/103590

   (31) https://github.com/python/cpython/issues/103650

   (32) https://github.com/python/cpython/issues/102856

   (33) https://github.com/python/cpython/issues/100530

   (34) https://github.com/python/cpython/issues/101517

   (35) https://github.com/python/cpython/issues/103492

   (36) https://github.com/python/cpython/issues/87729

   (37) https://github.com/python/cpython/issues/103488

   (38) https://github.com/python/cpython/issues/82012

   (39) https://github.com/python/cpython/issues/77757

   (40) https://peps.python.org/pep-0678/

   (41) https://github.com/python/cpython/issues/103333

   (42) https://github.com/python/cpython/issues/103242

   (43) https://github.com/python/cpython/issues/103323

   (44) https://github.com/python/cpython/issues/84436

   (45) https://github.com/python/cpython/issues/102700

   (46) https://github.com/python/cpython/issues/103082

   (47) https://peps.python.org/pep-0669/

   (48) https://github.com/python/cpython/issues/88691

   (49) https://github.com/python/cpython/issues/102500

   (50) https://peps.python.org/pep-0688/

   (51) https://github.com/python/cpython/issues/97933

   (52) https://peps.python.org/pep-0709/

   (53) https://github.com/python/cpython/issues/99184

   (54) https://github.com/python/cpython/issues/98003

   (55) https://bugs.python.org/issue?@action=redirect&bpo=39610

   (56) https://bugs.python.org/issue?@action=redirect&bpo=31821


File: python.info,  Node: Biblioteca<24>,  Next: Documentação<18>,  Prev: Núcleo e embutidos<23>,  Up: Python 3 12 0 beta 1

1.24.24.3 Biblioteca
....................

   - gh-104600(1): *note functools.update_wrapper(): 1218. now sets the
     ‘__type_params__’ attribute (added by PEP 695(2)).

   - gh-104340(3): 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(4): Fix issue where an *note issubclass(): 9ba. check
     comparing a class ‘X’ against a *note runtime-checkable protocol:
     669. ‘Y’ with non-callable members would not cause *note TypeError:
     198. to be raised if an *note isinstance(): 2ac. 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(5): Refactored the ‘_posixsubprocess’ internals to avoid
     Python C API usage between fork and exec when marking ‘pass_fds=’
     file descriptors inheritable.

   - gh-104484(6): Added 'case_sensitive' argument to *note
     pathlib.PurePath.match(): 6c8.

   - gh-75367(7): Fix data descriptor detection in *note
     inspect.getattr_static(): 6b1.

   - gh-104536(8): Fix a race condition in the internal
     ‘multiprocessing.process’ cleanup logic that could manifest as an
     unintended ‘AttributeError’ when calling ‘process.close()’.

   - gh-103857(9): Update datetime deprecations’ stracktrace to point to
     the calling line

   - gh-101520(10): Move the core functionality of the ‘tracemalloc’
     module in the ‘Python/’ folder, leaving just the module wrapper in
     ‘Modules/’.

   - gh-104392(11): Remove undocumented and unused ‘_paramspec_tvars’
     attribute from some classes in *note typing: 10a.

   - gh-102613(12): Fix issue where *note pathlib.Path.glob(): 531.
     raised *note RecursionError: f5c. when walking deep directory
     trees.

   - gh-103000(13): Improve performance of *note dataclasses.asdict():
     19d1. for the common case where 'dict_factory' is ‘dict’.  Patch by
     David C Ellis.

   - gh-104301(14): Allow leading whitespace in disambiguated statements
     in *note pdb: aa.

   - gh-104139(15): Teach ‘urllib.parse.unsplit()’ to retain the ‘"//"’
     when assembling ‘itms-services://?action=generate-bugs’ style Apple
     Platform Deployment(16) URLs.

   - gh-104307(17): *note socket.getnameinfo(): 1978. now releases the
     GIL while contacting the DNS server

   - gh-104310(18): 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(19): Fix issue where *note pathlib.Path.glob(): 531.
     raised *note OSError: 2bf. when it encountered a symlink to an
     overly long path.

   - gh-104265(20): 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(21)).  Patch by
     Radislav Chugunov.

   - gh-102613(22): Improve performance of *note pathlib.Path.glob():
     531. when expanding recursive wildcards (”‘**’”) by merging
     adjacent wildcards and de-duplicating results only when necessary.

   - gh-65772(23): Remove unneeded comments and code in turtle.py.

   - gh-90208(24): Fixed issue where *note pathlib.Path.glob(): 531.
     returned incomplete results when it encountered a *note
     PermissionError: f32.  This method now suppresses all *note
     OSError: 2bf. exceptions, except those raised from calling *note
     is_dir(): 534. on the top-level path.

   - gh-104144(25): Optimize *note asyncio.TaskGroup: 4cb. when using
     *note asyncio.eager_task_factory(): 697.  Skip scheduling a done
     callback if a TaskGroup task completes eagerly.

   - gh-104144(26): Optimize *note asyncio.gather(): 808. when using
     *note asyncio.eager_task_factory(): 697. to complete eagerly if all
     fututres completed eagerly.  Avoid scheduling done callbacks for
     futures that complete eagerly.

   - gh-104114(27): Fix issue where *note pathlib.Path.glob(): 531.
     returns paths using the case of non-wildcard segments for
     corresponding path segments, rather than the real filesystem case.

   - gh-104104(28): Improve performance of *note pathlib.Path.glob():
     531. by using *note re.IGNORECASE: 19d2. to implement
     case-insensitive matching.

   - gh-104102(29): Improve performance of *note pathlib.Path.glob():
     531. when evaluating patterns that contain ‘'../'’ segments.

   - gh-103822(30): Update the return type of ‘weekday’ to the newly
     added Day attribute

   - gh-103629(31): Update the ‘repr’ of *note typing.Unpack: 18ea.
     according to PEP 692(32).

   - gh-103963(33): Make *note dis: 3c. display the names of the args
     for ‘CALL_INTRINSIC_*’.

   - gh-104035(34): Do not ignore user-defined ‘__getstate__’ and
     ‘__setstate__’ methods for slotted frozen dataclasses.

   - gh-103987(35): In *note mmap: 94, fix several bugs that could lead
     to access to memory-mapped files after they have been invalidated.

   - gh-103977(36): Improve import time of *note platform: af. module.

   - gh-88773(37): Added *note turtle.teleport(): 19d3. to the *note
     turtle: 107. module to move a turtle to a new point without tracing
     a line, visible or invisible.  Patch by Liam Gersten.

   - gh-103935(38): Use *note io.open_code(): 19d4. for files to be
     executed instead of raw *note open(): 314.

   - gh-68968(39): Fixed garbled output of *note assertEqual(): 741.
     when an input lacks final newline.

   - gh-100370(40): Fix potential *note OverflowError: a77. in *note
     sqlite3.Connection.blobopen(): 886. for 32-bit builds.  Patch by
     Erlend E. Aasland.

   - gh-102628(41): Substitute CTRL-D with CTRL-Z in *note sqlite3: d4.
     CLI banner when running on Windows.

   - gh-103636(42): Module-level attributes ‘January’ and ‘February’ are
     deprecated from *note calendar: 15.

   - gh-103583(43): Isolate ‘_multibytecodec’ and codecs extension
     modules.  Patches by Erlend E. Aasland.

   - gh-103848(44): Add checks to ensure that ‘[’ bracketed ‘]’ hosts
     found by *note urllib.parse.urlsplit(): f2e. are of IPv6 or
     IPvFuture format.

   - gh-103872(45): Update the bundled copy of pip to version 23.1.2.

   - gh-99944(46): Make *note dis: 3c. display the value of oparg of
     ‘KW_NAMES’.

   - gh-74940(47): 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(48): Fix ‘zipfile.Zipfile’ creating invalid zip files
     when ‘force_zip64’ was used to add files to them.  Patch by Carey
     Metcalfe.

   - gh-103857(49): Deprecated *note datetime.datetime.utcnow(): 34e.
     and *note datetime.datetime.utcfromtimestamp(): 34f.  (Patch by
     Paul Ganssle)

   - gh-103839(50): Avoid compilation error due to tommath.h not being
     found when building Tkinter against Tcl 8.7 built with bundled
     libtommath.

   - gh-103791(51): *note contextlib.suppress: 111e. now supports
     suppressing exceptions raised as part of an *note ExceptionGroup:
     4cc.  If other exceptions exist on the group, they are re-raised in
     a group that does not contain the suppressed exceptions.

   - gh-90750(52): Use *note datetime.datetime.fromisocalendar(): bd6.
     in the implementation of *note datetime.datetime.strptime(): 18a3,
     which should now accept only valid ISO dates.  (Patch by Paul
     Ganssle)

   - gh-103685(53): 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(54): *note urllib.request.CacheFTPHandler: 19d5. 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(55): Add ‘__orig_bases__’ to non-generic TypedDicts,
     call-based TypedDicts, and call-based NamedTuples.  Other
     TypedDicts and NamedTuples already had the attribute.

   - gh-103693(56): Add convenience variable feature to *note pdb: aa.

   - gh-92248(57): Deprecate ‘type’, ‘choices’, and ‘metavar’ parameters
     of ‘argparse.BooleanOptionalAction’.

   - gh-89415(58): Add *note socket: d1. constants for source-specific
     multicast.  Patch by Reese Hyde.

   - gh-103673(59): *note socketserver: d2. gains
     ‘ForkingUnixStreamServer’ and ‘ForkingUnixDatagramServer’ classes.
     Patch by Jay Berry.

   - gh-103636(60): Added Enum for months and days in the calendar
     module.

   - gh-84976(61): 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(62): Attributes/methods are no longer shadowed by
     same-named enum members, although they may be shadowed by
     enum.property’s.

   - gh-103584(63): 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(64): Fixed a bug where *note pdb: aa. crashes when
     reading source file with different encoding by replacing *note
     io.open(): 735. with *note io.open_code(): 19d4.  The new method
     would also call into the hook set by *note
     PyFile_SetOpenCodeHook(): 19d6.

   - gh-103556(65): Now creating *note inspect.Signature: 4dd. objects
     with positional-only parameter with a default followed by a
     positional-or-keyword parameter without one is impossible.

   - gh-103559(66): Update the bundled copy of pip to version 23.1.1.

   - gh-103548(67): Improve performance of *note
     pathlib.Path.absolute(): 1963. and *note cwd(): 19d7. by joining
     paths only when necessary.  Also improve performance of *note
     pathlib.PurePath.is_absolute(): 19d8. on Posix by skipping path
     parsing and normalization.

   - gh-103538(68): 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(69): Update *note cProfile: 2b. to use PEP 669 API

   - gh-103525(70): Fix misleading exception message when mixed ‘str’
     and ‘bytes’ arguments are supplied to *note pathlib.PurePath: 6c2.
     and *note Path: 265.

   - gh-103489(71): Add *note getconfig(): 6d5. and *note setconfig():
     6d6. to *note Connection: 547. to make configuration changes to a
     database connection.  Patch by Erlend E. Aasland.

   - gh-103365(72): Set default Flag boundary to ‘STRICT’ and fix
     bitwise operations.

   - gh-103472(73): Avoid a potential *note ResourceWarning: 546. in
     *note http.client.HTTPConnection: d29. by closing the proxy /
     tunnel’s CONNECT response explicitly.

   - gh-103462(74): Fixed an issue with using *note writelines(): 1752.
     in *note asyncio: b. to send very large payloads that exceed the
     amount of data that can be written in one call to *note
     socket.socket.send(): f9b. or *note socket.socket.sendmsg(): 696,
     resulting in the remaining buffer being left unwritten.

   - gh-103449(75): Fix a bug in doc string generation in *note
     dataclasses.dataclass(): 4db.

   - gh-103092(76): Isolate ‘_collections’ (apply PEP 687(77)).  Patch
     by Erlend E. Aasland.

   - gh-103357(78): Added support for *note logging.Formatter: 1685.
     ‘defaults’ parameter to *note logging.config.dictConfig(): 13ac.
     and *note logging.config.fileConfig(): d3c.  Patch by Bar Harel.

   - gh-103092(79): Adapt the *note winreg: 11c. extension module to PEP
     687(80).

   - gh-74690(81): The performance of *note isinstance(): 2ac. checks
     against *note runtime-checkable protocols: 669. has been
     considerably improved for protocols that only have a few members.
     To achieve this improvement, several internal implementation
     details of the *note typing: 10a. module have been refactored,
     including ‘typing._ProtocolMeta.__instancecheck__’,
     ‘typing._is_callable_members_only’, and
     ‘typing._get_protocol_attrs’.  Patches by Alex Waygood.

   - gh-74690(82): 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”: 6ed. for more
     details.

   - gh-103256(83): Fixed a bug that caused *note hmac: 6e. 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(84): Support ‘sys.last_exc’ in *note idlelib: 77.

   - gh-103285(85): Improve performance of *note
     ast.get_source_segment(): bc1.

   - gh-103225(86): Fix a bug in *note pdb: aa. when displaying line
     numbers of module-level source code.

   - gh-103092(87): Adapt the *note msvcrt: 97. extension module to PEP
     687(88).

   - gh-103092(89): Adapt the *note winsound: 11d. extension module to
     PEP 687(90).

   - gh-93910(91): Remove deprecation of enum ‘member.member’ access.

   - gh-102978(92): Fixes *note unittest.mock.patch(): 1088. not
     enforcing function signatures for methods decorated with
     ‘@classmethod’ or ‘@staticmethod’ when patch is called with
     ‘autospec=True’.

   - gh-103092(93): Isolate ‘_socket’ (apply PEP 687(94)).  Patch by
     Erlend E. Aasland.

   - gh-100479(95): Add *note pathlib.PurePath.with_segments(): 6c3,
     which creates a path object from arguments.  This method is called
     whenever a derivative path is created, such as from *note
     pathlib.PurePath.parent: 19d9.  Subclasses may override this method
     to share information between path objects.

   - gh-103220(96): Fix issue where *note os.path.join(): 18ed. added a
     slash when joining onto an incomplete UNC drive with a trailing
     slash on Windows.

   - gh-103204(97): Fixes *note http.server: 76. 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(98): Fix various Windows-specific issues with
     ‘shutil.which’.

   - gh-103193(99): Improve performance of *note
     inspect.getattr_static(): 6b1.  Patch by Alex Waygood.

   - gh-103176(100): *note sys._current_exceptions(): 6de. now returns a
     mapping from thread-id to an exception instance, rather than to a
     ‘(typ, exc, tb)’ tuple.

   - gh-103143(101): Polish the help messages and docstrings of *note
     pdb: aa.

   - gh-103015(102): Add 'entrypoint' keyword-only parameter to *note
     sqlite3.Connection.load_extension(): 6d4, for overriding the SQLite
     extension entry point.  Patch by Erlend E. Aasland.

   - gh-103000(103): Improve performance of *note dataclasses.astuple():
     19da. and *note dataclasses.asdict(): 19d1. in cases where the
     contents are common Python types.

   - gh-102953(104): The extraction methods in *note tarfile: e4, and
     *note shutil.unpack_archive(): 68b, 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: 68c. for details.

   - gh-97696(105): 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(106): Add 'case_sensitive' keyword-only argument to *note
     pathlib.Path.glob(): 531. and *note rglob(): 532.

   - gh-101819(107): Isolate the *note io: 83. extension module by
     applying PEP 687(108).  Patch by Kumar Aditya, Victor Stinner, and
     Erlend E. Aasland.

   - gh-91896(109): Deprecate *note collections.abc.ByteString: 340.

   - gh-101362(110): Speed up *note pathlib.Path: 265. construction by
     omitting the path anchor from the internal list of path parts.

   - gh-102114(111): Functions in the *note dis: 3c. 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(112): The *note unittest: 10c. 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(113): Fix incorrect normalization of UNC device path
     roots, and partial UNC share path roots, in *note pathlib.PurePath:
     6c2.  Pathlib no longer appends a trailing slash to such paths.

   - gh-85984(114): Add *note tty.cfmakeraw(): 1980. and *note
     tty.cfmakecbreak(): 1932. to *note tty: 106. and modernize, the
     behavior of *note tty.setraw(): 197f. and *note tty.setcbreak():
     1931. to use POSIX.1-2017 Chapter 11 “General Terminal Interface”
     flag masks by default.

   - gh-101688(115): Implement *note types.get_original_bases(): 6ea. to
     provide further introspection for types.

   - gh-101640(116): *note argparse.ArgumentParser: 1bd. now catches
     errors when writing messages, such as when *note sys.stderr: b29.
     is ‘None’.  Patch by Oleg Iarygin.

   - gh-83861(117): 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(118): Decrease execution time of some *note gzip: 6b. file
     writes by 15% by adding more appropriate buffering.

   - gh-95299(119): Remove the bundled setuptools wheel from
     ‘ensurepip’, and stop installing setuptools in environments created
     by ‘venv’.

   - gh-99353(120): Respect the *note http.client.HTTPConnection: d29.
     ‘.debuglevel’ flag in ‘urllib.request.AbstractHTTPHandler’ when its
     constructor parameter ‘debuglevel’ is not set.  And do the same for
     ‘*HTTPS*’.

   - gh-98040(121): Remove the long-deprecated ‘imp’ module.

   - gh-97850(122): Deprecate ‘pkgutil.find_loader()’ and
     ‘pkgutil.get_loader()’ in favor of *note
     importlib.util.find_spec(): 5a8.

   - gh-94473(123): 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(124): Remove more deprecated importlib APIs:
     ‘find_loader()’, ‘find_module()’, ‘importlib.abc.Finder’,
     ‘pkgutil.ImpImporter’, ‘pkgutil.ImpLoader’.

   - gh-96522(125): Fix potential deadlock in pty.spawn()

   - gh-96534(126): Support divert(4) added in FreeBSD 14.

   - gh-87474(127): Fix potential file descriptor leaks in *note
     subprocess.Popen: 4b1.

   - gh-94906(128): Support multiple steps in *note math.nextafter():
     6b5.  Patch by Shantanu Jain and Matthias Gorgens.

   - gh-51574(129): Make *note tempfile.mkdtemp(): 527. return absolute
     paths when its 'dir' parameter is relative.

   - gh-94518(130): Convert private ‘_posixsubprocess.fork_exec()’ to
     use Argument Clinic.

   - gh-92184(131): When creating zip files using *note zipfile: 137,
     ‘os.altsep’, if not ‘None’, will always be treated as a path
     separator even when it is not ‘/’.  Patch by Carey Metcalfe.

   - bpo-46797(132): 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(133): Enables *note webbrowser: 11b. to detect and launch
     Microsoft Edge browser.

   - bpo-45606(134): Fixed the bug in *note pathlib.Path.glob(): 531. –
     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(135): Add *note QUOTE_STRINGS: 6a2. and *note
     QUOTE_NOTNULL: 6a1. to the suite of *note csv: 2d. module quoting
     styles.

   - bpo-24964(136): Added *note
     http.client.HTTPConnection.get_proxy_response_headers(): 19b2. that
     provides access to the HTTP headers on a proxy server response to
     the ‘CONNECT’ request.

   - bpo-17258(137): *note multiprocessing: 98. now supports stronger
     HMAC algorithms for inter-process connection authentication rather
     than only HMAC-MD5.

   - bpo-39744(138): Make *note
     asyncio.subprocess.Process.communicate(): 19db. close the
     subprocess’s stdin even when called with ‘input=None’.

   - bpo-22708(139): 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://github.com/python/cpython/issues/104600

   (2) https://peps.python.org/pep-0695/

   (3) https://github.com/python/cpython/issues/104340

   (4) https://github.com/python/cpython/issues/104555

   (5) https://github.com/python/cpython/issues/104372

   (6) https://github.com/python/cpython/issues/104484

   (7) https://github.com/python/cpython/issues/75367

   (8) https://github.com/python/cpython/issues/104536

   (9) https://github.com/python/cpython/issues/103857

   (10) https://github.com/python/cpython/issues/101520

   (11) https://github.com/python/cpython/issues/104392

   (12) https://github.com/python/cpython/issues/102613

   (13) https://github.com/python/cpython/issues/103000

   (14) https://github.com/python/cpython/issues/104301

   (15) https://github.com/python/cpython/issues/104139

   (16) 
https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web

   (17) https://github.com/python/cpython/issues/104307

   (18) https://github.com/python/cpython/issues/104310

   (19) https://github.com/python/cpython/issues/87695

   (20) https://github.com/python/cpython/issues/104265

   (21) https://bugs.python.org/issue?@action=redirect&bpo=14935

   (22) https://github.com/python/cpython/issues/102613

   (23) https://github.com/python/cpython/issues/65772

   (24) https://github.com/python/cpython/issues/90208

   (25) https://github.com/python/cpython/issues/104144

   (26) https://github.com/python/cpython/issues/104144

   (27) https://github.com/python/cpython/issues/104114

   (28) https://github.com/python/cpython/issues/104104

   (29) https://github.com/python/cpython/issues/104102

   (30) https://github.com/python/cpython/issues/103822

   (31) https://github.com/python/cpython/issues/103629

   (32) https://peps.python.org/pep-0692/

   (33) https://github.com/python/cpython/issues/103963

   (34) https://github.com/python/cpython/issues/104035

   (35) https://github.com/python/cpython/issues/103987

   (36) https://github.com/python/cpython/issues/103977

   (37) https://github.com/python/cpython/issues/88773

   (38) https://github.com/python/cpython/issues/103935

   (39) https://github.com/python/cpython/issues/68968

   (40) https://github.com/python/cpython/issues/100370

   (41) https://github.com/python/cpython/issues/102628

   (42) https://github.com/python/cpython/issues/103636

   (43) https://github.com/python/cpython/issues/103583

   (44) https://github.com/python/cpython/issues/103848

   (45) https://github.com/python/cpython/issues/103872

   (46) https://github.com/python/cpython/issues/99944

   (47) https://github.com/python/cpython/issues/74940

   (48) https://github.com/python/cpython/issues/103861

   (49) https://github.com/python/cpython/issues/103857

   (50) https://github.com/python/cpython/issues/103839

   (51) https://github.com/python/cpython/issues/103791

   (52) https://github.com/python/cpython/issues/90750

   (53) https://github.com/python/cpython/issues/103685

   (54) https://github.com/python/cpython/issues/81403

   (55) https://github.com/python/cpython/issues/103699

   (56) https://github.com/python/cpython/issues/103693

   (57) https://github.com/python/cpython/issues/92248

   (58) https://github.com/python/cpython/issues/89415

   (59) https://github.com/python/cpython/issues/103673

   (60) https://github.com/python/cpython/issues/103636

   (61) https://github.com/python/cpython/issues/84976

   (62) https://github.com/python/cpython/issues/103596

   (63) https://github.com/python/cpython/issues/103584

   (64) https://github.com/python/cpython/issues/103578

   (65) https://github.com/python/cpython/issues/103556

   (66) https://github.com/python/cpython/issues/103559

   (67) https://github.com/python/cpython/issues/103548

   (68) https://github.com/python/cpython/issues/103538

   (69) https://github.com/python/cpython/issues/103533

   (70) https://github.com/python/cpython/issues/103525

   (71) https://github.com/python/cpython/issues/103489

   (72) https://github.com/python/cpython/issues/103365

   (73) https://github.com/python/cpython/issues/103472

   (74) https://github.com/python/cpython/issues/103462

   (75) https://github.com/python/cpython/issues/103449

   (76) https://github.com/python/cpython/issues/103092

   (77) https://peps.python.org/pep-0687/

   (78) https://github.com/python/cpython/issues/103357

   (79) https://github.com/python/cpython/issues/103092

   (80) https://peps.python.org/pep-0687/

   (81) https://github.com/python/cpython/issues/74690

   (82) https://github.com/python/cpython/issues/74690

   (83) https://github.com/python/cpython/issues/103256

   (84) https://github.com/python/cpython/issues/102778

   (85) https://github.com/python/cpython/issues/103285

   (86) https://github.com/python/cpython/issues/103225

   (87) https://github.com/python/cpython/issues/103092

   (88) https://peps.python.org/pep-0687/

   (89) https://github.com/python/cpython/issues/103092

   (90) https://peps.python.org/pep-0687/

   (91) https://github.com/python/cpython/issues/93910

   (92) https://github.com/python/cpython/issues/102978

   (93) https://github.com/python/cpython/issues/103092

   (94) https://peps.python.org/pep-0687/

   (95) https://github.com/python/cpython/issues/100479

   (96) https://github.com/python/cpython/issues/103220

   (97) https://github.com/python/cpython/issues/103204

   (98) https://github.com/python/cpython/issues/75586

   (99) https://github.com/python/cpython/issues/103193

   (100) https://github.com/python/cpython/issues/103176

   (101) https://github.com/python/cpython/issues/103143

   (102) https://github.com/python/cpython/issues/103015

   (103) https://github.com/python/cpython/issues/103000

   (104) https://github.com/python/cpython/issues/102953

   (105) https://github.com/python/cpython/issues/97696

   (106) https://github.com/python/cpython/issues/81079

   (107) https://github.com/python/cpython/issues/101819

   (108) https://peps.python.org/pep-0687/

   (109) https://github.com/python/cpython/issues/91896

   (110) https://github.com/python/cpython/issues/101362

   (111) https://github.com/python/cpython/issues/102114

   (112) https://github.com/python/cpython/issues/62432

   (113) https://github.com/python/cpython/issues/78079

   (114) https://github.com/python/cpython/issues/85984

   (115) https://github.com/python/cpython/issues/101688

   (116) https://github.com/python/cpython/issues/101640

   (117) https://github.com/python/cpython/issues/83861

   (118) https://github.com/python/cpython/issues/89550

   (119) https://github.com/python/cpython/issues/95299

   (120) https://github.com/python/cpython/issues/99353

   (121) https://github.com/python/cpython/issues/98040

   (122) https://github.com/python/cpython/issues/97850

   (123) https://github.com/python/cpython/issues/94473

   (124) https://github.com/python/cpython/issues/98040

   (125) https://github.com/python/cpython/issues/96522

   (126) https://github.com/python/cpython/issues/96534

   (127) https://github.com/python/cpython/issues/87474

   (128) https://github.com/python/cpython/issues/94906

   (129) https://github.com/python/cpython/issues/51574

   (130) https://github.com/python/cpython/issues/94518

   (131) https://github.com/python/cpython/issues/92184

   (132) https://bugs.python.org/issue?@action=redirect&bpo=46797

   (133) https://bugs.python.org/issue?@action=redirect&bpo=44844

   (134) https://bugs.python.org/issue?@action=redirect&bpo=45606

   (135) https://bugs.python.org/issue?@action=redirect&bpo=23041

   (136) https://bugs.python.org/issue?@action=redirect&bpo=24964

   (137) https://bugs.python.org/issue?@action=redirect&bpo=17258

   (138) https://bugs.python.org/issue?@action=redirect&bpo=39744

   (139) https://bugs.python.org/issue?@action=redirect&bpo=22708


File: python.info,  Node: Documentação<18>,  Next: Testes<19>,  Prev: Biblioteca<24>,  Up: Python 3 12 0 beta 1

1.24.24.4 Documentação
......................

   - gh-67056(1): Document that the effect of registering or
     unregistering an *note atexit: d. 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<19>,  Next: Construção<22>,  Prev: Documentação<18>,  Up: Python 3 12 0 beta 1

1.24.24.5 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: 13a.
     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*: 319. 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<22>,  Next: Windows<19>,  Prev: Testes<19>,  Up: Python 3 12 0 beta 1

1.24.24.6 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<22>,  Up: Python 3 12 0 beta 1

1.24.24.7 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(): 132a. 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: 198. 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<13>,  Prev: Windows<19>,  Up: Python 3 12 0 beta 1

1.24.24.8 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<13>,  Next: Ferramentas/Demos<19>,  Prev: macOS<14>,  Up: Python 3 12 0 beta 1

1.24.24.9 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<19>,  Next: API C<21>,  Prev: IDLE<13>,  Up: Python 3 12 0 beta 1

1.24.24.10 Ferramentas/Demos
............................

   - gh-104389(1): Argument Clinic C converters now accept the ‘unused’
     keyword, for wrapping a parameter with *note Py_UNUSED: 19c9.
     Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104389


File: python.info,  Node: API C<21>,  Prev: Ferramentas/Demos<19>,  Up: Python 3 12 0 beta 1

1.24.24.11 API C
................

   - gh-101291(1): Added unstable C API for extracting the value of
     “compact” integers: *note PyUnstable_Long_IsCompact(): 79b. and
     *note PyUnstable_Long_CompactValue(): 79c.

   - 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(): 792. and its variants now
     allow creating classes whose metaclass overrides *note tp_new: 794.
     The ‘tp_new’ is ignored.  This behavior is deprecated and will be
     disallowed in 3.14+.  The new *note PyType_FromMetaclass(): 767.
     already disallows it.

   - gh-103743(4): Add *note PyUnstable_Object_GC_NewWithExtraData():
     19e4. 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():
     19e5, *note PyUnstable_PerfMapState_Init(): 19e6. and *note
     PyUnstable_PerfMapState_Fini(): 19e7.  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: 19e8. 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: 75f. can now be zero
     or negative, *note PyObject_GetTypeData(): 760. can be used to get
     subclass-specific data, and *note Py_TPFLAGS_ITEMS_AT_END: 762. 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: 19e9. 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(): 61f. and *note PyUnicode_FromFormatV():
     789.

   - 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.24.25 Python 3.12.0 alpha 7
-----------------------------

'Data de lançamento: 2023-04-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<24>.
* Biblioteca: Biblioteca<25>.
* Documentação: Documentação<19>.
* Testes: Testes<20>.
* Construção: Construção<23>.
* Windows: Windows<20>.
* Ferramentas/Demos: Ferramentas/Demos<20>.
* API C: API C<22>.


File: python.info,  Node: Núcleo e embutidos<24>,  Next: Biblioteca<25>,  Up: Python 3 12 0 alpha 7

1.24.25.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: 8fd. entries
     for ‘BINARY_SUBSCR’.

   - 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: 6da. and deprecate *note
     sys.last_type: 6db, *note sys.last_value: 6dc. and *note
     sys.last_traceback: 6dd, which hold the same information in its
     legacy form.

   - gh-100982(6): Replace all occurrences of ‘COMPARE_AND_BRANCH’ with
     *note COMPARE_OP: b57.

   - gh-102701(7): Fix overflow when creating very large dict.

   - gh-102755(8): Add *note PyErr_DisplayException(): 432. 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: 8fd. entries
     used by *note LOAD_GLOBAL: 1998.

   - gh-102491(11): 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’).

   - gh-101291(12): 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(13): Fix segfault from race condition in signal handling
     during garbage collection.  Patch by Kumar Aditya.

   - gh-102406(14): *note codecs: 1c. encoding/decoding errors now get
     the context information (which operation and which codecs) attached
     as PEP 678(15) notes instead of through chaining a new instance of
     the exception.

   - gh-102281(16): Fix potential nullptr dereference and use of
     uninitialized memory in fileutils.  Patch by Max Bachmann.

   - gh-102300(17): Reuse operands with refcount of 1 in float
     specializations of BINARY_OP.

   - gh-102213(18): Fix performance loss when accessing an object’s
     attributes with ‘__getattr__’ defined.

   - gh-102255(19): Improve build support for the Xbox.  Patch by Max
     Bachmann.

   - gh-102027(20): Fix SSE2 and SSE3 detection in ‘_blake2’ internal
     module.  Patch by Max Bachmann.

   - gh-101865(21): Deprecate ‘co_lnotab’ in code objects, schedule it
     for removal in Python 3.14

   - bpo-1635741(22): Adapt ‘_pickle’ to PEP 687(23).  Patch by Mohamed
     Koubaa and Erlend Aasland.

   ---------- 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

   (11) https://github.com/python/cpython/issues/102491

   (12) https://github.com/python/cpython/issues/101291

   (13) https://github.com/python/cpython/issues/102397

   (14) https://github.com/python/cpython/issues/102406

   (15) https://peps.python.org/pep-0678/

   (16) https://github.com/python/cpython/issues/102281

   (17) https://github.com/python/cpython/issues/102300

   (18) https://github.com/python/cpython/issues/102213

   (19) https://github.com/python/cpython/issues/102255

   (20) https://github.com/python/cpython/issues/102027

   (21) https://github.com/python/cpython/issues/101865

   (22) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (23) https://peps.python.org/pep-0687/


File: python.info,  Node: Biblioteca<25>,  Next: Documentação<19>,  Prev: Núcleo e embutidos<24>,  Up: Python 3 12 0 alpha 7

1.24.25.2 Biblioteca
....................

   - gh-103085(1): Pure python *note locale.getencoding(): 327. will not
     warn deprecation.

   - gh-103068(2): It’s no longer possible to register conditional
     breakpoints in *note Pdb: 272. that raise *note SyntaxError: 18e.
     Patch by Tian Gao.

   - gh-102549(3): Don’t ignore exceptions in member type creation.

   - gh-103056(4): Ensure final ‘_generate_next_value_’ is a
     ‘staticmethod’.

   - gh-103046(5): Display current line label correctly in *note dis:
     3c. when ‘show_caches’ is False and ‘lasti’ points to a CACHE
     entry.

   - gh-102433(6): *note isinstance(): 2ac. checks against *note
     runtime-checkable protocols: 669. now use *note
     inspect.getattr_static(): 6b1. rather than *note hasattr(): 6ee. to
     lookup whether attributes exist.  This means that descriptors and
     *note __getattr__(): 6ef. 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(7): It’s no longer possible to register expressions to
     display in *note Pdb: 272. that raise *note SyntaxError: 18e.
     Patch by Tian Gao.

   - gh-102947(8): Improve traceback when *note dataclasses.fields():
     1887. is called on a non-dataclass.  Patch by Alex Waygood

   - gh-102780(9): The *note asyncio.Timeout: 197e. context manager now
     works reliably even when performing cleanup due to task
     cancellation.  Previously it could raise a *note CancelledError:
     4ce. instead of an *note TimeoutError: 19ed. in such cases.

   - gh-102871(10): Remove support for obsolete browsers from *note
     webbrowser: 11b.  Removed browsers include Grail, Mosaic, Netscape,
     Galeon, Skipstone, Iceape, Firebird, and Firefox versions 35 and
     below.

   - gh-102839(11): Improve performance of *note math.log(): 16ae.
     arguments handling by removing the argument clinic.

   - gh-102828(12): Add the ‘onexc’ arg to *note shutil.rmtree(): 353,
     which is like ‘onerror’ but expects an exception instance rather
     than an exc_info tuple.  Deprecate ‘onerror’.

   - gh-88965(13): typing: Fix a bug relating to substitution in custom
     classes generic over a *note ParamSpec: 481.  Previously, if the
     ‘ParamSpec’ was substituted with a parameters list that itself
     contained a *note TypeVar: 480, the ‘TypeVar’ in the parameters
     list could not be subsequently substituted.  This is now fixed.

     Patch by Nikita Sobolev.

   - gh-76846(14): Fix issue where ‘__new__()’ and ‘__init__()’ methods
     of *note pathlib.PurePath: 6c2. and *note Path: 265. subclasses
     were not called in some circumstances.

   - gh-78530(15): *note asyncio.wait(): 69c. now accepts generators
     yielding tasks.  Patch by Kumar Aditya.

   - gh-102748(16): *note asyncio.iscoroutine(): 69b. now returns
     ‘False’ for generators as *note asyncio: b. does not support legacy
     generator-based coroutines.  Patch by Kumar Aditya.

   - gh-102670(17): Optimized fmean(), correlation(), covariance(), and
     linear_regression() using the new math.sumprod() function.

   - gh-102615(18): Typing: Improve the ‘repr’ of generic aliases for
     classes generic over a *note ParamSpec: 481.  (Use square brackets
     to represent a parameter list.)

   - gh-100112(19): *note asyncio.Task.get_coro(): bc5. now always
     returns a coroutine when wrapping an awaitable object.  Patch by
     Kumar Aditya.

   - gh-102578(20): 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(21): Add *note os.listdrives(): 6ba, *note
     os.listvolumes(): 6bb. and *note os.listmounts(): 6bc. functions on
     Windows for enumerating drives, volumes and mount points

   - gh-74468(22): Attribute name of the extracted *note tarfile: e4.
     file object now holds filename of itself rather than of the archive
     it is contained in.  Patch by Oleg Iarygin.

   - gh-102378(23): Private helper method
     ‘inspect._signature_strip_non_python_syntax’ will no longer strip
     ‘/’ from the input string.

   - gh-79940(24): Add *note inspect.getasyncgenstate(): 6af. and *note
     inspect.getasyncgenlocals(): 6b0.  Patch by Thomas Krennwallner.

   - gh-102103(25): Add ‘module’ argument to *note
     dataclasses.make_dataclass(): 17c7. and make classes produced by it
     pickleable.

   - gh-102069(26): Fix ‘__weakref__’ descriptor generation for custom
     dataclasses.

   - gh-102038(27): Skip a ‘stat’ in *note site: cc. if we have already
     found a ‘pyvenv.cfg’

   - gh-98886(28): Fix issues when defining dataclasses that have fields
     with specific underscore names that aren’t clearly reserved by
     *note dataclasses: 33.

   - gh-101673(29): Fix a *note pdb: aa. bug where ‘ll’ clears the
     changes to local variables.

   - gh-101313(30): Added -h and –help arguments to the webbrowser CLI

   - gh-100372(31): *note ssl.SSLContext.load_verify_locations(): 10e4.
     no longer incorrectly accepts some cases of trailing data when
     parsing DER.

   - gh-89727(32): Fix pathlib.Path.walk RecursionError on deep
     directory trees by rewriting it using iteration instead of
     recursion.

   - gh-100131(33): Added an optional ‘delete’ keyword argument to *note
     tempfile.TemporaryDirectory: 1430.

   - gh-48330(34): Added ‘--durations’ command line option, showing the
     N slowest test cases.  *note unittest.TextTestRunner: 19ee. and
     *note unittest.TextTestResult: 749. constructors accept a new
     'durations' keyword argument.  Subclasses should take this into
     account or accept ‘**kwargs’.  Added *note
     unittest.TestResult.addDuration(): 19ef. method and *note
     unittest.TestResult.collectedDurations: 19bb. attribute.

     (Contribuição de Giampaolo Rodola)

   - gh-98169(35): Fix *note dataclasses.astuple(): 19da. crash when
     *note collections.defaultdict: 13b8. is present in the attributes.

   - gh-96931(36): Fix incorrect results from *note
     ssl.SSLSocket.shared_ciphers(): 1062.

   - gh-95495(37): When built against OpenSSL 3.0, the *note ssl: d5.
     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: 19f0, matching the behavior in previous versions of
     OpenSSL. The *note options: a2f. attribute on *note SSLContext:
     354. also no longer includes *note OP_IGNORE_UNEXPECTED_EOF: a2e.
     by default.  This option may be set to specify the previous OpenSSL
     3.0 behavior.

   - gh-94684(38): Now *note uuid.uuid3(): 2e3. and *note uuid.uuid5():
     2e4. functions support *note bytes: 192. objects as their 'name'
     argument.

   - gh-94440(39): Fix a ‘concurrent.futures.process’ bug where
     ‘ProcessPoolExecutor’ shutdown could hang after a future has been
     quickly submitted and canceled.

   - gh-72346(40): Added deprecation warning to 'isdst' parameter of
     *note email.utils.localtime(): 2f5.

   - bpo-36305(41): Fix handling of Windows filenames that resemble
     drives, such as ‘./a:b’, in *note pathlib: a8.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103085

   (2) https://github.com/python/cpython/issues/103068

   (3) https://github.com/python/cpython/issues/102549

   (4) https://github.com/python/cpython/issues/103056

   (5) https://github.com/python/cpython/issues/103046

   (6) https://github.com/python/cpython/issues/102433

   (7) https://github.com/python/cpython/issues/103023

   (8) https://github.com/python/cpython/issues/102947

   (9) https://github.com/python/cpython/issues/102780

   (10) https://github.com/python/cpython/issues/102871

   (11) https://github.com/python/cpython/issues/102839

   (12) https://github.com/python/cpython/issues/102828

   (13) https://github.com/python/cpython/issues/88965

   (14) https://github.com/python/cpython/issues/76846

   (15) https://github.com/python/cpython/issues/78530

   (16) https://github.com/python/cpython/issues/102748

   (17) https://github.com/python/cpython/issues/102670

   (18) https://github.com/python/cpython/issues/102615

   (19) https://github.com/python/cpython/issues/100112

   (20) https://github.com/python/cpython/issues/102578

   (21) https://github.com/python/cpython/issues/102519

   (22) https://github.com/python/cpython/issues/74468

   (23) https://github.com/python/cpython/issues/102378

   (24) https://github.com/python/cpython/issues/79940

   (25) https://github.com/python/cpython/issues/102103

   (26) https://github.com/python/cpython/issues/102069

   (27) https://github.com/python/cpython/issues/102038

   (28) https://github.com/python/cpython/issues/98886

   (29) https://github.com/python/cpython/issues/101673

   (30) https://github.com/python/cpython/issues/101313

   (31) https://github.com/python/cpython/issues/100372

   (32) https://github.com/python/cpython/issues/89727

   (33) https://github.com/python/cpython/issues/100131

   (34) https://github.com/python/cpython/issues/48330

   (35) https://github.com/python/cpython/issues/98169

   (36) https://github.com/python/cpython/issues/96931

   (37) https://github.com/python/cpython/issues/95495

   (38) https://github.com/python/cpython/issues/94684

   (39) https://github.com/python/cpython/issues/94440

   (40) https://github.com/python/cpython/issues/72346

   (41) https://bugs.python.org/issue?@action=redirect&bpo=36305


File: python.info,  Node: Documentação<19>,  Next: Testes<20>,  Prev: Biblioteca<25>,  Up: Python 3 12 0 alpha 7

1.24.25.3 Documentação
......................

   - gh-103112(1): Add docstring to *note
     http.client.HTTPResponse.read(): 1810. to fix ‘pydoc’ output.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103112


File: python.info,  Node: Testes<20>,  Next: Construção<23>,  Prev: Documentação<19>,  Up: Python 3 12 0 alpha 7

1.24.25.4 Testes
................

   - gh-102980(1): Improve test coverage on *note pdb: aa.

   - 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<20>,  Up: Python 3 12 0 alpha 7

1.24.25.5 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<20>,  Prev: Construção<23>,  Up: Python 3 12 0 alpha 7

1.24.25.6 Windows
.................

   - gh-102690(1): Update *note webbrowser: 11b. 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<20>,  Next: API C<22>,  Prev: Windows<20>,  Up: Python 3 12 0 alpha 7

1.24.25.7 Ferramentas/Demos
...........................

   - gh-102809(1): ‘Misc/gdbinit’ was removed.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102809


File: python.info,  Node: API C<22>,  Prev: Ferramentas/Demos<20>,  Up: Python 3 12 0 alpha 7

1.24.25.8 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.24.26 Python 3.12.0 alpha 6
-----------------------------

'Data de lançamento: 2023-03-07'

* Menu:

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


File: python.info,  Node: Segurança<21>,  Next: Núcleo e embutidos<25>,  Up: Python 3 12 0 alpha 6

1.24.26.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: 6c. 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: 4b1. 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<25>,  Next: Biblioteca<26>,  Prev: Segurança<21>,  Up: Python 3 12 0 alpha 6

1.24.26.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: 19fa.
     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: 19fb. no longer raises
     *note OverflowError: a77. for *note int: 19b. '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: 19fc. ‘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: 6fd. 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: 105. 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 ‘RETURN_CONST’ 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<26>,  Next: Documentação<20>,  Prev: Núcleo e embutidos<25>,  Up: Python 3 12 0 alpha 6

1.24.26.3 Biblioteca
....................

   - gh-102302(1): Micro-optimise hashing of *note inspect.Parameter:
     4de, 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(): 4b6. were dropped.
     Patch by Yeojin Kim.

   - gh-91038(3): *note platform.platform(): 19fe. now has boolean
     default arguments.

   - gh-81652(4): Add *note mmap.MAP_ALIGNED_SUPER: 19ff. FreeBSD and
     *note mmap.MAP_CONCEAL: 1a00. OpenBSD constants to *note mmap: 94.
     Patch by Yeojin Kim.

   - gh-102179(5): Fix *note os.dup2(): d4e. 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:
     109a. if *note HTTPError: 11d4. 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: 6c.
     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: 78a. when the callable object exhausts the iterator
     but forgets to either return a sentinel value or raise *note
     StopIteration: de9.

   - gh-87634(15): Remove locking behavior from *note
     functools.cached_property(): 758.

   - gh-97786(16): Fix potential undefined behaviour in corner cases of
     floating-point-to-time conversions.

   - gh-101517(17): Fixed bug where *note bdb: 10. looks up the source
     line with *note linecache: 89. with a ‘lineno=None’, which causes
     it to fail with an unhandled exception.

   - gh-101773(18): Optimize *note fractions.Fraction: 212. for small
     components.  The private argument ‘_normalize’ of the *note
     fractions.Fraction: 212. constructor has been removed.

   - gh-101693(19): In *note sqlite3.Cursor.execute(): 5a9, *note
     DeprecationWarning: 1a3. is now emitted when *note named
     placeholders: 5ab. are used together with parameters supplied as a
     *note sequence: 70b. instead of as a *note dict: 183.  Starting
     from Python 3.14, using named placeholders with parameters supplied
     as a sequence will raise a *note ProgrammingError: 303.  Patch by
     Erlend E. Aasland.

   - gh-101446(20): Change repr of *note collections.OrderedDict: 7e8.
     to use regular dictionary formatting instead of pairs of keys and
     values.

   - gh-101362(21): Speed up *note pathlib.PurePath: 6c2. construction
     by handling arguments more uniformly.  When a *note pathlib.Path:
     265. argument is supplied, we use its string representation rather
     than joining its parts with *note os.path.join(): 18ed.

   - gh-101362(22): Speed up *note pathlib.PurePath: 6c2. construction
     by calling *note os.path.join(): 18ed. only when two or more
     arguments are given.

   - gh-101362(23): Speed up *note pathlib.Path: 265. construction by
     running the path flavour compatibility check only when pathlib is
     imported.

   - gh-85984(24): Refactored the implementation of *note pty.fork():
     1a01. to use *note os.login_tty(): 1a02.

     A *note DeprecationWarning: 1a3. 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(): 2ff.

   - gh-101561(25): Add a new decorator *note typing.override(): 671.
     See PEP 698(26) for details.  Patch by Steven Troxler.

   - gh-63301(27): Set exit code when *note tabnanny: e3. CLI exits on
     error.

   - gh-101360(28): Fix anchor matching in
     ‘pathlib.PureWindowsPath.match()’.  Path and pattern anchors are
     now matched with *note fnmatch: 60, just like other path parts.
     This allows patterns such as ‘"*:/Users/*"’ to be matched.

   - gh-101277(29): Remove global state from *note itertools: 85. 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(): 1963.  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: 13a.  Patch by
     Erlend E. Aasland.

   - gh-96764(34): *note asyncio.wait_for(): 80a. now uses *note
     asyncio.timeout(): 809. 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: 1a03. and *note bz2.BZ2Decompressor: 1a04.
     objects without calling ‘__init__()’, and fix leakage of locks and
     internal buffers when calling the ‘__init__()’ methods of *note
     lzma.LZMADecompressor: 1a03, *note lzma.LZMACompressor: 1a05, *note
     bz2.BZ2Compressor: 1a06, and *note bz2.BZ2Decompressor: 1a04.
     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<20>,  Next: Testes<21>,  Prev: Biblioteca<26>,  Up: Python 3 12 0 alpha 6

1.24.26.4 Documentação
......................

   - gh-85417(1): Update *note cmath: 19. documentation to clarify
     behaviour on branch cuts.

   - gh-97725(2): Fix *note asyncio.Task.print_stack(): 1a08.
     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<21>,  Next: Construção<24>,  Prev: Documentação<20>,  Up: Python 3 12 0 alpha 6

1.24.26.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<21>,  Up: Python 3 12 0 alpha 6

1.24.26.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: 1a0b.  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.24.26.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<23>,  Prev: Windows<21>,  Up: Python 3 12 0 alpha 6

1.24.26.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<23>,  Prev: macOS<15>,  Up: Python 3 12 0 alpha 6

1.24.26.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(): 426. and *note
     PyErr_SetRaisedException(): 429. 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(): 425. and *note PyErr_Restore():
     428.  This is less error prone and a bit more efficient.

     Add *note PyException_GetArgs(): 780. and *note
     PyException_SetArgs(): 781. as convenience functions for retrieving
     and modifying the *note args: 782. 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.24.27 Python 3.12.0 alpha 5
-----------------------------

'Data de lançamento: 2023-02-07'

* Menu:

* Segurança: Segurança<22>.
* Núcleo e embutidos: Núcleo e embutidos<26>.
* Biblioteca: Biblioteca<27>.
* Documentação: Documentação<21>.
* Testes: Testes<22>.
* Construção: Construção<25>.
* Windows: Windows<22>.


File: python.info,  Node: Segurança<22>,  Next: Núcleo e embutidos<26>,  Up: Python 3 12 0 alpha 5

1.24.27.1 Segurança
...................

   - gh-99108(1): Replace the builtin *note hashlib: 6c. 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<26>,  Next: Biblioteca<27>,  Prev: Segurança<22>,  Up: Python 3 12 0 alpha 5

1.24.27.2 Núcleo e embutidos
............................

   - gh-92173(1): Fix the ‘defs’ and ‘kwdefs’ arguments to *note
     PyEval_EvalCodeEx(): 1a12. 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: 180. or *note break: 17f. which are not in a loop.  Patch
     by Donghee Na.

   - gh-101372(4): Fix *note is_normalized(): c31. to properly handle
     the UCD 3.2.0 cases.  Patch by Donghee Na.

   - gh-101266(5): Fix *note sys.getsizeof(): 1a13. reporting for *note
     int: 19b. 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: 1809.  Patch by Pablo Galindo

   - gh-101037(8): Fix potential memory underallocation issue for
     instances of *note int: 19b. subclasses with value zero.

   - gh-100762(9): Record the (virtual) exception block depth in the
     oparg of *note YIELD_VALUE: 5b1.  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: b57. instruction and embed the mask into the oparg.

   - gh-100892(13): Fix race while iterating over thread states in
     clearing *note threading.local: 17ca.  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: 5dd. 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’.

   - bpo-32780(17): Inter-field padding is now inserted into the PEP3118
     format strings obtained from *note ctypes.Structure: 1e4. objects,
     reflecting their true representation in memory.

   ---------- 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

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32780


File: python.info,  Node: Biblioteca<27>,  Next: Documentação<21>,  Prev: Núcleo e embutidos<26>,  Up: Python 3 12 0 alpha 5

1.24.27.3 Biblioteca
....................

   - gh-101541(1): [Enum] - fix psuedo-flag creation

   - gh-101570(2): Upgrade pip wheel bundled with ensurepip (pip 23.0)

   - gh-101323(3): Fix a bug where errors where not thrown by
     zlib._ZlibDecompressor if encountered during decompressing.

   - gh-101317(4): Add 'ssl_shutdown_timeout' parameter for *note
     asyncio.StreamWriter.start_tls(): 80e.

   - gh-101326(5): Fix regression when passing ‘None’ as second or third
     argument to ‘FutureIter.throw’.

   - gh-92123(6): Adapt the ‘_elementtree’ extension module to
     multi-phase init ( PEP 489(7)).  Patches by Erlend E. Aasland.

   - gh-100795(8): Avoid potential unexpected ‘freeaddrinfo’ call
     (double free) in *note socket: d1. when when a libc ‘getaddrinfo()’
     implementation leaves garbage in an output pointer when returning
     an error.  Original patch by Sergey G. Brester.

   - gh-101143(9): Remove unused references to *note TimerHandle: 1a15.
     in ‘asyncio.base_events.BaseEventLoop._add_callback’.

   - gh-101144(10): Make *note zipfile.Path.open(): 185d. and *note
     zipfile.Path.read_text(): 1a16. 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: 198.

   - gh-94518(11): 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(12): Fix *note typing.get_type_hints(): 8b5. on
     ‘'*tuple[...]'’ and ‘*tuple[...]’.  It must not drop the ‘Unpack’
     part.

   - gh-101000(13): Add *note os.path.splitroot(): 6c0, which splits a
     path into a 3-item tuple ‘(drive, root, tail)’.  This new function
     is used by *note pathlib: a8. to improve the performance of path
     construction by up to a third.

   - gh-100573(14): Fix a Windows *note asyncio: b. 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(15): *note warnings.warn(): 1707. 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(16): pass encoding kwarg to subprocess in platform

   - gh-100160(17): 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(18): 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(19): Fix a reference undercounting issue in *note
     ctypes.Structure: 1e4. with ‘from_param()’ results larger than a C
     pointer.

   - gh-67790(20): Add float-style formatting support for *note
     fractions.Fraction: 212. instances.

   - gh-99266(21): Preserve more detailed error messages in *note
     ctypes: 2e.

   - gh-86682(22): Ensure runtime-created collections have the correct
     module name using the newly added (internal) *note
     sys._getframemodulename(): 1a17.

   - gh-88597(23): *note uuid: 116. now has a command line interface.
     Try ‘python -m uuid -h’.

   - gh-60580(24): ‘ctypes.wintypes.BYTE’ definition changed from *note
     c_byte: 1a18. to *note c_ubyte: 1a19. to match Windows SDK. Patch
     by Anatoly Techtonik and Oleg Iarygin.

   - gh-94518(25): ‘_posixsubprocess’ now initializes all UID and GID
     variables using a reserved ‘-1’ value instead of a separate flag.
     Patch by Oleg Iarygin.

   - bpo-38941(26): The *note xml.etree.ElementTree: 12b. module now
     emits *note DeprecationWarning: 1a3. when testing the truth value
     of an *note xml.etree.ElementTree.Element: 360.  Before, the Python
     implementation emitted *note FutureWarning: 64d, and the C
     implementation emitted nothing.

   - bpo-40077(27): Convert ‘elementtree’ types to heap types.  Patch by
     Erlend E. Aasland.

   - bpo-29847(28): Fix a bug where *note pathlib.Path: 265. accepted
     and ignored keyword arguments.  Patch provided by Yurii Karabas.

   - gh-77772(29): *note ctypes.CDLL: bd2, *note ctypes.OleDLL: 1a1a,
     *note ctypes.WinDLL: 1a1b, and *note ctypes.PyDLL: 1a1c. now accept
     *note path-like objects: 59a. as their ‘name’ argument.  Patch by
     Robert Hoelzl.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101541

   (2) https://github.com/python/cpython/issues/101570

   (3) https://github.com/python/cpython/issues/101323

   (4) https://github.com/python/cpython/issues/101317

   (5) https://github.com/python/cpython/issues/101326

   (6) https://github.com/python/cpython/issues/92123

   (7) https://peps.python.org/pep-0489/

   (8) https://github.com/python/cpython/issues/100795

   (9) https://github.com/python/cpython/issues/101143

   (10) https://github.com/python/cpython/issues/101144

   (11) https://github.com/python/cpython/issues/94518

   (12) https://github.com/python/cpython/issues/101015

   (13) https://github.com/python/cpython/issues/101000

   (14) https://github.com/python/cpython/issues/100573

   (15) https://github.com/python/cpython/issues/39615

   (16) https://github.com/python/cpython/issues/100750

   (17) https://github.com/python/cpython/issues/100160

   (18) https://github.com/python/cpython/issues/96290

   (19) https://github.com/python/cpython/issues/99952

   (20) https://github.com/python/cpython/issues/67790

   (21) https://github.com/python/cpython/issues/99266

   (22) https://github.com/python/cpython/issues/86682

   (23) https://github.com/python/cpython/issues/88597

   (24) https://github.com/python/cpython/issues/60580

   (25) https://github.com/python/cpython/issues/94518

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38941

   (27) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (28) https://bugs.python.org/issue?@action=redirect&bpo=29847

   (29) https://github.com/python/cpython/issues/77772


File: python.info,  Node: Documentação<21>,  Next: Testes<22>,  Prev: Biblioteca<27>,  Up: Python 3 12 0 alpha 5

1.24.27.4 Documentação
......................

   - gh-88324(1): Reword *note subprocess: dc. 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<22>,  Next: Construção<25>,  Prev: Documentação<21>,  Up: Python 3 12 0 alpha 5

1.24.27.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<22>,  Up: Python 3 12 0 alpha 5

1.24.27.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: 643. 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.24.27.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.24.28 Python 3.12.0 alpha 4
-----------------------------

'Data de lançamento: 2023-01-10'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<27>.
* Biblioteca: Biblioteca<28>.
* Documentação: Documentação<22>.
* Testes: Testes<23>.
* Construção: Construção<26>.
* Windows: Windows<23>.
* macOS: macOS<16>.
* Ferramentas/Demos: Ferramentas/Demos<21>.
* API C: API C<24>.


File: python.info,  Node: Núcleo e embutidos<27>,  Next: Biblioteca<28>,  Up: Python 3 12 0 alpha 4

1.24.28.1 Núcleo e embutidos
............................

   - gh-100776(1): Fix misleading default value in *note input():
     14d4.’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: 6fc. instruction.
     Remove ‘IMPORT_STAR’, ‘PRINT_EXPR’ and ‘STOPITERATION_ERROR’,
     replacing them with the *note CALL_INTRINSIC_1: 6fc. 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: 18e. 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(): 1a23. to improve duck
     type compatibility between *note int: 19b. and *note float: 196.

   - gh-100425(13): Improve the accuracy of ‘sum()’ with compensated
     summation.

   - gh-100374(14): Fix incorrect result and delay in *note
     socket.getfqdn(): 1a24.  Patch by Dominic Socular.

   - gh-100357(15): Convert ‘vars’, ‘dir’, ‘next’, ‘getattr’, and ‘iter’
     to argument clinic.

   - gh-100117(16): Improve the output of *note codeobject.co_lines():
     34d. by emitting only one entry for each line range.

   - gh-90043(17): Handle NaNs when specializing *note COMPARE_OP: b57.
     for *note float: 196. values.

   - gh-100222(18): Redefine the ‘_Py_CODEUNIT’ typedef as a union to
     describe its layout to the C compiler, avoiding type punning and
     improving clarity.

   - gh-99955(19): Internal compiler functions (in compile.c) now
     consistently return -1 on error and 0 on success.

   - gh-100188(20): 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(21): Initialize frame->previous in frameobject.c to fix a
     segmentation fault when accessing frames created by
     ‘PyFrame_New()’.

   - gh-94155(22): Improved the hashing algorithm for code objects,
     mitigating some hash collisions.

   - gh-99540(23): ‘None’ now hashes to a constant value.  This is not a
     requirements change.

   - gh-100143(24): 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(25): 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(26): Specialize ‘FOR_ITER’ for tuples.

   - gh-100050(27): Honor existing errors obtained when searching for
     mismatching parentheses in the tokenizer.  Patch by Pablo Galindo

   - gh-92216(28): Improve the performance of *note hasattr(): 6ee. for
     type objects with a missing attribute.

   - gh-99582(29): Freeze *note zipimport: 138. module into
     ‘_bootstrap_python’.

   - gh-99554(30): Pack debugging location tables more efficiently
     during bytecode compilation.

   - gh-98522(31): 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(32): Improve performance of ‘list.pop’ for small lists.

   - gh-89051(33): Add *note ssl.OP_LEGACY_SERVER_CONNECT: 1a25.

   - bpo-32782(34): ‘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://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

   (14) https://github.com/python/cpython/issues/100374

   (15) https://github.com/python/cpython/issues/100357

   (16) https://github.com/python/cpython/issues/100117

   (17) https://github.com/python/cpython/issues/90043

   (18) https://github.com/python/cpython/issues/100222

   (19) https://github.com/python/cpython/issues/99955

   (20) https://github.com/python/cpython/issues/100188

   (21) https://github.com/python/cpython/issues/99110

   (22) https://github.com/python/cpython/issues/94155

   (23) https://github.com/python/cpython/issues/99540

   (24) https://github.com/python/cpython/issues/100143

   (25) https://github.com/python/cpython/issues/100146

   (26) https://github.com/python/cpython/issues/100110

   (27) https://github.com/python/cpython/issues/100050

   (28) https://github.com/python/cpython/issues/92216

   (29) https://github.com/python/cpython/issues/99582

   (30) https://github.com/python/cpython/issues/99554

   (31) https://github.com/python/cpython/issues/98522

   (32) https://github.com/python/cpython/issues/94603

   (33) https://github.com/python/cpython/issues/89051

   (34) https://bugs.python.org/issue?@action=redirect&bpo=32782


File: python.info,  Node: Biblioteca<28>,  Next: Documentação<22>,  Prev: Núcleo e embutidos<27>,  Up: Python 3 12 0 alpha 4

1.24.28.2 Biblioteca
....................

   - gh-100833(1): Speed up *note math.fsum(): 15c5. by removing
     defensive ‘volatile’ qualifiers.

   - gh-100805(2): Modify *note random.choice(): 142c. 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__():
     1a27. twice as fast.

   - gh-91851(5): Microoptimizations for *note
     fractions.Fraction.__round__(): 1a28, *note
     fractions.Fraction.__ceil__(): 1a29. and *note
     fractions.Fraction.__floor__(): 1a2a.

   - 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(): 6c5. by using
     *note isinstance(): 2ac. 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(): d02. 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(): 1963. by nearly 2x.  This comes at the
     cost of a performance regression in *note pathlib.Path.cwd(): 19d7,
     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():
     d8e. with *note unittest.mock.AsyncMock: c33.

   - gh-100488(19): Add ‘Fraction.is_integer()’ to check whether a *note
     fractions.Fraction: 212. is an integer.  This improves duck type
     compatibility with *note float: 196. and *note int: 19b.

   - gh-100474(20): *note http.server: 76. 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(): cf4. 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(): 69a. 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: 1a3. may be raised when
     *note os.fork(): 4af. or *note os.forkpty(): 4b0. 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: b. 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: 13fa.

   - 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(): 1a2b. to
     'format'.  Rename the 't' parameter of *note
     datetime.datetime.fromtimestamp(): 707. 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: 11d4. 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(): 6c5. where a *note
     RecursionError: f5c. would occur on deep directory structures by
     adjusting the implementation of *note os.walk(): 6c5. to be
     iterative instead of recursive.

   - gh-94943(37): Add *note Suporte a dataclass: 1a2c. to the *note
     Enum: 837. *note __repr__(): 1a2d.  When inheriting from a *note
     dataclass: 4db, only show the field names in the value section of
     the member *note repr(): 1c1, and not the dataclass’ class name.

   - gh-83035(38): Fix *note inspect.getsource(): 174c. 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(): 6ad.
     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: 3e. failure on *note
     types.MethodWrapperType: 850. in modules.

   - gh-85267(45): Several improvements to *note inspect.signature():
     22e.’s handling of ‘__text_signature’.  - Fixes a case where *note
     inspect.signature(): 22e. dropped parameters - Fixes a case where
     *note inspect.signature(): 22e. raised *note tokenize.TokenError:
     759. - Allows *note inspect.signature(): 22e. to understand
     defaults involving binary operations of constants - *note
     inspect.signature(): 22e. is documented as only raising *note
     TypeError: 198. or *note ValueError: 2ea, but sometimes raised
     *note RuntimeError: 243.  These cases now raise *note ValueError:
     2ea. - Removed a dead code path

   - gh-91166(46): *note asyncio: b. is optimized to avoid excessive
     copying when writing to socket and use *note sendmsg(): 696. 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(): 1a2e. and *note
     urllib.parse.unquote_to_bytes(): 1a2f. 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():
     d13, which caused it to propagate exceptions with incorrect
     tracebacks and fix a 3.11 regression in *note contextmanager():
     13fe, which caused it to propagate exceptions with incorrect
     tracebacks for *note StopIteration: de9.

   - gh-78707(51): Deprecate passing more than one positional argument
     to *note pathlib.PurePath.relative_to(): 2fb. and *note
     is_relative_to(): 2fc.

   - gh-92122(52): Fix reStructuredText syntax errors in docstrings in
     the *note enum: 5a. module.

   - gh-91851(53): Optimize the *note Fraction: 212. arithmetics for
     small components.

   - bpo-24132(54): Make *note pathlib.PurePath: 6c2. and *note Path:
     265. subclassable (private to start).  Previously, attempting to
     instantiate a subclass resulted in an *note AttributeError: 5e4.
     being raised.  Patch by Barney Gale.

   - bpo-40447(55): Accept *note os.PathLike: e3f. (such as *note
     pathlib.Path: 265.) in the ‘stripdir’ arguments of *note
     compileall.compile_file(): fd5. and *note compileall.compile_dir():
     d0f.

   - bpo-36880(56): Fix a reference counting issue when a *note ctypes:
     2e. callback with return type *note py_object: 1f2. 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<22>,  Next: Testes<23>,  Prev: Biblioteca<28>,  Up: Python 3 12 0 alpha 4

1.24.28.3 Documentação
......................

   - gh-100616(1): Document existing ‘attr’ parameter to *note
     curses.window.vline(): 1a31. function in *note curses: 2f.

   - gh-100472(2): Remove claim in documentation that the ‘stripdir’,
     ‘prependdir’ and ‘limit_sl_dest’ parameters of *note
     compileall.compile_dir(): d0f. and *note compileall.compile_file():
     fd5. could be *note bytes: 192.

   - 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<23>,  Next: Construção<26>,  Prev: Documentação<22>,  Up: Python 3 12 0 alpha 4

1.24.28.4 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<23>,  Up: Python 3 12 0 alpha 4

1.24.28.5 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.24.28.6 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():
     1a35. receives an immutable *note bytes: 192. object (as
     documented), instead of *note bytearray: 342.

   - bpo-43984(5): *note winreg.SetValueEx(): 1a36. 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: 2bf.

   ---------- 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<21>,  Prev: Windows<23>,  Up: Python 3 12 0 alpha 4

1.24.28.7 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<21>,  Next: API C<24>,  Prev: macOS<16>,  Up: Python 3 12 0 alpha 4

1.24.28.8 Ferramentas/Demos
...........................

   - bpo-45256(1): Fix a bug that caused an *note AttributeError: 5e4.
     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<24>,  Prev: Ferramentas/Demos<21>,  Up: Python 3 12 0 alpha 4

1.24.28.9 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: 78d, *note Py_SETREF: 78e. and
     *note Py_XSETREF: 78f. 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.24.29 Python 3.12.0 alpha 3
-----------------------------

'Data de lançamento: 2022-12-06'

* Menu:

* Segurança: Segurança<23>.
* Núcleo e embutidos: Núcleo e embutidos<28>.
* Biblioteca: Biblioteca<29>.
* Documentação: Documentação<23>.
* Testes: Testes<24>.
* Construção: Construção<27>.
* Windows: Windows<24>.
* macOS: macOS<17>.
* Ferramentas/Demos: Ferramentas/Demos<22>.
* API C: API C<25>.


File: python.info,  Node: Segurança<23>,  Next: Núcleo e embutidos<28>,  Up: Python 3 12 0 alpha 3

1.24.29.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: 76.
     ‘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: 64. 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<28>,  Next: Biblioteca<29>,  Prev: Segurança<23>,  Up: Python 3 12 0 alpha 3

1.24.29.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(): 77c. and *note
     PyCode_ClearWatcher(): 77d. 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: 4cc. subclass
     can wrap a *note BaseException: 7cc.

   - gh-99547(8): 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(9): Fix zip path for venv created from a non-installed
     python on POSIX platforms.

   - gh-99377(10): Add audit events for thread creation and clear
     operations.

   - gh-98686(11): Remove the ‘BINARY_OP_GENERIC’ and
     ‘COMPARE_OP_GENERIC’ “specializations”.

   - gh-99298(12): Remove the remaining error paths for attribute
     specializations, and refuse to specialize attribute accesses on
     types that haven’t had *note PyType_Ready(): 975. called on them
     yet.

   - gh-99127(13): Allow some features of *note syslog: e2. to the main
     interpreter only.  Patch by Donghee Na.

   - gh-91053(14): 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(15): 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(16): Optimize the *note range: b33. object iterator.  It
     is now smaller, faster iteration of ranges containing large
     numbers.  Smaller pickles, faster unpickling.

   - bpo-31718(17): Raise *note ValueError: 2ea. instead of *note
     SystemError: 78a. when methods of uninitialized *note
     io.IncrementalNewlineDecoder: 197c. objects are called.  Patch by
     Oren Milman.

   - bpo-38031(18): Fix a possible assertion failure in *note io.FileIO:
     150b. when the opener returns an invalid file descriptor.

   ---------- 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

   (8) https://github.com/python/cpython/issues/99547

   (9) https://github.com/python/cpython/issues/99370

   (10) https://github.com/python/cpython/issues/99377

   (11) https://github.com/python/cpython/issues/98686

   (12) https://github.com/python/cpython/issues/99298

   (13) https://github.com/python/cpython/issues/99127

   (14) https://github.com/python/cpython/issues/91053

   (15) https://github.com/python/cpython/issues/90994

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45026

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31718

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38031


File: python.info,  Node: Biblioteca<29>,  Next: Documentação<23>,  Prev: Núcleo e embutidos<28>,  Up: Python 3 12 0 alpha 3

1.24.29.3 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(): 6f0.

   - gh-79033(3): Fix *note asyncio.Server.wait_closed(): 197d. 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: 2b2.  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: b. 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():
     2f1. to allow specifying a custom event loop factory.  Patch by
     Kumar Aditya.

   - gh-99341(11): Fix *note ast.increment_lineno(): 1a3e. to also cover
     *note ast.TypeIgnore: 1a3f. when changing line numbers.

   - gh-99382(12): Check the number of arguments in substitution in user
     generics containing a *note TypeVarTuple: 482. and one or more
     *note TypeVar: 480.

   - gh-99379(13): Fix substitution of *note ParamSpec: 481. followed by
     *note TypeVarTuple: 482. in generic aliases.

   - gh-99344(14): Fix substitution of *note TypeVarTuple: 482. and
     *note ParamSpec: 481. together in user generics.

   - gh-99284(15): Remove ‘_use_broken_old_ctypes_structure_semantics_’
     old untested and undocumented hack from *note ctypes: 2e.

   - gh-99201(16): Fix *note IndexError: 1723. 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(): 2fb. 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(): 2f0. and many other
     *note asyncio: b. functions like *note asyncio.ensure_future():
     e65, *note asyncio.shield(): c59. or *note asyncio.gather(): 808,
     and also the ‘get_event_loop()’ method of
     ‘asyncio.BaseDefaultEventLoopPolicy’ now raise a *note
     RuntimeError: 243. 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: 1a3. 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(): 1472. 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: 1903. properties in the *note
     ipaddress: 84. 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: 1a40. 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(): d02. 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(): e83. 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<23>,  Next: Testes<24>,  Prev: Biblioteca<29>,  Up: Python 3 12 0 alpha 3

1.24.29.4 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: 3c0.

   - 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*: f8c. family of functions, and improved the docs for *note
     os.waitid(): f8d. 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<24>,  Next: Construção<27>,  Prev: Documentação<23>,  Up: Python 3 12 0 alpha 3

1.24.29.5 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<24>,  Up: Python 3 12 0 alpha 3

1.24.29.6 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: 21. 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.24.29.7 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: 496. and
     ‘sys._git’ on Windows

   - gh-99442(3): Fix handling in *note Gerenciador de instalação do
     Python: 7cf. when ‘argv[0]’ does not include a file extension.

   - bpo-40882(4): Fix a memory leak in *note
     multiprocessing.shared_memory.SharedMemory: 1914. 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<22>,  Prev: Windows<24>,  Up: Python 3 12 0 alpha 3

1.24.29.8 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<22>,  Next: API C<25>,  Prev: macOS<17>,  Up: Python 3 12 0 alpha 3

1.24.29.9 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<25>,  Prev: Ferramentas/Demos<22>,  Up: Python 3 12 0 alpha 3

1.24.29.10 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: 654. defined for 3.11, and are necessary to use the
     buffer API.

   - gh-99612(2): Fix *note PyUnicode_DecodeUTF8Stateful(): 1a48. 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: 7a5, *note T_NONE: 7a7,
     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.24.30 Python 3.12.0 alpha 2
-----------------------------

'Data de lançamento: 2022-11-14'

* Menu:

* Segurança: Segurança<24>.
* Núcleo e embutidos: Núcleo e embutidos<29>.
* Biblioteca: Biblioteca<30>.
* Documentação: Documentação<24>.
* Testes: Testes<25>.
* Construção: Construção<28>.
* Windows: Windows<25>.
* macOS: macOS<18>.
* API C: API C<26>.


File: python.info,  Node: Segurança<24>,  Next: Núcleo e embutidos<29>,  Up: Python 3 12 0 alpha 2

1.24.30.1 Segurança
...................

   - gh-98433(1): The IDNA codec decoder used on DNS hostnames by *note
     socket: d1. or *note asyncio: b. 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: 10e. 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<29>,  Next: Biblioteca<30>,  Prev: Segurança<24>,  Up: Python 3 12 0 alpha 2

1.24.30.2 Núcleo e embutidos
............................

   - gh-81057(1): The docs clearly say that ‘PyImport_Inittab’, *note
     PyImport_AppendInittab(): 1a4c, and *note PyImport_ExtendInittab():
     1a4d. should not be used after *note Py_Initialize(): 45d. has been
     called.  We now enforce this for the two functions.  Additionally,
     the runtime now uses an internal copy of ‘PyImport_Inittab’, 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: 985.
     and *note PyInterpreterState: ab0. 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*: 1ac. 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: 5c. to emit an error
     message with the proper unexpected signal number.  Patch by Donghee
     Na.

   - gh-99153(9): Fix location of *note SyntaxError: 18e. for a *note
     try: 8ed. block with both *note except: 1ab. and *note except*:
     1ac.

   - 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: 1a4e.  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:
     44f. exceptions for instances.  Now if a *note NameError: 44f. 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: 1ae, instead of *note DeprecationWarning: 1a3.  In a
     future Python version they will be eventually a *note SyntaxError:
     18e.  Patch by Victor Stinner.

   - gh-98401(14): A backslash-character pair that is not a valid escape
     sequence now generates a *note SyntaxWarning: 1ae, instead of *note
     DeprecationWarning: 1a3.  For example, ‘re.compile("\d+\.\d+")’ now
     emits a *note SyntaxWarning: 1ae. (‘"\d"’ is an invalid escape
     sequence), use raw strings for regular expression:
     ‘re.compile(r"\d+\.\d+")’.  In a future Python version, *note
     SyntaxError: 18e. will eventually be raised, instead of *note
     SyntaxWarning: 1ae.  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: 18e. 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: 480.: 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: 19fa. for
     generators.  Saves multiple layers of dispatch and checking to get
     from the *note FOR_ITER: 19fa. instruction in the caller to the
     *note RESUME: 5b2. in the generator.

   - gh-98762(22): Fix source locations of *note match: a04.
     sub-patterns.

   - gh-98586(23): Added the methods *note PyObject_Vectorcall(): 773.
     and *note PyObject_VectorcallMethod(): 774. to the *note Limited
     API: 76a. along with the auxiliary macro constant *note
     PY_VECTORCALL_ARGUMENTS_OFFSET: 775.

     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__: 16d9.) could behave incorrectly or crash
     instead of raising a *note TypeError: 198. 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: 4d1. and assign *note None:
     87a. to any fast locals that are left unbound after jumps or *note
     del: 1a4f. statements executed while tracing.

   - gh-96421(27): When calling into Python code from C code, through
     *note PyEval_EvalFrameEx(): 1224. 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: 1a50, *note YIELD_VALUE: 5b1, and *note
     RETURN_GENERATOR: 900, which now clear the frame.

   - gh-98415(28): Fix detection of MAC addresses for *note uuid: 116.
     on certain OSs.  Patch by Chaim Sanders

   - gh-98686(29): Quicken all code objects, and specialize adaptive
     bytecode instructions more aggressively.

   - gh-92119(30): Print exception class name instead of its string
     representation when raising errors from *note ctypes: 2e. calls.

   - gh-91058(31): *note ImportError: 64f. 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(32): The *note FOR_ITER: 19fa. now leaves the iterator on
     the stack on termination of the loop.  This is to assist
     specialization of loops for generators.

   - gh-90716(33): 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(34): Expose *note ETH_P_ALL: 1a51. and some of the *note
     ETHERTYPE_* constants: 1a52. in *note socket: d1.  Patch by Noam
     Cohen.

   - gh-93696(35): Allow *note pdb: aa. to locate source for frozen
     modules in the standard library.

   ---------- 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

   (28) https://github.com/python/cpython/issues/98415

   (29) https://github.com/python/cpython/issues/98686

   (30) https://github.com/python/cpython/issues/92119

   (31) https://github.com/python/cpython/issues/91058

   (32) https://github.com/python/cpython/issues/96793

   (33) https://github.com/python/cpython/issues/90716

   (34) https://github.com/python/cpython/issues/95389

   (35) https://github.com/python/cpython/issues/93696


File: python.info,  Node: Biblioteca<30>,  Next: Documentação<24>,  Prev: Núcleo e embutidos<29>,  Up: Python 3 12 0 alpha 2

1.24.30.3 Biblioteca
....................

   - gh-99418(1): Fix bug in *note urllib.parse.urlparse(): 35f. that
     causes URL schemes that begin with a digit, a plus sign, or a minus
     sign to be parsed incorrectly.

   - gh-94597(2): Deprecate ‘asyncio.AbstractChildWatcher’ to be removed
     in Python 3.14.  Patch by Kumar Aditya.

   - gh-99305(3): Improve performance of *note secrets.token_hex():
     1a54.

   - gh-74044(4): Fixed bug where *note inspect.signature(): 22e.
     reported incorrect arguments for decorated methods.

   - gh-99275(5): Fix ‘SystemError’ in *note ctypes: 2e. when exception
     was not set during ‘__initsubclass__’.

   - gh-99277(6): Remove older version of
     ‘_SSLProtocolTransport.get_write_buffer_limits’ in
     ‘asyncio.sslproto’

   - gh-99248(7): fix negative numbers failing in verify()

   - gh-99155(8): Fix *note statistics.NormalDist: c22. pickle with ‘0’
     and ‘1’ protocols.

   - gh-93464(9): ‘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(10): Update the bundled copy of pip to version 22.3.1.

   - gh-92584(11): Remove the ‘distutils’ package.  It was deprecated in
     Python 3.10 by PEP 632(12) “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(13): Now ‘_pyio’ is consistent with ‘_io’ in raising
     ‘ValueError’ when executing methods over closed buffers.

   - gh-83004(14): Clean up refleak on failed module initialisation in
     ‘_zoneinfo’

   - gh-83004(15): Clean up refleaks on failed module initialisation in
     ‘_pickle’

   - gh-83004(16): Clean up refleak on failed module initialisation in
     ‘_io’.

   - gh-98897(17): Fix memory leak in *note math.dist(): beb. when both
     points don’t have the same dimension.  Patch by Kumar Aditya.

   - gh-98878(18): Use the frame bound builtins when offering a name
     suggestion in *note traceback: 104. to prevent crashing when
     ‘__builtins__’ is not a dict.

   - gh-98139(19): In ‘importlib._bootstrap’, enhance namespace package
     repr to ‘<module 'x' (namespace) from ['path']>’.

   - gh-90352(20): Fix ‘_SelectorDatagramTransport’ to inherit from
     *note DatagramTransport: 1a55. in *note asyncio: b.  Patch by Kumar
     Aditya.

   - gh-98793(21): Fix argument typechecks in ‘_overlapped.WSAConnect()’
     and ‘_overlapped.Overlapped.WSASendTo()’ functions.

   - gh-98744(22): Prevent crashing in *note traceback: 104. when
     retrieving the byte-offset for some source files that contain
     certain unicode characters.

   - gh-98740(23): Fix internal error in the *note re: be. module which
     in very rare circumstances prevented compilation of a regular
     expression containing a *note conditional expression: 1a56. without
     the “else” branch.

   - gh-98703(24): Fix *note asyncio.StreamWriter.drain(): 1a57. to call
     ‘protocol.connection_lost’ callback only once on Windows.

   - gh-98624(25): Add a mutex to unittest.mock.NonCallableMock to
     protect concurrent access to mock attributes.

   - gh-98658(26): The *note array.array: 4b8. class now supports
     subscripting, making it a *note generic type: 1a1.

   - gh-98284(27): Improved *note TypeError: 198. message for undefined
     abstract methods of a *note abc.ABC: 1110. instance.  The names of
     the missing methods are surrounded by single-quotes to highlight
     them.

   - gh-96151(28): Allow ‘BUILTINS’ to be a valid field name for frozen
     dataclasses.

   - gh-98086(29): Make sure ‘patch.dict()’ can be applied on async
     functions.

   - gh-72719(30): Remove modules ‘asyncore’ and ‘asynchat’, which were
     deprecated by PEP 594(31).

   - gh-96192(32): Fix handling of ‘bytes’ *note path-like objects: 59a.
     in ‘os.ismount()’.

   - gh-94172(33): *note ftplib: 62.: Remove the ‘FTP_TLS.ssl_version’
     class attribute: use the 'context' parameter instead.  Patch by
     Victor Stinner

   - gh-94172(34): Remove the 'keyfile' and 'certfile' parameters from
     the *note ftplib: 62, *note imaplib: 78, *note poplib: b1. and
     *note smtplib: cf. modules, and the 'key_file', 'cert_file' and
     'check_hostname' parameters from the *note http.client: 73. module,
     all deprecated since Python 3.6.  Use the 'context' parameter
     ('ssl_context' in *note imaplib: 78.) instead.  Patch by Victor
     Stinner.

   - gh-83638(35): Add the *note autocommit: 6d2. attribute to *note
     sqlite3.Connection: 547. and the 'autocommit' parameter to *note
     sqlite3.connect(): 59f. to control PEP 249(36)-compliant *note
     transaction handling: 6d3.  Patch by Erlend E. Aasland.

   - gh-92452(37): Fixed a race condition that could cause *note
     sysconfig.get_config_var(): 174. to incorrectly return *note None:
     87a. in multi-threaded programs.

   - gh-91803(38): Fix an error when using a method of objects mocked
     with *note unittest.mock.create_autospec(): 1886. after it was
     sealed with *note unittest.mock.seal(): d8e. function.

   - bpo-38523(39): *note shutil.copytree(): c14. now applies the
     'ignore_dangling_symlinks' argument recursively.

   - bpo-40358(40): Add walk_up argument in *note
     pathlib.PurePath.relative_to(): 2fb.

   - bpo-36267(41): Fix IndexError in *note argparse.ArgumentParser:
     1bd. when a ‘store_true’ action is given an explicit argument.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99418

   (2) https://github.com/python/cpython/issues/94597

   (3) https://github.com/python/cpython/issues/99305

   (4) https://github.com/python/cpython/issues/74044

   (5) https://github.com/python/cpython/issues/99275

   (6) https://github.com/python/cpython/issues/99277

   (7) https://github.com/python/cpython/issues/99248

   (8) https://github.com/python/cpython/issues/99155

   (9) https://github.com/python/cpython/issues/93464

   (10) https://github.com/python/cpython/issues/99134

   (11) https://github.com/python/cpython/issues/92584

   (12) https://peps.python.org/pep-0632/

   (13) https://github.com/python/cpython/issues/98999

   (14) https://github.com/python/cpython/issues/83004

   (15) https://github.com/python/cpython/issues/83004

   (16) https://github.com/python/cpython/issues/83004

   (17) https://github.com/python/cpython/issues/98897

   (18) https://github.com/python/cpython/issues/98878

   (19) https://github.com/python/cpython/issues/98139

   (20) https://github.com/python/cpython/issues/90352

   (21) https://github.com/python/cpython/issues/98793

   (22) https://github.com/python/cpython/issues/98744

   (23) https://github.com/python/cpython/issues/98740

   (24) https://github.com/python/cpython/issues/98703

   (25) https://github.com/python/cpython/issues/98624

   (26) https://github.com/python/cpython/issues/98658

   (27) https://github.com/python/cpython/issues/98284

   (28) https://github.com/python/cpython/issues/96151

   (29) https://github.com/python/cpython/issues/98086

   (30) https://github.com/python/cpython/issues/72719

   (31) https://peps.python.org/pep-0594/

   (32) https://github.com/python/cpython/issues/96192

   (33) https://github.com/python/cpython/issues/94172

   (34) https://github.com/python/cpython/issues/94172

   (35) https://github.com/python/cpython/issues/83638

   (36) https://peps.python.org/pep-0249/

   (37) https://github.com/python/cpython/issues/92452

   (38) https://github.com/python/cpython/issues/91803

   (39) https://bugs.python.org/issue?@action=redirect&bpo=38523

   (40) https://bugs.python.org/issue?@action=redirect&bpo=40358

   (41) https://bugs.python.org/issue?@action=redirect&bpo=36267


File: python.info,  Node: Documentação<24>,  Next: Testes<25>,  Prev: Biblioteca<30>,  Up: Python 3 12 0 alpha 2

1.24.30.4 Documentação
......................

   - gh-98832(1): Changes wording of docstring for *note
     pathlib.Path.iterdir(): 26d.

   - 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<25>,  Next: Construção<28>,  Prev: Documentação<24>,  Up: Python 3 12 0 alpha 2

1.24.30.5 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: 10a. 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<28>,  Next: Windows<25>,  Prev: Testes<25>,  Up: Python 3 12 0 alpha 2

1.24.30.6 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: 64b. is passed to ‘configure’.  Don’t use
     vendored ‘libexpat’ headers if *note -with-system-expat: 1a5b. 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<28>,  Up: Python 3 12 0 alpha 2

1.24.30.7 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 Gerenciador de instalação do Python:
     7cf. 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<26>,  Prev: Windows<25>,  Up: Python 3 12 0 alpha 2

1.24.30.8 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<26>,  Prev: macOS<18>,  Up: Python 3 12 0 alpha 2

1.24.30.9 API C
...............

   - gh-98724(1): The *note Py_CLEAR: 78d, *note Py_SETREF: 78e. and
     *note Py_XSETREF: 78f. 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:
     dc.) 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(): 1a5f.

   - 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(): 77e. and *note
     PyFrame_GetVarString(): 77f. 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.24.31 Python 3.12.0 alpha 1
-----------------------------

'Data de lançamento: 2022-10-25'

* Menu:

* Segurança: Segurança<25>.
* Núcleo e embutidos: Núcleo e embutidos<30>.
* Biblioteca: Biblioteca<31>.
* Documentação: Documentação<25>.
* Testes: Testes<26>.
* Construção: Construção<29>.
* Windows: Windows<26>.
* macOS: macOS<19>.
* IDLE: IDLE<14>.
* Ferramentas/Demos: Ferramentas/Demos<23>.
* API C: API C<27>.


File: python.info,  Node: Segurança<25>,  Next: Núcleo e embutidos<30>,  Up: Python 3 12 0 alpha 1

1.24.31.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: 98. 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: 1d5. 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: 76.: 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<30>,  Next: Biblioteca<31>,  Prev: Segurança<25>,  Up: Python 3 12 0 alpha 1

1.24.31.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: 44f. 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.

   - gh-96078(9): *note os.sched_yield(): 130d. now release the GIL
     while calling sched_yield(2).  Patch by Donghee Na.

   - gh-97955(10): Migrate *note zoneinfo: 13a. to Argument Clinic.

   - gh-97912(11): The compiler now avoids quadratic behavior when
     finding which instructions should use the *note LOAD_FAST_CHECK:
     700. opcode.

   - gh-97002(12): 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(13): Bugfix: *note PyFunction_GetAnnotations(): 1a63.
     should return a borrowed reference.  It was returning a new
     reference.

   - gh-97922(14): 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(): 688. 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(15): 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(16): Long deprecated, ‘module_repr()’ should now be
     completely eradicated.

   - gh-86298(17): 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(18): Ensure that all Python frame objects are backed by
     “complete” frames.

   - gh-91052(19): Add API for subscribing to modification events on
     selected dictionaries.

   - gh-97752(20): Fix possible data corruption or crashes when
     accessing the ‘f_back’ member of newly-created generator or
     coroutine frames.

   - gh-97591(21): Fixed a missing incref/decref pair in
     ‘Exception.__setstate__()’.  Patch by Ofey Chan.

   - gh-97670(22): 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:
     1a64. to gather statistics on Python opcodes.  Patch by Victor
     Stinner.

   - gh-94526(23): Fix the Python path configuration used to initialized
     *note sys.path: 3e1. 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(24): The parser now raises *note SyntaxError: 18e. when
     parsing source code containing null bytes.  Patch by Pablo Galindo

   - gh-96975(25): Fix a crash occurring when *note PyEval_GetFrame():
     1a65. is called while the topmost Python frame is in a
     partially-initialized state.

   - gh-96848(26): Fix command line parsing: reject *note -X
     int_max_str_digits: 16f. option with no value (invalid) when the
     *note PYTHONINTMAXSTRDIGITS: 1a66. environment variable is set to a
     valid limit.  Patch by Victor Stinner.

   - gh-95921(27): Fix overly-broad source position information for
     chained comparisons used as branching conditions.

   - gh-96821(28): Fix undefined behaviour in ‘audioop.c’.

   - gh-96821(29): Fix undefined behaviour in ‘_testcapimodule.c’.

   - gh-95778(30): When *note ValueError: 2ea. is raised if an integer
     is larger than the limit, mention the *note
     sys.set_int_max_str_digits(): 1849. function in the error message.
     Patch by Victor Stinner.

   - gh-96387(31): 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(32): Fix a possible assertion failure, fatal error, or
     *note SystemError: 78a. if a line tracing event raises an exception
     while opcode tracing is enabled.

   - gh-95778(33): The ‘PyLong_FromString’ function was refactored to
     make it more maintainable and extensible.

   - gh-96678(34): Fix undefined behaviour in C code of null pointer
     arithmetic.

   - gh-96754(35): 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(36): Improve the performance of reading and writing inline
     bytecode caches on some platforms.

   - gh-96751(37): Remove dead code from ‘CALL_FUNCTION_EX’ opcode.

   - gh-90751(38): *note memoryview: 165. now supports half-floats.
     Patch by Donghee Na and Antoine Pitrou.

   - gh-96678(39): Fix case of undefined behavior in ceval.c

   - gh-64373(40): Convert ‘_functools’ to argument clinic.

   - gh-96641(41): Do not expose ‘KeyWrapper’ in ‘_functools’.

   - gh-96636(42): 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(43): Fix use after free in trace refs build mode.  Patch
     by Kumar Aditya.

   - gh-96611(44): When loading a file with invalid UTF-8 inside a
     multi-line string, a correct SyntaxError is emitted.

   - gh-96612(45): Make sure that incomplete frames do not show up in
     tracemalloc traces.

   - gh-90230(46): Fix compiler warnings and test failures when building
     with ‘--enable-pystats’.

   - gh-96587(47): Correctly raise ‘SyntaxError’ on exception groups (
     PEP 654(48)) on python versions prior to 3.11

   - gh-96569(49): Remove two cases of undefined behavior, by adding
     NULL checks.

   - gh-96582(50): Fix possible ‘NULL’ pointer dereference in
     ‘_PyThread_CurrentFrames’.  Patch by Kumar Aditya.

   - gh-91079(51): 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(52): Fix an issue that could prevent *note LOAD_ATTR: 6f9.
     from specializing properly when accessing properties.

   - gh-96348(53): Emit a DeprecationWarning when *note throw(): 711,
     *note throw(): 710. or *note athrow(): 712. are called with more
     than one argument.

   - gh-95196(54): Disable incorrect pickling of the C implemented
     classmethod descriptors.

   - gh-96364(55): Fix text signatures of ‘list.__getitem__’ and
     ‘dict.__getitem__’.

   - gh-96352(56): Fix *note AttributeError: 5e4. missing ‘name’ and
     ‘obj’ attributes in *note object.__getattribute__(): dbf.  Patch by
     Philip Georgi.

   - gh-93554(57): 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(58): Loading a file with invalid UTF-8 will now report the
     broken character at the correct location.

   - gh-96237(59): 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(60): Fixed a bug that caused ‘_PyCode_GetExtra’ to return
     garbage for negative indexes.  Patch by Pablo Galindo

   - gh-96143(61): Add a new ‘-X perf’ Python command line option as
     well as *note sys.activate_stack_trampoline(): 68f. and *note
     sys.deactivate_stack_trampoline(): 690. function in the *note sys:
     df. 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(): 691. 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(62): Fix a deadlock in *note PyGILState_Ensure(): 63e.
     when allocating new thread state.  Patch by Kumar Aditya.

   - gh-96046(63): *note PyType_Ready(): 975. 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(64): On WASI *note ENOTCAPABLE: 1a67. is now mapped to
     *note PermissionError: f32.  The *note errno: 5b. modules exposes
     the new error number.  ‘getpath.py’ now ignores *note
     PermissionError: f32. when it cannot open landmark files
     ‘pybuilddir.txt’ and ‘pyenv.cfg’.

   - gh-93678(65): 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(66): 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(67): Compile virtual *note try: 8ed./*note except: 1ab.
     blocks to handle exceptions raised during *note close(): 19a4. or
     *note throw(): 711. calls through a suspended frame.

   - gh-95977(68): Optimized calling *note __get__(): 16d6. with
     vectorcall.  Patch by Kumar Aditya.

   - gh-91210(69): 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(70): Fixed bug where the compiler’s
     ‘eliminate_empty_basic_blocks’ function ignores the last block of
     the code unit.

   - gh-95818(71): Skip over incomplete frames in *note
     PyThreadState_GetFrame(): 986.

   - gh-95876(72): 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(73): Fix misleading contents of error message when
     converting an all-whitespace string to *note float: 196.

   - gh-95150(74): 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(75): Reduce allocation size of *note list: 24c. from *note
     str.split(): 10a0. and *note str.rsplit(): 1451.  Patch by Donghee
     Na and Inada Naoki.

   - gh-87092(76): 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(77): ‘_PyPegen_Parser_New’ now properly detects token
     memory allocation errors.  Patch by Honglin Zhu.

   - gh-90081(78): Run Python code in tracer/profiler function at full
     speed.  Fixes slowdown in earlier versions of 3.11.

   - gh-95324(79): Emit a warning in debug mode if an object does not
     call *note PyObject_GC_UnTrack(): 16f3. before deallocation.  Patch
     by Pablo Galindo.

   - gh-95245(80): Merge managed dict and values pointer into a single
     tagged pointer to save one word in the pre-header.

   - gh-93678(81): 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(82): Prevented crashes in the AST constructor when
     compiling some absurdly long expressions like ‘"+0"*1000000’.
     *note RecursionError: f5c. is now raised instead.  Patch by Pablo
     Galindo

   - gh-93351(83): *note ast.AST: 4bd. node positions are now validated
     when provided to *note compile(): 4ab. and other related functions.
     If invalid positions are detected, a *note ValueError: 2ea. will be
     raised.

   - gh-94438(84): 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(85): Undocumented ‘PyCode_Addr2Location’ function now
     properly returns when ‘addrq’ argument is less than zero.

   - gh-95113(86): Replace all ‘EXTENDED_ARG_QUICK’ instructions with
     basic *note EXTENDED_ARG: 1a4e. 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(87): Fix incorrect source location info caused by certain
     optimizations in the bytecode compiler.

   - gh-95023(88): Implement *note os.setns(): 1a68. and *note
     os.unshare(): 1a69. for Linux.  Patch by Noam Cohen.

   - gh-94036(89): Fix incorrect source location info for some
     multi-line attribute accesses and method calls.

   - gh-94938(90): 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.

   - gh-94996(91): *note ast.parse(): 1c2. will no longer parse function
     definitions with positional-only params when passed
     ‘feature_version’ less than ‘(3, 8)’.  Patch by Shantanu Jain.

   - gh-94739(92): Allow jumping within, out of, and across exception
     handlers in the debugger.

   - gh-94949(93): *note ast.parse(): 1c2. will no longer parse
     parenthesized context managers when passed ‘feature_version’ less
     than ‘(3, 9)’.  Patch by Shantanu Jain.

   - gh-94947(94): *note ast.parse(): 1c2. will no longer parse
     assignment expressions when passed ‘feature_version’ less than ‘(3,
     8)’.  Patch by Shantanu Jain.

   - gh-91256(95): Ensures the program name is known for help text
     during interpreter startup.

   - gh-94869(96): Fix the column offsets for some expressions in
     multi-line f-strings *note ast: 9. nodes.  Patch by Pablo Galindo.

   - gh-94893(97): Fix an issue where frame object manipulations could
     corrupt inline bytecode caches.

   - gh-94822(98): Fix an issue where lookups of metaclass descriptors
     may be ignored when an identically-named attribute also exists on
     the class itself.

   - gh-91153(99): Fix an issue where a *note bytearray: 342. item
     assignment could crash if it’s resized by the new value’s
     ‘__index__()’ method.

   - gh-90699(100): Fix reference counting bug in ‘bool.__repr__()’.
     Patch by Kumar Aditya.

   - gh-94694(101): 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(102): Fix an issue that caused internal frames to outlive
     failed Python function calls, possibly resulting in memory leaks or
     hard interpreter crashes.

   - gh-94215(103): 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(104): 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(105): Line number of a module’s ‘RESUME’ instruction is
     set to 0 as specified in PEP 626(106).

   - gh-94438(107): Account for instructions that can push NULL to the
     stack when setting line number in a frame.  Prevents some
     (unlikely) crashes.

   - gh-91719(108): Reload ‘opcode’ when raising ‘unknown opcode error’
     in the interpreter main loop, for C compilers to generate
     dispatching code independently.

   - gh-94329(109): 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(110): 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(111): 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(112): 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(113): Fix error for dictionary literals with invalid
     expression as value.

   - gh-87995(114): *note types.MappingProxyType: 68d. instances are now
     hashable if the underlying mapping is hashable.

   - gh-93883(115): 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(116): Add *note BINARY_SLICE: 6fa. and *note STORE_SLICE:
     6fb. instructions for more efficient handling and better
     specialization of slicing operations, where the slice is explicit
     in the source code.

   - gh-94021(117): Fix unreachable code warning in
     ‘Python/specialize.c’.

   - gh-93911(118): Specialize ‘LOAD_ATTR’ for objects with custom
     ‘__getattribute__’.

   - gh-93955(119): Improve performance of attribute lookups on objects
     with custom ‘__getattribute__’ and ‘__getattr__’.  Patch by Ken
     Jin.

   - gh-93911(120): Specialize ‘LOAD_ATTR’ for ‘property()’ attributes.

   - gh-93678(121): 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(122): 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(123): Store offset of first traceable instruction in code
     object to avoid having to recompute it for each instruction when
     tracing.

   - gh-93516(124): Lazily create a table mapping bytecode offsets to
     line numbers to speed up calculation of line numbers when tracing.

   - gh-89828(125): *note types.GenericAlias: 9e2. no longer relays the
     ‘__class__’ attribute.  For example, ‘isinstance(list[int], type)’
     no longer returns ‘True’.

   - gh-93678(126): Refactor the compiler to reduce boilerplate and
     repetition.

   - gh-93671(127): Fix some exponential backtrace case happening with
     deeply nested sequence patterns in match statements.  Patch by
     Pablo Galindo

   - gh-93662(128): Make sure that the end column offsets are correct in
     multi-line method calls.  Previously, the end column could precede
     the column offset.

   - gh-93461(129): *note importlib.invalidate_caches(): dfe. now drops
     entries from *note sys.path_importer_cache: 7ef. 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’.

   - gh-93621(130): Change order of bytecode instructions emitted for
     *note with: 186. and *note async with: 185. to reduce the number of
     entries in the exception table.

   - gh-93533(131): Reduce the size of the inline cache for
     ‘LOAD_METHOD’ by 2 bytes.

   - gh-93444(132): 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(133): ‘LOAD_METHOD’ instruction has been removed.  It was
     merged back into ‘LOAD_ATTR’.

   - gh-93418(134): 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(135): Cache the result of *note PyCode_GetCode(): 971.
     function to restore the 'O'(1) lookup of the ‘co_code’ attribute.

   - gh-93359(136): Ensure that custom *note ast: 9. nodes without
     explicit end positions can be compiled.  Patch by Pablo Galindo.

   - gh-93356(137): 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(138): 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(139): Improve error message for invalid syntax of
     conversion character in f-string expressions.

   - gh-93345(140): Fix a crash in substitution of a ‘TypeVar’ in nested
     generic alias after ‘TypeVarTuple’.

   - gh-93223(141): 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(142): The ‘--experimental-isolated-subinterpreters’
     configure option and ‘EXPERIMENTAL_ISOLATED_SUBINTERPRETERS’ macro
     have been removed.

   - gh-91924(143): Fix ‘__lltrace__’ debug feature if the stdout
     encoding is not UTF-8.  Patch by Victor Stinner.

   - gh-93040(144): Wraps unused parameters in ‘Objects/obmalloc.c’ with
     ‘Py_UNUSED’.

   - gh-93143(145): Avoid ‘NULL’ checks for uninitialized local
     variables by determining at compile time which variables must be
     initialized.

   - gh-93061(146): Backward jumps after ‘async for’ loops are no longer
     given dubious line numbers.

   - gh-93065(147): Fix contextvars HAMT implementation to handle
     iteration over deep trees.

     The bug was discovered and fixed by Eli Libman.  See
     MagicStack/immutables#84(148) for more details.

   - gh-93012(149): Added the new function *note PyType_FromMetaclass():
     767, which generalizes the existing *note
     PyType_FromModuleAndSpec(): 768. 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(): 767. is available in the
     Limited API, which provides a path towards migrating more binding
     tools onto the Stable ABI.

   - gh-93021(150): Fix the ‘__text_signature__’ for ‘__get__()’ methods
     implemented in C. Patch by Jelle Zijlstra.

   - gh-89914(151): 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(152): Fix memory leak in code object’s lines and positions
     iterators as they were not finalized at exit.  Patch by Kumar
     Aditya.

   - gh-92930(153): Fixed a crash in ‘_pickle.c’ from mutating
     collections during ‘__reduce__’ or ‘persistent_id’.

   - gh-90690(154): 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(155): Always round the allocated size for lists up to the
     nearest even number.

   - gh-92858(156): Improve error message for some suites with syntax
     error before ‘:’

   - gh-90473(157): Decrease default recursion limit on WASI to address
     limited call stack size.

   - gh-92804(158): Fix memory leak in ‘memoryview’ iterator as it was
     not finalized at exit.  Patch by Kumar Aditya.

   - gh-92777(159): Specialize ‘LOAD_METHOD’ for objects with lazy
     dictionaries.  Patch by Ken Jin.

   - gh-92658(160): Add support for connecting and binding to Hyper-V
     sockets on Windows Hyper-V hosts and guests.

   - gh-92236(161): Remove spurious “LINE” event when starting a
     generator or coroutine, visible tracing functions implemented in C.

   - gh-91102(162): ‘_warnings.warn_explicit()’ is ported to Argument
     Clinic.

   - gh-92619(163): 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(164): The deprecated debug build only ‘PYTHONTHREADDEBUG’
     environment variable no longer does anything.

   - gh-92261(165): Fix hang when trying to iterate over a
     ‘typing.Union’.

   - gh-91432(166): Specialized the *note FOR_ITER: 19fa. opcode using
     the PEP 659 machinery

   - gh-91399(167): Removed duplicate ‘{0, 0, 0, 0, 0, 0}’ entry in
     ‘Objects/unicodetype_db.h’.

   - gh-91578(168): Updates the error message for abstract class.

   - bpo-47091(169): Improve performance of repetition of *note list:
     24c. and *note tuple: 608. by using ‘memcpy’ to copy data and
     performing the reference increments in one step.

   - bpo-46142(170): 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(171): Document some places where an assignment expression
     needs parentheses.

   ---------- 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

   (9) https://github.com/python/cpython/issues/96078

   (10) https://github.com/python/cpython/issues/97955

   (11) https://github.com/python/cpython/issues/97912

   (12) https://github.com/python/cpython/issues/97002

   (13) https://github.com/python/cpython/issues/97943

   (14) https://github.com/python/cpython/issues/97922

   (15) https://github.com/python/cpython/issues/65961

   (16) https://github.com/python/cpython/issues/97850

   (17) https://github.com/python/cpython/issues/86298

   (18) https://github.com/python/cpython/issues/97779

   (19) https://github.com/python/cpython/issues/91052

   (20) https://github.com/python/cpython/issues/97752

   (21) https://github.com/python/cpython/issues/97591

   (22) https://github.com/python/cpython/issues/97670

   (23) https://github.com/python/cpython/issues/94526

   (24) https://github.com/python/cpython/issues/96670

   (25) https://github.com/python/cpython/issues/96975

   (26) https://github.com/python/cpython/issues/96848

   (27) https://github.com/python/cpython/issues/95921

   (28) https://github.com/python/cpython/issues/96821

   (29) https://github.com/python/cpython/issues/96821

   (30) https://github.com/python/cpython/issues/95778

   (31) https://github.com/python/cpython/issues/96387

   (32) https://github.com/python/cpython/issues/96864

   (33) https://github.com/python/cpython/issues/95778

   (34) https://github.com/python/cpython/issues/96678

   (35) https://github.com/python/cpython/issues/96754

   (36) https://github.com/python/cpython/issues/90997

   (37) https://github.com/python/cpython/issues/96751

   (38) https://github.com/python/cpython/issues/90751

   (39) https://github.com/python/cpython/issues/96678

   (40) https://github.com/python/cpython/issues/64373

   (41) https://github.com/python/cpython/issues/96641

   (42) https://github.com/python/cpython/issues/96636

   (43) https://github.com/python/cpython/issues/96572

   (44) https://github.com/python/cpython/issues/96611

   (45) https://github.com/python/cpython/issues/96612

   (46) https://github.com/python/cpython/issues/90230

   (47) https://github.com/python/cpython/issues/96587

   (48) https://peps.python.org/pep-0654/

   (49) https://github.com/python/cpython/issues/96569

   (50) https://github.com/python/cpython/issues/96582

   (51) https://github.com/python/cpython/issues/91079

   (52) https://github.com/python/cpython/issues/93911

   (53) https://github.com/python/cpython/issues/96348

   (54) https://github.com/python/cpython/issues/95196

   (55) https://github.com/python/cpython/issues/96364

   (56) https://github.com/python/cpython/issues/96352

   (57) https://github.com/python/cpython/issues/93554

   (58) https://github.com/python/cpython/issues/96268

   (59) https://github.com/python/cpython/issues/96237

   (60) https://github.com/python/cpython/issues/96187

   (61) https://github.com/python/cpython/issues/96143

   (62) https://github.com/python/cpython/issues/96071

   (63) https://github.com/python/cpython/issues/96046

   (64) https://github.com/python/cpython/issues/96005

   (65) https://github.com/python/cpython/issues/93678

   (66) https://github.com/python/cpython/issues/95245

   (67) https://github.com/python/cpython/issues/90997

   (68) https://github.com/python/cpython/issues/95977

   (69) https://github.com/python/cpython/issues/91210

   (70) https://github.com/python/cpython/issues/95922

   (71) https://github.com/python/cpython/issues/95818

   (72) https://github.com/python/cpython/issues/95876

   (73) https://github.com/python/cpython/issues/95605

   (74) https://github.com/python/cpython/issues/95150

   (75) https://github.com/python/cpython/issues/91146

   (76) https://github.com/python/cpython/issues/87092

   (77) https://github.com/python/cpython/issues/95355

   (78) https://github.com/python/cpython/issues/90081

   (79) https://github.com/python/cpython/issues/95324

   (80) https://github.com/python/cpython/issues/95245

   (81) https://github.com/python/cpython/issues/93678

   (82) https://github.com/python/cpython/issues/95185

   (83) https://github.com/python/cpython/issues/93351

   (84) https://github.com/python/cpython/issues/94438

   (85) https://github.com/python/cpython/issues/95060

   (86) https://github.com/python/cpython/issues/95113

   (87) https://github.com/python/cpython/issues/91409

   (88) https://github.com/python/cpython/issues/95023

   (89) https://github.com/python/cpython/issues/94036

   (90) https://github.com/python/cpython/issues/94938

   (91) https://github.com/python/cpython/issues/94996

   (92) https://github.com/python/cpython/issues/94739

   (93) https://github.com/python/cpython/issues/94949

   (94) https://github.com/python/cpython/issues/94947

   (95) https://github.com/python/cpython/issues/91256

   (96) https://github.com/python/cpython/issues/94869

   (97) https://github.com/python/cpython/issues/94893

   (98) https://github.com/python/cpython/issues/94822

   (99) https://github.com/python/cpython/issues/91153

   (100) https://github.com/python/cpython/issues/90699

   (101) https://github.com/python/cpython/issues/94694

   (102) https://github.com/python/cpython/issues/93252

   (103) https://github.com/python/cpython/issues/94215

   (104) https://github.com/python/cpython/issues/92228

   (105) https://github.com/python/cpython/issues/94485

   (106) https://peps.python.org/pep-0626/

   (107) https://github.com/python/cpython/issues/94438

   (108) https://github.com/python/cpython/issues/91719

   (109) https://github.com/python/cpython/issues/94329

   (110) https://github.com/python/cpython/issues/94360

   (111) https://github.com/python/cpython/issues/88116

   (112) https://github.com/python/cpython/issues/94262

   (113) https://github.com/python/cpython/issues/94192

   (114) https://github.com/python/cpython/issues/87995

   (115) https://github.com/python/cpython/issues/93883

   (116) https://github.com/python/cpython/issues/94163

   (117) https://github.com/python/cpython/issues/94021

   (118) https://github.com/python/cpython/issues/93911

   (119) https://github.com/python/cpython/issues/93955

   (120) https://github.com/python/cpython/issues/93911

   (121) https://github.com/python/cpython/issues/93678

   (122) https://github.com/python/cpython/issues/93841

   (123) https://github.com/python/cpython/issues/93516

   (124) https://github.com/python/cpython/issues/93516

   (125) https://github.com/python/cpython/issues/89828

   (126) https://github.com/python/cpython/issues/93678

   (127) https://github.com/python/cpython/issues/93671

   (128) https://github.com/python/cpython/issues/93662

   (129) https://github.com/python/cpython/issues/93461

   (130) https://github.com/python/cpython/issues/93621

   (131) https://github.com/python/cpython/issues/93533

   (132) https://github.com/python/cpython/issues/93444

   (133) https://github.com/python/cpython/issues/93429

   (134) https://github.com/python/cpython/issues/93418

   (135) https://github.com/python/cpython/issues/93382

   (136) https://github.com/python/cpython/issues/93359

   (137) https://github.com/python/cpython/issues/93356

   (138) https://github.com/python/cpython/issues/93354

   (139) https://github.com/python/cpython/issues/93283

   (140) https://github.com/python/cpython/issues/93345

   (141) https://github.com/python/cpython/issues/93223

   (142) https://github.com/python/cpython/issues/84694

   (143) https://github.com/python/cpython/issues/91924

   (144) https://github.com/python/cpython/issues/93040

   (145) https://github.com/python/cpython/issues/93143

   (146) https://github.com/python/cpython/issues/93061

   (147) https://github.com/python/cpython/issues/93065

   (148) https://github.com/MagicStack/immutables/issues/84

   (149) https://github.com/python/cpython/issues/93012

   (150) https://github.com/python/cpython/issues/93021

   (151) https://github.com/python/cpython/issues/89914

   (152) https://github.com/python/cpython/issues/92955

   (153) https://github.com/python/cpython/issues/92930

   (154) https://github.com/python/cpython/issues/90690

   (155) https://github.com/python/cpython/issues/92914

   (156) https://github.com/python/cpython/issues/92858

   (157) https://github.com/python/cpython/issues/90473

   (158) https://github.com/python/cpython/issues/92804

   (159) https://github.com/python/cpython/issues/92777

   (160) https://github.com/python/cpython/issues/92658

   (161) https://github.com/python/cpython/issues/92236

   (162) https://github.com/python/cpython/issues/91102

   (163) https://github.com/python/cpython/issues/92619

   (164) https://github.com/python/cpython/issues/88750

   (165) https://github.com/python/cpython/issues/92261

   (166) https://github.com/python/cpython/issues/91432

   (167) https://github.com/python/cpython/issues/91399

   (168) https://github.com/python/cpython/issues/91578

   (169) https://bugs.python.org/issue?@action=redirect&bpo=47091

   (170) https://bugs.python.org/issue?@action=redirect&bpo=46142

   (171) https://bugs.python.org/issue?@action=redirect&bpo=42316


File: python.info,  Node: Biblioteca<31>,  Next: Documentação<25>,  Prev: Núcleo e embutidos<30>,  Up: Python 3 12 0 alpha 1

1.24.31.3 Biblioteca
....................

   - gh-89237(1): Fix hang on Windows in ‘subprocess.wait_closed()’ in
     *note asyncio: b. with *note ProactorEventLoop: 812.  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: a5. module no longer accepts bytes-like
     paths, like *note bytearray: 342. and *note memoryview: 165. types:
     only the exact *note bytes: 192. 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(): 860. method was added to *note
     SysLogHandler: 861.

   - gh-96035(7): Fix bug in *note urllib.parse.urlparse(): 35f. 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(): 16ec. and *note
     sys.settrace(): 2e0. 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: 117. to pass along ‘PYTHON*’
     variables to ‘ensurepip’ and ‘pip’ when they do not impact path
     resolution

   - gh-94597(10): Deprecated
     ‘asyncio.AbstractEventLoopPolicy.get_child_watcher()’ and
     ‘asyncio.AbstractEventLoopPolicy.set_child_watcher()’ methods to be
     removed in Python 3.14.  Patch by Kumar Aditya.

   - gh-98178(11): On macOS, fix a crash in *note syslog.syslog(): 757.
     in multi-threaded applications.  On macOS, the libc ‘syslog()’
     function is not thread-safe, so *note syslog.syslog(): 757. no
     longer releases the GIL to call it.  Patch by Victor Stinner.

   - gh-44098(12): Release the GIL when creating *note mmap.mmap: 513.
     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 ‘MultiLoopChildWatcher’,
     ‘FastChildWatcher’ and ‘SafeChildWatcher’ are deprecated and will
     be removed in Python 3.14.  Patch by Kumar Aditya.

   - gh-98023(15): Change default child watcher to ‘PidfdChildWatcher’
     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: 93.  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: 81.

   - gh-97837(22): Change deprecate warning message in *note unittest:
     10c. 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: 5e4. when *note
     subprocess.check_output(): 11b8. is used with argument ‘input=None’
     and either of the arguments 'encoding' or 'errors' are used.

   - gh-97008(24): *note NameError: 44f. and *note AttributeError: 5e4.
     spelling suggestions provided since gh-82711(25) are now also
     emitted by the pure Python *note traceback: 104. 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():
     a0a. 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: b. 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(): 1868. when an evil argument
     is passed.

   - gh-97639(31): Remove ‘tokenize.NL’ check from *note tabnanny: e3.

   - 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: b. where *note
     process_exited(): 1a6b. called before the *note
     pipe_data_received(): 1a6c. 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(): 1a6d.
     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: 10b. database to Unicode
     15.0.0.

   - gh-96735(42): Fix undefined behaviour in *note struct.unpack():
     17c5.

   - 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: 14ba.’s
     to *note float: 196.

   - 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: 10a, 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:
     f95.’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: 82, fix overeager replacement of
     “‘typing.’” in formatting annotations.

   - gh-89258(55): Added a *note getChildren(): 1a6e. method to *note
     logging.Logger: d3a, 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: 128.

   - 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(): 1a6f. 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(): 1a70.

   - gh-95899(69): Fix *note asyncio.Runner: 2f3. to call *note
     asyncio.set_event_loop(): 1a71. only once to avoid calling
     ‘attach_loop()’ multiple times on child watchers.  Patch by Kumar
     Aditya.

   - gh-95736(70): Fix *note unittest.IsolatedAsyncioTestCase: 35e. to
     set event loop before calling setup functions.  Patch by Kumar
     Aditya.

   - gh-95865(71): Speed up *note urllib.parse.quote_from_bytes(): 1a6d.
     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:
     4ce. and raises some other error, the other error should generally
     not silently be suppressed.

   - gh-95149(75): The *note HTTPStatus: af2. 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: 4cb. to propagate
     exception when *note asyncio.CancelledError: 4ce. 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: 6c2. initializer.

   - gh-95385(79): Faster ‘json.dumps()’ when sorting of keys is not
     requested (default).

   - gh-83901(80): Improve *note Signature.bind: 17f6. 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: 1a72. or *note
     ENOSYS: 1a73. 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(): 2f1. for *note asyncio.Task:
     1c7. implementations without *note uncancel(): 4d0. method.  Patch
     by Kumar Aditya.

   - gh-95087(85): Fix IndexError in parsing invalid date in the *note
     email: 3f. 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:
     1a74, *note os.EFD_NONBLOCK: 1a75. and *note os.EFD_SEMAPHORE:
     1a76. flags on older kernel versions where these flags are not
     present.  Patch by Kumar Aditya.

   - gh-95166(89): Fix *note concurrent.futures.Executor.map(): fd8. to
     cancel the currently waiting on future on an error - e.g.
     TimeoutError or KeyboardInterrupt.

   - gh-95132(90): Fix a *note sqlite3: d4. regression where ‘*args’ and
     ‘**kwds’ were incorrectly relayed from *note connect(): 59f. to the
     *note Connection: 547. 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: 5f. 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: 197e. 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():
     1c2, when ‘feature_version’ has an invalid major version.  Patch by
     Shantanu Jain.

   - gh-77617(98): Add *note sqlite3: d4. *note command-line interface:
     668.  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: f5.  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(): 1a57. to
     be awaited concurrently by multiple tasks.  Patch by Kumar Aditya.

   - gh-87822(106): When called with ‘capture_locals=True’, the *note
     traceback: 104. 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: b. 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: 70c. and
     *note typing.Sized: 70d.

   - 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: 10a.  Previously an error message saying ‘Some
     type variables ... are not listed in Generic[...]’ was shown.
     *note typing: 10a. no longer populates ‘__parameters__’ with the
     ‘__parameters__’ of a Python class.

   - gh-94619(112): Remove the long-deprecated ‘module_repr()’ from
     *note importlib: 7b.

   - 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(): 2f1. and *note
     unittest.IsolatedAsyncioTestCase: 35e. 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: 1966. when it was
     not completely initialized by initializing it in *note __new__():
     795.  Patch by Kumar Aditya.

   - gh-94510(118): Re-entrant calls to *note sys.setprofile(): 16ec.
     and *note sys.settrace(): 2e0. now raise *note RuntimeError: 243.
     Patch by Pablo Galindo.

   - gh-92336(119): Fix bug where *note linecache.getline(): 23f. fails
     on bad files with *note UnicodeDecodeError: bfe. or *note
     SyntaxError: 18e.  It now returns an empty string as per the
     documentation.

   - gh-94398(120): Once a *note asyncio.TaskGroup: 4cb. 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(): 74c. 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: 138.: 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(): 753.: Passing ‘None’ for 's'
     argument now raises an exception, rather than reading *note
     sys.stdin: 754.  The feature was deprecated in Python 3.9.  Patch
     by Victor Stinner.

   - gh-94318(125): Strip trailing spaces in *note pydoc: ba. text
     output.

   - gh-89988(126): Fix memory leak in *note pickle.Pickler: c09. when
     looking up ‘dispatch_table’.  Patch by Kumar Aditya.

   - gh-90016(127): Deprecate *note sqlite3: d4. *note default adapters
     and converters: 709.  Patch by Erlend E. Aasland.

   - gh-94254(128): Fixed types of *note struct: db. 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(): 6cf. now passes the
     'root_dir' argument to custom archivers which support it.

   - gh-94216(131): The *note dis: 3c. 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(): 737. 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: 354. object
     and call its *note ssl.SSLContext.wrap_socket: 73d. 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(): 73b. or *note
     ssl.RAND_bytes(): 73c. instead.  Patch by Victor Stinner.

   - gh-94199(141): *note hashlib: 6c.: Remove the pure Python
     implementation of *note hashlib.pbkdf2_hmac(): 728, 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(): 728. which is faster.  Patch by Victor
     Stinner.

   - gh-94196(143): *note gzip: 6b.: Remove the ‘filename’ attribute of
     *note gzip.GzipFile: 650, deprecated since Python 2.6, use the
     *note name: 726. 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 ‘asyncio.PidfdChildWatcher’ 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(): 314. instead.
     The *note open(): 314. (*note io.open(): 735.) 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: aa. crash after jump caused by a null
     pointer dereference.  Patch by Kumar Aditya.

   - gh-94101(147): Manual instantiation of *note ssl.SSLSession: ecd.
     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(): 30b, *note
     inspect.isgeneratorfunction(): 1a77, and *note
     inspect.isasyncgenfunction(): 1a78. now properly return ‘True’ for
     duck-typed function-like objects like instances of *note
     unittest.mock.AsyncMock: c33.

     This makes *note inspect.iscoroutinefunction(): 30b. consistent
     with the behavior of ‘asyncio.iscoroutinefunction()’.  Patch by
     Mehdi ABAAKOUK.

   - gh-94028(149): Fix a regression in the *note sqlite3: d4. 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: 82a. by name.

   - gh-93847(154): Fix repr of enum of generic aliases.

   - gh-91404(155): Revert the *note re: be. 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: e6.

   - gh-93820(157): Fixed a regression when *note copy.copy(): 74c.-ing
     *note enum.Flag: 82a. with multiple flag members.

   - gh-79512(158): Fixed names and ‘__module__’ value of *note weakref:
     11a. classes *note ReferenceType: 1a79, *note ProxyType: 1a7a,
     *note CallableProxyType: 1a7b.  It makes them pickleable.

   - gh-91389(159): Fix an issue where *note dis: 3c. 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(): 74c. and *note copy.deepcopy():
     d59. 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: d4. now correctly detects DML queries
     with leading comments.  Patch by Erlend E. Aasland.

   - gh-93421(167): Update *note sqlite3.Cursor.rowcount: 1a7c. 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: 5d.  Patch by Illia Volochii.

   - gh-93370(169): Deprecate ‘version’ and ‘version_info’.

   - 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(): 6aa.
     context manager to remove the temporary file if destroyed late
     during Python finalization: keep a local reference to the *note
     os.remove(): 12ec. 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: 6b7. flag to open a
     file descriptor for a process with *note os.pidfd_open(): 699. 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: 198.

   - gh-93297(176): Make asyncio task groups prevent child tasks from
     being GCed

   - gh-85308(177): Changed *note argparse.ArgumentParser: 1bd. to use
     *note filesystem encoding and error handler: 752. 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: a17.
     sequence of an absolute path using negative index values produced
     incorrect results.

   - gh-93162(179): Add the ability for *note
     logging.config.dictConfig(): 13ac. to usefully configure *note
     QueueHandler: 1a7d. and *note QueueListener: 241. as a pair, and
     add *note logging.getHandlerByName(): 1a7e. and *note
     logging.getHandlerNames(): 19ad. 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: c5c. 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: 8b.
     module for use with *note asyncio: b. tasks.

   - gh-74696(186): *note shutil.make_archive(): 6cf. 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: 60. 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(): 59f. 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(): ad8. when
     ‘ImportFrom.level’ is ‘None’

   - gh-92932(193): Now *note dis(): 204. and *note get_instructions():
     4e6. 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: 265. arguments in addition to *note str: 169. paths.
     Patch by David Foster.

   - gh-87901(195): Removed the ‘encoding’ argument from *note
     os.popen(): 318. 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: 1a7f. to *note ctypes: 2e,
     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: dc. now fails early on Emscripten
     and WASI platforms to work around missing *note os.pipe(): 1a80. on
     WASI.

   - gh-89325(200): Removed many old deprecated *note unittest: 10c.
     features: *note TestCase: 2b2. method aliases, undocumented and
     broken *note TestCase: 2b2. method ‘assertDictContainsSubset’,
     undocumented *note TestLoader.loadTestsFromModule: 58d. parameter
     'use_load_tests', and an underscored alias of the *note
     TextTestResult: 749. class.

   - gh-92734(201): Allow multi-element reprs emitted by *note reprlib:
     c0. to be pretty-printed using configurable indentation.

   - gh-92671(202): Fixed *note ast.unparse(): ad8. for empty tuples in
     the assignment target context.

   - gh-91581(203): *note utcfromtimestamp(): 34f. 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: 1a81.  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(): 6c4. as an
     alternative to *note os.walk(): 6c5.

   - gh-92550(206): Fix *note pathlib.Path.rglob(): 532. for empty
     pattern.

   - gh-92591(207): Allow *note logging: 8b. filters to return a *note
     logging.LogRecord: 11dc. instance so that filters attached to *note
     logging.Handler: 1684.s can enrich records without side effects on
     other handlers.

   - gh-92445(208): Fix a bug in *note argparse: 7. 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: d4. 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(): 1a82.

   - 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: 265. deprecated method
     ‘link_to’ has been removed.  Use 3.10’s *note hardlink_to(): a18.
     method instead as its semantics are consistent with that of *note
     symlink_to(): a19.

   - gh-89336(213): Removed *note configparser: 26. 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__(): 938. to *note
     csv.DictReader: bce. and *note csv.DictWriter: 13fa, 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: d1.

   - gh-91810(216): *note ElementTree: b3d. method *note write(): c7f.
     and function *note tostring(): 11eb. 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(): de3. 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: 1d6. 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: 707. 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(): 59c. and *note re.subn(): 59d. and
     corresponding *note re.Pattern: 1a83. 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: 8c8. now raises *note
     zipfile.BadZipFile: 1a84. 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(): 4ad.

   - gh-90005(229): *note ctypes: 2e. dependency ‘libffi’ is now
     detected with ‘pkg-config’.

   - bpo-32547(230): The constructors for *note DictWriter: 13fa. and
     *note DictReader: bce. now coerce the ‘fieldnames’ argument to a
     *note list: 24c. if it is an iterator.

   - bpo-35540(231): Fix *note dataclasses.asdict(): 19d1. crash when
     *note collections.defaultdict: 13b8. 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: 192. on *note
     sys.path: 3e1.

   - bpo-46951(234): Order the contents of zipapp archives, to make
     builds more reproducible.

   - bpo-42777(235): Implement *note pathlib.Path.is_mount(): c02. 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(): aca. system.

   - bpo-46642(238): Improve error message when trying to subclass an
     instance of *note typing.TypeVar: 480, *note typing.ParamSpec: 481,
     *note typing.TypeVarTuple: 482, 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: b. to AIX platform only.

   - bpo-28249(240): Set *note doctest.DocTest.lineno: 1750. to ‘None’
     when an object does not have *note __doc__: b17.

   - bpo-46197(241): Fix *note ensurepip: 59. environment isolation for
     subprocess running ‘pip’.

   - bpo-45924(242): Fix *note asyncio: b. 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:
     10c.: methods *note enterContext(): 8bd. and *note
     enterClassContext(): 8be. of class *note TestCase: 2b2, method
     *note enterAsyncContext(): 8bf. of class *note
     IsolatedAsyncioTestCase: 35e. and function *note
     unittest.enterModuleContext(): 8c0.

   - 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(): c27. support
     for DragonFly BSD. Patch by David Carlier.

   - bpo-14243(247): The *note tempfile.NamedTemporaryFile: 6e2.
     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__(): 13b9. when a value is not found.  This matches
     the behavior of *note dict: 183.  Patch by Bar Harel.

   - bpo-38693(250): *note importlib: 7b. now uses f-strings internally
     instead of ‘str.format’.

   - bpo-38267(251): Add 'timeout' parameter to *note
     asyncio.loop.shutdown_default_executor(): ada.  The default value
     is ‘None’, which means the executor will be given an unlimited
     amount of time.  When called from *note asyncio.Runner: 2f3. or
     *note asyncio.run(): 2f1, the default timeout is 5 minutes.

   - bpo-34828(252): *note sqlite3.Connection.iterdump(): 549. 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: 119. module.

   - bpo-26253(254): Allow adjustable compression level for tarfile
     streams in *note tarfile.open(): 106d.

   ---------- 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<25>,  Next: Testes<26>,  Prev: Biblioteca<31>,  Up: Python 3 12 0 alpha 1

1.24.31.4 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: 9. documentation about *note ast.literal_eval(): e06. 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: 1a86. 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: 1a87.

   - 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: d4. behavior when *note How to
     use the connection context manager: 1a88.

   - gh-87260(17): Align *note sqlite3: d4. 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: abb. and *note PYTHONWARNINGS:
     d97. are matched literally and case-insensitively, rather than as
     regular expressions, in *note warnings: 118.

   - 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: 6c2. does not
     collapse initial double slashes because they denote UNC paths.

   - bpo-40838(24): Document that *note inspect.getdoc(): be3, *note
     inspect.getmodule(): 1a89, and *note inspect.getsourcefile(): 1a8a.
     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: 1a8b.
     documentation in *note codecs: 1c.

   - 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<26>,  Next: Construção<29>,  Prev: Documentação<25>,  Up: Python 3 12 0 alpha 1

1.24.31.5 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: 1a8d. (“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: be. exponentional
     slowdown when using rjsmin.

   - gh-91330(11): Added more tests for *note dataclasses: 33. 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(): 1a8e.

   - 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(): 1a8f.
     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(): 1a13. may return
     different size when string has UTF-8 memory.

   - gh-90473(24): WASI does not have a ‘chmod(2)’ syscall.  *note
     os.chmod(): 523. is now a dummy function on WASI. Skip all tests
     that depend on working *note os.chmod(): 523.

   - 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.14/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<29>,  Next: Windows<26>,  Prev: Testes<26>,  Up: Python 3 12 0 alpha 1

1.24.31.6 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: 24. for *note asyncio: b. and *note
     unittest.mock: 10d.

   - 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: c1. module, *note getresuid(): 1511, *note getresgid():
     1510, 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: 5b, *note select: c6, and
     *note socket: d1. constants.

   - gh-95174(14): Python now skips missing *note socket: d1. 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(): e53. 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: bf. and *note curses:
     2f. 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<29>,  Up: Python 3 12 0 alpha 1

1.24.31.7 Windows
.................

   - gh-98360(1): Fixes *note multiprocessing: 98. spawning child
     processes on Windows from a virtual environment to ensure that
     child processes that also use *note multiprocessing: 98. 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(): 164c. on Windows and in Windows-specific modules (like
     ‘winreg’).

   - gh-90989(4): Made *note Gerenciador de instalação do Python: 7cf.
     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: af. 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(): a35. *note
     sqlite3: d4. 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 Gerenciador de
     instalação do Python: 7cf. 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 Gerenciador de instalação do Python: 7cf.
     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 Gerenciador de instalação do Python: 7cf.
     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: 137. 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(): 12fe. 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: b. 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():
     1a92. 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<14>,  Prev: Windows<26>,  Up: Python 3 12 0 alpha 1

1.24.31.8 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(): f84. or *note os.mknod(): f85. 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<14>,  Next: Ferramentas/Demos<23>,  Prev: macOS<19>,  Up: Python 3 12 0 alpha 1

1.24.31.9 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<23>,  Next: API C<27>,  Prev: IDLE<14>,  Up: Python 3 12 0 alpha 1

1.24.31.10 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<27>,  Prev: Ferramentas/Demos<23>,  Up: Python 3 12 0 alpha 1

1.24.31.11 API C
................

   - gh-98393(1): The *note PyUnicode_FSDecoder(): 78c. function no
     longer accepts bytes-like paths, like *note bytearray: 342. and
     *note memoryview: 165. types: only the exact *note bytes: 192. type
     is accepted for bytes strings.  Patch by Victor Stinner.

   - gh-91051(2): Add *note PyType_Watch(): 77b. and related APIs to
     allow callbacks on *note PyType_Modified(): 1a97.

   - 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: 800. 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: 603. and *note Py_TPFLAGS_MANAGED_WEAKREF:
     771. instead.

   - gh-95781(6): An unrecognized format character in *note
     PyUnicode_FromFormat(): 61f. and *note PyUnicode_FromFormatV():
     789. now sets a *note SystemError: 78a.  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: 76b, *note PyVectorcall_NARGS(): 76c.
     and *note PyVectorcall_Call(): 76d.) was added to the limited API
     and stable ABI.

   - gh-95504(10): Fix sign placement when specifying width or precision
     in *note PyUnicode_FromFormat(): 61f. and *note
     PyUnicode_FromFormatV(): 789.  Patch by Philip Georgi.

   - gh-93012(11): The *note Py_TPFLAGS_HAVE_VECTORCALL: 76b. flag is
     now removed from a class when the class’s *note __call__(): 76f.
     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: 770. now inherit
     the *note Py_TPFLAGS_HAVE_VECTORCALL: 76b. flag.

   - gh-95388(12): Creating *note immutable types: 3cc. 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(): 972, *note
     PyCode_GetCellvars(): 973. and *note PyCode_GetFreevars(): 974. for
     accessing ‘co_varnames’, ‘co_cellvars’ and ‘co_freevars’
     respectively via the C API.

   - gh-94930(15): Fix ‘SystemError’ raised when *note
     PyArg_ParseTupleAndKeywords(): 618. 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(): 97d.

        * *note PyFrame_GetBack(): 97e.

        * *note PyFrame_GetBuiltins(): 964.

        * *note PyFrame_GetGenerator(): 965.

        * *note PyFrame_GetGlobals(): 966.

        * *note PyFrame_GetLasti(): 967.

        * *note PyFrame_GetLocals(): 655.

        * *note PyFrame_Type: 97f.

     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(): 767. (and other
     ‘PyType_From*’ functions) now check that offsets and the base
     class’s *note tp_basicsize: b74. fit in the new class’s
     ‘tp_basicsize’.

   - gh-93503(21): Add two new public functions to the public C-API,
     *note PyEval_SetProfileAllThreads(): 776. and *note
     PyEval_SetTraceAllThreads(): 658, 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:
     f3. module (*note threading.setprofile_all_threads(): 6e5. and
     *note threading.settrace_all_threads(): 6e4.) 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: 407, in the documentation: the *note
     Py_InitializeFromConfig(): 3f3. API should be instead.  Patch by
     Victor Stinner.

   - gh-77782(26): Deprecate global configuration variable like *note
     Py_IgnoreEnvironmentFlag: 407.: the *note
     Py_InitializeFromConfig(): 3f3. API should be instead.  Patch by
     Victor Stinner.

   - gh-92913(27): Ensures changes to *note
     PyConfig.module_search_paths: 637. are ignored unless *note
     PyConfig.module_search_paths_set: 7fa. 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():
     777. to the C API which sets the vectorcall field of a given *note
     PyFunctionObject: 778.

     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(): 792. 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.24.32 Python 3.11.0 beta 1
----------------------------

'Data de lançamento: 2022-05-06'

* Menu:

* Segurança: Segurança<26>.
* Núcleo e embutidos: Núcleo e embutidos<31>.
* Biblioteca: Biblioteca<32>.
* Documentação: Documentação<26>.
* Testes: Testes<27>.
* Construção: Construção<30>.
* Windows: Windows<27>.
* macOS: macOS<20>.
* Ferramentas/Demos: Ferramentas/Demos<24>.
* API C: API C<28>.


File: python.info,  Node: Segurança<26>,  Next: Núcleo e embutidos<31>,  Up: Python 3 11 0 beta 1

1.24.32.1 Segurança
...................

   - gh-57684(1): Add the *note -P: 7b6. command line option and the
     *note PYTHONSAFEPATH: 7b7. environment variable to not prepend a
     potentially unsafe path to *note sys.path: 3e1.  Patch by Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/57684


File: python.info,  Node: Núcleo e embutidos<31>,  Next: Biblioteca<32>,  Prev: Segurança<26>,  Up: Python 3 11 0 beta 1

1.24.32.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: 5e4. 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():
     49c.  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: 2a6. 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: 1a3.  In a future Python
     version they will be a *note SyntaxWarning: 1ae. and eventually a
     *note SyntaxError: 18e.

   - 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(): 2ac. and *note
     issubclass(): 9ba. checks for *note types.UnionType: 2a6.  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: 981. 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:
     7cc. (added in an earlier version of 3.11) with the final design of
     PEP 678(32).  Namely, *note BaseException: 7cc. 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: 199d, *note
     POP_JUMP_IF_FALSE: 199e, *note POP_JUMP_IF_NONE: 1a9b. and *note
     POP_JUMP_IF_NOT_NONE: 1a9c. virtual, mapping to new relative jump
     opcodes.

   - bpo-45317(40): Add internal documentation explaining design of new
     (for 3.11) frame stack.

   - bpo-47197(41): 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.

   - bpo-47120(42): Make opcodes ‘JUMP_IF_TRUE_OR_POP’ and
     ‘JUMP_IF_FALSE_OR_POP’ relative rather than absolute.

   - bpo-47177(43): 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(44): Integer mod/remainder operations, including the
     three-argument form of *note pow(): 1a4, now consistently return
     ints from the global small integer cache when applicable.

   - bpo-46962(45): 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: 1a9d, ‘testcapi.RecursingInfinitelyError’, and
     *note types.GenericAlias: 9e2.

     The functions affected are 24 methods in *note ctypes: 2e.

     Patch by Oleg Iarygin.

   - bpo-46942(46): Use Argument Clinic for the *note types.MethodType:
     1a9e. constructor.  Patch by Oleg Iarygin.

   - bpo-46764(47): Fix wrapping bound methods with @classmethod

   - bpo-43464(48): Optimize ‘set.intersection()’ for non-set arguments.

   - bpo-46721(49): Optimize ‘set.issuperset()’ for non-set argument.

   - bpo-46509(50): 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.

   - bpo-46045(51): Do not use POSIX semaphores on NetBSD

   - bpo-36819(52): 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(53): ‘marshal.dumps()’ uses ‘FLAG_REF’ for all interned
     strings.  This makes output more deterministic and helps
     reproducible build.

   - bpo-26579(54): 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://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

   (41) https://bugs.python.org/issue?@action=redirect&bpo=47197

   (42) https://bugs.python.org/issue?@action=redirect&bpo=47120

   (43) https://bugs.python.org/issue?@action=redirect&bpo=47177

   (44) https://bugs.python.org/issue?@action=redirect&bpo=46961

   (45) https://bugs.python.org/issue?@action=redirect&bpo=46962

   (46) https://bugs.python.org/issue?@action=redirect&bpo=46942

   (47) https://bugs.python.org/issue?@action=redirect&bpo=46764

   (48) https://bugs.python.org/issue?@action=redirect&bpo=43464

   (49) https://bugs.python.org/issue?@action=redirect&bpo=46721

   (50) https://bugs.python.org/issue?@action=redirect&bpo=46509

   (51) https://bugs.python.org/issue?@action=redirect&bpo=46045

   (52) https://bugs.python.org/issue?@action=redirect&bpo=36819

   (53) https://bugs.python.org/issue?@action=redirect&bpo=34093

   (54) https://bugs.python.org/issue?@action=redirect&bpo=26579


File: python.info,  Node: Biblioteca<32>,  Next: Documentação<26>,  Prev: Núcleo e embutidos<31>,  Up: Python 3 11 0 beta 1

1.24.32.3 Biblioteca
....................

   - gh-87901(1): Add the 'encoding' parameter to *note os.popen(): 318.

   - gh-90997(2): Fix an issue where *note dis: 3c. utilities may
     interpret populated inline cache entries as valid instructions.

   - gh-92332(3): Deprecate *note typing.Text: 35d. (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: 3c. utilities.

   - gh-92301(7): Prefer ‘close_range()’ to iterating over procfs for
     file descriptor closing in *note subprocess: dc. 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(): 81f, *note
     datetime.date.fromisoformat(): 81d. and *note
     datetime.time.fromisoformat(): 81e.  Patch by Paul Ganssle.

   - gh-92118(11): Fix a 3.11 regression in *note contextmanager():
     13fe, 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: 4db, 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__(): 938. to *note
     logging.LoggerAdapter: 14f1. and *note logging.StreamHandler: 13f4,
     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: 4de. now raises *note
     ValueError: 2ea. 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: 9e2.  Patch by Jelle Zijlstra.

   - gh-88089(19): Add support for generic *note typing.NamedTuple: 32f.

   - 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(): 11b9. and *note
     subprocess.getstatusoutput(): 11ba.

   - bpo-47029(24): Always close the read end of the pipe used by *note
     multiprocessing.Queue: 1aa0. 'after' the last write of buffered
     data to the write end of the pipe to avoid *note BrokenPipeError:
     1252. at garbage collection and at *note
     multiprocessing.Queue.close(): 1aa1. 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: 93. module for an alternative.  Patch by Victor
     Stinner.

   - gh-91401(28): Provide a way to disable *note subprocess: dc. 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: 1aa2. 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: 98. and *note asyncio: b. modules.

   - gh-91860(31): Add *note typing.dataclass_transform(): 6f0,
     implementing PEP 681(32).  Patch by Jelle Zijlstra.

   - gh-91832(33): Add ‘required’ attribute to *note argparse.Action:
     1aa3. repr output.

   - gh-91827(34): In the *note tkinter: f6. module add method
     ‘info_patchlevel()’ which returns the exact version of the Tcl
     library as a named tuple similar to *note sys.version_info: 8a4.

   - gh-84461(35): Add *note -enable-wasm-pthreads: 1aa4. 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: 1aa5.
     named tuple with build-time and run-time information about
     Emscripten platform.

   - gh-90623(41): *note signal.raise_signal(): 1aa6. and *note
     os.kill(): 1559. 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(): 8ab.  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(): 8b5. for *note
     collections.abc.Callable: 9e1.  Patch by Shantanu Jain.

   - gh-90568(47): Parsing ‘\N’ escapes of Unicode Named Character
     Sequences in a *note regular expression: be. raises now ‘re.error’
     instead of ‘TypeError’.

   - gh-91670(48): Remove deprecated ‘SO’ config variable in *note
     sysconfig: e1.

   - 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: be. module, fix *note fullmatch(): 117c.
     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: be. 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(): 877. in an *note ExceptionGroup: 4cc. 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: be.
     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: d4, ‘SQLITE_MISUSE’ result codes
     are now mapped to *note InterfaceError: 882. instead of *note
     ProgrammingError: 303.  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: 82. 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(): 854, *note inspect.getouterframes(): 855,
     *note inspect.getinnerframes(): 856, *note inspect.stack(): 857.
     and *note inspect.trace(): 858.  Patch by Pablo Galindo.

   - gh-69093(67): Add indexing and slicing support to *note
     sqlite3.Blob: 887.  Patch by Aviv Palivoda and Erlend E. Aasland.

   - gh-69093(68): Add *note context manager: 1e0. support to *note
     sqlite3.Blob: 887.  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: be. 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: 3c.
     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(): 179. now accepts
     arguments for *note warnings.simplefilter(): 8c5, 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: d1.

   - 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(): 327. to get the
     current locale encoding.  It is similar to
     ‘locale.getpreferredencoding(False)’ but ignores the *note Python
     UTF-8 Mode: 85b.

   - bpo-42012(85): Add *note wsgiref.types: 122, containing
     WSGI-specific types for static type checking.

   - bpo-47227(86): Suppress expression chaining for more *note re: be.
     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(): 1578. now accepts
     context attributes via keyword arguments

   - bpo-43323(89): Fix errors in the *note email: 3f. 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(): 8b2. and *note
     typing.clear_overloads(): 8b3.  Patch by Jelle Zijlstra.

   - bpo-44807(93): *note typing.Protocol: 564. no longer silently
     replaces ‘__init__()’ methods defined on subclasses.  Patch by
     Adrian Garcia Badaracco.

   - bpo-46787(94): Fix *note concurrent.futures.ProcessPoolExecutor:
     1d6. exception memory leak

   - bpo-46720(95): Add support for path-like objects to *note
     multiprocessing.set_executable(): 1aa7. 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: d1.

   - bpo-46053(97): Fix OSS audio support on NetBSD.

   - bpo-45639(98): ‘image/avif’ and ‘image/webp’ were added to *note
     mimetypes: 93.

   - bpo-46285(99): Add command-line option ‘-p’/‘--protocol’ to module
     *note http.server: 76. 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:
     76.).  Patch by Géry Ogam.

   - bpo-44791(100): Accept ellipsis as the last argument of *note
     typing.Concatenate: 9bd.

   - 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: 898.
     or *note io.TextIOBase: 899. interface for *note
     tempfile.SpooledTemporaryFile: 897. 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: d4. 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: 330. subclasses to also
     include *note Generic: 18ad. 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: 4b1. 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(): 885. to *note
     sqlite3.Connection: 547. for creating aggregate window functions.
     Patch by Erlend E. Aasland.

   - bpo-40676(115): Convert *note csv: 2d. to use Argument Clinic for
     *note csv.field_size_limit(): 1aa8, *note csv.get_dialect(): 1aa9,
     *note csv.unregister_dialect(): 1aaa. and *note
     csv.list_dialects(): 1aab.

   - 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: 303. instead of
     segfaulting on recursive usage of cursors in *note sqlite3: d4.
     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: 354.

   - bpo-22276(119): *note Path: 265. methods *note glob(): 531. and
     *note rglob(): 532. return only directories if 'pattern' ends with
     a pathname components separator (‘/’ or *note sep: 86f.).  Patch by
     Eisuke Kawashima.

   - bpo-24905(120): Add *note blobopen(): 886. to *note
     sqlite3.Connection: 547.  *note sqlite3.Blob: 887. 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<26>,  Next: Testes<27>,  Prev: Biblioteca<32>,  Up: Python 3 11 0 beta 1

1.24.32.4 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(): 68b.

   - 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(): c14.

   - 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: a6. 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: 76a.

   - bpo-46962(12): All docstrings in code snippets are now wrapped into
     *note PyDoc_STR: 1aad. 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():
     1aae. and *note runpy.run_path(): 49e.  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<27>,  Next: Construção<30>,  Prev: Documentação<26>,  Up: Python 3 11 0 beta 1

1.24.32.5 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: 10c. times to ‘ctypes.test’
     location and structure.  Patch by Oleg Iarygin.

   - bpo-29890(8): Add tests for *note ipaddress.IPv4Interface: 1ab0.
     and *note ipaddress.IPv6Interface: 1ab1. 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<30>,  Next: Windows<27>,  Prev: Testes<27>,  Up: Python 3 11 0 beta 1

1.24.32.6 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<30>,  Up: Python 3 11 0 beta 1

1.24.32.7 Windows
.................

   - bpo-46907(1): Update Windows installer to use SQLite 3.38.3.

   - bpo-47239(2): Fixed –list and –list-paths output for *note
     Gerenciador de instalação do Python: 7cf. 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(): 26c. 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<24>,  Prev: Windows<27>,  Up: Python 3 11 0 beta 1

1.24.32.8 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<24>,  Next: API C<28>,  Prev: macOS<20>,  Up: Python 3 11 0 beta 1

1.24.32.9 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<28>,  Prev: Ferramentas/Demos<24>,  Up: Python 3 11 0 beta 1

1.24.32.10 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(): 971. 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(): 1a12.

   - 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(): 2ce, *note Py_TYPE(): 3c6, *note
     Py_SIZE(): 97a. and *note Py_IS_TYPE(): 1ab7. 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(): 1ab8. is now exported in
     the Stable ABI on Windows.

   - bpo-47169(12): ‘PyThread_get_thread_native_id()’ is excluded from
     the stable ABI on platforms where it doesn’t exist (like Solaris).

   - bpo-46343(13): Added *note PyErr_GetHandledException(): 968. and
     *note PyErr_SetHandledException(): 969. as simpler alternatives to
     *note PyErr_GetExcInfo(): 96b. and *note PyErr_SetExcInfo(): 96a.

     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.24.33 Python 3.11.0 alpha 7
-----------------------------

'Data de lançamento: 2022-04-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<32>.
* Biblioteca: Biblioteca<33>.
* Documentação: Documentação<27>.
* Testes: Testes<28>.
* Construção: Construção<31>.
* Windows: Windows<28>.
* macOS: macOS<21>.
* Ferramentas/Demos: Ferramentas/Demos<25>.
* API C: API C<29>.


File: python.info,  Node: Núcleo e embutidos<32>,  Next: Biblioteca<33>,  Up: Python 3 11 0 alpha 7

1.24.33.1 Núcleo e embutidos
............................

   - bpo-47212(1): Raise *note IndentationError: 9a1. instead of *note
     SyntaxError: 18e. for a bare ‘except’ with no following indent.
     Improve *note SyntaxError: 18e. 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: 906. + 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: 90e. + jump.

   - bpo-47120(5): Replace the absolute jump opcode *note
     JUMP_NO_INTERRUPT: 1abb. by the relative *note
     JUMP_BACKWARD_NO_INTERRUPT: 903.

   - 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: 2bf.  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: 90f.

   - 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: 981. by calling *note PyFrame_GetLocals(): 655.

   - 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.

   - bpo-46968(18): Check for the existence of the “sys/auxv.h” header
     in *note faulthandler: 5c. to avoid compilation problems in systems
     where this header doesn’t exist.  Patch by Pablo Galindo

   - bpo-46329(19): 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(20): Quicken bytecode in-place by storing it as part of
     the corresponding ‘PyCodeObject’.

   - bpo-47012(21): Speed up iteration of *note bytes: 192. and *note
     bytearray: 342. by 30%.  Patch by Kumar Aditya.

   - bpo-47009(22): Improved the performance of *note list.append():
     8d1. and list comprehensions by optimizing for the common case,
     where no resize is needed.  Patch by Dennis Sweeney.

   - bpo-47005(23): Improve performance of ‘bytearray_repeat’ and
     ‘bytearray_irepeat’ by reducing the number of invocations of
     ‘memcpy’.

   - bpo-46829(24): Deprecate passing a message into *note
     asyncio.Future.cancel(): 1abc. and *note asyncio.Task.cancel():
     4cd.

   - bpo-46993(25): Speed up *note bytearray: 342. creation from *note
     list: 24c. and *note tuple: 608. by 40%.  Patch by Kumar Aditya.

   - bpo-39829(26): Removed the ‘__len__()’ call when initializing a
     list and moved initializing to ‘list_extend’.  Patch by Jeremiah
     Pascual.

   - bpo-46944(27): Speed up throwing exception in generator with *note
     METH_FASTCALL: 18e2. calling convention.  Patch by Kumar Aditya.

   - bpo-46841(28): Modify *note STORE_SUBSCR: 1abd. to use an inline
     cache entry (rather than its oparg) as an adaptive counter.

   - bpo-46841(29): Use inline caching for ‘PRECALL’ and *note CALL:
     90a, and remove the internal machinery for managing the (now
     unused) non-inline caches.

   - bpo-46881(30): Statically allocate and initialize the latin1
     characters.

   - bpo-46838(31): Improve syntax errors for incorrect function
     definitions.  Patch by Pablo Galindo

   - bpo-43721(32): Fix docstrings of *note getter: 1915, *note setter:
     1916, and *note deleter: 1917. to clarify that they create a new
     copy of the property.

   - bpo-43224(33): Make grammar changes required for PEP 646.

   ---------- 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

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46968

   (19) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (21) https://bugs.python.org/issue?@action=redirect&bpo=47012

   (22) https://bugs.python.org/issue?@action=redirect&bpo=47009

   (23) https://bugs.python.org/issue?@action=redirect&bpo=47005

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46829

   (25) https://bugs.python.org/issue?@action=redirect&bpo=46993

   (26) https://bugs.python.org/issue?@action=redirect&bpo=39829

   (27) https://bugs.python.org/issue?@action=redirect&bpo=46944

   (28) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (29) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (30) https://bugs.python.org/issue?@action=redirect&bpo=46881

   (31) https://bugs.python.org/issue?@action=redirect&bpo=46838

   (32) https://bugs.python.org/issue?@action=redirect&bpo=43721

   (33) https://bugs.python.org/issue?@action=redirect&bpo=43224


File: python.info,  Node: Biblioteca<33>,  Next: Documentação<27>,  Prev: Núcleo e embutidos<32>,  Up: Python 3 11 0 alpha 7

1.24.33.2 Biblioteca
....................

   - bpo-47208(1): Allow vendors to override ‘CTYPES_MAX_ARGCOUNT’.

   - bpo-23689(2): *note re: be. 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: 1c7.

   - 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: be. 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(): fbc. to only
     resolve names for *note socket.AF_INET: 1abf. or *note
     socket.AF_INET6: 1ac0. families.  Resolution may not make sense for
     other families, like *note socket.AF_BLUETOOTH: 1ac1. and *note
     socket.AF_UNIX: 1ac2.

   - 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: 1566. 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
     ‘urllib.request.URLopener’ 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(): 88f. to PEP
     3134(14).  Patch by Oleg Iarygin.

   - bpo-47095(15): *note hashlib: 6c.’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: 6c.’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: 7db, part of
     PEP 675(18).  Patch by Jelle Zijlstra.

   - bpo-42885(19): Optimize *note re.search(): 1428, *note re.split():
     59b, *note re.findall(): 1220, *note re.finditer(): 16e8. and *note
     re.sub(): 59c. for regular expressions starting with ‘\A’ or ‘^’.

   - bpo-23691(20): Protect the *note re.finditer(): 16e8. 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: 8c8. constructor and the ‘--metadata-encoding’
     option in the *note zipfile: 137. CLI to allow reading zipfiles
     using non-standard codecs to encode the filenames within the
     archive.

   - bpo-47000(24): Make *note io.text_encoding(): 197a. 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(): 194d. 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(): 194d. release the GIL when
     computing on larger inputs as *note zlib.crc32(): 194c. and *note
     hashlib: 6c. do.

     This also boosts performance on Windows as it now uses the zlib
     crc32 implementation for *note binascii.crc32(): 194d. 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: be.

   - bpo-47062(30): Implement *note asyncio.Runner: 2f3. context
     manager.

   - bpo-46382(31): *note dataclass(): 4db. ‘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(): 69c.

   - 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(): 849. 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: c5c. 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(): f94. 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: 8b0.  Patch
     by Shantanu Jain.

   - bpo-46995(47): Deprecate missing *note asyncio.Task.set_name():
     bc6. 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(): 1c9. and *note asyncio.loop.create_task():
     1ca.

   - 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: 5c.: 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: 868. value is now always
     available.  Patch by Victor Stinner.

   - bpo-46955(54): Expose ‘asyncio.base_events.Server’ as *note
     asyncio.Server: cfb.  Patch by Stefan Zabka.

   - bpo-23325(55): The *note signal: cb. module no longer assumes that
     *note SIG_IGN: 1ac3. and *note SIG_DFL: 1ac4. are small int
     singletons.

   - bpo-46932(56): Update bundled libexpat to 2.4.7

   - bpo-46933(57): The *note pwd: b7. module is now optional.  *note
     os.path.expanduser(): bff. returns the path when the *note pwd: b7.
     module is not available.

   - bpo-40059(58): PEP 680(59), the *note tomllib: 102. module.  Adds
     support for parsing TOML.

   - bpo-464471(60): *note asyncio.timeout(): 809. and *note
     asyncio.timeout_at(): 1ac5. 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: b2d. to wrap *note
     typing.ParamSpecArgs: 9bf. and *note dataclasses.InitVar: 1ac6.
     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: 446. 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: 117. 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(): 1ac7. and *note
     sysconfig.get_preferred_scheme(): 894. 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(): 8b5. now supports
     evaluating strings as forward references in *note PEP 585 generic
     aliases: 8b6.

   - bpo-46607(69): Add *note DeprecationWarning: 1a3. 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: ba. now excludes __future__ imports
     from the module’s data items.

   - bpo-46480(71): Add *note typing.assert_type(): 8af.  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(): 353.

   - 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: ee5.

   - bpo-40296(76): Fix supporting generic aliases in *note pydoc: ba.

   - 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: 8b. module so that it is consistent
     across all logging functions and, as advertised, similar to the
     ‘stacklevel’ argument used in *note warn(): 1707.

   - bpo-24959(81): Fix bug where *note unittest: 10c. 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: d4.

        * Raise *note InterfaceError: 882. instead of *note
          ProgrammingError: 303. for ‘SQLITE_MISUSE’ errors.

        * Don’t overwrite *note BufferError: 1ac8. with *note
          ValueError: 2ea. when conversion to BLOB fails.

        * Raise *note ProgrammingError: 303. instead of *note Warning:
          1ac9. if user tries to *note execute(): 5a9. more than one SQL
          statement.

        * Raise *note ProgrammingError: 303. instead of *note
          ValueError: 2ea. 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(): 883. and *note deserialize():
     884. support to *note sqlite3: d4.  Patch by Erlend E. Aasland.

   - bpo-33178(86): Added *note ctypes.BigEndianUnion: 1aca. and *note
     ctypes.LittleEndianUnion: 1acb. 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: be. 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<27>,  Next: Testes<28>,  Prev: Biblioteca<33>,  Up: Python 3 11 0 alpha 7

1.24.33.3 Documentação
......................

   - bpo-45099(1): Document internal *note asyncio: b. 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(): 194d. / *note zlib.adler32(): 1acd. /
     *note zlib.crc32(): 194c. 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: 1ace. about the ‘ob_base’ field and the
     macros used to access its contents.

   - bpo-42340(7): Document that in some circumstances *note
     KeyboardInterrupt: bbb. 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<28>,  Next: Construção<31>,  Prev: Documentação<27>,  Up: Python 3 11 0 alpha 7

1.24.33.4 Testes
................

   - bpo-47205(1): Skip test for *note sched_getaffinity(): 1306. and
     *note sched_setaffinity(): 130a. error case on FreeBSD.

   - bpo-46126(2): Restore ‘descriptions’ when running tests internally.

   - bpo-47104(3): Rewrite *note asyncio.to_thread(): adb. tests to use
     *note unittest.IsolatedAsyncioTestCase: 35e.

   - 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(): cf8. is
     converted from deprecated ‘asyncore’ (see PEP 594(8)) to *note
     asyncio: b.  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<31>,  Next: Windows<28>,  Prev: Testes<28>,  Up: Python 3 11 0 alpha 7

1.24.33.5 Construção
....................

   - bpo-40280(1): Add configure option *note
     -enable-wasm-dynamic-linking: 1ad1. 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: f6. 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: d4. 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<31>,  Up: Python 3 11 0 alpha 7

1.24.33.6 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 Gerenciador de instalação do Python:
     7cf. 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<25>,  Prev: Windows<28>,  Up: Python 3 11 0 alpha 7

1.24.33.7 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: 117. 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<25>,  Next: API C<29>,  Prev: macOS<21>,  Up: Python 3 11 0 alpha 7

1.24.33.8 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<29>,  Prev: Ferramentas/Demos<25>,  Up: Python 3 11 0 alpha 7

1.24.33.9 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(): 1ad6. 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(): d78.
     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(): 1ad7. and *note
     sys.set_asyncgen_hooks(): 18e1. 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(): 95e, *note
     PyFloat_Pack4(): 95f, *note PyFloat_Pack8(): 960, *note
     PyFloat_Unpack2(): 961, *note PyFloat_Unpack4(): 962. and *note
     PyFloat_Unpack8(): 963.  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.24.34 Python 3.11.0 alpha 6
-----------------------------

'Data de lançamento: 2022-03-07'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<33>.
* Biblioteca: Biblioteca<34>.
* Documentação: Documentação<28>.
* Testes: Testes<29>.
* Construção: Construção<32>.
* Windows: Windows<29>.
* IDLE: IDLE<15>.
* API C: API C<30>.


File: python.info,  Node: Núcleo e embutidos<33>,  Next: Biblioteca<34>,  Up: Python 3 11 0 alpha 6

1.24.34.1 Núcleo e embutidos
............................

   - bpo-46940(1): Avoid overriding *note AttributeError: 5e4. 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: 363.

   - bpo-46841(5): Use an oparg to simplify the construction of helpful
     error messages in *note GET_AWAITABLE: 1ada.

   - 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: b57. followed by *note EXTENDED_ARG: 1a4e.

   - 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: 6f9,
     ‘LOAD_METHOD’, and *note STORE_ATTR: 1adb.

   - bpo-46841(10): Use inline cache for ‘BINARY_SUBSCR’.

   - bpo-46841(11): Use inline caching for *note COMPARE_OP: b57.

   - 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: 1adc.

   - 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: 1998.

   - 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: 363. caches inline using a
     new *note CACHE: 8fd. instruction.

   - bpo-45107(22): Specialize ‘LOAD_METHOD’ for instances with a dict.

   - bpo-44337(23): Reduce the memory usage of specialized *note
     LOAD_ATTR: 6f9. and *note STORE_ATTR: 1adb. instructions.

   - bpo-46729(24): Add number of sub-exceptions to
     ‘BaseException.__str__()’.

   - bpo-45885(25): Don’t un-adapt *note COMPARE_OP: b57. when
     collecting specialization stats.

   - bpo-46329(26): Fix specialization stats gathering for ‘PRECALL’
     instructions.

   - bpo-46794(27): Bump up the libexpat version into 2.4.6

   - bpo-46823(28): Implement a specialized combined opcode
     ‘LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE’.  Patch by Dennis Sweeney.

   - bpo-46820(29): 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(30): Move ‘KW_NAMES’ before ‘PRECALL’ instruction in call
     sequence.  Change ‘operand’ of ‘CALL’ to match ‘PRECALL’ for easier
     specialization.

   - bpo-46808(31): Remove the ‘NEXT_BLOCK’ macro from compile.c, and
     make the compiler automatically generate implicit blocks when they
     are needed.

   - bpo-46329(32): 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(33): 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(34): 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(35): Make sure that all backwards jumps use the
     ‘JUMP_ABSOLUTE’ instruction, rather than ‘JUMP_FORWARD’ with an
     argument of ‘(2**32)+offset’.

   - bpo-46732(36): Correct the docstring for the *note __bool__():
     14d1. method.  Patch by Jelle Zijlstra.

   - bpo-46072(37): Add more detailed specialization failure statistics
     for *note BINARY_OP: 363.

   - bpo-46707(38): Avoid potential exponential backtracking when
     producing some syntax errors involving lots of brackets.  Patch by
     Pablo Galindo.

   - bpo-46323(39): *note ctypes: 2e. now allocates memory on the stack
     instead of on the heap to pass arguments while calling a Python
     callback function.  Patch by Donghee Na.

   - bpo-45923(40): Add a quickened form of *note RESUME: 5b2. that
     skips quickening checks.

   - bpo-46702(41): Specialize *note UNPACK_SEQUENCE: 1adc. for *note
     tuple: 608. and *note list: 24c. unpackings.

   - bpo-46072(42): Opcode pair stats are now gathered with
     ‘--enable-pystats’.  Defining ‘DYNAMIC_EXECUTION_PROFILE’ or
     ‘DXPAIRS’ no longer has any effect.

   - bpo-46675(43): Allow more than 16 items in a split dict before it
     is combined.  The limit is now 254.

   - bpo-40479(44): Add a missing call to ‘va_end()’ in
     ‘Modules/_hashopenssl.c’.

   - bpo-46323(45): Use *note PyObject_Vectorcall(): 773. while calling
     ctypes callback function.  Patch by Donghee Na.

   - bpo-46615(46): 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(47): The bytecode compiler now attempts to apply runtime
     stack manipulations at compile-time (whenever it is feasible to do
     so).

   - bpo-30496(48): Fixed a minor portability issue in the
     implementation of *note PyLong_FromLong(): 1add, and added a fast
     path for single-digit integers to *note PyLong_FromLongLong():
     1ade.

   ---------- 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

   (27) https://bugs.python.org/issue?@action=redirect&bpo=46794

   (28) https://bugs.python.org/issue?@action=redirect&bpo=46823

   (29) https://bugs.python.org/issue?@action=redirect&bpo=46820

   (30) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (31) https://bugs.python.org/issue?@action=redirect&bpo=46808

   (32) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (33) https://bugs.python.org/issue?@action=redirect&bpo=46762

   (34) https://bugs.python.org/issue?@action=redirect&bpo=46730

   (35) https://bugs.python.org/issue?@action=redirect&bpo=46724

   (36) https://bugs.python.org/issue?@action=redirect&bpo=46732

   (37) https://bugs.python.org/issue?@action=redirect&bpo=46072

   (38) https://bugs.python.org/issue?@action=redirect&bpo=46707

   (39) https://bugs.python.org/issue?@action=redirect&bpo=46323

   (40) https://bugs.python.org/issue?@action=redirect&bpo=45923

   (41) https://bugs.python.org/issue?@action=redirect&bpo=46702

   (42) https://bugs.python.org/issue?@action=redirect&bpo=46072

   (43) https://bugs.python.org/issue?@action=redirect&bpo=46675

   (44) https://bugs.python.org/issue?@action=redirect&bpo=40479

   (45) https://bugs.python.org/issue?@action=redirect&bpo=46323

   (46) https://bugs.python.org/issue?@action=redirect&bpo=46615

   (47) https://bugs.python.org/issue?@action=redirect&bpo=45828

   (48) https://bugs.python.org/issue?@action=redirect&bpo=30496


File: python.info,  Node: Biblioteca<34>,  Next: Documentação<28>,  Prev: Núcleo e embutidos<33>,  Up: Python 3 11 0 alpha 6

1.24.34.2 Biblioteca
....................

   - bpo-25707(1): Fixed a file leak in *note
     xml.etree.ElementTree.iterparse(): 573. when the iterator is not
     exhausted.  Patch by Jacob Walls.

   - bpo-46877(2): Export *note unittest.doModuleCleanups(): 1ae0. in
     *note unittest: 10c.  Patch by Kumar Aditya.

   - bpo-46848(3): For performance, use the optimized string-searching
     implementations from *note find(): 1ae1. and *note rfind(): 1ae2.
     for ‘find()’ and ‘rfind()’.

   - bpo-46736(4): *note SimpleHTTPRequestHandler: d2c. now uses HTML5
     grammar.  Patch by Donghee Na.

   - bpo-44886(5): Inherit asyncio proactor datagram transport from
     *note asyncio.DatagramTransport: 1a55.

   - bpo-46827(6): Support UDP sockets in *note
     asyncio.loop.sock_connect(): fbc. 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: 198. if *note ssl.SSLSocket:
     add. 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(): 353. can now work with
     VirtualBox shared folders when running from the guest
     operating-system.

   - bpo-45390(12): Propagate *note asyncio.CancelledError: 4ce. message
     from inner task to outer awaiter.

   - bpo-46756(13): Fix a bug in *note
     urllib.request.HTTPPasswordMgr.find_user_password(): 1ae3. and
     *note
     urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated():
     1ae4. 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(): 1ae5. and *note
     random.normalvariate(): 1ae6. 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: 3c. behavior on negative jump
     offsets.

   - bpo-46333(17): The ‘__repr__()’ method of *note typing.ForwardRef:
     1ae7. now includes the ‘module’ parameter of *note
     typing.ForwardRef: 1ae7. when it is set.

   - bpo-46643(18): In *note typing.get_type_hints(): 8b5, support
     evaluating stringified ‘ParamSpecArgs’ and ‘ParamSpecKwargs’
     annotations.  Patch by Gregory Beauregard.

   - bpo-45863(19): When the *note tarfile: e4. 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: 330. definitions.  It had confusing semantics
     when specifying totality, and was largely unused.  Patch by
     Jingchen Ye.

   - bpo-46676(21): Make *note typing.ParamSpec: 481. 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(): 808. when
     initial type check fails.

   - bpo-46659(24): The *note calendar.LocaleTextCalendar: 940. and
     *note calendar.LocaleHTMLCalendar: 941. classes now use *note
     locale.getlocale(): 325, instead of using *note
     locale.getdefaultlocale(): 324, if no locale is specified.  Patch
     by Victor Stinner.

   - bpo-46659(25): The *note locale.getdefaultlocale(): 324. function
     is deprecated and will be removed in Python 3.13.  Use *note
     locale.setlocale(): 326, *note locale.getpreferredencoding(False):
     751. and *note locale.getlocale(): 325. functions instead.  Patch
     by Victor Stinner.

   - bpo-46655(26): In *note typing.get_type_hints(): 8b5, 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: 12b. module.  Now, instantiating an
     *note xml.etree.ElementTree.XMLParser: c3e. with a ‘target=None’
     keyword provides a default *note xml.etree.ElementTree.TreeBuilder:
     c3f. target as the Python implementation does.

   - bpo-46626(28): Expose Linux’s ‘IP_BIND_ADDRESS_NO_PORT’ option in
     *note socket: d1.

   - bpo-46521(29): Fix a bug in the *note codeop: 1d. module that was
     incorrectly identifying invalid code involving string quotes as
     valid code.

   - bpo-46571(30): Improve *note typing.no_type_check(): 8b8.

     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: 265. object as a context manager.

   - bpo-46534(33): Implement PEP 673(34) *note typing.Self: 7d8.  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: 8ac. and *note
     typing.assert_never(): 8ab.  Patch by Jelle Zijlstra.

   - bpo-46333(37): The ‘__eq__()’ and ‘__hash__()’ methods of *note
     typing.ForwardRef: 1ae7. now honor the ‘module’ parameter of *note
     typing.ForwardRef: 1ae7.  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: d5. module now handles certificates
     with bit strings in DN correctly.

   - bpo-46195(40): *note typing.get_type_hints(): 8b5. 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: 834. to ‘re.__all__’ and
     documented it.  Add ‘NOFLAG’ to indicate no flags being set.

   - bpo-45898(42): *note ctypes: 2e. 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(): 1ae8. method
     when using 'fileobj' argument: position in the 'fileobj' was
     advanced forward which made it unreadable with *note
     tarfile.TarFile.open(): 1ae9.

   - bpo-44011(45): Reimplement SSL/TLS support in asyncio, borrow the
     implementation from uvloop library.

   - bpo-41086(46): Make the *note configparser.ConfigParser: 4d8.
     constructor raise *note TypeError: 198. if the ‘interpolation’
     parameter is not of type ‘configparser.Interpolation’

   - bpo-29418(47): Implement *note inspect.ismethodwrapper(): 84f. and
     fix *note inspect.isroutine(): 1aea. 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<28>,  Next: Testes<29>,  Prev: Biblioteca<34>,  Up: Python 3 11 0 alpha 6

1.24.34.3 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<29>,  Next: Construção<32>,  Prev: Documentação<28>,  Up: Python 3 11 0 alpha 6

1.24.34.4 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<32>,  Next: Windows<29>,  Prev: Testes<29>,  Up: Python 3 11 0 alpha 6

1.24.34.5 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: 96e.  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<15>,  Prev: Construção<32>,  Up: Python 3 11 0 alpha 6

1.24.34.6 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<15>,  Next: API C<30>,  Prev: Windows<29>,  Up: Python 3 11 0 alpha 6

1.24.34.7 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<30>,  Prev: IDLE<15>,  Up: Python 3 11 0 alpha 6

1.24.34.8 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: 981. 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(): 629,
     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.24.35 Python 3.11.0 alpha 5
-----------------------------

'Data de lançamento: 2022-02-03'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<34>.
* Biblioteca: Biblioteca<35>.
* Documentação: Documentação<29>.
* Testes: Testes<30>.
* Construção: Construção<33>.
* Windows: Windows<30>.
* macOS: macOS<22>.
* IDLE: IDLE<16>.
* API C: API C<31>.


File: python.info,  Node: Núcleo e embutidos<34>,  Next: Biblioteca<35>,  Up: Python 3 11 0 alpha 5

1.24.35.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: 1a6. 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(): 19b. to ‘__trunc__()’
     is now deprecated.  Calling ‘int(a)’ when ‘type(a)’ implements
     ‘__trunc__()’ but not ‘__int__()’ or ‘__index__()’ now raises a
     *note DeprecationWarning: 1a3.

   - bpo-46458(5): Reorder code emitted by the compiler for a *note try:
     8ed.-*note except: 1ab. block so that the *note else: 17c. block’s
     code immediately follows the *note try: 8ed. 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(): 166f. 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: 90c. and *note SWAP: 90d.
     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(): 1af3. 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’.

   - bpo-46383(20): Fix invalid signature of ‘_zoneinfo’’s ‘module_free’
     function to resolve a crash on wasm32-emscripten platform.

   - bpo-46361(21): Ensure that “small” integers created by *note
     int.from_bytes(): 1af4. and *note decimal.Decimal: 1fd. are
     properly cached.

   - bpo-46161(22): Fix the class building error when the arguments are
     constants and CALL_FUNCTION_EX is used.

   - bpo-46028(23): 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(24): Correctly calculate indentation levels for lines
     with whitespace character that are ended by line continuation
     characters.  Patch by Pablo Galindo

   - bpo-30512(25): Add CAN Socket support for NetBSD.

   - bpo-46045(26): Do not use POSIX semaphores on NetBSD

   - bpo-44024(27): Improve the *note TypeError: 198. message for
     non-string second arguments passed to the built-in functions *note
     getattr(): dbe. and *note hasattr(): 6ee.  Patch by Géry Ogam.

   ---------- 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

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46383

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46361

   (22) https://bugs.python.org/issue?@action=redirect&bpo=46161

   (23) https://bugs.python.org/issue?@action=redirect&bpo=46028

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46091

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30512

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46045

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44024


File: python.info,  Node: Biblioteca<35>,  Next: Documentação<29>,  Prev: Núcleo e embutidos<34>,  Up: Python 3 11 0 alpha 5

1.24.35.2 Biblioteca
....................

   - bpo-46624(1): Restore support for non-integer arguments of *note
     random.randrange(): a61. and *note random.randint(): 142b.

   - 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(): 8b5, support
     evaluating bare stringified ‘ClassVar’ annotations.  Patch by
     Gregory Beauregard.

   - bpo-46544(5): Don’t leak ‘x’ & ‘uspace’ intermediate vars in *note
     textwrap.TextWrapper: 11c3.

   - 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: 10c. 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(): 8b5, support
     evaluating stringified ‘ClassVar’ and ‘Final’ annotations inside
     ‘Annotated’.  Patch by Gregory Beauregard.

   - bpo-46510(10): Add missing test for *note types.TracebackType: cdd.
     and *note types.FrameType: 1af6.  Calculate them directly from the
     caught exception without calling *note sys.exc_info(): 88f.

   - bpo-46491(11): Allow *note typing.Annotated: b2d. to wrap *note
     typing.Final: 567. and *note typing.ClassVar: 566.  Patch by
     Gregory Beauregard.

   - bpo-46483(12): Remove *note __class_getitem__(): 938. from *note
     pathlib.PurePath: 6c2. as this class was not supposed to be
     generic.

   - bpo-46436(13): Fix command-line option ‘-d’/‘--directory’ in module
     *note http.server: 76. 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: 198.
     with a relevant error message on invalid arg.  Previously it
     allowed a cryptic *note AttributeError: 5e4. 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: b. generic classes now return *note
     types.GenericAlias: 9e2. 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(): 13ac.

   - bpo-46422(20): Use ‘dis.Positions’ in ‘dis.Instruction’ instead of
     a regular ‘tuple’.

   - bpo-46434(21): *note pdb: aa. now gracefully handles ‘help’ when
     *note __doc__: 1af7. 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(): 8ae.  Patch by Jelle
     Zijlstra.

   - bpo-40280(24): *note subprocess: dc. 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(): 26d. by
     removing an unnecessary check for special entries.

   - bpo-29688(27): Document *note pathlib.Path.absolute(): 1963. (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(): bee. 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: 837. type subclassing an existing ‘Enum’ with
     ‘_member_names_’ using ‘enum.Enum.__call__()’.

   - bpo-43118(31): Fix a bug in *note inspect.signature(): 22e. 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(): e65. did not close the coroutine.  Patch
     by Kumar Aditya.

   - bpo-21987(33): Fix an issue with *note tarfile.TarFile.getmember():
     1af8. getting a directory name with a trailing slash.

   - bpo-46124(34): Update *note zoneinfo: 13a. to rely on
     importlib.resources traversable API.

   - bpo-46103(35): Now *note inspect.getmembers(): 1af9. 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: 1afa. argument’s default is
     ‘argparse.SUPPRESS’ and it has ‘help’ specified.  Patch by Felix
     Fontein.

   - bpo-44791(37): Fix substitution of *note ParamSpec: 481. in *note
     Concatenate: 9bd. 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<29>,  Next: Testes<30>,  Prev: Biblioteca<35>,  Up: Python 3 11 0 alpha 5

1.24.35.3 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<30>,  Next: Construção<33>,  Prev: Documentação<29>,  Up: Python 3 11 0 alpha 5

1.24.35.4 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: f5c.: 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(): 4af.

   - bpo-40280(10): Add ‘test.support.requires_subprocess()’ decorator
     to mark tests which require working *note subprocess: dc. 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<33>,  Next: Windows<30>,  Prev: Testes<30>,  Up: Python 3 11 0 alpha 5

1.24.35.5 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<33>,  Up: Python 3 11 0 alpha 5

1.24.35.6 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<16>,  Prev: Windows<30>,  Up: Python 3 11 0 alpha 5

1.24.35.7 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<16>,  Next: API C<31>,  Prev: macOS<22>,  Up: Python 3 11 0 alpha 5

1.24.35.8 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<31>,  Prev: IDLE<16>,  Up: Python 3 11 0 alpha 5

1.24.35.9 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: 951. 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.24.36 Python 3.11.0 alpha 4
-----------------------------

'Data de lançamento: 2022-01-13'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<35>.
* Biblioteca: Biblioteca<36>.
* Documentação: Documentação<30>.
* Testes: Testes<31>.
* Construção: Construção<34>.
* Windows: Windows<31>.
* macOS: macOS<23>.
* API C: API C<32>.


File: python.info,  Node: Núcleo e embutidos<35>,  Next: Biblioteca<36>,  Up: Python 3 11 0 alpha 4

1.24.36.1 Núcleo e embutidos
............................

   - bpo-46070(1): *note Py_EndInterpreter(): 17ae. 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(): 16f3. 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.

   - bpo-46208(12): Fix the regression of os.path.normpath(“A/../../B”)
     not returning expected “../B” but “B”.

   - bpo-46240(13): 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(14): Remove the ‘GEN_START’ opcode.

   - bpo-46235(15): Certain sequence multiplication operations like ‘[0]
     * 1_000’ are now faster due to reference-counting optimizations.
     Patch by Dennis Sweeney.

   - bpo-46221(16): ‘PREP_RERAISE_STAR’ no longer pushes ‘lasti’ to the
     stack.

   - bpo-46202(17): Remove ‘POP_EXCEPT_AND_RERAISE’ and replace it by an
     equivalent sequence of other opcodes.

   - bpo-46085(18): Fix iterator cache mechanism of ‘OrderedDict’.

   - bpo-46055(19): Speed up shifting operation involving integers less
     than ‘PyLong_BASE’.  Patch by Xinhang Xu.

   - bpo-46110(20): Add a maximum recursion check to the PEG parser to
     avoid stack overflow.  Patch by Pablo Galindo

   - bpo-46107(21): Fix bug where ‘ExceptionGroup.split()’ and
     ‘ExceptionGroup.subgroup()’ did not copy the exception group’s
     ‘__note__’ field to the parts.

   - bpo-45711(22): 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(23): 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(24): Remove the ‘YIELD_FROM’ instruction and replace it
     with the ‘SEND’ instruction which performs the same operation, but
     without the loop.

   - bpo-45635(25): The code called from ‘_PyErr_Display()’ was
     refactored to improve error handling.  It now exits immediately
     upon an unrecoverable error.

   - bpo-46054(26): Fix parser error when parsing non-utf8 characters in
     source files.  Patch by Pablo Galindo.

   - bpo-46042(27): Improve the location of the caret in *note
     SyntaxError: 18e. exceptions emitted by the symbol table.  Patch by
     Pablo Galindo.

   - bpo-46049(28): Ensure ‘._pth’ files work as intended on platforms
     other than Windows.

   - bpo-46048(29): Fixes parsing of ‘._pth’ files on startup so that
     single-character paths are correctly read.

   - bpo-37971(30): Fix a bug where the line numbers given in a
     traceback when a decorator application raised an exception were
     wrong.

   - bpo-46031(31): Add *note POP_JUMP_IF_NOT_NONE: 1a9c. and *note
     POP_JUMP_IF_NONE: 1a9b. opcodes to speed up conditional jumps.

   - bpo-45654(32): Deepfreeze *note runpy: c3, patch by Kumar Aditya.

   - bpo-46025(33): Fix a crash in the *note atexit: d. module involving
     functions that unregister themselves before raising exceptions.
     Patch by Pablo Galindo.

   - bpo-46000(34): Improve compatibility of the *note curses: 2f.
     module with NetBSD curses.

   - bpo-44525(35): 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(36): Fix bug where the built-in *note compile(): 4ab.
     function did not always raise a *note SyntaxError: 18e. when passed
     multiple statements in ‘single’ mode.  Patch by Weipeng Hong.

   - bpo-45953(37): 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(38): Complete the PEP 654(39) implementation: add
     ‘except*’.

   - bpo-43413(40): Revert changes in ‘set.__init__’.  Subclass of *note
     set: 184. needs to define a ‘__init__()’ method if it defines a
     ‘__new__()’ method with additional keyword parameters.

   - bpo-43931(41): Added the *note Py_Version: 37e. constant which
     bears the same value as *note PY_VERSION_HEX: 37f.  Patch by
     Gabriele N. Tornetta.

   ---------- 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

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46208

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46240

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46009

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46235

   (16) https://bugs.python.org/issue?@action=redirect&bpo=46221

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46202

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46085

   (19) https://bugs.python.org/issue?@action=redirect&bpo=46055

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46110

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46107

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46039

   (25) https://bugs.python.org/issue?@action=redirect&bpo=45635

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46054

   (27) https://bugs.python.org/issue?@action=redirect&bpo=46042

   (28) https://bugs.python.org/issue?@action=redirect&bpo=46049

   (29) https://bugs.python.org/issue?@action=redirect&bpo=46048

   (30) https://bugs.python.org/issue?@action=redirect&bpo=37971

   (31) https://bugs.python.org/issue?@action=redirect&bpo=46031

   (32) https://bugs.python.org/issue?@action=redirect&bpo=45654

   (33) https://bugs.python.org/issue?@action=redirect&bpo=46025

   (34) https://bugs.python.org/issue?@action=redirect&bpo=46000

   (35) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (36) https://bugs.python.org/issue?@action=redirect&bpo=42918

   (37) https://bugs.python.org/issue?@action=redirect&bpo=45953

   (38) https://bugs.python.org/issue?@action=redirect&bpo=45292

   (39) https://peps.python.org/pep-0654/

   (40) https://bugs.python.org/issue?@action=redirect&bpo=43413

   (41) https://bugs.python.org/issue?@action=redirect&bpo=43931


File: python.info,  Node: Biblioteca<36>,  Next: Documentação<30>,  Prev: Núcleo e embutidos<35>,  Up: Python 3 11 0 alpha 4

1.24.36.2 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(): 890. method which
     returns the active exception instance.

   - bpo-46307(3): Add *note string.Template.is_valid(): 88b. and *note
     string.Template.get_identifiers(): 88a. methods.

   - bpo-46306(4): Assume that *note types.CodeType: 32d. always has
     ‘types.CodeType.co_firstlineno’ in *note doctest: 3e.

   - bpo-40479(5): Fix *note hashlib: 6c. 'usedforsecurity' option to
     work correctly with OpenSSL 3.0.0 in FIPS mode.

   - bpo-46070(6): Fix possible segfault when importing the *note
     asyncio: b. module from different sub-interpreters in parallel.
     Patch by Erlend E. Aasland.

   - bpo-46244(7): Removed ‘__slots__’ from *note typing.ParamSpec: 481.
     and *note typing.TypeVar: 480.  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__(): 1b05.

   - bpo-46266(10): Improve day constants in *note calendar: 15.

     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: 117. 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(): 8d4.

   - 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(): 599.
     and *note iglob(): 9fe. to match hidden files and directories when
     using special characters like ‘*’, ‘**’, ‘?’ and ‘[]’.

   - bpo-20369(23): *note concurrent.futures.wait(): 1b06. 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: 749.

   - 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: 7. raises *note ValueError: 2ea.
     with clear message when trying to render usage for an empty
     mutually exclusive group.  Previously it raised a cryptic *note
     IndexError: 1723.

   - bpo-45615(29): Functions in the *note traceback: 104. module raise
     *note TypeError: 198. rather than *note AttributeError: 5e4. when
     an exception argument is not of type *note BaseException: 7cc.

   - bpo-16594(30): Add allow allow_reuse_port flag in socketserver.

   - bpo-27718(31): Fix help for the *note signal: cb. module.  Some
     functions (e.g.  ‘signal()’ and ‘getsignal()’) were omitted.

   - bpo-46032(32): The ‘registry()’ method of *note
     functools.singledispatch(): 840. 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: 82, patch by Kumar
     Aditya.

   - bpo-46018(35): Ensure that *note math.expm1(): 13e8. does not raise
     on underflow.

   - bpo-46016(36): Adding ‘F_DUP2FD’ and ‘F_DUP2FD_CLOEXEC’ constants
     from FreeBSD into the *note fcntl: 5d. module.

   - bpo-45755(37): *note typing: 10a. 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: 1b07. objects, patch by Kumar Aditya.

   - bpo-45643(42): Added *note signal.SIGSTKFLT: 1b08. on platforms
     where this signal is defined.

   - bpo-44092(43): Fetch across rollback no longer raises *note
     InterfaceError: 882.  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: a2c, 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<30>,  Next: Testes<31>,  Prev: Biblioteca<36>,  Up: Python 3 11 0 alpha 4

1.24.36.3 Documentação
......................

   - bpo-46196(1): Document method *note cmd.Cmd.columnize(): 1b0a.

   - bpo-46120(2): State that ‘|’ is preferred for readability over
     ‘Union’ in the *note typing: 10a. 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():
     1b0b. 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<31>,  Next: Construção<34>,  Prev: Documentação<30>,  Up: Python 3 11 0 alpha 4

1.24.36.4 Testes
................

   - bpo-46296(1): Add a test case for *note enum: 5a. 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: 35e. usage.

   - bpo-23819(7): Fixed *note asyncio: b. 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<34>,  Next: Windows<31>,  Prev: Testes<31>,  Up: Python 3 11 0 alpha 4

1.24.36.5 Construção
....................

   - bpo-44133(1): When Python is configured with *note
     -without-static-libpython: a84, 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:
     a59, 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(): 118a.

   - 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<34>,  Up: Python 3 11 0 alpha 4

1.24.36.6 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<32>,  Prev: Windows<31>,  Up: Python 3 11 0 alpha 4

1.24.36.7 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<32>,  Prev: macOS<23>,  Up: Python 3 11 0 alpha 4

1.24.36.8 API C
...............

   - bpo-46236(1): Fix a bug in *note PyFunction_GetAnnotations(): 1a63.
     that caused it to return a ‘tuple’ instead of a ‘dict’.

   - bpo-46140(2): *note PyBuffer_GetPointer(): 952, *note
     PyBuffer_FromContiguous(): 955, *note PyBuffer_ToContiguous(): 954.
     and *note PyMemoryView_FromBuffer(): 95a. now take buffer info by
     ‘const Py_buffer *’ instead of ‘Py_buffer *’, as they do not need
     mutability.  *note PyBuffer_FromContiguous(): 955. also now takes
     the source buffer as ‘const void *’, and similarly *note
     PyBuffer_GetPointer(): 952. takes the strides as ‘const Py_ssize_t
     *’.

   - bpo-45855(3): Document that the 'no_block' argument to *note
     PyCapsule_Import(): 1b11. is a no-op now.

   - bpo-45855(4): Replaced deprecated usage of *note
     PyImport_ImportModuleNoBlock(): 3d8. with *note
     PyImport_ImportModule(): 3d9. 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.24.37 Python 3.11.0 alpha 3
-----------------------------

'Data de lançamento: 2021-12-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<36>.
* Biblioteca: Biblioteca<37>.
* Documentação: Documentação<31>.
* Testes: Testes<32>.
* Construção: Construção<35>.
* Windows: Windows<32>.
* macOS: macOS<24>.
* API C: API C<33>.


File: python.info,  Node: Núcleo e embutidos<36>,  Next: Biblioteca<37>,  Up: Python 3 11 0 alpha 3

1.24.37.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: 18e. 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: 7cc.  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: 1b14. 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(): 88f. and
     *note PyErr_GetExcInfo(): 96b. if the exception instance is
     modified while the exception is handled, as well as *note
     PyErr_SetExcInfo(): 96a, 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.

   - bpo-45614(13): Fix *note traceback: 104. display for exceptions
     with invalid module name.

   - bpo-45813(14): Fix crash when calling coro.cr_frame.clear() after
     coroutine has been freed.

   - bpo-45811(15): Improve the tokenizer errors when encountering
     invisible control characters in the parser.  Patch by Pablo Galindo

   - bpo-45848(16): Allow the parser to obtain error lines directly from
     encoded files.  Patch by Pablo Galindo

   - bpo-45709(17): Restore behavior from 3.10 when tracing an exception
     raised within a with statement.

   - bpo-44525(18): Adds new *note COPY_FREE_VARS: 902. opcode, to make
     copying of free variables from function to frame explicit.  Helps
     optimization of calls to Python function.

   - bpo-45829(19): Specialize ‘BINARY_SUBSCR’ for classes with a
     ‘__getitem__’ method implemented in Python

   - bpo-45826(20): Fixed a crash when calling ‘.with_traceback(None)’
     on ‘NameError’.  This occurs internally in
     ‘unittest.TestCase.assertRaises()’.

   - bpo-45822(21): Fixed a bug in the parser that was causing it to not
     respect PEP 263(22) coding cookies when no flags are provided.
     Patch by Pablo Galindo

   - bpo-45820(23): Fix a segfault when the parser fails without reading
     any input.  Patch by Pablo Galindo

   - bpo-45636(24): Simplify the implementation of *note BINARY_OP: 363.
     by indexing into an array of function pointers (rather than
     switching on the oparg).

   - bpo-42540(25): Fix crash when *note os.fork(): 4af. is called with
     an active non-default memory allocator.

   - bpo-45738(26): Fix computation of error location for invalid
     continuation characters in the parser.  Patch by Pablo Galindo.

   - bpo-45636(27): Remove an existing “fast path” for old-style string
     formatting, since it no longer appears to have any measurable
     impact.

   - bpo-45753(28): Make recursion checks a bit more efficient by
     tracking amount of calls left before overflow.

   - bpo-45773(29): Fix a compiler hang when attempting to optimize
     certain jump patterns.

   - bpo-45764(30): 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(31): Specialized the ‘STORE_SUBSCR’ opcode using the PEP
     659 machinery.

   - bpo-45636(32): Replace all numeric ‘BINARY_*’ and ‘INPLACE_*’
     instructions with a single *note BINARY_OP: 363. implementation.

   - bpo-45582(33): 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: df. and *note sysconfig: e1.

   - bpo-45450(34): Improve the syntax error message for parenthesized
     arguments.  Patch by Pablo Galindo.

   ---------- 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

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45614

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45813

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45811

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45848

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45709

   (18) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45829

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45826

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45822

   (22) https://peps.python.org/pep-0263/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=45820

   (24) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (25) https://bugs.python.org/issue?@action=redirect&bpo=42540

   (26) https://bugs.python.org/issue?@action=redirect&bpo=45738

   (27) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (28) https://bugs.python.org/issue?@action=redirect&bpo=45753

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45773

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45764

   (31) https://bugs.python.org/issue?@action=redirect&bpo=45609

   (32) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (33) https://bugs.python.org/issue?@action=redirect&bpo=45582

   (34) https://bugs.python.org/issue?@action=redirect&bpo=45450


File: python.info,  Node: Biblioteca<37>,  Next: Documentação<31>,  Prev: Núcleo e embutidos<36>,  Up: Python 3 11 0 alpha 3

1.24.37.2 Biblioteca
....................

   - bpo-27946(1): Fix possible crash when getting an attribute of *note
     xml.etree.ElementTree.Element: 360. simultaneously with replacing
     the ‘attrib’ dict.

   - bpo-45711(2): Make *note asyncio: b. normalize exceptions as soon
     as they are captured with *note PyErr_Fetch(): 425, and before they
     are stored as an exc_info triplet.  This brings *note asyncio: b.
     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: 749. and *note
     unittest.TextTestRunner: 19ee. flush now the output stream more
     often.

   - bpo-45917(5): Added *note math.exp2(): 865.:, 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: 5c. 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: d4. 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(): a28.

   - bpo-45765(17): In importlib.metadata, fix distribution discovery
     for an empty path.

   - bpo-45757(18): Fix bug where *note dis: 3c. produced an incorrect
     oparg when *note EXTENDED_ARG: 1a4e. 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: 3e1. location while the program is running, calling
     the *note importlib.invalidate_caches(): dfe. 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(): d89. and *note
     types.new_class(): 135d. for *note types.GenericAlias: 9e2.
     instance as a base.

   - bpo-45663(23): Fix *note dataclasses.is_dataclass(): 1b16. for
     dataclasses which are subclasses of *note types.GenericAlias: 9e2.

   - bpo-45662(24): Fix the repr of *note dataclasses.InitVar: 1ac6.
     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(): 8a1. now uses a
     waitable timer which supports high-resolution timers.  Patch by
     Donghee Na and Eryk Sun.

   - bpo-37295(27): Optimize *note math.comb(): 8d4. and *note
     math.perm(): 8d5.

   - bpo-45514(28): Deprecated legacy functions in *note
     importlib.resources: 7f.

   - bpo-45507(29): Add tests for truncated/missing trailers in
     gzip.decompress implementation.

   - bpo-45359(30): Implement PEP 585(31) for *note
     graphlib.TopologicalSorter: ad4.

   - bpo-44733(32): Add ‘max_tasks_per_child’ to *note
     concurrent.futures.ProcessPoolExecutor: 1d6.  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(): 84e. , 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<31>,  Next: Testes<32>,  Prev: Biblioteca<37>,  Up: Python 3 11 0 alpha 3

1.24.37.3 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: f38. 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(): 19da. and *note asdict():
     19d1. 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<32>,  Next: Construção<35>,  Prev: Documentação<31>,  Up: Python 3 11 0 alpha 3

1.24.37.4 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(): bd8. 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<35>,  Next: Windows<32>,  Prev: Testes<32>,  Up: Python 3 11 0 alpha 3

1.24.37.5 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: cb. 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: 3a. 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: d4. are
     now detected by ‘configure’ and ‘pkg-config’.  Patch by Erlend E.
     Aasland.

   - bpo-45763(25): The build dependencies for *note zlib: 139, *note
     bz2: 14, and *note lzma: 8e. 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<35>,  Up: Python 3 11 0 alpha 3

1.24.37.6 Windows
.................

   - bpo-46105(1): Fixed calculation of *note sys.path: 3e1. 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<33>,  Prev: Windows<32>,  Up: Python 3 11 0 alpha 3

1.24.37.7 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<33>,  Prev: macOS<24>,  Up: Python 3 11 0 alpha 3

1.24.37.8 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.24.38 Python 3.11.0 alpha 2
-----------------------------

'Data de lançamento: 2021-11-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<37>.
* Biblioteca: Biblioteca<38>.
* Documentação: Documentação<32>.
* Testes: Testes<33>.
* Construção: Construção<36>.
* Windows: Windows<33>.
* macOS: macOS<25>.
* IDLE: IDLE<17>.
* API C: API C<34>.


File: python.info,  Node: Núcleo e embutidos<37>,  Next: Biblioteca<38>,  Up: Python 3 11 0 alpha 2

1.24.38.1 Núcleo e embutidos
............................

   - bpo-45716(1): Improve the *note SyntaxError: 18e. 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: a38. now contains the
     macOS-specific module ‘_scproxy’.

   - bpo-45379(3): Clarify *note ImportError: 64f. 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: 1b1f. 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: 16f. 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:
     4cc. and *note BaseExceptionGroup: 55f.  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<38>,  Next: Documentação<32>,  Prev: Núcleo e embutidos<37>,  Up: Python 3 11 0 alpha 2

1.24.38.2 Biblioteca
....................

   - bpo-45679(1): Fix caching of multi-value *note typing.Literal: a4b.
     ‘Literal[True, 2]’ is no longer equal to ‘Literal[1, 2]’.

   - bpo-42064(2): Convert *note sqlite3: d4. 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: d4. now sets *note
     sqlite3.threadsafety: 881. 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(): 59f. now correctly raises
     *note MemoryError: 1809. if the underlying SQLite API signals
     memory error.  Patch by Erlend E. Aasland.

   - bpo-45557(7): *note pprint.pprint(): a1f. now handles
     'underscore_numbers' correctly.  Previously it was always setting
     it to ‘False’.

   - bpo-44019(8): Add *note operator.call(): 1b21. to
     ‘operator.__all__’.  Patch by Kreusada.

   - bpo-42174(9): *note shutil.get_terminal_size(): 12ff. 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: 114c. is now public, and
     implements the *note importlib.abc.InspectLoader: 114a. interface.
     ‘_NamespaceLoader’ is kept for backward compatibility.

   - bpo-45515(11): Add references to *note zoneinfo: 13a. in the *note
     datetime: 34. documentation, mostly replacing outdated references
     to ‘dateutil.tz’.  Change by Paul Ganssle.

   - bpo-45475(12): Reverted optimization of iterating *note
     gzip.GzipFile: 650, *note bz2.BZ2File: a5c, and *note
     lzma.LZMAFile: 1202. (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: 1ae7. 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(): 1b22.
     crashing with *note UnboundLocalError: 1724. 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():
     1b23. 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: c5b. with
     explicit *note asyncio.Lock: c5a. 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: 1795.  Patch by Vajrasky Kok and
     Donghee Na.

   - bpo-44904(24): Fix bug in the *note doctest: 3e. 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(): 1a89. 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: 2d.

   - 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: 134. 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: 1795.
     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: d29. to work
     properly in OSs that don’t support the ‘TCP_NODELAY’ socket option.

   - bpo-45243(34): Add *note setlimit(): 87f. and *note getlimit():
     880. to *note sqlite3.Connection: 547. for setting and getting
     SQLite limits by connection basis.  Patch by Erlend E. Aasland.

   - bpo-45320(35): Removed from the *note inspect: 82. module:

        * 
          the ‘getargspec’ function, deprecated since Python 3.0;

               use *note inspect.signature(): 22e. or *note
               inspect.getfullargspec(): 936. instead.

        * the ‘formatargspec’ function, deprecated since Python 3.5; use
          the *note inspect.signature(): 22e. 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(): 937. 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: e6. 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(): 815. context
     manager to change the current working directory and then restore it
     on exit.  Simple wrapper around *note chdir(): 816.

   - bpo-24139(39): Add support for SQLite extended result codes in
     *note sqlite3.Error: 1b24.  Patch by Erlend E. Aasland.

   - bpo-24444(40): Fixed an error raised in *note argparse: 7. 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: 212. instance ‘f’ passes an ‘isinstance(f,
     typing.SupportsInt)’ check.

   - bpo-40321(42): Adds support for HTTP 308 redirects to *note urllib:
     10e.  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<32>,  Next: Testes<33>,  Prev: Biblioteca<38>,  Up: Python 3 11 0 alpha 2

1.24.38.3 Documentação
......................

   - bpo-45726(1): Improve documentation for *note
     functools.singledispatch(): 840. and *note
     functools.singledispatchmethod: bd9.

   - 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: 1b26. documentation.

   - bpo-45464(7): Mention in the documentation of *note Built-in
     Exceptions: 1b27. 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:
     1f.

   - bpo-45516(10): Add protocol description to the *note
     importlib.abc.Traversable: 1b28. 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<33>,  Next: Construção<36>,  Prev: Documentação<32>,  Up: Python 3 11 0 alpha 2

1.24.38.4 Testes
................

   - bpo-45678(1): Add tests for scenarios in which *note
     functools.singledispatchmethod: bd9. 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(): 205.

   - 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: d4. 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<36>,  Next: Windows<33>,  Prev: Testes<33>,  Up: Python 3 11 0 alpha 2

1.24.38.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: 92. and *note cmath: 19.
     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: 496. 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<36>,  Up: Python 3 11 0 alpha 2

1.24.38.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<17>,  Prev: Windows<33>,  Up: Python 3 11 0 alpha 2

1.24.38.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<17>,  Next: API C<34>,  Prev: macOS<25>,  Up: Python 3 11 0 alpha 2

1.24.38.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<34>,  Prev: IDLE<17>,  Up: Python 3 11 0 alpha 2

1.24.38.9 API C
...............

   - bpo-29103(1): *note PyType_FromSpec*: 768. 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(): 3db. 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: 97c.  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(): 98e.

        * *note PyMarshal_WriteObjectToFile(): 98f.

        * *note PyMarshal_ReadObjectFromString(): 990.

        * *note PyMarshal_WriteObjectToString(): 991.

        * a macro ‘Py_MARSHAL_VERSION’

     Eles não fazem parte da *note API limitada: 992.

     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(): 94f, and
     *note PyThreadState_LeaveTracing(): 950. functions to the limited C
     API to suspend and resume tracing and profiling.  Patch by Victor
     Stinner.

   - bpo-44220(14): *note PyStructSequence_UnnamedField: b6f. 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.24.39 Python 3.11.0 alpha 1
-----------------------------

'Data de lançamento: 2021-10-05'

* Menu:

* Segurança: Segurança<27>.
* Núcleo e embutidos: Núcleo e embutidos<38>.
* Biblioteca: Biblioteca<39>.
* Documentação: Documentação<33>.
* Testes: Testes<34>.
* Construção: Construção<37>.
* Windows: Windows<34>.
* macOS: macOS<26>.
* IDLE: IDLE<18>.
* Ferramentas/Demos: Ferramentas/Demos<26>.
* API C: API C<35>.


File: python.info,  Node: Segurança<27>,  Next: Núcleo e embutidos<38>,  Up: Python 3 11 0 alpha 1

1.24.39.1 Segurança
...................

   - bpo-42278(1): Replaced usage of *note tempfile.mktemp(): 1b31. with
     *note TemporaryDirectory: 1430. to avoid a potential race
     condition.

   - bpo-44600(2): Fix incorrect line numbers while tracing some failed
     patterns in *note match: a04. statements.  Patch by Charles
     Burkland.

   - bpo-41180(3): Add auditing events to the *note marshal: 91. 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:
     cf. sanitize input for presence of ‘\r’ and ‘\n’ characters to
     avoid (unlikely) command injection.

   - bpo-44022(7): *note http.client: 73. 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<38>,  Next: Biblioteca<39>,  Prev: Segurança<27>,  Up: Python 3 11 0 alpha 1

1.24.39.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: 9e2.
     objects.

   - bpo-45155(6): *note int.to_bytes(): 1b33. and *note
     int.from_bytes(): 1af4. now take a default value of ‘"big"’ for the
     ‘byteorder’ argument.  *note int.to_bytes(): 1b33. also takes a
     default value of ‘1’ for the ‘length’ argument.

   - bpo-44219(7): Release the GIL while performing ‘isatty’ system
     calls on arbitrary file descriptors.  In particular, this affects
     *note os.isatty(): 1b34, *note os.device_encoding(): 1b35. and
     *note io.TextIOWrapper: 9b4.  By extension, *note io.open(): 735.
     in text mode is also affected.  This change solves a deadlock in
     *note os.isatty(): 1b34.  Patch by Vincent Michel in bpo-44219(8).

   - bpo-44959(9): Added fallback to extension modules with ‘.sl’ suffix
     on HP-UX

   - bpo-45121(10): Fix issue where ‘Protocol.__init__’ raises
     ‘RecursionError’ when it’s called directly or via ‘super()’.  Patch
     provided by Yurii Karabas.

   - bpo-44348(11): The deallocator function of the *note BaseException:
     7cc. type now uses the trashcan mechanism to prevent stack
     overflow.  For example, when a *note RecursionError: f5c. 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(12): 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(13): Interpreter no longer attempts to open files with
     names in angle brackets (like “<string>” or “<stdin>”) when
     formatting an exception.

   - bpo-41031(14): Match C and Python code formatting of unprintable
     exceptions and exceptions in the *note __main__: 1. module.

   - bpo-37330(15): *note open(): 314, *note io.open(): 735, *note
     codecs.open(): 313. and *note fileinput.FileInput: 935. no longer
     accept ‘'U'’ (“universal newline”) in the file mode.  This flag was
     deprecated since Python 3.3.  Patch by Victor Stinner.

   - bpo-45083(16): 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: 104. module was using qualname already).

   - bpo-34561(17): 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(18): Compiler now removes trailing unused constants from
     co_consts.

   - bpo-45020(19): 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).

   - bpo-45012(20): In *note posix: b2, release GIL during ‘stat()’,
     ‘lstat()’, and ‘fstatat()’ syscalls made by *note
     os.DirEntry.stat(): 19aa.  Patch by Stanisław Skonieczny.

   - bpo-45018(21): Fixed pickling of range iterators that iterated for
     over ‘2**32’ times.

   - bpo-45000(22): A *note SyntaxError: 18e. is now raised when trying
     to delete *note __debug__: 9d0.  Patch by Donghee Na.

   - bpo-44963(23): Implement ‘send()’ and ‘throw()’ methods for
     ‘anext_awaitable’ objects.  Patch by Pablo Galindo.

   - bpo-44962(24): 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

   - bpo-24234(25): Implement the ‘__bytes__()’ special method on the
     *note bytes: 192. type, so a bytes object ‘b’ passes an
     ‘isinstance(b, typing.SupportsBytes)’ check.

   - bpo-24234(26): Implement the ‘__complex__()’ special method on the
     *note complex: 197. type, so a complex number ‘z’ passes an
     ‘isinstance(z, typing.SupportsComplex)’ check.

   - bpo-44954(27): Fixed a corner case bug where the result of
     ‘float.fromhex('0x.8p-1074')’ was rounded the wrong way.

   - bpo-44947(28): Refine the syntax error for trailing commas in
     import statements.  Patch by Pablo Galindo.

   - bpo-44945(29): 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

   - bpo-44929(30): Fix some edge cases of ‘enum.Flag’ string
     representation in the REPL. Patch by Pablo Galindo.

   - bpo-44914(31): 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(32): Restore behaviour of complex exponentiation with
     integer-valued exponent of type *note float: 196. or *note complex:
     197.

   - bpo-44895(33): A debug variable *note PYTHONDUMPREFSFILE: 1b36. is
     added for creating a dump file which is generated by *note
     -with-trace-refs: 62a.  Patch by Donghee Na.

   - bpo-44900(34): 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(35): 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(36): Specialization stats are always collected in debug
     builds.

   - bpo-44885(37): Correct the ast locations of f-strings with format
     specs and repeated expressions.  Patch by Pablo Galindo

   - bpo-44878(38): Remove the loop from the bytecode interpreter.  All
     instructions end with a DISPATCH macro, so the loop is now
     redundant.

   - bpo-44878(39): 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(40): 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(41): Use new trashcan macros (Py_TRASHCAN_BEGIN/END) in
     frameobject.c instead of the old ones (Py_TRASHCAN_SAFE_BEGIN/END).

   - bpo-33930(42): Fix segmentation fault with deep recursion when
     cleaning method objects.  Patch by Augusto Goulart and Pablo
     Galindo.

   - bpo-25782(43): Fix bug where ‘PyErr_SetObject’ hangs when the
     current exception has a cycle in its context chain.

   - bpo-44856(44): Fix reference leaks in the error paths of
     ‘update_bases()’ and ‘__build_class__’.  Patch by Pablo Galindo.

   - bpo-44826(45): 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(46): Fixed a bug that was causing the parser to raise an
     incorrect custom *note SyntaxError: 18e. for invalid ‘if’
     expressions.  Patch by Pablo Galindo.

   - bpo-44821(47): Create instance dictionaries (__dict__) eagerly, to
     improve regularity of object layout and assist specialization.

   - bpo-44792(48): Improve syntax errors for if expressions.  Patch by
     Miguel Brito

   - bpo-34013(49): 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(50): Rename ‘types.Union’ to ‘types.UnionType’.

   - bpo-44725(51): Expose specialization stats in python via
     ‘_opcode.get_specialization_stats()’.

   - bpo-44717(52): Improve AttributeError on circular imports of
     submodules.

   - bpo-44698(53): Fix undefined behaviour in complex object
     exponentiation.

   - bpo-44653(54): Support *note typing: 10a. types in parameter
     substitution in the union type.

   - bpo-44676(55): Add ability to serialise ‘types.Union’ objects.
     Patch provided by Yurii Karabas.

   - bpo-44633(56): Parameter substitution of the union type with wrong
     types now raises ‘TypeError’ instead of returning *note
     NotImplemented: 1a2.

   - bpo-44661(57): Update ‘property_descr_set’ to use vectorcall if
     possible.  Patch by Donghee Na.

   - bpo-44662(58): Add ‘__module__’ to ‘types.Union’.  This also fixes
     ‘types.Union’ issues with ‘typing.Annotated’.  Patch provided by
     Yurii Karabas.

   - bpo-44655(59): Include the name of the type in unset __slots__
     attribute errors.  Patch by Pablo Galindo

   - bpo-44655(60): 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(61): Fix the hash of the union type: it no longer depends
     on the order of arguments.

   - bpo-44636(62): 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.

   - bpo-44611(63): On Windows, *note os.urandom(): 73b.: uses
     BCryptGenRandom API instead of CryptGenRandom API which is
     deprecated from Microsoft Windows API. Patch by Donghee Na.

   - bpo-44635(64): Convert ‘None’ to ‘type(None)’ in the union type
     constructor.

   - bpo-26280(65): 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(66): Mapping patterns in ‘match’ statements with two or
     more equal literal keys will now raise a *note SyntaxError: 18e. at
     compile-time.

   - bpo-44606(67): Fix ‘__instancecheck__’ and ‘__subclasscheck__’ for
     the union type.

   - bpo-42073(68): The ‘@classmethod’ decorator can now wrap other
     classmethod-like descriptors.

   - bpo-41972(69): Tuned the string-searching algorithm of fastsearch.h
     to have a shorter inner loop for most cases.

   - bpo-44590(70): 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(71): 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(72): 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.

   - bpo-44490(73): *note typing: 10a. 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.

   - bpo-43950(74): 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(75).

   - bpo-44562(76): Remove uses of *note PyObject_GC_Del(): 16f1. in
     error path when initializing *note types.GenericAlias: 9e2.

   - bpo-41486(77): 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.

   - bpo-43908(78): Heap types with the *note Py_TPFLAGS_IMMUTABLETYPE:
     3cc. flag can now inherit the PEP 590(79) vectorcall protocol.
     Previously, this was only possible for *note static types: 978.
     Patch by Erlend E. Aasland.

   - bpo-44553(80): Implement GC methods for ‘types.Union’ to break
     reference cycles and prevent memory leaks.

   - bpo-44490(81): Add ‘__parameters__’ attribute and ‘__getitem__’
     operator to ‘types.Union’.  Patch provided by Yurii Karabas.

   - bpo-44523(82): Remove the pass-through for *note hash(): 7f6. of
     *note weakref.proxy: c3b. 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(83): Fix a crash in ‘types.Union’ objects when creating a
     union of an object with bad ‘__module__’ field.

   - bpo-44486(84): Modules will always have a dictionary, even when
     created by ‘types.ModuleType.__new__()’

   - bpo-44472(85): Fix ltrace functionality when exceptions are raised.
     Patch by Pablo Galindo

   - bpo-12022(86): A *note TypeError: 198. is now raised instead of an
     *note AttributeError: 5e4. in *note with: 186. and *note async
     with: 185. statements for objects which do not support the *note
     context manager: 1e0. or *note asynchronous context manager: 7e5.
     protocols correspondingly.

   - bpo-44297(87): 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(88): Improve the syntax error when mixing positional and
     keyword patterns.  Patch by Pablo Galindo.

   - bpo-44409(89): Fix error location information for tokenizer errors
     raised on initialization of the tokenizer.  Patch by Pablo Galindo.

   - bpo-44396(90): Fix a possible crash in the tokenizer when raising
     syntax errors for unclosed strings.  Patch by Pablo Galindo.

   - bpo-44376(91): 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(92): 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(93): Implement adaptive specialization for LOAD_GLOBAL

     Two specialized forms of LOAD_GLOBAL are added:

        * LOAD_GLOBAL_MODULE

        * LOAD_GLOBAL_BUILTIN

   - bpo-44368(94): Improve syntax errors for invalid “as” targets.
     Patch by Pablo Galindo

   - bpo-44349(95): Fix an edge case when displaying text from files
     with encoding in syntax errors.  Patch by Pablo Galindo.

   - bpo-44337(96): 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(97): Fix a regression when identifying incorrect
     characters in syntax errors.  Patch by Pablo Galindo

   - bpo-43693(98): 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(99): Improve tokenizer error with improved locations.
     Patch by Pablo Galindo.

   - bpo-44304(100): Fix a crash in the *note sqlite3: d4. module that
     happened when the garbage collector clears ‘sqlite.Statement’
     objects.  Patch by Pablo Galindo

   - bpo-44305(101): Improve error message for ‘try’ blocks without
     ‘except’ or ‘finally’ blocks.  Patch by Pablo Galindo.

   - bpo-43413(102): Constructors of subclasses of some builtin classes
     (e.g.  *note tuple: 608, *note list: 24c, *note frozenset: 7e7.) no
     longer accept arbitrary keyword arguments.  [reverted in 3.11a4]
     Subclass of *note set: 184. can now define a ‘__new__()’ method
     with additional keyword parameters without overriding also
     ‘__init__()’.

   - bpo-43667(103): Improve Unicode support in non-UTF locales on
     Oracle Solaris.  This issue does not affect other Solaris systems.

   - bpo-43693(104): 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(105): Fix a regression in *note type(): f38. 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(106): 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(107): ‘PyCodeObject’ gained ‘co_fastlocalnames’ and
     ‘co_fastlocalkinds’ as the authoritative source of fast locals
     info.  Marshaled code objects have changed accordingly.

   - bpo-44184(108): 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(109): 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(110): 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(111): Fix error message in the parser involving keyword
     arguments with invalid expressions.  Patch by Pablo Galindo

   - bpo-44156(112): String caches in ‘compile.c’ are now subinterpreter
     compatible.

   - bpo-44143(113): Fixed a crash in the parser that manifest when
     raising tokenizer errors when an existing exception was present.
     Patch by Pablo Galindo.

   - bpo-44032(114): Move ‘fast’ locals and other variables from the
     frame object to a per-thread datastack.

   - bpo-44114(115): 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(116): Improve ‘str.__getitem__()’ error message

   - bpo-26110(117): 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(118): 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(119): Correct the syntax error message regarding multiple
     exception types to not refer to “exception groups”.  Patch by Pablo
     Galindo

   - bpo-43822(120): The parser will prioritize tokenizer errors over
     custom syntax errors when raising exceptions.  Patch by Pablo
     Galindo.

   - bpo-40222(121): “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(122): Document the signature and ‘default’ argument in
     the docstring of the new ‘anext’ builtin.

   - bpo-43833(123): 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(124): Add native_thread_id to PyThreadState.  Patch by
     Gabriele N. Tornetta.

   - bpo-43693(125): 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(126): More accurate error messages for access of unbound
     locals or free vars.

   - bpo-28146(127): Fix a confusing error message in *note
     str.format(): 828.

   - bpo-11105(128): When compiling *note ast.AST: 4bd. objects with
     recursive references through *note compile(): 4ab, the interpreter
     doesn’t crash anymore instead it raises a *note RecursionError:
     f5c.

   - bpo-39091(129): Fix crash when using passing a non-exception to a
     generator’s ‘throw()’ method.  Patch by Noah Oxer

   - bpo-33346(130): 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=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

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44219

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44219

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44959

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45121

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44348

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45123

   (13) https://bugs.python.org/issue?@action=redirect&bpo=1514420

   (14) https://bugs.python.org/issue?@action=redirect&bpo=41031

   (15) https://bugs.python.org/issue?@action=redirect&bpo=37330

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45083

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34561

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45056

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45020

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45012

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45018

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45000

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44963

   (24) https://bugs.python.org/issue?@action=redirect&bpo=44962

   (25) https://bugs.python.org/issue?@action=redirect&bpo=24234

   (26) https://bugs.python.org/issue?@action=redirect&bpo=24234

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44954

   (28) https://bugs.python.org/issue?@action=redirect&bpo=44947

   (29) https://bugs.python.org/issue?@action=redirect&bpo=44945

   (30) https://bugs.python.org/issue?@action=redirect&bpo=44929

   (31) https://bugs.python.org/issue?@action=redirect&bpo=44914

   (32) https://bugs.python.org/issue?@action=redirect&bpo=44698

   (33) https://bugs.python.org/issue?@action=redirect&bpo=44895

   (34) https://bugs.python.org/issue?@action=redirect&bpo=44900

   (35) https://bugs.python.org/issue?@action=redirect&bpo=44889

   (36) https://bugs.python.org/issue?@action=redirect&bpo=44890

   (37) https://bugs.python.org/issue?@action=redirect&bpo=44885

   (38) https://bugs.python.org/issue?@action=redirect&bpo=44878

   (39) https://bugs.python.org/issue?@action=redirect&bpo=44878

   (40) https://bugs.python.org/issue?@action=redirect&bpo=44874

   (41) https://bugs.python.org/issue?@action=redirect&bpo=44872

   (42) https://bugs.python.org/issue?@action=redirect&bpo=33930

   (43) https://bugs.python.org/issue?@action=redirect&bpo=25782

   (44) https://bugs.python.org/issue?@action=redirect&bpo=44856

   (45) https://bugs.python.org/issue?@action=redirect&bpo=44826

   (46) https://bugs.python.org/issue?@action=redirect&bpo=44838

   (47) https://bugs.python.org/issue?@action=redirect&bpo=44821

   (48) https://bugs.python.org/issue?@action=redirect&bpo=44792

   (49) https://bugs.python.org/issue?@action=redirect&bpo=34013

   (50) https://bugs.python.org/issue?@action=redirect&bpo=44732

   (51) https://bugs.python.org/issue?@action=redirect&bpo=44725

   (52) https://bugs.python.org/issue?@action=redirect&bpo=44717

   (53) https://bugs.python.org/issue?@action=redirect&bpo=44698

   (54) https://bugs.python.org/issue?@action=redirect&bpo=44653

   (55) https://bugs.python.org/issue?@action=redirect&bpo=44676

   (56) https://bugs.python.org/issue?@action=redirect&bpo=44633

   (57) https://bugs.python.org/issue?@action=redirect&bpo=44661

   (58) https://bugs.python.org/issue?@action=redirect&bpo=44662

   (59) https://bugs.python.org/issue?@action=redirect&bpo=44655

   (60) https://bugs.python.org/issue?@action=redirect&bpo=44655

   (61) https://bugs.python.org/issue?@action=redirect&bpo=44646

   (62) https://bugs.python.org/issue?@action=redirect&bpo=44636

   (63) https://bugs.python.org/issue?@action=redirect&bpo=44611

   (64) https://bugs.python.org/issue?@action=redirect&bpo=44635

   (65) https://bugs.python.org/issue?@action=redirect&bpo=26280

   (66) https://bugs.python.org/issue?@action=redirect&bpo=44589

   (67) https://bugs.python.org/issue?@action=redirect&bpo=44606

   (68) https://bugs.python.org/issue?@action=redirect&bpo=42073

   (69) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (70) https://bugs.python.org/issue?@action=redirect&bpo=44590

   (71) https://bugs.python.org/issue?@action=redirect&bpo=44584

   (72) https://bugs.python.org/issue?@action=redirect&bpo=43895

   (73) https://bugs.python.org/issue?@action=redirect&bpo=44490

   (74) https://bugs.python.org/issue?@action=redirect&bpo=43950

   (75) https://peps.python.org/pep-0657/

   (76) https://bugs.python.org/issue?@action=redirect&bpo=44562

   (77) https://bugs.python.org/issue?@action=redirect&bpo=41486

   (78) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (79) https://peps.python.org/pep-0590/

   (80) https://bugs.python.org/issue?@action=redirect&bpo=44553

   (81) https://bugs.python.org/issue?@action=redirect&bpo=44490

   (82) https://bugs.python.org/issue?@action=redirect&bpo=44523

   (83) https://bugs.python.org/issue?@action=redirect&bpo=44483

   (84) https://bugs.python.org/issue?@action=redirect&bpo=44486

   (85) https://bugs.python.org/issue?@action=redirect&bpo=44472

   (86) https://bugs.python.org/issue?@action=redirect&bpo=12022

   (87) https://bugs.python.org/issue?@action=redirect&bpo=44297

   (88) https://bugs.python.org/issue?@action=redirect&bpo=44456

   (89) https://bugs.python.org/issue?@action=redirect&bpo=44409

   (90) https://bugs.python.org/issue?@action=redirect&bpo=44396

   (91) https://bugs.python.org/issue?@action=redirect&bpo=44376

   (92) https://bugs.python.org/issue?@action=redirect&bpo=44313

   (93) https://bugs.python.org/issue?@action=redirect&bpo=44338

   (94) https://bugs.python.org/issue?@action=redirect&bpo=44368

   (95) https://bugs.python.org/issue?@action=redirect&bpo=44349

   (96) https://bugs.python.org/issue?@action=redirect&bpo=44337

   (97) https://bugs.python.org/issue?@action=redirect&bpo=44335

   (98) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (99) https://bugs.python.org/issue?@action=redirect&bpo=44317

   (100) https://bugs.python.org/issue?@action=redirect&bpo=44304

   (101) https://bugs.python.org/issue?@action=redirect&bpo=44305

   (102) https://bugs.python.org/issue?@action=redirect&bpo=43413

   (103) https://bugs.python.org/issue?@action=redirect&bpo=43667

   (104) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (105) https://bugs.python.org/issue?@action=redirect&bpo=44232

   (106) https://bugs.python.org/issue?@action=redirect&bpo=44201

   (107) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (108) https://bugs.python.org/issue?@action=redirect&bpo=44184

   (109) https://bugs.python.org/issue?@action=redirect&bpo=44187

   (110) https://bugs.python.org/issue?@action=redirect&bpo=44180

   (111) https://bugs.python.org/issue?@action=redirect&bpo=44168

   (112) https://bugs.python.org/issue?@action=redirect&bpo=44156

   (113) https://bugs.python.org/issue?@action=redirect&bpo=44143

   (114) https://bugs.python.org/issue?@action=redirect&bpo=44032

   (115) https://bugs.python.org/issue?@action=redirect&bpo=44114

   (116) https://bugs.python.org/issue?@action=redirect&bpo=44110

   (117) https://bugs.python.org/issue?@action=redirect&bpo=26110

   (118) https://bugs.python.org/issue?@action=redirect&bpo=28307

   (119) https://bugs.python.org/issue?@action=redirect&bpo=43149

   (120) https://bugs.python.org/issue?@action=redirect&bpo=43822

   (121) https://bugs.python.org/issue?@action=redirect&bpo=40222

   (122) https://bugs.python.org/issue?@action=redirect&bpo=43918

   (123) https://bugs.python.org/issue?@action=redirect&bpo=43833

   (124) https://bugs.python.org/issue?@action=redirect&bpo=43879

   (125) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (126) https://bugs.python.org/issue?@action=redirect&bpo=17792

   (127) https://bugs.python.org/issue?@action=redirect&bpo=28146

   (128) https://bugs.python.org/issue?@action=redirect&bpo=11105

   (129) https://bugs.python.org/issue?@action=redirect&bpo=39091

   (130) https://bugs.python.org/issue?@action=redirect&bpo=33346


File: python.info,  Node: Biblioteca<39>,  Next: Documentação<33>,  Prev: Núcleo e embutidos<38>,  Up: Python 3 11 0 alpha 1

1.24.39.3 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(): 89c. method now uses the monotonic clock
     (*note time.CLOCK_MONOTONIC: 89d.) for the timeout, rather than
     using the system clock (*note time.CLOCK_REALTIME: 89e.), to not be
     affected by system clock changes.  Patch by Victor Stinner.

   - bpo-1596321(4): Fix the ‘threading._shutdown()’ function when the
     *note threading: f3. 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():
     13e0. method of the *note threading: f3. 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(): 8a1.
     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(): 8a1. 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(): 1b38. raises now a
     *note unittest.SkipTest: 11da. 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(): c43, *note
     copy(): c44, *note copy2(): c45. raising *note FileNotFoundError:
     263. when source is a directory, which should raise *note
     IsADirectoryError: 124f.

   - 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(): 204. 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(): 8a1.
     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: 26. module: the
     ‘SafeConfigParser’ class, the ‘filename’ property of the *note
     ParsingError: 71e. class, the ‘readfp()’ method of the *note
     ConfigParser: 4d8. 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(): 8d9.  Patch by Donghee Na.

   - bpo-35474(21): Calling *note mimetypes.guess_all_extensions():
     1b39. 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(): 8b5. now works with
     *note Final: 567. wrapped in *note ForwardRef: 1ae7.

   - bpo-45162(23): Remove many old deprecated *note unittest: 10c.
     features:

        * “‘fail*’” and “‘assert*’” aliases of *note TestCase: 2b2.
          methods.

        * Broken from start *note TestCase: 2b2. method
          ‘assertDictContainsSubset()’.

        * Ignored ‘<unittest.TestLoader.loadTestsFromModule>
          TestLoader.loadTestsFromModule()’ parameter 'use_load_tests'.

        * Old alias ‘_TextTestResult’ of *note TextTestResult: 749.

   - 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__(): 581. methods of *note
     xml.dom.pulldom.DOMEventStream: 933, *note
     wsgiref.util.FileWrapper: 934. and *note fileinput.FileInput: 935,
     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(): 931, 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: 1363. methods *note
     addFailure(): 1b3a, *note addError(): 1b3b, *note addSkip(): 1b3c.
     and *note addSubTest(): 1b3d. 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: 10c. 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: 11. 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(): 932. 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(): 8a7.  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(): 1362. now always return a *note
     TestResult: 1363. 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: 24. module

   - bpo-43913(40): Fix bugs in cleaning up classes and modules in *note
     unittest: 10c.:

        * Functions registered with *note addModuleCleanup(): c35. were
          not called unless the user defines ‘tearDownModule()’ in their
          test module.

        * Functions registered with *note addClassCleanup(): c36. were
          not called if ‘tearDownClass’ is set to ‘None’.

        * Buffering in *note TestResult: 1363. 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: 10d.  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(): 843. and
     *note gzip.decompress(): 1409. by compressing and decompressing at
     once in memory instead of in a streamed fashion.

   - bpo-37596(46): Ensure that *note set: 184. and *note frozenset:
     7e7. objects are always *note marshalled: 91. 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: 11b. itself.  Patch by Donghee Na.

   - bpo-44955(49): Method *note stopTestRun(): 1545. is now always
     called in pair with method *note startTestRun(): 1544. for *note
     TestResult: 1363. objects implicitly created in *note run(): 1362.
     Previously it was not called for test methods and classes decorated
     with a skipping decorator.

   - bpo-39039(50): tarfile.open raises *note ReadError: 1b3e. when a
     zlib error occurs during file extraction.

   - bpo-44935(51): *note subprocess: dc. on Solaris now also uses *note
     os.posix_spawn(): 528. for better performance.

   - bpo-44911(52): *note IsolatedAsyncioTestCase: 35e. 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: 1afa.’s
     default value is no longer printed twice when used with *note
     argparse.ArgumentDefaultsHelpFormatter: 1b3f.

   - bpo-44860(56): Fix the ‘posix_user’ scheme in *note sysconfig: e1.
     to not depend on *note sys.platlibdir: b28.

   - bpo-44859(57): Improve error handling in *note sqlite3: d4. and
     raise more accurate exceptions.

        * *note MemoryError: 1809. is now raised instead of *note
          sqlite3.Warning: 1ac9. 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: 1ac9. when the statement contains surrogate
          characters in ‘Connection.__call__()’ and ‘Cursor.execute()’.

        * *note TypeError: 198. is now raised instead of *note
          ValueError: 2ea. for non-string script argument in
          ‘Cursor.executescript()’.

        * *note ValueError: 2ea. 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(): 10f4. function
     on FreeBSD 14 for file descriptor opened with the *note O_PATH:
     1168. flag: ignore the *note EBADF: b4a. 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: 1809. raised in user-defined
     functions will now produce a ‘MemoryError’ in *note sqlite3: d4.
     *note OverflowError: a77. will now be converted to *note DataError:
     1b40.  Previously *note OperationalError: 1b41. was produced in
     these cases.

   - bpo-44822(63): *note sqlite3: d4. user-defined functions and
     aggregators returning *note strings: 169. with embedded NUL
     characters are no longer truncated.  Patch by Erlend E. Aasland.

   - bpo-44801(64): Ensure that the *note ParamSpec: 481. 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:
     564. ignore now the ‘__init__’ method inherited from protocol base
     classes.

   - bpo-27275(66): *note collections.OrderedDict.popitem(): 14e9. 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(): 6f5. 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(): dbe. on
     *note property: 4ad. 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: 1b42. is used in *note atexit: d. 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(): fd5.
     when ‘sys.stdout’ is redirected.  Patch by Stefan Hölzl.

   - bpo-44688(77): *note sqlite3.Connection.create_collation(): 87b.
     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: a77. 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: aa. '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(): 22e.  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(): 174c. when examining a class in the
     interactive session.  Instead of *note TypeError: 198, it should be
     *note OSError: 2bf. 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: 60, the cache size for compiled
     regex patterns (*note functools.lru_cache(): bd8.) was bumped up
     from 256 to 32768, affecting functions: *note fnmatch.fnmatch():
     1b43, *note fnmatch.fnmatchcase(): 1b44, *note fnmatch.filter():
     1b45.

   - bpo-41928(92): Update *note shutil.copyfile(): c43. to raise *note
     FileNotFoundError: 263. instead of confusing *note
     IsADirectoryError: 124f. when a path ending with a ‘os.path.sep’
     does not exist; *note shutil.copy(): c44. and *note shutil.copy2():
     c45. are also affected.

   - bpo-44569(93): Added the ‘StackSummary.format_frame()’ function in
     *note traceback: 104.  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(): ace. 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:
     1175. 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: aa.’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(): 1b46. 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: 579.

   - bpo-44468(104): *note typing.get_type_hints(): 8b5. 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: d4. authorizer
     callback by passing *note None: 87a. to *note set_authorizer():
     5a2.  Patch by Erlend E. Aasland.

   - bpo-43977(106): Set the proper *note Py_TPFLAGS_MAPPING: 1b47. and
     *note Py_TPFLAGS_SEQUENCE: 1b48. flags for subclasses created
     before a parent has been registered as a *note
     collections.abc.Mapping: abd. or *note collections.abc.Sequence:
     13c0.

   - bpo-44482(107): Fix very unlikely resource leak in *note glob: 68.
     in alternate Python implementations.

   - bpo-44466(108): The *note faulthandler: 5c. module now detects if a
     fatal error occurs during a garbage collector collection.  Patch by
     Victor Stinner.

   - bpo-44471(109): A *note TypeError: 198. is now raised instead of an
     *note AttributeError: 5e4. in *note
     contextlib.ExitStack.enter_context(): 7e3. and *note
     contextlib.AsyncExitStack.enter_async_context(): 7e4. for objects
     which do not support the *note context manager: 1e0. or *note
     asynchronous context manager: 7e5. protocols correspondingly.

   - bpo-44404(110): *note tkinter: f6.’s ‘after()’ method now supports
     callables without the ‘__name__’ attribute.

   - bpo-41546(111): Make *note pprint: b3. (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: 107a.

   - 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:
     976. flag.  Patch by Victor Stinner.

   - bpo-44422(118): The *note threading.enumerate(): 1b49. 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: 198.

   - bpo-44389(121): Fix deprecation of *note ssl.OP_NO_TLSv1_3: 1b4a.

   - 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: aa.’s run/restart command.

   - bpo-44362(125): Improve *note ssl: d5. 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: e1.

   - 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(): 866.

   - 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(): 85e.

   - bpo-44260(136): The *note random.Random: 1b4b. 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:
     67.  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:
     92f. 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: d4. 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: 212. 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: 1904.
     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(): ad8. will now drop the
     redundant parentheses when tuples used as assignment targets (e.g
     in for loops).

   - bpo-44145(153): *note hmac: 6e. 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: 6c. algorithms support.

   - bpo-44095(154): *note zipfile.Path: 8cd. now supports *note
     zipfile.Path.stem: 8ca, *note zipfile.Path.suffixes: 8cc, and *note
     zipfile.Path.suffix: 8cb. 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: 10a. 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(): ad8. 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(): f3b. with a list of *note
     pathlib.Path: 265. objects

   - bpo-44059(163): Register the SerenityOS Browser in the *note
     webbrowser: 11b. module.

   - bpo-36515(164): The *note hashlib: 6c. 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: 110. 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: 110. ‘Quoted’ class
     API is now deprecated, for removal in 3.14.

   - bpo-43972(169): When *note http.server.SimpleHTTPRequestHandler:
     d2c. 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: aa. where ‘checkline()’
     raises *note AttributeError: 5e4. if it is called after ‘reset()’.

   - bpo-43853(171): Improved string handling for *note sqlite3: d4.
     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:
          1809.

     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: 1809. in *note
     shutil.unpack_archive(): 68b. which fails inside
     ‘shutil._unpack_zipfile()’ on large files.  Patch by Igor
     Bolshakov.

   - bpo-43612(174): *note zlib.compress(): 844. 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(): 731. and *note
     importlib.__import__(): 1263.

   - bpo-43318(176): Fix a bug where *note pdb: aa. does not always echo
     cleared breakpoints.

   - bpo-43234(177): Prohibit passing non-*note
     concurrent.futures.ThreadPoolExecutor: 93e. 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(): a45, *note
     traceback.format_exception(): a43. and *note
     traceback.format_exception_only(): a44.

   - bpo-33809(183): Add the *note traceback.TracebackException.print():
     8a8. method which prints the formatted exception information.

   - bpo-42862(184): *note sqlite3: d4. now utilizes *note
     functools.lru_cache(): bd8. 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(): 11b8. now raises
     *note ValueError: 2ea. when the invalid keyword argument 'check' is
     passed by user code.  Previously such use would fail later with a
     *note TypeError: 198.  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: d4.  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: 82. - by Anthony Sottile.

   - bpo-41402(191): Fix *note email.message.EmailMessage.set_content():
     1b4c. when called with binary data and ‘7bit’ content transfer
     encoding.

   - bpo-32695(192): The 'compresslevel' and 'preset' keyword arguments
     of *note tarfile.open(): 106d. 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: f3.
     synchronization objects: *note Semaphore: 1352, *note
     BoundedSemaphore: 1353, *note Event: 1354. and *note Barrier: 13df.

   - bpo-5846(195): Deprecated the following *note unittest: 10c.
     functions, scheduled for removal in Python 3.13:

        * ‘findTestCases()’

        * ‘makeSuite()’

        * ‘getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 58c.:

        * *note unittest.TestLoader.loadTestsFromModule(): 58d.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 58e.

        * *note unittest.TestLoader.getTestCaseNames(): 58f.

     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: aa. 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: 26.: 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(): d13. to match *note
     contextlib.contextmanager(): 13fe. 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(): 4ed. now accepts
     *note email.header.Header: 1b4d. objects along with string values.
     Patch by Zackery Spytz.

   - bpo-16379(206): Add SQLite error code and name to *note sqlite3:
     d4. 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<33>,  Next: Testes<34>,  Prev: Biblioteca<39>,  Up: Python 3 11 0 alpha 1

1.24.39.4 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: 1f. 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: 1b4f.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():
     1b33. and *note int.from_bytes(): 1af4. 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: f. 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(): 6cf. 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(): 1919. 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(): acf. to the behavior of its c implementation.

   - bpo-44544(20): List all kwargs for *note textwrap.wrap(): 16b5,
     *note textwrap.fill(): 16b4, and *note textwrap.shorten(): 11c6.
     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: 137. 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(): 1528.

   - 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: b.

   - 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: 33.
     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: 13b8.
     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<34>,  Next: Construção<37>,  Prev: Documentação<33>,  Up: Python 3 11 0 alpha 1

1.24.39.5 Testes
................

   - bpo-40173(1): Fix *note
     test.support.import_helper.import_fresh_module(): 1b51.

   - bpo-45280(2): Add a test case for empty *note typing.NamedTuple:
     32f.

   - 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():
     d8e. 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: b28.
     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(): 1b3. 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(): 1614. is
     preserved when ‘obj * 1’ is used on *note str: 169. and *note
     bytes: 192. 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: 1b52. 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(): bef.
     function.

   - bpo-43921(29): Fix test_ssl.test_wrong_cert_tls13(): use
     ‘suppress_ragged_eofs=False’, since ‘read()’ can raise *note
     ssl.SSLEOFError: 19f0. 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<37>,  Next: Windows<34>,  Prev: Testes<34>,  Up: Python 3 11 0 alpha 1

1.24.39.6 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<37>,  Up: Python 3 11 0 alpha 1

1.24.39.7 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:
     af. module

   - bpo-44582(6): Accelerate speed of *note mimetypes: 93.
     initialization using a native implementation of the registry scan.

   - bpo-41299(7): Fix 16 milliseconds jitter when using timeouts in
     *note threading: f3, such as with *note threading.Lock.acquire():
     89c. or *note threading.Condition.wait(): 1b55.

   - bpo-42686(8): Build *note sqlite3: d4. 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<18>,  Prev: Windows<34>,  Up: Python 3 11 0 alpha 1

1.24.39.8 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(): f39. 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<18>,  Next: Ferramentas/Demos<26>,  Prev: macOS<26>,  Up: Python 3 11 0 alpha 1

1.24.39.9 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: a04. statement’s *note
     soft keywords: a03.: *note match: a04, *note case: a04, and *note
     _: a05.  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<26>,  Next: API C<35>,  Prev: IDLE<18>,  Up: Python 3 11 0 alpha 1

1.24.39.10 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<35>,  Prev: Ferramentas/Demos<26>,  Up: Python 3 11 0 alpha 1

1.24.39.11 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: 2ea. when the entire file has already been buffered.

   - bpo-45116(3): Add the *note Py_ALWAYS_INLINE: 1b5a. 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: 1774. macro to disable
     inlining on a function.  Patch by Victor Stinner.

   - bpo-45061(5): Add a deallocator to the *note bool: 3c0. 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(): 94e. 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(): bb2. now resets
     ‘PyImport_Inittab’ to its initial value at exit.  It must be
     possible to call *note PyImport_AppendInittab(): 1a4c. or *note
     PyImport_ExtendInittab(): 1a4d. 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: 985.
     members like ‘_tstate->trash_delete_nesting’, whereas the *note
     PyThreadState: 985. 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: 992. now
     shows the public name *note PyFrameObject: 981. rather than
     ‘_frame’.  The non-existing entry ‘_node’ no longer appears in the
     list.

   - bpo-44378(15): *note Py_IS_TYPE(): 1ab7. no longer uses *note
     Py_TYPE(): 3c6. to avoid a compiler warning: no longer cast ‘const
     PyObject*’ to ‘PyObject*’.  Patch by Victor Stinner.

   - bpo-39573(16): Convert the *note Py_TYPE(): 3c6. and *note
     Py_SIZE(): 97a. macros to static inline functions.  The *note
     Py_SET_TYPE(): 979. and *note Py_SET_SIZE(): 97b. functions must
     now be used to set an object type and size.  Patch by Victor
     Stinner.

   - bpo-44263(17): The *note PyType_Ready(): 975. function now raises
     an error if a type is defined with the *note Py_TPFLAGS_HAVE_GC:
     976. flag set but has no traverse function (*note
     PyTypeObject.tp_traverse: 977.).  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: 3f4. API of the *note Python
     Initialization Configuration: 63a. 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(): a8d. 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(): 94d. 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.24.40 Python 3.10.0 beta 1
----------------------------

'Data de lançamento: 2021-05-03'

* Menu:

* Segurança: Segurança<28>.
* Núcleo e embutidos: Núcleo e embutidos<39>.
* Biblioteca: Biblioteca<40>.
* Documentação: Documentação<34>.
* Testes: Testes<35>.
* Construção: Construção<38>.
* Windows: Windows<35>.
* macOS: macOS<27>.
* IDLE: IDLE<19>.
* API C: API C<36>.


File: python.info,  Node: Segurança<28>,  Next: Núcleo e embutidos<39>,  Up: Python 3 10 0 beta 1

1.24.40.1 Segurança
...................

   - bpo-43434(1): Creating *note sqlite3.Connection: 547. objects now
     also produces ‘sqlite3.connect’ and ‘sqlite3.connect/handle’ *note
     auditing events: 1b5d.  Previously these events were only produced
     by *note sqlite3.connect(): 59f. calls.  Patch by Erlend E.
     Aasland.

   - bpo-43998(2): The *note ssl: d5. 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: 354. 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(): 110. 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(): a35, and *note
     sqlite3.Connection.load_extension(): 6d4.  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():
     599. and *note glob.iglob(): 9fe.

   - bpo-36384(8): *note ipaddress: 84. 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(): b50. treats leading
     zeros as octal notation.  glibc implementation of modern *note
     inet_pton(): b51. does not accept any leading zeros.  For a while
     the *note ipaddress: 84. module used to accept ambiguous leading
     zeros.

   - bpo-43075(9): Fix Regular Expression Denial of Service (ReDoS)
     vulnerability in *note urllib.request.AbstractBasicAuthHandler:
     1b5e.  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: 73.
     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<39>,  Next: Biblioteca<40>,  Prev: Segurança<28>,  Up: Python 3 10 0 beta 1

1.24.40.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: 1b60. 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: 1f.
     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.

   - bpo-43908(8): Make *note re: be. types immutable.  Patch by Erlend
     E. Aasland.

   - bpo-43908(9): Make the *note array.array: 4b8. type immutable.
     Patch by Erlend E. Aasland.

   - bpo-43901(10): 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(11): 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(12): Usage of ‘await’/‘yield’/‘yield from’ and named
     expressions within an annotation is now forbidden when PEP 563 is
     activated.

   - bpo-43754(13): When performing structural pattern matching ( PEP
     634(14)), captured names are now left unbound until the 'entire'
     pattern has matched successfully.

   - bpo-42737(15): Annotations for complex targets (everything beside
     simple names) no longer cause any runtime effects with ‘from
     __future__ import annotations’.

   - bpo-43914(16): *note SyntaxError: 18e. 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(17): 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(18): 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(19): Improve the error message for *note
     IndentationError: 9a1. exceptions.  Patch by Pablo Galindo

   - bpo-41323(20): Constant tuple folding in bytecode optimizer now
     reuses tuple in constant table.

   - bpo-43846(21): Data stack usage is much reduced for large literal
     and call expressions.

   - bpo-38530(22): When printing *note NameError: 44f. 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(23): Improve syntax errors for invalid dictionary
     literals.  Patch by Pablo Galindo.

   - bpo-43822(24): Improve syntax errors in the parser for missing
     commas between expressions.  Patch by Pablo Galindo.

   - bpo-43798(25): *note ast.alias: 1b61. nodes now include source
     location metadata attributes e.g.  lineno, col_offset.

   - bpo-43797(26): Improve ‘SyntaxError’ error messages for invalid
     comparisons.  Patch by Pablo Galindo.

   - bpo-43760(27): 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(28): Static methods (*note @staticmethod: 450.) and class
     methods (*note @classmethod: 488.) now inherit the method
     attributes (‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’,
     ‘__annotations__’) and have a new ‘__wrapped__’ attribute.  Patch
     by Victor Stinner.

   - bpo-43751(29): Fixed a bug where ‘anext(ait, default)’ would
     erroneously return None.

   - bpo-42128(30): *note __match_args__: 1b62. is no longer allowed to
     be a list.

   - bpo-43683(31): Add GEN_START opcode.  Marks start of generator,
     including async, or coroutine and handles sending values to a newly
     created generator or coroutine.

   - bpo-43105(32): Importlib now resolves relative paths when creating
     module spec objects from file locations.

   - bpo-43682(33): Static methods (*note @staticmethod: 450.) are now
     callable as regular functions.  Patch by Victor Stinner.

   - bpo-42609(34): Prevented crashes in the AST validator and optimizer
     when compiling some absurdly long expressions like ‘"+0"*1000000’.
     *note RecursionError: f5c. is now raised instead.

   - bpo-38530(35): When printing *note AttributeError: 5e4,
     ‘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=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

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43901

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43892

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42725

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43754

   (14) https://peps.python.org/pep-0634/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42737

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43914

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38605

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43475

   (19) https://bugs.python.org/issue?@action=redirect&bpo=43859

   (20) https://bugs.python.org/issue?@action=redirect&bpo=41323

   (21) https://bugs.python.org/issue?@action=redirect&bpo=43846

   (22) https://bugs.python.org/issue?@action=redirect&bpo=38530

   (23) https://bugs.python.org/issue?@action=redirect&bpo=43823

   (24) https://bugs.python.org/issue?@action=redirect&bpo=43822

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43798

   (26) https://bugs.python.org/issue?@action=redirect&bpo=43797

   (27) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (28) https://bugs.python.org/issue?@action=redirect&bpo=43682

   (29) https://bugs.python.org/issue?@action=redirect&bpo=43751

   (30) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (31) https://bugs.python.org/issue?@action=redirect&bpo=43683

   (32) https://bugs.python.org/issue?@action=redirect&bpo=43105

   (33) https://bugs.python.org/issue?@action=redirect&bpo=43682

   (34) https://bugs.python.org/issue?@action=redirect&bpo=42609

   (35) https://bugs.python.org/issue?@action=redirect&bpo=38530


File: python.info,  Node: Biblioteca<40>,  Next: Documentação<34>,  Prev: Núcleo e embutidos<39>,  Up: Python 3 10 0 beta 1

1.24.40.3 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: 1b64. 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(): 31c.  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(): 8b5. receives
     no namespace dictionary arguments, *note typing.get_type_hints():
     8b5. 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: 107. 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(): 10e4.
     now returns a consistent error message when cadata contains no
     valid certificate.

   - bpo-43607(15): *note urllib: 10e. can now convert Windows paths
     with ‘\\?\’ prefixes into URL paths.

   - bpo-43817(16): Add *note inspect.get_annotations(): a0a, 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(): a0a. can also correctly
     un-stringize stringized annotations.

     *note inspect.signature(): 22e, ‘inspect.from_callable()’, and
     ‘inspect.from_function()’ now call *note inspect.get_annotations():
     a0a. to retrieve annotations.  This means *note
     inspect.signature(): 22e. 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: d5. 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: d5. 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: 98. ‘Server’ class now
     explicitly catches *note SystemExit: f30. 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: a5c,
     *note gzip.GzipFile: 650, and *note lzma.LZMAFile: 1202.  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(): 735. 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: 5dd. raised in *note
     typing.get_type_hints(): 8b5. due to synthetic modules that don’t
     appear in ‘sys.modules’.

   - bpo-43776(30): When *note subprocess.Popen: 4b1. args are provided
     as a string or as *note pathlib.Path: 265, 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(): 2ac.) and builtin assert functions (e.g.
     assert_called_once_with) will unconditionally pass.

   - bpo-43794(37): Add *note ssl.OP_IGNORE_UNEXPECTED_EOF: a2e.
     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: 6b. and *note lzma: 8e. 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: d5. 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: 10a.
     module by adding ‘TypeGuard’.

   - bpo-25264(43): *note os.path.realpath(): 261. now accepts a
     'strict' keyword-only argument.  When set to ‘True’, *note OSError:
     2bf. 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: 481. are now instances of the new classes *note
     typing.ParamSpecArgs: 9bf. and *note typing.ParamSpecKwargs: 9c0,
     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(): 9f6. and *note fileinput.FileInput: 935.

   - 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__: 1b62.
     generation could fail for some *note dataclasses: 33.

   - bpo-43752(50): Fix *note sqlite3: d4. 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: f6. 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(): 35b.

        - ‘activeCount’ => *note threading.active_count(): 35c.

        - ‘Condition.notifyAll’ => *note
          threading.Condition.notify_all(): 356.

        - ‘Event.isSet’ => *note threading.Event.is_set(): 357.

        - ‘Thread.setName’ => *note threading.Thread.name: 29f.

        - ‘thread.getName’ => *note threading.Thread.name: 29f.

        - ‘Thread.isDaemon’ => *note threading.Thread.daemon: 359.

        - ‘Thread.setDaemon’ => *note threading.Thread.daemon: 359.

     Patch by Jelle Zijlstra.

   - bpo-2135(53): Deprecate find_module() and find_loader()
     implementations in importlib and zipimport.

   - bpo-43534(54): *note turtle.textinput(): 1b65. and *note
     turtle.numinput(): 1b66. 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:
     d6a.  OpenSSL does not copy hostflags from 'struct SSL_CTX' to
     'struct SSL'.

   - bpo-8978(57): Improve error message for *note tarfile.open(): 106d.
     when *note lzma: 8e. / *note bz2: 14. are unavailable.  Patch by
     Anthony Sottile.

   - bpo-42967(58): Allow *note bytes: 192. ‘separator’ argument in
     ‘urllib.parse.parse_qs’ and ‘urllib.parse.parse_qsl’ when parsing
     *note str: 169. query strings.  Previously, this raised a
     ‘TypeError’.

   - bpo-43296(59): Improve *note sqlite3: d4. error handling:
     ‘sqlite3_value_blob()’ errors that set ‘SQLITE_NOMEM’ now raise
     *note MemoryError: 1809.  Patch by Erlend E. Aasland.

   - bpo-43312(60): New functions *note
     sysconfig.get_preferred_scheme(): 894. and *note
     sysconfig.get_default_scheme(): 1ac7. are added to query a platform
     for its preferred “user”, “home”, and “prefix” (default) scheme
     names.

   - bpo-43265(61): Improve *note sqlite3.Connection.backup(): d67.
     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: e1.

   - bpo-41282(63): ‘distutils.sysconfig’ has been merged to *note
     sysconfig: e1.

   - 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: b3. now has support for *note
     dataclasses.dataclass: 4db.  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(): 8b5. 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():
     2f0. without running event loop.  Emit deprecation warning for
     *note asyncio: b. functions which implicitly create a *note Future:
     dba. or *note Task: 1c7. objects if there is no running event loop
     and no explicit 'loop' argument is passed: *note ensure_future():
     e65, *note wrap_future(): 1b67, *note gather(): 808, *note
     shield(): c59, *note as_completed(): 4c0. and constructors of *note
     Future: dba, *note Task: 1c7, *note StreamReader: 1b68,
     ‘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: 14. / *note lzma: 8e. / *note zlib: 139. 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(): a33.
     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():
     19a9.  Patch by Claudiu Popa.

   - bpo-40849(76): Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag

   - bpo-35114(77): *note ssl.RAND_status(): 1b69. now returns a boolean
     value (as documented) instead of ‘1’ or ‘0’.

   - bpo-39906(78): *note pathlib.Path.stat(): a1a. and *note chmod():
     a1b. now accept a 'follow_symlinks' keyword-only argument for
     consistency with corresponding functions in the *note os: a5.
     module.

   - bpo-39899(79): *note os.path.expanduser(): bff. 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(): 1037. and *note home(): 1038. now
     consistently raise *note RuntimeError: 243. exception when a home
     directory cannot be resolved.  Previously a *note KeyError: 5dd.
     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(): a33.

   - 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: 1996. type: embedded null characters would cause
     a *note ValueError: 2ea. 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<34>,  Next: Testes<35>,  Prev: Biblioteca<40>,  Up: Python 3 10 0 beta 1

1.24.40.4 Documentação
......................

   - bpo-43987(1): Add “Annotations Best Practices” document as a new
     HOWTO.

   - bpo-43977(2): Document the new *note Py_TPFLAGS_MAPPING: 1b47. and
     *note Py_TPFLAGS_SEQUENCE: 1b48. 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<35>,  Next: Construção<38>,  Prev: Documentação<34>,  Up: Python 3 10 0 beta 1

1.24.40.5 Testes
................

   - bpo-43961(1): Fix test_logging.test_namer_rotator_inheritance() on
     Windows: use *note os.replace(): 12ee. rather than *note
     os.rename(): 12ed.  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(): a41.  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<38>,  Next: Windows<35>,  Prev: Testes<35>,  Up: Python 3 10 0 beta 1

1.24.40.6 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<38>,  Up: Python 3 10 0 beta 1

1.24.40.7 Windows
.................

   - bpo-35306(1): Adds additional arguments to *note os.startfile():
     1b6e. function.

   - bpo-43538(2): Avoid raising errors from *note
     pathlib.Path.exists(): c01. when passed an invalid filename.

   - bpo-38822(3): Fixed *note os.stat(): 26c. 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(): bf9. and *note os.path.isdir(): bfb.

   - bpo-26227(4): Fixed decoding of host names in *note
     socket.gethostbyaddr(): 1b6f. and *note socket.gethostbyname_ex():
     1b70.

   - 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<19>,  Prev: Windows<35>,  Up: Python 3 10 0 beta 1

1.24.40.8 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<19>,  Next: API C<36>,  Prev: macOS<27>,  Up: Python 3 10 0 beta 1

1.24.40.9 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<36>,  Prev: IDLE<19>,  Up: Python 3 10 0 beta 1

1.24.40.10 API C
................

   - bpo-43916(1): Add a new *note Py_TPFLAGS_DISALLOW_INSTANTIATION:
     797. 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(): a9a, *note PyGC_Disable():
     a9b, *note PyGC_IsEnabled(): a9c, corresponding to the functions in
     the *note gc: 64. module.

   - bpo-43908(5): Introduce *note Py_TPFLAGS_IMMUTABLETYPE: 3cc. flag
     for immutable type objects, and modify *note PyType_Ready(): 975.
     to set it for static types.  Patch by Erlend E. Aasland.

   - bpo-43795(6): *note PyMem_Calloc(): 10a3. is now available in the
     limited C API (‘Py_LIMITED_API’).

   - bpo-43868(7): *note PyOS_ReadlineFunctionPointer(): 79a. 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): a96. 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(): a97, *note Py_IsTrue(): a98, *note
     Py_IsFalse(): a99. 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.24.41 Python 3.10.0 alpha 7
-----------------------------

'Data de lançamento: 2021-04-05'

* Menu:

* Segurança: Segurança<29>.
* Núcleo e embutidos: Núcleo e embutidos<40>.
* Biblioteca: Biblioteca<41>.
* Documentação: Documentação<35>.
* Testes: Testes<36>.
* Construção: Construção<39>.
* Windows: Windows<36>.
* IDLE: IDLE<20>.
* API C: API C<37>.


File: python.info,  Node: Segurança<29>,  Next: Núcleo e embutidos<40>,  Up: Python 3 10 0 alpha 7

1.24.41.1 Segurança
...................

   - bpo-42988(1): CVE 2021-3426(2): Remove the ‘getfile’ feature of the
     *note pydoc: ba. 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: 62. 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: aec. instances to ‘True’ to re-enable it.

   - bpo-43439(4): Add audit hooks for *note gc.get_objects(): 9fa,
     *note gc.get_referrers(): 9fb. and *note gc.get_referents(): 9fc.
     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<40>,  Next: Biblioteca<41>,  Prev: Segurança<29>,  Up: Python 3 10 0 alpha 7

1.24.41.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.

   - bpo-40645(5): Fix reference leak in the ‘_hashopenssl’ extension.
     Patch by Pablo Galindo.

   - bpo-42134(6): Calls to find_module() by the import system now raise
     ImportWarning.

   - bpo-41064(7): Improve the syntax error for invalid usage of double
     starred elements (‘**’) in f-strings.  Patch by Pablo Galindo.

   - bpo-43575(8): Speed up calls to ‘map()’ by using the PEP 590(9)
     ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-42137(10): The import system now prefers using ‘__spec__’ for
     ‘ModuleType.__repr__’ over ‘module_repr()’.

   - bpo-43452(11): Added micro-optimizations to ‘_PyType_Lookup()’ to
     improve cache lookup performance in the common case of cache hits.

   - bpo-43555(12): Report the column offset for *note SyntaxError: 18e.
     for invalid line continuation characters.  Patch by Pablo Galindo.

   - bpo-43517(13): Fix misdetection of circular imports when using
     ‘from pkg.mod import attr’, which caused false positives in
     non-trivial multi-threaded code.

   - bpo-43497(14): Emit SyntaxWarnings for assertions with tuple
     constants, this is a regression introduced in python3.7

   - bpo-39316(15): 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(16): Python no longer fails at startup with a fatal error
     if a command line argument contains an invalid Unicode character.
     The *note Py_DecodeLocale(): db4. function now escapes byte
     sequences which would be decoded as Unicode characters outside the
     [U+0000; U+10ffff] range.

   - bpo-43410(17): 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(18): Fix a possible race condition where
     ‘PyErr_CheckSignals’ tries to execute a non-Python signal handler.

   - bpo-42128(19): Add ‘__match_args__’ to *note struct sequence
     objects: 13bb.  Patch by Pablo Galindo.

   - bpo-43390(20): 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(21): Speed up calls to ‘filter()’ by using the PEP
     590(22) ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-37448(23): 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(24): 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__(): 14fc. is always called in
     with statements, even for interrupts.

   ---------- 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

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40645

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42134

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41064

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43575

   (9) https://peps.python.org/pep-0590/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42137

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43452

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43555

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43517

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43497

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39316

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35883

   (17) https://bugs.python.org/issue?@action=redirect&bpo=43410

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43406

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (20) https://bugs.python.org/issue?@action=redirect&bpo=43390

   (21) https://bugs.python.org/issue?@action=redirect&bpo=43287

   (22) https://peps.python.org/pep-0590/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=37448

   (24) https://bugs.python.org/issue?@action=redirect&bpo=29988


File: python.info,  Node: Biblioteca<41>,  Next: Documentação<35>,  Prev: Núcleo e embutidos<40>,  Up: Python 3 10 0 alpha 7

1.24.41.3 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: c41. no longer
     ignores query and fragment in the URL of the server.

   - bpo-31956(3): The *note index(): 9d7. method of *note array.array:
     4b8. 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: 354.
     debug callback with *note ssl.SSLContext.sni_callback(): 1b78.

   - 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: 93.

   - bpo-40645(13): The *note hmac: 6e. 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: 9b5. 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(): a1f. 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(): 1b79. 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:
     a38.  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(): 1430. 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: 73. 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:
     212. 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: d4. error handling: If
     ‘sqlite3_column_text()’ and ‘sqlite3_column_blob()’ set
     ‘SQLITE_NOMEM’, *note MemoryError: 1809. 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: d4.  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(): 18a3. 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(): 1b7a. 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(): 1049. 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: aa. 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: aa.’s interactive mode.

   - bpo-40701(43): When the *note tempfile.tempdir: 1b7b. 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():
     1b7c. and *note tempfile.gettempdirb(): 1b7d. functions 'always'
     return ‘str’ and ‘bytes’ respectively.

   - bpo-39342(44): Expose ‘X509_V_FLAG_ALLOW_PROXY_CERTS’ as *note
     VERIFY_ALLOW_PROXY_CERTS: 1b7e. 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<35>,  Next: Testes<36>,  Prev: Biblioteca<41>,  Up: Python 3 10 0 alpha 7

1.24.41.4 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():
     555, *note time.perf_counter(): c6e, *note time.process_time():
     c6f, or *note time.thread_time(): b26. 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<36>,  Next: Construção<39>,  Prev: Documentação<35>,  Up: Python 3 10 0 alpha 7

1.24.41.5 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<39>,  Next: Windows<36>,  Prev: Testes<36>,  Up: Python 3 10 0 alpha 7

1.24.41.6 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<20>,  Prev: Construção<39>,  Up: Python 3 10 0 alpha 7

1.24.41.7 Windows
.................

   - bpo-43440(1): Build *note sqlite3: d4. 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<20>,  Next: API C<37>,  Prev: Windows<36>,  Up: Python 3 10 0 alpha 7

1.24.41.8 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<37>,  Prev: IDLE<20>,  Up: Python 3 10 0 alpha 7

1.24.41.9 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(): 784. and *note Py_DECREF(): 785.
     functions are now implemented as opaque function calls, rather than
     accessing directly the *note PyObject.ob_refcnt: a95. 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: 5d5.
     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: 9. 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: de. 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.24.42 Python 3.10.0 alpha 6
-----------------------------

'Data de lançamento: 2021-03-01'

* Menu:

* Segurança: Segurança<30>.
* Núcleo e embutidos: Núcleo e embutidos<41>.
* Biblioteca: Biblioteca<42>.
* Documentação: Documentação<36>.
* Testes: Testes<37>.
* Construção: Construção<40>.
* Windows: Windows<37>.
* macOS: macOS<28>.
* IDLE: IDLE<21>.
* API C: API C<38>.


File: python.info,  Node: Segurança<30>,  Next: Núcleo e embutidos<41>,  Up: Python 3 10 0 alpha 6

1.24.42.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<41>,  Next: Biblioteca<42>,  Prev: Segurança<30>,  Up: Python 3 10 0 alpha 6

1.24.42.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(): a93. function to
     the C-API to check if an object is an instance of *note set: 184.
     but not an instance of a subtype.  Patch by Pablo Galindo.

   - bpo-42990(5): The *note types.FunctionType: a79. 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(): 49d. and *note exec():
     49c. 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: 18e. message
     for missing comma in literals.  Patch by Pablo Galindo.

   - bpo-42819(9): *note readline: bf.: 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.

   - bpo-42808(10): Simple calls to ‘type(object)’ are now faster due to
     the ‘vectorcall’ calling convention.  Patch by Dennis Sweeney.

   - bpo-42217(11): Make the compiler merges same co_code and
     co_linetable objects in a module like already did for co_consts.

   - bpo-41972(12): 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(13): Implement PEP 634(14) (structural pattern matching).
     Patch by Brandt Bucher.

   - bpo-40692(15): In the *note concurrent.futures.ProcessPoolExecutor:
     1d6, validate that ‘multiprocess.synchronize()’ is available on a
     given platform and rely on that check in the *note
     concurrent.futures: 24. test suite so we can run tests that are
     unrelated to ‘ProcessPoolExecutor’ on those platforms.

   - bpo-38302(16): If *note object.__ipow__(): 9c9. returns *note
     NotImplemented: 1a2, the operator will correctly fall back to *note
     object.__pow__(): 9ca. and *note object.__rpow__(): 1a5. as
     expected.

   ---------- 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

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42819

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42808

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42217

   (12) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (14) https://peps.python.org/pep-0634/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40692

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38302


File: python.info,  Node: Biblioteca<42>,  Next: Documentação<36>,  Prev: Núcleo e embutidos<41>,  Up: Python 3 10 0 alpha 6

1.24.42.3 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(): a45. and *note format_exception(): a43.

   - 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: d4.
     aggregate function context when no rows match an aggregate query.
     Patch by Erlend E. Aasland.

   - bpo-43251(6): Improve *note sqlite3: d4. error handling:
     ‘sqlite3_column_name()’ failures now result in *note MemoryError:
     1809.  Patch by Erlend E. Aasland.

   - bpo-40956(7): Fix segfault in *note sqlite3.Connection.backup():
     d67. 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(): 1b89. and *note
     readline.get_endidx(): 1b8a. behavior based on libreadline vs
     libedit use.

   - bpo-43163(9): Fix a bug in *note codeop: 1d. 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: 104. 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: a11, *note O_FSYNC: a12,
     *note O_SYMLINK: a13. and *note O_NOFOLLOW_ANY: a14. for macOS.
     Patch by Donghee Na.

   - bpo-42960(14): Adds *note resource.RLIMIT_KQUEUES: 1b8b. constant
     from FreeBSD to the *note resource: c1. module.

   - bpo-42151(15): Make the pure Python implementation of *note
     xml.etree.ElementTree: 12b. 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<36>,  Next: Testes<37>,  Prev: Biblioteca<42>,  Up: Python 3 10 0 alpha 6

1.24.42.4 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<37>,  Next: Construção<40>,  Prev: Documentação<36>,  Up: Python 3 10 0 alpha 6

1.24.42.5 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<40>,  Next: Windows<37>,  Prev: Testes<37>,  Up: Python 3 10 0 alpha 6

1.24.42.6 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<40>,  Up: Python 3 10 0 alpha 6

1.24.42.7 Windows
.................

   - bpo-43155(1): *note PyCMethod_New(): 1b90. 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<21>,  Prev: Windows<37>,  Up: Python 3 10 0 alpha 6

1.24.42.8 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<21>,  Next: API C<38>,  Prev: macOS<28>,  Up: Python 3 10 0 alpha 6

1.24.42.9 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<38>,  Prev: IDLE<21>,  Up: Python 3 10 0 alpha 6

1.24.42.10 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(): 1b94. 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: 97c.

   - 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: 97c.

   - bpo-40170(5): *note PyExceptionClass_Name(): c4f. is now always
     declared as a function, in order to hide implementation details.
     The macro accessed *note PyTypeObject.tp_name: 1b95. directly.
     Patch by Erlend E. Aasland.

   - bpo-43239(6): The *note PyCFunction_New(): 1b96. function is now
     exported in the ABI when compiled with ‘-fvisibility=hidden’.

   - bpo-40170(7): *note PyIter_Check(): 1b97. is now always declared as
     a function, in order to hide implementation details.  The macro
     accessed *note PyTypeObject.tp_iternext: 16de. directly.  Patch by
     Erlend E. Aasland.

   - bpo-40170(8): Convert *note PyDescr_IsData(): 1b98. macro to a
     function to hide implementation details: The macro accessed *note
     PyTypeObject.tp_descr_set: 1b99. directly.  Patch by Erlend E.
     Aasland.

   - bpo-43181(9): Convert *note PyObject_TypeCheck(): 1b9a. 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.24.43 Python 3.10.0 alpha 5
-----------------------------

'Data de lançamento: 2021-02-02'

* Menu:

* Segurança: Segurança<31>.
* Núcleo e embutidos: Núcleo e embutidos<42>.
* Biblioteca: Biblioteca<43>.
* Documentação: Documentação<37>.
* Testes: Testes<38>.
* Construção: Construção<41>.
* Windows: Windows<38>.
* macOS: macOS<29>.
* IDLE: IDLE<22>.
* API C: API C<39>.


File: python.info,  Node: Segurança<31>,  Next: Núcleo e embutidos<42>,  Up: Python 3 10 0 alpha 5

1.24.43.1 Segurança
...................

   - bpo-42938(1): Avoid static buffers when computing the repr of *note
     ctypes.c_double: 1b9d. and *note ctypes.c_longdouble: 1b9e. values.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42938


File: python.info,  Node: Núcleo e embutidos<42>,  Next: Biblioteca<43>,  Prev: Segurança<31>,  Up: Python 3 10 0 alpha 5

1.24.43.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(): b70. calls in the
     compiler with regular *note SystemError: 78a. 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(): 45d. / *note
     Py_Finalize(): 45c. 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: 18e. in some multi-line expressions.

   - bpo-42823(12): frame.f_lineno is correct even if frame.f_trace is
     set to True

   - bpo-37324(13): Remove deprecated aliases to *note Classes Base
     Abstratas de Coleções: a6e. from the *note collections: 1e. module.

   - bpo-41994(14): Fixed possible leak in ‘import’ when ‘sys.modules’
     is not a ‘dict’.

   - bpo-27772(15): 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=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

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37324

   (14) https://bugs.python.org/issue?@action=redirect&bpo=41994

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27772


File: python.info,  Node: Biblioteca<43>,  Next: Documentação<37>,  Prev: Núcleo e embutidos<42>,  Up: Python 3 10 0 alpha 5

1.24.43.3 Biblioteca
....................

   - bpo-43108(1): Fixed a reference leak in the *note curses: 2f.
     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: 101. by
     20-30%.  Patch by Anthony Sottile.

   - bpo-42323(5): Fix *note math.nextafter(): 6b5. for NaN on AIX.

   - bpo-42955(6): Add *note sys.stdlib_module_names: a38, 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: 55c.’s new ‘compact’
     param in *note TestResult: 1363. 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: 55c. 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(): b70. function and the
     *note faulthandler: 5c. module now dump the list of extension
     modules on a fatal error.

   - bpo-42848(13): Removed recursion from *note TracebackException:
     55c. 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: 2b. and *note profile:
     b4. to catch *note BrokenPipeError: 1252.

   - 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: 2f. module if available.

   - bpo-33289(34): Correct call to *note tkinter.colorchooser: f7. 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<37>,  Next: Testes<38>,  Prev: Biblioteca<43>,  Up: Python 3 10 0 alpha 5

1.24.43.4 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<38>,  Next: Construção<41>,  Prev: Documentação<37>,  Up: Python 3 10 0 alpha 5

1.24.43.5 Testes
................

   - bpo-40823(1): Use ‘unittest.TestLoader().loadTestsFromTestCase()’
     instead of ‘unittest.makeSuite()’ in *note sqlite3: d4. tests.
     Patch by Erlend E. Aasland.

   - bpo-40810(2): In *note sqlite3: d4, 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<41>,  Next: Windows<38>,  Prev: Testes<38>,  Up: Python 3 10 0 alpha 5

1.24.43.6 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: 59.
     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<41>,  Up: Python 3 10 0 alpha 5

1.24.43.7 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<22>,  Prev: Windows<38>,  Up: Python 3 10 0 alpha 5

1.24.43.8 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<22>,  Next: API C<39>,  Prev: macOS<29>,  Up: Python 3 10 0 alpha 5

1.24.43.9 IDLE
..............

   - bpo-43008(1): Make IDLE invoke *note sys.excepthook(): a02. 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<39>,  Prev: IDLE<22>,  Up: Python 3 10 0 alpha 5

1.24.43.10 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(): 1ba8. 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.24.44 Python 3.10.0 alpha 4
-----------------------------

'Data de lançamento: 2021-01-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<43>.
* Biblioteca: Biblioteca<44>.
* Documentação: Documentação<38>.
* Testes: Testes<39>.
* Construção: Construção<42>.
* macOS: macOS<30>.
* Ferramentas/Demos: Ferramentas/Demos<27>.
* API C: API C<40>.


File: python.info,  Node: Núcleo e embutidos<43>,  Next: Biblioteca<44>,  Up: Python 3 10 0 alpha 4

1.24.44.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: 9.
     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: 1a8. 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

   - bpo-42639(11): Make the *note atexit: d. module state
     per-interpreter.  It is now safe have more than one *note atexit:
     d. module instance.  Patch by Donghee Na and Victor Stinner.

   - bpo-32381(12): Fix encoding name when running a ‘.pyc’ file on
     Windows: *note PyRun_SimpleFileExFlags(): 1bab. now uses the
     correct encoding to decode the filename.

   - bpo-42195(13): The ‘__args__’ of the parameterized generics for
     *note typing.Callable: 9be. and *note collections.abc.Callable:
     9e1. are now consistent.  The ‘__args__’ for *note
     collections.abc.Callable: 9e1. are now flattened while *note
     typing.Callable: 9be.’s have not changed.  To allow this change,
     *note types.GenericAlias: 9e2. 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(14).  Patch by Ken Jin.

   - bpo-40137(15): Convert functools module to use *note
     PyType_FromModuleAndSpec(): 768.

   - bpo-40077(16): Convert *note array: 8. to use heap types, and
     establish module state for these.

   - bpo-42008(17): Fix _random.Random() seeding.

   - bpo-1635741(18): Port the ‘pyexpat’ extension module to multi-phase
     initialization ( PEP 489(19)).

   - bpo-40521(20): Make the Unicode dictionary of interned strings
     compatible with subinterpreters.  Patch by Victor Stinner.

   - bpo-39465(21): 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=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

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42639

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32381

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42195

   (14) https://peps.python.org/pep-0612/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40137

   (16) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42008

   (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=40521

   (21) https://bugs.python.org/issue?@action=redirect&bpo=39465


File: python.info,  Node: Biblioteca<44>,  Next: Documentação<38>,  Prev: Núcleo e embutidos<43>,  Up: Python 3 10 0 alpha 4

1.24.44.2 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: 1bad.  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(): 2ab. and *note
     typing.get_origin(): 2aa. now support PEP 604(7) union types and
     PEP 612(8) additions to ‘Callable’.

   - bpo-42655(9): *note subprocess: dc. '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: fe.), message boxes (*note
     tkinter.messagebox: fc.) or color choose dialog (*note
     tkinter.colorchooser: f7.) 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(): 1bae.

   - bpo-35728(14): Added a root parameter to *note
     tkinter.font.nametofont(): 1baf.

   - bpo-15303(15): *note tkinter: f6. supports now widgets with boolean
     value False.

   - bpo-42681(16): Fixed range checks for color and pair numbers in
     *note curses: 2f.

   - bpo-42685(17): Improved placing of simple query windows in Tkinter
     (such as *note tkinter.simpledialog.askinteger(): 1bb0.).  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: f6. functions and constructors which
     need a default root window raise now *note RuntimeError: 243. with
     descriptive message instead of obscure *note AttributeError: 5e4.
     or *note NameError: 44f. 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: 501, rather than logging
     them directly into *note sys.stderr: b29. 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(): a74. 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: 10a.  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(): e06. adds line number
     information (if available) in error message for malformed nodes.

   - bpo-42470(39): *note random.sample(): 942. 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: 104. and
     the interpreter in formatting of SyntaxError with lineno not set
     (*note traceback: 104. was changed to match interpreter).

   - bpo-42393(43): Raise *note OverflowError: a77. instead of silent
     truncation in *note socket.ntohs(): a76. and *note socket.htons():
     a75.  Silent truncation was deprecated in Python 3.7.  Patch by
     Erlend E. Aasland

   - bpo-42222(44): Harmonized *note random.randrange(): a61. argument
     handling to match *note range(): b33.

        * The integer test and conversion in ‘randrange()’ now uses
          *note operator.index(): 1bb1.

        * 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: 330. 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(): 22e. and *note
     inspect.Signature.from_callable(): 937.

   - 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(): 102f. 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: f.  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<38>,  Next: Testes<39>,  Prev: Biblioteca<44>,  Up: Python 3 10 0 alpha 4

1.24.44.3 Documentação
......................

   - bpo-17140(1): Add documentation for the *note
     multiprocessing.pool.ThreadPool: 1bb3. 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<39>,  Next: Construção<42>,  Prev: Documentação<38>,  Up: Python 3 10 0 alpha 4

1.24.44.4 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<42>,  Next: macOS<30>,  Prev: Testes<39>,  Up: Python 3 10 0 alpha 4

1.24.44.5 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<27>,  Prev: Construção<42>,  Up: Python 3 10 0 alpha 4

1.24.44.6 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<27>,  Next: API C<40>,  Prev: macOS<30>,  Up: Python 3 10 0 alpha 4

1.24.44.7 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<40>,  Prev: Ferramentas/Demos<27>,  Up: Python 3 10 0 alpha 4

1.24.44.8 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: c1. 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.24.45 Python 3.10.0 alpha 3
-----------------------------

'Data de lançamento: 2020-12-07'

* Menu:

* Segurança: Segurança<32>.
* Núcleo e embutidos: Núcleo e embutidos<44>.
* Biblioteca: Biblioteca<45>.
* Documentação: Documentação<39>.
* Testes: Testes<40>.
* Construção: Construção<43>.
* Windows: Windows<39>.
* macOS: macOS<31>.
* IDLE: IDLE<23>.
* Ferramentas/Demos: Ferramentas/Demos<28>.
* API C: API C<41>.


File: python.info,  Node: Segurança<32>,  Next: Núcleo e embutidos<44>,  Up: Python 3 10 0 alpha 3

1.24.45.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<44>,  Next: Biblioteca<45>,  Prev: Segurança<32>,  Up: Python 3 10 0 alpha 3

1.24.45.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: 1bbc.:

        - *note collections.OrderedDict.items(): 7e8.

        - *note dict.items(): 9c8.

        - *note enumerate(): 166f.

        - *note functools.reduce(): 219.

        - *note itertools.combinations(): 150d.

        - *note itertools.combinations_with_replacement(): 147d.

        - *note itertools.permutations(): 1bbd.

        - *note itertools.product(): 150e.

        - *note itertools.zip_longest(): 149a.

        - *note zip(): 1a0.

     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: 7ee. is specified.  Speed up
     comparison of bytarray objects with non-buffer object.

   - bpo-1635741(6): Port the ‘_warnings’ extension module to the
     multi-phase initialization API ( PEP 489(7)).  Patch by Victor
     Stinner.

   - bpo-41686(8): 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: ab1. equals to 0, or
     ‘Py_InitializeEx(0)’).

   - bpo-42381(9): Allow assignment expressions in set literals and set
     comprehensions as per PEP 572.  Patch by Pablo Galindo.

   - bpo-42202(10): Change function parameters annotations internal
     representation to tuple of strings.  Patch provided by Yurii
     Karabas.

   - bpo-42374(11): Fix a regression introduced by the new parser, where
     an unparenthesized walrus operator was not allowed within generator
     expressions.

   - bpo-42316(12): Allow an unparenthesized walrus in subscript
     indexes.

   - bpo-42349(13): 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(14): 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(15): *note types.GenericAlias: 9e2. objects can now be
     the targets of weakrefs.

   - bpo-42282(16): 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(17): 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.

   - bpo-40077(18): Convert *note queue: bb. to use heap types.

   - bpo-42246(19): Improved accuracy of line tracing events and
     f_lineno attribute of Frame objects.  See PEP 626 for details.

   - bpo-40077(20): Convert *note mmap: 94. to use heap types.

   - bpo-42233(21): Allow ‘GenericAlias’ objects to use *note union type
     expressions: 9bb.  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(22).)

   - bpo-26131(23): The import system triggers a ‘ImportWarning’ when it
     falls back to using ‘load_module()’.

   ---------- 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

   (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=41686

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42381

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42202

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42374

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42316

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42349

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42296

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42332

   (16) https://bugs.python.org/issue?@action=redirect&bpo=42282

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42266

   (18) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42246

   (20) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (21) https://bugs.python.org/issue?@action=redirect&bpo=42233

   (22) https://bugs.python.org/issue?@action=redirect&bpo=42233

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26131


File: python.info,  Node: Biblioteca<45>,  Next: Documentação<39>,  Prev: Núcleo e embutidos<44>,  Up: Python 3 10 0 alpha 3

1.24.45.3 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: 2bf.
     instead of *note IndexError: 1723. 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(): 174c.

   - 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: 55c. 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(): a1d.
     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: 1136. respect
     subclassing.  Now the *note filecmp.dircmp.subdirs: 1bbf. behaves
     as expected when subclassing dircmp.

   - bpo-42413(19): The exception *note socket.timeout: a2b. is now an
     alias of *note TimeoutError: a2c.

   - 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: 7b. external bootstrap
     code: ‘importlib._bootstrap_external’ now uses regular imports to
     import builtin modules.  When it is imported, the builtin *note
     __import__(): ac7. function is already fully working and so can be
     used to import builtin modules like *note sys: df.  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(): 556, *note time.perf_counter():
     c6e. and *note time.monotonic(): 555. 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(): 1bc0.  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(): c6e. on Windows and *note
     time.monotonic(): 555. 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():
     cd1. and *note time.monotonic_ns(): cd0. added in Python 3.7 to
     avoid this precision loss.

   - bpo-42318(31): Fixed support of non-BMP characters in *note
     tkinter: f6. on macOS.

   - bpo-42350(32): Fix the *note threading.Thread: 176. 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__: a40. to allow
     retrieving the original value of *note threading.excepthook(): a41.
     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:
     169.  It is now deprecated, scheduled for removal in Python 3.12.

   - bpo-42251(40): Added *note threading.gettrace(): a3c. and *note
     threading.getprofile(): a3d. to retrieve the functions set by *note
     threading.settrace(): a3e. and *note threading.setprofile(): a3f.
     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(): 1b35.
     function now returns ‘'UTF-8'’ rather than the device encoding if
     the *note Python UTF-8 Mode: 85b. 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(): a43, *note
     traceback.format_exception_only(): a44, and *note
     traceback.print_exception(): a45. 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: d4. 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(): 1bc1.
     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(): a10. in
     the *note os: a5. module.  Patch by Pablo Galindo

   - bpo-34215(55): Clarify the error message for *note
     asyncio.IncompleteReadError: 1bc2. when ‘expected’ is ‘None’.

   - bpo-41543(56): Add async context manager support for
     contextlib.nullcontext.

   - bpo-21041(57): *note pathlib.PurePath.parents: a17. 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: 111. and *note http.client:
     73. now send ‘http/1.1’ ALPN extension during TLS handshake when no
     custom context is supplied.

   - bpo-41001(61): Add *note os.eventfd(): a0f. 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: b9.’s
     ‘Function’ objects.  Patch by Batuhan Taskaya

   - bpo-35498(65): Add slice support to *note pathlib.PurePath.parents:
     a17.

   ---------- 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<39>,  Next: Testes<40>,  Prev: Biblioteca<45>,  Up: Python 3 10 0 alpha 3

1.24.45.4 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<40>,  Next: Construção<43>,  Prev: Documentação<39>,  Up: Python 3 10 0 alpha 3

1.24.45.5 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<43>,  Next: Windows<39>,  Prev: Testes<40>,  Up: Python 3 10 0 alpha 3

1.24.45.6 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<43>,  Up: Python 3 10 0 alpha 3

1.24.45.7 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<23>,  Prev: Windows<39>,  Up: Python 3 10 0 alpha 3

1.24.45.8 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<23>,  Next: Ferramentas/Demos<28>,  Prev: macOS<31>,  Up: Python 3 10 0 alpha 3

1.24.45.9 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<28>,  Next: API C<41>,  Prev: IDLE<23>,  Up: Python 3 10 0 alpha 3

1.24.45.10 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<41>,  Prev: Ferramentas/Demos<28>,  Up: Python 3 10 0 alpha 3

1.24.45.11 API C
................

   - bpo-42423(1): The *note PyType_FromSpecWithBases(): 793. and *note
     PyType_FromModuleAndSpec(): 768. functions now accept a single
     class as the 'bases' argument.

   - bpo-1635741(2): Port *note select: c6. 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: 64. 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(): 3c6. and *note Py_SIZE():
     97a. 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: de. extension module to
     multiphase initialization ( PEP 489(18))

   - bpo-1635741(19): Port *note grp: 6a. and *note pwd: b7. 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: ab1.  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(): 3e0, *note Py_GetPrefix(): 3e2,
     *note Py_GetExecPrefix(): 3e6, *note Py_GetProgramFullPath(): 3e9,
     *note Py_GetPythonHome(): 3ec. and *note Py_GetProgramName(): 3eb.
     functions now return ‘NULL’ if called before *note Py_Initialize():
     45d. (before Python is initialized).  Use the new *note Python
     Initialization Configuration API: 63a. to get the *note Python Path
     Configuration.: aa0.  Patch by Victor Stinner.

   - bpo-42260(28): The *note PyConfig_Read(): 988. function now only
     parses *note PyConfig.argv: 3ee. arguments once: *note
     PyConfig.parse_argv: 1bcb. is set to ‘2’ after arguments are
     parsed.  Since Python arguments are strippped from *note
     PyConfig.argv: 3ee, parsing arguments twice would parse the
     application options as Python options.

   - bpo-42262(29): Added *note Py_NewRef(): a90. and *note
     Py_XNewRef(): a91. functions to increment the reference count of an
     object and return the object.  Patch by Victor Stinner.

   - bpo-42260(30): When *note Py_Initialize(): 45d. is called twice,
     the second call now updates more *note sys: df. attributes for the
     configuration, rather than only *note sys.argv: 1460.  Patch by
     Victor Stinner.

   - bpo-41832(31): The *note PyType_FromModuleAndSpec(): 768. function
     now accepts NULL ‘tp_doc’ slot.

   - bpo-1635741(32): Added *note PyModule_AddObjectRef(): 5fe.
     function: similar to *note PyModule_AddObject(): 5ff. but don’t
     steal a reference to the value on success.  Patch by Victor
     Stinner.

   - bpo-42171(33): The *note METH_FASTCALL: 18e2. calling convention is
     added to the limited API. The functions *note PyModule_AddType():
     b62, *note PyType_FromModuleAndSpec(): 768, *note
     PyType_GetModule(): b5c. and *note PyType_GetModuleState(): b5d.
     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(): a92. can now accept static
     types.

   - bpo-30459(36): *note PyList_SET_ITEM(): 623, *note
     PyTuple_SET_ITEM(): 622. and *note PyCell_SET(): aa1. 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.24.46 Python 3.10.0 alpha 2
-----------------------------

'Data de lançamento: 2020-11-03'

* Menu:

* Segurança: Segurança<33>.
* Núcleo e embutidos: Núcleo e embutidos<45>.
* Biblioteca: Biblioteca<46>.
* Documentação: Documentação<40>.
* Testes: Testes<41>.
* Construção: Construção<44>.
* Windows: Windows<40>.
* macOS: macOS<32>.
* IDLE: IDLE<24>.
* API C: API C<42>.


File: python.info,  Node: Segurança<33>,  Next: Núcleo e embutidos<45>,  Up: Python 3 10 0 alpha 2

1.24.46.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: b0. 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<45>,  Next: Biblioteca<46>,  Prev: Segurança<33>,  Up: Python 3 10 0 alpha 2

1.24.46.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: 9. 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: 18e. 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: 197. class.
     They always raised a *note TypeError: 198.

   - bpo-41902(16): Micro optimization when compute *note sq_item: 1bcf.
     and *note mp_subscript: 1bd0. of *note range: b33.  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.

   - bpo-41435(19): 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.

   - bpo-38605(20): Enable ‘from __future__ import annotations’ ( PEP
     563(21)) by default.  The values found in *note __annotations__:
     455. dicts are now strings, for example ‘{"x": "int"}’ instead of
     ‘{"x": int}’.

   ---------- 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

   (19) https://bugs.python.org/issue?@action=redirect&bpo=41435

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38605

   (21) https://peps.python.org/pep-0563/


File: python.info,  Node: Biblioteca<46>,  Next: Documentação<40>,  Prev: Núcleo e embutidos<45>,  Up: Python 3 10 0 alpha 2

1.24.46.3 Biblioteca
....................

   - bpo-35455(1): On Solaris, *note thread_time(): b26. 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(): 1c1. of *note typing: 10a. types
     containing *note Generic Alias Types: 8b6. 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: 1b42. class now keeps
     a reference to the builtin *note open(): 314. 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: 10b. 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(): 4b1. in
     case an uid (gid) specified in ‘user’ (‘group’, ‘extra_groups’)
     overflows ‘uid_t’ (‘gid_t’).

   - bpo-42103(9): *note InvalidFileException: 1bd2. and *note
     RecursionError: f5c. 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: 1fa.
     subclasses.  Patch by Dean Inwood.

   - bpo-19270(16): *note sched.scheduler.cancel(): 1bd3. 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(): 16b5. 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(): 4b1. 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: d4. 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(): f39. 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: 9c2. 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(): 9f3. now
     ignores non-ASCII characters.

   - bpo-41747(31): Ensure all methods that generated from *note
     dataclasses.dataclass(): 4db. 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(): 6d0. now ignores empty entries
     in ‘PATHEXT’ instead of treating them as a match.

   - bpo-40492(38): Fix ‘--outfile’ for *note cProfile: 2b. / *note
     profile: b4. 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: c8. module now uses *note
     pickle.DEFAULT_PROTOCOL: a25. by default instead of *note pickle:
     ab. 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: 74. 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<40>,  Next: Testes<41>,  Prev: Biblioteca<46>,  Up: Python 3 10 0 alpha 2

1.24.46.4 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: 1bd5. and *note types: 1bd6. 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: 8b6. and *note
     types.GenericAlias: 9e2.  Also added an entry in glossary for *note
     generic types: 1a1.

   - 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<41>,  Next: Construção<44>,  Prev: Documentação<40>,  Up: Python 3 10 0 alpha 2

1.24.46.5 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<44>,  Next: Windows<40>,  Prev: Testes<41>,  Up: Python 3 10 0 alpha 2

1.24.46.6 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<44>,  Up: Python 3 10 0 alpha 2

1.24.46.7 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<24>,  Prev: Windows<40>,  Up: Python 3 10 0 alpha 2

1.24.46.8 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<24>,  Next: API C<42>,  Prev: macOS<32>,  Up: Python 3 10 0 alpha 2

1.24.46.9 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<42>,  Prev: IDLE<24>,  Up: Python 3 10 0 alpha 2

1.24.46.10 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: 16c5.’s lifetime is
     managed through the ‘self’ argument of a *note PyCFunction: 1666.

   - bpo-40423(3): The *note subprocess: dc. 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(): 1bdd. 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.24.47 Python 3.10.0 alpha 1
-----------------------------

'Data de lançamento: 2020-10-05'

* Menu:

* Segurança: Segurança<34>.
* Núcleo e embutidos: Núcleo e embutidos<46>.
* Biblioteca: Biblioteca<47>.
* Documentação: Documentação<41>.
* Testes: Testes<42>.
* Construção: Construção<45>.
* Windows: Windows<41>.
* macOS: macOS<33>.
* IDLE: IDLE<25>.
* API C: API C<43>.


File: python.info,  Node: Segurança<34>,  Next: Núcleo e embutidos<46>,  Up: Python 3 10 0 alpha 1

1.24.47.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<46>,  Next: Biblioteca<47>,  Prev: Segurança<34>,  Up: Python 3 10 0 alpha 1

1.24.47.2 Núcleo e embutidos
............................

   - bpo-41909(1): Fixed stack overflow in *note issubclass(): 9ba. and
     *note isinstance(): 2ac. 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.

   - bpo-1635741(7): Port the ‘_bisect’ module to the multi-phase
     initialization API ( PEP 489(8)).

   - bpo-39934(9): 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(10): Fix ‘__dir__()’ of *note types.GenericAlias: 9e2.
     Patch by Batuhan Taskaya.

   - bpo-1635741(11): Port the ‘_lsprof’ extension module to multi-phase
     initialization ( PEP 489(12)).

   - bpo-1635741(13): Port the *note cmath: 19. extension module to
     multi-phase initialization ( PEP 489(14)).

   - bpo-1635741(15): Port the ‘_scproxy’ extension module to
     multi-phase initialization ( PEP 489(16)).

   - bpo-1635741(17): Port the *note termios: e7. extension module to
     multi-phase initialization ( PEP 489(18)).

   - bpo-1635741(19): Convert the ‘_sha256’ extension module types to
     heap types.

   - bpo-41690(20): Fix a possible stack overflow in the parser when
     parsing functions and classes with a huge amount of arguments.
     Patch by Pablo Galindo.

   - bpo-1635741(21): Port the ‘_overlapped’ extension module to
     multi-phase initialization ( PEP 489(22)).

   - bpo-1635741(23): Port the ‘_curses_panel’ extension module to
     multi-phase initialization ( PEP 489(24)).

   - bpo-1635741(25): Port the ‘_opcode’ extension module to multi-phase
     initialization ( PEP 489(26)).

   - bpo-41681(27): Fixes the wrong error description in the error
     raised by using 2 ‘,’ in format string in f-string and *note
     str.format(): 828.

   - bpo-41675(28): The implementation of *note signal.siginterrupt():
     1331. now uses ‘sigaction()’ (if it is available in the system)
     instead of the deprecated ‘siginterrupt()’.  Patch by Pablo
     Galindo.

   - bpo-41670(29): 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(30): Fix a crash that occurred when destroying subclasses
     of *note MemoryError: 1809.  Patch by Pablo Galindo.

   - bpo-1635741(31): Port the *note zlib: 139. extension module to
     multi-phase initialization ( PEP 489(32)).

   - bpo-41631(33): 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.

   - bpo-40077(34): Convert ‘_operator’ to use *note PyType_FromSpec():
     792.

   - bpo-1653741(35): Port ‘_sha3’ to multi-phase init.  Convert static
     types to heap types.

   - bpo-1635741(36): Port the ‘_blake2’ extension module to the
     multi-phase initialization API ( PEP 489(37)).

   - bpo-41533(38): Free the stack allocated in ‘va_build_stack’ if
     ‘do_mkstack’ fails and the stack is not a ‘small_stack’.

   - bpo-41531(39): Fix a bug that was dropping keys when compiling dict
     literals with more than 0xFFFF elements.  Patch by Pablo Galindo.

   - bpo-41525(40): The output of ‘python --help’ contains now only
     ASCII characters.

   - bpo-1635741(41): Port the ‘_sha1’, ‘_sha512’, and ‘_md5’ extension
     modules to multi-phase initialization API ( PEP 489(42)).

   - bpo-41431(43): Optimize ‘dict_merge()’ for copying dict (e.g.
     ‘dict(d)’ and ‘{}.update(d)’).

   - bpo-41428(44): Implement PEP 604.  This supports (int | str) etc.
     in place of Union[str, int].

   - bpo-41340(45): Removed fallback implementation for ‘strdup’.

   - bpo-38156(46): Handle interrupts that come after EOF correctly in
     ‘PyOS_StdioReadline’.

   - bpo-41342(47): *note round(): 14d6. with integer argument is now
     faster (9–60%).

   - bpo-41334(48): Constructors *note str(): 169, *note bytes(): 192.
     and *note bytearray(): 342. are now faster (around 30–40% for small
     objects).

   - bpo-41295(49): 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(50): Bytecode optimizations are performed directly on the
     control flow graph.  This will result in slightly more compact code
     objects in some circumstances.

   - bpo-41247(51): Always cache the running loop holder when running
     ‘asyncio.set_running_loop’.

   - bpo-41252(52): Fix incorrect refcounting in _ssl.c’s
     ‘_servername_callback()’.

   - bpo-1635741(53): Port *note multiprocessing: 98. to multi-phase
     initialization

   - bpo-1635741(54): Port ‘winapi’ to multiphase initialization

   - bpo-41215(55): 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(56): 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.

   - bpo-1635741(57): Port *note faulthandler: 5c. to multiphase
     initialization.

   - bpo-1635741(58): Port ‘sha256’ to multiphase initialization

   - bpo-41175(59): Guard against a NULL pointer dereference within
     bytearrayobject triggered by the ‘bytearray() + bytearray()’
     operation.

   - bpo-41100(60): add arm64 to the allowable Mac OS arches in
     mpdecimal.h

   - bpo-41094(61): Fix decoding errors with audit when open files with
     non-ASCII names on non-UTF-8 locale.

   - bpo-39960(62): 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(63): Prefix the error message with ‘f-string: ‘, when
     parsing an f-string expression which throws a *note SyntaxError:
     18e.

   - bpo-40521(64): Empty frozensets are no longer singletons.

   - bpo-41076(65): 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(66): 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(67): Fix incorrect expressions and asserts in hashtable
     code and tests.

   - bpo-41052(68): Opt out serialization/deserialization for
     _random.Random

   - bpo-40939(69): 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(70): 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(71): Remove the remaining files from the old parser and
     the ‘symbol’ module.

   - bpo-40077(72): Convert ‘_bz2’ to use *note PyType_FromSpec(): 792.

   - bpo-41006(73): 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(74): *note zip(): 1a0. now supports PEP 618(75)’s
     ‘strict’ parameter, which raises a *note ValueError: 2ea. if the
     arguments are exhausted at different lengths.  Patch by Brandt
     Bucher.

   - bpo-1635741(76): Port ‘_gdbm’ to multiphase initialization.

   - bpo-40985(77): Fix a bug that caused the *note SyntaxError: 18e.
     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(78): Fix a possible buffer overflow in the PEG parser
     when gathering information for emitting syntax errors.  Patch by
     Pablo Galindo.

   - bpo-1635741(79): Port ‘_dbm’ to multiphase initialization.

   - bpo-40957(80): Fix refleak in _Py_fopen_obj() when PySys_Audit()
     fails

   - bpo-40950(81): Add a state to the ‘nis’ module ( PEP 3121(82)) and
     apply the multiphase initialization.  Patch by Donghee Na.

   - bpo-40947(83): The Python *note Path Configuration: aa0. now takes
     *note PyConfig.platlibdir: 1be1. in account.

   - bpo-40939(84): Remove the old parser, the ‘parser’ module and all
     associated support code, command-line options and environment
     variables.  Patch by Pablo Galindo.

   - bpo-40847(85): 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: 18e. for valid input due to this.  For example,
     an empty line following a line continuation character was
     interpreted as a *note SyntaxError: 18e.

   - bpo-40890(86): Each dictionary view now has a ‘mapping’ attribute
     that provides a *note types.MappingProxyType: 68d. wrapping the
     original dictionary.  Patch contributed by Dennis Sweeney.

   - bpo-40889(87): Improved the performance of symmetric difference
     operations on dictionary item views.  Patch by Dennis Sweeney.

   - bpo-40904(88): 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(89): 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(90): Fix invalid memory read in the new parser when
     checking newlines in string literals.  Patch by Pablo Galindo.

   - bpo-40883(91): Fix memory leak in when parsing f-strings in the new
     parser.  Patch by Pablo Galindo

   - bpo-40870(92): Raise *note ValueError: 2ea. when validating custom
     AST’s where the constants ‘True’, ‘False’ and ‘None’ are used
     within a *note ast.Name: 1be2. node.

   - bpo-40854(93): Allow overriding *note sys.platlibdir: b28. via a
     new *note PYTHONPLATLIBDIR: 1be3. environment variable.

   - bpo-40826(94): 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(95): Port *note fcntl: 5d. to multiphase
     initialization.

   - bpo-19468(96): Delete unnecessary instance check in
     importlib.reload().  Patch by Furkan Önder.

   - bpo-40824(97): Unexpected errors in calling the ‘__iter__’ method
     are no longer masked by ‘TypeError’ in the *note in: 348. operator
     and functions *note contains(): acd, *note indexOf(): ace. and
     *note countOf(): acf. of the *note operator: a3. module.

   - bpo-40792(98): Attributes ‘start’, ‘stop’ and ‘step’ of the *note
     range: b33. object now always has exact type *note int: 19b.
     Previously, they could have been an instance of a subclass of
     ‘int’.

   - bpo-40780(99): Fix a corner case where g-style string formatting of
     a float failed to remove trailing zeros.

   - bpo-38964(100): When there’s a *note SyntaxError: 18e. in the
     expression part of an fstring, the filename attribute of the *note
     SyntaxError: 18e. gets correctly set to the name of the file the
     fstring resides in.

   - bpo-40750(101): Support the “-d” debug flag in the new PEG parser.
     Patch by Pablo Galindo

   - bpo-40217(102): Instances of types created with *note
     PyType_FromSpecWithBases(): 793. 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(103): *note Py_TYPE(): 3c6. is changed to the inline
     static function.  Patch by Donghee Na.

   - bpo-40696(104): Fix a hang that can arise after *note
     generator.throw(): 711. due to a cycle in the exception context
     chain.

   - bpo-40521(105): 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(106): Certain *note TypeError: 198. messages about
     missing or extra arguments now include the function’s *note
     qualified name: 1be4.  Patch by Dennis Sweeney.

   - bpo-29590(107): Make the stack trace correct after calling *note
     generator.throw(): 711. on a generator that has yielded from a
     ‘yield from’.

   - bpo-4022(108): Improve performance of generators by not raising
     internal StopIteration.

   - bpo-1635741(109): Port *note mmap: 94. to multiphase
     initialization.

   - bpo-1635741(110): Port ‘_lzma’ to multiphase initialization.

   - bpo-37999(111): Builtin and extension functions that take integer
     arguments no longer accept *note Decimal: 1fd.s, *note Fraction:
     212.s and other objects that can be converted to integers only with
     a loss (e.g.  that have the *note __int__(): 19d. method but do not
     have the *note __index__(): 19e. method).

   - bpo-29882(112): Add *note int.bit_count(): 9c5, counting the number
     of ones in the binary representation of an integer.  Patch by
     Niklas Fiekas.

   - bpo-36982(113): Use ncurses extended color functions when available
     to support terminals with 256 colors, and add the new function
     *note curses.has_extended_color_support(): 9ec. to indicate whether
     extended color support is provided by the underlying ncurses
     library.

   - bpo-19569(114): Add the private macros ‘_Py_COMP_DIAG_PUSH’,
     ‘_Py_COMP_DIAG_IGNORE_DEPR_DECLS’, and ‘_Py_COMP_DIAG_POP’.

   - bpo-26680(115): The int type now supports the x.is_integer() method
     for compatibility with float.

   ---------- 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/

   (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=39934

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41780

   (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=1635741

   (14) https://peps.python.org/pep-0489/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (16) https://peps.python.org/pep-0489/

   (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://bugs.python.org/issue?@action=redirect&bpo=41690

   (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=1635741

   (26) https://peps.python.org/pep-0489/

   (27) https://bugs.python.org/issue?@action=redirect&bpo=41681

   (28) https://bugs.python.org/issue?@action=redirect&bpo=41675

   (29) https://bugs.python.org/issue?@action=redirect&bpo=41670

   (30) https://bugs.python.org/issue?@action=redirect&bpo=41654

   (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=41631

   (34) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (35) https://bugs.python.org/issue?@action=redirect&bpo=1653741

   (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=41533

   (39) https://bugs.python.org/issue?@action=redirect&bpo=41531

   (40) https://bugs.python.org/issue?@action=redirect&bpo=41525

   (41) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (42) https://peps.python.org/pep-0489/

   (43) https://bugs.python.org/issue?@action=redirect&bpo=41431

   (44) https://bugs.python.org/issue?@action=redirect&bpo=41428

   (45) https://bugs.python.org/issue?@action=redirect&bpo=41340

   (46) https://bugs.python.org/issue?@action=redirect&bpo=38156

   (47) https://bugs.python.org/issue?@action=redirect&bpo=41342

   (48) https://bugs.python.org/issue?@action=redirect&bpo=41334

   (49) https://bugs.python.org/issue?@action=redirect&bpo=41295

   (50) https://bugs.python.org/issue?@action=redirect&bpo=41323

   (51) https://bugs.python.org/issue?@action=redirect&bpo=41247

   (52) https://bugs.python.org/issue?@action=redirect&bpo=41252

   (53) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (54) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (55) https://bugs.python.org/issue?@action=redirect&bpo=41215

   (56) https://bugs.python.org/issue?@action=redirect&bpo=41218

   (57) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (58) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (59) https://bugs.python.org/issue?@action=redirect&bpo=41175

   (60) https://bugs.python.org/issue?@action=redirect&bpo=41100

   (61) https://bugs.python.org/issue?@action=redirect&bpo=41094

   (62) https://bugs.python.org/issue?@action=redirect&bpo=39960

   (63) https://bugs.python.org/issue?@action=redirect&bpo=41084

   (64) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (65) https://bugs.python.org/issue?@action=redirect&bpo=41076

   (66) https://bugs.python.org/issue?@action=redirect&bpo=41056

   (67) https://bugs.python.org/issue?@action=redirect&bpo=41061

   (68) https://bugs.python.org/issue?@action=redirect&bpo=41052

   (69) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (70) https://bugs.python.org/issue?@action=redirect&bpo=35975

   (71) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (72) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (73) https://bugs.python.org/issue?@action=redirect&bpo=41006

   (74) https://bugs.python.org/issue?@action=redirect&bpo=40636

   (75) https://peps.python.org/pep-0618/

   (76) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (77) https://bugs.python.org/issue?@action=redirect&bpo=40985

   (78) https://bugs.python.org/issue?@action=redirect&bpo=40958

   (79) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (80) https://bugs.python.org/issue?@action=redirect&bpo=40957

   (81) https://bugs.python.org/issue?@action=redirect&bpo=40950

   (82) https://peps.python.org/pep-3121/

   (83) https://bugs.python.org/issue?@action=redirect&bpo=40947

   (84) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (85) https://bugs.python.org/issue?@action=redirect&bpo=40847

   (86) https://bugs.python.org/issue?@action=redirect&bpo=40890

   (87) https://bugs.python.org/issue?@action=redirect&bpo=40889

   (88) https://bugs.python.org/issue?@action=redirect&bpo=40904

   (89) https://bugs.python.org/issue?@action=redirect&bpo=40903

   (90) https://bugs.python.org/issue?@action=redirect&bpo=40880

   (91) https://bugs.python.org/issue?@action=redirect&bpo=40883

   (92) https://bugs.python.org/issue?@action=redirect&bpo=40870

   (93) https://bugs.python.org/issue?@action=redirect&bpo=40854

   (94) https://bugs.python.org/issue?@action=redirect&bpo=40826

   (95) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (96) https://bugs.python.org/issue?@action=redirect&bpo=19468

   (97) https://bugs.python.org/issue?@action=redirect&bpo=40824

   (98) https://bugs.python.org/issue?@action=redirect&bpo=40792

   (99) https://bugs.python.org/issue?@action=redirect&bpo=40780

   (100) https://bugs.python.org/issue?@action=redirect&bpo=38964

   (101) https://bugs.python.org/issue?@action=redirect&bpo=40750

   (102) https://bugs.python.org/issue?@action=redirect&bpo=40217

   (103) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (104) https://bugs.python.org/issue?@action=redirect&bpo=40696

   (105) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (106) https://bugs.python.org/issue?@action=redirect&bpo=40679

   (107) https://bugs.python.org/issue?@action=redirect&bpo=29590

   (108) https://bugs.python.org/issue?@action=redirect&bpo=4022

   (109) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (110) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (111) https://bugs.python.org/issue?@action=redirect&bpo=37999

   (112) https://bugs.python.org/issue?@action=redirect&bpo=29882

   (113) https://bugs.python.org/issue?@action=redirect&bpo=36982

   (114) https://bugs.python.org/issue?@action=redirect&bpo=19569

   (115) https://bugs.python.org/issue?@action=redirect&bpo=26680


File: python.info,  Node: Biblioteca<47>,  Next: Documentação<41>,  Prev: Núcleo e embutidos<46>,  Up: Python 3 10 0 alpha 1

1.24.47.3 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(): e06.  Also document stripping of spaces and
     tabs for *note eval(): 49d.

   - bpo-41773(3): Note in documentation that *note random.choices():
     eb5. doesn’t support non-finite weights, raise *note ValueError:
     2ea. when given non-finite weights.

   - bpo-41840(4): Fix a bug in the *note symtable: de. 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(): 9df. 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: 16b6.  It now accepts “empty” statements (only
     whitespaces and comments) and rejects misindentent statements.

   - bpo-41833(8): The *note threading.Thread: 176. 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: a47, *note
     types.NotImplementedType: a49. and *note types.NoneType: a48. 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: 4c2. to *note memoryview:
     165.

   - 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():
     2f1.  This allows setting ‘PYTHONASYNCIODEBUG’ or ‘-X dev’ to
     enable asyncio debug mode when using *note asyncio.run(): 2f1.

   - 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: d4. with *note
     ProgrammingError: 303.

   - bpo-39010(29): Restarting a ‘ProactorEventLoop’ on Windows no
     longer logs spurious ‘ConnectionResetErrors’.

   - bpo-41638(30): *note ProgrammingError: 303. message for absent
     parameter in *note sqlite3: d4. 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: d4.

   - 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(): 80a. 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(): 80a. 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: 1d. 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: 1252.):
     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(): 4d5. support for VxWorks
     RTOS.

   - bpo-41316(47): Fix the *note tarfile: e4. 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: 116.

   - bpo-35328(51): Set the environment variable ‘VIRTUAL_ENV_PROMPT’ at
     *note venv: 117. 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(): 133e.

   - 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: 4b8. as a *note
     MutableSequence: 4b9.  Patch by Pablo Galindo.

   - bpo-39168(62): Remove the ‘__new__’ method of *note typing.Generic:
     18ad.

   - 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: 2bf. to ignore
     error if the filesystem is read-only, instead of only ignoring
     *note FileNotFoundError: 263. and *note PermissionError: f32.

   - 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: 103. 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(): 219.

   - bpo-40521(71): Remove freelist from collections.deque().

   - bpo-31938(72): Fix default-value signatures of several functions in
     the *note select: c6. 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(): 1be6. 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(): 599. 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: ad2. from being subclassed.

   - bpo-35018(81): Add the *note xml.sax.handler.LexicalHandler: a52.
     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: 59. 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: dc.
     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: 88. module.

   - bpo-23427(89): Add *note sys.orig_argv: a37. 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: 1685, 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: 2d. 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: c6. 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: 1be7. 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: 63. module has been
     moved to a new *note graphlib: 69. module to better accommodate the
     new tools and keep the original scope of the *note functools: 63.
     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(): 6a3,
     ‘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: d4. 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(): 1bb1. now
     always has exact type *note int: 19b.  Previously, the result could
     have been an instance of a subclass of ‘int’.

   - bpo-40767(107): *note webbrowser: 11b. 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: 2e. 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(): 1be8.

   - bpo-16995(110): Add *note base64.b32hexencode(): 9da. and *note
     base64.b32hexdecode(): 9db. to support the Base32 Encoding with
     Extended Hex Alphabet.

   - bpo-30008(111): Fix *note ssl: d5. 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: 1be9. flag for *note
     os.pwritev(): d4b.

   - bpo-40737(116): Fix possible reference leak for *note sqlite3: d4.
     initialization.

   - bpo-40726(117): Handle cases where the ‘end_lineno’ is ‘None’ on
     *note ast.increment_lineno(): 1a3e.

   - 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: 6c. 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(): 1bea. passed ‘usedforsecurity’
     to OpenSSL EVP constructor ‘_hashlib.new()’.  test_hashlib and
     test_smtplib handle strict security policy better.

   - bpo-40614(121): *note ast.parse(): 1c2. 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(): 19fb. 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(): 19fb.  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(): b62.

   - bpo-32309(126): Added a new *note coroutine: 6ae. *note
     asyncio.to_thread(): adb.  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(): adc. that can directly take keyword arguments.

   - bpo-36543(127): Restored the deprecated ‘xml.etree.cElementTree’
     module.

   - bpo-40611(128): *note MAP_POPULATE: 1beb. constant has now been
     added to the list of exported *note mmap: 94. 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: b8.  Patch by Gregory Schevchenko.

   - bpo-35714(141): *note struct.error: 151f. is now raised if there is
     a null character in a *note struct: db. format string.

   - bpo-38144(142): Added the 'root_dir' and 'dir_fd' parameters in
     *note glob.glob(): 599.

   - bpo-26543(143): Fix ‘IMAP4.noop()’ when debug mode is enabled (ex:
     ‘imaplib.Debug = 3’).

   - bpo-12178(144): *note csv.writer(): 6a4. 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: 198. 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(): 1360. 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: a6d. 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<41>,  Next: Testes<42>,  Prev: Biblioteca<47>,  Up: Python 3 10 0 alpha 1

1.24.47.4 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: 1bed.

   - 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<42>,  Next: Construção<45>,  Prev: Documentação<41>,  Up: Python 3 10 0 alpha 1

1.24.47.5 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: ea.: Rename ‘blacklist’ parameter
     of *note check__all__(): 1bef. to ‘not_exported’.

   - bpo-41477(5): Make ctypes optional in test_genericalias.

   - bpo-41085(6): Fix integer overflow in the *note
     array.array.index(): 9d7. 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(): 1bf0.
     function to the *note test.support: ea. 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: 78. 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: 98. 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<45>,  Next: Windows<41>,  Prev: Testes<42>,  Up: Python 3 10 0 alpha 1

1.24.47.6 Construção
....................

   - bpo-38249(1): Update *note Py_UNREACHABLE: da2. 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: 13a. 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<45>,  Up: Python 3 10 0 alpha 1

1.24.47.7 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<25>,  Prev: Windows<41>,  Up: Python 3 10 0 alpha 1

1.24.47.8 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<25>,  Next: API C<43>,  Prev: macOS<33>,  Up: Python 3 10 0 alpha 1

1.24.47.9 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<43>,  Prev: IDLE<25>,  Up: Python 3 10 0 alpha 1

1.24.47.10 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: ab0. structure.

   - bpo-41692(2): The ‘PyUnicode_InternImmortal()’ function is now
     deprecated and will be removed in Python 3.12: use *note
     PyUnicode_InternInPlace(): aa4. instead.  Patch by Victor Stinner.

   - bpo-41842(3): Add *note PyCodec_Unregister(): a8d. 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: ab0. structure.  Patch by Victor Stinner.

   - bpo-41689(5): Types created with *note PyType_FromSpec(): 792. now
     make any signature in their ‘tp_doc’ slot accessible from
     ‘__text_signature__’.

   - bpo-41524(6): Fix bug in PyOS_mystrnicmp and PyOS_mystricmp 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(): a8b. and
     *note PyDateTime_TIME_GET_TZINFO(): a8c. macros for accessing the
     ‘tzinfo’ attributes of *note datetime.datetime: 4dc. and *note
     datetime.time: 1fa. objects.

   - bpo-40170(9): Revert *note PyType_HasFeature(): 1bf6. change: it
     reads again directly the *note PyTypeObject.tp_flags: 1b60. member
     when the limited C API is not used, rather than always calling
     *note PyType_GetFlags(): 1bf7. 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(): 62e. and *note
     PyBuffer_Release(): 62f.

   - 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 ‘PyObject_INIT()’ and ‘PyObject_INIT_VAR()’
     macros become aliases to, respectively, *note PyObject_Init(): c54.
     and *note PyObject_InitVar(): 1bf8. 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(): 3be. and *note Py_BuildValue(): 3bf.
     formats which use ‘#’: ‘es#’, ‘et#’, ‘s#’, ‘u#’, ‘y#’, ‘z#’, ‘U#’
     and ‘Z#’.  See *note Parsing arguments and building values: 3d2.
     and the PEP 353(20).

   - bpo-40910(21): Export explicitly the *note Py_GetArgcArgv(): 1bf9.
     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(): 61c. without *note
     GIL: 164. held had been allowed for historical reason.  It is no
     longer allowed.

   - bpo-40826(25): ‘PyOS_InterruptOccurred()’ now fails with a fatal
     error if it is called with the GIL released.

   - bpo-40792(26): The result of *note PyNumber_Index(): a89. now
     always has exact type *note int: 19b.  Previously, the result could
     have been an instance of a subclass of ‘int’.

   - bpo-39573(27): Convert *note Py_REFCNT(): 2ce. and *note Py_SIZE():
     97a. macros to static inline functions.  They cannot be used as
     l-value anymore: use *note Py_SET_REFCNT(): a9e. and *note
     Py_SET_SIZE(): 97b. 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: 5d5. 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.24.48 Python 3.9.0 beta 1
---------------------------

'Data de lançamento: 2020-05-19'

* Menu:

* Segurança: Segurança<35>.
* Núcleo e embutidos: Núcleo e embutidos<47>.
* Biblioteca: Biblioteca<48>.
* Documentação: Documentação<42>.
* Testes: Testes<43>.
* Construção: Construção<46>.
* Windows: Windows<42>.
* macOS: macOS<34>.
* Ferramentas/Demos: Ferramentas/Demos<29>.
* API C: API C<44>.


File: python.info,  Node: Segurança<35>,  Next: Núcleo e embutidos<47>,  Up: Python 3 9 0 beta 1

1.24.48.1 Segurança
...................

   - bpo-40501(1): *note uuid: 116. no longer uses *note ctypes: 2e. 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<47>,  Next: Biblioteca<48>,  Prev: Segurança<35>,  Up: Python 3 9 0 beta 1

1.24.48.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(): 1bfd. 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(): 1a6f. 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: 5b. to multiphase initialization
     ( PEP 489(10)).

   - bpo-40523(11): Add pass-throughs for *note hash(): 7f6. and *note
     reversed(): a5b. to *note weakref.proxy: c3b. objects.  Patch by
     Pablo Galindo.

   - bpo-1635741(12): Port *note syslog: e2. 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(): 711.

   - 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():
     b32. 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<48>,  Next: Documentação<42>,  Prev: Núcleo e embutidos<47>,  Up: Python 3 9 0 beta 1

1.24.48.3 Biblioteca
....................

   - bpo-40662(1): Fixed *note ast.get_source_segment(): bc1. for ast
     nodes that have incomplete location information.  Patch by Irit
     Katriel.

   - bpo-40665(2): Convert *note bisect: 12. to use Argument Clinic.

   - bpo-40536(3): Added the *note available_timezones(): 1bff. function
     to the *note zoneinfo: 13a. module.  Patch by Paul Ganssle.

   - bpo-40645(4): The *note hmac.HMAC: d27. 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: 6c. module can now use SHA3 hashes
     and SHAKE XOF from OpenSSL when available.

   - bpo-40479(8): The *note hashlib: 6c. now compiles with OpenSSL
     3.0.0-alpha2.

   - bpo-40257(9): Revert changes to *note inspect.getdoc(): be3.

   - bpo-40607(10): When cancelling a task due to timeout, *note
     asyncio.wait_for(): 80a. 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: 13a. 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: d5. and *note hashlib: 6c. 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: 1c7. 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(): bd8. objects can now be
     the targets of weakrefs.

   - bpo-40559(23): Fix possible memory leak in the C implementation of
     *note asyncio.Task: 1c7.

   - 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: 21. 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():
     e06. in the presence of malformed *note ast.Dict: 1c00. 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(): 1c01. now produces
     correct 'ptype' strings instead of empty strings.

   - bpo-39435(30): The first argument of *note pickle.loads(): f01. 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: 37. to use gdbm_count if
     possible when calling *note len(): 835.  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(): 1c02.

   - 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: 24. now closes explicitly the result queue.

   - bpo-30966(38): Add a new *note close(): b07. method to the *note
     SimpleQueue: b06. class to explicitly close the queue.

   - bpo-39966(39): Revert bpo-25597(40).  *note
     unittest.mock.MagicMock: 1085. 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(): af9. 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: 68d. is now
     reversible.

   - bpo-39075(46): The repr for *note types.SimpleNamespace: 4df. is
     now insertion ordered rather than alphabetical.

   - bpo-40192(47): On AIX, *note thread_time(): b26. 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:
     1f9. and *note datetime.datetime: 4dc. now return a *note named
     tuple: 853. instead of a *note tuple: 608.

   ---------- 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<42>,  Next: Testes<43>,  Prev: Biblioteca<48>,  Up: Python 3 9 0 beta 1

1.24.48.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(): 69c. 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():
     f01. 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<43>,  Next: Construção<46>,  Prev: Documentação<42>,  Up: Python 3 9 0 beta 1

1.24.48.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<46>,  Next: Windows<42>,  Prev: Testes<43>,  Up: Python 3 9 0 beta 1

1.24.48.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<46>,  Up: Python 3 9 0 beta 1

1.24.48.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: b. 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<29>,  Prev: Windows<42>,  Up: Python 3 9 0 beta 1

1.24.48.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<29>,  Next: API C<44>,  Prev: macOS<34>,  Up: Python 3 9 0 beta 1

1.24.48.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<44>,  Prev: Ferramentas/Demos<29>,  Up: Python 3 9 0 beta 1

1.24.48.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(): 986. function now
     returns a strong reference to the frame.

   - bpo-40428(6): Remove the following functions from the C API. Call
     *note PyGC_Collect(): b7b. 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(): 97e. function: get the
     frame next outer frame.

   - bpo-40421(8): New *note PyFrame_GetCode(): 982. function: return a
     borrowed reference to the frame code.

   - bpo-40217(9): Ensure that instances of types created with *note
     PyType_FromSpecWithBases(): 793. will visit its class object when
     traversing references in the garbage collector (implemented as an
     extension of the provided *note tp_traverse: 977.).  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.24.49 Python 3.9.0 alpha 6
----------------------------

'Data de lançamento: 2020-04-27'

* Menu:

* Segurança: Segurança<36>.
* Núcleo e embutidos: Núcleo e embutidos<48>.
* Biblioteca: Biblioteca<49>.
* Documentação: Documentação<43>.
* Testes: Testes<44>.
* Construção: Construção<47>.
* Windows: Windows<43>.
* macOS: macOS<35>.
* IDLE: IDLE<26>.
* Ferramentas/Demos: Ferramentas/Demos<30>.
* API C: API C<45>.


File: python.info,  Node: Segurança<36>,  Next: Núcleo e embutidos<48>,  Up: Python 3 9 0 alpha 6

1.24.49.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:
     1b5e. class of the *note urllib.request: 111. 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<48>,  Next: Biblioteca<49>,  Prev: Segurança<36>,  Up: Python 3 9 0 alpha 6

1.24.49.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: c1. to multiphase
     initialization ( PEP 489(13)).

   - bpo-1635741(14): Port *note math: 92. 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():
     792.

   - 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(): 18d7.
     ‘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<49>,  Next: Documentação<43>,  Prev: Núcleo e embutidos<48>,  Up: Python 3 9 0 alpha 6

1.24.49.3 Biblioteca
....................

   - bpo-40398(1): *note typing.get_args(): 2ab. now always returns an
     empty tuple for special generic aliases.

   - bpo-40396(2): Functions *note typing.get_origin(): 2aa, *note
     typing.get_args(): 2ab. and *note typing.get_type_hints(): 8b5.
     support now generic aliases like ‘list[int]’.

   - bpo-38061(3): Optimize the *note subprocess: dc. 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():
     f8e. 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: 480.  Patch by
     Weipeng Hong.

   - bpo-40275(9): The *note logging: 8b. package is now imported lazily
     in *note unittest: 10c. only when the *note assertLogs(): a4f.
     assertion is used.

   - bpo-40275(10): The *note asyncio: b. package is now imported lazily
     in *note unittest: 10c. only when the *note
     IsolatedAsyncioTestCase: 35e. 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: 10a. 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(): be3. 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: ba. 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(): 1794. function and
     *note random.Random.randbytes(): b19. method to generate random
     bytes.

   - bpo-40277(20): *note collections.namedtuple(): 4da. 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: 95. uses *note
     io.open_code(): 19d4. 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: 1d6. 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: de. 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: 32f. class.

   - bpo-36517(32): Multiple inheritance with *note typing.NamedTuple:
     32f. 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: c3. 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(): b0d.
     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: 32c. and
     *note threading.Condition: 1351. 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: 1354. to ‘_at_fork_reinit()’.

   - bpo-25780(39): Expose *note CAN_RAW_JOIN_FILTERS: b21. in the *note
     socket: d1. module.

   - bpo-39503(40): *note AbstractBasicAuthHandler: 1b5e. of *note
     urllib.request: 111. 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: 24. 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: 17ab, 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: 1c0e. 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: 187c.

   - bpo-36144(49): Added PEP 584(50) operators to *note
     weakref.WeakKeyDictionary: 187b.

   - bpo-38891(51): Fix linear runtime behaviour of the ‘__getitem__’
     and ‘__setitem__’ methods in *note
     multiprocessing.shared_memory.ShareableList: 1c0f.  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: e0a.

   - 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(): 186e. failures in
     *note sys.set_asyncgen_hooks(): 18e1.

   - 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(): 174c. 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(): 753.’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<43>,  Next: Testes<44>,  Prev: Biblioteca<49>,  Up: Python 3 9 0 alpha 6

1.24.49.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: 1c11. docs to include
     *note dict(): 183. insertion order preservation.  Patch by Furkan
     Onder and Samy Lahfa.

   - bpo-38387(3): Document *note PyDoc_STRVAR: 1c12. 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<44>,  Next: Construção<47>,  Prev: Documentação<43>,  Up: Python 3 9 0 alpha 6

1.24.49.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(): 1c14.
     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: aec. and *note
     ftplib.FTP_TLS: aed. 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<47>,  Next: Windows<43>,  Prev: Testes<44>,  Up: Python 3 9 0 alpha 6

1.24.49.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<47>,  Up: Python 3 9 0 alpha 6

1.24.49.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<26>,  Prev: Windows<43>,  Up: Python 3 9 0 alpha 6

1.24.49.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<26>,  Next: Ferramentas/Demos<30>,  Prev: macOS<35>,  Up: Python 3 9 0 alpha 6

1.24.49.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<30>,  Next: API C<45>,  Prev: IDLE<26>,  Up: Python 3 9 0 alpha 6

1.24.49.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(): b0d. to convert *note os.system():
     164c. 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<45>,  Prev: Ferramentas/Demos<30>,  Up: Python 3 9 0 alpha 6

1.24.49.11 API C
................

   - bpo-40241(1): Move the ‘PyGC_Head’ structure to the internal C API.

   - bpo-40170(2): Convert *note PyObject_IS_GC(): b71. macro to a
     function to hide implementation details.

   - bpo-40241(3): Add the functions *note PyObject_GC_IsTracked(): b63.
     and *note PyObject_GC_IsFinalized(): b64. 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(): b72. macro, and the ‘PyObject_NEW_VAR()’
     macro becomes an alias to the *note PyObject_NewVar(): b73. macro,
     to hide implementation details.  They no longer access directly the
     *note PyTypeObject.tp_basicsize: b74. member.

   - bpo-40170(5): *note PyType_HasFeature(): 1bf6. now always calls
     *note PyType_GetFlags(): 1bf7. to hide implementation details.
     Previously, it accessed directly the *note PyTypeObject.tp_flags:
     1b60. 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: b75. member.

   - bpo-40170(7): Convert *note PyObject_CheckBuffer(): 62d. macro to a
     function to hide implementation details: the macro accessed
     directly the *note PyTypeObject.tp_as_buffer: b76. member.

   - bpo-40170(8): Always declare *note PyIndex_Check(): b77. as an
     opaque function to hide implementation details: remove
     ‘PyIndex_Check()’ macro.  The macro accessed directly the *note
     PyTypeObject.tp_as_number: b78. member.

   - bpo-39947(9): Add *note PyThreadState_GetID(): b60. 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.24.50 Python 3.9.0 alpha 5
----------------------------

'Data de lançamento: 2020-03-23'

* Menu:

* Segurança: Segurança<37>.
* Núcleo e embutidos: Núcleo e embutidos<49>.
* Biblioteca: Biblioteca<50>.
* Documentação: Documentação<44>.
* Testes: Testes<45>.
* Construção: Construção<48>.
* Windows: Windows<44>.
* macOS: macOS<36>.
* IDLE: IDLE<27>.
* Ferramentas/Demos: Ferramentas/Demos<31>.
* API C: API C<46>.


File: python.info,  Node: Segurança<37>,  Next: Núcleo e embutidos<49>,  Up: Python 3 9 0 alpha 5

1.24.50.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<49>,  Next: Biblioteca<50>,  Prev: Segurança<37>,  Up: Python 3 9 0 alpha 5

1.24.50.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(): b6e.), 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(): b6e. 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(): 63c. 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(): 45c.
     has been called.  Moreover, the daemon thread now exits before
     trying to take the GIL.

   - bpo-39871(28): Fix a possible *note SystemError: 78a. in
     ‘math.{atan2,copysign,remainder}()’ when the first argument cannot
     be converted to a *note float: 196.  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: 92f. 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(): 421. and *note
     PyUnicode_AsUTF8AndSize(): a8f. 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: 1a2. 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<50>,  Next: Documentação<44>,  Prev: Núcleo e embutidos<49>,  Up: Python 3 9 0 alpha 5

1.24.50.3 Biblioteca
....................

   - bpo-39830(1): Add *note zipfile.Path: 8cd. to ‘__all__’ in the
     *note zipfile: 137. 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(): d94. 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():
     607. 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: 7e8. 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: 1c1f. has call objects in
     the order of awaited arguments instead of using *note
     unittest.mock.Mock.call_args: 1c20. which has the last value of the
     call.  Patch by Karthikeyan Singaravelan.

   - bpo-36144(15): Updated *note os.environ: 258. and *note
     os.environb: 259. 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(): 1c21. method
     when a *note bool: 3c0. 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: 98. 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:
     1960. 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(): ad7. 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(): ad8. 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: 87. to catch *note
     BrokenPipeError: 1252.  Patch by Donghee Na.

   - bpo-13487(24): Avoid a possible '“RuntimeError: dictionary changed
     size during iteration”' from *note inspect.getmodule(): 1a89. when
     it tried to loop through *note sys.modules: 17ab.

   - 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: dc. 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: 13b8. 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: 1d6. 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(): d0f. 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: 68d. objects now
     support the merge (‘|’) operator from PEP 584(39).

   - bpo-38691(40): The *note importlib: 7b. module now ignores the
     *note PYTHONCASEOK: b4b. environment variable when the *note -E:
     b4c. or *note -I: b4d. 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: 1c22. 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: af2.  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(): 1c23. 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: 84.  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: 9. 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<44>,  Next: Testes<45>,  Prev: Biblioteca<50>,  Up: Python 3 9 0 alpha 5

1.24.50.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: 100. 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: 3c.

   ---------- 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<45>,  Next: Construção<48>,  Prev: Documentação<44>,  Up: Python 3 9 0 alpha 5

1.24.50.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: 3e1. 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<48>,  Next: Windows<44>,  Prev: Testes<45>,  Up: Python 3 9 0 alpha 5

1.24.50.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: dc. module if the *note subprocess: dc. 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: b28. 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<48>,  Up: Python 3 9 0 alpha 5

1.24.50.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: f3.)
     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<27>,  Prev: Windows<44>,  Up: Python 3 9 0 alpha 5

1.24.50.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<27>,  Next: Ferramentas/Demos<31>,  Prev: macOS<36>,  Up: Python 3 9 0 alpha 5

1.24.50.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<31>,  Next: API C<46>,  Prev: IDLE<27>,  Up: Python 3 9 0 alpha 5

1.24.50.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<46>,  Prev: Ferramentas/Demos<31>,  Up: Python 3 9 0 alpha 5

1.24.50.11 API C
................

   - bpo-40024(1): Add *note PyModule_AddType(): b62. 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(): 986. 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(): b5f.: get
     the interpreter of a Python thread state.

   - bpo-39947(6): Add *note PyInterpreterState_Get(): 640. function to
     the limited C API.

   - bpo-35370(7): If *note PySys_Audit(): 607. fails in *note
     PyEval_SetProfile(): 16eb. or *note PyEval_SetTrace(): 657, 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(): 1c2c. and *note
     PyCFunction_NewEx(): 1c2d. 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: da2. is now implemented with
     ‘__builtin_unreachable()’ and analogs in release mode.

   - bpo-38643(13): *note PyNumber_ToBase(): 1a8f. now raises a *note
     SystemError: 78a. instead of crashing when called with invalid
     base.

   - bpo-39882(14): The *note Py_FatalError(): b70. 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: b67, *note
     m_clear: b68. and *note m_free: b69. functions of *note
     PyModuleDef: b6a. 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: b6b. function).  More precisely, these
     functions are not called if *note m_size: b6c. is greater than 0
     and the module state (as returned by *note PyModule_GetState():
     b6d.) 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(): 1c2e. and *note
     _PyInterpreterState_SetEvalFrameFunc(): 1c2f. C functions.  The
     *note _PyFrameEvalFunction: 96f. 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.24.51 Python 3.9.0 alpha 4
----------------------------

'Data de lançamento: 2020-02-25'

* Menu:

* Segurança: Segurança<38>.
* Núcleo e embutidos: Núcleo e embutidos<50>.
* Biblioteca: Biblioteca<51>.
* Documentação: Documentação<45>.
* Testes: Testes<46>.
* Construção: Construção<49>.
* Windows: Windows<45>.
* IDLE: IDLE<28>.
* API C: API C<47>.


File: python.info,  Node: Segurança<38>,  Next: Núcleo e embutidos<50>,  Up: Python 3 9 0 alpha 4

1.24.51.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<50>,  Next: Biblioteca<51>,  Prev: Segurança<38>,  Up: Python 3 9 0 alpha 4

1.24.51.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(): 1ab7.
     Patch by Donghee Na.

   - bpo-39619(3): Enable use of *note os.chroot(): 1c33. on HP-UX
     systems.

   - bpo-39573(4): Add *note Py_IS_TYPE(): 1ab7. 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(): 16e7. 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: b34. of float operation now
     has a better performance.  Also the message of *note
     ZeroDivisionError: b35. 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: 183. (and *note collections.UserDict:
     1c34.) 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<51>,  Next: Documentação<45>,  Prev: Núcleo e embutidos<50>,  Up: Python 3 9 0 alpha 4

1.24.51.3 Biblioteca
....................

   - bpo-30566(1): Fix *note IndexError: 1723. 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(): b02. and *note math.lcm():
     b03. 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: 1c36. in
     ‘io.BufferedReader.truncate()’ when it is called on a read-only
     *note io.BufferedReader: 140a. instance.

   - bpo-39479(6): Add *note math.lcm(): b03. 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: ba. and *note trace: 103. modules
     now use the *note sysconfig: e1. 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: 212. if
     the numerator and/or the denominator is an *note int: 19b.
     subclass.  The *note math.gcd(): b02. function is now used to
     normalize the 'numerator' and 'denominator'.  *note math.gcd():
     b02. always return a *note int: 19b. type.  Previously, the GCD
     type depended on 'numerator' and 'denominator'.

   - bpo-39567(18): Added audit for *note os.walk(): 6c5, *note
     os.fwalk(): d46, *note pathlib.Path.glob(): 531. and *note
     pathlib.Path.rglob(): 532.

   - bpo-39559(19): Remove unused, undocumented argument ‘getters’ from
     *note uuid.getnode(): d94.

   - bpo-38149(20): *note sys.audit(): 186e. is now called only once per
     call of *note glob.glob(): 599. and *note glob.iglob(): 9fe.

   - bpo-39546(21): Fix a regression in *note ArgumentParser: 1bd. 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(): 932. function is no
     longer deprecated.

   - bpo-39493(25): Mark ‘typing.IO.closed’ as a property

   - bpo-39491(26): Add *note typing.Annotated: b2d. and
     ‘include_extras’ parameter to *note typing.get_type_hints(): 8b5.
     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():
     1886. 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: e4. 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(): ae0. 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: 1085, 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<45>,  Next: Testes<46>,  Prev: Biblioteca<51>,  Up: Python 3 9 0 alpha 4

1.24.51.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<46>,  Next: Construção<49>,  Prev: Documentação<45>,  Up: Python 3 9 0 alpha 4

1.24.51.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(): 16e7. fails with *note OverflowError: a77.  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<49>,  Next: Windows<45>,  Prev: Testes<46>,  Up: Python 3 9 0 alpha 4

1.24.51.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<28>,  Prev: Construção<49>,  Up: Python 3 9 0 alpha 4

1.24.51.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(): 1038. and *note expanduser(): 1037. 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(): bff, 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<28>,  Next: API C<47>,  Prev: Windows<45>,  Up: Python 3 9 0 alpha 4

1.24.51.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: bbb. 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<47>,  Prev: IDLE<28>,  Up: Python 3 9 0 alpha 4

1.24.51.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: 92. and *note cmath: 19. modules must now
     be compiled with the ‘Py_BUILD_CORE’ macro defined.

   - bpo-39573(3): Add *note Py_SET_SIZE(): 97b. function to set the
     size of an object.

   - bpo-39500(4): *note PyUnicode_IsIdentifier(): 1c3d. does not call
     *note Py_FatalError(): b70. anymore if the string is not ready.

   - bpo-39573(5): Add *note Py_SET_TYPE(): 979. function to set the
     type of an object.

   - bpo-39573(6): Add a *note Py_SET_REFCNT(): a9e. function to set the
     reference counter of an object.

   - bpo-39542(7): Convert *note PyType_HasFeature(): 1bf6, *note
     PyType_Check(): 1c3e. and *note PyType_CheckExact(): 1c3f. 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(): c54. and *note PyObject_InitVar(): 1bf8. 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(): 18d7. function now
     calls the ‘PyThreadState.on_delete’ callback.  Previously, that
     happened in *note PyThreadState_Delete(): 1c40.

   - 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.24.52 Python 3.9.0 alpha 3
----------------------------

'Data de lançamento: 2020-01-24'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<51>.
* Biblioteca: Biblioteca<52>.
* Documentação: Documentação<46>.
* Construção: Construção<50>.
* IDLE: IDLE<29>.
* API C: API C<48>.


File: python.info,  Node: Núcleo e embutidos<51>,  Next: Biblioteca<52>,  Up: Python 3 9 0 alpha 3

1.24.52.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: 6d. module and custom comparison
     operators.

   - bpo-39386(3): Prevent double awaiting of async iterator.

   - bpo-17005(4): Add ‘functools.TopologicalSorter’ to the *note
     functools: 63. 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(): aef. 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(): 1101. or *note max(): 1102. with no arguments.  Patch by
     Donghee Na.

   - bpo-39200(16): Correct the error message when trying to construct
     *note range: b33. 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(): 1c43.

   - 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: 1c44. command-line
     option or setting the *note PYTHONUNBUFFERED: 1c45. 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(): 1c43.

   - 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<52>,  Next: Documentação<46>,  Prev: Núcleo e embutidos<51>,  Up: Python 3 9 0 alpha 3

1.24.52.2 Biblioteca
....................

   - bpo-39430(1): Fixed race condition in lazy imports in *note
     tarfile: e4.

   - bpo-39413(2): The *note os.unsetenv(): 25b. function is now also
     available on Windows.

   - bpo-39390(3): Fixed a regression with the ‘ignore’ callback of
     *note shutil.copytree(): c14.  The argument types are now ‘str’ and
     ‘List[str]’ again.

   - bpo-39395(4): The *note os.putenv(): 25a. and *note os.unsetenv():
     25b. functions are now always available.

   - bpo-39406(5): If ‘setenv()’ C function is available, *note
     os.putenv(): 25a. 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(): 1ae8. to be used
     with file and file-like objects, like *note zipfile.is_zipfile():
     1525.  Patch by William Woodruff.

   - bpo-39377(8): Removed ‘encoding’ option from *note json.loads():
     b44.  It has been deprecated since Python 3.1.

   - bpo-39389(9): Write accurate compression level metadata in *note
     gzip: 6b. 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: a5c.  Since Python 3.0, it was ignored and using it
     was emitting *note DeprecationWarning: 1a3.  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: 11.
     functions: ‘b2a_hqx()’, ‘a2b_hqx()’, ‘rlecode_hqx()’,
     ‘rledecode_hqx()’, *note crc_hqx(): 932.

   - bpo-39351(13): Remove ‘base64.encodestring()’ and
     ‘base64.decodestring()’, aliases deprecated since Python 3.1: use
     *note base64.encodebytes(): b42. and *note base64.decodebytes():
     b43. instead.

   - bpo-39350(14): Remove ‘fractions.gcd()’ function, deprecated since
     Python 3.5 (bpo-22486(15)): use *note math.gcd(): b02. instead.

   - bpo-39329(16): *note LMTP: b1f. 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: aed. and *note FTP_TLS: aed. now
     raise a *note ValueError: 2ea. 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: b1d. and *note SMTP_SSL: b1e. now raise
     a *note ValueError: 2ea. 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(): b04.: 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:
     2ea. 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(): 6b5.: return the next
     floating-point value after 'x' towards 'y'.

   - bpo-39259(25): *note POP3: b13. and *note POP3_SSL: b14. now raise
     a *note ValueError: 2ea. 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: 76. module is
     imported.

   - bpo-39239(28): The *note select.epoll.unregister(): b49. method no
     longer ignores the *note EBADF: b4a. 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(): 1c47. 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: 897.

   - 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: e3f. to
     return a correct result upon inheritance.  Patch by Bar Harel.

   - bpo-38615(45): *note IMAP4: af5. and *note IMAP4_SSL: af6. now have
     an optional 'timeout' parameter for their constructors.  Also, the
     *note open(): af7. method now has an optional 'timeout' parameter
     with this change.  The overridden methods of *note IMAP4_SSL: af6.
     and *note IMAP4_stream: af8. 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(): 15cf.
     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: c77. 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(): 755. was called without
     arguments.

   - bpo-38293(51): Add *note copy.copy(): 74c. and *note
     copy.deepcopy(): d59. support to *note property(): 4ad. 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<46>,  Next: Construção<50>,  Prev: Biblioteca<52>,  Up: Python 3 9 0 alpha 3

1.24.52.3 Documentação
......................

   - bpo-39381(1): Mention in docs that *note asyncio.get_event_loop():
     2f0. 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: 82. docs’ *note Tipos e
     membros: 1c49. table.

   - bpo-3530(3): In the *note ast: 9. 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<50>,  Next: IDLE<29>,  Prev: Documentação<46>,  Up: Python 3 9 0 alpha 3

1.24.52.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<29>,  Next: API C<48>,  Prev: Construção<50>,  Up: Python 3 9 0 alpha 3

1.24.52.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<48>,  Prev: IDLE<29>,  Up: Python 3 9 0 alpha 3

1.24.52.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.24.53 Python 3.9.0 alpha 2
----------------------------

'Data de lançamento: 2019-12-18'

* Menu:

* Segurança: Segurança<39>.
* Núcleo e embutidos: Núcleo e embutidos<52>.
* Biblioteca: Biblioteca<53>.
* Documentação: Documentação<47>.
* Testes: Testes<47>.
* Construção: Construção<51>.
* Windows: Windows<46>.
* macOS: macOS<37>.
* IDLE: IDLE<30>.
* API C: API C<49>.


File: python.info,  Node: Segurança<39>,  Next: Núcleo e embutidos<52>,  Up: Python 3 9 0 alpha 2

1.24.53.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(): 931. 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:
     74.  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<52>,  Next: Biblioteca<53>,  Prev: Segurança<39>,  Up: Python 3 9 0 alpha 2

1.24.53.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(): 607. 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(): a02.
     and *note sys.unraisablehook(): 501. 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:
     24c. and *note set: 184. displays.  Patch by Brandt Bucher.

   - bpo-38707(15): ‘MainThread.native_id’ is now correctly reset in
     child processes spawned using *note multiprocessing.Process: 251,
     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<53>,  Next: Documentação<47>,  Prev: Núcleo e embutidos<52>,  Up: Python 3 9 0 alpha 2

1.24.53.3 Biblioteca
....................

   - bpo-39033(1): Fix *note NameError: 44f. in *note zipimport: 138.
     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: 4b8.: 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: 124e.: 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: bf. 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:
     76, 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(): 8b5. properly handles
     functions decorated with *note functools.wraps(): 1153.

   - bpo-38870(24): Expose *note ast.unparse(): ad8. as a function of
     the *note ast: 9. module that can be used to unparse an *note
     ast.AST: 4bd. object and produce a string with code that would
     produce an equivalent *note ast.AST: 4bd. 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: 330. 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: 7. 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(): 11ae. no longer returns IPv6 addresses
     with a trailing new line.

   - bpo-38811(30): Fix an unhandled exception in *note pathlib: a8.
     when *note os.link(): 12eb. is missing.  Patch by Toke
     Høiland-Jørgensen.

   - bpo-38686(31): Added support for multiple ‘qop’ values in *note
     urllib.request.AbstractDigestAuthHandler: 1c22.

   - bpo-38712(32): Add the Linux-specific *note
     signal.pidfd_send_signal(): b1b. 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: 5a.  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: 3e.
     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<47>,  Next: Testes<47>,  Prev: Biblioteca<53>,  Up: Python 3 9 0 alpha 2

1.24.53.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(): 18a3. 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<47>,  Next: Construção<51>,  Prev: Documentação<47>,  Up: Python 3 9 0 alpha 2

1.24.53.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: ea. constants: *note LOOPBACK_TIMEOUT: 1c53,
     *note INTERNET_TIMEOUT: 1c54, *note SHORT_TIMEOUT: 1b52. and *note
     LONG_TIMEOUT: 1c55.  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(): 15c5. that was
     failing due to constant folding.

   - bpo-38991(6): *note test.support: ea.: ‘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: f32.  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: 198. when passing target as a
     string with *note unittest.mock.patch.object(): 185c.

   - 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<51>,  Next: Windows<46>,  Prev: Testes<47>,  Up: Python 3 9 0 alpha 2

1.24.53.6 Construção
....................

   - bpo-37404(1): *note asyncio: b. now raises *note TypeError: 198.
     when calling incompatible methods with an *note ssl.SSLSocket: add.
     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<51>,  Up: Python 3 9 0 alpha 2

1.24.53.7 Windows
.................

   - bpo-39007(1): Add auditing events to functions in *note winreg:
     11c.

   - 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<30>,  Prev: Windows<46>,  Up: Python 3 9 0 alpha 2

1.24.53.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<30>,  Next: API C<49>,  Prev: macOS<37>,  Up: Python 3 9 0 alpha 2

1.24.53.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<49>,  Prev: IDLE<30>,  Up: Python 3 9 0 alpha 2

1.24.53.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.24.54 Python 3.9.0 alpha 1
----------------------------

'Data de lançamento: 2019-11-19'

* Menu:

* Segurança: Segurança<40>.
* Núcleo e embutidos: Núcleo e embutidos<53>.
* Biblioteca: Biblioteca<54>.
* Documentação: Documentação<48>.
* Testes: Testes<48>.
* Construção: Construção<52>.
* Windows: Windows<47>.
* macOS: macOS<38>.
* IDLE: IDLE<31>.
* Ferramentas/Demos: Ferramentas/Demos<32>.
* API C: API C<50>.


File: python.info,  Node: Segurança<40>,  Next: Núcleo e embutidos<53>,  Up: Python 3 9 0 alpha 1

1.24.54.1 Segurança
...................

   - bpo-38722(1): *note runpy: c3. now uses *note io.open_code(): 19d4.
     to open code files.  Patch by Jason Killen.

   - bpo-38622(2): Add additional audit events for the *note ctypes: 2e.
     module.

   - bpo-38418(3): Fixes audit event for *note os.system(): 164c. to be
     named ‘os.system’.

   - bpo-38243(4): Escape the server title of *note
     xmlrpc.server.DocXMLRPCServer: 1c5d. 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: 1c5e.).

   - 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: 59, *note
     ftplib: 62, *note glob: 68, *note imaplib: 78, ‘nntplib’, *note
     pdb: aa, *note poplib: b1, *note shutil: ca, *note smtplib: cf,
     *note sqlite3: d4, *note subprocess: dc, ‘telnetlib’, *note
     tempfile: e6. and *note webbrowser: 11b, as well as *note
     os.listdir(): 12f6, *note os.scandir(): c48. and *note
     breakpoint(): 270.

   - bpo-37364(13): *note io.open_code(): 19d4. 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<53>,  Next: Biblioteca<54>,  Prev: Segurança<40>,  Up: Python 3 9 0 alpha 1

1.24.54.2 Núcleo e embutidos
............................

   - bpo-38631(1): Replace ‘Py_FatalError()’ call with a regular *note
     RuntimeError: 243. exception in ‘float.__getformat__()’.

   - bpo-38639(2): Optimized *note math.floor(): 15af, *note
     math.ceil(): 15b0. and *note math.trunc(): 15b1. 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: 192. and *note bytearray: 342. 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: 342, *note array: 4b8. and *note
     mmap: 513. 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(): 16f2. 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: 183. constructor and the
     *note update(): 1654. 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(): 2f1. 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(): c31.
     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(): b52. to normalize the
     encoding name the same way than *note
     encodings.normalize_encoding(): 9f3, except that *note
     codecs.lookup(): b52. also converts the name to lower case.

   - bpo-37830(45): Fixed compilation of *note break: 17f. and *note
     continue: 180. in the *note finally: 1b0. block when the
     corresponding *note try: 8ed. block contains *note return: 1af.
     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:
     1bcf. of *note bytearray: 342.  Patch by Sergey Fedoseev.

   - bpo-37802(48): Slightly improve performance of *note
     PyLong_FromUnsignedLong(): 181c, *note
     PyLong_FromUnsignedLongLong(): 181d. and *note PyLong_FromSize_t():
     181e.  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: 1ae. instead of *note DeprecationWarning: 1a3. 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: 18e. 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(): f8a.

   - 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: b56. statement now works properly
     if the *note AssertionError: 8ad. 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__(): 1263.

   - 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(): a02. 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(): 1912. 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(): b39. and *note
     sys.setswitchinterval(): b3a. 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(): 314, *note
     str.encode(): ac8. and *note bytes.decode(): ac9.

     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(): 314, *note io.open(): 735, *note
     codecs.open(): 313. and *note fileinput.FileInput: 935. 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(): 607. call in *note
     mmap.mmap: 513.

   - 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(): 953.
     function (previously documented but not implemented): call *note
     struct.calcsize(): 1c60.  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(): c27. now also
     supports NetBSD.

   - bpo-37077(87): Add *note threading.get_native_id(): c27. support
     for AIX. Patch by M. Felt

   - bpo-36781(88): *note sum(): 68a. 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: 488. 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<54>,  Next: Documentação<48>,  Prev: Núcleo e embutidos<53>,  Up: Python 3 9 0 alpha 1

1.24.54.3 Biblioteca
....................

   - bpo-36589(1): The *note curses.update_lines_cols(): fe0. function
     now returns ‘None’ instead of ‘1’ on success.

   - bpo-38807(2): Update *note TypeError: 198. messages for *note
     os.path.join(): 18ed. to include *note os.PathLike: e3f. 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: aa. now uses *note io.open_code(): 19d4.
     to trigger auditing events.

   - bpo-27805(7): Allow opening pipes and other non-seekable files in
     append mode with *note open(): 314.

   - bpo-38438(8): Simplify the *note argparse: 7. 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: b0c. constant, which may be
     passed to *note os.waitid(): f8d. to wait on a Linux process file
     descriptor.

   - bpo-38692(12): Add ‘asyncio.PidfdChildWatcher’, 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(): 699.

   - bpo-38602(14): Added constants ‘F_OFD_GETLK’, ‘F_OFD_SETLK’ and
     ‘F_OFD_SETLKW’ to the *note fcntl: 5d. module.  Patch by Donghee
     Na.

   - bpo-38334(15): Fixed seeking backward on an encrypted
     ‘zipfile.ZipExtFile’.

   - bpo-38312(16): Add *note curses.get_escdelay(): ae2, *note
     curses.set_escdelay(): ae3, *note curses.get_tabsize(): ae4, and
     *note curses.set_tabsize(): ae5. functions - by Anthony Sottile.

   - bpo-38586(17): Now *note fileConfig(): d3c. 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: b0a. and *note CLD_STOPPED:
     b0b. 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():
     cf8. 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(): 511. due to improper handling of
     filenames as urls.

   - bpo-38431(29): Fix ‘__repr__’ method for *note dataclasses.InitVar:
     1ac6. to support typing objects, patch by Samuel Colvin.

   - bpo-38109(30): Add missing *note stat.S_IFDOOR: 11b1, *note
     stat.S_IFPORT: 11b2, *note stat.S_IFWHT: 11b3, *note
     stat.S_ISDOOR(): 1c62, *note stat.S_ISPORT(): 1c63, and *note
     stat.S_ISWHT(): 1c64. values to the Python implementation of *note
     stat: d6.

   - bpo-38422(31): Clarify docstrings of pathlib suffix(es)

   - bpo-38405(32): Nested subclasses of *note typing.NamedTuple: 32f.
     are now pickleable.

   - bpo-38332(33): Prevent *note KeyError: 5dd. 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: 1c65. to
     the *note smtplib: cf. 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: 650. 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():
     d4a. to accept *note Py_ssize_t: c49. instead of int.

   - bpo-38112(47): *note compileall: 21. 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: 32f. and *note
     TypedDict: 330. types now accept arbitrary keyword argument names,
     including “cls”, “self”, “typename”, “_typename”, “fields” and
     “_fields”.

   - bpo-38155(52): Add ‘__all__’ to *note datetime: 34.  Patch by Tahia
     Khan.

   - bpo-38185(53): Fixed case-insensitive string comparison in *note
     sqlite3.Row: 1067. 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(): ee8. exceptions.  Patch by
     Abraham Toriz Cruz.

   - bpo-38175(56): Fix a memory leak in comparison of *note
     sqlite3.Row: 1067. 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: b. 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: 1f. module

   - bpo-34037(68): For *note asyncio: b, 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(): 2f1. 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: 59a. as
     ‘directory’ argument to the *note
     http.server.SimpleHTTPRequestHandler: d2c. 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: cb.
     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: 9.
     module.

   - bpo-37953(82): In *note typing: 10a, improved the ‘__hash__’ and
     ‘__eq__’ methods for ‘ForwardReferences’.

   - bpo-38026(83): Fixed *note inspect.getattr_static(): 6b1. used
     ‘isinstance’ while it should avoid dynamic lookup.

   - bpo-35923(84): Update *note importlib.machinery.BuiltinImporter:
     ea1. 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(): ad7.
     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: 5d.

   - 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(): ad7. 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(): c57. 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: 5c. 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(): 1c66. 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: 3b. ‘?’ 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: 7.

   - bpo-34488(123): ‘writelines()’ method of *note io.BytesIO: 109a. 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(): da0. now
     ensures any module it returns is fully initialized.  Patch by
     Joannah Nanjekye.

   - bpo-32178(131): Fix IndexError in *note email: 3f. 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: d1.

   - bpo-37685(134): Fixed comparisons of *note datetime.timedelta: bb9.
     and *note datetime.timezone: 12bb.

   - 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(): 1294. 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():
     1c67. 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: 1a2. for
     unsupported type of the other operand.  This allows the other
     operand to play role (for example the equality comparison with
     *note ANY: 1c68. 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: 12bb. 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: b2, 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: 5a. 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: 1a2. in Python
     implementation of ‘__eq__’ for *note timedelta: bb9. and *note
     time: 1fa. 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: 1c69. 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(): 130a. now correctly
     handles errors that arise during iteration over its ‘mask’
     argument.  Patch by Brandt Bucher.

   - bpo-37412(171): The *note os.getcwdb(): c76. 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: bb.
     module to fail if the accelerator module was not available.  Patch
     by Pablo Galindo.

   - bpo-37376(177): *note pprint: b3. now has support for *note
     types.SimpleNamespace: 4df.  Patch by Carl Bordum Hansen.

   - bpo-26967(178): An *note ArgumentParser: 1bd. 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(): 1c6a. 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(): 5a1,
     *note sqlite3.Connection.create_function(): 5a0, *note
     sqlite3.Connection.set_authorizer(): 5a2, *note
     sqlite3.Connection.set_progress_handler(): 5a3. *note
     sqlite3.Connection.set_trace_callback(): 5a4. 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():
     19a9. 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(): b37.

   - 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(): 1c6b. 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:
     ab. to work even when the C ‘_pickle’ module is unavailable.

   - bpo-21872(197): Fix *note lzma: 8e.: 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: 5e4. 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: 243. raised by *note
     asyncio.all_tasks(): b45. 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(): d73. 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:
     7e9. in *note asyncio.Lock: c5a.

   - 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(): b23. 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: 1c6c. now
     lowercases the keys of the passed dictionary.

   - bpo-26185(221): Fix *note repr(): 1c1. 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: 1c6d. 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:
     1f. no longer are exposed in the regular *note collections: 1e.
     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(): 18e8. 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(): b0f.  Patch by Girts
     Folkmanis.

   - bpo-32498(248): Made *note urllib.parse.unquote(): 1a2e. 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(): 1049. 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<48>,  Next: Testes<48>,  Prev: Biblioteca<54>,  Up: Python 3 9 0 alpha 1

1.24.54.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: 3f. examples from %-formatting
     to f-strings.

   - bpo-38778(4): Document the fact that *note RuntimeError: 243. is
     raised if *note os.fork(): 4af. 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(): 5ff.
     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():
     2e0. docs.

   - bpo-37878(14): Make *note PyThreadState_DeleteCurrent(): 1c6f.
     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: 111.

   - 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: 652.
     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(): 18a3, 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: 34. 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: 59a. 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<48>,  Next: Construção<52>,  Prev: Documentação<48>,  Up: Python 3 9 0 alpha 1

1.24.54.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: ea.:
     *note LOOPBACK_TIMEOUT: 1c53, *note INTERNET_TIMEOUT: 1c54, *note
     SHORT_TIMEOUT: 1b52. and *note LONG_TIMEOUT: 1c55.

   - 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(): 1c71. and *note os.killpg():
     1c72. 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: 34. 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: 176. exception
     using *note threading.excepthook(): a41.

   - 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():
     1c73. 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():
     1c74.: its __exit__() method now ignores unraisable exception
     raised when clearing its ‘unraisable’ attribute.

   - bpo-37069(40): regrtest now uses *note sys.unraisablehook(): 501.
     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(): 1c75. 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<52>,  Next: Windows<47>,  Prev: Testes<48>,  Up: Python 3 9 0 alpha 1

1.24.54.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: 169. and by the *note unicodedata: 10b. 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(): 1c77. 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<52>,  Up: Python 3 9 0 alpha 1

1.24.54.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(): 4d5. 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(): 261.
     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(): 26c. failing for block
     devices on Windows

   - bpo-38020(20): Fixes potential crash when calling *note
     os.readlink(): b10. (or indirectly through *note realpath(): 261.)
     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(): 1c79. no longer fails for standard
     streams on Windows 7.

   - bpo-1311(23): The ‘nul’ file on Windows now returns True from *note
     exists(): bf9. and a valid result from *note os.stat(): 26c. 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(): 6bd. and other reparse points as regular files
     in *note os.stat(): 26c.

   - 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: 64f. 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: 3ea. 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(): 1c79. 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: 1c7a. 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<31>,  Prev: Windows<47>,  Up: Python 3 9 0 alpha 1

1.24.54.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<31>,  Next: Ferramentas/Demos<32>,  Prev: macOS<38>,  Up: Python 3 9 0 alpha 1

1.24.54.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<32>,  Next: API C<50>,  Prev: IDLE<31>,  Up: Python 3 9 0 alpha 1

1.24.54.10 Ferramentas/Demos
............................

   - bpo-38118(1): Update Valgrind suppression file to ignore a false
     alarm in *note PyUnicode_Decode(): 1c7e. 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<50>,  Prev: Ferramentas/Demos<32>,  Up: Python 3 9 0 alpha 1

1.24.54.11 API C
................

   - bpo-37633(1): Re-export some function compatibility wrappers for
     macros in ‘pythonrun.h’.

   - bpo-38644(2): Provide *note Py_EnterRecursiveCall(): 3cf. and *note
     Py_LeaveRecursiveCall(): b61. 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: b6f. is now a constant and refers to
     a constant string.

   - bpo-38540(4): Fixed possible leak in *note PyArg_Parse(): 177c. 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: c3b. 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: 3ea. to
     the program full path (*note Py_GetProgramFullPath(): 3e9.) rather
     than to the program name (*note Py_GetProgramName(): 3eb.).

   - 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(): da2. macro now calls
     *note Py_FatalError(): b70.

   - 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(): 631. and its variants instead.

   - bpo-37151(20): ‘PyCFunction_Call’ is now a deprecated alias of
     *note PyObject_Call(): 631.

   - 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(): 1c80.
     function.

   - bpo-37337(26): Add fast functions for calling methods:
     ‘_PyObject_VectorcallMethod()’, ‘_PyObject_CallMethodNoArgs()’ and
     ‘_PyObject_CallMethodOneArg()’.

   - bpo-28805(27): The *note METH_FASTCALL: 18e2. 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(): 630.
     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(): 1c81.

   - 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.24.55 Python 3.8.0 beta 1
---------------------------

'Data de lançamento: 2019-06-04'

* Menu:

* Segurança: Segurança<41>.
* Núcleo e embutidos: Núcleo e embutidos<54>.
* Biblioteca: Biblioteca<55>.
* Documentação: Documentação<49>.
* Testes: Testes<49>.
* Construção: Construção<53>.
* Windows: Windows<48>.
* macOS: macOS<39>.
* IDLE: IDLE<32>.
* Ferramentas/Demos: Ferramentas/Demos<33>.
* API C: API C<51>.


File: python.info,  Node: Segurança<41>,  Next: Núcleo e embutidos<54>,  Up: Python 3 8 0 beta 1

1.24.55.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: 111.

   - 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<54>,  Next: Biblioteca<55>,  Prev: Segurança<41>,  Up: Python 3 8 0 beta 1

1.24.55.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: 19b, *note float: 196. and
     *note complex: 197. will now use the *note __index__(): 19e.
     special method, if available and the corresponding method *note
     __int__(): 19d, *note __float__(): bb7. or *note __complex__():
     7f2. 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(): bf4.

   - bpo-37032(13): Added new ‘replace()’ method to the code type (*note
     types.CodeType: 32d.).

   - bpo-37007(14): Implement *note socket.if_nameindex(): c18, *note
     socket.if_nametoindex(): c19, and *note socket.if_indextoname():
     c1a. on Windows.

   - bpo-36829(15): *note PyErr_WriteUnraisable(): 5e6. now creates a
     traceback object if there is no current traceback.  Moreover, call
     *note PyErr_NormalizeException(): 427. and *note
     PyException_SetTraceback(): 1c85. 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: 18e. 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: 3c0, *note int: 19b, *note float: 196, *note complex:
     197. and few classes from the standard library.  They now inherit
     ‘__str__()’ from *note object: c72.

   - 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: 891. and *note
     sys.float_info: 1c86. during shutdown.  Patch by Zackery Spytz.

   - bpo-26826(42): Expose ‘copy_file_range()’ as a low level API in the
     *note os: a5. 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<55>,  Next: Documentação<49>,  Prev: Núcleo e embutidos<54>,  Up: Python 3 8 0 beta 1

1.24.55.3 Biblioteca
....................

   - bpo-37128(1): Added *note math.perm(): 8d5.

   - 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(): c5f.
     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(): 4ae. now logs
     uncaught exception raised by the function using *note
     sys.unraisablehook(): 501, rather than *note sys.excepthook(): a02,
     so the hook gets access to the function which raised the exception.

   - bpo-33725(11): On macOS, the *note multiprocessing: 98. 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: c33. setup for autospeccing.  Document
     newly implemented async methods in *note unittest.mock.MagicMock:
     1085.

   - 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(): 1c88. now accepts the
     same input types for source code as the built-in *note compile():
     4ab. 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(): a41.
     function which handles uncaught *note threading.Thread.run(): c26.
     exception.  It can be overridden to control how uncaught *note
     threading.Thread.run(): c26. exceptions are handled.

   - bpo-36996(25): Handle *note unittest.mock.patch(): 1088. used as a
     decorator on async functions.

   - bpo-37008(26): Add support for calling *note next(): 9ce. with the
     mock resulting from *note unittest.mock.mock_open(): 11dd.

   - 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(): 9f6. and *note
     fileinput.FileInput: 935. '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: 1e. is deprecated, and import should be done from
     *note collections.abc: 1f.  Still being able to import from *note
     collections: 1e. 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: 44f. in
     ‘urllib.request.URLopener.retrieve()’.  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(): 132a. now ignores *note
     errno.EINVAL: 1c89. on *note os.setxattr(): 1303. 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: 1b68. and *note asyncio.StreamWriter: 19af.
     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(): c60. and *note
     asyncio.create_subprocess_exec(): c5f. to use ‘asyncio.Stream’
     instead of deprecated ‘StreamReader’ and ‘StreamWriter’.  Deprecate
     *note asyncio.StreamReader: 1b68. and *note asyncio.StreamWriter:
     19af.  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(): bee. 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: d4. 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(): 501. 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(): 1b3.).

   - 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: 241. 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: be0. exception to the *note
     gzip: 6b. 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(): c10. now supports silent
     mode.  Patch by Joannah Nanjekye

   - bpo-29183(72): Fix double exceptions in *note
     wsgiref.handlers.BaseHandler: 1c8a. 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(): 13fb. 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(): 11dd. results now
     respects the argument of read([size]).  Patch contributed by Rémi
     Lapeyre.

   - bpo-35431(88): Implement *note math.comb(): 8d4. 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:
     1430. 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(): 219. is
     slightly improved.  Patch by Sergey Fedoseev.

   - bpo-33361(95): Fix a bug in *note codecs.StreamRecoder: 1c8b. where
     seeking might leave old data in a buffer and break subsequent read
     calls.  Patch by Ammar Askar.

   - bpo-22454(96): The *note shlex: c9. module now exposes *note
     shlex.join(): c12, the inverse of *note shlex.split(): 753.  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(): 4b1. on Windows.  The 'args' parameter
     now accepts a *note path-like object: 59a. 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: 59a.  The 'cwd' parameter now accepts a bytes object.
     Based on patch by Anders Lorentsen.

   - bpo-33123(100): *note pathlib.Path.unlink: 1c8c. now accepts a
     'missing_ok' parameter to avoid a *note FileNotFoundError: 263.
     from being raised.  Patch by Robert Buchholz.

   - bpo-32941(101): Allow *note mmap.mmap: 513. objects to access the
     madvise() system call (through *note mmap.mmap.madvise(): bf1.).

   - 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(): 18bb. 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<49>,  Next: Testes<49>,  Prev: Biblioteca<55>,  Up: Python 3 8 0 beta 1

1.24.55.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<49>,  Next: Construção<53>,  Prev: Documentação<49>,  Up: Python 3 8 0 beta 1

1.24.55.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(): 1c74. rather than
     *note test.support.captured_stderr(): 1c8f.

   - 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():
     1c74.: context manager catching unraisable exception using *note
     sys.unraisablehook(): 501.

   - 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: 34. 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<53>,  Next: Windows<48>,  Prev: Testes<49>,  Up: Python 3 8 0 beta 1

1.24.55.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<53>,  Up: Python 3 8 0 beta 1

1.24.55.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(): c8e. 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<32>,  Prev: Windows<48>,  Up: Python 3 8 0 beta 1

1.24.55.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<32>,  Next: Ferramentas/Demos<33>,  Prev: macOS<39>,  Up: Python 3 8 0 beta 1

1.24.55.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<33>,  Next: API C<51>,  Prev: IDLE<32>,  Up: Python 3 8 0 beta 1

1.24.55.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<51>,  Prev: Ferramentas/Demos<33>,  Up: Python 3 8 0 beta 1

1.24.55.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(): 1c96. 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(): 42d. 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.24.56 Python 3.8.0 alpha 4
----------------------------

'Data de lançamento: 2019-05-06'

* Menu:

* Segurança: Segurança<42>.
* Núcleo e embutidos: Núcleo e embutidos<55>.
* Biblioteca: Biblioteca<56>.
* Documentação: Documentação<50>.
* Testes: Testes<50>.
* Construção: Construção<54>.
* Windows: Windows<49>.
* macOS: macOS<40>.
* IDLE: IDLE<33>.
* Ferramentas/Demos: Ferramentas/Demos<34>.
* API C: API C<52>.


File: python.info,  Node: Segurança<42>,  Next: Núcleo e embutidos<55>,  Up: Python 3 8 0 alpha 4

1.24.56.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(): 6d0. 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(): 6d0. and the
     *note subprocess: dc. 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<55>,  Next: Biblioteca<56>,  Prev: Segurança<42>,  Up: Python 3 8 0 alpha 4

1.24.56.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: 105. 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: 290. 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(): 63c, *note Py_END_ALLOW_THREADS(): c73, and
     *note PyGILState_Ensure(): 63e.

   - 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(): 147f.

   - bpo-36440(18): Include node names in ‘ParserError’ messages,
     instead of numeric IDs.  Patch by A. Skrobov.

   - bpo-36143(19): Regenerate *note keyword: 88. from the Grammar and
     Tokens file using pgen.  Patch by Pablo Galindo.

   - bpo-18372(20): Add missing *note PyObject_GC_Track(): 16f2. calls
     in the *note pickle: ab. 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<56>,  Next: Documentação<50>,  Prev: Núcleo e embutidos<55>,  Up: Python 3 8 0 alpha 4

1.24.56.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: 935. 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:
     3ea. is ‘None’ or an empty string: use *note os.getcwd(): 185f. to
     initialize ‘project_base’.  Fix also the distutils build command:
     don’t use *note sys.executable: 3ea. if it is ‘None’ or an empty
     string.

   - bpo-35755(12): *note shutil.which(): 6d0. and
     ‘distutils.spawn.find_executable’ now use ‘os.confstr("CS_PATH")’
     if available instead of *note os.defpath: 1c9b, if the ‘PATH’
     environment variable is not set.  Moreover, don’t use
     ‘os.confstr("CS_PATH")’ nor *note os.defpath: 1c9b. 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: b. 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: 16f. ‘dev’) and in
     debug build, the *note io.IOBase: 4ff. 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(): 13e4. 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:
     73, 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(): 1088. object will now return ‘None’ instead
     of raising *note RuntimeError: 243, 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(): bd5. and *note
     datetime.datetime.fromisocalendar(): bd6, 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: 95. no longer depends on the
     deprecated *note imp: 7a. module, and the initializer for *note
     modulefinder.ModuleFinder: 1c9c. now has immutable default
     arguments.  Patch by Brandt Bucher.

   - bpo-35376(40): *note modulefinder: 95. correctly handles modules
     that have the same name as a bad package.  Patch by Brandt Bucher.

   - bpo-17396(41): *note modulefinder: 95. no longer crashes when
     encountering syntax errors in followed imports.  Patch by Brandt
     Bucher.

   - bpo-35934(42): Added *note create_server(): c16. and *note
     has_dualstack_ipv6(): c17. 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(): 488. and *note
     staticmethod(): 450. to *note unittest.mock.create_autospec():
     1886.  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: c34.

   - bpo-34547(48): *note wsgiref.handlers.BaseHandler: 1c8a. now
     handles abrupt client connection terminations gracefully.  Patch by
     Petter Strandmark.

   - bpo-31658(49): *note xml.sax.parse(): 1c9d. now supports *note
     path-like: 59a.  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<50>,  Next: Testes<50>,  Prev: Biblioteca<56>,  Up: Python 3 8 0 alpha 4

1.24.56.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: 11e.  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: 11e. 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<50>,  Next: Construção<54>,  Prev: Documentação<50>,  Up: Python 3 8 0 alpha 4

1.24.56.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: 1ca0. error.

   - bpo-36611(8): Fix ‘test_sys.test_getallocatedblocks()’ when *note
     tracemalloc: 105. 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<54>,  Next: Windows<49>,  Prev: Testes<50>,  Up: Python 3 8 0 alpha 4

1.24.56.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(): 28d. function and the *note PYTHONDUMPREFS: b94.
     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<54>,  Up: Python 3 8 0 alpha 4

1.24.56.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(): bd3.

   - 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<33>,  Prev: Windows<49>,  Up: Python 3 8 0 alpha 4

1.24.56.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<33>,  Next: Ferramentas/Demos<34>,  Prev: macOS<40>,  Up: Python 3 8 0 alpha 4

1.24.56.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<34>,  Next: API C<52>,  Prev: IDLE<33>,  Up: Python 3 8 0 alpha 4

1.24.56.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<52>,  Prev: Ferramentas/Demos<34>,  Up: Python 3 8 0 alpha 4

1.24.56.11 API C
................

   - bpo-36763(1): Fix memory leak in ‘Py_SetStandardStreamEncoding()’:
     release memory if the function is called twice.

   - bpo-36641(2): PyDoc_VAR(name) and *note PyDoc_STRVAR: 1c12.(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(): e58. 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():
     db4. before *note Py_Initialize(): 45d. 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(): 1ca7.
     function were incorrectly interpreted as a single timestamp rather
     than an arguments tuple, which causes existing code to start
     raising *note TypeError: 198.  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.24.57 Python 3.8.0 alpha 3
----------------------------

'Data de lançamento: 2019-03-25'

* Menu:

* Segurança: Segurança<43>.
* Núcleo e embutidos: Núcleo e embutidos<56>.
* Biblioteca: Biblioteca<57>.
* Documentação: Documentação<51>.
* Testes: Testes<51>.
* Construção: Construção<55>.
* Windows: Windows<50>.
* IDLE: IDLE<34>.
* Ferramentas/Demos: Ferramentas/Demos<35>.
* API C: API C<53>.


File: python.info,  Node: Segurança<43>,  Next: Núcleo e embutidos<56>,  Up: Python 3 8 0 alpha 3

1.24.57.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: 1caa. 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<56>,  Next: Biblioteca<57>,  Prev: Segurança<43>,  Up: Python 3 8 0 alpha 3

1.24.57.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: 3e1. 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(): 4ab. 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(): f00, *note
     marshal.load(): 1cac, 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__(): 19e. special method will be
     used instead of *note __int__(): 19d. 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<57>,  Next: Documentação<51>,  Prev: Núcleo e embutidos<56>,  Up: Python 3 8 0 alpha 3

1.24.57.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: b. 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: e4. 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: 8b. 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: aa. ‘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: 513. 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(): 1cae.
     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:
     59a.  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(): 12db.
     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(): 1886. 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<51>,  Next: Testes<51>,  Prev: Biblioteca<57>,  Up: Python 3 8 0 alpha 3

1.24.57.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<51>,  Next: Construção<55>,  Prev: Documentação<51>,  Up: Python 3 8 0 alpha 3

1.24.57.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<55>,  Next: Windows<50>,  Prev: Testes<51>,  Up: Python 3 8 0 alpha 3

1.24.57.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<34>,  Prev: Construção<55>,  Up: Python 3 8 0 alpha 3

1.24.57.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<34>,  Next: Ferramentas/Demos<35>,  Prev: Windows<50>,  Up: Python 3 8 0 alpha 3

1.24.57.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<35>,  Next: API C<53>,  Prev: IDLE<34>,  Up: Python 3 8 0 alpha 3

1.24.57.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<53>,  Prev: Ferramentas/Demos<35>,  Up: Python 3 8 0 alpha 3

1.24.57.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.24.58 Python 3.8.0 alpha 2
----------------------------

'Data de lançamento: 2019-02-25'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<57>.
* Biblioteca: Biblioteca<58>.
* Documentação: Documentação<52>.
* Testes: Testes<52>.
* Windows: Windows<51>.
* IDLE: IDLE<35>.


File: python.info,  Node: Núcleo e embutidos<57>,  Next: Biblioteca<58>,  Up: Python 3 8 0 alpha 2

1.24.58.1 Núcleo e embutidos
............................

   - bpo-36052(1): Raise a *note SyntaxError: 18e. 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: e3f. 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(): dbc. 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<58>,  Next: Documentação<52>,  Prev: Núcleo e embutidos<57>,  Up: Python 3 8 0 alpha 2

1.24.58.2 Biblioteca
....................

   - bpo-35512(1): *note unittest.mock.patch.dict(): 18bb. 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(): 6d0.

   - bpo-35960(6): Fix *note dataclasses.field(): 18ae. 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(): 1cb9.
     assertion errors.  Contributed by Susan Su.

   - bpo-35931(8): The *note pdb: aa. ‘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(): 1428, *note re.findall(): 1220, *note re.sub():
     59c. 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: 11a.: 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(): bed. as analogous
     function to *note sum(): 68a. 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: 4dc. subclasses and *note datetime.timedelta:
     bb9. now returns an object of the same type as the *note
     datetime.datetime: 4dc. subclass.  As a result, *note
     datetime.datetime.astimezone(): bba. and alternate constructors
     like *note datetime.datetime.now(): 706. 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: c41, ‘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<52>,  Next: Testes<52>,  Prev: Biblioteca<58>,  Up: Python 3 8 0 alpha 2

1.24.58.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<52>,  Next: Windows<51>,  Prev: Documentação<52>,  Up: Python 3 8 0 alpha 2

1.24.58.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<35>,  Prev: Testes<52>,  Up: Python 3 8 0 alpha 2

1.24.58.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<35>,  Prev: Windows<51>,  Up: Python 3 8 0 alpha 2

1.24.58.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.24.59 Python 3.8.0 alpha 1
----------------------------

'Data de lançamento: 2019-02-03'

* Menu:

* Segurança: Segurança<44>.
* Núcleo e embutidos: Núcleo e embutidos<58>.
* Biblioteca: Biblioteca<59>.
* Documentação: Documentação<53>.
* Testes: Testes<53>.
* Construção: Construção<56>.
* Windows: Windows<52>.
* macOS: macOS<41>.
* IDLE: IDLE<36>.
* Ferramentas/Demos: Ferramentas/Demos<36>.
* API C: API C<54>.


File: python.info,  Node: Segurança<44>,  Next: Núcleo e embutidos<58>,  Up: Python 3 8 0 alpha 1

1.24.59.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: b4d. command line option (run Python in
     isolated mode) is now also copied by the *note multiprocessing: 98.
     and ‘distutils’ modules when spawning child processes.  Previously,
     only *note -E: b4c. and *note -s: 1580. options (enabled by *note
     -I: b4d.) 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(): cf8. 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<58>,  Next: Biblioteca<59>,  Prev: Segurança<44>,  Up: Python 3 8 0 alpha 1

1.24.59.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(): 199. 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(): 61f. and ‘%s’ in *note
     PyBytes_FromFormat(): 1cc1. no longer read memory past the limit if
     'precision' is specified.

   - bpo-35504(12): Fix segfaults and *note SystemError: 78a.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(): 828, ‘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: 138.  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: a5. methods
     that path-like objects are also accepted as input parameters.

   - bpo-35050(34): *note socket: d1.: Fix off-by-one bug in length
     check for ‘AF_ALG’ name and type.

   - bpo-29743(35): Raise *note ValueError: 2ea. instead of *note
     OverflowError: a77. in case of a negative ‘_length_’ in a *note
     ctypes.Array: 1cc2. subclass.  Also raise *note TypeError: 198.
     instead of *note AttributeError: 5e4. 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: 1ae. raised as an exception at
     code generation time will be now replaced with a *note SyntaxError:
     18e. for better error reporting.

   - bpo-34983(38): Expose *note symtable.Symbol.is_nonlocal(): 1cc3. in
     the symtable module.  Patch by Pablo Galindo.

   - bpo-34974(39): *note bytes: 192. and *note bytearray: 342.
     constructors no longer convert unexpected exceptions (e.g.  *note
     MemoryError: 1809. and *note KeyboardInterrupt: bbb.) to *note
     TypeError: 198.

   - 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(): 192. when the *note
     list: 24c. 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: 1ae. is now emitted instead
     of a *note DeprecationWarning: 1a3. 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:
     1ae. 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(): 28d.  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(): 314. 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: 5e4. 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(): 500, ensure that the
     *note closed: 1cc4. 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(): 1bab. before calling *note
     PyErr_Print(): 1be8.  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(): 1b97, *note
     PyIndex_Check(): b77. and *note PyExceptionClass_Name(): c4f. 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: 13bd. list.  *note PyGC_Collect(): b7b. 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: 243. is now raised when the
     custom metaclass doesn’t provide the ‘__classcell__’ entry in the
     namespace passed to ‘type.__new__’.  A *note DeprecationWarning:
     1a3. was emitted in Python 3.6–3.7.

   - bpo-33499(108): Add *note PYTHONPYCACHEPREFIX: b91. environment
     variable and *note -X: 16f. ‘pycache_prefix’ command-line option to
     set an alternate root directory for writing module bytecode cache
     files.

   - bpo-25711(109): The *note zipimport: 138. 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 shrunk only
     when ‘used == 0’.  Now dict has more chance to be shrunk.

   - 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: c93. and
     fixes the following issues:

        * Setting global *note StopAsyncIteration: 1cc5. 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: 180. statement is now allowed in
     the *note finally: 1b0. 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: 17f, *note
     continue: 180. and *note return: 1af.

     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<59>,  Next: Documentação<53>,  Prev: Núcleo e embutidos<58>,  Up: Python 3 8 0 alpha 1

1.24.59.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(): 528. and *note
     os.posix_spawnp(): 1cc7. now have a 'setsid' parameter.

   - bpo-23846(8): *note asyncio.ProactorEventLoop: 812. now catches and
     logs send errors when the self-pipe is full.

   - bpo-34323(9): *note asyncio: b.: 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(): 1cc7. 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: 92. 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: c2c. 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(): aca. and *note pydoc: ba.

   - 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(): b8f. function on *note fractions.Fraction: 212.
     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: dc. module can now use the
     *note os.posix_spawn(): 528. 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: 2e. callback workaround: no
     longer create a callback at startup.  Avoid SELinux alert on
     ‘import ctypes’ and ‘import uuid’.

   - bpo-31784(33): *note uuid.uuid1(): d95. now calls *note
     time.time_ns(): cd3. rather than ‘int(time.time() * 1e9)’.

   - bpo-35513(34): ‘TextTestRunner’ of ‘unittest.runner’ now uses *note
     time.perf_counter(): c6e. rather than *note time.time(): 556. to
     measure the execution time of a test: *note time.time(): 556. can
     go backwards, whereas *note time.perf_counter(): c6e. is monotonic.

   - bpo-35502(35): Fixed reference leaks in *note
     xml.etree.ElementTree.TreeBuilder: c3f. 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(): 1942. 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: 98.: 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: c34. attributes.  Patch by Pablo Galindo.

   - bpo-17185(44): Set ‘__signature__’ on mock for *note inspect: 82.
     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: 546. 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: af. 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: 5dd. on calling *note pwd.getpwuid(): 1cc8.: 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: cc. 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(): 1766. 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(): f94. 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(): f94. 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(): 1cc9. now redirects ‘stderr’
     to *note os.devnull: 1cca. 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(): 318.
     instead.

   - bpo-35344(61): On macOS, *note platform.platform(): 19fe. now uses
     *note platform.mac_ver(): 1ccb, 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(): dec. 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: 1c6a. 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: 197c.’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: 67. 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(): 133b.
     now exits immediately if it’s *note shutdown(): 1ccc. 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: 1085. now supports
     the ‘__fspath__’ method (from *note os.PathLike: e3f.).

   - bpo-35008(88): Fixed references leaks when call the
     ‘__setstate__()’ method of *note xml.etree.ElementTree.Element:
     360. 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(): 30b, *note
     inspect.isgeneratorfunction(): 1a77. and *note
     inspect.isasyncgenfunction(): 1a78. work with *note
     functools.partial(): 216.  Patch by Pablo Galindo.

   - bpo-34521(92): Use *note socket.CMSG_SPACE(): 1ccd. to calculate
     ancillary data size instead of *note socket.CMSG_LEN(): 1cce. 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: ba. 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(): 1ccf. now
     accepts *note path-like object: 59a. 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: 12b. module
     are now able to find children which are instances of ‘Element’
     subclasses.

   - bpo-32680(102): *note smtplib.SMTP: b1d. 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(): 1cd0.
     and *note hexdigest(): 1cd1. methods for the SHAKE algorithm in the
     *note hashlib: 6c. module.

   - bpo-34925(108): 25% speedup in argument parsing for the functions
     in the bisect module.

   - bpo-34900(109): Fixed *note unittest.TestCase.debug(): 1b38. 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(): c10, 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(): 1cd2. 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: 138.

   - bpo-32892(126): The parser now represents all constants as *note
     ast.Constant: 2ed. 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: eea.
     on mock instances with deleted attributes

   - bpo-34672(134): Add a workaround, so the ‘'Z'’ *note
     time.strftime(): 13e5. 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(): 522. 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(): c35. and *note
     addClassCleanup(): c36. to unittest to support cleanups for *note
     setUpModule(): c37. and *note setUpClass(): c38.  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:
     dc. 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: dc. 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: 1c9b. 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: 2ea. is
     now raised by *note multiprocessing.Queue.put(): 1cd3. and *note
     multiprocessing.Queue.get(): 1cd4. instead of *note AssertionError:
     8ad. and *note OSError: 2bf, 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: 137.  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: 103. 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(): 9ba.  Patch by Alexey Izbyshev.

   - bpo-34427(168): Fix infinite loop in ‘a.extend(a)’ for
     ‘MutableSequence’ subclasses.

   - bpo-34412(169): Make *note signal.strsignal(): 1cd5. 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(): b10. now accepts *note
     path-like: 59a. and *note bytes: 192. objects on Windows.

   - bpo-22602(173): The UTF-7 decoder now raises *note
     UnicodeDecodeError: bfe. for ill-formed sequences starting with “+”
     (as specified in RFC 2152).  Patch by Zackery Spytz.

   - bpo-2122(174): The *note mmap.flush(): c82. 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(): 18a9. when formatting an error
     message.

   - bpo-18540(177): The *note imaplib.IMAP4: af5. and *note
     imaplib.IMAP4_SSL: af6. 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(): 745, *note
     assertRaisesRegex(): 747, *note assertWarns(): 1360. and *note
     assertWarnsRegex(): 1361. 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__(): 581. methods of *note
     xml.dom.pulldom.DOMEventStream: 933, *note
     wsgiref.util.FileWrapper: 934. and *note fileinput.FileInput: 935.

   - 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(): 1cd6. and
     *note dbm.ndbm.open(): 1cd7. 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(): 1050. 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(): bc7. and *note set_name(): bc6.) and is visible in the
     *note repr(): 1c1. output.  An initial name can also be set using
     the new ‘name’ keyword argument to *note asyncio.create_task():
     1c9. 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: d4.
     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(): 12ff. 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(): 5a1,
     *note sqlite3.Connection.create_function(): 5a0, *note
     sqlite3.Connection.set_authorizer(): 5a2, *note
     sqlite3.Connection.set_progress_handler(): 5a3. 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: 2d. reader
     are now *note bool: 3c0. instances instead of integers 0 or 1.

   - bpo-32788(200): Errors other than *note TypeError: 198. raised in
     methods ‘__adapt__()’ and ‘__conform__()’ in the *note sqlite3: d4.
     module are now propagated to the user.

   - bpo-21446(201): The ‘reload’ fixer now uses *note
     importlib.reload(): 732. 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(): 121b. 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: 6c.

   - 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(): 5a0. 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(): 555. instead of the system clock
     *note time.time(): 556. 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: ff. 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(): d49,
     *note os.writev(): d4c, *note os.preadv(): d48. and *note
     os.pwritev(): d4b. and in *note os.sendfile(): cf8. with 'headers'
     or 'trailers' arguments (on BSD-based OSes and macOS).

   - bpo-25007(226): Add *note copy.copy(): 74c. and *note
     copy.deepcopy(): d59. 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(): c14. uses *note
     os.scandir(): c48. function and all copy functions depending from
     it use cached *note os.stat(): 26c. 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(): 26c. syscalls is reduced by 38% making *note
     shutil.copytree(): c14. 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: a6. functions that return a boolean
     result like *note exists(): bf9, *note lexists(): bfa, *note
     isdir(): bfb, *note isfile(): bfc, *note islink(): bf7, and *note
     ismount(): bfd, and *note pathlib.Path: 265. methods that return a
     boolean result like *note exists(): c01, *note is_dir(): 534, *note
     is_file(): 533, *note is_mount(): c02, *note is_symlink(): c03,
     *note is_block_device(): c04, *note is_char_device(): c05, *note
     is_fifo(): c06, *note is_socket(): c07. now return ‘False’ instead
     of raising *note ValueError: 2ea. or its subclasses *note
     UnicodeEncodeError: 87c. and *note UnicodeDecodeError: bfe. for
     paths that contain characters or bytes unrepresentable at the OS
     level.

   - bpo-26544(237): Fixed implementation of *note platform.libc_ver():
     1766.  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: 198. instead of
     *note SystemError: 78a. when performed on *note mmap.mmap: 513.
     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:
     11b. 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(): 80a. 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(): c43, *note shutil.copy():
     c44, *note shutil.copy2(): c45, *note shutil.copytree(): c14. and
     *note shutil.move(): 1049. use platform-specific fast-copy syscalls
     on Linux and macOS in order to copy the file more efficiently.  On
     Windows *note shutil.copyfile(): c43. uses a bigger default buffer
     size (1 MiB instead of 16 KiB) and a *note memoryview(): 165.-based
     variant of *note shutil.copyfileobj(): c46. 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(): d95. on FreeBSD.

   - bpo-33238(277): Add ‘InvalidStateError’ to *note
     concurrent.futures: 24.  ‘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(): 6f6. 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:
     d2.

   - 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: 1085. now supports
     the ‘__round__’ magic method.

   - bpo-28612(298): Added support for Site Maps to urllib’s
     ‘RobotFileParser’ as *note RobotFileParser.site_maps(): 1cd8.
     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: 26. from *note collections.OrderedDict: 7e8. to
     the standard *note dict: 183. 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: c3e.  The
     ‘doctype()’ method defined in a subclass will no longer be called.
     Deprecated methods ‘getchildren()’ and ‘getiterator()’ in the *note
     ElementTree: 12b. module emit now a *note DeprecationWarning: 1a3.
     instead of *note PendingDeprecationWarning: abc.

   - 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: 73.  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(): 11dd. now supports
     iteration over the file contents.  Patch by Tony Flury.

   - bpo-33217(317): Raise *note TypeError: 198. 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: 38. 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():
     1127.

   - bpo-27485(323): Rename and deprecate undocumented functions in
     *note urllib.parse(): 110.

   - 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(): 1cd9. are not included in the
     resulting output.

   - bpo-33329(326): Fix multiprocessing regression on newer glibcs

   - bpo-33334(327): *note dis.stack_effect(): 1127. now supports all
     defined opcodes including NOP and EXTENDED_ARG.

   - bpo-991266(328): Fix quoting of the ‘Comment’ attribute of *note
     http.cookies.SimpleCookie: 1cda.

   - 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(): 4fd. and
     *note importlib.abc.ResourceReader.contents(): 1cdb. return an
     *note iterable: 1423. instead of an *note iterator: 4c2.

   - 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: 23b. 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:
     3e1. 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: 7ef. 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(): 1cdc.

   - 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: ab. 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(): 528.

   - 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: 84. 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: 119. 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: f6, ‘after_cancel(None)’ now
     raises a *note ValueError: 2ea. 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(): 17b8. 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: 36. database opened with flags
     ‘r’ is now read-only.  *note dbm.dumb.open(): c80. 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: ff.
     Patch by Alan D Moore.

   - bpo-32512(421): *note profile: b4. 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(): 1cdd. 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: bd0.

   - 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:
     4dc, *note date: 1f9. and *note time: 1fa. pickled by Python 2.
     ‘encoding='latin1'’ should be used for successful decoding.

   - bpo-27645(434): *note sqlite3.Connection: 547. now exposes a *note
     backup: d67. 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: 2e.  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<53>,  Next: Testes<53>,  Prev: Biblioteca<59>,  Up: Python 3 8 0 alpha 1

1.24.59.4 Documentação
......................

   - bpo-21257(1): Document *note http.client.parse_headers(): 1cdf.

   - 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: 54. 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(): d02, *note asyncio.start_server(): d03.
     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: 136. 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: ea. 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: 5e4.

   - bpo-32614(51): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a3. 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: d1.
     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<53>,  Next: Construção<56>,  Prev: Documentação<53>,  Up: Python 3 8 0 alpha 1

1.24.59.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: 12. module when running directly
     a test like ‘./python Lib/test/test_xmlrpc.py’.

   - bpo-35513(9): Replace *note time.time(): 556. with *note
     time.monotonic(): 555. 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<56>,  Next: Windows<52>,  Prev: Testes<53>,  Up: Python 3 8 0 alpha 1

1.24.59.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 ‘PyThread_start_new_thread()’: 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<56>,  Up: Python 3 8 0 alpha 1

1.24.59.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: 2bf. 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(): b10. 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<36>,  Prev: Windows<52>,  Up: Python 3 8 0 alpha 1

1.24.59.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<36>,  Next: Ferramentas/Demos<36>,  Prev: macOS<41>,  Up: Python 3 8 0 alpha 1

1.24.59.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: 1b8.; ‘-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<36>,  Next: API C<54>,  Prev: IDLE<36>,  Up: Python 3 8 0 alpha 1

1.24.59.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<54>,  Prev: Ferramentas/Demos<36>,  Up: Python 3 8 0 alpha 1

1.24.59.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(): 190e. for empty bytes
     objects.

   - bpo-35322(3): Fix memory leak in *note PyUnicode_EncodeLocale():
     db7. and *note PyUnicode_EncodeFSDefault(): 1ce7. on error
     handling.

   - bpo-35059(4): The following C macros have been converted to static
     inline functions: *note Py_INCREF(): 784, *note Py_DECREF(): 785,
     *note Py_XINCREF(): c4e, *note Py_XDECREF(): 987,
     ‘PyObject_INIT()’, ‘PyObject_INIT_VAR()’.

   - 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(): f05.
     (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(): 18d2. 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: 78a. in *note
     PyArg_ParseTupleAndKeywords(): 618. when the ‘w*’ format unit is
     used for optional parameter.

   - bpo-32455(16): Added ‘PyCompile_OpcodeStackEffectWithJump()’.

   - 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():
     1ce8, *note PySequence_GetItem(): 1ce9, *note PySequence_SetItem():
     1cea. and *note PySequence_DelItem(): 1ceb. called with a mapping
     and *note PyMapping_Size(): 1cec. called with a sequence.

   - bpo-33818(19): *note PyExceptionClass_Name(): c4f. 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(): 1ced. and *note
     PyUnicode_AsWideCharString(): aaf. 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.24.60 Python 3.7.0 final
--------------------------

'Data de lançamento: 2018-06-27'

* Menu:

* Biblioteca: Biblioteca<60>.
* API C: API C<55>.


File: python.info,  Node: Biblioteca<60>,  Next: API C<55>,  Up: Python 3 7 0 final

1.24.60.1 Biblioteca
....................

   - bpo-33851(1): Fix *note ast.get_docstring(): 1cf0. for a node that
     lacks a docstring.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33851


File: python.info,  Node: API C<55>,  Prev: Biblioteca<60>,  Up: Python 3 7 0 final

1.24.60.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.24.61 Python 3.7.0 release candidate 1
----------------------------------------

'Data de lançamento: 2018-06-12'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<59>.
* Biblioteca: Biblioteca<61>.
* Documentação: Documentação<54>.
* Construção: Construção<57>.
* Windows: Windows<53>.
* IDLE: IDLE<37>.


File: python.info,  Node: Núcleo e embutidos<59>,  Next: Biblioteca<61>,  Up: Python 3 7 0 release candidate 1

1.24.61.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<61>,  Next: Documentação<54>,  Prev: Núcleo e embutidos<59>,  Up: Python 3 7 0 release candidate 1

1.24.61.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: 198. instead of
     *note SystemError: 78a. when performed on *note mmap.mmap: 513.
     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<54>,  Next: Construção<57>,  Prev: Biblioteca<61>,  Up: Python 3 7 0 release candidate 1

1.24.61.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(): d02, *note asyncio.start_server(): d03.
     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<57>,  Next: Windows<53>,  Prev: Documentação<54>,  Up: Python 3 7 0 release candidate 1

1.24.61.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<37>,  Prev: Construção<57>,  Up: Python 3 7 0 release candidate 1

1.24.61.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<37>,  Prev: Windows<53>,  Up: Python 3 7 0 release candidate 1

1.24.61.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.24.62 Python 3.7.0 beta 5
---------------------------

'Data de lançamento: 2018-05-30'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<60>.
* Biblioteca: Biblioteca<62>.
* Documentação: Documentação<55>.
* Testes: Testes<54>.
* Construção: Construção<58>.
* macOS: macOS<42>.
* IDLE: IDLE<38>.


File: python.info,  Node: Núcleo e embutidos<60>,  Next: Biblioteca<62>,  Up: Python 3 7 0 beta 5

1.24.62.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: 13bd. list.  *note PyGC_Collect(): b7b. 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<62>,  Next: Documentação<55>,  Prev: Núcleo e embutidos<60>,  Up: Python 3 7 0 beta 5

1.24.62.2 Biblioteca
....................

   - bpo-32751(1): When cancelling the task due to a timeout, *note
     asyncio.wait_for(): 80a. 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(): d95. 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:
     d2.

   - 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: 2e.  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<55>,  Next: Testes<54>,  Prev: Biblioteca<62>,  Up: Python 3 7 0 beta 5

1.24.62.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<54>,  Next: Construção<58>,  Prev: Documentação<55>,  Up: Python 3 7 0 beta 5

1.24.62.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<58>,  Next: macOS<42>,  Prev: Testes<54>,  Up: Python 3 7 0 beta 5

1.24.62.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<38>,  Prev: Construção<58>,  Up: Python 3 7 0 beta 5

1.24.62.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<38>,  Prev: macOS<42>,  Up: Python 3 7 0 beta 5

1.24.62.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.24.63 Python 3.7.0 beta 4
---------------------------

'Data de lançamento: 2018-05-02'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<61>.
* Biblioteca: Biblioteca<63>.
* Documentação: Documentação<56>.
* Testes: Testes<55>.
* Construção: Construção<59>.
* Windows: Windows<54>.
* macOS: macOS<43>.
* IDLE: IDLE<39>.
* Ferramentas/Demos: Ferramentas/Demos<37>.


File: python.info,  Node: Núcleo e embutidos<61>,  Next: Biblioteca<63>,  Up: Python 3 7 0 beta 4

1.24.63.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 shrunk only
     when ‘used == 0’.  Now dict has more chance to be shrunk.

   - 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<63>,  Next: Documentação<56>,  Prev: Núcleo e embutidos<61>,  Up: Python 3 7 0 beta 4

1.24.63.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: 38. 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: 1cda.

   - 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(): 4fd. and
     *note importlib.abc.ResourceReader.contents(): 1cdb. return an
     *note iterable: 1423. instead of an *note iterator: 4c2.

   - 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: 23b. 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: 3e1. when necessary, rather than
     adding ‘"."’.

   - bpo-33169(13): Delete entries of ‘None’ in *note
     sys.path_importer_cache: 7ef. 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: 198. 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(): 1cdc.

   - bpo-20104(19): Improved error handling and fixed a reference leak
     in *note os.posix_spawn(): 528.

   - 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<56>,  Next: Testes<55>,  Prev: Biblioteca<63>,  Up: Python 3 7 0 beta 4

1.24.63.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<55>,  Next: Construção<59>,  Prev: Documentação<56>,  Up: Python 3 7 0 beta 4

1.24.63.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<59>,  Next: Windows<54>,  Prev: Testes<55>,  Up: Python 3 7 0 beta 4

1.24.63.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<59>,  Up: Python 3 7 0 beta 4

1.24.63.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<39>,  Prev: Windows<54>,  Up: Python 3 7 0 beta 4

1.24.63.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<39>,  Next: Ferramentas/Demos<37>,  Prev: macOS<43>,  Up: Python 3 7 0 beta 4

1.24.63.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<37>,  Prev: IDLE<39>,  Up: Python 3 7 0 beta 4

1.24.63.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.24.64 Python 3.7.0 beta 3
---------------------------

'Data de lançamento: 2018-03-29'

* Menu:

* Segurança: Segurança<45>.
* Núcleo e embutidos: Núcleo e embutidos<62>.
* Biblioteca: Biblioteca<64>.
* Documentação: Documentação<57>.
* Testes: Testes<56>.
* Construção: Construção<60>.
* Windows: Windows<55>.
* macOS: macOS<44>.
* IDLE: IDLE<40>.
* Ferramentas/Demos: Ferramentas/Demos<38>.
* API C: API C<56>.


File: python.info,  Node: Segurança<45>,  Next: Núcleo e embutidos<62>,  Up: Python 3 7 0 beta 3

1.24.64.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<62>,  Next: Biblioteca<64>,  Prev: Segurança<45>,  Up: Python 3 7 0 beta 3

1.24.64.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<64>,  Next: Documentação<57>,  Prev: Núcleo e embutidos<62>,  Up: Python 3 7 0 beta 3

1.24.64.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: 84. 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: 119. 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: f6, ‘after_cancel(None)’ now
     raises a *note ValueError: 2ea. 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: 547. now exposes a *note
     backup: d67. 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<57>,  Next: Testes<56>,  Prev: Biblioteca<64>,  Up: Python 3 7 0 beta 3

1.24.64.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: 136. 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<56>,  Next: Construção<60>,  Prev: Documentação<57>,  Up: Python 3 7 0 beta 3

1.24.64.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<60>,  Next: Windows<55>,  Prev: Testes<56>,  Up: Python 3 7 0 beta 3

1.24.64.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<60>,  Up: Python 3 7 0 beta 3

1.24.64.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<40>,  Prev: Windows<55>,  Up: Python 3 7 0 beta 3

1.24.64.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<40>,  Next: Ferramentas/Demos<38>,  Prev: macOS<44>,  Up: Python 3 7 0 beta 3

1.24.64.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: 1b8.; ‘-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<38>,  Next: API C<56>,  Prev: IDLE<40>,  Up: Python 3 7 0 beta 3

1.24.64.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<56>,  Prev: Ferramentas/Demos<38>,  Up: Python 3 7 0 beta 3

1.24.64.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.24.65 Python 3.7.0 beta 2
---------------------------

'Data de lançamento: 2018-02-27'

* Menu:

* Segurança: Segurança<46>.
* Núcleo e embutidos: Núcleo e embutidos<63>.
* Biblioteca: Biblioteca<65>.
* Documentação: Documentação<58>.
* Testes: Testes<57>.
* Construção: Construção<61>.
* Windows: Windows<56>.
* macOS: macOS<45>.
* IDLE: IDLE<41>.
* Ferramentas/Demos: Ferramentas/Demos<39>.


File: python.info,  Node: Segurança<46>,  Next: Núcleo e embutidos<63>,  Up: Python 3 7 0 beta 2

1.24.65.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<63>,  Next: Biblioteca<65>,  Prev: Segurança<46>,  Up: Python 3 7 0 beta 2

1.24.65.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<65>,  Next: Documentação<58>,  Prev: Núcleo e embutidos<63>,  Up: Python 3 7 0 beta 2

1.24.65.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: 1a3. when using or
     importing an ABC directly from *note collections: 1e. rather than
     from *note collections.abc: 1f.

   - 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(): 17b8. 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: ff.
     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<58>,  Next: Testes<57>,  Prev: Biblioteca<65>,  Up: Python 3 7 0 beta 2

1.24.65.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: ea. documentation.

   - bpo-8722(6): Document ‘__getattr__()’ behavior when property
     ‘get()’ method raises *note AttributeError: 5e4.

   - bpo-32614(7): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a3. 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<57>,  Next: Construção<61>,  Prev: Documentação<58>,  Up: Python 3 7 0 beta 2

1.24.65.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<61>,  Next: Windows<56>,  Prev: Testes<57>,  Up: Python 3 7 0 beta 2

1.24.65.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<61>,  Up: Python 3 7 0 beta 2

1.24.65.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(): b10. 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<41>,  Prev: Windows<56>,  Up: Python 3 7 0 beta 2

1.24.65.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<41>,  Next: Ferramentas/Demos<39>,  Prev: macOS<45>,  Up: Python 3 7 0 beta 2

1.24.65.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<39>,  Prev: IDLE<41>,  Up: Python 3 7 0 beta 2

1.24.65.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.24.66 Python 3.7.0 beta 1
---------------------------

'Data de lançamento: 2018-01-30'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<64>.
* Biblioteca: Biblioteca<66>.
* Documentação: Documentação<59>.
* Testes: Testes<58>.
* Construção: Construção<62>.
* Windows: Windows<57>.
* macOS: macOS<46>.
* API C: API C<57>.


File: python.info,  Node: Núcleo e embutidos<64>,  Next: Biblioteca<66>,  Up: Python 3 7 0 beta 1

1.24.66.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<66>,  Next: Documentação<59>,  Prev: Núcleo e embutidos<64>,  Up: Python 3 7 0 beta 1

1.24.66.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: e7. 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:
     16af. 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():
     cf5. and *note asyncio.StreamWriter.is_closing(): cf6. 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 cancellation 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(): 707. did not call __new__ in
     *note datetime.datetime: 4dc. subclasses.

   - bpo-32403(35): Improved speed of *note datetime.date: 1f9. and
     *note datetime.datetime: 4dc. 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: 7f. and *note
     importlib.abc.ResourceReader: ce8. 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: dd6. 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: 59a.  If
     'args' is given as a sequence, it’s first element can now be a
     *note path-like object: 59a. as well.

   - bpo-31900(44): The *note locale.localeconv(): dec. 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():
     828. method when formatting a number (*note int: 19b, *note float:
     196, *note float: 196. 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<59>,  Next: Testes<58>,  Prev: Biblioteca<66>,  Up: Python 3 7 0 beta 1

1.24.66.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<58>,  Next: Construção<62>,  Prev: Documentação<59>,  Up: Python 3 7 0 beta 1

1.24.66.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<62>,  Next: Windows<57>,  Prev: Testes<58>,  Up: Python 3 7 0 beta 1

1.24.66.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: b8. 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<62>,  Up: Python 3 7 0 beta 1

1.24.66.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<57>,  Prev: Windows<57>,  Up: Python 3 7 0 beta 1

1.24.66.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<57>,  Prev: macOS<46>,  Up: Python 3 7 0 beta 1

1.24.66.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.timezone.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.24.67 Python 3.7.0 alpha 4
----------------------------

'Data de lançamento: 2018-01-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<65>.
* Biblioteca: Biblioteca<67>.
* Documentação: Documentação<60>.
* Testes: Testes<59>.
* Windows: Windows<58>.
* Ferramentas/Demos: Ferramentas/Demos<40>.
* API C: API C<58>.


File: python.info,  Node: Núcleo e embutidos<65>,  Next: Biblioteca<67>,  Up: Python 3 7 0 alpha 4

1.24.67.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: 1d2d. option now turns on hash
     randomization when the *note PYTHONHASHSEED: 1273. 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<67>,  Next: Documentação<60>,  Prev: Núcleo e embutidos<65>,  Up: Python 3 7 0 alpha 4

1.24.67.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: ce8. as an
     ABC for loaders to provide a unified API for reading resources
     contained within packages.  Also add *note importlib.resources: 7f.
     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(): f2e. 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(): 59c. 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 output.  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(): 81f, *note
     datetime.time.fromisoformat(): 81e. and *note
     datetime.date.fromisoformat(): 81d. 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: 1d6. 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<60>,  Next: Testes<59>,  Prev: Biblioteca<67>,  Up: Python 3 7 0 alpha 4

1.24.67.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<59>,  Next: Windows<58>,  Prev: Documentação<60>,  Up: Python 3 7 0 alpha 4

1.24.67.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<40>,  Prev: Testes<59>,  Up: Python 3 7 0 alpha 4

1.24.67.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<40>,  Next: API C<58>,  Prev: Windows<58>,  Up: Python 3 7 0 alpha 4

1.24.67.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<58>,  Prev: Ferramentas/Demos<40>,  Up: Python 3 7 0 alpha 4

1.24.67.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.24.68 Python 3.7.0 alpha 3
----------------------------

'Data de lançamento: 2017-12-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<66>.
* Biblioteca: Biblioteca<68>.
* Documentação: Documentação<61>.
* Testes: Testes<60>.
* Construção: Construção<63>.
* Windows: Windows<59>.
* macOS: macOS<47>.
* IDLE: IDLE<42>.
* Ferramentas/Demos: Ferramentas/Demos<41>.
* API C: API C<59>.


File: python.info,  Node: Núcleo e embutidos<66>,  Next: Biblioteca<68>,  Up: Python 3 7 0 alpha 3

1.24.68.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<68>,  Next: Documentação<61>,  Prev: Núcleo e embutidos<66>,  Up: Python 3 7 0 alpha 3

1.24.68.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: 1d37. flag

   - bpo-32154(9): The ‘asyncio.windows_utils.socketpair()’ function has
     been removed: use directly *note socket.socketpair(): de4. 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(): bff. to find the
     ‘~/.netrc’ file in *note netrc.netrc: 1b64.  If it does not exist,
     *note FileNotFoundError: 263. 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():
     4da. in the *note RobotFileParser.parse(): 1d38. 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: 1a3, *note
     PendingDeprecationWarning: abc. and *note ImportWarning: 713.
     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: 59a, 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:
     1d39.  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: d7b, *note time.CLOCK_PROF: d7c. and *note
     time.CLOCK_UPTIME: d7d.

   - 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(): 1d3a. 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: 509. and *note
     ipaddress.IPv4Network: 508.  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: f4. module: *note
     clock_gettime_ns(): cce, *note clock_settime_ns(): ccf, *note
     monotonic_ns(): cd0, *note perf_counter_ns(): cd1, *note
     process_time_ns(): cd2, *note time_ns(): cd3.

   - 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(): 1657.  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: af2.  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<61>,  Next: Testes<60>,  Prev: Biblioteca<68>,  Up: Python 3 7 0 alpha 3

1.24.68.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<60>,  Next: Construção<63>,  Prev: Documentação<61>,  Up: Python 3 7 0 alpha 3

1.24.68.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<63>,  Next: Windows<59>,  Prev: Testes<60>,  Up: Python 3 7 0 alpha 3

1.24.68.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<63>,  Up: Python 3 7 0 alpha 3

1.24.68.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<42>,  Prev: Windows<59>,  Up: Python 3 7 0 alpha 3

1.24.68.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<42>,  Next: Ferramentas/Demos<41>,  Prev: macOS<47>,  Up: Python 3 7 0 alpha 3

1.24.68.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<41>,  Next: API C<59>,  Prev: IDLE<42>,  Up: Python 3 7 0 alpha 3

1.24.68.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<59>,  Prev: Ferramentas/Demos<41>,  Up: Python 3 7 0 alpha 3

1.24.68.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.24.69 Python 3.7.0 alpha 2
----------------------------

'Data de lançamento: 2017-10-16'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<67>.
* Biblioteca: Biblioteca<69>.
* Documentação: Documentação<62>.
* Construção: Construção<64>.
* IDLE: IDLE<43>.
* API C: API C<60>.


File: python.info,  Node: Núcleo e embutidos<67>,  Next: Biblioteca<69>,  Up: Python 3 7 0 alpha 2

1.24.69.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: ce0. 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<69>,  Next: Documentação<62>,  Prev: Núcleo e embutidos<67>,  Up: Python 3 7 0 alpha 2

1.24.69.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: 1d6. constructor.  Also,
     free job resources in *note concurrent.futures.ProcessPoolExecutor:
     1d6. 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<62>,  Next: Construção<64>,  Prev: Biblioteca<69>,  Up: Python 3 7 0 alpha 2

1.24.69.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<64>,  Next: IDLE<43>,  Prev: Documentação<62>,  Up: Python 3 7 0 alpha 2

1.24.69.4 Construção
....................

   - bpo-31696(1): Improve compiler version information in *note
     sys.version: 496. 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<43>,  Next: API C<60>,  Prev: Construção<64>,  Up: Python 3 7 0 alpha 2

1.24.69.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<60>,  Prev: IDLE<43>,  Up: Python 3 7 0 alpha 2

1.24.69.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.24.70 Python 3.7.0 alpha 1
----------------------------

'Data de lançamento: 2017-09-19'

* Menu:

* Segurança: Segurança<47>.
* Núcleo e embutidos: Núcleo e embutidos<68>.
* Biblioteca: Biblioteca<70>.
* Documentação: Documentação<63>.
* Testes: Testes<61>.
* Construção: Construção<65>.
* Windows: Windows<60>.
* IDLE: IDLE<44>.
* Ferramentas/Demos: Ferramentas/Demos<42>.
* API C: API C<61>.


File: python.info,  Node: Segurança<47>,  Next: Núcleo e embutidos<68>,  Up: Python 3 7 0 alpha 1

1.24.70.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<68>,  Next: Biblioteca<70>,  Prev: Segurança<47>,  Up: Python 3 7 0 alpha 1

1.24.70.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 library 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: a77.

   - 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(): 16ec. function, *note cProfile: 2b. or *note
     profile: b4. 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 split 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<70>,  Next: Documentação<63>,  Prev: Núcleo e embutidos<68>,  Up: Python 3 7 0 alpha 1

1.24.70.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: 169.
     instead of *note bytes: 192.

   - 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): Added 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<63>,  Next: Testes<61>,  Prev: Biblioteca<70>,  Up: Python 3 7 0 alpha 1

1.24.70.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(): 192. and *note
     bytearray(): 342. are now their respective type definitions, rather
     than the corresponding builtin function entries.  Use *note bytes:
     1d4f. and *note bytearray: 1d50. 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<61>,  Next: Construção<65>,  Prev: Documentação<63>,  Up: Python 3 7 0 alpha 1

1.24.70.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<65>,  Next: Windows<60>,  Prev: Testes<61>,  Up: Python 3 7 0 alpha 1

1.24.70.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<44>,  Prev: Construção<65>,  Up: Python 3 7 0 alpha 1

1.24.70.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<44>,  Next: Ferramentas/Demos<42>,  Prev: Windows<60>,  Up: Python 3 7 0 alpha 1

1.24.70.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<42>,  Next: API C<61>,  Prev: IDLE<44>,  Up: Python 3 7 0 alpha 1

1.24.70.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<61>,  Prev: Ferramentas/Demos<42>,  Up: Python 3 7 0 alpha 1

1.24.70.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.24.71 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.24.72 Python 3.6.6 release candidate 1
----------------------------------------

'Data de lançamento: 2018-06-11'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<69>.
* Biblioteca: Biblioteca<71>.
* Documentação: Documentação<64>.
* Testes: Testes<62>.
* Construção: Construção<66>.
* Windows: Windows<61>.
* macOS: macOS<48>.
* IDLE: IDLE<45>.
* Ferramentas/Demos: Ferramentas/Demos<43>.
* API C: API C<62>.


File: python.info,  Node: Núcleo e embutidos<69>,  Next: Biblioteca<71>,  Up: Python 3 6 6 release candidate 1

1.24.72.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: 13bd. list.  *note PyGC_Collect(): b7b. 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<71>,  Next: Documentação<64>,  Prev: Núcleo e embutidos<69>,  Up: Python 3 6 6 release candidate 1

1.24.72.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: 198. instead of *note
     SystemError: 78a. when performed on *note mmap.mmap: 513. 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: 38. 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: 1cda.

   - 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(): 1cdc.

   - 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: 84. 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: 2e.  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<64>,  Next: Testes<62>,  Prev: Biblioteca<71>,  Up: Python 3 6 6 release candidate 1

1.24.72.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: 136. 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<62>,  Next: Construção<66>,  Prev: Documentação<64>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<66>,  Next: Windows<61>,  Prev: Testes<62>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<66>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<45>,  Prev: Windows<61>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<45>,  Next: Ferramentas/Demos<43>,  Prev: macOS<48>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<43>,  Next: API C<62>,  Prev: IDLE<45>,  Up: Python 3 6 6 release candidate 1

1.24.72.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<62>,  Prev: Ferramentas/Demos<43>,  Up: Python 3 6 6 release candidate 1

1.24.72.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.24.73 Python 3.6.5 final
--------------------------

'Data de lançamento: 2018-03-28'

* Menu:

* Testes: Testes<63>.
* Construção: Construção<67>.


File: python.info,  Node: Testes<63>,  Next: Construção<67>,  Up: Python 3 6 5 final

1.24.73.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<67>,  Prev: Testes<63>,  Up: Python 3 6 5 final

1.24.73.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.24.74 Python 3.6.5 release candidate 1
----------------------------------------

'Data de lançamento: 2018-03-13'

* Menu:

* Segurança: Segurança<48>.
* Núcleo e embutidos: Núcleo e embutidos<70>.
* Biblioteca: Biblioteca<72>.
* Documentação: Documentação<65>.
* Testes: Testes<64>.
* Construção: Construção<68>.
* Windows: Windows<62>.
* macOS: macOS<49>.
* IDLE: IDLE<46>.
* Ferramentas/Demos: Ferramentas/Demos<44>.
* API C: API C<63>.


File: python.info,  Node: Segurança<48>,  Next: Núcleo e embutidos<70>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<70>,  Next: Biblioteca<72>,  Prev: Segurança<48>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<72>,  Next: Documentação<65>,  Prev: Núcleo e embutidos<70>,  Up: Python 3 6 5 release candidate 1

1.24.74.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: f6, ‘after_cancel(None)’ now
     raises a *note ValueError: 2ea. 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(): f2e. 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(): dec. 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():
     828. method when formatting a number (*note int: 19b, *note float:
     196, *note float: 196. 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<65>,  Next: Testes<64>,  Prev: Biblioteca<72>,  Up: Python 3 6 5 release candidate 1

1.24.74.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: 5e4.

   - bpo-32614(4): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a3. 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<64>,  Next: Construção<68>,  Prev: Documentação<65>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<68>,  Next: Windows<62>,  Prev: Testes<64>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<68>,  Up: Python 3 6 5 release candidate 1

1.24.74.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(): b10. 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<46>,  Prev: Windows<62>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<46>,  Next: Ferramentas/Demos<44>,  Prev: macOS<49>,  Up: Python 3 6 5 release candidate 1

1.24.74.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: 1b8.; ‘-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<44>,  Next: API C<63>,  Prev: IDLE<46>,  Up: Python 3 6 5 release candidate 1

1.24.74.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<63>,  Prev: Ferramentas/Demos<44>,  Up: Python 3 6 5 release candidate 1

1.24.74.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.24.75 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.24.76 Python 3.6.4 release candidate 1
----------------------------------------

'Data de lançamento: 2017-12-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<71>.
* Biblioteca: Biblioteca<73>.
* Documentação: Documentação<66>.
* Testes: Testes<65>.
* Construção: Construção<69>.
* Windows: Windows<63>.
* macOS: macOS<50>.
* IDLE: IDLE<47>.
* Ferramentas/Demos: Ferramentas/Demos<45>.
* API C: API C<64>.


File: python.info,  Node: Núcleo e embutidos<71>,  Next: Biblioteca<73>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<73>,  Next: Documentação<66>,  Prev: Núcleo e embutidos<71>,  Up: Python 3 6 4 release candidate 1

1.24.76.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():
     4da. in the *note RobotFileParser.parse(): 1d38. 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<66>,  Next: Testes<65>,  Prev: Biblioteca<73>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<65>,  Next: Construção<69>,  Prev: Documentação<66>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<69>,  Next: Windows<63>,  Prev: Testes<65>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<69>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<47>,  Prev: Windows<63>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<45>,  Prev: macOS<50>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<45>,  Next: API C<64>,  Prev: IDLE<47>,  Up: Python 3 6 4 release candidate 1

1.24.76.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<64>,  Prev: Ferramentas/Demos<45>,  Up: Python 3 6 4 release candidate 1

1.24.76.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.24.77 Python 3.6.3 final
--------------------------

'Data de lançamento: 2017-10-03'

* Menu:

* Biblioteca: Biblioteca<74>.
* Construção: Construção<70>.


File: python.info,  Node: Biblioteca<74>,  Next: Construção<70>,  Up: Python 3 6 3 final

1.24.77.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<70>,  Prev: Biblioteca<74>,  Up: Python 3 6 3 final

1.24.77.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.24.78 Python 3.6.3 release candidate 1
----------------------------------------

'Data de lançamento: 2017-09-18'

* Menu:

* Segurança: Segurança<49>.
* Núcleo e embutidos: Núcleo e embutidos<72>.
* Biblioteca: Biblioteca<75>.
* Documentação: Documentação<67>.
* Testes: Testes<66>.
* Construção: Construção<71>.
* Windows: Windows<64>.
* IDLE: IDLE<48>.
* Ferramentas/Demos: Ferramentas/Demos<46>.


File: python.info,  Node: Segurança<49>,  Next: Núcleo e embutidos<72>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<72>,  Next: Biblioteca<75>,  Prev: Segurança<49>,  Up: Python 3 6 3 release candidate 1

1.24.78.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 library 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<75>,  Next: Documentação<67>,  Prev: Núcleo e embutidos<72>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<67>,  Next: Testes<66>,  Prev: Biblioteca<75>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<66>,  Next: Construção<71>,  Prev: Documentação<67>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<71>,  Next: Windows<64>,  Prev: Testes<66>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<48>,  Prev: Construção<71>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<48>,  Next: Ferramentas/Demos<46>,  Prev: Windows<64>,  Up: Python 3 6 3 release candidate 1

1.24.78.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<46>,  Prev: IDLE<48>,  Up: Python 3 6 3 release candidate 1

1.24.78.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.24.79 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.24.80 Python 3.6.2 release candidate 2
----------------------------------------

'Data de lançamento: 2017-07-07'

* Menu:

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


File: python.info,  Node: Segurança<50>,  Up: Python 3 6 2 release candidate 2

1.24.80.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.24.81 Python 3.6.2 release candidate 1
----------------------------------------

'Data de lançamento: 2017-06-17'

* Menu:

* Segurança: Segurança<51>.
* Núcleo e embutidos: Núcleo e embutidos<73>.
* Biblioteca: Biblioteca<76>.
* IDLE: IDLE<49>.
* API C: API C<65>.
* Construção: Construção<72>.
* Documentação: Documentação<68>.
* Ferramentas/Demos: Ferramentas/Demos<47>.
* Testes: Testes<67>.
* Windows: Windows<65>.


File: python.info,  Node: Segurança<51>,  Next: Núcleo e embutidos<73>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<73>,  Next: Biblioteca<76>,  Prev: Segurança<51>,  Up: Python 3 6 2 release candidate 1

1.24.81.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: a77.

   - 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<76>,  Next: IDLE<49>,  Prev: Núcleo e embutidos<73>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<49>,  Next: API C<65>,  Prev: Biblioteca<76>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<65>,  Next: Construção<72>,  Prev: IDLE<49>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<72>,  Next: Documentação<68>,  Prev: API C<65>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<68>,  Next: Ferramentas/Demos<47>,  Prev: Construção<72>,  Up: Python 3 6 2 release candidate 1

1.24.81.7 Documentação
......................

   - bpo-30176(1): Add missing attribute related constants in curses
     documentation.

   - bpo-30052(2): the link targets for *note bytes(): 192. and *note
     bytearray(): 342. are now their respective type definitions, rather
     than the corresponding builtin function entries.  Use *note bytes:
     1d4f. and *note bytearray: 1d50. 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<47>,  Next: Testes<67>,  Prev: Documentação<68>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<67>,  Next: Windows<65>,  Prev: Ferramentas/Demos<47>,  Up: Python 3 6 2 release candidate 1

1.24.81.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<67>,  Up: Python 3 6 2 release candidate 1

1.24.81.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.24.82 Python 3.6.1 final
--------------------------

'Data de lançamento: 2017-03-21'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<74>.
* Construção: Construção<73>.


File: python.info,  Node: Núcleo e embutidos<74>,  Next: Construção<73>,  Up: Python 3 6 1 final

1.24.82.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<73>,  Prev: Núcleo e embutidos<74>,  Up: Python 3 6 1 final

1.24.82.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.24.83 Python 3.6.1 release candidate 1
----------------------------------------

'Data de lançamento: 2017-03-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<75>.
* Biblioteca: Biblioteca<77>.
* IDLE: IDLE<50>.
* Windows: Windows<66>.
* API C: API C<66>.
* Documentação: Documentação<69>.
* Testes: Testes<68>.
* Construção: Construção<74>.


File: python.info,  Node: Núcleo e embutidos<75>,  Next: Biblioteca<77>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<77>,  Next: IDLE<50>,  Prev: Núcleo e embutidos<75>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<50>,  Next: Windows<66>,  Prev: Biblioteca<77>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<66>,  Prev: IDLE<50>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<66>,  Next: Documentação<69>,  Prev: Windows<66>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<69>,  Next: Testes<68>,  Prev: API C<66>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<68>,  Next: Construção<74>,  Prev: Documentação<69>,  Up: Python 3 6 1 release candidate 1

1.24.83.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<74>,  Prev: Testes<68>,  Up: Python 3 6 1 release candidate 1

1.24.83.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.24.84 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.24.85 Python 3.6.0 release candidate 2
----------------------------------------

'Data de lançamento: 2016-12-16'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<76>.
* Ferramentas/Demos: Ferramentas/Demos<48>.
* Windows: Windows<67>.
* Construção: Construção<75>.


File: python.info,  Node: Núcleo e embutidos<76>,  Next: Ferramentas/Demos<48>,  Up: Python 3 6 0 release candidate 2

1.24.85.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<48>,  Next: Windows<67>,  Prev: Núcleo e embutidos<76>,  Up: Python 3 6 0 release candidate 2

1.24.85.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<75>,  Prev: Ferramentas/Demos<48>,  Up: Python 3 6 0 release candidate 2

1.24.85.3 Windows
.................

   - bpo-28896(1): Deprecate WindowsRegistryFinder.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28896


File: python.info,  Node: Construção<75>,  Prev: Windows<67>,  Up: Python 3 6 0 release candidate 2

1.24.85.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.24.86 Python 3.6.0 release candidate 1
----------------------------------------

'Data de lançamento: 2016-12-06'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<77>.
* Biblioteca: Biblioteca<78>.
* API C: API C<67>.
* Documentação: Documentação<70>.
* Ferramentas/Demos: Ferramentas/Demos<49>.


File: python.info,  Node: Núcleo e embutidos<77>,  Next: Biblioteca<78>,  Up: Python 3 6 0 release candidate 1

1.24.86.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<78>,  Next: API C<67>,  Prev: Núcleo e embutidos<77>,  Up: Python 3 6 0 release candidate 1

1.24.86.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<67>,  Next: Documentação<70>,  Prev: Biblioteca<78>,  Up: Python 3 6 0 release candidate 1

1.24.86.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<70>,  Next: Ferramentas/Demos<49>,  Prev: API C<67>,  Up: Python 3 6 0 release candidate 1

1.24.86.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<49>,  Prev: Documentação<70>,  Up: Python 3 6 0 release candidate 1

1.24.86.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.24.87 Python 3.6.0 beta 4
---------------------------

'Data de lançamento: 2016-11-21'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<78>.
* Biblioteca: Biblioteca<79>.
* Documentação: Documentação<71>.
* Testes: Testes<69>.
* Construção: Construção<76>.


File: python.info,  Node: Núcleo e embutidos<78>,  Next: Biblioteca<79>,  Up: Python 3 6 0 beta 4

1.24.87.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<79>,  Next: Documentação<71>,  Prev: Núcleo e embutidos<78>,  Up: Python 3 6 0 beta 4

1.24.87.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<71>,  Next: Testes<69>,  Prev: Biblioteca<79>,  Up: Python 3 6 0 beta 4

1.24.87.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<69>,  Next: Construção<76>,  Prev: Documentação<71>,  Up: Python 3 6 0 beta 4

1.24.87.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<76>,  Prev: Testes<69>,  Up: Python 3 6 0 beta 4

1.24.87.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.24.88 Python 3.6.0 beta 3
---------------------------

'Data de lançamento: 2016-10-31'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<79>.
* Biblioteca: Biblioteca<80>.
* Windows: Windows<68>.
* Construção: Construção<77>.
* Testes: Testes<70>.


File: python.info,  Node: Núcleo e embutidos<79>,  Next: Biblioteca<80>,  Up: Python 3 6 0 beta 3

1.24.88.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<80>,  Next: Windows<68>,  Prev: Núcleo e embutidos<79>,  Up: Python 3 6 0 beta 3

1.24.88.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<77>,  Prev: Biblioteca<80>,  Up: Python 3 6 0 beta 3

1.24.88.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<77>,  Next: Testes<70>,  Prev: Windows<68>,  Up: Python 3 6 0 beta 3

1.24.88.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<70>,  Prev: Construção<77>,  Up: Python 3 6 0 beta 3

1.24.88.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.24.89 Python 3.6.0 beta 2
---------------------------

'Data de lançamento: 2016-10-10'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<80>.
* Biblioteca: Biblioteca<81>.
* Windows: Windows<69>.
* API C: API C<68>.
* Construção: Construção<78>.
* Testes: Testes<71>.


File: python.info,  Node: Núcleo e embutidos<80>,  Next: Biblioteca<81>,  Up: Python 3 6 0 beta 2

1.24.89.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 split 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<81>,  Next: Windows<69>,  Prev: Núcleo e embutidos<80>,  Up: Python 3 6 0 beta 2

1.24.89.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<68>,  Prev: Biblioteca<81>,  Up: Python 3 6 0 beta 2

1.24.89.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<68>,  Next: Construção<78>,  Prev: Windows<69>,  Up: Python 3 6 0 beta 2

1.24.89.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<78>,  Next: Testes<71>,  Prev: API C<68>,  Up: Python 3 6 0 beta 2

1.24.89.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<71>,  Prev: Construção<78>,  Up: Python 3 6 0 beta 2

1.24.89.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.24.90 Python 3.6.0 beta 1
---------------------------

'Data de lançamento: 2016-09-12'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<81>.
* Biblioteca: Biblioteca<82>.
* IDLE: IDLE<51>.
* API C: API C<69>.
* Testes: Testes<72>.
* Construção: Construção<79>.
* Ferramentas/Demos: Ferramentas/Demos<50>.
* Windows: Windows<70>.


File: python.info,  Node: Núcleo e embutidos<81>,  Next: Biblioteca<82>,  Up: Python 3 6 0 beta 1

1.24.90.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<82>,  Next: IDLE<51>,  Prev: Núcleo e embutidos<81>,  Up: Python 3 6 0 beta 1

1.24.90.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(): 73b. 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(): ead. 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<51>,  Next: API C<69>,  Prev: Biblioteca<82>,  Up: Python 3 6 0 beta 1

1.24.90.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<69>,  Next: Testes<72>,  Prev: IDLE<51>,  Up: Python 3 6 0 beta 1

1.24.90.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<72>,  Next: Construção<79>,  Prev: API C<69>,  Up: Python 3 6 0 beta 1

1.24.90.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<79>,  Next: Ferramentas/Demos<50>,  Prev: Testes<72>,  Up: Python 3 6 0 beta 1

1.24.90.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<50>,  Next: Windows<70>,  Prev: Construção<79>,  Up: Python 3 6 0 beta 1

1.24.90.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<50>,  Up: Python 3 6 0 beta 1

1.24.90.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.24.91 Python 3.6.0 alpha 4
----------------------------

'Data de lançamento: 2016-08-15'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<82>.
* Biblioteca: Biblioteca<83>.
* IDLE: IDLE<52>.
* Testes: Testes<73>.
* Windows: Windows<71>.
* Construção: Construção<80>.


File: python.info,  Node: Núcleo e embutidos<82>,  Next: Biblioteca<83>,  Up: Python 3 6 0 alpha 4

1.24.91.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<83>,  Next: IDLE<52>,  Prev: Núcleo e embutidos<82>,  Up: Python 3 6 0 alpha 4

1.24.91.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<52>,  Next: Testes<73>,  Prev: Biblioteca<83>,  Up: Python 3 6 0 alpha 4

1.24.91.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<73>,  Next: Windows<71>,  Prev: IDLE<52>,  Up: Python 3 6 0 alpha 4

1.24.91.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<80>,  Prev: Testes<73>,  Up: Python 3 6 0 alpha 4

1.24.91.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<80>,  Prev: Windows<71>,  Up: Python 3 6 0 alpha 4

1.24.91.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.24.92 Python 3.6.0 alpha 3
----------------------------

'Data de lançamento: 2016-07-11'

* Menu:

* Segurança: Segurança<52>.
* Núcleo e embutidos: Núcleo e embutidos<83>.
* Biblioteca: Biblioteca<84>.
* IDLE: IDLE<53>.
* API C: API C<70>.
* Construção: Construção<81>.
* Ferramentas/Demos: Ferramentas/Demos<51>.
* Documentação: Documentação<72>.
* Testes: Testes<74>.


File: python.info,  Node: Segurança<52>,  Next: Núcleo e embutidos<83>,  Up: Python 3 6 0 alpha 3

1.24.92.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<83>,  Next: Biblioteca<84>,  Prev: Segurança<52>,  Up: Python 3 6 0 alpha 3

1.24.92.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<84>,  Next: IDLE<53>,  Prev: Núcleo e embutidos<83>,  Up: Python 3 6 0 alpha 3

1.24.92.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<53>,  Next: API C<70>,  Prev: Biblioteca<84>,  Up: Python 3 6 0 alpha 3

1.24.92.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<70>,  Next: Construção<81>,  Prev: IDLE<53>,  Up: Python 3 6 0 alpha 3

1.24.92.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<81>,  Next: Ferramentas/Demos<51>,  Prev: API C<70>,  Up: Python 3 6 0 alpha 3

1.24.92.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<51>,  Next: Documentação<72>,  Prev: Construção<81>,  Up: Python 3 6 0 alpha 3

1.24.92.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<72>,  Next: Testes<74>,  Prev: Ferramentas/Demos<51>,  Up: Python 3 6 0 alpha 3

1.24.92.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<74>,  Prev: Documentação<72>,  Up: Python 3 6 0 alpha 3

1.24.92.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.24.93 Python 3.6.0 alpha 2
----------------------------

'Data de lançamento: 2016-06-13'

* Menu:

* Segurança: Segurança<53>.
* Núcleo e embutidos: Núcleo e embutidos<84>.
* Biblioteca: Biblioteca<85>.
* IDLE: IDLE<54>.
* Documentação: Documentação<73>.
* Testes: Testes<75>.
* Windows: Windows<72>.
* Construção: Construção<82>.
* API C: API C<71>.
* Ferramentas/Demos: Ferramentas/Demos<52>.


File: python.info,  Node: Segurança<53>,  Next: Núcleo e embutidos<84>,  Up: Python 3 6 0 alpha 2

1.24.93.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(): 73b. 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<84>,  Next: Biblioteca<85>,  Prev: Segurança<53>,  Up: Python 3 6 0 alpha 2

1.24.93.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<85>,  Next: IDLE<54>,  Prev: Núcleo e embutidos<84>,  Up: Python 3 6 0 alpha 2

1.24.93.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: 82. 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: d8.  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<54>,  Next: Documentação<73>,  Prev: Biblioteca<85>,  Up: Python 3 6 0 alpha 2

1.24.93.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<73>,  Next: Testes<75>,  Prev: IDLE<54>,  Up: Python 3 6 0 alpha 2

1.24.93.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<75>,  Next: Windows<72>,  Prev: Documentação<73>,  Up: Python 3 6 0 alpha 2

1.24.93.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<82>,  Prev: Testes<75>,  Up: Python 3 6 0 alpha 2

1.24.93.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<82>,  Next: API C<71>,  Prev: Windows<72>,  Up: Python 3 6 0 alpha 2

1.24.93.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<71>,  Next: Ferramentas/Demos<52>,  Prev: Construção<82>,  Up: Python 3 6 0 alpha 2

1.24.93.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<52>,  Prev: API C<71>,  Up: Python 3 6 0 alpha 2

1.24.93.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.24.94 Python 3.6.0 alpha 1
----------------------------

'Data de lançamento: 2016-05-16'

* Menu:

* Segurança: Segurança<54>.
* Núcleo e embutidos: Núcleo e embutidos<85>.
* Biblioteca: Biblioteca<86>.
* IDLE: IDLE<55>.
* Documentação: Documentação<74>.
* Testes: Testes<76>.
* Construção: Construção<83>.
* Windows: Windows<73>.
* Ferramentas/Demos: Ferramentas/Demos<53>.
* API C: API C<72>.


File: python.info,  Node: Segurança<54>,  Next: Núcleo e embutidos<85>,  Up: Python 3 6 0 alpha 1

1.24.94.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<85>,  Next: Biblioteca<86>,  Prev: Segurança<54>,  Up: Python 3 6 0 alpha 1

1.24.94.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(): e54.
     domain (*note PYMEM_DOMAIN_MEM: e57.) now use the *note pymalloc
     allocator: eff. rather than system ‘malloc()’.  Applications
     calling *note PyMem_Malloc(): e54. 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(): e54. family
     are called without holding the GIL.

   - bpo-26564(25): On error, the debug hooks on Python memory
     allocators now use the *note tracemalloc: 105. module to get the
     traceback where a memory block was allocated.

   - bpo-26558(26): The debug hooks on Python memory allocator *note
     PyObject_Malloc(): e56. now detect when functions are called
     without holding the GIL.

   - bpo-26516(27): Add *note PYTHONMALLOC: e52. environment variable to
     set the Python memory allocators and/or install debug hooks.

   - bpo-26516(28): The *note PyMem_SetupDebugHooks(): e58. function can
     now also be used on Python compiled in release mode.

   - bpo-26516(29): The *note PYTHONMALLOCSTATS: 1dec. 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<86>,  Next: IDLE<55>,  Prev: Núcleo e embutidos<85>,  Up: Python 3 6 0 alpha 1

1.24.94.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(): 12ff, catch *note AttributeError: 5e4.
     instead of *note NameError: 44f.  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(): 73b. 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 split 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: 7b. module now emits an *note
     ImportError: 64f. rather than a *note TypeError: 198. if *note
     __import__(): ac7. is tried during the Python shutdown process but
     *note sys.path: 3e1. is already cleared (set to ‘None’).

   - bpo-21925(60): *note warnings.formatwarning(): 1cae. now catches
     exceptions when calling *note linecache.getline(): 23f. and *note
     tracemalloc.get_object_traceback(): 1dee. to be able to log *note
     ResourceWarning: 546. 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: 105. 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():
     f07. 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(): a22. and *note
     pyclbr.readmodule_ex(): a23. 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): Fixed textwrap.dedent() for the case when largest
     common whitespace is a substring of smallest leading whitespace.
     Based on patch by 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<55>,  Next: Documentação<74>,  Prev: Biblioteca<86>,  Up: Python 3 6 0 alpha 1

1.24.94.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<74>,  Next: Testes<76>,  Prev: IDLE<55>,  Up: Python 3 6 0 alpha 1

1.24.94.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<76>,  Next: Construção<83>,  Prev: Documentação<74>,  Up: Python 3 6 0 alpha 1

1.24.94.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<83>,  Next: Windows<73>,  Prev: Testes<76>,  Up: Python 3 6 0 alpha 1

1.24.94.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<53>,  Prev: Construção<83>,  Up: Python 3 6 0 alpha 1

1.24.94.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<53>,  Next: API C<72>,  Prev: Windows<73>,  Up: Python 3 6 0 alpha 1

1.24.94.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<72>,  Prev: Ferramentas/Demos<53>,  Up: Python 3 6 0 alpha 1

1.24.94.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.24.95 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.24.96 Python 3.5.5 release candidate 1
----------------------------------------

'Data de lançamento: 2018-01-23'

* Menu:

* Segurança: Segurança<55>.
* Núcleo e embutidos: Núcleo e embutidos<86>.
* Biblioteca: Biblioteca<87>.


File: python.info,  Node: Segurança<55>,  Next: Núcleo e embutidos<86>,  Up: Python 3 5 5 release candidate 1

1.24.96.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<86>,  Next: Biblioteca<87>,  Prev: Segurança<55>,  Up: Python 3 5 5 release candidate 1

1.24.96.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<87>,  Prev: Núcleo e embutidos<86>,  Up: Python 3 5 5 release candidate 1

1.24.96.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.24.97 Python 3.5.4 final
--------------------------

'Data de lançamento: 2017-08-07'

* Menu:

* Biblioteca: Biblioteca<88>.


File: python.info,  Node: Biblioteca<88>,  Up: Python 3 5 4 final

1.24.97.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.24.98 Python 3.5.4 release candidate 1
----------------------------------------

'Data de lançamento: 2017-07-23'

* Menu:

* Segurança: Segurança<56>.
* Núcleo e embutidos: Núcleo e embutidos<87>.
* Biblioteca: Biblioteca<89>.
* Documentação: Documentação<75>.
* Testes: Testes<77>.
* Construção: Construção<84>.
* Windows: Windows<74>.
* API C: API C<73>.


File: python.info,  Node: Segurança<56>,  Next: Núcleo e embutidos<87>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<87>,  Next: Biblioteca<89>,  Prev: Segurança<56>,  Up: Python 3 5 4 release candidate 1

1.24.98.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: a77.

   - 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<89>,  Next: Documentação<75>,  Prev: Núcleo e embutidos<87>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<75>,  Next: Testes<77>,  Prev: Biblioteca<89>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<77>,  Next: Construção<84>,  Prev: Documentação<75>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<84>,  Next: Windows<74>,  Prev: Testes<77>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<73>,  Prev: Construção<84>,  Up: Python 3 5 4 release candidate 1

1.24.98.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<73>,  Prev: Windows<74>,  Up: Python 3 5 4 release candidate 1

1.24.98.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.24.99 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.24.100 Python 3.5.3 release candidate 1
-----------------------------------------

'Data de lançamento: 2017-01-02'

* Menu:

* Segurança: Segurança<57>.
* Núcleo e embutidos: Núcleo e embutidos<88>.
* Biblioteca: Biblioteca<90>.
* IDLE: IDLE<56>.
* API C: API C<74>.
* Documentação: Documentação<76>.
* Testes: Testes<78>.
* Ferramentas/Demos: Ferramentas/Demos<54>.
* Windows: Windows<75>.
* Construção: Construção<85>.


File: python.info,  Node: Segurança<57>,  Next: Núcleo e embutidos<88>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<88>,  Next: Biblioteca<90>,  Prev: Segurança<57>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<90>,  Next: IDLE<56>,  Prev: Núcleo e embutidos<88>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<56>,  Next: API C<74>,  Prev: Biblioteca<90>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<74>,  Next: Documentação<76>,  Prev: IDLE<56>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<76>,  Next: Testes<78>,  Prev: API C<74>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<78>,  Next: Ferramentas/Demos<54>,  Prev: Documentação<76>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<54>,  Next: Windows<75>,  Prev: Testes<78>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<85>,  Prev: Ferramentas/Demos<54>,  Up: Python 3 5 3 release candidate 1

1.24.100.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<85>,  Prev: Windows<75>,  Up: Python 3 5 3 release candidate 1

1.24.100.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.24.101 Python 3.5.2 final
---------------------------

'Data de lançamento: 2016-06-26'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<89>.
* Testes: Testes<79>.
* IDLE: IDLE<57>.


File: python.info,  Node: Núcleo e embutidos<89>,  Next: Testes<79>,  Up: Python 3 5 2 final

1.24.101.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<79>,  Next: IDLE<57>,  Prev: Núcleo e embutidos<89>,  Up: Python 3 5 2 final

1.24.101.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<57>,  Prev: Testes<79>,  Up: Python 3 5 2 final

1.24.101.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.24.102 Python 3.5.2 release candidate 1
-----------------------------------------

'Data de lançamento: 2016-06-12'

* Menu:

* Segurança: Segurança<58>.
* Núcleo e embutidos: Núcleo e embutidos<90>.
* Biblioteca: Biblioteca<91>.
* IDLE: IDLE<58>.
* Documentação: Documentação<77>.
* Testes: Testes<80>.
* Construção: Construção<86>.
* Windows: Windows<76>.
* Ferramentas/Demos: Ferramentas/Demos<55>.


File: python.info,  Node: Segurança<58>,  Next: Núcleo e embutidos<90>,  Up: Python 3 5 2 release candidate 1

1.24.102.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(): 73b. 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<90>,  Next: Biblioteca<91>,  Prev: Segurança<58>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<91>,  Next: IDLE<58>,  Prev: Núcleo e embutidos<90>,  Up: Python 3 5 2 release candidate 1

1.24.102.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: d8.  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(): 12ff, catch *note AttributeError: 5e4.
     instead of *note NameError: 44f.  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(): 73b. 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(): 1cae. now catches
     exceptions on ‘linecache.getline(...)’ to be able to log *note
     ResourceWarning: 546. 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(): a22. and *note
     pyclbr.readmodule_ex(): a23. 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<58>,  Next: Documentação<77>,  Prev: Biblioteca<91>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<77>,  Next: Testes<80>,  Prev: IDLE<58>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<80>,  Next: Construção<86>,  Prev: Documentação<77>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<86>,  Next: Windows<76>,  Prev: Testes<80>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<55>,  Prev: Construção<86>,  Up: Python 3 5 2 release candidate 1

1.24.102.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<55>,  Prev: Windows<76>,  Up: Python 3 5 2 release candidate 1

1.24.102.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.24.103 Python 3.5.1 final
---------------------------

'Data de lançamento: 2015-12-06'

* Menu:

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


File: python.info,  Node: Núcleo e embutidos<91>,  Next: Windows<77>,  Up: Python 3 5 1 final

1.24.103.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<91>,  Up: Python 3 5 1 final

1.24.103.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.24.104 Python 3.5.1 release candidate 1
-----------------------------------------

'Data de lançamento: 2015-11-22'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<92>.
* Biblioteca: Biblioteca<92>.
* IDLE: IDLE<59>.
* Documentação: Documentação<78>.
* Testes: Testes<81>.
* Construção: Construção<87>.
* Windows: Windows<78>.
* Ferramentas/Demos: Ferramentas/Demos<56>.


File: python.info,  Node: Núcleo e embutidos<92>,  Next: Biblioteca<92>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<92>,  Next: IDLE<59>,  Prev: Núcleo e embutidos<92>,  Up: Python 3 5 1 release candidate 1

1.24.104.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): Fixed textwrap.dedent() for the case when largest
     common whitespace is a substring of smallest leading whitespace.
     Based on patch by 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<59>,  Next: Documentação<78>,  Prev: Biblioteca<92>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<78>,  Next: Testes<81>,  Prev: IDLE<59>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<81>,  Next: Construção<87>,  Prev: Documentação<78>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<87>,  Next: Windows<78>,  Prev: Testes<81>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<56>,  Prev: Construção<87>,  Up: Python 3 5 1 release candidate 1

1.24.104.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<56>,  Prev: Windows<78>,  Up: Python 3 5 1 release candidate 1

1.24.104.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.24.105 Python 3.5.0 final
---------------------------

'Data de lançamento: 2015-09-13'

* Menu:

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


File: python.info,  Node: Construção<88>,  Up: Python 3 5 0 final

1.24.105.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.24.106 Python 3.5.0 release candidate 4
-----------------------------------------

'Data de lançamento: 2015-09-09'

* Menu:

* Biblioteca: Biblioteca<93>.
* Construção: Construção<89>.


File: python.info,  Node: Biblioteca<93>,  Next: Construção<89>,  Up: Python 3 5 0 release candidate 4

1.24.106.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<89>,  Prev: Biblioteca<93>,  Up: Python 3 5 0 release candidate 4

1.24.106.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.24.107 Python 3.5.0 release candidate 3
-----------------------------------------

'Data de lançamento: 2015-09-07'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<93>.
* Biblioteca: Biblioteca<94>.


File: python.info,  Node: Núcleo e embutidos<93>,  Next: Biblioteca<94>,  Up: Python 3 5 0 release candidate 3

1.24.107.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<94>,  Prev: Núcleo e embutidos<93>,  Up: Python 3 5 0 release candidate 3

1.24.107.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.24.108 Python 3.5.0 release candidate 2
-----------------------------------------

'Data de lançamento: 2015-08-25'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<94>.
* Biblioteca: Biblioteca<95>.


File: python.info,  Node: Núcleo e embutidos<94>,  Next: Biblioteca<95>,  Up: Python 3 5 0 release candidate 2

1.24.108.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<95>,  Prev: Núcleo e embutidos<94>,  Up: Python 3 5 0 release candidate 2

1.24.108.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.24.109 Python 3.5.0 release candidate 1
-----------------------------------------

'Data de lançamento: 2015-08-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<95>.
* Biblioteca: Biblioteca<96>.
* IDLE: IDLE<60>.
* Documentação: Documentação<79>.
* Testes: Testes<82>.


File: python.info,  Node: Núcleo e embutidos<95>,  Next: Biblioteca<96>,  Up: Python 3 5 0 release candidate 1

1.24.109.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<96>,  Next: IDLE<60>,  Prev: Núcleo e embutidos<95>,  Up: Python 3 5 0 release candidate 1

1.24.109.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<60>,  Next: Documentação<79>,  Prev: Biblioteca<96>,  Up: Python 3 5 0 release candidate 1

1.24.109.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<79>,  Next: Testes<82>,  Prev: IDLE<60>,  Up: Python 3 5 0 release candidate 1

1.24.109.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<82>,  Prev: Documentação<79>,  Up: Python 3 5 0 release candidate 1

1.24.109.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.24.110 Python 3.5.0 beta 4
----------------------------

'Data de lançamento: 2015-07-26'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<96>.
* Biblioteca: Biblioteca<97>.
* Construção: Construção<90>.


File: python.info,  Node: Núcleo e embutidos<96>,  Next: Biblioteca<97>,  Up: Python 3 5 0 beta 4

1.24.110.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<97>,  Next: Construção<90>,  Prev: Núcleo e embutidos<96>,  Up: Python 3 5 0 beta 4

1.24.110.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<90>,  Prev: Biblioteca<97>,  Up: Python 3 5 0 beta 4

1.24.110.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.24.111 Python 3.5.0 beta 3
----------------------------

'Data de lançamento: 2015-07-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<97>.
* Biblioteca: Biblioteca<98>.
* Testes: Testes<83>.
* Documentação: Documentação<80>.
* Construção: Construção<91>.


File: python.info,  Node: Núcleo e embutidos<97>,  Next: Biblioteca<98>,  Up: Python 3 5 0 beta 3

1.24.111.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<98>,  Next: Testes<83>,  Prev: Núcleo e embutidos<97>,  Up: Python 3 5 0 beta 3

1.24.111.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<83>,  Next: Documentação<80>,  Prev: Biblioteca<98>,  Up: Python 3 5 0 beta 3

1.24.111.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<80>,  Next: Construção<91>,  Prev: Testes<83>,  Up: Python 3 5 0 beta 3

1.24.111.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<91>,  Prev: Documentação<80>,  Up: Python 3 5 0 beta 3

1.24.111.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.24.112 Python 3.5.0 beta 2
----------------------------

'Data de lançamento: 2015-05-31'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<98>.
* Biblioteca: Biblioteca<99>.


File: python.info,  Node: Núcleo e embutidos<98>,  Next: Biblioteca<99>,  Up: Python 3 5 0 beta 2

1.24.112.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<99>,  Prev: Núcleo e embutidos<98>,  Up: Python 3 5 0 beta 2

1.24.112.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.24.113 Python 3.5.0 beta 1
----------------------------

'Data de lançamento: 2015-05-24'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<99>.
* Biblioteca: Biblioteca<100>.
* IDLE: IDLE<61>.
* Testes: Testes<84>.
* Documentação: Documentação<81>.
* Ferramentas/Demos: Ferramentas/Demos<57>.


File: python.info,  Node: Núcleo e embutidos<99>,  Next: Biblioteca<100>,  Up: Python 3 5 0 beta 1

1.24.113.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<100>,  Next: IDLE<61>,  Prev: Núcleo e embutidos<99>,  Up: Python 3 5 0 beta 1

1.24.113.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<61>,  Next: Testes<84>,  Prev: Biblioteca<100>,  Up: Python 3 5 0 beta 1

1.24.113.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<84>,  Next: Documentação<81>,  Prev: IDLE<61>,  Up: Python 3 5 0 beta 1

1.24.113.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<81>,  Next: Ferramentas/Demos<57>,  Prev: Testes<84>,  Up: Python 3 5 0 beta 1

1.24.113.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<57>,  Prev: Documentação<81>,  Up: Python 3 5 0 beta 1

1.24.113.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.24.114 Python 3.5.0 alpha 4
-----------------------------

'Data de lançamento: 2015-04-19'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<100>.
* Biblioteca: Biblioteca<101>.
* Construção: Construção<92>.
* Testes: Testes<85>.
* Ferramentas/Demos: Ferramentas/Demos<58>.
* API C: API C<75>.


File: python.info,  Node: Núcleo e embutidos<100>,  Next: Biblioteca<101>,  Up: Python 3 5 0 alpha 4

1.24.114.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<101>,  Next: Construção<92>,  Prev: Núcleo e embutidos<100>,  Up: Python 3 5 0 alpha 4

1.24.114.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(): f9c. 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(): f97. now waits until
     the connection completes instead of raising *note InterruptedError:
     f7c. 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(): f97. still raise *note
     InterruptedError: f7c. 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<92>,  Next: Testes<85>,  Prev: Biblioteca<101>,  Up: Python 3 5 0 alpha 4

1.24.114.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<85>,  Next: Ferramentas/Demos<58>,  Prev: Construção<92>,  Up: Python 3 5 0 alpha 4

1.24.114.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<58>,  Next: API C<75>,  Prev: Testes<85>,  Up: Python 3 5 0 alpha 4

1.24.114.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<75>,  Prev: Ferramentas/Demos<58>,  Up: Python 3 5 0 alpha 4

1.24.114.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.24.115 Python 3.5.0 alpha 3
-----------------------------

'Data de lançamento: 2015-03-28'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<101>.
* Biblioteca: Biblioteca<102>.
* Construção: Construção<93>.
* Testes: Testes<86>.
* Ferramentas/Demos: Ferramentas/Demos<59>.


File: python.info,  Node: Núcleo e embutidos<101>,  Next: Biblioteca<102>,  Up: Python 3 5 0 alpha 3

1.24.115.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<102>,  Next: Construção<93>,  Prev: Núcleo e embutidos<101>,  Up: Python 3 5 0 alpha 3

1.24.115.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(): f9f. and *note
     signal.sigtimedwait(): f9e. 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<93>,  Next: Testes<86>,  Prev: Biblioteca<102>,  Up: Python 3 5 0 alpha 3

1.24.115.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<86>,  Next: Ferramentas/Demos<59>,  Prev: Construção<93>,  Up: Python 3 5 0 alpha 3

1.24.115.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<59>,  Prev: Testes<86>,  Up: Python 3 5 0 alpha 3

1.24.115.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.24.116 Python 3.5.0 alpha 2
-----------------------------

'Data de lançamento: 2015-03-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<102>.
* Biblioteca: Biblioteca<103>.
* Construção: Construção<94>.
* API C: API C<76>.
* Windows: Windows<79>.


File: python.info,  Node: Núcleo e embutidos<102>,  Next: Biblioteca<103>,  Up: Python 3 5 0 alpha 2

1.24.116.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<103>,  Next: Construção<94>,  Prev: Núcleo e embutidos<102>,  Up: Python 3 5 0 alpha 2

1.24.116.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<94>,  Next: API C<76>,  Prev: Biblioteca<103>,  Up: Python 3 5 0 alpha 2

1.24.116.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<76>,  Next: Windows<79>,  Prev: Construção<94>,  Up: Python 3 5 0 alpha 2

1.24.116.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<76>,  Up: Python 3 5 0 alpha 2

1.24.116.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.24.117 Python 3.5.0 alpha 1
-----------------------------

'Data de lançamento: 2015-02-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<103>.
* Biblioteca: Biblioteca<104>.
* IDLE: IDLE<62>.
* Construção: Construção<95>.
* API C: API C<77>.
* Documentação: Documentação<82>.
* Testes: Testes<87>.
* Ferramentas/Demos: Ferramentas/Demos<60>.
* Windows: Windows<80>.


File: python.info,  Node: Núcleo e embutidos<103>,  Next: Biblioteca<104>,  Up: Python 3 5 0 alpha 1

1.24.117.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<104>,  Next: IDLE<62>,  Prev: Núcleo e embutidos<103>,  Up: Python 3 5 0 alpha 1

1.24.117.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(): c74. 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().  Patch 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(): c49. 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’ in case 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(): 6e2, close the file descriptor if
     *note io.open(): 735. 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: 754. and *note sys.stdout: cc0. 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 usable 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<62>,  Next: Construção<95>,  Prev: Biblioteca<104>,  Up: Python 3 5 0 alpha 1

1.24.117.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<95>,  Next: API C<77>,  Prev: IDLE<62>,  Up: Python 3 5 0 alpha 1

1.24.117.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<77>,  Next: Documentação<82>,  Prev: Construção<95>,  Up: Python 3 5 0 alpha 1

1.24.117.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():
     db4, rename ‘_Py_wchar2char()’ to *note Py_EncodeLocale(): db5, 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<82>,  Next: Testes<87>,  Prev: API C<77>,  Up: Python 3 5 0 alpha 1

1.24.117.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): undocument deprecated asynchat.fifo class.

   - bpo-17386(6): Expanded functionality of the ‘Doc/make.bat’ script
     to make it much more comparable to ‘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): Add missing documentation for PurePath.with_name()
     and 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): Document cases where __main__.__spec__ is 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<87>,  Next: Ferramentas/Demos<60>,  Prev: Documentação<82>,  Up: Python 3 5 0 alpha 1

1.24.117.7 Testes
.................

   - bpo-18982(1): Add tests for CLI of the calendar module.

   - 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<60>,  Next: Windows<80>,  Prev: Testes<87>,  Up: Python 3 5 0 alpha 1

1.24.117.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<60>,  Up: Python 3 5 0 alpha 1

1.24.117.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): .pyd files with a version and platform tag (for
     example, “.cp35-win32.pyd”) will now be loaded in preference to
     those without tags.

'(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 do Python e sua extensiva biblioteca padrão estão
disponíveis gratuitamente na forma de código ou binária para todas as
principais 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 e indicaçõ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: 149.  Em *note A Referência da Linguagem
Python: 14a. 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: 1e72. e *note Manual de referência da API
Python/C: 1e73.  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: 149.

O *note Glossário: 1e74. 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.14’ 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.14

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: 1e7e, o comando ‘python3.14’ estará disponível.  Se
você tem o *note lançador py.exe: 7cf. instalado, você pode usar o
comando ‘py’.  Veja *note Gerenciador de instalação do Python: 1e7f.
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 complemento de código, em
sistemas com suporte à biblioteca GNU Readline(2).  Talvez a verificação
mais rápida para ver se o suporte à edição de linha de comando está
disponível é digitando ‘Control’-‘P’ no primeiro prompt oferecido pelo
Python.  Se for emitido um bipe, você terá a edição da linha de comando;
veja Apêndice *note Edição de entrada interativa e substituição de
histórico: 1e80. para uma introdução às combinações.  Se nada acontecer,
ou se ‘^P’ aparecer na tela, a edição da linha de comando não está
disponível; você só poderá usar 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: 1a8.  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: 16c9. antes do nome do script.

Todas as opções de linha de comando são descritas em *note Linha de
comando e ambiente: 1c5e.

* 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.

   (2) https://tiswww.case.edu/php/chet/readline/rltop.html


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: 1a8. 'comando', ‘sys.argv[0]’ conterá
‘'-c'’.  Quando for utilizado *note -m: 23b. 'módulo', ‘sys.argv[0]’
conterá o caminho completo do módulo localizado.  Opções especificadas
após *note -c: 1a8. 'comando' ou *note -m: 23b. '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.14
     Python 3.14 (default, April 4 2024, 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: 181.:

     >>> 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: 48e.


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: 1c. 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”: 1e88.  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 >>>: 48c. e *note …: 48d.): 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 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: 19b, aqueles com parte fracionária (por exemplo, ‘5.0’ e ‘1.6’) são
do tipo *note float: 196.  Veremos mais sobre tipos numéricos
posteriormente neste tutorial.

Divisão (‘/’) sempre retorna ponto flutuante (float).  Para fazer uma
*note divisão pelo piso: b34. 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: 19b. e *note float: 196, o Python oferece suporte a
outros tipos de números, tais como *note Decimal: 1fd. e *note Fraction:
212.  O Python também possui suporte embutido a *note números complexos:
1e91, 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: 169,
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(): 116b. 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: 1e94. 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: 1e95.  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(): 835. devolve o comprimento de uma string:

     >>> s = 'supercalifragilisticexpialidoce'
     >>> len(s)
     31

Ver também
..........

*note Tipo sequência de texto — str: 1e96.

     As strings são exemplos de 'tipos de sequências' e suportam as
     operações comumente suportadas por esses tipos.

*note Métodos de string: 1e97.

     As strings suportam uma grande quantidade de métodos para
     transformações básicas e busca.

*note Literais de strings formatadas: 19a.

     Strings literais que possuem expressões embutidas.

*note Sintaxe das strings de formato: 158d.

     Informações sobre formatação de string com o método *note
     str.format(): 828.

*note Formatação de string no estilo printf: 8d0.

     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: 70b.),
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: 1e95, listas são
*note mutáveis: 1e9a, 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(): 8d1. (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: 1e9b. 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(): 835. 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: 18c3. 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(): 116b. 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: 18c3. 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: 181.  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: 17b, e a parte *note else:
17c. é 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:
1ea4.


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: 347. 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(): b33. é 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():
b33. e *note len(): 835. 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(): 166f, veja *note Técnicas de iteração: 1ea9.

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(): b33.
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: 1423, 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: 347. é um exemplo de construção, enquanto que um
exemplo de função que recebe um iterável é *note sum(): 68a.:

     >>> 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: 1eaa,
iremos discutir em mais detalhes sobre *note list(): 24c.


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: 17f. sai imediatamente do laço de repetição
mais interno, seja *note for: 347. ou *note while: 18c3.:

     >>> 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: 180. 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: 347, 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: 18c3, 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: 17f.  Claro, outras maneiras de
encerrar o laço mais cedo, como um *note return: 1af. ou uma exceção
levantada, também pularão a execução da cláusula *note else: 17c.

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: 8ed. 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: 1eb0.


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: 17e. 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: 17e. 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: 1eb3.


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: a04. 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 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.  Se nenhum caso corresponder, nenhuma das ramificações
será executada.

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.

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 vinculam 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’ continua para tentar 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: 1649. 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: 1eb7.)  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: 4a6, para variáveis
globais, ou *note nonlocal: 14a3, 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: 1af. 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(): 116b.:

     >>> 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: 1af. 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: 1eb8.) O
     método *note append(): 8d1, 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: 348, 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: f02.
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: cb0.) 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: 1ebf. 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: 1ebf.).  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(): b33. 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: 1499.  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(): dbc. 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.

O analisador Python não remove a indentação de literais string
multilinha.  Portanto, ferramentas que processem strings de documentação
precisam lidar com isso, quando desejável.  Existe uma convenção para
isso.  A primeira linha não vazia após a linha de sumário determina a
indentação para o resto da string de documentação.  (Não podemos usar a
primeira linha para isso porque ela em geral está adjacente às aspas que
iniciam a string, portanto sua indentação real não fica aparente.)
Espaços em branco “equivalentes” a essa indentação são então removidos
do início das demais linhas da string.  Linhas com indentação menor não
devem ocorrer, mas se ocorrerem, todos os espaços à sua esquerda são
removidos.  A equivalência de espaços em branco deve ser testada após a
expansão das tabulações (8 espaços, normalmente).

Eis um exemplo de uma string de documentação multilinha:

     >>> def minha_função():
     ...     """Não faça nada, mas documente o fato.
     ...
     ...     Não, é sério, ela faz nada mesmo.
     ...     """
     ...     pass
     ...
     >>> print(minha_função.__doc__)
     Não faça nada, mas documente o fato.

     Não, é sério, ela faz nada mesmo.


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: 1ecf. 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: 1ed0. são armazenadas no atributo *note
__annotations__: 455. 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: 1649. .  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: 1ed3. 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 lista 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:
     2ea. é 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: 1723. 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: 2ea. 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(): dbb. 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(): 8d1.  Para recuperar um item do topo da pilha
use *note pop(): 1edb. 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: 7e9.
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: 347. e *note if: 181. é 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: 347. 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(): 1a0. 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: 1ec8. 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: 1a4f.  Ela difere do método
*note pop(): 1edb. 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: 1a4f. 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: 1a4f. 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: 1ee4.).
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: 1e95, 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:
4da.).  Listas são *note mutáveis: 1e9a, 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 conjuntos, 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(): 184. 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: 1edf, 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: cb0.).
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(): 8d1. e *note
extend(): 5f6.

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: 5dd.  Para evitar esse erro ao tentar
acessar uma chave possivelmente inexistente, use o método *note get():
1ee9, 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: 348.

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(): 183. 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(): 9c8.

     >>> 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(): 166f.

     >>> 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(): 1a0.

     >>> 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(): a5b. 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(): dbb, 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(): 184. em uma sequência elimina elementos duplicados.  O
uso de *note sorted(): dbb. em combinação com *note set(): 184. 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:
1eed. ‘:=’.  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: 198.


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: 1ef4. atual (veja *note Escopos e espaços de
nomes do Python: 1ef5. 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: 7ed. 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: 7ed. 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: 14a7, 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(): 732, 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: 1efc.  Se não encontra, procura um
arquivo chamado ‘spam.py’ em uma lista de diretórios incluídos na
variável *note sys.path: 3e1.  A *note sys.path: 3e1. é 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: 1213. (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: cc.).

Mais detalhes em *note A inicialização do caminho de pesquisa de módulos
sys.path: 1834.

     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:
3e1.  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:
1efd. 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: 18c. ou *note -OO: fa9. 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: 21. 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: 11c. só está disponível
em sistemas Windows.  Existe um módulo que requer especial atenção:
*note sys: df, 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: 1213, ou por um valor padrão embutido, se
*note PYTHONPATH: 1213. 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(): 839. é 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(): 839. 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(): 839. não lista os nomes de variáveis e funções embutidas.
Esta lista está disponível no módulo padrão *note builtins: 13.:

     >>> 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: 2b1, 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: 64f. é 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: 7ed. 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: 7ed. 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__: 1f09.
Inicializado como uma *note sequência: 70b. 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(): 116b.  (Uma outra maneira é utilizar o método *note
write(): 1f10. 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: 1f11, 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(): 828. 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: 4f3. 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(): 1c1. ou *note str(): 169.

A função *note str(): 169. serve para retornar representações de valores
que sejam legíveis para as pessoas, enquanto *note repr(): 1c1. é para
gerar representações que o interpretador Python consegue ler (ou
levantará uma exceção *note SyntaxError: 18e, se não houver sintaxe
equivalente).  Para objetos que não têm uma representação adequada para
consumo humano, *note str(): 169. devolve o mesmo valor que *note
repr(): 1c1.  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: d8. contém suporte para uma abordagem simples de
criação de modelos baseada em expressões regulares, via *note
string.Template: 88c.  Isso oferece outra maneira de substituir valores
em strings, usando espaços reservados como ‘$x’ e substituindo-os por
valores de um dicionário.  Essa sintaxe é fácil de usar, embora ofereça
muito menos controle sobre a 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: 19a. (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(): 15d7, ‘'!s'’
aplica a função *note str(): 169. e ‘'!r'’ aplica a função *note repr():
1c1.

     >>> 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: b95. 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: 4f3.


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(): 828. 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():
828.  Um número nas chaves pode ser usado para referenciar a posição do
objeto passado no método *note str.format(): 828.

     >>> 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():
828, 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(): 1cd9, 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():
828, veja a seção *note Sintaxe das strings de formato: 158d.


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(): 116b. funciona: sempre adiciona espaços entre seus
argumentos.)

O método *note str.rjust(): 1f16. justifica uma string à direita, num
campo de tamanho definido, acrescentando espaços à esquerda.  De forma
similar, os métodos *note str.ljust(): 1f17, justifica à esquerda, e
*note str.center(): 1f18, 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(): 16a0. 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: 8d0.


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(): 314. retorna um *note objeto arquivo: 13bf, 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(): 314.).  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: 192.  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: 186. 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: 8ed.-*note finally: 1b0.:

     >>> 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: 186, 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: 186.
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():
1f1e. e *note truncate(): 150c. 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(): 1f21. só
retorna strings, que terão que ser passadas para uma função como *note
int(): 19b, 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: 86. 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(): f35, chamada *note dump(): f34,
serializa o objeto para um *note arquivo texto: 1f22.  Se ‘f’ é um *note
arquivo texto: 1f22. aberto para escrita, podemos fazer isto:

     json.dump(x, f)

Para decodificar o objeto novamente, se ‘f’ é um objeto *note arquivo
binário: 1f23. ou *note arquivo texto: 1f22. 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: 1f22. 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: 86. contém uma explicação disso.

Ver também
..........

O módulo *note pickle: ab.

Ao contrário do *note JSON: 1f20, '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(): 116b, 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: b35, *note NameError:
44f. e *note TypeError: 198.  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: 1b27. 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: bbb.

     >>> 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: 8ed. funciona da seguinte maneira:

   * Primeiramente, a 'cláusula try' (o conjunto de instruções entre as
     palavras reservadas *note try: 8ed. e *note except: 1ab. ) é
     executada.

   * Se nenhuma exceção ocorrer, a 'cláusula except' é ignorada e a
     execução da instrução *note try: 8ed. é finalizada.

   * Se ocorrer uma exceção durante a execução de uma cláusula *note
     try: 8ed, as instruções remanescentes na cláusula são ignoradas.
     Se o tipo da exceção ocorrida tiver sido previsto em algum *note
     except: 1ab, 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: 8ed. 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: 8ed. 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: 1ab. 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__():
825. 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__(): 825. da exceção é exibida como a última parte
(“detalhe”) da mensagem para exceções não tratadas.

*note BaseException: 7cc. é a classe base comum de todas as exceções.
Uma de suas subclasses, *note Exception: bc3, é a classe base de todas
as exceções não fatais.  Exceções que não são subclasses de *note
Exception: bc3. normalmente não são tratadas, pois são usadas para
indicar que o programa deve terminar.  Elas incluem *note SystemExit:
f30. que é levantada por *note sys.exit(): 276. e *note
KeyboardInterrupt: bbb. que é levantada quando um usuário deseja
interromper o programa.

*note Exception: bc3. 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: bc3. é 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: 8ed. … *note except: 1ab. 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: 8ed. 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: 7f8. 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: 7f8. 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: 7cc, tal como *note
Exception: bc3. 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:
7f8. 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:
1ab, 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: 7f8. permite uma cláusula opcional *note from:
7f8.:

     # 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: 1b27.


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: 1eb8. para mais informações sobre
classes Python).  Exceções devem ser derivadas da classe *note
Exception: bc3, 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: 8ed. 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: 1b0. estiver presente, a cláusula
‘finally’ será executada como a última tarefa antes da conclusão da
instrução *note try: 8ed.  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: 1ab.  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’ executar uma instrução *note break: 17f,
     *note continue: 180. ou *note return: 1af, as exceções não serão
     levantadas novamente.  Isso pode ser confuso e, portanto, não é
     recomendado.  A partir da versão 3.14, o compilador emite um *note
     SyntaxWarning: 1ae. para isso (consulte PEP 765(1)).

   * Se a instrução ‘try’ atingir uma instrução *note break: 17f, *note
     continue: 180. ou *note return: 1af, 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’.  A partir da
     versão 3.14, o compilador emite um *note SyntaxWarning: 1ae. para
     ela (veja PEP 765(2)).

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: 1b0. é executada em todos
os casos.  A exceção *note TypeError: 198. levantada pela divisão de
duas strings não é tratada pela cláusula *note except: 1ab. e portanto é
re-levantada depois que a cláusula ‘finally’ é executada.

Em aplicação do mundo real, a cláusula *note finally: 1b0. é útil para
liberar recursos externos (como arquivos ou conexões de rede),
independentemente do uso do recurso ter sido bem sucedido ou não.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0765/

   (2) https://peps.python.org/pep-0765/


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: 186. 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: 4cc. 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:
1f3e.), 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(): 1f42. 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: 1a4f.  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: 13.).

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: 14a3. 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: 4a6. ou *note nonlocal: 14a3. 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: 7ed. e definições de funções ligam o módulo ou o nome da
função no escopo local.

A instrução *note global: 4a6. pode ser usada para indicar que certas
variáveis residem no escopo global ao invés do local; a instrução *note
nonlocal: 14a3. 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__: 772. 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: 4a6. e *note nonlocal: 14a3.
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:
14a3. mudou o vínculo de 'teste_de_escopo' de 'spam' e a atribuição
*note global: 4a6. 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: 4a6.


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: 1649.), precisam ser executadas antes que tenham qualquer efeito.
(Você pode colocar uma definição de classe dentro do teste condicional
de um *note if: 181. 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__: 1f4a. 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__(): 8b4, assim:

     def __init__(self):
         self.data = []

Quando uma classe define um método *note __init__(): 8b4, 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__(): 8b4. 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: 1f40, dados
compartilhados podem causar efeitos inesperados quando envolvem objetos
(*note mutáveis: 1e9a.), 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(): 2ac. para verificar o tipo de uma
     instância: ‘isinstance(obj, int)’ será ‘True’ somente se
     ‘obj.__class__’ é a classe *note int: 19b. ou alguma classe
     derivada de *note int: 19b.

   * Use *note issubclass(): 9ba. para verificar herança entre classes:
     ‘issubclass(bool, int)’ é ‘True’ porque *note bool: 3c0. é uma
     subclasse de *note int: 19b.  Porém, ‘issubclass(float, int)’ é
     ‘False’ porque *note float: 196. não é uma subclasse de *note int:
     19b.

* 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(): 1a6.  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: c72, portanto, qualquer caso de herança múltipla
fornece mais de um caminho para alcançar *note object: c72.  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: 1698.


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: 1f58. 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: 33.:

     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(): 1f21. e *note readline(): 1f5b. que
obtém os dados de um “buffer de caracteres” e passar como argumento.

*note Métodos de instância: 1f5c. têm atributos também: *note
m.__self__: 15ba. é o objeto instância com o método ‘m()’, e *note
m.__func__: 14f8. é o *note objeto função: 595. 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: 347. 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: 347. chama *note iter(): 9cd. no objeto contêiner.  A função
retorna um objeto iterador que define o método *note __next__(): 14c9.
que acessa elementos no contêiner, um de cada vez.  Quando não há mais
elementos, *note __next__(): 14c9. levanta uma exceção *note
StopIteration: de9. que informa ao ‘for’ para terminar.  Você pode
chamar o método *note __next__(): 14c9. usando a função embutida *note
next(): 9ce.; 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__(): 1f5f. que retorna um objeto que tenha um método *note
__next__(): 14c9.  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: 1257. são uma ferramenta simples e poderosa para criar
iteradores.  São escritos como funções normais mas usam a instrução
*note yield: bb8. quando precisam retornar dados.  Cada vez que *note
next(): 9ce. é 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__():
1f62. e *note __next__(): 1f63. 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: de9. 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: a5. fornece dúzias de funções para interagir com o
sistema operacional:

     >>> import os
     >>> os.getcwd()      # Retorna o diretório de trabalho atual
     'C:\\Python314'
     >>> 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(): f86. oculte a função *note
open(): 314. que opera de forma muito diferente.

As funções embutidas *note dir(): 839. e *note help(): aca. são úteis
como um sistema de ajuda interativa para lidar com módulos grandes como
*note os: a5.:

     >>> 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: ca. 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: 68. 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: df.  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: 7. 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: df. 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: be. 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: 92. 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: bd. 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: d7. 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: 111. para
efetuar download de dados a partir de URLs e *note smtplib: cf. para
enviar mensagens de correio eletrônico:

     >>> from urllib.request import urlopen
     >>> with urlopen('http://worldtimeapi.org/api/timezone/etc/UTC.txt') as response:
     ...     for line in response:
     ...         line = line.decode()             # Converte bytes para str
     ...         if line.startswith('datetime'):
     ...             print(line.rstrip())         # Remove nova linha ao final
     ...
     datetime: 2022-01-01T01:36:47.689215+00:00

     >>> import smtplib
     >>> server = smtplib.SMTP('localhost')
     >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
     ... """To: jcaesar@example.org
     ... From: soothsayer@example.org
     ...
     ... Beware the Ides of March.
     ... """)
     >>> 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: 34. 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: 139,
*note gzip: 6b, *note bz2: 14, *note lzma: 8e, *note zipfile: 137. and
*note tarfile: e4.

     >>> 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: f5. 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: f5, os
módulos *note profile: b4. e *note pstats: b5. 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: 3e. 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: 10c. não é tão simples de usar quanto o módulo
*note doctest: 3e, 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: 134. e *note xmlrpc.server: 135.
     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: 3f. é uma biblioteca para gerenciamento de
     mensagens de correio eletrônico, incluindo MIME e outros baseados
     no RFC 2822(1).  Diferente dos módulos *note smtplib: cf. e *note
     poplib: b1. 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: 86. oferece um suporte robusto para analisar
     este popular formato para troca de dados.  O módulo *note csv: 2d.
     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: 12b, *note xml.dom: 127. e *note
     xml.sax: 12f.  Juntos, esses módulos e pacotes simplificam muito a
     troca de informações entre aplicativos Python e outras ferramentas.

   * O módulo *note sqlite3: d4. é 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: 67, *note locale: 8a, e o pacote *note codecs:
     1c.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2822.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: c0. fornece uma versão de *note repr(): 1c1.
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: b3. 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: f2. 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: 8a. 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: d8. 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: 5dd. 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: db. 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: 137.  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:
f3. 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: bb. para alimentar esse segmento com
solicitações de outros tópicos.  Aplicações que utilizam objetos *note
Queue: 1586. 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: 8b. 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: 1bbc. 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: 11a.
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:/python314/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: 8. oferece uma classe *note array: 4b8, 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: 1e. oferece um objeto *note deque: 7e9. 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: 12. 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: 6d. 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: 3a. oferece o tipo *note Decimal: 1fd. para
aritmética decimal com ponto flutuante.  Comparado a implementação
embutida *note float: 196. 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: 1fd. 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: 1fd. 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: 3a. 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: 1f9b,
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: 117.  *note venv: 117. instalará a versão do Python a partir da
qual o comando foi executado (conforme relatado pela opção *note
-version: f0b.).  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: 117. 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: 10ee. 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: 10ee. 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: 149.:

     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: 10ee. explica como instalar
     módulos adicionais escritos por outros usuários de Python.

   * *note A Referência da Linguagem Python: 14a.: 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 web 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: 1fa2. (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: 11bf. 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__(): 6ef. 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: 1faa. 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():
1c1. 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(): 14d6. 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(): fa4. poderá ser útil para
comparar valores inexatos:

     >>> math.isclose(0.1 + 0.1 + 0.1, 0.3)
     True

Alternativamente, a função *note round(): 14d6. 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(): 169. geralmente será o suficiente, e ,
para seja necessário um valor refinado, veja os especificadores de
formato *note str.format(): 828. contido na seção *note Sintaxe das
strings de formato: 158d.

Para as situações que exijam uma representação decimal exata,
experimente o módulo *note decimal: 3a. 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(): 1faf. 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(): 1fb0. 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(): 68a.
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(): 15c5. 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(): 68a, 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: 61. e o *note decimal: 3a. 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: 48b. 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: 2f,
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:
1b7. para detalhes.  As teclas de função fornecem algumas
funcionalidades adicionais.  ‘F1’ entra no navegador de ajuda interativo
*note pydoc: ba.  ‘F2’ permite navegar no histórico da linha de comando
sem saída nem os prompts *note >>>: 48c. e *note …: 48d.  ‘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 shell interativo não for desejado, ele pode ser desabilitado
através da variável de ambiente *note PYTHON_BASIC_REPL: 1b6.

* 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 'nonzero' (diferente de zero)
após a exibição do 'stack trace'.  (Exceções tratadas por uma cláusula
*note except: 1ab. numa instrução *note try: 8ed. 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 'nonzero'; isso pode
acontecer 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
canal de saída padrão.

Digitar o caractere de interrupção (geralmente ‘Control’-‘C’ ou
‘Delete’) em prompts primários ou secundários causam a interrupção da
entrada de dados e o retorno ao prompt primário.  (1)  Digitar a
interrupção durante a execução de um comando levanta a exceção *note
KeyboardInterrupt: bbb, que pode ser tratada por uma declaração *note
try: 8ed.

   ---------- Footnotes ----------

   (1) Um problema com a package 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
‘'#'’ (em inglês chamado de 'hash', ou 'pound' etc.), é 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 um “modo executável”.  O
instalador Python associa automaticamente os arquivos ‘.py’ com o
‘python.exe’, de forma que um clique duplo num 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: 1b8. 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 'namespace' (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 os
     filename = 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 'hooks' 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: 1580. 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: cc. 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: Linha de comando e ambiente<2>.
* 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<2>,  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: 1fc5. 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<2>

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::


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: 48e.

   * 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: 1460. – 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 no código normal do módulo.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     1460. será ‘"-c"’ e o diretório atual será adicionado ao início de
     *note sys.path: 3e1. (permitindo módulos nesse diretório para ser
     importado como módulos de nível superior).

     Levanta um *note evento de auditoria: 1b5d. ‘cpython.run_command’
     com o argumento ‘command’.

     Alterado na versão 3.14: 'command' é automaticamente dedentado
     antes da execução.

 -- Option: -m <module-name>

     Procura *note sys.path: 3e1. 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:
     1460. 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: 1a8, o diretório
     atual será adicionado ao início de *note sys.path: 3e1.

     A opção *note -I: b4d. pode ser usada para executar o script em
     modo isolado onde *note sys.path: 3e1. 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:
     f5.:

          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: 1b5d. ‘cpython.run_module’
     com o argumento ‘module-name’.

     Ver também
     ..........

     *note runpy.run_module(): 1aae.

          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: 754.).  Se a
     entrada padrão for um terminal, *note -i: 16c9. está implícito.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     1460. será ‘"-"’ e o diretório atual será adicionado ao início de
     *note sys.path: 3e1.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     1460. 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: 3e1, 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: 3e1. e
     o arquivo ‘__main__.py’ nesse local será executado como o módulo
     *note __main__: 1.

     A opção *note -I: b4d. pode ser usada para executar o script em
     modo isolado onde *note sys.path: 3e1. 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: 1b5d. ‘cpython.run_file’ com
     o argumento ‘filename’.

     Ver também
     ..........

     *note runpy.run_path(): 49e.

          Funcionalidade equivalente diretamente disponível para o
          código Python

Se nenhuma opção de interface for fornecida, *note -i: 16c9. está
implícito, ‘sys.argv[0]’ é uma string vazia (‘""’) e o diretório atual
será adicionado ao início de *note sys.path: 3e1.  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: 11bf.).

Ver também
..........

*note Chamando o interpretador: 1e7d.

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: 16f. 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: 192. ou *note bytearray:
     342. para *note str: 169. sem especificar codificação ou comparar
     ‘bytes’ ou ‘bytearray’ com ‘str’ ou ‘bytes’ com *note int: 19b.
     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:
     192. com *note int: 19b.

 -- Option: -B

     Se fornecido, Python não tentará escrever arquivos ‘.pyc’ na
     importação de módulos fonte.  Veja também *note
     PYTHONDONTWRITEBYTECODE: 15bf.

 -- 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: 7f7.  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: 1fd1.

     Essa opção requer uma *note construção de depuração do Python: 503,
     caso contrário, será ignorada.

 -- Option: -E

     Ignora todas as variáveis de ambiente ‘PYTHON*’, por exemplo *note
     PYTHONPATH: 1213. e *note PYTHONHOME: 3ed, que pode ser definido.

     Veja também as opções *note -P: 7b6. e *note -I: b4d. (isolado).

 -- Option: -i

     Entra no modo interativo após a execução.

     Usanr a opção *note -i: 16c9. vai entrar no modo interativo em
     qualquer uma das circunstâncias:

        * quando um script é passado como primeiro argumento

        * quando a opção *note -c: 1a8. é usada

        * quando a opção *note -m: 23b. é usada

     O modo interativo vai ser iniciado mesmo quando a *note sys.stdin:
     754. não parecer ser um terminal.  O arquivo *note PYTHONSTARTUP:
     1b8. 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: 16c8.

 -- Option: -I

     Executa o Python no modo isolado.  Isso também implica nas opções
     *note -E: b4c, *note -P: 7b6. e *note -s: 1580.

     No modo isolado, *note sys.path: 3e1. 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

     Remova as instruções de asserção e qualquer código condicional ao
     valor de *note __debug__: 9d0.  Aumenta o nome do arquivo para
     arquivos compilados (*note bytecode: 4a4.) adicionando ‘.opt-1’
     antes da extensão ‘.pyc’ (veja PEP 488(1)).  Veja também *note
     PYTHONOPTIMIZE: 1fd2.

     Alterado na versão 3.5: Modifica nomes de arquivos ‘.pyc’ conforme
     a PEP 488(2).

 -- Option: -OO

     Faz o mesmo que *note -O: 18c. e também descarta docstrings.
     Aumenta o nome do arquivo para arquivos compilados (*note bytecode:
     4a4.) 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:
     3e1.:

        * 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: 7b7. e as
     opções *note -E: b4c. e *note -I: b4d. (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: 1273. 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__(): ce6. 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: 1273. 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: 3e1.

     Veja também *note PYTHONNOUSERSITE: 1581.

     Ver também
     ..........

     PEP 370(5) – Diretório site-packages por usuário.

 -- Option: -S

     Desabilita a importação do módulo *note site: cc. e as manipulações
     dependentes do site de *note sys.path: 3e1. que isso acarreta.
     Também desabilita essas manipulações se *note site: cc. for
     explicitamente importado mais tarde (chame *note site.main(): 1fd4.
     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: 1c45.

     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: cc. relata os
     caminhos específicos do site e os arquivos ‘.pth’ sendo
     processados.

     Veja também *note PYTHONVERBOSE: 1fd5.

 -- Option: -W arg

     Controle de advertência.  O mecanismo de aviso do Python por padrão
     exibe mensagens de aviso para *note sys.stderr: b29.

     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: abb. 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: abb. 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: d97. e de dentro de um programa
     Python usando o módulo *note warnings: 118.  Por exemplo, a função
     *note warnings.filterwarnings(): 1697. pode ser usada para usar uma
     expressão regular na mensagem de aviso.

     Veja *note O filtro de avisos: 1b1. e *note Descrevendo filtros de
     aviso: 1fd7. 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: 5c.  Veja
          também *note PYTHONFAULTHANDLER: 127b.

          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: 503.

          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: 105.  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(): 1fd9. e *note PYTHONTRACEMALLOC: 1fda.
          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: 800.  Veja
          também *note PYTHONINTMAXSTRDIGITS: 1a66.

          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 é
          ‘python -X importtime -c 'import asyncio'’.

          ‘-X importtime=2’ habilita uma saída adicional que indica
          quando um módulo importado já foi carregado.  Nesses casos, a
          string ‘cached’ será impressa em ambas as colunas de tempo.

          Veja também *note PYTHONPROFILEIMPORTTIME: ce0.

          Adicionado na versão 3.7.

          Alterado na versão 3.14: Adicionado ‘-X importtime=2’ para
          também rastrear importações de módulos carregados e valores
          reservados diferentes de ‘1’ e ‘2’ para uso futuro.

        * ‘-X dev’: habilita *note Modo de Desenvolvimento do Python:
          502, 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: cda.

          Adicionado na versão 3.7.

        * ‘-X utf8’ habilita o *note Modo UTF-8 do Python: 85b.  ‘-X
          utf8=0’ explicitamente desabilita o *note Modo UTF-8 do
          Python: 85b. (mesmo quando de outra forma seria ativado
          automaticamente).  Veja também *note PYTHONUTF8: cc2.

          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: b91.

          Adicionado na versão 3.8.

        * ‘-X warn_default_encoding’ emite uma *note EncodingWarning:
          1fdb. quando a codificação padrão específica da localidade é
          usada para abrir arquivos.  Veja também *note
          PYTHONWARNDEFAULTENCODING: 9b5.

          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: 7c8.

          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: 4a7.

          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
          somente 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: 68e. e *note Suporte
          do Python ao perfilador perf do Linux: 4a8.

          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 do 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: 4a9. e *note Suporte do Python ao
          perfilador perf do Linux: 4a8.

          Adicionado na versão 3.13.

        * ‘-X disable_remote_debug’ desabilita o suporte à depuração
          remota, conforme descrito em PEP 768(6).  Isso inclui tanto a
          funcionalidade de agendar código para execução em outro
          processo quanto a funcionalidade de receber código para
          execução no processo atual.

          Esta opção está disponível apenas em algumas plataformas e não
          fará nada se não for compatível no sistema atual.  Veja também
          *note PYTHON_DISABLE_REMOTE_DEBUG: 16e. e PEP 768(7).

          Adicionado na versão 3.14.

        * ‘-X cpu_count=N’ substitui *note os.cpu_count(): 4d5, *note
          os.process_cpu_count(): 4d4. e *note
          multiprocessing.cpu_count(): 1165.  '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: 518.  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: cc. 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 antecipadamente durante a inicialização
          do Python.  Python precisa ser *note construído no modo de
          depuração: 503. para que esta opção exista.  Veja também *note
          PYTHON_PRESITE: 1fdc.

          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: 493.  Veja
          também *note PYTHON_GIL: 494. e *note CPython com threads
          livres: 466.

          Adicionado na versão 3.13.

        * ‘-X thread_inherit_context=0,1’ faz com que *note Thread: 176.
          use, por padrão, uma cópia do contexto do chamador de
          ‘Thread.start()’ ao iniciar.  Caso contrário, as threads
          iniciarão com um contexto vazio.  Se não definida, o valor
          padrão desta opção será ‘1’ em construções com threads livres
          e ‘0’ em outras.  Veja também *note
          PYTHON_THREAD_INHERIT_CONTEXT: 17cf.

          Adicionado na versão 3.14.

        * ‘-X context_aware_warnings=0,1’ faz com que o gerenciador de
          contexto *note warnings.catch_warnings: 179. use uma *note
          ContextVar: 17db. para armazenar o estado do filtro de avisos.
          Se não definida, o valor padrão desta opção será ‘1’ em
          construções com threads livres e ‘0’ em outras.  Veja também
          *note PYTHON_CONTEXT_AWARE_WARNINGS: 17c6.

          Adicionado na versão 3.14.

        * ‘-X tlbc=0,1’ habilita (1, o padrão) ou desabilita (0) o
          bytecode local da thread em construções configuradas com *note
          -disable-gil: 493.  Quando desabilitado, também desabilita o
          interpretador especializado.  Veja também *note PYTHON_TLBC:
          1fdd.

          Adicionado na versão 3.14.

     Também permite passar valores arbitrários e recuperá-los através do
     dicionário *note sys._xoptions: 1fde.

     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’.

Removido na versão 3.14: ‘-J’ não é mais reservado para uso por
Jython(8) e agora não tem nenhum significado especial.

   ---------- 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/

   (6) https://peps.python.org/pep-0768/

   (7) https://peps.python.org/pep-0768/

   (8) https://www.jython.org/


File: python.info,  Node: Controlando cores,  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.
Este comportamento pode ser controlado definindo diferentes variáveis de
ambiente.

Definir a variável de ambiente ‘TERM’ como ‘dumb’ desativará 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: 46f. 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: Variáveis de ambiente,  Prev: Linha de comando,  Up: Linha de comando e ambiente<2>

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
ambientais onde há um conflito.

 -- Variável De Ambiente: PYTHONHOME

     Altera a localização das bibliotecas Python padrão.  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
     padronizando para ‘/usr/local’.

     Quando *note PYTHONHOME: 3ed. é definido como um único diretório,
     seu valor substitui ‘`prefix'’ e ‘`exec_prefix'’.  Para especificar
     valores diferentes para estes, defina *note PYTHONHOME: 3ed. 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 ‘PATH’ do shell: um ou mais caminhos de diretório
     separados por *note os.pathsep: 1fe1. (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:
     1213. 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:
     3ed. acima).  É 'sempre' anexado a *note PYTHONPATH: 1213.

     Um diretório adicional será inserido no caminho de pesquisa antes
     de *note PYTHONPATH: 1213. como descrito acima em *note Opções de
     interface: 1fc8.  O caminho de pesquisa pode ser manipulado de
     dentro de um programa Python como a variável *note sys.path: 3e1.

 -- Variável De Ambiente: PYTHONSAFEPATH

     Se for definido como uma string não vazia, não anexa um caminho
     potencialmente inseguro para *note sys.path: 3e1.: consulte a opção
     *note -P: 7b6. para obter detalhes.

     Adicionado na versão 3.11.

 -- Variável De Ambiente: PYTHONPLATLIBDIR

     Se for definido como uma string não vazia, ela substitui o valor
     *note sys.platlibdir: b28.

     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
     onde 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: 1fe2. e *note sys.ps2: 1fe3. e o gancho *note
     sys.__interactivehook__: 11be. neste arquivo.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 18c.  Se definido como um inteiro, é
     equivalente a especificar *note -O: 18c. 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(): cc4. que é chamado pelo *note
     breakpoint(): 270. 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(): cc4. 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: 1fd0.  Se definido como um inteiro, é
     equivalente a especificar *note -d: 1fd0. várias vezes.

     Essa variável de ambiente requer uma *note construção de depuração
     do Python: 503, 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: 16c9.

     Esta variável também pode ser modificada pelo código Python usando
     *note os.environ: 258. para forçar o modo de inspeção no
     encerramento do programa.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1b8. 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: 1c44.

 -- Variável De Ambiente: PYTHONVERBOSE

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -v: 1616.  Se definido como um inteiro, é
     equivalente a especificar *note -v: 1616. 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: 7ed.  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: 15be.

 -- 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: 16f. ‘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: 1273. 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: 800. 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(): ac8.

     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: e49. 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: 1fe4. a *note sys.path: 3e1.

     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: 1518, que é usado para
     calcular o caminho do *note diretório site-packages do usuário:
     1fe4. e *note caminhos de instalação: 1fe5. 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: abb.  Se definido como uma
     string separada por vírgulas, é equivalente a especificar *note -W:
     abb. 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: 1b1. e *note Descrevendo filtros de
     aviso: 1fd7. 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(): 20e. é chamado na
     inicialização: instale um tratador para os sinais *note SIGSEGV:
     1276, *note SIGFPE: 1277, *note SIGABRT: 1278, *note SIGBUS: 1279.
     e *note SIGILL: 127a. para despejar o traceback (situação da pilha
     de execução) do Python.  Isso é equivalente à opção *note -X: 16f.
     ‘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: 105.  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(): 1fd9. para mais
     informações.  Isso é o equivalente a definir a opção *note -X: 16f.
     ‘tracemalloc’.

     Adicionado na versão 3.4.

 -- Variável De Ambiente: PYTHONPROFILEIMPORTTIME

     Se esta variável de ambiente for definida com ‘1’, o Python
     mostrará quanto tempo leva cada importação.  Se definido com ‘2’, o
     Python incluirá a saída para módulos importados que já foram
     carregados.  Isso equivale a definir a opção *note -X: 16f.
     ‘importtime’.

     Adicionado na versão 3.7.

     Alterado na versão 3.14: Adicionado ‘PYTHONPROFILEIMPORTTIME=2’
     para também rastrear importações de módulos carregados.

 -- 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: 1fe8. do módulo *note
     asyncio: b.

     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: 1fe9.

        * ‘malloc’: usa a função ‘malloc()’ da biblioteca C para todos
          os domínios (*note PYMEM_DOMAIN_RAW: 1fea, *note
          PYMEM_DOMAIN_MEM: e57, *note PYMEM_DOMAIN_OBJ: e55.).

        * ‘pymalloc’: usa o *note alocador pymalloc: eff. para domínios
          *note PYMEM_DOMAIN_MEM: e57. e *note PYMEM_DOMAIN_OBJ: e55. e
          usa a função ‘malloc()’ para o domínio *note PYMEM_DOMAIN_RAW:
          1fea.

        * ‘mimalloc’: usa o *note alocador mimalloc: 1feb. para domínios
          *note PYMEM_DOMAIN_MEM: e57. e *note PYMEM_DOMAIN_OBJ: e55. e
          usa a função ‘malloc()’ para o domínio *note PYMEM_DOMAIN_RAW:
          1fea.

     Instala *note ganchos de depuração: 1fec.:

        * ‘debug’: instala os ganchos de depuração sobre os *note
          alocadores padrão de memória: 1fe9.

        * ‘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: eff. 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: e52. é 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: 752. 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(): 33c.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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(): 324. 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: 1a8b. ‘surrogateescape’ para *note
     sys.stdin: 754. e *note sys.stdout: cc0. (*note sys.stderr: b29.
     continua a usar ‘backslashreplace’ como faz em qualquer outra
     localidade).  Este comportamento de tratamento de fluxo pode ser
     substituído usando *note PYTHONIOENCODING: 1200. 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: cc2. 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: 1fed.: 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: 502,
     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: 16f. ‘dev’.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PYTHONUTF8

     Se definido para ‘1’, habilita o *note modo UTF-8 do Python: 85b.

     Se definido para ‘0’, desabilita o *note modo UTF-8 do Python: 85b.

     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: 1fdb. quando a codificação
     padrão específica da localidade é usada.

     Veja *note Ativar EncodingWarning: 1fee. 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: 16f. e
     *note Suporte do Python ao perfilador perf do Linux: 4a8.

     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: 16f. e
     *note Suporte do Python ao perfilador perf do Linux: 4a8.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_DISABLE_REMOTE_DEBUG

     Se esta variável for definida como uma string não vazia, ela
     desabilitará o recurso de depuração remota descrito na PEP 768(5).
     Isso inclui tanto a funcionalidade de agendar código para execução
     em outro processo quanto a funcionalidade de receber código para
     execução no processo atual.

     Veja também a opção de linha de comando *note -X
     disable_remote_debug: 16f.

     Adicionado na versão 3.14.

 -- 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(): 4d5. e
     *note os.process_cpu_count(): 4d4.

     Veja também a opção de linha de comando *note -X cpu_count: 16f.

     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:
     16f.

     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: 1b7.

     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: 48b. baseado em Python que
     requer *note curses: 2f. e *note readline: bf, e em vez disso usará
     o *note REPL: 48b. 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: 493.).

     Veja também a opção de linha de comando *note -X gil: 16f, que tem
     precedência sobre esta variável, e *note CPython com threads
     livres: 466.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_THREAD_INHERIT_CONTEXT

     Se esta variável for definida como ‘1’, *note Thread: 176. usará,
     por padrão, uma cópia do contexto do chamador de ‘Thread.start()’
     ao iniciar.  Caso contrário, novas threads serão iniciadas com um
     contexto vazio.  Se não definida, esta variável assume como padrão
     ‘1’ em construções com threads livres e como ‘0’ em outras.  Veja
     também *note -X thread_inherit_context: 16f.

     Adicionado na versão 3.14.

 -- Variável De Ambiente: PYTHON_CONTEXT_AWARE_WARNINGS

     Se definido como ‘1’, o gerenciador de contexto *note
     warnings.catch_warnings: 179. usará uma *note ContextVar: 17db.
     para armazenar o estado do filtro de avisos.  Se não definido, o
     padrão desta variável será ‘1’ em construções com threads livres e
     ‘0’ em outras.  Consulte *note -X context_aware_warnings: 16f.

     Adicionado na versão 3.14.

 -- 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.

 -- Variável De Ambiente: PYTHON_TLBC

     Se definido como ‘1’, habilita o bytecode local da thread.  Se
     definido como ‘0’, o bytecode local da thread e o interpretador
     especializado são desabilitados.  Aplica-se somente a construções
     configuradas com *note -disable-gil: 493.

     Veja também a opção de linha de comando *note -X tlbc: 16f.

     Adicionado na versão 3.14.

* 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/

   (5) https://peps.python.org/pep-0768/


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: 62a.

 -- 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: 62a.

     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: cc. 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: 16f, que
     tem precedência sobre esta variável.

     Precisa do Python configurado com a opção de construção *note
     -with-pydebug: 65a.

     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<2>,  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: 1ffa. 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.14/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: 1ffc. e *note exec_prefix: 1ffd.
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: dc.


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.

To build optional modules:

   * libbz2(5) for the *note bz2: 14. module.

   * libb2(6) (*note BLAKE2: 2005.), used by *note hashlib: 6c. module.

   * libffi(7) 3.3.0 is the recommended minimum version for the *note
     ctypes: 2e. module.

   * ‘liblzma’, for the *note lzma: 8e. module.

   * libmpdec(8) 2.5.0 para o módulo *note decimal: 3a.

   * ‘libncurses’ or ‘libncursesw’, for the *note curses: 2f. module.

   * ‘libpanel’ or ‘libpanelw’, for the *note curses.panel: 31. module.

   * libreadline(9) or libedit(10) for the *note readline: bf. module.

   * libuuid(11), for the *note uuid: 116. module.

   * OpenSSL(12) 1.1.1 is the minimum version and OpenSSL 3.0.18 is the
     recommended minimum version for the *note ssl: d5. and *note
     hashlib: 6c. extension modules.

   * SQLite(13) 3.15.2 for the *note sqlite3: d4. extension module.

   * Tcl/Tk(14) 8.5.12 for the *note tkinter: f6. module.

   * zlib(15) 1.1.4 is the reccomended minimum version for the *note
     zlib: 139. module.

   * zstd(16) 1.4.5 is the minimum version for the *note
     compression.zstd: 23. module.

For a full list of dependencies required to build all modules and how to
install them, see the devguide(17).

   * Autoconf 2.72 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: f6.

Alterado na versão 3.13: Autoconf 2.71, aclocal 1.16.5 e SQLite 3.15.2
agora são necessários.

Alterado na versão 3.14: Autoconf 2.72 agora é necessário.

Veja também PEP 7(18) “Guia de estilo para código C” e PEP 11(19)
“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://sourceware.org/bzip2/

   (6) https://github.com/BLAKE2/libb2

   (7) https://sourceware.org/libffi/

   (8) https://www.bytereef.org/mpdecimal/doc/libmpdec/

   (9) https://tiswww.case.edu/php/chet/readline/rltop.html

   (10) https://www.thrysoee.dk/editline/

   (11) https://linux.die.net/man/3/libuuid

   (12) https://www.openssl.org/

   (13) https://sqlite.org/

   (14) https://www.tcl-lang.org/

   (15) https://www.zlib.net

   (16) https://facebook.github.io/zstd/

   (17) 
https://devguide.python.org/getting-started/setup-building/#install-dependencies

   (18) https://peps.python.org/pep-0007/

   (19) 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: d4.

     Veja o método *note sqlite3.Connection.enable_load_extension():
     a35. do módulo *note sqlite3: d4.

     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: d1.

 -- Option: --enable-big-digits=[15|30]

     Define o tamanho em bits dos dígitos de *note int: 19b. 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: 148f.

 -- 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: 200e.  Veja a *note Configuração de tempo de
     compilação: 200f. do módulo *note zoneinfo: 13a.

     Padrão:
     ‘/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo’.

     Veja o separador de caminhos *note os.pathsep: 1fe1.

     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: 3a.

     Veja *note decimal.HAVE_CONTEXTVAR: 2011. e o módulo *note
     contextvars: 28.

     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: 35.

     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: cbf. e a PEP 538(1).

 -- 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: b28.

     Adicionado na versão 3.9.

 -- Option: --with-wheel-pkg-dir=PATH

     Diretório de pacotes de wheel usados pelo módulo *note ensurepip:
     59. (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: 16f.

        * Adiciona a variável de ambiente ‘PYTHONSTATS’.

        * Define a macro ‘Py_STATS’.

        * Adiciona funções ao módulo *note sys: df.:

             * ‘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 para execução de Python sem a *note trava global
     do interpretador: 46d. (GIL): construção com threads livres.

     Define a macro ‘Py_GIL_DISABLED’ e adiciona ‘"t"’ a *note
     sys.abiflags: c4d.

     Veja *note CPython com threads livres: 466. para mais detalhes.

     Adicionado na versão 3.13.

 -- Option: --enable-experimental-jit=[no|yes|yes-off|interpreter]

     Indica como integrar o *note compilador just-in-time experimental:
     159.

        * ‘no’: não constrói o JIT;

        * ‘yes’: habilita o JIT. Para desabilitá-lo em tempo de
          execução, defina a variável de ambiente *note PYTHON_JIT=0:
          44a.

        * ‘yes-off’: constrói o JIT, mas desabilita-o por padrão.  Para
          habilitá-lo em tempo de execução, defina a variável de
          ambiente *note PYTHON_JIT=1: 44a.

        * ‘interpreter’: Habilita o “interpretador JIT” (útil apenas
          para quem está depurando o próprio JIT). Para desabilitá-lo em
          tempo de execução, defina a variável de ambiente *note
          PYTHON_JIT=0: 44a.

     ‘--enable-experimental-jit=no’ é o comportamento padrão se a opção
     não for fornecida, e ‘--enable-experimental-jit’ é uma abreviação
     de ‘--enable-experimental-jit=yes’.  Consulte ‘Tools/jit/README.md’
     para mais informações, incluindo como instalar as dependências
     necessárias em tempo de construção.

          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: 14, 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: 2f, 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: 2005.), usados pelo módulo *note hashlib: 6c, substituindo
     ‘pkg-config’.

 -- Option: LIBEDIT_CFLAGS

 -- Option: LIBEDIT_LIBS

     Sinalizadores de compilador C e vinculador para ‘libedit’, usados
     pelo módulo *note readline: bf, substituindo ‘pkg-config’.

 -- Option: LIBFFI_CFLAGS

 -- Option: LIBFFI_LIBS

     Sinalizadores de compilador C e vinculador para ‘libffi’, usados
     pelo módulo *note ctypes: 2e, substituindo ‘pkg-config’.

 -- Option: LIBMPDEC_CFLAGS

 -- Option: LIBMPDEC_LIBS

     Sinalizadores de compilador C e vinculador para ‘libmpdec’, usados
     pelo módulo *note decimal: 3a, substituindo ‘pkg-config’.

          Nota: Estas variáveis de ambiente não têm efeito a menos que
          *note -with-system-libmpdec: 64b. seja especificado.

 -- Option: LIBLZMA_CFLAGS

 -- Option: LIBLZMA_LIBS

     Sinalizadores de compilador C e vinculador para ‘liblzma’, usados
     pelo módulo *note lzma: 8e, substituindo ‘pkg-config’.

 -- Option: LIBREADLINE_CFLAGS

 -- Option: LIBREADLINE_LIBS

     Sinalizadores de compilador C e vinculador para ‘libreadline’,
     usados pelo módulo *note readline: bf, substituindo ‘pkg-config’.

 -- Option: LIBSQLITE3_CFLAGS

 -- Option: LIBSQLITE3_LIBS

     Sinalizadores de compilador C e vinculador para ‘libsqlite3’,
     usados pelo módulo *note sqlite3: d4, substituindo ‘pkg-config’.

 -- Option: LIBUUID_CFLAGS

 -- Option: LIBUUID_LIBS

     Sinalizadores de compilador C e vinculador para ‘libuuid’, usados
     pelo módulo *note uuid: 116, substituindo ‘pkg-config’.

 -- Option: LIBZSTD_CFLAGS

 -- Option: LIBZSTD_LIBS

     Sinalizadores de compilador C e ligador para ‘libzstd’, usados pelo
     módulo *note compression.zstd: 23, substituindo ‘pkg-config’.

     Adicionado na versão 3.14.

 -- 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: 31,
     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: 6b, 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: --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: 3e4.

     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: 1ffc.

     Este valor pode ser recuperado em tempo de execução usando *note
     sys.exec_prefix: 3e8.

 -- Option: --disable-test-modules

     Não constrói nem instala módulos de teste, como o pacote *note
     test: e8. 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: 59. 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: 19bd. (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: 16a5.

     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: --with-tail-call-interp

     Habilita interpretadores usando chamadas de cauda no CPython.  Se
     habilitado, é altamente recomendável habilitar PGO (*note
     -enable-optimizations: a58.).  Esta opção requer especificamente um
     compilador C com suporte adequado a chamadas de cauda e a convenção
     de chamada preserve_none(3).  Por exemplo, o Clang 19 e versões
     mais recentes oferecem suporte a esse recurso.

     Adicionado na versão 3.14.

 -- Option: --without-mimalloc

     Desativa o alocador rápido *note mimalloc: 1feb. (habilitado por
     padrão).

     Veja também a variável de ambiente *note PYTHONMALLOC: e52.

 -- Option: --without-pymalloc

     Desabilita o alocador de memória especializado do Python *note
     pymalloc: eff. (habilitado por padrão).

     Veja também a variável de ambiente *note PYTHONMALLOC: e52.

 -- 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’).

 -- Option: --without-remote-debug

     Desativa o suporte à depuração remota descrito na PEP 768(4)
     (habilitado por padrão).  Quando este sinalizador é fornecido, o
     código que permite ao interpretador agendar a execução de um
     arquivo Python em um processo separado, conforme descrito na PEP
     768(5), não é compilado.  Isso inclui tanto a funcionalidade de
     agendar a execução do código quanto a funcionalidade de receber a
     execução do código.

      -- C Macro: Py_REMOTE_DEBUG

          Esta macro é definida por padrão, a menos que o Python esteja
          configurado com *note -without-remote-debug: 170.

          Observe que, mesmo que a macro esteja definida, a depuração
          remota pode não estar disponível (por exemplo, em uma
          plataforma incompatível).

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://github.com/llvm/llvm-project/tree/main/bolt

   (2) https://github.com/facebookarchive/BOLT

   (3) https://clang.llvm.org/docs/AttributeReference.html#preserve-none

   (4) https://peps.python.org/pep-0768/

   (5) https://peps.python.org/pep-0768/


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: 65a.

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: 118.

   * Adiciona ‘d’ a *note sys.abiflags: c4d.

   * Adiciona a função ‘sys.gettotalrefcount()’.

   * Adiciona a opção de linha de comando *note -X showrefcount: 16f.

   * Adiciona a opção de linha de comando *note -d: 1fd0. e a variável
     de ambiente *note PYTHONDEBUG: 1fd1. 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: 1fe9.
     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: 621. 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(): 1b3.) 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: 502. e a opção de
configuração *note -with-trace-refs: 62a.

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: 62a.).


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: 503.: 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(): 28d.

        * Adiciona a variável de ambiente *note PYTHONDUMPREFS: b94.

     A variável de ambiente *note PYTHONDUMPREFS: b94. pode ser usada
     para despejar objetos e contagens de referências ainda ativas na
     saída do Python.

     *note Objetos alocados estaticamente: 978. 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:
     503.

 -- 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: 2051.

     Veja também a opção *note -with-pydebug: 65a. (*note construção de
     depuração: 503.) 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: e5a.

     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: 204b. 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: 3a. (o padrão é
     sim).

     Adicionado na versão 3.3.

     Alterado na versão 3.13: O padrão é usar a biblioteca ‘mpdecimal’
     instalada.

     Deprecated since version 3.13, will be removed in version 3.16: A
     copy of the ‘mpdecimal’ library sources will no longer be
     distributed with Python 3.16.

     Ver também
     ..........

     *note LIBMPDEC_CFLAGS: 2030. e *note LIBMPDEC_LIBS: 2031.

 -- Option: --with-readline=readline|editline

     Designa uma biblioteca backend para o módulo *note readline: bf.

        * 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: bf. (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: 205f. 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: d5.

     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.

 -- Option: --disable-safety

     Desabilita as opções do compilador recomendadas pela OpenSSF(1) por
     motivos de segurança, sem causar sobrecarga de desempenho.  Se esta
     opção não estiver habilitada, o CPython será construído com base
     nas opções de segurança do compilador, sem causar lentidão.  Quando
     esta opção estiver habilitada, o CPython não será construído com as
     opções do compilador listadas abaixo.

     As seguintes opções do compilador são desabilitadas com
     ‘--disable-safety’:

        * -fstack-protector-strong(2): Habilita verificações em tempo de
          execução para estouros de buffer baseados em pilha.

        * -Wtrampolines(3): Habilita avisos sobre trampolins que exigem
          pilhas executáveis.

     Adicionado na versão 3.14.

 -- Option: --enable-slower-safety

     Habilita as opções do compilador recomendadas pela OpenSSF(4) por
     motivos de segurança, o que causa sobrecarga.  Se esta opção não
     estiver habilitada, o CPython não será construído com base nas
     opções de segurança do compilador, o que impacta o desempenho.
     Quando esta opção estiver habilitada, o CPython será construído com
     as opções do compilador listadas abaixo.

     As seguintes opções do compilador são habilitadas com
     ‘--enable-slower-safety’:

        * -D_FORTIFY_SOURCE=3(5): Fortalece as fontes com verificações
          de tempo de compilação e execução para uso inseguro de libc e
          estouros de buffer.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) 
https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md

   (2) 
https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#enable-run-time-checks-for-stack-based-buffer-overflows

   (3) 
https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#enable-warning-about-trampolines-that-require-executable-stacks

   (4) 
https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md

   (5) 
https://github.com/ossf/wg-best-practices-os-developers/blob/main/docs/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.md#fortify-sources-for-unsafe-libc-usage-and-buffer-overflows


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: b59. 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: 2066. 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.14/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.14/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 ci::
* 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’ (escolhido se a plataforma host corresponder a
     ‘wasm32-wasi*’ ou ‘wasm32-emscripten’)

   * ‘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: a58. 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 ci,  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’ sem testes de GUI. 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 ci,  Next: make buildbottest,  Prev: make test,  Up: Alvos principais do Makefile

3.3.4.11 make ci
................

Isso é semelhante ao ‘make test’, mas usa ‘-ugui’ para também executar
testes de GUI.

Adicionado na versão 3.14.


File: python.info,  Node: make buildbottest,  Next: make regen-all,  Prev: make ci,  Up: Alvos principais do Makefile

3.3.4.12 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.13 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: 2006.


File: python.info,  Node: Extensões C,  Prev: Alvos principais do Makefile,  Up: Sistema de Construção Python

3.3.4.14 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: 16c1.
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: 64f.
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: 16a7. 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: 16a7. quanto *note LDFLAGS: 16a6. 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: 208a. é 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: 16a5. depois que o Python
     estiver instalado (gh-65320(1)).

     Em particular, *note CFLAGS: 16a5. 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: 16a5. 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: 21. 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: 16a5. 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: 208a. 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: a59. é 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: b2.

     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: 16a6. passado para o script
     ‘./configure’.

     Evite atribuir *note CFLAGS: 16a5, *note LDFLAGS: 16a6, 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: 209c. é usado da mesma maneira que *note
     CFLAGS_NODIST: 208a.  Use-o quando um sinalizador de vinculador
     'não' fizer parte de *note LDFLAGS: 16a6. depois que o Python
     estiver instalado (gh-65320(1)).

     Em particular, *note LDFLAGS: 16a6. 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: 16a6. 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: 209c. 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: 16a7. quanto *note LDFLAGS: 16a6. 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.

Ao contrário da maioria dos sistemas e serviços Unix, o Windows não
inclui uma instalação do Python com suporte no sistema.  Em vez disso, o
Python pode ser obtido de diversos distribuidores, inclusive diretamente
da equipe do CPython.  Cada distribuição do Python terá suas próprias
vantagens e desvantagens; no entanto, a consistência com outras
ferramentas que você usa geralmente é um benefício valioso.  Antes de se
comprometer com o processo descrito aqui, recomendamos verificar suas
ferramentas existentes para ver se elas podem fornecer Python
diretamente.

Para obter o Python da equipe do CPython, use o Python Install Manager
(gerenciador de instalação do Python).  Esta é uma ferramenta autônoma
que disponibiliza o Python como comandos globais na sua máquina Windows,
integra-se ao sistema e suporta atualizações ao longo do tempo.  Você
pode baixar o Python Install Manager.  em python.org/downloads(1) ou
pelo aplicativo da Microsoft Store(2).

Após instalar o Python Install Manager, o comando global ‘python’ pode
ser usado em qualquer terminal para iniciar a versão mais recente do
Python.  Essa versão pode mudar com o tempo, conforme você adiciona ou
remove versões diferentes, e o comando ‘py list’ mostrará qual é a
atual.

Em geral, recomendamos que você crie um *note ambiente virtual: 1f98.
para cada projeto e execute ‘<env>\Scripts\Activate’ no seu terminal
para usá-lo.  Isso proporciona isolamento entre projetos, consistência
ao longo do tempo e garante que comandos adicionais adicionados por
pacotes também estejam disponíveis na sua sessão.  Crie um ambiente
virtual usando ‘python -m venv <caminho do ambiente>’.

Se os comandos ‘python’ ou ‘py’ não estiverem funcionando, consulte a
seção *note Solução de problemas: 20a7. abaixo.  Às vezes, são
necessárias etapas manuais adicionais para configurar seu PC.

Além de usar o gerenciador de instalação do Python, o Python também pode
ser obtido como pacotes NuGet.  Veja *note Os pacotes nuget.org: 20a8.
abaixo para mais informações sobre esses pacotes.

As distribuições incorporáveis são pacotes mínimos do Python adequados
para incorporação em aplicações maiores.  Elas podem ser instaladas
usando o gerenciador de instalação do Python.  Consulte *note O pacote
embutível: 20a9. abaixo para obter mais informações sobre esses pacotes.
* Menu:

* Gerenciador de instalação do Python::
* O pacote embutível::
* Os pacotes nuget.org: Os pacotes nuget org.
* Pacotes Alternativos::
* Supported Windows versions::
* Removendo a Limitação do MAX_PATH::
* Modo UTF-8::
* Encontrando módulos::
* Módulos adicionais::
* Compilando Python no Windows::
* The full installer (deprecated): The full installer deprecated.
* Python Launcher for Windows (Deprecated): Python Launcher for Windows Deprecated.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/

   (2) https://apps.microsoft.com/detail/9NQ7512CXL7T


File: python.info,  Node: Gerenciador de instalação do Python,  Next: O pacote embutível,  Up: Utilizando Python no Windows

3.4.1 Gerenciador de instalação do Python
-----------------------------------------

* Menu:

* Instalação::
* Uso básico::
* Comando help::
* Listando ambientes de execução::
* Instalando ambientes de execução::
* Instalações offline::
* Desinstalando ambientes de execução::
* Configuração::
* Shebang lines::
* Advanced Installation::
* Administrative Configuration::
* Instalando binários com threads livres::
* Troubleshooting::


File: python.info,  Node: Instalação,  Next: Uso básico,  Up: Gerenciador de instalação do Python

3.4.1.1 Instalação
..................

O gerenciador de instalação do Python pode ser instalado a partir da
aplicação da Microsoft Store(1) ou baixado e instalado de
python.org/downloads(2).  As duas versões são idênticas.

Para instalar pela Store, basta clicar em “Install”.  Após a conclusão,
abra um terminal e digite ‘python’ para começar.

Para instalar o arquivo baixado de python.org, clique duas vezes e
selecione “Install” ou execute ‘Add-AppxPackage <caminho para MSIX>’ no
Windows Powershell.

Após a instalação, os comandos ‘python’, ‘py’ e ‘pymanager’ devem estar
disponíveis.  Se você já possui instalações do Python ou modificou a
variável ‘PATH’, pode ser necessário removê-las ou desfazer as
modificações.  Consulte *note Troubleshooting: 20a7. para obter mais
ajuda sobre como corrigir comandos que não funcionam.

Ao instalar um ambiente de execução pela primeira vez, você
provavelmente será solicitado a adicionar um diretório ao seu ‘PATH’.
Isso é opcional se você preferir usar o comando ‘py’, mas é oferecido
para aqueles que preferem que todos os apelidos (como ‘python3.14.exe’)
estejam disponíveis.  O diretório será ‘%LocalAppData%\Python\bin’ por
padrão, mas pode ser personalizado por um administrador.  Clique em
Iniciar e pesquise “Editar as variáveis de ambiente para sua conta” na
página de configurações do sistema para adicionar o caminho.

Cada ambiente de execução do Python que você instalar terá seu próprio
diretório para scripts.  Estes também precisam ser adicionados a ‘PATH’
se você quiser usá-los.

O gerenciador de instalação do Python será atualizado automaticamente
para novas versões.  Isso não afeta nenhuma instalação de ambientes de
execução do Python.  Desinstalar o gerenciador de instalação do Python
não desinstala nenhum ambiente de execução do Python.

Se você não conseguir instalar um MSIX no seu contexto, por exemplo, se
estiver usando um software de implantação automatizada que não oferece
suporte a isso ou se estiver mirando o Windows Server 2019, consulte
*note Advanced Installation: 20ad. abaixo para obter mais informações.

   ---------- Footnotes ----------

   (1) https://apps.microsoft.com/detail/9NQ7512CXL7T

   (2) https://www.python.org/downloads/


File: python.info,  Node: Uso básico,  Next: Comando help,  Prev: Instalação,  Up: Gerenciador de instalação do Python

3.4.1.2 Uso básico
..................

O comando recomendado para iniciar o Python é ‘python’, que iniciará a
versão solicitada pelo script em execução, um ambiente virtual ativo ou
a versão padrão instalada, que será a versão estável mais recente, a
menos que configurado de outra forma.  Se nenhuma versão for solicitada
especificamente e nenhum ambiente de execução estiver instalado, a
versão mais recente será instalada automaticamente.

Para todos os cenários que envolvem múltiplas versões de ambientes de
execução do antigo inicializador ‘py.exe’.  Por padrão, ‘py’ corresponde
ao comportamento de ‘python’, mas também permite opções de linha de
comando para selecionar uma versão específica, bem como subcomandos para
gerenciar instalações.  Estes são detalhados abaixo.

Como o comando ‘py’ pode já estar sendo executado pela versão anterior,
há também um comando ‘pymanager’ inequívoco.  Instalações com script que
pretendem usar o gerenciador de instalação Python devem considerar o uso
de ‘pymanager’, devido à menor chance de conflito com instalações
existentes.  A única diferença entre os dois comandos é que, quando
executados sem argumentos, ‘py’ instalará e iniciará seu interpretador
padrão, enquanto ‘pymanager’ exibirá ajuda (‘pymanager exec ...’ oferece
comportamento equivalente a ‘py ...’).

Cada um desses comandos também possui uma versão em janela que evita a
criação de uma janela de console.  São eles ‘pyw’, ‘pythonw’ e
‘pymanagerw’.  Um comando ‘python3’ também está incluído, imitando o
comando ‘python’.  Ele visa detectar usos acidentais do comando POSIX
típico no Windows, mas não se destina a ser amplamente utilizado ou
recomendado.

Para iniciar seu ambiente de execução padrão, execute ‘python’ ou ‘py’
com os argumentos que você deseja passar para o ambiente de execução
(como arquivos de script ou o módulo a ser iniciado):

     $> py
     ...
     $> python meu-script.py
     ...
     $> py -m this
     ...

O ambiente de execução padrão pode ser substituído pela variável de
ambiente *note PYTHON_MANAGER_DEFAULT: 20af. ou por um arquivo de
configuração.  Consulte *note Configuração: 20b0. para obter informações
sobre as configurações.

Para iniciar um ambiente de execução específico, o comando ‘py’ aceita a
opção ‘-V:<TAG>’.  Esta opção deve ser especificada antes de quaisquer
outras.  A tag é parte ou todo o identificador do ambiente; para aqueles
da equipe do CPython, parece a versão, potencialmente com a plataforma.
Para compatibilidade, o ‘V:’ pode ser omitido nos casos em que a tag se
refere a uma versão oficial e começa com ‘3’.

     $> py -V:3.14 ...
     $> py -V:3-arm64 ...

Ambientes de execução de outros distribuidores podem exigir a inclusão
da 'company' também.  Esta deve ser separada da tag por uma barra e pode
ser um prefixo.  Especificar a empresa é opcional quando se trata de
‘PythonCore’, e especificar a tag é opcional (mas não a barra) quando se
deseja a versão mais recente de uma empresa específica.

     $> py -V:Distribuidor\1.0 ...
     $> py -V:distrib/ ...

Se nenhuma versão for especificada, mas um arquivo de script for
passado, o script será inspecionado em busca de uma 'linha de shebang'.
Este é um formato especial para a primeira linha de um arquivo que
permite a substituição do comando.  Consulte *note Shebang lines: 20b1.
para obter mais informações.  Quando não houver uma linha shebang ou o
problema não puder ser resolvido, o script será iniciado com o ambiente
de execução padrão.

Se você estiver executando em um ambiente virtual ativo, não tiver
solicitado uma versão específica e não houver uma linha shebang, o
ambiente de execução padrão será o ambiente virtual em questão.  Nesse
cenário, o comando ‘python’ provavelmente já foi substituído e nenhuma
dessas verificações ocorreu.  No entanto, esse comportamento garante que
o comando ‘py’ possa ser usado de forma intercambiável.

Ao iniciar ‘python’ ou ‘py’, mas não tiver nenhum ambiente de execução
instalado, e a versão solicitada for a padrão, ele será instalado
automaticamente e, em seguida, executado.  Caso contrário, a versão
solicitada será instalada se a instalação automática estiver configurada
(provavelmente definindo ‘PYTHON_MANAGER_AUTOMATIC_INSTALL’ como ‘true’)
ou se as formas ‘py exec’ ou ‘pymanager exec’ do comando tiverem sido
utilizadas.


File: python.info,  Node: Comando help,  Next: Listando ambientes de execução,  Prev: Uso básico,  Up: Gerenciador de instalação do Python

3.4.1.3 Comando help
....................

O comando ‘py help’ exibirá a lista completa de comandos suportados,
juntamente com suas opções.  Qualquer comando pode receber a opção ‘-?’
para exibir sua ajuda, ou seu nome pode ser passado para ‘py help’.

     $> py help
     $> py help install
     $> py install /?

Todos os comandos oferecem suporte a algumas opções comuns, que serão
exibidas por ‘py help’.  Essas opções devem ser especificadas após
qualquer subcomando.  Especificar ‘-v’ ou ‘--verbose’ aumentará a
quantidade de saída exibida, e ‘-vv’ aumentará ainda mais para fins de
depuração.  Passar ‘-q’ ou ‘--quiet’ reduzirá a saída, e ‘-qq’ a
reduzirá ainda mais.

A opção ‘--config=<PATH>’ permite especificar um arquivo de configuração
para substituir várias configurações simultaneamente.  Consulte *note
Configuração: 20b0. abaixo para obter mais informações sobre esses
arquivos.


File: python.info,  Node: Listando ambientes de execução,  Next: Instalando ambientes de execução,  Prev: Comando help,  Up: Gerenciador de instalação do Python

3.4.1.4 Listando ambientes de execução
......................................

     $> py list [-f=|--format=<FMT>] [-1|--one] [--online|-s=|--source=<URL>] [<TAG>...]

A lista de ambientes de execução instalados pode ser visualizada usando
‘py list’.  Um filtro pode ser adicionado na forma de uma ou mais tags
(com ou sem especificador de empresa), e cada uma pode incluir um
prefixo ‘<’, ‘<=’, ‘>=’ ou ‘>’ para restringir a um intervalo.

Vários formatos são suportados e podem ser passados como a opção
‘--format=<FMT>’ ou ‘-f <FMT>’.  Os formatos incluem ‘table’ (uma
visualização de tabela amigável), ‘csv’ (tabela separada por vírgulas),
‘json’ (um único blob JSON), ‘jsonl’ (um blob JSON por resultado), ‘exe’
(apenas o caminho do executável), ‘prefix’ (apenas o caminho do
prefixo).

A opção ‘--one’ ou ‘-1’ exibe apenas um único resultado.  Se o ambiente
de execução padrão estiver incluído, será ele.  Caso contrário, o
“melhor” resultado será exibido (“melhor” é definido de forma
deliberadamente vaga, mas geralmente será a versão mais recente).  O
resultado exibido por ‘py list --one <TAG>’ corresponderá ao ambiente de
execução que seria iniciado por ‘py -V:<TAG>’.

A opção ‘--only-managed’ exclui resultados que não foram instalados pelo
gerenciador de instalação do Python.  Isso é útil para determinar quais
ambientes de execução podem ser atualizados ou desinstalados por meio do
comando ‘py’.

A opção ‘--online’ é uma abreviação de ‘--source=<URL>’ com a fonte
padrão.  Passar qualquer uma dessas opções pesquisará no índice online
os ambientes de execução que podem ser instalados.  O resultado exibido
por ‘py list --online --one <TAG>’ corresponderá ao ambiente de execução
que seria instalado por ‘py install <TAG>’.

     $> py list --online 3.14

Para compatibilidade com o inicializador antigo, os comandos ‘--list’,
‘--list-paths’, ‘-0’ e ‘-0p’ (por exemplo, ‘py -0p’) foram mantidos.
Eles não permitem opções adicionais e produzirão uma saída com o formato
antigo.


File: python.info,  Node: Instalando ambientes de execução,  Next: Instalações offline,  Prev: Listando ambientes de execução,  Up: Gerenciador de instalação do Python

3.4.1.5 Instalando ambientes de execução
........................................

     $> py install [-s=|--source=<URL>] [-f|--force] [-u|--update] [--dry-run] [<TAG>...]

Novas versões de ambientes de execução podem ser adicionadas usando ‘py
install’.  Uma ou mais tags podem ser especificadas, e a tag especial
‘default’ pode ser usada para selecionar o padrão.  Intervalos não são
suportados para instalação.

A opção ‘--source=<URL>’ permite substituir o índice online usado para
obter ambientes de execução.  Isso pode ser usado com um índice offline,
como mostrado em *note Instalações offline: 20b5.

Passar ‘--force’ ignorará quaisquer arquivos em cache e removerá
qualquer instalação existente para substituí-la pela especificada.

Passar ‘--update’ substituirá as instalações existentes se a nova versão
for mais recente.  Caso contrário, elas serão mantidas.  Se nenhuma tag
for fornecida com ‘--update’, todas as instalações gerenciadas pelo
gerenciador de instalação do Python serão atualizadas se versões mais
recentes estiverem disponíveis.  As atualizações removerão quaisquer
modificações feitas na instalação, incluindo pacotes instalados
globalmente, mas os ambientes virtuais continuarão funcionando.

Passar ‘--dry-run’ gerará saída e logs, mas não modificará nenhuma
instalação.

Além das opções acima, a opção ‘--target’ extrairá o ambiente de
execução para o diretório especificado em vez de realizar uma instalação
normal.  Isso é útil para incorporar ambientes de aplicação em
aplicações maiores.

     $> py install ... [-t=|--target=<PATH>] <TAG>


File: python.info,  Node: Instalações offline,  Next: Desinstalando ambientes de execução,  Prev: Instalando ambientes de execução,  Up: Gerenciador de instalação do Python

3.4.1.6 Instalações offline
...........................

Para executar instalações offline do Python, você precisará primeiro
criar um índice offline em uma máquina que tenha acesso à rede.

     $> py install --download=<PATH> ... <TAG>...

A opção ‘--download=<PATH>’ baixará os pacotes para as tags listadas e
criará um diretório contendo-os e um arquivo ‘index.json’ adequado para
instalação posterior.  Todo esse diretório pode ser movido para a
máquina offline e usado para instalar um ou mais dos ambientes de
execução incluídos:

     $> py install --source="<PATH>\index.json" <TAG>...

O gerenciador de instalação do Python pode ser instalado baixando seu
instalador e movendo-o para outra máquina antes da instalação.

Como alternativa, os arquivos ZIP em um diretório de índice offline
podem ser simplesmente transferidos para outra máquina e extraídos.
Isso não registrará a instalação de forma alguma e, portanto, ela deve
ser iniciada referenciando diretamente os executáveis no diretório
extraído, mas às vezes é uma abordagem preferível em casos em que a
instalação do gerenciador de instalação do Python não é possível ou
conveniente.

Dessa forma, os ambientes de execução do Python podem ser instalados e
gerenciados em uma máquina sem acesso à internet.


File: python.info,  Node: Desinstalando ambientes de execução,  Next: Configuração,  Prev: Instalações offline,  Up: Gerenciador de instalação do Python

3.4.1.7 Desinstalando ambientes de execução
...........................................

     $> py uninstall [-y|--yes] <TAG>...

Ambientes de execução pode ser removidos com o uso do comando ‘py
uninstall’.  Uma ou mais tags devem ser especificadas.  Não há suporte
para intervalos aqui.

The ‘--yes’ option bypasses the confirmation prompt before uninstalling.

Em vez de passar as tags individualmente, a opção ‘--purge’ pode ser
especificada.  Isso removerá todos os ambientes de execução gerenciados
pelo gerenciador de instalação do Python, incluindo a limpeza do menu
Iniciar, do registro e de quaisquer caches de download.  Ambientes de
execução que não foram instalados pelo gerenciador de instalação do
Python não serão afetados, nem os arquivos de configuração criados
manualmente.

     $> py uninstall [-y|--yes] --purge

O gerenciador de instalação do Python pode ser desinstalado por meio da
página de configurações “Aplicativos instalados” do Windows.  Isso não
remove nenhum ambiente de execução, e eles ainda poderão ser usados,
embora o ‘python’ global e o comando ‘py’ sejam removidos.  A
reinstalação do gerenciador de instalação do Python permitirá que você
gerencie esses ambientes de execução novamente.  Para limpar
completamente todos os ambientes de execução do Python, execute o
‘--purge’ antes de desinstalar o gerenciador de instalação do Python.


File: python.info,  Node: Configuração,  Next: Shebang lines,  Prev: Desinstalando ambientes de execução,  Up: Gerenciador de instalação do Python

3.4.1.8 Configuração
....................

Python install manager is configured with a hierarchy of configuration
files, environment variables, command-line options, and registry
settings.  In general, configuration files have the ability to configure
everything, including the location of other configuration files, while
registry settings are administrator-only and will override configuration
files.  Command-line options override all other settings, but not every
option is available.

This section will describe the defaults, but be aware that modified or
overridden installs may resolve settings differently.

A global configuration file may be configured by an administrator, and
would be read first.  The user configuration file is stored at
‘%AppData%\Python\pymanager.json’ (by default) and is read next,
overwriting any settings from earlier files.  An additional
configuration file may be specified as the ‘PYTHON_MANAGER_CONFIG’
environment variable or the ‘--config’ command line option (but not
both).

The following settings are those that are considered likely to be
modified in normal use.  Later sections list those that are intended for
administrative customization.

Standard configuration options
..............................

Config Key                            Environment Variable                  Descrição
                                                                            
------------------------------------------------------------------------------------------------------------------
                                                                            
‘default_tag’                          -- Variável De Ambiente:             The preferred default version to
                                                PYTHON_MANAGER_DEFAULT      launch or install.  By default,
                                                                            this is interpreted as the most
                                                                            recent non-prerelease version from
                                                                            the CPython team.
                                                                            
                                                                            
‘default_platform’                    ‘PYTHON_MANAGER_DEFAULT_PLATFORM’     The preferred default platform to
                                                                            launch or install.  This is treated
                                                                            as a suffix to the specified tag,
                                                                            such that ‘py -V:3.14’ would prefer
                                                                            an install for ‘3.14-64’ if it
                                                                            exists (and ‘default_platform’ is
                                                                            ‘-64’), but will use ‘3.14’ if no
                                                                            tagged install exists.
                                                                            
                                                                            
‘logs_dir’                            ‘PYTHON_MANAGER_LOGS’                 The location where log files are
                                                                            written.  By default, ‘%TEMP%’.
                                                                            
                                                                            
‘automatic_install’                   ‘PYTHON_MANAGER_AUTOMATIC_INSTALL’    Verdadeiro para permitir
                                                                            instalações automáticas ao
                                                                            especificar um ambiente de execução
                                                                            específico para iniciar.  Por
                                                                            padrão, verdadeiro.
                                                                            
                                                                            
‘include_unmanaged’                   ‘PYTHON_MANAGER_INCLUDE_UNMANAGED’    Verdadeiro para permitir a listagem
                                                                            e a execução de ambientes que não
                                                                            foram instalados pelo gerenciador
                                                                            de instalação do Python, ou falso
                                                                            para excluí-los.  Por padrão,
                                                                            verdadeiro.
                                                                            
                                                                            
‘shebang_can_run_anything’            ‘PYTHON_MANAGER_SHEBANG_CAN_RUN_ANYTHING’Verdadeiro para permitir que
                                                                            shebangs em arquivos ‘.py’ iniciem
                                                                            aplicação que não sejam ambientes
                                                                            de execução do Python, ou falso
                                                                            para evitar isso.  Por padrão,
                                                                            verdadeiro.
                                                                            
                                                                            
‘log_level’                           ‘PYMANAGER_VERBOSE’,                  Set the default level of output
                                      ‘PYMANAGER_DEBUG’                     (0-50).  By default, 20.  Lower
                                                                            values produce more output.  The
                                                                            environment variables are boolean,
                                                                            and may produce additional output
                                                                            during startup that is later
                                                                            suppressed by other configuration.
                                                                            
                                                                            
‘confirm’                             ‘PYTHON_MANAGER_CONFIRM’              True to confirm certain actions
                                                                            before taking them (such as
                                                                            uninstall), or false to skip the
                                                                            confirmation.  By default, true.
                                                                            
                                                                            
‘install.source’                      ‘PYTHON_MANAGER_SOURCE_URL’           Override the index feed to obtain
                                                                            new installs from.
                                                                            
                                                                            
‘list.format’                         ‘PYTHON_MANAGER_LIST_FORMAT’          Specify the default format used by
                                                                            the ‘py list’ command.  By default,
                                                                            ‘table’.
                                                                            

Dotted names should be nested inside JSON objects, for example,
‘list.format’ would be specified as ‘{"list": {"format": "table"}}’.


File: python.info,  Node: Shebang lines,  Next: Advanced Installation,  Prev: Configuração,  Up: Gerenciador de instalação do Python

3.4.1.9 Shebang lines
.....................

If the first line of a script file starts with ‘#!’, it is known as a
“shebang” line.  Linux and other Unix like operating systems have native
support for such lines and they are commonly used on such systems to
indicate how a script should be executed.  The ‘python’ and ‘py’
commands allow the same facilities to be used with Python scripts on
Windows.

To allow shebang lines in Python scripts to be portable between Unix and
Windows, a number of ‘virtual’ commands are supported to specify which
interpreter to use.  The supported virtual commands are:

   * ‘/usr/bin/env <ALIAS>’

   * ‘/usr/bin/env -S <ALIAS>’

   * ‘/usr/bin/<ALIAS>’

   * ‘/usr/local/bin/<ALIAS>’

   * ‘<ALIAS>’

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 ter o ‘<ALIAS>’ substituído
por um apelido de um ambiente de execução instalado.  Ou seja, qualquer
comando gerado no diretório global de apelidos (que você pode ter
adicionado à sua variável de ambiente ‘PATH’) pode ser usado em uma
shebang, mesmo que não esteja no seu ‘PATH’.  Isso permite o uso de
shebangs como ‘/usr/bin/python3.12’ para selecionar um determinado
ambiente de execução.

Se nenhum ambiente de execução estiver instalado ou se a instalação
automática estiver ativada, o ambiente de execução solicitado será
instalado, se necessário.  Consulte *note Configuração: 20b0. para obter
informações sobre as definições de configuração.

The ‘/usr/bin/env’ form of shebang line will also search the ‘PATH’
environment variable for unrecognized commands.  This corresponds to the
behaviour of the Unix ‘env’ program, which performs the same search, but
prefers launching known Python commands.  A warning may be displayed
when searching for arbitrary executables, and this search may be
disabled by the ‘shebang_can_run_anything’ configuration option.

Shebang lines that do not match any of patterns are treated as 'Windows'
executable paths that are absolute or relative to the directory
containing the script file.  This is a convenience for Windows-only
scripts, such as those generated by an installer, since the behavior is
not compatible with Unix-style shells.  These paths may be quoted, and
may include multiple arguments, after which the path to the script and
any additional arguments will be appended.  This functionality may be
disabled by the ‘shebang_can_run_anything’ configuration option.

     Nota: The behaviour of shebangs in the Python install manager is
     subtly different from the previous ‘py.exe’ launcher, and the old
     configuration options no longer apply.  If you are specifically
     reliant on the old behaviour or configuration, we recommend keeping
     the legacy launcher.  It may be downloaded independently(1) and
     installed on its own.  The legacy launcher’s ‘py’ command will
     override PyManager’s one, and you will need to use ‘pymanager’
     commands for installing and uninstalling.

   ---------- Footnotes ----------

   (1) https://www.python.org/ftp/python/3.13.1/win32/launcher.msi


File: python.info,  Node: Advanced Installation,  Next: Administrative Configuration,  Prev: Shebang lines,  Up: Gerenciador de instalação do Python

3.4.1.10 Advanced Installation
..............................

For situations where an MSIX cannot be installed, such as some older
administrative distribution platforms, there is an MSI available from
the python.org downloads page.  This MSI has no user interface, and can
only perform per-machine installs to its default location in Program
Files.  It will attempt to modify the system ‘PATH’ environment variable
to include this install location, but be sure to validate this on your
configuration.

     Nota: Windows Server 2019 is the only version of Windows that
     CPython supports that does not support MSIX. For Windows Server
     2019, you should use the MSI.

Esteja ciente que o pacote MSI não inclui nenhum ambiente de execução e,
portanto, não é adequado para instalações em ambientes off-line sem
criar também um indíce para instalação off-line.  Consulte *note
Instalações offline: 20b5. e *note Administrative Configuration: 20bb.
para obter informações sobre como lidar com esses cenários.

Ambientes de execução instalados pelo MSI são compartilhados com os
instalados pelo MSIX e são todos apenas por usuário.  O gerenciador de
instalação do Python não permite a instalação de ambientes de execução
por máquina.  Para emular uma instalação por máquina, você pode usar o
‘py install --target=<shared location>’ como administrador e adicionar
suas próprias modificações em todo o sistema ao ‘PATH’, ao registro ou
ao menu Iniciar.

When the MSIX is installed, but commands are not available in the ‘PATH’
environment variable, they can be found under
‘%LocalAppData%\Microsoft\WindowsApps\PythonSoftwareFoundation.PythonManager_3847v3x7pw1km’
or
‘%LocalAppData%\Microsoft\WindowsApps\PythonSoftwareFoundation.PythonManager_qbz5n2kfra8p0’,
depending on whether it was installed from python.org or through the
Windows Store.  Attempting to run the executable directly from Program
Files is not recommended.

To programmatically install the Python install manager, it is easiest to
use WinGet, which is included with all supported versions of Windows:

     $> winget install 9NQ7512CXL7T -e --accept-package-agreements --disable-interactivity

     # Optionally run the configuration checker and accept all changes
     $> py install --configure -y

To download the Python install manager and install on another machine,
the following WinGet command will download the required files from the
Store to your Downloads directory (add ‘-d <location>’ to customize the
output location).  This also generates a YAML file that appears to be
unnecessary, as the downloaded MSIX can be installed by launching or
using the commands below.

     $> winget download 9NQ7512CXL7T -e --skip-license --accept-package-agreements --accept-source-agreements

To programmatically install or uninstall an MSIX using only PowerShell,
the Add-AppxPackage(1) and Remove-AppxPackage(2) PowerShell cmdlets are
recommended:

     $> Add-AppxPackage C:\Downloads\python-manager-25.0.msix
     ...
     $> Get-AppxPackage PythonSoftwareFoundation.PythonManager | Remove-AppxPackage

The latest release can be downloaded and installed by Windows by passing
the AppInstaller file to the Add-AppxPackage command.  This installs
using the MSIX on python.org, and is only recommended for cases where
installing via the Store (interactively or using WinGet) is not
possible.

     $> Add-AppxPackage -AppInstallerFile https://www.python.org/ftp/python/pymanager/pymanager.appinstaller

Other tools and APIs may also be used to provision an MSIX package for
all users on a machine, but Python does not consider this a supported
scenario.  We suggest looking into the PowerShell
Add-AppxProvisionedPackage(3) cmdlet, the native Windows
PackageManager(4) class, or the documentation and support for your
deployment tool.

Regardless of the install method, users will still need to install their
own copies of Python itself, as there is no way to trigger those
installs without being a logged in user.  When using the MSIX, the
latest version of Python will be available for all users to install
without network access.

Note that the MSIX downloadable from the Store and from the Python
website are subtly different and cannot be installed at the same time.
Wherever possible, we suggest using the above WinGet commands to
download the package from the Store to reduce the risk of setting up
conflicting installs.  There are no licensing restrictions on the Python
install manager that would prevent using the Store package in this way.

   ---------- Footnotes ----------

   (1) 
https://learn.microsoft.com/powershell/module/appx/add-appxpackage

   (2) 
https://learn.microsoft.com/powershell/module/appx/remove-appxpackage

   (3) 
https://learn.microsoft.com/powershell/module/dism/add-appxprovisionedpackage

   (4) 
https://learn.microsoft.com/uwp/api/windows.management.deployment.packagemanager


File: python.info,  Node: Administrative Configuration,  Next: Instalando binários com threads livres,  Prev: Advanced Installation,  Up: Gerenciador de instalação do Python

3.4.1.11 Administrative Configuration
.....................................

There are a number of options that may be useful for administrators to
override configuration of the Python install manager.  These can be used
to provide local caching, disable certain shortcut types, override
bundled content.  All of the above configuration options may be set, as
well as those below.

Configuration options may be overridden in the registry by setting
values under ‘HKEY_LOCAL_MACHINE\Software\Policies\Python\PyManager’,
where the value name matches the configuration key and the value type is
‘REG_SZ’.  Note that this key can itself be customized, but only by
modifying the core config file distributed with the Python install
manager.  We recommend, however, that registry values are used only to
set ‘base_config’ to a JSON file containing the full set of overrides.
Registry key overrides will replace any other configured setting, while
‘base_config’ allows users to further modify settings they may need.

Note that most settings with environment variables support those
variables because their default setting specifies the variable.  If you
override them, the environment variable will no longer work, unless you
override it with another one.  For example, the default value of
‘confirm’ is literally ‘%PYTHON_MANAGER_CONFIRM%’, which will resolve
the variable at load time.  If you override the value to ‘yes’, then the
environment variable will no longer be used.  If you override the value
to ‘%CONFIRM%’, then that environment variable will be used instead.

Configuration settings that are paths are interpreted as relative to the
directory containing the configuration file that specified them.

Administrative configuration options
....................................

Config Key                                             Descrição
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
‘base_config’                                          The highest priority configuration file to read.
                                                       Note that only the built-in configuration file and
                                                       the registry can modify this setting.
                                                       
                                                       
‘user_config’                                          The second configuration file to read.
                                                       
                                                       
‘additional_config’                                    The third configuration file to read.
                                                       
                                                       
‘registry_override_key’                                Registry location to check for overrides.  Note that
                                                       only the built-in configuration file can modify this
                                                       setting.
                                                       
                                                       
‘bundled_dir’                                          Read-only directory containing locally cached files.
                                                       
                                                       
‘install.fallback_source’                              Path or URL to an index to consult when the main
                                                       index cannot be accessed.
                                                       
                                                       
‘install.enable_shortcut_kinds’                        Comma-separated list of shortcut kinds to allow
                                                       (e.g.  ‘"pep514,start"’).  Enabled shortcuts may
                                                       still be disabled by ‘disable_shortcut_kinds’.
                                                       
                                                       
‘install.disable_shortcut_kinds’                       Comma-separated list of shortcut kinds to exclude
                                                       (e.g.  ‘"pep514,start"’).  Disabled shortcuts are
                                                       not reactivated by ‘enable_shortcut_kinds’.
                                                       
                                                       
‘pep514_root’                                          Registry location to read and write PEP 514 entries
                                                       into.  By default,
                                                       ‘HKEY_CURRENT_USER\Software\Python’.
                                                       
                                                       
‘start_folder’                                         Start menu folder to write shortcuts into.  By
                                                       default, ‘Python’.  This path is relative to the
                                                       user’s Programs folder.
                                                       
                                                       
‘virtual_env’                                          Path to the active virtual environment.  By default,
                                                       this is ‘%VIRTUAL_ENV%’, but may be set empty to
                                                       disable venv detection.
                                                       
                                                       
‘shebang_can_run_anything_silently’                    Verdadeiro para suprimir avisos visíveis quando um
                                                       shebang executa uma aplicação que não seja um
                                                       ambiente de execução Python.
                                                       


File: python.info,  Node: Instalando binários com threads livres,  Next: Troubleshooting,  Prev: Administrative Configuration,  Up: Gerenciador de instalação do Python

3.4.1.12 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.

Pre-built distributions of the experimental free-threaded build are
available by installing tags with the ‘t’ suffix.

     $> py install 3.14t
     $> py install 3.14t-arm64
     $> py install 3.14t-32

Ele será instalado e registrado normalmente.  Se você não tiver outro
ambiente de execução instalado, ‘python’ iniciará este.  Caso contrário,
você precisará usar ‘py -V:3.14t ...’ ou, se tiver adicionado o
diretório global de apelidos à sua variável de ambiente ‘PATH’, o
comando ‘python3.14t.exe’.


File: python.info,  Node: Troubleshooting,  Prev: Instalando binários com threads livres,  Up: Gerenciador de instalação do Python

3.4.1.13 Troubleshooting
........................

If your Python install manager does not seem to be working correctly,
please work through these tests and fixes to see if it helps.  If not,
please report an issue at our bug tracker(1), including any relevant log
files (written to your ‘%TEMP%’ directory by default).

Troubleshooting
...............

Symptom                                                Things to try
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
‘python’ gives me a “command not found” error or       Did you
opens the Store app when I type it in my terminal.     *note install the Python install manager: 20aa.?
                                                       
                                                       
                                                       Click Start, open “Manage app execution aliases”,
                                                       and check that the aliases for “Python (default)”
                                                       are enabled.  If they already are, try disabling and
                                                       re-enabling to refresh the command.  The “Python
                                                       (default windowed)” and “Python install manager”
                                                       commands may also need refreshing.
                                                       
                                                       
                                                       Check that the ‘py’ and ‘pymanager’ commands work.
                                                       
                                                       
‘py’ gives me a “command not found” error when I       Did you
type it in my terminal.                                *note install the Python install manager: 20aa.?
                                                       
                                                       
                                                       Click Start, open “Manage app execution aliases”,
                                                       and check that the aliases for “Python (default)”
                                                       are enabled.  If they already are, try disabling and
                                                       re-enabling to refresh the command.  The “Python
                                                       (default windowed)” and “Python install manager”
                                                       commands may also need refreshing.
                                                       
                                                       
‘py’ gives me a “can’t open file” error when I type    This usually means you have the legacy launcher
commands in my terminal.                               installed and it has priority over the Python
                                                       install manager.  To remove, click Start, open
                                                       “Installed apps”, search for “Python launcher” and
                                                       uninstall it.
                                                       
                                                       
‘python’ não inicia o mesmo ambiente de execução que   Clique em Iniciar, abra “Aplicativos instalados”,
‘py’                                                   procure por qualquer ambiente de execução do Python
                                                       existente e remova-o ou modifique e desative as
                                                       opções de ‘PATH’.
                                                       
                                                       
                                                       Click Start, open “Manage app execution aliases”,
                                                       and check that your ‘python.exe’ alias is set to
                                                       “Python (default)”
                                                       
                                                       
‘python’ e ‘py’ não iniciam o ambiente de execução     Check your *note PYTHON_MANAGER_DEFAULT: 20af.
que eu esperava                                        environment variable or ‘default_tag’ configuration.
                                                       The ‘py list’ command will show your default based
                                                       on these settings.
                                                       
                                                       
                                                       As instalações gerenciadas pelo gerenciador de
                                                       instalação do Python serão escolhidas antes das
                                                       instalações não gerenciadas.  Use ‘py install’ para
                                                       instalar o ambiente de execução que você espera ou
                                                       configure sua tag padrão.
                                                       
                                                       
                                                       As instalações de pré-lançamento e experimentais que
                                                       não são gerenciadas pelo gerenciador de instalação
                                                       Python podem ser escolhidas antes das instalações
                                                       estáveis.  Configure sua tag padrão ou desinstale a
                                                       versão do ambiente de execução de pré-lançamento e
                                                       reinstale usando ‘py install’.
                                                       
                                                       
‘pythonw’ ou ‘pyw’ não iniciam o mesmo ambiente de     Click Start, open “Manage app execution aliases”,
execução que ‘python’ ou ‘py’                          and check that your ‘pythonw.exe’ and ‘pyw.exe’
                                                       aliases are consistent with your others.
                                                       
                                                       
‘pip’ gives me a “command not found” error when I      Have you activated a virtual environment?  Run the
type it in my terminal.                                ‘.venv\Scripts\activate’ script in your terminal to
                                                       activate.
                                                       
                                                       
                                                       O pacote pode estar disponível, mas sem o executável
                                                       gerado.  Recomendamos usar o comando ‘python -m pip’
                                                       ou, alternativamente, ‘python -m pip install --force
                                                       pip’ recriará os executáveis e mostrará o caminho a
                                                       ser adicionado ao ‘PATH’.  Esses scripts são
                                                       separados para cada ambiente de execução e,
                                                       portanto, talvez seja necessário adicionar vários
                                                       caminhos.
                                                       

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues


File: python.info,  Node: O pacote embutível,  Next: Os pacotes nuget org,  Prev: Gerenciador de instalação do Python,  Up: Utilizando Python no Windows

3.4.2 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.

To install an embedded distribution, we recommend using ‘py install’
with the ‘--target’ option:

     $> py install 3.14-embed --target=runtime

When extracted, the embedded distribution is (almost) fully isolated
from the user’s system, including environment variables, system registry
settings, and installed packages.  The standard library is included as
pre-compiled and optimized ‘.pyc’ files in a ZIP, and ‘python3.dll’,
‘python313.dll’, ‘python.exe’ and ‘pythonw.exe’ are all provided.
Tcl/tk (including all dependents, such as Idle), pip and the Python
documentation are not included.

A default ‘._pth’ file is included, which further restricts the default
search paths (as described below in *note Encontrando módulos: e0e.).
This file is intended for embedders to modify as necessary.

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::


File: python.info,  Node: Aplicação Python,  Next: Incorporando Python,  Up: O pacote embutível

3.4.2.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.2.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: Os pacotes nuget org,  Next: Pacotes Alternativos,  Prev: O pacote embutível,  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: Pacotes Alternativos,  Next: Supported Windows versions,  Prev: Os pacotes nuget org,  Up: Utilizando Python no Windows

3.4.4 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: Supported Windows versions,  Next: Removendo a Limitação do MAX_PATH,  Prev: Pacotes Alternativos,  Up: Utilizando Python no Windows

3.4.5 Supported Windows versions
--------------------------------

As specified in PEP 11(1), a Python release only supports a Windows
platform while Microsoft considers the platform under extended support.
This means that Python 3.14 supports Windows 10 and newer.  If you
require Windows 7 support, please install Python 3.8.  If you require
Windows 8.1 support, please install Python 3.12.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0011/


File: python.info,  Node: Removendo a Limitação do MAX_PATH,  Next: Modo UTF-8,  Prev: Supported Windows versions,  Up: Utilizando Python no Windows

3.4.6 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.

In the latest versions of Windows, this limitation can be expanded to
over 32,000 characters.  Your administrator will need to activate the
“Enable Win32 long paths” group policy, or set ‘LongPathsEnabled’ to ‘1’
in the registry key
‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem’.

Isso permite que a função *note open(): 314, o módulo *note os: a5. e a
maior parte das outras funcionalidades de caminho aceitem e retornem
caminhos maiores que 260 caracteres quando usando strings.

After changing the above option and rebooting, no further configuration
is required.


File: python.info,  Node: Modo UTF-8,  Next: Encontrando módulos,  Prev: Removendo a Limitação do MAX_PATH,  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(): 327.).

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: 85b. para alterar a
codificação de texto padrão para UTF-8.  Você pode habilitar *note Modo
UTF-8 do Python: 85b. através da opção de linha de comando ‘-X utf8’ ou
da variável de ambiente ‘PYTHONUTF8=1’.  Veja *note PYTHONUTF8: cc2.
para habilitar o modo UTF-8, e *note Gerenciador de instalação do
Python: 1e7f. para saber como modificar variáveis de ambiente.

Quando o *note Modo UTF-8 do Python: 85b. 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: 752. (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: Encontrando módulos,  Next: Módulos adicionais,  Prev: Modo UTF-8,  Up: Utilizando Python no Windows

3.4.8 Encontrando módulos
-------------------------

Estas notas complementam a descrição em *note A inicialização do caminho
de pesquisa de módulos sys.path: 1834. com notas detalhadas do Windows.

Quando nenhum arquivo ‘._pth’ é encontrado, assim é como *note sys.path:
3e1. é 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: 1213. existe, como
     descrito em *note Variáveis de ambiente: 7fc, 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: 3e1.  (Note que todos os instaladores conhecidos usam
     apenas HKLM, portanto HKCU está tipicamente vazio.)

   * Se a variável de ambiente *note PYTHONHOME: 3ed. 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: 3e1. (‘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:
     1213. 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: 3ed. 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: 637. antes de *note
     Py_InitializeFromConfig(): 3f3.

   * Limpe e/ou sobrescreva *note PYTHONPATH: 1213. e defina *note
     PYTHONHOME: 3ed. 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: f1a.  Este localizador está
ativo no Windows no 3.6.0 e anteriores, mas pode precisar ser
explicitamente adicionado ao *note sys.meta_path: f1b. 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.9 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: 20cb.

* Menu:

* PyWin32::
* cx_Freeze::


File: python.info,  Node: PyWin32,  Next: cx_Freeze,  Up: Módulos adicionais

3.4.9.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.9.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: The full installer deprecated,  Prev: Módulos adicionais,  Up: Utilizando Python no Windows

3.4.10 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: 20cf.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/source/

   (2) https://devguide.python.org/setup/#get-the-source-code


File: python.info,  Node: The full installer deprecated,  Next: Python Launcher for Windows Deprecated,  Prev: Compilando Python no Windows,  Up: Utilizando Python no Windows

3.4.11 The full installer (deprecated)
--------------------------------------

Descontinuado desde a versão 3.14: This installer is deprecated since
3.14 and will not be produced for Python 3.16 or later.  See *note
Gerenciador de instalação do Python: 20aa. for the modern installer.

* Menu:

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


File: python.info,  Node: Etapas de instalação,  Next: Removendo a Limitação do MAX_PATH<2>,  Up: The full installer deprecated

3.4.11.1 Etapas de instalação
.............................

Quatro instaladores Python 3.14 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: 20d3. 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 Gerenciador de
     instalação do Python: 7cf. para todos os usuários)

   * Python será instalado dentro do seu diretório de usuário

   * O *note Gerenciador de instalação do Python: 7cf. 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 Gerenciador de instalação do Python: 7cf. 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<2>,  Next: Instalando sem UI,  Prev: Etapas de instalação,  Up: The full installer deprecated

3.4.11.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(): 314, o módulo *note os: a5. 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<2>,  Up: The full installer deprecated

3.4.11.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 Gerenciador de instalação do Python: 7cf.
                                
                                                                           
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: The full installer deprecated

3.4.11.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<2>,  Prev: Instalando Sem Download,  Up: The full installer deprecated

3.4.11.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
Gerenciador de instalação do Python: 7cf, que tem seu próprio registro
nos Programas e Recursos.


File: python.info,  Node: Instalando binários com threads livres<2>,  Prev: Modificando uma instalação,  Up: The full installer deprecated

3.4.11.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 Gerenciador de instalação do Python: 7cf. 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: 20d3.
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:
20a8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: Python Launcher for Windows Deprecated,  Prev: The full installer deprecated,  Up: Utilizando Python no Windows

3.4.12 Python Launcher for Windows (Deprecated)
-----------------------------------------------

Descontinuado desde a versão 3.14: The launcher and this documentation
have been superseded by the Python Install Manager described above.
This is preserved temporarily for historical interest.

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: Python Launcher for Windows Deprecated

3.4.12.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.12.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.14) você deve ter notado que o Python 3.14 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.12.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: 117. 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.12.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.12.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: Python Launcher for Windows Deprecated

3.4.12.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.

The ‘/usr/bin/env’ form of shebang line has one further special
property.  Before looking for installed Python interpreters, this form
will search the executable ‘PATH’ for a Python executable matching the
name provided as the first argument.  This corresponds to the behaviour
of the Unix ‘env’ program, which performs a ‘PATH’ search.  If an
executable matching the first argument after the ‘env’ command cannot be
found, but the argument starts with ‘python’, it will be handled as
described for the other virtual commands.  The environment variable
‘PYLAUNCHER_NO_SEARCH_PATH’ may be set (to any value) to skip this
search of ‘PATH’.

As linhas Shebang que não correspondem a nenhum desses padrões são
procuradas na seção ‘[commands]’ do arquivo *note .INI: 20e0. 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: Python Launcher for Windows Deprecated

3.4.12.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: Python Launcher for Windows Deprecated

3.4.12.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.12.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.12.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.

If no version qualifiers are found in a command, the environment
variable ‘PY_PYTHON’ can be set to specify the default version
qualifier.  If it is not set, the default is “3”.  The variable can
specify any value that may be passed on the command line, such as “3”,
“3.7”, “3.7-32” or “3.7-64”.  (Note that the “-64” option is only
available with the launcher included with Python 3.7 or newer.)

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: Python Launcher for Windows Deprecated

3.4.12.11 Diagnósticos
......................

If an environment variable ‘PYLAUNCHER_DEBUG’ is set (to any value), the
launcher will print diagnostic information to stderr (i.e.  to the
console).  While this information manages to be simultaneously verbose
'and' terse, it should allow you to see what versions of Python were
located, why a particular version was chosen and the exact command-line
used to execute the target Python.  It is primarily intended for testing
and debugging.


File: python.info,  Node: Teste de simulação,  Next: Instalar sob demanda,  Prev: Diagnósticos,  Up: Python Launcher for Windows Deprecated

3.4.12.12 Teste de simulação
............................

If an environment variable ‘PYLAUNCHER_DRYRUN’ is set (to any value),
the launcher will output the command it would have run, but will not
actually launch Python.  This may be useful for tools that want to use
the launcher to detect and then launch Python directly.  Note that the
command written to standard output is always encoded using UTF-8, and
may not render correctly in the console.


File: python.info,  Node: Instalar sob demanda,  Next: Códigos de retorno,  Prev: Teste de simulação,  Up: Python Launcher for Windows Deprecated

3.4.12.13 Instalar sob demanda
..............................

If an environment variable ‘PYLAUNCHER_ALLOW_INSTALL’ is set (to any
value), and the requested Python version is not installed but is
available on the Microsoft Store, the launcher will attempt to install
it.  This may require user interaction to complete, and you may need to
run the command again.

An additional ‘PYLAUNCHER_ALWAYS_INSTALL’ variable causes the launcher
to always try to install Python, even if it is detected.  This is mainly
intended for testing (and should be used with ‘PYLAUNCHER_DRYRUN’).


File: python.info,  Node: Códigos de retorno,  Prev: Instalar sob demanda,  Up: Python Launcher for Windows Deprecated

3.4.12.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: 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: 20ed. 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.15 Catalina' 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.14/’ 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 opcional de threads livres,
consulte *note Instalando binários com threads livres: 20f1.

[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.14/’ 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.14’ 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.14’ ou ‘python3’, opcionalmente seguido por uma ou mais
opções da linha de comando (descritas em *note Linha de comando e
ambiente: 1c5e.).  O tutorial de Python também tem uma seção útil sobre
o *note uso interativo do Python a partir de um console: 48e.

Você também pode invocar o interpretador por um ambiente de
desenvolvimento integrado (IDE). O *note IDLE — editor e console Python:
120b. é 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: 20f3. 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.14’ ‘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: f6,
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<3>.
* 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<3>,  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.

O pacote de instalação do *note Python para macOS: 492. em ‘python.org’
pode, opcionalmente, instalar uma compilação adicional do Python 3.14
que dá suporte à PEP 703(1), o recurso de threads livres (executado com
o *note trava global do interpretador: 46d. desativado).  Verifique a
página de lançamento em ‘python.org’ para obter informações atualizadas.

O modo com threads livres está funcionando e continua sendo aprimorado,
mas há alguma sobrecarga adicional em cargas de trabalho de thread única
em comparação com a construção regular.  Além disso, pacotes de
terceiros, em particular aqueles com um *note módulo de extensão: 20fc,
podem não estar prontos para uso em uma construção com threads livres e
reativarão a *note GIL: 164.  Portanto, o suporte para threads livres
não é instalado por padrão.  Ele é fornecido como uma opção de
instalação separada, disponível clicando no botão 'Personalizar' na
etapa 'Tipo de Instalação' do instalador, conforme 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.14 com threads livres coexista no seu
sistema com a compilação de Python 3.14 tradicional (com GIL) com risco
mínimo durante instalação ou testagem.  Esse layout de instalação 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.14t’, o
     interpretador com threads livres e ‘python3.14t-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.14t’.

   - Neste lançamento, o pacote 'Shell profile updater' e o comando
     ‘Update Shell Profile.command’ em ‘/Applications/Python 3.14/’ 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.14t’.

        - Para instalar um pacote usando ‘pip’ sem um ‘venv’:

               python3.14t -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: 1f98.  Isso
     pode tanto evitar possíveis conflitos de comandos, quanto evitar a
     confusão sobre qual Python está sendo usado:

          python3.14t -m venv <venv_name>

     e, em seguida, ‘activate’.

   - Para executar uma versão do IDLE com threads livres:

          python3.14t -m idlelib

   - Os interpretadores em ambos as construções respondem às mesmas
     variáveis de ambiente *note PYTHON: 7fc, 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: 1fc8. 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.14t’ 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.14/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.14’, 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.14="/Library/Frameworks/Python.framework/Versions/3.14/bin/python3.14"
          alias py3.14t="/Library/Frameworks/PythonT.framework/Versions/3.14/bin/python3.14t"

   ---------- 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<3>,  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: command:‘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.14.0b2’ e selecionando a opção de interpretador com threads livres:

     RELEASE="python-3.140b2-macos11.pkg"

     # download installer pkg
     curl -O https://www.python.org/ftp/python/3.14.0/${RELEASE}

     # create installer choicechanges to customize the install:
     #    enable the PythonTFramework-3.14 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.14</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.14t -VV
     Python 3.14.0b2 free-threading build (v3.14.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.14 -VV
     Python 3.14.0b2 (v3.14.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.14t -VV
     Python 3.14.0b2 free-threading build (v3.14.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
     $ python3.14 -VV
     Python 3.14.0b2 (v3.14.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:
18dd.

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.14/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: 2106.  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: 2107. 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.

   * Primeiro, obtenha uma construção do Python para Android:

        * A maneira mais fácil é baixar uma versão do Android em
          python.org(7).  O diretório ‘prefix’ mencionado abaixo está no
          nível raiz do pacote.

        * Ou, se quiser construí-la você mesmo, siga as instruções em
          Android/README.md(8).  O diretório ‘prefix’ será criado em
          ‘cross-build/HOST’.

   * Adicione código ao seu arquivo build.gradle(9) 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(10).

   * Adicione código a sua aplicação para iniciar o Python em modo
     incorporado(11).  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.14/Android/testbed

   (7) https://www.python.org/downloads/android/

   (8) https://github.com/python/cpython/tree/3.14/Android/README.md

   (9) 
https://github.com/python/cpython/tree/3.14/Android/testbed/app/build.gradle.kts

   (10) 
https://github.com/python/cpython/tree/3.14/Android/testbed/app/src/main/java/org/python/testbed/MainActivity.kt

   (11) 
https://github.com/python/cpython/tree/3.14/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: 2106.  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: 2070. 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(): 2111.  *note
platform.system(): 2112. reportará ‘iOS’ ou ‘iPadOS’, dependendo do
dispositivo.

*note os.uname(): 1312. 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: 2107.
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: 2115.

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: 2116. 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: 2117. 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 Apple/iOS/README.md(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. 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.

  4. 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.

  5. Nas configurações de “General”, em “Frameworks, Libraries and
     Embedded Content”, adicione ‘Python.xcframework’, com “Embed &
     Sign” selecionado.

  6. 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

  7. Adicione uma etapa de construção que processa a biblioteca padrão
     do Python e suas dependências de binários Python.  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 “Process Python libraries”,
     desative a caixa de seleção “Based on dependency analysis” e defina
     o conteúdo do script como:

          set -e
          source $PROJECT_DIR/Python.xcframework/build/build_utils.sh
          install_python Python.xcframework app

     Se você colocou seu XCframework em algum lugar diferente da raiz do
     seu projeto, modifique o caminho para o primeiro argumento.

  8. 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: 41a.) esteja
          habilitado;

        * Stdio buffered (*note PyConfig.buffered_stdio: 40e.) esteja
          desabilitado;

        * Escrita de bytecode (*note PyConfig.write_bytecode: 40a.)
          esteja desabilitada;

        * Manipuladores de sinais (*note
          PyConfig.install_signal_handlers: ab1.) estejam habilitados;

        * Registro de logs do sistema (*note PyConfig.use_system_logger:
          211c.) esteja desabilitado (opcional, mas fortemente
          recomendado; isso está habilitado por padrão);

        * *note PYTHONHOME: 3ed. para o interpretador esteja configurado
          para apontar para a subpasta ‘python’ do pacote da sua
          aplicação; e

        * O *note PYTHONPATH: 1213. 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 7 e 8 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 sejam
     explicitamente copiadas como parte da etapa 7.  A etapa 7 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).

   * Se você estiver usando uma pasta separada para pacotes de
     terceiros, certifique-se de que essa pasta seja adicionada ao final
     da chamada de ‘install_python’ no passo 7 e que seja parte da
     configuração *note PYTHONPATH: 1213. no passo 8.

   * 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(): 211d.), em vez
     de adicioná-la diretamente a *note PYTHONPATH: 1213. ou *note
     sys.path: 3e1.

   ---------- Footnotes ----------

   (1) https://github.com/pvieito/PythonKit

   (2) https://github.com/python/cpython/tree/3.14/Apple/iOS/README.md


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
Apple/iOS/README.md(2) para obter detalhes), crie um clone do projeto de
banco de testes de iOS do Python.  Se você usou o script de construção
‘Apple’ para construir o XCframework, você pode executar:

     $ python cross-build/iOS/testbed clone --app <caminho/para/módulo1> --app <caminho/para/módulo2> app-testbed

Ou, se você tiver criado seu próprio XCframework, execute:

     $ python Apple/testbed clone --platform iOS --framework <caminho/para/Python.xcframework> --app <caminho/para/módulo1> --app <caminho/para/módulo2> app-testbed

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/Testbed/app_packages’ (usando ‘pip install --target
app-testbed/Testbed/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 ‘Testbed.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.14/Apple/iOS/testbed

   (2) https://github.com/python/cpython/tree/3.14/Apple/iOS/README.md


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.  Há alguns passos que devem ser seguidas
para garantir que sua aplicação consiga passar por esses passos de
validação.

* Menu:

* Código incompatível na biblioteca padrão::
* Manifestos de privacidade::


File: python.info,  Node: Código incompatível na biblioteca padrão,  Next: Manifestos de privacidade,  Up: Conformidade com a App Store<2>

3.7.3.1 Código incompatível na biblioteca padrão
................................................

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.14/Mac/Resources/app-store-compliance.patch


File: python.info,  Node: Manifestos de privacidade,  Prev: Código incompatível na biblioteca padrão,  Up: Conformidade com a App Store<2>

3.7.3.2 Manifestos de privacidade
.................................

Em abril de 2025, a Apple introduziu um requisito para que determinadas
bibliotecas de terceiros forneçam um Manifesto de Privacidade(1).  Como
resultado, se você tiver um módulo binário que usa uma das bibliotecas
afetadas, deverá fornecer um arquivo ‘.xcprivacy’ para essa biblioteca.
O OpenSSL é uma biblioteca afetada por esse requisito, mas existem
outras.

Se você produzir um módulo binário chamado ‘meumódulo.so’ e usar o
script de construção do Xcode descrito no passo 7 acima, poderá colocar
um arquivo ‘meumódulo.xcprivacy’ ao lado de ‘meumódulo.so’, e o
manifesto de privacidade será instalado no local necessário quando o
módulo binário for convertido em um framework.

   ---------- Footnotes ----------

   (1) https://developer.apple.com/support/third-party-SDK-requirements


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: 1ff7.
Para obter mais informações consulte, consulte os documentos do *note
IDLE: 120b.


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: 149.  Para
uma introdução informal à linguagem, consulte *note O tutorial do
Python: 1e71.  Para programadores em C ou C++, existem dois manuais
adicionais: *note Estendendo e incorporando o interpretador Python:
1e72. 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: 1e73.
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: 149.  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 lexical e sintaxe utilizam uma notação
gramatical que é uma mistura de EBNF(1) e GASE(2) (em inglês, PEG). Por
exemplo:

     name:   *note letter: 2131. (*note letter: 2131. | *note digit: 2132. | "_")*
     letter: "a"..."z" | "A"..."Z"
     digit:  "0"..."9"

Neste exemplo, a primeira linha diz que um ‘name’ é uma ‘letter’ seguida
por uma sequência de zero ou mais ‘letter’s, ‘digit’s e sublinhados.
Uma ‘letter’, por sua vez, é qualquer um dos caracteres simples de ‘'a'’
a ‘'z'’ e de ‘A’ a ‘Z’; um ‘digit’ é um caractere simples de ‘0’ a ‘9’.

Cada regra começa com um nome (que identifica a regra que está sendo
definida) seguido por caractere de dois pontos, ‘:’.  A definição à
direita dos dois pontos utiliza os seguintes elementos de sintaxe:

   * ‘name’: Um nome se refere a outra regra.  Sempre que possível, é um
     link para a definição da regra.

        * ‘TOKEN’: Um nome em maiúsculas refere-se a um *note token:
          2133.  Para fins de definições gramaticais, tokens são o mesmo
          que regras.

   * ‘"text"’, ‘'text'’: O texto entre aspas simples ou duplas deve ser
     escrito literalmente (sem as aspas).  O tipo de citação é escolhido
     de acordo com o significado de ‘text’:

        * ‘'if'’: Um nome entre aspas simples denota uma *note palavra
          reservada: 2134.

        * ‘"case"’: Um nome entre aspas duplas denota uma *note palavra
          reservada contextual: a03.

        * ‘'@'’: Um símbolo que não seja uma letra entre aspas simples
          denota um token *note OP: 2135, ou seja, um *note delimitador:
          2136. ou *note operador: 2137.

   * ‘e1 e2’: Itens separados apenas por espaços em branco denotam uma
     sequência.  Aqui, ‘e1’ deve ser seguido por ‘e2’.

   * ‘e1 | e2’: Uma barra vertical é usada para separar alternativas.
     Ela denota a “escolha ordenada” do GASE: se ‘e1’ corresponder, ‘e2’
     não é considerado.  Nas gramáticas GASE tradicionais, isso é
     escrito como uma barra, ‘/’, em vez de uma barra vertical.  Veja
     PEP 617(3) para mais informações e detalhes.

   * ‘e*’: Uma estrela significa zero ou mais repetições do item
     anterior.

   * ‘e+’: Da mesma forma, um mais significa uma ou mais repetições.

   * ‘[e]’: Uma frase entre colchetes significa zero ou uma ocorrência.
     Em outras palavras, a frase entre colchetes é opcional.

   * ‘e?’: Um ponto de interrogação tem exatamente o mesmo significado
     que colchetes: o item anterior é opcional.

   * ‘(e)’: Parênteses são usados para agrupamento.

A notação a seguir é usada somente em *note definições lexicais: 2138.

   * ‘"a"..."z"’: Dois caracteres literais separados por três pontos
     significam uma escolha de qualquer caractere único no intervalo
     fornecido (inclusive) de caracteres ASCII.

   * ‘<...>’: Uma frase entre parênteses angulares fornece uma descrição
     informal do símbolo correspondente (por exemplo, ‘<qualquer
     caractere ASCII, exceto "\">’) ou uma abreviação definida no texto
     próximo (por exemplo, ‘<Lu>’).
Algumas definições também usam 'lookaheads', que indicam que um elemento
deve (ou não) corresponder a uma determinada posição, mas sem consumir
nenhuma entrada:

   * ‘&e’: um lookahead positivo (ou seja, ‘e’ é necessário para
     corresponder)

   * ‘!e’: um lookahead negativo (ou seja, ‘e’ 'não' é necessário para
     corresponder)

Os operadores unários (‘*’, ‘+’, ‘?’) vinculam-se o mais firmemente
possível; a barra vertical (‘|’) vincula-se de forma mais frouxa.

O espaço em branco só tem significado para separar tokens.

As regras normalmente ficam contidas em uma única linha, mas regras
muito longas podem ser encapsuladas:

     literal: stringliteral | bytesliteral
              | integer | floatnumber | imagnumber

Alternativamente, as regras podem ser formatadas com a primeira linha
terminando com dois pontos e cada alternativa começando com uma barra
vertical em uma nova linha.  Por exemplo:

     literal:
        | stringliteral
        | bytesliteral
        | integer
        | floatnumber
        | imagnumber

Isso 'não' significa que exista uma primeira alternativa vazia.

* Menu:

* Definições lexicais e sintáticas::

   ---------- Footnotes ----------

   (1) 
https://pt.m.wikipedia.org/wiki/Formalismo_de_Backus-Naur_Estendido

   (2) 
https://pt.m.wikipedia.org/wiki/Gramática_de_análise_sintática_de_expressão

   (3) https://peps.python.org/pep-0617/


File: python.info,  Node: Definições lexicais e sintáticas,  Up: Notação

4.1.2.1 Definições lexicais e sintáticas
........................................

Há algumas diferenças entre a análise 'léxica' e a 'sintática': o *note
analisador léxico: 213d. opera nos caracteres individuais da fonte de
entrada, enquanto o 'parser' (analisador sintático) opera no fluxo de
*note tokens: 2133. gerados pela análise léxica.  No entanto, em alguns
casos, o limite exato entre as duas fases é um detalhe da implementação
do CPython.

A diferença prática entre os dois é que, em definições 'léxicas', todos
os espaços em branco são significativos.  O analisador léxico *note
descarta: 213e. todos os espaços em branco que não são convertidos em
tokens como *note token.INDENT: 1faa. ou *note NEWLINE: 213f.
Definições 'sintáticas' então usam esses tokens, em vez dos caracteres
de origem.

Esta documentação utiliza a mesma gramática BNF para ambos os estilos de
definição.  Todos os usos de BNF no próximo capítulo (*note Análise
léxica: 2140.) são definições lexicais; os usos nos capítulos
subsequentes são definições sintáticas.


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
==================

A Python program is read by a 'parser'.  Input to the parser is a stream
of *note tokens: 2133, generated by the 'lexical analyzer' (also known
as the 'tokenizer').  This chapter describes how the lexical analyzer
produces these tokens.

The lexical analyzer determines the program text’s *note encoding: 2144.
(UTF-8 by default), and decodes the text into *note source characters:
2145.  If the text cannot be decoded, a *note SyntaxError: 18e. is
raised.

Next, the lexical analyzer uses the source characters to generate a
stream of tokens.  The type of a generated token generally depends on
the next source character to be processed.  Similarly, other special
behavior of the analyzer depends on the first source character that
hasn’t yet been processed.  The following table gives a quick summary of
these source characters, with links to sections that contain more
information.

Caractere                                              Next token (or other relevant documentation)
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
   * espaço                                               * *note Whitespace: 213e.
                                                       
   * tabulação

   * formfeed

   * CR, LF                                               * *note New line: 2146.
                                                       
                                                          * *note Indentation: 2147.
                                                       
                                                       
   * backslash (‘\’)                                      * *note Explicit line joining: 2148.
                                                       
                                                          * (Also significant in
                                                            *note string escape sequences: 67c.)
                                                       
                                                       
   * hash (‘#’)                                           * *note Comment: 2149.
                                                       
                                                       
   * quote (‘'’, ‘"’)                                     * *note String literal: 214a.
                                                       
                                                       
   * ASCII letter (‘a’-‘z’, ‘A’-‘Z’)                      * *note Name: 214b.
                                                       
   * non-ASCII character                                  * Prefixed *note string or bytes literal: 214a.
                                                       
                                                       
   * underscore (‘_’)                                     * *note Name: 214b.
                                                       
                                                          * (Can also be part of
                                                            *note numeric literals: 214c.)
                                                       
                                                       
   * number (‘0’-‘9’)                                     * *note Numeric literal: 214c.
                                                       
                                                       
   * dot (‘.’)                                            * *note Numeric literal: 214c.
                                                       
                                                          * *note Operator: 2137.
                                                       
                                                       
   * question mark (‘?’)                                  * Error (outside string literals and comments)
                                                       
   * dollar (‘$’)

   * 
     backquote (‘​`​’)

   * control character

   * other printing character                             * *note Operator or delimiter: 2137.
                                                       
                                                       
   * end of file                                          * *note End marker: 214d.
                                                       

* Menu:

* Estrutura das linhas::
* Outros tokens::
* Nomes (identificadores e palavras reservadas): Nomes identificadores e palavras reservadas.
* Literais::
* Literais de string e bytes::
* Literais numéricos::
* Operators and delimiters::


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::
* Marcador de fim::


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 *note NEWLINE: 213f.
As instruções não podem cruzar os limites da linha lógica, exceto onde
‘NEWLINE’ for permitido pela sintaxe (por exemplo, entre as instruções
de instruções compostas).  Uma linha lógica é construída a partir de uma
ou mais 'linhas físicas' seguindo as regras *note explícitas: 2148. ou
*note implícitas: 2151. 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 das
seguintes sequências de fim de linha:

   * o formulário Unix usando ASCII LF (avanço de linha),

   * o formulário do Windows usando a sequência ASCII CR LF (retorno
     seguido de avanço de linha),

   * o formato ‘Classic Mac OS(1)’ usando o caractere ASCII CR
     (retorno).

Independentemente da plataforma, cada uma dessas sequências é
substituída por um único caractere ASCII LF (avanço de linha).  (Isso é
feito até mesmo dentro de *note literais de string: 214a.)  Cada linha
pode usar qualquer uma das sequências; elas não precisam ser
consistentes dentro de um arquivo.

O fim da entrada também serve como um terminador implícito para a linha
física final.

Formalmente:

     newline: <ASCII LF> | <ASCII CR> <ASCII LF> | <ASCII CR>

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Classic_Mac_OS


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: fac.).  A
codificação é usada por toda análise léxica, incluindo literais strings,
comment and identificadores.  Toda a análise lexical, incluindo literais
de string, comentários e identificadores, funciona em texto Unicode
decodificado usando a codificação de origem.  Qualquer ponto de código
Unicode, exceto o caractere de controle NUL, pode aparecer no
código-fonte Python.

     source_character:  <any Unicode code point, except NUL>


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
*note NEWLINE: 213f. é 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
multilinha.


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: 75a. é 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 *note INDENT: 1faa. e *note DEDENT: 215d, 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,  Next: Marcador de fim,  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).  Entretanto, ‘+a’ e ‘+ a’ produzem dois tokens,
‘+’ e ‘a’, pois ‘+a’ não é um token válido.


File: python.info,  Node: Marcador de fim,  Prev: Espaços em branco entre tokens,  Up: Estrutura das linhas

4.2.1.10 Marcador de fim
........................

No final da entrada não interativa, o analisador léxico gera um token
*note ENDMARKER: 2160.


File: python.info,  Node: Outros tokens,  Next: Nomes identificadores e palavras reservadas,  Prev: Estrutura das linhas,  Up: Análise léxica

4.2.2 Outros tokens
-------------------

Além de *note NEWLINE: 213f, *note INDENT: 1faa. e *note DEDENT: 215d,
existem as seguintes categorias de tokens: 'identificadores',
'palavras-chave' (*note NAME: 2163.), 'literais' (tal como *note NUMBER:
2164. e *note STRING: 2165.) e outros símbolos ('operadores' e
'delimitadores', *note OP: 2135.).  Caracteres de espaço em branco
(exceto terminadores lógicos 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: Nomes identificadores e palavras reservadas,  Next: Literais,  Prev: Outros tokens,  Up: Análise léxica

4.2.3 Nomes (identificadores e palavras reservadas)
---------------------------------------------------

Tokens *note NAME: 2163. representam 'identificadores', 'palavras
reservadas' e 'palavras reservadas contextuais'.

Dentro do intervalo ASCII (U+0001..U+007F), os caracteres válidos para
nomes incluem letras maiúsculas e minúsculas (‘A-Z’ e ‘a-z’), o
sublinhado ‘_’ e, exceto pelo primeiro caractere, os dígitos ‘0’ a ‘9’.

Os nomes devem conter pelo menos um caractere, mas não há limite máximo
de tamanho.  Maiúsculas e minúsculas são relevantes.

Além de ‘A-Z’, ‘a-z’, ‘_’ e ‘0-9’, os nomes também podem usar caracteres
“letras ou similares” e “números ou similares” de fora do intervalo
ASCII, conforme detalhado abaixo.

Todos os identificadores são convertidos no formato normal(1) NFKC
durante a análise; a comparação de identificadores é baseada no NFKC.

Formalmente, o primeiro caractere de um identificador normalizado deve
pertencer ao conjunto ‘id_start’, que é a união de:

   * Categoria Unicode ‘<Lu>’ - letras maiúsculas (inclui ‘A’ a ‘Z’)

   * Categoria Unicode ‘<Ll>’ - letras minúsculas (inclui ‘a’ a ‘z’)

   * Categoria Unicode ‘<Lt>’ - letras em titlecase (coloca em maiúsculo
     a primeira letra de cada palavra principal)

   * Categoria Unicode ‘<Lm>’ - letras modificadoras

   * Categoria Unicode ‘<Lo>’ - outras letras

   * Categoria Unicode ‘<Nl>’ - números de letras

   * {‘"_"’} - o underscore (sublinhado)

   * ‘<Other_ID_Start>’ - um conjunto explícito de caracteres em
     PropList.txt(2) para oferecer suporte à retrocompatibilidade

Os caracteres restantes devem pertencer ao conjunto ‘id_continue’, que é
a união de:

   * todos os caracteres em ‘id_start’

   * Categoria Unicode ‘<Nd>’ - números decimais (inclui ‘0’ a ‘9’)

   * Categoria Unicode ‘<Pc>’ - pontuações de conectores

   * Categoria Unicode ‘<Mn>’ - marcas sem espaçamento

   * Categoria Unicode ‘<Mc>’ - espaçamento combinando marcas

   * ‘<Other_ID_Continue>’ - outro conjunto explícito de caracteres em
     PropList.txt(3) para oferecer suporte à retrocompatibilidade

As categorias Unicode usam a versão do Unicode Character Database (em
português, banco de dados de caracteres Unicode) incluída no módulo
*note unicodedata: 10b.

Esses conjuntos são baseados no anexo padrão Unicode UAX-31(4).  Veja
também PEP 3131(5) para mais detalhes.

De forma ainda mais formal, os nomes são descritos pelas seguintes
definições lexicais:

     NAME:         *note xid_start: 2168. *note xid_continue: 2169.*
     id_start:     <Lu> | <Ll> | <Lt> | <Lm> | <Lo> | <Nl> | "_" | <Other_ID_Start>
     id_continue:  *note id_start: 216a. | <Nd> | <Pc> | <Mn> | <Mc> | <Other_ID_Continue>
     xid_start:    <all characters in *note id_start: 216a. whose NFKC normalization is
                    in (*note id_start: 216a. *note xid_continue: 2169.*)">
     xid_continue: <all characters in *note id_continue: 216b. whose NFKC normalization is
                    in (*note id_continue: 216b.*)">
     identifier:   <*note NAME: 2167, except keywords>

Uma lista não normativa de todos os caracteres identificadores válidos,
conforme definido pelo Unicode, está disponível no arquivo
DerivedCoreProperties.txt(6) no Unicode Character Database.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://www.unicode.org/reports/tr15/#Norm_Forms

   (2) https://www.unicode.org/Public/16.0.0/ucd/PropList.txt

   (3) https://www.unicode.org/Public/16.0.0/ucd/PropList.txt

   (4) https://www.unicode.org/reports/tr31/

   (5) https://peps.python.org/pep-3131/

   (6) 
https://www.unicode.org/Public/16.0.0/ucd/DerivedCoreProperties.txt


File: python.info,  Node: Palavras reservadas,  Next: Palavras reservadas contextuais,  Up: Nomes identificadores e palavras reservadas

4.2.3.1 Palavras reservadas
...........................

Os nomes a seguir são usados como palavras reservadas 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: Nomes identificadores e palavras reservadas

4.2.3.2 Palavras reservadas contextuais
.......................................

Adicionado na versão 3.10.

Alguns nomes são reservados apenas em contextos específicos.  São
conhecidos como 'palavras reservadas contextuais':

   - ‘match’, ‘case’ e ‘_’, quando usados na instrução *note match: a04.

   - ‘type’, quando usado na instrução *note type: 661.

Elas agem sintaticamente como palavra reservada em seus contextos
específicos, mas essa distinção é feita no nível do analisador
sintático, não na 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.

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: Nomes identificadores e palavras reservadas

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: a04, ‘_’ é uma
     *note palavra reservada contextual: a03. que denota um *note
     curinga: a05.

     Isoladamente, o interpretador interativo disponibiliza o resultado
     da última avaliação na variável ‘_’.  (Ele é armazenado no módulo
     *note builtins: 13, 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: 67. 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:
     e5c. 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): 2171.


File: python.info,  Node: Literais,  Next: Literais de string e bytes,  Prev: Nomes identificadores e palavras reservadas,  Up: Análise léxica

4.2.4 Literais
--------------

Literais são notações para valores constantes de alguns tipos embutidos.

Em termos de análise lexical, Python tem literais *note de string, de
bytes: 214a. e *note numéricos: 214c.

Outros “literais” são denotados lexicamente usando *note palavra
reservada: 2134. (‘None’, ‘True’, ‘False’) e o *note token de
reticências: 2174. especial (‘...’).


File: python.info,  Node: Literais de string e bytes,  Next: Literais numéricos,  Prev: Literais,  Up: Análise léxica

4.2.5 Literais de string e bytes
--------------------------------

Literais de string são textos entre aspas simples (‘'’) ou aspas duplas
(‘"’).  Por exemplo:

     "spam"
     'eggs'

A aspa usada para iniciar o literal também o encerra, portanto, um
literal de string só pode conter a outra aspa (exceto com sequências de
escape, veja abaixo).  Por exemplo:

     'Diga "Olá", por favor.'
     "Não faça isso!"

Exceto por essa limitação, a escolha do caractere de aspas (‘'’ ou ‘"’)
não afeta como o literal é analisado.

Dentro de uma literal de string, o caractere de contrabarra (‘\’)
introduz uma sequência de escape ', que tem um significado especial
dependendo do caractere após a contrabarra.  Por exemplo, ''"'' denota o
caractere de aspas duplas e 'não' encerra a string:

     >>> print("Diga \"Olá\" para todo mundo!")
     Diga "Olá" para todo mundo!

Veja *note sequências de escape: 67c. abaixo para uma lista completa
dessas sequências e mais detalhes.

* Menu:

* Strings entre aspas triplas::
* Prefixos de string::
* Gramática formal::
* Sequências de escape::
* Literais de bytes::
* Literais de string brutas::
* Literais de strings formatadas::
* Literais de strings templates (t-strings): Literais de strings templates t-strings.


File: python.info,  Node: Strings entre aspas triplas,  Next: Prefixos de string,  Up: Literais de string e bytes

4.2.5.1 Strings entre aspas triplas
...................................

Strings também podem ser colocadas emgrupos correspondentes de três
aspas simples ou duplas.  Geralmente, elas são chamadas de 'strings
entre aspas triplas':

     """Isso é uma string entre aspas triplas."""

Em literais com aspas triplas, aspas sem escape são permitidas (e são
mantidas), exceto que três aspas sem escape seguidas encerram o literal,
se forem do mesmo tipo (‘'’ ou ‘"’) usadas no início:

     """Essa string tem "aspas" dentro."""

Novas linhas sem escape também são permitidas e mantidas:

     '''Essa string entre aspas triplas
     continua na linha seguinte.'''


File: python.info,  Node: Prefixos de string,  Next: Gramática formal,  Prev: Strings entre aspas triplas,  Up: Literais de string e bytes

4.2.5.2 Prefixos de string
..........................

Literais de string podem ter um 'prefixo' opcional que influencia como o
conteúdo do literal é analisado, por exemplo:

     b"data"
     f'{result=}'

Os prefixos permitidos são:

   * ‘b’: *note Literal de bytes: 2178.

   * ‘r’: *note String bruta: 2179.

   * ‘f’: *note Literal de string formatada: 19a. (“f-string”)

   * ‘t’: *note Literal de string template: 176b. (“t-string”)

   * ‘u’: Sem efeito (permitido para retrocompatibilidade)

Veja as seções vinculadas para obter detalhes sobre cada tipo.

Prefixos não diferenciam maiúsculas de minúsculas (por exemplo, ‘‘B’’
funciona da mesma forma que ‘‘b’’).  O prefixo ‘‘r’’ pode ser combinado
com ‘‘f’’, ‘‘t’’ ou ‘‘b’’, portanto, ‘‘fr’’, ‘‘rf’’, ‘‘tr’’, ‘‘rt’’,
‘‘br’’ e ‘‘rb’’ também são prefixos válidos.

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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0414/


File: python.info,  Node: Gramática formal,  Next: Sequências de escape,  Prev: Prefixos de string,  Up: Literais de string e bytes

4.2.5.3 Gramática formal
........................

Literais de string, exceto *note “f-strings”: 19a. e *note “t-strings”:
176b, são descritos pelas seguintes definições lexicais.

Essas definições usam *note negative lookaheads: 2139. (‘!’) para
indicar que uma aspa final encerra o literal.

     STRING:          [*note stringprefix: 217c.] (*note stringcontent: 217d.)
     stringprefix:    <("r" | "u" | "b" | "br" | "rb"), case-insensitive>
     stringcontent:
        | "'''" ( !"'''" *note longstringitem: 217e.)* "'''"
        | '"""' ( !'"""' *note longstringitem: 217e.)* '"""'
        | "'" ( !"'" *note stringitem: 217f.)* "'"
        | '"' ( !'"' *note stringitem: 217f.)* '"'
     stringitem:      *note stringchar: 2180. | *note stringescapeseq: 2181.
     stringchar:      <any *note source_character: 2157, except backslash and newline>
     longstringitem:  *note stringitem: 217f. | newline
     stringescapeseq: "\" <any *note source_character: 2157.>

Observe que, como em todas as definições lexicais, os espaços em branco
são significativos.  Em particular, o prefixo (se houver) deve ser
imediatamente seguido pela aspa inicial.


File: python.info,  Node: Sequências de escape,  Next: Literais de bytes,  Prev: Gramática formal,  Up: Literais de string e bytes

4.2.5.4 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
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
‘\’<newline>                                           *note Fim de linha ignorado: 2183.
                                                       
                                                       
‘\\’                                                   *note Contrabarra: 2184.
                                                       
                                                       
‘\'’                                                   *note Aspa simples: 2184.
                                                       
                                                       
‘\"’                                                   *note Aspas duplas: 2184.
                                                       
                                                       
‘\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’                                                 *note Caractere octal: 2185.
                                                       
                                                       
‘\xHH’                                                 *note Caractere hexadecimal: 2186.
                                                       
                                                       
‘\N{NAME}’                                             *note Caractere nomeado Unicode: 2187.
                                                       
                                                       
‘\uXXXX’                                               *note Caractere hexadecimal Unicode: 2188.
                                                       
                                                       
‘\UXXXXXXXX’                                           *note Caractere hexadecimal Unicode: 2188.
                                                       

* Menu:

* Fim de linha ignorado::
* Caracteres escapados::
* Caractere octal::
* Caractere hexadecimal::
* Caractere nomeado Unicode::
* Caracteres hexadecimais Unicode::
* Sequências de espace não reconhecidas::


File: python.info,  Node: Fim de linha ignorado,  Next: Caracteres escapados,  Up: Sequências de escape

4.2.5.5 Fim de linha ignorado
.............................

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: 214a, ou parênteses e *note concatenação de literal string:
218a.


File: python.info,  Node: Caracteres escapados,  Next: Caractere octal,  Prev: Fim de linha ignorado,  Up: Sequências de escape

4.2.5.6 Caracteres escapados
............................

Para incluir uma contrabarra em um literal de string não-*note bruta:
2179. Python, ela deve ser duplicada.  A sequência de escape ‘\\’ denota
um único caractere de contrabarra:

     >>> print('C:\\Program Files')
     C:\Program Files

Da mesma forma, as sequências ‘\'’ e ‘\"’ denotam os caracteres de aspas
simples e duplas, respectivamente:

     >>> print('\' e \"')
     ' e "


File: python.info,  Node: Caractere octal,  Next: Caractere hexadecimal,  Prev: Caracteres escapados,  Up: Sequências de escape

4.2.5.7 Caractere octal
.......................

A sequência ‘\OOO’ denota um 'caractere' com o valor octal (base 8)
'ooo':

     >>> '\120'
     'P'

São aceitos até três dígitos octais (0 a 7).

Em um literal de bytes, 'caractere' significa um 'byte' com o valor
fornecido.  Em um literal de string, significa um caractere Unicode com
o valor fornecido.

Alterado na versão 3.11: Escapes octais com valor maior que ‘0o377’
(255) produz uma *note DeprecationWarning: 1a3.

Alterado na versão 3.12: Escapes octais com valor maior que ‘0o377’
(255) produzem um *note SyntaxWarning: 1ae.  Em uma versão futura do
Python eles eventualmente vão levantar um *note SyntaxError: 18e.


File: python.info,  Node: Caractere hexadecimal,  Next: Caractere nomeado Unicode,  Prev: Caractere octal,  Up: Sequências de escape

4.2.5.8 Caractere hexadecimal
.............................

A sequência ‘\xHH’ denota um 'caractere' com o valor hexa (base 16)
'hh':

     >>> '\x50'
     'P'

Ao contrário do padrão C, são necessários exatamente dois dígitos
hexadecimais.

Em um literal de bytes, 'caractere' significa um 'byte' com o valor
fornecido.  Em um literal de string, significa um caractere Unicode com
o valor fornecido.


File: python.info,  Node: Caractere nomeado Unicode,  Next: Caracteres hexadecimais Unicode,  Prev: Caractere hexadecimal,  Up: Sequências de escape

4.2.5.9 Caractere nomeado Unicode
.................................

A sequência ‘\N{NOME}’ denota um caractere Unicode com o 'nome'
fornecido:

     >>> '\N{LATIN CAPITAL LETTER P}'
     'P'
     >>> '\N{SNAKE}'
     '🐍'

Esta sequência não pode aparecer em *note literais de bytes: 2178.

Alterado na versão 3.3: Foi adicionado suporte para apelidos de
nomes(1).

   ---------- Footnotes ----------

   (1) https://www.unicode.org/Public/16.0.0/ucd/NameAliases.txt


File: python.info,  Node: Caracteres hexadecimais Unicode,  Next: Sequências de espace não reconhecidas,  Prev: Caractere nomeado Unicode,  Up: Sequências de escape

4.2.5.10 Caracteres hexadecimais Unicode
........................................

As sequências ‘\uXXXX’ e ‘\UXXXXXXXX’ denotam o caractere Unicode com o
valor hexadecimal fornecido (base 16).  São necessários exatamente
quatro dígitos para ‘\u’; são necessários exatamente oito dígitos para
‘\U’.  Este último pode codificar qualquer caractere Unicode.

     >>> '\u1234'
     'ሴ'
     >>> '\U0001f40d'
     '🐍'

Estas sequências não pode aparecer em *note literais de bytes: 2178.


File: python.info,  Node: Sequências de espace não reconhecidas,  Prev: Caracteres hexadecimais Unicode,  Up: Sequências de escape

4.2.5.11 Sequências de espace não reconhecidas
..............................................

Diferentemente do Standard C, todas as sequências de escape não
reconhecidas são deixadas na string inalteradas, ou seja, 'a contrabarra
é deixada no resultado':

     >>> print('\q')
     \q
     >>> list('\q')
     ['\\', 'q']

Observe que, para literais de bytes, as sequências de escape
reconhecidas apenas em literais de string (‘\N...’, ‘\u...’, ‘\U...’) se
enquadram na categoria de escapes não reconhecidos.

Alterado na versão 3.6: Sequências de escape não reconhecidas produzem
um *note DeprecationWarning: 1a3.

Alterado na versão 3.12: Sequências de escape não reconhecidas produzem
um *note SyntaxWarning: 1ae.  Em uma versão futura do Python eles vão
levantar um *note SyntaxError: 18e.


File: python.info,  Node: Literais de bytes,  Next: Literais de string brutas,  Prev: Sequências de escape,  Up: Literais de string e bytes

4.2.5.12 Literais de bytes
..........................

'Literais de bytes' são sempre prefixados com ‘‘b’’ ou ‘‘B’’; eles
produzem uma instância do tipo *note bytes: 192. em vez do tipo *note
str: 169.  Eles podem conter apenas caracteres ASCII; bytes com valor
numérico igual ou superior a 128 devem ser expressos com sequências de
escape (normalmente *note Caractere hexadecimal: 2186. ou *note
Caractere octal: 2185.):

     >>> b'\x89PNG\r\n\x1a\n'
     b'\x89PNG\r\n\x1a\n'
     >>> list(b'\x89PNG\r\n\x1a\n')
     [137, 80, 78, 71, 13, 10, 26, 10]

Da mesma forma, um byte zero deve ser expresso usando uma sequência de
escape (normalmente ‘\0’ ou ‘\x00’).


File: python.info,  Node: Literais de string brutas,  Next: Literais de strings formatadas,  Prev: Literais de bytes,  Up: Literais de string e bytes

4.2.5.13 Literais de string brutas
..................................

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 bruta, as
*note sequências de escape: 67c. não são tratados de maneira especial.

     >>> r'\d{4}-\d{2}-\d{2}'
     '\\d{4}-\\d{2}-\\d{2}'

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.


File: python.info,  Node: Literais de strings formatadas,  Next: Literais de strings templates t-strings,  Prev: Literais de string brutas,  Up: Literais de string e bytes

4.2.5.14 Literais de strings formatadas
.......................................

Adicionado na versão 3.6.

Um 'literal de string formatada' 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: 2196. | "{{" | "}}" | *note replacement_field: 2197.)*
     replacement_field: "{" *note f_expression: 2198. ["="] ["!" *note conversion: 2199.] [":" *note format_spec: 219a.] "}"
     f_expression:      (*note conditional_expression: 219b. | "*" *note or_expr: 219c.)
                          ("," *note conditional_expression: 219b. | "," "*" *note or_expr: 219c.)* [","]
                        | *note yield_expression: 219d.
     conversion:        "s" | "r" | "a"
     format_spec:       (*note literal_char: 2196. | *note replacement_field: 2197.)*
     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: 1499.
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:
18d. e compreensões contendo uma cláusula *note async for: c94. 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(): 1c1. da expressão
seja fornecida, a menos que haja um formato especificado.  Quando um
formato é especificado, o padrão é o *note str(): 169. 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(): 169. no resultado, ‘'!r'’ chama *note repr(): 1c1. e ‘'!a'’ chama
*note ascii(): 15d7.

O resultado é então formatado usando o protocolo *note format(): 199.  O
especificador de formato é passado para o método *note __format__():
826. 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: 4f3,
mas podem não incluir campos de substituição aninhados mais
profundamente.  A *note minilinguagem do especificador de formato: 4f3.
é a mesma usada pelo método *note str.format(): 828.

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(): 828, que usa um mecanismo de
string de formato relacionado.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0498/


File: python.info,  Node: Literais de strings templates t-strings,  Prev: Literais de strings formatadas,  Up: Literais de string e bytes

4.2.5.15 Literais de strings templates (t-strings)
..................................................

Adicionado na versão 3.14.

Uma 'literal de string template' ou 't-string' é uma literal de string
que é prefixada com ‘‘t’’ ou ‘‘T’’.  Essas strings seguem a mesma
sintaxe e regras de avaliação que *note literais de string formatada:
19a, com as seguintes diferenças:

   * Em vez de serem avaliados como um objeto ‘str’, os literais de
     string template são avaliados como um objeto *note
     string.templatelib.Template: 16a.

   * O protocolo *note format(): 199. não é usado.  Em vez disso, o
     especificador de formato e conversões (se houver alguma) são
     passados para um novo objeto *note Interpolation: 16b. que é criado
     para cada expressão avaliada.  Cabe ao código que processa o objeto
     *note Template: 16a. resultante decidir como tratar especificadores
     de formato e conversões.

   * Format specifiers containing nested replacement fields are
     evaluated eagerly, prior to being passed to the *note
     Interpolation: 16b. object.  For instance, an interpolation of the
     form ‘{amount:.{precision}f}’ will evaluate the inner expression
     ‘{precision}’ to determine the value of the ‘format_spec’
     attribute.  If ‘precision’ were to be ‘2’, the resulting format
     specifier would be ‘'.2f'’.

   * When the equals sign ‘'='’ is provided in an interpolation
     expression, the text of the expression is appended to the literal
     string that precedes the relevant interpolation.  This includes the
     equals sign and any surrounding whitespace.  The ‘Interpolation’
     instance for the expression will be created as normal, except that
     *note conversion: 21a0. will be set to ‘‘r’’ (*note repr(): 1c1.)
     by default.  If an explicit conversion or format specifier are
     provided, this will override the default behaviour.


File: python.info,  Node: Literais numéricos,  Next: Operators and delimiters,  Prev: Literais de string e bytes,  Up: Análise léxica

4.2.6 Literais numéricos
------------------------

Tokens *note NUMBER: 2164. representam literais numéricos, dos quais
existem três tipos: inteiros, números de ponto flutuante e números
imaginários.

     NUMBER: *note integer: 21a3. | *note floatnumber: 21a4. | *note imagnumber: 21a5.

O valor numérico de um literal numérico é o mesmo que seria se fosse
passado como uma string para os construtores de classe *note int: 19b,
*note float: 196. ou *note complex: 197, respectivamente.  Observe que
nem todas as entradas válidas para esses construtores também são
literais válidos.

Literais numéricos não incluem um sinal; uma frase como ‘-1’ é, na
verdade, uma expressão composta pelo operador unário ‘‘-’’ e o literal
‘1’.

* Menu:

* Inteiros literais::
* Literais de ponto flutuante::
* Literais imaginários::


File: python.info,  Node: Inteiros literais,  Next: Literais de ponto flutuante,  Up: Literais numéricos

4.2.6.1 Inteiros literais
.........................

Literais inteiros denotam números inteiros.  Por exemplo:

     7
     3
     2147483647

Não há limite para o comprimento de literais inteiros, exceto o que pode
ser armazenado na memória disponível:

     7922816251426433759354395033679228162514264337593543950336

Sublinhados podem ser usados para agrupar dígitos para melhor
legibilidade e são ignorados para determinar o valor numérico do
literal.  Por exemplo, os seguintes literais são equivalentes:

     100_000_000_000
     100000000000
     1_00_00_00_00_000

Sublinhados só podem ocorrer entre dígitos.  Por exemplo, ‘_123’, ‘321_’
e ‘123__321’ 'não' são literais válidos.

Os números inteiros podem ser especificados em binário (base 2), octal
(base 8) ou hexadecimal (base 16) usando os prefixos ‘0b’, ‘0o’ e ‘0x’,
respectivamente.  Os dígitos hexadecimais de 10 a 15 são representados
pelas letras ‘A’-‘F’, sem distinção entre maiúsculas e minúsculas.  Por
exemplo:

     0b100110111
     0b_1110_0101
     0o177
     0o377
     0xdeadbeef
     0xDead_Beef

Um sublinhado pode seguir o especificador base.  Por exemplo, ‘0x_1f’ é
um literal válido, mas ‘0_x1f’ e ‘0x__1f’ não são.

Zeros à esquerda em um número decimal diferente de zero não são
permitidos.  Por exemplo, ‘0123’ não é um literal válido.  Isso serve
para desambiguação com literais octais no estilo C, que o Python usava
antes da versão 3.0.

Formalmente, literais inteiros são descritos pelas seguintes definições
lexicais:

     integer:      *note decinteger: 21a8. | *note bininteger: 21a9. | *note octinteger: 21aa. | *note hexinteger: 21ab. | *note zerointeger: 21ac.
     decinteger:   *note nonzerodigit: 21ad. (["_"] *note digit: 21ae.)*
     bininteger:   "0" ("b" | "B") (["_"] *note bindigit: 21af.)+
     octinteger:   "0" ("o" | "O") (["_"] *note octdigit: 21b0.)+
     hexinteger:   "0" ("x" | "X") (["_"] *note hexdigit: 21b1.)+
     zerointeger:  "0"+ (["_"] "0")*
     nonzerodigit: "1"..."9"
     digit:        "0"..."9"
     bindigit:     "0" | "1"
     octdigit:     "0"..."7"
     hexdigit:     *note digit: 21ae. | "a"..."f" | "A"..."F"

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 numéricos

4.2.6.2 Literais de ponto flutuante
...................................

Literais de ponto flutuante (float), como ‘3.14’ ou ‘1.5’, denotam *note
aproximações de números reais: 21b4.

Eles consistem em partes 'inteiras' e 'fracionárias', cada uma composta
por dígitos decimais.  As partes são separadas por um ponto decimal,
‘.’:

     2.71828
     4.0

Ao contrário dos literais inteiros, zeros à esquerda são permitidos nas
partes numéricas.  Por exemplo, ‘077.010’ é válido e denota o mesmo
número que ‘77.10’.

Assim como em literais inteiros, sublinhados simples podem ocorrer entre
dígitos para ajudar na legibilidade:

     96_485.332_123
     3.14_15_93

Qualquer uma dessas partes, mas não ambas, pode estar vazia.  Por
exemplo:

     10.  # (equivalente a 10.0)
     .001  # (equivalente a 0.001)

Opcionalmente, o inteiro e a fração podem ser seguidos por um
'expoente': a letra ‘e’ ou ‘E’, seguida por um sinal opcional, ‘+’ ou
‘-’, e um número no mesmo formato das partes inteira e fracionária.  O
‘e’ ou ‘E’ representa “dez vezes elevado à potência de”:

     1.0e3  # (representa 1.0×10³ ou 1000.0)
     1.166e-5  # (representa 1.166×10⁻⁵ ou 0.00001166)
     6.02214076e+23  # (representa 6.02214076×10²³ ou 602214076000000000000000.)

Em floats com apenas partes inteiras e expoentes, o ponto decimal pode
ser omitido:

     1e3  # (equivalente a 1.e3 e 1.0e3)
     0e0  # (equivalente a 0.)

Formalmente, literais de ponto flutuante são descritos pelas seguintes
definições léxicas:

     floatnumber:
        | *note digitpart: 21b5. "." [*note digitpart: 21b5.] [*note exponent: 21b6.]
        | "." *note digitpart: 21b5. [*note exponent: 21b6.]
        | *note digitpart: 21b5. *note exponent: 21b6.
     digitpart: *note digit: 21ae. (["_"] *note digit: 21ae.)*
     exponent:  ("e" | "E") ["+" | "-"] *note digitpart: 21b5.

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 numéricos

4.2.6.3 Literais imaginários
............................

Python possui objetos *note número complexo: 1e91, mas não possui
literais complexos.  Em vez disso, 'literais imaginários' denotam
números complexos com parte real zero.

Por exemplo, na matemática, o número complexo 3+4.2'i' é escrito como o
número real 3 somado ao número imaginário 4.2'i'.  Python usa uma
sintaxe semelhante, exceto que a unidade imaginária é escrita como ‘j’
em vez de 'i':

     3+4.2j

Esta é uma expressão composta pelo *note literal inteiro: 21a7. ‘3’, o
*note operador: 2137. ‘‘+’’ e o *note literal imaginário: 21b7. ‘4.2j’.
Como esses são três tokens separados, espaços em branco são permitidos
entre eles:

     3 + 4.2j

Nenhum espaço em branco é permitido 'dentro' de cada token.  Em
particular, o sufixo ‘j’ não pode ser separado do número que o precede.

O número antes do ‘j’ tem a mesma sintaxe de um literal de ponto
flutuante.  Portanto, os seguintes são literais imaginários válidos:

     4.2j
     3.14j
     10.j
     .001j
     1e100j
     3.14e-10j
     3.14_15_93j

Ao contrário de um literal de ponto flutuante, o ponto decimal pode ser
omitido se o número imaginário tiver apenas uma parte inteira.  O número
ainda é avaliado como um número de ponto flutuante, não um inteiro.

     10j
     0j
     1000000000000000000000000j   # equivalente a 1e+24j

O sufixo ‘j’ não diferencia maiúsculas de minúsculas.  Isso significa
que você pode usar ‘J’ em vez disso:

     3.14J   # equivalente a 3.14j

Formalmente, literais imaginários são descritos pela seguinte definição
léxica:

     imagnumber: (*note floatnumber: 21a4. | *note digitpart: 21b5.) ("j" | "J")


File: python.info,  Node: Operators and delimiters,  Prev: Literais numéricos,  Up: Análise léxica

4.2.7 Operators and delimiters
------------------------------

The following grammar defines 'operator' and 'delimiter' tokens, that
is, the generic *note OP: 2135. token type.  A *note list of these
tokens and their names: 21ba. is also available in the ‘token’ module
documentation.

     OP:
        | assignment_operator
        | bitwise_operator
        | comparison_operator
        | enclosing_delimiter
        | other_delimiter
        | arithmetic_operator
        | "..."
        | other_op

     assignment_operator:   "+=" | "-=" | "*=" | "**=" | "/="  | "//=" | "%=" |
                            "&=" | "|=" | "^=" | "<<=" | ">>=" | "@="  | ":="
     bitwise_operator:      "&"  | "|"  | "^"  | "~"   | "<<"  | ">>"
     comparison_operator:   "<=" | ">=" | "<"  | ">"   | "=="  | "!="
     enclosing_delimiter:   "("  | ")"  | "["  | "]"   | "{"   | "}"
     other_delimiter:       ","  | ":"  | "!"  | ";"   | "="   | "->"
     arithmetic_operator:   "+"  | "-"  | "**" | "*"   | "//"  | "/"   | "%"
     other_op:              "."  | "@"

     Nota: Generally, 'operators' are used to combine *note expressions:
     21c3, while 'delimiters' serve other purposes.  However, there is
     no clear, formal distinction between the two categories.

     Some tokens can serve as either operators or delimiters, depending
     on usage.  For example, ‘*’ is both the multiplication operator and
     a delimiter used for sequence unpacking, and ‘@’ is both the matrix
     multiplication and a delimiter that introduces decorators.

     For some tokens, the distinction is unclear.  For example, some
     people consider ‘.’, ‘(’, and ‘)’ to be delimiters, while others
     see the *note getattr(): dbe. operator and the function call
     operator(s).

     Some of Python’s operators, like ‘and’, ‘or’, and ‘not in’, use
     *note keyword: 2134. tokens rather than “symbols” (operator
     tokens).

A sequence of three consecutive periods (‘...’) has a special meaning as
an *note Ellipsis: 21c4. literal.


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.  (De certo modo, e em conformidade com o modelo de Von Neumann
de um “computador com programa armazenado”, 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: 349. compara as
identidades de dois objetos; a função *note id(): 1614. 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(): f38. 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: 64. 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: 8ed.…*note except: 1ab. 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: 8ed.…*note finally: 1b0. e a instrução *note with:
186. 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: 19b. é 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:
1a2.  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: 21ce.
para mais detalhes.

Alterado na versão 3.9: A avaliação de *note NotImplemented: 1a2. em um
contexto booleano foi descontinuada.

Alterado na versão 3.14: A avaliação de *note NotImplemented: 1a2. em um
contexto booleano agora levanta um *note TypeError: 198.  Anteriormente,
ele era avaliado como *note True: dfb. e emitia um *note
DeprecationWarning: 1a3. desde o Python 3.9.


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__(): 824. e *note __str__(): 825, 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: 19b.)

     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: 3c0.)

     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(): 835. 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(): 21d6. converte um ponto de código de sua
     forma de string para um inteiro no intervalo ‘0 - 10FFFF’; *note
     chr(): 192b. converte um inteiro no intervalo ‘0 - 10FFFF’ para o
     objeto de string correspondente de comprimento ‘1’.  *note
     str.encode(): ac8. pode ser usado para converter uma *note str:
     169. para *note bytes: 192. usando a codificação de texto
     fornecida, e *note bytes.decode(): ac9. 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(): 192.
     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(): ac9.


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: 1a4f. ('delete', exclusão).

     Nota: 
     Os módulos *note collections: 1e. e *note array: 8. 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(): 342.  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:
     192.


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():
835. 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

     Eles representam um conjunto mutável.  São criados pelo construtor
     embutido *note set(): 184. e podem ser modificados posteriormente
     por vários métodos, como *note add: 21d9.

Conjuntos congelados

     Estes representam um conjunto imutável.  Eles são criados pelo
     construtor embutido *note frozenset(): 7e7.  Como um frozenset é
     imutável e *note hasheável: 819, 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: 1a4f.  A função
embutida *note len(): 835. 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: f73.).

Os módulos de extensão *note dbm.ndbm: 38. e *note dbm.gnu: 37. fornecem
exemplos adicionais de tipos de mapeamento, assim como o módulo *note
collections: 1e.

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: f71.) 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: 1ecf.).  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.__globals__                     Uma referência ao *note dicionário: 183. que contém
                                                       as *note variáveis globais: 21df. 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: 608. de células que
                                                       contêm ligação para os nomes especificados no
                                                       atributo *note co_freevars: 21e0. do
                                                       *note objeto código: 596. 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__: 125c.
                                                       
                                                       
 -- Atributo: function.__qualname__                    O *note nome qualificado: 1be4. da função.  Veja
                                                       também: *note atributos __qualname__: 125b.
                                                       
                                                       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: 608. contendo valores de
                                                       *note parâmetro: 21e4. 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: 4e0. 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__: 772.
                                                       
                                                       
 -- Atributo: function.__annotations__                 Um *note dicionário: 183. contendo anotações de
                                                       *note parâmetros: 21e4.  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 object.__annotations__: 455.
                                                       
                                                       Alterado na versão 3.14: Anotações são agora
                                                       *note avaliados preguiçosamente: 67a.  Veja a PEP
                                                       649(1).
                                                       
                                                       
 -- Atributo: function.__annotate__                    A *note função de anotação: 15d. para esta função,
                                                       ou ‘None’ se a função não tiver anotações.  Veja
                                                       *note object.__annotate__: 18cc.
                                                       
                                                       Adicionado na versão 3.14.
                                                       
                                                       
 -- Atributo: function.__kwdefaults__                  Um *note dicionário: 183. contendo padrões apenas
                                                       para *note parâmetros: 21e4. somente-nomeados.
                                                       
                                                       
 -- Atributo: function.__type_params__                 Uma *note tuple: 608. contendo os
                                                       *note parâmetros de tipo: 5a6. de uma
                                                       *note função genérica: 677.
                                                       
                                                       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: 21e7. 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: 4e0. (acessível através do atributo *note
__code__: 596.).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/


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: 21e9.
                                                       
                                                       
 -- Atributo: method.__func__                          Refere-se ao *note objeto função: 595. original
                                                       
                                                       
 -- Atributo: method.__doc__                           A documentação do método (igual a
                                                       *note method.__func__.__doc__: 13d5.).  Um
                                                       *note string: 169. 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__: 14d0.)
                                                       
                                                       
 -- 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: 595. 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: 595. definido pelo usuário
ou um objeto *note classmethod: 488. .  Quando um objeto método de
instância é criado recuperando um *note objeto função: 595. definido
pelo usuário de uma classe por meio de uma de suas instâncias, seu
atributo *note __self__: 15ba. é a instância, e o objeto método é
considerado 'vinculado'.  O atributo *note __func__: 14f8. do novo
método é o objeto da função original.

Quando um objeto método de instância é criado obtendo um objeto *note
classmethod: 488. de uma classe ou instância, seu atributo *note
__self__: 15ba. é a própria classe, e seu atributo *note __func__: 14f8.
é 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__: 14f8.) é chamada, inserindo a instância de classe
(*note __self__: 15ba.) 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: 488, a “instância de classe” armazenada em *note __self__:
15ba. 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: bb8. (veja a seção
*note A instrução yield: bb8.) é chamada de 'função geradora'.  Tal
função, quando chamada, sempre retorna um objeto *note iterator: 4c2.
que pode ser usado para executar o corpo da função: chamar o método
*note iterator.__next__(): 14c9. 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: 1af. ou sai do fim, uma
exceção *note StopIteration: de9. é 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: 7e2. é
chamado de 'função de corrotina'.  Tal função, quando chamada, retorna
um objeto de *note corrotina: 6ae.  Ele pode conter expressões *note
await: 18d, bem como instruções *note async with: 185. e *note async
for: c94.  Veja também a seção *note Objetos corrotina: 21ef.


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: 7e2. e
que usa a instrução *note yield: bb8. é chamada de 'função geradora
assíncrona'.  Tal função, quando chamada, retorna um objeto *note
iterador assíncrono: 4c1. que pode ser usado em uma instrução *note
async for: c94. para executar o corpo da função.

Chamar o método *note aiterator.__anext__: 17e8. do iterador assíncrono
retornará um *note aguardável: 4c3. que, quando aguardado, será
executado até fornecer um valor usando a expressão *note yield: bb8.
Quando a função executa uma instrução vazia *note return: 1af. ou chega
ao final, uma exceção *note StopAsyncIteration: 1cc5. é 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(): 835. e *note math.sin():
16ac. (*note math: 92. é 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__: 13d5.

   * ‘__name__’ é o nome da função.  Veja *note function.__name__: 14d0.

   * ‘__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__:
     21e3.


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: 15ba.)


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__(): 795.  Os argumentos da
chamada são passados para ‘__new__()’ e, no caso típico, para *note
__init__(): 8b4. 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__(): 76f. 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: 21f9. quando invocado pela
instrução *note import: 7ed, ou chamando funções como *note
importlib.import_module(): 731. e a embutida *note __import__(): ac7.
Um objeto módulo tem um espaço de nomes implementado por um objeto *note
dicionário: 183. (este é o dicionário referenciado pelo atributo *note
__globals__: 14cf. 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: 21f9.  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: 21fc. do módulo, antes que o *note
carregador: 1965. 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():
1008, que definirá os vários atributos controlados pela importação para
valores apropriados.  Também é possível usar o construtor *note
types.ModuleType: 1009. 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__: 157d, é 'fortemente'
     recomendado que você confie no *note __spec__: 21fd. 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: 21fe.

 -- Atributo: module.__spec__

     Um registro do estado relacionado ao sistema de importação do
     módulo.

     Define com *note spec de módulo: 2117. que foi usado ao importar o
     módulo.  Veja *note Especificações de módulo: 21ff. para mais
     detalhes.

     Adicionado na versão 3.4.

 -- Atributo: module.__package__

     O *note pacote: 232. 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__: 157d.
     se o módulo em si for um pacote).  Veja PEP 366(1) para mais
     detalhes.

     Este atributo é usado em vez de *note __name__: 157d. 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: 1009.; use *note
     importlib.util.module_from_spec(): 1008. em vez disso para garantir
     que o atributo seja definido como *note str: 169.

     É 'fortemente' recomendado que você use *note
     module.__spec__.parent: 322. em vez de ‘module.__package__’.  *note
     __package__: 321. 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: 1009.  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: 322.  *note __package__: 321.
     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: 713. é levantada se
     uma resolução de importação retorna para ‘__package__’ em vez de
     *note __spec__.parent: 322.

     Alterado na versão 3.12: Levanta *note DeprecationWarning: 1a3. em
     vez de *note ImportWarning: 713. ao retornar para ‘__package__’
     durante a resolução de importação.

     Deprecated since version 3.13, will be removed in version 3.15:
     ‘__package__’ deixará de ser definido ou levado em consideração
     pelo sistema de importação ou biblioteca padrão.

 -- Atributo: module.__loader__

     O objeto *note carregador: 1965. 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: 1009.;
     use *note importlib.util.module_from_spec(): 1008. para garantir
     que o atributo seja definido como um objeto *note carregador: 1965.

     É 'fortemetne' recomendado que você use *note
     module.__spec__.loader: 33a. 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: 1009.  Anteriormente, o atributo era opcional.

     Deprecated since version 3.12, will be removed in version 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: 70b. (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:
     2200. para mais detalhes.

     É 'fortemente' recomendado que você use *note
     module.__spec__.submodule_search_locations: 2201. 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: 169.
     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: 21f9. 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: 1965. é o que faz uso do spec
     de módulo fornecido pelo *note localizador: 2203. (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: 320. em vez de ‘module.__cached__’.

     Deprecated since version 3.13, will be removed in version 3.15: A
     definição ‘__cached__’ em um módulo 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__: b17.

 -- Atributo: module.__annotations__

     Um dicionário contendo *note anotações de variável: f45. coletadas
     durante a execução do corpo do módulo.  Para as melhores práticas
     sobre como trabalhar com ‘__annotations__’.  Veja *note
     annotationlib: 6.

     Alterado na versão 3.14: Anotações são agora *note avaliados
     preguiçosamente: 67a.  Veja a PEP 649(1).

 -- Atributo: module.__annotate__

     A *note função de anotação: 15d. para este módulo, ou ‘None’ se o
     módulo não tiver anotações.  Veja também: atributos *note
     __annotate__: 18cc.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/


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: 14d3.).  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: 1698.

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__: 15ba. é ‘C’.
Quando produziria um objeto *note staticmethod: 450, ele é transformado
no objeto encapsulado pelo objeto método estático.  Veja a seção *note
Implementando descritores: e3d. para outra maneira em que os atributos
recuperados de uma classe podem diferir daqueles realmente contidos em
seu *note __dict__: 772.

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__: 125c.
                                                       
                                                       
 -- Atributo: type.__qualname__                        O *note nome qualificado: 1be4. da classe.  Veja
                                                       também: *note atributos __qualname__: 125b.
                                                       
                                                       
 -- Atributo: type.__module__                          O nome do módulo no qual a classe foi definida.
                                                       
                                                       
 -- Atributo: type.__dict__                            Um *note proxy de mapeamento: 68d. fornecendo uma
                                                       visão somente leitura do espaço de nomes da classe.
                                                       Veja também: *note atributos __dict__: 772.
                                                       
                                                       
 -- Atributo: type.__bases__                           Uma *note tuple: 608. 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.__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áveis: f45. coletadas durante
                                                       a execução do corpo da classe.  Veja também:
                                                       *note atributos __annotations__: 455.
                                                       
                                                       Para melhores práticas sobre como trabalhar com
                                                       *note __annotations__: 455, consulte
                                                       *note annotationlib: 6.  Use
                                                       *note annotationlib.get_annotations(): 456. em vez
                                                       de acessar este atributo diretamente.
                                                       
                                                            Aviso: Acessar o atributo ‘__annotations__’
                                                            diretamente em um objeto classe pode retornar
                                                            anotações para a classe errada, especialmente
                                                            em certos casos em que a classe, sua classe
                                                            base ou uma metaclasse é definida em ‘from
                                                            __future__ import annotations’.  Consulte a
                                                            749(1) para obter detalhes.
                                                       
                                                            Este atributo não existe em certas classes
                                                            embutidas.  Em classes definidas pelo usuário
                                                            sem ‘__annotations__’, ele é um dicionário
                                                            vazio.
                                                       
                                                       Alterado na versão 3.14: Anotações são agora
                                                       *note avaliados preguiçosamente: 67a.  Veja a PEP
                                                       649(2).
                                                       
                                                       
 -- Método: type.__annotate__ ()                       A *note função de anotação: 15d. para esta classe,
                                                       ou ‘None’ se a classe não tiver anotações.  Veja
                                                       também: *note atributos __annotate__: 18cc.
                                                       
                                                       Adicionado na versão 3.14.
                                                       
                                                       
 -- Atributo: type.__type_params__                     Uma *note tuple: 608. contendo os
                                                       *note parâmetros de tipo: 5a6. de uma
                                                       *note classe genérica: 676.
                                                       
                                                       Adicionado na versão 3.12.
                                                       
                                                       
 -- Atributo: type.__static_attributes__               Uma *note tuple: 608. 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 primeira linha da definição de classe,
                                                       incluindo decoradores.  Definir o atributo
                                                       *note __module__: 60b. remove o item
                                                       ‘__firstlineno__’ do dicionário do tipo.
                                                       
                                                       Adicionado na versão 3.13.
                                                       
                                                       
 -- Atributo: type.__mro__                             A *note tuple: 608. de classes que são consideradas
                                                       ao procurar por classes bases durante resolução de
                                                       métodos.
                                                       

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0749/#pep749-metaclasses

   (2) https://peps.python.org/pep-0649/


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__: 220e.

 -- 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__: 15ba. é 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: e3d.
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__: 772. da classe.  Se nenhum atributo de classe for
encontrado, e a classe do objeto tiver um método *note __getattr__():
6ef, 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__(): 2212. ou *note __delattr__(): 2213, 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: e5c.

* 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__: 2215. 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: 13bf. representa um arquivo aberto.  Vários
atalhos estão disponíveis para criar objetos arquivos: a função embutida
*note open(): 314, e também *note os.popen(): 318, *note os.fdopen():
2217. e o método *note makefile(): 139b. 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: 899.


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: 4a4.  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: 21e4.
                                                       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: 21e4.
                                                       somente-posicionais (incluindo argumentos com
                                                       valores padrão) que a função possui
                                                       
                                                       
 -- Atributo: codeobject.co_kwonlyargcount             O número de *note parâmetros: 21e4. 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: 21df. usadas
                                                       pela função (incluindo parâmetros)
                                                       
                                                       
 -- Atributo: codeobject.co_varnames                   Uma *note tuple: 608. 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: 608. contendo os nomes de
                                                       *note variáveis locais: 21df. que são referenciadas
                                                       a partir de pelo menos um
                                                       *note escopo aninhado: 2223. de dentro da função
                                                       
                                                       
 -- Atributo: codeobject.co_freevars                   Uma *note tuple: 608. contendo os nomes de
                                                       *note variáveis livres (de clausura): 17f7. que um
                                                       *note escopo aninhado: 2223. referencia em um escopo
                                                       externo.  Veja também
                                                       *note function.__closure__: 14cc.
                                                       
                                                       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: 4a4. na função
                                                       
                                                       
 -- Atributo: codeobject.co_consts                     Um *note tuple: 608. contendo os literais usados
                                                       pelo *note bytecode: 4a4. na função
                                                       
                                                       
 -- Atributo: codeobject.co_names                      Um *note tuple: 608. contendo os nomes usados pelo
                                                       *note bytecode: 4a4. 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: 4a4. 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: 19b. codificando uma série
                                                       de sinalizadores para o interpretador.
                                                       

Os seguintes bits sinalizadores são definidos para *note co_flags:
1833.: 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: 2228. 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: 1833. para indicar se um
objeto código foi compilado com um recurso específico habilitado.  Veja
*note compiler_flag: 2229.

Outros bits em *note co_flags: 1833. são reservados para uso interno.

Se um objeto código representa uma função e tem uma docstring, o bit
*note CO_HAS_DOCSTRING: 222a. é definido em *note co_flags: 1833. e o
primeiro item em *note co_consts: 17ff. é a docstring da função.


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: 4a4. no objeto código.

     O iterador retorna *note tuple: 608.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:
          16f.

        - Carregando um arquivo pyc compilado com ‘no_debug_ranges’
          *note -X: 16f.

        - 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: 87a.

     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: 16f. ou a variável de ambiente
          *note PYTHONNODEBUGRANGES: 7c8.

 -- Método: codeobject.co_lines ()

     Retorna um iterador que produz informações sobre intervalos
     sucessivos de *note bytecode: 4a4.s.  Cada item gerado é uma *note
     tuple: 608. de ‘(start, end, lineno)’:

        * ‘start’ (um *note int: 19b.) representa o deslocamento
          (inclusivo) do início do intervalo *note bytecode: 4a4.

        * ‘end’ (um *note int: 19b.) representa o deslocamento
          (exclusivo) do fim do intervalo *note bytecode: 4a4.

        * ‘lineno’ é um *note int: 19b. representando o número da linha
          do intervalo do *note bytecode: 4a4, 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:
          608.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: 608. gerada terá ‘end’ igual ao tamanho
          do *note bytecode: 4a4.

     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: 4a4.

     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(): 1c0.

     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: cdf. 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: 4e0. sendo executado neste
                                                       quadro.  Acessar este atributo levanta um
                                                       *note evento de auditoria: 1b5d.
                                                       ‘object.__getattr__’ com os argumentos ‘obj’ e
                                                       ‘"f_code"’.
                                                       
                                                       
 -- Atributo: frame.f_locals                           O mapeamento usado pelo quadro para procurar
                                                       *note variáveis locais: 21df.  Se o quadro se
                                                       referir a um *note escopo otimizado: 49b, 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: 21df.
                                                       
                                                       
 -- Atributo: frame.f_builtins                         O dicionário usado pelo quadro para procurar
                                                       *note nomes embutidos (intrínsecos): 21df.
                                                       
                                                       
 -- Atributo: frame.f_lasti                            A “instrução precisa” do objeto quadro (este é um
                                                       índice na string *note bytecode: 4a4. do
                                                       *note objeto código: 4e0.)
                                                       
                                                       
 -- Atributo: frame.f_generator                        O objeto *note gerador: 1257. ou
                                                       *note corrotina: 6ae. que possui este quadro, ou
                                                       ‘None’ se o quadro for uma função normal.
                                                       
                                                       Adicionado na versão 3.14.
                                                       


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: dca.).
                                                       
                                                       
 -- Atributo: frame.f_trace_lines                      Defina este atributo como *note False: d1f. 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: dfb. 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:
     21df. mantidas pelo quadro.  Além disso, se o quadro pertencer a um
     *note gerador: 1257, o gerador é finalizado.  Isso ajuda a quebrar
     os ciclos de referência que envolvem objetos quadro (por exemplo,
     ao capturar uma *note exceção: 1b27. e armazenar seu *note
     traceback: cdf. para uso posterior).

     *note RuntimeError: 243. é 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: 243. (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: 1f27.  Um objeto traceback é criado
implicitamente quando ocorre uma exceção e também pode ser criado
explicitamente chamando *note types.TracebackType: cdd.

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:
8ed.)  É acessível como o terceiro item da tupla retornada por *note
sys.exc_info(): 88f, e como o atributo *note __traceback__: 14c2. 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: 6dd.

Para tracebacks criados explicitamente, cabe ao criador do traceback
determinar como os atributos *note tb_next: cde. devem ser vinculados
para formar um stack trace completo.

Atributos especiais de somente leitura:

 -- Atributo: traceback.tb_frame                       Aponta para o *note quadro: 8e4. de execução do
                                                       nível atual.
                                                       
                                                       Acessar este atributo levanta um
                                                       *note evento de auditoria: 1b5d.
                                                       ‘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: 8e4. se a exceção ocorreu em
uma instrução *note try: 8ed. sem cláusula except correspondente ou com
uma cláusula *note finally: 1b0.

 -- 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__(): 581.  Eles também são criados pela função embutida *note
slice(): 689.

Atributos especiais de somente leitura: *note start: 223b. é o limite
inferior; *note stop: 223c. é o limite superior; *note step: 223d. é 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(): 450.


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”: 1f5c.  Objetos método de classe são
criados pelo construtor embutido *note classmethod(): 488.


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__():
581, 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: 5e4. ou
*note TypeError: 198.).

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__(): e5d. para ‘None’, a classe não é iterável, então
chamar *note iter(): 9cd. em suas instâncias irá levantar um *note
TypeError: 198. (sem recorrer a *note __getitem__(): 581.).  (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 *note NodeList: 2241. no Modelo de Objeto de Documento 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::
* Anotações::
* Pesquisa de método especial::

   ---------- Footnotes ----------

   (1) Os métodos *note __hash__(): ce6, *note __iter__(): e5d, *note
__reversed__(): e7a. e *note __contains__(): 15ab, *note
__class_getitem__(): 938. e *note __fspath__(): e40. têm um tratamento
especial para isso.  Outros ainda irão levantar um *note TypeError: 198,
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__(): 795. é 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__(): 795. 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__(): 795. 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__(): 795. é chamado durante a construção do objeto e
     retorna uma instância de 'cls', então o método *note __init__():
     8b4. 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__(): 795. não retornar uma instância de 'cls', então
     o método *note __init__(): 8b4. da nova instância não será
     invocado.

     *note __new__(): 795. 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__():
     795.), 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__(): 8b4, o método *note
     __init__(): 8b4. 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__(): 795. e *note __init__(): 8b4. trabalham
     juntos na construção de objetos (*note __new__(): 795. para criá-lo
     e *note __init__(): 8b4. para personalizá-lo), nenhum valor
     diferente de ‘None’ pode ser retornado por *note __init__(): 8b4.;
     fazer isso fará com que uma *note TypeError: 198. 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__(): 11f3, o método *note
     __del__(): 11f3. 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__(): 11f3. 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__(): 11f3. é chamado uma
     segunda vez quando um objeto ressuscitado está prestes a ser
     destruído; a implementação atual do *note CPython: 8fa. chama-o
     apenas uma vez.

     Não há garantia de que os métodos *note __del__(): 11f3. sejam
     chamados para objetos que ainda existem quando o interpretador sai.
     *note weakref.finalize: c63. 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:
     1bbc.  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: 64.

          Aviso: Devido às circunstâncias precárias sob as quais os
          métodos *note __del__(): 11f3. 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__(): 11f3. pode ser chamado quando um código
               arbitrário está sendo executado, incluindo de qualquer
               thread arbitrária.  Se *note __del__(): 11f3. 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__(): 11f3.

             * *note __del__(): 11f3. 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__(): 11f3. for chamado.

 -- Método: object.__repr__ (self)

     Chamado pela função embutida *note repr(): 1c1. 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__(): 824,
     mas não *note __str__(): 825, então *note __repr__(): 824. 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:
     c72.

 -- Método: object.__str__ (self)

     Chamado por *note str(object): 169, a implementação padrão de *note
     __format__(): 826, e as funções embutidas *note print(): 116b, 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: 1e96.

     Este método difere de *note object.__repr__(): 824. por não haver
     expectativa de que *note __str__(): 825. 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:
     c72. chama *note object.__repr__(): 824.

 -- Método: object.__bytes__ (self)

     Chamado por *note bytes: 1d4f. para calcular uma representação de
     string de bytes de um objeto.  Isso deve retornar um objeto *note
     bytes: 192.  A classe *note object: c72. em si não fornece este
     método.

 -- Método: object.__format__ (self, format_spec)

     Chamado pela função embutida *note format(): 199. e, por extensão,
     avaliação de *note literais de string formatadas: 19a. e o método
     *note str.format(): 828, 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__(): 826, 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: 4f3. 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: c72. deve receber
     uma string 'format_spec' vazia.  Ela delega para *note __str__():
     825.

     Alterado na versão 3.4: O método __format__ do próprio ‘object’
     levanta uma *note TypeError: 198. 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: 1a2. 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():
     3c0. no valor para determinar se o resultado for verdadeiro ou
     falso.

     Por padrão, ‘object’ implementa *note __eq__(): ce5. usando ‘is’,
     retornando *note NotImplemented: 1a2. no caso de uma comparação
     falsa: ‘True if x is y else NotImplemented’.  Para *note __ne__():
     1705, por padrão ele delega para *note __eq__(): ce5. 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(): 1138.

     Por padrão, a classe *note object: c72. fornece implementações
     consistentes com *note Comparações de valor: 1b1f.: igualdade
     compara de acordo com a identidade do objeto, e comparações de
     ordem levantam *note TypeError: 198.  Cada método padrão pode gerar
     esses resultados diretamente, mas também pode retornar *note
     NotImplemented: 1a2.

     Veja o parágrafo sobre *note __hash__(): ce6. para algumas notas
     importantes sobre a criação de objetos *note hasheáveis: 819. 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__(): 149c. e
     *note __gt__(): 1507. são o reflexo um do outro, *note __le__():
     1506. e *note __ge__(): 1508. são o reflexo um do outro, e *note
     __eq__(): ce5. e *note __ne__(): 1705. 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: 1a2, os operadores ‘==’ e ‘!=’ retornarão
     para ‘is’ e ‘is not’, respectivamente.

 -- Método: object.__hash__ (self)

     Chamado pela função embutida *note hash(): 7f6. e para operações em
     membros de coleções com hash incluindo *note set: 184, *note
     frozenset: 7e7. e *note dict: 183.  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(): 7f6. trunca o valor retornado do método
          *note __hash__(): ce6. personalizado de um objeto para o
          tamanho de um *note Py_ssize_t: c49.  Isso é normalmente 8
          bytes em compilações de 64 bits e 4 bytes em compilações de 32
          bits.  Se o *note __hash__(): ce6. 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__(): ce5, ela também
     não deve definir uma operação *note __hash__(): ce6.; se define
     *note __eq__(): ce5. mas não *note __hash__(): ce6, 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__(): ce5, ela não deve implementar *note __hash__(): ce6, uma
     vez que a implementação de coleções *note hasheáveis: 819. 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__():
     ce5. e *note __hash__(): ce6. por padrão (herdados da classe *note
     object: c72.); 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__(): ce5. e não define *note
     __hash__(): ce6. terá seu *note __hash__(): ce6. implicitamente
     definido como ‘None’.  Quando o método *note __hash__(): ce6. de
     uma classe é ‘None’, as instâncias da classe levantam uma *note
     TypeError: 198. 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__(): ce5. precisa manter a
     implementação de *note __hash__(): ce6. 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__(): ce5. deseja
     suprimir o suporte a hash, deve incluir ‘__hash__ = None’ na
     definição de classe.  Uma classe que define seu próprio *note
     __hash__(): ce6. que levanta explicitamente uma *note TypeError:
     198. seria incorretamente identificada como hasheável por uma
     chamada ‘isinstance(obj, collections.abc.Hashable)’.

          Nota: Por padrão, os valores *note __hash__(): ce6. 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: 1273.

     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__(): 2245. é 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: c72. 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: 5e4. (ou *note __getattribute__(): dbf. levanta uma
     *note AttributeError: 5e4. porque 'name' não é um atributo de
     instância ou um atributo na árvore de classes para ‘self’; ou *note
     __get__(): 16d6. de uma propriedade 'name' levanta *note
     AttributeError: 5e4.).  Este método deve retornar o valor do
     atributo (calculado) ou levantar uma exceção *note AttributeError:
     5e4.  A classe *note object: c72. em si não fornece este método.

     Observe que se o atributo for encontrado através do mecanismo
     normal, *note __getattr__(): 6ef. não é chamado.  (Esta é uma
     assimetria intencional entre *note __getattr__(): 6ef. e *note
     __setattr__(): 2212.)  Isso é feito tanto por razões de eficiência
     quanto porque *note __getattr__(): 6ef. 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__(): dbf. 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__(): 6ef, o último não será chamado a menos que *note
     __getattribute__(): dbf. o chame explicitamente ou levante um *note
     AttributeError: 5e4.  Este método deve retornar o valor do atributo
     (calculado) ou levantar uma exceção *note AttributeError: 5e4.
     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: 21e7.
          Consulte *note Pesquisa de método especial: 2248.

     Para acessos a certos atributos sensíveis, levanta um *note evento
     de auditoria: 1b5d. ‘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__(): 2212. 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: 1b5d. ‘object.__setattr__’ com os argumentos
     ‘obj’, ‘name’ e ‘value’.

 -- Método: object.__delattr__ (self, name)

     Como *note __setattr__(): 2212, 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: 1b5d. ‘object.__delattr__’ com os argumentos
     ‘obj’ e ‘name’.

 -- Método: object.__dir__ (self)

     Chamado quando *note dir(): 839. é chamado com o objeto como
     argumento.  Um iterável deve ser retornada.  *note dir(): 839.
     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: 5e4.  Se um atributo não for encontrado em um
objeto de módulo por meio da pesquisa normal, por exemplo *note
object.__getattribute__(): dbf, então ‘__getattr__’ é pesquisado no
módulo ‘__dict__’ antes de levantar *note AttributeError: 5e4.  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(): 839. 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: 1009.  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__: 772. da classe proprietária.  A classe
*note object: c72. 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: 5e4.

     PEP 252(1) especifica que *note __get__(): 16d6. é 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__(): dbf. 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__(): 224c. ou *note __delete__():
     18a2. altera o tipo de descritor para um “descritor de dados”.
     Consulte *note Invocando descritores: 224d. 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:
     82. 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__(): 16d6, *note __set__(): 224c. e
*note __delete__(): 18a2.  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__(): 16d6, *note __set__():
224c. e *note __delete__(): 18a2.  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.

Python methods (including those decorated with *note @staticmethod: 450.
and *note @classmethod: 488.) are implemented as non-data descriptors.
Accordingly, instances can redefine and override methods.  This allows
individual instances to acquire behaviors that differ from other
instances of the same class.

A função *note property(): 4ad. é 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__: 772. 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__: 772. 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__: 772. e
     '__weakref__' para cada instância.
Observações ao uso de '__slots__':

   * Ao herdar de uma classe sem '__slots__', os atributos *note
     __dict__: 772. e '__weakref__' das instâncias sempre estarão
     acessíveis.

   * Sem uma variável *note __dict__: 772, 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: 5e4.  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: 11a.
     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: e3d. 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__: 772. 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: 198. será levantada se '__slots__' não vazios
     forem definidos para uma classe derivada de um tipo embutido *note
     "variable-length": 2252. como *note int: 19b, *note bytes: 192. e
     *note tuple: 608.

   * Qualquer *note iterável: 1423. não string pode ser atribuído a
     '__slots__'.

   * Se um *note dicionário: 183. 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(): be3. e
     exibidos na saída de *note help(): aca.

   * Atribuição de *note __class__: 169b. funciona apenas se ambas as
     classes têm o mesmo '__slots__'.

   * A *note herança múltipla: 1f56. 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: 198.

   * Se um *note iterador: 4c2. for usado para '__slots__', um *note
     descritor: 17e7. é 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__():
838. é 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 retornos de chamada para elas com um gancho *note
__set_name__(): e3c.

 -- 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__(): e3c. não será chamado automaticamente.  Se
     necessário, *note __set_name__(): e3c. 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: e38. 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(): f38.  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: f38, 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(): d89.

     Dinamicamente resolve bases que não são instâncias de *note type:
     f38.

*note types.get_original_bases(): 6ea.

     Recupera as “bases originais” de uma classe antes das modificações
     feitas por *note __mro_entries__(): cd6.

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(): f38. é usada;

   * se uma metaclasse explícita é fornecida e 'não' é uma instância de
     *note type(): f38, então ela é usada diretamente como a metaclasse;

   * se uma instância de *note type(): f38. é 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: 488.  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(): 49c. é 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(): 1a6. 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(): 1a6. 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: 243. no Python 3.8.

Quando usada a metaclasse padrão *note type: f38, 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__(): e3c.;

  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__(): 838. é 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__: e4b.
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(): 2ac. e *note issubclass():
9ba.

Em particular, a metaclasse *note abc.ABCMeta: 1111. 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(): 2ac. e *note issubclass(): 9ba. através de *note
     __instancecheck__(): 225d. e *note __subclasscheck__(): 225e, 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: 15c, é frequentemente
útil 'parametrizar' um *note tipo genérico: 1a1. usando a notação de
colchetes do Python.  Por exemplo, a anotação ‘list[int]’ pode ser usada
para indicar uma *note list: 24c. em que todos os seus elementos são do
tipo *note int: 19b.

Ver também
..........

PEP 484(1) - Dicas de tipo

     Apresenta a estrutura do Python para anotações de tipo

*note Tipos Generic Alias: 8b6.

     Documentação de objetos que representam classes genéricas
     parametrizadas

*note Genéricos: 2260, *note genéricos definidos pelo usuário: 6eb. e *note typing.Generic: 18ad.

     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'.

     When defined on a class, ‘__class_getitem__()’ is automatically a
     class method.  As such, there is no need for it to be decorated
     with *note @classmethod: 488. when it is defined.

* 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__(): 938. é 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: 2262. 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__(): 938, ou herdar de
*note typing.Generic: 18ad, que possui sua própria implementação de
‘__class_getitem__()’.

Implementações personalizadas de *note __class_getitem__(): 938. 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: 2265. de um objeto usando colchetes
chamará o método de instância *note __getitem__(): 581. 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__(): 938. pode ser
chamado em seu lugar.  ‘__class_getitem__()’ deve retornar um objeto
*note GenericAlias: 8b6. se estiver devidamente definido.

Apresentado com a *note expressão: 2266. ‘obj[x]’, o interpretador de
Python segue algo parecido com o seguinte processo para decidir se *note
__getitem__(): 581. ou *note __class_getitem__(): 938. 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:
2267. dessa classe, e a maioria das classes tem a classe *note type:
f38. como sua metaclasse.  *note type: f38. não define *note
__getitem__(): 581, o que significa que expressões como ‘list[int]’,
‘dict[str, float]’ e ‘tuple[str, bytes]’ resultam em chamadas para *note
__class_getitem__(): 938.:

     >>> # 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__(): 581, subscrever a classe pode resultar em
comportamento diferente.  Um exemplo disso pode ser encontrado no módulo
*note enum: 5a.:

     >>> 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__(): 938, e define quando uma *note
     subscrição: 2265. resulta na chamada de ‘__class_getitem__()’ em
     vez de *note __getitem__(): 581.

   ---------- 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: c72. 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:
c72.  Contêineres geralmente são *note sequências: 70b. (como *note
listas: 24c. ou *note tuplas: 608.) ou *note mapeamentos: 13b7. (como
*note dicionários: 226c.), 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:
689, 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: 183. padrão do Python.  O módulo *note collections.abc: 1f.
fornece uma *note classe base abstrata: 13b2. *note MutableMapping:
12a8. para ajudar a criar esses métodos a partir de um conjunto base de
*note __getitem__(): 581, *note __setitem__(): 14c7, *note
__delitem__(): 14c8. e ‘keys()’.

Sequências mutáveis devem fornecer métodos *note append(): 226d, *note
clear(): 226e, *note count(): 226f, *note extend(): 2270, *note index():
18c7, *note insert(): 2271, *note pop(): 2272, *note remove(): 18c8. e
*note reverse(): 2273, como objetos *note list: 24c. 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__(): 2274, *note __radd__(): 2275, *note __iadd__(): 2276,
*note __mul__(): 2277, *note __rmul__(): 2278. e *note __imul__(): 2279.
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__(): 15ab. 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__(): e5d. 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(): 835.  Deve
     retornar o comprimento do objeto, um inteiro ‘>=’ 0.  Além disso,
     um objeto que não define um método *note __bool__(): 14d1. 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:
     13c1.  Se o comprimento for maior que ‘sys.maxsize’, alguns
     recursos (como *note len(): 835.) podem levantar *note
     OverflowError: a77.  Para evitar levantar ‘OverflowError’ pelo
     teste de valor de verdade, um objeto deve definir um método *note
     __bool__(): 14d1.

 -- Método: object.__length_hint__ (self)

     Chamado para implementar *note operator.length_hint(): 1163.  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: 1a2, 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: 70b, as chaves aceitas devem ser inteiros.
     Opcionalmente, eles também podem oferecer suporte a objetos *note
     slice: 689.  Suporte a índice negativo também é opcional.  Se 'key'
     for de um tipo impróprio, *note TypeError: 198. 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: 1723. deve ser levantada.  Para tipos
     *note mapeamento: 13b7, se 'key' estiver faltando (não no
     contêiner), *note KeyError: 5dd. deve ser levantada.

          Nota: Os loops *note for: 347. esperam que uma *note
          IndexError: 1723. seja levantada para índices ilegais para
          permitir a detecção apropriada do fim da sequência.

          Nota: Ao fazer *note subscrição: 2265. de uma 'classe', o
          método de classe especial *note __class_getitem__(): 938. pode
          ser chamado em vez de ‘__getitem__()’.  Veja *note
          __class_getitem__ versus __getitem__: 2264. 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__(): 581.  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__(): 581.

 -- Método: object.__delitem__ (self, key)

     Chamado para implementar a exclusão de ‘self[key]’.  Mesma nota que
     para *note __getitem__(): 581.  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__(): 581.

 -- Método: object.__missing__ (self, key)

     Chamado por *note dict: 183.*note __getitem__(): 581. 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: 4c2. é 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(): a5b. 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__(): e7a. não for fornecido, o *note
     reversed(): a5b. embutido voltará a usar o protocolo de sequência
     (*note __len__(): 2245. e *note __getitem__(): 581.).  Objetos que
     suportam o protocolo de sequência só devem fornecer *note
     __reversed__(): e7a. se eles puderem fornecer uma implementação que
     seja mais eficiente do que aquela fornecida por *note reversed():
     a5b.

Os operadores de teste de associação (*note in: 348. e *note not in:
836.) 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__(): 15ab, o teste de
     associação primeiro tenta a iteração via *note __iter__(): e5d,
     depois o protocolo de iteração de sequência antigo via *note
     __getitem__(): 581, consulte *note esta seção em a referência da
     linguagem: 227a.


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(): b8f, *note pow(): 1a4, ‘**’, ‘<<’, ‘>>’, ‘&’, ‘^’, ‘|’).
     Por exemplo, para avaliar a expressão ‘x + y’, onde 'x' é uma
     instância de uma classe que tem um método *note __add__(): 2274,
     ‘type(x).__add__(x, y)’ é chamado.  O método *note __divmod__():
     1087. deve ser equivalente a usar *note __floordiv__(): 16e2. e
     *note __mod__(): 227e.; não deve estar relacionado a *note
     __truediv__(): 1086.  Note que *note __pow__(): 9ca. deve ser
     definido para aceitar um terceiro argumento opcional se a versão de
     três argumentos da função embutida *note pow(): 1a4. for suportada.

     Se um desses métodos não suporta a operação com os argumentos
     fornecidos, ele deve retornar *note NotImplemented: 1a2.

 -- 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(): b8f, *note pow(): 1a4, ‘**’, ‘<<’, ‘>>’, ‘&’, ‘^’, ‘|’)
     com operandos refletidos (trocados).  Essas funções são chamadas
     apenas se os operandos tiverem tipos diferentes, quando o operando
     esquerdo não oferecer suporte a operação correspondente (1), ou a
     classe do operando direito é derivada da classe do operando
     esquerdo.  (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__(): 2284, ‘type(y).__rsub__(y, x)’ é chamado se
     ‘type(x).__sub__(x, y)’ retorna *note NotImplemented: 1a2. ou
     ‘type(y)’ é uma subclasse de ‘type(x)’.  (3)

     Observe que *note __rpow__(): 1a5. deve ser definido para aceitar
     um terceiro argumento opcional se a versão de três argumentos da
     função embutida *note pow(): 1a4. for suportada.

     Alterado na versão 3.14: *note pow(): 1a4. de três argumentos agora
     tenta chamar *note __rpow__(): 1a5. se necessário.  Anteriormente,
     ele só era chamado em ‘pow()’ de dois argumentos e no operador
     binário de potência.

          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: 1a2, 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__(): 2276, ‘x += y’ equivale a ‘x =
     x.__iadd__(y)’.  Se *note __iadd__(): 2276. 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?: 2296.), 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(): 1f42. 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(): 197,
     *note int(): 19b. e *note float(): 196.  Deve retornar um valor do
     tipo apropriado.

 -- Método: object.__index__ (self)

     Chamado para implementar *note operator.index(): 1bb1, 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(): 14a4, *note hex(): 14cb. e *note oct(): 14ca.).  A presença
     deste método indica que o objeto numérico é do tipo inteiro.  Deve
     retornar um número inteiro.

     Se *note __int__(): 19d, *note __float__(): bb7. e *note
     __complex__(): 7f2. não estiverem definidos, funções embutidas
     correspondentes *note int(): 19b, *note float(): 196. e *note
     complex(): 197. recorre a *note __index__(): 19e.

 -- 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(): 14d6.
     e *note trunc(): 15b1, *note floor(): 15af. e *note ceil(): 15b0.
     de *note math: 92.  A menos que 'ndigits' sejam passados para
     ‘__round__()’ todos estes métodos devem retornar o valor do objeto
     truncado para um *note Integral: 229e. (tipicamente um *note int:
     19b.).

     Alterado na versão 3.14: *note int(): 19b. não delega mais ao
     método *note __trunc__(): 19c.

   ---------- Footnotes ----------

   (1) “Não suportar” aqui significa que a classe não possui tal método,
ou o método retorna *note NotImplemented: 1a2.  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__(): 2274.) falhar, a operação não será
suportada, razão pela qual o método refletido não é chamado.

   (3) Se o tipo do operando direito for uma subclasse do tipo do
operando esquerdo, o método tendo precedência permite que as subclasses
substituam as operações de seus ancestrais.


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:
186.  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: 186.), 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: 22a1.  A classe *note object: c72. 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: 186. 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: 87a.

     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__(): 14fc. 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: 186.

   ---------- 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:
198.

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: Anotações,  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: 25f. 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: 192. e
*note memoryview: 165, 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: 165.).  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: 682. fornece uma maneira conveniente de
     interpretar os sinalizadores.  O método deve retornar um objeto
     *note memoryview: 165.

 -- Método: object.__release_buffer__ (self, buffer)

     Chamado quando um buffer não é mais necessário.  O argumento
     'buffer' é um objeto *note memoryview: 165. que foi retornado
     anteriormente por *note __buffer__(): 681.  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: 341.

     ABC para tipos buffer.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/


File: python.info,  Node: Anotações,  Next: Pesquisa de método especial,  Prev: Emulando tipos buffer,  Up: Nomes de métodos especiais

4.3.3.25 Anotações
..................

Funções, classes e módulos podem conter *note anotações: 15c, que são
uma maneira de associar informações (geralmente *note dicas de tipo:
2262.) a um símbolo.

 -- Atributo: object.__annotations__

     Este atributo contém as anotações de um objeto.  Ele é *note
     avaliado preguiçosamente: 67a, portanto, acessá-lo pode executar
     código arbitrário e levantar exceções.  Se a avaliação for
     bem-sucedida, o atributo é definido como um mapeamento de
     dicionário de nomes de variáveis para anotações.

     Alterado na versão 3.14: Anotações são agora avaliados
     preguiçosamente.

 -- Método: object.__annotate__ (format)

     Uma *note função de anotação: 15d.  Retorna um novo objeto
     dicionário mapeando nomes de atributos/parâmetros aos seus valores
     de anotação.

     Recebe um parâmetro de formato que especifica o formato em que os
     valores das anotações devem ser fornecidos.  Deve ser um membro da
     enumeração *note annotationlib.Format: 22f. ou um inteiro com um
     valor correspondente a um membro da enumeração.

     Se uma função de anotação não oferecer suporte ao formato
     solicitado, ela deverá levantar *note NotImplementedError: 368.
     Funções de anotação devem sempre oferecer suporte ao formato *note
     VALUE: 15e.; elas não devem levantar *note NotImplementedError():
     368. quando chamadas com este formato.

     Quando chamada com o formato *note VALUE: 15e, uma função de
     anotação pode levantar *note NameError: 44f.; ela não deve levantar
     ‘NameError’ quando chamada solicitando qualquer outro formato.

     Se um objeto não tiver nenhuma anotação, *note __annotate__: 18cc.
     deve ser preferencialmente definido como ‘None’ (não pode ser
     excluído), em vez de ser definido como uma função que retorna um
     dicionário vazio.

     Adicionado na versão 3.14.

Ver também
..........

PEP 649(1) — Avaliação diferida de anotação usando descritores

     Apresenta a avaliação preguiçosa de anotações e a função
     ‘__annotate__’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/


File: python.info,  Node: Pesquisa de método especial,  Prev: Anotações,  Up: Nomes de métodos especiais

4.3.3.26 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__(): ce6. e *note __repr__(): 824.
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__(): dbf. 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__(): dbf. 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: 4c3. geralmente implementa um método *note
__await__(): f69.  Os *note objetos corrotina: 6ae. retornados das
funções *note async def: 7e2. são aguardáveis.

     Nota: Os objetos *note iteradores geradores: dcd. retornados de
     geradores decorados com *note types.coroutine(): 107e. também são
     aguardáveis, mas eles não implementam *note __await__(): f69.

 -- Método: object.__await__ (self)

     Deve retornar um *note iterador: 4c2.  Deve ser usado para
     implementar objetos *note aguardáveis: 4c3.  Por exemplo, *note
     asyncio.Future: dba. implementa este método para ser compatível com
     a expressão *note await: 18d.  A classe *note object: c72. 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:
          b.) que gerenciará o objeto *note awaitable: 4c3.

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: 6ae. são objetos *note aguardáveis: 4c3.  A
execução de uma corrotina pode ser controlada chamando *note
__await__(): f69. e iterando sobre o resultado.  Quando a corrotina
termina a execução e retorna, o iterador levanta *note StopIteration:
de9, e o atributo *note value: 22ab. 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: de9. 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: 22ac.).  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: 243. 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__():
     f69.  Se 'value' não for ‘None’, este método delega para o método
     *note send(): 22ae. do iterador que causou a suspensão da
     corrotina.  O resultado (valor de retorno, *note StopIteration:
     de9. 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(): 711. 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: de9. ou outra exceção) é o mesmo de iterar
     sobre o valor de retorno *note __await__(): f69, 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():
     19a4. do iterador que causou a suspensão da corrotina, se tiver tal
     método.  Então ele levanta *note GeneratorExit: 15b9. 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: c94.

A classe *note object: c72. 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: 1cc5.
     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__(): dea.
poderia retornar um 'aguardável' que resolveria para um *note iterador
assíncrono: 4c1.

A partir do Python 3.7, *note __aiter__(): dea. deve retornar um objeto
iterador assíncrono.  Retornar qualquer outra coisa resultará em um erro
*note TypeError: 198.


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: 185.

A classe *note object: c72. em si não fornece estes métodos.

 -- Método: object.__aenter__ (self)

     Semanticamente semelhante a *note __enter__(): 7d9, 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__(): 14fc, 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>.
* Runtime Components::


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:
1a8.) é 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: 23b. também é um bloco de código.  O
argumento da string passado para as funções embutidas *note eval(): 49d.
e *note exec(): 49c. é 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: 22bc. que são identificadores se ocorrerem em uma
     atribuição:

        + cabeçalho de laço *note for: 347,

        + depois de ‘as’ em uma instrução *note with: 186, cláusula
          *note except: 1ab, cláusula *note except*: 1ac. 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: 7ed.

   * instruções *note type: 661.

   * *note listas de parâmetros de tipo: 5a6.

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: 1a4f. 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: 14a3. ou *note global: 4a6.  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: 22bd.

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: 44f. é
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: 1724. é
levantada.  *note UnboundLocalError: 1724. é uma subclasse de *note
NameError: 44f.

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: 22c0. para exemplos.

Se a instrução *note global: 4a6. 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:
13.  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: 4a6. 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: 14a3. 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: 18e. é
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: 5a6. 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(): 49c. e
*note eval(): 49d. 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: 4a5, 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 de *note anotações: 15c, *note listas de parâmetros de
tipo: 5a6. e *note type: 661. introduzem 'escopos de anotação', que se
comportam principalmente como escopos de função, mas com algumas
exceções discutidas abaixo.

Os escopos de anotação são usados nos seguintes contextos:

   * *note Anotações de funções: 1ed0.

   * *note Anotações de variável: f45.

   * Listas de parâmetros de tipo para *note apelidos de tipo genérico:
     679.

   * Listas de parâmetros de tipo para *note funções genéricas: 677.  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: 677.  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: 67a.).

   * O valor dos apelidos de tipo (*note avaliado preguiçosamente:
     67a.).

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: bb8, ‘yield from’, *note await: 18d. 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: 14a3. 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: 1be4. dos objetos definidos
     dentro do escopo.  Em vez disso, o *note __qualname__: 125b. 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(1).

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(2).

Alterado na versão 3.14: Os escopos de anotação agora também são usados
para anotações, conforme especificado na PEP 649(3) e PEP 749(4).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0695/

   (2) https://peps.python.org/pep-0696/

   (3) https://peps.python.org/pep-0649/

   (4) https://peps.python.org/pep-0749/


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
............................

A maioria dos escopos de anotação são 'avaliados preguiçosamente'.  Isso
inclui anotações, os valores de apelidos de tipo criados por meio da
instrução *note type: 661. e os limites, restrições e valores padrão de
tipos variáveis criados por meio da sintaxe de parâmetro de tipo *note
sintaxe de parâmetro de tipo: 5a6.  Isso significa que eles não são
avaliados quando o apelido de tipo ou a tipo variável é criado, ou
quando o objeto que contém as anotações é criado.  Em vez disso, eles
são avaliados apenas quando necessário, por exemplo, quando o atributo
‘__value__’ em um apelido de tipo é acessado.

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: 4a5, 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: 7ed. o módulo *note builtins: 13. 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: 13.;
quando em qualquer outro módulo, ‘__builtins__’ é um apelido para o
dicionário do próprio módulo *note builtins: 13.


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(): 49d. e *note exec(): 49c. 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(): 49c. e *note eval(): 49d. 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>,  Next: Runtime Components,  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:
7f8.  Os tratadores de exceção são especificados com a instrução *note
try: 8ed. … *note except: 1ab.  A cláusula *note finally: 1b0. 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: f30.

As exceções são identificadas por instâncias de classe.  A cláusula
*note except: 1ab. é selecionada dependendo da classe da instância: ela
deve referenciar a classe da instância ou uma *note classe base
não-virtual: 13b2. 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: 8ed. na seção *note A
instrução try: 8ed. e a instrução *note raise: 7f8. na seção *note A
instrução raise: 7f8.


File: python.info,  Node: Runtime Components,  Prev: Exceções<2>,  Up: Modelo de execução

4.4.4 Runtime Components
------------------------

* Menu:

* General Computing Model::
* Python Runtime Model::


File: python.info,  Node: General Computing Model,  Next: Python Runtime Model,  Up: Runtime Components

4.4.4.1 General Computing Model
...............................

Python’s execution model does not operate in a vacuum.  It runs on a
host machine and through that host’s runtime environment, including its
operating system (OS), if there is one.  When a program runs, the
conceptual layers of how it runs on the host look something like this:

          'host machine'
               'process' (global resources)
                    'thread' (runs machine code)

Each process represents a program running on the host.  Think of each
process itself as the data part of its program.  Think of the process’
threads as the execution part of the program.  This distinction will be
important to understand the conceptual Python runtime.

The process, as the data part, is the execution context in which the
program runs.  It mostly consists of the set of resources assigned to
the program by the host, including memory, signals, file handles,
sockets, and environment variables.

Processes are isolated and independent from one another.  (The same is
true for hosts.)  The host manages the process’ access to its assigned
resources, in addition to coordinating between processes.

Each thread represents the actual execution of the program’s machine
code, running relative to the resources assigned to the program’s
process.  It’s strictly up to the host how and when that execution takes
place.

From the point of view of Python, a program always starts with exactly
one thread.  However, the program may grow to run in multiple
simultaneous threads.  Not all hosts support multiple threads per
process, but most do.  Unlike processes, threads in a process are not
isolated and independent from one another.  Specifically, all threads in
a process share all of the process’ resources.

The fundamental point of threads is that each one does 'run'
independently, at the same time as the others.  That may be only
conceptually at the same time (“concurrently”) or physically (“in
parallel”).  Either way, the threads effectively run at a
non-synchronized rate.

     Nota: That non-synchronized rate means none of the process’ memory
     is guaranteed to stay consistent for the code running in any given
     thread.  Thus multi-threaded programs must take care to coordinate
     access to intentionally shared resources.  Likewise, they must take
     care to be absolutely diligent about not accessing any 'other'
     resources in multiple threads; otherwise two threads running at the
     same time might accidentally interfere with each other’s use of
     some shared data.  All this is true for both Python programs and
     the Python runtime.

     The cost of this broad, unstructured requirement is the tradeoff
     for the kind of raw concurrency that threads provide.  The
     alternative to the required discipline generally means dealing with
     non-deterministic bugs and data corruption.


File: python.info,  Node: Python Runtime Model,  Prev: General Computing Model,  Up: Runtime Components

4.4.4.2 Python Runtime Model
............................

The same conceptual layers apply to each Python program, with some extra
data layers specific to Python:

          'host machine'
               'process' (global resources)
                    Python global runtime ('state')
                         Python interpreter ('state')
                              'thread' (runs Python bytecode and “C-API”)
                                   Python thread 'state'

At the conceptual level: when a Python program starts, it looks exactly
like that diagram, with one of each.  The runtime may grow to include
multiple interpreters, and each interpreter may grow to include multiple
thread states.

     Nota: A Python implementation won’t necessarily implement the
     runtime layers distinctly or even concretely.  The only exception
     is places where distinct layers are directly specified or exposed
     to users, like through the *note threading: f3. module.

     Nota: The initial interpreter is typically called the “main”
     interpreter.  Some Python implementations, like CPython, assign
     special roles to the main interpreter.

     Likewise, the host thread where the runtime was initialized is
     known as the “main” thread.  It may be different from the process’
     initial thread, though they are often the same.  In some cases
     “main thread” may be even more specific and refer to the initial
     thread state.  A Python runtime might assign specific
     responsibilities to the main thread, such as handling signals.

As a whole, the Python runtime consists of the global runtime state,
interpreters, and thread states.  The runtime ensures all that state
stays consistent over its lifetime, particularly when used with multiple
host threads.

The global runtime, at the conceptual level, is just a set of
interpreters.  While those interpreters are otherwise isolated and
independent from one another, they may share some data or other
resources.  The runtime is responsible for managing these global
resources safely.  The actual nature and management of these resources
is implementation-specific.  Ultimately, the external utility of the
global runtime is limited to managing interpreters.

In contrast, an “interpreter” is conceptually what we would normally
think of as the (full-featured) “Python runtime”.  When machine code
executing in a host thread interacts with the Python runtime, it calls
into Python in the context of a specific interpreter.

     Nota: The term “interpreter” here is not the same as the “bytecode
     interpreter”, which is what regularly runs in threads, executing
     compiled Python code.

     In an ideal world, “Python runtime” would refer to what we
     currently call “interpreter”.  However, it’s been called
     “interpreter” at least since introduced in 1997
     (CPython:a027efa5b(1)).

Each interpreter completely encapsulates all of the non-process-global,
non-thread-specific state needed for the Python runtime to work.
Notably, the interpreter’s state persists between uses.  It includes
fundamental data like *note sys.modules: 17ab.  The runtime ensures
multiple threads using the same interpreter will safely share it between
them.

A Python implementation may support using multiple interpreters at the
same time in the same process.  They are independent and isolated from
one another.  For example, each interpreter has its own *note
sys.modules: 17ab.

For thread-specific runtime state, each interpreter has a set of thread
states, which it manages, in the same way the global runtime contains a
set of interpreters.  It can have thread states for as many host threads
as it needs.  It may even have multiple thread states for the same host
thread, though that isn’t as common.

Each thread state, conceptually, has all the thread-specific runtime
data an interpreter needs to operate in one host thread.  The thread
state includes the current raised exception and the thread’s Python call
stack.  It may include other thread-specific resources.

     Nota: The term “Python thread” can sometimes refer to a thread
     state, but normally it means a thread created using the *note
     threading: f3. module.

Each thread state, over its lifetime, is always tied to exactly one
interpreter and exactly one host thread.  It will only ever be used in
that thread and with that interpreter.

Multiple thread states may be tied to the same host thread, whether for
different interpreters or even the same interpreter.  However, for any
given host thread, only one of the thread states tied to it can be used
by the thread at a time.

Thread states are isolated and independent from one another and don’t
share any data, except for possibly sharing an interpreter and objects
or other resources belonging to that interpreter.

Once a program is running, new Python threads can be created using the
*note threading: f3. module (on platforms and Python implementations
that support threads).  Additional processes can be created using the
*note os: a5, *note subprocess: dc, and *note multiprocessing: 98.
modules.  Interpreters can be created and used with the *note
interpreters: 25. module.  Coroutines (async) can be run using *note
asyncio: b. in each interpreter, typically only in a single thread
(often the main thread).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/commit/a027efa5b


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: 191a. obtém acesso ao código em
outro módulo pelo processo de *note importação: 22d0. dele.  A instrução
*note import: 7ed. é a maneira mais comum de invocar o mecanismo de
importação, mas não é a única maneira.  Funções como *note
importlib.import_module(): 731. e a função embutida *note __import__():
ac7. também podem ser usadas para chamar o mecanismo de importação.

A instrução *note import: 7ed. 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__(): ac7, com os argumentos
apropriados.  O valor de retorno de *note __import__(): ac7. é 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__(): ac7. 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: 17ab.), apenas a instrução *note import: 7ed. realiza uma
operação de ligação de nome.

Quando uma instrução *note import: 7ed. é executada, a função embutida
padrão *note __import__(): ac7. é chamada.  Outros mecanismos para
chamar o sistema de importação (como *note importlib.import_module():
731.) podem optar por ignorar *note __import__(): ac7. 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: d31. 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: f1b.  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: 1009.

   (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: 7b. fornece uma API rica para interagir com o
sistema de importação.  Por exemplo, *note importlib.import_module():
731. fornece uma API mais simples e recomendada do que a função embutida
*note __import__(): ac7. para chamar o mecanismo de importação.
Consulte a documentação da biblioteca *note importlib: 7b. 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: 232.

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: 3f, que por
sua vez tem um subpacote chamado *note email.mime: 49. e um módulo
dentro dele chamado *note email.mime.text: 51.

* 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: 22d4. e
*note pacotes de espaço de nomes: 2b1.  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:
22d7, 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: 3e1. 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: 1be4. 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: 7ed, ou dos parâmetros das
funções *note importlib.import_module(): 731. ou *note __import__():
ac7.

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: d31. é 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: 17ab.  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: 17ab. 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:
17ab. 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: d31. é levantada.  Se o nome do
módulo não foi encontrado, Python continuará a busca pelo módulo.

É possível alterar *note sys.modules: 17ab.  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: d31.

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:
17ab. 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(): 732. 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: 17ab, 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: 2203. e *note carregadores: 1965.  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: 22dc. – 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: 22dd. por módulos.  O *note caminho de
importação: 22dd. é 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: 1965. 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: 17ab.  Isso permite aos metaganchos
substituir processamento de *note sys.path: 3e1, módulos congelados ou
mesmo módulos embutidos.  Metaganchos são registrados adicionando novos
objetos localizadores a *note sys.meta_path: f1b, conforme descrito
abaixo.

Ganchos de caminho de importação são chamados como parte do
processamento de *note sys.path: 3e1. (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: 121a, 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: 17ab, o
Python em seguida o busca em *note sys.meta_path: f1b, 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(): a5e, 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: f1b.
alcançar o fim da sua lista sem retornar um spec, então *note
ModuleNotFoundError: d31. é levantada.  Quaisquer outras exceções
levantadas são simplesmente propagadas para cima, abortando o processo
de importação.

O método *note find_spec(): a5e. 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: d31. é
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: f1b. 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: 22dd. (isto é, o *note localizador
baseado no caminho: 22e0.).

Alterado na versão 3.4: O método *note find_spec(): a5e. 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(): a5e.

Alterado na versão 3.10: O uso de ‘find_module()’ pelo sistema de
importação agora levanta *note ImportWarning: 713.

Alterado na versão 3.12: ‘find_module()’ foi removido.  Use *note
find_spec(): a5e.


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: 17ab, a importação já tera retornado ele.

   * O módulo irá existir em *note sys.modules: 17ab. 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: 17ab. 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: 17ab.  Qualquer módulo
     já presente no cache de *note sys.modules: 17ab, 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: 17ab.

   * 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: 21fa.

   * 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(): a5f.

* 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: 17ab.  O efeito indireto disso é
que um módulo importado pode substituir a si mesmo em *note sys.modules:
17ab.  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(): a60. com um único argumento, o
objeto do módulo a ser executado.  Qualquer valor retornado de *note
exec_module(): a60. é 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: 64f, embora qualquer outra exceção
     levantada durante *note exec_module(): a60. será propagada.

Em muitos casos, o localizador e o carregador podem ser o mesmo objeto;
nesses casos o método *note find_spec(): a5e. 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():
ea0.  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(): ea0. de
carregadores.

Alterado na versão 3.4: O método *note load_module(): a5f. foi
substituído por *note exec_module(): a60. 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: 17ab, o carregador deverá usar esse módulo
     existente.  (Caso contrário, *note importlib.reload(): 732. não
     funcionará corretamente.)  Se o módulo nomeado não existir em *note
     sys.modules: 17ab, o carregador deverá criar um novo objeto de
     módulo e adicioná-lo a *note sys.modules: 17ab.

   * O módulo 'deve' existir em *note sys.modules: 17ab. 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: 17ab, 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: 1a3. é
levantada quando ‘exec_module()’ está definido, mas ‘create_module()’
não.

Alterado na versão 3.6: Uma exceção *note ImportError: 64f. é 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: 713.


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__: 21fd.  A
configuração oportuna do ‘__spec__’ se aplica igualmente aos *note
módulos inicializados durante a inicialização do interpretador: 22e5.  A
única exceção é o ‘__main__’, cujo ‘__spec__’ é *note definido como None
em alguns casos: 22e6.

Consulte *note ModuleSpec: 2117. 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__: 1f09. deve ser uma *note sequência: 70b.
(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: 232.

O atributo *note __path__: 1f09. 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: 3e1, 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: 3e1. também se aplicam ao
‘__path__’ de um pacote.  Os *note sys.path_hooks: 121a. (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__: 1f09. 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: 1fcf.

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: 22e0. (*note PathFinder: 1219.), pesquisa um *note caminho de
importação: 22dd, que contém uma lista de *note entradas de caminho:
22eb.  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: 138. 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:
1267. 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: 1266. e *note localizador de entrada de caminho: 1267.
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: f1b.

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: f1b, 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: 22e0. é responsável por
encontrar e carregar módulos e pacotes Python cuja localização é
especificada com uma string *note entrada de caminho: 22eb.  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: 22e0. implementa o protocolo *note find_spec(): a5e. 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: 22dd.

Três variáveis são usadas pelo *note localizador baseado no caminho:
22e0, *note sys.path: 3e1, *note sys.path_hooks: 121a. e *note
sys.path_importer_cache: 7ef.  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: 3e1. 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: 1213. e vários outros padrões
específicos de instalação e implementação.  Entradas em *note sys.path:
3e1. podem nomear diretórios no sistema de arquivos, arquivos zip e
potencialmente outros “locais” (veja o módulo *note site: cc.) que devem
ser pesquisados por módulos, como URLs, ou consultas ao banco de dados.
Apenas strings devem estar presentes em *note sys.path: 3e1.; todos os
outros tipos de dados são ignorados.

O *note localizador baseado no caminho: 22e0. é um *note localizador de
metacaminho: 1266, então o mecanismo de importação inicia a pesquisa no
*note caminho de importação: 22dd. chamando o método *note find_spec():
1207. do localizador baseado no caminho conforme descrito anteriormente.
Quando o argumento ‘path’ para *note find_spec(): 1207. 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: 3e1. é 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: 1267. (*note PathEntryFinder: a65.) 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: 7ef. (apesar do nome, este cache na
verdade armazena objetos localizadores em vez de ser limitado a objetos
*note importador: 22dc.).  Desta forma, a dispendiosa busca pelo *note
localizador de entrada de caminho: 1267. de local específico de uma
*note entrada de caminho: 22eb. só precisa ser feita uma vez.  O código
do usuário é livre para remover entradas de cache de *note
sys.path_importer_cache: 7ef, 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:
121a.  Cada um dos *note ganchos de entrada de caminho: 22ed. 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: 1267. que pode manipular a entrada de caminho ou pode
levantar *note ImportError: 64f.  Um *note ImportError: 64f. é usado
pelo localizador baseado no caminho para sinalizar que o gancho não
consegue encontrar um *note localizador de entrada de caminho: 1267.
para aquela *note entrada de caminho: 22eb.  A exceção é ignorada e a
iteração com o *note caminho de importação: 22dd. 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: 64f.

Se a iteração *note sys.path_hooks: 121a. terminar sem que nenhum *note
localizador de entrada de caminho: 1267. seja retornado, o método *note
find_spec(): 1207. do localizador baseado no caminho armazenará ‘None’
em *note sys.path_importer_cache: 7ef. (para indicar que não há um
localizador para esta entrada de caminho) e retornará ‘None’, indicando
que este *note localizador de metacaminho: 1266. não conseguiu encontrar
o módulo.

Se um *note localizador de entrada de caminho: 1267. 'for' retornado por
um dos chamáveis de *note gancho de entrada de caminho: 22ed. em *note
sys.path_hooks: 121a, 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: 3e1.  Primeiro, se o diretório de trabalho atual não puder ser
determinado ou for considerado inexistente, nenhum valor será armazenado
em *note sys.path_importer_cache: 7ef.  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:
7ef. e retornado por *note importlib.machinery.PathFinder.find_spec():
1207. 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(): a62.

*note find_spec(): a62. 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: 22d7. 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(): a62. 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:
22d7. 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: 713.

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: f1b, substituindo-o
inteiramente por um gancho de metacaminho personalizado.

Se for aceitável alterar apenas o comportamento de instruções de
importação sem afetar outras APIs que acessam o sistema de importação,
então substituir a função embutida *note __import__(): ac7. pode ser
suficiente.  Essa técnica também pode ser empregada no nível do módulo
para alterar apenas o comportamento de instruções de importação dentro
desse módulo.

Para impedir seletivamente a importação de alguns módulos de um gancho
no início do metacaminho (em vez de desabilitar o sistema de importação
padrão completamente), é suficiente levantar *note ModuleNotFoundError:
d31. diretamente de *note find_spec(): a5e. 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: 22e5,
o módulo ‘__main__’ é inicializado diretamente na inicialização do
interpretador, muito parecido com *note sys: df. e *note builtins: 13.
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: 23b, ‘__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:
3e1.

*note Nos demais casos: 1fc8, ‘__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: 1a8.

   - 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: 23b. 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: f1b. era PEP 302(2),
com extensão subsequente em PEP 420(3).

PEP 420(4) introduziu *note pacotes de espaço de nomes: 2b1. 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 real comum”, isso
significa que a implementação do operador para tipos embutidos funciona
da seguinte maneira:

   * Se ambos os argumentos forem números complexos, nenhuma conversão
     será realizada;

   * se qualquer argumento for um número complexo ou de ponto flutuante,
     o outro será convertido em um número de 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: 216c. | *note literal: 22ff. | *note enclosure: 2300.
     enclosure: *note parenth_form: 2301. | *note list_display: 2302. | *note dict_display: 2303. | *note set_display: 2304.
                | *note generator_expression: 2305. | *note yield_atom: 2306.

* 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
Nomes (identificadores e palavras reservadas): 214b. para a definição
lexical e a seção *note Nomeação e ligação: 21df. 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: 44f.

* 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: 14d3.

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__: 125c. 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 strings: 230b. | *note NUMBER: 21a2.

A execuçã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 literais de ponto
flutuante e imaginários (complexos).  Consulte a seção *note Literais:
2173. para obter detalhes.  Consulte a seção *note Concatenação de
literal de string: 218a. para obter detalhes sobre ‘strings’.

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.

* Menu:

* Concatenação de literal de string::


File: python.info,  Node: Concatenação de literal de string,  Up: Literais<2>

4.6.2.4 Concatenação de literal de string
.........................................

Vários literais de strings ou bytes adjacentes (delimitados por espaços
em branco), possivelmente usando convenções de aspas diferentes, são
permitidos, e seu significado é o mesmo que sua concatenação:

     >>> "olá" 'mundo'
     "olámundo"

Formalmente:

     strings: ( *note STRING: 217b. | fstring)+ | tstring+

Este recurso é definido no nível sintático, portanto, funciona apenas
com literais.  Para concatenar expressões de string em tempo de
execução, o operador ‘+’ pode ser usado:

     >>> greeting = "Olá"
     >>> space = " "
     >>> name = "Blaise"
     >>> print(greeting + space + name)   # not: print(greeting space name)
     Olá Blaise

A concatenação de literais pode misturar livremente strings brutas,
strings entre aspas triplas e literais de strings formatadas.  Por
exemplo:

     >>> "Olá" r', ' f"{name}!"
     "Olá, Blaise!"

Este recurso pode ser usado para reduzir o número de contrabarras
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
               )

No entanto, literais de bytes só podem ser combinados com outros
literais de bytes; não com literais de string de qualquer tipo.  Além
disso, literais de strings templates só podem ser combinados com outros
literais de strings templates:

     >>> t"Olá" t"{name}!"
     Template(strings=('Olá', '!'), interpolations=(...))


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.5 Formas de parênteses
............................

Um forma entre parênteses é uma lista de expressões opcional entre
parênteses:

     parenth_form: "(" [*note starred_expression: 230f.] ")"

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.6 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: 2312. *note comp_for: 2313.
     comp_for:      ["async"] "for" *note target_list: 2314. "in" *note or_test: 2315. [*note comp_iter: 2316.]
     comp_iter:     *note comp_for: 2313. | *note comp_if: 2317.
     comp_if:       "if" *note or_test: 2315. [*note comp_iter: 2316.]

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: 7e2, uma cláusula
‘async for’ pode ser usada para iterar sobre um *note iterador
assíncrono: 4c1.  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: 18d.

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.7 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: 231a. | *note comprehension: 2311.] "]"

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.8 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: 231a. | *note comprehension: 2311.) "}"

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.9 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: 231e. | *note dict_comprehension: 231f.] "}"
     dict_item_list:     *note dict_item: 2320. ("," *note dict_item: 2320.)* [","]
     dict_item:          *note expression: 182. ":" *note expression: 182. | "**" *note or_expr: 219c.
     dict_comprehension: *note expression: 182. ":" *note expression: 182. *note comp_for: 2313.

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: 13b7.  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: 21cb.  (Para resumir, o tipo
de chave deve ser *note hasheável: 819, 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.10 Expressões geradoras
.............................

Uma expressão geradora é uma notação geradora compacta entre parênteses:

     generator_expression: "(" *note expression: 182. *note comp_for: 2313. ")"

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__(): 1f63. é 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: 4c2. é 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: f71. 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: 18d, 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:
f6b.).

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: 7e2.  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.11 Expressões yield
.........................

     yield_atom:       "(" *note yield_expression: 219d. ")"
     yield_from:       "yield" "from" *note expression: 182.
     yield_expression: "yield" *note yield_list: 2326. | *note yield_from: 2325.

A expressão yield é usada ao definir uma função *note geradora: 1257. ou
uma função *note geradora assíncrona: 2327. 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: 7e2. 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: 2328.

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: 2326. ao
chamador do gerador, ou ‘None’ se *note yield_list: 2326. é 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__(): 1f63.
for usado (tipicamente através de uma *note for: 347. ou do *note
next(): 9ce. embutido) então o resultado será *note None: 87a.  Caso
contrário, se *note send(): 22ae. 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: 8ed.  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(): 19a4. do iterador de gerador será
chamado, permitindo que quaisquer cláusulas *note finally: 1b0.
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(): 22ae. e quaisquer exceções
passadas com *note throw(): 711. 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(): 22ae. irá levantar *note AttributeError: 5e4. ou *note
TypeError: 198, enquanto *note throw(): 711. irá apenas levantar a
exceção passada imediatamente.

Quando o iterador subjacente estiver completo, o atributo *note value:
22ab. da instância *note StopIteration: de9. gerada torna-se o valor da
expressão yield.  Ele pode ser definido explicitamente ao levantar *note
StopIteration: de9. 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) - Geradores simples

     A proposta para adicionar geradores e a instrução *note yield: bb8.
     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: 2325,
     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.12 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:
2ea.

 -- 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__(): 1f63, a expressão yield atual
     sempre é avaliada como *note None: 87a.  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: 2326. é retornado para o
     chamador de *note __next__(): 1f63.  Se o gerador sair sem produzir
     outro valor, uma exceção *note StopIteration: de9. será levantada.

     Este método é normalmente chamado implicitamente, por exemplo por
     um laço *note for: 347, ou pela função embutida *note next(): 9ce.

 -- 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(): 22ae. retorna o próximo valor gerado pelo
     gerador, ou levanta *note StopIteration: de9. se o gerador sair sem
     produzir outro valor.  Quando *note send(): 22ae. é chamado para
     iniciar o gerador, ele deve ser chamado com *note None: 87a. 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: de9. 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: 7f8. é
     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__:
     14c2. 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: 15b9. 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(): 19a4.  Se a função geradora já estiver fechada ou levantar
     *note GeneratorExit: 15b9. (por não capturar a exceção), *note
     close(): 19a4. retornará *note None: 87a.  Se o gerador produzir um
     valor, uma exceção *note RuntimeError: 243. é 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(): 19a4. retorna *note None: 87a. 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(): 19a4.


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.13 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: 1230. 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.14 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: 7e2. define ainda mais a função como uma
função *note geradora assíncrona: 2327.

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: c94. em uma função
de corrotina de forma análoga a como um objeto gerador seria usado em
uma instrução *note for: 347.

A chamada de um dos métodos do gerador assíncrono retorna um objeto
*note aguardável: 4c3, 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: 2326. 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__(): 232c. for usado, o resultado será *note None: 87a.  Caso
contrário, se *note asend(): acc. for usado, o resultado será o valor
passado para esse método.

Se um gerador assíncrono encerrar mais cedo por *note break: 17f, 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(): acb. 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: 8ed.  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: 1b0.
Nesse caso, é responsabilidade do laço de eventos ou escalonador que
executa o gerador assíncrono chamar o método *note aclose(): acb. 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(): acb. e executa a
corrotina.  Este 'finalizer' pode ser registrado chamando *note
sys.set_asyncgen_hooks(): 18e1.  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.14/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.15 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__(): 232c, a expressão yield atual sempre
     avalia para *note None: 87a. no objeto aguardável retornado, que,
     quando executado, continuará para a próxima expressão yield.  O
     valor de *note yield_list: 2326. da expressão yield é o valor da
     exceção *note StopIteration: de9. 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: 1cc5, sinalizando que a iteração assíncrona foi
     concluída.

     Este método é normalmente chamado implicitamente por um laço *note
     async for: c94.

 -- 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():
     22ae. 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(): acc. retornará o próximo valor produzido pelo gerador como
     o valor da exceção *note StopIteration: de9. levantada, ou lança
     *note StopAsyncIteration: 1cc5. se o gerador assíncrono sair sem
     produzir outro valor.  Quando *note asend(): acc. é chamado para
     iniciar o gerador assíncrono, ele deve ser chamado com *note None:
     87a. 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: de9. levantada.  Se o gerador assíncrono terminar
     sem produzir outro valor, uma exceção *note StopAsyncIteration:
     1cc5. é 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: 15b9. 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: 15b9. (não capturando a exceção), então o objeto
     aguardável retornado levantará uma exceção *note StopIteration:
     de9.  Quaisquer outros objetos aguardáveis retornados por chamadas
     subsequentes à função geradora assíncrona levantarão uma exceção
     *note StopAsyncIteration: 1cc5.  Se a função geradora assíncrona
     levantar um valor, um *note RuntimeError: 243. 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(): acb. 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: 22fe. | *note attributeref: 2332. | *note subscription: 2333. | *note slicing: 2334. | *note call: 2335.

* 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: 2331. "." *note identifier: 216c.

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__(): dbf. ou o método *note __getattr__(): 6ef.  O método
‘__getattribute__()’ é chamado primeiro e retorna um valor ou levanta
uma *note AttributeError: 5e4. se o atributo não estiver disponível.

Se for levantada uma *note AttributeError: 5e4. 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: 226b. geralmente selecionará um elemento do contêiner.  A
subscrição de uma *note classe genérica: 1a1. geralmente retornará um
objeto *note GenericAlias: 8b6.

     subscription: *note primary: 2331. "[" *note flexible_expression_list: 231a. "]"

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__(): 581. e *note __class_getitem__(): 938.
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__: 2264.

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:
608. 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__(): 581.:

  1. Mapeamentos.  Se o primário for um *note mapeamento: 13b7, 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: 183.

  2. Sequências.  Se o primário for uma *note sequência: 70b, a lista de
     expressões deve ser avaliada como *note int: 19b. ou *note slice:
     689. (conforme discutido na seção seguinte).  Exemplos de classes
     de sequência embutidas incluem as classes *note str: 169, *note
     list: 24c. e *note tuple: 608.

A sintaxe formal não faz nenhuma provisão especial para índices
negativos em *note sequências: 70b.  No entanto, todas as sequências
embutidas fornecem um método *note __getitem__(): 581. 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__(): 581. do
objeto, as subclasses que substituem esse método precisarão adicionar
explicitamente esse suporte.

Uma *note string: 169. é 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:
1a4f.  A sintaxe para um fatiamento:

     slicing:      *note primary: 2331. "[" *note slice_list: 233b. "]"
     slice_list:   *note slice_item: 233c. ("," *note slice_item: 233c.)* [","]
     slice_item:   *note expression: 182. | *note proper_slice: 233d.
     proper_slice: [*note lower_bound: 233e.] ":" [*note upper_bound: 233f.] [ ":" [*note stride: 2340.] ]
     lower_bound:  *note expression: 182.
     upper_bound:  *note expression: 182.
     stride:       *note expression: 182.

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__(): 581. 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: 21cb.) cujos *note start: 223b, *note stop: 223c. e *note step:
223d. 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: 2342.) com uma série possivelmente vazia de *note argumentos:
66f.:

     call:                 *note primary: 2331. "(" [*note argument_list: 2343. [","] | *note comprehension: 2311.] ")"
     argument_list:        *note positional_arguments: 2344. ["," *note starred_and_keywords: 2345.]
                             ["," *note keywords_arguments: 2346.]
                           | *note starred_and_keywords: 2345. ["," *note keywords_arguments: 2346.]
                           | *note keywords_arguments: 2346.
     positional_arguments: *note positional_item: 2347. ("," *note positional_item: 2347.)*
     positional_item:      *note assignment_expression: 2312. | "*" *note expression: 182.
     starred_and_keywords: ("*" *note expression: 182. | *note keyword_item: 2348.)
                           ("," "*" *note expression: 182. | "," *note keyword_item: 2348.)*
     keywords_arguments:   (*note keyword_item: 2348. | "**" *note expression: 182.)
                           ("," *note keyword_item: 2348. | "," "**" *note expression: 182.)*
     keyword_item:         *note identifier: 216c. "=" *note expression: 182.

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__(): 76f. 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: 1ecf. para a
sintaxe das listas formais de *note parâmetros: 21e4.

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: 198. 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: 198. 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(): 3be. para analisar seus argumentos.

Se houver mais argumentos posicionais do que slots de parâmetros
formais, uma exceção *note TypeError: 198. 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: 198. é 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: 1423.  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: 13b7, 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:
198. é 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: 198. é 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: 1ecf.  Quando o bloco de código executa
     uma instrução *note return: 1af, 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: 1af, 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: 1458. 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__(): 76f.; 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: 6ae. em um objeto *note
aguardável: 4c3.  Só pode ser usado dentro de uma *note função de
corrotina: f67.

     await_expr: "await" *note primary: 2331.

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: 234a. | *note primary: 2331.) ["**" *note u_expr: 234e.]

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(): 1a4, 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: b35.  Elevar um número negativo a uma potência
fracionária resulta em um número *note complex: 197.  (Em versões
anteriores, levantava *note ValueError: 2ea.)

Esta operação pode ser personalizada usando os métodos especial *note
__pow__(): 9ca. e *note __rpow__(): 1a5.


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: 234d. | "-" *note u_expr: 234e. | "+" *note u_expr: 234e. | "~" *note u_expr: 234e.

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__(): 2297.

O operador unário ‘+’ (mais) produz seu argumento numérico inalterado; a
operação pode ser substituída pelo método especial *note __pos__():
2298.

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__():
229a.

Em todos os três casos, se o argumento não tiver o tipo adequado, uma
exceção *note TypeError: 198. é 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: 234e. | *note m_expr: 2353. "*" *note u_expr: 234e. | *note m_expr: 2353. "@" *note m_expr: 2353. |
             *note m_expr: 2353. "//" *note u_expr: 234e. | *note m_expr: 2353. "/" *note u_expr: 234e. |
             *note m_expr: 2353. "%" *note u_expr: 234e.
     a_expr: *note m_expr: 2353. | *note a_expr: 2354. "+" *note m_expr: 2353. | *note a_expr: 2354. "-" *note m_expr: 2353.

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 real 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__(): 2277. e *note __rmul__(): 2278.

Alterado na versão 3.14: Se apenas um operando for um número complexo, o
outro operando será convertido em um número de ponto flutuante.

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__(): f6d. e *note __rmatmul__(): f6e.

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: b35.

A operação de divisão pode ser personalizada usando os métodos especiais
*note __truediv__(): 1086. e *note __rtruediv__(): 2285.  A operação de
divisão pelo piso pode ser personalizada usando os métodos especiais
*note __floordiv__(): 16e2. e *note __rfloordiv__(): 2286.

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: b35.  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(): b8f.:
‘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: 8d0.

A operação 'módulo' pode ser personalizada usando os métodos especial
*note __mod__(): 227e. e *note __rmod__(): fc9.

O operador de divisão pelo piso, o operador de módulo e a função *note
divmod(): b8f. 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():
1f42. 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 real 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__(): 2274. e *note __radd__(): 2275.

Alterado na versão 3.14: Se apenas um operando for um número complexo, o
outro operando será convertido em um número de ponto flutuante.

O operador ‘-’ (subtração) produz a diferença de seus argumentos.  Os
argumentos numéricos são primeiro convertidos em um tipo real comum.

Esta operação pode ser personalizada usando os métodos especial *note
__sub__(): 227d. e *note __rsub__(): 2284.

Alterado na versão 3.14: Se apenas um operando for um número complexo, o
outro operando será convertido em um número de ponto flutuante.

   ---------- 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(): 2355. 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: 2354. | *note shift_expr: 2358. ("<<" | ">>") *note a_expr: 2354.

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__(): 227f. e *note __rlshift__(): 2288.
A operação de deslocamento à direita pode ser personalizada usando os
métodos especiais *note __rshift__(): 2280. e *note __rrshift__(): 2289.

Um deslocamento para a direita por 'n' bits é definido como divisão pelo
piso por ‘pow(2,n)’.  Um deslocamento à esquerda por 'n' bits é definido
como multiplicação com ‘pow(2,n)’.


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: 2358. | *note and_expr: 235b. "&" *note shift_expr: 2358.
     xor_expr: *note and_expr: 235b. | *note xor_expr: 235c. "^" *note and_expr: 235b.
     or_expr:  *note xor_expr: 235c. | *note or_expr: 219c. "|" *note xor_expr: 235c.

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__(): 2281. ou *note __rand__(): 228a.

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__(): 2282. ou *note
__rxor__(): 228b.

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__(): 2283. ou *note __ror__(): 228c.


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: 219c. (*note comp_operator: 2360. *note or_expr: 219c.)*
     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(): 3c0. 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: 21c8. 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:
c72, eles herdam o comportamento de comparação padrão de *note object:
c72.  Os tipos podem personalizar seu comportamento de comparação
implementando 'métodos de comparação rica' como *note __lt__(): 149c,
descrito em *note Personalização básica: 2243.

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: 198.  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: 1e91.) e dos tipos de biblioteca padrão *note
     fractions.Fraction: 212. e *note decimal.Decimal: 1fd. 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: 1a2. 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: 192. ou *note
     bytearray: 342.) 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: 169.) são comparadas
     lexicograficamente usando os pontos de código Unicode numéricos (o
     resultado da função embutida *note ord(): 21d6.) de seus
     caracteres.  (2)

     Strings e sequências binárias não podem ser comparadas diretamente.

   * Sequências (instâncias de *note tuple: 608, *note list: 24c. ou
     *note range: b33.) 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: 198.

     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: 183.) 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: 198.

   * Conjuntos (instâncias de *note set: 184. ou *note frozenset: 7e7.)
     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(): 1101, *note max(): 1102. e *note sorted():
     dbb. 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():
     1138.

   * O resultado *note hash(): 7f6. 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(): 8d9.


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: 348. e *note not in: 836. 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__(): 15ab, ‘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__(): 15ab, mas definem *note __iter__(): e5d, ‘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: 348. tivesse
levantado essa exceção.

Por último, o protocolo de iteração de estilo antigo é tentado: se uma
classe define *note __getitem__(): 581, ‘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: 1723.  (Se qualquer outra exceção for levantada, é como se
*note in: 348. levantasse essa exceção).

O operador *note not in: 836. é definido para ter o valor verdade
inverso de *note in: 348.


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: 349. e *note is not: 2364. 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(): 1614.  ‘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: 349, 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: 2368. | *note or_test: 2315. "or" *note and_test: 2368.
     and_test: *note not_test: 2369. | *note and_test: 2368. "and" *note not_test: 2369.
     not_test: *note comparison: 235f. | "not" *note not_test: 2369.

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__():
14d1.

O operador *note not: 2367. 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: 346. nem *note or: 34a. 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: 2367.
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: 216c. ":="] *note expression: 182.

Uma expressão de atribuição (às vezes também chamada de “expressão
nomeada” ou “morsa”) atribui uma *note expression: 182. a um *note
identifier: 216c, ao mesmo tempo que retorna o valor de *note
expression: 182.

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: 2315. ["if" *note or_test: 2315. "else" *note expression: 182.]
     expression:             *note conditional_expression: 219b. | *note lambda_expr: 236d.

Expressões condicionais (às vezes chamadas de “operador ternário”) têm a
prioridade mais baixa de todas as operações Python.

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: 2370.] ":" *note expression: 182.

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: 1ecf. 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: 219c. | *note expression: 182.
     flexible_expression:      *note assignment_expression: 2312. | *note starred_expression: 230f.
     flexible_expression_list: *note flexible_expression: 2372. ("," *note flexible_expression: 2372.)* [","]
     starred_expression_list:  *note starred_expression: 230f. ("," *note starred_expression: 230f.)* [","]
     expression_list:          *note expression: 182. ("," *note expression: 182.)* [","]
     yield_list:               *note expression_list: 2374. | *note starred_expression: 230f. "," [*note starred_expression_list: 2373.]

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: 1423.  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:
235d.

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: 18d.                                 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: 348, *note not in: 836, *note is: 349,    Comparações, incluindo testes de
*note is not: 2364, ‘<’, ‘<=’, ‘>’, ‘>=’, ‘!=’,     pertinência e testes de identidade
‘==’                                                

*note not x: 2367.                                  NEGAÇÃO (NOT) booleana
                                                    
                                                    
*note and: 346.                                     E (AND) booleano
                                                    
                                                    
*note or: 34a.                                      OU (OR) booleano
                                                    
                                                    
*note if: 17d. – ‘else’                             Expressão condicional
                                                    
                                                    
*note lambda: 1499.                                 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: 237e.
                  | *note assert_stmt: 237f.
                  | *note assignment_stmt: 2380.
                  | *note augmented_assignment_stmt: 2381.
                  | *note annotated_assignment_stmt: 2382.
                  | *note pass_stmt: 2383.
                  | *note del_stmt: 2384.
                  | *note return_stmt: 2385.
                  | *note yield_stmt: 2386.
                  | *note raise_stmt: 2387.
                  | *note break_stmt: 2388.
                  | *note continue_stmt: 2389.
                  | *note import_stmt: 238a.
                  | *note future_stmt: 238b.
                  | *note global_stmt: 238c.
                  | *note nonlocal_stmt: 238d.
                  | *note type_stmt: 238e.

* 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: 230f.

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(): 1c1. 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: 2314. "=")+ (*note starred_expression: 230f. | *note yield_expression: 219d.)
     target_list:     *note target: 2392. ("," *note target: 2392.)* [","]
     target:          *note identifier: 216c.
                      | "(" [*note target_list: 2314.] ")"
                      | "[" [*note target_list: 2314.] "]"
                      | *note attributeref: 2332.
                      | *note subscription: 2333.
                      | *note slicing: 2334.
                      | "*" *note target: 2392.

(Veja a seção *note Primárias: 2330. 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: 21cb.).

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: 4a6. ou
          *note nonlocal: 14a3. 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: 14a3, 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:
     198. é 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: 5e4.).  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(): 4ad.

   * 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: 1723. 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__():
     14c7. é 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: 2396. *note augop: 2397. (*note expression_list: 2374. | *note yield_expression: 219d.)
     augtarget:                 *note identifier: 216c. | *note attributeref: 2332. | *note subscription: 2333. | *note slicing: 2334.
     augop:                     "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="
                                | ">>=" | "<<=" | "&=" | "^=" | "|="

(Veja a seção *note Primárias: 2330. 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: 2393. 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: f45. é 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: 2396. ":" *note expression: 182.
                                ["=" (*note starred_expression: 230f. | *note yield_expression: 219d.)]

A diferença para as *note Instruções de atribuição: 22bc. 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 estiverem no escopo de classe ou módulo, as anotações são reunidas em
um *note escopo de anotação: 4a5. avaliado preguiçosamente.  As
anotações podem ser avaliadas usando o atributo *note __annotations__:
455. de uma classe ou módulo, ou usando os recursos do módulo *note
annotationlib: 6.

Se o alvo da atribuição não for simples (um atributo, nó subscrito ou
nome entre parênteses), a anotação nunca será avaliada.

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 como se não houvesse uma anotação presente.  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__(): 14c7. ou *note __setattr__(): 2212.

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: 10a. 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.

Alterado na versão 3.14: As anotações agora têm avaliação preguiçosa em
um *note escopo de anotação: 4a5. separado.  Se o alvo da atribuição não
for simples, as anotações nunca serão avaliadas.

   ---------- 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: 182. ["," *note expression: 182.]

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__: 9d0. e *note
AssertionError: 8ad. 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: 18c.).  O gerador de código atual não
emite código para uma instrução *note assert: b56. 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__: 9d0. 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: 17e. é 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: 2314.

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: 4a6. no mesmo bloco de código.  Tentar excluir um nome
desvinculado levanta uma exceção *note NameError: 44f.

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: 2374.]

*note return: 1af. 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, ‘None’ será substituído.

*note return: 1af. deixa a chamada da função atual com a lista de
expressões (ou ‘None’) como valor de retorno.

Quando *note return: 1af. passa o controle de uma instrução *note try:
8ed. com uma cláusula *note finally: 1b0, essa cláusula ‘finally’ é
executada antes de realmente sair da função.

Em uma função geradora, a instrução *note return: 1af. indica que o
gerador está pronto e fará com que *note StopIteration: de9. seja
gerado.  O valor retornado (se houver) é usado como argumento para
construir *note StopIteration: de9. e se torna o atributo *note
StopIteration.value: 22ab.

Em uma função de gerador assíncrono, uma instrução *note return: 1af.
vazia indica que o gerador assíncrono está pronto e fará com que *note
StopAsyncIteration: 1cc5. seja gerado.  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: 219d.

Uma instrução *note yield: bb8. é semanticamente equivalente a uma *note
expressão yield: 2324.  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: 1257. e são usadas apenas no corpo da função geradora.
Usar *note yield: bb8. 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: bb8, consulte a seção
*note Expressões yield: 2324.


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: 182. ["from" *note expression: 182.]]

Se nenhuma expressão estiver presente, *note raise: 7f8. reativa a
exceção que está sendo tratada no momento, que também é conhecida como
'exceção ativa'.  Se não houver uma exceção ativa no momento, uma
exceção *note RuntimeError: 243. é levantada indicando que isso é um
erro.

Caso contrário, *note raise: 7f8. avalia a primeira expressão como o
objeto de exceção.  Deve ser uma subclasse ou uma instância de *note
BaseException: 7cc.  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__: 14c2.  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(): 23a0. (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__: 14c4. (que
é gravável).  Se a expressão for uma classe de exceção, a classe será
instanciada e a instância de exceção resultante será anexada à exceção
levantada como o atributo ‘__cause__’.  Se a exceção levantada não for
tratada, ambas as exceções serão impressas:

     >>> try:
     ...     print(1 / 0)
     ... except Exception as exc:
     ...     raise RuntimeError("Something bad happened") from exc
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         print(1 / 0)
               ~~^~~
     ZeroDivisionError: division by zero

     The above exception was the direct cause of the following exception:

     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 se uma nova exceção for
levantada quando uma exceção já estiver sendo tratada.  Uma exceção pode
ser tratada quando uma cláusula *note except: 1ab. ou *note finally:
1b0, ou uma instrução *note with: 186, é usada.  A exceção anterior é
então anexada como o atributo *note __context__: 14c3. 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: 87a. 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: 22c7, e informações sobre como lidar com exceções estão
na seção *note A instrução try: 8ed.

Alterado na versão 3.3: *note None: 87a. agora é permitido como ‘Y’ em
‘raise X from Y’.

Adicionado o atributo *note __suppress_context__: 23a1. 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: 1ab, 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: 17f. só pode ocorrer sintaticamente aninhado em um laço
*note for: 347. ou *note while: 18c3, mas não aninhado em uma função ou
definição de classe dentro desse laço.

Ele termina o laço de fechamento mais próximo, pulando a cláusula
opcional ‘else’ se o laço tiver uma.

Se um laço *note for: 347. é encerrado por *note break: 17f, o alvo de
controle do laço mantém seu valor atual.

Quando *note break: 17f. passa o controle de uma instrução *note try:
8ed. com uma cláusula *note finally: 1b0, 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: 180. só pode ocorrer sintaticamente aninhado em um laço
*note for: 347. ou *note while: 18c3, mas não aninhado em uma função ou
definição de classe dentro desse laço.  Ele continua com o próximo ciclo
do laço de fechamento mais próximo.

Quando *note continue: 180. passa o controle de uma instrução *note try:
8ed. com uma cláusula *note finally: 1b0, essa cláusula ‘finally’ é
executada antes 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: 23a5. ["as" *note identifier: 216c.] ("," *note module: 23a5. ["as" *note identifier: 216c.])*
                      | "from" *note relative_module: 23a6. "import" *note identifier: 216c. ["as" *note identifier: 216c.]
                      ("," *note identifier: 216c. ["as" *note identifier: 216c.])*
                      | "from" *note relative_module: 23a6. "import" "(" *note identifier: 216c. ["as" *note identifier: 216c.]
                      ("," *note identifier: 216c. ["as" *note identifier: 216c.])* [","] ")"
                      | "from" *note relative_module: 23a6. "import" "*"
     module:          (*note identifier: 216c. ".")* *note identifier: 216c.
     relative_module: "."* *note module: 23a5. | "."+

A instrução de importação básica (sem cláusula *note from: 14a7.) é
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: 7ed.

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: 21f9, 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 reservada ‘as’, o nome a
     seguir é vinculado diretamente ao módulo importado.

   * Se nenhum outro nome for especificado e o módulo que está sendo
     importado for um módulo de nível superior, o nome do módulo será
     vinculado ao espaço de nomes local como uma referência ao módulo
     importado

   * Se o módulo que está sendo importado 'não' for um módulo de nível
     superior, o nome do pacote de nível superior que contém o módulo
     será vinculado ao espaço de nomes local como uma referência ao
     pacote de nível superior.  O módulo importado deve ser acessado
     usando seu nome completo e não diretamente

O formulário *note from: 14a7. usa um processo um pouco mais complexo:

  1. encontra o módulo especificado na cláusula *note from: 14a7,
     carregando e inicializando-o se necessário;

  2. para cada um dos identificadores especificados nas cláusulas *note
     import: 7ed.:

       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:
          64f. é 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: 7ed.

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: 18e.

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: 14a7. 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: 22f1.

*note importlib.import_module(): 731. é fornecida para dar suporte a
aplicações que determinam dinamicamente os módulos a serem carregados.

Levanta um *note evento de auditoria: 1b5d. ‘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: 23a8. ["as" *note identifier: 216c.]
                  ("," *note feature: 23a8. ["as" *note identifier: 216c.])*
                  | "from" "__future__" "import" "(" *note feature: 23a8. ["as" *note identifier: 216c.]
                  ("," *note feature: 23a8. ["as" *note identifier: 216c.])* [","] ")"
     feature:     *note identifier: 216c.

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():
49c. e *note compile(): 4ab. 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(): 4ab. – 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: 16c9, 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: 216c. ("," *note identifier: 216c.)*

A instrução *note global: 4a6. 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: 18e. é
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: 48b.).

'Nota do programador:' *note global: 4a6. é 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(): 49c. 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(): 49d. e *note compile(): 4ab.


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: 216c. ("," *note identifier: 216c.)*

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: 14a3. 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: 18e. será levantada.

A instrução *note nonlocal: 14a3. se aplica a todo o escopo de uma
função ou corpo da classe.  Uma exceção *note SyntaxError: 18e. é
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: 14a3.

'Nota do programador:' *note nonlocal: 14a3. é 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: 4a6.

   ---------- 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: 216c. [*note type_params: 23ac.] "=" *note expression: 182.

A instrução ‘type’ declara um apelido de tipo, que é uma instância de
*note typing.TypeAliasType: 2ad.

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: 4a5, 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: 67a.).  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: 5a6. após o nome.  Veja *note Apelidos de tipo
genérico: 679. para mais.

‘type’ é uma *note palavra reservada contextual: a03.

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: 181, *note while: 18c3. e *note for: 347.
implementam construções tradicionais de controle do fluxo de execução.
*note try: 8ed. 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: 186. 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: 181. a seguinte cláusula *note else: 17c.
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(): 116b. são executadas:

     if x < y < z: print(x); print(y); print(z)

Resumindo:

     compound_stmt: *note if_stmt: 23b2.
                    | *note while_stmt: 23b3.
                    | *note for_stmt: 23b4.
                    | *note try_stmt: 23b5.
                    | *note with_stmt: 23b6.
                    | *note match_stmt: 23b7.
                    | *note funcdef: 23b8.
                    | *note classdef: 23b9.
                    | *note async_with_stmt: 23ba.
                    | *note async_for_stmt: 23bb.
                    | *note async_funcdef: 23bc.
     suite:         *note stmt_list: 23be. NEWLINE | NEWLINE INDENT *note statement: 23bf.+ DEDENT
     statement:     *note stmt_list: 23be. NEWLINE | *note compound_stmt: 23b1.
     stmt_list:     *note simple_stmt: 237d. (";" *note simple_stmt: 237d.)* [";"]

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: 17c. pendurado” é resolvido em Python obrigando que
instruções *note if: 181. 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::
* Anotações: Anotações<2>.


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: 181. é usada para execução condicional:

     if_stmt: "if" *note assignment_expression: 2312. ":" *note suite: 23bd.
              ("elif" *note assignment_expression: 2312. ":" *note suite: 23bd.)*
              ["else" ":" *note suite: 23bd.]

Ele seleciona exatamente um dos conjuntos avaliando as expressões uma
por uma até que uma seja considerada verdadeira (veja a seção *note
Operações booleanas: 2365. para a definição de verdadeiro e falso);
então esse conjunto é executado (e nenhuma outra parte da instrução
*note if: 181. é executada ou avaliada).  Se todas as expressões forem
falsas, o conjunto da cláusula *note else: 17c, 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: 18c3. é usada para execução repetida desde que
uma expressão seja verdadeira:

     while_stmt: "while" *note assignment_expression: 2312. ":" *note suite: 23bd.
                 ["else" ":" *note suite: 23bd.]

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: 17f. executada no primeiro conjunto termina o
laço sem executar o conjunto da cláusula ‘else’.  Uma instrução *note
continue: 180. 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: 347. é 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: 2314. "in" *note starred_expression_list: 2373. ":" *note suite: 23bd.
               ["else" ":" *note suite: 23bd.]

A expressão *note starred_expression_list: 2373. é avaliada uma vez;
deve produzir um objeto *note iterável: 1423.  Um *note iterador: 4c2. é
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: 22bc.), 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 laço termina.

Uma instrução *note break: 17f. executada no primeiro conjunto termina o
loop sem executar o conjunto da cláusula ‘else’.  Uma instrução *note
continue: 180. 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(): b33. 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: 23c4. | *note try2_stmt: 23c5. | *note try3_stmt: 23c6.
     try1_stmt: "try" ":" *note suite: 23bd.
                ("except" [*note expression: 182. ["as" *note identifier: 216c.]] ":" *note suite: 23bd.)+
                ["else" ":" *note suite: 23bd.]
                ["finally" ":" *note suite: 23bd.]
     try2_stmt: "try" ":" *note suite: 23bd.
                ("except" "*" *note expression: 182. ["as" *note identifier: 216c.] ":" *note suite: 23bd.)+
                ["else" ":" *note suite: 23bd.]
                ["finally" ":" *note suite: 23bd.]
     try3_stmt: "try" ":" *note suite: 23bd.
                "finally" ":" *note suite: 23bd.

Informações adicionais sobre exceções podem ser encontradas na seção
*note Exceções: 22c7, e informações sobre como usar a instrução *note
raise: 7f8. para gerar exceções podem ser encontradas na seção *note A
instrução raise: 7f8.

Alterado na versão 3.14: Suporte para a remoção opcional de parênteses
de agrupamento ao usar vários tipos de exceção.  Veja PEP 758(1).

* Menu:

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

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0758/


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: 8ed, nenhum
manipulador de exceção é executado.  Quando uma exceção ocorre no
conjunto ‘try’, uma busca por um manipulador de exceção é iniciada.
Essa busca inspeciona as cláusulas ‘except’ por vez até que uma seja
encontrada 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.
Parênteses podem ser descartados se vários tipos de exceção forem
fornecidos e a cláusula ‘as’ não for usada.  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: 13b2. 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 é tratado como se toda a instrução *note try:
8ed. 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: 8ed.  (Isso significa que se existirem
dois manipuladores aninhados para a mesma exceção, e a exceção ocorrer
na cláusula ‘try’ do manipulador interno, o manipulador externo não
tratará a exceção.)

Quando uma exceção foi atribuída usando ‘as target’, ela é limpa no
final da cláusula ‘except’.  É como se

     except E as N:
         foo

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 referenciá-la após a cláusula ‘except’.  As exceções são limpas
porque, com o traceback (situação da pilha de execução) anexado a elas,
elas formam um ciclo de referência com o quadro de pilha, mantendo todos
os locais nesse quadro vivos até que ocorra a próxima coleta de lixo.

Antes de um conjunto de cláusulas ‘except’ ser executado, a exceção é
armazenada no módulo *note sys: df, onde pode ser acessada de dentro do
corpo da cláusula ‘except’ chamando *note sys.exception(): 890.  Ao sair
de um manipulador de exceções, a exceção armazenada no módulo *note sys:
df. é 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: 1b0. 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*’
..........................

The ‘except*’ clause(s) specify one or more handlers for groups of
exceptions (*note BaseExceptionGroup: 55f. instances).  A *note try:
8ed. statement can have either *note except: 1ab. or ‘except*’ clauses,
but not both.  The exception type for matching is mandatory in the case
of ‘except*’, so ‘except*:’ is a syntax error.  The type is interpreted
as in the case of ‘except’, but matching is performed on the exceptions
contained in the group that is being handled.  An *note TypeError: 198.
is raised if a matching type is a subclass of ‘BaseExceptionGroup’,
because that would have ambiguous semantics.

When an exception group is raised in the try block, each ‘except*’
clause splits (see *note split(): 1832.) it into the subgroups of
matching and non-matching exceptions.  If the matching subgroup is not
empty, it becomes the handled exception (the value returned from *note
sys.exception(): 890.) and assigned to the target of the ‘except*’
clause (if there is one).  Then, the body of the ‘except*’ clause
executes.  If the non-matching subgroup is not empty, it is processed by
the next ‘except*’ in the same manner.  This continues until all
exceptions in the group have been matched, or the last ‘except*’ clause
has run.

After all ‘except*’ clauses execute, the group of unhandled exceptions
is merged with any exceptions that were raised or re-raised from within
‘except*’ clauses.  This merged exception group propagates on.:

     >>> 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
         +------------------------------------

If the exception raised from the *note try: 8ed. block is not an
exception group and its type matches one of the ‘except*’ clauses, it is
caught and wrapped by an exception group with an empty message string.
This ensures that the type of the target ‘e’ is consistently *note
BaseExceptionGroup: 55f.:

     >>> try:
     ...     raise BlockingIOError
     ... except* BlockingIOError as e:
     ...     print(repr(e))
     ...
     ExceptionGroup('', (BlockingIOError()))

*note break: 17f, *note continue: 180. and *note return: 1af. cannot
appear in an ‘except*’ clause.


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: 8ed, nenhuma exceção foi levantada e nenhuma
instrução *note return: 1af, *note continue: 180. ou *note break: 17f.
foi executada.  Exceções na cláusula ‘else’ não são manipuladas pelas
cláusulas *note except: 1ab. precedentes.


File: python.info,  Node: Cláusula finally,  Prev: Cláusula else,  Up: A instrução try

4.8.4.4 Cláusula ‘finally’
..........................

Se ‘finally’ estiver presente, especifica um manipulador de “limpeza”.
A cláusula *note try: 8ed. é executada, incluindo quaisquer cláusulas
*note except: 1ab. e *note else: 23ca.  Se uma exceção ocorrer em
qualquer uma das cláusulas e não for tratada, a exceção será salva
temporariamente.  A cláusula ‘finally’ é executada.  Se houver uma
exceção salva, ela será levantada novamente no final da cláusula
‘finally’.  Se a cláusula ‘finally’ levantar outra exceção, a exceção
salva será definida como o contexto da nova exceção.  Se a cláusula
‘finally’ executar uma instrução *note return: 1af, *note break: 17f. ou
*note continue: 180, a exceção salva será descartada.  Por exemplo, esta
função retorna 42.

     def f():
         try:
             1/0
         finally:
             return 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: 1af, *note break: 17f. ou *note
continue: 180. é executada no conjunto *note try: 8ed. 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: 1af. executada.  Como a cláusula ‘finally’ sempre é
executada, uma instrução ‘return’ executada na cláusula ‘finally’ sempre
será a última executada.  A função a seguir retorna “finally”.

     def foo():
         try:
             return 'try'
         finally:
             return 'finally'

Alterado na versão 3.8: Antes do Python 3.8, uma instrução *note
continue: 180. era ilegal na cláusula ‘finally’ devido a um problema com
a implementação.

Alterado na versão 3.14: O compilador emite uma exceção *note
SyntaxWarning: 1ae. quando um *note return: 1af, *note break: 17f. ou
*note continue: 180. aparece em um bloco ‘finally’ (veja PEP 765(1)).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0765/


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: 186. é usada para envolver em um invólucro 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: 229f.).  Isso permite que padrões comuns de uso de *note try:
8ed.…*note except: 1ab.…*note finally: 1b0. sejam encapsulados para
reutilização conveniente.

     with_stmt:          "with" ( "(" *note with_stmt_contents: 23ce. ","? ")" | *note with_stmt_contents: 23ce. ) ":" *note suite: 23bd.
     with_stmt_contents: *note with_item: 23cf. ("," *note with_item: 23cf.)*
     with_item:          *note expression: 182. ["as" *note target: 2392.]

A execução da instrução *note with: 186. com um “item” ocorre da
seguinte maneira:

  1. A expressão de contexto (a expressão fornecida em *note with_item:
     23cf.) é avaliada para obter um gerenciador de contexto.

  2. O *note __enter__(): 7d9. do gerenciador de contexto é carregado
     para uso posterior.

  3. O *note __exit__(): 14fc. do gerenciador de contexto é carregado
     para uso posterior.

  4. O método *note __enter__(): 7d9. do gerenciador de contexto é
     invocado.

  5. Se um alvo foi incluído na instrução *note with: 186, o valor de
     retorno de *note __enter__(): 7d9. é atribuído a ele.

          Nota: A instrução *note with: 186. garante que se o método
          *note __enter__(): 7d9. retornar sem um erro, então *note
          __exit__(): 14fc. sempre será chamado.  Assim, se ocorrer um
          erro durante a atribuição à lista de alvos, ele será tratado
          da mesma forma que um erro ocorrendo dentro do conjunto seria.
          Veja a etapa 7 abaixo.

  6. O conjunto é executado.

  7. O método *note __exit__(): 14fc. 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__(): 14fc.  Caso contrário, três argumentos *note None: 87a.
     são fornecidos.

     Se o conjunto foi encerrado devido a uma exceção, e o valor de
     retorno do método *note __exit__(): 14fc. foi falso, a exceção é
     levantada novamente.  Se o valor de retorno era verdadeiro, a
     exceção é suprimida, e a execução continua com a instrução após a
     instrução *note with: 186.

     Se o conjunto foi encerrado por qualquer motivo diferente de uma
     exceção, o valor de retorno de *note __exit__(): 14fc. é ignorado e
     a execução prossegue no local normal para o tipo de saída que foi
     realizada.

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: 186. 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: 186.

   ---------- 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: 23d2. ":" NEWLINE INDENT *note case_block: 23d3.+ DEDENT
     subject_expr: `!star_named_expression` "," `!star_named_expressions`?
                   | `!named_expression`
     case_block:   'case' *note patterns: 23d4. [*note guard: 23d5.] ":" `!block`

     Nota: Esta seção usa aspas simples para denotar *note palavras
     reservadas contextuais: a03.

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: a03.

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:
     23d7.

  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:
181. 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: 23db. cujo lado esquerdo é irrefutável

   * *note Padrões OR: 23dc. contendo pelo menos um padrão irrefutável

   * *note Padrões de captura: 23dd.

   * *note Padrões curingas: a05.

   * 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: 23df. | *note pattern: 23e0.
     pattern:        *note as_pattern: 23e1. | *note or_pattern: 23e2.
     closed_pattern: | *note literal_pattern: 23e4.
                     | *note capture_pattern: 23e5.
                     | *note wildcard_pattern: 23e6.
                     | *note value_pattern: 23e7.
                     | *note group_pattern: 23e8.
                     | *note sequence_pattern: 23e9.
                     | *note mapping_pattern: 23ea.
                     | *note class_pattern: 23eb.

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: 23e3.+

Somente o último subpadrão pode ser *note irrefutável: 23d9, 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: 23cc. de um assunto.  Sintaxe:

     as_pattern: *note or_pattern: 23e2. "as" *note capture_pattern: 23e5.

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: 2173. em
Python.  Sintaxe:

     literal_pattern: *note signed_number: 23f0.
                      | *note signed_number: 23f0. "+" NUMBER
                      | *note signed_number: 23f0. "-" NUMBER
                      | *note strings: 230b.
                      | "None"
                      | "True"
                      | "False"
     signed_number:   ["-"] NUMBER

A regra ‘strings’ e o token ‘NUMBER’ são definidos na *note gramática
padrão do Python: 23f1.  Strings entre aspas triplas são suportadas.
Strings brutas e strings de bytes são suportadas.  *note Literais de
strings formatadas: 19a. e *note Literais de strings templates
(t-strings): 176b. não são suportadas.

As formas ‘signed_number '+' NUMBER’ e ‘signed_number '-' NUMBER’ são
para expressar *note números complexos: 21b7.; 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: 349. é 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:
23e6.

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:
4a6. ou *note nonlocal: 14a3. 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: a03. 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: 23f6.
     attr:          *note name_or_attr: 23f7. "." NAME
     name_or_attr:  *note attr: 23f6. | NAME

O nome pontilhado no padrão é pesquisado usando as *note regras de
resolução de nomes: 22bf. 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: 23e0. ")"

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: 23fc.] "]"
                             | "(" [*note open_sequence_pattern: 23df.] ")"
     open_sequence_pattern:  *note maybe_star_pattern: 23fd. "," [*note maybe_sequence_pattern: 23fc.]
     maybe_sequence_pattern: ",".*note maybe_star_pattern: 23fd.+ ","?
     maybe_star_pattern:     *note star_pattern: 23fe. | *note pattern: 23e0.
     star_pattern:           "*" (*note capture_pattern: 23e5. | *note wildcard_pattern: 23e6.)

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: 23f8.  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(): 835. (ou seja, via protocolo *note __len__(): 2245.).
          Esse comprimento pode ser armazenado em cache pelo
          interpretador de forma similar a *note padrões de valor: 23f5.

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: 13c0.

   * uma classe Python que foi registrada como *note
     collections.abc.Sequence: 13c0.

   * uma classe embutida que tem seu bit *note Py_TPFLAGS_SEQUENCE:
     1b48. (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: 4b8.

   * *note collections.deque: 7e9.

   * *note list: 24c.

   * *note memoryview: 165.

   * *note range: b33.

   * *note tuple: 608.

     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: 2401.] "}"
     items_pattern:       ",".*note key_value_pattern: 2402.+ ","?
     key_value_pattern:   (*note literal_pattern: 23e4. | *note value_pattern: 23e7.) ":" *note pattern: 23e0.
                          | *note double_star_pattern: 2403.
     double_star_pattern: "**" *note capture_pattern: 23e5.

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: 18e.  Duas chaves
que de outra forma têm o mesmo valor levantarão *note ValueError: 2ea.
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:
     18e. é levantada para valores literais duplicados; ou *note
     ValueError: 2ea. 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__(): 13b9. ou *note __getitem__(): 581.

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: abd.

   * uma classe Python que foi registrada como *note
     collections.abc.Mapping: abd.

   * uma classe embutida que tem seu bit *note Py_TPFLAGS_MAPPING: 1b47.
     (CPython) definido

   * uma classe que herda de qualquer uma das anteriores

As classes de biblioteca padrão *note dict: 183. e *note
types.MappingProxyType: 68d. 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: 23f7. "(" [*note pattern_arguments: 2406. ","?] ")"
     pattern_arguments:   *note positional_patterns: 2407. ["," *note keyword_patterns: 2408.]
                          | *note keyword_patterns: 2408.
     positional_patterns: ",".*note pattern: 23e0.+
     keyword_patterns:    ",".*note keyword_pattern: 2409.+
     keyword_pattern:     NAME "=" *note pattern: 23e0.

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: f38. , levanta *note TypeError: 198.

  2. Se o valor do assunto não for uma instância de ‘name_or_attr’
     (testado via *note isinstance(): 2ac.), 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:

     I. A palavra-chave é procurada como um atributo no assunto.

             * Se isso levantar uma exceção diferente de *note
               AttributeError: 5e4, a exceção será exibida.

             * Se isso levantar *note AttributeError: 5e4, 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.

     II. 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__: 1b62. na classe ‘name_or_attr’ antes da
     correspondência:

     I. 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: 198. será levantada.

             * Se houver mais padrões posicionais do que
               ‘len(cls.__match_args__)’, *note TypeError: 198. 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: 198. é
               levantada.

             * Se houver argumentos nomeados duplicados, *note
               TypeError: 198. será levantada.

          Ver também
          ..........

          *note Customizando argumentos posicionais na classe
          correspondência de padrão: 22a2.

     II. Uma vez que todos os padrões posicionais foram convertidos em padrões de argumentos nomeados,

          a partida prossegue como se houvesse apenas padrões de
          argumentos nomeados.

     Para os seguintes tipos embutidos, o tratamento de subpadrões
     posicionais é diferente:

        * *note bool: 3c0.

        * *note bytearray: 342.

        * *note bytes: 192.

        * *note dict: 183.

        * *note float: 196.

        * *note frozenset: 7e7.

        * *note int: 19b.

        * *note list: 24c.

        * *note set: 184.

        * *note str: 169.

        * *note tuple: 608.

     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: 21cb.):

     funcdef:                   [*note decorators: 240b.] "def" *note funcname: 240c. [*note type_params: 23ac.] "(" [*note parameter_list: 2370.] ")"
                                ["->" *note expression: 182.] ":" *note suite: 23bd.
     decorators:                *note decorator: 240d.+
     decorator:                 "@" *note assignment_expression: 2312. NEWLINE
     parameter_list:            *note defparameter: 240e. ("," *note defparameter: 240e.)* "," "/" ["," [*note parameter_list_no_posonly: 240f.]]
                                  | *note parameter_list_no_posonly: 240f.
     parameter_list_no_posonly: *note defparameter: 240e. ("," *note defparameter: 240e.)* ["," [*note parameter_list_starargs: 2410.]]
                                | *note parameter_list_starargs: 2410.
     parameter_list_starargs:   "*" [*note star_parameter: 2411.] ("," *note defparameter: 240e.)* ["," [*note parameter_star_kwargs: 2412.]]
                                | "*" ("," *note defparameter: 240e.)+ ["," [*note parameter_star_kwargs: 2412.]]
                                | *note parameter_star_kwargs: 2412.
     parameter_star_kwargs:     "**" *note parameter: 2413. [","]
     parameter:                 *note identifier: 216c. [":" *note expression: 182.]
     star_parameter:            *note identifier: 216c. [":" ["*"] *note expression: 182.]
     defparameter:              *note parameter: 2413. ["=" *note expression: 182.]
     funcname:                  *note identifier: 216c.

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: 92f.  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: 2312. válida.  Anteriormente, a gramática era
muito mais restritiva; veja PEP 614(2) para detalhes.

Uma lista de *note parâmetros de tipo: 5a6. 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__: 21e6. da função.
Veja *note Funções genéricas: 677. 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: 21e4. 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: 66f.
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: f71.  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: 1ed0. 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.
Veja *note Anotações: 2415. para mais informações sobre anotações.

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: 1499.  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: 1649.” 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: 21df.
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__: 13d5. da
função e, portanto, no *note docstring: 2414. 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: 21cb.):

     classdef:    [*note decorators: 240b.] "class" *note classname: 2417. [*note type_params: 23ac.] [*note inheritance: 2418.] ":" *note suite: 23bd.
     inheritance: "(" [*note argument_list: 2343.] ")"
     classname:   *note identifier: 216c.

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:
2255. 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: c72.; 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: 21df.), 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__: e4b. 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: 2255.

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: 2312. válida.  Anteriormente, a gramática era
muito mais restritiva; veja PEP 614(2) para detalhes.

Uma lista de *note parâmetros de tipo: 5a6. 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__: 220d. da classe.  Veja *note Classes genéricas: 676.
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: e3d.
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) - Decoradores de classe

     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__: 1f4a. do espaço de
nomes e, portanto, no *note docstring: 2414. 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: 240b.] "async" "def" *note funcname: 240c. "(" [*note parameter_list: 2370.] ")"
                    ["->" *note expression: 182.] ":" *note suite: 23bd.

A execução de corrotinas do Python pode ser suspensa e retomada em
muitos pontos (consulte *note coroutine: 6ae.).  As expressões *note
await: 18d, *note async for: c94. e *note async with: 185. 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: 18e. 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: 23b4.

Um *note iterável assíncrono: f68. fornece um método ‘__aiter__’ que
retorna diretamente um *note iterador assíncrono: 4c1, 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__(): dea. e *note __anext__(): 17e8. para
detalhes.

Ocorre uma *note SyntaxError: 18e. 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: 23b6.

Um *note gerenciador de contexto assíncrono: 7e5. é um *note gerenciador
de contexto: 1e0. 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__(): 22b2. e *note __aexit__(): 18e5. para
detalhes.

Ocorre uma *note SyntaxError: 18e. 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,  Next: Anotações<2>,  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: 241e. ("," *note type_param: 241e.)* "]"
     type_param:   *note typevar: 241f. | *note typevartuple: 2420. | *note paramspec: 2421.
     typevar:      *note identifier: 216c. (":" *note expression: 182.)? ("=" *note expression: 182.)?
     typevartuple: "*" *note identifier: 216c. ("=" *note expression: 182.)?
     paramspec:    "**" *note identifier: 216c. ("=" *note expression: 182.)?

*note Funções: 1649. (incluindo *note corrotinas: 7e2.), *note classes:
14d3. e *note apelidos de tipo: 661. 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: 4a5.) 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__: 2422. listando seus parâmetros de tipo.

Existem três espécies de parâmetros de tipo:

   * *note typing.TypeVar: 480, introduzido por um nome simples (por
     exemplo, ‘T’).  Semanticamente, isso representa um único tipo para
     um verificador de tipos.

   * *note typing.TypeVarTuple: 482, 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: 481, 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: 480. 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: 4a5. separado.

*note typing.TypeVarTuple: 482.s e *note typing.ParamSpec: 481.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:
4a5. 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: 562.

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: 4a5, 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: 10a.; ao invés disso é criada uma
instância de *note typing.TypeVar: 480. 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: 67a. da delimitação da *note
TypeVar: 480, 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: 4a5, 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: 18ad.
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: 661. 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: 67a. 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: 4a5.  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: Anotações<2>,  Prev: Listas de parâmetros de tipo,  Up: Instruções compostas

4.8.11 Anotações
----------------

Alterado na versão 3.14: Anotações são agora avaliados preguiçosamente
por padrão.

Variáveis e parâmetros de função podem conter *note anotações: 15c,
criadas adicionando dois pontos após o nome, seguidos de uma expressão:

     x: annotation = 1
     def f(param: annotation): ...

As funções também podem ter uma anotação de retorno seguindo uma seta:

     def f() -> annotation: ...

Anotações são convencionalmente usadas para *note dicas de tipo: 2262,
mas isso não é imposto pela linguagem e, em geral, anotações podem
conter expressões arbitrárias.  A presença de anotações não altera a
semântica de tempo de execução do código, exceto se algum mecanismo for
usado para introspectar e utilizar as anotações (como *note dataclasses:
33. ou *note functools.singledispatch(): 840.).

Por padrão, as anotações são avaliadas preguiçosamente em um *note
escopo de anotações: 4a5.  Isso significa que elas não são avaliadas
quando o código que contém a anotação é avaliado.  Em vez disso, o
interpretador salva informações que podem ser usadas para avaliar a
anotação posteriormente, se solicitado.  O módulo *note annotationlib:
6. fornece ferramentas para avaliar anotações.

Se *note instrução future: 45a. ‘from __future__ import annotations’
estiver presente, todas as anotações serão armazenadas como strings:

     >>> from __future__ import annotations
     >>> def f(param: annotation): ...
     >>> f.__annotations__
     {'param': 'annotation'}

Esta instrução future será descontinuada e removida em uma versão futura
do Python, mas não antes do Python 3.13 chegar ao fim de sua vida útil
(consulte PEP 749(1)).  Quando usada, ferramentas de introspecção como
*note annotationlib.get_annotations(): 456. e *note
typing.get_type_hints(): 8b5. têm menor probabilidade de resolver
anotações em tempo de execução.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0749/


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:
df. (serviços de sistema diversos), *note builtins: 13. (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: 1a8. '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: 23bf.)* ENDMARKER

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(): 49c.;


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: 23be.] NEWLINE | *note compound_stmt: 23b1. NEWLINE | ENDMARKER

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(): 49d. é usada para uma entrada de expressão.  Ela
ignora espaços à esquerda.  O argumento em string para *note eval():
49d. deve ter a seguinte forma:

     eval_input: *note expression_list: 2374. NEWLINE* ENDMARKER


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 usada aqui é a mesma dos documentos anteriores e é descrita na
seção *note notação: 212f, exceto por uma complicação extra:

   * ‘~’ (“cut”): compromete-se com a alternativa atual e falha na
     regra, mesmo que ela não seja analisada

     # 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 { _PyPegen_register_stmts(p ,
                                (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a)
                             ) }
         | a[asdl_stmt_seq*]=simple_stmts { a }

     single_compound_stmt[asdl_stmt_seq*]:
         | a=compound_stmt {
             _PyPegen_register_stmts(p, (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a)) }

     statement_newline[asdl_stmt_seq*]:
         | a=single_compound_stmt NEWLINE { 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' pass_stmt
         | &'del' del_stmt
         | &'yield' yield_stmt
         | &'assert' assert_stmt
         | &'break' break_stmt
         | &'continue' continue_stmt
         | &'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=annotated_rhs !'=' tc=[TYPE_COMMENT] {
              _PyAST_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
         | a=single_target b=augassign ~ c=annotated_rhs {
              _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) }

     pass_stmt[stmt_ty]:
         | 'pass' { _PyAST_Pass(EXTRA) }

     break_stmt[stmt_ty]:
         | 'break' { _PyAST_Break(EXTRA) }

     continue_stmt[stmt_ty]:
         | 'continue' { _PyAST_Continue(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]:
         | invalid_import_from_as_name
         | 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]:
         | invalid_dotted_as_name
         | 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 ':' b=block {
             _PyAST_ExceptHandler(e, NULL, b, EXTRA) }
         | 'except' e=expression 'as' t=NAME ':' b=block {
             _PyAST_ExceptHandler(e, ((expr_ty) t)->v.Name.id, b, EXTRA) }
         | 'except' e=expressions ':' b=block {
             CHECK_VERSION(
                 excepthandler_ty,
                 14,
                 "except expressions without parentheses are",
                 _PyAST_ExceptHandler(e, 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 ':' b=block {
             _PyAST_ExceptHandler(e, NULL, b, EXTRA) }
         | 'except' '*' e=expression 'as' t=NAME ':' b=block {
             _PyAST_ExceptHandler(e, ((expr_ty) t)->v.Name.id, b, EXTRA) }
         | 'except' '*' e=expressions ':' b=block {
             CHECK_VERSION(
                 excepthandler_ty,
                 14,
                 "except expressions without parentheses are",
                 _PyAST_ExceptHandler(e,  NULL, b, EXTRA)) }
         | invalid_except_star_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
         | &(STRING|FSTRING_START|TSTRING_START) 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) }
         | invalid_type_param
         | '*' a=NAME b=[type_param_starred_default] { _PyAST_TypeVarTuple(a->v.Name.id, b, EXTRA) }
         | '**' 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|TSTRING_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_fstring_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) }

     tstring_format_spec_replacement_field[expr_ty]:
         | '{' a=annotated_rhs debug_expr='='? conversion=[fstring_conversion] format=[tstring_full_format_spec] rbrace='}' {
             _PyPegen_formatted_value(p, a, debug_expr, conversion, format, rbrace, EXTRA) }
         | invalid_tstring_replacement_field
     tstring_format_spec[expr_ty]:
         | t=TSTRING_MIDDLE { _PyPegen_decoded_constant_from_token(p, t) }
         | tstring_format_spec_replacement_field
     tstring_full_format_spec[ResultTokenWithMetadata*]:
         | colon=':' spec=tstring_format_spec* { _PyPegen_setup_full_format_spec(p, colon, (asdl_expr_seq *) spec, EXTRA) }
     tstring_replacement_field[expr_ty]:
         | '{' a=annotated_rhs debug_expr='='? conversion=[fstring_conversion] format=[tstring_full_format_spec] rbrace='}' {
             _PyPegen_interpolation(p, a, debug_expr, conversion, format, rbrace, EXTRA) }
         | invalid_tstring_replacement_field
     tstring_middle[expr_ty]:
         | tstring_replacement_field
         | t=TSTRING_MIDDLE { _PyPegen_constant_from_token(p, t) }
     tstring[expr_ty] (memo):
         | a=TSTRING_START b=tstring_middle* c=TSTRING_END {
             CHECK_VERSION(
                 expr_ty,
                 14,
                 "t-strings are",
                 _PyPegen_template_str(p, a, (asdl_expr_seq*)b, c)) }

     string[expr_ty]: s[Token*]=STRING { _PyPegen_constant_from_string(p, s) }
     strings[expr_ty] (memo):
         | invalid_string_tstring_concat
         | a[asdl_expr_seq*]=(fstring|string)+ { _PyPegen_concatenate_strings(p, a, EXTRA) }
         | a[asdl_expr_seq*]=tstring+ { _PyPegen_concatenate_tstrings(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) }
         | invalid_for_if_clause
         | 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_unpacking
         | '*' a=expression { _PyAST_Starred(a, Load, EXTRA) }
         | invalid_starred_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_type_param:
         | '*' 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 colon=':' e=expression {
                 RAISE_SYNTAX_ERROR_STARTING_FROM(colon, e->kind == Tuple_kind
                     ? "cannot use constraints with ParamSpec"
                     : "cannot use bound with ParamSpec")
             }

     invalid_expression:
        |  STRING a=(!STRING expression_without_invalid)+ STRING {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE( PyPegen_first_item(a, expr_ty), PyPegen_last_item(a, expr_ty),
             "invalid syntax. Is this intended to be part of the string?") }
         # !(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=disjunction 'if' b=disjunction 'else' !expression {
             RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("expected expression after 'else', but statement is given") }
        | a[stmt_ty]=(pass_stmt|break_stmt|continue_stmt) 'if' b=disjunction 'else' c=simple_stmt {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION (a, "expected expression before 'if', but statement is given") }
        | a='lambda' [lambda_params] b=':' &FSTRING_MIDDLE  {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "f-string: lambda expressions are not allowed without parentheses") }
        | a='lambda' [lambda_params] b=':' &TSTRING_MIDDLE  {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "t-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_if_clause:
         | 'async'? 'for' (bitwise_or (',' bitwise_or)* [',']) !'in' {
             RAISE_SYNTAX_ERROR("'in' expected after for-loop variables") }

     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_dotted_as_name:
         | dotted_name 'as' !(NAME (',' | ')' | NEWLINE)) a=expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a,
                 "cannot use %s as import target", _PyPegen_get_expr_name(a)) }
     invalid_import_from_as_name:
         | NAME 'as' !(NAME (',' | ')' | NEWLINE)) a=expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a,
                 "cannot use %s as import target", _PyPegen_get_expr_name(a)) }

     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 when using 'as'") }
         | a='except' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | 'except' expression 'as' a=expression ':' block {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a, "cannot use except statement with %s", _PyPegen_get_expr_name(a)) }
     invalid_except_star_stmt:
         | 'except' '*' a=expression ',' expressions 'as' NAME  ':' {
             RAISE_SYNTAX_ERROR_STARTING_FROM(a, "multiple exception types must be parenthesized when using 'as'") }
         | a='except' '*' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='except' '*' (NEWLINE | ':') { RAISE_SYNTAX_ERROR("expected one or more exception types") }
         | 'except' '*' expression 'as' a=expression ':' block {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a, "cannot use except* statement with %s", _PyPegen_get_expr_name(a)) }
     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' a=expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a, "cannot use %s as pattern target", _PyPegen_get_expr_name(a)) }
     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) }
         | 'else' ':' block 'elif' { RAISE_SYNTAX_ERROR("'elif' block follows an 'else' block")}
     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_unpacking:
         | a='*' expression '=' b=expression { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to iterable argument unpacking") }
     invalid_starred_expression:
         | '*' { RAISE_SYNTAX_ERROR("Invalid star expression") }

     invalid_fstring_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_fstring_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_fstring_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_tstring_replacement_field:
         | '{' a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "t-string: valid expression required before '='") }
         | '{' a='!' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "t-string: valid expression required before '!'") }
         | '{' a=':' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "t-string: valid expression required before ':'") }
         | '{' a='}' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "t-string: valid expression required before '}'") }
         | '{' !annotated_rhs { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting a valid expression after '{'") }
         | '{' annotated_rhs !('=' | '!' | ':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting '=', or '!', or ':', or '}'") }
         | '{' annotated_rhs '=' !('!' | ':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting '!', or ':', or '}'") }
         | '{' annotated_rhs '='? invalid_tstring_conversion_character
         | '{' annotated_rhs '='? ['!' NAME] !(':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting ':' or '}'") }
         | '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}' {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting '}', or format specs") }
         | '{' annotated_rhs '='? ['!' NAME] !'}' {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: expecting '}'") }

     invalid_tstring_conversion_character:
         | '!' &(':' | '}') { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: missing conversion character") }
         | '!' !NAME { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("t-string: invalid conversion character") }

     invalid_string_tstring_concat:
         | a=(fstring|string)+ b[expr_ty]=tstring {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(PyPegen_last_item(a, expr_ty), b, "cannot mix t-string literals with string or bytes literals") }
         | a=tstring+ b[expr_ty]=(fstring|string) {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(PyPegen_last_item(a, expr_ty), b, "cannot mix t-string literals with string or bytes literals") }

     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.14/Grammar/python.gram


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: 14a. 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<4>.

   ---------- 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: 7ed.  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: bd.) 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: 1458, 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(): 8a1. 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(): 4af, *note execve(): 12f5.), aguardam processos
     (*note waitpid(): f8e.), enviam sinais (*note kill(): 1559.), ou
     interagir com processos.  O *note subprocess: dc. é importável, mas
     não funciona.

   * O módulo *note socket: d1. 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: 2106.  Para
     maiores detalhes veja *note Utilizando Python no Android: 2104. e
     *note Usando Python no iOS: 210c.

   * 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: 98. 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: 2f. e *note readline: bf.) 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(): 1f42.            *note enumerate(): 166f.     *note len(): 835.          *note range(): 244a.
     *note aiter(): 9cb.           *note eval(): 49d.          *note list(): 2448.         *note repr(): 1c1.
     *note all(): 1613.            *note exec(): 49c.          *note locals(): 468.        *note reversed(): a5b.
     *note anext(): 9cc.                                                                   *note round(): 14d6.
     *note any(): 1612.            'F'                         'M'                         
     *note ascii(): 15d7.          *note filter(): a5a.        *note map(): 19f.           'S'
                                   *note float(): 196.         *note max(): 1102.          *note set(): 244b.
     'B'                           *note format(): 199.        *note memoryview(): 2449.     *note setattr(): 244c.
     *note bin(): 14a4.            *note frozenset(): 2447.     *note min(): 1101.         *note slice(): 689.
     *note bool(): 3c0.                                                                    *note sorted(): dbb.
     *note breakpoint(): 270.      'G'                         'N'                         *note staticmethod(): 450.
     *note bytearray(): 1d50.      *note getattr(): dbe.       *note next(): 9ce.          *note str(): 244d.
     *note bytes(): 1d4f.          *note globals(): 1b0b.                                  *note sum(): 68a.
                                                               'O'                         *note super(): 1a6.
     'C'                           'H'                         *note object(): c72.        
     *note callable(): 13c2.       *note hasattr(): 6ee.       *note oct(): 14ca.          'T'
     *note chr(): 192b.            *note hash(): 7f6.          *note open(): 314.          *note tuple(): 244e.
     *note classmethod(): 488.     *note help(): aca.          *note ord(): 21d6.          *note type(): f38.
     *note compile(): 4ab.         *note hex(): 14cb.                                      
     *note complex(): 197.                                     'P'                         'V'
                                   'I'                         *note pow(): 1a4.           *note vars(): 1cd9.
     'D'                           *note id(): 1614.           *note print(): 116b.        
     *note delattr(): 2445.        *note input(): 14d4.        *note property(): 4ad.      'Z'
     *note dict(): 2446.           *note int(): 19b.                                       *note zip(): 1a0.
     *note dir(): 839.             *note isinstance(): 2ac.                                
     *note divmod(): b8f.          *note issubclass(): 9ba.                                '_'
                                   *note iter(): 9cd.                                      *note __import__(): ac7.
                                                                                      

 -- 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__(): 2299.  Se o argumento é um número complexo, sua
     magnitude é retornada.

 -- Função: aiter (async_iterable, /)

     Retorna um *note iterador assíncrono: 4c1. para um *note iterável
     assíncrono: f68.  Equivalente a chamar ‘x.__aiter__()’.

     Nota: Ao contrário de *note iter(): 9cd, *note aiter(): 9cb. 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: 4c1. fornecido, ou 'default' se fornecido e o iterador
     for esgotado.

     Esta é a variante assíncrona do *note next(): 9ce. embutido, e se
     comporta de forma semelhante.

     Isso chama o método *note __anext__(): 17e8. de 'async_iterator',
     retornando um *note aguardável: 4c3.  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: 1cc5. 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(): 1c1, 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(): 1c1. usando
     sequências de escapes ‘\x’, ‘\u’ ou ‘\U’.  Isto gera uma string
     similar ao que é retornado por *note repr(): 1c1. 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: 19b, ele tem que definir um
     método *note __index__(): 19e. 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(): 199. 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: 17c2.
     padrão.  Se o argumento for falso ou foi omitido, isso retorna
     ‘False’; senão ‘True’.  A classe *note bool: 3c0. é uma subclasse
     de *note int: 19b. (veja *note Tipos numéricos — int, float,
     complex: 1e91.).  Ela não pode ser usada para criar outra
     subclasse.  Suas únicas instâncias são ‘False’ e ‘True’ (veja *note
     Tipo booleano - bool: 244f.).

     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(): cc4,
     passando ‘args’ e ‘kws’ diretamente.  Por padrão,
     ‘sys.breakpointhook()’ chama *note pdb.set_trace(): 271. não
     esperando nenhum argumento.  Neste caso, isso é puramente uma
     função de conveniência para você não precisar importar *note pdb:
     aa. explicitamente ou digitar mais código para entrar no depurador.
     Contudo, *note sys.breakpointhook(): cc4. pode ser configurado para
     alguma outra função e *note breakpoint(): 270. irá automaticamente
     chamá-la, permitindo você ir para o depurador de sua escolha.  Se
     *note sys.breakpointhook(): cc4. não estiver acessível, esta função
     vai levantar *note RuntimeError: 243.

     Por padrão, o comportamento de *note breakpoint(): 270. pode ser
     alterado com a variável de ambiente *note PYTHONBREAKPOINT: cc5.
     Veja *note sys.breakpointhook(): cc4. para detalhes de uso.

     Observe que isso não é garantido se *note sys.breakpointhook():
     cc4. tiver sido substituído.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 342. é
     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: 2450, assim como a
     maior parte dos métodos que o tipo *note bytes: 192. tem, veja
     *note Operações com Bytes e Bytearray: 2451.

     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(): 342. então
          converte a string para bytes usando *note str.encode(): ac8.

        * 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: 25f, 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: 2452. e *note Objetos Bytearray: 2453.

 -- 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: 192. é uma
     versão imutável de *note bytearray: 342. – 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(): 342.

     Objetos bytes também podem ser criados com literais, veja *note
     Literais de string e bytes: 214a.

     Veja também *note Tipos de sequência binária — bytes, bytearray,
     memoryview: 2452, *note Objetos bytes: 2454, e *note Operações com
     Bytes e Bytearray: 2451.

 -- Função: callable (object, /)

     Retorna *note True: dfb. se o argumento 'object' parece ser
     chamável, *note False: d1f. 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__(): 76f.

     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(): 21d6.

     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:
     2ea. 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: 92f. – veja
     *note Definições de função: 1ecf. 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(): 450.
     nesta seção.  Para mais informações sobre métodos de classe,
     consulte *note A hierarquia de tipos padrão: 21cb.

     Alterado na versão 3.9: Métodos de classe agora podem envolver
     outros *note descritores: 17e7. tal como *note property(): 4ad.

     Alterado na versão 3.10: Métodos de classe agora herdam os
     atributos do método (*note __module__: 21e3, *note __name__: 14d0,
     *note __qualname__: 21e2, *note __doc__: 13d5. e *note
     __annotations__: 13d4.) e têm um novo atributo ‘__wrapped__’.

     Deprecated since version 3.11, removed in version 3.13: Métodos de
     classe não podem mais envolver outros *note descritores: 17e7. tal
     como *note property(): 4ad.

 -- 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(): 49c. ou *note eval():
     49d.  'source' pode ser uma string normal, uma string byte, ou um
     objeto AST. Consulte a documentação do módulo *note ast: 9. 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: 2455. devem ser ativadas e quais *note
     recursos futuros: 45a. 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(): 4ab.  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: 2229. na instância *note _Feature: 2456. do
     módulo *note __future__: 0.  *note Sinalizadores de compilador:
     2455. podem ser encontrados no módulo *note ast: 9, 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: 18c.  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: 18e. se o código para
     compilar é inválido, e *note ValueError: 2ea. se o código contém
     bytes nulos.

     Se você quer analisar código Python em sua representação AST, veja
     *note ast.parse(): 1c2.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1b.

          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: 198. 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(): 196.) 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: 2ea.  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:
     2457. da gramática a seguir:

          complexvalue: *note floatvalue: 2458. |
                        *note floatvalue: 2458. ("j" | "J") |
                        *note floatvalue: 2458. *note sign: 2459. *note absfloatvalue: 245a. ("j" | "J")

     Se o argumento for um número, o construtor serve como uma conversão
     numérica tal qual *note int: 19b. e *note float: 196.  Para um
     objeto Python ‘x’ qualquer, ‘complex(x)’ delega para
     ‘x.__complex__()’.  Se *note __complex__(): 7f2. não está definido
     então a chamada é repassada para *note __float__(): bb7.  Se
     ‘__float__()’ não está definido então a chamada é, novamente,
     repassada para *note __index__(): 19e.

     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.

     Veja também *note complex.from_number(): 195. que aceita apenas um
     único argumento numérico.

     Se todos os argumentos forem omitidos, retorna ‘0j’.

     O tipo complexo está descrito em *note Tipos numéricos — int,
     float, complex: 1e91.

     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__(): 19e. se
     *note __complex__(): 7f2. e *note __float__(): bb7. não estão
     definidas.

     Descontinuado desde a versão 3.14: Passar um número complexo como
     argumento 'real' ou 'imag' agora está descontinuado; deve ser
     passado apenas como um único argumento posicional.

 -- Função: delattr (object, name, /)

     Essa função está relacionada com *note setattr(): 244c.  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(): 244c.).

 -- Classe: dict (**kwargs)

 -- Classe: dict (mapping, /, **kwargs)

 -- Classe: dict (iterable, /, **kwargs)

     Cria um novo dicionário.  O objeto *note dict: 183. é a classe do
     dicionário.  Veja *note dict: 183. e *note Tipo mapeamento — dict:
     cb0. para documentação sobre esta classe.

     Para outros contêineres, consulte as classes embutidas *note list:
     24c, *note set: 184. e *note tuple: 608, bem como o módulo *note
     collections: 1e.

 -- 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__(): 1758, esse
     método será chamado e deve devolver a lista de atributos.  Isso
     permite que objetos que implementam uma função personalizada *note
     __getattr__(): 6ef. ou *note __getattribute__(): dbf. personalizem
     a maneira como *note dir(): 839. 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__: 772.
     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__(): 6ef. personalizado.

     O mecanismo padrão *note dir(): 839. 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(): 839. é 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: 4c2. ou algum outro objeto que suporte a iteração.
     O método *note __next__(): 14c9. do iterador retornado por *note
     enumerate(): 166f. 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: 169. | *note code object: 4e0.) – Uma
          expressão Python.

        * ‘globals’ (*note dict: 183. | ‘None’) – O espaço de nomes
          global (por padrão, ‘None’).

        * ‘locals’ (*note mapping: 13b7. | ‘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 'expression' é analisado e avaliado como uma expressão
     Python (tecnicamente falando, uma lista de condições) usando os
     mapeamentos 'globals' e 'locals' como espaços de nomes globais e
     locais.  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 embutido *note builtins: 13. será inserida sob essa chave
     antes de 'expression' ser analisado.  Dessa forma, você pode
     controlar quais funções embutidas estão disponíveis para o código
     executado inserindo seu próprio dicionário ‘__builtins__’ em
     'globals' antes de passá-lo para *note eval(): 49d.  Se o
     mapeamento 'locals' for omitido, o padrão será o dicionário
     'globals'.  Se os dois mapeamentos forem omitidos, a expressão será
     executada com os 'globals' e 'locals' no ambiente em que *note
     eval(): 49d. é chamado.  Observe que 'eval()' terá acesso a *note
     escopos aninhados: 2223. (não locais) no ambiente anexo somente se
     eles já forem referenciados pelo escopo que está chamando *note
     eval(): 49d. (por exemplo, via uma instrução *note nonlocal:
     14a3.).

     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(): 4ab.).  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(): 49d. será ‘None’.

     Dicas: a execução dinâmica de instruções é suportada pela função
     *note exec(): 49c.  As funções *note globals(): 1b0b. e *note
     locals(): 468. retornam o dicionário global e local atual,
     respectivamente, o que pode ser útil para ser usado por *note
     eval(): 49d. ou *note exec(): 49c.

     Se a fonte fornecida for uma string, os espaços e tabulações à
     esquerda ou à direita serão removidos.

     Veja *note ast.literal_eval(): e06. para uma função que pode
     avaliar com segurança strings com expressões contendo apenas
     literais.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 468.

 -- 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: 242c. no Manual de Referência).  Tenha
     cuidado, pois as instruções *note nonlocal: 14a3, *note yield: bb8.
     e *note return: 1af. 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(): 49c. .  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: 13. é 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(): 49c.

     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): 17f7.  O comprimento
     da tupla deve corresponder exatamente ao comprimento do atributo
     *note co_freevars: 21e0. do objeto código.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 1b0b. e *note
          locals(): 468. 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():
          49c.

          Nota: 'locals' padrão atua como descrito pela função *note
          locals(): 468. abaixo.  Se você precisa ver efeitos do código
          em 'locals' depois da função *note exec(): 49c. 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(): 468.

 -- 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(): 245c. 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: 2458. 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: 245f. (["_"] *note digit: 245f.)*
          number:        [*note digitpart: 2460.] "." *note digitpart: 2460. | *note digitpart: 2460. ["."]
          exponent:      ("e" | "E") [*note sign: 2459.] *note digitpart: 2460.
          floatnumber:   *note number: 2461. [*note exponent: 2462.]
          absfloatvalue: *note floatnumber: 2463. | *note infinity: 245d. | *note nan: 245e.
          floatvalue:    [*note sign: 2459.] *note absfloatvalue: 245a.

     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: a77. será lançada.

     Para um objeto Python genérico ‘x’, ‘float(x)’ delega para o método
     ‘x.__float__()’.  Se *note __float__(): bb7. não estiver definido,
     então ele delega para o método *note __index__(): 19e.

     Veja também *note float.from_number(): 194. que aceita apenas um
     argumento numérico.

     Se nenhum argumento for fornecido, será retornado ‘0.0’.

     O tipo float é descrito em *note Tipos numéricos — int, float,
     complex: 1e91.

     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__(): 19e. se
     *note __float__(): bb7. 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: 4f3.

     O 'format_spec' padrão é uma string vazia que geralmente produz o
     mesmo efeito que chamar *note str(value): 169.

     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__():
     826. de ‘value’.  Uma exceção *note TypeError: 198. é levantada se
     a pesquisa do método atingir *note object: c72. 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: 198. se 'format_spec' não for uma string vazia.

 -- Classe: frozenset (iterable=(), /)

     Devolve um novo objeto *note frozenset: 7e7, opcionalmente com
     elementos obtidos de 'iterable'.  ‘frozenset’ é uma classe
     embutida.  Veja *note frozenset: 7e7. e *note Tipo conjuntos — set,
     frozenset: 2464. para documentação sobre essas classes.

     Para outros contêineres veja as classes embutidas *note set: 184,
     *note list: 24c, *note tuple: 608, e *note dict: 183, assim como o
     módulo *note collections: 1e.

 -- 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: 5e4. é levantada.  'name' não precisa
     ser um identificador Python (veja *note setattr(): 244c.).

          Nota: Uma vez que *note desfiguração de nome privado: 1f58.
          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(): dbe.

 -- 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: 5e4. 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__(): ce6.
          personalizados, fique atento que *note hash(): 7f6. 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(): aca, 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: 2465.

     Esta função é adicionada ao espaço de nomes embutido pelo módulo
     *note site: cc.

     Alterado na versão 3.4: Mudanças em *note pydoc: ba. e *note
     inspect: 82. 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: 19b. do Python, ele tem que definir um método *note
     __index__(): 19e. 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(): 199. para mais informações.

     Veja também *note int(): 19b. 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(): 1fb0.

 -- 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(): 1614.

     Este é o endereço do objeto na memória.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 14d5. é
     levantado.  Exemplo:

          >>> s = input('--> ')
          --> Monty Python's Flying Circus
          >>> s
          "Monty Python's Flying Circus"

     Se o módulo *note readline: bf. foi carregado, então *note input():
     14d4. usará ele para prover edição de linhas elaboradas e
     funcionalidades de histórico.

     Levanta um *note evento de auditoria: 1b5d. ‘builtins.input’ com
     argumento ‘prompt’ antes de ler a entrada.

     Levanta um *note evento de auditoria: 1b5d. ‘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__(): 19d, então
     ‘int(x)’ retorna ‘x.__int__()’.  Se 'x' definir um método *note
     __index__(): 19e, então ele retorna ‘x.__index__()’.  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: 192. ou
     *note bytearray: 342. 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: 21a7, 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: 1e91.

     Alterado na versão 3.4: Se 'base' não é uma instância de *note int:
     19b. e o objeto 'base' tem um método *note base.__index__: 19e,
     então esse método é chamado para obter um inteiro para a base.
     Versões anteriores usavam *note base.__int__: 19d. ao invés de
     *note base.__index__: 19e.

     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__(): 19e. se
     *note __int__(): 19d. não está definido.

     Alterado na versão 3.11: Entradas de strings para *note int: 19b. e
     representações em strings podem ser limitadas para ajudar a evitar
     ataques de negação de serviço.  Uma exceção *note ValueError: 2ea.
     é levantada quando o limite é excedido durante a conversão de uma
     string em um *note int: 19b. ou quando a conversão de um *note int:
     19b. em uma string excede o limite.  Consulte a documentação sobre
     *note limitação de comprimento de conversão de string em inteiro:
     800.

     Alterado na versão 3.14: *note int(): 19b. não delega mais ao
     método *note __trunc__(): 19c.

 -- 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: 13b2.).  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: 9bb. 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: 198.  *note TypeError: 198. 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:
     9bb.

 -- Função: issubclass (class, classinfo, /)

     Retorna ‘True’ se 'class' for uma subclasse (direta, indireta ou
     *note virtual: 13b2.) 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: 9bb, 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: 198.

     Alterado na versão 3.10: 'classinfo' pode ser um *note Tipo União:
     9bb.

 -- Função: iter (iterable, /)

 -- Função: iter (callable, sentinel, /)

     Retorna um objeto *note iterador: 4c2.  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:
     1423. (o método *note __iter__(): e5d.), ou ele deve ter suporte ao
     protocolo de sequência (o método *note __getitem__(): 581. com
     argumentos inteiros começando em ‘0’).  Se ele não tem suporte
     nenhum desses protocolos, uma *note TypeError: 198. é 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__(): 14c9.; se o valor devolvido é
     igual a 'sentinel', então *note StopIteration: de9. será levantado,
     caso contrário o valor será devolvido.

     Veja também *note Tipos iteradores: 2466.

     Uma aplicação útil da segunda forma de *note iter(): 9cd. é 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: a77. em tamanhos maiores que
     *note sys.maxsize: 13c1, tal como *note range(2 ** 100): b33.

 -- Classe: list (iterable=(), /)

     Ao invés de ser uma função, *note list: 24c. é na verdade um tipo
     de sequência mutável, conforme documentado em *note Listas: 2467. e
     *note Tipos sequências — list, tuple, range: 1ee4.

 -- 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(): 49c.
     ou *note eval(): 49d. com um único espaço de nomes, esta função
     retorna o mesmo espaço de nomes que *note globals(): 1b0b.

     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: 49b.
     (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:
     49b. 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, strict=False)

     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.  Se 'strict' for ‘True’ e um dos
     iteráveis for esgotado antes dos outros, um *note ValueError: 2ea.
     será levanta.  Para casos onde os parâmetros de entrada da função
     já estão organizados em tuplas, veja *note itertools.starmap():
     12e0.

     Alterado na versão 3.14: Adicionado o parâmetro 'track'.

 -- 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: 1423.  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(): dbc.  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: 2ea. é 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: 2468. 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: 1423.  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(): dbc.  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: 2ea. é 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: 4c2. chamando o seu
     método *note __next__(): 14c9.  Se 'default' foi fornecido, ele é
     devolvido caso o iterável tenha sido percorrido por completo, caso
     contrário *note StopIteration: de9. é 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: c72. 'não' têm atributos
          *note __dict__: 772, então você não pode atribuir atributos
          arbitrários a uma instância de *note object: c72.

 -- 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: 19b. Python, ele tem que definir um
     método *note __index__(): 19e. 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(): 199. 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: 13bf.
     correspondente.  Se o arquivo não puder ser aberto, uma *note
     OSError: 2bf. é levantada.  Veja *note Leitura e escrita de
     arquivos: 1f1b. para mais exemplos de como usar esta função.

     'file' é um *note objeto caminho ou similar: 59a. 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(): 327. é 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: 246a, 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: 192. 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: 169,
     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(): d34.  Quando nenhum argumento
     'buffering' é fornecido, a política de buffering padrão funciona da
     seguinte forma:

        * Arquivos binários são armazenados em buffer em blocos de
          tamanho fixo; o tamanho do buffer é ‘max(min(blocksize, 8
          MiB), DEFAULT_BUFFER_SIZE)’ quando o tamanho do bloco do
          dispositivo está disponível.  Na maioria dos sistemas, o
          buffer normalmente tem 128 quilobytes de comprimento.

        * Arquivos de texto “interativos” (arquivos para os quais *note
          isatty(): 1f1e. 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(): 327. retornar), mas qualquer *note
     codificador de texto: 246b. suportado pelo Python pode ser usada.
     Veja o módulo *note codecs: 1c. 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: 1a8b.),
     apesar que qualquer nome para tratamento de erro registrado com
     *note codecs.register_error(): 1689. também é válido.  Os nomes
     padrões incluem:

        * ‘'strict'’ para levantar uma exceção *note ValueError: 2ea. 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: 246c.  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:
     f86. como 'opener' resulta em funcionalidade semelhante à passagem
     de ‘None’).

     O arquivo recém-criado é *note não-herdável: 10f2.

     O exemplo a seguir usa o parâmetro *note dir_fd: 12e6. da função
     *note os.open(): f86. 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: 13bf. retornado pela função *note
     open(): 314. depende do modo.  Quando *note open(): 314. é usado
     para abrir um arquivo no modo texto (‘'w'’, ‘'r'’, ‘'wt'’, ‘'rt'’,
     etc.), retorna uma subclasse de *note io.TextIOBase: 899.
     (especificamente *note io.TextIOWrapper: 9b4.).  Quando usada para
     abrir um arquivo em modo binário com buffer, a classe retornada é
     uma subclasse de *note io.BufferedIOBase: 898.  A classe exata
     varia: no modo binário de leitura, ele retorna uma *note
     io.BufferedReader: 140a.; nos modos binário de gravação e binário
     anexado, ele retorna um *note io.BufferedWriter: 15a3. e, no modo
     leitura/gravação, retorna um *note io.BufferedRandom: 15a4.  Quando
     o buffer está desativado, o fluxo bruto, uma subclasse de *note
     io.RawIOBase: 12cc, *note io.FileIO: 150b, é retornado.

     Veja também os módulos de para lidar com arquivos, tais como *note
     fileinput: 5f, *note io: 83. (onde *note open(): 314. é declarado),
     *note os: a5, *note os.path: a6, *note tempfile: e6. e *note
     shutil: ca.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1249. costumava ser levantado, agora ele é um
          codinome para *note OSError: 2bf.

        * *note FileExistsError: 1216. 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: f7c. (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: e3f.

        * No Windows, a abertura de um buffer do console pode retornar
          uma subclasse de *note io.RawIOBase: 12cc. que não seja *note
          io.FileIO: 150b.

     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(): 192b.

     Se o argumento for um objeto *note bytes: 192. ou *note bytearray:
     342. 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: 19b, 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:
     19b. ou *note float: 196. 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: 19b. ou *note float: 196. com um expoente integral, um
     resultado de ponto flutuante é retornado.  Por exemplo, ‘pow(-9,
     2.0)’ retorna ‘81.0’.

     Para operandos *note int: 19b. '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: 19b, 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(): 169. 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(): 116b. 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: cc0. será usado.  Como argumentos exibidos no console
     são convertidos para strings de texto, *note print(): 116b. 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(): 4ad. como
     um *note decorador: 92f.:

          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: b33. é realmente um tipo de
     sequência imutável, conforme documentado em *note Intervalos: 246d.
     e *note Tipos sequências — list, tuple, range: 1ee4.

 -- 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(): 49d, 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__(): 824.  Se *note sys.displayhook(): 170d. não estiver
     acessível, esta função vai levantar *note RuntimeError: 243.

     Esta classe possui uma representação personalizada que pode ser
     executada:

          class Pessoa:
             def __init__(self, nome, idade):
                self.name = nome
                self.age = idade

             def __repr__(self):
                return f"Pessoa('{self.nome}', {self.idade})"

 -- Função: reversed (object, /)

     Retorna um *note iterador: 4c2. reverso.  'seq' deve ser um objeto
     que possui o método *note __reversed__(): e7a. ou suporta o
     protocolo de sequência (o método *note __len__(): 2245. e o método
     *note __getitem__(): 581. 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(): 14d6, 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(): 14d6. 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: 1fae. para mais informações.

 -- Classe: set (iterable=(), /)

     Retorna um novo objeto *note set: 184, opcionalmente com elementos
     retirados de 'iterable'.  ‘set’ é uma classe embutida.  Veja *note
     set: 184. e *note Tipo conjuntos — set, frozenset: 2464. para
     documentação sobre esta classe.

     Para outros contêineres, consulte as classes embutidas *note
     frozenset: 7e7, *note list: 24c, *note tuple: 608. e *note dict:
     183, bem como o módulo *note collections: 1e.

 -- Função: setattr (object, name, value, /)

     Esta é a contrapartida de *note getattr(): dbe.  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 Nomes (identificadores e palavras reservadas): 214b. a
     menos que o objeto opte por impor isso, por exemplo, em um *note
     __getattribute__(): dbf. personalizado ou via *note __slots__:
     16d9.  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(): dbe. etc.

          Nota: Uma vez que *note desfiguração de nome privado: 1f58.
          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(): 244c.

 -- Classe: slice (stop, /)

 -- Classe: slice (start, stop, step=None, /)

     Retorna um objeto *note fatia: 246e. 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(): d37. para uma
     versão alternativa que retorna um *note iterador: 4c2.

     Alterado na versão 3.12: Os objetos slice agora são *note
     hasheáveis: 819. (desde que *note start: 223b, *note stop: 223c. e
     *note step: 223d. 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(): 13d6. para converter a função das
     antigas 'cmp' para uma função 'key'.

     A função embutida *note sorted(): dbb. é 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__(): 149c. seja
     suficiente para ordenação, PEP 8(5) recomenda que todas as seis
     *note comparações ricas: 235d. sejam implementadas.  Isso ajudará a
     evitar erros ao usar os mesmos dados com outras ferramentas de
     ordenação, como *note max(): 1102, 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 refletido o método *note __gt__(): 1507.

     Para exemplos de classificação e um breve tutorial de
     classificação, veja *note Técnicas de ordenação: 246f.

 -- 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: 92f. –
     veja *note Definições de função: 1ecf. 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: 17e7. 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(): 488. 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: 21cb.

     Alterado na versão 3.10: Métodos estáticos agora herdam os
     atributos do método (*note __module__: 21e3, *note __name__: 14d0,
     *note __qualname__: 21e2, *note __doc__: 13d5. e *note
     __annotations__: 13d4.), 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: 169. de 'object'.  Consulte *note
     str(): 169. para detalhes.

     ‘str’ é uma *note classe: 1bd5. de string embutida.  Para
     informações gerais sobre strings, consulte *note Tipo sequência de
     texto — str: 1e96.

 -- 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(): 68a.  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(): 15c5.  Para concatenar uma série de
     iteráveis, considere usar *note itertools.chain(): 2470.

     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.

     Alterado na versão 3.14: Adicionada especialização para soma de
     complexos, usando o mesmo algoritmo para soma de flutuantes.

 -- 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:
     2471. a ser pesquisada.  A pesquisa inicia a partir da classe logo
     após o 'type'.

     Por exemplo, se *note __mro__: 220e. de 'object_or_type' é ‘D -> B
     -> C -> A -> object’ e o valor de 'type' é ‘B’, então *note
     super(): 1a6. procura por ‘C -> A -> object’.

     O atributo *note __mro__: 220e. da classe correspondente ao
     'object_or_type' lista a ordem de pesquisa de resolução de método
     usada por *note getattr(): dbe. e *note super(): 1a6.  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(): 1a6. também funciona
     para pesquisas de atributo.  Um possível caso de uso para isso é
     chamar *note descritores: 17e7. em uma classe pai ou irmã.

     Observe que *note super(): 1a6. é 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__(): dbf.
     para pesquisar classes em uma ordem predizível que possui suporte a
     herança múltipla cooperativa.  Logo, *note super(): 1a6. 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():
     1a6. 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(): 1a6, consulte o guia para uso de super()(6).

     Alterado na versão 3.14: os objetos *note super: 1a6. agora são
     *note serializáveis: ab. e *note copiáveis: 29.

 -- Classe: tuple (iterable=(), /)

     Ao invés de ser uma função, *note tuple: 608. é na verdade um tipo
     de sequência imutável, conforme documentado em *note Tuplas: 23d7.
     e *note Tipos sequências — list, tuple, range: 1ee4.

 -- 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__: 169b.

     A função embutida *note isinstance(): 2ac. é 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: 14d3.  A
     string 'name' é o nome da classe e se torna o atributo *note
     __name__: 1699.  A tupla 'bases' contém as classes bases e se torna
     o atributo *note __bases__: 169a.; se vazio, *note object: c72, 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__: e4b.  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: 2209.

        * *note Objetos tipo: 2472.

     Argumentos nomeados fornecidos para a forma de três argumentos são
     passados para a máquina metaclasse apropriada (geralmente *note
     __init_subclass__(): 838.) 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: e39.

     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__: 772. 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__: 772.; porém, outros projetos podem ter restrições de
     escrita em seus atributos ‘__dict__’ (por exemplo, classes usam um
     *note types.MappingProxyType: 68d. para prevenir atualizações
     diretas a dicionário).

     Sem nenhum argumento, *note vars(): 1cd9. age como *note locals():
     468.

     Uma exceção *note TypeError: 198. é levantada se um objeto é
     especificado, mas ela não tem um atributo *note __dict__: 772. (por
     exemplo, se sua classe define o atributo *note __slots__: 16d9.).

     Alterado na versão 3.13: O resultado de chamar esta função sem um
     argumento foi atualizado conforme descrito na embutida *note
     locals(): 468.

 -- 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(): 1a0. 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(): 1a0. é que ela transforma
     linhas em colunas e colunas em linhas.  Isso é semelhante a
     transpor uma matriz(7).

     *note zip(): 1a0. é 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: 24c.

     Uma coisa a considerar é que os iteráveis passados para *note
     zip(): 1a0. 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(): 1a0. 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(): 1a0. é 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(): 1a0.:: 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: 2ea. 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():
          149a.

     Casos extremos: Com um único argumento iterável, *note zip(): 1a0.
     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(): 1a0. 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(): 731.

     Esta função é chamada pela instrução *note import: 7ed.  Ela pode
     ser substituída (importando o módulo *note builtins: 13. 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__(): ac7. também é
     desencorajado em favor de *note importlib.import_module(): 731.

     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: 7ed.

     '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__(): ac7. (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__(): ac7. retorna o módulo de nível
     superior aqui, porque este é o objeto vinculado a um nome pela
     instrução *note import: 7ed.

     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__(): ac7.
     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(): 731.

     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: b4c. ou *note -I: b4d. estão sendo usadas, a variável de
     ambiente *note PYTHONCASEOK: b4b. é 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: 3c0.  As atribuições a ‘False’
     são ilegais e levantam *note SyntaxError: 18e.

 -- Dado: True

     O valor verdadeiro do tipo *note bool: 3c0.  As atribuições a
     ‘True’ são ilegais e levantam *note SyntaxError: 18e.

 -- 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: 18e.  ‘None’ é a única instância do tipo *note
     NoneType: a48.

 -- Dado: NotImplemented

     Um valor especial que deve ser retornado pelos métodos binários
     especiais (por exemplo: *note __eq__(): ce5, *note __lt__(): 149c,
     *note __add__(): 2274, *note __rsub__(): 2284, 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__():
     2279, *note __iand__(): 2293, 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: a49.

          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: 21ce.
          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: 368.
          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 descontinuada.

     Alterado na versão 3.14: A avaliação de ‘NotImplemented’ em um
     contexto booleano agora levanta um *note TypeError: 198.
     Anteriormente, ele era avaliado como *note True: dfb. e emitia um
     *note DeprecationWarning: 1a3. desde o Python 3.9.

 -- 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: 18e.  ‘Ellipsis’ é a única instância
     do tipo *note types.EllipsisType: a47.

 -- Dado: __debug__

     Esta constante é verdadeira se o Python não foi iniciado com uma
     opção *note -O: 18c.  Veja também a instrução *note assert: b56.

     Nota: Os nomes *note None: 87a, *note False: d1f, *note True: dfb.
     e *note __debug__: 9d0. não podem ser reatribuídos (atribuições a
     eles, mesmo como um nome de atributo, levantam *note SyntaxError:
     18e. ), 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: cc. (que é importado automaticamente durante a
inicialização, exceto se a opção de linha de comando *note -S: 13a4. 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: f30. 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(): aca.).

 -- 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(): 1c1. ou a função ligeiramente
diferente *note str(): 169.).  A última função é implicitamente usada
quando um objeto é escrito pela função *note print(): 116b.

* 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.
* Resumo dos métodos de tipo de sequência binária e de texto::
* 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: 181. ou *note while: 18c3. 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__(): 14d1. que retorne ‘False’ ou um
método *note __len__(): 2245. 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: 2243.).


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
                 

Objetos de tipos diferentes, exceto tipos numéricos diferentes, nunca
comparam iguais.  O operador ‘==’ é sempre definido, mas para alguns
tipos de objetos (por exemplo, objetos de classe) é equivalente a *note
is: 349.  Os operadores ‘<’, ‘<=’, ‘>’ e ‘>=’ são definidos apenas onde
fazem sentido; por exemplo, eles levantam uma exceção *note TypeError:
198. quando um dos argumentos é um número complexo.

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__(): ce5.

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__(): 149c, *note
__le__(): 1506, *note __gt__(): 1507. e *note __ge__(): 1508. (no geral,
*note __lt__(): 149c. e *note __eq__(): ce5. são suficientes, se você
quiser o significado convencional dos operadores de comparação).

O comportamento dos operadores *note is: 349. e *note is not: 2364. 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: 348. e
*note not in: 836, são suportadas por tipos que são *note iteráveis:
1423. ou implementam o método *note __contains__(): 15ab.


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: 1c86.  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: 212, para racionais, e *note decimal.Decimal:
1fd, 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.

Os construtores *note int(): 19b, *note float(): 196, e *note complex():
197. podem ser usados para produzir números de um tipo específico.

Python oferece suporte completo a 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.  A
aritmética com operandos complexos e reais é definida pela fórmula
matemática usual, por exemplo:

     x + complex(u, v) = complex(x + u, v)
     x * complex(u, v) = complex(x * u, x * v)

Uma comparação entre números de tipos diferentes se comporta como se os
valores exatos desses números estivessem sendo comparados.  (1)

Todos os tipos numéricos (exceto complexos) suportam as seguintes
operações (para prioridades das operações, consulte *note Precedência de
operadores: 2378.):

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(): 1f42.
                                                                              
                                                                              
‘int(x)’                  'x' convertido em inteiro             (3)(6)        *note int(): 19b.
                                                                              
                                                                              
‘float(x)’                'x' convertido em ponto flutuante     (4)(6)        *note float(): 196.
                                                                              
                                                                              
‘complex(re, im)’         um número complexo com parte real     (6)           *note complex(): 197.
                          '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(): b8f.
                                                                              
                                                                              
‘pow(x, y)’               'x' elevado a 'y'                     (5)           *note pow(): 1a4.
                                                                              
                                                                              
‘x ** y’                  'x' elevado a 'y'                     (5)
                                                                

Notas:

  1. Também referido como uma divisão inteira.  Para operandos do tipo
     *note int: 19b, o resultado tem o tipo *note int: 19b.; Para
     operandos do tipo *note float: 196, o resultado tem o tipo *note
     float: 196.  Em geral o resultado é inteiro como todo, apesar do
     tipo do resultado não necessariamente ser *note int: 19b.  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(): 1f42. se for apropriado.

  3. 
     Conversão de *note float: 196. para *note int: 19b. trunca,
     descartando a parte fracionária.  Veja as funções *note
     math.floor(): 15af. e *note math.ceil(): 15b0. 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: 2488. (*note int: 19b. e *note float:
196.) também incluem as seguintes operações.

Operação                 Resultado
                         
---------------------------------------------------------------------------
                         
*note math.trunc(x): 15b1.'x' truncado para *note Integral: 229e.
                         
                         
*note round(x[, n]): 14d6.'x' arredondado para 'n' dígitos, arredondando
                         metade para igualar.  Se 'n' é omitido, ele
                         toma o padrão de 0.
                         
                         
*note math.floor(x): 15af.o maior *note Integral: 229e. <= 'x'
                         
                         
*note math.ceil(x): 15b0.pelo menos *note Integral: 229e. >= 'x'
                         

Para operações numéricas adicionais, consulte os módulos *note math: 92.
e *note cmath: 19.

* Menu:

* Operações de bits em tipos inteiros::
* Métodos adicionais em tipos inteiros::
* Métodos adicionais em ponto flutuante::
* Métodos adicionais em números complexos::
* 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: 2ea. .

  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: 13b2. *note
numbers.Integral: 229e.  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: a77. é 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: a77. é 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: a77.

     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: 193. 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: 248d. 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(): 248e.

     Adicionado na versão 3.12.


File: python.info,  Node: Métodos adicionais em ponto flutuante,  Next: Métodos adicionais em números complexos,  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: 13b2. *note
numbers.Real: 2488.  float também possui os seguintes métodos
adicionais.

 -- Método: classmethod float.from_number (x)

     Método de classe para retornar um número de ponto flutuante
     construído a partir de um número 'x'.

     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: a77. será levantada.

     Para um objeto Python genérico ‘x’, ‘float.from_number(x)’ delega
     para o método ‘x.__float__()’.  Se *note __float__(): bb7. não
     estiver definido, então ele delega para o método *note __index__():
     19e.

     Adicionado na versão 3.14.

 -- 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: a77.
     em infinidades e um *note ValueError: 2ea. 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(): 1fb0. é um método de instância, enquanto
*note float.fromhex(): 2490. é 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(): 1fb0. é 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():
2490.

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: Métodos adicionais em números complexos,  Next: Hashing de tipos numéricos,  Prev: Métodos adicionais em ponto flutuante,  Up: Tipos numéricos — int float complex

5.4.4.4 Métodos adicionais em números complexos
...............................................

O tipo ‘complex’ implementa a *note classe base abstrata: 13b2. *note
numbers.Complex: 2492.  ‘complex’ também possui os seguintes métodos
adicionais.

 -- Método: classmethod complex.from_number (x)

     Método de classe para converter um número para um número complexo.

     Para um objeto Python ‘x’ qualquer, ‘complex.from_number(x)’ delega
     para ‘x.__complex__()’.  Se *note __complex__(): 7f2. não está
     definido então a chamada é repassada para *note __float__(): bb7.
     Se ‘__float__()’ não está definido então a chamada é, novamente,
     repassada para *note __index__(): 19e.

     Adicionado na versão 3.14.


File: python.info,  Node: Hashing de tipos numéricos,  Prev: Métodos adicionais em números complexos,  Up: Tipos numéricos — int float complex

5.4.4.5 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__(): ce6. para mais detalhes).  Para
facilitar a implementação e eficiência através de uma variedade de tipos
numéricos (incluindo *note int: 19b, *note float: 196, *note
decimal.Decimal: 1fd. e *note fractions.Fraction: 212.), 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: 19b. e *note fractions.Fraction: 212,
e todas as instâncias finitas das classes *note float: 196. e *note
decimal.Decimal: 1fd.  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: 2495. do *note sys.hash_info:
11f5.

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: 197. ‘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: 196. ou *note complex: 197.:

     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: 3c0. tem
exatamente duas instâncias constantes: ‘True’ e ‘False’.

A função embutida *note bool(): 3c0. converte qualquer valor em um
booleano, se o valor puder ser interpretado como um valor verdade
(consultar seção *note Teste do valor verdade: 17c2. acima).

Para operações lógicas, use *note operadores booleanos: 2483. ‘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: 3c0. é uma subclasse *note int: 19b. (veja *note Tipos
numéricos — int, float, complex: 1e91.).  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(): 19b.


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: 1423.:

 -- Método: container.__iter__ ()

     Retorna um objeto *note iterador: 4c2.  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:
     16dd. 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: 4c2. em si.  Isso é
     necessário para permitir que ambos os contêineres e iteradores
     sejam usados com as instruções *note for: 347. e *note in: 348.
     Este método corresponde ao slot *note tp_iter: 16dd. da estrutura
     de tipos para objetos Python na API Python/C.

 -- Método: iterator.__next__ ()

     Retorna o próximo item do *note iterador: 4c2.  Se não houver itens
     além, a exceção *note StopIteration: de9. é levantada.  Esse método
     corresponde ao slot *note tp_iternext: 16de. 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__(): 14c9. do iterador levantou *note
StopIteration: de9, 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: 1257. do Python proveem uma maneira conveniente para
implementar o protocolo iterador.  Se o método *note __iter__(): e5d. 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__(): 1f62. e *note
__next__(): 1f63.  Mais informações sobre geradores podem ser
encontradas na *note documentação para a expressão yield: 2324.


File: python.info,  Node: Tipos sequências — list tuple range,  Next: Resumo dos métodos de tipo de sequência binária e de texto,  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: 2452. e *note strings de texto: 1e96. 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: 13c0. é 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 suportam comparações.  Em particular,
tuplas e listas são comparadas lexicograficamente pela comparação de
elementos correspondentes.  Isso significa que para comparar igualmente,
cada elemento deve comparar igual e as duas sequências devem ser do
mesmo tipo e possuírem o mesmo comprimento.  (Para detalhes completos,
veja *note Comparações: 235d. 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: 1723. ou um *note
StopIteration: de9. é 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: 169, *note bytes: 192. e *note
     bytearray: 342.) 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?: 249e.

  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. A fatia 's' de 'i' até 'j' é definida como a sequência de itens com
     índice 'k' tal que ‘i <= k < j’.  Se 'i' ou 'j' foi maior do que
     ‘len(s)’, usa ‘len(s)’.  Se 'i' for omitido ou ‘None’, use ‘0’.  Se
     'j' for omitido ou ‘None’, usa ‘len(s)’.  Se 'i' for maior ou igual
     a 'j', a fatia é vazia.

  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: 169, você pode
          criar uma lista e usar *note str.join(): 249f. no final ou
          então escrever numa instância de *note io.StringIO: 111f. e
          recuperar o seu valor ao final

        * Se estiver concatenando objetos *note bytes: 192, você também
          pode usar o método *note bytes.join(): 24a0. ou *note
          io.BytesIO: 109a, ou você pode fazer concatenação interna com
          um objeto *note bytearray: 342.  A classe *note bytearray:
          342. são objetos mutáveis e possuem um eficiente mecanismo de
          superalocação

        * Se estiver concatenando objetos *note tuple: 608, estenda a
          classe *note list: 24c. em vez disso

        * para outros tipos, busque na documentação relevante da classe

  7. Alguns tipos sequências (como *note range: b33.) apenas suportam
     sequências de itens que seguem padrões específicos e, portanto, não
     suportam concatenação ou repetição de sequência.

  8. Uma *note IndexError: 1723. é 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: 2ea. 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(): 7f6.

Esse suporte permite sequências imutáveis, tais como instâncias da
classe *note tuple: 608, serem usadas como chaves de dicionários *note
dict: 183. e armazenados em instâncias de *note set: 184. e de *note
frozenset: 7e7.

A tentativa de obter um hash de uma sequência imutável que contém
valores desnecessários resultará em um erro *note TypeError: 198.


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: 4b9. é 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: 342. 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__(): 19e.  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: 249d.

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: 4b9. *note ABC: 1110, 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: 2ea. 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(): dbb.

     Listas implementam todas as operações de sequências *note comuns:
     249d. e *note mutáveis: 2450.  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(): dbc. aceita 2 argumentos que só podem ser
          passados como *note argumentos somente-nomeados: 59e.:

          '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(): 13d6. 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():
          dbb. para solicitar explicitamente uma nova instância da lista
          ordenada).

          O método *note sort(): dbc. é 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: 246f.

          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: 2ea. 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(): 166f.).  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:
184. ou *note dict: 183.).

 -- 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(): 608.: ‘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: 249d. 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(): 4da. 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: b33. 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: 347.

 -- Classe: range (stop, /)

 -- Classe: range (start, stop, step=1, /)

     Os argumentos para o construtor de intervalo devem ser inteiros
     (*note int: 19b. embutido ou qualquer objeto que implemente o
     método especial *note __index__(): 19e.).  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: 2ea. 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: 13c1. são permitidos, mas alguns recursos (como *note
     len(): 835.) podem levantar *note OverflowError: a77.

     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: 249d. 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: b33. sobre um *note list: 24c. ou *note
tuple: 608. regular é que um objeto *note range: b33. 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:
13c0, 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: 1ee4.):

     >>> 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: 24ac, *note stop: 24ad. e *note step: 24ae, 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: 19b. 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: 24ac, *note stop: 24ad. e *note
step: 24ae.

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: Resumo dos métodos de tipo de sequência binária e de texto,  Next: Tipo sequência de texto — str,  Prev: Tipos sequências — list tuple range,  Up: Tipos embutidos

5.4.8 Resumo dos métodos de tipo de sequência binária e de texto
----------------------------------------------------------------

A tabela a seguir resume os métodos de tipos de sequência binária e de
texto por categoria.

Categoria                      Métodos                                                     Métodos
                               *note str: 169.                                             *note bytes: 192. e
                                                                                           *note bytearray: 342.
                                                                                           
---------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                              
Formatação                     *note str.format(): 828.
                               
                                                                                                                         
*note str.format_map(): fcb.

*note Literais de strings formatadas: 19a.

*note Formatação de string no estilo printf: 8d0.               *note Estilo de Formatação de bytes printf-style: f75.
                                                                
                                                                                                                              
Pesquisa e substituição        *note str.find(): 109e.*note str.rfind(): 109f.             *note bytes.find(): 1ae1.*note bytes.rfind(): 1ae2.
                                                                                                                    
                                                                                                                         
*note str.index(): 18fe.       *note str.rindex(): 1453.        *note bytes.index(): 24b1. *note bytes.rindex(): 24b2.
                                                                                           
                                                                                                                         
*note str.startswith(): 10c1.                                   *note bytes.startswith(): 24b3.
                                                                
                                                                                                                         
*note str.endswith(): 10c2.                                     *note bytes.endswith(): 24b4.
                                                                
                                                                                                                         
*note str.count(): 18c9.                                        *note bytes.count(): 18ca.
                                                                
                                                                                                                         
*note str.replace(): 4b2.                                       *note bytes.replace(): 24b5.
                                                                
                                                                                                                              
Divisão e união                *note str.split(): 10a0.    *note str.rsplit(): 1451.       *note bytes.split(): 24b6.    *note bytes.rsplit(): 24b7.
                                                                                                                         
                                                                                                                         
*note str.splitlines(): 1452.                                   *note bytes.splitlines(): 24b8.
                                                                
                                                                                                                         
*note str.partition(): 10a1.                                    *note bytes.partition(): 24b9.
                                                                
                                                                                                                         
*note str.rpartition(): 1454.                                   *note bytes.rpartition(): 24ba.
                                                                
                                                                                                                         
*note str.join(): 249f.                                         *note bytes.join(): 24a0.
                                                                
                                                                                                                              
String Classification          *note str.isalpha(): 24bb.                                  *note bytes.isalpha(): 24bc.
                                                                                           
                                                                                                                         
*note str.isdecimal(): 24bd.

*note str.isdigit(): 24be.                                      *note bytes.isdigit(): 24bf.
                                                                
                                                                                                                         
*note str.isnumeric(): 24c0.

*note str.isalnum(): 24c1.                                      *note bytes.isalnum(): 24c2.
                                                                
                                                                                                                         
*note str.isidentifier(): 1bfd.

*note str.islower(): 24c3.                                      *note bytes.islower(): 24c4.
                                                                
                                                                                                                         
*note str.isupper(): 24c5.                                      *note bytes.isupper(): 24c6.
                                                                
                                                                                                                         
*note str.istitle(): 24c7.                                      *note bytes.istitle(): 24c8.
                                                                
                                                                                                                         
*note str.isspace(): 24c9.                                      *note bytes.isspace(): 24ca.
                                                                
                                                                                                                         
*note str.isprintable(): fcc.

Case Manipulation              *note str.lower(): 1a92.                                    *note bytes.lower(): 24cb.
                                                                                           
                                                                                                                         
*note str.upper(): 24cc.                                        *note bytes.upper(): 24cd.
                                                                
                                                                                                                         
*note str.casefold(): fca.

*note str.capitalize(): 24ce.                                   *note bytes.capitalize(): 24cf.
                                                                
                                                                                                                         
*note str.title(): 24d0.                                        *note bytes.title(): 24d1.
                                                                
                                                                                                                         
*note str.swapcase(): 24d2.                                     *note bytes.swapcase(): 24d3.
                                                                
                                                                                                                              
Preenchimento e remoção        *note str.ljust(): 1f17.    *note str.rjust(): 1f16.        *note bytes.ljust(): 24d4.    *note bytes.rjust(): 24d5.
                                                                                                                         
                                                                                                                         
*note str.center(): 1f18.                                       *note bytes.center(): 24d6.
                                                                
                                                                                                                         
*note str.expandtabs(): 24d7.                                   *note bytes.expandtabs(): 24d8.
                                                                
                                                                                                                         
*note str.strip(): 169d.                                        *note bytes.strip(): 24d9.
                                                                
                                                                                                                         
*note str.lstrip(): 169e.                                  *note str.rstrip(): 169f.*note bytes.lstrip(): 24da.          *note bytes.rstrip(): 24db.
                                                                                                                         
                                                                                                                              
Tradução e codificação         *note str.translate(): 24dc.                                *note bytes.translate(): 24dd.
                                                                                           
                                                                                                                         
*note str.maketrans(): fcd.                                     *note bytes.maketrans(): 1470.
                                                                
                                                                                                                         
*note str.encode(): ac8.

                                                                *note bytes.decode(): ac9.
                                                                


File: python.info,  Node: Tipo sequência de texto — str,  Next: Tipos de sequência binária — bytes bytearray memoryview,  Prev: Resumo dos métodos de tipo de sequência binária e de texto,  Up: Tipos embutidos

5.4.9 Tipo sequência de texto — ‘str’
-------------------------------------

Os dados textuais em Python são tratados com objetos *note str: 169, ou
'strings'.  Strings são *note sequências: 1ee4. 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: 214a. para mais informações sobre
as várias formas de literal de string, incluindo o suporte a *note
sequêncis de escape: 67c, 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: 169.

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():
249f. ou a classe *note io.StringIO: 111f. 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: 1e96. 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): 825, 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__(): 825,
     então a função *note str(): 169. retornará *note repr(object): 1c1.

     Se pelo menos um de 'encoding' ou 'errors' for fornecido, 'object'
     deve ser um *note objeto bytes ou similar: 193. (por exemplo, *note
     bytes: 192. ou *note bytearray: 342.).  Nesse caso, se 'object' for
     um objeto *note bytes: 192. (ou *note bytearray: 342.), então
     ‘str(bytes, encoding, errors)’ equivale a *note
     bytes.decode(encoding, errors): ac9.  Caso contrário, o objeto
     bytes subjacente ao objeto buffer é obtido antes de chamar *note
     bytes.decode(): ac9.  Veja *note Tipos de sequência binária —
     bytes, bytearray, memoryview: 2452. e *note Protocolo de buffer:
     25f. para obter informações sobre objetos buffer.

     Passando um objeto *note bytes: 192. para *note str(): 169. 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: 7ee. 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: 1e96. e a seção *note Métodos
     de string: 1e97. abaixo.  Para gerar strings formatadas, veja as
     seções *note Literais de strings formatadas: 19a. e *note Sintaxe
     das strings de formato: 158d.  Além disso, veja a seção *note
     Serviços de Processamento de Texto: 24df.

* Menu:

* Métodos de string::
* Strings literais formatadas (f-strings): Strings literais formatadas f-strings.
* Formatação de string no estilo printf::


File: python.info,  Node: Métodos de string,  Next: Strings literais formatadas f-strings,  Up: Tipo sequência de texto — str

5.4.9.1 Métodos de string
.........................

Strings implementam todas as operações *note comuns: 249d. 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(): 828, *note Sintaxe das strings de formato: 158d. e
*note Formatação personalizada de strings: 24e1.) 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: 8d0.).

A seção *note Serviços de Processamento de Texto: 24e2. 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: be.).

 -- 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' é similar a mudar para letras minúsculas, mas mais
     agressivo porque destina-se a remover todas as diferenças
     maiúsculas/minúsculas em uma string.  Por exemplo, a letra
     minúscula alemã ‘'ß'’ é equivalente a ‘"ss"’.  Como ela já é uma
     minúscula, o método *note lower(): 1a92. não irá fazer nada para
     ‘'ß'’; já o método *note casefold(): fca. converte a letra para
     ‘"ss"’.

     O algorítimo 'casefolding' está descrito na seção 3.13 'Diretriz de
     Caixa Alta e Caixa Baixa' 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: 192.

     'encoding' tem como padrão ‘'utf-8'’; veja *note Standard
     Encodings: fac. 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: 45f. é
     levantada.  Outros valores possíveis são ‘'ignore'’, ‘'replace'’,
     ‘'xmlcharrefreplace'’, ‘'backslashreplace'’ e qualquer outro nome
     registrado via *note codecs.register_error(): 1689.  Veja *note
     Error Handlers: 1a8b. 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: 502. esteja
     ativado ou uma *note construção de depuração: 503. 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: 502. e no
     *note modo de depuração: 503.

 -- 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(): 10c1. e *note removesuffix(): ac3.

 -- 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(): 109f. e *note index(): 18fe.

          Nota: O método *note find(): 109e. 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: 348.:

               >>> '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.

          >>> "The sum of 1 + 2 is {0}".format(1+2)
          'The sum of 1 + 2 is 3'

     Veja *note Sintaxe das strings de formato: 158d. 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: 19b, *note float: 196,
          *note complex: 197, *note decimal.Decimal: 1fd. 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: 183.  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]])

     Senelhante a *note find(): 109e, mas levanta *note ValueError: 2ea.
     quando a substring não é encontrada.

 -- 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 ()

     Retorna ‘True’ se todos os caracteres na string são alfabéticos e
     existe pelo menos um caractere, ‘False’ caso contrário.  Caracteres
     alfabéticos são aqueles caracteres definidos na base de dados de
     caracteres Unicode como “Letra”, isto é, aqueles cuja propriedade
     na categoria geral é um destes: “Lm”, “Lt”, “Lu”, “Ll” ou “Lo”.
     Perceba que isso é diferente da propriedade Alfabética definida na
     seção 4.10 "Letters, Alphabetic, and Ideographic" do Padrão
     Unicode(2).

 -- 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.

     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, exemplo U+0660, ou dígito zero para
     arábico-índico.  Formalmente, um caractere decimal é um caractere
     em Unicode cuja categoria geral é “Nd”.

 -- 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 Nomes (identificadores e
     palavras reservadas): 214b.

     *note keyword.iskeyword(): 24e3. pode ser usada para testar se a
     string ‘s’ é uma palavra reservada, tal como *note def: 1649. e
     *note class: 14d3.

     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 ()

     Retorna ‘True’ se todos os caracteres na string são caracteres
     numéricos, e existe pelo menos um caractere, ‘False’ caso
     contrário.  Caracteres numéricos incluem dígitos, e todos os
     caracteres que têm a propriedade com valor numérico Unicode, isto
     é: U+2155, um quinto de fração vulgar.  Formalmente, caracteres
     numéricos são aqueles que possuem propriedades com valor
     Numeric_Type=Digit, Numeric_Type=Decimal ou Numeric_Type=Numeric.

 -- 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(): 1c1. usar em sua saída; “não imprimível” significa que
     *note repr(): 1c1. em tipos embutidos fará o escape hexadecimal do
     caractere.  Não tem relação com o tratamento de strings escritas em
     *note sys.stdout: cc0. ou *note sys.stderr: b29.

     Os caracteres imprimíveis são aqueles que no banco de dados de
     caracteres Unicode (veja *note unicodedata: 10b.) 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.

 -- 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: 10b.), 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.

 -- 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: 198. será levantada se existirem quaisquer
     valores que não sejam strings no 'iterável', incluindo objetos
     *note bytes: 192.  O separador entre elementos é a string que está
     fornecendo este método.

 -- 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)’.

 -- Método: str.lower ()

     Retorna uma cópia da string com todos os caracteres que permitem
     maiúsculo E minúsculo (5) convertidos para letras minúsculas.

     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(): ac2. 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(): 24dc.

     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, /)

     Se a string começar com a string 'prefix', retorna
     ‘string[len(prefix):]’.  Caso contrário, retorna uma cópia da
     string original:

          >>> 'TestHook'.removeprefix('Test')
          'Hook'
          >>> 'BaseTestCase'.removeprefix('Test')
          'BaseTestCase'

     Adicionado na versão 3.9.

 -- Método: str.removesuffix (suffix, /)

     Se a string terminar com a string 'suffix' e a 'suffix' não estiver
     vazia, retorna ‘string[:-len(suffix)]’.  Caso contrário, retorna
     uma cópia da string original:

          >>> 'MiscTests'.removesuffix('Tests')
          'Misc'
          >>> 'TmpDirMixin'.removesuffix('Tests')
          'TmpDirMixin'

     Adicionado na versão 3.9.

 -- Método: str.replace (old, new, /, count=-1)

     Retorna uma cópia da string com todas as ocorrências da substring
     'old' substituídas por 'new'.  Se o argumento opcional 'count' é
     fornecido, apenas as primeiras 'count' ocorrências são
     substituídas.  Se 'count' não é especificado ou é igual a ‘-1’,
     então todas as ocorrências serão substituídas.

     Alterado na versão 3.13: 'count' agora é suportado como um
     argumento nomeado.

 -- Método: str.rfind (sub[, start[, end]])

     Retorna o maior índice onde a substring 'sub' foi encontrada dentro
     da string, onde 'sub' está contida dentro do intervalo
     ‘s[start:end]’.  Argumentos opcionais 'start' e 'end' são
     interpretados usando a notação slice.  Retorna ‘-1’ em caso de
     falha.

 -- Método: str.rindex (sub[, start[, end]])

     Similar a *note rfind(): 109f. mas levanta um *note ValueError:
     2ea. 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.

 -- 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(): 1451. se comporta como *note split(): 10a0, 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(): ac3. 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(): 59b.).  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   ']

 -- 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: f29.

     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(): 10a0. 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(): 24e5. 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"

 -- 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__():
     581, tipicamente um *note mapeamento: 13b7. ou uma *note sequência:
     70b.  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: 24e6,
     para mapear o caractere para si mesmo.

     Você pode usar *note str.maketrans(): fcd. para criar um mapa de
     tradução com mapeamentos caractere para caractere em diferentes
     formatos.

     Veja também o módulo *note codecs: 1c. 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/Unicode16.0.0/core-spec/chapter-3/#G33992

   (2) 
https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-4/#G91002

   (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/Unicode16.0.0/core-spec/chapter-3/#G33992

   (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/Unicode16.0.0/core-spec/chapter-3/#G33992


File: python.info,  Node: Strings literais formatadas f-strings,  Next: Formatação de string no estilo printf,  Prev: Métodos de string,  Up: Tipo sequência de texto — str

5.4.9.2 Strings literais formatadas (f-strings)
...............................................

Adicionado na versão 3.6.

Alterado na versão 3.7: *note await: 18d. e *note async for: c94. 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(): 828, e convertidas em objetos *note str: 169.
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:
158d.:

     >>> 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():
169, 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(): 15d7.
               
               
‘!r’           *note repr(): 1c1.
               
               
‘!s’           *note str(): 169.
               

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(): 1c1.
(‘!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: 158d. 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.9.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 uma série de erros comuns
     (como a falha na exibição de Tuplas e Dicionários corretamente).

     O uso de *note literais de strings formatadas: 19a, a interface
     *note str.format(): 828. ou *note string.Template: 88c. pode ajudar
     a evitar esses erros.  Cada uma dessas alternativas oferece suas
     próprias vantagens e desvantagens 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(): 1c1.).                                      
                 
                                                                           
‘'s'’            String (converte qualquer objeto Python usando a função   (5)
                 *note str(): 169.).                                       
                 
                                                                           
‘'a'’            String (converte qualquer objeto Python usando a função   (5)
                 *note ascii(): 15d7.).                                    
                 
                                                                           
‘'%'’            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.10 Tipos de sequência binária — ‘bytes’, ‘bytearray’, ‘memoryview’
----------------------------------------------------------------------

Os principais tipos embutidos para manipular dados binários são *note
bytes: 192. e *note bytearray: 342.  Eles são suportados por *note
memoryview: 165. a qual usa o *note protocolo buffer: 25f. para acessar
a memória de outros objetos binários sem precisar fazer uma cópia.

O módulo *note array: 8. 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.10.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: 214a. 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: 2ea.).  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: 1d4f.

     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: 192. 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(): 190. agora
          ignora todos os espaços em branco em ASCII na string, não
          apenas espaços.

          Alterado na versão 3.14: *note bytes.fromhex(): 190. agora
          aceita objetos *note bytes: 192. e *note similares: 193. ASCII
          como entrada.

     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(): f59. 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.10.2 Objetos Bytearray
..........................

Objetos *note bytearray: 342. são mutáveis, em contrapartida a objetos
*note bytes: 192.

 -- 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: 2450. além das operações
     comuns de bytes e bytearray descritas em *note Operações com Bytes
     e Bytearray: 2451.

     Veja também o tipo embutido *note bytearray: 1d50.

     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: 342. 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(): 191. agora
          ignora todos os espaços em branco em ASCII na string, não
          apenas espaços.

          Alterado na versão 3.14: *note bytearray.fromhex(): 191. agora
          aceita objetos *note bytes: 192. e *note similares: 193. ASCII
          como entrada.

     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(): f59,
          *note bytearray.hex(): f5a. agora suporta os parâmetros
          opcionais 'sep' e 'bytes_per_sep' para inserir separadores
          entre bytes na saída hexadecimal.

      -- Método: resize (size, /)

          Redimensiona *note bytearray: 342. para conter 'size' bytes.
          'size' deve ser maior ou igual a 0.

          Se *note bytearray: 342. precisar ser reduzido, os bytes além
          de 'size' serão truncados.

          Se *note bytearray: 342. precisar crescer, todos os novos
          bytes, aqueles além de 'size', serão definidos como bytes
          nulos.

          Isso equivale a:

               >>> def resize(ba, size):
               ...     if len(ba) > size:
               ...         del ba[size:]
               ...     else:
               ...         ba += b'\0' * (size - len(ba))

          Exemplos:

               >>> shrink = bytearray(b'abc')
               >>> shrink.resize(1)
               >>> (shrink, len(shrink))
               (bytearray(b'a'), 1)
               >>> grow = bytearray(b'abc')
               >>> grow.resize(5)
               >>> (grow, len(grow))
               (bytearray(b'abc\x00\x00'), 5)

          Adicionado na versão 3.14.

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.10.3 Operações com Bytes e Bytearray
........................................

Ambos os tipos, bytes e os objetos bytearray suportam as operações de
sequências *note comuns: 249d.  Os mesmo interagem não apenas com
operandos do mesmo tipo, mas com qualquer *note objeto bytes ou similar:
193.  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: 193. 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: 193.

          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: 193.

          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: 169.

     'encoding' tem como padrão ‘'utf-8'’; veja *note Standard
     Encodings: fac. 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: 45f. é
     levantada.  Outros valores possíveis são ‘'ignore'’, ‘'replace'’ e
     qualquer outro nome registrado via *note codecs.register_error():
     1689.  Veja *note Error Handlers: 1a8b. 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: 502. esteja
     ativado ou uma *note construção de depuração: 503. seja usada.

          Nota: Passar o argumento 'encoding' para *note str: 169.
          permite decodificar qualquer objeto *note objeto bytes ou
          similar: 193. 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: 502. e no
     *note modo de depuração: 503.

 -- 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: 193.

 -- 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: 193. ou um inteiro no intervalo de 0 a 255.

          Nota: O método *note find(): 1ae1. 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: 348.:

               >>> 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(): 1ae1, mas levanta a exceção *note ValueError:
     2ea. quando a subsequência não for encontrada.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: 193. 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: 198. será levantada se existirem quaisquer valores
     que não sejam *note objeto bytes ou similar: 193, no 'iterable',
     incluindo objetos *note str: 169.  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(): 24dd, 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: 193. 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: 193.

 -- 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: 193.

          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: 193. 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(): 1ae2. mas levanta *note ValueError:
     2ea. quando a subsequência 'sub' não é encontrada.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: 193. 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: 193.

 -- 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: 193.

 -- 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(): 1470. 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: 192, 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: 192, 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: 193.  Consulte *note removeprefix():
     24ed. 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: 192, 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(): 24fc.
     comporta-se como *note split(): 24fd, 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: 193.  Consulte *note removesuffix():
     24ef. 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: 193.

     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: 193.

          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(): 24d1.
     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: f29. 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(): 24b6, 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(): 24d2, é 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: 192, 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.10.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: 25f. o que possui                  
                 *note __bytes__(): 7f3.).
                 
                                                                           
‘'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.10.5 Memory Views
.....................

O objeto *note memoryview: 165. permite que o código Python acesse os
dados internos de um objeto que suporte o *note buffer protocol: 25f.
sem copiá-lo.

 -- Classe: memoryview (object)

          Cria uma *note memoryview: 165. que referencia 'object'.
          'object' deve ter suporte ao protocolo de buffer.  Objetos
          embutidos que suportam o protocolo de buffer incluem *note
          bytes: 192. e *note bytearray: 342.

          Uma *note memoryview: 165. 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: 192. e *note bytearray: 342, um elemento é um byte
          único, mas outros tipos tais como *note array.array: 4b8.
          podem ter elementos maiores.

          ‘len(view)’ é igual ao comprimento de *note tolist: 2514, 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: 198. em vez de retornar 1.

          O atributo *note itemsize: 2515. vai lhe dar um número de
          bytes em um único elemento.

          Um *note memoryview: 165. 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: 2516. é um dos especificadores de formatação
          nativos do módulo *note struct: db, 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: 819.
          (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: 819.

          Alterado na versão 3.4: O memoryview agora é registrado
          automaticamente como uma classe *note
          collections.abc.Sequence: 13c0.

          Alterado na versão 3.5: Atualmente, os memoryvies podem ser
          indexadas com uma tupla de números inteiros.

          Alterado na versão 3.14: memoryview é agora um *note tipo
          genérico: 1a1.

          *note memoryview: 165. 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: db.

               Para o subconjunto *note struct: db. a formatação de
               Strings atualmente suportadas por *note tolist(): 2514,
               ‘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: db, 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: 192. 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(): 2518. suporta
               todos os formatos de strings, incluindo aqueles que não
               estão na sintaxe do módulo *note struct: db.

               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(): f59,
               *note memoryview.hex(): f5b. 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(): 2514. agora
               suporta todos os formatos nativos de caracteres únicos na
               sintaxe do módulo *note struct: db, 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: 342. 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: 2ea.
               (exceto *note release(): 13ba, 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: 251b. r C-contíguo -> 1D.

               O formato de destino é restrito a um elemento em formato
               nativo na sintaxe *note struct: db.  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.

           -- Método: count (value, /)

               Conta o número de ocorrências de 'value'.

               Adicionado na versão 3.14.

      -- Método: index (value, start=0, stop=sys.maxsize, /)

               Retorna o índice da primeira ocorrência de 'value' (no
               índice 'index' ou depois dele e antes do índice 'stop').

               Levanta uma exceção *note ValueError: 2ea. se 'value' não
               puder ser encontrado.

               Adicionado na versão 3.14.

          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: db.) 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(): 2514.) 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: 251f.
               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: 251f.
               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: 251b.
               C.

               Adicionado na versão 3.3.

           -- Atributo: f_contiguous

               Um bool que indica se a memória é *note contígua: 251b.
               Fortran.

               Adicionado na versão 3.3.

           -- Atributo: contiguous

               Um bool que indica se a memória é *note contígua: 251b.

               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.11 Tipo conjuntos — ‘set’, ‘frozenset’
------------------------------------------

Um objeto 'conjunto' é uma coleção não ordenada de objetos *note
hasheáveis: 819. 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: 183,
*note list: 24c. e *note tuple: 608, e o módulo *note collections: 1e.)

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: 184. e
*note frozenset: 7e7.  O tipo *note set: 184. é mutável – o conteúdo
pode ser alterado usando métodos como ‘add()’ e ‘remove()’.  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:
7e7. é imutável e *note hasheável: 819. – 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:
184.

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: 819.  Para representar conjuntos de
     sets, os sets internos devem ser objetos *note frozenset: 7e7.  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: 184. e *note frozenset: 7e7. 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: 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: issubset (other, /)

      -- Método: set <= other

          Testa se cada elemento do conjunto está contido em 'other'.

      -- Método: set < other

          Testa se o conjunto é um subconjunto próprio de 'other', isto
          é, ‘set <= other and set != other’.

      -- Método: issuperset (other, /)

      -- Método: set >= other

          Testa se cada elemento em 'other' está contido no conjunto.

      -- Método: set > other

          Testa se o conjunto é um superconjunto próprio de 'other',
          isto é, ‘set >= other and set != other’.

      -- Método: union (*others)

      -- Método: set | other | ...

          Retorna um novo conjunto com elementos do conjunto e de todos
          os outros.

      -- Método: intersection (*others)

      -- Método: set & other & ...

          Retorna um novo conjunto com elementos comuns do conjunto e de
          todos os outros.

      -- Método: difference (*others)

      -- Método: set - other - ...

          Retorna um novo conjunto com elementos no conjunto que não
          estão nos outros.

      -- Método: symmetric_difference (other, /)

      -- Método: set ^ other

          Retorna um novo conjunto com elementos estejam ou no conjunto
          ou em 'other', mas não em ambos.

      -- Método: copy ()

          Retorna uma cópia rasa do conjunto.

     Observe que, as versões não-operador dos métodos *note union():
     1671, *note intersection(): 1672, *note difference(): 252a, *note
     symmetric_difference(): 252b, *note issubset(): 2528, e *note
     issuperset(): 2529. 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: 184. quanto *note frozenset: 7e7. suportam
     comparar um conjunto com outro.  Dois conjuntos são iguais se, e
     somente se, cada elemento de cada conjunto está contido no outro
     conjunto (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: 184. são comparadas a instâncias de *note
     frozenset: 7e7. 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(): dbc. é
     indefinida para listas e conjuntos.

     Elementos de conjuntos, assim como chaves de dicionário, devem ser
     *note hasheáveis: 819.

     Operações binárias que misturam instâncias de *note set: 184. com
     *note frozenset: 7e7. retornam o tipo do primeiro operando.  Por
     exemplo: ‘frozenset('ab') | set('bc')’ retorna uma instância de
     *note frozenset: 7e7.

     A seguinte tabela lista operações disponíveis para *note set: 184.
     que não se aplicam para instâncias imutáveis de *note frozenset:
     7e7.:

      -- Método: update (*others)

      -- Método: set |= other | ...

          Atualiza o conjunto, adicionando elementos dos outros.

      -- Método: intersection_update (*others)

      -- Método: set &= other & ...

          Atualiza o conjunto, mantendo somente elementos encontrados
          nele e em outros.

      -- Método: difference_update (*others)

      -- Método: set -= other | ...

          Atualiza o conjunto, removendo elementos encontrados em
          outros.

      -- Método: symmetric_difference_update (other, /)

      -- Método: set ^= other

          Atualiza o conjunto, mantendo somente elementos encontrados em
          qualquer conjunto, mas não em ambos.

      -- Método: add (elem, /)

          Adiciona o elemento 'elem' ao conjunto.

      -- Método: remove (elem, /)

          Remove o elemento 'elem' do conjunto.  Levanta *note KeyError:
          5dd. se 'elem' não estiver contido no conjunto.

      -- Método: discard (elem, /)

          Remove o elemento 'elem' do conjunto se ele estiver presente.

      -- Método: pop ()

          Remove e retorna um elemento arbitrário do conjunto.  Levanta
          *note KeyError: 5dd. se o conjunto estiver vazio.

      -- Método: clear ()

          Remove todos os elementos do conjunto.

     Perceba, as versões sem operador dos métodos *note update(): 252d,
     *note intersection_update(): 1673, *note difference_update(): 252e.
     e *note symmetric_difference_update(): 1674. irão aceitar qualquer
     iterável como um argumento.

     Perceba, o argumento 'elem' para os métodos *note __contains__():
     15ab, *note remove(): 252f. e *note discard(): 2530. 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.12 Tipo mapeamento — ‘dict’
-------------------------------

Um objeto *note mapeamento: 13b7. mapeia valores *note hasheáveis: 819.
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: 24c, *note
set: 184. e *note tuple: 608, e o módulo *note collections: 1e.)

As chaves de um dicionário são 'quase' valores arbitrários.  Valores que
não são *note hasheáveis: 819, 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__(): 581. no argumento com cada chave retornada pelo
     método.  Caso contrário, o argumento posicional deve ser um objeto
     *note iterável: 1423.  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.

     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 são iguais se e somente se eles os mesmos pares ‘(key,
     value)’ (independente de ordem).  Comparações de ordem (‘<’, ‘<=’,
     ‘>=’, ‘>’) levantam *note TypeError: 198.  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 suportam (e portanto, tipos
     de mapeamento personalizados devem suportar 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: 5dd. se 'key' não estiver no mapeamento.

          Se uma subclasse de um dict define um método *note
          __missing__(): 13b9. 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__(): 13b9.  Se
          *note __missing__(): 13b9. não for definido, então *note
          KeyError: 5dd. é levantada.  *note __missing__(): 13b9. 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: 128d.  Um método ‘__missing__()’
          diferente é usado para *note collections.defaultdict: 13b8.

      -- Describe: d[key] = value

          Define ‘d[key]’ para 'value'.

      -- Describe: del d[key]

          Remove ‘d[key]’ do 'd'.  Levanta uma exceção *note KeyError:
          5dd. 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(): 24d. é 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: f73. 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: 5dd.

      -- 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: 2535.

      -- 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: 2535.

      -- 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:
          5dd. é 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(): 1714. é útil para destrutivamente iterar
          sobre um dicionário, algo comumente usado em algoritmos de
          conjunto.  Se o dicionário estiver vazio, chamar *note
          popitem(): 1714. levanta um *note KeyError: 5dd.

          Alterado na versão 3.7: Ordem LIFO agora é garantida.  Em
          versões anteriores, *note popitem(): 1714. 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(): 1654. aceita ou outro objeto com um método
          ‘keys()’ (em cada caso *note __getitem__(): 581. é 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: 2535.

          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: 13b7. ou um *note iterável:
          1423. 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: 68d. podem ser usados para criar uma visão
somente leitura de um *note dict: 183.

* 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.12.1 Objetos de visão de dicionário
.......................................

Os objetos retornados por *note dict.keys(): 9c6, *note dict.values():
9c7. e *note dict.items(): 9c8. 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(): 1a0.: ‘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: 243. 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: 68d. 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: 819.  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: 2537. 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.13 Tipos de Gerenciador de Contexto
---------------------------------------

A instrução *note with: 186. 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: 186. usando este gerenciador de
     contexto.

     Um exemplo de gerenciador de contexto que retorna a si mesmo é um
     *note objeto arquivo: 13bf.  Objeto arquivos retornam a si mesmos
     do método __enter__() para permitir que *note open(): 314. seja
     usado como a expressão de contexto em uma instrução *note with:
     186.

     Um exemplo de gerenciador de contexto que retorna um objeto
     relacionado é aquele retornado por *note decimal.localcontext():
     1578.  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: 186, 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: 186, 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’.

     Retornar um valor verdadeiro deste método fará com que a instrução
     *note with: 186. suprima a exceção e continue a execução com a
     instrução imediatamente após a instrução ‘with’.  Caso contrário a
     exceção continuará propagando após este método ter encerrado sua
     execução.  Exceções que ocorrerem durante a execução deste método
     irão substituir qualquer exceção que tenha ocorrido dentro do corpo
     da instrução ‘with’.

     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__(): 14fc. 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: 27. para alguns exemplos.

Os *note gerador: 1257.es do Python e o decorador *note
contextlib.contextmanager: 13fe. fornecem uma maneira conveniente de
implementar esses protocolos.  Se uma função geradora for decorada com o
decorador *note contextlib.contextmanager: 13fe, ela retornará um
gerenciador de contexto implementando os métodos necessários *note
__enter__(): 2539. e *note __exit__(): 253a, 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.14 Tipos de anotação de tipo — Apelido genérico, União
----------------------------------------------------------

Os principais tipos embutidos para *note anotações de tipo: 15c. são
*note Apelido genérico: 8b6. e *note União: 9bb.

* 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.14.1 Tipo Generic Alias
...........................

Objetos ‘GenericAlias’ são geralmente criados *note subscrevendo: 2265.
uma classe.  Eles são mais usados com *note classes contêineres: 226b,
como *note list: 24c. ou *note dict: 183.  Por exemplo, ‘list[int]’ é um
objeto ‘GenericAlias’ criado pela subscrição da classe ‘list’ com o
argumento *note int: 19b.  Objetos ‘GenericAlias’ são destinados
principalmente para uso com *note anotações de tipo: 15c.

     Nota: Geralmente só é possível subscrever uma classe se a classe
     implementar o método especial *note __class_getitem__(): 938.

Um objeto ‘GenericAlias’ atua como um proxy para um *note tipo genérico:
1a1, implementando 'genéricos parametrizados'.

Para uma classe contêiner, o(s) argumento(s) fornecido(s) para uma *note
subscrição: 2265. 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: 184. em que todos os elementos são
do tipo *note bytes: 192.

Para uma classe que define *note __class_getitem__(): 938, 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: be.
podem ser usadas tanto no tipo de dados *note str: 169. quanto no tipo
de dados *note bytes: 192.:

   * Se ‘x = re.search('foo', 'foo')’, ‘x’ será um objeto *note
     re.Match: 117e. onde os valores de retorno de ‘x.group(0)’ e ‘x[0]’
     serão ambos do tipo *note str: 169.  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:
     192.), ‘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: 192.  Em anotações de tipo, representaríamos esta variedade
     de objetos *note re.Match: 117e. com ‘re.Match[bytes]’.

Objetos ‘GenericAlias’ são instâncias da classe *note
types.GenericAlias: 9e2, 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: 24c. contendo elementos *note
     float: 196.:

          def average(values: list[float]) -> float:
              return sum(values) / len(values)

     Outro exemplo para *note mapeamento: 13b7. de objetos, usando um
     *note dict: 183, 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:
     169. e valores do tipo *note int: 19b.:

          def send_post_request(url: str, body: dict[str, int]) -> None:
              ...

As funções embutidas *note isinstance(): 2ac. e *note issubclass(): 9ba.
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: 15c.  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(): 1c1. ou *note str(): 169. sobre um genérico mostra
o tipo parametrizado:

     >>> repr(list[int])
     'list[int]'

     >>> str(list[int])
     'list[int]'

O método *note __getitem__(): 581. 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:
2260. são usadas.  O índice deve ter tantos elementos quantos forem os
itens de variável de tipo no objeto ‘GenericAlias’ *note __args__: 253d.

     >>> 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.14.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: 608.

   * *note list: 24c.

   * *note dict: 183.

   * *note set: 184.

   * *note frozenset: 7e7.

   * *note type: f38.

   * *note asyncio.Future: dba.

   * *note asyncio.Task: 1c7.

   * *note collections.deque: 7e9.

   * *note collections.defaultdict: 13b8.

   * *note collections.OrderedDict: 7e8.

   * *note collections.Counter: 128d.

   * *note collections.ChainMap: e0a.

   * *note collections.abc.Awaitable: fd0.

   * *note collections.abc.Coroutine: fd1.

   * *note collections.abc.AsyncIterable: fd3.

   * *note collections.abc.AsyncIterator: fd2.

   * *note collections.abc.AsyncGenerator: e7b.

   * *note collections.abc.Iterable: 253f.

   * *note collections.abc.Iterator: 2540.

   * *note collections.abc.Generator: fcf.

   * *note collections.abc.Reversible: e79.

   * *note collections.abc.Container: 2541.

   * *note collections.abc.Collection: e78.

   * *note collections.abc.Callable: 9e1.

   * *note collections.abc.Set: 2537.

   * *note collections.abc.MutableSet: 2542.

   * *note collections.abc.Mapping: abd.

   * *note collections.abc.MutableMapping: 12a8.

   * *note collections.abc.Sequence: 13c0.

   * *note collections.abc.MutableSequence: 4b9.

   * *note collections.abc.ByteString: 340.

   * *note collections.abc.MappingView: 2543.

   * *note collections.abc.KeysView: 2544.

   * *note collections.abc.ItemsView: 2545.

   * *note collections.abc.ValuesView: 2546.

   * *note contextlib.AbstractContextManager: e7e.

   * *note contextlib.AbstractAsyncContextManager: d14.

   * *note dataclasses.Field: 18af.

   * *note functools.cached_property: 758.

   * *note functools.partialmethod: 217.

   * *note os.PathLike: e3f.

   * *note queue.LifoQueue: 2547.

   * *note queue.Queue: 1586.

   * *note queue.PriorityQueue: 2548.

   * *note queue.SimpleQueue: d55.

   * *note re.Pattern: 117d.

   * *note re.Match: 117e.

   * *note shelve.BsdDbShelf: 2549.

   * *note shelve.DbfilenameShelf: 254a.

   * *note shelve.Shelf: 1191.

   * *note types.MappingProxyType: 68d.

   * *note weakref.WeakKeyDictionary: 187b.

   * *note weakref.WeakMethod: 11e5.

   * *note weakref.WeakSet: 7ea.

   * *note weakref.WeakValueDictionary: 187c.


File: python.info,  Node: Atributos especiais de objetos GenericAlias,  Prev: Classes genéricas padrão,  Up: Tipo Generic Alias

5.4.14.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: 608. (possivelmente de comprimento
     1) de tipos genéricos passado para o método *note
     __class_getitem__(): 938. 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: 481. pode não ter ‘__parameters__’ correto
          após a substituição porque *note typing.ParamSpec: 481. 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: 482.).

     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__(): 938.

*note Genéricos: 2260, *note genéricos definidos pelo usuário: 6eb. e *note typing.Generic: 18ad.

     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.14.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: 2472.  Esses tipos são destinados principalmente
para *note anotações de tipos: 15c.  A expressão de tipo de união
habilita a sintaxe de sugestão de tipo mais limpo em comparação com
subscrever *note typing.Union: 2a7.

 -- 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: 19b. ou *note float: 196.:

          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

        * Cria instâncias de *note typing.Union: 2a7.:

               int | str == typing.Union[int, str]
               type(int | str) is typing.Union

        * 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(): 2ac. e *note issubclass(): 9ba.
     também são suportados com um objeto união:

          >>> isinstance("", int | str)
          True

     No entanto, *note genéricos parametrizados: 8b6. 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 typing.Union: 2a7. e usado por verificações de *note
isinstance(): 2ac.:

     >>> import typing
     >>> isinstance(int | str, typing.Union)
     True
     >>> typing.Union()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: cannot create 'typing.Union' 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.

Alterado na versão 3.14: Objetos Union agora são instâncias de *note
typing.Union: 2a7.  Anteriormente, eram instâncias de *note
types.UnionType: 2a6, que continua sendo um apelido para *note
typing.Union: 2a7.

   ---------- 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.15 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.15.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: 7ed. 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__: 772.  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__: 772. 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__: 772. 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.15.2 Classes e Instâncias de Classes
........................................

Veja *note Objetos, valores e tipos: 21c8. e *note Definições de classe:
14d3. para estes.


File: python.info,  Node: Funções,  Next: Métodos,  Prev: Classes e Instâncias de Classes,  Up: Outros tipos embutidos

5.4.15.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: 1ecf. para mais informações.


File: python.info,  Node: Métodos,  Next: Objetos código<2>,  Prev: Funções,  Up: Outros tipos embutidos

5.4.15.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: 21f3. (tal como *note
append(): 8d1. em listas) e *note métodos de instância de classe: 1f5c.
Métodos embutidos são descritos com os tipos que suportam eles.

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: 1f5c.).  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__: 15ba. é o objeto no qual o
método opera, e *note m.__func__: 14f8. é 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: 595, 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__: 14f8.), 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: 5e4. 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: 1f5c. para mais informações.


File: python.info,  Node: Objetos código<2>,  Next: Objetos tipo,  Prev: Métodos,  Up: Outros tipos embutidos

5.4.15.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(): 4ab. e podem ser
extraídos de objetos função através do seu atributo *note __code__: 596.
Veja também o módulo *note code: 1b.

Acessar *note __code__: 596. levanta um *note evento de auditoria: 1b5d.
‘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(): 49c. ou *note
eval(): 49d.

Veja o tipo *note A hierarquia de tipos padrão: 21cb. 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.15.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(): f38.  Não existem
operações especiais sobre tipos.  O módulo padrão *note types: 109.
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.15.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.15.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: 21c4. (um nome embutido).  ‘type(Ellipsis)()’
produz o singleton *note Ellipsis: 21c4.

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: 2560. ou
     *note elementos de tupla: 2561.

   - Como o corpo de uma função em vez de uma *note instrução pass:
     1eb2.

   - 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: 165d. do doctest, como um padrão para conteúdo
     ausente.

   - O prompt Python padrão do console *note interativo: 1b5. 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.15.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: 235d. para mais informações.  Existe
exatamente um objeto *note NotImplemented: 1a2.
‘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.15.10 Objetos Internos
..........................

Veja *note A hierarquia de tipos padrão: 21cb. para esta informação.
Descreve *note objetos de quadro de pilha: 8e4, *note objetos traceback
(situação da pilha de execução): cdf, 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.16 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(): 839.

 -- Atributo: definition.__name__

     O nome da classe, função, método, descritor, ou instância geradora.

 -- Atributo: definition.__qualname__

     O *note nome qualificado: 1be4. 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: 5a6. de classes genéricas, funções e
     *note apelidos de tipo: 678.  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.17 Limitação de comprimento de string na conversão para inteiro
-------------------------------------------------------------------

CPython tem um limite global para conversão entre *note int: 19b. e
*note str: 169. 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: 19b. 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: 2ea.
é 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: 148f.  O limite mínimo que pode ser
configurado é de 640 dígitos conforme fornecido em *note
sys.int_info.str_digits_check_threshold: 148f.

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.17.1 APIs afetadas
......................

A limitação só se aplica a conversões potencialmente lentas entre *note
int: 19b. e *note str: 169. ou *note bytes: 192.:

   * ‘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(): 1af4. e *note int.to_bytes(): 1b33.

   * *note hex(): 14cb, *note oct(): 14ca, *note bin(): 14a4.

   * *note Minilinguagem de especificação de formato: 4f3. para números
     hexa, octal e binários

   * *note str: 169. para *note float: 196.

   * *note str: 169. para *note decimal.Decimal: 1fd.


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.17.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: 1a66, 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: 16f, por exemplo ‘python3 -X
     int_max_str_digits=640’

   * *note sys.flags.int_max_str_digits: 256c. contém o valor de *note
     PYTHONINTMAXSTRDIGITS: 1a66. ou *note -X int_max_str_digits: 16f.
     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: 256d. 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: df.:

   * *note sys.get_int_max_str_digits(): 1786. e *note
     sys.set_int_max_str_digits(): 1849. 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: 148f.:

   * *note sys.int_info.default_max_str_digits: 148f. é o limite padrão
     compilado.

   * *note sys.int_info.str_digits_check_threshold: 148f. é 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.17.3 Configuração recomendada
.................................

Espera-se que o padrão *note sys.int_info.default_max_str_digits: 256d.
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: 7cc.  Em uma instrução *note try: 8ed. com uma
cláusula *note except: 1ab. 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: bc3. ou de uma de suas
subclasses, e não de *note BaseException: 7cc.  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: 1f31.

* 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: 1ab. ou *note finally: 1b0, ou
     uma instrução *note with: 186, é usada.

     Esse contexto implícito da exceção pode ser complementado com uma
     causa explícita usando ‘from’ com *note raise: 7f8.:

          raise new_exc from original_exc

     A expressão a seguir *note from: 7f8. 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: 5dd. para *note AttributeError: 5e4.), 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: 87a. 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.14/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: bc3.).  Se *note str(): 169. 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: 2bf.) 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: cdf.
          associado a esta exceção.  Veja também: *note A instrução
          raise: 7f8.

      -- 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: 198. é 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(): 7cb.  Este atributo é criado quando *note
          add_note(): 7cb. é 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: a77, *note
     ZeroDivisionError: b35, *note FloatingPointError: 2577.

 -- Exceção: BufferError

     Levantado quando uma operação relacionada a *note buffer: 25f. 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: 1723, *note KeyError: 5dd.  Isso pode ser levantado
     diretamente por *note codecs.lookup(): b52.

   ---------- 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: b56. falha.

 -- Exceção: AttributeError

     Levantado quando uma referência de atributo (consulte *note
     Referências de atributo: 2336.) ou atribuição falha.  (Quando um
     objeto não oferece suporte a referências ou atribuições de
     atributos, *note TypeError: 198. é 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: 2579.
     e *note obj: 257a.

 -- Exceção: EOFError

     Levantado quando a função *note input(): 14d4. 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(): 257b. retornam uma
     string vazia quando pressionam o EOF.)

 -- Exceção: FloatingPointError

     Não usado atualmente.

 -- Exceção: GeneratorExit

     Levantado quando um *note gerador: 1257. ou uma *note corrotina:
     6ae. está fechado(a); veja *note generator.close(): 19a4. e *note
     coroutine.close(): 22af.  Herda diretamente de *note BaseException:
     7cc. em vez de *note Exception: bc3, já que tecnicamente não é um
     erro.

 -- Exceção: ImportError

     Levantada quando a instrução *note import: 7ed. 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: 257c.
     e *note path: 257d.

 -- Exceção: ModuleNotFoundError

     Uma subclasse de *note ImportError: 64f. que é levantada por *note
     import: 7ed. quando um módulo não pôde ser localizado.  Também é
     levantada quando ‘None’ é encontrado em *note sys.modules: 17ab.

     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: 198. é 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: 7cc. para que não seja capturada
     acidentalmente por códigos que tratam *note Exception: bc3. e assim
     evita que o interpretador saia.

          Nota: Capturar uma *note KeyboardInterrupt: bbb. 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: bbb. 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:
          257e.)

 -- 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: 257f.

 -- Exceção: NotImplementedError

     Essa exceção é derivada da *note RuntimeError: 243.  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: 87a.

          Cuidado: ‘NotImplementedError’ e ‘NotImplemented’ não são
          intercambiáveis.  Esta exceção deve ser usada somente conforme
          descrito acima; veja *note NotImplemented: 1a2. 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:
     87a. se não forem especificados.  Por compatibilidade com versões
     anteriores, se três argumentos são passados, o atributo *note args:
     782. contêm somente uma tupla de 2 elementos, os dois primeiros
     argumentos do construtor.

     O construtor geralmente retorna uma subclasse de *note OSError:
     2bf, como descrito abaixo em *note OS exceptions: 2580. .  A
     subclasse particular depende do valor final de *note errno: 2581.
     Este comportamento ocorre apenas durante a construção direta ou por
     meio de um apelido de *note OSError: 2bf, 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: 2581. é 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: 2581. é 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: 2582. 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(): 314. ou *note os.unlink(): 12f1.), *note
          filename: 2584. é o nome do arquivo passado para a função.
          Para funções que envolvem dois caminhos de sistema de arquivos
          (como *note os.rename(): 12ed.), *note filename2: 2585.
          corresponde ao segundo nome de arquivo passado para a função.

     Alterado na versão 3.3: *note EnvironmentError: 124a, *note
     IOError: 1249, *note WindowsError: 124b, *note socket.error: 124c,
     *note select.error: 124d. e ‘mmap.error’ foram fundidos em *note
     OSError: 2bf, e o construtor pode retornar uma subclasse.

     Alterado na versão 3.4: O atributo *note filename: 2584. 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: 752.  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: 1809. 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: 243.  É levantada
     quando uma operação é bloqueada durante o encerramento do
     interpretador e também conhecido como *note finalização do Python:
     473.

     Exemplos de operações que podem ser bloqueadas com um *note
     PythonFinalizationError: 472. durante a finalização do Python:

        * Criação de uma nova thread no Python.

        * *note União: 13e0. de uma thread de daemon em execução.

        * *note os.fork(): 4af.

     Veja também a função *note sys.is_finalizing(): c74.

     Adicionado na versão 3.13: Anteriormente, uma *note RuntimeError:
     243. simples era levantada.

     Alterado na versão 3.14: *note threading.Thread.join(): 13e0. pode
     agora levantar essa exceção.

 -- Exceção: RecursionError

     Esta exceção é derivada de *note RuntimeError: 243.  É levantada
     quando o interpretador detecta que a profundidade máxima de
     recursão (veja *note sys.getrecursionlimit(): 6e0.) foi excedida.

     Adicionado na versão 3.5: Anteriormente, uma *note RuntimeError:
     243. 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(): c3b, é 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: 11a.

 -- 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(): 9ce. e o método *note
     __next__(): 14c9. de um *note iterador: 4c2. 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: 87a.

     Quando uma função *note geradora: 1257. ou *note corrotina: 6ae.
     retorna, uma nova instância *note StopIteration: de9. é levantada,
     e o valor retornado pela função é usado como o parâmetro *note
     value: 22ab. para o construtor da exceção.

     Se um código gerador direta ou indiretamente levantar *note
     StopIteration: de9, ele é convertido em uma *note RuntimeError:
     243. (mantendo o *note StopIteration: de9. 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: de9. levantado em um gerador é
     transformado em uma *note RuntimeError: 243.

 -- Exceção: StopAsyncIteration

     Deve ser levantada pelo método *note __anext__(): 17e8. de um
     objeto *note iterador assíncrono: 4c1. 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: 7ed, em uma chamada às
     funções embutidas *note compile(): 4ab, *note exec(): 49c. ou *note
     eval(): 49d, ou ao ler o script inicial ou entrada padrão (também
     interativamente).

     A função *note str(): 169. 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 erro ocorrido finaliza 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: Adicionado os atributos *note end_lineno:
     258a. e *note end_offset: 258b.

 -- Exceção: IndentationError

     Classe base para erros de sintaxe relacionados a indentação
     incorreta.  Esta é uma subclasse de *note SyntaxError: 18e.

 -- 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: 9a1.

 -- 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: 8fa, 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(): 276.  Ele
     herda de *note BaseException: 7cc. em vez de *note Exception: bc3.
     para que não seja acidentalmente capturado pelo código que captura
     *note Exception: bc3.  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(): 276.  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(): 276. é traduzida em uma exceção
     para que os tratadores de limpeza (cláusulas *note finally: 1b0.
     das instruções *note try: 8ed.) 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(): 258c. pode ser usada se for
     absolutamente necessário sair imediatamente (por exemplo, no
     processo filho após uma chamada para *note os.fork(): 4af.).

      -- 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: 368. é a exceção apropriada a ser levantada.

     Passar argumentos do tipo errado (por exemplo, passar uma *note
     list: 24c. quando um *note int: 19b. é esperado) deve resultar em
     uma *note TypeError: 198, mas passar argumentos com o valor errado
     (por exemplo, um número fora limites esperados) deve resultar em
     uma *note ValueError: 2ea.

 -- 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: 44f.

 -- Exceção: UnicodeError

     Levantada quando ocorre um erro de codificação ou decodificação
     relacionado ao Unicode.  É uma subclasse de *note ValueError: 2ea.

     *note UnicodeError: 45f. 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: c72.

          Este valor não deve ser negativo, pois é interpretado como um
          deslocamento absoluto, mas essa restrição não é aplicada em
          tempo de execução.

      -- Atributo: end

          O índice após os últimos dados inválidos em *note object: c72.

          Este valor não deve ser negativo, pois é interpretado como um
          deslocamento absoluto, mas essa restrição não é aplicada em
          tempo de execução.

 -- Exceção: UnicodeEncodeError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     codificação.  É uma subclasse de *note UnicodeError: 45f.

 -- Exceção: UnicodeDecodeError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     decodificação.  É uma subclasse de *note UnicodeError: 45f.

 -- Exceção: UnicodeTranslateError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     tradução.  É uma subclasse de *note UnicodeError: 45f.

 -- 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: 1723.

 -- 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:
2bf.

 -- 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: 2bf, 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: 2590, *note EALREADY: 2591, *note
     EWOULDBLOCK: 2592. e *note EINPROGRESS: 2593.

     Além daquelas de *note OSError: 2bf, *note BlockingIOError: 234.
     pode ter mais um atributo:

      -- Atributo: characters_written

          Um inteiro contendo o número de caracteres gravados no fluxo
          antes de ser bloqueado.  Este atributo está disponível ao usar
          as classes de E/S em buffer do módulo *note io: 83.

 -- Exceção: ChildProcessError

     Levantada quando uma operação em um processo filho falha.
     Corresponde a ‘errno’ *note ECHILD: 2595.

 -- Exceção: ConnectionError

     Uma classe base para problemas relacionados à conexão.

     Suas subclasses são *note BrokenPipeError: 1252, *note
     ConnectionAbortedError: 1253, *note ConnectionRefusedError: 1254. e
     *note ConnectionResetError: 1255.

 -- Exceção: BrokenPipeError

     Uma subclasse de *note ConnectionError: 1000, 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: 2596. e *note
     ESHUTDOWN: 2597.

 -- Exceção: ConnectionAbortedError

     Uma subclasse de *note ConnectionError: 1000, levantada quando uma
     tentativa de conexão é cancelada pelo par.  Corresponde a ‘errno’
     *note ECONNABORTED: 2598.

 -- Exceção: ConnectionRefusedError

     Uma subclasse de *note ConnectionError: 1000, levantada quando uma
     tentativa de conexão é recusada pelo par.  Corresponde a ‘errno’
     *note ECONNREFUSED: 2599.

 -- Exceção: ConnectionResetError

     Uma subclasse de *note ConnectionError: 1000, levantada quando uma
     conexão é redefinida pelo par.  Corresponde a ‘errno’ *note
     ECONNRESET: 259a.

 -- Exceção: FileExistsError

     Levantada ao tentar criar um arquivo ou diretório que já existe.
     Corresponde a ‘errno’ *note EEXIST: 259b.

 -- Exceção: FileNotFoundError

     Levantada quando um arquivo ou diretório é solicitado, mas não
     existe.  Corresponde a ‘errno’ *note ENOENT: 259c.

 -- Exceção: InterruptedError

     Levantada quando uma chamada do sistema é interrompida por um sinal
     de entrada.  Corresponde a ‘errno’ *note EINTR: f7b.

     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: f7c.

 -- Exceção: IsADirectoryError

     Levantada quando uma operação de arquivo (como *note os.remove():
     12ec.) é solicitada em um diretório.  Corresponde a ‘errno’ *note
     EISDIR: 259d.

 -- Exceção: NotADirectoryError

     Levantada quando uma operação de diretório (como *note
     os.listdir(): 12f6.) é 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: 259e.

 -- 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: 259f, *note EPERM: 1a72, e
     *note ENOTCAPABLE: 1a67.

     Alterado na versão 3.11.1: *note ENOTCAPABLE: 1a67. do WASI agora é
     mapeado para *note PermissionError: f32.

 -- Exceção: ProcessLookupError

     Levantada quando um determinado processo não existe.  Corresponde a
     ‘errno’ *note ESRCH: 25a0.

 -- Exceção: TimeoutError

     Levantada quando uma função do sistema expirou no nível do sistema.
     Corresponde a ‘errno’ *note ETIMEDOUT: 25a1.

Adicionado na versão 3.3: Todas as subclasses de *note OSError: 2bf.
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: 25a4. 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 quando esses
     avisos se destinam 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: 502. mostra este aviso.

     A política de descontinuação está descrita na PEP 387(2).

 -- Exceção: PendingDeprecationWarning

     Classe base para avisos sobre recursos que foram descontinuados e
     devem ser descontinuados no futuro, mas não foram descontinuados
     ainda.

     Esta classe raramente é usada para emitir um aviso sobre uma
     possível descontinuação futura, é incomum, e *note
     DeprecationWarning: 1a3. é preferível para descontinuações já
     ativas.

     Ignorado pelos filtros de aviso padrão.  Habilitar o *note Modo de
     Desenvolvimento do Python: 502. mostra 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 normalmente é emitido ao compilar código-fonte Python e
     normalmente não será relatado 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 quando esses
     avisos se destinam 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: 502. mostra 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: 1fee. para detalhes.

     Adicionado na versão 3.10.

 -- Exceção: BytesWarning

     Classe base para avisos relacionados a *note bytes: 192. e *note
     bytearray: 342.

 -- Exceção: ResourceWarning

     Classe base para avisos relacionados a uso de recursos.

     Ignorado pelos filtros de aviso padrão.  Habilitar o *note Modo de
     Desenvolvimento do Python: 502. mostra 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: 1ab. como todas as outras
exceções.  Além disso, eles são reconhecidos por *note except*: 1ac, 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: 55f. estende *note
     BaseException: 7cc. e pode envolver qualquer exceção, enquanto
     *note ExceptionGroup: 4cc. estende *note Exception: bc3. e só pode
     agrupar subclasses de *note Exception: bc3.  Este design é para que
     ‘except Exception’ capture um *note ExceptionGroup: 4cc. mas não
     *note BaseExceptionGroup: 55f.

     O construtor de *note BaseExceptionGroup: 55f. retorna uma *note
     ExceptionGroup: 4cc. ao invés de uma *note BaseExceptionGroup: 55f.
     se todas as exceções contidas forem instâncias *note Exception:
     bc3, então ela pode ser usada para tornar a seleção automática.  O
     construtor de *note ExceptionGroup: 4cc, por outro lado, levanta
     *note TypeError: 198. se qualquer exceção contida não for uma
     subclasse de *note Exception: bc3.

      -- 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:
          25a9, *note __traceback__: 14c2, *note __cause__: 14c4, *note
          __context__: 14c3. e *note __notes__: 2575.  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(): 1976, 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: 25a9,
          mas que agrupa as exceções em ‘excs’.

          Este método é usado por *note subgroup(): 1976. e *note
          split(): 1832, 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(): 1976. e *note split(): 1832.
          retorne instâncias da subclasse em vez de *note
          ExceptionGroup: 4cc.

          *note subgroup(): 1976. e *note split(): 1832. copiam os
          campos *note __traceback__: 14c2, *note __cause__: 14c4, *note
          __context__: 14c3. e *note __notes__: 2575. do grupo de
          exceções original para o retornado por *note derive(): 1975,
          então esses campos não precisam ser atualizados por *note
          derive(): 1975.

               >>> 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: 55f. define *note __new__():
     795, então subclasses que precisam de uma assinatura de construtor
     diferente precisam substituir isso ao invés de *note __init__():
     8b4.  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: 4cc, qualquer subclasse de *note
     BaseExceptionGroup: 55f. que também é uma subclasse de *note
     Exception: bc3. só pode agrupar instâncias de *note Exception: bc3.

     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: 1c. descrito em *note Serviços de Dados Binários:
25af. 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: 1e96.

* Menu:

* string — Operações comuns de strings::
* string.templatelib — Suporte para literais de string template: string templatelib — Suporte para literais de string template.
* 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: string templatelib — Suporte para literais de string template,  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: 1e96.

*note Métodos de string: 1e97.

* Menu:

* Constantes de strings::
* Formatação personalizada de strings::
* Sintaxe das strings de formato::
* Template strings ($-strings): Template strings $-strings.
* Funções auxiliares::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 25b3. e *note
     ascii_uppercase: 25b4. 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: 25b5, *note
     ascii_letters: 14bf, *note punctuation: 25b8. e *note whitespace:
     25b9.

          Nota: Por design, *note string.printable.isprintable(): fcc.
          retorna *note False: d1f.  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(): 828. descrito na PEP 3101(1).  A classe *note Formatter: 10b3.
no módulo *note string: d8. 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(): 828.

 -- Classe: string.Formatter

     A classe *note Formatter: 10b3. 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(): 25bb.

          Alterado na versão 3.7: Um argumento de string de formato é
          agora *note somente-posicional: c6c.

      -- 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(): 25bb. 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: 10b3. 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(): 25bb. 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’.  O
          valor de 'field_name' não é modificado e a numeração
          automática de campos posicionais não numerados é feita por
          *note vformat(): 25bb.

      -- Método: get_field (field_name, args, kwargs)

          Dado 'field_name', converte-o em um objeto a ser formatado.  A
          autonumeração de 'field_name' retornada de *note parse():
          25bc. é feira por *note vformat(): 25bb. antes de chamar este
          método.  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(): 25bb.  O valor de retorno
          'used_key' tem o mesmo significado que o parâmetro 'key' para
          *note get_value(): 25be.

      -- 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(): 25bb, 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(): 25be. fosse chamado com um argumento
          'key' de 0.  O atributo ‘name’ será pesquisado após *note
          get_value(): 25be. retorna chamando a função embutida *note
          getattr(): dbe.

          Se o índice ou palavra-chave se referir a um item que não
          existe, um *note IndexError: 1723. ou *note KeyError: 5dd.
          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(): 25bf. levata uma
          exceção se a verificação falhar.

      -- Método: format_field (value, format_spec)

          *note format_field(): 25c0. simplesmente chama o global
          embutido *note format(): 199.  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(): 25bd.) dado
          um tipo de conversão (como na tupla retornada pelo método
          *note parse(): 25bc.).  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: Template strings $-strings,  Prev: Formatação personalizada de strings,  Up: string — Operações comuns de strings

5.6.1.3 Sintaxe das strings de formato
......................................

The *note str.format(): 828. method and the *note Formatter: 10b3. class
share the same syntax for format strings (although in the case of *note
Formatter: 10b3, subclasses can define their own format string syntax).
The syntax is related to that of *note formatted string literals: 19a.
and *note template string literals: 176b, but it is less sophisticated
and, in particular, does not support arbitrary expressions in
interpolations.

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: 25c4.] ["!" *note conversion: 25c5.] [":" *note format_spec: 25c6.] "}"
     field_name:        *note arg_name: 25c7. ("." *note attribute_name: 25c8. | "[" *note element_index: 25c9. "]")*
     arg_name:          [*note identifier: 216c. | *note digit: 21ae.+]
     attribute_name:    *note identifier: 216c.
     element_index:     *note digit: 21ae.+ | *note index_string: 25ca.
     index_string:      <any source character except "]"> +
     conversion:        "r" | "s" | "a"
     format_spec:       *note format-spec;format_spec: 25cb.

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:
4f3.

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(): 24bd. 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():
dbe, enquanto uma expressão da forma ‘'[index]'’ faz uma pesquisa de
índice usando *note __getitem__(): 581.

Alterado na versão 3.1: Os especificadores de argumento posicional podem
ser omitidos para *note str.format(): 828, 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: 10b3.

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__(): 826. 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__(): 826, a lógica de formatação normal é
contornada.

Três sinalizadores de conversão são atualmente suportados: ‘'!s'’, que
chama *note str(): 169. no valor; ‘'!r'’, que chama *note repr(): 1c1.;
e ‘'!a'’, que chama *note ascii(): 15d7.

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: 25cd. 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
.................................................

“Format specifications” are used within replacement fields contained
within a format string to define how individual values are presented
(see *note Sintaxe das strings de formato: 158d, *note Literais de
strings formatadas: 19a, and *note Literais de strings templates
(t-strings): 176b.).  They can also be passed directly to the built-in
*note format(): 199. function.  Each formattable type may define how the
format specification is to be interpreted.

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(): 169. 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: 25cf.][*note width_and_precision: 25d0.][*note type: 25d1.]
     options:                 [[*note fill: 25d2.]*note align: 25d3.][*note sign: 25d4.]["z"]["#"]["0"]
     fill:                    <any character>
     align:                   "<" | ">" | "=" | "^"
     sign:                    "+" | "-" | " "
     width_and_precision:     [*note width_with_grouping: 25d5.][*note precision_with_grouping: 25d6.]
     width_with_grouping:     [*note width: 25d7.][*note grouping: 25d8.]
     precision_with_grouping: "." [*note precision: 25d9.][*note grouping: 25d8.] | "." *note grouping: 25d8.
     width:                   *note digit: 21ae.+
     precision:               *note digit: 21ae.+
     grouping:                "," | "_"
     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: 19a. ou ao usar o método *note str.format(): 828.  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(): 199.

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: 197.
              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: 197.  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.

'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.

A opção 'grouping' após os campos 'width' e 'precision' especifica um
separador de grupo de dígitos para as partes inteira e fracionária de um
número, respectivamente.  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)).

Alterado na versão 3.14: Suporte a opção 'grouping' para a parte
fracionária.

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(): 196. é 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: 196. e *note
Decimal: 1fd. 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: 196, e mostra todos os dígitos de coeficiente
                   para *note Decimal: 1fd.  Se ‘p=0’, o ponto decimal é
                   omitido a menos que a opção ‘#’ seja usada.
                   
                   
     ‘'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: 196, e usa uma precisão grande o suficiente
                   para mostrar todos os dígitos de coeficiente para
                   *note Decimal: 1fd.  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: 1fd, 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: 196.  Para
                   *note Decimal: 1fd, 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: 196, é 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: 1fd, é 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(): 169.
                   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: 196. corresponde ao do builtin *note round(): 14d6.  Para *note
Decimal: 1fd, o modo de arredondamento do *note contexto: 25da. atual
será usado.

Os tipos de apresentação disponíveis para *note complex: 197. são os
mesmos que para *note float: 196. (‘'%'’ 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(): 169. (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(): 828. 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'
     >>> '{:_}'.format(123456789.123456789)
     '123_456_789.12345679'
     >>> '{:.,}'.format(123456789.123456789)
     '123456789.123,456,79'
     >>> '{:,._}'.format(123456789.123456789)
     '123,456,789.123_456_79'

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: Template strings $-strings,  Next: Funções auxiliares,  Prev: Sintaxe das strings de formato,  Up: string — Operações comuns de strings

5.6.1.6 Template strings ($-strings)
....................................

     Nota: The feature described here was introduced in Python 2.4; a
     simple templating method based upon regular expressions.  It
     predates *note str.format(): 828, *note formatted string literals:
     19a, and *note template string literals: 25de.

     It is unrelated to template string literals (t-strings), which were
     introduced in Python 3.14.  These evaluate to *note
     string.templatelib.Template: 16a. objects, found in the *note
     string.templatelib: d9. module.

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: 2ea. sendo levantada.

O módulo *note string: d8. fornece uma classe *note Template: 88c. que
implementa essas regras.  Os métodos de *note Template: 88c. 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(): 25df, exceto que se os espaços
          reservados estiverem faltando em 'mapping' e 'kwds', em vez de
          levantar uma exceção *note KeyError: 5dd, o espaço reservado
          original aparecerá na string resultante intacta.  Além disso,
          ao contrário de *note substitute(): 25df, qualquer outra
          ocorrência de ‘$’ simplesmente retornará ‘$’ em vez de
          levantar *note ValueError: 2ea.

          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(): 25e0. 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(): 25df. levante *note
          ValueError: 2ea.

          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: 88c. 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: 88c. 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(): df7. 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: 2ea. 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: Template strings $-strings,  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(): 10a0,
     coloca cada palavra em maiúscula usando *note str.capitalize():
     24ce, e junte as palavras em maiúsculas usando *note str.join():
     249f.  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: string templatelib — Suporte para literais de string template,  Next: re — Operações com expressões regulares,  Prev: string — Operações comuns de strings,  Up: Serviços de Processamento de Texto

5.6.2 ‘string.templatelib’ — Suporte para literais de string template
---------------------------------------------------------------------

'Código-fonte:' Lib/string/templatelib.py(1)

__________________________________________________________________

Ver também
..........

   * *note Strings de formatação: 19a.

   * *note Sintaxe de literal de string template (t-string): 176b.

   * PEP 750(2)

* Menu:

* Strings template::
* Tipos::
* Funções auxiliares: Funções auxiliares<2>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/string/templatelib.py

   (2) https://peps.python.org/pep-0750/


File: python.info,  Node: Strings template,  Next: Tipos,  Up: string templatelib — Suporte para literais de string template

5.6.2.1 Strings template
........................

Adicionado na versão 3.14.

Strings template são um mecanismo para processamento personalizado de
strings.  Elas têm toda a flexibilidade das *note Literais de strings
formatadas: 19a. do Python, mas retornam uma instância *note Template:
16a. que dá acesso às partes estáticas e interpoladas (entre chaves) de
uma string 'antes' de serem combinadas.

Para escrever uma t-string, use um prefixo ‘'t'’ em vez de ‘'f'’, assim:

     >>> pi = 3.14
     >>> t't-strings são novas no Python {pi!s}!'
     Template(
        strings=('t-strings são novas no Python ', '!'),
        interpolations=(Interpolation(3.14, 'pi', 's', ''),)
     )


File: python.info,  Node: Tipos,  Next: Funções auxiliares<2>,  Prev: Strings template,  Up: string templatelib — Suporte para literais de string template

5.6.2.2 Tipos
.............

 -- Classe: string.templatelib.Template

     A classe ‘Template’ descreve o conteúdo de uma string template.
     Ela é imutável, o que significa que os atributos de um template não
     podem ser reatribuídos.

     A maneira mais comum de criar uma instância de ‘Template’ é usar a
     *note sintaxe de literal de string template: 176b.  Essa sintaxe é
     idêntica à de *note f-strings: 19a, exceto pelo fato de usar um
     prefixo ‘t’ no lugar de um ‘f’:

          >>> cheese = 'Red Leicester'
          >>> template = t"We're fresh out of {cheese}, sir."
          >>> type(template)
          <class 'string.templatelib.Template'>

     Os templates são armazenados como sequências de literais *note
     strings: 25e8. e dinâmicos *note interpolations: 25e9.  Um atributo
     *note values: 25ea. contém os valores das interpolações:

          >>> cheese = 'Camembert'
          >>> template = t'Ah! We do have {cheese}.'
          >>> template.strings
          ('Ah! We do have ', '.')
          >>> template.interpolations
          (Interpolation('Camembert', ...),)
          >>> template.values
          ('Camembert',)

     A tupla ‘strings’ tem um elemento a mais que ‘interpolations’ e
     ‘values’; as interpolações “pertencem” às strings.  Isso pode ser
     mais fácil de entender quando as tuplas estão alinhadas

          template.strings:  ('Ah! We do have ',              '.')
          template.values:   (                   'Camembert',    )

     Atributos
     .........

      -- Atributo: strings: *note tuple: 608.[*note str: 169, ...]

          Uma *note tuple: 608. das strings estáticas no template.

               >>> cheese = 'Camembert'
               >>> template = t'Ah! We do have {cheese}.'
               >>> template.strings
               ('Ah! We do have ', '.')

          Strings vazias 'estão' incluídas na tupla:

               >>> response = 'We do have '
               >>> cheese = 'Camembert'
               >>> template = t'Ah! {response}{cheese}.'
               >>> template.strings
               ('Ah! ', '', '.')

          A tupla ‘strings’ nunca está vazia e sempre contém uma string
          a mais que as tuplas ‘interpolations’ e ‘values’:

               >>> t''.strings
               ('',)
               >>> t''.values
               ()
               >>> t'{'cheese'}'.strings
               ('', '')
               >>> t'{'cheese'}'.values
               ('cheese',)

      -- Atributo: interpolations: *note tuple: 608.[*note
               Interpolation: 16b, ...]

          Uma *note tuple: 608. das interpolações no template.

               >>> cheese = 'Camembert'
               >>> template = t'Ah! We do have {cheese}.'
               >>> template.interpolations
               (Interpolation('Camembert', 'cheese', None, ''),)

          A tupla ‘interpolações’ pode estar vazia e sempre contém um
          valor a menos que a tupla ‘strings’:

               >>> t'Red Leicester'.interpolations
               ()

      -- Atributo: values: *note tuple: 608.[*note object: c72, ...]

          Uma tupla de todos os valores interpolados no template.

               >>> cheese = 'Camembert'
               >>> template = t'Ah! We do have {cheese}.'
               >>> template.values
               ('Camembert',)

          A tupla ‘values’ sempre tem o mesmo comprimento que a tupla
          ‘interpolations’.  Isso sempre equivale a ‘tuple(i.value for i
          in template.interpolations)’.

     Métodos
     .......

      -- Método: __new__ (*args: str | Interpolation)

          Embora a sintaxe de literal seja a maneira mais comum de criar
          um ‘Template’, também é possível criá-las diretamente usando o
          construtor:

               >>> from string.templatelib import Interpolation, Template
               >>> cheese = 'Camembert'
               >>> template = Template(
               ...     'Ah! We do have ', Interpolation(cheese, 'cheese'), '.'
               ... )
               >>> list(template)
               ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']

          Se várias strings forem passadas consecutivamente, elas serão
          concatenadas em um único valor no atributo *note strings:
          25e8.  Por exemplo, o código a seguir cria uma *note Template:
          16a. com uma única string final:

               >>> from string.templatelib import Template
               >>> template = Template('Ah! We do have ', 'Camembert', '.')
               >>> template.strings
               ('Ah! We do have Camembert.',)

          Se várias interpolações forem passadas consecutivamente, elas
          serão tratadas como interpolações separadas e uma string vazia
          será inserida entre elas.  Por exemplo, o código a seguir cria
          um modelo com espaços reservados vazios no atributo *note
          strings: 25e8.:

               >>> from string.templatelib import Interpolation, Template
               >>> template = Template(
               ...     Interpolation('Camembert', 'cheese'),
               ...     Interpolation('.', 'punctuation'),
               ... )
               >>> template.strings
               ('', '', '')

      -- Describe: iter(template)

          Itera sobre o template, produzindo cada string não-vazia e
          *note Interpolation: 16b. em ordem correta.

               >>> cheese = 'Camembert'
               >>> list(t'Ah! We do have {cheese}.')
               ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']

               Cuidado: Strings vazias 'não' são incluídas na iteração:

                    >>> response = 'We do have '
                    >>> cheese = 'Camembert'
                    >>> list(t'Ah! {response}{cheese}.')
                    ['Ah! ',
                     Interpolation('We do have ', 'response', None, ''),
                     Interpolation('Camembert', 'cheese', None, ''),
                     '.']

      -- Describe: template + other

      -- Describe: template += other

          Concatena este template com outro, retornando uma nova
          instância ‘Template’:

               >>> cheese = 'Camembert'
               >>> list(t'Ah! ' + t'We do have {cheese}.')
               ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, ''), '.']

          A concatenação de uma ‘Template’ e uma ‘str’ 'não' é
          suportada.  Isso ocorre porque não está claro se a string deve
          ser tratada como uma string estática ou uma interpolação.  Se
          você quiser concatenar uma ‘Template’ com uma string, você
          deve encapsular a string diretamente em uma ‘Template’ (para
          tratá-la como uma string estática) ou usar uma ‘Interpolation’
          (para tratá-la como dinâmica):

               >>> from string.templatelib import Interpolation, Template
               >>> template = t'Ah! '
               >>> # Treat 'We do have ' as a static string
               >>> template += Template('We do have ')
               >>> # Treat cheese as an interpolation
               >>> cheese = 'Camembert'
               >>> template += Template(Interpolation(cheese, 'cheese'))
               >>> list(template)
               ['Ah! We do have ', Interpolation('Camembert', 'cheese', None, '')]

 -- Classe: string.templatelib.Interpolation

     O tipo ‘Interpolation’ representa uma expressão dentro de uma
     string template.  É imutável, o que significa que os atributos de
     uma interpolação não podem ser reatribuídos.

     As interpolações oferecem suporte à correspondência de padrões,
     permitindo que você compare seus atributos com a *note instrução
     match: a04.:

          >>> from string.templatelib import Interpolation
          >>> interpolation = t'{1. + 2.:.2f}'.interpolations[0]
          >>> interpolation
          Interpolation(3.0, '1. + 2.', None, '.2f')
          >>> match interpolation:
          ...     case Interpolation(value, expression, conversion, format_spec):
          ...         print(value, expression, conversion, format_spec, sep=' | ')
          ...
          3.0 | 1. + 2. | None | .2f

     Atributos
     .........

      -- Atributo: value: *note object: c72.

          O valor avaliado da interpolação.

               >>> t'{1 + 2}'.interpolations[0].value
               3

      -- Atributo: expression: *note str: 169.

          Para interpolações criadas por literais de t-string,
          ‘expression’ é o texto da expressão encontrado dentro das
          chaves (‘{’ e ‘}’), incluindo quaisquer espaços em branco,
          excluindo as próprias chaves e terminando antes do primeiro
          ‘!’, ‘:’ ou ‘=’, se houver algum.  Para interpolações criadas
          manualmente, ‘expression’ é a string arbitrária fornecida ao
          construir a instância de interpolação.

          Recomendamos usar expressões Python válidas ou a string vazia
          para o campo ‘expression’ de instâncias ‘Interpolation’
          criadas manualmente, embora isso não seja imposto em tempo de
          execução.

               >>> t'{1 + 2}'.interpolations[0].expression
               '1 + 2'

      -- Atributo: conversion: *note Literal: a4b.['a', 'r', 's'] |
               *note None: 87a.

          A conversão a ser aplicada ao valor, ou ‘None’.

          O ‘conversion’ é a conversão opcional a ser aplicada ao valor:

               >>> t'{1 + 2!a}'.interpolations[0].conversion
               'a'

               Nota: Ao contrário das f-strings, onde as conversões são
               aplicadas automaticamente, o comportamento esperado com
               t-strings é que o código que 'processa' o ‘Template’
               decidirá como interpretar e se aplicará o ‘conversion’.
               Por conveniência, a função *note convert(): 25ee. pode
               ser usada para imitar a semântica de conversão de
               f-strings.

      -- Atributo: format_spec: *note str: 169.

          A especificação de formato a ser aplicada ao valor.

          O ‘format_spec’ é uma string arbitrária opcional usada como
          especificação de formato para apresentar o valor:

               >>> t'{1 + 2:.2f}'.interpolations[0].format_spec
               '.2f'

               Nota: Ao contrário das f-strings, onde as especificações
               de formato são aplicadas automaticamente por meio do
               protocolo *note format(): 199, o comportamento esperado
               com t-strings é que o código que 'processa' a
               interpolação decida como interpretar e se a especificação
               de formato deve ser aplicada.  Como resultado, os valores
               ‘format_spec’ em interpolações podem ser strings
               arbitrárias, incluindo aquelas que não estão em
               conformidade com o protocolo de *note format(): 199.

     Métodos
     .......

      -- Método: __new__ (value: object, expression: str, conversion:
               Literal['a', 'r', 's'] | None = None, format_spec: str =
               '')

          Cria um novo objeto ‘Interpolation’ a partir de partes do
          componente.


          Parâmetros:

             * ‘value’ – O resultado avaliado e dentro do escopo da
               interpolação.

             * ‘expression’ – O texto de uma expressão Python válida ou
               uma string vazia.

             * ‘conversion’ – A *note conversão: 158d. a ser usada, uma
               entre ‘None’, ‘'a'’, ‘'r'’ ou ‘'s'’.

             * ‘format_spec’ – Uma string arbitrária opcional usada como
               *note especificação de formato: 4f3. para apresentar o
               valor.


File: python.info,  Node: Funções auxiliares<2>,  Prev: Tipos,  Up: string templatelib — Suporte para literais de string template

5.6.2.3 Funções auxiliares
..........................

 -- Função: string.templatelib.convert (obj, /, conversion)

     Aplica a semântica de *note conversão: 25cc. de literal de string
     formatada ao objeto 'obj' fornecido.  Isso é frequentemente útil
     para lógica de processamento de string template personalizada.

     Atualmente, há três sinalizadores de conversão suportados:

        * ‘'s'’ que chama *note str(): 169. no valor (como ‘!s’),

        * ‘'r'’ que chama *note repr(): 1c1. (como ‘!r’) e

        * ‘'a'’ que chama *note ascii(): 15d7. (como ‘!a’).

     Se o sinalizador de conversão é ‘None’, 'obj' é retornado sem
     alterações.


File: python.info,  Node: re — Operações com expressões regulares,  Next: difflib — Helpers for computing deltas,  Prev: string templatelib — Suporte para literais de string template,  Up: Serviços de Processamento de Texto

5.6.3 ‘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: 169.) assim como strings de 8 bits (*note bytes:
192.).  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:
1ae. e no futuro isso se tornará um *note SyntaxError: 18e.  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: 117d.  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: be, 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.14/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.3.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]: 25f6, 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: 25f7.

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: 25f8. 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: 25f9. 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: 25f9. 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: 25f9.; 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: 64d. 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: 64d. é 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: 25fa. (correspondência somente ASCII)

        * *note re.I: 25fb. (ignorar maiúsculas/minúsculas)

        * *note re.L: 25fc. (dependente da localidade)

        * *note re.M: 25fd. (multi-linha)

        * *note re.S: 25fe. (ponto corresponde a tudo)

        * *note re.U: 25ff. (correspondência Unicode)

        * *note re.X: 2600. (verboso)

     (Os sinalizadores são descritos em *note Conteúdo do módulo: 2601.)
     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(): dc2.  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: 25fa. (correspondência somente ASCII)

        * *note re.I: 25fb. (ignorar maiúsculas/minúsculas)

        * *note re.L: 25fc. (dependente da localidade)

        * *note re.M: 25fd. (multi-linha)

        * *note re.S: 25fe. (ponto corresponde a tudo)

        * *note re.U: 25ff. (correspondência Unicode)

        * *note re.X: 2600. (verboso)

     (Os sinalizadores são descritos em *note Conteúdo do módulo: 2601.)

     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: 192. 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: 192, 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(): 1428. em vez
     da função *note match(): 1429.:

          >>> 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: 192, 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: 833.  Os limites das palavras são
     determinados pela localidade atual se o sinalizador *note LOCALE:
     d57. 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: 833.  Os limites das palavras são
     determinados pela localidade atual se o sinalizador *note LOCALE:
     d57. for usado.

     Alterado na versão 3.14: ‘\B’ agora corresponde string de entrada
     vazia.

‘\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: 833. 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: 833. 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(): 24c9.) .  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: 833. 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: 833. 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(): 24c1.), bem como o sublinhado (‘_’).

          Se o sinalizador *note ASCII: 833. 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: d57. 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(): 24c1. retorna ‘False’.

     Se o sinalizador *note ASCII: 833. for usado, apenas
     ‘[^a-zA-Z0-9_]’ será correspondido.

     Se o sinalizador *note LOCALE: d57. 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.

     Adicionado na versão 3.14.

‘\Z’

     O mesmo que ‘\z’.  Para compatibilidade com versões mais antigas de
     Python.

A maioria das *note sequências de escape: 67c. 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.3.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.3.3 Sinalizadores
.....................

Alterado na versão 3.6: Constantes de sinalizadores agora são instâncias
de *note RegexFlag: 834, que é uma subclasse de *note enum.IntFlag: e8e.

 -- Classe: re.RegexFlag

     Uma subclasse de *note enum.IntFlag: e8e. 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: 25ff. 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: d58. 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: 833. 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: d57. 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: 19d2, 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: 833. 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: d57. pode ser usado apenas
     com padrões de bytes e não é compatível com *note ASCII: 833.

     Alterado na versão 3.7: Objetos de expressão regular compilados com
     o sinalizador *note LOCALE: d57. 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: 833. 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.3.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: 117d, que pode ser usado para correspondência usando seu
     *note match(): 2609, *note search(): 260a. 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: 2604, combinados usando OU bit a bit (o
     operador ‘|’).

     A sequência

          prog = re.compile(pattern)
          result = prog.match(string)

     é equivalente a

          result = re.match(pattern, string)

     mas usar *note re.compile(): dc2. 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(): dc2. 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: eb7. 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: 2604, 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: eb7.
     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: 25f9, *note re.match():
     1429. 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(): 1428. (veja também *note search() vs.
     match(): 260b.).

     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: 2604, 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: eb7. 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: 2604, 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: 2604, 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: 59e.

 -- 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: 2604, 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: 4c2. produzindo objetos *note Match:
     eb7. 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: 2604, 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: eb7. 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: 1a83.

     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: 2604, 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: 192, 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: 59e.

 -- Função: re.subn (pattern, repl, string, count=0, flags=0)

     Executa a mesma operação que *note sub(): 59c, 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: 2604, 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(): 59c. e *note subn(): 59d, 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.3.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.3.6 Objetos expressão regular
.................................

 -- Classe: re.Pattern

     Objeto expressão regular compilado retornado por *note
     re.compile(): dc2.

     Alterado na versão 3.9: *note re.Pattern: 1a83. tem suporte a ‘[]’
     para indicar um padrão Unicode (str) ou bytes.  Veja *note Tipo
     Generic Alias: 8b6.

 -- 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: eb7.
     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: eb7.
     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(): 260a.

          >>> 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(): 260a. ao invés (veja também *note
     search() vs.  match(): 260b.).

 -- Método: Pattern.fullmatch (string[, pos[, endpos]])

     Se toda a 'string' corresponder a esta expressão regular, retorna
     um *note Match: eb7. 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(): 260a.

          >>> 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(): 59b, usando o padrão compilado.

 -- Método: Pattern.findall (string[, pos[, endpos]])

     Semelhante à função *note findall(): 1220, 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(): 1428.

 -- Método: Pattern.finditer (string[, pos[, endpos]])

     Semelhante à função *note finditer(): 16e8, 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(): 1428.

 -- Método: Pattern.sub (repl, string, count=0)

     Idêntico à função *note sub(): 59c, usando o padrão compilado.

 -- Método: Pattern.subn (repl, string, count=0)

     Idêntico à função *note subn(): 59d, 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():
     dc2, qualquer sinalizador em linha ‘(?...)’ no padrão e
     sinalizadores implícitos como *note UNICODE: d58. 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(): 74c. e
*note copy.deepcopy(): d59.  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.3.7 Objetos correspondência
...............................

Objetos correspondência sempre têm um valor booleano de ‘True’.  Como
*note match(): 2609. e *note search(): 260a. 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: eb7. tem suporte a ‘[]’
     para indicar uma correspondência Unicode (str) ou bytes.  Veja
     *note Tipo Generic Alias: 8b6.

 -- 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():
     2612.  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: 1723. é 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: 1723. é
     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: 1723.

     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():
     260a. ou *note match(): 2609. de um *note objeto expressão regular:
     117d.  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():
     260a. ou *note match(): 2609. de um *note objeto expressão regular:
     117d.  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: 117d. cujo método *note match():
     2609. ou *note search(): 260a. produziu esta instância de
     correspondência.

 -- Atributo: Match.string

     A string passada para *note match(): 2609. ou *note search(): 260a.

Alterado na versão 3.7: Adicionado suporte para *note copy.copy(): 74c.
e *note copy.deepcopy(): d59.  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.3.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.3.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(): 1221. 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.3.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.3.11 search() vs. match()
.............................

Python oferece diferentes operações primitivas baseadas em expressões
regulares:

   + *note re.match(): 1429. verifica uma correspondência apenas no
     início da string

   + *note re.search(): 1428. verifica uma correspondência em qualquer
     lugar na string (isso é o que o Perl faz por padrão)

   + *note re.fullmatch(): 117b. 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(): 1428. 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: 25f9. *note match():
1429. apenas corresponde ao início da string, enquanto que usar *note
search(): 1428. 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.3.12 Criando uma lista telefônica
.....................................

*note split(): 59b. 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(): 59b. 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.3.13 Mastigando texto
.........................

*note sub(): 59c. 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(): 59c. 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.3.14 Encontrando todos os advérbios
.......................................

*note findall(): 1220. corresponde 'todas' as ocorrências de um padrão,
não apenas a primeira como *note search(): 1428. faz.  Por exemplo, se
uma pessoa deseja encontrar todos os advérbios em algum texto, ela pode
usar *note findall(): 1220. 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.3.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(): 16e8. é
útil, pois fornece objetos *note Match: eb7. 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(): 16e8. 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.3.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.3.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.4 ‘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: 5e. 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: 819.
     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: 120f. 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: 120f. 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: 120f.

     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: 120f. both to compare sequences of lines, and to
     compare sequences of characters within similar (near-matching)
     lines.

     Each line of a *note Differ: 2632. 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: 200.

          '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(): 2634. (used by *note HtmlDiff: 200.
          to generate the side by side HTML differences).  See *note
          ndiff(): 2634. 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(): fe5. 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: 1257. 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(): 2636. result in diffs
     that are suitable for use with *note io.IOBase.writelines(): 2637.
     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: 2638. 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:
     2632.-style delta (a *note generator: 1257. 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(): 2d6, which filters out lines without visible
     characters, except for at most one hash character (‘'#'’) – however
     the underlying *note SequenceMatcher: 120f. 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(): 263a,
     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(): 263c. or
     *note ndiff(): 2634, 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: 1257. 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(): 2636. result in
     diffs that are suitable for use with *note io.IOBase.writelines():
     2637. 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: 2638. 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(): 18cd. or *note context_diff(): 18ce.

     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(): 2634. 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(): 2634.

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.14/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.4.1 SequenceMatcher Objects
...............................

The *note SequenceMatcher: 120f. 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: 819.

     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(): 263f. or
     *note set_seq2(): 2640.

     Adicionado na versão 3.2: The 'bjunk' and 'bpopular' attributes.

     *note SequenceMatcher: 120f. objects have the following methods:

      -- Método: set_seqs (a, b)

          Set the two sequences to be compared.

     *note SequenceMatcher: 120f. computes and caches detailed
     information about the second sequence, so if you want to compare
     one sequence against many sequences, use *note set_seq2(): 2640. to
     set the commonly used sequence once and call *note set_seq1():
     2641. 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():
          1c02. 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: 853. ‘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: 1257. of groups with up to 'n' lines
          of context.

          Starting with the groups returned by *note get_opcodes():
          2643, 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(): 2643.

      -- 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():
          2642. or *note get_opcodes(): 2643. hasn’t already been
          called, in which case you may want to try *note quick_ratio():
          2646. or *note real_quick_ratio(): 2647. first to get an upper
          bound.

               Nota: Caution: The result of a *note ratio(): 2645. 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(): 2645. relatively
          quickly.

      -- Método: real_quick_ratio ()

          Return an upper bound on *note ratio(): 2645. 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(): 2646. and *note real_quick_ratio(): 2647.
are always at least as large as *note ratio(): 2645.:

     >>> 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.4.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(): 2645. returns a float in [0, 1], measuring the similarity
of the sequences.  As a rule of thumb, a *note ratio(): 2645. 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(): 2642. 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(): 2642.
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(): 2643.:

     >>> 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(): 2639. function in this module which
     shows how simple code building on *note SequenceMatcher: 120f. can
     be used to do useful work.

   * Simple version control recipe(1) for a small application built with
     *note SequenceMatcher: 120f.

   ---------- 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.4.3 Differ Objects
......................

Note that *note Differ: 2632.-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: 2632. 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(): 1c02. method’s 'isjunk' parameter for an
     explanation.

     *note Differ: 2632. 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(): 2636. method of file-like objects.  The
          delta generated also consists of newline-terminated strings,
          ready to be printed as-is via the *note writelines(): 2637.
          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.4.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(): 2636. 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: 2632. object we may pass
functions to filter out line and character “junk.” See the *note
Differ(): 2632. 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.4.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.4.6 ndiff example
.....................

This example shows how to use *note difflib.ndiff(): 2634.

     """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.5 ‘textwrap’ — Quebra automática e preenchimento de texto
-------------------------------------------------------------

'Código-fonte:' Lib/textwrap.py(1)

__________________________________________________________________

O módulo *note textwrap: f2. fornece algumas funções convenientes, assim
como *note TextWrapper: 11c3, 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: 11c3. 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: 11c3, documentados abaixo.

     Veja o método *note TextWrapper.wrap(): 2653. para detalhes
     adicionais sobre como *note wrap(): 16b5. 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(): 16b4. é uma
     abreviação de

          "\n".join(wrap(text, ...))

     Em particular, *note fill(): 16b4. aceita exatamente os mesmos
     argumentos nomeados que *note wrap(): 16b5.

 -- 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: 11c3, documentados abaixo.  Observe
     que o espaço em branco é recolhido antes do texto ser passado para
     a função *note TextWrapper: 11c3. *note fill(): 16b4, alterando
     assim o valor de *note tabsize: 2654, *note expand_tabs: 2655,
     *note drop_whitespace: 2656. e *note replace_whitespace: 2657. 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(): 16b5, *note fill(): 16b4. e *note shorten(): 11c6.
funcionam criando uma instância *note TextWrapper: 11c3. 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():
16b5. e/ou *note fill(): 16b4, pode ser mais eficiente criar seu próprio
objeto *note TextWrapper: 11c3.

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:
2658. seja definido como falso.

 -- Classe: textwrap.TextWrapper (**kwargs)

     O construtor *note TextWrapper: 11c3. 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: 11c3. 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: 11c3. (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: 2659, *note TextWrapper:
          11c3. garante que nenhuma linha de saída será maior que *note
          width: 2659. 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(): 24d7. de 'text'.

      -- Atributo: tabsize

          (padrão: ‘8’) Se *note expand_tabs: 2655. 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(): 16b5. 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: 2655. for falso e *note
               replace_whitespace: 2657. 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: 2657. 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():
               1452. 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: 11c3.
          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: 265c. é 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: 2659. serão quebradas para garantir que nenhuma linha
          seja maior que *note width: 2659.  Se for falso, palavras
          longas não serão quebradas e algumas linhas poderão ser
          maiores que *note width: 2659.  (Palavras longas serão
          colocadas sozinhas em uma linha, a fim de minimizar o valor
          pelo qual *note width: 2659. é 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: 2658. 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: 11c3. 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: 2659. caracteres.  Todas as
          opções de quebra de linha são obtidas dos atributos da
          instância *note TextWrapper: 11c3.  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.14/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.6 ‘unicodedata’ — Banco de dados de Unicode
-----------------------------------------------

__________________________________________________________________

Este módulo fornece acesso ao Banco de Dados de Caracteres Unicode
(UCD), que define as propriedades de todos os caracteres Unicode.  Os
dados contidos neste banco de dados são compilados a partir do UCD
versão 16.0.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: 14a0. 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: 5dd. é 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: 2ea. 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: 2ea. 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: 2ea. 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: 2ea. 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/16.0.0/ucd

   (2) https://www.unicode.org/reports/tr44/

   (3) ‘https://www.unicode.org/Public/16.0.0/ucd/NameAliases.txt’

   (4) ‘https://www.unicode.org/Public/16.0.0/ucd/NamedSequences.txt’

   (5) 
https://www.unicode.org/reports/tr44/tr44-34.html#General_Category_Values

   (6) 
https://www.unicode.org/reports/tr44/tr44-34.html#Bidi_Class_Values

   (7) 
https://www.unicode.org/reports/tr44/tr44-34.html#Canonical_Combining_Class_Values

   (8) https://www.unicode.org/reports/tr11/tr11-43.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.7 ‘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: da. 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: da. 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.14/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.8 ‘readline’ — Interface para o GNU readline
------------------------------------------------

__________________________________________________________________

O módulo *note readline: bf. 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: c2, 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(): 14d4.

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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

     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: bf. 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: 1964. 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.8.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 readline.  O nome de arquivo
     padrão é o último usado.  Isso chama ‘rl_read_init_file()’ na
     biblioteca subjacente.  Ele levanta um *note evento de auditoria:
     1b5d. ‘open’ com o nome do arquivo, se fornecido, e
     ‘"<readline_init_file>"’ caso contrário, independentemente de qual
     arquivo a biblioteca resolve.

     Alterado na versão 3.14: O evento de auditoria foi adicionado.


File: python.info,  Node: Buffer de linha,  Next: Arquivo de histórico,  Prev: Arquivo init,  Up: readline — Interface para o GNU readline

5.6.8.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.8.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 e levanta um *note evento
     de auditoria: 1b5d. ‘open’ com o nome de arquivo se dado e, do
     contrário, ‘"~/.history"’.

     Alterado na versão 3.14: O evento de auditoria foi adicionado.

 -- Função: readline.write_history_file ([filename])

     Salva a lista de histórico para um arquivo de histórico do
     readline, sobrescrevendo qualquer arquivo existente.  O nome do
     arquivo padrão é ‘~/.history’.  Isso chama ‘write_history()’ na
     biblioteca subjacente e levanta um *note evento de auditoria: 1b5d.
     ‘open’ com o nome de arquivo se dado e, do contrário,
     ‘"~/.history"’.

     Alterado na versão 3.14: O evento de auditoria foi adicionado.

 -- 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.  Ela levanta um *note evento de
     auditoria: 1b5d. ‘open’ com o nome de arquivo se dado e, do
     contrário, ‘"~/.history"’.

     Adicionado na versão 3.5.

     Alterado na versão 3.14: O evento de auditoria foi adicionado.

 -- 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(): 268d.
     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.8.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(): 268e, 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.8.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.8.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:
c2. para completar identificadores Python para o interpretador
interativo.  Se o módulo *note readline: bf. 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.8.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: bf. 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: 1b8. 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: 440. (veja *note Configuração
Readline: 11bf.).

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: 26a0.
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)


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.9 ‘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(): 2699. no módulo *note
readline: bf.

Quando este módulo é importado em uma plataforma Unix com o módulo *note
readline: bf. disponível, uma instância da classe *note Completer: 1be7.
é criada automaticamente e seu método *note complete(): 26a4. é definido
como o *note autocompletamento do readline: 2698.  O método fornece o
autocompletamento de *note identificadores e palavras-chaves: 214b.
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:
440. do Python.  A menos que Python seja executado com a opção *note -S:
13a4, o módulo é automaticamente importado e configurado (veja *note
Configuração Readline: 11bf.).

Em plataformas sem *note readline: bf, a classe *note Completer: 1be7.
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: bf, 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: 13. e palavras
          reservadas (conforme definido pelo módulo *note keyword: 88.).

          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__(): 6ef.) até a última parte e encontrar
          correspondências para o resto por meio da função *note dir():
          839.  Qualquer exceção levantada durante a avaliação da
          expressão é capturada, silenciada e *note None: 87a. é
          retornado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 24e2. também funcionam com formatos binários compatíveis com
ASCII (por exemplo *note re: be.) ou com todos os dados binários (por
exemplo *note difflib: 3b.).

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: 2452.

* 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: 192. do Python.  *note Strings de formato: 26ab.
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: 26ac. para detalhes.

Várias funções *note struct: db. (e métodos de *note Struct: 1966.)
recebem um argumento 'buffer'.  Isso se refere a objetos que implementam
*note Protocolo de buffer: 25f. e fornecem um buffer legível ou de
leitura-gravação.  Os tipos mais comuns usados para esse propósito são
*note bytes: 192. e *note bytearray: 342, 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: 192.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 1c60.

 -- 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(): 1c60.

 -- 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():
     1c60.

     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: 26b1, which specify the
type of data being packed/unpacked.  In addition, special characters
control the *note byte order, size and alignment: 26ac.  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: 248d. 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: 26b1. 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: 26b3.

   ---------- 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)                            float                    2                    (4)
                                                                                          
                                                                                          
‘f’          float                          float                    4                    (4)
                                                                                          
                                                                                          
‘d’          double                         float                    8                    (4)
                                                                                          
                                                                                          
‘F’          float complex                  complexo                 8                    (10)
                                                                                          
                                                                                          
‘D’          double complex                 complexo                 16                   (10)
                                                                                          
                                                                                          
‘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.

Alterado na versão 3.14: Added support for the ‘'F'’ and ‘'D'’ formats.

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__(): 19e.
     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__(): 19e.
     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(): 1472. 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(): 17c5, 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: 26b3. 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).

  10. For the ‘'F'’ and ‘'D'’ format characters, the packed
     representation uses the IEEE 754 binary32 and binary64 format for
     components of the complex number, regardless of the floating-point
     format used by the platform.  Note that complex types (‘F’ and ‘D’)
     are available unconditionally, despite complex types being an
     optional feature in C. As specified in the C11 standard, each
     complex type is represented by a two-element C array containing,
     respectively, the real and imaginary parts.

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: 151f.
is raised.

Alterado na versão 3.1: Previously, some of the integer formats wrapped
out-of-range values and raised *note DeprecationWarning: 1a3. instead of
*note struct.error: 151f.

For the ‘'?'’ format character, the return value is either *note True:
dfb. or *note False: d1f.  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: 8.

     Packed binary storage of homogeneous data.

Módulo *note json: 86.

     JSON encoder and decoder.

Módulo *note pickle: ab.

     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: db. module exist, data
interchange between Python and C code within an application or another
application compiled using the same compiler (*note native formats:
26b8.), and data interchange between applications using agreed upon data
layout (*note standard formats: 26b9.).  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: db. 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: 1966. instance.

     Compiled Struct objects support the following methods and
     attributes:

      -- Método: pack (v1, v2, ...)

          Identical to the *note pack(): 1472. function, using the
          compiled format.  (‘len(result)’ will equal *note size: 26bf.)

      -- Método: pack_into (buffer, offset, v1, v2, ...)

          Identical to the *note pack_into(): 26ae. function, using the
          compiled format.

      -- Método: unpack (buffer)

          Identical to the *note unpack(): 17c5. function, using the
          compiled format.  The buffer’s size in bytes must equal *note
          size: 26bf.

      -- Método: unpack_from (buffer, offset=0)

          Identical to the *note unpack_from(): 26af. function, using
          the compiled format.  The buffer’s size in bytes, starting at
          position 'offset', must be at least *note size: 26bf.

      -- Método: iter_unpack (buffer)

          Identical to the *note iter_unpack(): 11b5. function, using
          the compiled format.  The buffer’s size in bytes must be a
          multiple of *note size: 26bf.

          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: 169. instead of *note bytes: 192.

      -- Atributo: size

          The calculated size of the struct (and hence of the bytes
          object produced by the *note pack(): 1472. method)
          corresponding to *note format: 199.

     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: 246b, 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: 246b. or
with codecs that encode to *note bytes: 192.

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: 2ea. (or a more codec specific
     subclass, such as *note UnicodeEncodeError: 87c.).  Refer to *note
     Codec Base Classes: 26c6. 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: 2ea. (or a more codec specific
     subclass, such as *note UnicodeDecodeError: bfe.).  Refer to *note
     Codec Base Classes: 26c6. 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: 169. 'string' of up to 256 characters
     representing a decoding table, returns either a compact internal
     mapping object ‘EncodingMap’ or a *note dictionary: 183. mapping
     character ordinals to byte values.  Raises a *note TypeError: 198.
     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: 19ab. 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: 19ab. object is found, a *note LookupError: 24e6.
     is raised.  Otherwise, the *note CodecInfo: 19ab. 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(): 26cb. and *note decode(): 26cc. methods of
          Codec instances (see *note Codec Interface: 26cd.).  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: 26d0. and *note
          IncrementalDecoder: 26d1, 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: 26d4. and *note StreamReader: 26d5,
          respectively.  Stream codecs can maintain state.

To simplify access to the various codec components, the module provides
these additional functions which use *note lookup(): b52. 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: 24e6. 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: 24e6. 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: 24e6. 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: 24e6. 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: 26d5. class or factory function.

     Raises a *note LookupError: 24e6. 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: 26d4. class or factory function.

     Raises a *note LookupError: 24e6. 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: 19ab. 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(): 314. and the associated *note io: 83.
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: 26dd, 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(): 314. 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: 2ea. to be raised in
     case an encoding error occurs.

     'buffering' has the same meaning as for the built-in *note open():
     314. 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.

     Descontinuado desde a versão 3.14: *note codecs.open(): 313. has
     been superseded by *note open(): 314.

 -- Função: codecs.EncodedFile (file, data_encoding, file_encoding=None,
          errors='strict')

     Return a *note StreamRecoder: 1c8b. 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: 2ea. 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: 169.
     objects.  This function is a *note generator: 1257.  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: 169.
     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: 192.
     objects.  This function is a *note generator: 1257.  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: 192.
     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(): 26df.

 -- Função: codecs.readbuffer_encode (buffer, errors=None, /)

     Return a *note tuple: 608. containing the raw bytes of 'buffer', a
     *note buffer-compatible object: 25f. or *note str: 169. (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: 26e6. is either
     *note BOM_UTF16_BE: 26e7. or *note BOM_UTF16_LE: 26e8. depending on
     the platform’s native byte order, *note BOM: 26e2. is an alias for
     *note BOM_UTF16: 26e6, *note BOM_LE: 26e4. for *note BOM_UTF16_LE:
     26e8. and *note BOM_BE: 26e3. for *note BOM_UTF16_BE: 26e7.  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.14/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: 1c. 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: fac. codecs:

Valor                         Significado
                              
----------------------------------------------------------------------------------
                              
‘'strict'’                    Raise *note UnicodeError: 45f. (or a subclass),
                              this is the default.  Implemented in
                              *note strict_errors(): 26ef.
                              
                              
‘'ignore'’                    Ignore the malformed data and continue without
                              further notice.  Implemented in
                              *note ignore_errors(): 26f0.
                              
                              
‘'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(): 1821.
                              
                              
‘'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(): 1822.
                              
                              
‘'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: 246b.):

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(): 1823.
                              
                              
‘'namereplace'’               Replace with ‘\N{...}’ escape sequences, what
                              appears in the braces is the Name property from
                              Unicode Character Database.  Implemented in
                              *note namereplace_errors(): 26f1.
                              

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: 169. 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: 87c. 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: 169. or
     *note bytes: 192.  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: 1723. will be raised.

     Decoding and translating works similarly, except *note
     UnicodeDecodeError: bfe. or *note UnicodeTranslateError: 1853. 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: 24e6. 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: 45f.

 -- 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: 246b. 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: 246b. 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: 26f3. 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: 246b.
          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: 26f3.
          instance.  Use *note StreamWriter: 26d4. 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:
          246b, 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: 26f3.
          instance.  Use *note StreamReader: 26d5. 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: 26d0. and *note IncrementalDecoder: 26d1.
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(): 26f5./*note decode(): 26f6. 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(): 26f5./*note decode():
26f6. 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: 26d0. 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: 26d0. 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: 26d0. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 1a8b. 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: 26d0. 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(): 10fa. '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(): 26fa.


File: python.info,  Node: IncrementalDecoder Objects,  Prev: IncrementalEncoder Objects,  Up: Incremental Encoding and Decoding

5.7.2.6 IncrementalDecoder Objects
..................................

The *note IncrementalDecoder: 26d1. 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: 26d1. 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: 26d1. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 1a8b. 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: 26d1. 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(): 10fb. '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(): 26ff.


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: 26d4. and *note StreamReader: 26d5. 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: 26d4. class is a subclass of *note Codec: 26f3.
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: 26d4. 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: 26d4. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 1a8b. 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: 26d4. 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(): 2704. 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: 26d4. 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: 26d5. class is a subclass of *note Codec: 26f3.
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: 26d5. 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: 26d5. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 1a8b. 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: 26d5. object.

     The set of allowed values for the 'errors' argument can be extended
     with *note register_error(): 1689.

      -- 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(): 2709. 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(): 2709. 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():
          10fb. 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(): 2709. 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: 26d5. 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: 26dd. 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(): b52. function to construct the instance.

 -- Classe: codecs.StreamReaderWriter (stream, Reader, Writer,
          errors='strict')

     Creates a *note StreamReaderWriter: 26dd. instance.  'stream' must
     be a file-like object.  'Reader' and 'Writer' must be factory
     functions or classes providing the *note StreamReader: 26d5. and
     *note StreamWriter: 26d4. interface resp.  Error handling is done
     in the same way as defined for the stream readers and writers.

*note StreamReaderWriter: 26dd. instances define the combined interfaces
of *note StreamReader: 26d5. and *note StreamWriter: 26d4. 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: 1c8b. 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(): b52. function to construct the instance.

 -- Classe: codecs.StreamRecoder (stream, encode, decode, Reader,
          Writer, errors='strict')

     Creates a *note StreamRecoder: 1c8b. instance which implements a
     two-way conversion: 'encode' and 'decode' work on the frontend —
     the data visible to code calling *note read(): 2709. and *note
     write(): 2704, 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:
     26f3. interface.  'Reader' and 'Writer' must be factory functions
     or classes providing objects of the *note StreamReader: 26d5. and
     *note StreamWriter: 26d4. interface respectively.

     Error handling is done in the same way as defined for the stream
     readers and writers.

*note StreamRecoder: 1c8b. instances define the combined interfaces of
*note StreamReader: 26d5. and *note StreamWriter: 26d4. 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: 246b.

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: 87c.
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 e.g.  you use
‘UTF-32-BE’ on a little endian machine you will always have to swap
bytes on encoding and decoding.  ‘UTF-32’ avoids this problem: bytes
will always be in natural endianness.  When these bytes are read by a
CPU with a different endianness, then bytes have to be swapped though.
To be able to detect the endianness of a ‘UTF-16’ or ‘UTF-32’ byte
sequence, there’s the so called BOM (“Byte Order Mark”).  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.  So when the first character in a ‘UTF-16’ or ‘UTF-32’
byte sequence appears to be a ‘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(): 9f3.  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.

On Windows, ‘cpXXX’ codecs are available for all code pages.  But only
codecs listed in the following table are guarantead to exist on other
platforms.

'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’.

Alterado na versão 3.14: On Windows, ‘cpXXX’ codecs are now available
for all code pages.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 169. to *note bytes: 192.
encoding and *note bytes-like object: 193. to *note str: 169. decoding,
similar to the Unicode text encodings.

Codec                    Aliases       Significado
                                       
-----------------------------------------------------------------------
                                       
idna                                   Implement RFC 3490(1), see
                                       also
                                       *note encodings.idna: 56.
                                       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:
193. to *note bytes: 192. mappings.  They are not supported by *note
bytes.decode(): ac9. (which only produces *note str: 169. output).

Codec                      Aliases                Significado                        Encoder / decoder
                                                                                     
------------------------------------------------------------------------------------------------------------------------
                                                                                     
base64_codec (1)           base64, base_64        Convert the operand to multiline   *note base64.encodebytes(): b42.
                                                  MIME base64 (the result always     /
                                                  includes a trailing ‘'\n'’).       *note base64.decodebytes(): b43.
                                                                                     
                                                  Alterado na versão 3.4: accepts
                                                  any
                                                  *note bytes-like object: 193. as
                                                  input for encoding and decoding
                                                  
                                                                                     
bz2_codec                  bz2                    Compress the operand using bz2.    *note bz2.compress(): 2717. /
                                                                                     *note bz2.decompress(): 128a.
                                                                                     
                                                                                     
hex_codec                  hex                    Convert the operand to             *note binascii.b2a_hex(): 2718.
                                                  hexadecimal representation, with   /
                                                  two digits per byte.               *note binascii.a2b_hex(): 2719.
                                                                                     
                                                                                     
quopri_codec               quopri,                Convert the operand to MIME        *note quopri.encode(): 271a.
                           quotedprintable,       quoted printable.                  with ‘quotetabs=True’ /
                           quoted_printable                                          *note quopri.decode(): 271b.
                                                                                     
                                                                                     
uu_codec                   uu                     Convert the operand using
                                                  uuencode.
                                                  
                                                                                     
zlib_codec                 zip, zlib              Compress the operand using gzip.   *note zlib.compress(): 844. /
                                                                                     *note zlib.decompress(): efd.
                                                                                     

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: 193, ‘'base64_codec'’
also accepts ASCII-only instances of *note str: 169. 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(): 10fa. or *note codecs.decode(): 10fb.  They are used
internally (for example, by *note pickle: ab.) 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(): 1c1. on bytes produces escaped byte values.

     'input' must be a *note bytes: 192. object.

     Returns a tuple ‘(output, length)’ where 'output' is a *note bytes:
     192. 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: 193.

     Returns a tuple ‘(output, length)’ where 'output' is a *note bytes:
     192. 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: 169. to
*note str: 169. mapping.  It is not supported by *note str.encode():
ac8. (which only produces *note bytes: 192. 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 functions should not be used directly, except
     for testing purposes; *note codecs.lookup(): b52. 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(): 9f3, 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: 19ab. object, the codec is cached and
     returned.

     If the codec module defines a ‘getaliases()’ function any returned
     aliases are registered for future use.

 -- Função: encodings.win32_code_page_search_function (encoding)

     Search for a Windows code page encoding 'encoding' of the form
     ‘cpXXXX’.

     If the code page is valid and supported, return a *note
     codecs.CodecInfo: 19ab. object for it.

     *note Disponibilidade: 1fed.: Windows.

     Adicionado na versão 3.14.

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: da.

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: d1. 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: 73. and *note ftplib: 62, accept Unicode host names (*note
http.client: 73. 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: 56. 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: 1fed.: 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: 183, *note list: 24c, *note set: 184. e *note frozenset:
7e7. e *note tuple: 608.  A classe *note str: 169. é usada para
armazenar strings Unicode, e as classes *note bytes: 192. e *note
bytearray: 342. 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: 2731.

Ver também
..........

Módulo *note calendar: 15.

     Funções gerais relacionadas ao calendário.

Módulo *note time: f4.

     Acesso de hora e conversões.

Módulo *note zoneinfo: 13a.

     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: 56d. 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.14/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: 4dc. e *note time: 1fa. 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: 7eb.  Esses
objetos *note tzinfo: 7eb. 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: 7eb, a classe *note timezone:
12bb, é 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: 1f9. ou
     *note datetime: 4dc.  *note MINYEAR: 2735. é 1.

 -- Dado: datetime.MAXYEAR

     O maior número de ano permitido no objeto *note date: 1f9. ou *note
     datetime: 4dc.  *note MAXYEAR: 2736. é 9999.

 -- Dado: datetime.UTC

     Apelido para o singleton de fuso horário UTC *note
     datetime.timezone.utc: 81c.

     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: 2738, *note month: 2739. e *note day: 273a.

 -- 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: 273b, *note minute: 273c, *note second: 273d, *note
     microsecond: 273e. e *note tzinfo: 273f.

 -- Classe: datetime.datetime

     Uma combinação de uma data e uma hora.  Atributos: *note year:
     2740, *note month: 2741, *note day: 2742, *note hour: 2743, *note
     minute: 2744, *note second: 2745, *note microsecond: 2746. e *note
     tzinfo: 2747.

 -- Classe: datetime.timedelta

     Uma duração que expressa a diferença entre duas instâncias *note
     datetime: 4dc. ou *note date: 1f9. 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: 4dc. e
     *note time: 1fa. 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: 7eb.
     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: 1f9, *note datetime: 4dc, *note time: 1fa. e *note
timezone: 12bb. compartilham esses recursos comuns:

   - Objetos desse tipo são imutáveis.

   - Objetos desses tipos são *note hasheáveis: 819, 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: ab.


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: 1f9. são sempre ingênuos.

Um objeto do tipo *note time: 1fa. ou *note datetime: 4dc. pode ser
consciente ou ingênuo.

O objeto *note datetime: 4dc. ‘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: 1fa. ‘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: bb9.


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: bb9. representa uma duração, a diferença entre
duas instâncias *note datetime: 4dc. ou *note date: 1f9.

 -- 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: a77. é 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: bb9,
     ‘timedelta(-999999999)’.

 -- Atributo: timedelta.max

     O mais positivo objeto *note timedelta: bb9,
     ‘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: bb9, ‘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: bb9.

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(): 1501.:

               >>> 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: 196.
                                     
                                     
‘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: bb9.  (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: bb9.
                                     
                                     
‘+t1’                                Retorna um objeto *note timedelta: bb9. 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: bb9. 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: b35.

  4. ‘-timedelta.max’ não é representável como um objeto *note
     timedelta: bb9.

  5. As representações de string de objetos *note timedelta: bb9. 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: bb9.
suportam certas adições e subtrações com os objetos *note date: 1f9. e
*note datetime: 4dc. (veja abaixo).

Alterado na versão 3.2: A divisão pelo piso e a divisão verdadeira de um
objeto *note timedelta: bb9. por outro objeto *note timedelta: bb9.
agora são suportadas, assim como as operações restantes e a função *note
divmod(): b8f.  A divisão verdadeira e multiplicação de um objeto *note
timedelta: bb9. por um objeto *note float: 196. agora são suportadas.

Objetos *note timedelta: bb9. dão suporte a comparações de igualdade e
ordem.

Em contexto booleano, um objeto *note timedelta: bb9. é 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: bb9.:

     >>> 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: 1f9. 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: 2ea. é 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(): 556.

     Isso pode levantar *note OverflowError: a77, 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:
     2bf. 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(): dc1.

     Alterado na versão 3.3: Levanta *note OverflowError: a77. ao invés
     de *note ValueError: 2ea. se o registro de data e hora estiver fora
     do intervalo de valores suportados pela plataforma C ‘localtime()’
     função.  Levanta *note OSError: 2bf. ao invés de *note ValueError:
     2ea. 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: 2ea. é 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: 1f9. 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: 1f9. correspondendo a data em
     calendário ISO especificada por year, week e day.  Esta é o inverso
     da função *note date.isocalendar(): ae7.

     Adicionado na versão 3.8.

 -- Método: classmethod date.strptime (date_string, format)

     Retorna um *note date: 1f9. correspondente ao 'date_string',
     analisado de acordo com 'format'.  Isso equivale a:

          date(*(time.strptime(date_string, format)[0:3]))

     *note ValueError: 2ea. é levantado se o date_string e o format não
     puderem ser interpretados por *note time.strptime(): 161e. ou se
     ele retorna um valor o qual não é uma tupla temporal.  Veja também
     *note Comportamento de strftime() e strptime(): 1a70. e *note
     date.fromisoformat(): 81d.

          Nota: Se 'format' especificar um dia do mês sem um ano, um
          *note DeprecationWarning: 1a3. é 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 date
               >>> date_string = "02/29"
               >>> when = date.strptime(f"{date_string};1984", "%m/%d;%Y")  # Evita bug do ano  bissexto.
               >>> when.strftime("%B %d")
               'February 29'

     Adicionado na versão 3.14.

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: 2735. e *note MAXYEAR: 2736. 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: a77. é levantada se
     ‘date2.year’ for menor que *note MINYEAR: 2735. ou maior que *note
     MAXYEAR: 2736.

  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: 1f9. são iguais se representam a mesma data.

     Objetos ‘date’ que não são também instâncias *note datetime: 4dc.
     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: 4dc. e um objeto ‘datetime’ levanta *note
     TypeError: 198.

Alterado na versão 3.13: A comparação entre o objeto *note datetime:
4dc. e uma instância da subclasse *note date: 1f9. 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: 1f9. é 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: 1f9. 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(): 1c0. também oferece suporte
     a objetos *note date: 1f9.

 -- Método: date.timetuple ()

     Retorna uma *note time.struct_time: eda. tal como retornado por
     *note time.localtime(): 16e7.

     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: 1f9. ‘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(): 275b.

 -- 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(): 275a, *note
     isocalendar(): ae7.

 -- Método: date.isocalendar ()

     Retorna um objeto *note tupla nomeada: 853. 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: 853.

 -- 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(): 275f, mas não pelo método *note
     date.ctime(): 275e.) 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(): 1a70. e *note
     date.isoformat(): 275c.

 -- Método: date.__format__ (format)

     O mesmo que *note date.strftime(): e83.  Isso torna possível
     especificar uma string de formatação para o objeto *note date: 1f9.
     em *note literais de string formatados: 19a. e ao usar *note
     str.format(): 828.  Veja também *note Comportamento de strftime() e
     strptime(): 1a70. e *note date.isoformat(): 275c.

* 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: 1f9.:

     >>> 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: 4dc. é um único objeto contendo todas as
informações de um objeto *note date: 1f9. e um objeto *note time: 1fa.

Assim como um objeto *note date: 1f9, *note datetime: 4dc. presume o
atual calendário Gregoriano estendido em ambas as direções; assim como
um objeto *note time: 1fa, *note datetime: 4dc. 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:
     7eb.  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: 2ea. é 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:
     2747. definido para ‘None’.

     Equivalente a:

          datetime.fromtimestamp(time.time())

     Veja também *note now(): 706, *note fromtimestamp(): 707.

     Este método é funcionalmente equivalente a *note now(): 706, 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(): 2764, 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(): 556. (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: 7eb, 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(): 2764. e *note
     utcnow(): 34e.

          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: 2747. como
     ‘None’.

     Este é similar a *note now(): 706, mas retorna a data e hora atual
     em UTC, como um objeto *note datetime: 4dc. ingênuo.  Um datetime
     UTC consciente pode ser obtido chamando
     ‘datetime.now(timezone.utc)’.  Veja também *note now(): 706.

          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(): 706.
     com *note UTC: 708.

 -- 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(): 556.  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: 4dc. retornado é ingênuo.

     Se 'tz' não for ‘None’, ela deve ser uma instância de uma subclasse
     de *note tzinfo: 7eb, e o registro de data e hora é convertido para
     o fuso horário de 'tz'.

     *note fromtimestamp(): 707. pode levantar *note OverflowError: a77,
     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: 2bf. 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(): 707, e
     então é possível ter dois registros de data e hora com diferença de
     um segundo que apresentam objetos *note datetime: 4dc. idênticos.
     Este método é preferido sobre *note utcfromtimestamp(): 34f.

     Alterado na versão 3.3: Levanta um *note OverflowError: a77. ao
     invés de *note ValueError: 2ea. 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:
     2bf. ao invés de *note ValueError: 2ea. em falhas de ‘localtime()’
     ou ‘gmtime()’.

     Alterado na versão 3.6: *note fromtimestamp(): 707. pode retornar
     instâncias com *note fold: e45. igual a 1.

 -- Método: classmethod datetime.utcfromtimestamp (timestamp)

     Retorna o *note datetime: 4dc. UTC correspondente ao registro de
     data e hora POSIX, com *note tzinfo: 2747. setado para ‘None’.  (O
     objeto resultante é ingênuo.)

     Isso pode levantar *note OverflowError: a77, 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: 2bf.
     em ‘gmtime()’.  É comum que isso seja restrito a anos de 1970 a
     2038.

     Para conseguir um objeto *note datetime: 4dc. consciente, chame
     *note fromtimestamp(): 707.:

          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: 2735. e *note
     MAXYEAR: 2736. 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: a77. ao invés
     de *note ValueError: 2ea. se o registro de data e hora estiver fora
     do intervalo de valores suportados pela função C ‘gmtime()’ da
     plataforma.  Levanta *note OSError: 2bf. ao invés de *note
     ValueError: 2ea. em caso de falha ‘gmtime()’.

     Descontinuado desde a versão 3.12: Use *note
     datetime.fromtimestamp(): 707. com *note UTC: 708.

 -- Método: classmethod datetime.fromordinal (ordinal)

     Retorna um *note datetime: 4dc. correspondente ao ordinal
     proléptico Gregoriano, onde 1º de janeiro do ano 1 tem ordinal 1.
     *note ValueError: 2ea. é 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: 2747. é ‘None’.

 -- Método: classmethod datetime.combine (date, time,
          tzinfo=time.tzinfo)

     Retorna um novo objeto *note datetime: 4dc. no qual os componentes
     de data são iguais ao objeto *note date: 1f9. fornecido, e nos
     quais os componentes de hora são iguais ao do objeto *note time:
     1fa. fornecido.  Se o argumento 'tzinfo' é fornecido, seu valor é
     usado para definir o atributo *note tzinfo: 2747. do resultado,
     caso contrário o atributo *note tzinfo: 273f. do argumento 'time' é
     usado.  Se o argumento 'date' é um objeto *note datetime: 4dc, seus
     componentes de hora e atributos *note tzinfo: 2747. são ignorados.

     Para qualquer objeto *note datetime: 4dc. ‘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: 4dc. 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():
     275c. ou *note datetime.isoformat(): d19.

 -- Método: classmethod datetime.fromisocalendar (year, week, day)

     Retorna um *note datetime: 4dc. 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():
     ae8.

     Adicionado na versão 3.8.

 -- Método: classmethod datetime.strptime (date_string, format)

     Retorna um *note datetime: 4dc. 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: 2ea. é levantado se o date_string e o format não
     puderem ser interpretados por *note time.strptime(): 161e. ou se
     ele retorna um valor o qual não é uma tupla temporal.  Veja também
     *note Comportamento de strftime() e strptime(): 1a70. e *note
     datetime.fromisoformat(): 81f.

     Alterado na versão 3.13: Se 'format' especificar um dia do mês sem
     um ano, um *note DeprecationWarning: 1a3. 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: 4dc. representável, ‘datetime(MINYEAR,
     1, 1, tzinfo=None)’.

 -- Atributo: datetime.max

     O último *note datetime: 4dc. 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: 4dc.
     diferentes, ‘timedelta(microseconds=1)’.

Atributos de instância (somente leitura):

 -- Atributo: datetime.year

     Entre *note MINYEAR: 2735. e *note MAXYEAR: 2736. 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: 4dc, 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: 2747. que o datetime de entrada, e
     ‘datetime2 - datetime1 == timedelta’ após.  *note OverflowError:
     a77. é levantada se ‘datetime2.year’ fosse menor que *note MINYEAR:
     2735. ou maior que *note MAXYEAR: 2736.  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: 2747. 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: 4dc. de outro *note datetime: 4dc.
     é 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: 198. é levantado.

     Se ambos são ingênuos, ou ambos são conscientes e tiverem o mesmo
     atributo *note tzinfo: 2747, os atributos *note tzinfo: 2747. são
     ignorados, e o resultado é um objeto ‘t’ do tipo *note timedelta:
     bb9, 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: 2747.
     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: 4dc. 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: e45. serão
     ignorados e os datetimes base serão comparados.  Se ambos os
     comparandos forem conscientes e tiverem atributos *note tzinfo:
     2747. 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: 4dc. ingênuos
     e conscientes levanta *note TypeError: 198.

     Se ambos os comparandos forem conscientes e tiverem o mesmo
     atributo ‘tzinfo’, os atributos ‘tzinfo’ e *note fold: e45. serão
     ignorados e os datetimes base serão comparados.  Se ambos os
     comparandos forem conscientes e tiverem atributos *note tzinfo:
     2747. 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: 4dc. conscientes e nativas não levantam *note TypeError:
198.

Alterado na versão 3.13: A comparação entre o objeto *note datetime:
4dc. e uma instância da subclasse *note date: 1f9. 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: 1f9. com o mesmo ano, mês e dia.

 -- Método: datetime.time ()

     Retorna um objeto *note time: 1fa. com a mesma hora, minuto,
     segundo, microssegundo e fold.  O atributo *note tzinfo: 2747. é
     ‘None’.  Veja também o método *note timetz(): 276a.

     Alterado na versão 3.6: O valor fold é copiado para o objeto *note
     time: 1fa. retornado.

 -- Método: datetime.timetz ()

     Retorna um objeto *note time: 1fa. com os mesmos atributos de hora,
     minuto, segundo, microssegundo, fold e tzinfo.  Veja também o
     método *note time(): f4.

     Alterado na versão 3.6: O valor fold é copiado para o objeto *note
     time: 1fa. 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: 34. 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: 4dc. também são suportados pela função
     genérica *note copy.replace(): 1c0.

     Alterado na versão 3.6: Adicionado o parâmetro 'fold'.

 -- Método: datetime.astimezone (tz=None)

     Retorna um objeto *note datetime: 4dc. com novo atributo *note
     tzinfo: 2747. 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: 7eb, e seus métodos *note utcoffset(): 276b. e *note dst():
     276c. 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: 12bb. 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: 12bb. '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(): 276d. pode ser
     substituído em uma subclasse *note tzinfo: 7eb. para afetar o
     resultado retornado por *note astimezone(): bba.  Ignorando erros
     de letras maiúsculas/minúsculas, *note astimezone(): bba. 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(): bba. agora
     pode ser chamado em instâncias ingênuas que presumidamente
     representam a hora local do sistema.

 -- Método: datetime.utcoffset ()

     Se *note tzinfo: 2747. 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: bb9. 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: 2747. 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: bb9. 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: 2747. 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: eda. tal como retornado por
     *note time.localtime(): 16e7.

     ‘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: 2770. do resultado é
     definido conforme o método *note dst(): 276c.: *note tzinfo: 2747.
     é ‘None’ ou *note dst(): 276c. retorna ‘None’, ‘tm_isdst’ é
     definido para ‘-1’; caso contrário se *note dst(): 276c. 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: 4dc. ‘d’ é ingênua, isto é o mesmo
     que ‘d.timetuple()’, exceto que *note tm_isdst: 2770. é 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: eda. para o horário
     normalizado é retornado.  ‘tm_isdst’ é forçado para 0.  Observe que
     uma exceção *note OverflowError: a77. 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(): 2771. 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(): 276f.

 -- 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: 4dc.  O valor de retorno é um *note float: 196.
     similar aquele retornado por *note time.time(): 556.

     Presume-se que instâncias *note datetime: 4dc. 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: 4dc.
     suporta um intervalo maior de valores que ‘mktime()’ em muitas
     plataformas, este método pode levantar *note OverflowError: a77. ou
     *note OSError: 2bf. para horários longe no passado ou longe no
     futuro.

     Para instâncias conscientes de *note datetime: 4dc, 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(): 1296. usa o
     atributo *note fold: e45. 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: 4dc. 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(): 2774.

 -- 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(): 2773, *note isocalendar(): ae8.

 -- Método: datetime.isocalendar ()

     Retorna uma *note tupla nomeada: 853. 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: 2746. não
          é 0

        - ‘YYYY-MM-DDTHH:MM:SS’, se *note microsecond: 2746. é 0

     Se *note utcoffset(): 276b. 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: 2746. não é 0

        - ‘YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]’, se *note
          microsecond: 2746. é 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: 2746.
          é 0, o mesmo que ‘'microseconds'’ caso contrário.

        - ‘'hours'’: Inclui o atributo *note hour: 2743. no formato de
          dois dígitos ‘HH’.

        - ‘'minutes'’: Inclui os atributos *note hour: 2743. e *note
          minute: 2744. no formato ‘HH:MM’.

        - ‘'seconds'’: Inclui os atributos *note hour: 2743, *note
          minute: 2744. e *note second: 2745. 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: 2ea. 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: 4dc. ‘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(): 275f. invoca, mas a qual *note datetime.ctime():
     2776. 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(): 1a70. e *note datetime.isoformat(): d19.

 -- Método: datetime.__format__ (format)

     O mesmo que *note datetime.strftime(): e82.  Isso torna possível
     especificar uma string de formatação para o objeto *note datetime:
     4dc. em *note literais de string formatados: 19a. e ao usar *note
     str.format(): 828.  Veja também *note Comportamento de strftime() e
     strptime(): 1a70. e *note datetime.isoformat(): d19.

* 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: 4dc.:

     >>> 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: 7eb. 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: 1fa. representa a hora (local) do dia,
independente de qualquer dia em particular, e sujeito a ajustes através
de um objeto *note tzinfo: 7eb.

 -- 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: 7eb.  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: 2ea. é 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: 1fa. mais cedo que pode ser representado, ‘time(0, 0,
     0, 0)’.

 -- Atributo: time.max

     O *note time: 1fa. mais tardio que pode ser representado, ‘time(23,
     59, 59, 999999)’.

 -- Atributo: time.resolution

     A menor diferença possível entre objetos *note time: 1fa.
     diferentes, ‘timedelta(microseconds=1)’, embora perceba que
     aritmética sobre objetos *note time: 1fa. 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: 1fa, 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: 1fa. 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: 198.

Se ambos os comparandos são conscientes, e tem o mesmo atributo *note
tzinfo: 273f, 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: 1fa. conscientes e nativas não levantam *note TypeError:
198.

Em contextos Booleanos, um objeto *note time: 1fa. é sempre considerado
como verdadeiro.

Alterado na versão 3.5: Antes do Python 3.5, um objeto *note time: 1fa.
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.

Outros construtores:

 -- Método: classmethod time.fromisoformat (time_string)

     Retorna um *note time: 1fa. 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():
     277e.

 -- Método: classmethod time.strptime (date_string, format)

     Retorna um *note time: 1fa. 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:

          time(*(time.strptime(date_string, format)[3:6]))

     *note ValueError: 2ea. é levantado se o 'date_string' e o 'format'
     não puderem ser interpretados por *note time.strptime(): 161e. ou
     se ele retorna um valor o qual não é uma tupla temporal.  Veja
     também *note Comportamento de strftime() e strptime(): 1a70. e
     *note time.fromisoformat(): 81e.

     Adicionado na versão 3.14.

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: 1fa. com os mesmos valores, mas com os
     parâmetros especificados atualizados.  Perceba que ‘tzinfo=None’
     pode ser especificado para criar um *note time: 1fa. ingênuo a
     partir de um *note time: 1fa. consciente, sem conversão de dados do
     tempo.

     Objetos *note time: 1fa. também são suportados pela função genérica
     *note copy.replace(): 1c0.

     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: 273e. não é 0

        - ‘HH:MM:SS’, se *note microsecond: 273e. é 0

        - ‘HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]’, se *note utcoffset():
          277f. não retorna ‘None’

        - ‘HH:MM:SS+HH:MM[:SS[.ffffff]]’, se *note microsecond: 273e. é
          0 e *note utcoffset(): 277f. 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: 273e.
          é 0, o mesmo que ‘'microseconds'’ caso contrário.

        - ‘'hours'’: Inclui o atributo *note hour: 273b. no formato de
          dois dígitos ‘HH’.

        - ‘'minutes'’: Inclui os atributos *note hour: 273b. e *note
          minute: 273c. no formato ‘HH:MM’.

        - ‘'seconds'’: Inclui os atributos *note hour: 273b, *note
          minute: 273c. e *note second: 273d. 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: 2ea. 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(): 1a70. e *note time.isoformat(): 277e.

 -- Método: time.__format__ (format)

     O mesmo que *note time.strftime(): 1a2b.  Isso torna possível
     especificar uma string de formatação para o objeto *note time: 1fa.
     em *note literais de string formatados: 19a. e ao usar *note
     str.format(): 828.  Veja também *note Comportamento de strftime() e
     strptime(): 1a70. e *note time.isoformat(): 277e.

 -- Método: time.utcoffset ()

     Se *note tzinfo: 273f. 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: bb9. 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: 273f. 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: bb9. 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: 273f. 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: 1fa.:

     >>> 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: 7eb. para capturar informações sobre um fuso horário
     em particular.

     Uma instância de (uma subclasse concreta de) *note tzinfo: 7eb.
     pode ser passada para os construtores de objetos *note datetime:
     4dc. e *note time: 1fa.  Os objetos time veem seus atributos como
     se estivessem em horário local, e o objeto *note tzinfo: 7eb.
     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: 7eb.
     necessários pelos métodos *note datetime: 4dc. que você usa.  O
     módulo ‘datetime’ fornece *note timezone: 12bb, uma subclasse
     concreta simples de *note tzinfo: 7eb, 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:
     7eb. deve ter um método *note __init__(): 8b4. 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: 7eb. 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: bb9, 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: 7eb. representa fuso horário e ajustes
     de horário de verão, *note utcoffset(): 2787. 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:
     bb9. 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():
     2787. 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(): 2787. não retorna ‘None’, *note dst(): 2788.
     também não deve retornar ‘None’.

     A implementação padrão de *note utcoffset(): 2787. levanta *note
     NotImplementedError: 368.

     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: bb9. 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: bb9. (veja *note utcoffset(): 2787. 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(): 2787, então não existe necessidade de consultar *note
     dst(): 2788. 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(): 276f. chama o método *note dst(): 2788. do
     seu atributo *note tzinfo: 2747. para determinar como o flag *note
     tm_isdst: 2770. deve ser definido, e *note tzinfo.fromutc(): 276d.
     chama *note dst(): 2788. 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: 7eb. 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: 4dc. 'dt'
     com ‘dt.tzinfo == tz’ para subclasses *note tzinfo: 7eb. 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(): bba.
     depende disso, mas não pode detectar violações; é responsabilidade
     do programador garantir isso.  Se uma subclasse *note tzinfo: 7eb.
     não pode garantir isso, ele pode ser capaz de substituir a
     implementação padrão de *note tzinfo.fromutc(): 276d. para
     funcionar corretamente com *note astimezone(): bba. independente
     disso.

     Maior parte das implementações de *note dst(): 2788. 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(): 2788. levanta *note
     NotImplementedError: 368.

     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: 4dc. '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:
     7eb. desejarão retornar nomes diferentes dependendo do valor
     específico de 'dt' passado, especialmente se a classe *note tzinfo:
     7eb. estiver contabilizando o horário de verão.

     A implementação padrão de *note tzname(): 2789. levanta *note
     NotImplementedError: 368.

Estes métodos são chamados por um objeto *note datetime: 4dc. ou *note
time: 1fa, em resposta aos seus métodos de mesmo nome.  Um objeto *note
datetime: 4dc. passa a si mesmo como argumento, e um objeto *note time:
1fa. passa ‘None’ como o argumento.  Os métodos de uma subclasse *note
tzinfo: 7eb. devem portanto estar preparados para aceitar um argumento
'dt' com valor ‘None’, ou uma classe *note datetime: 4dc.

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: 7eb.  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: 4dc. é passado em resposta a um método
*note datetime: 4dc, ‘dt.tzinfo’ é o mesmo objeto que 'self'.  Os
métodos *note tzinfo: 7eb. podem confiar nisso, a menos que o código do
usuário chame métodos *note tzinfo: 7eb. diretamente.  A intenção é que
os métodos *note tzinfo: 7eb. 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: 7eb. 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(): bba.  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(): 276d. é ajustar os dados de data e
     hora, retornando um 'datetime' equivalente na hora local de 'self'.

     A maioria das subclasses de *note tzinfo: 7eb. deve ser capaz de
     herdar a implementação padrão de *note fromutc(): 276d. 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(): 276d. 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(): bba. e *note
     fromutc(): 276d. 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(): 276d. 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: 7eb.:

     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: 7eb. 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(): bba. 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:
e45. 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: 4dc. que diferem apenas
pelo valor do atributo *note fold: e45. 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: e45. ou evitar utilizar
subclasses híbridas *note tzinfo: 7eb.; não há ambiguidades ao usar
*note timezone: 12bb. ou qualquer outra subclasse *note tzinfo: 7eb. 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: 13a.

          O módulo ‘datetime’ possui uma classe básica *note timezone:
          12bb. (para lidar com deslocamentos fixos arbitrários do UTC)
          e seu atributo *note timezone.utc: 81c. (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: 12bb. é uma subclasse de *note tzinfo: 7eb,
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: bb9. 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:
     2ea. 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(): 276e.

     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: 12bb. é construída.

     O argumento 'dt' é ignorado.  O valor de retorno é uma instância
     *note timedelta: bb9. 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: 12bb. é 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: 4dc. 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: 1f9, *note datetime: 4dc. e *note time:
1fa. 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, os métodos de classe *note date.strptime(): 1f8, *note
datetime.strptime(): 18a3. e *note time.strptime(): 161e. criam um
objeto a partir de uma string representando o tempo e uma string de
formatação correspondente.

A tabela abaixo fornece uma comparação de alto nível entre *note
strftime(): e82. e *note strptime(): 18a3.:

                     ‘strftime’                                                   ‘strptime’
                                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                  
Uso                  Converte objeto para uma string conforme um formato          Interpreta uma string como um objeto dado um formato
                     fornecido                                                    correspondente
                                                                                  
                                                                                  
Tipo de método       Método de instância                                          Método de classe
                                                                                  
                                                                                  
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(): e82.  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(): 18a3. com diretivas ISO 8601
incompletas ou ambíguas levantará um *note ValueError: 2ea.

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: f4, embora nem todos os objetos
suportem um método *note timetuple(): 2758.

Para o método de classe *note datetime.strptime(): 18a3, o valor padrão
é ‘1900-01-01T00:00:00.000’: quaisquer componentes não especificados na
string de formato serão extraídos do valor padrão.  (1)

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: 1fa, 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: 1f9, os códigos de formato para horas, minutos,
segundos e microssegundos não devem ser usados, pois objetos *note date:
1f9. 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: 45f. 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(): 18a3. 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(): e82. era limitado a anos >= 1900.

     Alterado na versão 3.3: Na versão 3.2, o método *note strftime():
     e82. era limitado a anos >= 1000.

  3. Quando usado com o método *note strptime(): 18a3, 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: f4, o módulo ‘datetime’ não
     oferece suporte para segundos intercalares.

  5. Quando usado com o método *note strptime(): 18a3, 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(): 276b. é 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(): 276b. 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(): 18a3, 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(): e82, ‘%Z’ é substituído por uma string
          vazia se *note tzname(): 276e. retornar ‘None’; caso
          contrário, ‘%Z’ é substituído pelo valor retornado, que deve
          ser uma string.

          *note strptime(): 18a3. 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(): 18a3, um objeto *note datetime: 4dc.
     consciente será produzido.  O ‘tzinfo’ do resultado será definido
     para uma instância *note timezone: 12bb.

  7. Quando utilizados com o método *note strptime(): 18a3, ‘%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(): 18a3.  Observe também que ‘%G’ e ‘%Y’ não
     são intercambiáveis.

  9. Quando usado com o método *note strptime(): 18a3, 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. Ao analisar um mês e dia usando *note strptime(): 18a3, sempre
     inclua um ano no formato.  Se o valor que você precisa analisar não
     possui um ano, adicione um ano bissexto fictício de forma
     explícita.  Caso contrário, seu código levantará uma exceção ao
     encontrar o dia bissexto, porque o ano padrão usado pelo analisador
     sintático não é um ano bissexto.  Os usuários encontram esse bug a
     cada quatro anos…

          >>> 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)

     Deprecated since version 3.13, will be removed in version 3.15:
     Chamadas ao método *note strptime(): 18a3. usando uma string de
     formato contendo um dia do mês sem um ano agora emitem um *note
     DeprecationWarning: 1a3.  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(2).

   ---------- Footnotes ----------

   (1) Passar ‘datetime.strptime('Feb 29', '%b %d')’ irá falhar porque
1900 não é um ano bissexto.

   (2) 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: 13a. 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: 13a. 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: 34.

     Fornece os tipos *note time: 1fa. e *note datetime: 4dc. com os
     quais a classe *note ZoneInfo: ad2. 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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.14/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: ad2. é uma implementação concreta da classe base
abstrata *note datetime.tzinfo: 7eb. e deve ser anexada a ‘tzinfo’, por
meio do construtor, do método *note datetime.replace: 16b9. ou *note
datetime.astimezone: bba.:

     >>> 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:
e45. 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: ad2. levantarão *note ZoneInfoNotFoundError: 1784.

* 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: 200e. 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: 200e, quando não especificado de outra
     forma, pode ser configurado em *note tempo de compilação: 200f.

  2. *note TZPATH: 200e. pode ser configurado usando *note uma variável
     de ambiente: 279a.

  3. Em *note tempo de execução: 279b, o caminho de pesquisa pode ser
     manipulado usando a função *note reset_tzpath(): 1749.

* 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: 200e. 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: 200d.), que deve ser uma
string delimitada por *note os.pathsep: 1fe1.

Em todas as plataformas, o valor configurado está disponível como a
chave ‘TZPATH’ em *note sysconfig.get_config_var(): 174.


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: 200e. (no momento da importação ou sempre
que *note reset_tzpath(): 1749. 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: 1fe1. 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: 279f, 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(): 1749.  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: 7eb. 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(): 27a2, 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: 2ea. se uma chave não conforme for
     passada.

     Se nenhum arquivo correspondente a ‘key’ for encontrado, o
     construtor levantará *note ZoneInfoNotFoundError: 1784.

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:
     109a. 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__(): 825. and *note __repr__(): 824.

     Objects created via this constructor cannot be pickled (see *note
     pickling: 27a4.).

 -- 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: 27a7. 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: 169. on a
*note ZoneInfo: ad2. object defaults to using the *note ZoneInfo.key:
27a6. 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(): 1c1.  ‘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: 27a6.

 -- Função: zoneinfo.reset_tzpath (to=None)

     Sets or resets the time zone search path (*note TZPATH: 200e.) for
     the module.  When called with no arguments, *note TZPATH: 200e. is
     set to the default value.

     Calling ‘reset_tzpath’ will not invalidate the *note ZoneInfo: ad2.
     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: 70b. of strings or
     *note os.PathLike: e3f. and not a string, all of which must be
     absolute paths.  *note ValueError: 2ea. 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(): 1749, 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: 2799.


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: ad2. object fails
     because the specified key could not be found on the system.  This
     is a subclass of *note KeyError: 5dd.

 -- Exceção: zoneinfo.InvalidTZPathWarning

     Raised when *note PYTHONTZPATH: 279e. 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(): 27b0. 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: 34. e *note time:
f4.

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: 27b1.  'firstweekday' é um inteiro
     que especifica o primeiro dia da semana.  *note MONDAY: 27b2. é ‘0’
     (o padrão), *note SUNDAY: 27b3. é ‘6’.

     Um objeto *note Calendar: 27b1. 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: 27b1. 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(): 27b5. e *note getfirstweekday(): 27b6.
          respectivamente.

      -- Método: getfirstweekday ()

          Retorna um *note int: 19b. para o primeiro dia da semana atual
          (0-6).

          Idêntico à leitura da propriedade *note firstweekday: 27b4.

      -- Método: setfirstweekday (firstweekday)

          Define o primeiro dia da semana como 'firstweekday', passado
          como *note int: 19b. (0–6)

          Idêntico à definição da propriedade *note firstweekday: 27b4.

      -- Método: iterweekdays ()

          Retorna um iterador para os números dos dias da semana que
          serão usados em uma semana.  O primeiro valor do iterador será
          o mesmo que o valor da propriedade *note firstweekday: 27b4.

      -- 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: 1f9.) para o mês e todos os dias antes do
          início do mês ou após o final do mês que são 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(): e07, mas não restrito
          pelo intervalo de *note datetime.date: 1f9.  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(): e07, mas não restrito
          pelo intervalo de *note datetime.date: 1f9.  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(): e07, mas não restrito
          pelo intervalo de *note datetime.date: 1f9.  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(): e07, mas não restrito
          pelo intervalo de *note datetime.date: 1f9.  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: 1f9.

      -- 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: 1f9.

      -- Método: yeardays2calendar (year, width=3)

          Retorna os dados para o ano especificado prontos para
          formatação (semelhante a *note yeardatescalendar(): 27bd.).
          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(): 27bd.).  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: 180b. 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(): 27b0.

      -- 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(): 27b0.

      -- 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(): 27c4.

      -- 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(): 27b0.  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(): 27c7.

 -- 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: 87a. 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: 27cd.

          Adicionado na versão 3.7.

      -- Atributo: cssclass_month_head

          A classe CSS principal do mês (usada por *note
          formatmonthname(): 27cc.).  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(): 27c9.).  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(): 27ca.).  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(): 27ca.).  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: 180b. 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: d0c. 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: 27b2, *note TUESDAY:
     27d4, *note WEDNESDAY: 27d5, *note THURSDAY: 27d6, *note FRIDAY:
     27d7, *note SATURDAY: 27d8. e *note SUNDAY: 27b3. 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: dfb. se 'year' for um ano bissexto, caso
     contrário, *note False: d1f.

 -- 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(): 27b0.

 -- Função: calendar.prmonth (theyear, themonth, w=0, l=0)

     Imprime um calendário do mês conforme retornado pelo *note month():
     1861.

 -- 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(): 27c4. da classe *note TextCalendar:
     180b.

 -- 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(): 15.

 -- 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(): 27c7. da classe
     *note TextCalendar: 180b.

 -- 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(): 13bc. no módulo *note
     time: f4, 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(): 13bc. e *note timegm(): 27e3. são
     inversos um do outro.

O módulo *note calendar: 15. 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: 27b2. até *note SUNDAY: 27b3.

     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: 34b. até *note DECEMBER: 27f1.

     Adicionado na versão 3.12.

O módulo *note calendar: 15. define as seguintes exceções:

 -- Exceção: calendar.IllegalMonthError (month)

     Uma subclasse de *note ValueError: 2ea, 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: 2ea, 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: 34.

     Interface orientada a objetos para datas e horas com funcionalidade
     semelhante ao módulo *note time: f4.

Módulo *note time: f4.

     Funções de baixo nível relacionadas ao tempo.

* Menu:

* Uso na linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 15. pode ser executado como um script na linha
de comando para exibir interativamente um calendário.

     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                   March
     Mo 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 12
     10 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 19
     17 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 26
     24 25 26 27 28 29 30      28 29                     27 28 29 30 31
     31

            April                      May                       June
     Mo 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 11
     10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
     17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
     24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

             July                     August                  September
     Mo 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 10
     10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
     17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
     24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
     31

           October                   November                  December
     Mo 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 17
     16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
     23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
     30 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 para saída.  *note -encoding: 27fa. é
     necessário se *note -locale: 27f8. 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: 2800. 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 o ano inteiro.

'Opções de modo texto:'

 -- Option: --width WIDTH, -w WIDTH

     A largura da coluna de data em colunas terminais.  A data é exibida
     centralizada na coluna.  Qualquer valor menor que 2 é ignorado.  O
     padrão é 2.

 -- Option: --lines LINES, -l LINES

     O número de linhas para cada semana em linhas terminais.  A data é
     exibida alinhada no topo.  Qualquer valor menor que 1 é ignorado.
     O padrão é 1.

 -- Option: --spacing SPACING, -s SPACING

     O espaço entre os meses em colunas.  Qualquer valor menor que 2 é
     ignorado.  O padrão é 6.

 -- Option: --months MONTHS, -m MONTHS

     O número de meses exibidos por linha.  O padrão é 3.

Alterado na versão 3.14: Por padrão, a data de hoje é destacada em cor e
pode ser *note controlada usando variáveis de ambiente: 1b7.

'Opções de modo HTML:'

 -- Option: --css CSS, -c CSS

     O caminho de uma folha de estilo CSS a ser usada para o calendário.
     Isso deve ser relativo ao HTML gerado ou um HTTP absoluto ou 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:
183, *note list: 24c, *note set: 184. e *note tuple: 608.

*note namedtuple(): 4da.  função fábrica ('factory function') para criar subclasses de tuplas
                          com campos nomeados
                          
                          
*note deque: 7e9.         contêiner lista ou similar com acréscimos e retiradas rápidas nas duas
                          extremidades
                          
                          
*note ChainMap: e0a.      classe dict ou similar para criar uma visão única de vários
                          mapeamentos
                          
                          
*note Counter: 128d.      subclasse de dict para contar objetos *note hasheáveis: 819.
                          
                          
*note OrderedDict: 7e8.   subclasse de dict que lembra a ordem que as entradas foram adicionadas
                          
                          
*note defaultdict: 13b8.  subclasse de dict que chama uma função fábrica para fornecer valores
                          não encontrados
                          
                          
*note UserDict: 1c34.     invólucro em torno de objetos dicionário para facilitar fazer
                          subclasse de dict
                          
                          
*note UserList: 16d2.     invólucro em torno de objetos lista para facilitar criação de
                          subclasse de lista
                          
                          
*note UserString: fc7.    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.14/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: e0a. é 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(): 1654.

A classe pode ser usada para simular escopos aninhados e é útil em
modelos.

 -- Classe: collections.ChainMap (*maps)

     *note ChainMap: e0a. 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: e0a. 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:
     e0a.

     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: e0a. 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: e0a. 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: 14a3.
          usada em *note escopos aninhados: 2223.  Os casos de uso
          também são paralelos aos da função embutida *note super():
          1a6.  Uma referência a ‘d.parents’ é equivalente a:
          ‘ChainMap(*d.maps[1:])’.

     Observe, a ordem de iteração de um *note ChainMap: e0a. é
     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(): 1654. 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: e0a. 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: e0a. 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: 128d. é uma subclasse de *note dict: 183.
     subclass para contagem de objetos *note hasheáveis: 819.  É 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: 128d. é 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: 5dd.:

          >>> 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: 183,
     *note Counter: 128d. 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(): 14ff. .

               >>> 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(): 14fe. 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(): 1654, 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: 128d, 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: 128d.

      -- 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(): 1654, 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: 128d.:

     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: 128d. 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: 128d. é 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(): 14fe. 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(): 2816. e *note
          subtract(): 13da. 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(): 14ff. 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(): 147d.:

          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(): 2818.) 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: 24c. 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: 2ea. 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: 1723. é 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:
          1723.

      -- Método: popleft ()

          Remove e devolve um elemento do lado esquerdo do deque.  Se
          nenhum elemento estiver presente, levanta um *note IndexError:
          1723.

      -- Método: remove (value)

          Remove a primeira ocorrência de 'value'.  Se não for
          encontrado, levanta um *note ValueError: 2ea.

      -- 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: 348. 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: 7e9.  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(): 281e.; caso
contrário, ele pode voltar ao fim com o método *note rotate(): 1b79.:

     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(): 1b79. fornece uma maneira de implementar o
fatiamento e exclusão *note deque: 7e9.  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: 7e9, use uma abordagem
semelhante aplicando *note rotate(): 1b79. para trazer um elemento alvo
para o lado esquerdo do deque.  Remova as entradas antigas com *note
popleft(): 281e, adicione novas entradas com *note extend(): 281b, 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:
     13b8. é uma subclasse da classe embutida *note dict: 183.  Ele
     substitui um método e adiciona uma variável de instância gravável.
     A funcionalidade restante é a mesma da classe *note dict: 183. e
     não está documentada aqui.

     O primeiro argumento fornece o valor inicial para o atributo *note
     default_factory: 2821.; o padrão é ‘None’.  Todos os argumentos
     restantes são tratados da mesma forma como se fossem passados para
     o construtor *note dict: 183, incluindo argumentos nomeados.

     Os objetos *note defaultdict: 13b8. oferecem suporta ao seguinte
     método além das operações padrão *note dict: 183.:

      -- Método: __missing__ (key)

          Se o atributo *note default_factory: 2821. for ‘None’, isso
          levanta uma exceção *note KeyError: 5dd. com 'key' como
          argumento.

          Se *note default_factory: 2821. 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: 2821. levanta uma exceção,
          esta exceção é propagada inalterada.

          Este método é chamado pelo método *note __getitem__(): 581. da
          classe *note dict: 183. quando a chave solicitada não é
          encontrada; tudo o que ele retorna ou levanta é então
          retornado ou levantado por *note __getitem__(): 581.

          Observe que *note __missing__(): 2822. 'não' é chamado para
          nenhuma operação além de *note __getitem__(): 581.  Isso
          significa que *note get(): 1ee9. irá, como dicionários
          normais, retornar ‘None’ como padrão ao invés de usar *note
          default_factory: 2821.

     Objetos *note defaultdict: 13b8. permitem a seguinte variável de
     instância:

      -- Atributo: default_factory

          Este atributo é usado pelo método *note __missing__(): 2822.;
          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: 24c. como *note default_factory: 2821, 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: 2821. que retorna uma *note list: 24c. vazia.  A
operação *note list.append(): 8d1. 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(): 8d1. adiciona outro valor à lista.  Esta técnica é mais
simples e rápida que uma técnica equivalente usando *note
dict.setdefault(): 126f.:

     >>> 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: 2821. como *note int: 19b. torna *note
defaultdict: 13b8. ú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: 2821. chama *note
int(): 19b. 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(): 19b. 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: 2821. como *note set: 184. torna *note
defaultdict: 13b8. ú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__(): 824. 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: 88. 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: 1423. 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__: 60b. 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: 59e.

     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: 2825.

     >>> # 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: 2d. ou *note
sqlite3: d4.:

     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: 183. 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: 7e8. em vez
     de um *note dict: 183. normal.

     Alterado na versão 3.8: Retorna um *note dict: 183. regular em vez
     de um *note OrderedDict: 7e8.  A partir do Python 3.7, é garantido
     que os dicionários regulares sejam ordenados.  Se os recursos
     extras de *note OrderedDict: 7e8. 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(): 1c0.

     Alterado na versão 3.13: Levanta *note TypeError: 198. em vez de
     *note ValueError: 2ea. 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(): dbe.:

     >>> 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: 1ec8.):

     >>> 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: 2828.:

     >>> 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: 32f. 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: 14d3.:

          class Component(NamedTuple):
              part_number: int
              weight: float
              description: Optional[str] = None

   * Veja *note types.SimpleNamespace(): 4df. para um espaço de nomes
     mutável baseado em um dicionário subjacente em vez de uma tupla.

   * O módulo *note dataclasses: 33. 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: 183.
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: 183. ainda permanecem:

   * O *note dict: 183. 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: 7e8. 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: 7e8. pode lidar com operações de
     reordenação frequentes melhor do que *note dict: 183.  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: 7e8. verifica a
     ordem correspondente.

     Um *note dict: 183. 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(): 14e9. de *note OrderedDict: 7e8. tem uma
     assinatura diferente.  Ele aceita um argumento opcional para
     especificar qual item será exibido.

     Um *note dict: 183. 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: 183. 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: 7e8. possui um método *note move_to_end(): 13db.
     para reposicionar eficientemente um elemento em um endpoint.

     Um *note dict: 183. 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: 183. 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: 183. não tinha um método *note
     __reversed__(): e7a.

 -- Classe: collections.OrderedDict ([items])

     Retorna uma instância de uma subclasse *note dict: 183. 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(): 14e9. 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: 5dd. 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():
a5b.  Testes de igualdade entre objetos *note OrderedDict: 7e8. são
sensíveis à ordem e são aproximadamente equivalentes a
‘list(od1.items())==list(od2.items())’.

Testes de igualdade entre objetos *note OrderedDict: 7e8. e outros
objetos *note Mapping: abd. não diferenciam a ordem como dicionários
regulares.  Isso permite que objetos *note OrderedDict: 7e8. 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:
282a. de *note OrderedDict: 7e8. agora oferecem suporte a iteração
reversa usando *note reversed(): a5b.

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:
7e8. e seu método *note update(): 1654.

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: 7e8. também seria útil para implementar variantes
de *note functools.lru_cache(): bd8.:

     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: 1c34. 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: 183.; 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: 282d. das instâncias *note UserDict: 1c34.  Se 'initialdata'
     for fornecido, *note data: 282d. é 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: 1c34. fornecem o seguinte atributo:

      -- Atributo: data

          Um dicionário real usado para armazenar o conteúdo da classe
          *note UserDict: 1c34.


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: 24c.; 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:
     282f. das instâncias *note UserList: 16d2.  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: 16d2.

     Além de prover suporte aos métodos e operações de sequências
     mutáveis, as instâncias *note UserList: 16d2. fornecem o seguinte
     atributo:

      -- Atributo: data

          Um objeto *note list: 24c. real usado para armazenar o
          conteúdo da classe *note UserList: 16d2.

'Requisitos para criar subclasse:' Espera-se que as subclasses de *note
UserList: 16d2. 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: fc7. 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: 169.;
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: 2831. das instâncias *note UserString: fc7.  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(): 169.

     Além de prover suporte aos métodos e operações de strings, as
     instâncias *note UserString: fc7. fornecem o seguinte atributo:

      -- Atributo: data

          Um objeto *note str: 169. real usado para armazenar o conteúdo
          da classe *note UserString: fc7.

     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: 1e.

'Código-fonte:' Lib/_collections_abc.py(1)

__________________________________________________________________

Esse módulo fornece *note classes base abstratas: 13b2. que podem ser
usadas para testar se uma classe fornece uma interface específica; por
exemplo, se é *note hasheável: 819. ou se é um *note mapeamento: 13b7.

Um teste *note issubclass(): 9ba. ou *note isinstance(): 2ac. 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(): 9ba. ou *note isinstance(): 2ac. 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: 235d, a
     lógica *note iteration: 1423. e a função *note reversed(): a5b.
     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: 87a.):

          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: 13c0. de uma *note Mapping: abd.

Adicionado na versão 3.9: Essas classes abstratas agora oferecem suporte
a ‘[]’.  Veja *note Tipo Generic Alias: 8b6. 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.14/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: 13b2.:

ABC                                Herda de                   Métodos abstratos           Métodos mixin
                                                                                          
---------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                          
*note Container: 2541. (1)                                    ‘__contains__’
                                                              
                                                                                          
*note Hashable: 70e. (2)                                      ‘__hash__’
                                                              
                                                                                          
*note Iterable: 253f. (3) (4)                                 ‘__iter__’
                                                              
                                                                                          
*note Iterator: 2540. (5)          *note Iterable: 253f.      ‘__next__’                  ‘__iter__’
                                                                                          
                                                                                          
*note Reversible: e79. (6)         *note Iterable: 253f.      ‘__reversed__’
                                                              
                                                                                          
*note Generator: fcf. (7)          *note Iterator: 2540.      ‘send’, ‘throw’             ‘close’, ‘__iter__’, ‘__next__’
                                                                                          
                                                                                          
*note Sized: 70f. (8)                                         ‘__len__’
                                                              
                                                                                          
*note Callable: 9e1. (9)                                      ‘__call__’
                                                              
                                                                                          
*note Collection: e78. (10)        *note Sized: 70f,          ‘__contains__’,
                                   *note Iterable: 253f,      ‘__iter__’, ‘__len__’
                                   *note Container: 2541.     
                                   
                                                                                          
*note Sequence: 13c0.              *note Reversible: e79,     ‘__getitem__’, ‘__len__’    ‘__contains__’, ‘__iter__’, ‘__reversed__’, ‘index’,
                                   *note Collection: e78.                                 and ‘count’
                                                                                          
                                                                                          
*note MutableSequence: 4b9.        *note Sequence: 13c0.      ‘__getitem__’,              Herdados métodos de *note Sequence: 13c0. e ‘append’,
                                                              ‘__setitem__’,              ‘clear’, ‘reverse’, ‘extend’, ‘pop’, ‘remove’ e
                                                              ‘__delitem__’, ‘__len__’,   ‘__iadd__’
                                                              ‘insert’                    
                                                              
                                                                                          
*note ByteString: 340.             *note Sequence: 13c0.      ‘__getitem__’, ‘__len__’    Métodos herdados de *note Sequence: 13c0.
                                                                                          
                                                                                          
*note Set: 2537.                   *note Collection: e78.     ‘__contains__’,             ‘__le__’, ‘__lt__’, ‘__eq__’, ‘__ne__’, ‘__gt__’,
                                                              ‘__iter__’, ‘__len__’       ‘__ge__’, ‘__and__’, ‘__or__’, ‘__sub__’, ‘__rsub__’,
                                                                                          ‘__xor__’, ‘__rxor__’ e ‘isdisjoint’
                                                                                          
                                                                                          
*note MutableSet: 2542.            *note Set: 2537.           ‘__contains__’,             Herdado *note Set: 2537. métodos e ‘clear’, ‘pop’,
                                                              ‘__iter__’, ‘__len__’,      ‘remove’, ‘__ior__’, ‘__iand__’, ‘__ixor__’, e
                                                              ‘add’, ‘discard’            ‘__isub__’
                                                                                          
                                                                                          
*note Mapping: abd.                *note Collection: e78.     ‘__getitem__’,              ‘__contains__’, ‘keys’, ‘items’, ‘values’, ‘get’,
                                                              ‘__iter__’, ‘__len__’       ‘__eq__’, e ‘__ne__’
                                                                                          
                                                                                          
*note MutableMapping: 12a8.        *note Mapping: abd.        ‘__getitem__’,              Herdado *note Mapping: abd. métodos e ‘pop’,
                                                              ‘__setitem__’,              ‘popitem’, ‘clear’, ‘update’, e ‘setdefault’
                                                              ‘__delitem__’,              
                                                              ‘__iter__’, ‘__len__’
                                                              
                                                                                          
*note MappingView: 2543.           *note Sized: 70f.                                      ‘__init__’, ‘__len__’ e ‘__repr__’
                                                                                          
                                                                                          
*note ItemsView: 2545.             *note MappingView: 2543,                               ‘__contains__’, ‘__iter__’
                                   *note Set: 2537.                                       
                                   
                                                                                          
*note KeysView: 2544.              *note MappingView: 2543,                               ‘__contains__’, ‘__iter__’
                                   *note Set: 2537.                                       
                                   
                                                                                          
*note ValuesView: 2546.            *note MappingView: 2543,                               ‘__contains__’, ‘__iter__’
                                   *note Collection: e78.                                 
                                   
                                                                                          
*note Awaitable: fd0. (11)                                    ‘__await__’
                                                              
                                                                                          
*note Coroutine: fd1. (12)         *note Awaitable: fd0.      ‘send’, ‘throw’             ‘close’
                                                                                          
                                                                                          
*note AsyncIterable: fd3. (13)                                ‘__aiter__’
                                                              
                                                                                          
*note AsyncIterator: fd2. (14)     *note AsyncIterable: fd3.  ‘__anext__’                 ‘__aiter__’
                                                                                          
                                                                                          
*note AsyncGenerator: e7b. (15)    *note AsyncIterator: fd2.  ‘asend’, ‘athrow’           ‘aclose’, ‘__aiter__’, ‘__anext__’
                                                                                          
                                                                                          
*note Buffer: 341. (16)                                       ‘__buffer__’
                                                              

   ---------- Footnotes ----------

   (1) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (2) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (3) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  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: 253f. ou que possuem um método *note
__iter__(): 1f5f, mas que não detecta classes que iteram com o método
*note __getitem__(): 581.  A única maneira confiável de determinar se um
objeto é *note iterável: 1423. é chamar ‘iter(obj)’.

   (5) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (6) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (7) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (8) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (9) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (10) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (11) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (12) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (13) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (14) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (15) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (16) Essas ABCs substituem *note __subclasshook__(): 2836. 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: 87a.  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__(): 15ab.

 -- Classe: collections.abc.Hashable

     ABC para classes que fornecem o método *note __hash__(): ce6.

 -- Classe: collections.abc.Sized

     ABC para classes que fornecem o método *note __len__(): 2245.

 -- Classe: collections.abc.Callable

     ABC para classes que fornecem o método *note __call__(): 76f.

     Veja *note Anotações de objetos chamáveis: 2560. 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__(): 1f5f.

     A verificação ‘isinstance(obj, Iterable)’ detecta classes que são
     registradas como *note Iterable: 253f. ou que possuem um método
     *note __iter__(): 1f5f, mas que não detecta classes que iteram com
     o método *note __getitem__(): 581.  A única maneira confiável de
     determinar se um objeto é *note iterável: 1423. é 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__(): 1f62. e
     métodos *note __next__(): 14c9.  Veja também a definição de *note
     iterator: 4c2.

 -- Classe: collections.abc.Reversible

     ABC para classes iteráveis que também fornecem o método *note
     __reversed__(): e7a.

     Adicionado na versão 3.6.

 -- Classe: collections.abc.Generator

     ABC para classes *note geradores: 1257. que implementam o protocolo
     definido em PEP 342(1) que estende os *note iteradores: 4c2. com os
     métodos *note send(): 22ae, *note throw(): 711. e *note close():
     19a4.

     Consulte *note Anotando geradores e corrotinas: 2838. 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: 70b. somente de leitura e mutáveis.

     Nota de implementação: Alguns métodos mixin, como *note __iter__():
     1f5f, *note __reversed__(): e7a. e *note index(): 18c7, fazem
     chamadas repetidas ao método subjacente *note __getitem__(): 581.
     Consequentemente, se *note __getitem__(): 581. 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: 2ea. 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(): 18c7. ganhou
          suporte para os argumentos 'stop' e 'start'.

     Deprecated since version 3.12, will be removed in version 3.17: A
     ABC *note ByteString: 340. foi descontinuada.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 25f. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 341. 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: 192. e
     *note bytearray: 342.  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: 165, também nunca foram entendidos como
     subtipos de ‘ByteString’ (seja em tempo de execução ou por
     verificadores de tipo estáticos).

     Consulte PEP(2) para mais detalhes.

 -- Classe: collections.abc.Set
 -- Classe: collections.abc.MutableSet

     ABCs para *note conjuntos: 2464. somente leitura e mutáveis.

 -- Classe: collections.abc.Mapping
 -- Classe: collections.abc.MutableMapping

     ABCs para somente leitura e mutável *note mappings: 13b7.

 -- 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: 282a.

 -- Classe: collections.abc.Awaitable

     ABC para objetos *note aguardáveis: 4c3, que podem ser usados em
     expressões de *note await: 18d.  Implementações personalizadas
     devem fornecer o método *note __await__(): f69.

     Objetos e instâncias de *note corrotina: 6ae. da ABC *note
     Coroutine: fd1. são todas instâncias dessa ABC.

          Nota: In CPython, generator-based coroutines (*note
          generators: 1257. decorated with *note @types.coroutine:
          107e.) are 'awaitables', even though they do not have an *note
          __await__(): f69. method.  Using ‘isinstance(gencoro,
          Awaitable)’ for them will return ‘False’.  Use *note
          inspect.isawaitable(): 100d. to detect them.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.Coroutine

     ABC para classes compatíveis com *note corrotina: 6ae.  Eles
     implementam os seguintes métodos, definidos em *note Objetos
     corrotina: 21ef.: *note send(): 22ad, *note throw(): 710, e *note
     close(): 22af.  Implementações personalizadas também devem
     implementar *note __await__(): f69.  Todas as instâncias *note
     Coroutine: fd1. também são instâncias de *note Awaitable: fd0.

          Nota: In CPython, generator-based coroutines (*note
          generators: 1257. decorated with *note @types.coroutine:
          107e.) are 'awaitables', even though they do not have an *note
          __await__(): f69. method.  Using ‘isinstance(gencoro,
          Coroutine)’ for them will return ‘False’.  Use *note
          inspect.isawaitable(): 100d. to detect them.

     Consulte *note Anotando geradores e corrotinas: 2838. 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: fcf.

     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: f68.

     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: 4c1.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.AsyncGenerator

     ABC para classes de *note gerador assíncrono: 2327. que implementam
     o protocolo definido em PEP 525(3) e PEP 492(4).

     Consulte *note Anotando geradores e corrotinas: 2838. 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__(): 681,
     implementando o *note protocolo buffer: 25f.  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: 2537. , é
necessário fornecer apenas os três métodos abstratos subjacentes: *note
__contains__(): 15ab, *note __iter__(): 1f5f, e *note __len__(): 2245.
O ABC fornece os métodos restantes, como ‘__and__()’ e *note
isdisjoint(): 2527.:

     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: 2537. e *note MutableSet: 2542. 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: 1423.  Supõe-se que a
     classe construtor tenha uma assinatura no formato
     ‘ClassName(iterable)’.  Essa suposição é fatorada em um *note
     classmethod: 488. interno chamado ‘_from_iterable()’ que chama
     ‘cls(iterable)’ para produzir um novo conjunto.  Se o mixin *note
     Set: 2537. 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__(): 1506. e *note
     __ge__(): 1508, então as outras operações seguirão o exemplo
     automaticamente.

  3. O mixin *note Set: 2537. fornece um método ‘_hash()’ para calcular
     um valor de hash para o conjunto; no entanto, *note __hash__():
     ce6. não é definido porque nem todos os conjuntos são *note
     hasheáveis: 819. ou imutáveis.  Para adicionar hasheabilidade em
     conjuntos usando mixin, herde de ambos *note Set(): 2537. e *note
     Hashable(): 70e, e então defina ‘__hash__ = Set._hash’.

Ver também
..........

   * OrderedSet receita(1) para um exemplo baseado em *note MutableSet:
     2542.

   * 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.

Min-heaps are binary trees for which every parent node has a value less
than or equal to any of its children.  We refer to this condition as the
heap invariant.

For min-heaps, this implementation uses lists for which ‘heap[k] <=
heap[2*k+1]’ and ‘heap[k] <= heap[2*k+2]’ for all 'k' for which the
compared elements exist.  Elements are counted from zero.  The
interesting property of a min-heap is that its smallest element is
always the root, ‘heap[0]’.

Max-heaps satisfy the reverse invariant: every parent node has a value
'greater' than any of its children.  These are implemented as lists for
which ‘maxheap[2*k+1] <= maxheap[k]’ and ‘maxheap[2*k+2] <= maxheap[k]’
for all 'k' for which the compared elements exist.  The root,
‘maxheap[0]’, contains the 'largest' element; ‘heap.sort(reverse=True)’
maintains the max-heap invariant.

The ‘heapq’ API differs from textbook heap algorithms in two aspects:
(a) We use zero-based indexing.  This makes the relationship between the
index for a node and the indexes for its children slightly less obvious,
but is more suitable since Python uses zero-based indexing.  (b)
Textbooks often focus on max-heaps, due to their suitability for
in-place sorting.  Our implementation favors min-heaps as they better
correspond to Python *note lists: 24c.

These two aspects make it possible to view the heap as a regular Python
list without surprises: ‘heap[0]’ is the smallest item, and
‘heap.sort()’ maintains the heap invariant!

Like *note list.sort(): dbc, this implementation uses only the ‘<’
operator for comparisons, for both min-heaps and max-heaps.

In the API below, and in this documentation, the unqualified term 'heap'
generally refers to a min-heap.  The API for max-heaps is named using a
‘_max’ suffix.

To create a heap, use a list initialized as ‘[]’, or transform an
existing list into a min-heap or max-heap using the *note heapify():
283e. or *note heapify_max(): 220. functions, respectively.

The following functions are provided for min-heaps:

 -- Função: heapq.heappush (heap, item)

     Push the value 'item' onto the 'heap', maintaining the min-heap
     invariant.

 -- Função: heapq.heappop (heap)

     Pop and return the smallest item from the 'heap', maintaining the
     min-heap invariant.  If the heap is empty, *note IndexError: 1723.
     is raised.  To access the smallest item without popping it, 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(): 16aa. seguida por uma chamada separada para *note
     heappop(): 16ab.

 -- Função: heapq.heapify (x)

     Transform list 'x' into a min-heap, in-place, in linear time.

 -- 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: 1723. será levantada.

     Esta operação de uma etapa é mais eficiente que *note heappop():
     16ab. seguida por *note heappush(): 16aa. 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(): 283f.  Sua
     combinação de retirar/colocar retorna o menor dos dois valores,
     deixando o valor maior no heap.

For max-heaps, the following functions are provided:

 -- Função: heapq.heapify_max (x)

     Transform list 'x' into a max-heap, in-place, in linear time.

     Adicionado na versão 3.14.

 -- Função: heapq.heappush_max (heap, item)

     Push the value 'item' onto the max-heap 'heap', maintaining the
     max-heap invariant.

     Adicionado na versão 3.14.

 -- Função: heapq.heappop_max (heap)

     Pop and return the largest item from the max-heap 'heap',
     maintaining the max-heap invariant.  If the max-heap is empty,
     *note IndexError: 1723. is raised.  To access the largest item
     without popping it, use ‘maxheap[0]’.

     Adicionado na versão 3.14.

 -- Função: heapq.heappushpop_max (heap, item)

     Push 'item' on the max-heap 'heap', then pop and return the largest
     item from 'heap'.  The combined action runs more efficiently than
     *note heappush_max(): 221. followed by a separate call to *note
     heappop_max(): 222.

     Adicionado na versão 3.14.

 -- Função: heapq.heapreplace_max (heap, item)

     Pop and return the largest item from the max-heap 'heap' and also
     push the new 'item'.  The max-heap size doesn’t change.  If the
     max-heap is empty, *note IndexError: 1723. is raised.

     The value returned may be smaller than the 'item' added.  Refer to
     the analogous function *note heapreplace(): 2840. for detailed
     usage notes.

     Adicionado na versão 3.14.

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: 4c2.
     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: ffb. 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(): dbb.  Além disso, quando ‘n==1’, é mais eficiente usar as
funções embutidas *note min(): 1101. e *note max(): 1102.  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.14/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():
dbb, 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: 12. 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__(): ce5. para determinar se
um valor foi encontrado.  Em vez disso, as funções apenas chamam o
método *note __lt__(): 149c. 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: 12. 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: 12.
     estiver operando nela, o resultado será indefinido.  Por exemplo,
     usar *note insort_left(): 2849. 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: ffb. 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(): 284b, 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(): 284b. para
     localizar um ponto de inserção.  Em seguida, executa o método *note
     insert(): 2271. 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(): 2849, mas inserindo 'x' em 'a'
     após qualquer entrada existente de 'x'.

     Esta função primeiro executa *note bisect_right(): 284c. para
     localizar um ponto de inserção.  Em seguida, executa o método *note
     insert(): 2271. 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.14/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(): 1751. 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: 284a. 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(): 284d. pode ser útil para buscas em tabelas
numéricas.  Este exemplo usa *note bisect(): 284d. 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(): 284d. e *note insort(): 284f. 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
------------------------------------------------------

__________________________________________________________________

Esse módulo define um tipo de objeto que pode representar compactamente
um vetor de valores básicos: caracteres, inteiros, números de ponto
flutuante.  Vetores são tipos de sequência e funcionam bem parecidamente
com listas, porém o tipo dos objetos armazenados é restringido.  O tipo
é especificado na criação do objeto usando um 'código de tipo', que é um
único caractere.  São definidos os seguintes códigos de tipo:

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.

     Deprecated since version 3.3, will be removed in version 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: 2857.

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: 192. ou *note bytearray: 342, uma string
     Unicode ou iterável sobre elementos do tipo apropriado.

     Se for fornecido um objeto *note bytes: 192. ou *note bytearray:
     342, o inicializador é passado para o método *note frombytes():
     146d. do novo vetor; se for fornecida uma string Unicode, o
     inicializador é passado para o método *note fromunicode(): 2859.;
     caso contrário, o iterador do inicializador é passado para o método
     *note extend(): 285a. para adicionar itens iniciais ao vetor.

     Objetos vetor tem suporte para as operações de sequência comuns:
     indexação, fatiamento, concatenação e multiplicação.  Quando usando
     a atribuição de fatias, o valor associado deve ser um objeto vetor
     com o mesmo código de tipo; caso contrário, *note TypeError: 198. é
     levantada.  Objetos vetor também implementam a interface buffer, e
     também podem ser usados em qualquer lugar onde *note objetos bytes
     ou similares: 193. é permitido.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 25f.

      -- 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: 243.  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: 198.  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: 193,
          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(): 14bc.).

          Adicionado na versão 3.2: ‘fromstring()’ foi renomeado para
          *note frombytes(): 146d. para maior clareza.

      -- Método: fromfile (f, n)

          Lê 'n' itens (como valores de máquinas) do *note objeto
          arquivo: 13bf. 'f' e adiciona-os ao fim do vetor.  Se estão
          disponíveis menos de 'n' itens, *note EOFError: 14d5. é
          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: 2ea. é 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: 2ea. 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(): 14bd.)

          Adicionado na versão 3.2: ‘tostring()’ foi nomeado para *note
          tobytes(): 146c. para maior clareza.

      -- Método: tofile (f)

          Escreve todos os itens (como valores de máquinas) para o *note
          objeto arquivo: 13bf. '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: 2ea. é 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(): 49d, desde que a classe *note array: 4b8.
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: db.

     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: 11a. 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: 1bbc. 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: 187b. e
*note WeakValueDictionary: 187c. fornecidas pelo módulo *note weakref:
11a. 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: 187c, 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: 187b. e *note WeakValueDictionary: 187c. 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: 7ea. implementa a interface *note set: 184, mas mantém
referências fracas aos seus elementos, assim como *note
WeakKeyDictionary: 187b. faz.

*note finalize: c63. 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: c63. é 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: 11a. 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: 13bf, *note
geradores: 1257, 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: 24c. e *note dict: 183. 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: 608. e *note int: 19b. 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: 286a.

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__: 2215. 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: 87a. seja retornado.  Se
     'callback' for fornecido e não for *note None: 87a, 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__(): 11f3. de um objeto.

     Referências fracas são *note hasheáveis: 819. se o 'object' for
     hasheável.  Elas manterão seu valor de hash mesmo depois que
     'object' for excluído.  Se *note hash(): 7f6. for chamada pela
     primeira vez somente após o 'object' ter sido excluído, a chamada
     vai levantar *note TypeError: 198.

     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__:
     11e7.

 -- 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: 819. 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(): 11e6.

     Acessar um atributo do objeto intermediário depois que o referente
     é coletado como lixo levanta *note ReferenceError: 16fb.

     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: 187b. 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: 187c. têm um método adicional que
apresenta os mesmos problemas que o método *note
WeakKeyDictionary.keyrefs(): 286d.

 -- 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: 11e6. 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: 11e5. 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(): 11e6.

     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: 87a.

     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__(): 11f3. 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: d. 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: 473. quando
     os globais do módulo podem ter sido substituídos por *note None:
     87a.

      -- 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: 87a.

      -- 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: 87a.

      -- Método: peek ()

          Se 'self' estiver vivo, retorna a tupla ‘(obj, func, args,
          kwargs)’.  Se 'self' estiver morto, retorna *note None: 87a.

      -- 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: 2873. é 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) - Referências fracas

     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.14/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__: 11e7.  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: 87a.:

     >>> 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: 11e6. podem ser criadas por
meio de subclasse.  Isso é usado na implementação do *note
WeakValueDictionary: 187c. 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: 11e6. 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: c63. é 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(): 2870.  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: 2873. como *note False:
d1f, 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__():
11f3. 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__(): 11f3. 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: 87a. durante *note
desligamento do interpretador: 473.  Então, esse código deve funcionar
sem problemas no CPython.

Entretanto, o tratamento dos métodos *note __del__(): 11f3. é
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(): a74, ‘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: 19b. ou *note str: 169. 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.14/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: 2255.

     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: f38. e retorna uma tupla onde cada objeto que possui
     um método *note __mro_entries__(): cd6. é substituído por um
     resultado desempacotado da chamada desse método.  Se um item
     'bases' é uma instância de *note type: f38, 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__(): cd6. ter sido
     chamado em qualquer base (seguindo os mecanismos apresentados na
     PEP 560(3)).  Isso é útil para introspecção de *note Generics: 6eb.

     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__: 169a. é 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(): 2ac.
ou *note issubclass(): 9ba.

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: 87a.

     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: 1499.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1257, criados pelas
     funções de gerador.

 -- Dado: types.CoroutineType

     O tipo de objetos de *note corrotina: 6ae, criado por funções de
     *note async def: 7e2.

     Adicionado na versão 3.5.

 -- Dado: types.AsyncGeneratorType

     O tipo de objetos de iterador *note gerador assíncrono: 2327,
     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: 4e0. retornados por *note
     compile(): 4ab.

     Levanta um ‘code.__new__’ de *note evento de auditoria: 1b5d. 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: 17f7. 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(): 835. ou *note
     sys.exit(): 276, 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__(): 8b4. ou *note object.__lt__(): 149c.

     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: 1a2.

     Adicionado na versão 3.10.

 -- Dado: types.MethodDescriptorType

     O tipo de método de alguns tipos de dados embutidos, como *note
     str.join(): 249f.

     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: 191a.  O construtor aceita o nome do
     módulo a ser criado e, opcionalmente, seu *note docstring: 2414.

     Ver também
     ..........

     *note Documentação em objetos de módulo: 21f7.

          Fornece detalhes sobre os atributos especiais que podem ser
          encontrados em instâncias de ‘ModuleType’.

     *note importlib.util.module_from_spec(): 1008.

          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: 21c4.

     Adicionado na versão 3.10.

 -- Classe: types.GenericAlias (t_origin, t_args)

     O tipo dos *note genéricos parametrizados: 8b6. 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: 608.
     (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: 8b6.

          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: 9bb.

     Adicionado na versão 3.10.

     Alterado na versão 3.14: Isso é agora um apelido para *note
     typing.Union: 2a7.

 -- 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: cdf. 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: 8e4. como encontrado em *note
     tb.tb_frame: 2237. 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: 49f. ou
     ‘array.array.typecode’.  Este tipo é usado como descritor para
     atributos de objeto; tem o mesmo propósito que o tipo *note
     property: 4ad, 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:
     4ad, mas para classes definidas em módulos de extensão.

     Além disso, quando uma classe é definida com um atributo *note
     __slots__: 16d9, 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__: e4b. 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: 5dd. 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: 5dd.

      -- 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: 288e.

     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: c72. simples que fornece acesso de
     atributo ao seu espaço de nomes, bem como um repr significativo.

     Ao contrário de *note object: c72, com ‘SimpleNamespace’ você pode
     adicionar e remover atributos.

     Objetos *note SimpleNamespace: 4df. podem ser inicializados da
     mesma forma que *note dict: 183.: 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: 1423. 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(): 4da.

     Objetos ‘SimpleNamespace’ são suportados por *note copy.replace():
     1c0.

     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: 837. 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: 1257. em uma
     *note função de corrotina: f67. que retorna uma corrotina baseada
     em gerador.  A corrotina baseada em gerador ainda é um *note
     iterador gerador: dcd, mas também é considerada um objeto *note
     corrotina: 6ae. e é *note aguardável: 4c3.  No entanto, pode não
     necessariamente implementar o método *note __await__(): f69.

     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 que são mutáveis
ou contêm itens mutáveis, às vezes é necessária uma cópia para que seja
possível alterar uma cópia 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 campos
     por 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 então (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, como dados
     que devem ser compartilhados entre as cópias.

A função *note deepcopy(): d59. 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 que estes itens são tratados pelo módulo *note
pickle: ab.

Cópias rasas de dicionários podem ser feitas usando *note dict.copy():
dbd, 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: ab. para informações sobre esses métodos.  Na
verdade, o módulo *note copy: 29. usa as funções pickle registradas do
módulo *note copyreg: 2a.

Para que uma classe defina sua própria implementação de cópia, ela pode
definir métodos especiais *note __copy__(): 1756. e *note
__deepcopy__(): 1757.

 -- Método: object.__copy__ (self)

     Chamado para implementar a operação de cópia rasa; nenhum argumento
     adicional é passado.

 -- 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(): d59. 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(): 74c. e *note
deepcopy(): d59, e tem suporte a apenas tuplas nomeadas criadas por
*note namedtuple(): 4da, *note dataclasses: 33. e outras classes que
definem o método *note __replace__(): 476.

 -- Método: object.__replace__ (self, /, **changes)

     Este método deve criar um novo objeto do mesmo tipo, substituindo
     campos por valores de 'changes'.

     Adicionado na versão 3.13.

Ver também
..........

Módulo *note pickle: ab.

     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.14/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: b3. 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.

Os dicionários são classificados por chave antes que a exibição seja
calculada.

Alterado na versão 3.9: Adicionado suporte para impressão bonita de
*note types.SimpleNamespace: 4df.

Alterado na versão 3.10: Adicionado suporte para impressão bonita de
*note dataclasses.dataclass: 4db.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 116b. 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: 289a. | 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:
          cc0. será usado.

        * ‘indent’ (*note int: 19b.) – A quantidade de indentação
          adicionado para cada nível de aninhamento.

        * ‘width’ (*note int: 19b.) – 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: 19b.‘ | ’‘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: 3c0.) – Controla a forma como *note
          sequências: 70b. 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: 3c0.) – 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: 3c0.) – 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(): c0e. com 'sort_dicts' definido como ‘True’
     por padrão, o que classificaria automaticamente as chaves dos
     dicionários, você pode querer usar *note pp(): c0e. 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: 1175. 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(): 49d.
     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(): 289d. abaixo e pode levantar uma exceção *note
     RecursionError: f5c. 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: 183, *note list: 24c. e *note tuple: 608.
     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: 1175.

     Os argumentos têm o mesmo significado que para *note pp(): c0e.
     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: 1175. 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: 1175.

 -- 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: 1175. 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(): 49d.
     Observe que isso retorna ‘False’ para objetos recursivos.  Se o
     parâmetro 'depth' de *note PrettyPrinter: 1175. 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(): 289d.

 -- 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(): 1614. 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(): 1bc1. 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(): c0e. 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(): c0e. 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(): 1c1.; 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: 28a9.
     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: 28aa. para obter mais
     informações sobre atributos *note Repr: 28a9.

     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: 28a9. que é usada para fornecer
     a função *note repr(): 28ac. descrita abaixo.  Alterar os atributos
     deste objeto afetará os limites de tamanho usados por *note repr():
     28ac. e pelo depurador Python.

 -- Função: reprlib.repr (obj)

     Este é o método *note repr(): 28ad. 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__(): 824.
e substituir uma string de espaço reservado.

 -- Função: @reprlib.recursive_repr (fillvalue='...')

     Decorador para métodos *note __repr__(): 824. 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.14/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: 28a9. 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: 28b1, ‘5’ para *note
     maxarray: 28b7. 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: 28a9.  Ele é aplicado de maneira
     semelhante a *note maxstring: 28b9.  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(): 1c1.  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: 28bb. 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: 28bb. 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(): 1c1. embutido que usa a formatação
     imposta pela instância.

 -- Método: Repr.repr1 (obj, level)

     Implementação recursiva usada por *note repr(): 28ad.  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(): 28bc. 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(): 28bc.
     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(): 28bc. permite que
subclasses de *note Repr: 28a9. 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 informação
tutorial e discussão de tópicos mais avançados, consulte

   * *note Tutorial básico: 28c2.

   * *note Tutorial avançado: 28c3.

   * *note Livro de receitas de enum: 28c4.

__________________________________________________________________

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: 14d3. 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: 14d3. para criar Enums,
Enums não são classes Python normais.  Veja *note Como Enums são
diferentes?: 28c5. 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.14/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: 4f1.

          O ‘type’ para Enum e suas subclasses.

     *note Enum: 837.

          Classe base para criação de constantes enumeradas.

     *note IntEnum: ecf.

          Classe base para criar constantes enumeradas que também são
          subclasses de *note int: 19b.  (*note Notas: 28c7.)

     *note StrEnum: 822.

          Classe base para criar constantes enumeradas que também são
          subclasses de *note str: 169.  (*note Notas: 28c7.)

     *note Flag: 82a.

          Classe base para criar constantes enumeradas que podem ser
          combinadas usando operações bit a bit sem perder sua
          associação *note Flag: 82a.

     *note IntFlag: e8e.

          Classe base para criar constantes enumeradas que podem ser
          combinadas usando operadores bit a bit sem perder sua
          associação *note IntFlag: e8e.  Membros de *note IntFlag: e8e.
          também são subclasses de *note int: 19b.  (*note Notas: 28c7.)

     *note ReprEnum: 823.

          Usado por *note IntEnum: ecf, *note StrEnum: 822. e *note
          IntFlag: e8e. para manter o *note str(): 169. do tipo misto.

     *note EnumCheck: 82d.

          Uma enumeração com os valores ‘CONTINUOUS’, ‘NAMED_FLAGS’ e
          ‘UNIQUE’, para uso com *note verify(): 82c. para garantir que
          várias restrições sejam atendidas por uma determinada
          enumeração.

     *note FlagBoundary: 82b.

          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: 4f0.

          Uma subclasse de *note dict: 183. para uso ao criar subclasse
          de *note EnumType: 4f1.

     *note auto: e8f.

          As instâncias são substituídas por um valor apropriado para
          membros Enum.  *note StrEnum: 822. 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(): 830.

          Permite que membros *note Enum: 837. tenham atributos sem
          conflitar com nomes de membros.  Os atributos ‘value’ e ‘name’
          são implementados dessa forma.

     *note unique(): 28c8.

          Decorador de classe Enum que garante que apenas um nome seja
          vinculado a cada valor.

     *note verify(): 82c.

          Decorador de classe Enum que verifica restrições selecionáveis
          pelo usuário em uma enumeração.

     *note member(): 82e.

          Torna ‘obj’ um membro.  Pode ser usado como um decorador.

     *note nonmember(): 82f.

          Não torna ‘obj’ um membro.  Pode ser usado como um decorador.

     *note global_enum(): 832.

          Modifica *note str(): 169. e *note repr(): 1c1. 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(): 28c9.

          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: 2267. para enumerações 'enum'.  É
     possível criar subclasse de 'EnumType' – veja *note Criando
     subclasses de EnumType: 28cb. 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.


                    value: 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.


                    value: O nome do novo Enum para criar.


                    names: Os nomes/valores dos membros para o novo
                    Enum.


                    module: O nome do módulo no qual o novo Enum é
                    criado.


                    qualname: O local real no módulo onde este Enum pode
                    ser encontrado.


                    type: Um tipo de mix-in para o novo Enum.


                    start: O primeiro valor inteiro para o Enum (usado
                    por *note auto: e8f.).


                    boundary: Como lidar com valores fora do intervalo
                    de operações de bits (somente *note Flag: 82a.).

      -- 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: 5dd.:

               >>> 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__(): 28d6.

               Nota: Valores de membros de Enum

               Os valores dos membros podem ser qualquer coisa: *note
               int: 19b, *note str: 169, etc.  Se o valor exato não for
               importante, você pode usar instâncias de *note auto: e8f.
               e um valor apropriado será escolhido para você.  Consulte
               *note auto: e8f. para obter detalhes.

               Embora valores mutáveis/não hasheáveis, como *note dict:
               183, *note list: 24c. ou um mutável *note dataclass: 4db,
               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__(): 28d6.

      -- 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: 28db. 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: e8f.:

               >>> 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__(): 829. 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: e8f. with *note Enum: 837. results in
          integers of increasing value, starting with ‘1’.

     Alterado na versão 3.12: Added *note Suporte a dataclass: 1a2c.

      -- 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: 44f. 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: 2ea. 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: 837, 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: e8f. with *note IntEnum: ecf. results
          in integers of increasing value, starting with ‘1’.

     Alterado na versão 3.11: *note __str__(): 825. is now
     ‘int.__str__()’ to better support the 'replacement of existing
     constants' use-case.  *note __format__(): 826. was already
     ‘int.__format__()’ for that same reason.

 -- Classe: enum.StrEnum

     'StrEnum' is the same as *note Enum: 837, 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: 169. instead of a *note str: 169. 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: e8f. with *note StrEnum: 822. results
          in the lower-cased member name as the value.

          Nota: *note __str__(): 825. is ‘str.__str__()’ to better
          support the 'replacement of existing constants' use-case.
          *note __format__(): 826. is likewise ‘str.__format__()’ for
          that same reason.

     Adicionado na versão 3.11.

 -- Classe: enum.Flag

     ‘Flag’ is the same as *note Enum: 837, 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():
          14cb. and *note oct(): 14ca.

          Nota: Using *note auto: e8f. with *note Flag: 82a. 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: 82a, 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: 82a. 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: 82b. setting

     The *note repr(): 1c1. of unnamed zero-valued flags has changed.
     It is now:

          >>> Color(0)
          <Color: 0>

          Nota: Using *note auto: e8f. with *note IntFlag: e8e. results
          in integers that are powers of two, starting with ‘1’.

     Alterado na versão 3.11: *note __str__(): 825. is now
     ‘int.__str__()’ to better support the 'replacement of existing
     constants' use-case.  *note __format__(): 826. 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: 82a. behavior.

 -- Classe: enum.ReprEnum

     ‘ReprEnum’ uses the *note repr(): 1a2d. of *note Enum: 837, but the
     *note str(): 169. of the mixed-in data type:

        * ‘int.__str__()’ for *note IntEnum: ecf. and *note IntFlag:
          e8e.

        * ‘str.__str__()’ for *note StrEnum: 822.

     Inherit from ‘ReprEnum’ to keep the *note str(): 169. / *note
     format(): 199. of the mixed-in data type instead of using the *note
     Enum: 837.-default *note str(): 829.

     Adicionado na versão 3.11.

 -- Classe: enum.EnumCheck

     'EnumCheck' contains the options used by the *note verify(): 82c.
     decorator to ensure various constraints; failed constraints result
     in a *note ValueError: 2ea.

      -- 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(): e8f.:

               >>> 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: 82a. and its subclasses.

      -- Atributo: STRICT

          Out-of-range values cause a *note ValueError: 2ea. to be
          raised.  This is the default for *note Flag: 82a.:

               >>> 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: 82a. 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: 82a. membership and
          revert to *note int: 19b.

               >>> 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: 82a.
          membership is kept.  This is the default for *note IntFlag:
          e8e.:

               >>> 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: 183. that is used as the
     namespace for defining enum classes (see *note Preparando o espaço
     de nomes da classe: e4c.).  It is exposed to allow subclasses of
     *note EnumType: 4f1. 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: 12a8. interface (*note
     __setitem__(): 14c7. and *note update(): 1654.) is overridden.  It
     may be possible to bypass the checks using other ‘dict’ operations
     like *note |=: 2295.

      -- 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__: 28d2. is a read-only ordered mapping of
‘member_name’:‘member’ items.  It is only available on the class.

*note __new__(): 28d6, 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_: 28d7. – name of the member

   - *note _value_: 28d8. – value of the member; can be set in ‘__new__’

   - *note _missing_(): 28df. – a lookup function used when a value is
     not found; may be overridden

   - *note _ignore_: 28da. – a list of names, either as a *note list:
     24c. or a *note str: 169, that will not be transformed into
     members, and will be removed from the final class

   - *note _order_: 28d9. – no longer used, kept for backward
     compatibility (class attribute, removed during class creation)

   - *note _generate_next_value_(): 28dc. – used to get an appropriate
     value for an enum member; may be overridden

          Nota: For standard *note Enum: 837. classes the next value
          chosen is the highest value seen incremented by one.

          For *note Flag: 82a. classes the next value chosen will be the
          next highest power-of-two.

   - *note _add_alias_(): 28e0. – adds a new name as an alias to an
     existing member.

   - *note _add_value_alias_(): 28e1. – 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: 837. 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: 837.’s *note
     _generate_next_value_(): 28dc. to get an appropriate value.  For
     *note Enum: 837. and *note IntEnum: ecf. that appropriate value
     will be the last value plus one; for *note Flag: 82a. and *note
     IntFlag: e8e. it will be the first power-of-two greater than the
     highest value; for *note StrEnum: 822. 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:

        * ‘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: 14d3. decorator specifically for enumerations.  It
     searches an enumeration’s *note __members__: 28d2, gathering any
     aliases it finds; if any are found *note ValueError: 2ea. 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: 14d3. decorator specifically for enumerations.
     Members from *note EnumCheck: 82d. 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(): 169. and *note repr(): 1c1.
     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:
     834. 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: ecf, *note StrEnum: 822, and *note IntFlag: e8e.

     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(): 169, 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: 819.

     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(): 28f6.

     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: ad4. com
          um grafo inicial opcional.

        * Adiciona nós adicionais ao grafo.

        * Chama o método *note prepare(): 21e. no grafo.

        * Enquanto *note is_active(): 28f7. é ‘True’, itera pelos nós
          retornados por *note get_ready(): 28f8. e os processa.  Chama
          *note done(): 28f9. 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(): 28fa. 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: 819.

          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: 2ea. se chamado após *note
          prepare(): 21e.

      -- Método: prepare ()

          Marca o grafo como concluído e verifica os ciclos no grafo.
          Se qualquer ciclo for detectado, *note CycleError: 28fb. será
          gerado, mas *note get_ready(): 28f8. 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(): 28f6.

          Uma *note ValueError: 2ea. será levantada se a classificação
          tiver sido iniciada por *note static_order(): 28fa. ou *note
          get_ready(): 28f8.

          Alterado na versão 3.14: ‘prepare()’ agora pode ser chamado
          mais de uma vez, desde que a classificação não tenha sido
          iniciada.  Anteriormente, isso levantava *note ValueError:
          2ea.

      -- 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():
          28f8. ou o número de nós marcados *note
          TopologicalSorter.done(): 28f9. é menor que o número retornado
          por *note TopologicalSorter.get_ready(): 28f8.

          O método *note __bool__(): 14d1. 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: 2ea. se chamado sem chamar *note
          prepare(): 21e. anteriormente.

      -- Método: done (*nodes)

          Marca um conjunto de nós retornados por *note
          TopologicalSorter.get_ready(): 28f8. como processado,
          desbloqueando qualquer sucessor de cada nó em 'nodes' para ser
          retornado no futuro por uma chamada para *note
          TopologicalSorter.get_ready(): 28f8.

          Levanta *note ValueError: 2ea. 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(): 28f6, se chamado sem chamar
          ‘prepare()’ ou se o nó ainda não foi retornado por *note
          get_ready(): 28f8.

      -- 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(): 28f9, 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: 2ea. se chamado sem chamar *note
          prepare(): 21e. 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(): 21e.
          e *note done(): 28f9. 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(): 28f8.) e a ordem entre eles é determinada pela
          ordem de inserção.

          Se qualquer ciclo for detectado, *note CycleError: 28fb. será
          levantada.

     Adicionado na versão 3.9.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 69. define as seguintes classes de exceção:

 -- Exceção: graphlib.CycleError

     Subclasse de *note ValueError: 2ea. levantada por *note
     TopologicalSorter.prepare(): 21e. 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: 782. 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: a2.
define uma hierarquia abstrata de tipos numéricos.  Os módulos *note
math: 92. e *note cmath: 19. contêm várias funções matemáticas para
números de ponto flutuante e números complexos.  O módulo *note decimal:
3a. 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: 13b2. 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.14/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: 197.  Elas
     são: conversões para *note complex: 197. e *note bool: 3c0, *note
     real: 2905, *note imag: 2906, ‘+’, ‘-’, ‘*’, ‘/’, ‘**’, *note
     abs(): 1f42, *note conjugate(): 2907, ‘==’ 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: 2492, ‘Real’ adiciona as operações que
     funcionam em números reais.

     Em suma, são: uma conversão para *note float: 196, *note
     math.trunc(): 15b1, *note round(): 14d6, *note math.floor(): 15af,
     *note math.ceil(): 15b0, *note divmod(): b8f, ‘//’, ‘%’, ‘<’, ‘<=’,
     ‘>’ e ‘>=’.

     Real também fornece padrão para *note complex(): 197, *note real:
     2905, *note imag: 2906. e *note conjugate(): 2907.

 -- Classe: numbers.Rational

     Estende *note Real: 2488. e adiciona as propriedades *note
     numerator: 2908. e *note denominator: 2909.  Ele fornece um padrão
     para *note float(): 196.

     Os valores *note numerator: 2908. e *note denominator: 2909. devem
     ser instâncias de *note Integral: 229e. e devem estar nos termos
     mais baixos com *note denominator: 2909. 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: 14ba. e adiciona uma conversão para *note
     int: 19b.  Fornece padrões para *note float(): 196, *note
     numerator: 2908. e *note denominator: 2909.  Adiciona métodos
     abstratos para *note pow(): 1a4. 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: 212. implementa *note hash(): 7f6. 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: 2492. e *note Real: 2488.
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: 229e, isso
significa que *note __add__(): 2274. e *note __radd__(): 2275. 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: 2492.  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: 2492. (‘a : A
<: Complex’) e ‘b : B <: Complex’.  Vou considerar ‘a + b’:

  1. Se ‘A’ define um *note __add__(): 2274, que aceita ‘b’, está tudo
     bem.

  2. Se ‘A’ voltar ao código padrão e tivesse que retornar um valor de
     *note __add__(): 2274, perderíamos a possibilidade de que ‘B’
     definisse um *note __radd__(): 2275. mais inteligente, então o
     código padrão deve retornar *note NotImplemented: 1a2. de
     ‘__add__()’.  (Ou ‘A’ pode não implementar ‘__add__()’.)

  3. Então, *note __radd__(): 2275. 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: 2492.

Se ‘A <: Complex’ e ‘B <: Real’ sem compartilhar nenhum outro
conhecimento, então a operação compartilhada apropriada é aquela
envolvendo a *note complex: 197. embutida, e *note __radd__(): 2275. 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: 212. 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: 19. 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): 8d4.                                   Número de maneiras de escolher 'k' itens a partir de 'n' itens sem repetição e sem ordem
                                                         
                                                         
*note factorial(n): b37.                                 Fatorial de 'n'
                                                         
                                                         
*note gcd(*integers): b02.                               Máximo divisor comum dos argumentos inteiros
                                                         
                                                         
*note isqrt(n): bee.                                     Raiz quadrada inteira de um inteiro não negativo 'n'
                                                         
                                                         
*note lcm(*integers): b03.                               Mínimo múltiplo comum dos argumentos inteiros
                                                         
                                                         
*note perm(n, k): 8d5.                                   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): 15b0.                                     Teto de 'x', o menor número inteiro maior ou igual a 'x'
                                                         
                                                         
*note fabs(x): 2910.                                     Valor absoluto de 'x'
                                                         
                                                         
*note floor(x): 15af.                                    Piso de 'x', o maior inteiro menor ou igual a 'x'
                                                         
                                                         
*note fma(x, y, z): 50e.                                 Operação de multiplicação e adição combinadas: ‘(x * y) + z’
                                                         
                                                         
*note fmod(x, y): 2355.                                  Resto da divisão ‘x / y’
                                                         
                                                         
*note modf(x): 2911.                                     Partes fracionárias e inteiras de 'x'
                                                         
                                                         
*note remainder(x, y): d3e.                              Resto de 'x' em relação a 'y'
                                                         
                                                         
*note trunc(x): 15b1.                                    Parte inteira de 'x'
                                                         
                                                         
'Funções de manipulação de ponto flutuante'

*note copysign(x, y): 15c4.                              Magnitude (valor absoluto) de 'x' com o sinal de 'y'
                                                         
                                                         
*note frexp(x): 2912.                                    Mantissa e expoente de 'x'
                                                         
                                                         
*note isclose(a, b, rel_tol, abs_tol): fa4.              Verifica se os valores 'a' e 'b' estão próximos um do outro
                                                         
                                                         
*note isfinite(x): 13e7.                                 Verifica se 'x' não é infinito e nem um NaN
                                                         
                                                         
*note isinf(x): 15c2.                                    Verifica se 'x' é um infinito positivo ou negativo
                                                         
                                                         
*note isnan(x): 15c3.                                    Verifica se 'x' é um NaN (não um número)
                                                         
                                                         
*note ldexp(x, i): 17a8.                                 ‘x * (2**i)’, inverso da função *note frexp(): 2912.
                                                         
                                                         
*note nextafter(x, y, steps): 6b5.                       Valor de ponto flutuante de 'steps' passos depois de 'x' em direção a 'y'
                                                         
                                                         
*note ulp(x): b04.                                       Valor do bit menos significativo de 'x'
                                                         
                                                         
'Funções de potências, exponenciais e logarítmicas'

*note cbrt(x): 866.                                      Raiz cúbica de 'x'
                                                         
                                                         
*note exp(x): 150f.                                      'e' elevado à potência 'x'
                                                         
                                                         
*note exp2(x): 865.                                      '2' elevado a potência de 'x'
                                                         
                                                         
*note expm1(x): 13e8.                                    'e' elevado a potência de 'x', menos 1
                                                         
                                                         
*note log(x, base): 16ae.                                Logaritmo de 'x' para a base fornecida ('e' por padrão)
                                                         
                                                         
*note log1p(x): 15c9.                                    Logaritmo natural de '1+x' (base 'e')
                                                         
                                                         
*note log2(x): 12d7.                                     Logaritmo de base 2 de 'x'
                                                         
                                                         
*note log10(x): 189b.                                    Logaritmo de base 10 de 'x'
                                                         
                                                         
*note pow(x, y): 867.                                    'x' elevado à potência 'y'
                                                         
                                                         
*note sqrt(x): bef.                                      Raiz quadrada de 'x'
                                                         
                                                         
'Funções de soma e produto'

*note dist(p, q): beb.                                   Distância euclidiana entre dois pontos 'p' e 'q' dada como um iterável de coordenadas
                                                         
                                                         
*note fsum(iterable): 15c5.                              Soma dos valores na entrada 'iterable'
                                                         
                                                         
*note hypot(*coordinates): bec.                          Norma euclidiana de um iterável de coordenadas
                                                         
                                                         
*note prod(iterable, start): bed.                        Produto de elementos da entrada 'iterable' com um valor 'start'
                                                         
                                                         
*note sumprod(p, q): 6b4.                                Soma dos produtos de dois iteráveis 'p' e 'q'
                                                         
                                                         
'Conversão angular'

*note degrees(x): 2913.                                  Converte o ângulo 'x' de radianos para graus
                                                         
                                                         
*note radians(x): 2914.                                  Converte o ângulo 'x' de graus para radianos
                                                         
                                                         
'Funções trigonométricas'

*note acos(x): 2915.                                     Arco cosseno de 'x'
                                                         
                                                         
*note asin(x): 2916.                                     Arco seno de 'x'/
                                                         
                                                         
*note atan(x): 2917.                                     Arco tangente de 'x'
                                                         
                                                         
*note atan2(y, x): 2918.                                 ‘atan(y / x)’
                                                         
                                                         
*note cos(x): 16ad.                                      Cosseno de 'x'
                                                         
                                                         
*note sin(x): 16ac.                                      Seno de 'x'
                                                         
                                                         
*note tan(x): 2919.                                      Tangente de 'x'
                                                         
                                                         
'Funções hiperbólicas'

*note acosh(x): 15c6.                                    Cosseno hiperbólico inverso de 'x'
                                                         
                                                         
*note asinh(x): 15c7.                                    Seno hiperbólico inverso de 'x'
                                                         
                                                         
*note atanh(x): 15c8.                                    Tangente hiperbólico inverso de 'x'
                                                         
                                                         
*note cosh(x): 291a.                                     Cosseno hiperbólico de 'x'
                                                         
                                                         
*note sinh(x): 291b.                                     Seno hiperbólico de 'x'
                                                         
                                                         
*note tanh(x): 291c.                                     Tangente hiperbólico de 'x'
                                                         
                                                         
'Funções especiais'

*note erf(x): dc7.                                       Função erro(1) em 'x'
                                                         
                                                         
*note erfc(x): dc8.                                      Função erro complementar(2) em 'x'
                                                         
                                                         
*note gamma(x): 13e9.                                    Função gama(3) em 'x'
                                                         
                                                         
*note lgamma(x): 13ea.                                   Logaritmo natural do valor absoluto da função gama(4) em 'x'
                                                         
                                                         
'Constantes'

*note pi: 291d.                                          'π' = 3.141592…
                                                         
                                                         
*note e: 291e.                                           'e' = 2.718281…
                                                         
                                                         
*note tau: 291f.                                         'τ' = 2'π' = 6.283185…
                                                         
                                                         
*note inf: e74.                                          Infinito positivo
                                                         
                                                         
*note nan: 868.                                          “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: 198. se algum dos argumentos não for
     inteiro.  Levanta *note ValueError: 2ea. 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: 198. se algum dos argumentos não for
     inteiro.  Levanta *note ValueError: 2ea. 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__: 229d, que deve
     retornar um valor do tipo *note Integral: 229e.

 -- 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__: 229c,
     que deve retornar um valor do tipo *note Integral: 229e.

 -- 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(): 2355. é 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(): 2911. 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: 2ea. 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(): 15af. para 'x' positivos, e equivalentes a *note ceil():
     15b0. para 'x' negativos.  Se 'x' não é um ponto flutuante, então
     delega para *note x.__trunc__: 19c, cujo qual deve retornar um
     valor do tipo *note Integral: 229e.

Para as funções *note ceil(): 15b0, *note floor(): 15af. e *note modf():
2911, 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(): 2912. 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(): 2912.

 -- 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: 1c86.).

        * 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(): 6b5. e *note
     sys.float_info.epsilon: 1c86.

     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(): 13e8. 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(): 248c. 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: 2ea.

     Ao contrário do operador embutido ‘**’, *note math.pow(): 867.
     converte ambos os seus argumentos para o tipo *note float: 196.
     Use ‘**’ ou a função embutida *note pow(): 1a4. 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: 2ea, 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: 2ea. se as entradas não tiverem o mesmo
     comprimento.

     Aproximadamente equivalente a:

          sum(map(operator.mul, 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(): 2918. é 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(): dc7. 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():
     15c3. 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: 92. 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: 2ea. 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: a77. 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: 19.

     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__(): 7f2. ou *note
__float__(): bb7.: 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(): 292d. tem um corte de
     ramificação ao longo do eixo real negativo.  Um argumento de
     ‘-2-0j’ é tratado como se estivesse 'abaixo' do corte de
     ramificação, e assim dá um resultado no eixo imaginário negativo:

          >>> cmath.sqrt(-2-0j)
          -1.4142135623730951j

     Mas um argumento de ‘-2+0j’ é tratado como se estivesse acima do
     corte de ramificação:

          >>> cmath.sqrt(-2+0j)
          1.4142135623730951j

'Conversões de e para coordenadas polares'

*note phase(z): 292e.                                    Retorna a fase de 'z'
                                                         
                                                         
*note polar(z): 292f.                                    Retorna a representação de 'z' em coordenadas polares
                                                         
                                                         
*note rect(r, phi): 2930.                                Retorna o número complexo 'z' com coordenadas polares 'r' e 'phi'
                                                         
                                                         
'Funções de potência e logarítmicas'

*note exp(z): 2931.                                      Retorna 'e' elevado à potência 'z'
                                                         
                                                         
*note log(z[, base]): 2932.                              Retorna o logaritmo de 'z' para a 'base' fornecida ('e' por padrão)
                                                         
                                                         
*note log10(z): 2933.                                    Retorna o logaritmo de base 10 de 'z'
                                                         
                                                         
*note sqrt(z): 292d.                                     Retorna a raiz quadrada de 'z'
                                                         
                                                         
'Funções trigonométricas'

*note acos(z): 2934.                                     Retorna o arco cosseno de 'z'
                                                         
                                                         
*note asin(z): 2935.                                     Retorna o arco seno de 'z'
                                                         
                                                         
*note atan(z): 2936.                                     Retorna o arco tangente de 'z'
                                                         
                                                         
*note cos(z): 2937.                                      Retorna o cosseno de 'z'
                                                         
                                                         
*note sin(z): 2938.                                      Retorna o seno de 'z'
                                                         
                                                         
*note tan(z): 2939.                                      Retorna a tangente de 'z'
                                                         
                                                         
'Funções hiperbólicas'

*note acosh(z): 293a.                                    Retorna o cosseno hiperbólico inverso de 'z'
                                                         
                                                         
*note asinh(z): 293b.                                    Retorna o seno hiperbólico inverso de 'z'
                                                         
                                                         
*note atanh(z): 293c.                                    Retorna a tangente hiperbólica inversa de 'z'
                                                         
                                                         
*note cosh(z): 293d.                                     Retorna o cosseno hiperbólico de 'z'
                                                         
                                                         
*note sinh(z): 293e.                                     Retorna o seno hiperbólico de 'z'
                                                         
                                                         
*note tanh(z): 293f.                                     Retorna a tangente hiperbólica de 'z'
                                                         
                                                         
'Funções de classificação'

*note isfinite(z): 2940.                                 Verifica se todos os componentes de 'z' são finitos
                                                         
                                                         
*note isinf(z): 2941.                                    Verifica se algum componente de 'z' é infinito
                                                         
                                                         
*note isnan(z): 2942.                                    Verifica se algum componente de 'z' é NaN
                                                         
                                                         
*note isclose(a, b, *, rel_tol, abs_tol): fa5.           Verifica se os valores 'a' e 'b' estão próximos um do outro
                                                         
                                                         
'Constantes'

*note pi: 2943.                                          'π' = 3.141592…
                                                         
                                                         
*note e: 2944.                                           'e' = 2.718281…
                                                         
                                                         
*note tau: e71.                                          'τ' = 2'π' = 6.283185…
                                                         
                                                         
*note inf: e72.                                          Infinito positivo
                                                         
                                                         
*note infj: e75.                                         Infinito imaginário puro
                                                         
                                                         
*note nan: e73.                                          “Not a number” (NaN)
                                                         
                                                         
*note nanj: e76.                                         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(-1+0j)
          3.141592653589793
          >>> phase(-1-0j)
          -3.141592653589793

     Nota: O módulo (valor absoluto) de um número complexo 'z' pode ser
     calculado usando a função embutida *note abs(): 1f42.  Não há
     função do módulo *note cmath: 19. 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(): 2932.

 -- Função: cmath.sqrt (z)

     Retorna a raiz quadrada de 'z'.  Este tem o mesmo corte de
     ramificação que *note log(): 2932.


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(): 2934.

 -- 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')’.

     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: 92.  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: 19. 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: 3a. fornece suporte a aritmética rápida de ponto
flutuante decimal corretamente arredondado.  Oferece várias vantagens
sobre o tipo de dados *note float: 196.:

   * Decimal “é baseado em um modelo de ponto flutuante que foi
     projetado com as pessoas em mente e necessariamente tem um
     princípio orientador primordial – os computadores devem fornecer
     uma aritmética que funcione da mesma maneira que a aritmética que
     as pessoas aprendem na escola”.  – trecho da especificação
     aritmética decimal.

   * 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: 294e, *note ROUND_DOWN: 294f, *note
ROUND_FLOOR: 2950, *note ROUND_HALF_DOWN: 2951, *note ROUND_HALF_EVEN:
2952, *note ROUND_HALF_UP: 2953, *note ROUND_UP: 2954. e *note
ROUND_05UP: 2955.

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: 2956, *note
InvalidOperation: 12a4, *note DivisionByZero: 2957, *note Inexact: 2958,
*note Rounded: 2959, *note Subnormal: 295a, *note Overflow: 295b, *note
Underflow: 295c. e *note FloatOperation: 1299.

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(2).

* 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.14/Lib/decimal.py

   (2) 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(): 1889. 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: 1299. 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: 12a4.:

     >>> 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')

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(): 12ac. 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(): 1889. 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 Context().  Para ativar uma
alternativa, use a função *note setcontext(): 295f.

De acordo com o padrão, o módulo *note decimal: 3a. fornece dois
contextos padrão prontos para uso, *note BasicContext: 12a0. e *note
ExtendedContext: 12a1.  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(): 2960.

     >>> 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: 12aa. 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: 1fd. 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: 1fd. com base em 'value'.

     'value' pode ser um inteiro, string, tupla, *note float: 196. ou
     outro objeto de *note Decimal: 1fd.  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: 608, ele deverá ter três
     componentes, um sinal (‘0’ para positivo ou ‘1’ para negativo), um
     *note tuple: 608. 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: 196, 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: 12a4, 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: 1fd. são imutáveis.

     Alterado na versão 3.2: O argumento para o construtor agora pode
     ser uma instância de *note float: 196.

     Alterado na versão 3.3: Os argumentos de *note float: 196. levantam
     uma exceção se a armadilha *note FloatOperation: 1299. 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: 196. e *note int: 19b.  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: 196. ou *note int: 19b.).

     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: 212. em
     operações aritméticas: uma tentativa de adicionar um *note Decimal:
     1fd. a um *note float: 196, por exemplo, vai levantar um *note
     TypeError: 198.  No entanto, é possível usar os operadores de
     comparação do Python para comparar uma instância de *note Decimal:
     1fd. ‘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: 1fd. 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: 1fd. 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: 853. 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: 1fd. é 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(): 2966. 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(): 2966,
          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(): 2966, mas o resultado fornece uma ordem total nas
          instâncias de *note Decimal: 1fd.  Duas instâncias de *note
          Decimal: 1fd. 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(): 2968, 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: 2952.

               >>> 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: 196. ou *note int: 19b.

          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: 1fd. também pode ser construída
               diretamente a partir de um *note float: 196.

               >>> 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: classmethod from_number (number, /)

          Construtor alternativo que aceita apenas instâncias de *note
          float: 196, *note int: 19b. ou *note Decimal: 1fd, mas não
          strings ou tuplas.

               >>> Decimal.from_number(314)
               Decimal('314')
               >>> Decimal.from_number(0.1)
               Decimal('0.1000000000000000055511151231257827021181583404541015625')
               >>> Decimal.from_number(Decimal('3.14'))
               Decimal('3.14')

          Adicionado na versão 3.14.

      -- 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: dfb. se o argumento for canônico e *note
          False: d1f. caso contrário.  Atualmente, uma instância de
          *note Decimal: 1fd. é sempre canônica, portanto, esta operação
          sempre retorna *note True: dfb.

      -- Método: is_finite ()

          Retorna *note True: dfb. se o argumento for um número finito e
          *note False: d1f. se o argumento for um infinito ou um NaN.

      -- Método: is_infinite ()

          Retorna *note True: dfb. se o argumento for infinito positivo
          ou negativo e *note False: d1f. caso contrário.

      -- Método: is_nan ()

          Retorna *note True: dfb. se o argumento for NaN (silencioso ou
          sinalizador) e *note False: d1f. caso contrário.

      -- Método: is_normal (context=None)

          Retorna *note True: dfb. se o argumento for um número finito
          'normal'.  Retorna *note False: d1f. se o argumento for zero,
          subnormal, infinito ou NaN.

      -- Método: is_qnan ()

          Retorna *note True: dfb. se o argumento for um NaN silencioso,
          e *note False: d1f. caso contrário.

      -- Método: is_signed ()

          Retorna *note True: dfb. se o argumento tiver um sinal
          negativo e *note False: d1f. caso contrário.  Observe que
          zeros e NaNs podem carregar sinais.

      -- Método: is_snan ()

          Retorna *note True: dfb. se o argumento for um sinal NaN e
          *note False: d1f. caso contrário.

      -- Método: is_subnormal (context=None)

          Retorna *note True: dfb. se o argumento for subnormal e *note
          False: d1f. caso contrário.

      -- Método: is_zero ()

          Retorna *note True: dfb. se o argumento for um zero (positivo
          ou negativo) e *note False: d1f. 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: 2952.

      -- 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: 2952.

      -- 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: 1fd.  Se
          o operando é zero, ‘Decimal('-Infinity')’ é retornado e o
          sinalizador *note DivisionByZero: 2957. é levantado.  Se o
          operando for um infinito, ‘Decimal('Infinity')’ será
          retornado.

      -- Método: logical_and (other, context=None)

          *note logical_and(): 297b. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 297c.).
          O resultado é o ‘and’ dígito a dígito dos dois operandos.

      -- Método: logical_invert (context=None)

          *note logical_invert(): 297d. é 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(): 297e. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 297c.).
          O resultado é o ‘or’ dígito a dígito dos dois operandos.

      -- Método: logical_xor (other, context=None)

          *note logical_xor(): 297f. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 297c.).
          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(): 2980, 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(): 2982, 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: 12a4. é 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: 12a2. ou menor que *note Etiny(): 2989.

      -- Método: radix ()

          Retorna ‘Decimal(10)’, a raiz (base) na qual a classe *note
          Decimal: 1fd. 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(): 2993.  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: 2958. ou *note Rounded: 2959, 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: 2958. 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(): 14d6.:

      -- Describe: round(number)

      -- Describe: round(number, ndigits)

          Se 'ndigits' não for fornecido ou ‘None’, retorna o *note int:
          19b. de 'number' mais próximo, arredondando até chegar em par,
          e ignorando o modo de arredondamento do contexto *note
          Decimal: 1fd.  Levanta *note OverflowError: a77. se 'number'
          for um infinito ou *note ValueError: 2ea. se for um NaN
          (silencioso ou de sinalização).

          Se 'ndigits' for um *note int: 19b, o modo de arredondamento
          do contexto é respeitado e um *note Decimal: 1fd.
          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: 12a4. 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(): 297b, *note logical_invert(): 297d,
*note logical_or(): 297e. e *note logical_xor(): 297f. esperam que seus
argumentos sejam 'operandos lógicos'.  Um 'operando lógico' é uma
instância de *note Decimal: 1fd. 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(): 1889. e *note setcontext(): 295f.:

 -- 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: 186. e a função *note
localcontext(): 1578. 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: 198. se 'kwargs' fornecer um atributo que
     *note Context: 12ab. não oferecer suporte.  Levanta *note
     TypeError: 198. ou *note ValueError: 2ea. se 'kwargs' fornecer um
     valor inválido para um atributo.

     Alterado na versão 3.11: *note localcontext(): 1578. agora tem
     suporte à configuração de atributos de contexto através do uso de
     argumentos nomeados.

 -- Função: decimal.IEEEContext (bits)

     Retorna um objeto de contexto inicializado com os valores
     apropriados para um dos formatos de intercâmbio IEEE. O argumento
     deve ser um múltiplo de 32 e menor que *note IEEE_CONTEXT_MAX_BITS:
     2997.

     Adicionado na versão 3.14.

Novos contextos também podem ser criados usando o construtor *note
Context: 12ab. 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: 2953.  Todos
     os sinalizadores estão limpos.  Todos as armadilhas estão ativadas
     (tratadas como exceções), exceto por *note Inexact: 2958, *note
     Rounded: 2959. e *note Subnormal: 295a.

     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: 2952.
     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: 12ab. 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: 12ab.

     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: 2998.=‘28’, *note
     Context.rounding: 2999.=*note ROUND_HALF_EVEN: 2952. e armadilhas
     ativadas para *note Overflow: 295b, *note InvalidOperation: 12a4. e
     *note DivisionByZero: 2957.

Além dos três contextos fornecidos, novos contextos podem ser criados
com o construtor *note Context: 12ab.

 -- 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: 87a, os valores padrão serão copiados de *note
     DefaultContext: 129f.  Se o campo 'flags' não for especificado ou
     for *note None: 87a, todos os sinalizadores serão limpados.

      -- Atributo: prec

          Um inteiro no intervalo [‘1’, *note MAX_PREC: 129c.] 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: 299a.

      -- 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: 129e, ‘0’], 'Emax' no intervalo [‘0’, *note
          MAX_EMAX: 129d.].

      -- 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: 1fd.
          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: 1fd. é no
          máximo *note Emax: 12a2.  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: 12ab. 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: 1fd. descritos acima (com exceção dos
     métodos *note adjusted(): 2963. e *note as_tuple(): 2964.) existe
     um método correspondente em *note Context: 12ab.  Por exemplo, para
     uma instância ‘C’ de *note Context: 12ab. e uma instância ‘x’ de
     *note Decimal: 1fd, ‘C.exp(x)’ é equivalente a ‘x.exp(context=C)’.
     Cada método de *note Context: 12ab. aceita um número inteiro do
     Python (uma instância de *note int: 19b.) 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: 1fd, 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():
          1400, 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:
          2989.

      -- Método: Etop ()

          Retorna um valor igual a ‘Emax - prec + 1’.

     A abordagem usual para trabalhar com decimais é criar instâncias de
     *note Decimal: 1fd. 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: 1fd. 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():
          29cb. em termos das funções corretamente arredondadas *note
          exp(): 29ad. e *note ln(): 29b8.  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: decimal.MAX_PREC            ‘425000000’               ‘999999999999999999’
                                                                
                                                                
 -- Dado: decimal.MAX_EMAX            ‘425000000’               ‘999999999999999999’
                                                                
                                                                
 -- Dado: decimal.MIN_EMIN            ‘-425000000’              ‘-999999999999999999’
                                                                
                                                                
 -- Dado: decimal.MIN_ETINY           ‘-849999999’              ‘-1999999999999999997’
                                                                
                                                                
 -- Dado:                             ‘256’                     ‘512’
          decimal.IEEE_CONTEXT_MAX_BITS                         

 -- 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: 2010, 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: 2957. for configurada, uma exceção
*note DivisionByZero: 2957. 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: 12a3. e *note Emax: 12a2.  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: 2576.

 -- 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: 12a2. 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: 2958. e *note Rounded: 2959. 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: 12a3. 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: 2958. e *note Subnormal: 295a. 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: 1fd, *note
     create_decimal(): 12a5. 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: 1299. nos sinalizadores de
     contexto.  Conversões explícitas com *note from_float(): 1400. ou
     *note create_decimal_from_float(): 299f. 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: 1299.

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: 3a. 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: 3a. 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: 2957. não é capturado.  Da
mesma forma, quando o sinal *note Overflow: 295b. 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: 12a4. 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: d1f. (mesmo ao fazer ‘Decimal('NaN')==Decimal('NaN')’),
enquanto um teste de desigualdade sempre retorna *note True: dfb.  Uma
tentativa de comparar dois decimais usando qualquer um dos operadores
‘<’, ‘<=’, ‘>’ ou ‘>=’ levantará o sinal *note InvalidOperation: 12a4.
se um dos operandos for um ‘NaN’ e retorna *note False: d1f. 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(): 2966. e
*note compare_signal(): 2967.

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(): 1889. acessa um objeto *note Context: 12ab.
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(): 295f. atribui
automaticamente seu alvo à thread atual.

Se *note setcontext(): 295f. não tiver sido chamado antes de *note
getcontext(): 1889, então *note getcontext(): 1889. criará
automaticamente um novo contexto para uso na thread atual.  Novos
objetos de contexto têm valores padrão definidos a partir do objeto
*note decimal.DefaultContext: 129f.

O sinalizador *note sys.flags.thread_inherit_context: 175. afeta o
contexto de novas threads.  Se o sinalizador for falso, as novas threads
começarão com um contexto vazio.  Nesse caso, *note getcontext(): 1889.
criará um novo objeto de contexto quando chamado e usará os valores
padrão de 'DefaultContext'.  Se o sinalizador for verdadeiro, as novas
threads começarão com uma cópia do contexto do chamador de *note
threading.Thread.start(): 178.

Para controlar os padrões para que cada thread, use os mesmos valores em
toda 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(): 1889.  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: 1fd.:

     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(): 12ac. arredonda para um número fixo de
casas decimais.  Se a armadilha *note Inexact: 2958. 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():
12ac.:

     >>> 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(): 12ac.:

     >>> 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(): 2987. 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:
1fd.?

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 prática
recomendada é 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(): 12a5.:

     >>> 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: 12a3. e *note Emax: 12a2. devem sempre ser
configurados com os valores máximos, *note clamp: 139a. deve sempre ser
0 (o padrão).  A configuração de *note prec: 2998. requer alguns
cuidados.

A abordagem mais fácil para testar a aritmética do bignum é usar o valor
máximo para *note prec: 2998. 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: 129c. é 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: 2998. à 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: 2958. 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: 61. 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 (number)

 -- Classe: fractions.Fraction (string)

     The first version requires that 'numerator' and 'denominator' are
     instances of *note numbers.Rational: 14ba. and returns a new *note
     Fraction: 212. instance with a value equal to
     ‘numerator/denominator’.  If 'denominator' is zero, it raises a
     *note ZeroDivisionError: b35.

     A segunda versão requer que 'number' seja uma instância de *note
     numbers.Rational: 14ba. ou tenha o método ‘as_integer_ratio()’
     (isso inclui *note float: 196. e *note decimal.Decimal: 1fd.).  Ela
     retorna uma instância de *note Fraction: 212. com exatamente o
     mesmo valor.  É presumido que o método ‘as_integer_ratio()’ retorne
     um par de inteiros primos entre si e que o último seja positivo.
     Observe que, devido aos problemas comuns com pontos binários
     (consulte *note Aritmética de ponto flutuante; problemas e
     limitações: 1fae.), o argumento para ‘Fraction(1.1)’ não é
     exatamente igual a 11/10 e, portanto, ‘Fraction(1.1)’ 'não' retorna
     ‘Fraction(11, 10)’ como seria de se esperar.  (Mas consulte a
     documentação do método *note limit_denominator(): 29ec. abaixo.)

     A última versão do construtor espera uma string.  O formato 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: 196. também é aceita pelo construtor *note Fraction: 212.
     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: 212. herda da classe base abstrata *note
     numbers.Rational: 14ba. e implementa todos os métodos e operações
     dessa classe.  As instâncias de *note Fraction: 212. são *note
     hasheável: 819. e devem ser tratadas como imutáveis.  Além disso,
     *note Fraction: 212. tem as seguintes propriedades e métodos:

     Alterado na versão 3.2: O construtor *note Fraction: 212. agora
     aceita instâncias *note float: 196. e *note decimal.Decimal: 1fd.

     Alterado na versão 3.9: A função *note math.gcd(): b02. agora é
     usada para normalizar o 'numerator' e o 'denominator'.  *note
     math.gcd(): b02. sempre retorna um tipo *note int: 19b.
     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: 212. a partir de uma string, seguindo
     as regras PEP 515(2).

     Alterado na versão 3.11: *note Fraction: 212. 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: 212. 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:
     212. sem um tipo de apresentação agora oferece suporte a
     preenchimento, alinhamento, tratamento de sinais, largura mínima e
     agrupamento.

     Alterado na versão 3.14: O construtor *note Fraction: 212. agora
     aceita qualquer objeto com o método ‘as_integer_ratio()’.

      -- 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: 196. ou *note numbers.Integral: 229e.  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: 212. diretamente de um
               *note float: 196.

      -- Método: classmethod from_decimal (dec)

          Construtor alternativo que aceita somente instâncias de *note
          decimal.Decimal: 1fd. ou *note numbers.Integral: 229e.

               Nota: A partir do Python 3.2, você também pode construir
               uma instância *note Fraction: 212. diretamente de uma
               instância de *note decimal.Decimal: 1fd.

      -- Método: classmethod from_number (number)

          Construtor alternativo que aceita apenas instâncias de *note
          numbers.Integral: 229e, *note numbers.Rational: 14ba, *note
          float: 196. ou *note decimal.Decimal: 1fd. e objetos com o
          método ‘as_integer_ratio()’, mas não strings.

          Adicionado na versão 3.14.

      -- Método: limit_denominator (max_denominator=1000000)

          Encontra e retorna o *note Fraction: 212. 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: 19b. ‘<= self’.  Este método também
          pode ser acessado por meio da função *note math.floor():
          15af.:

               >>> from math import floor
               >>> floor(Fraction(355, 113))
               3

      -- Método: __ceil__ ()

          Retorna o menor *note int: 19b. ‘>= self’.  Este método também
          pode ser acessado por meio da função *note math.ceil(): 15b0.

      -- Método: __round__ ()

      -- Método: __round__ (ndigits)

          A primeira versão retorna o *note int: 19b. 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(): 14d6.

      -- Método: __format__ (format_spec, /)

          Fornece suporte para formatação de instâncias de *note
          Fraction: 212. por meio do método *note str.format(): 828, da
          função embutida *note format(): 199. ou *note literais de
          strings formatadas: 19a.

          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: 4f3.  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: 196. na seção *note
          Minilinguagem de especificação de formato: 4f3.

          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: a2.

     As classes base abstratas que compõem a torre numérica.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 944, 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: 1b4b.
Você pode instanciar suas próprias instâncias de *note Random: 1b4b.
para obter geradores que não compartilham estado.

A classe *note Random: 1b4b. 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: bd. também fornece a classe *note SystemRandom:
29f5. que usa a função do sistema *note os.urandom(): 73b. 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: c5.

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: 1b4b. 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: 1b4b. podem encontrar
     contenção e baixo desempenho.  Considere usar instâncias separadas
     de *note Random: 1b4b. 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.14/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(): 73b. para detalhes sobre disponibilidade).

     Se 'a' é um int, ele é usado diretamente.

     Com a versão 2 (o padrão), o objeto a *note str: 169, *note bytes:
     192. ou *note bytearray: 342. é convertido em um objeto *note int:
     19b. 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: 169. e
     *note bytes: 192. 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: 19b, *note float: 196, *note str: 169, *note
     bytes: 192. ou *note bytearray: 342.

 -- Função: random.getstate ()

     Retorna um objeto capturando o estado interno atual do gerador.
     Este objeto pode ser passado para *note setstate(): 29f8. para
     restaurar o estado.

 -- Função: random.setstate (state)

     'state' deveria ter sido obtido de uma chamada anterior para *note
     getstate(): 29f7, e *note setstate(): 29f8. restaura o estado
     interno do gerador para o que era no momento que *note getstate():
     29f7. 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(): 29fa.

     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(): b33.

     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(): a61. é 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:
     198.

 -- 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(): 1203.
     permite que *note randrange(): a61. 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: 1723.

 -- 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: 1723.

     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(): be6.).  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: 198. 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: 196. retornados por *note
     random(): bd. (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: 2ea. é levantada se todos os pesos
     forem zero.

     Para uma dada semente, a função *note choices(): eb5. com igual
     peso normalmente produz uma sequência diferente das chamadas
     repetidas para *note choice(): 142c.  O algoritmo usado por *note
     choice(): 142c. usa aritmética de ponto flutuante para consistência
     e velocidade internas.  O algoritmo usado por *note choice(): 142c.
     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: 2ea. 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: 819. 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(): b33. 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: 2ea. é 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(): 1ae6. 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():
     1ae6.

     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: bd.

     Alterado na versão 3.11: Anteriormente, o 'seed' poderia ser
     qualquer objeto hasheável.  Agora está limitado a: ‘None’, *note
     int: 19b, *note float: 196, *note str: 169, *note bytes: 192. ou
     *note bytearray: 342.

     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(): 146f. das instâncias de
          ‘Random’.

      -- Método: getstate ()

          Substitua este método nas subclasses para personalizar o
          comportamento de *note getstate(): 29f7. das instâncias de
          ‘Random’.

      -- Método: setstate (state)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note setstate(): 29f8. das instâncias de
          ‘Random’.

      -- Método: random ()

          Substitua este método nas subclasses para personalizar o
          comportamento de *note random(): 944. 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(): 1203. das instâncias de
          ‘Random’.

      -- Método: randbytes (n)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note randbytes(): 1794. das instâncias de
          ‘Random’.

 -- Classe: random.SystemRandom ([seed])

     Classe que usa a função *note os.urandom(): 73b. 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(): 146f. não tem efeito e é ignorado.  Os métodos *note
     getstate(): 29f7. e *note setstate(): 29f8. levantam *note
     NotImplementedError: 368. 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(): 2a0b. 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: 85.:

     def random_product(*args, repeat=1):
         "Random selection from itertools.product(*args, **kwds)"
         pools = [tuple(pool) for pool in args] * 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)

O padrão de *note random(): 944. é 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: 29ff. 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(): 944.

   ---------- 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(): 142c.

 -- Option: -i <N>
 -- Option: --integer <N>

     Imprime um inteiro aleatório entre 1 e N inclusive, usando *note
     randint(): 142b.

 -- Option: -f <N>
 -- Option: --float <N>

     Imprime um número de ponto flutuante aleatório entre 0 e N
     inclusive, usando *note uniform(): 2a00.

Se nenhuma opção for fornecida, a saída dependerá da entrada:

   * String ou vários: mesmo que *note -choice: 2a14.

   * Inteiro mesmo que *note -integer: 2a16.

   * Ponto flutuante: mesmo que *note -float: 2a18.


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: 2488.).

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: 19b, *note float: 196, *note Decimal: 1fd. e *note Fraction: 212.
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(): 19f. 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.14/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(): 8d6.          Média aritmética dos dados.
                            
                            
*note fmean(): c1f.         Média aritmética rápida de ponto flutuante, com ponderação
                            opcional.
                            
                            
*note geometric_mean(): c20.Média geométrica dos dados.
                            
                            
*note harmonic_mean(): ed1. Média harmônica dos dados.
                            
                            
*note kde(): 54c.           Estima a distribuição de densidade de probabilidade dos dados.
                            
                            
*note kde_random(): 54d.    Amostragem aleatória do PDF gerado por kde().
                            
                            
*note median(): 2a1f.       Mediana (valor do meio) dos dados.
                            
                            
*note median_low(): 2a20.   Mediana inferior dos dados.
                            
                            
*note median_high(): 2a21.  Mediana superior dos dados.
                            
                            
*note median_grouped(): 2a22.Mediana (50º percentil) dos dados agrupados.
                            
                            
*note mode(): 2a23.         Moda (valor mais comum) de dados discretos ou nominais.
                            
                            
*note multimode(): 2a24.    Lista de modas (valores mais comuns) de dados discretos ou
                            nominais.
                            
                            
*note quantiles(): c21.     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(): 2a26.       Desvio padrão populacional dos dados.
                            
                            
*note pvariance(): 2a27.    Variância populacional dos dados.
                            
                            
*note stdev(): 8d8.         Desvio padrão amostral dos dados.
                            
                            
*note variance(): 8d7.      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(): a27.      Covariância amostral para duas variáveis.
                              
                              
*note correlation(): 6d8.     Coeficientes de correlação de Pearson e Spearman.
                              
                              
*note linear_regression(): a28.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:
     2a2a. 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(): 2a1f.

          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():
     8d6. e sempre retorna um *note float: 196.  'data' pode ser uma
     sequência ou iterável.  Se o conjunto de dados de entrada estiver
     vazio, levanta uma exceção *note StatisticsError: 2a2a.

          >>> 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: 2ea. 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: 2a2a. 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(): 8d6. 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: 2a2a. é 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: 2a2a. será levantada se a sequência de
     dados em 'data' estiver vazia.

     A Wikipédia tem um exemplo(5) onde podemos usar *note kde(): 54c.
     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: 2a2a. será levantada se a sequência de
     dados em 'data' estiver vazia.

     Continuando o exemplo de *note kde(): 54c, podemos usar *note
     kde_random(): 54d. 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: 2a2a.  '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(): 2a20. ou *note
     median_high(): 2a21. 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: 2a2a. é 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: 2a2a. é 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(): 2a1f. 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(): 2a22.:

          >>> 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: 2a2a. é 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: 184, considere fazer a conversão para *note frozenset:
     7e7.  Para manipular o tipo *note list: 24c, considere fazer a
     conversão para *note tuple: 608.  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: 2a2a. 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(): 2a27.

          >>> 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():
     8d7. costuma ser uma escolha melhor.

     Levanta *note StatisticsError: 2a2a. 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(): 8d7. 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(): 2a27.

     Levanta a exceção *note StatisticsError: 2a2a. 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(): 2a27. 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: 2a2a. 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: 2a2a.
     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: 2a2a. 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: 2a2a. 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: 2a2a. 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(): 6d8, 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: 2ea. 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: c22. é 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:
     2a2a.

      -- 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(): c1f. e *note stdev(): 8d8.

          'data' pode ser qualquer *note iterável: 1423. e deve
          consistir de valores que pode ser convertidos para o tipo
          *note float: 196.  Se 'data' não contém pelo menos dois
          elementos, levanta a exceção *note StatisticsError: 2a2a.
          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: 24c. de valores *note float:
          196.

          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(): 146f.
          e *note random.gauss(): 1ae5.

      -- 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: c22. 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:
     c22. 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: c22.  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: c22. 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: c22. 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: c22.:

     >>> 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 — Higher-order functions and operations on callable objects::
* operator — Operadores padrões como funções::


File: python.info,  Node: itertools — Funções que criam iteradores para laços eficientes,  Next: functools — Higher-order functions and operations on callable objects,  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: 4c2, 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(): 19f. e *note count(): 147f.
para formar ‘map(f, count())’.

'Iteradores infinitos:'

Iterador               Argumentos            Resultado                                             Exemplo
                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                   
*note count(): 147f.   [start[, step]]       start, start+step, start+2*step, …                    ‘count(10) → 10 11 12 13 14 ...’
                                                                                                   
                                                                                                   
*note cycle(): 2a43.   p                     p0, p1, … ultimo elemento de p, p0, p1, …             ‘cycle('ABCD') → A B C D A B C D ...’
                                                                                                   
                                                                                                   
*note repeat(): 17c4.  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(): be6.         p [,func]                        p0, p0+p1, p0+p1+p2, …                                ‘accumulate([1,2,3,4,5]) → 1 3 6 10 15’
                                                                                                                        
                                                                                                                        
*note batched(): 50b.            p, n                             (p0, p1, …, p_n-1), …                                 ‘batched('ABCDEFG', n=2) → AB CD EF G’
                                                                                                                        
                                                                                                                        
*note chain(): 2470.             p, q, …                          p0, p1, … último elemento de p, q0, q1, …             ‘chain('ABC', 'DEF') → A B C D E F’
                                                                                                                        
                                                                                                                        
*note chain.from_iterable(): 2a44.iterável                        p0, p1, … último elemento de p, q0, q1, …             ‘chain.from_iterable(['ABC', 'DEF']) → A B C D E F’
                                                                                                                        
                                                                                                                        
*note compress(): 147e.          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(): 2a45.         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(): 245c.       predicate, seq                   elementos de seq onde predicate(elem) falha           ‘filterfalse(lambda x: x<5, [1,4,6,3,8]) → 6 8’
                                                                                                                        
                                                                                                                        
*note groupby(): 2a46.           iterable[, key]                  sub-iteradores agrupados pelo valor de key(v)         ‘groupby(['A','B','DEF'], len) → (1, A B) (3, DEF)’
                                                                                                                        
                                                                                                                        
*note islice(): d37.             seq, [start,] stop [, step]      elementos de seq[start:stop:step]                     ‘islice('ABCDEFG', 2, None) → C D E F G’
                                                                                                                        
                                                                                                                        
*note pairwise(): a0c.           iterável                         (p[0], p[1]), (p[1], p[2])                            ‘pairwise('ABCDEFG') → AB BC CD DE EF FG’
                                                                                                                        
                                                                                                                        
*note starmap(): 12e0.           func, seq                        func(*seq[0]), func(*seq[1]), …                       ‘starmap(pow, [(2,5), (3,2), (10,3)]) → 32 9 1000’
                                                                                                                        
                                                                                                                        
*note takewhile(): 2a47.         predicate, seq                   seq[0], seq[1], até predicate falhar                  ‘takewhile(lambda x: x<5, [1,4,6,3,8]) → 1 4’
                                                                                                                        
                                                                                                                        
*note tee(): 2a48.               it, n                            n iteradores it independentes                         ‘tee('ABC', 2) → A B C, A B C’
                                                                                                                        
                                                                                                                        
*note zip_longest(): 149a.       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(): 150e.                             p, q, … [repeat=1]       produto cartesiano, equivalente a laços ‘for’ aninhados
                                                                            
                                                                            
*note permutations(): 1bbd.                        p[, r]                   tuplas de tamanho r, com todas ordenações possíveis, sem
                                                                            elementos repetidos
                                                                            
                                                                            
*note combinations(): 150d.                        p, r                     tuplas de tamanho r, ordenadas, sem elementos repetidos
                                                                            
                                                                            
*note combinations_with_replacement(): 147d.       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():
     1101.  Para um máximo atual, defina 'function' como *note max():
     1102.  Ou para um produto atual, defina 'function' como *note
     operator.mul(): 2a4b.  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(): 219. 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:
     2ea. 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', 2) → AB CD EF 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(): 2470.  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(): 150e. mantendo
     apenas entradas que são subsequências do 'iterable'.  O comprimento
     da saída é dado por *note math.comb(): 8d4. 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(): 150e. 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(): 19f. para
     gerar pontos de dados consecutivos ou com *note zip(): 1a0. 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(): 2a46. é 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(): 2a46.  Como a origem é
     compartilhada, quando o objeto *note groupby(): 2a46. 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(): 2a46. é 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(): 150e. where entries
     with repeated elements have been filtered out.  The length of the
     output is given by *note math.perm(): 8d5. 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(): 150e. 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(): 19f.
     when argument parameters have already been “pre-zipped” into
     tuples.

     The difference between *note map(): 19f. and *note starmap(): 12e0.
     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(): 2a48. call.  This “flattening
     step” allows nested *note tee(): 2a48. 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: 243. may
     be raised when simultaneously using iterators returned by the same
     *note tee(): 2a48. 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(): 24c. instead of *note
     tee(): 2a48.

 -- 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(): 149a. function should be wrapped with something that
     limits the number of calls (for example *note islice(): d37. or
     *note takewhile(): 2a47.).

   ---------- 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: a3. and *note collections: 1e. 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: 1257.
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 — Higher-order functions and operations on callable objects,  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’ — Higher-order functions and operations on callable objects
------------------------------------------------------------------------------

'Código-fonte:' Lib/functools.py(1)

__________________________________________________________________

O módulo *note functools: 63. é 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: 63. 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).

     Returns the same as ‘lru_cache(maxsize=None)’, creating a thin
     wrapper around a dictionary lookup for the function arguments.
     Because it never needs to evict old values, this is smaller and
     faster than *note lru_cache(): bd8. with a size limit.

     Por exemplo:

          @cache
          def factorial(n):
              return n * factorial(n-1) if n else 1

          >>> factorial(10)      # no previously cached result, makes 11 recursive calls
          3628800
          >>> factorial(5)       # just looks up cached value result
          120
          >>> factorial(12)      # makes two new recursive calls, the other 10 are cached
          479001600

     The cache is threadsafe so that the wrapped function can be used in
     multiple threads.  This means that the underlying data structure
     will remain coherent during concurrent updates.

     It is possible for the wrapped function to be called more than once
     if another thread makes an additional call before the initial call
     has been completed and cached.

     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(): 4ad, 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)

     The mechanics of *note cached_property(): 758. are somewhat
     different from *note property(): 4ad.  A regular property blocks
     attribute writes unless a setter is defined.  In contrast, a
     'cached_property' allows writes.

     The 'cached_property' decorator only runs on lookups and only when
     an attribute of the same name doesn’t exist.  When it does run, the
     'cached_property' writes to the attribute with the same name.
     Subsequent attribute reads and writes take precedence over the
     'cached_property' method and it works like a normal attribute.

     The cached value can be cleared by deleting the attribute.  This
     allows the 'cached_property' method to run again.

     The 'cached_property' does not prevent a possible race condition in
     multi-threaded usage.  The getter function could run more than once
     on the same instance, with the latest run setting the cached value.
     If the cached property is idempotent or otherwise not harmful to
     run more than once on an instance, this is fine.  If
     synchronization is needed, implement the necessary locking inside
     the decorated getter function or around the cached property access.

     Note, this decorator interferes with the operation of PEP 412(3)
     key-sharing dictionaries.  This means that instance dictionaries
     can take more space than usual.

     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():
     758. can also be achieved by stacking *note property(): 4ad. on top
     of *note lru_cache(): bd8.  See *note Como faço para armazenar em
     cache as chamadas de um método?: 2a50. for more details on how this
     differs from *note cached_property(): 758.

     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: ffb.  Usado com ferramentas que aceitam funções chave
     (como *note sorted(): dbb, *note min(): 1101, *note max(): 1102,
     *note heapq.nlargest(): 2841, *note heapq.nsmallest(): 2842, *note
     itertools.groupby(): 2a46.).  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: 246f.

     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.

     The cache is threadsafe so that the wrapped function can be used in
     multiple threads.  This means that the underlying data structure
     will remain coherent during concurrent updates.

     It is possible for the wrapped function to be called more than once
     if another thread makes an additional call before the initial call
     has been completed and cached.

     Since a dictionary is used to cache results, the positional and
     keyword arguments to the function must be *note hashable: 819.

     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: 183. 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: 853.
     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?: 2a50.

     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__(): 149c, *note __le__():
     1506, *note __gt__(): 1507, or *note __ge__(): 1508.  In addition,
     the class should supply an *note __eq__(): ce5. 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.

 -- Dado: functools.Placeholder

     A singleton object used as a sentinel to reserve a place for
     positional arguments when calling *note partial(): 216. and *note
     partialmethod(): 217.

     Adicionado na versão 3.14.

 -- Função: functools.partial (func, /, *args, **keywords)

     Return a new *note partial object: 218. 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(*more_args, **more_keywords):
                  return func(*args, *more_args, **(keywords | more_keywords))
              newfunc.func = func
              newfunc.args = args
              newfunc.keywords = keywords
              return newfunc

     The ‘partial()’ function 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(): 216. can be used to create a callable
     that behaves like the *note int(): 19b. function where the 'base'
     argument defaults to ‘2’:

          >>> basetwo = partial(int, base=2)
          >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
          >>> basetwo('10010')
          18

     If *note Placeholder: 215. sentinels are present in 'args', they
     will be filled first when ‘partial()’ is called.  This makes it
     possible to pre-fill any positional argument with a call to
     ‘partial()’; without ‘Placeholder’, only the chosen number of
     leading positional arguments can be pre-filled.

     If any ‘Placeholder’ sentinels are present, all must be filled at
     call time:

          >>> say_to_world = partial(print, Placeholder, Placeholder, "world!")
          >>> say_to_world('Hello', 'dear')
          Hello dear world!

     Calling ‘say_to_world('Hello')’ raises a *note TypeError: 198,
     because only one positional argument is provided, but there are two
     placeholders that must be filled in.

     If ‘partial()’ is applied to an existing ‘partial()’ object,
     ‘Placeholder’ sentinels of the input object are filled in with new
     positional arguments.  A placeholder can be retained by inserting a
     new ‘Placeholder’ sentinel to the place held by a previous
     ‘Placeholder’:

          >>> from functools import partial, Placeholder as _
          >>> remove = partial(str.replace, _, _, '')
          >>> message = 'Hello, dear dear world!'
          >>> remove(message, ' dear')
          'Hello, world!'
          >>> remove_dear = partial(remove, _, ' dear')
          >>> remove_dear(message)
          'Hello, world!'
          >>> remove_first_dear = partial(remove_dear, _, 1)
          >>> remove_first_dear(message)
          'Hello, dear world!'

     ‘Placeholder’ cannot be passed to ‘partial()’ as a keyword
     argument.

     Alterado na versão 3.14: Added support for *note Placeholder: 215.
     in positional arguments.

 -- Classe: functools.partialmethod (func, /, *args, **keywords)

     Return a new *note partialmethod: 217. descriptor which behaves
     like *note partial: 216. except that it is designed to be used as a
     method definition rather than being directly callable.

     'func' must be a *note descriptor: 17e7. 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(): 488, *note staticmethod(): 450, *note
     abstractmethod(): 1281. or another instance of *note partialmethod:
     217.), calls to ‘__get__’ are delegated to the underlying
     descriptor, and an appropriate *note partial object: 218. 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: 217.
     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(): be6. for an iterator that yields
     all intermediate values.

     Alterado na versão 3.14: 'initial' is now supported as a keyword
     argument.

 -- Função: @functools.singledispatch

     Transform a function into a *note single-dispatch: bdb. *note
     generic function: bda.

     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 typing.Union: 2a7. 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: 2a54. and pre-existing
     functions, the *note register(): 2a53. attribute can also be used
     in a functional form:

          >>> def nothing(arg, verbose=False):
          ...     print("Nothing.")
          ...
          >>> fun.register(type(None), nothing)

     The *note register(): 2a53. attribute returns the undecorated
     function.  This enables decorator stacking, *note pickling: ab, 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: c72.
     type, which means it is used if no better implementation is found.

     If an implementation is registered to an *note abstract base class:
     13b2, 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(): 2a53. attribute now
     supports using type annotations.

     Alterado na versão 3.11: The *note register(): 2a53. attribute now
     supports *note typing.Union: 2a7. as a type annotation.

 -- Classe: functools.singledispatchmethod (func)

     Transform a method into a *note single-dispatch: bdb. *note generic
     function: bda.

     To define a generic method, decorate it with the
     ‘@singledispatchmethod’ decorator.  When defining a function 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: 488.  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: 450, *note @~abc.abstractmethod: 1281, 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__: 21e3, *note __name__:
     14d0, *note __qualname__: 21e2, *note __annotations__: 13d4, *note
     __type_params__: 21e6, and *note __doc__: 13d5, the documentation
     string) and ‘WRAPPER_UPDATES’ (which updates the wrapper function’s
     *note __dict__: 14ce, 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(): bd8.), 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: 92f.
     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(): 1218. 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: 5e4. 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__: 13d4. attribute is
     now copied by default.  Missing attributes no longer trigger an
     *note AttributeError: 5e4.

     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__: 21e6. 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():
     1218. 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.14/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 — Higher-order functions and operations on callable objects

5.10.2.1 Objetos ‘partial’
..........................

*note partial: 216. objects are callable objects created by *note
partial(): 216.  They have three read-only attributes:

 -- Atributo: partial.func

     A callable object or function.  Calls to the *note partial: 216.
     object will be forwarded to *note func: 2a56. 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: 216. object call.

 -- Atributo: partial.keywords

     The keyword arguments that will be supplied when the *note partial:
     216. object is called.

*note partial: 216. objects are like *note function objects: 595. in
that they are callable, weak referenceable, and can have attributes.
There are some important differences.  For instance, the *note __name__:
125c. and *note __doc__: b17. attributes are not created automatically.


File: python.info,  Node: operator — Operadores padrões como funções,  Prev: functools — Higher-order functions and operations on callable objects,  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: a3. 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: 235d. 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: 2367. '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__(): 14d1. e *note __len__():
     2245.)

 -- Função: operator.truth (obj)

     Retorna *note True: dfb. se o 'obj' for verdadeiro, e *note False:
     d1f. caso contrário.  Isso é equivalente a utilizar a construção
     *note bool: 3c0.

 -- 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.

 -- Função: operator.is_none (a)

     Retorna ‘a is None’.  Testa a identidade do objeto.

     Adicionado na versão 3.14.

 -- Função: operator.is_not_none (a)

     Retorna ‘a is not None’.  Testa a identidade do objeto.

     Adicionado na versão 3.14.

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: 19b.  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__(): 1104, 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: a3. 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(): 19f,
*note sorted(): dbb, *note itertools.groupby(): 2a46, 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__(): 581. 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__(): 581. do operando.  Dicionários aceitam qualquer
     valor *note hasheável: 819. .  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(): c4b. 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.14/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: a3.

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)’
                                                          
                                                          
Identidade                  ‘a is None’                   ‘is_none(a)’
                                                          
                                                          
Identidade                  ‘a is not None’               ‘is_not_none(a)’
                                                          
                                                          
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: 2a9d. ‘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: 2abf,
que fornecem operações puramente computacionais sem E/S, e *note
caminhos concretos: 2ac0, 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: 265. é o que
você precisa.  Esta classe instancia um *note caminho concreto: 2ac0.
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: 2ac1.
     quando está no Unix, mas você pode instanciar *note
     PureWindowsPath: 19b4.

  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: a6.

* Menu:

* Uso básico: Uso básico<2>.
* 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.
* Protocolos::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/pathlib/

   (2) https://peps.python.org/pep-0428/


File: python.info,  Node: Uso básico<2>,  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<2>,  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: 368. 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: 2ac5. ou uma *note
     PureWindowsPath: 19b4.):

          >>> 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: e3f, onde o método *note __fspath__(): e40. 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(): 18ed.):

          >>> 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:
     e3f, 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: e3f.

 -- Classe: pathlib.PurePosixPath (*pathsegments)

     Uma subclasse de *note PurePath: 6c2, 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:
     6c2.

 -- Classe: pathlib.PureWindowsPath (*pathsegments)

     Uma subclasse de *note PurePath: 6c2, 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:
     6c2.

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::
* 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,  Up: Caminhos puros

5.11.1.4 Propriedades gerais
............................

Os caminhos são imutáveis e *note hasheáveis: 819.  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,  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(): 18ed.  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: e3f. 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: 192. em um caminho fornece o caminho
do sistema de arquivos bruto como um objeto bytes, codificado por *note
os.fsencode(): e43.:

     >>> bytes(p)
     b'/etc'

     Nota: A chamada de *note bytes: 192. 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,  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: a6. 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: 2ac5. 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: 246e. 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(): 19ac. 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.

     Alterado na versão 3.14: Um único ponto (”‘.’”) é considerado um
     sufixo válido.

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

     Alterado na versão 3.14: Um único ponto (”‘.’”) é considerado um
     sufixo válido.

 -- 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.

     Deprecated since version 3.12, removed in version 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: 19b4, retorna ‘True’ se o caminho é
     considerado reservado no Windows, ‘False’ caso contrário.  Com
     *note PurePosixPath: 2ac5, ‘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.

     Deprecated since version 3.13, will be removed in version 3.15:
     Este método está descontinuado; use *note os.path.isreserved():
     329. 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: 2ad2.

     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(): 52f, mas padrões
     vazios não são permitidos (*note ValueError: 2ea. é 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: 59a.

     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: 2ea. é
     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: 2ea. é 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: 6c2. 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(): 19ac. 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’).

     Deprecated since version 3.12, removed in version 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: 2ace. 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: 2acf. 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: 18aa. 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')

     Alterado na versão 3.14: Um único ponto (”‘.’”) é considerado um
     sufixo válido.  Em versões anteriores, *note ValueError: 2ea. era
     levantada se um único ponto fosse fornecido.

 -- 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: 19d9. e *note
     relative_to(): 2fb.  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: 6c2, esta classe representa
     caminhos concretos do tipo de caminho do sistema (instanciando-o
     cria uma *note PosixPath: 2ad4. ou uma *note WindowsPath: 2ac1.):

          >>> Path('setup.py')
          PosixPath('setup.py')

     'pathsegments' é especificado de forma similar para *note PurePath:
     6c2.

 -- Classe: pathlib.PosixPath (*pathsegments)

     Uma subclasse de *note Path: 265. e *note PurePosixPath: 2ac5, 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:
     6c2.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 52d.
     no Windows.  Em versões anteriores, *note NotImplementedError: 368.
     era levantada em vez disso.

 -- Classe: pathlib.WindowsPath (*pathsegments)

     Uma subclasse de *note Path: 265. e *note PureWindowsPath: 19b4,
     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:
     6c2.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 52d.
     em plataformas não-Windows.  Em versões anteriores, *note
     NotImplementedError: 368. 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:
2bf. 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::
* Copiando, movendo e excluindo: Copiando movendo 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: 2ad6.

 -- 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: 2ea. é 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.

     Alterado na versão 3.14: A autoridade de URL é descartada se
     corresponder ao nome do host local.  Caso contrário, se a
     autoridade não estiver vazia ou for ‘localhost’, no Windows um
     caminho UNC será retornado (como antes) e, em outras plataformas,
     um *note ValueError: 2ea. será levantada.

 -- Método: Path.as_uri ()

     Representa o caminho como um URI ‘file’.  *note ValueError: 2ea. é
     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'

     Deprecated since version 3.14, will be removed in version 3.19:
     Chamar este método de *note PurePath: 6c2. em vez de *note Path:
     265. é possível, mas está descontinuado.  O uso de *note
     os.fsencode(): e43. pelo método 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(): bff.
     com a construção ‘~’).  Se o diretório pessoal não puder ser
     resolvido, *note RuntimeError: 243. é 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(): bff.  Se
     um diretório pessoal não puder ser resolvido, *note RuntimeError:
     243. é 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(): 185f.):

          >>> 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: 2bf. é 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: 2bf. é levantada no modo estrito,
     e nenhuma exceção é levantada no modo não estrito.  Em versões
     anteriores, *note RuntimeError: 243. é 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(): b10.):

          >>> 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: 52d.
     se *note os.readlink(): b10. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 368. 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(): c01, *note is_dir(): 534, *note
is_file(): 533, *note is_mount(): c02, *note is_symlink(): c03, *note
is_block_device(): c04, *note is_char_device(): c05, *note is_fifo():
c06, *note is_socket(): c07. 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.

Alterado na versão 3.14: Os métodos fornecidos acima agora retornam
‘False’ em vez de levantar qualquer exceção *note OSError: 2bf. do
sistema operacional.  Em versões anteriores, alguns tipos de exceção
*note OSError: 2bf. eram levantados e outros suprimidos.  O novo
comportamento é consistente com *note os.path.exists(): bf9, *note
os.path.isdir(): bfb, etc.  Use *note stat(): a1a. para recuperar o
status do arquivo sem suprimir exceções.

 -- Método: Path.stat (*, follow_symlinks=True)

     Retorna um objeto *note os.stat_result: 16af. contendo informações
     sobre este caminho, como *note os.stat(): 26c.  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(): 2ad9.

          >>> 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(): a1a, 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 apontar para um arquivo ou diretório
     existente.  ‘False’ será retornado se o caminho for inválido,
     inacessível ou ausente.  Use *note Path.stat(): a1a. para
     distinguir entre esses casos.

     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 apontar para um arquivo comum.  ‘False’
     será retornado se o caminho for inválido, inacessível ou ausente,
     ou se apontar para algo diferente de um arquivo comum.  Use *note
     Path.stat(): a1a. para distinguir entre esses casos.

     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 apontar para um diretório.  ‘False’
     será retornado se o caminho for inválido, inacessível ou ausente,
     ou se apontar para algo diferente de um diretório.  Use *note
     Path.stat(): a1a. para distinguir entre esses casos.

     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, ainda
     que esteja quebrado.  ‘False’ será retornado se o caminho for
     inválido, inacessível ou ausente, ou se apontar para algo diferente
     de um arquivo comum.  Use *note Path.stat(): a1a. para distinguir
     entre esses casos.

 -- 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 socket Unix.  ‘False’
     será retornado se o caminho for inválido, inacessível ou ausente,
     ou se apontar para algo diferente de um socket Unix.  Use *note
     Path.stat(): a1a. para distinguir entre esses casos.

 -- Método: Path.is_fifo ()

     Retorna ‘True’ se o caminho apontar para um FIFO. ‘False’ será
     retornado se o caminho for inválido, inacessível ou ausente, ou se
     apontar para algo diferente de um FIFO. Use *note Path.stat(): a1a.
     para distinguir entre esses casos.

 -- Método: Path.is_block_device ()

     Retorna ‘True’ se o caminho apontar para um dispositivo de bloco.
     ‘False’ será retornado se o caminho for inválido, inacessível ou
     ausente, ou se apontar para algo diferente de um de bloco.  Use
     *note Path.stat(): a1a. para distinguir entre esses casos.

 -- Método: Path.is_char_device ()

     Retorna ‘True’ se o caminho apontar para um dispositivo de
     caractere.  ‘False’ será retornado se o caminho for inválido,
     inacessível ou ausente, ou se apontar para algo diferente de um
     dispositivo de caractere.  Use *note Path.stat(): a1a. para
     distinguir entre esses casos.

 -- 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(): 1167. e a
     função *note os.path.samestat(): 1166.

     Um *note OSError: 2bf. 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.

 -- Atributo: Path.info

     Um objeto *note PathInfo: 26b. que oferece suporte a consultas de
     informações sobre o tipo de arquivo.  O objeto expõe métodos que
     armazenam seus resultados em cache, o que pode ajudar a reduzir o
     número de chamadas de sistema necessárias ao alternar entre tipos
     de arquivo.  Por exemplo:

          >>> p = Path('src')
          >>> if p.info.is_symlink():
          ...     print('link simbólico')
          ... elif p.info.is_dir():
          ...     print('diretório')
          ... elif p.info.exists():
          ...     print('alguma coisa mais')
          ... else:
          ...     print('não encontrado')
          ...
          diretório

     Se o caminho foi gerado a partir de *note Path.iterdir(): 26d, este
     atributo é inicializado com algumas informações sobre o tipo de
     arquivo obtidas a partir da varredura do diretório pai.  O simples
     acesso a *note Path.info: 26a. não realiza nenhuma consulta ao
     sistema de arquivos.

     Para obter informações atualizadas, é melhor chamar *note
     Path.is_dir(): 534, *note is_file(): 533. e *note is_symlink():
     c03. em vez dos métodos deste atributo.  Não há como redefinir o
     cache; em vez disso, você pode criar um novo objeto de caminho com
     um cache de informações vazio via ‘p = Path(p)’.

     Adicionado na versão 3.14.


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(): 314. 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(): 314.

     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(): 314.

     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: 2bf. 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')]

     Ver também
     ..........

     Documentação de *note Linguagem de padrões: 2ad2.

     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: 1b5d. ‘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: 59a.

     Alterado na versão 3.13: Quaisquer exceções *note OSError: 2bf.
     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(): 531. com “‘**/’” adicionado na frente do
     'pattern'.

     Ver também
     ..........

     Documentação de *note Linguagem de padrões: 2ad2. e *note
     Path.glob(): 531.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 59a.

 -- 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: 265. 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: 1a4f. ou
     atribuição de fatias), e *note Path.walk(): 6c4. 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(): 6c4. sobre
     diretórios que o chamador cria ou renomeia antes de retomar *note
     Path.walk(): 6c4. novamente.  Modificar 'dirnames' quando
     'top_down' é false não tem efeito no comportamento de *note
     Path.walk(): 6c4, 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(): c48. 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: 2bf.  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(): 6c4. 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(): 6c4. não
          rastreia os diretórios que já visitou.

          Nota: *note Path.walk(): 6c4. 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(): 6c4. ainda tentará descer até ele.  Para evitar
          esse comportamento, remova os diretórios de 'dirnames'
          conforme apropriado.

          Nota: Diferentemente de *note os.walk(): 6c5, *note
          Path.walk(): 6c4. 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(): 353.  Percorrer a árvore de baixo para cima é
     essencial, pois *note rmdir(): 2add. 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: Copiando movendo 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: 1216. será levantada.

     Ver também
     ..........

     Os métodos *note open(): 2adb, *note write_text(): 1039. e *note
     write_bytes(): 103b. 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: 1216. é 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: 263.

     Se 'exist_ok' for falso (o padrão), *note FileExistsError: 1216.
     será levantada se o diretório alvo já existir.

     Se 'exist_ok' for verdadeiro, a exceção *note FileExistsError:
     1216. 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(): 12f0.’s.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 52d.
     se *note os.symlink(): 12f0. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 368. 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(): 12eb.’s.

     Adicionado na versão 3.10.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 52d.
     se *note os.link(): 12eb. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 368. era levantada.


File: python.info,  Node: Copiando movendo e excluindo,  Next: Permissões e propriedade,  Prev: Criando arquivos e diretórios,  Up: Caminhos concretos

5.11.1.15 Copiando, movendo e excluindo
.......................................

 -- Método: Path.copy (target, *, follow_symlinks=True,
          preserve_metadata=False)

     Copia este arquivo ou árvore de diretório para o 'target' fornecido
     e retorna uma nova instância ‘Path’ apontando para 'target'.

     Se a origem for um arquivo, o destino será substituído, caso seja
     um arquivo existente.  Se a origem for um link simbólico e
     'follow_symlinks' for verdadeiro (o padrão), o destino do link
     simbólico será copiado.  Caso contrário, o link simbólico será
     recriado no destino.

     Se 'preserve_metadata' for falso (o padrão), apenas estruturas de
     diretório e dados de arquivo terão a garantia de serem copiados.
     Defina 'preserve_metadata' como verdadeiro para garantir que
     permissões de arquivo e diretório, sinalizadores, horários do
     último acesso e modificação e atributos estendidos sejam copiados
     onde suportados.  Este argumento não tem efeito ao copiar arquivos
     no Windows (onde os metadados são sempre preservados).

          Nota: Quando suportado pelo sistema operacional e pelo sistema
          de arquivos, este método realiza uma cópia leve, na qual os
          blocos de dados são copiados somente quando modificados.  Isso
          é conhecido como cópia na gravação ou, em inglês,
          copy-on-write.

     Adicionado na versão 3.14.

 -- Método: Path.copy_into (target_dir, *, follow_symlinks=True,
          preserve_metadata=False)

     Copia este arquivo ou diretório para o 'target_dir' fornecido, que
     deve ser um diretório existente.  Os demais argumentos são tratados
     de forma idêntica a *note Path.copy(): 266.  Retorna uma nova
     instância de ‘Path’ apontando para a cópia.

     Adicionado na versão 3.14.

 -- 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: 1216. 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(): 12ed. 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.move (target)

     Move este arquivo ou árvore de diretório para o 'target' fornecido
     e retorna uma nova instância ‘Path’ apontando para 'target'.

     Se o 'destino' não existir, ele será criado.  Se tanto este caminho
     quanto o 'destino' forem arquivos existentes, o destino será
     sobrescrito.  Se ambos os caminhos apontarem para o mesmo arquivo
     ou diretório, ou se o 'destino' for um diretório não vazio, então
     *note OSError: 2bf. será levantada.

     Se ambos os caminhos estiverem no mesmo sistema de arquivos, a
     movimentação será realizada com *note os.replace(): 12ee.  Caso
     contrário, este caminho será copiado (preservando metadados e links
     simbólicos) e, em seguida, excluído.

     Adicionado na versão 3.14.

 -- Método: Path.move_into (target_dir)

     Move este arquivo ou diretório para o 'target_dir' fornecido, que
     deve ser um diretório existente.  Retorna uma nova instância de
     ‘Path’ apontando para o caminho movido.

     Adicionado na versão 3.14.

 -- 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(): 2add. em vez disso.

     Se 'missing_ok' for falso (o padrão), *note FileNotFoundError: 263.
     é levantada se o caminho não existir.

     Se 'missing_ok' for verdadeiro, exceções de *note
     FileNotFoundError: 263. 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: Copiando movendo 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:
     5dd. é 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: 52d.
     se o módulo *note pwd: b7. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 368. 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: 5dd.
     é 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: 52d.
     se o módulo *note grp: 6a. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 368. 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():
     523.

     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(): 2ae3.

          >>> 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(): a1b, 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():
52f, *note glob(): 531. e *note rglob(): 532.:

‘**’ (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(): 531. e *note rglob(): 532, 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: 86f. ou *note altsep:
870.) 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(): 531. e
*note Path.rglob(): 532. diferem ligeiramente daqueles pelo módulo *note
glob: 68.:

  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():
     599.

  2. Os componentes do padrão “‘**’” são sempre recursivos em pathlib.
     Isso é como passar ‘recursive=True’ para *note glob.glob(): 599.

  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(): 599, mas você pode passar ‘recurse_symlinks=True’ para
     *note Path.glob(): 531. para obter um comportamento compatível.

  4. Como todos os objetos *note PurePath: 6c2. e *note Path: 265, os
     valores retornados de *note Path.glob(): 531. e *note Path.rglob():
     532. 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,  Next: Protocolos,  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: 6c2. e *note Path: 265, e por isso é considerado 'orientado a
objetos'.  Por outro lado, os módulos *note os: a5. e *note os.path: a6.
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: a5. e *note os.path: a6. oferecem suporte a
caminhos ‘bytes’ e *note caminhos relativos aos descritores de
diretório: 12e6.  Esses recursos não estão disponíveis em pathlib.

Os tipos ‘str’ e ‘bytes’ do Python e partes dos módulos *note os: a5. e
*note os.path: a6. 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: a6.  Por exemplo, enquanto *note
os.path.abspath(): 1516. elimina segmentos “‘..’” de um caminho, o que
pode alterar seu significado se links simbólicos estiverem envolvidos,
*note Path.absolute(): 1963. 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: a6.

* 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: a5. a sua *note
PurePath: 6c2./*note Path: 265. equivalente.

*note os: a5. e *note os.path: a6.        *note pathlib: a8.
                                          
---------------------------------------------------------------------------------------------
                                          
*note os.path.dirname(): 2ae8.            *note PurePath.parent: 19d9.
                                          
                                          
*note os.path.basename(): 2ae9.           *note PurePath.name: 2ace.
                                          
                                          
*note os.path.splitext(): 18ac.           *note PurePath.stem: 2acf,
                                          *note PurePath.suffix: 18aa.
                                          
                                          
*note os.path.join(): 18ed.               *note PurePath.joinpath(): 2ad1.
                                          
                                          
*note os.path.isabs(): 52b.               *note PurePath.is_absolute(): 19d8.
                                          
                                          
*note os.path.relpath(): 6c6.             *note PurePath.relative_to(): 2fb. (1)
                                          
                                          
*note os.path.expanduser(): bff.          *note Path.expanduser(): 1037. (2)
                                          
                                          
*note os.path.realpath(): 261.            *note Path.resolve(): 19ac.
                                          
                                          
*note os.path.abspath(): 1516.            *note Path.absolute(): 1963. (3)
                                          
                                          
*note os.path.exists(): bf9.              *note Path.exists(): c01.
                                          
                                          
*note os.path.isfile(): bfc.              *note Path.is_file(): 533.
                                          
                                          
*note os.path.isdir(): bfb.               *note Path.is_dir(): 534.
                                          
                                          
*note os.path.islink(): bf7.              *note Path.is_symlink(): c03.
                                          
                                          
*note os.path.isjunction(): 6bf.          *note Path.is_junction(): 6c7.
                                          
                                          
*note os.path.ismount(): bfd.             *note Path.is_mount(): c02.
                                          
                                          
*note os.path.samefile(): 1167.           *note Path.samefile(): 1035.
                                          
                                          
*note os.getcwd(): 185f.                  *note Path.cwd(): 19d7.
                                          
                                          
*note os.stat(): 26c.                     *note Path.stat(): a1a.
                                          
                                          
*note os.lstat(): 6bd.                    *note Path.lstat(): 2ad9.
                                          
                                          
*note os.listdir(): 12f6.                 *note Path.iterdir(): 26d.
                                          
                                          
*note os.walk(): 6c5.                     *note Path.walk(): 6c4. (4)
                                          
                                          
*note os.mkdir(): 525,                    *note Path.mkdir(): 1036.
*note os.makedirs(): 526.                 

*note os.link(): 12eb.                    *note Path.hardlink_to(): a18.
                                          
                                          
*note os.symlink(): 12f0.                 *note Path.symlink_to(): a19.
                                          
                                          
*note os.readlink(): b10.                 *note Path.readlink(): b0f.
                                          
                                          
*note os.rename(): 12ed.                  *note Path.rename(): 17f5.
                                          
                                          
*note os.replace(): 12ee.                 *note Path.replace(): 2ae1.
                                          
                                          
*note os.remove(): 12ec,                  *note Path.unlink(): 1c8c.
*note os.unlink(): 12f1.                  

*note os.rmdir(): 12ef.                   *note Path.rmdir(): 2add.
                                          
                                          
*note os.chmod(): 523.                    *note Path.chmod(): a1b.
                                          
                                          
*note os.lchmod(): 522.                   *note Path.lchmod(): 2ae3.
                                          

   ---------- Footnotes ----------

   (1) *note os.path.relpath(): 6c6. chama *note abspath(): 1516. para
tornar os caminhos absolutos e remover partes “‘..’”, enquanto *note
PurePath.relative_to(): 2fb. é uma operação lexical que levanta *note
ValueError: 2ea. 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(): bff. retorna o caminho inalterado se
o diretório inicial não puder ser resolvido, enquanto *note
Path.expanduser(): 1037. levanta *note RuntimeError: 243.

   (3) *note os.path.abspath(): 1516. remove componentes “‘..’” sem
resolver links simbólicos, o que pode alterar o significado do caminho,
enquanto *note Path.absolute(): 1963. deixa quaisquer componentes “‘..’”
no caminho.

   (4) *note os.walk(): 6c5. sempre segue links simbólicos ao
categorizar caminhos em 'dirnames' e 'filenames', enquanto *note
Path.walk(): 6c4. categoriza todos os links simbólicos em 'filenames'
quando 'follow_symlinks' é falso (o padrão).


File: python.info,  Node: Protocolos,  Prev: Comparação com os módulos os e os path,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.21 Protocolos
....................

O módulo *note pathlib.types: a9. fornece tipos para verificação de tipo
estático.

Adicionado na versão 3.14.

 -- Classe: pathlib.types.PathInfo

     Um *note typing.Protocol: 564. descrevendo o atributo *note
     Path.info: 26a.  Implementações podem retornar resultados em cache
     de seus métodos.

      -- Método: exists (*, follow_symlinks=True)

          Retorna ‘True’ se o caminho for um arquivo ou diretório
          existente, ou qualquer outro tipo de arquivo; retorna ‘False’
          se o caminho não existir.

          Se 'follow_symlinks' for ‘False’, retorna ‘True’ para links
          simbólicos sem verificar se seus alvos existem.

      -- Método: is_dir (*, follow_symlinks=True)

          Retorna ‘True’ se o caminho for um diretório ou um link
          simbólico apontando para um diretório; retorna ‘False’ se o
          caminho for (ou apontar para) qualquer outro tipo de arquivo
          ou se ele não existir.

          Se 'follow_symlinks' for ‘False’, retorna ‘True’ apenas se
          este caminho for um diretório (sem seguir os links
          simbólicos); retorna ‘False’ se o caminho for qualquer outro
          tipo de arquivo ou se ele não existe.

      -- Método: is_file (*, follow_symlinks=True)

          Retorna ‘True’ se este caminho 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 outro caminho que não
          seja de arquivo, ou se ela não existe.

          Se 'follow_symlinks' for ‘False’, retorna ‘True’ apenas se
          este caminho for um arquivo (sem seguir os links simbólicos);
          retorna ‘False’ se o caminho for um diretório ou outro que não
          seja um arquivo, ou se ela não existir.

      -- Método: is_symlink ()

          Retorna ‘True’ se este caminho for um link simbólico (mesmo se
          quebrado); retorna ‘False’ se o caminho é um diretório ou
          qualquer tipo de arquivo, ou se ele não existir.


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(): 314, e para acessar o
sistema de arquivos veja o módulo *note os: a5.  Os parâmetros de
caminho podem ser passados como strings, ou bytes, ou qualquer objeto
que implemente o protocolo *note os.PathLike: e3f.

Ao contrário de um shell Unix, Python não faz nenhuma expansão
'automática' de caminho.  Funções como *note expanduser(): bff. e *note
expandvars(): 15ca. 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: 68.)

Ver também
..........

O módulo *note pathlib: a8. 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: a6. é 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(): bf9, *note lexists(): bfa, *note
isdir(): bfb, *note isfile(): bfc, *note islink(): bf7. e *note
ismount(): bfd. 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)

     Retorna uma versão normalizada e absolutizada do nome de caminho
     'path'.  Na maioria das plataformas, isso é equivalente a chamar a
     função *note normpath(): 1515. da seguinte forma:
     ‘normpath(join(os.getcwd(), path))’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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(): 2af2.  Observe que o resultado desta função é diferente do
     programa Unix ‘basename’; onde ‘basename’ para ‘'/foo/bar/'’
     retorna ‘'bar'’, a função *note basename(): 2ae9. retorna uma
     string vazia (‘''’).

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Função: os.path.commonpath (paths)

     Retorna o subcaminho comum mais longo de cada nome de caminho no
     iterável 'paths'.  Levanta *note ValueError: 2ea. 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(): 1033, 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: 59a.

     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(): 1032.

               >>> 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:
     59a.

 -- 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(): 2af2.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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(): 26c. 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:
     59a.

 -- 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(): bf9. em plataformas sem *note os.lstat(): 6bd.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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: b7.  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:
     59a.

     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:
     59a.

 -- 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: f4.).  Levanta *note OSError: 2bf.
     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: f4.).  Levanta *note OSError:
     2bf. se o arquivo não existe ou está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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: f4.).  Levanta *note OSError: 2bf. se o arquivo não existe ou
     está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Função: os.path.getsize (path, /)

     Retorna o tamanho, em bytes, de 'path'.  Levanta *note OSError:
     2bf. se o arquivo não existe ou está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

     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:
     bf9.  Isso segue links simbólicos, então *note islink(): bf7. e
     *note isfile(): bfc. podem ser verdadeiros para o mesmo caminho.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Função: os.path.isdir (path, /)

     Retorna ‘True’ se 'path' for um diretório *note existente: bf9.
     Isso segue links simbólicos, então *note islink(): bf7. e *note
     isdir(): bfb. podem ser verdadeiros para o mesmo caminho.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Função: os.path.isjunction (path)

     Retorna ‘True’ se 'path' se referir a uma entrada de diretório
     *note existente: bfa. 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: bf9. 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:
     59a.

 -- 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:
     59a.

 -- 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: 1fed.: Windows.

     Adicionado na versão 3.13.

 -- Função: os.path.join (path, /, *paths)

     Junta um ou mais segmentos do caminho de forma inteligente.  O
     valor de retorno é a concatenação de 'path' e todos os membros de
     '*paths' com exatamente um separador de diretório seguindo cada
     parte não vazia exceto a última.  Significa que o resultado só
     terminará em um separador se a última parte estiver vazia ou
     terminar em um separador.  Se um segmento for um caminho absoluto
     (que no Windows requer a unidade/drive e uma raiz), todos os
     segmentos anteriores serão ignorados e a união continuará a partir
     do segmento do caminho absoluto.

     No Windows, a unidade não é redefinida quando um segmento de
     caminho raiz (por exemplo, ‘r'\foo'’) é encontrado.  Se um segmento
     contiver uma unidade diferente ou um caminho absoluto, todos os
     segmentos anteriores serão ignorados e a unidade será redefinida.
     Observe que, como há um diretório atual para cada unidade,
     ‘os.path.join("c:", "foo")’ representa um caminho relativo ao
     diretório atual na unidade ‘C:’ (‘c:foo’), e não ‘c:\foo’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a. 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:
     59a.

 -- 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(): 2af7.

          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:
     59a.

 -- 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: 2bf.  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: 263. é levantada se 'path' não existir, ou outro
     *note OSError: 2bf. se ele estiver inacessível.

     Se 'strict' for *note os.path.ALLOW_MISSING: 262, erros diferentes
     de *note FileNotFoundError: 263. 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:
     59a.

     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.14: O valor *note ALLOW_MISSING: 262. para o
     parâmetro 'strict' foi adicionado.

 -- Dado: os.path.ALLOW_MISSING

     Valor especial usado para o argumento 'strict' em *note realpath():
     261.

     Adicionado na versão 3.14.

 -- 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: 2ea. é levantada quando 'path' e 'start' estão em
     unidades diferentes.

     'start' tem como padrão *note os.curdir: 2af8.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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(): 26c. 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:
     59a.

 -- 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:
     59a.

 -- 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(): f80, *note os.lstat(): 6bd. ou
     *note os.stat(): 26c.  Esta função implementa a comparação
     subjacente usada por *note samefile(): 1167. e *note
     sameopenfile(): 2af9.

     Alterado na versão 3.4: Adicionado suporte ao Windows.

 -- Função: os.path.split (path, /)

     Divide o caminho 'path' em um par, ‘(cabeça, rabo)’ onde 'rabo' é o
     último componente do nome do caminho e 'cabeça' é tudo o que leva a
     isso.  A parte 'rabo' nunca conterá uma barra; se 'path' terminar
     com uma barra, 'tail' ficará vazio.  Se não houver uma barra no
     'path', o 'head' ficará vazio.  Se 'path' estiver vazio, 'cabeça' e
     'rabo' estarão vazios.  As barras finais são retiradas da 'cabeça',
     a menos que seja a raiz (uma ou mais barras apenas).  Em todos os
     casos, ‘join(cabeça, rabo)’ retorna um caminho para o mesmo local
     que 'path' (mas as strings podem ser diferentes).  Veja também as
     funções *note dirname(): 2ae8. e *note basename(): 2ae9.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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:
     59a.

 -- 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:
     59a.

 -- 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.14/Lib/genericpath.py

   (2) https://github.com/python/cpython/tree/3.14/Lib/posixpath.py

   (3) https://github.com/python/cpython/tree/3.14/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: d6. define constantes e funções para interpretar os
resultados de *note os.stat(): 26c, *note os.fstat(): f80. e *note
os.lstat(): 6bd. (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: d6. 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(): 523. — 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: a6,
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:
     11b1, *note S_IFPORT: 11b2. e *note S_IFWHT: 11b3.

Todas as variáveis abaixo são simplesmente índices simbólicos nas 10
tuplas retornadas por *note os.stat(): 26c, *note os.fstat(): f80. ou
*note os.lstat(): 6bd.

 -- 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(): 26c, *note os.fstat(): f80.
ou *note os.lstat(): 6bd.; 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: 11b0.

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: 11b1, *note S_IFPORT: 11b2. ou *note S_IFWHT:
     11b3. 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(): 523.:

 -- 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: 2b17.  Para um arquivo que não possui o bit de execução de
     grupo (*note S_IXGRP: 2b18.) definido, o bit de set-group-ID indica
     trava obrigatória de arquivo/registro (veja também *note S_ENFMT:
     2b19.).

 -- 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: 2b17.: a trava de arquivo/registro
     é aplicada em arquivos que não possuem o bit de execução de grupo
     (*note S_IXGRP: 2b18.) definido.

 -- Dado: stat.S_IREAD

     Sinônimo Unix V7 para *note S_IRUSR: 2b1c.

 -- Dado: stat.S_IWRITE

     Sinônimo Unix V7 para *note S_IWUSR: 2b1d.

 -- Dado: stat.S_IEXEC

     Sinônimo Unix V7 para *note S_IXUSR: 2b1e.

Os seguintes sinalizadores podem ser usados no argumento 'flags' de
*note os.chflags(): 12e9.:

 -- 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: 1fed.: macOS

     Adicionado na versão 3.13.

 -- Dado: stat.SF_SYNTHETIC

     Todos os sinalizadores sintéticos de somente leitura de
     superusuário

     *note Disponibilidade: 1fed.: 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(): 26c.  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(): 6bd.
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.14/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: 5e. 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: 3b.

O módulo *note filecmp: 5e. 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():
     26c. (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(): 26c. para o arquivo mudarem.  O cache inteiro pode ser
     limpo usando *note clear_cache(): 1134.

 -- 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(): 1919.

     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.14/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: 1135.  'hide'
     é uma lista de nomes a serem ocultados e o padrão é ‘[os.curdir,
     os.pardir]’.

     A classe *note dircmp: 1136. compara arquivos fazendo comparações
     rasas, isto é, 'shallow' conforme descrito para *note
     filecmp.cmp(): 1919. por padrão usando o parâmetro 'shallow'.

     Alterado na versão 3.13: Adicionado o parâmetro 'shallow'.

     A classe *note dircmp: 1136. fornece os seguintes métodos:

      -- Método: report ()

          Exibe (para *note sys.stdout: cc0.) 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: 1136. 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__(): 6ef, 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(): 26c.
          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: 2b61.
          para instâncias *note dircmp: 1136. (ou instâncias MyDirCmp se
          esta instância for do tipo MyDirCmp, uma subclasse de *note
          dircmp: 1136.).

          Alterado na versão 3.10: Anteriormente, as entradas eram
          sempre instâncias de *note dircmp: 1136.  Agora, as entradas
          são do mesmo tipo que 'self', se 'self' for uma subclasse de
          *note dircmp: 1136.

 -- Dado: filecmp.DEFAULT_IGNORES

     Adicionado na versão 3.4.

     Lista de diretórios ignorados por *note dircmp: 1136. 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: 2b6a, *note
NamedTemporaryFile: 6e2, *note TemporaryDirectory: 1430, and *note
SpooledTemporaryFile: 897. are high-level interfaces which provide
automatic cleanup and can be used as *note context managers: 1e0.  *note
mkstemp(): 2b6b. and *note mkdtemp(): 527. 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: 289a. that can be used as a
     temporary storage area.  The file is created securely, using the
     same rules as *note mkstemp(): 2b6b.  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: 1e0.
     (see *note Exemplos: 2b6c.).  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(): 314.

     The 'dir', 'prefix' and 'suffix' parameters have the same meaning
     and defaults as with *note mkstemp(): 2b6b.

     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: 1169. 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: 1b5d. ‘tempfile.mkstemp’ com
     o argumento ‘fullpath’.

     Alterado na versão 3.5: The *note os.O_TMPFILE: 1169. 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(): 2b6a.
     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(): 2b6a. 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: 289a. whose
     ‘file’ attribute is the underlying true file object.  This
     file-like object can be used in a *note with: 186. 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(): 2b6a, 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: 289a. is finalized.  Deletion is not always
     guaranteed in this case (see *note object.__del__(): 11f3.).  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: 186. 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(): f86. 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():
               314.) must be closed before exiting the context manager,
               else the *note os.unlink(): 12f1. call on context manager
               exit will fail with a *note PermissionError: f32.

     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(): 12f1. call on exit of the context manager will
     fail with a *note PermissionError: f32.  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: 1b5d. ‘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(): 2b6a. does,
     except that data is spooled in memory until the file size exceeds
     'max_size', or until the file’s *note fileno(): 2b6d. method is
     called, at which point the contents are written to disk and
     operation proceeds as with *note TemporaryFile(): 2b6a.

      -- 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: 109a. or *note io.TextIOWrapper:
     9b4. object (depending on whether binary or text 'mode' was
     specified) or a true file object, depending on whether *note
     rollover(): 2b6e. has been called.  This file-like object can be
     used in a *note with: 186. 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: 898. and *note io.TextIOBase: 899. 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(): 527.  The resulting object can be used as
     a *note context manager: 1e0. (see *note Exemplos: 2b6c.).  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: 1e0, the ‘name’ will be assigned to the
          target of the ‘as’ clause in the *note with: 186. 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: f32. 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: 1b5d. ‘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: 2b71. flag for
     *note os.open(): f86.  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 not inherited by child processes.

     Unlike *note TemporaryFile(): 2b6a, the user of *note mkstemp():
     2b6b. 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(): 2b6b. 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(): 2b72. or *note
     gettempprefixb(): 2b73, 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(): 2b6b. returns a tuple containing an OS-level
     handle to an open file (as would be returned by *note os.open():
     f86.) and the absolute pathname of that file, in that order.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 59a.

 -- 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(): 527. 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(): 2b6b.

     *note mkdtemp(): 527. returns the absolute pathname of the new
     directory.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 59a.

     Alterado na versão 3.12: *note mkdtemp(): 527. 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: 1b7b. below.

     Alterado na versão 3.10: Always returns a str.  Previously it would
     return any *note tempdir: 1b7b. value regardless of type so long as
     it was not ‘None’.

 -- Função: tempfile.gettempdirb ()

     Same as *note gettempdir(): 1b7c. 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(): 2b72. 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(): 1b7c.  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: 59a.

     If ‘tempdir’ is ‘None’ (the default) at any call to any of the
     above functions except *note gettempprefix(): 2b72. it is
     initialized following the algorithm described in *note
     gettempdir(): 1b7c.

          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(): 2b6b. and *note mkdtemp(): 527. 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.14/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: e6.
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(): 1b31. 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(): 1b31. 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(): 2b6b.
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(): 2b6b.

     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(): 2b6b, 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(): 1b31. usage can be replaced
          easily with *note NamedTemporaryFile(): 6e2, 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 *note glob: 68. encontra todos os nomes de caminho que
correspondem a um padrão especificado de acordo com as regras usadas
pelo shell Unix, embora os resultados sejam retornados em ordem
arbitrária.  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(): c48. e
*note fnmatch.fnmatch(): 1b43. em conjunto, e não invocando realmente um
subshell.

Observe que arquivos iniciados com um ponto (‘.’) só podem ser
correspondidos com padrões que também iniciam com um ponto, ao contrário
de *note fnmatch.fnmatch(): 1b43. ou *note pathlib.Path.glob(): 531.
(Para expansão de til e variável de shell, use *note
os.path.expanduser(): bff. e *note os.path.expandvars(): 15ca.)

Para uma correspondência literal, coloque os metacaracteres entre
colchetes.  Por exemplo, ‘'[?]'’ corresponde ao caractere ‘'?'’.

O módulo *note glob: 68. 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: 59a. especificando o diretório raiz para pesquisa.  Tem o
     mesmo efeito em *note glob(): 68. 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: 12e6. 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: 86f. ou *note os.altsep: 870, 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: 1b5d. ‘glob.glob’ com os
     argumentos ‘pathname’, ‘recursive’.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 4c2. que produz os mesmos valores que
     *note glob(): 68. sem realmente armazená-los todos simultaneamente.

     Levanta um *note evento de auditoria: 1b5d. ‘glob.glob’ com os
     argumentos ‘pathname’, ‘recursive’.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 1429.  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(): 17b8.  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: 86f. e *note
     altsep: 870. (se disponível) são usados.

     Ver também
     ..........

     Os métodos *note pathlib.PurePath.full_match(): 52f. e *note
     pathlib.Path.glob(): 531, 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.14/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(): 68. 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: 60. oferece expansão de nome de arquivo (não
caminho) no estilo shell.

Ver também
..........

O módulo *note pathlib: a8. 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: be.).  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: 68. para expansão do nome
do caminho (*note glob: 68. usa *note filter(): 1b45. 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: 169. ou *note bytes:
192. 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.

Por fim, observe que *note functools.lru_cache(): bd8. com um 'maxsize'
de 32768 é usado para armazenar em cache os padrões regex compilados
(tipados) nas seguintes funções: *note fnmatch(): 60, *note
fnmatchcase(): 1b44, *note filter(): 1b45, *note filterfalse(): 210.

 -- 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(): 2af7.  *note fnmatchcase(): 1b44. 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(): 2af7.

 -- Função: fnmatch.filter (names, pat)

     Constrói uma lista a partir daqueles elementos do *note iterável:
     1423. 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.filterfalse (names, pat)

     Constrói uma lista a partir daqueles elementos do *note iterável:
     1423. de strings de nome de arquivo 'names' que não correspondem à
     string de padrão 'pat'.  É o mesmo que ‘[n for n in names if not
     fnmatch(n, pat)]’, mas implementado com mais eficiência.

     Adicionado na versão 3.14.

 -- 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(): 1429.  O padrão é esperado
     ser um *note str: 169.

     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: 68.

     Expansão de caminho no estilo shell do Unix.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 89. 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: 104. 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(): 2b81. é usada para abrir arquivos.  Esta
função usa *note tokenize.detect_encoding(): 2b82. 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: 89. 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 'filename' indicar um módulo congelado (começando com ‘'<frozen
     '’), a função tentará obter o nome real do arquivo de
     ‘module_globals['__file__']’ se 'module_globals' não for ‘None’.

     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’.

     Alterado na versão 3.14: Suporte a 'filename' de módulos
     congelados.

 -- 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(): 23f.

 -- 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():
     23f. 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.14/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: ca. 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: a5.

     Aviso: Mesmo as funções de cópia de arquivos de nível mais alto
     (*note shutil.copy(): c44, *note shutil.copy2(): c45.) 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.14/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: 13bf. '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.

     *note copyfileobj(): c46. 'não' garante que o fluxo de destino
     tenha sido liberado após a conclusão da cópia.  Se você quiser ler
     do destino após a conclusão da operação de cópia (por exemplo, ler
     o conteúdo de um arquivo temporário copiado de um fluxo HTTP),
     certifique-se de ter chamado *note flush(): 2b89. ou *note close():
     500. no objeto arquivo ou similar antes de tentar ler o arquivo de
     destino.

 -- 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:
     59a. ou nomes de caminhos dados como strings.

     'dst' deve ser o nome completo do arquivo de destino; veja *note
     copy(): c44. para uma cópia que aceita um caminho de diretório de
     destino.  Se 'src' e 'dst' especificarem o mesmo arquivo, *note
     SameFileError: 1194. será levantada.

     O local de destino deve ser gravável; caso contrário, uma exceção
     *note OSError: 2bf. 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: 1b5d. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: *note IOError: 1249. costumava ser
     levantada em vez de *note OSError: 2bf.  Adicionado argumento
     'follow_symlinks'.  Agora retorna 'dst'.

     Alterado na versão 3.4: Levanta *note SameFileError: 1194. em vez
     de *note Error: 1193.  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: c47.

 -- Exceção: shutil.SpecialFileError

     Esta exceção é levantada quando *note copyfile(): c43. ou *note
     copytree(): c14. 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(): c43. 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: 59a. ou nomes de caminhos
     dados como strings.  Se 'follow_symlinks' for falso e 'src' e 'dst'
     forem links simbólicos, *note copymode(): 1961. 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(): 132a. para mais informações.  Se *note
     copymode(): 1961. 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: 1b5d. ‘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(): 132a. 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:
     59a. ou nomes de caminhos dados como strings.

     Se 'follow_symlinks' for falso e 'src' e 'dst' se referirem a links
     simbólicos, *note copystat(): 132a. 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(): 132a. pode modificar os bits de
               permissão de um link simbólico.

             * Se ‘os.utime in os.supports_follow_symlinks’ for ‘True’,
               *note copystat(): 132a. 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(): 132a. 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(): 132a. copiará tudo o que puder.
          *note copystat(): 132a. nunca retorna falha.

          Por favor, veja *note os.supports_follow_symlinks: 12f4. para
          mais informações.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 59a. 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(): c44. copia os dados do arquivo e o modo de permissão
     do arquivo (consulte *note os.chmod(): 523.).  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(): c45.

     Levanta um *note evento de auditoria: 1b5d. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Levanta um *note evento de auditoria: 1b5d. ‘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: c47.

 -- Função: shutil.copy2 (src, dst, *, follow_symlinks=True)

     Idêntico a *note copy(): c44, exceto que *note copy2(): c45. também
     tenta preservar os metadados do arquivo.

     Quando 'follow_symlinks' for falso e 'src' for um link simbólico,
     *note copy2(): c45. 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(): c45.
     preservará todos os metadados que puder; *note copy2(): c45. nunca
     levanta uma exceção porque não pode preservar os metadados do
     arquivo.

     *note copy2(): c45. usa *note copystat(): 132a. para copiar os
     metadados do arquivo.  Por favor, veja *note copystat(): 132a. para
     obter mais informações sobre o suporte da plataforma para modificar
     os metadados do link simbólico.

     Levanta um *note evento de auditoria: 1b5d. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Levanta um *note evento de auditoria: 1b5d. ‘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: c47.

 -- 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(): c14,
     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(): 132a, arquivos individuais são copiados usando *note
     copy2(): c45.

     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: 1193. 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(): 12f0.

     Se 'ignore' for fornecido, deve ser um chamável que receberá como
     argumento o diretório que está sendo visitado por *note copytree():
     c14, e uma lista de seu conteúdo, retornada por *note os.listdir():
     12f6.  Como *note copytree(): c14. é 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(): 2b8a.
     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: 1193. é
     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(): c45. é usada, mas qualquer função que possua suporte à
     mesma assinatura (como *note copy(): c44.) pode ser usada.

     Se 'dirs_exist_ok' for false (o padrão) e 'dst' já existir, uma
     *note FileExistsError: 1216. 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: 1b5d. ‘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: c47.

     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: 12e6.

          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(): 353. é usada
          por padrão.  Em outras plataformas, a implementação *note
          rmtree(): 353. é 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: 2b8b. 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(): 88f.

     Ver também
     ..........

     *note exemplo rmtree: 2b8c. 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: 1b5d. ‘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: 263. para todos, exceto o caminho de nível
     superior.  Exceções diferentes de *note OSError: 2bf. 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(): 353.  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(): 12ed.

     Se o destino está no sistema de arquivos atual, então *note
     os.rename(): 12ed. é 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(): 12ed. não puder ser
     usado.  Se a fonte for um diretório, *note copytree(): c14. é
     chamado, passando 'copy_function'.  A 'copy_function' padrão é
     *note copy2(): c45.  Usar *note copy(): c44. 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: 1b5d. ‘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: c47.

     Alterado na versão 3.9: Aceita um *note objeto caminho ou similar:
     59a. 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: 853. 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: 1fed.: 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(): 12ea, a função subjacente.

     Levanta um *note evento de auditoria: 1b5d. ‘shutil.chown’ com os
     argumentos ‘path’, ‘user’, ‘group’.

     *note Disponibilidade: 1fed.: 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():
     12e8, 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: 1fe1.  Quando nenhum
     'path' é especificado, a variável de ambiente ‘PATH’ é lida de
     *note os.environ: 258, retornando para *note os.defpath: 1c9b. 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(): 6d0.
     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: 192. é agora aceitado.
     Se o tipo de 'cmd' é *note bytes: 192, o tipo resultante também é
     *note bytes: 192.

     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(): c14, 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(): c43, *note copy(): c44, *note copy2(): c45, *note
copytree(): c14. e *note move(): 1049. ) 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.copy_file_range(): 1815. ou *note os.sendfile(): cf8.
é usado.

No Solaris, *note os.sendfile(): cf8. é usado.

No Windows, *note shutil.copyfile(): c43. usa um tamanho de buffer
padrão maior (1 MiB ao invés de 64 KiB) e uma variante de *note
shutil.copyfileobj(): c46. baseada em *note memoryview(): 165. é 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(): c46. internamente.

Alterado na versão 3.8.

Alterado na versão 3.14: Solaris agora usa *note os.sendfile(): cf8.

Alterado na versão 3.14: A cópia na gravação (copy-on-write) ou cópia do
lado do servidor podem ser usadas internamente via *note
os.copy_file_range(): 1815. em sistemas de arquivos Linux suportados.

   ---------- 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(): 2b8a.:

     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: 137. e *note tarfile: e4.

 -- 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: 139. estiver disponível), “tar”, “gztar” (se o módulo *note
     zlib: 139. estiver disponível), “bztar” (se o módulo *note bz2: 14.
     estiver disponível), “xztar” (se o módulo *note lzma: 8e. estiver
     disponível) ou “zstdtar” (se o módulo *note compression.zstd: 23.
     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: 2b92. 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: d3a.

     O argumento 'verbose' não é usado e foi descontinuado.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 2b93. 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: ca. fornece estes formatos:

        - 'zip': arquivo ZIP (se o módulo *note zlib: 139. 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: 139. estiver disponível).

        - 'bztar': arquivo tar compactado com bzip2 (se o módulo *note
          bz2: 14. estiver disponível).

        - 'xztar': Arquivo tar compactado com xz (se o módulo *note
          lzma: 8e. estiver disponível).

        - 'zstdtar': arquivo tar compactado com Zstandard (se o módulo
          *note compression.zstd: 23. estiver disponível).

     Você pode registrar novos formatos ou fornecer seu próprio
     arquivador para quaisquer formatos existentes, usando *note
     register_archive_format(): 2b93.

 -- 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: 2af8.) para iniciar
     o arquivamento.  Outros argumentos são passados como argumentos
     nomeados 'owner', 'group', 'dry_run' e 'logger' (como passado em
     *note make_archive(): 6cf.).

     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(): 6cf. 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(): 2b94. 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”, “xztar” e “zstdtar”.  Ou qualquer outro formato registrado
     com *note register_unpack_format(): 2b96.  Se não for fornecido,
     *note unpack_archive(): 68b. 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: 2ea. é 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 usar ‘'data'’ (padrão
     desde o Python 3.14), a menos que esteja usando recursos
     específicos para tar e sistemas de arquivos do tipo UNIX. (Veja
     *note Filtros de extração: 68c. para detalhes.)

     Levanta um *note evento de auditoria: 1b5d. ‘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 “..”.

          Desde o Python 3.14, os padrões para ambos os formatos
          embutidos (arquivos zip e tar) evitarão os problemas de
          segurança mais perigosos, mas não impedirão 'todos' os
          comportamentos indesejados.  Leia a seção *note Dicas para
          verificação adicional: 2b97. para detalhes específicos do tar.

     Alterado na versão 3.7: Aceita um *note objeto caminho ou similar:
     59a. 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(): 68b.;

        - 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(): 2b98.

 -- 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: ca. 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: 139. estiver disponível).

        - 'bztar': arquivo tar compactado com bzip2 (se o módulo *note
          bz2: 14. estiver disponível).

        - 'xztar': Arquivo tar compactado com xz (se o módulo *note
          lzma: 8e. estiver disponível).

        - 'zstdtar': arquivo tar compactado com Zstandard (se o módulo
          *note compression.zstd: 23. estiver disponível).

     Você pode registrar novos formatos ou fornecer seu próprio
     desempacotador para quaisquer formatos existentes, usando *note
     register_unpack_format(): 2b96.

* 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: 2b9b, mostramos como usar
*note make_archive(): 6cf, 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__: 2b9e. é consultado
     invocando *note os.get_terminal_size(): 12fe.

     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: 2b9f.

     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(): 12fe. retornar zeros.

Ver também
..........

Módulo *note os: a5.

     Interfaces do sistema operacional, incluindo funções para trabalhar
     com arquivos num nível inferior a *note objetos arquivos: 13bf. do
     Python.

Módulo *note io: 83.

     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(): 314.

     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: ab. e *note marshal: 91. 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: ab. 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: 1f23. ou *note objeto bytes
ou similar: 193.) é 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: 6e. se você precisar
     garantir que eles não foram adulterados.

     Formatos de serialização mais seguros como *note json: 86. podem
     ser mais apropriados se você estiver processando dados não
     confiáveis.  Vejo *note Comparação com json: 2ba6.

* 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>.
* Interface de linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/pickle.py

   (2) Não confunda isso com o módulo *note marshal: 91.


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: 91, mas em geral *note pickle: ab. deve ser sempre a forma
preferida de serializar objetos Python.  *note marshal: 91. existe
principalmente para oferecer suporte a arquivos ‘.pyc’ do Python.

O módulo *note pickle: ab. difere do *note marshal: 91. de várias
maneiras significativas:

   * O módulo *note pickle: ab. mantém o controle dos objetos que já
     serializou, para que referências posteriores ao mesmo objeto não
     sejam serializadas novamente.  *note marshal: 91. não faz isso.

     Isso tem implicações tanto para objetos recursivos quanto para
     compartilhamento de objetos.  Objetos recursivos são objetos que
     contêm referências a si mesmos.  Eles não são tratados pelo marshal
     e, de fato, tentar usar marshal em objetos recursivos irá travar
     seu interpretador Python.  O compartilhamento de objetos ocorre
     quando há várias referências ao mesmo objeto em locais diferentes
     na hierarquia de objetos sendo serializados.  *note pickle: ab.
     armazena tais objetos apenas uma vez, e garante que todas as outras
     referências apontem para a cópia mestre.  Os objetos compartilhados
     permanecem compartilhados, o que pode ser muito importante para
     objetos mutáveis.

   * *note marshal: 91. não pode ser usado para serializar classes
     definidas pelo usuário e suas instâncias.  *note pickle: ab. 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: 91. 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: ab. 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: 2baa.);

   * 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: 86.: 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: ab. é 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: ab. usa uma
representação binária relativamente compacta.  Se você precisa de
características de tamanho ideal, pode com eficiência *note comprimir:
2bac. dados processados com pickle.

O módulo *note pickletools: ac. contém ferramentas para analisar fluxos
de dados gerados por *note pickle: ab.  O código-fonte do *note
pickletools: ac. 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: 2bad.  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: 192. 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.  Isso é
     o protocolo padrão no Python 3.8–3.13.  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.  É o protocolo padrão a partir do Python 3.14.
     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: ab. 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: ab. 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:
     c8. 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(): 1692.  Da mesma forma, para desserializar um fluxo
de dados, você chama a função *note loads(): f01.  No entanto, se você
quiser mais controle sobre a serialização e desserialização, pode criar
um objeto *note Pickler: c09. ou *note Unpickler: 195e, respectivamente.

O módulo *note pickle: ab. fornece as seguintes constantes:

 -- Dado: pickle.HIGHEST_PROTOCOL

     Um inteiro, a mais alta *note versão de protocolo: 27a. disponível.
     Este valor pode ser passado como um valor de 'protocol' para as
     funções *note dump(): 2baf. e *note dumps(): 1692, bem como o
     construtor de *note Pickler: c09.

 -- Dado: pickle.DEFAULT_PROTOCOL

     Um inteiro, a *note versão de protocolo: 27a. padrão usada para a
     serialização com pickle.  Pode ser menor que *note
     HIGHEST_PROTOCOL: 1693.  Atualmente, o protocolo padrão é 5,
     introduzido pela primeira vez no Python 3.8 e incompatível com as
     versões anteriores.  Esta versão introduz suporte para buffers fora
     da banda, nos quais dados compatíveis com PEP 3118(1) podem ser
     transmitidos separadamente do fluxo principal do pickle.

     Alterado na versão 3.0: O protocolo padrão é 3.

     Alterado na versão 3.8: O protocolo padrão é 4.

     Alterado na versão 3.14: O protocolo padrão é o 5.

O módulo *note pickle: ab. 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: 13bf. 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: c09.

     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: 192, 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: c09.

     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: 13bf. 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: 195e.

     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: 193.

     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: 195e.

     Alterado na versão 3.8: O argumento 'buffers' foi adicionado.

O módulo *note pickle: ab. 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: bc3.

 -- Exceção: pickle.PicklingError

     Erro levantado quando um objeto não serializável com pickle é
     encontrado por *note Pickler: c09.  Herda de *note PickleError:
     2bb0.

     Consulte *note O que pode ser serializado e desserializado com
     pickle?: 2bb1. 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: 2bb0.

     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: ab. exporta três classes, *note Pickler: c09,
*note Unpickler: 195e. e *note PickleBuffer: 1a9d.:

 -- 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: 1693.  Se não for especificado, o padrão é
     *note DEFAULT_PROTOCOL: a25.  Se um número negativo for
     especificado, *note HIGHEST_PROTOCOL: 1693. é 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: 109a.
     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: 2bb3.; 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(): 1862. retornar ‘None’, 'obj' é
          serializado com pickle como de costume.  Qualquer outro valor
          faz com que *note Pickler: c09. emita o valor retornado como
          um ID persistente para 'obj'.  O significado deste ID
          persistente deve ser definido por *note
          Unpickler.persistent_load(): 186b.  Observe que o valor
          retornado por *note persistent_id(): 1862. não pode ter um ID
          persistente.

          Consulte *note Persistência de objetos externos: 2bb4. 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(): 2bb5.  É 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__(): bbc.

          Por padrão, um objeto pickler não terá um atributo *note
          dispatch_table: 131e, e em vez disso usará a tabela de
          despacho global gerenciada pelo módulo *note copyreg: 2a.  No
          entanto, para personalizar a serialização com pickle de um
          objeto pickler específico, pode-se definir o atributo *note
          dispatch_table: 131e. para um objeto do tipo dict.
          Alternativamente, se uma subclasse de *note Pickler: c09. tem
          um atributo *note dispatch_table: 131e. então ele será usado
          como a tabela de despacho padrão para instâncias daquela
          classe.

          Consulte *note Tabelas de despacho: 2bb6. 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: c09.  Este método tem prioridade sobre qualquer
          redutor em *note dispatch_table: 131e.  Ele deve estar de
          acordo com a mesma interface que um método *note __reduce__():
          bbc. e pode opcionalmente retornar *note NotImplemented: 1a2.
          como alternativa em redutores registrados em *note
          dispatch_table: 131e. para serializar com pickle ‘obj’.

          Para exemplo detalhado, consulte *note Redução personalizada
          para tipos, funções e outros objetos: 2bb7.

          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: c09. recorra infinitamente.

          Use *note pickletools.optimize(): 2bb9. se você precisar de
          serializações com pickle mais compactas.

      -- Método: clear_memo ()

          Limpa o “memo” do pickler

          O memo é a estrutura de dados que lembra quais objetos o
          pickler já viu, de modo que objetos compartilhados ou
          recursivos sejam serializados por pickle por referência e não
          por valor.  Este método é útil ao reutilizar picklers.

 -- 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: 898.  Assim, 'file' pode
     ser um arquivo em disco aberto para leitura binária, um objeto
     *note io.BytesIO: 109a. 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: 4dc, *note date: 1f9. e *note time:
     1fa. 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: c09. foi instanciado (ou quando *note dump(): 2baf.
     ou *note dumps(): 1692. 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: 2bb3.  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: 2bb2. por padrão.

          Se definido, *note persistent_load(): 186b. deve retornar o
          objeto especificado pelo ID persistente 'pid'.  Se um ID
          persistente inválido for encontrado, uma *note
          UnpicklingError: 2bb2. deve ser levantada.

          Consulte *note Persistência de objetos externos: 2bb4. 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: 169.  Observe, ao contrário do que seu nome sugere,
          *note find_class(): 2bbc. 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: 2bbd. para detalhes.

          Levanta um *note evento de auditoria: 1b5d.
          ‘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: 25f,
     como um *note objeto bytes ou similar: 193. ou um vetor
     N-dimensional.

     *note PickleBuffer: 1a9d. é 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: 165.

     Objetos *note PickleBuffer: 1a9d. só podem ser serializados usando
     o protocolo pickle 5 ou superior.  Eles são elegíveis para *note
     serialização fora de banda: 2bb3.

     Adicionado na versão 3.8.

      -- Método: raw ()

          Retorna um *note memoryview: 165. 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: 1ac8. é levantada se o buffer
          não for contíguo C nem Fortran.

      -- Método: release ()

          Libera o buffer subjacente exposto pelo objeto PickleBuffer.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/


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: 1a2.);

   * 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: 1649, não *note lambda:
     1499.);

   * classes acessíveis no nível superior de um módulo;

   * instâncias de classes cujo o resultado da chamada de *note
     __getstate__(): 7e6. seja serializável com pickle (veja a seção
     *note Serializando com pickle instâncias de classes: 2baa. para
     detalhes).

As tentativas de serializar objetos não serializáveis com pickle vão
levantar a exceção *note PicklingError: 1895.; 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: f5c. será levantada neste caso.  Você pode
aumentar este limite cuidadosamente com *note sys.setrecursionlimit():
6df.

Observe que as funções (embutidas e definidas pelo usuário) são
serializadas com pickle pelo *note nome qualificado: 1be4, 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__(): bbd. da classe.

   ---------- Footnotes ----------

   (1) É por isso que funções *note lambda: 1499. 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:
64f. ou uma *note AttributeError: 5e4, 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__(): 8b4. 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__(): 2bc2. podem ditar os valores
     passados para o método *note __new__(): 795. 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__(): 795. após a
     desserialização com pickle.

     Você deve implementar este método se o método *note __new__(): 795.
     de sua classe requer argumentos somente-nomeados.  Caso contrário,
     é recomendado para compatibilidade implementar *note
     __getnewargs__(): fc8.

     Alterado na versão 3.6: *note __getnewargs_ex__(): 2bc2. é 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__(): 2bc2, 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__(): 795. após a
     desserialização com pickle.

     *note __getnewargs__(): fc8. não será chamado se *note
     __getnewargs_ex__(): 2bc2. estiver definido.

     Alterado na versão 3.6: Antes do Python 3.6, *note
     __getnewargs__(): fc8. era chamado em vez de *note
     __getnewargs_ex__(): 2bc2. 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__(): 7e6.  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__: 772.
          e não possui *note __slots__: 16d9, o estado padrão é ‘None’.

        * Para uma classe que não uma possui instância *note __dict__:
          772. nem *note __slots__: 16d9, o estado padrão é
          ‘self.__dict__’.

        * Para uma classe que possui uma instância *note __dict__: 772.
          e *note __slots__: 16d9, 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__: 16d9. e nenhuma
          *note __dict__: 772. 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__(): bbd, 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__(): bbc. retorna um estado com valor
          ‘None’ na serialização com pickle, o método *note
          __setstate__(): bbd. não será chamado quando da
          desserialização com pickle.

Confira a seção *note Manipulação de objetos com estado: 2bc3. para mais
informações sobre como usar os métodos *note __getstate__(): 7e6. e
*note __setstate__(): bbd.

     Nota: Quando da desserialização com pickle, alguns métodos, como
     *note __getattr__(): 6ef, *note __getattribute__(): dbf. ou *note
     __setattr__(): 2212, 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__(): 795. para
     estabelecer tal invariante, pois *note __init__(): 8b4. 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__(): bbc.  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__(): bbc. 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__(): 2bc2, *note __getstate__(): 7e6. e *note
__setstate__(): bbd.) 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__(): bbc. 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__(): bbd. 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__: 772. 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(): 226d. e *note
          extend(): 2270. 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__(): 14c7.

        * 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__(): bbd. de ‘obj’.  Se não for ‘None’, este
          chamável terá prioridade sobre o *note __setstate__(): bbd. 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__(): 18bf. 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__(): bbc.  Além disso,
     *note __reduce__(): bbc. 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: 29. 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: ab.
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: ab.; ele vai delegar esta resolução aos métodos definidos pelo
usuário no selecionador e no separador, *note persistent_id(): 1862. e
*note persistent_load(): 186b. respectivamente.

Para serializar com pickle objetos que têm um ID externo persistente, o
pickler deve ter um método *note persistent_id(): 1862. 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(): 186b. 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: 2a.
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: c09. 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: 2a.


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: 131e. 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: c09. e implementar um método *note reducer_override(): c0a.
Este método pode retornar uma tupla de redução arbitrária (veja *note
__reduce__(): bbc.).  Ele pode, alternativamente, retornar *note
NotImplemented: 1a2. para retornar ao comportamento tradicional.

Se *note dispatch_table: 131e. e *note reducer_override(): c0a. forem
definidos, o método *note reducer_override(): c0a. tem prioridade.

     Nota: Por motivos de desempenho, *note reducer_override(): c0a. não
     pode ser chamado para os seguintes objetos: ‘None’, ‘True’,
     ‘False’, e as instâncias exatas de *note int: 19b, *note float:
     196, *note bytes: 192, *note str: 169, *note dict: 183, *note set:
     184, *note frozenset: 7e7, *note list: 24c. e *note tuple: 608.

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: ab. é 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: ab, à
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__(): 18bf. especializado para o
protocolo 5 e superior, que retorna uma instância *note PickleBuffer:
1a9d. (em vez de, por exemplo, um objeto *note bytes: 192.) para
quaisquer dados grandes.

Um objeto *note PickleBuffer: 1a9d. '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: ab.  No
entanto, os consumidores também podem optar por dizer ao *note pickle:
ab. 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: 1a9d. gerados ao serializar um grafo de
objeto.

No lado emissor, é necessário passar um argumento 'buffer_callback' para
*note Pickler: c09. (ou para a função *note dump(): 2baf. ou *note
dumps(): 1692.), que será chamada com cada *note PickleBuffer: 1a9d.
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: 195e. (ou para a função *note load(): f00. ou *note load():
f00.), 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: 1a9d. 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: 342. 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: 342. aloca sua
própria memória: você não pode criar uma instância de *note bytearray:
342. 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(): 164c. 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(): 2bbc.  Ao contrário
do que seu nome sugere, *note Unpickler.find_class(): 2bbc. é 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: 13. 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: 134. 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: ab. tem um
otimizador transparente escrito em C.


File: python.info,  Node: Exemplos<7>,  Next: Interface de linha de comando,  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(): 2baf. e *note
load(): f00.

     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)


File: python.info,  Node: Interface de linha de comando,  Prev: Exemplos<7>,  Up: pickle — Serialização de objetos Python

5.12.1.19 Interface de linha de comando
.......................................

O módulo *note pickle: ab. pode ser invocado como um script a partir da
linha de comando e exibirá o conteúdo dos arquivos de pickle.  No
entanto, quando o arquivo de pickle que você deseja examinar vem de uma
fonte não confiável, ‘-m pickletools’ é uma opção mais segura, pois não
executa o bytecode do pickle.  Consulte o *note uso da CLI do
pickletools: 2bd2.

     python -m pickle aquivo_pickle [aquivo_pickle ...]

A seguinte opção é aceita:

 -- Option: pickle_file

     Um arquivo pickle para ler, ou ‘-’ para indicar leitura da entrada
     padrão.

Ver também
..........

Módulo *note copyreg: 2a.

     Registro de construtor de interface Pickle para tipos de extensão.

Módulo *note pickletools: ac.

     Ferramentas para trabalhar e analisar dados serializados com
     pickle.

Módulo *note shelve: c8.

     Banco de dados indexado de objetos; usa *note pickle: ab.

Módulo *note copy: 29.

     Cópia rasa e cópia profunda de objeto.

Módulo *note marshal: 91.

     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: 2a. oferece uma maneira de definir as funções
usadas durante a remoção de objetos específicos.  Os módulos *note
pickle: ab. e *note copy: 29. 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: 198.

 -- 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: 131e. 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: 131e. de um objeto
     pickler ou subclasse de *note pickle.Pickler: c09. 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.14/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:
ab. 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(): 1122.

     By default, pickles created with *note pickle.DEFAULT_PROTOCOL:
     a25. 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: 2bdc.).  If the optional 'writeback' parameter is set to
     ‘True’, all entries accessed are also cached in memory, and written
     back on *note sync(): 2bdd. and *note close(): 2bde.; 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: a25. is now
     used as the default pickle protocol.

     Alterado na versão 3.11: Aceita um *note objeto caminho ou similar:
     59a. como nome de arquivo.

          Nota: Do not rely on the shelf being closed automatically;
          always call *note close(): 2bde. explicitly when you don’t
          need it any more, or use *note shelve.open(): 19b0. as a
          context manager:

               with shelve.open('spam') as db:
                   db['eggs'] = 'eggs'
     Aviso: Because the *note shelve: c8. module is backed by *note
     pickle: ab, 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: dfb.  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(): 2bde.

 -- Método: Shelf.close ()

     Synchronize and close the persistent 'dict' object.  Operations on
     a closed shelf will fail with a *note ValueError: 2ea.

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.14/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: 38. or *note dbm.gnu: 37.) depends on which interface is
     available.  Therefore it is not safe to open the database directly
     using *note dbm: 35.  The database is also (unfortunately) subject
     to the limitations of *note dbm: 35, 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: c8. 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: 38. 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: 12a8. which
     stores pickled values in the 'dict' object.

     By default, pickles created with *note pickle.DEFAULT_PROTOCOL:
     a25. are used to serialize values.  The version of the pickle
     protocol can be specified with the 'protocol' parameter.  See the
     *note pickle: ab. 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: 1191. object can also be used as a context manager,
     in which case it will be automatically closed when the *note with:
     186. 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: a25. is now
     used as the default pickle protocol.

 -- Classe: shelve.BsdDbShelf (dict, protocol=None, writeback=False,
          keyencoding='utf-8')

     A subclass of *note Shelf: 1191. 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: 1191. class.

 -- Classe: shelve.DbfilenameShelf (filename, flag='c', protocol=None,
          writeback=False)

     A subclass of *note Shelf: 1191. which accepts a 'filename' instead
     of a dict-like object.  The underlying file will be opened using
     *note dbm.open(): 1122.  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(): 19b0. function.
     The optional 'protocol' and 'writeback' parameters have the same
     interpretation as for the *note Shelf: 1191. 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: 35.

     Generic interface to ‘dbm’-style databases.

Módulo *note pickle: ab.

     Object serialization used by *note shelve: c8.


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: ab. e *note shelve: c8.  O módulo *note marshal: 91.
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: ab. – 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: 91. 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.

Existem funções que leem/gravam arquivos, bem como funções que operam em
objetos bytes ou similares.

Not all Python object types are supported; in general, only objects
whose value is independent from a particular invocation of Python can be
written and read by this module.  The following types are supported:

   * Numeric types: *note int: 19b, *note bool: 3c0, *note float: 196,
     *note complex: 197.

   * Strings (*note str: 169.) and *note bytes: 192.  *note Bytes-like
     objects: 193. like *note bytearray: 342. are marshalled as ‘bytes’.

   * Containers: *note tuple: 608, *note list: 24c, *note set: 184,
     *note frozenset: 7e7, and (since *note version: 2be5. 5), *note
     slice: 689.  It should be understood that these are supported only
     if the values contained therein are themselves supported.
     Recursive containers are supported since *note version: 2be5. 3.

   * The singletons *note None: 87a, *note Ellipsis: 21c4. and *note
     StopIteration: de9.

   * *note code: 1b. objects, if 'allow_code' is true.  See note above
     about version dependence.

Alterado na versão 3.4:

   * Added format version 3, which supports marshalling recursive lists,
     sets and dictionaries.

   * Added format version 4, which supports efficient representations of
     short strings.

Alterado na versão 3.14: Added format version 5, which allows
marshalling slices.

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: 1f23.
     gravável.

     Se o valor tem (ou contém um objeto que tem) um tipo não suportado,
     uma exceção *note ValueError: 2ea. é levantada – mas dados de lixo
     também serão gravados no arquivo.  O objeto não será lido
     corretamente por *note load(): 1cac.  Há suporte a *note objetos
     código: 4e0. 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: 1b5d. ‘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: 14d5, *note ValueError: 2ea. ou *note
     TypeError: 198.  Há suporte a *note objetos código: 4e0. somente se
     'allow_code' for verdadeiro.  O arquivo deve ser um *note arquivo
     binário: 1f23. legível.

     Levanta um *note evento de auditoria: 1b5d. ‘marshal.load’ sem
     argumentos.

          Nota: Se um objeto contendo um tipo não suportado foi
          empacotado com *note dump(): 2be6, *note load(): 1cac. 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: 2ea. se o valor tem (ou contém um
     objeto que tem) um tipo não suportado.  Há suporte a *note objetos
     código: 4e0. 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: 1b5d. ‘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: 193. em um valor.  Se
     nenhum valor válido for encontrado, levanta *note EOFError: 14d5,
     *note ValueError: 2ea. ou *note TypeError: 198.  Há suporte a *note
     objetos código: 4e0. somente se 'allow_code' for verdadeiro.  Bytes
     extras na entrada são ignorados.

     Levanta um *note evento de auditoria: 1b5d. ‘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

     Indicates the format that the module uses.  Version 0 is the
     historical first version; subsequent versions add new features.
     Generally, a new version becomes the default when it is introduced.

     Versão      Available since     Novas funcionalidades
                                     
     -----------------------------------------------------------------------------------------
                                     
     1           Python 2.4          Sharing interned strings
                                     
                                     
     2           Python 2.5          Binary representation of floats
                                     
                                     
     3           Python 3.4          Support for object instancing and recursion
                                     
                                     
     4           Python 3.4          Efficient representation of short strings
                                     
                                     
     5           Python 3.14         Support for *note slice: 689. objects
                                     

   ---------- 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: 35. é uma interface genérica para variantes do banco de dados
DBM:

   * *note dbm.sqlite3: 39.

   * *note dbm.gnu: 37.

   * *note dbm.ndbm: 38.

Se nenhum desses módulos estiverem instalados, a implementação lenta,
mas simples, no módulo *note dbm.dumb: 36. 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: 2beb. como o primeiro item — o último é usado quando
     *note dbm.error: 2beb. é 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: 39, *note dbm.gnu:
     37, *note dbm.ndbm: 38. ou *note dbm.dumb: 36. — 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: 59a.

 -- 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: 59a.) – O arquivo de banco de
          dados para abrir.  Se o arquivo de banco de dados já existe, a
          função *note whichdb(): 2bec. é 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: 169.) –

             * ‘'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: 19b.) – 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: 59a.

The object returned by *note open(): 1122. supports the basic
functionality of mutable *note mappings: 13b7.; keys and their
corresponding values can be stored, retrieved, and deleted, and
iteration, the *note in: 348. operator and methods ‘keys()’, ‘get()’,
‘setdefault()’ and ‘clear()’ are available.  The ‘keys()’ method returns
a list instead of a view object.  The ‘setdefault()’ method requires two
arguments.

Chaves e valores são sempre armazenados como *note bytes: 192.  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: 186, 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: 35.

Alterado na versão 3.4: Adicionado suporte nativo para o protocolo de
gerenciamento de contexto para os objetos retornados por *note open():
1122.

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: 5dd.

Alterado na versão 3.13: ‘clear()’ methods are now available for all
*note dbm: 35. backends.

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: c8.

     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.14/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: d4. para
fornecer um backend de SQLite para o módulo *note dbm: 35.  Os arquivos
criados por *note dbm.sqlite3: 39. podem então ser abertos por *note
sqlite3: d4. ou quaisquer outros navegadores de SQLite, incluindo CLI do
SQLite.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

 -- Função: dbm.sqlite3.open (filename, /, flag='r', mode=0o666)

     Open an SQLite database.


     Parâmetros:

        * ‘filename’ (*note path-like object: 59a.) – O caminho para o
          banco de dados a ser aberta.

        * ‘flag’ (*note str: 169.) –

             * ‘'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.

     The returned database object behaves similar to a mutable *note
     mapping: 13b7, but the ‘keys()’ method returns a list, and the
     ‘setdefault()’ method requires two arguments.  It also supports a
     “closing” context manager via the *note with: 186. keyword.

     O seguinte método também é fornecido:

      -- Método: sqlite3.close ()

          Close the SQLite database.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 37. fornece uma interface para a biblioteca GDBM
(GNU dbm), semelhante ao módulo *note dbm.ndbm: 38, mas com
funcionalidades adicionais, como tolerância a falhas.

     Nota: Os formatos de arquivo criados por *note dbm.gnu: 37. e *note
     dbm.ndbm: 38. são incompatíveis e não podem ser usados de forma
     intercambiável.

*note Disponibilidade: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

 -- Exceção: dbm.gnu.error

     Levantada em erros específicos do *note dbm.gnu: 37, como erros de
     E/S. *note KeyError: 5dd. é 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():
     1cd6. 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: 59a.) – O arquivo de banco
          de dados para abrir.

        * ‘flag’ (*note str: 169.) –

             * ‘'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: 2bf1. para uma lista
          de caracteres de sinalizadores suportados.

        * ‘mode’ (*note int: 19b.) – The Unix file access mode of the
          file (default: octal ‘0o666’), used only when the database has
          to be created.


     Levanta: *note error: c84. – Se um argumento 'flag' inválido for
     passado.

     Alterado na versão 3.11: 'filename' aceita um *note objeto caminho
     ou similar: 59a.

     ‘gdbm’ objects behave similar to mutable *note mappings: 13b7, but
     methods ‘items()’, ‘values()’, ‘pop()’, ‘popitem()’, and ‘update()’
     are not supported, the ‘keys()’ method returns a list, and the
     ‘setdefault()’ method requires two arguments.  It also supports a
     “closing” context manager via the *note with: 186. keyword.

     Alterado na versão 3.2: Added the ‘get()’ and ‘setdefault()’
     methods.

     Alterado na versão 3.13: Added the ‘clear()’ method.

     The following methods are also provided:

      -- 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(): 2bf4.  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.14/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: 38. 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: 37. e *note
     dbm.ndbm: 38. 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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

 -- Exceção: dbm.ndbm.error

     Levantada em erros específicos de *note dbm.ndbm: 38, como erros de
     E/S. *note KeyError: 5dd. é 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: 59a.) – O nome base do
          arquivo de banco de dados (sem as extensões ‘.dir’ ou ‘.pag’).

        * ‘flag’ (*note str: 169.) –

             * ‘'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: 19b.) – 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:
     59a. como nome de arquivo.

     ‘ndbm’ objects behave similar to mutable *note mappings: 13b7, but
     methods ‘items()’, ‘values()’, ‘pop()’, ‘popitem()’, and ‘update()’
     are not supported, the ‘keys()’ method returns a list, and the
     ‘setdefault()’ method requires two arguments.  It also supports a
     “closing” context manager via the *note with: 186. keyword.

     Alterado na versão 3.2: Added the ‘get()’ and ‘setdefault()’
     methods.

     Alterado na versão 3.13: Added the ‘clear()’ method.

     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.14/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: 36. é pensado como um último recurso
     alternativo para o módulo *note dbm: 35. quando um módulo mais
     robusto não está disponível.  O módulo *note dbm.dumb: 36. 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: 36. fornece uma interface persistente do tipo
*note dict: 183. que é escrita inteiramente em Python.  Ao contrário de
outros backends *note dbm: 35, como *note dbm.gnu: 37, 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: 36, como erros de
     E/S. *note KeyError: 5dd. é levantada para erros gerais de
     mapeamento, como especificar uma chave incorreta.

 -- Função: dbm.dumb.open (filename, flag='c', mode=0o666)

     Open a ‘dbm.dumb’ database.


     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: 169.) –

             * ‘'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: 19b.) – 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(): c80. 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: 59a.

     The returned database object behaves similar to a mutable *note
     mapping: 13b7, but the ‘keys()’ and ‘items()’ methods return lists,
     and the ‘setdefault()’ method requires two arguments.  It also
     supports a “closing” context manager via the *note with: 186.
     keyword.

     The following methods are also provided:

      -- 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(): 2bdd.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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 uma aplicação 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: 2c01. ensina como usar o módulo ‘sqlite3’.

   * *note Referência: 2c02. descreve as classes e funções que este
     módulo define.

   * *note Guias de como fazer: 2c03. detalha como lidar com tarefas
     específicas.

   * *note Explicação: 2c04. 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.14/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(): 59f. 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: 547. ‘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(): 2c06. para criar o *note Cursor: 2c07.:

     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(...):
5a9.:

     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(...): 5a9,
atribua o resultado a ‘res’ e chame *note res.fetchone(): 2c08. 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: 608. 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(...): 5a9.:

     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: 2c09. para detalhes).  Chame *note
con.commit(): 2c0a. 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(...): 5a9.
para atribuir o resultado a ‘res’ e chame *note res.fetchall(): 2c0b.
para retornar todas as linhas resultantes.

     >>> res = cur.execute("SELECT score FROM movie")
     >>> res.fetchall()
     [(8.2,), (7.5,)]

O resultado é uma *note list: 24c. 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(...):
5aa.:

     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: 1f0f. 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: 5ab. 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: 608. 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(): 548. 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: 2c03. para leitura adicional:

        * *note How to use placeholders to bind values in SQL queries:
          5ab.

        * *note How to adapt custom Python types to SQLite values: 2c0c.

        * *note How to convert SQLite values to custom Python types:
          2c0d.

        * *note How to use the connection context manager: 1a88.

        * *note How to create and use row factories: 2c0e.

   * *note Explicação: 2c04. para obter informações detalhadas sobre o
     controle de transações.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Database_transaction

   (2) https://en.wikipedia.org/wiki/Cursor_(databases)

   (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: Interface de linha de comando<2>.


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: 59a.) – 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: 196.) – Quantos segundos a conexão
          deve aguardar antes de levantar uma exceção *note
          OperationalError: 1b41. 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: 19b.) – Control whether and how
          data types not *note natively supported by SQLite: 2c13. are
          looked up to be converted to Python types, using the
          converters registered with *note register_converter(): 2c14.
          Set it to any combination (using ‘|’, bitwise or) of *note
          PARSE_DECLTYPES: 2c15. and *note PARSE_COLNAMES: 2c16. 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: 169.‘ | ’‘None’) – Control
          legacy transaction handling behaviour.  See *note
          Connection.isolation_level: 2c17. and *note Controle de
          transação através do atributo isolation_level: 2c18. for more
          information.  Can be ‘"DEFERRED"’ (default), ‘"EXCLUSIVE"’ or
          ‘"IMMEDIATE"’; or ‘None’ to disable opening transactions
          implicitly.  Has no effect unless *note Connection.autocommit:
          6d2. is set to *note LEGACY_TRANSACTION_CONTROL: 2c19. (the
          default).

        * ‘check_same_thread’ (*note bool: 3c0.) – If ‘True’ (default),
          *note ProgrammingError: 303. 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: 881.
          for more information.

        * ‘factory’ (*note Connection: 547.) – A custom subclass of
          *note Connection: 547. to create the connection with, if not
          the default *note Connection: 547. class.

        * ‘cached_statements’ (*note int: 19b.) – The number of
          statements that ‘sqlite3’ should internally cache for this
          connection, to avoid parsing overhead.  By default, 128
          statements.

        * ‘uri’ (*note bool: 3c0.) – 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: 2c1a.

        * ‘autocommit’ (*note bool: 3c0.) – Control PEP 249(2)
          transaction handling behaviour.  See *note
          Connection.autocommit: 6d2. and *note Controle de transações
          através do atributo autocommit: 6d3. for more information.
          'autocommit' currently defaults to *note
          LEGACY_TRANSACTION_CONTROL: 2c19.  The default will change to
          ‘False’ in a future Python release.


     Tipo de retorno: *note Connection: 547.

     Levanta um *note evento de auditoria: 1b5d. ‘sqlite3.connect’ com o
     argumento ‘database’.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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: 59a, 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(): 5a9.

     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: b29.  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:
          501. for introspection of the failed callback.

 -- Função: sqlite3.register_adapter (type, adapter, /)

     Register an 'adapter' *note callable: 2c1e. 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: 2c13.

 -- Função: sqlite3.register_converter (typename, converter, /)

     Register the 'converter' *note callable: 2c1e. 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: 192. object and should return an object
     of the desired Python type.  Consult the parameter 'detect_types'
     of *note connect(): 59f. 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.14/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: 6d2. 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: 2c18.
     for more information.

 -- Dado: sqlite3.PARSE_DECLTYPES

     Pass this flag value to the 'detect_types' parameter of *note
     connect(): 59f. 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: 2c16. using
     the ‘|’ (bitwise or) operator.

          Nota: Generated fields (for example ‘MAX(p)’) are returned as
          *note str: 169.  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(): 59f. 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: 2c15. 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: 2c1e. passed to *note Connection.set_authorizer(): 5a2,
     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:
     169.

 -- Dado: sqlite3.sqlite_version_info

     Version number of the runtime SQLite library as a *note tuple: 608.
     of *note integers: 19b.

 -- 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.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(): 6d6.
     and *note getconfig(): 6d5. 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

Deprecated since version 3.12, removed in version 3.14: The ‘version’
and ‘version_info’ constants.

   ---------- 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(): 59f.  Their main
     purpose is creating *note Cursor: 2c07. objects, and *note Controle
     de transações: 2c09.

     Ver também
     ..........

        * *note How to use connection shortcut methods: 2c39.

        * *note How to use the connection context manager: 1a88.

     Alterado na versão 3.13: A *note ResourceWarning: 546. is emitted
     if *note close(): 548. 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: 2c07. object.  The cursor
          method accepts a single optional parameter 'factory'.  If
          supplied, this must be a *note callable: 2c1e. returning an
          instance of *note Cursor: 2c07. or its subclasses.

      -- Método: blobopen (table, column, rowid, /, *, readonly=False,
               name='main')

          Open a *note Blob: 887. handle to an existing BLOB (Binary
          Large OBject).


          Parâmetros:

             * ‘table’ (*note str: 169.) – The name of the table where
               the blob is located.

             * ‘column’ (*note str: 169.) – The name of the column where
               the blob is located.

             * ‘rowid’ (*note int: 19b.) – The row id where the blob is
               located.

             * ‘readonly’ (*note bool: 3c0.) – Set to ‘True’ if the blob
               should be opened without write permissions.  Defaults to
               ‘False’.

             * ‘name’ (*note str: 169.) – The name of the database where
               the blob is located.  Defaults to ‘"main"’.


          Levanta: *note OperationalError: 1b41. – When trying to open a
          blob in a ‘WITHOUT ROWID’ table.


          Tipo de retorno: *note Blob: 887.

               Nota: The blob size cannot be changed using the *note
               Blob: 887. 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: 6d2. 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: 6d2. 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: 6d2. is
          ‘False’, any pending transaction is implicitly rolled back.
          If ‘autocommit’ is ‘True’ or *note LEGACY_TRANSACTION_CONTROL:
          2c19, no implicit transaction control is executed.  Make sure
          to *note commit(): 2c0a. before closing to avoid losing
          pending changes.

      -- Método: execute (sql, parameters=(), /)

          Create a new *note Cursor: 2c07. object and call *note
          execute(): 5a9. on it with the given 'sql' and 'parameters'.
          Return the new cursor object.

      -- Método: executemany (sql, parameters, /)

          Create a new *note Cursor: 2c07. object and call *note
          executemany(): 5aa. on it with the given 'sql' and
          'parameters'.  Return the new cursor object.

      -- Método: executescript (sql_script, /)

          Create a new *note Cursor: 2c07. object and call *note
          executescript(): 2c3e. 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: 169.) – O nome da função SQL.

             * ‘narg’ (*note int: 19b.) – The number of arguments the
               SQL function can accept.  If ‘-1’, it may take any number
               of arguments.

             * ‘func’ (*note callback: 2c3f. | None) – A *note callable:
               2c1e. that is called when the SQL function is invoked.
               The callable must return *note a type natively supported
               by SQLite: 2c13.  Set to ‘None’ to remove an existing SQL
               function.

             * ‘deterministic’ (*note bool: 3c0.) – 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: 169.) – The name of the SQL aggregate
               function.

             * ‘n_arg’ (*note int: 19b.) – The number of arguments the
               SQL aggregate function can accept.  If ‘-1’, it may take
               any number of arguments.

             * ‘aggregate_class’ (*note class: 1bd5. | 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: 2c13.

               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: 169.) – The name of the SQL aggregate
               window function to create or remove.

             * ‘num_params’ (*note int: 19b.) – The number of arguments
               the SQL aggregate window function can accept.  If ‘-1’,
               it may take any number of arguments.

             * ‘aggregate_class’ (*note class: 1bd5. | 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: 2c13.

               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: 2c40. – 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: 169.
          arguments, and it should return an *note integer: 19b.:

             * ‘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: 1b41.

      -- Método: set_authorizer (authorizer_callback)

          Register *note callable: 2c1e. '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:
          2c21, *note SQLITE_DENY: 2c22, or *note SQLITE_IGNORE: 2c23.
          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: 2c1e. '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: 2c42. 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: 2c1e. '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: 169.) 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(): 5a9.
          methods.  Other sources include the *note transaction
          management: 2c09. 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(): 2c1c. 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: 200a. option to
               ‘configure’.

          Levanta um *note evento de auditoria: 1b5d.
          ‘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(): a35.
          before calling this method.


          Parâmetros:

             * ‘path’ (*note str: 169.) – The path to the SQLite
               extension.

             * ‘entrypoint’ (*note str: 169.‘ | ’‘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: 1b5d.
          ‘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: 4c2. 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: 169.‘ | ’‘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: 2c43.

          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: 547.) – The database
               connection to save the backup to.

             * ‘pages’ (*note int: 19b.) – 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: 2c3f. | None) – If set to a
               *note callable: 2c1e, 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: 169.) – 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: 196.) – 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: 2c43.

      -- Método: getlimit (category, /)

          Get a connection runtime limit.


          Parâmetros: ‘category’ (*note int: 19b.) – The SQLite limit
          category(3) to be queried.


          Tipo de retorno: *note int: 19b.


          Levanta: *note ProgrammingError: 303. – If 'category' is not
          recognised by the underlying SQLite library.

          Example, query the maximum length of an SQL statement for
          *note Connection: 547. ‘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: 19b.) – The SQLite limit
               category(4) to be set.

             * ‘limit’ (*note int: 19b.) – The value of the new limit.
               If negative, the current limit is unchanged.


          Tipo de retorno: *note int: 19b.


          Levanta: *note ProgrammingError: 303. – If 'category' is not
          recognised by the underlying SQLite library.

          Example, limit the number of attached databases to 1 for *note
          Connection: 547. ‘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: 19b.) – A *note SQLITE_DBCONFIG
          code: 2c26.


          Tipo de retorno: *note bool: 3c0.

          Adicionado na versão 3.12.

      -- Método: setconfig (op, enable=True, /)

          Set a boolean connection configuration option.


          Parâmetros:

             * ‘op’ (*note int: 19b.) – A *note SQLITE_DBCONFIG code:
               2c26.

             * ‘enable’ (*note bool: 3c0.) – ‘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: 192. 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: 169.) – The database name to be
          serialized.  Defaults to ‘"main"’.


          Tipo de retorno: *note bytes: 192.

               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: 883. database into a *note
          Connection: 547.  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: 192.) – A serialized database.

             * ‘name’ (*note str: 169.) – The database name to
               deserialize into.  Defaults to ‘"main"’.


          Levanta:

             * *note OperationalError: 1b41. – If the database
               connection is currently involved in a read transaction or
               a backup operation.

             * *note DatabaseError: 2c42. – If 'data' does not contain a
               valid SQLite database.

             * *note OverflowError: a77. – If *note len(data): 835. 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(): 2c0a. and *note
               rollback(): 2c3a. to close transactions.

               This is the recommended value of ‘autocommit’.

             * ‘True’: Use SQLite’s autocommit mode(7).  *note commit():
               2c0a. and *note rollback(): 2c3a. have no effect in this
               mode.

             * *note LEGACY_TRANSACTION_CONTROL: 2c19.: Pre-Python 3.12
               (non- PEP 249(8)-compliant) transaction control.  See
               *note isolation_level: 2c17. 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: 6d3. for more details.

               Nota: The *note isolation_level: 2c17. attribute has no
               effect unless *note autocommit: 6d2. is *note
               LEGACY_TRANSACTION_CONTROL: 2c19.

          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: 2c18. 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: 2c18. is performed.

          If not overridden by the 'isolation_level' parameter of *note
          connect(): 59f, the default is ‘""’, which is an alias for
          ‘"DEFERRED"’.

               Nota: Using *note autocommit: 6d2. to control transaction
               handling is recommended over using ‘isolation_level’.
               ‘isolation_level’ has no effect unless *note autocommit:
               6d2. is set to *note LEGACY_TRANSACTION_CONTROL: 2c19.
               (the default).

      -- Atributo: row_factory

          The initial *note row_factory: 2c45. for *note Cursor: 2c07.
          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: 608.

          Consulte *note How to create and use row factories: 2c0e. para
          mais detalhes.

      -- Atributo: text_factory

          A *note callable: 2c1e. that accepts a *note bytes: 192.
          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: 169.

          Consulte *note How to handle non-UTF-8 text encodings: 2c43.
          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():
     2c06, or by using any of the *note connection shortcut methods:
     2c39.

     Cursor objects are *note iterators: 4c2, meaning that if you *note
     execute(): 5a9. 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: 2c07. instance has the following attributes and
     methods.

      -- Método: execute (sql, parameters=(), /)

          Execute a single SQL statement, optionally binding Python
          values using *note placeholders: 5ab.


          Parâmetros:

             * ‘sql’ (*note str: 169.) – A single SQL statement.

             * ‘parameters’ (*note dict: 183. | *note sequence: 70b.) –
               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: 5ab.


          Levanta: *note ProgrammingError: 303. – When 'sql' contains
          more than one SQL statement.  When *note named placeholders:
          5ab. are used and 'parameters' is a sequence instead of a
          *note dict: 183.

          If *note autocommit: 6d2. is *note LEGACY_TRANSACTION_CONTROL:
          2c19, *note isolation_level: 2c17. 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'.

          Alterado na versão 3.14: *note ProgrammingError: 303. is
          emitted if *note named placeholders: 5ab. are used and
          'parameters' is a sequence instead of a *note dict: 183.

          Use *note executescript(): 2c3e. to execute multiple SQL
          statements.

      -- Método: executemany (sql, parameters, /)

          For every item in 'parameters', repeatedly execute the *note
          parameterized: 5ab. DML (Data Manipulation Language) SQL
          statement 'sql'.

          Uses the same implicit transaction handling as *note
          execute(): 5a9.


          Parâmetros:

             * ‘sql’ (*note str: 169.) – A single SQL DML statement.

             * ‘parameters’ (*note iterable: 1423.) – An iterable of
               parameters to bind with the placeholders in 'sql'.  See
               *note How to use placeholders to bind values in SQL
               queries: 5ab.


          Levanta: *note ProgrammingError: 303. – When 'sql' contains
          more than one SQL statement or is not a DML statement, When
          *note named placeholders: 5ab. are used and the items in
          'parameters' are sequences instead of *note dict: 183.s.

          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).

          Alterado na versão 3.14: *note ProgrammingError: 303. is
          emitted if *note named placeholders: 5ab. are used and the
          items in 'parameters' are sequences instead of *note dict:
          183.s.

      -- Método: executescript (sql_script, /)

          Execute the SQL statements in 'sql_script'.  If the *note
          autocommit: 6d2. is *note LEGACY_TRANSACTION_CONTROL: 2c19.
          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: 169.

          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: 2c45. is ‘None’, return the next row
          query result set as a *note tuple: 608.  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:
          24c.  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:
          1743. 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(): 1742. call to the next.

          Alterado na versão 3.14.0 (unreleased): Negative 'size' values
          are rejected by raising *note ValueError: 2ea.

      -- Método: fetchall ()

          Return all (remaining) rows of a query result as a *note list:
          24c.  Return an empty list if no rows are available.  Note
          that the *note arraysize: 1743. 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: 303. 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(): 1742.  The default value is 1 which
          means a single row would be fetched per call.

          Alterado na versão 3.14.0 (unreleased): Negative values are
          rejected by raising *note ValueError: 2ea.

      -- Atributo: connection

          Read-only attribute that provides the SQLite database *note
          Connection: 547. belonging to the cursor.  A *note Cursor:
          2c07. object created by calling *note con.cursor(): 2c06. will
          have a *note connection: 2c4d. 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(): 5a9. method.
          For other statements, after *note executemany(): 5aa. or *note
          executescript(): 2c3e, 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(): 5a9. and *note executemany(): 5aa. 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: 608.  Can be
          set to the included *note sqlite3.Row: 1067.; or a *note
          callable: 2c1e. that accepts two arguments, a *note Cursor:
          2c07. object and the ‘tuple’ of row values, and returns a
          custom object representing an SQLite row.

          Defaults to what *note Connection.row_factory: 18e9. was set
          to when the ‘Cursor’ was created.  Assigning to this attribute
          does not affect *note Connection.row_factory: 18e9. of the
          parent connection.

          Consulte *note How to create and use row factories: 2c0e. 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:
     18e9. for *note Connection: 547. objects.  It supports iteration,
     equality testing, *note len(): 835, and *note mapping: 13b7. 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: 2c0e. para mais
     detalhes.

      -- Método: keys ()

          Return a *note list: 24c. of column names as *note strings:
          169.  Immediately after a query, it is the first member of
          each tuple in *note Cursor.description: 180c.

     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: 887. instance is a *note file-like object: 289a. that
     can read and write data in an SQLite BLOB.  Call *note len(blob):
     835. to get the size (number of bytes) of the blob.  Use indices
     and *note slices: 246e. for direct access to the blob data.

     Use the *note Blob: 887. as a *note context manager: 1e0. 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: 1b24. (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(): 2c55. 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: 2ea.

      -- 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: 1489.
          (absolute blob positioning).  Other values for 'origin' are
          *note os.SEEK_CUR: 148a. (seek relative to the current
          position) and *note os.SEEK_END: 148b. (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: 2c5a. to *note native SQLite types: 2c13.

   ---------- 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: bc3.

 -- 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: 1ab. statement.
     ‘Error’ is a subclass of *note Exception: bc3.

     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: 1b24.

 -- 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: 1b24.

 -- 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: 2c42.

 -- 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: 2c42.

 -- 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: 2c42.

 -- 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: 2c42.

 -- 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: 547.  ‘ProgrammingError’ is a
     subclass of *note DatabaseError: 2c42.

 -- 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(): 5a0, if the
     underlying SQLite library does not support deterministic functions.
     ‘NotSupportedError’ is a subclass of *note DatabaseError: 2c42.

   ---------- 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: 19b.                     ‘INTEGER’
                                    
                                    
*note float: 196.                   ‘REAL’
                                    
                                    
*note str: 169.                     ‘TEXT’
                                    
                                    
*note bytes: 192.                   ‘BLOB’
                                    

This is how SQLite types are converted to Python types by default:

Tipo em SQLite    Tipo em Python
                  
---------------------------------------------------------------------
                  
‘NULL’            ‘None’
                  
                  
‘INTEGER’         *note int: 19b.
                  
                  
‘REAL’            *note float: 196.
                  
                  
‘TEXT’            depends on *note text_factory: 2c46,
                  *note str: 169. by default
                  
                  
‘BLOB’            *note bytes: 192.
                  

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: 2c0c, and you can let the ‘sqlite3’ module convert SQLite
types to Python types via *note converters: 2c0d.


File: python.info,  Node: Default adapters and converters deprecated,  Next: Interface de linha de comando<2>,  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:
     70a. and tailor them to your needs.

The deprecated default adapters and converters consist of:

   * An adapter for *note datetime.date: 1f9. objects to *note strings:
     169. in ISO 8601(1) format.

   * An adapter for *note datetime.datetime: 4dc. objects to strings in
     ISO 8601 format.

   * A converter for *note declared: 2c0d. “date” types to *note
     datetime.date: 1f9. objects.

   * A converter for declared “timestamp” types to *note
     datetime.datetime: 4dc. 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: 4dc.
     object.  To preserve UTC offsets in timestamps, either leave
     converters disabled, or register an offset-aware converter with
     *note register_converter(): 2c14.

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<2>,  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: 23b. 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: 608. of
values to the second argument of the cursor’s *note execute(): 5a9.
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: 70b. whose length must
match the number of placeholders, or a *note ProgrammingError: 303. is
raised.  For the named style, 'parameters' must be an instance of a
*note dict: 183. (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: 2c13.

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:
1a87.

     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(): 2c1d.

     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: 192.
     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(): 59f.  There are three
options:

   * Implicit: set 'detect_types' to *note PARSE_DECLTYPES: 2c15.

   * Explicit: set 'detect_types' to *note PARSE_COLNAMES: 2c16.

   * 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(): 2c3b, *note executemany(): 2c3c, and *note
executescript(): 2c3d. methods of the *note Connection: 547. class, your
code can be written more concisely because you don’t have to create the
(often superfluous) *note Cursor: 2c07. objects explicitly.  Instead,
the *note Cursor: 2c07. 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: 547. 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: 547. 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: 186.
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: 6d2. 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: 6d2. 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(): 157b.

     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: 1b41. 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: 608.  If a
‘tuple’ does not suit your needs, you can use the *note sqlite3.Row:
1067. class or a custom *note row_factory: 2c45.

While ‘row_factory’ exists as an attribute both on the *note Cursor:
2c07. and the *note Connection: 547, it is recommended to set *note
Connection.row_factory: 18e9, 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: 2c45. that returns each row
as a *note dict: 183, 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: 853.:

     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: 4db, or any other custom class, instead of a *note
namedtuple: 4da.


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: 169. 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: 2c46. 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: 547. instance ‘con’ connected to this database, we can
decode the Latin-2 encoded text using this *note text_factory: 2c46.:

     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:
14a0.:

     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: 14a0.

   ---------- 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: 6d3. é recomendado, enquanto
*note Controle de transação através do atributo isolation_level: 2c18.
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: 6d2, que deve ser
preferencialmente definido usando o parâmetro 'autocommit' de *note
connect(): 59f.

É 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(): 59f, *note Connection.commit(): 2c0a. e *note
     Connection.rollback(): 2c3a. 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(): 548. com alterações pendentes.

Defina 'autocommit' como ‘True’ para ativar o modo autocommit(2) do
SQLite.  Neste modo, *note Connection.commit(): 2c0a. e *note
Connection.rollback(): 2c3a. não têm efeito.  Observe que o modo
autocommit do SQLite é distinto do atributo *note Connection.autocommit:
6d2. compatível com PEP 249(3); use *note Connection.in_transaction:
2c44. para consultar o modo de confirmação automática do SQLite de baixo
nível.

Defina 'autocommit' como *note LEGACY_TRANSACTION_CONTROL: 2c19. para
deixar o comportamento de controle de transação para o atributo *note
Connection.isolation_level: 2c17.  Veja *note Controle de transação
através do atributo isolation_level: 2c18. 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: 6d2.  Veja *note Controle de transações
     através do atributo autocommit: 6d3.

Se *note Connection.autocommit: 6d2. estiver definido como *note
LEGACY_TRANSACTION_CONTROL: 2c19. (o padrão), o comportamento da
transação é controlado usando o atributo *note
Connection.isolation_level: 2c17.  Caso contrário, ‘isolation_level’ não
tem efeito.

Se o atributo de conexão *note isolation_level: 2c17. não for ‘None’,
novas transações são abertas implicitamente antes de *note execute():
5a9. e *note executemany(): 5aa. 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(): 2c0a. e
*note rollback(): 2c3a. 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: 2c17.

Se *note isolation_level: 2c17. 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: 2c44.

O método *note executescript(): 2c3e. compromete implicitamente qualquer
transação pendente antes da execução do script SQL fornecido,
independentemente do valor de *note isolation_level: 2c17.

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: 6d2.

   ---------- 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 oferecem suporte à compressão de
dados com os algoritmos zlib, gzip, bzip2, lzma e zstd, e a criação de
arquivos no formato ZIP e tar.  Veja também *note Operações de
arquivamento: 1414. fornecido pelo módulo *note shutil: ca.

* Menu:

* O pacote compression::
* compression.zstd — Compactação compatível com o formato Zstandard: compression zstd — Compactação compatível com o formato Zstandard.
* 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: O pacote compression,  Next: compression zstd — Compactação compatível com o formato Zstandard,  Up: Compressão de Dados e Arquivamento

5.13.1 O pacote ‘compression’
-----------------------------

Adicionado na versão 3.14.

O pacote ‘compression’ contém os módulos de compressão canônicos, que
contêm interfaces para diversos algoritmos de compressão.  Alguns desses
módulos historicamente estiveram disponíveis como módulos separados;
estes continuarão disponíveis com seus nomes originais por motivos de
compatibilidade e não serão removidos sem um ciclo de descontinuação.  O
uso de módulos em ‘compression’ é incentivado sempre que possível.

   * ‘compression.bz2’ – Re-exporta *note bz2: 14.

   * ‘compression.gzip’ – Re-exporta *note gzip: 6b.

   * ‘compression.lzma’ – Re-exporta *note lzma: 8e.

   * ‘compression.zlib’ – Re-exporta *note zlib: 139.

   * *note compression.zstd: 23. – Invólucro para a biblioteca de
     compressão Zstandard


File: python.info,  Node: compression zstd — Compactação compatível com o formato Zstandard,  Next: zlib — Compactação compatível com gzip,  Prev: O pacote compression,  Up: Compressão de Dados e Arquivamento

5.13.2 ‘compression.zstd’ — Compactação compatível com o formato Zstandard
--------------------------------------------------------------------------

Adicionado na versão 3.14.

'Código-fonte:' Lib/compression/zstd/__init__.py(1)

__________________________________________________________________

Este módulo fornece classes e funções para compactar e descompactar
dados usando o algoritmo de compactação Zstandard (ou 'zstd').  O manual
do zstd(2) descreve o Zstandard como “um algoritmo de compactação rápido
e sem perdas, voltado para cenários de compactação em tempo real no
nível zlib e melhores taxas de compactação”.  Também está incluída uma
interface de arquivo que oferece suporte à leitura e à gravação do
conteúdo de arquivos ‘.zst’ criados pelo utilitário ‘zstd’, bem como
fluxos compactados zstd brutos.

O módulo ‘compression.zstd’ contém:

   * A função *note open(): 2c7f. e a classe *note ZstdFile: 2c80. para
     leitura e escrita de arquivos compactados.

   * As classes *note ZstdCompressor: 2c81. e *note ZstdDecompressor:
     2c82. para (des)compactação incremental.

   * As funções *note compress(): 2c83. e *note decompress(): 2c84. para
     (des)compressão de uma só vez.

   * As funções *note train_dict(): 2c85. e *note finalize_dict(): 2c86.
     e a classe *note ZstdDict: 2c87. para treinar e gerenciar
     dicionários Zstandard.

   * As classes *note CompressionParameter: 2c88, *note
     DecompressionParameter: 2c89. e *note Strategy: 2c8a. para definir
     parâmetros avançados de (des)compactação.

* Menu:

* Exceções: Exceções<8>.
* Lendo e escrevendo arquivos comprimidos::
* Comprimindo e descomprimindo dados na memória::
* Dicionários de Zstandard::
* Advanced parameter control::
* Diversos: Diversos<3>.
* Exemplos: Exemplos<8>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/compression/zstd/__init__.py

   (2) https://facebook.github.io/zstd/doc/api_manual_latest.html


File: python.info,  Node: Exceções<8>,  Next: Lendo e escrevendo arquivos comprimidos,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.1 Exceções
.................

 -- Exceção: compression.zstd.ZstdError

     Essa exceção é levantada quando ocorre um erro durante a
     compactação ou descompactação ou durante a inicialização do estado
     (des)compactador.


File: python.info,  Node: Lendo e escrevendo arquivos comprimidos,  Next: Comprimindo e descomprimindo dados na memória,  Prev: Exceções<8>,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.2 Lendo e escrevendo arquivos comprimidos
................................................

 -- Função: compression.zstd.open (file, /, mode='rb', *, level=None,
          options=None, zstd_dict=None, encoding=None, errors=None,
          newline=None)

     Abre um arquivo compactado com Zstandard em modo binário ou texto,
     retornando *note objeto arquivo: 13bf.

     O argumento 'file' pode ser um nome de arquivo (dado como um objeto
     *note str: 169, *note bytes: 192. ou *note caminho ou similar:
     59a.), neste caso o arquivo nomeado é aberto , ou pode ser um
     objeto arquivo existente para leitura ou escrita.

     O argumento mode pode ser ‘'rb'’ para leitura (padrão), ‘'wb'’ para
     sobrescrever, ‘'ab'’ para anexar ou ‘'xb'’ para criação exclusiva.
     Estes podem ser fornecidos como ‘'r'’, ‘'w'’, ‘'a'’ e ‘'x'’,
     respectivamente.  Você também pode abrir em modo texto com ‘'rt'’,
     ‘'wt'’, ‘'at'’ e ‘'xt'’, respectivamente.

     Durante a leitura, o argumento 'options' pode ser um dicionário que
     fornece parâmetros avançados de descompactação; consulte *note
     DecompressionParameter: 2c89. para obter informações detalhadas
     sobre os parâmetros suportados.  O argumento 'zstd_dict' é uma
     instância de *note ZstdDict: 2c87. a ser usada durante a
     descompactação.  Durante a leitura, se o argumento 'level' não for
     None, uma exceção ‘TypeError’ será levantada.

     Ao escrever, o argumento 'options' pode ser um dicionário que
     fornece parâmetros avançados de descompactação; consulte *note
     CompressionParameter: 2c88. para obter informações detalhadas sobre
     os parâmetros suportados.  O argumento 'level' é o nível de
     compactação a ser usado ao escrever dados compactados.  Apenas
     'level' ou 'options' pode ser diferente de None.  O argumento
     'zstd_dict' é uma instância de *note ZstdDict: 2c87. a ser usada
     durante a compactação.

     Em modo binário, esta função equivale ao construtor *note ZstdFile:
     2c80.: ‘ZstdFile(file, mode, ...)’.  Nesse caso, os parâmetros
     'encoding', 'errors' e 'newline' não devem ser fornecidos.

     Em modo texto, um objeto *note ZstdFile: 2c80. é criado e
     encapsulado em uma instância *note io.TextIOWrapper: 9b4. com a
     codificação especificada, comportamento de tratamento de erros e
     fins de linha.

 -- Classe: compression.zstd.ZstdFile (file, /, mode='rb', *,
          level=None, options=None, zstd_dict=None)

     Abre um arquivo compactado com Zstandard no modo binário.

     Um *note ZstdFile: 2c80. pode envolver um *note objeto arquivo:
     13bf. já aberto, ou operar diretamente em um arquivo nomeado.  O
     argumento 'file' especifica o objeto arquivo a ser envolvido ou o
     nome do arquivo a ser aberto (como um objeto *note str: 169, *note
     bytes: 192. ou *note objeto caminho ou similar: 59a.).  Se estiver
     envolvendo um objeto arquivo existente, o arquivo envolvido não
     será fechado quando o *note ZstdFile: 2c80. for fechado.

     O argumento 'mode' pode ser ‘'rb'’ para leitura (padrão), ‘'wb'’
     para substituição, ‘'xb'’ para criação exclusiva ou ‘'ab'’ para
     anexar.  Estes podem ser equivalentemente dados como ‘'r'’, ‘'w'’,
     ‘'x'’ e ‘'a'’ respectivamente.

     Se 'file' 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'’.

     Durante a leitura, o argumento 'options' pode ser um dicionário que
     fornece parâmetros avançados de descompactação; consulte *note
     DecompressionParameter: 2c89. para obter informações detalhadas
     sobre os parâmetros suportados.  O argumento 'zstd_dict' é uma
     instância de *note ZstdDict: 2c87. a ser usada durante a
     descompactação.  Durante a leitura, se o argumento 'level' não for
     None, uma exceção ‘TypeError’ será levantada.

     Ao escrever, o argumento 'options' pode ser um dicionário que
     fornece parâmetros avançados de descompactação; consulte *note
     CompressionParameter: 2c88. para obter informações detalhadas sobre
     os parâmetros suportados.  O argumento 'level' é o nível de
     compactação a ser usado ao escrever dados compactados.  Apenas
     'level' ou 'options' pode ser passado.  O argumento 'zstd_dict' é
     uma instância de *note ZstdDict: 2c87. a ser usada durante a
     compactação.

     ‘ZstdFile’ oferece suporte a todos os membros especificados por
     *note io.BufferedIOBase: 898, exceto *note detach(): 2c8e. e *note
     truncate(): 150c.  Iteração e a instrução *note with: 186. 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(): 2c8f. não altera a
               posição do arquivo de *note ZstdFile: 2c80, pode alterar
               a posição do objeto arquivo subjacente (por exemplo, se o
               *note ZstdFile: 2c80. foi construído passando um objeto
               arquivo para 'file').

      -- Atributo: mode

          ‘'rb'’ para leitura e ‘'wb'’ para escrita.

      -- Atributo: name

          O nome do arquivo Zstandard.  Equivalente ao atributo *note
          name: 2c92. do *note objeto arquivo: 13bf. subjacente.


File: python.info,  Node: Comprimindo e descomprimindo dados na memória,  Next: Dicionários de Zstandard,  Prev: Lendo e escrevendo arquivos comprimidos,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.3 Comprimindo e descomprimindo dados na memória
......................................................

 -- Função: compression.zstd.compress (data, level=None, options=None,
          zstd_dict=None)

     Compacta 'data' (um *note objeto bytes ou similar: 193.),
     retornando os dados compactados como um objeto *note bytes: 192.

     O argumento 'level' é um inteiro que controla o nível de
     compactação.  'level' é uma alternativa à configuração *note
     CompressionParameter.compression_level: 2c94. em 'options'.  Use
     *note bounds(): 2c95. em *note compression_level: 2c94. para obter
     os valores que podem ser passados para 'level'.  Se opções
     avançadas de compactação forem necessárias, o argumento 'level'
     deve ser omitido e, no dicionário 'options', o parâmetro
     ‘CompressionParameter.compression_level’ deve ser definido.

     O argumento 'options' é um dicionário Python que contém parâmetros
     de compactação avançados.  As chaves e valores válidos para
     parâmetros de compactação estão documentados na documentação *note
     CompressionParameter: 2c88.

     O argumento 'zstd_dict' é uma instância de *note ZstdDict: 2c87.
     contendo dados treinados para melhorar a eficiência da compactação.
     A função *note train_dict(): 2c85. pode ser usada para gerar um
     dicionário Zstandard.

 -- Função: compression.zstd.decompress (data, zstd_dict=None,
          options=None)

     Descompacta 'data' (um *note objeto bytes ou similar: 193.),
     retornando os dados descompactados como um objeto *note bytes: 192.

     O argumento 'options' é um dicionário Python que contém parâmetros
     de descompactação avançados.  As chaves e valores válidos para
     parâmetros de compactação estão documentados na documentação *note
     DecompressionParameter: 2c89.

     O argumento 'zstd_dict' é uma instância de *note ZstdDict: 2c87.
     contendo dados treinados usados durante a compactação.  Este deve
     ser o mesmo dicionário Zstandard usado durante a compactação.

     Se 'data' forem a concatenação de vários quadros comprimidos
     distintos, descomprime todos esses quadros e retorna a concatenação
     dos resultados.

 -- Classe: compression.zstd.ZstdCompressor (level=None, options=None,
          zstd_dict=None)

     Cria um objeto compressão, que pode ser usado para comprimir dados
     de forma incremental.

     Para uma maneira mais conveniente de compactar um único bloco de
     dados, consulte a função a nível de módulo *note compress(): 2c83.

     O argumento 'level' é um inteiro que controla o nível de
     compactação.  'level' é uma alternativa à configuração *note
     CompressionParameter.compression_level: 2c94. em 'options'.  Use
     *note bounds(): 2c95. em *note compression_level: 2c94. para obter
     os valores que podem ser passados para 'level'.  Se opções
     avançadas de compactação forem necessárias, o argumento 'level'
     deve ser omitido e, no dicionário 'options', o parâmetro
     ‘CompressionParameter.compression_level’ deve ser definido.

     O argumento 'options' é um dicionário Python que contém parâmetros
     de compactação avançados.  As chaves e valores válidos para
     parâmetros de compactação estão documentados na documentação *note
     CompressionParameter: 2c88.

     O argumento 'zstd_dict' é uma instância opcional de *note ZstdDict:
     2c87. contendo dados treinados para melhorar a eficiência da
     compactação.  A função *note train_dict(): 2c85. pode ser usada
     para gerar um dicionário Zstandard.

      -- Método: compress (data, mode=ZstdCompressor.CONTINUE)

          Compacte 'data' (um *note objeto bytes ou similar: 193.),
          retornando um objeto *note bytes: 192. com dados compactados,
          se possível, ou, caso contrário, um objeto ‘bytes’ vazio.
          Alguns dos 'data' podem ser armazenados internamente em
          buffer, para uso em chamadas posteriores a ‘compress()’ e
          *note flush(): 2c97.  Os dados retornados devem ser
          concatenados com a saída de quaisquer chamadas anteriores a
          *note compress(): 2c96.

          O argumento 'mode' é um atributo *note ZstdCompressor: 2c81,
          podendo ser definido com *note CONTINUE: 2c98, *note
          FLUSH_BLOCK: 2c99. ou *note FLUSH_FRAME: 2c9a.

          Quando todos os dados forem fornecidos ao compactador, chama o
          método *note flush(): 2c97. para finalizar o processo de
          compactação.  Se *note compress(): 2c96. for chamado com
          'mode' definido como *note FLUSH_FRAME: 2c9a, *note flush():
          2c97. não deve ser chamado, pois gravaria um novo quadro
          vazio.

      -- Método: flush (mode=ZstdCompressor.FLUSH_FRAME)

          Conclui o processo de compressão, retornando um objeto *note
          bytes: 192. contendo todos os dados armazenados nos buffers
          internos do compressor.

          O argumento 'mode' é um atributo *note ZstdCompressor: 2c81,
          podendo ser definido com *note FLUSH_BLOCK: 2c99. ou *note
          FLUSH_FRAME: 2c9a.

      -- Método: set_pledged_input_size (size)

          Especifica a quantidade de 'size' dados descompactados que
          será fornecida para o próximo quadro.  'size' será gravado no
          cabeçalho do quadro do próximo quadro, a menos que *note
          CompressionParameter.content_size_flag: 2c9c. seja ‘False’ ou
          ‘0’.  Um tamanho ‘0’ significa que o quadro está vazio.  Se
          'size' for ‘None’, o cabeçalho do quadro omitirá o tamanho do
          quadro.  Quadros que incluem o tamanho dos dados
          descompactados requerem menos memória para descompactação,
          especialmente em níveis de compactação mais altos.

          Se *note last_mode: 2c9d. não for *note FLUSH_FRAME: 2c9a, uma
          *note ValueError: 2ea. será levantada, pois o compressor não
          está no início de um quadro.  Se o tamanho prometido não
          corresponder ao tamanho real dos dados fornecidos para *note
          compress(): 2c96, chamadas futuras para ‘compress()’ ou *note
          flush(): 2c97. poderão levantar *note ZstdError: 2c8c. e o
          último bloco de dados poderá ser perdido.

          Depois que *note flush(): 2c97. ou *note compress(): 2c96. são
          chamados com o modo *note FLUSH_FRAME: 2c9a, o próximo quadro
          não incluirá o tamanho do quadro no cabeçalho, a menos que
          ‘set_pledged_input_size()’ seja chamado novamente.

      -- Atributo: CONTINUE

          Coleta mais dados para compactação, o que pode ou não gerar
          saída imediata.  Este modo otimiza a taxa de compactação
          maximizando a quantidade de dados por bloco e quadro.

      -- Atributo: FLUSH_BLOCK

          Conclui e grava um bloco no fluxo de dados.  Os dados
          retornados até o momento podem ser descompactados
          imediatamente.  Dados anteriores ainda podem ser referenciados
          em blocos futuros gerados por chamadas a *note compress():
          2c96, melhorando a compactação.

      -- Atributo: FLUSH_FRAME

          Conclui e escreve um quadro.  Dados futuros fornecidos a *note
          compress(): 2c96. serão gravados em um novo quadro e 'não
          poderão' fazer referência a dados passados.

      -- Atributo: last_mode

          O último modo passado para *note compress(): 2c96. ou *note
          flush(): 2c97.  O valor pode ser *note CONTINUE: 2c98, *note
          FLUSH_BLOCK: 2c99. ou *note FLUSH_FRAME: 2c9a.  O valor
          inicial é *note FLUSH_FRAME: 2c9a, significando que o
          compactador está no início de um novo quadro.

 -- Classe: compression.zstd.ZstdDecompressor (zstd_dict=None,
          options=None)

     Cria um objeto descompressor, que pode ser usado para descomprimir
     dados de forma incremental.

     Para uma maneira mais conveniente de descompactar todo um fluxo
     compactado de uma só vez, consulte a função a nível de módulo *note
     decompress(): 2c84.

     O argumento 'options' é um dicionário Python que contém parâmetros
     de descompactação avançados.  As chaves e valores válidos para
     parâmetros de compactação estão documentados na documentação *note
     DecompressionParameter: 2c89.

     O argumento 'zstd_dict' é uma instância de *note ZstdDict: 2c87.
     contendo dados treinados usados durante a compactação.  Este deve
     ser o mesmo dicionário Zstandard usado durante a compactação.

          Nota: Esta classe não lidam de forma transparente entradas
          contendo múltiplos quadros compactados, ao contrário da função
          *note decompress(): 2c84. e da classe *note ZstdFile: 2c80.
          Para descompactar uma entrada com múltiplos quadros, você deve
          usar *note decompress(): 2c84, *note ZstdFile: 2c80. se
          estiver trabalhando com um *note objeto arquivo: 13bf. ou
          múltiplas instâncias de ‘ZstdDecompressor’.

      -- Método: decompress (data, max_length=-1)

          Descompacta dados 'data' (um *note objeto bytes ou similar:
          193.), retornando dados não compactados como bytes.  Alguns
          dos 'data' podem ser armazenados em buffer internamente, para
          uso em chamadas posteriores para ‘decompress()’.  Os dados
          retornados devem ser concatenados com a saída de qualquer
          chamada anterior para ‘decompress()’.

          Se 'max_length' for não negativo, o método 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: 2c9f. será definido como ‘False’.  Neste
          caso, a próxima chamada para *note decompress(): 2c9e. 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:
          2c9f. será definido como ‘True’ .

          Tentar descompactar dados após o final de um quadro levantará
          um erro *note ZstdError: 2c8c.  Quaisquer dados encontrados
          após o final do quadro serão ignorados e salvos no atributo
          *note unused_data: 2ca0.

      -- 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(): 2c9e. puder fornecer
          mais dados descompactados antes de exigir uma nova entrada
          compactada.


File: python.info,  Node: Dicionários de Zstandard,  Next: Advanced parameter control,  Prev: Comprimindo e descomprimindo dados na memória,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.4 Dicionários de Zstandard
.................................

 -- Função: compression.zstd.train_dict (samples, dict_size)

     Treina um dicionário Zstandard, retornando uma instância *note
     ZstdDict: 2c87.  Os dicionários Zstandard permitem uma compactação
     mais eficiente de dados menores, que tradicionalmente são difíceis
     de comprimir devido à menor repetição.  Se você estiver compactando
     vários grupos de dados semelhantes (como arquivos semelhantes), os
     dicionários Zstandard podem melhorar significativamente as taxas de
     compactação e a velocidade.

     O argumento 'samples' (um iterável de objetos *note bytes: 192.) é
     a população de amostras usada para treinar o dicionário Zstandard.

     O argumento 'dict_size', um inteiro, é o tamanho máximo (em bytes)
     que o dicionário Zstandard deve ter.  A documentação do Zstandard
     sugere um máximo absoluto de no máximo 100 KB, mas o máximo pode
     ser menor dependendo dos dados.  Dicionários maiores geralmente
     reduzem a compactação, mas melhoram as taxas de compactação.
     Dicionários menores levam a uma compactação mais rápida, mas
     reduzem a taxa de compactação.

 -- Função: compression.zstd.finalize_dict (zstd_dict, /, samples,
          dict_size, level)

     Uma função avançada para converter um dicionário Zstandard de
     “conteúdo bruto” em um dicionário Zstandard comum.  Dicionários de
     “conteúdo bruto” são uma sequência de bytes que não precisa seguir
     a estrutura de um dicionário Zstandard comum.

     O argumento 'zstd_dict' é uma instância *note ZstdDict: 2c87. com
     *note dict_content: 2ca3. contendo o conteúdo bruto do dicionário.

     O argumento 'samples' (um iterável de objetos *note bytes: 192.)
     contém dados de amostra para gerar o dicionário Zstandard.

     O argumento 'dict_size', um inteiro, é o tamanho máximo (em bytes)
     que o dicionário Zstandard deve ter.  Consulte *note train_dict():
     2c85. para sugestões sobre o tamanho máximo do dicionário.

     O argumento 'level' (um inteiro) é o nível de compactação que se
     espera que seja passado aos compactadores usando este dicionário.
     As informações do dicionário variam para cada nível de compactação,
     portanto, ajustar o nível de compactação adequado pode tornar a
     compactação mais eficiente.

 -- Classe: compression.zstd.ZstdDict (dict_content, /, *, is_raw=False)

     Um invólucro para dicionários Zstandard.  Dicionários podem ser
     usados para melhorar a compactação de muitos pequenos blocos de
     dados.  Use *note train_dict(): 2c85. se precisar treinar um novo
     dicionário a partir de dados de amostra.

     O argumento 'dict_content' (um *note objeto bytes ou similar: 193.)
     é a informação do dicionário já treinada.

     O argumento 'is_raw', um booleano, é um parâmetro avançado que
     controla o significado de 'dict_content'.  ‘True’ significa que
     'dict_content' é um dicionário de “conteúdo bruto”, sem nenhuma
     restrição de formato.  ‘False’ significa que 'dict_content' é um
     dicionário Zstandard comum, criado a partir de funções Zstandard,
     por exemplo, *note train_dict(): 2c85. ou a CLI externa ‘zstd’.

     Ao passar um ‘ZstdDict’ para uma função, os atributos
     ‘as_digested_dict’ e ‘as_undigested_dict’ podem controlar como o
     dicionário é carregado, passando-os como o argumento ‘zstd_dict’,
     por exemplo, ‘compress(data, zstd_dict=zd.as_digested_dict)’.  A
     digestão de um dicionário é uma operação custosa que ocorre ao
     carregar um dicionário Zstandard.  Ao fazer várias chamadas para
     compactação ou descompactação, passar um dicionário digerido
     reduzirá a sobrecarga de carregamento do dicionário.

          Diferença para compactação

                         Dicionário         Dicionário
                         resumido           não resumido
                                            
          -------------------------------------------------
                                            
          Parâmetros     ‘window_log’,      None
          avançados do   ‘hash_log’,        
          compressor     ‘chain_log’,
          que podem      ‘search_log’,
          ser            ‘min_match’,
          substituídos   ‘target_length’,
          pelos          ‘strategy’,
          parâmetros     ‘enable_long_distance_matching’,
          do             ‘ldm_hash_log’,
          dicionário     ‘ldm_min_match’,
                         ‘ldm_bucket_size_log’,
                         ‘ldm_hash_rate_log’
                         e alguns
                         parâmetros
                         não-públicos.
                         
                                            
          ‘ZstdDict’     Sim.  É mais       Não.  Se
          armazena em    rápido carregar    você deseja
          cache          um dicionário      carregar um
          internamente   resumido           dicionário
          o dicionário   novamente com o    não digerido
                         mesmo nível de     várias
                         compactação.       vezes,
                                            considere
                                            reutilizar
                                            um objeto
                                            compressor.
                                            

     Se passar um ‘ZstdDict’ sem nenhum atributo, um dicionário não
     digerido será passado por padrão ao compactar e um dicionário
     digerido será gerado, se necessário, e passado por padrão ao
     descompactar.

           -- Atributo: dict_content

               The content of the Zstandard dictionary, a ‘bytes’
               object.  It’s the same as the 'dict_content' argument in
               the ‘__init__’ method.  It can be used with other
               programs, such as the ‘zstd’ CLI program.

           -- Atributo: dict_id

               Identifier of the Zstandard dictionary, a non-negative
               int value.

               Non-zero means the dictionary is ordinary, created by
               Zstandard functions and following the Zstandard format.

               ‘0’ means a “raw content” dictionary, free of any format
               restriction, used for advanced users.

                    Nota: The meaning of ‘0’ for ‘ZstdDict.dict_id’ is
                    different from the ‘dictionary_id’ attribute to the
                    *note get_frame_info(): 2ca5. function.

           -- Atributo: as_digested_dict

               Load as a digested dictionary.

           -- Atributo: as_undigested_dict

               Load as an undigested dictionary.


File: python.info,  Node: Advanced parameter control,  Next: Diversos<3>,  Prev: Dicionários de Zstandard,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.5 Advanced parameter control
...................................

 -- Classe: compression.zstd.CompressionParameter

     Uma *note IntEnum: ecf. contendo as chaves de parâmetros de
     compactação avançada que podem ser usadas ao compactar dados.

     The *note bounds(): 2c95. method can be used on any attribute to
     get the valid values for that parameter.

     Parameters are optional; any omitted parameter will have it’s value
     selected automatically.

     Exemplo de obtenção da delimitação inferior e superior de *note
     compression_level: 2c94.:

          lower, upper = CompressionParameter.compression_level.bounds()

     Example setting the *note window_log: 2ca9. to the maximum size:

          _lower, upper = CompressionParameter.window_log.bounds()
          options = {CompressionParameter.window_log: upper}
          compress(b'venezuelan beaver cheese', options=options)

      -- Método: bounds ()

          Retorna a tupla de limites int, ‘(lower, upper)’, de um
          parâmetro de compressão.  Este método deve ser chamado no
          atributo cujos limites você deseja recuperar.  Por exemplo,
          para obter os valores válidos para *note compression_level:
          2c94, pode-se verificar o resultado de
          ‘CompressionParameter.compression_level.bounds()’.

          Both the lower and upper bounds are inclusive.

      -- Atributo: compression_level

          Um meio de alto nível para definir outros parâmetros de
          compactação que afetam a velocidade e a taxa de compactação de
          dados.

          Os níveis de compactação regulares são maiores que ‘0’.
          Valores maiores que ‘20’ são considerados compactação “ultra”
          e requerem mais memória do que outros níveis.  Valores
          negativos podem ser usados para compensar uma compactação mais
          rápida por taxas de compactação piores.

          Define o nível como zero usa *note COMPRESSION_LEVEL_DEFAULT:
          2caa.

      -- Atributo: window_log

          Distância máxima de referência reversa permitida que o
          compressor pode usar ao compactar dados, expressa como
          potência de dois, ‘1 << window_log’ bytes.  Este parâmetro
          influencia bastante o uso de memória da compactação.  Valores
          mais altos requerem mais memória, mas geram melhores valores
          de compactação.

          A value of zero causes the value to be selected automatically.

      -- Atributo: hash_log

          Tamanho da tabela de sondagem inicial, como uma potência de
          dois.  O uso de memória resultante é ‘1 << (hash_log+2)’
          bytes.  Tabelas maiores melhoram a taxa de compressão de
          estratégias <= *note dfast: 2cac. e melhoram a velocidade de
          compactação de estratégias > *note dfast: 2cac.

          A value of zero causes the value to be selected automatically.

      -- Atributo: chain_log

          Tamanho da tabela de busca multiprobe, como uma potência de
          dois.  O uso de memória resultante é ‘1 << (chain_log+2)’
          bytes.  Tabelas maiores resultam em uma compactação melhor e
          mais lenta.  Este parâmetro não tem efeito para a estratégia
          *note fast: 2cae.  Ele ainda é útil ao usar a estratégia *note
          dfast: 2cac, caso em que define uma tabela de sondagem
          secundária.

          A value of zero causes the value to be selected automatically.

      -- Atributo: search_log

          Número de tentativas de busca, como uma potência de dois.
          Mais tentativas resultam em uma compressão melhor e mais
          lenta.  Este parâmetro é inútil para as estratégias *note
          fast: 2cae. e *note dfast: 2cac.

          A value of zero causes the value to be selected automatically.

      -- Atributo: min_match

          Tamanho mínimo das correspondências pesquisadas.  Valores
          maiores aumentam a velocidade de compactação e descompactação,
          mas diminuem a taxa.  Observe que o Zstandard ainda consegue
          encontrar correspondências de tamanho menor; ele apenas ajusta
          seu algoritmo de busca para procurar por esse tamanho e por
          tamanhos maiores.  Para todas as estratégias < *note btopt:
          2cb1, o mínimo efetivo é ‘4’; para todas as estratégias >
          *note fast: 2cae, o máximo efetivo é ‘6’.

          A value of zero causes the value to be selected automatically.

      -- Atributo: target_length

          The impact of this field depends on the selected *note
          Strategy: 2c8a.

          Para as estratégias *note btopt: 2cb1, *note btultra: 2cb3. e
          *note btultra2: 2cb4, o valor é o comprimento de uma
          correspondência considerada “boa o suficiente” para
          interromper a busca.  Valores maiores melhoram as taxas de
          compactação, mas a compactação é mais lenta.

          Para a estratégia *note fast: 2cae, é a distância entre as
          amostragens de correspondência.  Valores maiores tornam a
          compactação mais rápida, mas com uma taxa de compactação pior.

          A value of zero causes the value to be selected automatically.

      -- Atributo: strategy

          Quanto maior o valor da estratégia selecionada, mais complexa
          será a técnica de compactação usada pelo zstd, resultando em
          taxas de compactação mais altas, mas em compactação mais
          lenta.

          Ver também
          ..........

          *note Strategy: 2c8a.

      -- Atributo: enable_long_distance_matching

          A correspondência de longa distância pode ser usada para
          melhorar a compactação de entradas grandes, encontrando
          correspondências maiores em distâncias maiores.  Ela aumenta o
          uso de memória e o tamanho da janela.

          ‘True’ or ‘1’ enable long distance matching while ‘False’ or
          ‘0’ disable it.

          Habilitar este parâmetro aumenta o tamanho padrão de *note
          window_log: 2ca9. para 128 MiB, exceto quando expressamente
          definido com um valor diferente.  Esta configuração é
          habilitada por padrão se ‘window_log’ >= 128 MiB e a
          estratégia de compactação >= *note btopt: 2cb1. (nível de
          compactação 16+).

      -- Atributo: ldm_hash_log

          Tamanho da tabela para correspondência de longa distância,
          como uma potência de dois.  Valores maiores aumentam o uso de
          memória e a taxa de compactação, mas diminuem a velocidade de
          compactação.

          A value of zero causes the value to be selected automatically.

      -- Atributo: ldm_min_match

          Tamanho mínimo de correspondência para correspondência de
          longa distância.  Valores maiores ou muito pequenos podem
          frequentemente diminuir a taxa de compactação.

          A value of zero causes the value to be selected automatically.

      -- Atributo: ldm_bucket_size_log

          Tamanho do log de cada bucket na tabela hash do comparador de
          longa distância para resolução de colisões.  Valores maiores
          melhoram a resolução de colisões, mas diminuem a velocidade de
          compactação.

          A value of zero causes the value to be selected automatically.

      -- Atributo: ldm_hash_rate_log

          Frequência de inserção/pesquisa de entradas na tabela hash do
          comparador de longa distância.  Valores maiores melhoram a
          velocidade de compactação.  Desvios muito grandes em relação
          ao valor padrão provavelmente resultarão em uma redução na
          taxa de compactação.

          A value of zero causes the value to be selected automatically.

      -- Atributo: content_size_flag

          Escreve o tamanho dos dados a serem compactados no cabeçalho
          do quadro Zstandard quando conhecido antes da compactação.

          This flag only takes effect under the following scenarios:

             * Chamando *note compress(): 2c83. para compactação única

             * Fornecendo todos os dados a serem compactados no quadro
               em uma única chamada *note ZstdCompressor.compress():
               2c96, com o modo *note ZstdCompressor.FLUSH_FRAME: 2c9a.

             * Chamando *note ZstdCompressor.set_pledged_input_size():
               2c9b. com a quantidade exata de dados que serão
               fornecidos ao compressor antes de qualquer chamada para
               *note ZstdCompressor.compress(): 2c96. para o quadro
               atual.  ‘ZstdCompressor.set_pledged_input_size()’ deve
               ser chamado para cada novo quadro.

          Todas as outras chamadas de compressão podem não escrever as
          informações de tamanho no cabeçalho do quadro.

          ‘True’ or ‘1’ enable the content size flag while ‘False’ or
          ‘0’ disable it.

      -- Atributo: checksum_flag

          Uma soma de verificação de quatro bytes usando XXHash64 do
          conteúdo descompactado é estrita ao final de cada quadro.  O
          código de descompactação do Zstandard verifica a soma de
          verificação.  Se houver uma incompatibilidade, uma exceção
          *note ZstdError: 2c8c. é levantada.

          ‘True’ or ‘1’ enable checksum generation while ‘False’ or ‘0’
          disable it.

      -- Atributo: dict_id_flag

          Ao compactar com um *note ZstdDict: 2c87, o ID do dicionário é
          escrito no cabeçalho do quadro.

          ‘True’ or ‘1’ enable storing the dictionary ID while ‘False’
          or ‘0’ disable it.

      -- Atributo: nb_workers

          Seleciona quantas threads serão geradas para compactação em
          paralelo.  Quando ‘nb_workers’ > 0, habilita a compactação
          multithread, um valor ‘1’ significa “modo multithread de uma
          thread”.  Mais workers melhoram a velocidade, mas também
          aumentam o uso de memória e reduzem ligeiramente a taxa de
          compactação.

          A value of zero disables multi-threading.

      -- Atributo: job_size

          Tamanho de um trabalho de compactação, em bytes.  Este valor é
          aplicado somente quando *note nb_workers: 2cbd. >= 1.  Cada
          trabalho de compactação é concluído em paralelo, portanto,
          este valor pode impactar indiretamente o número de threads
          ativas.

          A value of zero causes the value to be selected automatically.

      -- Atributo: overlap_log

          Define a quantidade de dados recarregados de trabalhos
          anteriores (threads) para novos trabalhos a serem usados pela
          janela “Look Behind” durante a compactação.  Este valor só é
          usado quando *note nb_workers: 2cbd. >= 1.  Os valores
          aceitáveis variam de 0 a 9.

                  * 0 significa definir dinamicamente a quantidade de
                    sobreposição

                  * 1 significa nenhuma sobreposição

                  * 9 significa usar o tamanho total da janela do
                    trabalho anterior

          Cada incremento reduz pela metade/dobra o tamanho da
          sobreposição.  “8” significa uma sobreposição de
          ‘window_size/2’, “7” significa uma sobreposição de
          ‘window_size/4’, etc.

 -- Classe: compression.zstd.DecompressionParameter

     An *note IntEnum: ecf. containing the advanced decompression
     parameter keys that can be used when decompressing data.
     Parameters are optional; any omitted parameter will have it’s value
     selected automatically.

     The *note bounds(): 2cc0. method can be used on any attribute to
     get the valid values for that parameter.

     Example setting the *note window_log_max: 2cc1. to the maximum
     size:

          data = compress(b'Some very long buffer of bytes...')

          _lower, upper = DecompressionParameter.window_log_max.bounds()

          options = {DecompressionParameter.window_log_max: upper}
          decompress(data, options=options)

      -- Método: bounds ()

          Return the tuple of int bounds, ‘(lower, upper)’, of a
          decompression parameter.  This method should be called on the
          attribute you wish to retrieve the bounds of.

          Both the lower and upper bounds are inclusive.

      -- Atributo: window_log_max

          The base-two logarithm of the maximum size of the window used
          during decompression.  This can be useful to limit the amount
          of memory used when decompressing data.  A larger maximum
          window size leads to faster decompression.

          A value of zero causes the value to be selected automatically.

 -- Classe: compression.zstd.Strategy

     An *note IntEnum: ecf. containing strategies for compression.
     Higher-numbered strategies correspond to more complex and slower
     compression.

          Nota: The values of attributes of ‘Strategy’ are not
          necessarily stable across zstd versions.  Only the ordering of
          the attributes may be relied upon.  The attributes are listed
          below in order.

     The following strategies are available:

      -- Atributo: fast

      -- Atributo: dfast

      -- Atributo: greedy

      -- Atributo: lazy

      -- Atributo: lazy2

      -- Atributo: btlazy2

      -- Atributo: btopt

      -- Atributo: btultra

      -- Atributo: btultra2


File: python.info,  Node: Diversos<3>,  Next: Exemplos<8>,  Prev: Advanced parameter control,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.6 Diversos
.................

 -- Função: compression.zstd.get_frame_info (frame_buffer)

     Retrieve a *note FrameInfo: 2cc7. object containing metadata about
     a Zstandard frame.  Frames contain metadata related to the
     compressed data they hold.

 -- Classe: compression.zstd.FrameInfo

     Metadata related to a Zstandard frame.

      -- Atributo: decompressed_size

          The size of the decompressed contents of the frame.

      -- Atributo: dictionary_id

          An integer representing the Zstandard dictionary ID needed for
          decompressing the frame.  ‘0’ means the dictionary ID was not
          recorded in the frame header.  This may mean that a Zstandard
          dictionary is not needed, or that the ID of a required
          dictionary was not recorded.

 -- Atributo: compression.zstd.COMPRESSION_LEVEL_DEFAULT

     The default compression level for Zstandard: ‘3’.

 -- Atributo: compression.zstd.zstd_version_info

     Version number of the runtime zstd library as a tuple of integers
     (major, minor, release).


File: python.info,  Node: Exemplos<8>,  Prev: Diversos<3>,  Up: compression zstd — Compactação compatível com o formato Zstandard

5.13.2.7 Exemplos
.................

Reading in a compressed file:

     from compression import zstd

     with zstd.open("file.zst") as f:
         file_content = f.read()

Creating a compressed file:

     from compression import zstd

     data = b"Insert Data Here"
     with zstd.open("file.zst", "w") as f:
         f.write(data)

Compressing data in memory:

     from compression import zstd

     data_in = b"Insert Data Here"
     data_out = zstd.compress(data_in)

Incremental compression:

     from compression import zstd

     comp = zstd.ZstdCompressor()
     out1 = comp.compress(b"Some data\n")
     out2 = comp.compress(b"Another piece of data\n")
     out3 = comp.compress(b"Even more data\n")
     out4 = comp.flush()
     # Concatenate all the partial results:
     result = b"".join([out1, out2, out3, out4])

Writing compressed data to an already-open file:

     from compression import zstd

     with open("myfile", "wb") as f:
         f.write(b"This data will not be compressed\n")
         with zstd.open(f, "w") as zstf:
             zstf.write(b"This *will* be compressed\n")
         f.write(b"Not compressed\n")

Creating a compressed file using compression parameters:

     from compression import zstd

     options = {
        zstd.CompressionParameter.checksum_flag: 1
     }
     with zstd.open("file.zst", "w", options=options) as f:
         f.write(b"Mind if I squeeze in?")


File: python.info,  Node: zlib — Compactação compatível com gzip,  Next: gzip — Suporte para arquivos gzip,  Prev: compression zstd — Compactação compatível com o formato Zstandard,  Up: Compressão de Dados e Arquivamento

5.13.3 ‘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 em
‘http://www.zlib.net/manual.html’ para obter informações oficiais.

Para leitura e escrita de arquivos ‘.gz’, consulte o módulo *note gzip:
6b.

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=-1, wbits=MAX_WBITS)

     Comprime os bytes em 'data', retornando um objeto de bytes que
     contém dados comprimidos.  'level' é um inteiro de ‘0’ a ‘9’ ou
     ‘-1’ que controla o nível de compressão; ‘1’ (Z_BEST_SPEED) é o
     mais rápido e produz a menor compressão, ‘9’ (Z_BEST_COMPRESSION) é
     o mais lento e produz a maior.  ‘0’ (Z_NO_COMPRESSION) não produz
     compactação.  O valor padrão é ‘-1’ (Z_DEFAULT_COMPRESSION).
     Z_DEFAULT_COMPRESSION representa um meio termo entre velocidade e
     compressão (atualmente equivale ao nível 6).  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’ (MAX_WBITS):

        * +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: 2ccf, 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=-1, 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' é o nível de compactação – um número inteiro de ‘0’ a ‘9’
     ou ‘-1’.  Um valor de ‘1’ (Z_BEST_SPEED) é mais rápido e produz a
     menor compactação, enquanto um valor de ‘9’ (Z_BEST_COMPRESSION) é
     mais lento e produz o máximo.  ‘0’ (Z_NO_COMPRESSION) é nenhuma
     compactação.  O valor padrão é ‘-1’ (Z_DEFAULT_COMPRESSION).
     Z_DEFAULT_COMPRESSION representa um meio termo padrão entre
     velocidade e compactação (atualmente equivalente ao nível 6).

     'method' é o algoritmo de compactação.  Atualmente, o único valor
     suportado é ‘DEFLATED’.

     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(): 2cd0.

     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 ‘Z_DEFAULT_STRATEGY’, ‘Z_FILTERED’,
     ‘Z_HUFFMAN_ONLY’, ‘Z_RLE’ (zlib 1.2.0.1) e ‘Z_FIXED’ (zlib
     1.2.2.2).

     'zdict' é um dicionário de compactação predefinido.  Esta é uma
     sequência de bytes (como um objeto *note bytes: 192.) 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: 2ccf. 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():
     2cd1, 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:
     2ccf.  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(): 2cd2.

     O parâmetro 'zdict' especifica uma dicionário pre-definido de
     compressão.  Se fornecido, deve ser o mesmo dicionário usado pelo
     compressor que produziu os dados a serem descompactados.

          Nota: Se 'zdict' for um objeto mutável (como um *note
          bytearray: 342.), você não deve modificar seu conteúdo entre a
          chamada de *note decompressobj(): 2cd3. 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(): 844.  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 ‘Z_NO_FLUSH’ , ‘Z_PARTIAL_FLUSH’,
     ‘Z_SYNC_FLUSH’, ‘Z_FULL_FLUSH’, ‘Z_BLOCK’ (zlib 1.2.3.4) ou
     ‘Z_FINISH’, com o padrão sendo ‘Z_FINISH’.  Exceto ‘Z_FINISH’,
     todas as demais constantes permitem a compactação de mais
     bytestrings de dados, enquanto ‘Z_FINISH’ finaliza o fluxo
     compactado e impede a compactação de mais dados.  Depois de chamar
     *note flush(): 2cd5. com 'mode' definido como ‘Z_FINISH’, o método
     *note compress(): 844. 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(): 74c. e *note
copy.deepcopy(): d59. foram adicionadas como suporte para a compressão
de objetos.

Um objeto do tipo Decompress 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(): efd. 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(): efd.
     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(): efd. .  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:
     2cd8. .  Esse bytestring deve ser passado para uma chamada
     subsequente a *note decompress(): efd. se a descompressão tiver que
     continuar.  Se 'max_length' for zero, toda a entrada será
     descompactada e *note unconsumed_tail: 2cd8. 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(): 2cda, o método *note decompress(): efd.
     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 descompressão.  Isso pode ser usado
     para salvar o estado do descompressor 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(): 74c. e *note
copy.deepcopy(): d59. foram adicionadas como suporte para a
descompressão de objetos.

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: 136a.

 -- Dado: zlib.ZLIB_RUNTIME_VERSION

     Uma string com a versão da biblioteca zlib atualmente utilizada
     pelo interpretador.

     Adicionado na versão 3.3.

 -- Dado: zlib.ZLIBNG_VERSION

     A string de versão da biblioteca zlib-ng que foi usada para
     construir o módulo, caso o zlib-ng tenha sido usado.  Quando
     presentes, as constantes *note ZLIB_VERSION: 2cdc. e *note
     ZLIB_RUNTIME_VERSION: 136a. refletem a versão da API zlib fornecida
     pelo zlib-ng.

     Se zlib-ng não foi usado para construir o módulo, esta constante
     estará ausente.

     Adicionado na versão 3.14.

Ver também
..........

módulo *note gzip: 6b.

     Leia e escreva arquivos no formato ‘gzip’

‘http://www.zlib.net’

     A página inicial da biblioteca zlib.

‘http://www.zlib.net/manual.html’

     O manual da zlib explica a semântica e uso de diversas funções
     desta biblioteca.

Caso a (des)compressão do gzip seja um gargalo, o pacote python-isal(2)
acelera a (des)compressão com uma API quase sempre compatível.

   ---------- Footnotes ----------

   (1) https://zlib.net/zlib_faq.html#faq33

   (2) 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.4 ‘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: 139.

O módulo *note gzip: 6b. fornece a classe *note GzipFile: 650, bem como
as funções de conveniência *note open(): 2ce1, *note compress(): 843. e
*note decompress(): 1409.  A classe *note GzipFile: 650. lê e grava
arquivos no formato ‘gzip’, compactando ou descompactando
automaticamente os dados para que se pareçam com um *note objeto
arquivo: 13bf. 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: 13bf.

     O argumento 'filename' pode ser um nome de arquivo real (um objeto
     *note str: 169. ou *note bytes: 192.), 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: 650.

     Para o modo binário, esta função equivale ao construtor de *note
     GzipFile: 650.: ‘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: 650. é criado e
     encapsulado em uma instância *note io.TextIOWrapper: 9b4. 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:
     59a.

 -- Exceção: gzip.BadGzipFile

     Uma exceção levantada para arquivos gzip inválidos.  Herda de *note
     OSError: 2bf.  *note EOFError: 14d5. e *note zlib.error: 2ccf.
     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: 650, que simula a maioria
     dos métodos de um *note objeto arquivo: 13bf, com exceção do método
     *note truncate(): 150c.  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: 109a. 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(): 2ce1. (ou
     envolva seu *note GzipFile: 650. com um *note io.TextIOWrapper:
     9b4.).

     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: 2ce2. que é definido durante a
     descompactação.

     Chamar o método ‘close()’ de um objeto *note GzipFile: 650. 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: 109a. aberto para escrita como 'fileobj' e
     recupere o buffer de memória resultante usando o método *note
     getvalue(): 2ce3. do objeto *note io.BytesIO: 109a.

     *note GzipFile: 650. suporta a interface *note io.BufferedIOBase:
     898, incluindo iteração e a instrução *note with: 186.  Apenas o
     método *note truncate(): 150c. não é implementado.

     *note GzipFile: 650. 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(): 1408. não altere a
               posição do arquivo *note GzipFile: 650, ele pode alterar
               a posição do objeto arquivo subjacente (por exemplo, se o
               *note GzipFile: 650. 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: 169.
          ou *note bytes: 192.  Equivalente à saída de *note
          os.fspath(): e41. 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: 186, juntamente com o argumento do construtor 'mtime' e
     o atributo *note mtime: 2ce2.

     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():
     2ce5. 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: 193. arbitrários.  O método *note
     read(): 1524. agora aceita o argumento ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

     Descontinuado desde a versão 3.9: Abrir *note GzipFile: 650. 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: 726.

 -- Função: gzip.compress (data, compresslevel=9, *, mtime=0)

     Compacta 'data', retornando um objeto *note bytes: 192. contendo os
     dados compactados.  'compresslevel' e 'mtime' têm o mesmo
     significado que no construtor de *note GzipFile: 650. acima, mas
     'mtime' assume o valor padrão 0 para uma saída reprodutível.

     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(): 844. 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.

     Alterado na versão 3.14: O parâmetro 'mtime' agora assume o valor
     padrão 0 para uma saída reprodutível.  Para o comportamento
     anterior de usar a hora atual, passe ‘None’ para 'mtime'.

 -- Função: gzip.decompress (data)

     Descompacta 'data', retornando um objeto *note bytes: 192. 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(): efd. 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<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/gzip.py


File: python.info,  Node: Exemplos de uso,  Next: Interface de linha de comando<3>,  Up: gzip — Suporte para arquivos gzip

5.13.4.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: 139.

     O módulo básico de compactação de dados necessário para dar suporte
     ao formato de arquivo do ‘gzip’.

Caso a (des)compressão do gzip seja um gargalo, o pacote python-isal(1)
acelera a (des)compressã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<3>,  Prev: Exemplos de uso,  Up: gzip — Suporte para arquivos gzip

5.13.4.2 Interface de linha de comando
......................................

O módulo *note gzip: 6b. fornece uma interface de linha de comando
simples para compactar ou descompactar arquivos.

Uma vez executado, o módulo *note gzip: 6b. 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 da linha de comando::


File: python.info,  Node: Opções da linha de comando,  Up: Interface de linha de comando<3>

5.13.4.3 Opções da linha de comando
...................................

 -- Option: file

     Se o 'arquivo' não for especificado, ler de *note sys.stdin: 754.

 -- 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.5 ‘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: 14. contém:

   * A função *note open(): 1289. e a classe *note BZ2File: a5c. para
     leitura e escrita de arquivos compactados.

   * As classes *note BZ2Compressor: 1a06. e *note BZ2Decompressor:
     1a04. para (des)compressão incremental.

   * As funções *note compress(): 2717. e *note decompress(): 128a. para
     (des)compressã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.14/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.5.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: 13bf.

     Assim como no construtor para *note BZ2File: a5c, o argumento
     'filename' pode ser um nome de arquivo real (um objeto *note str:
     169. ou *note bytes: 192.), 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: a5c.

     Para o modo binário, esta função é equivalente ao construtor de
     *note BZ2File: a5c.: ‘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: a5c. é criado e envolto
     em uma instância *note io.TextIOWrapper: 9b4. 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:
     59a.

 -- 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: 169. ou *note bytes: 192,
     abra o arquivo nomeado diretamente.  Caso contrário, 'filename'
     deve ser um *note objeto arquivo: 13bf, 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: a5c. fornece todos os membros especificados pelo
     *note io.BufferedIOBase: 898, exceto *note detach(): 2c8e. e *note
     truncate(): 150c.  Iteração e a instrução *note with: 186. são
     suportadas.

     *note BZ2File: a5c. 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(): 2cf6. não altera a
               posição do arquivo de *note BZ2File: a5c, pode alterar a
               posição do objeto arquivo subjacente (por exemplo, se o
               *note BZ2File: a5c. 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:
          2c92. do *note objeto arquivo: 13bf. subjacente.

          Adicionado na versão 3.13.

     Alterado na versão 3.1: Suporte para a instrução *note with: 186.
     foi adicionado.

     Alterado na versão 3.3: Foi adicionado suporte para 'filename' ser
     um *note objeto arquivo: 13bf. 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(): 1524. agora aceita
     um argumento de ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

     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: 6b. e *note lzma: 8e.
     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.5.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(): 2717.

     '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(): 2d01. 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(): 128a.

          Nota: Esta classe não trata de forma transparente entradas
          contendo múltiplos fluxos compactados, ao contrário de *note
          decompress(): 128a. e *note BZ2File: a5c.  Se você precisar
          descompactar uma entrada multifluxo com *note BZ2Decompressor:
          1a04, você deve usar um novo descompactador para cada fluxo.

      -- Método: decompress (data, max_length=-1)

          Descompacta dados 'data' (um *note objeto bytes ou similar:
          193.), retornando dados não compactados como bytes.  Alguns
          dos 'data' podem ser armazenados em buffer internamente, para
          uso em chamadas posteriores para *note decompress(): 128a.  Os
          dados retornados devem ser concatenados com a saída de
          qualquer chamada anterior para *note decompress(): 128a.

          Se 'max_length' for não negativo, retornará no máximo
          'max_length' bytes de dados descompactados.  Se este limite
          for atingido e mais saída puder ser produzida, o atributo
          *note needs_input: 2d02. será definido como ‘False’.  Neste
          caso, a próxima chamada para *note decompress(): fbe. pode
          fornecer 'data' como ‘b''’ para obter mais saída.

          Se todos os dados de entrada foram descompactados e retornados
          (seja porque era menor que 'max_length' bytes, ou porque
          'max_length' era negativo), o atributo *note needs_input:
          2d02. será definido como ‘True’ .

          A tentativa de descompactar os dados após o final do fluxo ser
          atingido gera um *note EOFError: 14d5.  Quaisquer dados
          encontrados após o final do fluxo são ignorados e salvos no
          atributo *note unused_data: 2d03.

          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 compactado.

          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(): fbe. puder fornecer
          mais dados descompactados antes de exigir uma nova entrada
          descompactada.

          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.5.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: 193.

     'compresslevel', se fornecido, deve ser um inteiro entre ‘1’ e ‘9’.
     O padrão é ‘9’.

     Para compressão incremental, use um *note BZ2Compressor: 1a06.

 -- Função: bz2.decompress (data)

     Descompacta 'data', um *note objeto bytes ou similar: 193.

     Se 'data' for a concatenação de vários fluxos compactados,
     descompacta todos os fluxos.

     Para descompressão incremental, use um *note BZ2Decompressor: 1a04.

     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.5.4 Exemplos de uso
........................

Abaixo estão alguns exemplos de uso típico do módulo *note bz2: 14.

Usando *note compress(): 2717. e *note decompress(): 128a. 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: 1a06. 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.6 ‘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: 14.  Observe que *note LZMAFile: 1202. e *note bz2.BZ2File:
a5c. 'não' são seguro para thread, portanto, se você precisar usar uma
única instância *note LZMAFile: 1202. 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: Lendo e escrevendo arquivos comprimidos<2>.
* Comprimindo e descomprimindo dados na memória: Comprimindo e descomprimindo dados na memória<2>.
* Diversos: Diversos<4>.
* Especificando cadeias de filtros personalizadas::
* Exemplos: Exemplos<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/lzma.py


File: python.info,  Node: Lendo e escrevendo arquivos comprimidos<2>,  Next: Comprimindo e descomprimindo dados na memória<2>,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.6.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: 13bf.

     O argumento 'filename' pode ser um nome de arquivo real (dado como
     um objeto *note str: 169, *note bytes: 192. ou *note caminho ou
     similar: 59a.), 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:
     1a03.  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: 1a05.

     Para o modo binário, esta função é equivalente ao construtor *note
     LZMAFile: 1202.: ‘LZMAFile(filename, mode, ...)’.  Nesse caso, os
     argumentos 'encoding', 'errors' e 'newline' não devem ser
     fornecidos.

     Para o modo texto, um objeto *note LZMAFile: 1202. é criado e
     encapsulado em uma instância *note io.TextIOWrapper: 9b4. 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:
     59a.

 -- 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: 1202. pode envolver um *note objeto arquivo:
     13bf. 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: 169,
     *note bytes: 192. ou *note objeto caminho ou similar: 59a.).  Ao
     agrupar um objeto arquivo existente, o arquivo agrupado não será
     fechado quando o *note LZMAFile: 1202. 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:
     1a03.  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: 1a05.

     *note LZMAFile: 1202. suporta todos os membros especificados por
     *note io.BufferedIOBase: 898, exceto *note detach(): 2c8e. e *note
     truncate(): 150c.  Iteração e a instrução *note with: 186. 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(): 2d0e. não altera a
               posição do arquivo de *note LZMAFile: 1202, pode alterar
               a posição do objeto arquivo subjacente (por exemplo, se o
               *note LZMAFile: 1202. 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:
          2c92. do *note objeto arquivo: 13bf. 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(): 1524. agora aceita
     um argumento de ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.


File: python.info,  Node: Comprimindo e descomprimindo dados na memória<2>,  Next: Diversos<4>,  Prev: Lendo e escrevendo arquivos comprimidos<2>,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.6.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(): 2d12.

     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:
               1a03.).

     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: 2d0b. 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: 1a05. 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: 2d13. para detalhes.

      -- Método: compress (data)

          Comprime 'data' (um objeto *note bytes: 192.), retornando um
          objeto *note bytes: 192. contendo dados comprimidos para pelo
          menos parte da entrada.  Alguns dos 'data' podem ser
          armazenados internamente, para uso em chamadas posteriores
          para *note compress(): 2d12. e *note flush(): 2d15.  Os dados
          retornados devem ser concatenados com a saída de quaisquer
          chamadas anteriores para *note compress(): 2d12.

      -- Método: flush ()

          Conclui o processo de compressão, retornando um objeto *note
          bytes: 192. 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():
     2d16.

     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:
     2d0b. 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: 2d13. 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(): 2d16. e *note LZMAFile: 1202.  Para descomprimir
          uma entrada multi-fluxo com *note LZMADecompressor: 1a03, 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:
          193.), retornando dados não comprimidos como bytes.  Alguns
          dos 'data' podem ser armazenados em buffer internamente, para
          uso em chamadas posteriores para *note decompress(): 2d16.  Os
          dados retornados devem ser concatenados com a saída de
          qualquer chamada anterior para *note decompress(): 2d16.

          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: 2d17. será definido como ‘False’.  Neste
          caso, a próxima chamada para *note decompress(): 1023. 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:
          2d17. será definido como ‘True’ .

          A tentativa de descomprimir os dados após o final do fluxo ser
          atingido gera um *note EOFError: 14d5.  Quaisquer dados
          encontrados após o final do fluxo são ignorados e salvos no
          atributo *note unused_data: 2d18.

          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(): 1023. 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: 192.), retornando os dados
     comprimidos como um objeto *note bytes: 192.

     Veja *note LZMACompressor: 1a05. 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: 192.), retornando os
     dados não comprimidos como um objeto *note bytes: 192.

     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: 1a03. acima para uma descrição dos
     argumentos 'format', 'memlimit' e 'filters'.


File: python.info,  Node: Diversos<4>,  Next: Especificando cadeias de filtros personalizadas,  Prev: Comprimindo e descomprimindo dados na memória<2>,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.6.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<9>,  Prev: Diversos<4>,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.6.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<9>,  Prev: Especificando cadeias de filtros personalizadas,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.6.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.7 ‘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 atualmente não suporta arquivos ZIP multi-disco.  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: 1a84, 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: 2d24. para detalhes do construtor.

 -- Classe: zipfile.Path

     Classe que implementa um subconjunto da interface fornecida por
     *note pathlib.Path: 265, incluindo a interface completa *note
     importlib.resources.abc.Traversable: 2f8.

     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(): 2d25. e *note infolist(): 2d26. de objetos da
     classe *note ZipFile: 8c8.  A maioria dos usuários do módulo *note
     zipfile: 137. 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:
     2d27.

     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.

      -- Método: _for_archive (archive)

          Resolve os atributos date_time, compression e external para
          padrões adequados, conforme usado por *note
          ZipFile.writestr(): 2cb.

          Retorna self para encadeamento.

          Adicionado na versão 3.14.

 -- 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: 139. .

 -- Dado: zipfile.ZIP_BZIP2

     Código numérico para o método de compactação BZIP2.  Requer o
     módulo *note bz2: 14.

     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: 8e.

     Adicionado na versão 3.3.

 -- Dado: zipfile.ZIP_ZSTANDARD

     Código numérico para a compactação com Zstandard.  Requer o módulo
     *note compression.zstd: 23.

          Nota: No APPNOTE 6.3.7, o ID do método ‘20’ foi atribuído à
          compactação Zstandard.  No APPNOTE 6.3.8, esse ID foi alterado
          para o ID do método ‘93’ para evitar conflitos, com o ID do
          método ‘20’ sendo descontinuado.  Para compatibilidade, o
          módulo ‘zipfile’ lê ambos os IDs de método, mas gravará apenas
          dados com o ID do método ‘93’.

     Adicionado na versão 3.14.

     Nota: A especificação do formato ZIP incluiu suporte para
     compactação bzip2 desde 2001, para compactação LZMA desde 2006 e
     para compactação Zstandard desde 2020.  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::
* Armadilhas de descompressão::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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.7.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: 59a.

     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: 1216. 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: 2d28, *note ZIP_DEFLATED:
     2d29, *note ZIP_BZIP2: 2d2a, *note ZIP_LZMA: 2d2b. e *note
     ZIP_ZSTANDARD: 2d2c.; valores desconhecidos devem causar *note
     NotImplementedError: 368. ser levantada.  Se *note ZIP_DEFLATED:
     2d29, *note ZIP_BZIP2: 2d2a, *note ZIP_LZMA: 2d2b. ou *note
     ZIP_ZSTANDARD: 2d2c. for especificado mas o módulo correspondente
     (*note zlib: 139, *note bz2: 14, *note lzma: 8e. e *note
     compression.zstd: 23.) não estiver disponível, é levantada uma
     exceção *note RuntimeError: 243.  O valor padrão é *note
     ZIP_STORED: 2d28.

     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: 137. 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: 2d28.
     ou *note ZIP_LZMA: 2d2b. não tem efeito.  Quando usado *note
     ZIP_DEFLATED: 2d29. inteiros de ‘0’ a ‘9’ são aceitos (veja *note
     zlib: 2cd1. para mais informações).  Quando usado *note ZIP_BZIP2:
     2d2a. inteiros de ‘1’ a ‘9’ são aceitos (veja *note bz2: a5c. para
     mais informações).  Ao usar *note ZIP_ZSTANDARD: 2d2c, os inteiros
     ‘-131072’ a ‘22’ são comumente aceitos (consulte *note
     CompressionParameter.compression_level: 2c94. para obter mais
     informações sobre como recuperar valores válidos e seus
     significados).

     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: 186.  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.  Atualmente, 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: 8c8.
     como um gerenciador de contexto.

     Alterado na versão 3.3: Adicionado suporte para compactação *note
     bzip2: 14. e *note lzma: 8e.

     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: 243. 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: 59a.

     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(): 2d2e. antes de
     sair do seu programa ou registros essenciais não serão gravados.

 -- Método: ZipFile.getinfo (name)

     Retorna um objeto *note ZipInfo: 2ca. com informações sobre o
     'name' do membro do arquivo.  Chamar *note getinfo(): 2d25. para um
     nome não encontrado no arquivo levanta um *note KeyError: 5dd.

 -- Método: ZipFile.infolist ()

     Retorna uma lista contendo um objeto *note ZipInfo: 2ca. 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: 2ca.  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: 192.

     *note open(): 651. também é um gerenciador de contexto e, portanto,
     suporta a instrução *note with: 186.:

          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(): 1524,
     *note readline(): 257b, *note readlines(): 2636, *note seek():
     1488, *note tell(): 159e, *note __iter__(): 1f5f, *note __next__():
     14c9.  Esses objetos podem operar independentemente do ZipFile.

     Com ‘mode='w'’, é retornado um manipulador de arquivo, que suporta
     o método *note write(): ecb.  Quando um manipulador de arquivo
     modificável é aberto, tentativas de ler ou gravar outros arquivos
     no arquivo ZIP levanta um *note ValueError: 2ea.

     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:
     2ca. com *note file_size: 2d30. informado, então use-o como
     parâmetro 'name'.

          Nota: Os métodos *note open(): 651, *note read(): 2d31. e
          *note extract(): 2d32. podem receber um nome de arquivo ou um
          objeto *note ZipInfo: 2ca.  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: 9b4. para leitura de arquivos texto
     compactados em modo de *note novas linhas universais: f29.

     Alterado na versão 3.6: *note ZipFile.open(): 651. 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(): 651. em um ZipFile
     fechado levanta um *note ValueError: 2ea.  Anteriormente, um *note
     RuntimeError: 243. 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: 2ca.  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: 2ca.  'pwd'
     é a senha usada para criptografar arquivos como um objeto *note
     bytes: 192.

     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(): 2d32. em um ZipFile
     fechado levanto um *note ValueError: 2ea.  Anteriormente, um *note
     RuntimeError: 243. era levantado.

     Alterado na versão 3.6.2: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 59a.

 -- 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(): 2d2f.  'pwd' é uma senha
     usada para criptografar arquivos como um objeto *note bytes: 192.

          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(): 2d32.

     Alterado na versão 3.6: Chama *note extractall(): 2d33. em um
     ZipFile fechado levanta um *note ValueError: 2ea.  Anteriormente,
     um *note RuntimeError: 243. era levantado.

     Alterado na versão 3.6.2: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 59a.

 -- 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: 192.) 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: 2ca.  O arquivo compactado deve estar aberto para leitura
     ou acréscimo.  'pwd' é a senha usada para arquivos criptografados
     como um objeto *note bytes: 192. e, se especificada, substitui a
     senha padrão configurada com *note setpassword(): 2d35.  Chamar
     *note read(): 2d31. em um ZipFile que use um método de compactação
     diferente de *note ZIP_STORED: 2d28, *note ZIP_DEFLATED: 2d29,
     *note ZIP_BZIP2: 2d2a, *note ZIP_LZMA: 2d2b. e *note ZIP_ZSTANDARD:
     2d2c. levanta um *note NotImplementedError: 368.  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(): 2d31. em um ZipFile
     fechado levanta um *note ValueError: 2ea.  Anteriormente, um *note
     RuntimeError: 243. 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(): 2d36. em um ZipFile
     fechado levanta um *note ValueError: 2ea.  Anteriormente, um *note
     RuntimeError: 243. 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(): f3d. em um ZipFile
     criado com modo ‘'r'’ ou em um ZipFile fechado levanta um *note
     ValueError: 2ea.  Anteriormente, um *note RuntimeError: 243. 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: 169. ou de *note bytes: 192.;
     Se é uma *note str: 169, 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: 2ca.  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: 2ca.).  Da
     mesma forma, 'compresslevel' vai sobrescrever o construtor se
     informado.

          Nota: Quando é passada uma instância de *note ZipInfo: 2ca. 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: 2ca.  Por padrão, o construtor da classe *note
          ZipInfo: 2ca. seta este membro para *note ZIP_STORED: 2d28.

     Alterado na versão 3.2: O argumento 'compress_type'.

     Alterado na versão 3.6: Chama *note writestr(): 2cb. em um ZipFile
     criado com modo ‘'r'’ ou em um ZipFile fechado levanta um *note
     ValueError: 2ea.  Anteriormente, um *note RuntimeError: 243. 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: 2ca, 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:
     192.  Se atribuir um comentário a uma instância *note ZipFile: 8c8.
     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.7.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: 8c8. ou ‘file’ adequado para
     passar para o construtor *note ZipFile: 8c8.).

     ‘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: 8cd. não sanitiza nomes de arquivos
          dentro do arquivo ZIP. Ao contrário dos métodos *note
          ZipFile.extract(): 2d32. e *note ZipFile.extractall(): 2d33, é
          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():
          1516. e verificar o diretório de destino com *note
          os.path.commonpath(): 1032.

Objetos Path expõem os seguintes recursos de objetos *note pathlib.Path:
265.:

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(): 651. 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: 9b4.
     quando abertos como texto e ignorados caso contrário.  ‘pwd’ é o
     parâmetro ‘pwd’ para *note ZipFile.open(): 651.

     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: 198.  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: 9b4, 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: 8cb.

 -- Dado: Path.stem

     O componente final do caminho, sem seu sufixo.

     Adicionado na versão 3.11: Adicionada a propriedade *note
     Path.stem: 8ca.

 -- 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: 8cc.

 -- Método: Path.read_text (*, **)

     Leia o arquivo atual como texto Unicode.  Argumentos posicionais e
     argumentos nomeados são passados para *note io.TextIOWrapper: 9b4.
     (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: 198.  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: 9b4, 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.7.3 Objetos PyZipFile
..........................

O construtor *note PyZipFile: 11ef. usa os mesmos parâmetros que o
construtor *note ZipFile: 8c8, 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: 8c8.:

      -- 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: 11ef. não foi
          fornecido ou ‘-1’, o arquivo correspondente é um arquivo
          ‘*.pyc’, compilando se necessário.

          Se o parâmetro 'Optimize' para *note PyZipFile: 11ef. era ‘0’,
          ‘1’ ou ‘2’, apenas arquivos com esse nível de otimização (ver
          *note compile(): 4ab.) 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: 243. 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(): 11ee. 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: 59a.

          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,  Prev: Objetos PyZipFile,  Up: zipfile — Trabalha com arquivos ZIP

5.13.7.4 Objetos ZipInfo
........................

Instâncias da classe *note ZipInfo: 2ca. são retornadas pelos métodos
*note getinfo(): 2d25. e *note infolist(): 2d26. dos objetos *note
ZipFile: 8c8.  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: 2ca.
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: 2ca. 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: 59a.

     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: 192.

 -- 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: 192.

 -- 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,  Next: Armadilhas de descompressão,  Prev: Objetos ZipInfo,  Up: zipfile — Trabalha com arquivos ZIP

5.13.7.5 Interface de Linha de Comando
......................................

O módulo *note zipfile: 137. 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: 2d59. 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: 2d5a.:

     $ python -m zipfile -e monty.zip target-dir/

Para obter uma lista dos arquivos em um arquivo ZIP, use a opção *note
-l: 2d5b.:

     $ python -m zipfile -l monty.zip

* Menu:

* Opções de linha de comando::


File: python.info,  Node: Opções de linha de comando,  Up: Interface de Linha de Comando

5.13.7.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: 2d5b,
     *note -e: 2d5a. e *note -t: 2d60.

     Adicionado na versão 3.11.


File: python.info,  Node: Armadilhas de descompressão,  Prev: Interface de Linha de Comando,  Up: zipfile — Trabalha com arquivos ZIP

5.13.7.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.7.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.7.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.7.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.7.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.7.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.8 ‘tarfile’ — Ler e gravar arquivos do tipo tar
----------------------------------------------------

'Código-fonte:' Lib/tarfile.py(1)

__________________________________________________________________

O módulo *note tarfile: e4. 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: 137. para ler ou gravar arquivos ‘.zip’ ou as
funções de nível mais alto em *note shutil: 1414.

Alguns fatos e números:

   * lê e grava arquivos compactados com *note gzip: 6b, *note bz2: 14,
     *note compression.zstd: 23. e *note lzma: 8e. 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:
8e.

Alterado na versão 3.12: Os arquivos são extraídos usando um *note
filtro: 68c, o que torna possível limitar recursos
surpreendentes/perigosos ou reconhecer que eles são esperados e que o
arquivo é totalmente confiável.

Alterado na versão 3.14: Define o filtro de extração padrão como *note
data: 299, o que desabilita alguns recursos perigosos, como links para
caminhos absolutos ou caminhos fora do destino.  Anteriormente, a
estratégia de filtro era equivalente a *note fully_trusted: 2d6d.

Alterado na versão 3.14: Adicionado suporte para a compactação com
Zstandard usando *note compression.zstd: 23.

 -- Função: tarfile.open (name=None, mode='r', fileobj=None,
          bufsize=10240, **kwargs)

     Retorna um objeto *note TarFile: 140c. para o caminho 'name'.  Para
     obter informações detalhadas sobre objetos *note TarFile: 140c. e
     os argumentos nomeados permitidos, consulte *note TarFile Objects:
     2d6e.

     'mode' deve ser uma string no formato ‘'filemode[:compression]'’, o
     padrão é ‘'r'’.  Aqui está uma lista completa de combinações de
     modos:

     modo                   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.
                            
                            
     ‘'r:zst'’              Abre para leitura com compactação Zstandard.
                            
                            
     ‘'x'’ ou ‘'x:'’        Cria um arquivo tar exclusivamente sem
                            compactação.  Levanta uma exceção
                            *note FileExistsError: 1216. se ele já existir.
                            
                            
     ‘'x:gz'’               Cria um arquivo tar com compactação gzip.
                            Levanta uma exceção
                            *note FileExistsError: 1216. se ele já existir.
                            
                            
     ‘'x:bz2'’              Cria um arquivo tar com compactação bzip2.
                            Levanta uma exceção
                            *note FileExistsError: 1216. se ele já existir.
                            
                            
     ‘'x:xz'’               Cria um arquivo tar com compactação lzma.
                            Levanta uma exceção
                            *note FileExistsError: 1216. se ele já existir.
                            
                            
     ‘'x:zst'’              Cria um arquivo tar com compactação Zstandard.
                            Levanta uma exceção
                            *note FileExistsError: 1216. 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.
                            
                            
     ‘'w:zst'’              Abre para gravação compactada com Zstandard.
                            

     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: 1b3e. será levantada.
     Use o 'mode' ‘'r'’ para evitar isso.  Se um método de compactação
     não for suportado, *note CompressionError: 2d6f. será levantada.

     Se 'fileobj' for especificado, ele será usado como alternativa a um
     *note objeto arquivo: 13bf. 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(): 106d. aceita o argumento nomeado
     'compresslevel' (padrão ‘9’) para especificar o nível de
     compactação do arquivo.

     Para os modos ‘'w:xz'’, ‘'x:xz'’ e ‘'w|xz'’, *note tarfile.open():
     106d. aceita o argumento nomeado 'preset' para especificar o nível
     de compactação do arquivo.

     Para os modos ‘'w:zst'’, ‘'x:zst'’ e ‘'w|zst'’, *note
     tarfile.open(): 106d. aceita o argumento nomeado 'level' para
     especificar o nível de compactação do arquivo.  O argumento nomeado
     'options' também pode ser passado, fornecendo parâmetros avançados
     de compactação Zstandard descritos por *note CompressionParameter:
     2c88.  O argumento nomeado 'zstd_dict' pode ser passado para
     fornecer um *note ZstdDict: 2c87, um dicionário Zstandard usado
     para melhorar a compactação de pequenas quantidades de dados.

     Para fins especiais, existe um segundo formato para 'mode':
     ‘'filemode|[compression]'’.  *note tarfile.open(): 106d. retornará
     um objeto *note TarFile: 140c. 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(): 1012. ou *note write(): 159d.
     (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: 13bf. de soquete ou um dispositivo de
     fita.  No entanto, tal objeto *note TarFile: 140c. é limitado, pois
     não permite acesso aleatório; consulte *note Exemplos: 2d70.  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.
                       
                       
     ‘'r|zst'’         Abre um 'stream' compactado com Zstandard 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.
                       
                       
     ‘'w|zst'’         Abre um 'stream' compactado com Zstandard 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: 59a.

     Alterado na versão 3.12: O argumento nomeado 'compresslevel' também
     funciona para fluxos.

     Alterado na versão 3.14: O argumento nomeado 'preset' 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(): 106d. em vez disso.  Veja
     *note TarFile Objects: 2d6e.

 -- Função: tarfile.is_tarfile (name)

     Retorna *note True: dfb. se 'name' for um arquivo tar que o módulo
     *note tarfile: e4. possa ler.  'name' pode ser uma *note str: 169,
     objeto arquivo ou similar.

     Alterado na versão 3.9: Suporte para arquivo e objetos arquivo ou
     similares.

O módulo *note tarfile: e4. define as seguintes exceções:

 -- Exceção: tarfile.TarError

     Classe base para todas as exceções de *note tarfile: e4.

 -- Exceção: tarfile.ReadError

     É levantada quando um arquivo tar é aberto e não pode ser
     manipulado pelo módulo *note tarfile: e4. 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:
     140c. do tipo fluxo.

 -- Exceção: tarfile.ExtractError

     É levantada para erros 'não fatais' ao usar *note
     TarFile.extract(): 29b, mas somente se *note TarFile.errorlevel:
     29d.‘== 2’.

 -- Exceção: tarfile.HeaderError

     É levantada por *note TarInfo.frombuf(): 2d75. se o buffer obtido
     for inválido.

 -- Exceção: tarfile.FilterError

     Classe base para membros *note recusados: 2d77. por filtros.

      -- Atributo: tarinfo

          Informações sobre o membro que o filtro se recusou a extrair,
          como *note TarInfo: 2d79.

 -- 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.14.

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(): e47, caso
     contrário.

 -- Dado: tarfile.REGTYPE
 -- Dado: tarfile.AREGTYPE

     Um arquivo normal *note type: 2d82.

 -- Dado: tarfile.LNKTYPE

     Um link (dentro do arquivo tar) *note type: 2d82.

 -- Dado: tarfile.SYMTYPE

     Um link simbólico *note type: 2d82.

 -- Dado: tarfile.CHRTYPE

     Um dispositivo especial de caracteres *note type: 2d82.

 -- Dado: tarfile.BLKTYPE

     Um dispositivo especial de bloco *note type: 2d82.

 -- Dado: tarfile.DIRTYPE

     Um diretório *note type: 2d82.

 -- Dado: tarfile.FIFOTYPE

     Um dispositivo especial de FIFO *note type: 2d82.

 -- Dado: tarfile.CONTTYPE

     Um arquivo contíguo *note type: 2d82.

 -- Dado: tarfile.GNUTYPE_LONGNAME

     A GNU tar longname *note type: 2d82.

 -- Dado: tarfile.GNUTYPE_LONGLINK

     A GNU tar longlink *note type: 2d82.

 -- Dado: tarfile.GNUTYPE_SPARSE

     A GNU tar sparse file *note type: 2d82.

Cada uma das constantes a seguir define um formato de arquivo tar que o
módulo *note tarfile: e4. é capaz de criar.  Consulte a seção *note
Formatos tar suportados: 2d8d. 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: 2d90.

     Alterado na versão 3.8: O formato padrão para novos arquivos foi
     alterado de *note GNU_FORMAT: 2d8f. para *note PAX_FORMAT: 2d90.

Ver também
..........

Módulo *note zipfile: 137.

     Documentação do módulo padrão *note zipfile: 137.

*note Operações de arquivamento: 1414.

     Documentation of the higher-level archiving facilities provided by
     the standard *note shutil: ca. module.

GNU tar manual, Basic Tar Format(2)

     Documentation for tar archive files, including GNU tar extensions.

* Menu:

* TarFile Objects::
* Objetos TarInfo::
* Filtros de extração::
* Interface de Linha de Comando: Interface de Linha de Comando<2>.
* Exemplos: Exemplos<10>.
* Formatos tar suportados::
* Problemas de Unicode::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/tarfile.py

   (2) https://www.gnu.org/software/tar/manual/html_node/Standard.html


File: python.info,  Node: TarFile Objects,  Next: Objetos TarInfo,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.1 TarFile Objects
........................

The *note TarFile: 140c. object provides an interface to a tar archive.
A tar archive is a sequence of blocks.  An archive member (a stored
file) is made up of a header block followed by data blocks.  It is
possible to store a file in a tar archive several times.  Each archive
member is represented by a *note TarInfo: 140d. object, see *note
Objetos TarInfo: 2d79. for details.

A *note TarFile: 140c. object can be used as a context manager in a
*note with: 186. statement.  It will automatically be closed when the
block is completed.  Please note that in the event of an exception an
archive opened for writing will not be finalized; only the internally
used file object will be closed.  See the *note Exemplos: 2d70. section
for a use case.

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)

     All following arguments are optional and can be accessed as
     instance attributes as well.

     'name' is the pathname of the archive.  'name' may be a *note
     path-like object: 59a.  It can be omitted if 'fileobj' is given.
     In this case, the file object’s ‘name’ attribute is used if it
     exists.

     'mode' is either ‘'r'’ to read from an existing archive, ‘'a'’ to
     append data to an existing file, ‘'w'’ to create a new file
     overwriting an existing one, or ‘'x'’ to create a new file only if
     it does not already exist.

     If 'fileobj' is given, it is used for reading or writing data.  If
     it can be determined, 'mode' is overridden by 'fileobj'’s mode.
     'fileobj' will be used from position 0.

          Nota: 'fileobj' is not closed, when *note TarFile: 140c. is
          closed.

     'format' controls the archive format for writing.  It must be one
     of the constants *note USTAR_FORMAT: 2d8e, *note GNU_FORMAT: 2d8f.
     or *note PAX_FORMAT: 2d90. that are defined at module level.  When
     reading, format will be automatically detected, even if different
     formats are present in a single archive.

     The 'tarinfo' argument can be used to replace the default *note
     TarInfo: 140d. class with a different one.

     If 'dereference' is *note False: d1f, add symbolic and hard links
     to the archive.  If it is *note True: dfb, add the content of the
     target files to the archive.  This has no effect on systems that do
     not support symbolic links.

     If 'ignore_zeros' is *note False: d1f, treat an empty block as the
     end of the archive.  If it is *note True: dfb, skip empty (and
     invalid) blocks and try to get as many members as possible.  This
     is only useful for reading concatenated or damaged archives.

     'debug' can be set from ‘0’ (no debug messages) up to ‘3’ (all
     debug messages).  The messages are written to ‘sys.stderr’.

     'errorlevel' controls how extraction errors are handled, see *note
     the corresponding attribute: 29d.

     The 'encoding' and 'errors' arguments define the character encoding
     to be used for reading or writing the archive and how conversion
     errors are going to be handled.  The default settings will work for
     most users.  See section *note Problemas de Unicode: 2d93. for
     in-depth information.

     The 'pax_headers' argument is an optional dictionary of strings
     which will be added as a pax global header if 'format' is *note
     PAX_FORMAT: 2d90.

     If 'stream' is set to *note True: dfb. then while reading the
     archive info about files in the archive are not cached, saving
     memory.

     Alterado na versão 3.2: Use ‘'surrogateescape'’ as the default for
     the 'errors' argument.

     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: 59a.

     Alterado na versão 3.13: Add the 'stream' parameter.

 -- Método: classmethod TarFile.open (...)

     Alternative constructor.  The *note tarfile.open(): 106d. function
     is actually a shortcut to this classmethod.

 -- Método: TarFile.getmember (name)

     Return a *note TarInfo: 140d. object for member 'name'.  If 'name'
     can not be found in the archive, *note KeyError: 5dd. is raised.

          Nota: If a member occurs more than once in the archive, its
          last occurrence is assumed to be the most up-to-date version.

 -- Método: TarFile.getmembers ()

     Retorna os membros do arquivo como uma lista de objetos *note
     TarInfo: 140d.  A lista tem a mesma ordem que os membros no
     arquivo.

 -- Método: TarFile.getnames ()

     Return the members as a list of their names.  It has the same order
     as the list returned by *note getmembers(): 106f.

 -- Método: TarFile.list (verbose=True, *, members=None)

     Print a table of contents to ‘sys.stdout’.  If 'verbose' is *note
     False: d1f, only the names of the members are printed.  If it is
     *note True: dfb, output similar to that of ‘ls -l’ is produced.  If
     optional 'members' is given, it must be a subset of the list
     returned by *note getmembers(): 106f.

     Alterado na versão 3.5: Added the 'members' parameter.

 -- Método: TarFile.next ()

     Return the next member of the archive as a *note TarInfo: 140d.
     object, when *note TarFile: 140c. is opened for reading.  Return
     *note None: 87a. if there is no more available.

 -- 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(): 106f.
     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: dfb, 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: 68c.
     for details.  It is recommended to set this explicitly only if
     specific 'tar' features are required, or as ‘filter='data'’ to
     support Python versions with a less secure default (3.13 and
     lower).

          Aviso: Never extract archives from untrusted sources without
          prior inspection.

          Since Python 3.14, the default (*note data: 299.) will prevent
          the most dangerous security issues.  However, it will not
          prevent 'all' unintended or insecure behavior.  Read the *note
          Filtros de extração: 68c. 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: 59a.

     Alterado na versão 3.12: Adicionado o parâmetro 'filter'.

     Alterado na versão 3.14: The 'filter' parameter now defaults to
     ‘'data'’.

 -- 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: 140d. object.  You can specify a different directory using
     'path'.  'path' may be a *note path-like object: 59a.  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(): 29a.

          Nota: The *note extract(): 29b. method does not take care of
          several extraction issues.  In most cases you should consider
          using the *note extractall(): 29a. method.

          Aviso: Never extract archives from untrusted sources without
          prior inspection.  See the warning for *note extractall():
          29a. 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: 59a.

     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: 140d. object.  If 'member' is a
     regular file or a link, an *note io.BufferedReader: 140a. object is
     returned.  For all other existing members, *note None: 87a. is
     returned.  If 'member' does not appear in the archive, *note
     KeyError: 5dd. is raised.

     Alterado na versão 3.3: Return an *note io.BufferedReader: 140a.
     object.

     Alterado na versão 3.13: The returned *note io.BufferedReader:
     140a. object has the ‘mode’ attribute which is always equal to
     ‘'rb'’.

 -- Atributo: TarFile.errorlevel: *note int: 19b.

     Se 'errorlevel' for ‘0’, os erros serão ignorados ao usar *note
     TarFile.extract(): 29b. e *note TarFile.extractall(): 29a.  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: 2bf. ou
     *note FilterError: 2d76.  Se ‘2’, todos os erros 'não fatais'
     também serão levantados como exceções *note TarError: 2d71.

     Some exceptions, e.g.  ones caused by wrong argument types or data
     corruption, are always raised.

     Custom *note extraction filters: 68c. should raise *note
     FilterError: 2d76. for 'fatal' errors and *note ExtractError: 2d73.
     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: 68c. usado como um padrão para o
     argumento 'filter' de *note extract(): 29b. e *note extractall():
     29a.

     The attribute may be ‘None’ or a callable.  String names are not
     allowed for this attribute, unlike the 'filter' argument to *note
     extract(): 29b.

     If ‘extraction_filter’ is ‘None’ (the default), extraction methods
     will use the *note data: 299. 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: cc.  To set a global default this way, a
     filter function needs to be wrapped in *note staticmethod(): 450.
     to prevent injection of a ‘self’ argument.

     Alterado na versão 3.14: The default filter is set to *note data:
     299, which disallows some dangerous features such as links to
     absolute paths or paths outside of the destination.  Previously,
     the default was equivalent to *note fully_trusted: 2d6d.

 -- 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: d1f.  Recursion adds entries
     in sorted order.  If 'filter' is given, it should be a function
     that takes a *note TarInfo: 140d. object argument and returns the
     changed *note TarInfo: 140d. object.  If it instead returns *note
     None: 87a. the *note TarInfo: 140d. object will be excluded from
     the archive.  See *note Exemplos: 2d70. 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: 140d. object 'tarinfo' to the archive.  If
     'tarinfo' represents a non zero-size regular file, the 'fileobj'
     argument should be a *note binary file: 1f23, and ‘tarinfo.size’
     bytes are read from it and added to the archive.  You can create
     *note TarInfo: 140d. objects directly, or by using *note
     gettarinfo(): 2d98.

     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: 140d. object from the result of *note
     os.stat(): 26c. or equivalent on an existing file.  The file is
     either named by 'name', or specified as a *note file object: 13bf.
     'fileobj' with a file descriptor.  'name' may be a *note path-like
     object: 59a.  If given, 'arcname' specifies an alternative name for
     the file in the archive, otherwise, the name is taken from
     'fileobj'’s *note name: 2c92. attribute, or the 'name' argument.
     The name should be a text string.

     You can modify some of the *note TarInfo: 140d.’s attributes before
     you add it using *note addfile(): 18eb.  If the file object is not
     an ordinary file object positioned at the beginning of the file,
     attributes such as *note size: 2d99. may need modifying.  This is
     the case for objects such as *note GzipFile: 650.  The *note name:
     2d9a. 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: 59a.

 -- Método: TarFile.close ()

     Close the *note TarFile: 140c.  In write mode, two finishing zero
     blocks are appended to the archive.

 -- Atributo: TarFile.pax_headers: *note dict: 183.

     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: TarFile Objects,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.2 Objetos TarInfo
........................

A *note TarInfo: 140d. object represents one member in a *note TarFile:
140c.  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: 140d. objects are returned by *note TarFile: 140c.’s
methods *note getmember(): 1af8, *note getmembers(): 106f. and *note
gettarinfo(): 2d98.

Modifying the objects returned by *note getmember(): 1af8. or *note
getmembers(): 106f. will affect all subsequent operations on the
archive.  For cases where this is unwanted, you can use *note
copy.copy(): 29. or call the *note replace(): 2d9e. 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: 140d. methods
handle ‘None’ differently:

   - The *note extract(): 29b. or *note extractall(): 29a. methods will
     ignore the corresponding metadata, leaving it set to a default.

   - *note addfile(): 18eb. falhará.

   - *note list(): 106e. imprimirá uma string como um espaço reservado.

 -- Classe: tarfile.TarInfo (name='')

     Cria um objeto *note TarInfo: 140d.

 -- Método: classmethod TarInfo.frombuf (buf, encoding, errors)

     Cria e retorna um objeto *note TarInfo: 140d. a partir do buffer de
     string do parâmetro 'buf'.

     Levanta *note HeaderError: 2d74. se o buffer for inválido.

 -- Método: classmethod TarInfo.fromtarfile (tarfile)

     Read the next member from the *note TarFile: 140c. object 'tarfile'
     and return it as a *note TarInfo: 140d. object.

 -- Método: TarInfo.tobuf (format=DEFAULT_FORMAT, encoding=ENCODING,
          errors='surrogateescape')

     Create a string buffer from a *note TarInfo: 140d. object.  For
     information on the arguments see the constructor of the *note
     TarFile: 140c. class.

     Alterado na versão 3.2: Use ‘'surrogateescape'’ as the default for
     the 'errors' argument.

A ‘TarInfo’ object has the following public data attributes:

 -- Atributo: TarInfo.name: *note str: 169.

     Nome do arquivo.

 -- Atributo: TarInfo.size: *note int: 19b.

     Tamanho em bytes.

 -- Atributo: TarInfo.mtime: *note int: 19b. | *note float: 196.

     Time of last modification in seconds since the *note epoch: 2da2,
     as in *note os.stat_result.st_mtime: 2da3.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.mode: *note int: 19b.

     Permission bits, as for *note os.chmod(): 523.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.type

     File type.  'type' is usually one of these constants: *note
     REGTYPE: 2d80, *note AREGTYPE: 2d81, *note LNKTYPE: 2d83, *note
     SYMTYPE: 2d84, *note DIRTYPE: 2d87, *note FIFOTYPE: 2d88, *note
     CONTTYPE: 2d89, *note CHRTYPE: 2d85, *note BLKTYPE: 2d86, *note
     GNUTYPE_SPARSE: 2d8c.  To determine the type of a *note TarInfo:
     140d. object more conveniently, use the ‘is*()’ methods below.

 -- Atributo: TarInfo.linkname: *note str: 169.

     Name of the target file name, which is only present in *note
     TarInfo: 140d. objects of type *note LNKTYPE: 2d83. and *note
     SYMTYPE: 2d84.

     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: 19b.

     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():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.gid: *note int: 19b.

     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():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.uname: *note str: 169.

     Nome do usuário.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.gname: *note str: 169.

     Nome do grupo.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     29b. and *note extractall(): 29a, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.chksum: *note int: 19b.

     Cabeçalho de soma de verificação.

 -- Atributo: TarInfo.devmajor: *note int: 19b.

     Número principal do dispositivo.

 -- Atributo: TarInfo.devminor: *note int: 19b.

     Número menor do dispositivo.

 -- Atributo: TarInfo.offset: *note int: 19b.

     O cabeçalho do tar começa aqui.

 -- Atributo: TarInfo.offset_data: *note int: 19b.

     Os dados do arquivo começam aqui.

 -- Atributo: TarInfo.sparse

     Sparse member information.

 -- Atributo: TarInfo.pax_headers: *note dict: 183.

     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: 140d. object also provides some convenient query
methods:

 -- Método: TarInfo.isfile ()

     Return *note True: dfb. if the *note TarInfo: 140d. object is a
     regular file.

 -- Método: TarInfo.isreg ()

     Igual a *note isfile(): 2db1.

 -- Método: TarInfo.isdir ()

     Retorna *note True: dfb. se for um diretório.

 -- Método: TarInfo.issym ()

     Retorna *note True: dfb. se for um link simbólico.

 -- Método: TarInfo.islnk ()

     Retorna *note True: dfb. se for um link físico.

 -- Método: TarInfo.ischr ()

     Retorna *note True: dfb. se for um caractere.

 -- Método: TarInfo.isblk ()

     Return *note True: dfb. if it is a block device.

 -- Método: TarInfo.isfifo ()

     Retorna *note True: dfb. se for um FIFO.

 -- Método: TarInfo.isdev ()

     Return *note True: dfb. 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<2>,  Prev: Objetos TarInfo,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.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.

     Aviso: None of the available filters blocks 'all' dangerous archive
     features.  Never extract archives from untrusted sources without
     prior inspection.  See also *note Dicas para verificação adicional:
     2b97.

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(): 29b. or *note
extractall(): 29a. 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():
     2dbb. 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(): 299. for details.

   * ‘None’ (default): Use *note TarFile.extraction_filter: 2d97.

     If that is also ‘None’ (the default), the ‘'data'’ filter will be
     used.

          Alterado na versão 3.14: The default filter is set to *note
          data: 299.  Previously, the default was equivalent to *note
          fully_trusted: 2d6d.

   * A callable which will be called for each extracted member with a
     *note TarInfo: 2d79. 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: 140d. 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: 29d.  Note that when extraction
          is aborted, *note extractall(): 29a. 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.8.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: 86f.) from
          filenames.

        - *note Refuse: 2d77. 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:
          2d7a.

        - *note Refuse: 2d77. to extract files whose absolute path
          (after following symlinks) would end up outside the
          destination.  This raises *note OutsideDestinationError: 2d7b.

        - Clear high mode bits (setuid, setgid, sticky) and group/other
          write bits (*note S_IWGRP: 2b21. | *note S_IWOTH: 2b24.).

     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: 2da5.) using
          *note os.path.normpath(): 1515.  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: 2d77. to extract links (hard or soft) that link
          to absolute paths, or ones that link outside the destination.

          This raises *note AbsoluteLinkError: 2d7d. or *note
          LinkOutsideDestinationError: 2d7e.

          Note that such files are refused even on platforms that do not
          support symbolic links.

        - *note Refuse: 2d77. to extract device files (including pipes).
          This raises *note SpecialFileError: 2d7c.

        - Para arquivos comuns, incluindo links físicos:

             - Set the owner read and write permissions (*note S_IRUSR:
               2b1c. | *note S_IWUSR: 2b1d.).

             - Remove the group & other executable permission (*note
               S_IXGRP: 2b18. | *note S_IXOTH: 2b25.) if the owner
               doesn’t have it (*note S_IXUSR: 2b1e.).

        - 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.

     Note that this filter does not block 'all' dangerous archive
     features.  See *note Dicas para verificação adicional: 2b97. for
     details.

     Alterado na versão 3.14: 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.8.5 Filter errors
......................

When a filter refuses to extract a file, it will raise an appropriate
exception, a subclass of *note FilterError: 2d76.  This will abort the
extraction if *note TarFile.errorlevel: 29d. 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.8.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: 527. 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, and so
     on).

   * 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.8.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.8.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<2>,  Next: Exemplos<10>,  Prev: Filtros de extração,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.9 Interface de Linha de Comando
......................................

Adicionado na versão 3.4.

The *note tarfile: e4. 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: 2dc2. 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 é aceito:

     $ 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: 2dc3. 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: 2dc4.
option:

     $ python -m tarfile -l monty.tar

* 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<2>

5.13.8.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: 68c. for details.  Only string names are accepted (that
     is, ‘fully_trusted’, ‘tar’, and ‘data’).


File: python.info,  Node: Exemplos<10>,  Next: Formatos tar suportados,  Prev: Interface de Linha de Comando<2>,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.11 Exemplos
..................

* Menu:

* Reading examples::
* Writing examples::


File: python.info,  Node: Reading examples,  Next: Writing examples,  Up: Exemplos<10>

5.13.8.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(): 29a. 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<10>

5.13.8.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: 186. 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: cc0. in the 'fileobj' parameter in *note
TarFile.add(): de2.:

     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(): de2.:

     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<10>,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.8.14 Formatos tar suportados
.................................

There are three tar formats that can be created with the *note tarfile:
e4. module:

   * The POSIX.1-1988 ustar format (*note USTAR_FORMAT: 2d8e.).  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: 2d8f.).  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:
     e4. fully supports the GNU tar extensions for long names, sparse
     file support is read-only.

   * The POSIX.1-2001 pax format (*note PAX_FORMAT: 2d90.).  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.8.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: e4. are controlled
by the 'encoding' and 'errors' keyword arguments of the *note TarFile:
140c. class.

'encoding' defines the character encoding to use for the metadata in the
archive.  The default value is *note sys.getfilesystemencoding(): e47.
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:
1a8b.  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: 2dd3.

For *note PAX_FORMAT: 2d90. 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: 2d. 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: 6a3. e *note writer: 6a4. do módulo *note
csv: 2d. leem e escrevem sequências.  Os programadores também podem ler
e gravar dados no formato de dicionário usando as classes *note
DictReader: bce. e *note DictWriter: 13fa.

Ver também
..........

PEP 305(3) - API de arquivo CSV

     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<11>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 2d. define as seguintes funções:

 -- Função: csv.reader (csvfile, /, dialect='excel', **fmtparams)

     Retorna um *note objeto leitor: 2ddc. 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: 1795. ou uma das strings
     retornadas pela função *note list_dialects(): 1aab.  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: 2ddd.

     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:
     189a. 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():
     1f10.  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: 1795. ou uma das strings
     retornadas pela função *note list_dialects(): 1aab.  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: 2ddd.  Para tornar o mais fácil possível a interface
     com os módulos que implementam a API do DB, o valor *note None:
     87a. é 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(): 169. 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:
     1795. 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: 2ddd.

 -- Função: csv.unregister_dialect (name)

     Exclui o dialeto associado ao 'name' do registro do dialeto.  Um
     *note Error: 2dde. é 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: 2dde. é
     levantado se 'name' não for um nome de dialeto registrado.  Esta
     função retorna uma classe *note Dialect: 1795. 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: 2d. 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: 183. cujas chaves são
     fornecidas pelo parâmetro opcional 'fieldnames'.

     O parâmetro 'fieldnames' é uma *note sequência: 70b.  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: 6a3.

     Se o argumento passado para 'fieldnames' for um iterador, ele será
     convertido para uma *note list: 24c.

     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: 183.

     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: 1f. de chaves que identificam a ordem na qual os
     valores no dicionário transmitidos para o método *note writerow():
     fde. 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(): fde. 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: 2ea. é 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: 6a4.

     Observe que, diferentemente da classe *note DictReader: bce, o
     parâmetro 'fieldnames' da classe *note DictWriter: 13fa. não é
     opcional.

     Se o argumento passado para 'fieldnames' for um iterador, ele será
     convertido para uma *note list: 24c.

     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: 1795. é 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: 1795.
     definem como as instâncias *note reader: 6a3. e *note writer: 6a4.
     se comportam.

     Todos os nomes de *note Dialect: 1795. disponíveis são retornados
     por *note list_dialects(): 1aab, e eles podem ser registrados com
     classes *note reader: 6a3. e *note writer: 6a4. 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: 2ddf. 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: 2de0. 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: 13f9. 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: 2de1. é usada para deduzir o formato de um
     arquivo CSV.

     A classe *note Sniffer: 2de1. fornece dois métodos:

      -- Método: sniff (sample, delimiters=None)

          Analisa a 'sample' fornecida e retorna uma subclasse *note
          Dialect: 1795, 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: dfb. 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 linhas após a primeira linha são amostradas; se mais da
          metade das colunas + linhas atenderem aos critérios, *note
          True: dfb. será retornado.

          Nota: Este método é uma heurística aproximada e pode produzir
          falsos positivos e negativos.

Um exemplo para uso de *note Sniffer: 2de1.:

     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: 2d. define as seguintes constantes:

 -- Dado: csv.QUOTE_ALL

     Instrui objetos *note writer: 6a4. a colocar aspas em todos os
     campos.

 -- Dado: csv.QUOTE_MINIMAL

     Instrui objetos *note writer: 6a4. 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: 6a4. a colocar aspas em todos os
     campos não numéricos.

     Instrui objetos *note reader: 6a3. a converter todos os campos não
     envoltos por aspas no tipo *note float: 196.

          Nota: Alguns tipos numéricos, como *note bool: 3c0, *note
          Fraction: 212. ou *note IntEnum: ecf, têm uma representação de
          string que não pode ser convertida para *note float: 196.
          Eles não podem ser lidos nos modos *note QUOTE_NONNUMERIC:
          189a. e *note QUOTE_STRINGS: 6a2.

 -- Dado: csv.QUOTE_NONE

     Instrui objetos *note writer: 6a4. 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: 2dde. se algum caractere que exija escape for encontrado.
     Defina 'quotechar' para ‘None’ para evitar seu escape.

     Instrui objetos *note reader: 6a3. a não executar nenhum
     processamento especial de caracteres de aspas.

 -- Dado: csv.QUOTE_NOTNULL

     Instrui objetos *note writer: 6a4. a coloca entre aspas os campos
     que não são ‘None’.  Isso é semelhante a *note QUOTE_ALL: 2de4,
     exceto que se o valor de um campo for ‘None’, uma string vazia (sem
     aspas) é escrita.

     Instrui objetos *note reader: 6a3. a interpretar um campo vazio
     (sem aspas) como ‘None’ e a se comportar de outra forma como *note
     QUOTE_ALL: 2de4.

     Adicionado na versão 3.12.

 -- Dado: csv.QUOTE_STRINGS

     Instrui objetos *note writer: 6a4. a sempre coloca aspas em volta
     dos campos que são strings.  Isso é semelhante a *note
     QUOTE_NONNUMERIC: 189a, exceto que se o valor de um campo for
     ‘None’, uma string vazia (sem aspas) é escrita.

     Instrui objetos *note reader: 6a3. a interpretar uma string vazia
     (sem aspas) como ‘None’ e a se comportar de outra forma como *note
     QUOTE_NONNUMERIC: 189a.

     Adicionado na versão 3.12.

O módulo *note csv: 2d. 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: f29.).

   (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: f29.).


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: 1795. contendo
vários atributos descrevendo o formato do arquivo CSV. Ao criar objetos
*note reader: 6a3. ou *note writer: 6a4, o programador pode especificar
uma string ou uma subclasse da classe *note Dialect: 1795. 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: 1795.

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: dfb, o
     caractere é dobrado.  Quando *note False: d1f, o 'escapechar' é
     usado como um prefixo para o 'quotechar'.  O padrão é *note True:
     dfb.

     Na saída, se 'doublequote' for *note False: d1f. e não
     'escapeechar' for definido, *note Error: 2dde. é 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: 2de6.;

             * o 'quotechar' é escapado se 'doublequote' for *note
               False: d1f.;

             * o 'escapechar' em si.

     Na leitura, o 'escapechar' remove qualquer significado especial do
     caractere seguinte.  O padrão é *note None: 87a, 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: 6a4.  O padrão é ‘'\r\n'’.

          Nota: A *note reader: 6a3. é 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: 2de6.

     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: 2de3. e o padrão é *note
     QUOTE_MINIMAL: 2de5.  se 'quotechar' não for ‘None’ e, do
     contrário, *note QUOTE_NONE: 2de6.

 -- Atributo: Dialect.skipinitialspace

     Quando *note True: dfb, os espaços imediatamente após o
     'delimitador' são ignorados.  O padrão é *note False: d1f.  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: 2dde. 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: bce. e objetos
retornados pela função *note reader(): 6a3.) 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: bce.), analisado de acordo com a
     *note Dialect: 1795. 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<11>,  Prev: Objetos Reader,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.4 Objetos Writer
.......................

Objetos *note writer: 6a4. (instâncias e objetos *note DictWriter: 13fa.
retornados pela função *note writer(): 6a4.) possuem os seguintes
métodos públicos.  Uma 'row' deve ser iterável de strings ou números
para objetos *note writer: 6a4. e um dicionário mapeando nomes de campos
para strings ou números (passando-os por *note str(): 169. primeiro)
para *note DictWriter: 13fa.  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: 1795. 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(): fde. usada internamente.

     Adicionado na versão 3.2.

     Alterado na versão 3.8: *note writeheader(): 13fb. agora também
     retorna o valor retornado pelo método *note csvwriter.writerow():
     fde. que ele usa internamente.


File: python.info,  Node: Exemplos<11>,  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(): 314. é 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(): 327.).  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: 4d8. que implementa uma
linguagem de configuração básica que fornece uma estrutura semelhante à
encontrada nos arquivos INI do Microsoft Windows.  Você pode usar isso
para escrever programas 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 do Registro do Windows da
     sintaxe INI.

Ver também
..........

Módulo *note tomllib: 102.

     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: c9.

     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: 86.

     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<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 2dfe.
Essencialmente, o arquivo consiste em seções, cada uma contendo chaves
com valores.  As classes *note configparser: 26. 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: 2dff, 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:
4d8, 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(): 1657. com vários arquivos passados para o parâmetro
'filenames'.

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.

   (2) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.


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(): 2e02.  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(): 2e02, os analisadores sintáticos de
configuração também fornecem métodos *note getint(): 2e03. e *note
getfloat(): 2e04. equivalentes.  Você pode registrar seus próprios
conversores e personalizar os fornecidos.  (2)

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.

   (2) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.


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(): 1467. 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(): 1467. 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(): 2e03, *note getfloat(): 2e04. e *note getboolean(): 2e02, 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:
2e06.

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: 1893. 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 muita
personalização.  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: 2e00.

   (2) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.

   (3) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.

   (4) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.

   (5) Os analisadores sintáticos de configuração permitem muita
personalização.  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: 2e00.


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: 1893.

     >>> 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: 4d8. 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: 4d8.  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: 4d8. 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 muita
personalização.  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: 2e00.


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: 26, 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: 26. se comportam o mais próximo possível
dos dicionários reais.  A interface de mapeamento é completa e segue a
ABC *note MutableMapping: 12a8.  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: 5dd.

   * ‘DEFAULTSECT’ não pode ser removido do analisador sintático:

        * tentar excluí-lo levanta *note ValueError: 2ea,

        * ‘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 muita
personalização.  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: 2e00.


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: 26. 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(): 2e0a. antes de ler o arquivo
     real.

   * 'dict_type', valor padrão: *note dict: 183.

     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: 26.  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(): 1dd.

   * '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: 26, 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(): 71f, *note read_string(): 2e0b. ou
     *note read_dict(): 2e0a.).  Recomenda-se usar analisadores
     sintáticos estritos em novas aplicações.

     Alterado na versão 3.2: Nas versões anteriores do *note
     configparser: 26, 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: 2e09.  *note RawConfigParser: 115a. 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(): 2e03, *note getfloat(): 2e04. e *note getboolean(): 2e02.
     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(): 2e02, 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: 26. 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: 4d8.:

     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: 146a. ou *note DuplicateOptionError: 146b.
     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: 2e09.

     Todos os nomes de opções usados na interpolação serão passados
     através do método *note optionxform(): 2e10. assim como qualquer
     outra referência de nome de opção.  Por exemplo, usando a
     implementação padrão de *note optionxform(): 2e10. (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": 2e08.

     É possível ler diversas configurações para um único *note
     ConfigParser: 4d8, 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: 7e8.

     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(): 2e0a, 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: 183,
     pois agora preserva a ordem de inserção.

     Alterado na versão 3.13: Levanta *note MultilineContinuationError:
     2e11. 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: 146a. será levantada.  Se o nome da
          'seção padrão' for passado, *note ValueError: 2ea. será
          levantada.  O nome da seção deve ser uma string; caso
          contrário, *note TypeError: 198. será levantada.

          Alterado na versão 3.2: Nomes de seções sem string levantam
          *note TypeError: 198.

      -- 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: dfb.; caso contrário, retorna
          *note False: d1f.  Se a 'section' especificada for *note None:
          87a. 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: 192. ou
          um *note objeto caminho ou similar: 59a, 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: 4d8. 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(): 71f. antes de chamar *note read():
          1657. 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(): 314.

          Alterado na versão 3.6.1: O parâmetro 'filenames' aceita um
          *note objeto caminho ou similar: 59a.

          Alterado na versão 3.7: O parâmetro 'filenames' aceita um
          objeto *note bytes: 192.

      -- 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(): 1467.
          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(): 1467. 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: 2ea.  Veja *note get(): 1467.
          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(): 1467.

          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: 2e18.  'option' e 'value' devem ser strings;
          caso contrário, *note TypeError: 198. será levantada.

      -- Método: write (fileobject, space_around_delimiters=True)

          Escreve uma representação da configuração no *note objeto
          arquivo: 13bf. especificado, que deve ser aberto em modo texto
          (aceitando strings).  Esta representação pode ser analisada
          por uma futura chamada *note read(): 1657.  Se
          'space_around_delimiters' for verdadeiro, os delimitadores
          entre chaves e valores serão envoltos por espaços.

          Alterado na versão 3.14: Levanta InvalidWriteError se isso
          gravar uma representação que não pode ser analisada com
          precisão por uma futura chamada *note read(): 1657. deste
          analisador sintático.

          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: 2e18.  Se
          existisse a opção de ser removida, retorna *note True: dfb.;
          caso contrário, retorna *note False: d1f.

      -- 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(): 2e10. 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:
     2e08.).

 -- Dado: configparser.MAX_INTERPOLATION_DEPTH

     A profundidade máxima para interpolação recursiva para *note get():
     1467. quando o parâmetro 'raw' é falso.  Isso é relevante apenas
     quando a 'interpolation' padrão é usada.


File: python.info,  Node: Objetos RawConfigParser,  Next: Exceções<9>,  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: 4d8.  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: 183,
     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: 4d8, 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' ou *note UNNAMED_SECTION:
          1893. à instância.

          Se a seção com o nome fornecido já existir, *note
          DuplicateSectionError: 146a. é levantada.  Se o nome da 'seção
          padrão' for passado, *note ValueError: 2ea. é levantada.  Se
          *note UNNAMED_SECTION: 1893. for passado e o suporte for
          desabilitado *note UnnamedSectionDisabledError: 2e1f. é
          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.

     Alterado na versão 3.14: Adicionado suporte a *note
     UNNAMED_SECTION: 1893.

      -- 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: 2e18.  Embora seja possível usar *note
          RawConfigParser: 115a. (ou *note ConfigParser: 4d8. 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<9>,  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:
     26.

 -- 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(): 1469. 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: 2e1b.  Subclasse de *note
     InterpolationError: 2e24.

 -- Exceção: configparser.InterpolationMissingOptionError

     Exceção levantada quando uma opção referenciada a partir de um
     valor não existe.  Subclasse de *note InterpolationError: 2e24.

 -- 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: 2e24.

 -- 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.

 -- Exceção: configparser.UnnamedSectionDisabledError

     Exceção levantada ao tentar usar *note UNNAMED_SECTION: 1893. sem
     habilitá-lo.

          Adicionado na versão 3.14.

 -- Exceção: configparser.InvalidWriteError

     Exceção levantada quando uma tentativa de *note
     ConfigParser.write(): 1dd. não seria analisada com precisão com uma
     futura chamada de *note ConfigParser.read(): 1657.

     Ex: Escrever uma chave que comece com o padrão *note
     ConfigParser.SECTCRE: 2e06. seria interpretado como um cabeçalho de
     seção ao ser lido.  Tentar escrever isso levantará esta exceção.

     Adicionado na versão 3.14.


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: 91. e *note pickle: ab.

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: 183.  Converte tipos
     TOML para Python usando esta *note tabela de conversão: 2e2d.

     '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: 1fd.).  O chamável não deve
     retornar um *note dict: 183. ou um *note list: 24c, senão uma
     exceção *note ValueError: 2ea. é levantada.

     Uma exceção *note TOMLDecodeError: 1863. 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: 169.  Retorna um *note dict:
     183.  Converte tipos TOML para Python usando esta *note tabela de
     conversão: 2e2d.  O argumento 'parse_float' tem o mesmo significado
     que em *note load(): 2e2c.

     Uma exceção *note TOMLDecodeError: 1863. será levantada no caso de
     um documento TOML inválido.

As seguintes exceções estão disponíveis:

 -- Exceção: tomllib.TOMLDecodeError (msg, doc, pos)

     Subclasse de *note ValueError: 2ea. com os seguintes atributos
     adicionais:

      -- Atributo: msg

          A mensagem de erro não formatada.

      -- Atributo: doc

          O documento TOML sendo analisado.

      -- Atributo: pos

          O índice de 'doc' onde a análise falhou.

      -- Atributo: lineno

          A linha correspondente a 'pos'.

      -- Atributo: colno

          A coluna correspondente a 'pos'.

     Alterado na versão 3.14: Adicionados os parâmetros 'msg', 'doc' e
     'pos'.  Adicionados os atributos *note msg: 2e2e, *note doc: 2e2f,
     *note pos: 2e30, *note lineno: 2e31. e *note colno: 2e32.

     Descontinuado desde a versão 3.14: A passagem de argumentos
     posicionais de forma livre está descontinuada.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<12>,  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<12>,  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: 1b64. 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: 1b64.
     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(): bff.
     – será lido.  Caso contrário, uma exceção *note FileNotFoundError:
     263. será levantada.  Os erros de análise levantam *note
     NetrcParseError: 2e38. 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: 2e38. 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(): 1785.

     Alterado na versão 3.4: Adicionada a verificação de permissão
     POSIX.

     Alterado na versão 3.7: *note os.path.expanduser(): bff. é usado
     para encontrar a localização do arquivo ‘.netrc’ quando 'file' não
     é passado como argumento.

     Alterado na versão 3.10: *note netrc: 9f. 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: 1b64. 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.14/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: 1b64. 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: 1b64. 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():
b40. e *note load(): b3e.

Para trabalhar com dados plist em objetos bytes ou string, use *note
dumps(): b41. e *note loads(): b3f.

Os valores podem ser strings, inteiros, floats, booleanos, tuplas,
listas, dicionários (mas somente com chaves de string), objetos *note
bytes: 192, *note bytearray: 342. ou *note datetime.datetime: 4dc.

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: c0c. 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: 87a.: Detecta automaticamente o formato do arquivo

        * *note FMT_XML: 116f.: Formato de arquivo XML

        * *note FMT_BINARY: 1170.: 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:
     2733, com ‘tzinfo’ como *note datetime.UTC: 708.

     Dados XML para o formato *note FMT_XML: 116f. são analisados usando
     o analisador sintático Expat de *note xml.parsers.expat: 12c. –
     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: 1bd2.
     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():
     b3e. 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: 116f.

 -- 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: 116f.: Arquivo plist formatado em XML

        * *note FMT_BINARY: 1170.: 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: 198. 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:
     2733, ele será convertido para o fuso horário UTC antes de
     escrevê-lo.

     Uma *note TypeError: 198. 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: a77. 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(): b40. 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: 19b.  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<13>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/plistlib.py

   (2) 
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/PropertyLists/


File: python.info,  Node: Exemplos<13>,  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: 139.

* 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.14/Lib/hashlib.py

   (2) https://csrc.nist.gov/news/2023/decision-to-revise-fips-180-4

   (3) https://csrc.nist.gov/pubs/fips/202/final

   (4) https://csrc.nist.gov/pubs/fips/180-4/upd1/final

   (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(): 180f. para criar um objeto hash SHA-256.  Agora você
pode alimentar este objeto com *note objetos bytes ou similares: 193.
(normalmente *note bytes: 192.) usando o método *note update: 2e4f.  A
qualquer momento, você pode solicitar o 'digest' da concatenação dos
dados alimentados até o momento usando os métodos *note digest(): 2e50.
ou *note hexdigest(): 2e51.

Para permitir multithreading, a *note GIL: 164. 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: 2e4f.

Os construtores para algoritmos de hash sempre presentes neste módulo
são *note sha1(): 2e52, *note sha224(): 2e53, *note sha256(): 180f,
*note sha384(): 2e54, *note sha512(): 2e55, *note sha3_224(): e94, *note
sha3_256(): e95, *note sha3_384(): e96, *note sha3_512(): e97, *note
shake_128(): e98, *note shake_256(): e99, *note blake2b(): 847. e *note
blake2s(): 848.  *note md5(): 1791. 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: 1565.

Algoritmos adicionais também podem estar disponíveis se o *note hashlib:
6c. 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(): 1bea.  Consulte *note algorithms_available: 1566.

     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: 2e56. no final deste documento.

Adicionado na versão 3.6: Os construtores SHA3 (Keccak) e SHAKE *note
sha3_224(): e94, *note sha3_256(): e95, *note sha3_384(): e96, *note
sha3_512(): e97, *note shake_128(): e98, *note shake_256(): e99. foram
adicionados.  *note blake2b(): 847. e *note blake2s(): 848. 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(): 1bea. 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(): 1bea.


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(): 1bea.  *note
     algorithms_guaranteed: 1565. 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 interno 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(): 1bea. 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: 193.
     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(): 2e4f.
     até o momento.  Este é um objeto bytes de tamanho *note
     digest_size: 2e5c. que pode conter bytes em todo o intervalo de 0 a
     255.

 -- Método: hash.hexdigest ()

     Similar a *note digest(): 2e50, 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(): e98. e *note shake_256(): e99. 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(): 2e4f.
     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(): 1cd0, 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(): 314.
     embutida, instâncias de *note BytesIO: 109a, objetos SocketIO de
     *note socket.socket.makefile(): 139b. e similares.  'fileobj' deve
     ser aberto em modo bloqueante, caso contrário, uma exceção *note
     BlockingIOError: 234. pode ser levantada.

     A função pode ignorar a E/S do Python e usar o descritor de arquivo
     de *note fileno(): 2b6d. 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.14: Agora levanta uma *note BlockingIOError:
     234. 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(): 73b.

     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:
     193.  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(): 73b.

     '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: 6c.
da biblioteca padrão.

* Menu:

* Criando objetos hash::
* Constantes: Constantes<5>.
* Exemplos: Exemplos<14>.
* 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: 193.  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: 2e64. 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<14>,  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<14>,  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<14>

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(): 847.
or *note blake2s(): 848.), then update it with the data by calling *note
update(): 2e4f. on the object, and, finally, get the digest out of the
object by calling *note digest(): 2e50. (or *note hexdigest(): 2e51. 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(): 2e4f. 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<14>

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<14>

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: 6e. 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<14>

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<14>

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<14>

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<14>,  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: 6e.

     A module to generate message authentication codes using hashes.

Módulo *note base64: f.

     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(): 1bea.  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: 6c.  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(): c89.

     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: 6c.

 -- Método: HMAC.digest ()

     Retorna o resumo dos bytes passados para o método *note update():
     113f. 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(): d26. com um
          resumo fornecido externamente durante uma rotina de
          verificação, é recomendável usar a função *note
          compare_digest(): 12c5. em vez do operador ‘==’ para reduzir a
          vulnerabilidade a ataques de temporização.

 -- Método: HMAC.hexdigest ()

     Como *note digest(): d26. 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(): 2e79. com um
          resumo fornecido externamente durante uma rotina de
          verificação, é recomendável usar a função *note
          compare_digest(): 12c5. 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: 169. (somente
     ASCII, como, por exemplo, retornado por *note HMAC.hexdigest():
     2e79.), ou um *note objeto bytes ou similar: 193.

          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: 6c.

     O módulo Python que fornece funções hash seguras.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: c5. é 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: c5. deve ser usado em preferência ao
gerador de números pseudoaleatórios padrão no módulo *note random: bd,
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.14/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: c5. 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: 29f5. 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: c5. 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: c5.

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: 19b. 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: 193.
     '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(): 12c5. 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: c5. 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 — Tratadores de registro de eventos: logging handlers — Tratadores de registro de eventos.
* 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(): 314.; se o que quer é manipular estruturas
de diretórios, veja o módulo *note os.path: a6.; e se quiser ler todas
as linhas, de todos os arquivos na linha de comando, veja o módulo *note
fileinput: 5f.  Para criar arquivos e diretórios temporários, veja o
módulo *note tempfile: e6.; e, para manipulação em alto nível de
arquivos e diretórios, veja o módulo *note shutil: ca.

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: a5, 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: a5. não estão disponíveis ou se comportam de
     maneira diferente.  APIs relacionadas a processos (por exemplo,
     *note fork(): 4af, *note execve(): 12f5.) e recursos (por exemplo,
     *note nice(): 12fd.) não estão disponíveis.  Outros como *note
     getuid(): 1785. e *note getpid(): 2e8f. são emulados ou esboços.
     As plataformas WebAssembly também não possuem suporte para sinais
     (por exemplo, *note kill(): 1559, *note wait(): f8c.).

     Nota: Todas as funções neste módulo levantam *note OSError: 2bf.
     (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: 2bf.

 -- 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: 290. tem uma granularidade mais fina.  *note
     os.uname(): 1312. fornece informações de versão específicas do
     sistema.

     O módulo *note platform: af. 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.14/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: 752. para realizar essa
conversão (veja *note sys.getfilesystemencoding(): e47.).

O *note tratador de erros e codificação do sistema de arquivos: 752. são
configurados na inicialização do Python pela função *note
PyConfig_Read(): 988.: veja os membros *note filesystem_encoding: 418. e
*note filesystem_errors: 419. do *note PyConfig: 3f4.

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: 26ed, 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: 752. 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: 45f.

Veja também a *note codificação da localidade: 544.


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: 544. e
força o uso da codificação UTF-8:

   * Usa UTF-8 como a *note codificação do sistema de arquivos: 752.

   * *note sys.getfilesystemencoding(): e47. retorna ‘'utf-8'’.

   * *note locale.getpreferredencoding(): 751. retorna ‘'utf-8'’ (o
     argumento 'do_setlocale' não causa efeito).

   * *note sys.stdin: 754, *note sys.stdout: cc0. e *note sys.stderr:
     b29. usam UTF-8 como codificação de texto, com o *note tratador de
     erros: 1a8b. ‘surrogateescape’ sendo habilitado para *note
     sys.stdin: 754. e *note sys.stdout: cc0. (*note sys.stderr: b29.
     continua a usar ‘backslashreplace’ como faz no modo padrão com
     reconhecimento de localidade)

   * No Unix, *note os.device_encoding(): 1b35. 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: 1200. (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(): e42. e *note os.fsencode(): e43. usam a
     codificação UTF-8.

   * *note open(): 314, *note io.open(): 735. e *note codecs.open():
     313. 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: 85b. está habilitado se a localidade
LC_CTYPE for ‘C’ ou ‘POSIX’ na inicialização do Python (veja a função
*note PyConfig_Read(): 988.).

Ele pode ser habilitado ou desabilitado utilizando a opção *note -X
utf8: 16f. da linha de comando e a variável de ambiente *note
PYTHONUTF8: cc2.

Se a variável de ambiente *note PYTHONUTF8: cc2. 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: cbf.), 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: 891.

Veja também o *note modo UTF-8 no Windows: 20c8. e o *note tratador de
erros e codificação do sistema de arquivos: 752.

Ver também
..........

PEP 686(2)

     Python 3.15 utilizará *note Modo UTF-8 do Python: 85b. 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: 1fed.: Unix, not WASI.

 -- Dado: os.environ

     Um objeto *note mapeamento: 13b7. 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:
     a5. é 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: 258, exceto pelas mudanças feitas modificando *note
     os.environ: 258. diretamente.

     Este mapeamento pode ser usado para modificar o ambiente, além de
     consultá-lo.  *note putenv(): 25a. será chamado automaticamente
     quando o mapeamento for modificado.

     No Unix, chaves e valores usam *note sys.getfilesystemencoding():
     e47. e o tratador de erros ‘'surrogateescape'’.  Use *note
     environb: 259. 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(): 25a. diretamente não
          muda *note os.environ: 258, por isso é melhor modificar *note
          os.environ: 258.

          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(): 25b. será chamado
     automaticamente quando um item é excluído de *note os.environ: 258,
     e quando um dos métodos ‘pop()’ ou ‘clear()’ é chamado.

     Ver também
     ..........

     A função *note os.reload_environ(): 257.

     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: 258.: um objeto de *note mapeamento:
     13b7. onde as chaves e valores são objetos *note bytes: 192.
     representando o ambiente do processo.  *note environ: 258. e *note
     environb: 259. são sincronizados (modificar *note environb: 259.
     atualiza *note environ: 258, e vice versa).

     *note environb: 259. está disponível somente se *note
     supports_bytes_environ: 1411. 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.reload_environ ()

     Os mapeamentos *note os.environ: 258. e *note os.environb: 259. são
     um cache de variáveis de ambiente no momento em que o Python foi
     iniciado.  Dessa forma, alterações no ambiente do processo atual
     não são refletidas se feitas fora do Python, ou por *note
     os.putenv(): 25a. ou *note os.unsetenv(): 25b.  Use
     ‘os.reload_environ()’ para atualizar *note os.environ: 258. e *note
     os.environb: 259. com quaisquer alterações no ambiente do processo
     atual.

          Aviso: Esta função não é segura para thread.  Chamá-la
          enquanto o ambiente está sendo modificado em outra thread é um
          comportamento indefinido.  Ler de *note os.environ: 258. ou
          *note os.environb: 259, ou chamar *note os.getenv(): 2e97.
          durante o recarregamento, pode retornar um resultado vazio.

     Adicionado na versão 3.14.

 -- 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: 2e98.

 -- Função: os.fsencode (filename)

     Codifica o 'filename' *note caminho ou similar: 59a. para *note
     tratador de erros e codificação do sistema de arquivos: 752.;
     retorna *note bytes: 192. inalterados.

     *note fsdecode(): e42. é 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: e3f.

 -- Função: os.fsdecode (filename)

     Decodifica o *note objeto caminho ou similar: 59a. 'filename' do
     *note tratador de erros e codificação do sistema de arquivos: 752.;
     retorna *note str: 169. inalterada.

     *note fsencode(): e43. é 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: e3f.

 -- Função: os.fspath (path)

     Retorna a representação do sistema de arquivos do caminho
     (argumento 'path').

     Se um objeto *note str: 169. ou *note bytes: 192. é passado, é
     retornado inalterado.  Caso contrário, o método *note __fspath__():
     e40. é chamado, e seu valor é retornado, desde que seja um objeto
     *note str: 169. ou *note bytes: 192.  Em todos os outros casos,
     *note TypeError: 198. é levantada.

     Adicionado na versão 3.6.

 -- Classe: os.PathLike

     Uma *note classe base abstrata: 13b2. para objetos representando um
     caminho do sistema de arquivos, como, por exemplo, *note
     pathlib.PurePath: 6c2.

     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: 169. ou
          *note bytes: 192, preferencialmente *note str: 169.

 -- 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(): 2e97. utiliza *note os.environ:
     258, o mapeamento de *note getenv(): 2e97. é 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(): e47. e o o manipulador de erros
     ‘'surrogateescape'’.  Use *note os.getenvb(): 1412. se quiser usar
     uma codificação diferente.

     *note Disponibilidade: 1fed.: 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(): 1412. utiliza *note os.environb:
     259, o mapeamento de *note getenvb(): 1412. é também similarmente
     capturado na importação, e a função pode não refletir futuras
     mudanças no ambiente.

     *note getenvb(): 1412. está disponível somente se *note
     supports_bytes_environ: 1411. for ‘True’.

     *note Disponibilidade: 1fed.: 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: 258. é 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: 1fed.: Unix, not WASI.

 -- Função: os.geteuid ()

     Retorna o ID de usuário efetivo do processo atual.

     *note Disponibilidade: 1fed.: Unix, not WASI.

 -- Função: os.getgid ()

     Retorna o ID do grupo real do processo atual.

     *note Disponibilidade: 1fed.: Unix.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 1a86. 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: 1fed.: 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: 1fed.: Unix, not WASI.

          Nota: No Mac OS, o comportamento da função *note getgroups():
          2e9c. 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(): 2e9c. 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(): 2e9d. se tiver o privilégio
          adequado.  Se foi compilado para distribuição na versão maior
          que ‘10.5’, *note getgroups(): 2e9c. 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(): 2e9d, e seu comprimento não é
          limitado a 16.  O valor da constante
          ‘MACOSX_DEPLOYMENT_TARGET’, pode ser obtido com *note
          sysconfig.get_config_var(): 174.

 -- 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(): 64e, 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: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Função: os.getpgrp ()

     Retorna o ID do grupo do processo atual.

     *note Disponibilidade: 1fed.: 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: 1a86. 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: 1fed.: 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: 2ea0, *note PRIO_PGRP: 2ea1. ou *note
     PRIO_USER: 2ea2, e 'who' é interpretado em relação a 'which' (um
     identificador de processo para *note PRIO_PROCESS: 2ea0,
     identificador do grupo de processos para *note PRIO_PGRP: 2ea1. e
     um ID de usuário para *note PRIO_USER: 2ea2.).  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: 1fed.: 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(): 12fb. e *note
     setpriority(): 12fc.

     *note Disponibilidade: 1fed.: 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(): 12fb. e *note
     setpriority(): 12fc.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: Unix.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 1a86. 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: 1fed.: 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(): 164c, *note popen(): 318. ou *note
     fork(): 4af. e *note execv(): 2ea7.

     Atribuições a itens em *note os.environ: 258. são automaticamente
     traduzidas em chamadas correspondentes para *note putenv(): 25a.;
     entretanto, chamadas para *note putenv(): 25a. não atualizam *note
     os.environ: 258, então é preferível atribuir itens de *note
     os.environ: 258.  Isso também se aplica a *note getenv(): 2e97. e
     *note getenvb(): 1412, que usam respectivamente *note os.environ:
     258. e *note os.environb: 259. em suas implementações.

     Veja também a função *note os.reload_environ(): 257.

          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: 1b5d. ‘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: 1fed.: Unix, not WASI, not Android.

 -- Função: os.seteuid (euid, /)

     Define o ID do usuário efetivo do processo atual.

     *note Disponibilidade: 1fed.: Unix, not WASI, not Android.

 -- Função: os.setgid (gid, /)

     Define o ID do grupo do processo atual.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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(): 2e9c. 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*: 2eab. 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(): 699.  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*: 2eab,
     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(): 2b6d.
     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: 1fed.: Linux >= 3.0 with glibc >= 2.14.

     Adicionado na versão 3.12.

     Ver também
     ..........

     A função *note unshare(): 1a69.

 -- 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: 1fed.: 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: 1fed.: 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: 2ea0, *note PRIO_PGRP: 2ea1. ou *note
     PRIO_USER: 2ea2, e 'who' é interpretado em relação a 'which' (um
     identificador de processo para *note PRIO_PROCESS: 2ea0,
     identificador do grupo de processos para *note PRIO_PGRP: 2ea1. e
     um ID de usuário para *note PRIO_USER: 2ea2.).  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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Função: os.setsid ()

     Executa a chamada de sistema ‘setsid()’.  Veja o manual do Unix
     para semântica.

     *note Disponibilidade: 1fed.: Unix, not WASI.

 -- Função: os.setuid (uid, /)

     Define o ID de usuário do processo atual.

     *note Disponibilidade: 1fed.: 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: 2ea. é
     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: 1a86. 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(): 2eb4. 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(): 1cc9. 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: 1fed.: 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(): 164c, *note popen(): 318. ou *note fork(): 4af. e
     *note execv(): 2ea7.

     A exclusão de itens em *note os.environ: 258. é automaticamente
     traduzida para uma chamada correspondente a *note unsetenv(): 25b.;
     no entanto, chamadas a *note unsetenv(): 25b. não atualizam *note
     os.environ: 258, por isso, na verdade é preferível excluir itens de
     *note os.environ: 258.

     Veja também a função *note os.reload_environ(): 257.

     Levanta um *note evento de auditoria: 1b5d. ‘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_*:
     2eab, 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: 1fed.: Linux >= 2.6.16.

     Adicionado na versão 3.12.

     Ver também
     ..........

     A função *note setns(): 1a68.

Sinalizações para a função *note unshare(): 1a69, 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: 13bf.  (Veja também
*note open(): f86. 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(): 314.
     e aceita os mesmos argumentos.  A única diferença é que o primeiro
     argumento de *note fdopen(): 2217. 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(): 2b6d. pode ser usado para obter o descritor de
arquivo associado a um *note objeto arquivo: 13bf. 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(): f86. ou *note pipe(): 1a80.  Para fechar um “objeto
          arquivo” retornado pela função embutida *note open(): 314. ou
          por *note popen(): 318. ou *note fdopen(): 2217, use seu
          método *note close(): 500.

 -- 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: 2bf. é levantada com *note errno: 2581.
     definido como *note errno.EXDEV: 2ec8.

     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(): 1815. 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: 1fed.: 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: 87a.

     No Unix, se o *note Modo UTF-8 do Python: 85b. 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: 10f2.

     No Windows, ao duplicar um fluxo padrão (0: stdin, 1: stdout, 2:
     stderr), o novo descritor de arquivo é *note herdável: 10f2.

     *note Disponibilidade: 1fed.: not WASI.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-herdável.

 -- 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: 10f2. por padrão ou não-herdável se
     'inheritable' for ‘False’.

     *note Disponibilidade: 1fed.: 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(): 523. 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: 1b5d. ‘os.chmod’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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(): 12ea.  A partir do Python
     3.3, isto é equivalente a ‘os.chown(fd, uid, gid)’.

     Levanta um *note evento de auditoria: 1b5d. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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: 1fed.: 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: 2ea. é 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: 2bf. é
     levantada com *note errno.EINVAL: 1c89. como número do erro.

     A partir do Python 3.3, é equivalente a ‘os.pathconf(fd, name)’.

     *note Disponibilidade: 1fed.: Unix.

 -- Função: os.fstat (fd)

     Captura o estado do descritor de arquivo 'fd'.  Retorna um objeto
     *note stat_result: 16af.

     A partir do Python 3.3, é equivalente a ‘os.stat(fd)’.

     Ver também
     ..........

     A função *note stat(): 26c.

 -- 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(): 12f8.  A partir do Python 3.3, isso equivale a
     ‘os.statvfs(fd)’.

     *note Disponibilidade: 1fed.: 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: 13bf. '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: 1fed.: 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: 1b5d. ‘os.truncate’ com os
     argumentos ‘fd’, ‘length’.

     *note Disponibilidade: 1fed.: 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: 1030. estiver marcado, ‘True’ se o
     sinalizador estiver desmarcado.

     Veja também *note set_blocking(): 102f. e *note
     socket.socket.setblocking(): 2eca.

     *note Disponibilidade: 1fed.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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: 1fed.: 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: 2ecb, *note F_TLOCK:
     2ecc, *note F_ULOCK: 2ecd. ou *note F_TEST: 2ece.  'len' especifica
     a seção do arquivo para travar.

     Levanta um *note evento de auditoria: 1b5d. ‘os.lockf’ com os
     argumentos ‘fd’, ‘cmd’, ‘len’.

     *note Disponibilidade: 1fed.: 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(): 130f. vai
     executar.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1489. ou ‘0’ – define 'pos' em relação ao
          início do arquivo

        * *note SEEK_CUR: 148a. ou ‘1’ – define 'pos' em relação à
          posição atual do arquivo

        * *note SEEK_END: 148b. ou ‘2’ – define 'pos' em relação ao
          final do arquivo

        * *note SEEK_HOLE: 2ecf. – define 'pos' para o próximo local de
          dados, em relação a 'pos'

        * *note SEEK_DATA: 2ed0. – 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(): 1313. e o método *note
     seek(): 1488. em *note objetos arquivo ou similares: 13bf, para
     onde ajustar o indicador de posição do arquivo.

     *note SEEK_SET: 1489.

          Ajusta a posição do arquivo em relação ao início do arquivo.

     *note SEEK_CUR: 148a.

          Ajusta a posição do arquivo em relação a sua posição atual.

     *note SEEK_END: 148b.

          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(): 1313. e o método *note
     seek(): 1488. em *note objetos arquivo ou similares: 13bf, 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: 1fed.: 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: 10f2.

     Para ler uma descrição dos valores de sinalizadores e modos, veja a
     documentação de C; constantes de sinalizador (como *note O_RDONLY:
     2ed1. e *note O_WRONLY: 2ed2.) são definidas no módulo *note os:
     a5.  Em particular, no Windows é necessário adicionar *note
     O_BINARY: 2ed3. para abrir arquivos em modo binário.

     Esta função oferece suporte para *note caminhos relativos aos
     descritores de diretório: 12e6. com o parâmetro 'dir_fd'.

     Levanta um *note evento de auditoria: 1b5d. ‘open’ com os
     argumentos ‘path’, ‘mode’, ‘flags’.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-herdável.

          Nota: Esta função é destinada a E/S de baixo nível.  Para uso
          normal, use a função embutida *note open(): 314, que retorna
          um *note objeto arquivo: 13bf. com os métodos ‘read()’ e
          ‘write()’ (e muitos mais).  Para envolver um descritor de
          arquivo em um objeto arquivo, use *note fdopen(): 2217.

     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: f7c. (consulte PEP 475(1) para entender a
     justificativa).

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

As seguintes constantes são opções para o parâmetro 'flags' da função
*note open(): f86.  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:
     1272.

 -- 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:
     a11, *note O_FSYNC: a12, *note O_SYMLINK: a13. e *note
     O_NOFOLLOW_ANY: a14.

 -- 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: 1168. em sistemas
     que oferecem suporte.  Adicionada *note O_TMPFILE: 1169, 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: 10f2.
     Para uma abordagem (ligeiramente) mais portável, use o módulo *note
     pty: b6.

     *note Disponibilidade: 1fed.: 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: 10f2.

     *note Disponibilidade: 1fed.: 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: 1030, *note O_CLOEXEC: 1272.
     Retorna um par de descritores de arquivos ‘(r, w)’ utilizáveis para
     leitura e gravação, respectivamente.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 2ee9, *note POSIX_FADV_SEQUENTIAL:
     2eea, *note POSIX_FADV_RANDOM: 2eeb, *note POSIX_FADV_NOREUSE:
     2eec, *note POSIX_FADV_WILLNEED: 2eed. ou *note
     POSIX_FADV_DONTNEED: 2eee.

     *note Disponibilidade: 1fed.: 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(): f87. que especificam o padrão de acesso que
     provavelmente será usado.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 10f2.  Se o
     valor *note O_CLOEXEC: 1272. estiver disponível no sistema, ele é
     adicionado a 'oflag'.

     *note Disponibilidade: 1fed.: 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: 193,
     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: 2eef.

        - *note RWF_NOWAIT: 2ef0.

     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():
     1845. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     Combina a funcionalidade de *note os.readv(): d49. e *note
     os.pread(): d4a.

     *note Disponibilidade: 1fed.: 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: 2590.

     *note Disponibilidade: 1fed.: 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: 2ee4.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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: 193.  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: 2ef1.

        - *note RWF_SYNC: 2ef2.

        - *note RWF_APPEND: 1be9.

     Retorna o número total de bytes realmente escritos.

     O sistema operacional pode definir um limite (*note sysconf():
     1845. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     Combina a funcionalidade de *note os.writev(): d4c. e *note
     os.pwrite(): d4d.

     *note Disponibilidade: 1fed.: 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:
     2ed8. da função *note os.open(): f86.  Este efeito de sinalizador
     se aplica apenas ao intervalo de dados escrito pela chamada de
     sistema.

     *note Disponibilidade: 1fed.: Linux >= 4.7.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_SYNC

     Fornece um equivalente para gravação do sinalizador *note O_SYNC:
     2eda. da função *note os.open(): f86.  Este efeito de sinalizador
     se aplica apenas ao intervalo de dados escrito pela chamada de
     sistema.

     *note Disponibilidade: 1fed.: Linux >= 4.7.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_APPEND

     Fornece um equivalente para gravação do sinalizador *note O_APPEND:
     2ed5. da função *note os.open(): f86.  Esse sinalizador é
     significante apenas para *note os.pwritev(): d4b, 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: 1fed.: 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(): f86. ou *note pipe(): 1a80.  Para ler um “objeto
          arquivo” retornado pela função embutida *note open(): 314. ou
          por *note popen(): 318. ou *note fdopen(): 2217, ou *note
          sys.stdin: 754, 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: f7c. (consulte PEP 475(4) para entender a
     justificativa).

 -- Função: os.readinto (fd, buffer, /)

     Lê de um descritor de arquivo 'fd' em um 'buffer' de *note objeto
     buffer: 25f. mutável.

     O 'buffer' deve ser mutável e *note bytes ou similar: 193.  Em caso
     de sucesso, retorna o número de bytes lidos.  Menos bytes podem ser
     lidos do que o tamanho do buffer.  A chamada de sistema subjacente
     será repetida quando interrompida por um sinal, a menos que o
     manipulador de sinais levante uma exceção.  Outros erros não serão
     repetidos e um erro será levantado.

     Retorna 0 se 'fd' estiver no final do arquivo ou se o 'buffer'
     fornecido tiver comprimento 0 (o que pode ser usado para verificar
     erros sem ler dados).  Nunca retorna negativo.

          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(): f86. ou *note os.pipe(): 1a80.  Para ler um “objeto
          arquivo” retornado pela função embutida *note open(): 314. ou
          *note sys.stdin: 754, use suas funções-membro, por exemplo
          *note io.BufferedIOBase.readinto(): 17f9, *note
          io.BufferedIOBase.read(): 1524. ou *note io.TextIOBase.read():
          1f21.

     Adicionado na versão 3.14.

 -- 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(): cf8.

     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: 1fed.: Unix, not WASI.

          Nota: Para um invólucro de nível mais alto de *note
          sendfile(): cf8, consulte *note socket.socket.sendfile():
          1053.

     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(): cf8, se a implementação
     tiver suporte a eles.

     *note Disponibilidade: 1fed.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Dado: os.SF_NOCACHE

     Parâmetro para a função *note sendfile(): cf8, 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: 1fed.: 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: 1030. se blocking for
     ‘False’; do contrário, limpa o sinalizador.

     Veja também *note get_blocking(): 102e. e *note
     socket.socket.setblocking(): 2eca.

     *note Disponibilidade: 1fed.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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, flags=0)

     Transfere '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'.

     O comportamento da união via splice 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 ‘|’):

        * Se *note SPLICE_F_MOVE: 2ef7. for especificado, o kernel será
          solicitado a mover páginas em vez de copiá-las, mas as páginas
          ainda poderão ser copiadas se o kernel não puder movê-las do
          encadeamento.

        * Se *note SPLICE_F_NONBLOCK: 2ef8. for especificado, o kernel
          será solicitado a não bloquear em E/S. Isso torna as operações
          de encadeamento de emenda não bloqueantes, mas a emenda pode,
          ainda assim, bloquear, pois os descritores de arquivo
          emendados podem bloquear.

        * Se *note SPLICE_F_MORE: 2ef9. for especificado, ele indica ao
          kernel que mais dados chegarão em uma emenda subsequente.

     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: 2bf. é levantada com *note errno: 2581. definido para
     *note errno.EXDEV: 2ec8.

     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.

     Ver também
     ..........

     A página man ‘splice(2)(5)’.

     *note Disponibilidade: 1fed.: 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: 193. 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():
     1845. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     *note Disponibilidade: 1fed.: 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():
     f86.).

     *note Disponibilidade: 1fed.: 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():
     f86.) para 'pg'.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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(): f86. ou *note pipe(): 1a80.  Para escrever um
          “objeto arquivo” retornado pela função embutida *note open():
          314. ou por *note popen(): 318. ou *note fdopen(): 2217, ou
          *note sys.stdout: cc0. ou *note sys.stderr: b29, 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: f7c. (consulte PEP 475(6) 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: 193.  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():
     1845. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     *note Disponibilidade: 1fed.: 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://manpages.debian.org/splice(2)

   (6) 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: 2b9f.

     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: 2bf. é levantada.

     *note shutil.get_terminal_size(): 12ff. é 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: 1fed.: 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.

No UNIX, os descritores de arquivo não herdáveis são fechados em
processos filho na execução de um novo programa, outros descritores de
arquivo são herdados.

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*: 319, todos os identificadores herdáveis
e todos os descritores de arquivo herdáveis são herdados.  Usando o
módulo *note subprocess: dc, 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: 1fed.: Windows.

 -- Função: os.set_handle_inheritable (handle, inheritable, /)

     Define o sinalizador “herdável” do manipulador especificado.

     *note Disponibilidade: 1fed.: 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: a5. 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: 12f9.  Se esta funcionalidade não
     estiver disponível, usá-la levantará uma *note NotImplementedError:
     368.

     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: 12f3.  Se não estiver disponível, usá-lo
     levantará uma *note NotImplementedError: 368.

   * '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: 12f4.  Se não estiver disponível,
     usá-lo levantará uma *note NotImplementedError: 368.

 -- 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: 2f03. para testar a existência de 'path', ou
     pode ser o OU inclusivo de um ou mais dos *note R_OK: 2f04, *note
     W_OK: 2f05, e *note X_OK: 2f06. para testar as permissões.  Retorna
     *note True: dfb. se o acesso for permitido, *note False: d1f. 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: 12e6. e *note não seguir os
     links simbólicos: 12e7.

     Se 'effective_ids' for ‘True’, *note access(): 12e8. 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: 12fa.  Se não estiver disponível,
     usá-lo levantará uma *note NotImplementedError: 368.

          Nota: Usar *note access(): 12e8. para verificar se um usuário
          está autorizado a, por exemplo, abrir um arquivo antes de
          realmente fazer isso usando *note open(): 314. 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: 2f07.
          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(): 12e8. 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:
     59a.

 -- 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():
     12e8. 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: d47.  O descritor deve fazer referência a um diretório
     aberto, não a um arquivo aberto.

     Esta função pode levantar *note OSError: 2bf. e subclasses como
     *note FileNotFoundError: 263, *note PermissionError: f32. e *note
     NotADirectoryError: 1250.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

 -- 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: d6.):

        * *note stat.UF_NODUMP: 2b2a.

        * *note stat.UF_IMMUTABLE: 2b2b.

        * *note stat.UF_APPEND: 2b2c.

        * *note stat.UF_OPAQUE: 2b2d.

        * *note stat.UF_NOUNLINK: 2b2e.

        * *note stat.UF_COMPRESSED: 2b2f.

        * *note stat.UF_HIDDEN: 2b32.

        * *note stat.SF_ARCHIVED: 2b36.

        * *note stat.SF_IMMUTABLE: 2b37.

        * *note stat.SF_APPEND: 2b38.

        * *note stat.SF_NOUNLINK: 2b3a.

        * *note stat.SF_SNAPSHOT: 2b3b.

     Esta função pode oferecer suporte a *note não seguir links
     simbólicos: 12e7.

     Levanta um *note evento de auditoria: 1b5d. ‘os.chflags’ com os
     argumentos ‘path’, ‘flags’.

     *note Disponibilidade: 1fed.: 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:
     59a.

 -- 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: d6.) ou combinações de OU bit a bit deles:

        * *note stat.S_ISUID: 2b16.

        * *note stat.S_ISGID: 2b17.

        * *note stat.S_ENFMT: 2b19.

        * *note stat.S_ISVTX: 2b1a.

        * *note stat.S_IREAD: 2b26.

        * *note stat.S_IWRITE: 2b27.

        * *note stat.S_IEXEC: 2b28.

        * *note stat.S_IRWXU: 2b1b.

        * *note stat.S_IRUSR: 2b1c.

        * *note stat.S_IWUSR: 2b1d.

        * *note stat.S_IXUSR: 2b1e.

        * *note stat.S_IRWXG: 2b1f.

        * *note stat.S_IRGRP: 2b20.

        * *note stat.S_IWGRP: 2b21.

        * *note stat.S_IXGRP: 2b18.

        * *note stat.S_IRWXO: 2b22.

        * *note stat.S_IROTH: 2b23.

        * *note stat.S_IWOTH: 2b24.

        * *note stat.S_IXOTH: 2b25.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: d47, *note caminhos relativos aos descritores de
     diretório: 12e6. e *note não seguir os links simbólicos: 12e7.

          Nota: Embora o Windows ofereça suporte ao *note chmod(): 523,
          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: 1a86. para mais informações.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

     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: d47, *note caminhos relativos aos descritores de
     diretório: 12e6. e *note não seguir os links simbólicos: 12e7.

     Consulte *note shutil.chown(): 542. para uma função de alto nível
     que aceita nomes além de ids numéricos.

     Levanta um *note evento de auditoria: 1b5d. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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: 59a.

 -- Função: os.chroot (path)

     Altera o diretório raiz do processo atual para 'path'

     *note Disponibilidade: 1fed.: Unix, not WASI, not Android.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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: 1b5d. ‘os.chdir’ com o
     argumento ‘path’.

     *note Disponibilidade: 1fed.: 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(): 12e9, 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: 1b5d. ‘os.chflags’ com os
     argumentos ‘path’, ‘flags’.

     *note Disponibilidade: 1fed.: Unix, not WASI.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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(): 523. 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: 1b5d. ‘os.chmod’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     *note Disponibilidade: 1fed.: 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:
     59a.

     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: 1b5d. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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 oferece suporte à especificação de 'src_dir_fd' e/ou
     'dst_dir_fd' para fornecer *note caminhos relativos aos descritores
     de diretório: 12e6. e *note não seguir links simbólicos: 12e7.  O
     valor padrão de 'follow_symlinks' é ‘False’ no Windows.

     Levanta um *note evento de auditoria: 1b5d. ‘os.link’ com os
     argumentos ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’.

     *note Disponibilidade: 1fed.: 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:
     59a. 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: 59a.  Se 'path'
     for do tipo ‘bytes’ (direta ou indiretamente por meio da interface
     *note PathLike: e3f.), 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: d47.; o descritor de arquivo deve fazer
     referência a um diretório.

     Levanta um *note evento de auditoria: 1b5d. ‘os.listdir’ com o
     argumento ‘path’.

          Nota: Para codificar nomes de arquivos ‘str’ para ‘bytes’, use
          *note fsencode(): e43.

     Ver também
     ..........

     A função *note scandir(): c48. 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:
     59a.

 -- 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: 2bf. se ocorrer um erro ao coletar os
     nomes das unidades.

     Levanta um *note evento de auditoria: 1b5d. ‘os.listdrives’ sem
     argumentos.

     *note Disponibilidade: 1fed.: 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(): 6bb.  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: 2bf. se o volume não for reconhecido ou se
     ocorrer um erro ao coletar os caminhos.

     Levanta um *note evento de auditoria: 1b5d. ‘os.listmounts’ com o
     argumento ‘volume’.

     *note Disponibilidade: 1fed.: 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(): 6bc.

     Pode levantar *note OSError: 2bf. se ocorrer um erro ao coletar os
     volumes.

     Levanta um *note evento de auditoria: 1b5d. ‘os.listvolumes’ sem
     argumentos.

     *note Disponibilidade: 1fed.: 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(): 26c, mas não segue links
     simbólicos.  Retorna um objeto *note stat_result: 16af.

     Em plataformas que não têm suporte a links simbólicos, este é um
     apelido para *note stat(): 26c.

     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: 12e6.

     Ver também
     ..........

     A função *note stat(): 26c.

     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:
     59a.

     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(): 26c.

 -- 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: 1216.
     é levantada.  Se um diretório pai no caminho não existir, uma
     exceção *note FileNotFoundError: 263. 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():
     523. 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: 12e6.

     Também é possível criar diretórios temporários; veja a função *note
     tempfile.mkdtemp(): 527. do módulo *note tempfile: e6.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

     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(): 525,
     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(): 525. para criar o
     diretório folha; veja *note a descrição do mkdir(): 2f0a. 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(): 526.  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:
     1216. é levantada se o diretório alvo já existir.

          Nota: *note makedirs(): 526. ficará confuso se os elementos do
          caminho a serem criados incluírem *note pardir: 2f0b. (por
          exemplo, “..” em sistemas UNIX).

     Esta função trata os caminhos UNC corretamente.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 526. 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:
     59a.

     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: 12e6.

     FIFOs são canais que podem ser acessados como arquivos regulares.
     FIFOs existem até que sejam excluídos (por exemplo, com *note
     os.unlink(): 12f1.).  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(): f84. não abre o FIFO – apenas cria o
     ponto de encontro.

     *note Disponibilidade: 1fed.: 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:
     59a.

 -- 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: d6.).  Para ‘stat.S_IFCHR’ e ‘stat.S_IFBLK’, 'device' define
     o arquivo especial do dispositivo recém-criado (provavelmente
     usando *note os.makedev(): 18b4.), caso contrário, ele será
     ignorado.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 12e6.

     *note Disponibilidade: 1fed.: 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:
     59a.

 -- 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: 2ea. é 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: 2bf. é
     levantada com *note errno.EINVAL: 1c89. como número do erro.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: d47.

     *note Disponibilidade: 1fed.: Unix.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Dado: os.pathconf_names

     Nomes de mapeamento de dicionário aceitos por *note pathconf():
     12f7. e *note fpathconf(): 2ec9. 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: 1fed.: 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: e3f.), 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: 12e6.

     Ao tentar resolver um caminho que pode conter links, use *note
     realpath(): 261. para lidar corretamente com a recursão e as
     diferenças de plataforma.

     *note Disponibilidade: 1fed.: 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:
     59a. no Unix.

     Alterado na versão 3.8: Aceita um *note objeto caminho ou similar:
     59a. 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: 2bf. é levantada.  Use *note rmdir(): 12ef. para
     remover diretórios.  Se o arquivo não existir, uma *note
     FileNotFoundError: 263. é levantada.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 12e6.

     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(): 12f1.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

 -- Função: os.removedirs (name)

     Remove os diretórios recursivamente.  Funciona como *note rmdir():
     12ef, exceto que, se o diretório folha for removido com sucesso,
     *note removedirs(): 2f0d. 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:
     2bf. se o diretório folha não pôde ser removido com sucesso.

     Levanta um *note evento de auditoria: 1b5d. ‘os.remove’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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:
     2bf. em vários casos:

     No Windows, se 'dst' existe então uma exceção *note
     FileExistsError: 1216. será levantada.  A operação pode falar se
     'src' e 'dst' são de sistemas de arquivos diferentes.  Use *note
     shutil.move(): 1049. 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: 124f. ou uma *note
     NotADirectoryError: 1250. 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: 2bf. é 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: 12e6.

     Se você quiser sobrescrita multiplataforma do destino, use *note
     replace(): 12ee.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a. 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(): 12ed, 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(): 2f0d.

          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: 1b5d. ‘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:
     59a. 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: 2bf. 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: 12e6.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a. 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: 263. ou uma *note
     OSError: 2bf. é levantada respectivamente.  Para remover árvores de
     diretório inteiras, pode ser usada *note shutil.rmtree(): 353.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 12e6.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

 -- Função: os.scandir (path='.')

     Retorna um iterador de objetos *note os.DirEntry: 6b8.
     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(): c48. em vez de *note listdir(): 12f6. 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: 6b8. expõem essas informações
     se o sistema operacional fornecer ao percorrer um diretório.  Todos
     os métodos de *note os.DirEntry: 6b8. podem realizar uma chamada de
     sistema, mas *note is_dir(): 2f0f. e *note is_file(): f78.
     normalmente requerem apenas uma chamada de sistema para links
     simbólicos; *note os.DirEntry.stat(): 19aa. 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: 59a.  Se 'path'
     for do tipo ‘bytes’ (direta ou indiretamente por meio da interface
     *note PathLike: e3f.), o tipo dos atributos *note name: 2f10. e
     *note path: 1934. de cada *note os.DirEntry: 6b8. 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: d47.; o descritor de arquivo deve fazer
     referência a um diretório.

     Levanta um *note evento de auditoria: 1b5d. ‘os.scandir’ com o
     argumento ‘path’.

     O iterador *note scandir(): c48. implementa o protocolo *note
     gerenciador de contexto: 1e0. 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: 186.

          Adicionado na versão 3.6.

     O exemplo a seguir mostra um uso simples de *note scandir(): c48.
     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(): c48. 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: 1e0. e o método *note close(): eac.
     Se um iterador *note scandir(): c48. não estiver esgotado nem
     explicitamente fechado, uma *note ResourceWarning: 546. será
     emitida em seu destrutor.

     A função aceita um *note objeto caminho ou similar: 59a.

     Alterado na versão 3.7: Adicionado suporte para *note descritores
     de arquivo: d47. no Unix.

 -- Classe: os.DirEntry

     Objeto produzido por *note scandir(): c48. para expor o caminho do
     arquivo e outros atributos de arquivo de uma entrada de diretório.

     *note scandir(): c48. 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(): c48, 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: 2bf.  Se
     você precisa de um controle muito refinado sobre os erros, você
     pode pegar *note OSError: 2bf. ao chamar um dos métodos
     ‘os.DirEntry’ e manipular conforme apropriado.

     Para ser diretamente utilizável como um *note objeto caminho ou
     similar: 59a, ‘os.DirEntry’ implementa a interface *note PathLike:
     e3f.

     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(): c48.

          O atributo *note name: 2e91. será ‘bytes’ se o argumento
          'path' de *note scandir(): c48. for do tipo ‘bytes’ e, caso
          contrário, ‘str’.  Usa *note fsdecode(): e42. 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(): c48.  O caminho só é
          absoluto se o argumento 'path' de *note scandir(): c48. for
          absoluto.  Se o argumento 'path' de *note scandir(): c48. era
          um *note descritor de arquivo: d47, o atributo *note path: a6.
          é o mesmo que o atributo *note name: 2e91.

          O atributo *note path: a6. será ‘bytes’ se o argumento 'path'
          de *note scandir(): c48. for do tipo ‘bytes’ e, caso
          contrário, ‘str’.  Usa *note fsdecode(): e42. 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(): 26c. junto com *note stat.S_ISDIR():
          2afd. 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: 2bf, tal como *note
          PermissionError: f32, mas *note FileNotFoundError: 263. é
          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(): 2f0f.

      -- 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(): bf7. 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: 2bf, tal como *note
          PermissionError: f32, mas *note FileNotFoundError: 263. é
          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(): 6bf. para buscar informações
          atualizadas.

          Adicionado na versão 3.12.

      -- Método: stat (*, follow_symlinks=True)

          Retorna um objeto *note stat_result: 16af. 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: 16af. são sempre definidos como zero.
          Chame *note os.stat(): 26c. 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(): 26c. 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: 265.  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: e3f.  Adicionado suporte para caminhos *note bytes: 192.
     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: e3f. – ou como
     um descritor de arquivo aberto.  Retorna um objeto *note
     stat_result: 16af.

     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(): 6bd.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: d47. e *note não seguir links simbólicos: 12e7.

     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(): 261. para resolver o nome do
     caminho tanto quanto possível e chame *note lstat(): 6bd. 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(): f80. e *note lstat(): 6bd.

     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:
     59a.

     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():
     26c, *note os.fstat(): f80. e *note os.lstat(): 6bd.

     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: 5e4.

          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: 5e4.

          Adicionado na versão 3.12.

          Nota: O significado e resolução exatos dos atributos *note
          st_atime: 2f18, *note st_mtime: 2da3, *note st_ctime: 2f19. e
          *note st_birthtime: 2f1d. dependem do sistema operacional e do
          sistema de arquivos.  Por exemplo, em sistemas Windows que
          usam os sistemas de arquivos FAT32, *note st_mtime: 2da3. tem
          resolução de 2 segundos, e *note st_atime: 2f18. 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: 2f1a, *note
          st_mtime_ns: 2f1b, *note st_ctime_ns: 2f1c. e *note
          st_birthtime_ns: 2f1e. 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: 2f18, *note st_mtime: 2da3, *note
          st_ctime: 2f19. e *note st_birthtime: 2f1d. 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: 2f1a, *note st_mtime_ns: 2f1b, *note st_ctime_ns:
          2f1c. e *note st_birthtime_ns: 2f1e.

     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: 2f17./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: d6.

          Adicionado na versão 3.5.

      -- Atributo: st_reparse_tag

          Quando *note st_file_attributes: 102d. tem *note
          FILE_ATTRIBUTE_REPARSE_POINT: 2b4a. definido, este campo
          contém uma tag identificando o tipo do ponto de nova análise.
          Veja as constantes *note IO_REPARSE_TAG_*: 2b4f. no módulo
          *note stat: d6.

     O módulo padrão *note stat: d6. 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: 16af. 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: bf5, *note st_ino:
     2f12, *note st_dev: 2f13, *note st_nlink: 2f14, *note st_uid: 2f15,
     *note st_gid: 2f16, *note st_size: 2f17, *note st_atime: 2f18,
     *note st_mtime: 2da3, *note st_ctime: 2f19.  Mais itens podem ser
     adicionados no final por algumas implementações.  Para
     compatibilidade com versões mais antigas do Python, acessar *note
     stat_result: 16af. como uma tupla sempre retorna inteiros.

     Alterado na versão 3.5: Windows agora retorna o arquivo de índice
     como *note st_ino: 2f12. quando disponível.

     Alterado na versão 3.7: Adicionado o membro *note st_fstype: d4f.
     ao Solaris/derivados.

     Alterado na versão 3.8: Adicionado o membro *note st_reparse_tag:
     bf6. no Windows.

     Alterado na versão 3.8: No Windows, o membro *note st_mode: bf5.
     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: 2f19. 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: 2f1d. para a hora de criação.

     No Windows, o *note st_ino: 2f12. 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: 1748. não retorna mais um valor.
     Anteriormente, ele continha o mesmo que *note st_dev: 2f13, o que
     era incorreto.

     Adicionado o membro *note st_birthtime: 2f1d. 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: d47.

     *note Disponibilidade: 1fed.: 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:
     59a.

     Alterado na versão 3.7: Adicionado o atributo ‘f_fsid’.

 -- Dado: os.supports_dir_fd

     Um objeto *note set: 184. indicando quais funções no módulo *note
     os: a5. 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(): 26c. 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: 184. que indica se *note os.access(): 12e8.
     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(): 12e8.; caso
     contrário, ficará vazio.

     Esta expressão é avaliada como ‘True’ se *note os.access(): 12e8.
     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: 184. que indica quais funções no módulo *note
     os: a5. 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(): 816. 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: 184. que indica quais funções no módulo *note
     os: a5. 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(): 26c. 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'.

     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: 12e6.

          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: 2bf. é levantada quando a função é
          chamada por um usuário sem privilégios.

     Levanta um *note evento de auditoria: 1b5d. ‘os.symlink’ com os
     argumentos ‘src’, ‘dst’ e ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     1a86. 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:
     59a. 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: 1fed.: 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: d47.

     Levanta um *note evento de auditoria: 1b5d. ‘os.truncate’ com os
     argumentos ‘path’ e ‘length’.

     *note Disponibilidade: 1fed.: 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:
     59a.

 -- Função: os.unlink (path, *, dir_fd=None)

     Remove (exclui) o arquivo 'path'.  Esta função é semanticamente
     idêntica à *note remove(): 12ec.; o nome ‘unlink’ é seu nome Unix
     tradicional.  Por favor, veja a documentação de *note remove():
     12ec. para mais informações.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

 -- 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(): 12f2. 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(): 26c,
     dependendo da resolução com a qual seu sistema operacional registra
     os tempos de acesso e modificação; veja *note stat(): 26c.  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(): 26c. com o parâmetro 'ns' para *note utime(): 12f2.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: d47, *note caminhos relativos aos descritores de
     diretório: 12e6. e *note não seguir os links simbólicos: 12e7.

     Levanta um *note evento de auditoria: 1b5d. ‘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:
     59a.

 -- 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: 1a4f. ou
     atribuição de fatia), e *note walk(): 6c5. 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(): 6c5. sobre os diretórios que
     o chamador cria ou renomeia antes de retomar *note walk(): 6c5.
     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(): c48. 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: 2bf.  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(): 6c5. 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(): 6c5. 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(): 6c5.  *note walk(): 6c5. 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():
     353.), andar na árvore de baixo para cima é essencial, *note
     rmdir(): 12ef. 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: 1b5d. ‘os.walk’ com os
     argumentos ‘top’, ‘topdown’, ‘onerror’ e ‘followlinks’.

     Alterado na versão 3.5: Esta função agora chama *note os.scandir():
     c48. em vez de *note os.listdir(): 12f6, tornando-a mais rápida
     reduzindo o número de chamadas a *note os.stat(): 26c.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- Função: os.fwalk (top='.', topdown=True, onerror=None, *,
          follow_symlinks=False, dir_fd=None)

     Se comporta exatamente como *note walk(): 6c5, 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(): 6c5. 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: 12e6. e *note não seguir links
     simbólicos: 12e7.  Observe, entretanto, que, ao contrário de outras
     funções, o valor padrão *note fwalk(): d46. para 'follow_symlinks'
     é ‘False’.

          Nota: Uma vez que *note fwalk(): d46. 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():
          1c79.) 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(): 12ef. 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: 1b5d. ‘os.fwalk’ com os
     argumentos ‘top’, ‘topdown’, ‘onerror’, ‘follow_symlinks’ e
     ‘dir_fd’.

     *note Disponibilidade: 1fed.: Unix.

     Adicionado na versão 3.3.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

     Alterado na versão 3.7: Adicionado suporte para caminhos em *note
     bytes: 192.

 -- 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: 10f2.

     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: 1fed.: 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():
     bf4.

     *note Disponibilidade: 1fed.: 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(): f89. e *note write(): f8f.
     brutos com um tamanho de buffer de 8, *note select(): f94, *note
     poll(): 2f37. 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: 10f2.

     '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: 1a74,
     *note EFD_NONBLOCK: 1a75. e *note EFD_SEMAPHORE: 1a76.

     Se *note EFD_SEMAPHORE: 1a76. for especificado e o contador de
     evento for diferente de zero, *note eventfd_read(): 2f38. retorna 1
     e decrementa o contador em um.

     Se *note EFD_SEMAPHORE: 1a76. não for especificado e o contador de
     evento for diferente de zero, *note eventfd_read(): 2f38. retorna o
     valor atual do contador de evento e zera o contador.

     Se o contador de evento for zero e *note EFD_NONBLOCK: 1a75. não
     for especificado, *note eventfd_read(): 2f38. bloqueia.

     *note eventfd_write(): 2f39. 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

          # semáforo com valor inicial '1'
          fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFC_CLOEXEC)
          try:
              # adquire o semário
              v = os.eventfd_read(fd)
              try:
                  faz_o_trabalho()
              finally:
                  # libera o semáforo
                  os.eventfd_write(fd, v)
          finally:
              os.close(fd)

     *note Disponibilidade: 1fed.: 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(): a0f. e
     retorna um inteiro sem sinal de 64 bits.  A função não verifica se
     'fd' é um *note eventfd(): a0f.

     *note Disponibilidade: 1fed.: 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(): a0f.
     'value' deve ser um inteiro sem sinal de 64 bits.  A função não
     verifica se 'fd' é um *note eventfd(): a0f.

     *note Disponibilidade: 1fed.: 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(): a0f.

     *note Disponibilidade: 1fed.: Linux >= 2.6.27

     Adicionado na versão 3.10.

 -- Dado: os.EFD_NONBLOCK

     Define sinalizador de status *note O_NONBLOCK: 1030. para um novo
     descritor de arquivo *note eventfd(): a0f.

     *note Disponibilidade: 1fed.: 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(): a0f.  Na leitura o contador
     interno é decrementado em um.

     *note Disponibilidade: 1fed.: 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(): 519.
     implementa:

        - *note read(): f89.

        - *note select(): f94.

        - *note poll(): 2f37.

     O método *note read(): f89. do descritor de arquivo pode ser
     chamado com um buffer de tamanho 8.  Se o temporizador já expirou
     uma ou mais vezes, *note read(): f89. 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: 19b. com
     ‘int.from_bytes(x, byteorder=sys.byteorder)’.

     *note select(): f94. e *note poll(): 2f37. 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: 2f3b. válido, conforme
     definido no módulo *note time: f4.:

        - *note time.CLOCK_REALTIME: 89e.

        - *note time.CLOCK_MONOTONIC: 89d.

        - *note time.CLOCK_BOOTTIME: d7b. (A partir de Linux 3.15 para
          timerfd_create)

     Se 'clockid' é *note time.CLOCK_REALTIME: 89e, é 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: 521.

     Se 'clockid' é *note time.CLOCK_MONOTONIC: 89d, é 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: d7b, é idêntica a *note
     time.CLOCK_MONOTONIC: 89d. 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: 51e.

        - *note TFD_CLOEXEC: 51f.

     Se *note TFD_NONBLOCK: 51e. não está definido como um sinalizador,
     *note read(): f89. bloqueia até o temporizador expirar.  Se está
     definido como um sinalizador, *note read(): f89. não bloqueia, mas
     se não expirou desde a última chamada, *note read(): f89. levanta
     *note OSError: 2bf. com ‘errno’ definido como *note errno.EAGAIN:
     2590.

     *note TFD_CLOEXEC: 51f. é sempre definido pelo Python
     automaticamente.

     O descritor de arquivo deve ser fechado com *note os.close(): d5f.
     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: 1fed.: 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(): 51b.

     '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: 520.

        - *note TFD_TIMER_CANCEL_ON_SET: 521.

     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: 2bf. é levantada com ‘errno’ definido como *note
     errno.EINVAL: 1c89.

     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: 520. está
     definido, o temporizador dispara quando o relógio do temporizador
     (definido por 'clockid' em *note timerfd_create(): 519.) atingir
     'initial' segundos.

     O intervalor do temporizador é definido pelo *note float: 196.
     '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: 2bf. será levantada com ‘errno’ definido
     como *note errno.EINVAL: 1c89.

     Se o sinalizador *note TFD_TIMER_CANCEL_ON_SET: 521. é definido com
     *note TFD_TIMER_ABSTIME: 520. e o relógio para o temporizador é
     *note time.CLOCK_REALTIME: 89e, 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: 1fed.: 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(): 51a, mas usa nanossegundos.
     Essa função opera no mesmo intervalo do temporizador definido com
     *note timerfd_settime(): 51a.

     *note Disponibilidade: 1fed.: 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: 520. 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: 1fed.: 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(): 51c, mas retorna o tempo em
     nanossegundos.

     *note Disponibilidade: 1fed.: 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(): 519, que
     define o estado do sinalizador *note O_NONBLOCK: 1030. para o novo
     descritor de arquivo de temporizador.  Se *note TFD_NONBLOCK: 51e.
     não for definido como sinalizador, *note read(): f89. bloqueia.

     *note Disponibilidade: 1fed.: 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(): 519.  Se *note
     TFD_CLOEXEC: 51f. for definido como um sinalizador, define o
     sinalizador close-on-exec para o novo descritor de arquivo.

     *note Disponibilidade: 1fed.: 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(): 51a. e
     *note timerfd_settime_ns(): 51b.  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: 1fed.: 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(): 51a. e
     *note timerfd_settime_ns(): 51b. juntamente com *note
     TFD_TIMER_ABSTIME: 520.  O cronômetro é cancelado quando a hora do
     relógio subjacente muda de forma descontínua.

     *note Disponibilidade: 1fed.: 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: e3f.).  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: d47. e *note não seguir links simbólicos: 12e7.

     Levanta um *note evento de auditoria: 1b5d. ‘os.getxattr’ com os
     argumentos ‘path’ e ‘attribute’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a. 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(): 1301. irá examinar o diretório
     atual.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: d47. e *note não seguir links simbólicos: 12e7.

     Levanta um *note evento de auditoria: 1b5d. ‘os.listxattr’ com o
     argumento ‘path’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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: e3f.).  Se for uma string, é
     codificada com o *note tratador de erros e codificação do sistema
     de arquivos: 752.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: d47. e *note não seguir links simbólicos: 12e7.

     Levanta um *note evento de auditoria: 1b5d. ‘os.removexattr’ com os
     argumentos ‘path’ e ‘attribute’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a. 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: e3f.).  Se for um str, ele é codificado com *note
     tratador de erros e codificação do sistema de arquivos: 752.
     'flags' podem ser *note XATTR_REPLACE: 2f3d. ou *note XATTR_CREATE:
     2f3e.  Se *note XATTR_REPLACE: 2f3d. for fornecido e o atributo não
     existe, ‘ENODATA’ será levantada.  Se *note XATTR_CREATE: 2f3e. 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: d47. e *note não seguir links simbólicos: 12e7.

          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: 1b5d. ‘os.setxattr’ com os
     argumentos ‘path’, ‘attribute’, ‘value’ e ‘flags’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a. 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(): 1303.  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(): 1303.  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*: 2f42. 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(): 1330.

 -- 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: 3e1.), e também por *note ctypes: 2e.

     Remove o diretório chamando 'close()' no objeto retornado ou
     usando-o em uma instrução *note with: 186.

     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: 1b5d. ‘os.add_dll_directory’
     com o argumento ‘path’.

     *note Disponibilidade: 1fed.: 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:
     c88. 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: 2bf.

     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(): f82. antes de chamar uma
     função *note exec*: 2f42.

     As variantes “l” e “v” das funções *note exec*: 2f42. 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():
     2f45, *note execlpe(): 2f46, *note execvp(): 2f47. e *note
     execvpe(): 2f48.) 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: 2f42,
     discutidas no próximo parágrafo), o novo ambiente é usado como
     fonte da variável ‘PATH’.  As outras variantes, *note execl():
     2f42, *note execle(): 2f44, *note execv(): 2ea7. e *note execve():
     12f5, 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(): 2f44, *note execlpe(): 2f46, *note execve():
     12f5. e *note execvpe(): 2f48. (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(): 2f42, *note execlp(): 2f45, *note execv(): 2ea7. e *note
     execvp(): 2f47. fazem com que o novo processo herde o ambiente do
     processo atual.

     Para *note execve(): 12f5. 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: 12f9.  Se não estiver disponível, usá-lo vai
     levantar uma *note NotImplementedError: 368.

     Levanta um *note evento de auditoria: 1b5d. ‘os.exec’ com os
     argumentos ‘path’, ‘args’ e ‘env’.

     *note Disponibilidade: 1fed.: 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(): 12f5.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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): 276.
          ‘_exit()’ normalmente só deve ser usado no processo filho após
          uma função *note fork(): 4af.

Os seguintes códigos de saída são definidos e podem ser usados com *note
_exit(): 258c, 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: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Dado: os.EX_DATAERR

     Código de saída que significa que os dados inseridos estavam
     incorretos.

     *note Disponibilidade: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Dado: os.EX_NOUSER

     Código de saída que significa que um usuário especificado não
     existe.

     *note Disponibilidade: 1fed.: Unix, not WASI.

 -- Dado: os.EX_NOHOST

     Código de saída que significa que um host especificado não existe.

     *note Disponibilidade: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Dado: os.EX_SOFTWARE

     Código de saída que significa que um erro interno do software foi
     detectado.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: Unix, not WASI.

 -- Dado: os.EX_NOTFOUND

     Código de saída que significa algo como “uma entrada não foi
     encontrada”.

     *note Disponibilidade: 1fed.: 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: 2bf.
     é 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: 1b5d. ‘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:
          d5.

          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: 111.

     Alterado na versão 3.8: Chamar ‘fork()’ em um subinterpretador não
     é mais possível (*note RuntimeError: 243. é 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(): 4af. agora
     levanta uma exceção *note DeprecationWarning: 1a3.

     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(): 4af. 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: 1fed.: 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: b6.  Se
     ocorrer um erro, *note OSError: 2bf. é levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 111.

     Alterado na versão 3.8: Chamar ‘forkpty()’ em um subinterpretador
     não é mais permitido (*note RuntimeError: 243. é 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: 1a3.  Veja a explicação mais longa em
     *note os.fork(): 4af.

     *note Disponibilidade: 1fed.: 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: cb.

     Windows: os sinais *note signal.CTRL_C_EVENT: 155a. e *note
     signal.CTRL_BREAK_EVENT: 155b. 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(): 132d.

     Levanta um *note evento de auditoria: 1b5d. ‘os.kill’ com os
     argumentos ‘pid’ e ‘sig’.

     *note Disponibilidade: 1fed.: 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: 1b5d. ‘os.killpg’ com os
     argumentos ‘pgid’ e ‘sig’.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: Linux >= 5.3, Android >= *note
     build-time: d77. 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: 2590. em vez de
          bloquear.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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(): 314.  O objeto arquivo retornado lê ou
     escreve strings de texto em vez de bytes.

     O método ‘close’ retorna *note None: 87a. 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(): b0d. 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: 4b1.; consulte a
     documentação desta classe para maneiras mais poderosas de gerenciar
     e se comunicar com subprocessos.

     *note Disponibilidade: 1fed.: not WASI, not Android, not iOS.

          Nota: O *note Modo UTF-8 do Python: 85b. afeta as codificações
          usadas para 'cmd' e conteúdo de encadeamento.

          *note popen(): 318. é um wrapper simples em torno de *note
          subprocess.Popen: 4b1.  Use *note subprocess.Popen: 4b1. ou
          *note subprocess.run(): d73. para controlar opções como
          codificações.

     Descontinuado desde a versão 3.14: A função está *note suavemente
     descontinuada: 23c. e não deve mais ser usada para escrever novos
     códigos.  O módulo *note subprocess: dc. é recomendado em vez
     disso.

 -- 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(): d73. em
     vez de *note posix_spawn(): 528.

     Os argumentos somente-posicional 'path', 'args', e 'env' são
     similares a *note execve(): 12f5.  '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(): 1cc7. 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: 368. é 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: 1866.
     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: 1b5d. ‘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: 1fed.: 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(): 528. 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: 1b5d. ‘os.posix_spawn’ com os
     argumentos ‘path’, ‘argv’ e ‘env’.

     Adicionado na versão 3.8.

     *note Disponibilidade: 1fed.: POSIX, not WASI, not Android, not
     iOS.

     Veja a documentação de *note posix_spawn(): 528.

 -- 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(): 4af. 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:
     dc. 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(): dac, *note PyOS_AfterFork_Parent(): dad. e
     *note PyOS_AfterFork_Child(): 42d.

     Não há uma forma de desfazer o registro de uma função.

     *note Disponibilidade: 1fed.: 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: dc. 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: 1384.)

     Se 'mode' for *note P_NOWAIT: 2f65, esta função retorna o id do
     processo do novo processo; se 'mode' for *note P_WAIT: 2f66,
     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():
     f8e.

     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*: 319. 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(): 2f5f, *note spawnlpe(): 2f60, *note spawnvp(): 2f63. e
     *note spawnvpe(): 2f64.) 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: 319,
     discutidas no próximo parágrafo), o novo ambiente é usado como
     fonte da variável ‘PATH’.  As outras variantes, *note spawnl():
     319, *note spawnle(): 2f5e, *note spawnv(): 2f61. e *note
     spawnve(): 2f62, 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(): 2f5e, *note spawnlpe(): 2f60, *note
     spawnve(): 2f62. e *note spawnvpe(): 2f64. (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(): 319, *note spawnlp(): 2f5f, *note spawnv():
     2f61. e *note spawnvp(): 2f63. 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(): 2f5f. e
     *note spawnvpe(): 2f64. 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: 1b5d. ‘os.spawn’ com os
     argumentos ‘mode’, ‘path’, ‘args’ e ‘env’.

     *note Disponibilidade: 1fed.: Unix, Windows, not WASI, not Android,
     not iOS.

     *note spawnlp(): 2f5f, *note spawnlpe(): 2f60, *note spawnvp():
     2f63. e *note spawnvpe(): 2f64. não estão disponíveis no Windows.
     *note spawnle(): 2f5e. e *note spawnve(): 2f62. não são seguros
     para thread no Windows; recomendamos que você use o módulo *note
     subprocess: dc.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

     Descontinuado desde a versão 3.14: Estas funções estão *note
     suavemente descontinuadas: 23c. e não devem mais ser usadas para
     escrever novos códigos.  O módulo *note subprocess: dc. é
     recomendado em vez disso.

 -- 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*: 319.  Se qualquer um desses valores for fornecido, as
     funções *note spawn*: 319. retornarão assim que o novo processo for
     criado, com o id do processo como o valor de retorno.

     *note Disponibilidade: 1fed.: Unix, Windows.

 -- Dado: os.P_WAIT

     Valor possível para o parâmetro 'mode' para a família de funções
     *note spawn*: 319.  Se for fornecido como 'mode', as funções *note
     spawn*: 319. 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: 1fed.: 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*: 319.  Eles são menos portáveis do que os listados
     acima.  *note P_DETACH: 2f68. é semelhante a *note P_NOWAIT: 2f65,
     mas o novo processo é separado do console do processo de chamada.
     Se *note P_OVERLAY: 2f69. for usado, o processo atual será
     substituído; a função *note spawn*: 319. não retornará.

     *note Disponibilidade: 1fed.: 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(): 1b6e. 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: a8. ou a
     função *note os.path.normpath(): 1515. 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: 368. será
     levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘os.startfile’ com os
     argumentos ‘path’ e ‘operation’.

     Levanta um *note evento de auditoria: 1b5d. ‘os.startfile/2’ com os
     argumentos ‘path’, ‘operation’, ‘arguments’, ‘cwd’ e ‘show_cmd’.

     *note Disponibilidade: 1fed.: 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: 754. 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(): f8c.

     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: dc. fornece recursos mais poderosos para
     gerar novos processos e recuperar seus resultados; usar esse módulo
     é recomendado a usar esta função.  Veja a seção *note Replacing
     Older Functions with the subprocess Module: 1384. na documentação
     do *note subprocess: dc. para algumas receitas úteis.

     No Unix, *note waitstatus_to_exitcode(): b0d. 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: 1b5d. ‘os.system’ com o
     argumento ‘command’.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 124e. é levantada.

     *note waitstatus_to_exitcode(): b0d. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1fed.: 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(): f8e. é 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: 2f6a, *note P_PGID: 2f6b, *note
     P_ALL: 2f6c. ou (no Linux) *note P_PIDFD: b0c.  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: 2f6d, *note WSTOPPED: 2f6e. ou *note
     WCONTINUED: 2f6f. é obrigatório; *note WNOHANG: 2f70. e *note
     WNOWAIT: 2f71. 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: 2f72.)

        * ‘si_status’ (o status de saída ou número do sinal, dependendo
          de ‘si_code’)

        * ‘si_code’ (veja *note CLD_EXITED: 2f73. para possíveis
          valores)

     Se *note WNOHANG: 2f70. 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: 124e. será levantada.

     *note Disponibilidade: 1fed.: 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():
     f8c.).  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(): f8e. 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: 2f70. 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: 124e. será levantada.  Outras opções que podem
     ser usadas são *note WUNTRACED: 2f74. e *note WCONTINUED: 2f6f.

     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*: 319. chamadas com *note P_NOWAIT:
     2f65. retornam manipuladores de processo adequados.

     *note waitstatus_to_exitcode(): b0d. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1fed.: 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: f7c. (consulte PEP 475(8) para entender a
     justificativa).

 -- Função: os.wait3 (options)

     Semelhante a *note waitpid(): f8e, 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():
     1622. para obter detalhes sobre as informações de uso de recursos.
     O argumento 'option' é o mesmo fornecido para *note waitpid(): f8e.
     e *note wait4(): f8b.

     *note waitstatus_to_exitcode(): b0d. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1fed.: Unix, not WASI, not Android, not iOS.

 -- Função: os.wait4 (pid, options)

     Semelhante a *note waitpid(): f8e, 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(): 1622. para obter detalhes sobre as
     informações de uso de recursos.  Os argumentos para *note wait4():
     f8b. são os mesmos que aqueles fornecidos a *note waitpid(): f8e.

     *note waitstatus_to_exitcode(): b0d. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1fed.: 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():
     f8d.  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(): 699.).

     *note Disponibilidade: 1fed.: 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(): f8e, *note
     wait3(): f8a, *note wait4(): f8b. e *note waitid(): f8d. 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: 1fed.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WEXITED

     Este sinalizador 'options' para *note waitid(): f8d. 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: 1fed.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

 -- Dado: os.WSTOPPED

     Este sinalizador 'options' para *note waitid(): f8d. 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: 1fed.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

 -- Dado: os.WUNTRACED

     Este sinalizador de 'options' para *note waitpid(): f8e, *note
     wait3(): f8a. e *note wait4(): f8b. 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(): f8d.

     *note Disponibilidade: 1fed.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WNOHANG

     Este sinalizador 'options' faz com que *note waitpid(): f8e, *note
     wait3(): f8a, *note wait4(): f8b. e *note waitid(): f8d. retornem
     imediatamente se nenhum status de processo filho estiver disponível
     imediatamente.

     *note Disponibilidade: 1fed.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WNOWAIT

     Este sinalizador 'options' faz com que *note waitid(): f8d. 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: 1fed.: 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(): f8d.

     *note Disponibilidade: 1fed.: 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:
     b0a. e *note CLD_STOPPED: b0b.

 -- 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: 2ea.

     No Windows, retorna 'status' deslocado para a direita em 8 bits.

     No Unix, se o processo está sendo rastreado ou se *note waitpid():
     f8e. foi chamado com a opção *note WUNTRACED: 2f74, 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(): 2f78, *note WEXITSTATUS(): 2f79,
     *note WIFSIGNALED(): 2f7a, *note WTERMSIG(): 2f7b, *note
     WIFSTOPPED(): 2f7c, *note WSTOPSIG(): 2f7d.

     *note Disponibilidade: 1fed.: 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(): 164c, *note wait(): f8c. ou *note
waitpid(): f8e. 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(): 2f7a.
     for verdadeira.

     *note Disponibilidade: 1fed.: 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: 2f80. (se o processo foi continuado de uma parada
     de controle de trabalho); caso contrário, retorna ‘False’.

     Veja a opção *note WCONTINUED: 2f6f.

     *note Disponibilidade: 1fed.: 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(): 2f7c. só retorna ‘True’ se a chamada de *note
     waitpid(): f8e. foi feita usando a opção *note WUNTRACED: 2f74. ou
     quando o processo está sendo rastreado (veja ‘ptrace(2)(9)’).

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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(): 2f78.
     for verdadeira.

     *note Disponibilidade: 1fed.: 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(): 2f7c.
     for verdadeira.

     *note Disponibilidade: 1fed.: 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(): 2f7a.
     for verdadeira.

     *note Disponibilidade: 1fed.: 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_DEADLINE

     Política de agendamento para tarefas com restrições de prazo.

     Adicionado na versão 3.14.

 -- Dado: os.SCHED_IDLE

     Política de agendamento para tarefas em segundo plano de prioridade
     extremamente baixa.

 -- Dado: os.SCHED_NORMAL

     Apelido para *note SCHED_OTHER: 2f83.

     Adicionado na versão 3.14.

 -- 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(): 130b, *note sched_setscheduler(): 130c.
     e *note sched_getparam(): 1307.  É 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: 1866.

 -- 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: 1866.

 -- Função: os.sched_getparam (pid, /)

     Retorna os parâmetros de agendamento como uma instância de *note
     sched_param: 1866. 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(): 4d4.

   ---------- 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:
     2ea. é 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: 2bf. é levantada
     com *note errno.EINVAL: 1c89. como número do erro.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: os.confstr_names

     Nomes de mapeamento de dicionário aceitos por *note confstr():
     1844. 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: 1fed.: 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(): 4d4. 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: Se *note -X cpu_count: 16f. for fornecido
     ou *note PYTHON_CPU_COUNT: 518. for definido, *note cpu_count():
     4d5. retornará o valor substituído '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: 2bf.
     se a média de carga não foi obtida.

     *note Disponibilidade: 1fed.: 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(): 4d5. dependendo da afinidade da CPU.

     A função *note cpu_count(): 4d5. pode ser usada para obter o número
     de CPUs lógicas no 'sistema'.

     Se *note -X cpu_count: 16f. for fornecido ou *note
     PYTHON_CPU_COUNT: 518. for definido, *note process_cpu_count():
     4d4. retornará o valor substituído 'n'.

     Veja também a função *note sched_getaffinity(): 1306.

     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(): 1844. se aplicam aqui também; o dicionário que
     fornece informações sobre os nomes conhecidos é fornecido por
     ‘sysconf_names’.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: os.sysconf_names

     Nomes de mapeamento de dicionário aceitos por *note sysconf():
     1845. 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: 1fed.: 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: a6.

 -- 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: a6.

 -- 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: a6.

 -- 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(): 2af2. e *note os.path.join(): 18ed. – mas
     ocasionalmente é útil.  Também disponível via *note os.path: a6.

 -- 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: a6.

 -- 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:
     a6.

 -- 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: a6.

 -- Dado: os.defpath

     O caminho de pesquisa padrão usado por *note exec*p*: 2f42. e *note
     spawn*p*: 319. se o ambiente não tiver uma chave ‘'PATH'’.  Também
     disponível via *note os.path: a6.

 -- 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: a6.

 -- 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(): 131b.
     e *note getdlopenflags(): 16fc.  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:
     2f91. e *note GRND_NONBLOCK: 2f92.

     Veja também a página de manual do getrandom()(1) do Linux.

     *note Disponibilidade: 1fed.: 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(): ead. pode ser usada para
     obter bytes aleatórios no modo não bloqueante (usando a sinalização
     *note GRND_NONBLOCK: 2f92.) 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: 368. é levantada.

     No Windows, ainda vai usar ‘BCryptGenRandom()’.

     Ver também
     ..........

     O módulo *note secrets: c5. 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: 29f5.

     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(): ead.
     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: 2f92. estiver definido, então
     *note getrandom(): ead. não bloqueia nesses casos, mas, em vez
     disso, levanta *note BlockingIOError: 234. 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::
* High-level Module Interface::
* hierarquia de classe::
* Static Typing::
* Desempenho: Desempenho<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 83. 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: 13bf.  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: 169. ao método
‘write()’ de um fluxo binário levantará uma *note TypeError: 198.  O
mesmo ocorrerá com um objeto *note bytes: 192. ao método ‘write()’ de um
fluxo de texto.

Alterado na versão 3.3: Operações que costumavam levantar *note IOError:
1249. agora levantam *note OSError: 2bf, já que *note IOError: 1249.
agora é um apelido de *note OSError: 2bf.

* 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: 169.  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(): 314,
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: 111f.:

     f = io.StringIO("alguns dados em texto iniciais")

     Nota: Ao trabalhar com um fluxo não bloqueante, esteja ciente de
     que operações de leitura em objetos de E/S de texto podem levantar
     uma *note BlockingIOError: 234. se o fluxo não puder executar a
     operação imediatamente.

A API de fluxo de texto é descrita em detalhes na documentação de *note
TextIOBase: 899.


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: 193. e produz objetos *note bytes: 192.  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(): 314.
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: 109a.:

     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: 898.

Outros módulos de biblioteca podem fornecer maneiras adicionais de criar
fluxos de texto ou binários.  Veja *note socket.socket.makefile(): 139b.
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: 12cc.


File: python.info,  Node: Codificação do texto,  Next: High-level Module Interface,  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: 9b4. e *note open(): 314. é
específica da localidade (*note locale.getencoding(): 327.).

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: 85b.

     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: 85b. 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: 16f. ou definir a variável de ambiente *note
PYTHONWARNDEFAULTENCODING: 9b5, que emitirá um *note EncodingWarning:
1fdb. quando a codificação padrão for usada.

Se você estiver fornecendo uma API que usa *note open(): 314. ou *note
TextIOWrapper: 9b4. e passa ‘encoding=None’ como parâmetro, você pode
usar *note text_encoding(): 197a. para que os chamadores da API emitam
um *note EncodingWarning: 1fdb. 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: High-level Module Interface,  Next: hierarquia de classe,  Prev: Codificação do texto,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.7 High-level Module Interface
....................................

 -- Dado: io.DEFAULT_BUFFER_SIZE

     An int containing the default buffer size used by the module’s
     buffered I/O classes.  *note open(): 314. uses the file’s blksize
     (as obtained by *note os.stat(): 26c.) if possible.

 -- Função: io.open (file, mode='r', buffering=-1, encoding=None,
          errors=None, newline=None, closefd=True, opener=None)

     This is an alias for the builtin *note open(): 314. function.

     Esta função levanta um *note evento de auditoria: 1b5d. ‘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: 169. and an absolute path.

     The behavior of this function may be overridden by an earlier call
     to the *note PyFile_SetOpenCodeHook(): 19d6.  However, assuming
     that 'path' is a *note str: 169. 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(): 314.
     or *note TextIOWrapper: 9b4. 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:
     85b.

     This function emits an *note EncodingWarning: 1fdb. if *note
     sys.flags.warn_default_encoding: 891. 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: 1fdb. is emitted for the
     caller of ‘read_text()’.

     Veja *note Codificação do texto: 9b6. para mais informações.

     Adicionado na versão 3.10.

     Alterado na versão 3.11: *note text_encoding(): 197a. 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: 234. exception.

 -- Exceção: io.UnsupportedOperation

     An exception inheriting *note OSError: 2bf. and *note ValueError:
     2ea. that is raised when an unsupported operation is called on a
     stream.

Ver também
..........

*note sys: df.

     contains the standard IO streams: *note sys.stdin: 754, *note
     sys.stdout: cc0, and *note sys.stderr: b29.


File: python.info,  Node: hierarquia de classe,  Next: Static Typing,  Prev: High-level Module Interface,  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: 13b2. (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: 898.
     provides unoptimized implementations of ‘readinto()’ and
     ‘readline()’.

At the top of the I/O hierarchy is the abstract base class *note IOBase:
4ff.  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: 1c36.
if they do not support a given operation.

The *note RawIOBase: 12cc. ABC extends *note IOBase: 4ff.  It deals with
the reading and writing of bytes to a stream.  *note FileIO: 150b.
subclasses *note RawIOBase: 12cc. to provide an interface to files in
the machine’s file system.

The *note BufferedIOBase: 898. ABC extends *note IOBase: 4ff.  It deals
with buffering on a raw binary stream (*note RawIOBase: 12cc.).  Its
subclasses, *note BufferedWriter: 15a3, *note BufferedReader: 140a, and
*note BufferedRWPair: 15a5. buffer raw binary streams that are writable,
readable, and both readable and writable, respectively.  *note
BufferedRandom: 15a4. provides a buffered interface to seekable streams.
Another *note BufferedIOBase: 898. subclass, *note BytesIO: 109a, is a
stream of in-memory bytes.

The *note TextIOBase: 899. ABC extends *note IOBase: 4ff.  It deals with
streams whose bytes represent text, and handles encoding and decoding to
and from strings.  *note TextIOWrapper: 9b4, which extends *note
TextIOBase: 899, is a buffered text interface to a buffered raw stream
(*note BufferedIOBase: 898.).  Finally, *note StringIO: 111f. is an
in-memory stream for text.

Argument names are not part of the specification, and only the arguments
of *note open(): 314. are intended to be used as keyword arguments.

The following table summarizes the ABCs provided by the *note io: 83.
module:

ABC                           Inherits               Stub Methods                 Mixin Methods and Properties
                                                                                  
-----------------------------------------------------------------------------------------------------------------------------------------
                                                                                  
*note IOBase: 4ff.                                   ‘fileno’, ‘seek’, and        ‘close’, ‘closed’, ‘__enter__’, ‘__exit__’, ‘flush’,
                                                     ‘truncate’                   ‘isatty’, ‘__iter__’, ‘__next__’, ‘readable’,
                                                                                  ‘readline’, ‘readlines’, ‘seekable’, ‘tell’,
                                                                                  ‘writable’, and ‘writelines’
                                                                                  
                                                                                  
*note RawIOBase: 12cc.        *note IOBase: 4ff.     ‘readinto’ and ‘write’       Inherited *note IOBase: 4ff. methods, ‘read’, and
                                                                                  ‘readall’
                                                                                  
                                                                                  
*note BufferedIOBase: 898.    *note IOBase: 4ff.     ‘detach’, ‘read’, ‘read1’,   Inherited *note IOBase: 4ff. methods, ‘readinto’,
                                                     and ‘write’                  and ‘readinto1’
                                                                                  
                                                                                  
*note TextIOBase: 899.        *note IOBase: 4ff.     ‘detach’, ‘read’,            Inherited *note IOBase: 4ff. 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: 4ff. 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: 2ea. (or *note
     UnsupportedOperation: 1c36.) 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: 192.  Other *note bytes-like objects: 193. are
     accepted as method arguments too.  Text I/O classes work with *note
     str: 169. data.

     Note that calling any method (even inquiries) on a closed stream is
     undefined.  Implementations may raise *note ValueError: 2ea. in
     this case.

     *note IOBase: 4ff. (and its subclasses) supports the iterator
     protocol, meaning that an *note IOBase: 4ff. 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(): 257b. below.

     *note IOBase: 4ff. is also a context manager and therefore supports
     the *note with: 186. 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: 4ff. 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: 2ea.

          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: 2bf. 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: 2bf.

      -- 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(): 314. 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: 1489. or ‘0’ – start of the stream
               (the default); 'offset' should be zero or positive

             * *note os.SEEK_CUR: 148a. or ‘1’ – current stream
               position; 'offset' may be negative

             * *note os.SEEK_END: 148b. 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: 2ecf. or *note
          os.SEEK_DATA: 2ed0.  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(): 1488, *note tell(): 159e. and *note
          truncate(): 150c. will raise *note OSError: 2bf.

      -- 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(): 150c. will raise *note
          OSError: 2bf.

      -- 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: 4ff. provides a
          default implementation of this method that calls the
          instance’s *note close(): 500. method.

 -- Classe: io.RawIOBase

     Base class for raw binary streams.  It inherits from *note IOBase:
     4ff.

     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: 12cc. provides these methods in addition to those
     from *note IOBase: 4ff.:

      -- 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(): 2fa1.
          and *note readinto(): 1013.

      -- 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: 193. 'b', and return the number of bytes read.  For
          example, 'b' might be a *note bytearray: 342.  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: 193, '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: 4ff.

     The main difference with *note RawIOBase: 12cc. is that methods
     *note read(): 1524, *note readinto(): 17f9. and *note write(): ecb.
     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(): ecb. will raise
     *note BlockingIOError: 234. with *note
     BlockingIOError.characters_written: 2594. and *note read(): 1524.
     will return data read so far or ‘None’ if no data is available.

     Besides, the *note read(): 1524. method does not have a default
     implementation that defers to *note readinto(): 17f9.

     A typical *note BufferedIOBase: 898. implementation should not
     inherit from a *note RawIOBase: 12cc. implementation, but wrap one,
     like *note BufferedWriter: 15a3. and *note BufferedReader: 140a.
     do.

     *note BufferedIOBase: 898. provides or overrides these data
     attributes and methods in addition to those from *note IOBase:
     4ff.:

      -- Atributo: raw

          The underlying raw stream (a *note RawIOBase: 12cc. instance)
          that *note BufferedIOBase: 898. deals with.  This is not part
          of the *note BufferedIOBase: 898. 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: 109a, do not have the
          concept of a single raw stream to return from this method.
          They raise *note UnsupportedOperation: 1c36.

          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: 192. 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(): f89.
          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(): 2fa1.), otherwise will read in a
          loop until read returns ‘None’, an empty *note bytes: 192, 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:
               234. or return ‘None’ if no data is available.  *note io:
               83. implementations return ‘None’.

      -- Método: read1 (size=-1, /)

          Read and return up to 'size' bytes, calling *note readinto():
          1013. which may retry if *note EINTR: f7b. 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:
               234. or return ‘None’ if no data is available.  *note io:
               83. implementations return ‘None’.

      -- Método: readinto (b, /)

          Read bytes into a pre-allocated, writable *note bytes-like
          object: 193. 'b' and return the number of bytes read.  For
          example, 'b' might be a *note bytearray: 342.

          Like *note read(): 1524, multiple reads may be issued to the
          underlying raw stream, unless the latter is interactive.

          A *note BlockingIOError: 234. 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: 193. 'b', using at most one call to the underlying raw
          stream’s *note read(): 1012. (or *note readinto(): 1013.)
          method.  Return the number of bytes read.

          A *note BlockingIOError: 234. 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: 193, '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: 2bf. 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: 234. 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: 12cc.

     The 'name' can be one of two things:

        * a character string or *note bytes: 192. 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: 150b.
          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: 1216. 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(): 1012. (when called with a positive argument),
     *note readinto(): 1013. and *note write(): 159d. 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: f86. as 'opener'
     results in functionality similar to passing ‘None’).

     O arquivo recém-criado é *note non-inheritable: 10f2.

     See the *note open(): 314. 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: 150b. provides these data attributes in addition to
     those from *note RawIOBase: 12cc. and *note IOBase: 4ff.:

      -- 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: 898.  The buffer is discarded when the *note
     close(): 500. method is called.

     The optional argument 'initial_bytes' is a *note bytes-like object:
     193. that contains initial data.

     *note BytesIO: 109a. provides or overrides these methods in
     addition to those from *note BufferedIOBase: 898. and *note IOBase:
     4ff.:

      -- 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:
               109a. object cannot be resized or closed.

          Adicionado na versão 3.2.

      -- Método: getvalue ()

          Return *note bytes: 192. containing the entire contents of the
          buffer.

      -- Método: read1 (size=-1, /)

          In *note BytesIO: 109a, this is the same as *note read():
          1524.

          Alterado na versão 3.7: The 'size' argument is now optional.

      -- Método: readinto1 (b, /)

          In *note BytesIO: 109a, this is the same as *note readinto():
          17f9.

          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: 12cc. raw binary stream.
     It inherits from *note BufferedIOBase: 898.

     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: 140a. for the given
     readable 'raw' stream and 'buffer_size'.  If 'buffer_size' is
     omitted, *note DEFAULT_BUFFER_SIZE: 197b. is used.

     *note BufferedReader: 140a. provides or overrides these methods in
     addition to those from *note BufferedIOBase: 898. and *note IOBase:
     4ff.:

      -- 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: 140a. this is the same as *note
          io.BufferedIOBase.read(): 1524.

      -- Método: read1 (size=-1, /)

          In *note BufferedReader: 140a. this is the same as *note
          io.BufferedIOBase.read1(): 2ce5.

          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: 12cc. raw binary stream.
     It inherits from *note BufferedIOBase: 898.

     When writing to this object, data is normally placed into an
     internal buffer.  The buffer will be written out to the underlying
     *note RawIOBase: 12cc. object under various conditions, including:

        * when the buffer gets too small for all pending data;

        * when *note flush(): 2faa. is called;

        * when a *note seek(): 1488. is requested (for *note
          BufferedRandom: 15a4. objects);

        * when the *note BufferedWriter: 15a3. object is closed or
          destroyed.

     The constructor creates a *note BufferedWriter: 15a3. for the given
     writeable 'raw' stream.  If the 'buffer_size' is not given, it
     defaults to *note DEFAULT_BUFFER_SIZE: 197b.

     *note BufferedWriter: 15a3. provides or overrides these methods in
     addition to those from *note BufferedIOBase: 898. and *note IOBase:
     4ff.:

      -- Método: flush ()

          Force bytes held in the buffer into the raw stream.  A *note
          BlockingIOError: 234. should be raised if the raw stream
          blocks.

      -- Método: write (b, /)

          Write the *note bytes-like object: 193, 'b', and return the
          number of bytes written.  When in non-blocking mode, a *note
          BlockingIOError: 234. with *note
          BlockingIOError.characters_written: 2594. 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: 12cc. raw binary stream.  It inherits
     from *note BufferedReader: 140a. and *note BufferedWriter: 15a3.

     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: 197b.

     *note BufferedRandom: 15a4. is capable of anything *note
     BufferedReader: 140a. or *note BufferedWriter: 15a3. can do.  In
     addition, *note seek(): 1488. and *note tell(): 159e. 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: 12cc. raw binary streams—one readable,
     the other writeable.  It inherits from *note BufferedIOBase: 898.

     'reader' and 'writer' are *note RawIOBase: 12cc. objects that are
     readable and writeable respectively.  If the 'buffer_size' is
     omitted it defaults to *note DEFAULT_BUFFER_SIZE: 197b.

     *note BufferedRWPair: 15a5. implements all of *note BufferedIOBase:
     898.'s methods except for *note detach(): 2c8e, which raises *note
     UnsupportedOperation: 1c36.

          Aviso: *note BufferedRWPair: 15a5. 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: 15a4. 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:
     4ff.

     *note TextIOBase: 899. provides or overrides these data attributes
     and methods in addition to those from *note IOBase: 4ff.:

      -- 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: 898. or
          *note RawIOBase: 12cc. instance) that *note TextIOBase: 899.
          deals with.  This is not part of the *note TextIOBase: 899.
          API and may not exist in some implementations.

      -- Método: detach ()

          Separate the underlying binary buffer from the *note
          TextIOBase: 899. and return it.

          After the underlying buffer has been detached, the *note
          TextIOBase: 899. is in an unusable state.

          Some *note TextIOBase: 899. implementations, like *note
          StringIO: 111f, may not have the concept of an underlying
          buffer and calling this method will raise *note
          UnsupportedOperation: 1c36.

          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: 169.  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: 169.
          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(): 2fb1, 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: 898. buffered binary stream.  It inherits from
     *note TextIOBase: 899.

     'encoding' gives the name of the encoding that the stream will be
     decoded or encoded with.  In *note UTF-8 Mode: 85b, this defaults
     to UTF-8.  Otherwise, it defaults to *note locale.getencoding():
     327.  ‘encoding="locale"’ can be used to specify the current
     locale’s encoding explicitly.  See *note Codificação do texto: 9b6.
     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: 2ea. 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(): 1689. 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: f29. 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: 246c.  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(): 2b89. is implied when
     a call to write contains a newline character or a carriage return.

     If 'write_through' is ‘True’, calls to *note write(): ecb. are
     guaranteed not to be buffered: any data written on the *note
     TextIOWrapper: 9b4. 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(): 326, 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.

          Nota: When the underlying raw stream is non-blocking, a *note
          BlockingIOError: 234. may be raised if a read operation cannot
          be completed immediately.

     *note TextIOWrapper: 9b4. provides these data attributes and
     methods in addition to those from *note TextIOBase: 899. and *note
     IOBase: 4ff.:

      -- 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: 19b.

          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():
               2fb5.

             * ‘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: 1489, *note os.SEEK_CUR: 148a, and *note
          os.SEEK_END: 148b.

      -- Método: tell ()

          Return the stream position as an opaque number.  The return
          value of ‘tell()’ can be given as input to *note seek(): 2fb4,
          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: 899.

     The text buffer is discarded when the *note close(): 500. 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(): 1f10.  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: 9b4,
     except that when writing output to the stream, if 'newline' is
     ‘None’, newlines are written as ‘\n’ on all platforms.

     *note StringIO: 111f. provides this method in addition to those
     from *note TextIOBase: 899. and *note IOBase: 4ff.:

      -- Método: getvalue ()

          Return a *note str: 169. containing the entire contents of the
          buffer.  Newlines are decoded as if by *note read(): 1f21,
          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:
     f29. mode.  It inherits from *note codecs.IncrementalDecoder: 26d1.


File: python.info,  Node: Static Typing,  Next: Desempenho<3>,  Prev: hierarquia de classe,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.13 Static Typing
.......................

The following protocols can be used for annotating function and method
arguments for simple stream reading or writing operations.  They are
decorated with *note @typing.runtime_checkable: 669.

 -- Classe: io.Reader [T]

     Generic protocol for reading from a file or other input stream.
     ‘T’ will usually be *note str: 169. or *note bytes: 192, but can be
     any type that is read from the stream.

     Adicionado na versão 3.14.

      -- Método: read ()

      -- Método: read (size, /)

          Read data from the input stream and return it.  If 'size' is
          specified, it should be an integer, and at most 'size' items
          (bytes/characters) will be read.

     Por exemplo:

          def read_it(reader: Reader[str]):
              data = reader.read(11)
              assert isinstance(data, str)

 -- Classe: io.Writer [T]

     Generic protocol for writing to a file or other output stream.  ‘T’
     will usually be *note str: 169. or *note bytes: 192, but can be any
     type that can be written to the stream.

     Adicionado na versão 3.14.

      -- Método: write (data, /)

          Write 'data' to the output stream and return the number of
          items (bytes/characters) written.

     Por exemplo:

          def write_binary(writer: Writer[bytes]):
              writer.write(b"Hello world!\n")

See *note ABCs e protocolos para trabalhar com E/S: 2fba. for other I/O
related protocols and classes that can be used for static type checking.


File: python.info,  Node: Desempenho<3>,  Prev: Static Typing,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.14 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.15 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.16 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(): 2fb1. and *note seek(): 2fb0. are both quite
slow due to the reconstruction algorithm used.

*note StringIO: 111f, however, is a native in-memory unicode container
and will exhibit similar speed to *note BytesIO: 109a.


File: python.info,  Node: Multi-threading<3>,  Next: Reentrancy,  Prev: E/S de texto<3>,  Up: Desempenho<3>

5.16.2.17 Multi-threading
.........................

*note FileIO: 150b. 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: 140a, *note
BufferedWriter: 15a3, *note BufferedRandom: 15a4. and *note
BufferedRWPair: 15a5.) protect their internal structures using a lock;
it is therefore safe to call them from multiple threads at once.

*note TextIOWrapper: 9b4. 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.18 Reentrancy
....................

Binary buffered objects (instances of *note BufferedReader: 140a, *note
BufferedWriter: 15a3, *note BufferedRandom: 15a4. and *note
BufferedRWPair: 15a5.) are not reentrant.  While reentrant calls will
not happen in normal situations, they can arise from doing I/O in a
*note signal: cb. handler.  If a thread tries to re-enter a buffered
object which it is already accessing, a *note RuntimeError: 243. 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(): 314.
function will wrap a buffered object inside a *note TextIOWrapper: 9b4.
This includes standard streams and therefore affects the built-in *note
print(): 116b. 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: 34.
e *note calendar: 15.

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: 2da2. 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(): 161e. 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(): 556. e *note sleep():
     8a1. é melhor do que suas equivalentes Unix: tempos são expressos
     como números em ponto flutuante, *note time(): 556. retorna o tempo
     mais preciso disponível (utilizando ‘gettimeofday()’ do Unix,
     quando disponível) e *note sleep(): 8a1. 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(): 13bc,
     *note localtime(): 16e7, e *note strptime(): 161e, e aceito pelas
     *note asctime(): 13e3, *note mktime(): 13e4. e *note strftime():
     13e5, é uma sequência de 9 inteiros.  Os valores retornados das
     *note gmtime(): 13bc, *note localtime(): 16e7, e *note strptime():
     161e. também oferecem nomes de atributo para campos individuais.

     Veja *note struct_time: eda. para a descrição desses objetos.

     Alterado na versão 3.3: O tipo *note struct_time: eda. foi
     estendido para prover os atributos *note tm_gmtoff: 2fc3. e *note
     tm_zone: 2fc4. quando a plataforma suporta os membros ‘struct tm’
     correspondentes

     Alterado na versão 3.6: Os atributos *note tm_gmtoff: 2fc3. e *note
     tm_zone: 2fc4. da classe *note struct_time: eda. 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: eda. em    *note gmtime(): 13bc.
                                   UTC                           
                                   
                                                                 
     segundos desde a era          *note struct_time: eda. em    *note localtime(): 16e7.
                                   tempo local                   
                                   
                                                                 
     *note struct_time: eda. em    segundos desde a era          *note calendar.timegm(): 27e3.
     UTC                                                         

     *note struct_time: eda. em    segundos desde a era          *note mktime(): 13e4.
     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: eda. representando um tempo
     como retornado pela *note gmtime(): 13bc. ou *note localtime():
     16e7. 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(): 16e7. é utilizado.  Informação de localidade não é
     utilizada por *note asctime(): 13e3.

          Nota: Diferentemente da função em C de mesmo nome, *note
          asctime(): 13e3. 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(): 1356. ou o atributo *note
     ident: 2fc7. dos objetos *note threading.Thread: 176. 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: 1fed.: 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: 2f3b. para uma lista de
     valores aceitos para 'clk_id'

     *note Disponibilidade: 1fed.: 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: 2f3b. para uma lista de valores
     aceitos para 'clk_id'.

     Use *note clock_gettime_ns(): cce. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     *note Disponibilidade: 1fed.: Unix.

     Adicionado na versão 3.3.

 -- Função: time.clock_gettime_ns (clk_id) -> int

     Semelhante à *note clock_gettime(): 135a, mas retorna o tempo em
     nanossegundos.

     *note Disponibilidade: 1fed.: 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: 89e. é o único valor aceito para 'clk_id'.

     Use *note clock_settime_ns(): ccf. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     *note Disponibilidade: 1fed.: 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(): 135b, mas define o tempo em
     nanossegundos.

     *note Disponibilidade: 1fed.: 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: 2da2.
     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: 87a, o tempo atual como
     retornado por *note time(): 556. é utilizado.  ‘ctime(secs)’ é
     equivalente a ‘asctime(localtime(secs))’.  Informação de localidade
     não é utilizada por *note ctime(): 275f.

 -- 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(): 555.

        * ‘'perf_counter'’: *note time.perf_counter(): c6e.

        * ‘'process_time'’: *note time.process_time(): c6f.

        * ‘'thread_time'’: *note time.thread_time(): b26.

        * ‘'time'’: *note time.time(): 556.

     O resultado tem os seguintes atributos:

        - 'adjustable': ‘True’ se o relógio pode ser alterado
          automaticamente (por exemplo, por um daemon NTP) ou
          manualmente por um administrador do sistema, ‘False’ se
          contrário

        - 'implementation': O nome da função C subjacente utilizada para
          obter o valor do relógio.  Confira *note Constantes de ID de
          Relógio: 2f3b. 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:
          196.)

     Adicionado na versão 3.3.

 -- Função: time.gmtime ([secs])

     Converte um tempo expresso em segundos desde o *note epoch: 2da2.
     para uma *note struct_time: eda. em UTC onde o sinalizador de
     horário de verão é sempre zero.  Se 'secs' não é fornecido ou *note
     None: 87a, o tempo atual como retornado por *note time(): 556. é
     utilizado.  Frações de segundo são ignoradas.  Veja acima para uma
     descrição do objeto *note struct_time: eda.  Veja *note
     calendar.timegm(): 27e3. para o inverso desta função.

 -- Função: time.localtime ([secs])

     Como *note gmtime(): 13bc, mas converte para o tempo local.  Se
     'secs' não é fornecido ou *note None: 87a, o tempo atual como
     retornado por *note time(): 556. é 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(): 16e7. pode levantar *note OverflowError: a77, se
     o registro de data e hora estiver fora de valores suportados pelas
     funções ‘localtime()’ or ‘gmtime()’ da plataforma C, e *note
     OSError: 2bf. 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(): 16e7.  Seu argumento
     é a *note struct_time: eda. 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(): 556.
     Se o valor de entrada não puder ser representado como um tempo
     válido, ou *note OverflowError: a77. ou *note ValueError: 2ea.
     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(): cd0. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     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(): 555, 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(): 555. e
     é um relógio monotônico, ou seja, um relógio que não pode
     retroceder.

     Use *note perf_counter_ns(): cd1. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     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(): 555.

 -- Função: time.perf_counter_ns () -> int

     Semelhante à *note perf_counter(): c6e, 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(): cd2. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     Adicionado na versão 3.3.

 -- Função: time.process_time_ns () -> int

     Semelhante à *note process_time(): c6f, 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: 17e. em vez de
          ‘time.sleep(0)’.

          Para abrir mão voluntariamente da CPU, especifique uma *note
          política de agendamento: 2f82. em tempo real e use *note
          os.sched_yield(): 130d. em seu lugar.

     Levanta um *note evento de auditoria: 1b5d. ‘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: eda. representando um tempo
     como retornado por *note gmtime(): 13bc. ou *note localtime():
     16e7. para uma string como especificado pelo argumento 'format'.
     Se 't' não é fornecido, o tempo atual como retornado pela *note
     localtime(): 16e7. é utilizado.  'format' deve ser uma string.  A
     exceção *note ValueError: 2ea. é 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(): 13e5.:

     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(): 161e, não para *note strftime(): 13e5.  Contudo,
          veja também *note datetime.datetime.strptime(): 18a3. e *note
          datetime.datetime.strftime(): e82. onde a diretiva de
          formatação ‘%f’ *note é aplicada para microssegundos: 2731.

       2. Quando utilizado com a função *note strptime(): 161e, 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(): 161e, ‘%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 2822(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: eda. como retornado por
     *note gmtime(): 13bc. ou *note localtime(): 16e7.

     O parâmetro 'format' utiliza as mesmas diretivas das utilizadas por
     *note strftime(): 13e5.; é definido por padrão para ‘"%a %b %d
     %H:%M:%S %Y"’ que corresponde com a formatação retornada por *note
     ctime(): 275f.  Se 'string' não puder ser analisada de acordo com
     'format', ou se possui excesso de dados após analisar, *note
     ValueError: 2ea. é 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():
     13bc, *note localtime(): 16e7, e *note strptime(): 161e.  É um
     objeto com uma interface *note named tuple: 853.: 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): 2fc8. em
                                                                                 *note strftime(): 13e5.
                                                                                 
                                                                                 
     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(): 13e4, *note tm_isdst: 2770. 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: eda, ou por possuir
     elementos do tipo errado, um *note TypeError: 198. é levantado.

 -- Função: time.time () -> float

     Retorna o tempo em segundos desde o *note epoch: 2da2. 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: 2da2.  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(): 556. 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(): 13bc. ou em tempo local
     por passar para a função *note localtime(): 16e7.  Em ambos os
     casos, o objeto *note struct_time: eda. é 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(): cd3. para evitar perda de precisão causada
     pelo tipo *note float: 196.

Alterado na versão 3.13: No Windows, chama
‘GetSystemTimePreciseAsFileTime()’ em vez de
‘GetSystemTimeAsFileTime()’.

 -- Função: time.time_ns () -> int

     Semelhante à *note time(): 556, mas retorna o tempo como um número
     inteiro de nanossegundos desde o *note epoch: 2da2.

     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(): d7e. para evitar perda de precisão
     causada pelo tipo *note float: 196.

     *note Disponibilidade: 1fed.: 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(): b26, 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: 1fed.: 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():
          16e7. sem chamar *note tzset(): 2fd0, 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-hardware/drivers/kernel/high-resolution-timers

   (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).

   (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).

   (6) https://en.wikipedia.org/wiki/Leap_second

   (7) https://datatracker.ietf.org/doc/html/rfc2822.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).

   (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(): 1359. e *note clock_gettime(): 135a.

 -- Dado: time.CLOCK_BOOTTIME

     Idêntica a *note CLOCK_MONOTONIC: 89d, 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: 89e, que pode conter descontinuidades se o tempo é
     alterado utilizando ‘settimeofday()’ ou algo semelhante.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: Unix.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_MONOTONIC_RAW

     Semelhante à *note CLOCK_MONOTONIC: 89d, mas fornece acesso a um
     tempo bruto baseado em hardware que não está sujeito a ajustes NTP.

     *note Disponibilidade: 1fed.: 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: 2fd3, mas lê um armazenado
     pelo sistema no gerenciador de contexto e, portanto, tem menor
     precisão.

     *note Disponibilidade: 1fed.: 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: 1fed.: Unix.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_PROF

     Timer de alta resolução por processo no CPU.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: macOS >= 10.12.

     Adicionado na versão 3.8.

 -- Dado: time.CLOCK_UPTIME_RAW_APPROX

     Semelhante a *note CLOCK_UPTIME_RAW: c2c, mas o valor é armazenado
     pelo sistema no gerenciador de contexto e, portanto, tem menor
     precisão.

     *note Disponibilidade: 1fed.: 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(): 135b.

 -- 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: 1fed.: 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:
     2fda, *note daylight: 2fdb, *note timezone: 2fdc, e *note tzname:
     2fdd.), 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(): 2fd0. é chamada e pode estar incorreto para tempos no
     passado.  É recomendado utilizar os resultados *note tm_gmtoff:
     2fc3. e *note tm_zone: 2fc4. da *note localtime(): 16e7. para obter
     informação de fuso horário.

Ver também
..........

Módulo *note datetime: 34.

     Mais interfaces orientada a objetos para datas e tempos.

Módulo *note locale: 8a.

     Serviços de internacionalização.  A configuração de localidade
     afeta a interpretação de muitos especificadores de formato em *note
     strftime(): 13e5. e *note strptime(): 161e.

Módulo *note calendar: 15.

     Funções gerais relacionadas a calendários.  *note timegm(): 27e3. é
     a função inversa de *note gmtime(): 13bc. 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: 13f1.

   * *note Tutorial avançado: 13f2.

   * *note Livro de receitas de logging: 13f3.

__________________________________________________________________

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(): be9. 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.14/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(): b4f. 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(): b4f. 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():
          1681. method.

               Nota: Do not set this attribute directly - always use
               *note setLevel(): 1681, 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(): 2fe7. and
               *note removeHandler(): 2fe8. 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: 2fea. (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: 2feb.

          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: 85f. 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:
          2fec.  Note, entretanto, que os níveis são guardados
          internamente como inteiros e os métodos como, por exemplo,
          *note getEffectiveLevel(): 2fed. e *note isEnabledFor(): 14f2.
          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(): 2fed.

      -- Método: getEffectiveLevel ()

          Indica o nível efeito para esse logger.  Se um valor diferente
          de *note NOTSET: 2fea. foi definido usando *note setLevel():
          1681, ele é retornado.  Caso contrário, a hierarquia é
          percorrida em direção a raiz até um valor diferente de *note
          NOTSET: 2fea. ser encontrado e então esse valor é retornado.
          O valor retornado é um inteiro, tipicamento um entre *note
          logging.DEBUG: 2fee, *note logging.INFO: 2fec. 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: 2fee. 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(): 88f.) or an exception instance is provided, it
          is used; otherwise, *note sys.exc_info(): 88f. 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: 11dc. 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: 118. module.

          The fourth keyword argument is 'extra' which can be used to
          pass a dictionary which is used to populate the *note
          __dict__: 772. of the *note LogRecord: 11dc. 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: 2fef. 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: 1685. has been set up with a
          format string which expects ‘clientip’ and ‘user’ in the
          attribute dictionary of the *note LogRecord: 11dc.  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: 1685.s would be used with
          particular *note Handler: 1684.s.

          If no handler is attached to this logger (or any of its
          ancestors, taking into account the relevant *note
          Logger.propagate: 1683. attributes), the message will be sent
          to the handler set on *note lastResort: 13f6.

          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: 2fec. on this logger.
          The arguments are interpreted as for *note debug(): 2ff1.

      -- Método: warning (msg, *args, **kwargs)

          Logs a message with level *note WARNING: 2feb. on this logger.
          The arguments are interpreted as for *note debug(): 2ff1.

               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: 2ff3. on this logger.
          The arguments are interpreted as for *note debug(): 2ff1.

      -- Método: critical (msg, *args, **kwargs)

          Logs a message with level *note CRITICAL: 2ff4. on this
          logger.  The arguments are interpreted as for *note debug():
          2ff1.

      -- 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(): 2ff1.

      -- Método: exception (msg, *args, **kwargs)

          Logs a message with level *note ERROR: 2ff3. on this logger.
          The arguments are interpreted as for *note debug(): 2ff1.
          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(): 2ff1. 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(): 2ff7.

      -- 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: 11dc. 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: 1684. 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__(): 2fff.

 -- Classe: logging.Handler

      -- Método: __init__ (level=NOTSET)

          Initializes the *note Handler: 1684. instance by setting its
          level, setting the list of filters to the empty list and
          creating a lock (using *note createLock(): 3000.) 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():
          3000.

      -- Método: release ()

          Releases the thread lock acquired with *note acquire(): 3001.

      -- 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:
          2fea. (which causes all messages to be processed).

          Veja *note Níveis de Logging: 85f. 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: 2fec.

      -- Método: setFormatter (fmt)

          Sets the formatter for this handler to 'fmt'.  The 'fmt'
          argument must be a *note Formatter: 1685. 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(): 3009. 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(): 300c. call.  If the
          module-level attribute *note raiseExceptions: 13f5. 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: 13f5. 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: 368.

               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:
8d.


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: 11dc. to an output
     string to be interpreted by a human or external system.


     Parâmetros:

        * ‘fmt’ (*note str: 169.) – A format string in the given 'style'
          for the logged output as a whole.  The possible mapping keys
          are drawn from the *note LogRecord: 11dc. object’s *note
          Atributos LogRecord: 2fef.  If not specified, ‘'%(message)s'’
          is used, which is just the logged message.

        * ‘datefmt’ (*note str: 169.) – A format string for the
          date/time portion of the logged output.  If not specified, the
          default described in *note formatTime(): 3010. is used.

        * ‘style’ (*note str: 169.) – 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: 8d0. (‘%’), *note str.format(): 828. (‘{’) or *note
          string.Template: 88c. (‘$’).  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: 3011. to use ‘{’- and ‘$’-formatting for log
          messages.

        * ‘validate’ (*note bool: 3c0.) – If ‘True’ (the default),
          incorrect or mismatched 'fmt' and 'style' will raise a *note
          ValueError: 2ea.; for example, ‘logging.Formatter('%(asctime)s
          - %(message)s', style='{')’.

        * ‘defaults’ (*note dict: 183.‘[’*note str: 169.‘, ’‘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(): 3010. is called to
          format the event time.  If there is exception information, it
          is formatted using *note formatException(): 3013. 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: 1685. 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(): 3014. to
          transform it if necessary.

      -- Método: formatTime (record, datefmt=None)

          This method should be called from *note format(): 199. 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(): 13e5. 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(): 13e5.
          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():
          16e7. 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(): 16e7. or *note
          time.gmtime(): 13bc.  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(): 88f.) as
          a string.  This default implementation just uses *note
          traceback.print_exception(): a45.  The resulting string is
          returned.

      -- Método: formatStack (stack_info)

          Formats the specified stack information (a string as returned
          by *note traceback.print_stack(): 107c, 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: 1685.
     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: 13f7. 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(): 2ff1, *note
info(): 301c, 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(): 301b. 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(): 301b.

Alterado na versão 3.12: You can now return a *note LogRecord: 11dc.
instance from filters to replace the log record rather than modifying it
in place.  This allows filters attached to a *note Handler: 1684. 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: 11dc. 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: 301d.).


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: 11dc. instances are created automatically by the *note
Logger: d3a. every time something is logged, and can be created manually
via *note makeLogRecord(): 3020. (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: 169.) – 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: 19b.) – The *note numeric level: 85f. 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: 169.) – The full string path of the
          source file where the logging call was made.

        * ‘lineno’ (*note int: 19b.) – The line number in the source
          file where the logging call was made.

        * ‘msg’ (*note Any: 8b0.) – 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: 3021.).

        * ‘args’ (*note tuple: 608.‘ | ’*note dict: 183.‘[’*note str:
          169.‘, ’*note Any: 8b0.‘]’) – Variable data to merge into the
          'msg' argument to obtain the event description.

        * ‘exc_info’ (*note tuple: 608.‘[’*note type: f38.‘[’*note
          BaseException: 7cc.‘]’‘, ’*note BaseException: 7cc.‘, ’*note
          types.TracebackType: cdd.‘] ’‘| ’‘None’) – An exception tuple
          with the current exception information, as returned by *note
          sys.exc_info(): 88f, or ‘None’ if no exception information is
          available.

        * ‘func’ (*note str: 169.‘ | ’‘None’) – The name of the function
          or method from which the logging call was invoked.

        * ‘sinfo’ (*note str: 169.‘ | ’‘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: 11dc. 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(): 169. 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: 11dc.
     has been made more configurable by providing a factory which is
     used to create the record.  The factory can be set using *note
     getLogRecordFactory(): 3023. and *note setLogRecordFactory(): 3024.
     (see this for the factory’s signature).

     This functionality can be used to inject your own values into a
     *note LogRecord: 11dc. 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(): 828.), you can use
‘{attrname}’ as the placeholder in the format string.  If you are using
$-formatting (*note string.Template: 88c.), 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(): 828.
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: 11dc. 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: 11dc. was created
                                                   (as returned by *note time.time_ns(): cd3. /
                                                   1e9).
                                                   
                                                   
exc_info             You shouldn’t need to         Exception tuple (à la ‘sys.exc_info’) or, if no
                     format this yourself.         exception has occurred, ‘None’.
                                                   
                                                   
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: 2fee, *note INFO: 2fec,
                                                   *note WARNING: 2feb, *note ERROR: 2ff3,
                                                   *note CRITICAL: 2ff4.).
                                                   
                                                   
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(): 3012.
                                                   is invoked.
                                                   
                                                   
módulo               ‘%(module)s’                  Module (name portion of ‘filename’).
                                                   
                                                   
msecs                ‘%(msecs)d’                   Millisecond portion of the time when the
                                                   *note LogRecord: 11dc. 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: 3021.).
                                                   
                                                   
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: 1c7. 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: 14f1. 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:
3028.

 -- Classe: logging.LoggerAdapter (logger, extra, merge_extra=False)

     Returns an instance of *note LoggerAdapter: 14f1. initialized with
     an underlying *note Logger: d3a. instance, a dict-like object
     ('extra'), and a boolean ('merge_extra') indicating whether or not
     the 'extra' argument of individual log calls should be merged with
     the *note LoggerAdapter: 14f1. extra.  The default behavior is to
     ignore the 'extra' argument of individual log calls and only use
     the one of the *note LoggerAdapter: 14f1. 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: 14f1. supports the
     following methods of *note Logger: d3a.: *note debug(): 1020, *note
     info(): 2ff0, *note warning(): 19b3, *note error(): 2ff2, *note
     exception(): 101e, *note critical(): 101f, *note log(): 101d, *note
     isEnabledFor(): 14f2, *note getEffectiveLevel(): 2fed, *note
     setLevel(): 1681. and *note hasHandlers(): 2ffb.  These methods
     have the same signatures as their counterparts in *note Logger:
     d3a, so you can use the two types of instances interchangeably.

     Alterado na versão 3.2: The *note isEnabledFor(): 14f2, *note
     getEffectiveLevel(): 2fed, *note setLevel(): 1681. and *note
     hasHandlers(): 2ffb. methods were added to *note LoggerAdapter:
     14f1.  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.13: The 'merge_extra' argument 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: cb. module, you may not be able to use logging from within such
handlers.  This is because lock implementations in the *note threading:
f3. 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: 2fe1.

     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: d3a. class, or the last
     class passed to *note setLoggerClass(): 302f.  This function may be
     called from within a new class definition, to ensure that
     installing a customized *note Logger: d3a. 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: 11dc.

     Adicionado na versão 3.2: This function has been provided, along
     with *note setLogRecordFactory(): 3024, to allow developers more
     control over how the *note LogRecord: 11dc. representing a logging
     event is constructed.

     See *note setLogRecordFactory(): 3024. 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():
     1020, 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(): be9. 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(): 1020. (or other level-specific methods) on it, as
     described at the beginning of this documentation.

 -- Função: logging.info (msg, *args, **kwargs)

     Logs a message with level *note INFO: 2fec. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2ff1.

 -- Função: logging.warning (msg, *args, **kwargs)

     Logs a message with level *note WARNING: 2feb. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2ff1.

          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: 2ff3. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2ff1.

 -- Função: logging.critical (msg, *args, **kwargs)

     Logs a message with level *note CRITICAL: 2ff4. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2ff1.

 -- Função: logging.exception (msg, *args, **kwargs)

     Logs a message with level *note ERROR: 2ff3. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2ff1.  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():
     2ff1.

 -- 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: 1685. 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: 3035.

 -- Função: logging.getLevelNamesMapping ()

     Returns a mapping from level names to their corresponding logging
     levels.  For example, the string “CRITICAL” maps to *note CRITICAL:
     2ff4.  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: 2ff4,
     *note ERROR: 2ff3, *note WARNING: 2feb, *note INFO: 2fec. or *note
     DEBUG: 2fee. then you get the corresponding string.  If you have
     associated levels with names using *note addLevelName(): 3034. 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: 2fef.), 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: 11dc. instance whose
     attributes are defined by 'attrdict'.  This function is useful for
     taking a pickled *note LogRecord: 11dc. attribute dictionary, sent
     over a socket, and reconstituting it as a *note LogRecord: 11dc.
     instance at the receiving end.

 -- Função: logging.basicConfig (**kwargs)

     Does basic configuration for the logging system by creating a *note
     StreamHandler: 13f4. with a default *note Formatter: 1685. and
     adding it to the root logger.  The functions *note debug(): 2ff1,
     *note info(): 301c, *note warning(): 351, *note error(): 3030. and
     *note critical(): 3031. will call *note basicConfig(): be9.
     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: 1b42. be
                        created, using the specified filename, rather
                        than a *note StreamHandler: 13f4.
                        
                        
     'filemode'         If 'filename' is specified, open the file in
                        this *note mode: 2469.  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(): 13e5.
                        
                        
     'style'            If 'format' is specified, use this style for
                        the format string.  One of ‘'%'’, ‘'{'’ or
                        ‘'$'’ for *note printf-style: 8d0,
                        *note str.format(): 828. or
                        *note string.Template: 88c. respectively.
                        Defaults to ‘'%'’.
                        
                        
     'level'            Set the root logger level to the specified
                        *note level: 85f.
                        
                        
     'stream'           Use the specified stream to initialize the
                        *note StreamHandler: 13f4.  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: 1b42. 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: 1b42. 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(): 314,
                        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: d.), 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(): b4f. API to get your loggers.

 -- Função: logging.setLogRecordFactory (factory)

     Set a callable which is used to create a *note LogRecord: 11dc.


     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(): 3023, to allow developers more
     control over how the *note LogRecord: 11dc. 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(): 107c, 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: 13f4. 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: 13f5. 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(): 303a. function can be used to integrate
*note logging: 8b. with the *note warnings: 118. 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: 118.
     module will be redirected to the logging system.  Specifically, a
     warning will be formatted using *note warnings.formatwarning():
     1cae. and the resulting string logged to a logger named
     ‘'py.warnings'’ with a severity of *note WARNING: 2feb.

     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: 8c.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 8d.

     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: 8b. 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: 8b. 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 — Tratadores de registro de eventos,  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: 13f1.

   * *note Tutorial avançado: 13f2.

   * *note Livro de receitas do logging: 13f3.

__________________________________________________________________

Esta seção descreve a API para configuração do módulo logging.

* Menu:

* Funções de configuração::
* Considerações de segurança::
* Configuration dictionary schema::
* Formato do arquivo de configuração::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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
................................

Os seguintes função configuram o módulo logging.  Elas estão localizadas
no módulo *note logging.config: 8c.  Seu uso é opcional — você pode
configurar o módulo logging usando essas funções ou fazendo chamadas
para o API principal (definido no próprio *note logging: 8b.) e
definindo manipuladores que são declarados em *note logging: 8b. ou
*note logging.handlers: 8d.

 -- Função: logging.config.dictConfig (config)

     Obtém a configuração de logging de um dicionário.  O conteúdo desse
     dicionário está descrito em *note Configuration dictionary schema:
     303f. abaixo.

     If an error is encountered during configuration, this function will
     raise a *note ValueError: 2ea, *note TypeError: 198, *note
     AttributeError: 5e4. or *note ImportError: 64f. with a suitably
     descriptive message.  The following is a (possibly incomplete) list
     of conditions which will raise an error:

        * A ‘level’ which is not a string or which is a string not
          corresponding to an actual logging level.

        * A ‘propagate’ value which is not a boolean.

        * An id which does not have a corresponding destination.

        * A non-existent handler id found during an incremental call.

        * An invalid logger name.

        * Inability to resolve to an internal or external object.

     Parsing is performed by the ‘DictConfigurator’ class, whose
     constructor is passed the dictionary used for configuration, and
     has a ‘configure()’ method.  The *note logging.config: 8c. module
     has a callable attribute ‘dictConfigClass’ which is initially set
     to ‘DictConfigurator’.  You can replace the value of
     ‘dictConfigClass’ with a suitable implementation of your own.

     *note dictConfig(): 13ac. calls ‘dictConfigClass’ passing the
     specified dictionary, and then calls the ‘configure()’ method on
     the returned object to put the configuration into effect:

          def dictConfig(config):
              dictConfigClass(config).configure()

     For example, a subclass of ‘DictConfigurator’ could call
     ‘DictConfigurator.__init__()’ in its own ‘__init__()’, then set up
     custom prefixes which would be usable in the subsequent
     ‘configure()’ call.  ‘dictConfigClass’ would be bound to this new
     subclass, and then *note dictConfig(): 13ac. could be called
     exactly as in the default, uncustomized state.

     Adicionado na versão 3.2.

 -- Função: logging.config.fileConfig (fname, defaults=None,
          disable_existing_loggers=True, encoding=None)

     Reads the logging configuration from a *note configparser:
     26.-format file.  The format of the file should be as described in
     *note Formato do arquivo de configuração: 3040.  This function can
     be called several times from an application, allowing an end user
     to select from various pre-canned configurations (if the developer
     provides a mechanism to present the choices and load the chosen
     configuration).

     It will raise *note FileNotFoundError: 263. if the file doesn’t
     exist and *note RuntimeError: 243. if the file is invalid or empty.


     Parâmetros:

        * ‘fname’ – A filename, or a file-like object, or an instance
          derived from *note RawConfigParser: 115a.  If a
          ‘RawConfigParser’-derived instance is passed, it is used as
          is.  Otherwise, a *note ConfigParser: 4d8. is instantiated,
          and the configuration read by it from the object passed in
          ‘fname’.  If that has a *note readline(): bf. method, it is
          assumed to be a file-like object and read using *note
          read_file(): 71f.; otherwise, it is assumed to be a filename
          and passed to *note read(): 1657.

        * ‘defaults’ – Defaults to be passed to the ‘ConfigParser’ can
          be specified in this argument.

        * ‘disable_existing_loggers’ – If specified as ‘False’, loggers
          which exist when this call is made are left enabled.  The
          default is ‘True’ because this enables old behaviour in a
          backward-compatible way.  This behaviour is to disable any
          existing non-root loggers unless they or their ancestors are
          explicitly named in the logging configuration.

        * ‘encoding’ – The encoding used to open file when 'fname' is
          filename.

     Alterado na versão 3.4: An instance of a subclass of *note
     RawConfigParser: 115a. is now accepted as a value for ‘fname’.
     This facilitates:

             * Use of a configuration file where logging configuration
               is just part of the overall application configuration.

             * Use of a configuration read from a file, and then
               modified by the using application (e.g.  based on
               command-line parameters or other aspects of the runtime
               environment) before being passed to ‘fileConfig’.

     Alterado na versão 3.10: Added the 'encoding' parameter.

     Alterado na versão 3.12: An exception will be thrown if the
     provided file doesn’t exist or is invalid or empty.

 -- Função: logging.config.listen (port=DEFAULT_LOGGING_CONFIG_PORT,
          verify=None)

     Starts up a socket server on the specified port, and listens for
     new configurations.  If no port is specified, the module’s default
     ‘DEFAULT_LOGGING_CONFIG_PORT’ is used.  Logging configurations will
     be sent as a file suitable for processing by *note dictConfig():
     13ac. or *note fileConfig(): d3c.  Returns a *note Thread: 176.
     instance on which you can call *note start(): 178. to start the
     server, and which you can *note join(): 13e0. when appropriate.  To
     stop the server, call *note stopListening(): 3041.

     The ‘verify’ argument, if specified, should be a callable which
     should verify whether bytes received across the socket are valid
     and should be processed.  This could be done by encrypting and/or
     signing what is sent across the socket, such that the ‘verify’
     callable can perform signature verification and/or decryption.  The
     ‘verify’ callable is called with a single argument - the bytes
     received across the socket - and should return the bytes to be
     processed, or ‘None’ to indicate that the bytes should be
     discarded.  The returned bytes could be the same as the passed in
     bytes (e.g.  when only verification is done), or they could be
     completely different (perhaps if decryption were performed).

     To send a configuration to the socket, read in the configuration
     file and send it to the socket as a sequence of bytes preceded by a
     four-byte length string packed in binary using ‘struct.pack('>L',
     n)’.
          Nota: Because portions of the configuration are passed through
          *note eval(): 49d, use of this function may open its users to
          a security risk.  While the function only binds to a socket on
          ‘localhost’, and so does not accept connections from remote
          machines, there are scenarios where untrusted code could be
          run under the account of the process which calls *note
          listen(): 115b.  Specifically, if the process calling *note
          listen(): 115b. runs on a multi-user machine where users
          cannot trust each other, then a malicious user could arrange
          to run essentially arbitrary code in a victim user’s process,
          simply by connecting to the victim’s *note listen(): 115b.
          socket and sending a configuration which runs whatever code
          the attacker wants to have executed in the victim’s process.
          This is especially easy to do if the default port is used, but
          not hard even if a different port is used.  To avoid the risk
          of this happening, use the ‘verify’ argument to *note
          listen(): 115b. to prevent unrecognised configurations from
          being applied.

     Alterado na versão 3.4: The ‘verify’ argument was added.

          Nota: If you want to send configurations to the listener which
          don’t disable existing loggers, you will need to use a JSON
          format for the configuration, which will use *note
          dictConfig(): 13ac. for configuration.  This method allows you
          to specify ‘disable_existing_loggers’ as ‘False’ in the
          configuration you send.

 -- Função: logging.config.stopListening ()

     Stops the listening server which was created with a call to *note
     listen(): 115b.  This is typically called before calling ‘join()’
     on the return value from *note listen(): 115b.


File: python.info,  Node: Considerações de segurança,  Next: Configuration dictionary schema,  Prev: Funções de configuração,  Up: logging config — Configuração do módulo logging

5.16.5.2 Considerações de segurança
...................................

The logging configuration functionality tries to offer convenience, and
in part this is done by offering the ability to convert text in
configuration files into Python objects used in logging configuration -
for example, as described in *note User-defined objects: 3044.  However,
these same mechanisms (importing callables from user-defined modules and
calling them with parameters from the configuration) could be used to
invoke any code you like, and for this reason you should treat
configuration files from untrusted sources with 'extreme caution' and
satisfy yourself that nothing bad can happen if you load them, before
actually loading them.


File: python.info,  Node: Configuration dictionary schema,  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 Configuration dictionary schema
........................................

Describing a logging configuration requires listing the various objects
to create and the connections between them; for example, you may create
a handler named ‘console’ and then say that the logger named ‘startup’
will send its messages to the ‘console’ handler.  These objects aren’t
limited to those provided by the *note logging: 8b. module because you
might write your own formatter or handler class.  The parameters to
these classes may also need to include external objects such as
‘sys.stderr’.  The syntax for describing these objects and connections
is defined in *note Object connections: 3046. below.

* Menu:

* Dictionary Schema Details::
* Incremental Configuration::
* Object connections::
* User-defined objects::
* Handler configuration order::
* Access to external objects::
* Access to internal objects::
* Import resolution and custom importers::
* Configuring QueueHandler and QueueListener::


File: python.info,  Node: Dictionary Schema Details,  Next: Incremental Configuration,  Up: Configuration dictionary schema

5.16.5.4 Dictionary Schema Details
..................................

The dictionary passed to *note dictConfig(): 13ac. must contain the
following keys:

   * 'version' - to be set to an integer value representing the schema
     version.  The only valid value at present is 1, but having this key
     allows the schema to evolve while still preserving backwards
     compatibility.

All other keys are optional, but if present they will be interpreted as
described below.  In all cases below where a ‘configuring dict’ is
mentioned, it will be checked for the special ‘'()'’ key to see if a
custom instantiation is required.  If so, the mechanism described in
*note User-defined objects: 3044. below is used to create an instance;
otherwise, the context is used to determine what to instantiate.

   * 'formatters' - the corresponding value will be a dict in which each
     key is a formatter id and each value is a dict describing how to
     configure the corresponding *note Formatter: 1685. instance.

     The configuring dict is searched for the following optional keys
     which correspond to the arguments passed to create a *note
     Formatter: 1685. object:

        * ‘format’

        * ‘datefmt’

        * ‘style’

        * ‘validate’ (since version >=3.8)

        * ‘defaults’ (since version >=3.12)

     An optional ‘class’ key indicates the name of the formatter’s class
     (as a dotted module and class name).  The instantiation arguments
     are as for *note Formatter: 1685, thus this key is most useful for
     instantiating a customised subclass of *note Formatter: 1685.  For
     example, the alternative class might present exception tracebacks
     in an expanded or condensed format.  If your formatter requires
     different or extra configuration keys, you should use *note
     User-defined objects: 3044.

   * 'filters' - the corresponding value will be a dict in which each
     key is a filter id and each value is a dict describing how to
     configure the corresponding Filter instance.

     The configuring dict is searched for the key ‘name’ (defaulting to
     the empty string) and this is used to construct a *note
     logging.Filter: 13f7. instance.

   * 'handlers' - the corresponding value will be a dict in which each
     key is a handler id and each value is a dict describing how to
     configure the corresponding Handler instance.

     The configuring dict is searched for the following keys:

        * ‘class’ (mandatory).  This is the fully qualified name of the
          handler class.

        * ‘level’ (optional).  The level of the handler.

        * ‘formatter’ (optional).  The id of the formatter for this
          handler.

        * ‘filters’ (optional).  A list of ids of the filters for this
          handler.

          Alterado na versão 3.11: ‘filters’ can take filter instances
          in addition to ids.

     All 'other' keys are passed through as keyword arguments to the
     handler’s constructor.  For example, given the snippet:

          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

     the handler with id ‘console’ is instantiated as a *note
     logging.StreamHandler: 13f4, using ‘sys.stdout’ as the underlying
     stream.  The handler with id ‘file’ is instantiated as a *note
     logging.handlers.RotatingFileHandler: 1894. with the keyword
     arguments ‘filename='logconfig.log', maxBytes=1024, backupCount=3’.

   * 'loggers' - the corresponding value will be a dict in which each
     key is a logger name and each value is a dict describing how to
     configure the corresponding Logger instance.

     The configuring dict is searched for the following keys:

        * ‘level’ (optional).  The level of the logger.

        * ‘propagate’ (optional).  The propagation setting of the
          logger.

        * ‘filters’ (optional).  A list of ids of the filters for this
          logger.

          Alterado na versão 3.11: ‘filters’ can take filter instances
          in addition to ids.

        * ‘handlers’ (optional).  A list of ids of the handlers for this
          logger.

     The specified loggers will be configured according to the level,
     propagation, filters and handlers specified.

   * 'root' - this will be the configuration for the root logger.
     Processing of the configuration will be as for any logger, except
     that the ‘propagate’ setting will not be applicable.

   * 'incremental' - whether the configuration is to be interpreted as
     incremental to the existing configuration.  This value defaults to
     ‘False’, which means that the specified configuration replaces the
     existing configuration with the same semantics as used by the
     existing *note fileConfig(): d3c. API.

     If the specified value is ‘True’, the configuration is processed as
     described in the section on *note Incremental Configuration: 3049.

   * 'disable_existing_loggers' - whether any existing non-root loggers
     are to be disabled.  This setting mirrors the parameter of the same
     name in *note fileConfig(): d3c.  If absent, this parameter
     defaults to ‘True’.  This value is ignored if 'incremental' is
     ‘True’.


File: python.info,  Node: Incremental Configuration,  Next: Object connections,  Prev: Dictionary Schema Details,  Up: Configuration dictionary schema

5.16.5.5 Incremental Configuration
..................................

It is difficult to provide complete flexibility for incremental
configuration.  For example, because objects such as filters and
formatters are anonymous, once a configuration is set up, it is not
possible to refer to such anonymous objects when augmenting a
configuration.

Furthermore, there is not a compelling case for arbitrarily altering the
object graph of loggers, handlers, filters, formatters at run-time, once
a configuration is set up; the verbosity of loggers and handlers can be
controlled just by setting levels (and, in the case of loggers,
propagation flags).  Changing the object graph arbitrarily in a safe way
is problematic in a multi-threaded environment; while not impossible,
the benefits are not worth the complexity it adds to the implementation.

Thus, when the ‘incremental’ key of a configuration dict is present and
is ‘True’, the system will completely ignore any ‘formatters’ and
‘filters’ entries, and process only the ‘level’ settings in the
‘handlers’ entries, and the ‘level’ and ‘propagate’ settings in the
‘loggers’ and ‘root’ entries.

Using a value in the configuration dict lets configurations to be sent
over the wire as pickled dicts to a socket listener.  Thus, the logging
verbosity of a long-running application can be altered over time with no
need to stop and restart the application.


File: python.info,  Node: Object connections,  Next: User-defined objects,  Prev: Incremental Configuration,  Up: Configuration dictionary schema

5.16.5.6 Object connections
...........................

The schema describes a set of logging objects - loggers, handlers,
formatters, filters - which are connected to each other in an object
graph.  Thus, the schema needs to represent connections between the
objects.  For example, say that, once configured, a particular logger
has attached to it a particular handler.  For the purposes of this
discussion, we can say that the logger represents the source, and the
handler the destination, of a connection between the two.  Of course in
the configured objects this is represented by the logger holding a
reference to the handler.  In the configuration dict, this is done by
giving each destination object an id which identifies it unambiguously,
and then using the id in the source object’s configuration to indicate
that a connection exists between the source and the destination object
with that id.

So, for example, consider the following YAML snippet:

     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]

(Note: YAML used here because it’s a little more readable than the
equivalent Python source form for the dictionary.)

The ids for loggers are the logger names which would be used
programmatically to obtain a reference to those loggers, e.g.
‘foo.bar.baz’.  The ids for Formatters and Filters can be any string
value (such as ‘brief’, ‘precise’ above) and they are transient, in that
they are only meaningful for processing the configuration dictionary and
used to determine connections between objects, and are not persisted
anywhere when the configuration call is complete.

The above snippet indicates that logger named ‘foo.bar.baz’ should have
two handlers attached to it, which are described by the handler ids ‘h1’
and ‘h2’.  The formatter for ‘h1’ is that described by id ‘brief’, and
the formatter for ‘h2’ is that described by id ‘precise’.


File: python.info,  Node: User-defined objects,  Next: Handler configuration order,  Prev: Object connections,  Up: Configuration dictionary schema

5.16.5.7 User-defined objects
.............................

The schema supports user-defined objects for handlers, filters and
formatters.  (Loggers do not need to have different types for different
instances, so there is no support in this configuration schema for
user-defined logger classes.)

Objects to be configured are described by dictionaries which detail
their configuration.  In some places, the logging system will be able to
infer from the context how an object is to be instantiated, but when a
user-defined object is to be instantiated, the system will not know how
to do this.  In order to provide complete flexibility for user-defined
object instantiation, the user needs to provide a ‘factory’ - a callable
which is called with a configuration dictionary and which returns the
instantiated object.  This is signalled by an absolute import path to
the factory being made available under the special key ‘'()'’.  Here’s a
concrete example:

     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

The above YAML snippet defines three formatters.  The first, with id
‘brief’, is a standard *note logging.Formatter: 1685. instance with the
specified format string.  The second, with id ‘default’, has a longer
format and also defines the time format explicitly, and will result in a
*note logging.Formatter: 1685. initialized with those two format
strings.  Shown in Python source form, the ‘brief’ and ‘default’
formatters have configuration sub-dictionaries:

     {
       'format' : '%(message)s'
     }

e:

     {
       'format' : '%(asctime)s %(levelname)-8s %(name)-15s %(message)s',
       'datefmt' : '%Y-%m-%d %H:%M:%S'
     }

respectively, and as these dictionaries do not contain the special key
‘'()'’, the instantiation is inferred from the context: as a result,
standard *note logging.Formatter: 1685. instances are created.  The
configuration sub-dictionary for the third formatter, with id ‘custom’,
is:

     {
       '()' : 'my.package.customFormatterFactory',
       'bar' : 'baz',
       'spam' : 99.9,
       'answer' : 42
     }

and this contains the special key ‘'()'’, which means that user-defined
instantiation is wanted.  In this case, the specified factory callable
will be used.  If it is an actual callable it will be used directly -
otherwise, if you specify a string (as in the example) the actual
callable will be located using normal import mechanisms.  The callable
will be called with the 'remaining' items in the configuration
sub-dictionary as keyword arguments.  In the above example, the
formatter with id ‘custom’ will be assumed to be returned by the call:

     my.package.customFormatterFactory(bar='baz', spam=99.9, answer=42)

     Aviso: The values for keys such as ‘bar’, ‘spam’ and ‘answer’ in
     the above example should not be configuration dictionaries or
     references such as ‘cfg://foo’ or ‘ext://bar’, because they will
     not be processed by the configuration machinery, but passed to the
     callable as-is.

The key ‘'()'’ has been used as the special key because it is not a
valid keyword parameter name, and so will not clash with the names of
the keyword arguments used in the call.  The ‘'()'’ also serves as a
mnemonic that the corresponding value is a callable.

Alterado na versão 3.11: The ‘filters’ member of ‘handlers’ and
‘loggers’ can take filter instances in addition to ids.

You can also specify a special key ‘'.'’ whose value is a mapping of
attribute names to values.  If found, the specified attributes will be
set on the user-defined object before it is returned.  Thus, with the
following configuration:

     {
       '()' : 'my.package.customFormatterFactory',
       'bar' : 'baz',
       'spam' : 99.9,
       'answer' : 42,
       '.' {
         'foo': 'bar',
         'baz': 'bozz'
       }
     }

the returned formatter will have attribute ‘foo’ set to ‘'bar'’ and
attribute ‘baz’ set to ‘'bozz'’.

     Aviso: The values for attributes such as ‘foo’ and ‘baz’ in the
     above example should not be configuration dictionaries or
     references such as ‘cfg://foo’ or ‘ext://bar’, because they will
     not be processed by the configuration machinery, but set as
     attribute values as-is.


File: python.info,  Node: Handler configuration order,  Next: Access to external objects,  Prev: User-defined objects,  Up: Configuration dictionary schema

5.16.5.8 Handler configuration order
....................................

Handlers are configured in alphabetical order of their keys, and a
configured handler replaces the configuration dictionary in (a working
copy of) the ‘handlers’ dictionary in the schema.  If you use a
construct such as ‘cfg://handlers.foo’, then initially ‘handlers['foo']’
points to the configuration dictionary for the handler named ‘foo’, and
later (once that handler has been configured) it points to the
configured handler instance.  Thus, ‘cfg://handlers.foo’ could resolve
to either a dictionary or a handler instance.  In general, it is wise to
name handlers in a way such that dependent handlers are configured
'after' any handlers they depend on; that allows something like
‘cfg://handlers.foo’ to be used in configuring a handler that depends on
handler ‘foo’.  If that dependent handler were named ‘bar’, problems
would result, because the configuration of ‘bar’ would be attempted
before that of ‘foo’, and ‘foo’ would not yet have been configured.
However, if the dependent handler were named ‘foobar’, it would be
configured after ‘foo’, with the result that ‘cfg://handlers.foo’ would
resolve to configured handler ‘foo’, and not its configuration
dictionary.


File: python.info,  Node: Access to external objects,  Next: Access to internal objects,  Prev: Handler configuration order,  Up: Configuration dictionary schema

5.16.5.9 Access to external objects
...................................

There are times where a configuration needs to refer to objects external
to the configuration, for example ‘sys.stderr’.  If the configuration
dict is constructed using Python code, this is straightforward, but a
problem arises when the configuration is provided via a text file (e.g.
JSON, YAML). In a text file, there is no standard way to distinguish
‘sys.stderr’ from the literal string ‘'sys.stderr'’.  To facilitate this
distinction, the configuration system looks for certain special prefixes
in string values and treat them specially.  For example, if the literal
string ‘'ext://sys.stderr'’ is provided as a value in the configuration,
then the ‘ext://’ will be stripped off and the remainder of the value
processed using normal import mechanisms.

The handling of such prefixes is done in a way analogous to protocol
handling: there is a generic mechanism to look for prefixes which match
the regular expression ‘^(?P<prefix>[a-z]+)://(?P<suffix>.*)$’ whereby,
if the ‘prefix’ is recognised, the ‘suffix’ is processed in a
prefix-dependent manner and the result of the processing replaces the
string value.  If the prefix is not recognised, then the string value
will be left as-is.


File: python.info,  Node: Access to internal objects,  Next: Import resolution and custom importers,  Prev: Access to external objects,  Up: Configuration dictionary schema

5.16.5.10 Access to internal objects
....................................

As well as external objects, there is sometimes also a need to refer to
objects in the configuration.  This will be done implicitly by the
configuration system for things that it knows about.  For example, the
string value ‘'DEBUG'’ for a ‘level’ in a logger or handler will
automatically be converted to the value ‘logging.DEBUG’, and the
‘handlers’, ‘filters’ and ‘formatter’ entries will take an object id and
resolve to the appropriate destination object.

However, a more generic mechanism is needed for user-defined objects
which are not known to the *note logging: 8b. module.  For example,
consider *note logging.handlers.MemoryHandler: 3053, which takes a
‘target’ argument which is another handler to delegate to.  Since the
system already knows about this class, then in the configuration, the
given ‘target’ just needs to be the object id of the relevant target
handler, and the system will resolve to the handler from the id.  If,
however, a user defines a ‘my.package.MyHandler’ which has an
‘alternate’ handler, the configuration system would not know that the
‘alternate’ referred to a handler.  To cater for this, a generic
resolution system allows the user to specify:

     handlers:
       file:
         # configuration of file handler goes here

       custom:
         (): my.package.MyHandler
         alternate: cfg://handlers.file

The literal string ‘'cfg://handlers.file'’ will be resolved in an
analogous way to strings with the ‘ext://’ prefix, but looking in the
configuration itself rather than the import namespace.  The mechanism
allows access by dot or by index, in a similar way to that provided by
‘str.format’.  Thus, given the following snippet:

     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.

Given a string ‘cfg://handlers.myhandler.mykey.123’, this will resolve
to ‘config_dict['handlers']['myhandler']['mykey']['123']’.  If the
string is specified as ‘cfg://handlers.myhandler.mykey[123]’, the system
will attempt to retrieve the value from
‘config_dict['handlers']['myhandler']['mykey'][123]’, and fall back to
‘config_dict['handlers']['myhandler']['mykey']['123']’ if that fails.


File: python.info,  Node: Import resolution and custom importers,  Next: Configuring QueueHandler and QueueListener,  Prev: Access to internal objects,  Up: Configuration dictionary schema

5.16.5.11 Import resolution and custom importers
................................................

Import resolution, by default, uses the builtin *note __import__(): ac7.
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(): 450.  For example:

     from importlib import import_module
     from logging.config import BaseConfigurator

     BaseConfigurator.importer = staticmethod(import_module)

You don’t need to wrap with *note staticmethod(): 450. if you’re setting
the import callable on a configurator 'instance'.


File: python.info,  Node: Configuring QueueHandler and QueueListener,  Prev: Import resolution and custom importers,  Up: Configuration dictionary schema

5.16.5.12 Configuring QueueHandler and QueueListener
....................................................

If you want to configure a *note QueueHandler: 1a7d, noting that this is
normally used in conjunction with a *note QueueListener: 241, you can
configure both together.  After the configuration, the ‘QueueListener’
instance will be available as the *note listener: 3057. attribute of the
created handler, and that in turn will be available to you using *note
getHandlerByName(): 1a7e. 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
           ...

The ‘queue’ and ‘listener’ keys are optional.

If the ‘queue’ key is present, the corresponding value can be one of the
following:

   * An object implementing the *note Queue.put_nowait: 3058. and *note
     Queue.get: 3059. public API. For instance, this may be an actual
     instance of *note queue.Queue: 1586. or a subclass thereof, or a
     proxy obtained by *note
     multiprocessing.managers.SyncManager.Queue(): 305a.

     This is of course only possible if you are constructing or
     modifying the configuration dictionary in code.

   * A string that resolves to a callable which, when called with no
     arguments, returns the queue instance to use.  That callable could
     be a *note queue.Queue: 1586. subclass or a function which returns
     a suitable queue instance, such as ‘my.module.queue_factory()’.

   * A dict with a ‘'()'’ key which is constructed in the usual way as
     discussed in *note User-defined objects: 3044.  The result of this
     construction should be a *note queue.Queue: 1586. instance.

If the ‘queue’ key is absent, a standard unbounded *note queue.Queue:
1586. instance is created and used.

If the ‘listener’ key is present, the corresponding value can be one of
the following:

   * A subclass of *note logging.handlers.QueueListener: 241.  This is
     of course only possible if you are constructing or modifying the
     configuration dictionary in code.

   * A string which resolves to a class which is a subclass of
     ‘QueueListener’, such as ‘'my.package.CustomListener'’.

   * A dict with a ‘'()'’ key which is constructed in the usual way as
     discussed in *note User-defined objects: 3044.  The result of this
     construction should be a callable with the same signature as the
     ‘QueueListener’ initializer.

If the ‘listener’ key is absent, *note logging.handlers.QueueListener:
241. is used.

The values under the ‘handlers’ key are the names of other handlers in
the configuration (not shown in the above snippet) which will be passed
to the queue listener.

Any custom queue handler and listener classes will need to be defined
with the same initialization signatures as *note QueueHandler: 1a7d. and
*note QueueListener: 241.

Adicionado na versão 3.12.


File: python.info,  Node: Formato do arquivo de configuração,  Prev: Configuration dictionary schema,  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(): d3c. is
based on *note configparser: 26. 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(): d3c. API is older than the *note
     dictConfig(): 13ac. API and does not provide functionality to cover
     certain aspects of logging.  For example, you cannot configure
     *note Filter: 13f7. objects, which provide for filtering of
     messages beyond simple integer levels, using *note fileConfig():
     d3c.  If you need to have instances of *note Filter: 13f7. in your
     logging configuration, you will need to use *note dictConfig():
     13ac.  Note that future enhancements to configuration functionality
     will be added to *note dictConfig(): 13ac, so it’s worth
     considering transitioning to this newer API when it’s convenient to
     do so.

Examples of these sections in the file are given below.

     [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

The root logger must specify a level and a list of handlers.  An example
of a root logger section is given below.

     [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: 245b. in the context
of the ‘logging’ package’s namespace.

The ‘handlers’ entry is a comma-separated list of handler names, which
must appear in the ‘[handlers]’ section.  These names must appear in the
‘[handlers]’ section and have corresponding sections in the
configuration file.

For loggers other than the root logger, some additional information is
required.  This is illustrated by the following example.

     [logger_parser]
     level=DEBUG
     handlers=hand01
     propagate=1
     qualname=compiler.parser

The ‘level’ and ‘handlers’ entries are interpreted as for the root
logger, except that if a non-root logger’s level is specified as
‘NOTSET’, the system consults loggers higher up the hierarchy to
determine the effective level of the logger.  The ‘propagate’ entry is
set to 1 to indicate that messages must propagate to handlers higher up
the logger hierarchy from this logger, or 0 to indicate that messages
are 'not' propagated to handlers up the hierarchy.  The ‘qualname’ entry
is the hierarchical channel name of the logger, that is to say the name
used by the application to get the logger.

Sections which specify handler configuration are exemplified by the
following.

     [handler_hand01]
     class=StreamHandler
     level=NOTSET
     formatter=form01
     args=(sys.stdout,)

The ‘class’ entry indicates the handler’s class (as determined by *note
eval(): 49d. in the ‘logging’ package’s namespace).  The ‘level’ is
interpreted as for loggers, and ‘NOTSET’ is taken to mean ‘log
everything’.

The ‘formatter’ entry indicates the key name of the formatter for this
handler.  If blank, a default formatter (‘logging._defaultFormatter’) is
used.  If a name is specified, it must appear in the ‘[formatters]’
section and have a corresponding section in the configuration file.

The ‘args’ entry, when *note evaluated: 245b. 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: 245b. 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}

Sections which specify formatter configuration are typified by the
following.

     [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: 3048.

The ‘defaults’ entry, when *note evaluated: 245b. 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: Due to the use of *note eval(): 49d. as described above,
     there are potential security risks which result from using the
     *note listen(): 115b. to send and receive configurations via
     sockets.  The risks are limited to where multiple users with no
     mutual trust run code on the same machine; see the *note listen():
     115b. documentation for more information.

Ver também
..........

Módulo *note logging: 8b.

     Referência da API para o módulo de logging.

Módulo *note logging.handlers: 8d.

     Manipuladores úteis incluídos no módulo logging.


File: python.info,  Node: logging handlers — Tratadores de registro de eventos,  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’ — Tratadores de registro de eventos
-------------------------------------------------------------

'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: 13f1.

   * *note Tutorial avançado: 13f2.

   * *note Livro de receitas de logging: 13f3.

__________________________________________________________________

Os seguintes tratadores úteis são fornecidos neste pacote.  Observe que
três dos tratadores (*note StreamHandler: 13f4, *note FileHandler: 1b42.
e *note NullHandler: 1480.) são, na verdade, definidos no próprio módulo
*note logging: 8b, 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.14/Lib/logging/handlers.py


File: python.info,  Node: StreamHandler,  Next: FileHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.1 StreamHandler
......................

The *note StreamHandler: 13f4. class, located in the core *note logging:
8b. package, sends logging output to streams such as 'sys.stdout',
'sys.stderr' or any file-like object (or, more precisely, any object
which supports ‘write()’ and ‘flush()’ methods).

 -- Classe: logging.StreamHandler (stream=None)

     Returns a new instance of the *note StreamHandler: 13f4. class.  If
     'stream' is specified, the instance will use it for logging output;
     otherwise, 'sys.stderr' will be used.

      -- Método: emit (record)

          If a formatter is specified, it is used to format the record.
          The record is then written to the stream followed by *note
          terminator: 3062.  If exception information is present, it is
          formatted using *note traceback.print_exception(): a45. and
          appended to the stream.

      -- Método: flush ()

          Flushes the stream by calling its *note flush(): 3063. method.
          Note that the ‘close()’ method is inherited from *note
          Handler: 1684. and so does no output, so an explicit *note
          flush(): 3063. call may be needed at times.

      -- Método: setStream (stream)

          Sets the instance’s stream to the specified value, if it is
          different.  The old stream is flushed before the new stream is
          set.


          Parâmetros: ‘stream’ – The stream that the handler should use.


          Retorna: the old stream, if the stream was changed, or ‘None’
          if it wasn’t.

          Adicionado na versão 3.7.

      -- Atributo: terminator

          String used as the terminator when writing a formatted record
          to a stream.  Default value is ‘'\n'’.

          If you don’t want a newline termination, you can set the
          handler instance’s ‘terminator’ attribute to the empty string.

          In earlier versions, the terminator was hardcoded as ‘'\n'’.

          Adicionado na versão 3.2.


File: python.info,  Node: FileHandler,  Next: NullHandler,  Prev: StreamHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.2 FileHandler
....................

The *note FileHandler: 1b42. class, located in the core *note logging:
8b. package, sends logging output to a disk file.  It inherits the
output functionality from *note StreamHandler: 13f4.

 -- Classe: logging.FileHandler (filename, mode='a', encoding=None,
          delay=False, errors=None)

     Returns a new instance of the *note FileHandler: 1b42. class.  The
     specified file is opened and used as the stream for logging.  If
     'mode' is not specified, ‘'a'’ is used.  If 'encoding' is not
     ‘None’, it is used to open the file with that encoding.  If 'delay'
     is true, then file opening is deferred until the first call to
     *note emit(): 3066.  By default, the file grows indefinitely.  If
     'errors' is specified, it’s used to determine how encoding errors
     are handled.

     Alterado na versão 3.6: As well as string values, *note Path: 265.
     objects are also accepted for the 'filename' argument.

     Alterado na versão 3.9: The 'errors' parameter was added.

      -- Método: close ()

          Closes the file.

      -- Método: emit (record)

          Outputs the record to the file.

          Note that if the file was closed due to logging shutdown at
          exit and the file mode is ‘w’, the record will not be emitted
          (see 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 — Tratadores de registro de eventos

5.16.6.3 NullHandler
....................

Adicionado na versão 3.1.

The *note NullHandler: 1480. class, located in the core *note logging:
8b. package, does not do any formatting or output.  It is essentially a
‘no-op’ handler for use by library developers.

 -- Classe: logging.NullHandler

     Returns a new instance of the *note NullHandler: 1480. class.

      -- Método: emit (record)

          This method does nothing.

      -- Método: handle (record)

          This method does nothing.

      -- Método: createLock ()

          This method returns ‘None’ for the lock, since there is no
          underlying I/O to which access needs to be serialized.

See *note Configurando logging para uma biblioteca: 306d. for more
information on how to use *note NullHandler: 1480.


File: python.info,  Node: WatchedFileHandler,  Next: BaseRotatingHandler,  Prev: NullHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.4 WatchedFileHandler
...........................

The *note WatchedFileHandler: 3070. class, located in the *note
logging.handlers: 8d. module, is a ‘FileHandler’ which watches the file
it is logging to.  If the file changes, it is closed and reopened using
the file name.

A file change can happen because of usage of programs such as
'newsyslog' and 'logrotate' which perform log file rotation.  This
handler, intended for use under Unix/Linux, watches the file to see if
it has changed since the last emit.  (A file is deemed to have changed
if its device or inode have changed.)  If the file has changed, the old
file stream is closed, and the file opened to get a new stream.

This handler is not appropriate for use under Windows, because under
Windows open log files cannot be moved or renamed - logging opens the
files with exclusive locks - and so there is no need for such a handler.
Furthermore, 'ST_INO' is not supported under Windows; *note stat(): 26c.
always returns zero for this value.

 -- Classe: logging.handlers.WatchedFileHandler (filename, mode='a',
          encoding=None, delay=False, errors=None)

     Returns a new instance of the *note WatchedFileHandler: 3070.
     class.  The specified file is opened and used as the stream for
     logging.  If 'mode' is not specified, ‘'a'’ is used.  If 'encoding'
     is not ‘None’, it is used to open the file with that encoding.  If
     'delay' is true, then file opening is deferred until the first call
     to *note emit(): 3071.  By default, the file grows indefinitely.
     If 'errors' is provided, it determines how encoding errors are
     handled.

     Alterado na versão 3.6: As well as string values, *note Path: 265.
     objects are also accepted for the 'filename' argument.

     Alterado na versão 3.9: The 'errors' parameter was added.

      -- Método: reopenIfNeeded ()

          Checks to see if the file has changed.  If it has, the
          existing stream is flushed and closed and the file opened
          again, typically as a precursor to outputting the record to
          the file.

          Adicionado na versão 3.6.

      -- Método: emit (record)

          Outputs the record to the file, but first calls *note
          reopenIfNeeded(): ea8. to reopen the file if it has changed.


File: python.info,  Node: BaseRotatingHandler,  Next: RotatingFileHandler,  Prev: WatchedFileHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.5 BaseRotatingHandler
............................

The *note BaseRotatingHandler: 3074. class, located in the *note
logging.handlers: 8d. module, is the base class for the rotating file
handlers, *note RotatingFileHandler: 1894. and *note
TimedRotatingFileHandler: 1157.  You should not need to instantiate this
class, but it has attributes and methods you may need to override.

 -- Classe: logging.handlers.BaseRotatingHandler (filename, mode,
          encoding=None, delay=False, errors=None)

     The parameters are as for ‘FileHandler’.  The attributes are:

      -- Atributo: namer

          If this attribute is set to a callable, the *note
          rotation_filename(): 3076. method delegates to this callable.
          The parameters passed to the callable are those passed to
          *note rotation_filename(): 3076.

               Nota: The namer function is called quite a few times
               during rollover, so it should be as simple and as fast as
               possible.  It should also return the same output every
               time for a given input, otherwise the rollover behaviour
               may not work as expected.

               It’s also worth noting that care should be taken when
               using a namer to preserve certain attributes in the
               filename which are used during rotation.  For example,
               *note RotatingFileHandler: 1894. expects to have a set of
               log files whose names contain successive integers, so
               that rotation works as expected, and *note
               TimedRotatingFileHandler: 1157. deletes old log files
               (based on the ‘backupCount’ parameter passed to the
               handler’s initializer) by determining the oldest files to
               delete.  For this to happen, the filenames should be
               sortable using the date/time portion of the filename, and
               a namer needs to respect this.  (If a namer is wanted
               that doesn’t respect this scheme, it will need to be used
               in a subclass of *note TimedRotatingFileHandler: 1157.
               which overrides the *note getFilesToDelete(): 3077.
               method to fit in with the custom naming scheme.)

          Adicionado na versão 3.3.

      -- Atributo: rotator

          If this attribute is set to a callable, the *note rotate():
          3079. method delegates to this callable.  The parameters
          passed to the callable are those passed to *note rotate():
          3079.

          Adicionado na versão 3.3.

      -- Método: rotation_filename (default_name)

          Modify the filename of a log file when rotating.

          This is provided so that a custom filename can be provided.

          The default implementation calls the ‘namer’ attribute of the
          handler, if it’s callable, passing the default name to it.  If
          the attribute isn’t callable (the default is ‘None’), the name
          is returned unchanged.


          Parâmetros: ‘default_name’ – The default name for the log
          file.

          Adicionado na versão 3.3.

      -- Método: rotate (source, dest)

          When rotating, rotate the current log.

          The default implementation calls the ‘rotator’ attribute of
          the handler, if it’s callable, passing the source and dest
          arguments to it.  If the attribute isn’t callable (the default
          is ‘None’), the source is simply renamed to the destination.


          Parâmetros:

             * ‘source’ – The source filename.  This is normally the
               base filename, e.g.  ‘test.log’.

             * ‘dest’ – The destination filename.  This is normally what
               the source is rotated to, e.g.  ‘test.log.1’.

          Adicionado na versão 3.3.

The reason the attributes exist is to save you having to subclass - you
can use the same callables for instances of *note RotatingFileHandler:
1894. and *note TimedRotatingFileHandler: 1157.  If either the namer or
rotator callable raises an exception, this will be handled in the same
way as any other exception during an ‘emit()’ call, i.e.  via the
‘handleError()’ method of the handler.

If you need to make more significant changes to rotation processing, you
can override the methods.

For an example, see *note Using a rotator and namer to customize log
rotation processing: 307a.


File: python.info,  Node: RotatingFileHandler,  Next: TimedRotatingFileHandler,  Prev: BaseRotatingHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.6 RotatingFileHandler
............................

The *note RotatingFileHandler: 1894. class, located in the *note
logging.handlers: 8d. module, supports rotation of disk log files.

 -- Classe: logging.handlers.RotatingFileHandler (filename, mode='a',
          maxBytes=0, backupCount=0, encoding=None, delay=False,
          errors=None)

     Returns a new instance of the *note RotatingFileHandler: 1894.
     class.  The specified file is opened and used as the stream for
     logging.  If 'mode' is not specified, ‘'a'’ is used.  If 'encoding'
     is not ‘None’, it is used to open the file with that encoding.  If
     'delay' is true, then file opening is deferred until the first call
     to *note emit(): 307d.  By default, the file grows indefinitely.
     If 'errors' is provided, it determines how encoding errors are
     handled.

     You can use the 'maxBytes' and 'backupCount' values to allow the
     file to 'rollover' at a predetermined size.  When the size is about
     to be exceeded, the file is closed and a new file is silently
     opened for output.  Rollover occurs whenever the current log file
     is nearly 'maxBytes' in length; but if either of 'maxBytes' or
     'backupCount' is zero, rollover never occurs, so you generally want
     to set 'backupCount' to at least 1, and have a non-zero 'maxBytes'.
     When 'backupCount' is non-zero, the system will save old log files
     by appending the extensions ‘.1’, ‘.2’ etc., to the filename.  For
     example, with a 'backupCount' of 5 and a base file name of
     ‘app.log’, you would get ‘app.log’, ‘app.log.1’, ‘app.log.2’, up to
     ‘app.log.5’.  The file being written to is always ‘app.log’.  When
     this file is filled, it is closed and renamed to ‘app.log.1’, and
     if files ‘app.log.1’, ‘app.log.2’, etc.  exist, then they are
     renamed to ‘app.log.2’, ‘app.log.3’ etc.  respectively.

     Alterado na versão 3.6: As well as string values, *note Path: 265.
     objects are also accepted for the 'filename' argument.

     Alterado na versão 3.9: The 'errors' parameter was added.

      -- Método: doRollover ()

          Does a rollover, as described above.

      -- Método: emit (record)

          Outputs the record to the file, catering for rollover as
          described previously.

      -- Método: shouldRollover (record)

          See if the supplied record would cause the file to exceed the
          configured size limit.


File: python.info,  Node: TimedRotatingFileHandler,  Next: SocketHandler,  Prev: RotatingFileHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.7 TimedRotatingFileHandler
.................................

The *note TimedRotatingFileHandler: 1157. class, located in the *note
logging.handlers: 8d. module, supports rotation of disk log files at
certain timed intervals.

 -- Classe: logging.handlers.TimedRotatingFileHandler (filename,
          when='h', interval=1, backupCount=0, encoding=None,
          delay=False, utc=False, atTime=None, errors=None)

     Returns a new instance of the *note TimedRotatingFileHandler: 1157.
     class.  The specified file is opened and used as the stream for
     logging.  On rotating it also sets the filename suffix.  Rotating
     happens based on the product of 'when' and 'interval'.

     You can use the 'when' to specify the type of 'interval'.  The list
     of possible values is below.  Note that they are not case
     sensitive.

     Valor                Type of interval                 If/how 'atTime' is used
                                                           
     ------------------------------------------------------------------------------------
                                                           
     ‘'S'’                Seconds                          Ignored
                                                           
                                                           
     ‘'M'’                Minutes                          Ignored
                                                           
                                                           
     ‘'H'’                Horas                            Ignored
                                                           
                                                           
     ‘'D'’                Dias                             Ignored
                                                           
                                                           
     ‘'W0'-'W6'’          Weekday (0=Monday)               Used to compute initial
                                                           rollover time
                                                           
                                                           
     ‘'midnight'’         Roll over at midnight, if        Used to compute initial
                          'atTime' not specified, else     rollover time
                          at time 'atTime'                 
                          

     When using weekday-based rotation, specify ‘W0’ for Monday, ‘W1’
     for Tuesday, and so on up to ‘W6’ for Sunday.  In this case, the
     value passed for 'interval' isn’t used.

     The system will save old log files by appending extensions to the
     filename.  The extensions are date-and-time based, using the
     strftime format ‘%Y-%m-%d_%H-%M-%S’ or a leading portion thereof,
     depending on the rollover interval.

     When computing the next rollover time for the first time (when the
     handler is created), the last modification time of an existing log
     file, or else the current time, is used to compute when the next
     rotation will occur.

     If the 'utc' argument is true, times in UTC will be used; otherwise
     local time is used.

     If 'backupCount' is nonzero, at most 'backupCount' files will be
     kept, and if more would be created when rollover occurs, the oldest
     one is deleted.  The deletion logic uses the interval to determine
     which files to delete, so changing the interval may leave old files
     lying around.

     If 'delay' is true, then file opening is deferred until the first
     call to *note emit(): 3082.

     If 'atTime' is not ‘None’, it must be a ‘datetime.time’ instance
     which specifies the time of day when rollover occurs, for the cases
     where rollover is set to happen “at midnight” or “on a particular
     weekday”.  Note that in these cases, the 'atTime' value is
     effectively used to compute the 'initial' rollover, and subsequent
     rollovers would be calculated via the normal interval calculation.

     If 'errors' is specified, it’s used to determine how encoding
     errors are handled.

          Nota: Calculation of the initial rollover time is done when
          the handler is initialised.  Calculation of subsequent
          rollover times is done only when rollover occurs, and rollover
          occurs only when emitting output.  If this is not kept in
          mind, it might lead to some confusion.  For example, if an
          interval of “every minute” is set, that does not mean you will
          always see log files with times (in the filename) separated by
          a minute; if, during application execution, logging output is
          generated more frequently than once a minute, 'then' you can
          expect to see log files with times separated by a minute.  If,
          on the other hand, logging messages are only output once every
          five minutes (say), then there will be gaps in the file times
          corresponding to the minutes where no output (and hence no
          rollover) occurred.

     Alterado na versão 3.4: 'atTime' parameter was added.

     Alterado na versão 3.6: As well as string values, *note Path: 265.
     objects are also accepted for the 'filename' argument.

     Alterado na versão 3.9: The 'errors' parameter was added.

      -- Método: doRollover ()

          Does a rollover, as described above.

      -- Método: emit (record)

          Outputs the record to the file, catering for rollover as
          described above.

      -- Método: getFilesToDelete ()

          Returns a list of filenames which should be deleted as part of
          rollover.  These

      -- Método: shouldRollover (record)

          See if enough time has passed for a rollover to occur and if
          it has, compute the next rollover time.


File: python.info,  Node: SocketHandler,  Next: DatagramHandler,  Prev: TimedRotatingFileHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.8 SocketHandler
......................

The *note SocketHandler: 1158. class, located in the *note
logging.handlers: 8d. module, sends logging output to a network socket.
The base class uses a TCP socket.

 -- Classe: logging.handlers.SocketHandler (host, port)

     Returns a new instance of the *note SocketHandler: 1158. class
     intended to communicate with a remote machine whose address is
     given by 'host' and 'port'.

     Alterado na versão 3.4: If ‘port’ is specified as ‘None’, a Unix
     domain socket is created using the value in ‘host’ - otherwise, a
     TCP socket is created.

      -- Método: close ()

          Closes the socket.

      -- Método: emit ()

          Pickles the record’s attribute dictionary and writes it to the
          socket in binary format.  If there is an error with the
          socket, silently drops the packet.  If the connection was
          previously lost, re-establishes the connection.  To unpickle
          the record at the receiving end into a *note LogRecord: 11dc,
          use the *note makeLogRecord(): 3020. function.

      -- Método: handleError ()

          Handles an error which has occurred during *note emit(): 3088.
          The most likely cause is a lost connection.  Closes the socket
          so that we can retry on the next event.

      -- Método: makeSocket ()

          This is a factory method which allows subclasses to define the
          precise type of socket they want.  The default implementation
          creates a TCP socket (*note socket.SOCK_STREAM: 14ef.).

      -- Método: makePickle (record)

          Pickles the record’s attribute dictionary in binary format
          with a length prefix, and returns it ready for transmission
          across the socket.  The details of this operation are
          equivalent to:

               data = pickle.dumps(record_attr_dict, 1)
               datalen = struct.pack('>L', len(data))
               return datalen + data

          Note that pickles aren’t completely secure.  If you are
          concerned about security, you may want to override this method
          to implement a more secure mechanism.  For example, you can
          sign pickles using HMAC and then verify them on the receiving
          end, or alternatively you can disable unpickling of global
          objects on the receiving end.

      -- Método: send (packet)

          Send a pickled byte-string 'packet' to the socket.  The format
          of the sent byte-string is as described in the documentation
          for *note makePickle(): 308b.

          This function allows for partial sends, which can happen when
          the network is busy.

      -- Método: createSocket ()

          Tries to create a socket; on failure, uses an exponential
          back-off algorithm.  On initial failure, the handler will drop
          the message it was trying to send.  When subsequent messages
          are handled by the same instance, it will not try connecting
          until some time has passed.  The default parameters are such
          that the initial delay is one second, and if after that delay
          the connection still can’t be made, the handler will double
          the delay each time up to a maximum of 30 seconds.

          This behaviour is controlled by the following handler
          attributes:

             * ‘retryStart’ (initial delay, defaulting to 1.0 seconds).

             * ‘retryFactor’ (multiplier, defaulting to 2.0).

             * ‘retryMax’ (maximum delay, defaulting to 30.0 seconds).

          This means that if the remote listener starts up 'after' the
          handler has been used, you could lose messages (since the
          handler won’t even attempt a connection until the delay has
          elapsed, but just silently drop messages during the delay
          period).


File: python.info,  Node: DatagramHandler,  Next: SysLogHandler,  Prev: SocketHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.9 DatagramHandler
........................

The *note DatagramHandler: 1159. class, located in the *note
logging.handlers: 8d. module, inherits from *note SocketHandler: 1158.
to support sending logging messages over UDP sockets.

 -- Classe: logging.handlers.DatagramHandler (host, port)

     Returns a new instance of the *note DatagramHandler: 1159. class
     intended to communicate with a remote machine whose address is
     given by 'host' and 'port'.

          Nota: As UDP is not a streaming protocol, there is no
          persistent connection between an instance of this handler and
          'host'.  For this reason, when using a network socket, a DNS
          lookup might have to be made each time an event is logged,
          which can introduce some latency into the system.  If this
          affects you, you can do a lookup yourself and initialize this
          handler using the looked-up IP address rather than the
          hostname.

     Alterado na versão 3.4: If ‘port’ is specified as ‘None’, a Unix
     domain socket is created using the value in ‘host’ - otherwise, a
     UDP socket is created.

      -- Método: emit ()

          Pickles the record’s attribute dictionary and writes it to the
          socket in binary format.  If there is an error with the
          socket, silently drops the packet.  To unpickle the record at
          the receiving end into a *note LogRecord: 11dc, use the *note
          makeLogRecord(): 3020. function.

      -- Método: makeSocket ()

          The factory method of *note SocketHandler: 1158. is here
          overridden to create a UDP socket (*note socket.SOCK_DGRAM:
          14ee.).

      -- Método: send (s)

          Send a pickled byte-string to a socket.  The format of the
          sent byte-string is as described in the documentation for
          *note SocketHandler.makePickle(): 308b.


File: python.info,  Node: SysLogHandler,  Next: NTEventLogHandler,  Prev: DatagramHandler,  Up: logging handlers — Tratadores de registro de eventos

5.16.6.10 SysLogHandler
.......................

The *note SysLogHandler: 861. class, located in the *note
logging.handlers: 8d. module, supports sending logging messages to a
remote or local Unix syslog.

 -- Classe: logging.handlers.SysLogHandler (address=('localhost',
          SYSLOG_UDP_PORT), facility=LOG_USER,
          socktype=socket.SOCK_DGRAM, timeout=None)

     Returns a new instance of the *note SysLogHandler: 861. 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:
     14ee. 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: 14ef.  If 'timeout' is specified, it sets
     a timeout (in seconds) for the socket operations.  This can help
     prevent the program from hanging indefinitely if the syslog server
     is unreachable.  By default, 'timeout' is ‘None’, meaning no
     timeout is applied.

     Note that if your server is not listening on UDP port 514, *note
     SysLogHandler: 861. may appear not to work.  In that case, check
     what address you should be using for a domain socket - it’s system
     dependent.  For example, on Linux it’s usually ‘/dev/log’ but on
     OS/X it’s ‘/var/run/syslog’.  You’ll need to check your platform
     and use the appropriate address (you may need to do this check at
     runtime if your application needs to run on several platforms).  On
     Windows, you pretty much have to use the UDP option.

          Nota: On macOS 12.x (Monterey), Apple has changed the
          behaviour of their syslog daemon - it no longer listens on a
          domain socket.  Therefore, you cannot expect *note
          SysLogHandler: 861. to work on this system.

          See gh-91070(1) for more information.

     Alterado na versão 3.2: 'socktype' was added.

     Alterado na versão 3.14: 'timeout' foi adicionado.

      -- Método: close ()

          Closes the socket to the remote host.

      -- Método: createSocket ()

          Tries to create a socket and, if it’s not a datagram socket,
          connect it to the other end.  This method is called during
          handler initialization, but it’s not regarded as an error if
          the other end isn’t listening at this point - the method will
          be called again when emitting an event, if there is no socket
          at that point.

          Adicionado na versão 3.11.

      -- Método: emit (record)

          The record is formatted, and then sent to the syslog server.
          If exception information is present, it is 'not' sent to the
          server.

          Alterado na versão 3.2.1: (See: bpo-12168(2).)  In earlier
          versions, the message sent to the syslog daemons was always
          terminated with a NUL byte, because early versions of these
          daemons expected a NUL terminated message - even though it’s
          not in the relevant specification ( RFC 5424(3)).  More recent
          versions of these daemons don’t expect the NUL byte but strip
          it off if it’s there, and even more recent daemons (which
          adhere more closely to RFC 5424) pass the NUL byte on as part
          of the message.

          To enable easier handling of syslog messages in the face of
          all these differing daemon behaviours, the appending of the
          NUL byte has been made configurable, through the use of a
          class-level attribute, ‘append_nul’.  This defaults to ‘True’
          (preserving the existing behaviour) but can be set to ‘False’
          on a ‘SysLogHandler’ instance in order for that instance to
          'not' append the NUL terminator.

          Alterado na versão 3.3: (See: bpo-12419(4).)  In earlier
          versions, there was no facility for an “ident” or “tag” prefix
          to identify the source of the message.  This can now be
          specified using a class-level attribute, defaulting to ‘""’ to
          preserve existing behaviour, but which can be overridden on a
          ‘SysLogHandler’ instance in order for that instance to prepend
          the ident to every message handled.  Note that the provided
          ident must be text, not bytes, and is prepended to the message
          exactly as is.

      -- Método: encodePriority (facility, priority)

          Encodes the facility and priority into an integer.  You can
          pass in strings or integers - if strings are passed, internal
          mapping dictionaries are used to convert them to integers.

          The symbolic ‘LOG_’ values are defined in *note SysLogHandler:
          861. and mirror the values defined in the ‘sys/syslog.h’
          header file.

          'Priorities'

          Name (string)                  Symbolic value
                                         
          ---------------------------------------------------
                                         
          ‘alert’                        LOG_ALERT
                                         
                                         
          ‘crit’ or ‘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'

          Name (string)       Symbolic value
                              
          ----------------------------------------
                              
          ‘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 — Tratadores de registro de eventos

5.16.6.11 NTEventLogHandler
...........................

The *note NTEventLogHandler: 309a. class, located in the *note
logging.handlers: 8d. 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: 309a. 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 — Tratadores de registro de eventos

5.16.6.12 SMTPHandler
.....................

The *note SMTPHandler: 1813. class, located in the *note
logging.handlers: 8d. 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: 1813. 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(): 1334.
     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 — Tratadores de registro de eventos

5.16.6.13 MemoryHandler
.......................

The *note MemoryHandler: 3053. class, located in the *note
logging.handlers: 8d. 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: 3053. is a subclass of the more general *note
BufferingHandler: 30a6, 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():
          30a8. returns true, call *note flush(): 30a9. to process the
          buffer.

      -- Método: flush ()

          For a *note BufferingHandler: 30a6. 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: 3053. 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(): 30aa. 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(): 30ac, sets the target to ‘None’ and
          clears the buffer.

      -- Método: flush ()

          For a *note MemoryHandler: 3053. 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 — Tratadores de registro de eventos

5.16.6.14 HTTPHandler
.....................

The *note HTTPHandler: 1021. class, located in the *note
logging.handlers: 8d. 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: 1021. 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: 354.
     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:
          11dc. 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(): 30b0. 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(): 3004. to specify a *note Formatter: 1685. for
          a *note HTTPHandler: 1021. has no effect.  Instead of calling
          *note format(): 300d, this handler calls *note mapLogRecord():
          30b0. and then *note urllib.parse.urlencode(): 108b. 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 — Tratadores de registro de eventos

5.16.6.15 QueueHandler
......................

Adicionado na versão 3.2.

The *note QueueHandler: 1a7d. class, located in the *note
logging.handlers: 8d. module, supports sending logging messages to a
queue, such as those implemented in the *note queue: bb. or *note
multiprocessing: 98. modules.

Along with the *note QueueListener: 241. class, *note QueueHandler:
1a7d. 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: 1813.)
are done on a separate thread.

 -- Classe: logging.handlers.QueueHandler (queue)

     Returns a new instance of the *note QueueHandler: 1a7d. 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(): 30b4. 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: d55. instances for
     'queue'.

          Nota: If you are using *note multiprocessing: 98, you should
          avoid using *note SimpleQueue: d55. and instead use *note
          multiprocessing.Queue: 1aa0.

          Aviso: The *note multiprocessing: 98. module uses an internal
          logger created and accessed via *note get_logger(): 30b5.
          *note multiprocessing.Queue: 1aa0. will log ‘DEBUG’ level
          messages upon items being queued.  If those log messages are
          processed by a *note QueueHandler: 1a7d. using the same *note
          multiprocessing.Queue: 1aa0. 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(): 300b. method is called to handle the
          error.  This can result in the record silently being dropped
          (if *note logging.raiseExceptions: 13f5. is ‘False’) or a
          message printed to ‘sys.stderr’ (if *note
          logging.raiseExceptions: 13f5. 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(): 199. 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: 241. 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(): 13ac,
          this attribute will contain a *note QueueListener: 241.
          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 — Tratadores de registro de eventos

5.16.6.16 QueueListener
.......................

Adicionado na versão 3.2.

The *note QueueListener: 241. class, located in the *note
logging.handlers: 8d. module, supports receiving logging messages from a
queue, such as those implemented in the *note queue: bb. or *note
multiprocessing: 98. 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: 241. is not itself
a handler, it is documented here because it works hand-in-hand with
*note QueueHandler: 1a7d.

Along with the *note QueueHandler: 1a7d. class, *note QueueListener:
241. 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: 1813.) are done on a
separate thread.

 -- Classe: logging.handlers.QueueListener (queue, *handlers,
          respect_handler_level=False)

     Returns a new instance of the *note QueueListener: 241. 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(): 30ba. 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: d55. instances for 'queue'.

          Nota: If you are using *note multiprocessing: 98, you should
          avoid using *note SimpleQueue: d55. and instead use *note
          multiprocessing.Queue: 1aa0.

     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.

     Alterado na versão 3.14: *note QueueListener: 241. can now be used
     as a context manager via *note with: 186.  When entering the
     context, the listener is started.  When exiting the context, the
     listener is stopped.  *note __enter__(): 2539. returns the *note
     QueueListener: 241. object.

      -- 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(): 30bb.

      -- 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.14: Raises *note RuntimeError: 243. 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: 8b.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 8c.

     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 — Tratadores de registro de eventos,  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.14/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: 13c1.:

               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(): 30c5. é 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(): 1ccb, 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(): 30c3.
     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():
     1312.

 -- 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(): 1312.

 -- Função: platform.uname ()

     Interface para uname razoavelmente portátil.  Retorna um *note
     namedtuple(): 4da. contendo seis atributos: *note system: 2112,
     *note node: 30c4, *note release: 30ce, *note version: 30cf, *note
     machine: 30c3. e *note processor: 30c6.

     *note processor: 30c6. é resolvido tardiamente, sob demanda.

     Nota: os dois primeiros nomes de atributos diferem dos nomes
     apresentados por *note os.uname(): 1312, 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(): 4da.

     Alterado na versão 3.9: *note processor: 30c6. é resolvido tarde em
     vez de imediatamente.

 -- Função: platform.invalidate_caches ()

     Limpa o cache interno de informações, como *note uname(): 1cc9.
     Isso normalmente é útil quando o *note node(): 30c4. da plataforma
     é alterado por um processo externo e é necessário recuperar o valor
     atualizado.

     Adicionado na versão 3.14.


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 ‘''’).

     Deprecated since version 3.13, will be removed in version 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(): 30d2. 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(): 4da. 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: 2bf. 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(): 4da. 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(): d77.

        * ‘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: af. também pode ser invocado diretamente usando a opção
*note -m: 23b. 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(): 19fe. 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(): 19fe. 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(): 2eb2.

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: f32.

 -- Dado: errno.ENOENT

     Arquivo ou diretório inexistente.  Este erro é mapeado para a
     exceção *note FileNotFoundError: 263.

 -- Dado: errno.ESRCH

     Processo inexistente.  Este erro é mapeado para a exceção *note
     ProcessLookupError: 1251.

 -- Dado: errno.EINTR

     Chamada de sistema interrompida.  Este erro é mapeado para a
     exceção *note InterruptedError: f7c.

 -- 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: 124e.

 -- Dado: errno.EAGAIN

     Tente novamente.  Este erro é mapeado para a exceção *note
     BlockingIOError: 234.

 -- Dado: errno.ENOMEM

     Memória insuficiente

 -- Dado: errno.EACCES

     Permissão negada.  Este erro é mapeado para a exceção *note
     PermissionError: f32.

 -- 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: 1216.

 -- 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: 1250.

 -- Dado: errno.EISDIR

     É um diretório.  Este erro é mapeado para a exceção *note
     IsADirectoryError: 124f.

 -- 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: 1252.

 -- 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: 234.

 -- 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: 1253.

 -- Dado: errno.ECONNRESET

     Conexão fechada pela outra ponta.  Este erro é mapeado para a
     exceção *note ConnectionResetError: 1255.

 -- 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: 1252.

 -- Dado: errno.ETOOMANYREFS

     Too many references: cannot splice

 -- Dado: errno.ETIMEDOUT

     Connection timed out.  This error is mapped to the exception *note
     TimeoutError: a2c.

 -- Dado: errno.ECONNREFUSED

     Connection refused.  This error is mapped to the exception *note
     ConnectionRefusedError: 1254.

 -- Dado: errno.EHOSTDOWN

     Host is down

 -- Dado: errno.EHOSTUNREACH

     No route to host

 -- Dado: errno.EHWPOISON

     Memory page has hardware error.

     Adicionado na versão 3.14.

 -- Dado: errno.EALREADY

     Operation already in progress.  This error is mapped to the
     exception *note BlockingIOError: 234.

 -- Dado: errno.EINPROGRESS

     Operation now in progress.  This error is mapped to the exception
     *note BlockingIOError: 234.

 -- 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: f32.

     *note Disponibilidade: 1fed.: 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: 2e. é 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.14/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: 3e. 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: 3165.  Em plataformas onde ‘sizeof(long) == sizeof(int)’ é um
apelido para *note c_long: 3166.  Então, você não deve ficar confuso se
*note c_long: 3166. for impresso se você esperaria *note c_int: 3165. —
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::
* Calling functions with your own custom data types::
* Specifying the required argument types (function prototypes): Specifying the required argument types function prototypes.
* 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 layout, alignment and byte order: Structure/union layout alignment and byte order.
* Bit fields in structures and unions::
* Arrays::
* Ponteiros::
* Thread safety without the GIL::
* Conversão de Tipos::
* Tipos Incompletos::
* Funções Callbacks::
* Accessing values exported from dlls::
* Surprises::
* Variable-sized data types::


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: 2e. 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: 2bf. quando a
chamada da função falha.

Alterado na versão 3.3: Erros do Windows costumavam levantar *note
WindowsError: 124b, que agora é um apelido de *note OSError: 2bf.

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():
3169. 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(): dbe. 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: 2ea. é 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: 2e. 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: 2e, então você deve ter cuidado de qualquer maneira.  O módulo
*note faulthandler: 5c. 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: 2e.


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: 2e. define uma série de tipos de dados primitivos
compatíveis com C:

Tipo ctypes                Tipo em C                                      Tipo em Python
                                                                          
-----------------------------------------------------------------------------------------------------------
                                                                          
*note c_bool: 3170.        _Bool                                          bool (1)
                                                                          
                                                                          
*note c_char: 3171.        char                                           objeto bytes de 1 caractere
                                                                          
                                                                          
*note c_wchar: 3172.       ‘wchar_t’                                      string de 1 caractere
                                                                          
                                                                          
*note c_byte: 1a18.        char                                           int
                                                                          
                                                                          
*note c_ubyte: 1a19.       unsigned char                                  int
                                                                          
                                                                          
*note c_short: 3173.       short                                          int
                                                                          
                                                                          
*note c_ushort: 3174.      unsigned short                                 int
                                                                          
                                                                          
*note c_int: 3165.         int                                            int
                                                                          
                                                                          
*note c_int8: 3175.        ‘int8_t’                                       int
                                                                          
                                                                          
*note c_int16: 3176.       ‘int16_t’                                      int
                                                                          
                                                                          
*note c_int32: 3177.       ‘int32_t’                                      int
                                                                          
                                                                          
*note c_int64: 3178.       ‘int64_t’                                      int
                                                                          
                                                                          
*note c_uint: 3179.        unsigned int                                   int
                                                                          
                                                                          
*note c_uint8: 317a.       ‘uint8_t’                                      int
                                                                          
                                                                          
*note c_uint16: 317b.      ‘uint16_t’                                     int
                                                                          
                                                                          
*note c_uint32: 317c.      ‘uint32_t’                                     int
                                                                          
                                                                          
*note c_uint64: 317d.      ‘uint64_t’                                     int
                                                                          
                                                                          
*note c_long: 3166.        long                                           int
                                                                          
                                                                          
*note c_ulong: 317e.       unsigned long                                  int
                                                                          
                                                                          
*note c_longlong: 317f.    __int64 ou long long                           int
                                                                          
                                                                          
*note c_ulonglong: 3180.   unsigned __int64 ou unsigned long long         int
                                                                          
                                                                          
*note c_size_t: 3181.      ‘size_t’                                       int
                                                                          
                                                                          
*note c_ssize_t: 1438.     ‘ssize_t’ ou *note Py_ssize_t: c49.            int
                                                                          
                                                                          
*note c_time_t: 1a7f.      ‘time_t’                                       int
                                                                          
                                                                          
*note c_float: 3182.       float                                          float
                                                                          
                                                                          
*note c_double: 1b9d.      double                                         float
                                                                          
                                                                          
*note c_longdouble: 1b9e.  long double                                    float
                                                                          
                                                                          
*note c_char_p: 1995.      char* (finalizado com NUL)                     objeto bytes ou ‘None’
                                                                          
                                                                          
*note c_wchar_p: 1996.     wchar_t* (finalizado com NUL)                  String ou ‘None’
                                                                          
                                                                          
*note c_void_p: 1997.      void*                                          int ou ‘None’
                                                                          

  1. O construtor aceita qualquer objeto com um valor verdade.

Além disso, se a aritmética complexa compatível com IEC 60559 (Anexo G)
for suportada em C e ‘libffi’, os seguintes tipos complexos estarão
disponíveis:

Tipo ctypes                            Tipo em C                             Tipo em Python
                                                                             
---------------------------------------------------------------------------------------------------
                                                                             
*note c_float_complex: 1ec.            float complex                         complexo
                                                                             
                                                                             
*note c_double_complex: 1ed.           double complex                        complexo
                                                                             
                                                                             
*note c_longdouble_complex: 1ee.       long double complex                   complexo
                                                                             

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: 1995, *note c_wchar_p: 1996. e *note c_void_p: 1997. 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(): 3183.
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(): 3183. 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(): 1c6b.


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: cc0, 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
     >>>

As has been mentioned before, all Python types except integers, strings,
and bytes objects have to be wrapped in their corresponding *note
ctypes: 2e. type, so that they can be converted to the required C data
type:

     >>> 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: Calling functions with your own custom data types,  Prev: Chamando funções continuação,  Up: Tutorial ctypes

5.16.9.7 Chamando funções variadas
..................................

On a lot of platforms calling variadic functions through ctypes is
exactly the same as calling functions with a fixed number of parameters.
On some platforms, and in particular ARM64 for Apple Platforms, the
calling convention for variadic functions is different than that for
regular functions.

On those platforms it is required to specify the *note argtypes: 174a.
attribute for the regular, non-variadic, function arguments:

     libc.printf.argtypes = [ctypes.c_char_p]

Because specifying the attribute does not inhibit portability it is
advised to always specify *note argtypes: 174a. for all variadic
functions.


File: python.info,  Node: Calling functions with your own custom data types,  Next: Specifying the required argument types function prototypes,  Prev: Chamando funções variadas,  Up: Tutorial ctypes

5.16.9.8 Calling functions with your own custom data types
..........................................................

You can also customize *note ctypes: 2e. argument conversion to allow
instances of your own classes be used as function arguments.  *note
ctypes: 2e. looks for an ‘_as_parameter_’ attribute and uses this as the
function argument.  The attribute must be an integer, string, bytes, a
*note ctypes: 2e. instance, or an object with an ‘_as_parameter_’
attribute:

     >>> 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
     >>>

If you don’t want to store the instance’s data in the ‘_as_parameter_’
instance variable, you could define a *note property: 4ad. which makes
the attribute available on request.


File: python.info,  Node: Specifying the required argument types function prototypes,  Next: Tipos de Retorno,  Prev: Calling functions with your own custom data types,  Up: Tutorial ctypes

5.16.9.9 Specifying the required argument types (function prototypes)
.....................................................................

It is possible to specify the required argument types of functions
exported from DLLs by setting the *note argtypes: 174a. attribute.

*note argtypes: 174a. must be a sequence of C data types (the ‘printf()’
function is probably not a good example here, because it takes a
variable number and different types of parameters depending on the
format string, on the other hand this is quite handy to experiment with
this feature):

     >>> 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
     >>>

Specifying a format protects against incompatible argument types (just
as a prototype for a C function), and tries to convert the arguments to
valid types:

     >>> 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
     >>>

If you have defined your own classes which you pass to function calls,
you have to implement a *note from_param(): 318c. class method for them
to be able to use them in the *note argtypes: 174a. sequence.  The *note
from_param(): 318c. class method receives the Python object passed to
the function call, it should do a typecheck or whatever is needed to
make sure this object is acceptable, and then return the object itself,
its ‘_as_parameter_’ attribute, or whatever you want to pass as the C
function argument in this case.  Again, the result should be an integer,
string, bytes, a *note ctypes: 2e. instance, or an object with an
‘_as_parameter_’ attribute.


File: python.info,  Node: Tipos de Retorno,  Next: Passando ponteiros ou passando parâmetros por referência,  Prev: Specifying the required argument types function prototypes,  Up: Tutorial ctypes

5.16.9.10 Tipos de Retorno
..........................

By default functions are assumed to return the C int type.  Other return
types can be specified by setting the *note restype: 318f. attribute of
the function object.

The C prototype of ‘time()’ is ‘time_t time(time_t *)’.  Because
‘time_t’ might be of a different type than the default return type int,
you should specify the ‘restype’ attribute:

     >>> libc.time.restype = c_time_t

The argument types can be specified using *note argtypes: 174a.:

     >>> libc.time.argtypes = (POINTER(c_time_t),)

To call the function with a ‘NULL’ pointer as first argument, use
‘None’:

     >>> print(libc.time(None))
     1150640792

Here is a more advanced example, it uses the ‘strchr()’ function, which
expects a string pointer and a char, and returns a pointer to a 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"): 21d6. calls above, you can set
the *note argtypes: 174a. 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'
     >>>

You can also use a callable Python object (a function or a class for
example) as the *note restype: 318f. attribute, if the foreign function
returns an integer.  The callable will be called with the 'integer' the
C function returns, and the result of this call will be used as the
result of your function call.  This is useful to check for error return
values and automatically raise an exception:

     >>> 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’ is a function which will call Windows ‘FormatMessage()’ api
to get the string representation of an error code, and 'returns' an
exception.  ‘WinError’ takes an optional error code parameter, if no one
is used, it calls *note GetLastError(): 3190. to retrieve it.

Please note that a much more powerful error checking mechanism is
available through the *note errcheck: 3191. attribute; see the reference
manual for details.


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)
.....................................................................

Sometimes a C api function expects a 'pointer' to a data type as
parameter, probably to write into the corresponding location, or if the
data is too large to be passed by value.  This is also known as 'passing
parameters by reference'.

*note ctypes: 2e. exports the *note byref(): 3194. function which is
used to pass parameters by reference.  The same effect can be achieved
with the *note pointer(): 1994. function, although *note pointer():
1994. does a lot more work since it constructs a real pointer object, so
it is faster to use *note byref(): 3194. if you don’t need the pointer
object in Python itself:

     >>> 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 layout 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
.............................

Structures and unions must derive from the *note Structure: 1e4. and
*note Union: 1e5. base classes which are defined in the *note ctypes:
2e. module.  Each subclass must define a *note _fields_: 1888.
attribute.  ‘_fields_’ must be a list of '2-tuples', containing a 'field
name' and a 'field type'.

The field type must be a *note ctypes: 2e. type like *note c_int: 3165,
or any other derived *note ctypes: 2e. type: structure, union, array,
pointer.

Here is a simple example of a POINT structure, which contains two
integers named 'x' and 'y', and also shows how to initialize a structure
in the constructor:

     >>> 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
     >>>

You can, however, build much more complicated structures.  A structure
can itself contain other structures by using a structure as a field
type.

Here is a RECT structure which contains two POINTs named 'upperleft' and
'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
     >>>

Nested structures can also be initialized in the constructor in several
ways:

     >>> r = RECT(POINT(1, 2), POINT(3, 4))
     >>> r = RECT((1, 2), (3, 4))

Field *note descriptor: 17e7.s can be retrieved from the 'class', they
are useful for debugging because they can provide useful information.
See *note CField: 1e7.:

     >>> POINT.x
     <ctypes.CField 'x' type=c_int, ofs=0, size=4>
     >>> POINT.y
     <ctypes.CField 'y' type=c_int, ofs=4, size=4>
     >>>
     Aviso: *note ctypes: 2e. does not support passing unions or
     structures with bit-fields to functions by value.  While this may
     work on 32-bit x86, it’s not guaranteed by the library to work in
     the general case.  Unions and structures with bit-fields should
     always be passed to functions by pointer.


File: python.info,  Node: Structure/union layout alignment and byte order,  Next: Bit fields in structures and unions,  Prev: Estruturas e uniões,  Up: Tutorial ctypes

5.16.9.13 Structure/union layout, alignment and byte order
..........................................................

By default, Structure and Union fields are laid out in the same way the
C compiler does it.  It is possible to override this behavior entirely
by specifying a *note _layout_: 1e6. class attribute in the subclass
definition; see the attribute documentation for details.

It is possible to specify the maximum alignment for the fields and/or
for the structure itself by setting the class attributes *note _pack_:
315. and/or *note _align_: 4e2, respectively.  See the attribute
documentation for details.

*note ctypes: 2e. uses the native byte order for Structures and Unions.
To build structures with non-native byte order, you can use one of the
*note BigEndianStructure: 3199, *note LittleEndianStructure: 319a, *note
BigEndianUnion: 1aca, and *note LittleEndianUnion: 1acb. base classes.
These classes cannot contain pointer fields.


File: python.info,  Node: Bit fields in structures and unions,  Next: Arrays,  Prev: Structure/union layout alignment and byte order,  Up: Tutorial ctypes

5.16.9.14 Bit fields in structures and unions
.............................................

It is possible to create structures and unions containing bit fields.
Bit fields are only possible for integer fields, the bit width is
specified as the third item in the *note _fields_: 1888. tuples:

     >>> class Int(Structure):
     ...     _fields_ = [("first_16", c_int, 16),
     ...                 ("second_16", c_int, 16)]
     ...
     >>> print(Int.first_16)
     <ctypes.CField 'first_16' type=c_int, ofs=0, bit_size=16, bit_offset=0>
     >>> print(Int.second_16)
     <ctypes.CField 'second_16' type=c_int, ofs=0, bit_size=16, bit_offset=16>

It is important to note that bit field allocation and layout in memory
are not defined as a C standard; their implementation is
compiler-specific.  By default, Python will attempt to match the
behavior of a “native” compiler for the current platform.  See the *note
_layout_: 1e6. attribute for details on the default behavior and how to
change it.


File: python.info,  Node: Arrays,  Next: Ponteiros,  Prev: Bit fields in structures and unions,  Up: Tutorial ctypes

5.16.9.15 Arrays
................

Arrays are sequences, containing a fixed number of instances of the same
type.

The recommended way to create array types is by multiplying a data type
with a positive integer:

     TenPointsArrayType = POINT * 10

Here is an example of a somewhat artificial data type, a structure
containing 4 POINTs among other stuff:

     >>> 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
     >>>

Instances are created in the usual way, by calling the class:

     arr = TenPointsArrayType()
     for pt in arr:
         print(pt.x, pt.y)

The above code print a series of ‘0 0’ lines, because the array contents
is initialized to zeros.

Initializers of the correct type can also be specified:

     >>> 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: Thread safety without the GIL,  Prev: Arrays,  Up: Tutorial ctypes

5.16.9.16 Ponteiros
...................

Pointer instances are created by calling the *note pointer(): 1994.
function on a *note ctypes: 2e. type:

     >>> from ctypes import *
     >>> i = c_int(42)
     >>> pi = pointer(i)
     >>>

Pointer instances have a *note contents: 31a0. attribute which returns
the object to which the pointer points, the ‘i’ object above:

     >>> pi.contents
     c_long(42)
     >>>

Note that *note ctypes: 2e. does not have OOR (original object return),
it constructs a new, equivalent object each time you retrieve an
attribute:

     >>> pi.contents is i
     False
     >>> pi.contents is pi.contents
     False
     >>>

Assigning another *note c_int: 3165. instance to the pointer’s contents
attribute would cause the pointer to point to the memory location where
this is stored:

     >>> i = c_int(99)
     >>> pi.contents = i
     >>> pi.contents
     c_long(99)
     >>>

Pointer instances can also be indexed with integers:

     >>> pi[0]
     99
     >>>

Assigning to an integer index changes the pointed to value:

     >>> print(i)
     c_long(99)
     >>> pi[0] = 22
     >>> print(i)
     c_long(22)
     >>>

It is also possible to use indexes different from 0, but you must know
what you’re doing, just as in C: You can access or change arbitrary
memory locations.  Generally you only use this feature if you receive a
pointer from a C function, and you 'know' that the pointer actually
points to an array instead of a single item.

Behind the scenes, the *note pointer(): 1994. function does more than
simply create pointer instances, it has to create pointer 'types' first.
This is done with the *note POINTER(): 1f0. function, which accepts any
*note ctypes: 2e. type, and returns a new type:

     >>> 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...>
     >>>

Calling the pointer type without an argument creates a ‘NULL’ pointer.
‘NULL’ pointers have a ‘False’ boolean value:

     >>> null_ptr = POINTER(c_int)()
     >>> print(bool(null_ptr))
     False
     >>>

*note ctypes: 2e. checks for ‘NULL’ when dereferencing pointers (but
dereferencing invalid non-‘NULL’ pointers would crash 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: Thread safety without the GIL,  Next: Conversão de Tipos,  Prev: Ponteiros,  Up: Tutorial ctypes

5.16.9.17 Thread safety without the GIL
.......................................

From Python 3.13 onward, the *note GIL: 164. can be disabled on *note
free threaded: 1f3. builds.  In ctypes, reads and writes to a single
object concurrently is safe, but not across multiple objects:

          >>> number = c_int(42)
          >>> pointer_a = pointer(number)
          >>> pointer_b = pointer(number)

In the above, it’s only safe for one object to read and write to the
address at once if the GIL is disabled.  So, ‘pointer_a’ can be shared
and written to across multiple threads, but only if ‘pointer_b’ is not
also attempting to do the same.  If this is an issue, consider using a
*note threading.Lock: 1930. to synchronize access to memory:

          >>> import threading
          >>> lock = threading.Lock()
          >>> # Thread 1
          >>> with lock:
          ...    pointer_a.contents = 24
          >>> # Thread 2
          >>> with lock:
          ...    pointer_b.contents = 42


File: python.info,  Node: Conversão de Tipos,  Next: Tipos Incompletos,  Prev: Thread safety without the GIL,  Up: Tutorial ctypes

5.16.9.18 Conversão de Tipos
............................

Usually, ctypes does strict type checking.  This means, if you have
‘POINTER(c_int)’ in the *note argtypes: 174a. list of a function or as
the type of a member field in a structure definition, only instances of
exactly the same type are accepted.  There are some exceptions to this
rule, where ctypes accepts other objects.  For example, you can pass
compatible array instances instead of pointer types.  So, for
‘POINTER(c_int)’, ctypes accepts an array of 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
     >>>

In addition, if a function argument is explicitly declared to be a
pointer type (such as ‘POINTER(c_int)’) in *note argtypes: 174a, an
object of the pointed type (‘c_int’ in this case) can be passed to the
function.  ctypes will apply the required *note byref(): 3194.
conversion in this case automatically.

To set a POINTER type field to ‘NULL’, you can assign ‘None’:

     >>> bar.values = None
     >>>

Sometimes you have instances of incompatible types.  In C, you can cast
one type into another type.  *note ctypes: 2e. provides a *note cast():
31a5. function which can be used in the same way.  The ‘Bar’ structure
defined above accepts ‘POINTER(c_int)’ pointers or *note c_int: 3165.
arrays for its ‘values’ field, but not instances of other types:

     >>> 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
     >>>

For these cases, the *note cast(): 31a5. function is handy.

The *note cast(): 31a5. function can be used to cast a ctypes instance
into a pointer to a different ctypes data type.  *note cast(): 31a5.
takes two parameters, a ctypes object that is or can be converted to a
pointer of some kind, and a ctypes pointer type.  It returns an instance
of the second argument, which references the same memory block as the
first argument:

     >>> a = (c_byte * 4)()
     >>> cast(a, POINTER(c_int))
     <ctypes.LP_c_long object at ...>
     >>>

So, *note cast(): 31a5. can be used to assign to the ‘values’ field of
‘Bar’ the structure:

     >>> 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.19 Tipos Incompletos
...........................

'Incomplete Types' are structures, unions or arrays whose members are
not yet specified.  In C, they are specified by forward declarations,
which are defined later:

     struct cell; /* forward declaration */

     struct cell {
         char *name;
         struct cell *next;
     };

The straightforward translation into ctypes code would be this, but it
does not work:

     >>> 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
     >>>

because the new ‘class cell’ is not available in the class statement
itself.  In *note ctypes: 2e, we can define the ‘cell’ class and set the
*note _fields_: 1888. attribute later, after the class statement:

     >>> from ctypes import *
     >>> class cell(Structure):
     ...     pass
     ...
     >>> cell._fields_ = [("name", c_char_p),
     ...                  ("next", POINTER(cell))]
     >>>

Let’s try it.  We create two instances of ‘cell’, and let them point to
each other, and finally follow the pointer chain a few times:

     >>> 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: Accessing values exported from dlls,  Prev: Tipos Incompletos,  Up: Tutorial ctypes

5.16.9.20 Funções Callbacks
...........................

*note ctypes: 2e. allows creating C callable function pointers from
Python callables.  These are sometimes called 'callback functions'.

First, you must create a class for the callback function.  The class
knows the calling convention, the return type, and the number and types
of arguments this function will receive.

The *note CFUNCTYPE(): 31a9. factory function creates types for callback
functions using the ‘cdecl’ calling convention.  On Windows, the *note
WINFUNCTYPE(): 31aa. factory function creates types for callback
functions using the ‘stdcall’ calling convention.

Both of these factory functions are called with the result type as first
argument, and the callback functions expected argument types as the
remaining arguments.

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
     >>>

‘qsort()’ must be called with a pointer to the data to sort, the number
of items in the data array, the size of one item, and a pointer to the
comparison function, the callback.  The callback will then be called
with two pointers to items, and it must return a negative integer if the
first item is smaller than the second, a zero if they are equal, and a
positive integer otherwise.

So our callback function receives pointers to integers, and must return
an integer.  First we create the ‘type’ for the callback function:

     >>> CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
     >>>

To get started, here is a simple callback that shows the values it gets
passed:

     >>> 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
     >>>

Now we can actually compare the two items and return a useful result:

     >>> 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
     >>>

As we can easily check, our array is sorted now:

     >>> for i in ia: print(i, end=" ")
     ...
     1 5 7 33 99
     >>>

The function factories can be used as decorator factories, so we may as
well write:

     >>> @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: Make sure you keep references to *note CFUNCTYPE(): 31a9.
     objects as long as they are used from C code.  *note ctypes: 2e.
     doesn’t, and if you don’t, they may be garbage collected, crashing
     your program when a callback is made.

     Also, note that if the callback function is called in a thread
     created outside of Python’s control (e.g.  by the foreign code that
     calls the callback), ctypes creates a new dummy Python thread on
     every invocation.  This behavior is correct for most purposes, but
     it means that values stored with *note threading.local: 17ca. will
     'not' survive across different callbacks, even when those calls are
     made from the same C thread.


File: python.info,  Node: Accessing values exported from dlls,  Next: Surprises,  Prev: Funções Callbacks,  Up: Tutorial ctypes

5.16.9.21 Accessing values exported from dlls
.............................................

Some shared libraries not only export functions, they also export
variables.  An example in the Python library itself is the *note
Py_Version: 37e, Python runtime version number encoded in a single
constant integer.

*note ctypes: 2e. can access values like this with the *note in_dll():
31ad. class methods of the type.  'pythonapi' is a predefined symbol
giving access to the Python C api:

     >>> version = ctypes.c_int.in_dll(ctypes.pythonapi, "Py_Version")
     >>> print(hex(version.value))
     0x30c00a0

An extended example which also demonstrates the use of pointers accesses
the *note PyImport_FrozenModules: 31ae. pointer exported by Python.

Quoting the docs for that value:

     Este ponteiro é inicializado para apontar para um vetor de
     registros de *note _frozen: 96e, 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.

So manipulating this pointer could even prove useful.  To restrict the
example size, we show only how this table can be read with *note ctypes:
2e.:

     >>> 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
     ...                ]
     ...
     >>>

We have defined the *note _frozen: 96e. data type, so we can get the
pointer to the table:

     >>> FrozenTable = POINTER(struct_frozen)
     >>> table = FrozenTable.in_dll(pythonapi, "_PyImport_FrozenBootstrap")
     >>>

Since ‘table’ is a ‘pointer’ to the array of ‘struct_frozen’ records, we
can iterate over it, but we just have to make sure that our loop
terminates, because pointers have no size.  Sooner or later it would
probably crash with an access violation or whatever, so it’s better to
break out of the loop when we hit the ‘NULL’ entry:

     >>> 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
     >>>

The fact that standard Python has a frozen module and a frozen package
(indicated by the negative ‘size’ member) is not well known, it is only
used for testing.  Try it out with ‘import __hello__’ for example.


File: python.info,  Node: Surprises,  Next: Variable-sized data types,  Prev: Accessing values exported from dlls,  Up: Tutorial ctypes

5.16.9.22 Surprises
...................

There are some edges in *note ctypes: 2e. where you might expect
something other than what actually happens.

Consider the following example:

     >>> 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.  We certainly expected the last statement to print ‘3 4 1 2’.  What
happened?  Here are the steps of the ‘rc.a, rc.b = rc.b, rc.a’ line
above:

     >>> temp0, temp1 = rc.b, rc.a
     >>> rc.a = temp0
     >>> rc.b = temp1
     >>>

Note that ‘temp0’ and ‘temp1’ are objects still using the internal
buffer of the ‘rc’ object above.  So executing ‘rc.a = temp0’ copies the
buffer contents of ‘temp0’ into ‘rc’ ‘s buffer.  This, in turn, changes
the contents of ‘temp1’.  So, the last assignment ‘rc.b = temp1’,
doesn’t have the expected effect.

Keep in mind that retrieving sub-objects from Structure, Unions, and
Arrays doesn’t 'copy' the sub-object, instead it retrieves a wrapper
object accessing the root-object’s underlying buffer.

Another example that may behave differently from what one would expect
is this:

     >>> s = c_char_p()
     >>> s.value = b"abc def ghi"
     >>> s.value
     b'abc def ghi'
     >>> s.value is s.value
     False
     >>>

     Nota: Objects instantiated from *note c_char_p: 1995. can only have
     their value set to bytes or integers.

Why is it printing ‘False’?  ctypes instances are objects containing a
memory block plus some *note descriptor: 17e7.s accessing the contents
of the memory.  Storing a Python object in the memory block does not
store the object itself, instead the ‘contents’ of the object is stored.
Accessing the contents again constructs a new Python object each time!


File: python.info,  Node: Variable-sized data types,  Prev: Surprises,  Up: Tutorial ctypes

5.16.9.23 Variable-sized data types
...................................

*note ctypes: 2e. provides some support for variable-sized arrays and
structures.

The *note resize(): 31b3. function can be used to resize the memory
buffer of an existing ctypes object.  The function takes the object as
first argument, and the requested size in bytes as the second argument.
The memory block cannot be made smaller than the natural memory block
specified by the objects type, a *note ValueError: 2ea. is raised if
this is tried:

     >>> 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
     >>>

This is nice and fine, but how would one access the additional elements
contained in this array?  Since the type still only knows about 4
elements, we get errors accessing other elements:

     >>> short_array[:]
     [0, 0, 0, 0]
     >>> short_array[7]
     Traceback (most recent call last):
         ...
     IndexError: invalid index
     >>>

Another way to use variable-sized data types with *note ctypes: 2e. is
to use the dynamic nature of Python, and (re-)define the data type after
the required size is already known, on a case by case basis.


File: python.info,  Node: Referência ctypes,  Prev: Tutorial ctypes,  Up: ctypes — Uma biblioteca de funções externas para Python

5.16.9.24 Referência ctypes
...........................

* Menu:

* Finding shared libraries::
* Listing loaded shared libraries::
* Loading shared libraries::
* Foreign functions::
* Function prototypes::
* Funções utilitárias::
* Data types::
* Tipos de dados fundamentais: Tipos de dados fundamentais<2>.
* Structured data types::
* Arrays and pointers::
* Exceções: Exceções<10>.


File: python.info,  Node: Finding shared libraries,  Next: Listing loaded shared libraries,  Up: Referência ctypes

5.16.9.25 Finding shared libraries
..................................

When programming in a compiled language, shared libraries are accessed
when compiling/linking a program, and when the program is run.

The purpose of the *note find_library(): f39. function is to locate a
library in a way similar to what the compiler or runtime loader does (on
platforms with several versions of a shared library the most recent
should be loaded), while the ctypes library loaders act like when a
program is run, and call the runtime loader directly.

The ‘ctypes.util’ module provides a function which can help to determine
the library to load.

 -- 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(): f39. tries to run external programs
(‘/sbin/ldconfig’, ‘gcc’, ‘objdump’ and ‘ld’) to find the library file.
It returns the filename of the library file.

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(): f39. 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(): f39. 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: 2e, 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(): f39.
to locate the library at runtime.


File: python.info,  Node: Listing loaded shared libraries,  Next: Loading shared libraries,  Prev: Finding shared libraries,  Up: Referência ctypes

5.16.9.26 Listing loaded shared libraries
.........................................

When writing code that relies on code loaded from shared libraries, it
can be useful to know which shared libraries have already been loaded
into the current process.

The ‘ctypes.util’ module provides the *note dllist(): 1ef. function,
which calls the different APIs provided by the various platforms to help
determine which shared libraries have already been loaded into the
current process.

The exact output of this function will be system dependent.  On most
platforms, the first entry of this list represents the current process
itself, which may be an empty string.  For example, on glibc-based
Linux, the return may look like:

     >>> from ctypes.util import dllist
     >>> dllist()
     ['', 'linux-vdso.so.1', '/lib/x86_64-linux-gnu/libm.so.6', '/lib/x86_64-linux-gnu/libc.so.6', ... ]


File: python.info,  Node: Loading shared libraries,  Next: Foreign functions,  Prev: Listing loaded shared libraries,  Up: Referência ctypes

5.16.9.27 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: bd2. instance may fail even if
     the DLL name exists.  When a dependent DLL of the loaded DLL is not
     found, a *note OSError: 2bf. 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: 59a.

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)

     Instances of this class represent loaded shared libraries,
     functions in these libraries use the ‘stdcall’ calling convention,
     and are assumed to return the windows specific *note HRESULT: 31bc.
     code.  *note HRESULT: 31bc. values contain information specifying
     whether the function call failed or succeeded, together with
     additional error code.  If the return value signals a failure, an
     *note OSError: 2bf. is automatically raised.

     *note Disponibilidade: 1fed.: Windows

     Alterado na versão 3.3: *note WindowsError: 124b. used to be
     raised, which is now an alias of *note OSError: 2bf.

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 59a.

 -- Classe: ctypes.WinDLL (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 ‘stdcall’ calling convention,
     and are assumed to return int by default.

     *note Disponibilidade: 1fed.: Windows

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 59a.

The Python *note global interpreter lock: 46d. is released before
calling any function exported by these libraries, and reacquired
afterwards.

 -- Classe: ctypes.PyDLL (name, mode=DEFAULT_MODE, handle=None)

     Instances of this class behave like *note CDLL: bd2. instances,
     except that the Python GIL is 'not' released during the function
     call, and after the function execution the Python error flag is
     checked.  If the error flag is set, a Python exception is raised.

     Thus, this is only useful to call Python C api functions directly.

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 59a.

All these classes can be instantiated by calling them with at least one
argument, the pathname of the shared library.  If you have an existing
handle to an already loaded shared library, it can be passed as the
‘handle’ named parameter, otherwise the underlying platform’s ‘dlopen()’
or ‘LoadLibrary()’ function is used to load the library into the
process, and to get a handle to it.

The 'mode' parameter can be used to specify how the library is loaded.
For details, consult the ‘dlopen(3)(2)’ manpage.  On Windows, 'mode' is
ignored.  On posix systems, RTLD_NOW is always added, and is not
configurable.

The 'use_errno' parameter, when set to true, enables a ctypes mechanism
that allows accessing the system *note errno: 5b. error number in a safe
way.  *note ctypes: 2e. maintains a thread-local copy of the system’s
*note errno: 5b. variable; if you call foreign functions created with
‘use_errno=True’ then the *note errno: 5b. 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(): 31bd. returns the value of the
ctypes private copy, and the function *note ctypes.set_errno(): 31be.
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(): 3190. and ‘SetLastError()’ Windows API functions; *note
ctypes.get_last_error(): 31bf. and *note ctypes.set_last_error(): 31c0.
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: 31c3. class,
either by calling the *note LoadLibrary(): 3169. 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: bd2, *note PyDLL: 1a1c, *note WinDLL: 1a1b, or *note
     OleDLL: 1a1a. 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: bd2. instances.

 -- Dado: ctypes.windll

     Creates *note WinDLL: 1a1b. instances.

     *note Disponibilidade: 1fed.: Windows

 -- Dado: ctypes.oledll

     Creates *note OleDLL: 1a1a. instances.

     *note Disponibilidade: 1fed.: Windows

 -- Dado: ctypes.pydll

     Creates *note PyDLL: 1a1c. 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: 1a1c. 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: 1b5d. ‘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.28 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: 182e. 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: 3191. 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(): 318c. class method of the
          items in the *note argtypes: 174a. tuple, this method allows
          adapting the actual argument to an object that the foreign
          function accepts.  For example, a *note c_char_p: 1995. item
          in the *note argtypes: 174a. 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():
          318c. 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.

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 as well as some of the
functions in this module 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.29 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: 31a8. 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: 5b. variable is exchanged with the
     real *note errno: 5b. 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: 1fed.: 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.

     If 'iid' is not specified, an *note OSError: 2bf. is raised if the
     COM method call fails.  If 'iid' is specified, a *note COMError:
     1e8. is raised instead.

     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.

     *note Disponibilidade: 1fed.: Windows

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: 174a.

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: 2e.:

     >>> 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: 2e.:

     >>> 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: 3191.
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: 3191. function returns the argument tuple it
receives unchanged, *note ctypes: 2e. 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.30 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: 1b5d. ‘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.CopyComPointer (src, dst)

     Copies a COM pointer from 'src' to 'dst' and returns the Windows
     specific ‘HRESULT’ value.

     If 'src' is not ‘NULL’, its ‘AddRef’ method is called, incrementing
     the reference count.

     In contrast, the reference count of 'dst' will not be decremented
     before assigning the new value.  Unless 'dst' is ‘NULL’, the caller
     is responsible for decrementing the reference count by calling its
     ‘Release’ method when necessary.

     *note Disponibilidade: 1fed.: Windows

     Adicionado na versão 3.14.

 -- 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: 3171.

     If 'size' is given (and not ‘None’), it must be an *note int: 19b.
     It specifies the size of the returned array.

     If the 'init' argument is given, it must be *note bytes: 192.  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: 1b5d.
     ‘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: 3172.

     The function takes the same arguments as *note
     create_string_buffer(): 3183. except 'init' must be a string and
     'size' counts *note c_wchar: 3172.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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: 1fed.: 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: 1fed.: 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.

 -- 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: 1fed.: Windows

 -- Função: ctypes.util.dllist ()

     Try to provide a list of paths of the shared libraries loaded into
     the current process.  These paths are not normalized or processed
     in any way.  The function can raise *note OSError: 2bf. if the
     underlying platform APIs fail.  The exact functionality is system
     dependent.

     On most platforms, the first element of the list represents the
     current executable file.  It may be an empty string.

     *note Disponibilidade: 1fed.: Windows, macOS, iOS, glibc, BSD libc,
     musl

     Adicionado na versão 3.14.

 -- 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 *note GetLastError(): 3190.

     *note Disponibilidade: 1fed.: 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: 1fed.: Windows

 -- Função: ctypes.get_errno ()

     Returns the current value of the ctypes-private copy of the system
     *note errno: 5b. variable in the calling thread.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1fed.: Windows

     Levanta um *note evento de auditoria: 1b5d. ‘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 or return a ctypes pointer type.  Pointer types are cached
     and reused internally, so calling this function repeatedly is
     cheap.  'type' must be a ctypes type.

     'Detalhes da implementação do CPython:' The resulting pointer type
     is cached in the ‘__pointer_type__’ attribute of 'type'.  It is
     possible to set this attribute before the first call to ‘POINTER’
     in order to set a custom pointer type.  However, doing this is
     discouraged: manually creating a suitable pointer type is difficult
     without relying on implementation details that may change in future
     Python versions.

 -- 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: 5b. variable in the calling thread to 'value' and
     return the previous value.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1fed.: Windows

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1b5d. ‘ctypes.string_at’ com
     os argumentos ‘ptr’, ‘size’.

 -- Função: ctypes.WinError (code=None, descr=None)

     Creates an instance of *note OSError: 2bf.  If 'code' is not
     specified, *note GetLastError(): 3190. is called to determine the
     error code.  If 'descr' is not specified, *note FormatError():
     31d0. is called to get a textual description of the error.

     *note Disponibilidade: 1fed.: Windows

     Alterado na versão 3.3: An instance of *note WindowsError: 124b.
     used to be created, which is now an alias of *note OSError: 2bf.

 -- 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: 1b5d. ‘ctypes.wstring_at’ com
     os argumentos ‘ptr’, ‘size’.

 -- Função: ctypes.memoryview_at (ptr, size, readonly=False)

     Return a *note memoryview: 165. object of length 'size' that
     references memory starting at 'void *ptr'.

     If 'readonly' is true, the returned ‘memoryview’ object can not be
     used to modify the underlying memory.  (Changes made by other means
     will still be reflected in the returned object.)

     This function is similar to *note string_at(): 1eb. with the key
     difference of not making a copy of the specified memory.  It is a
     semantically equivalent (but more efficient) alternative to
     ‘memoryview((c_byte * size).from_address(ptr))’.  (While *note
     from_address(): 31d6. only takes integers, 'ptr' can also be given
     as a *note ctypes.POINTER: 1f0. or a *note byref(): 3194. object.)

     Raises an *note auditing event: 1b5d. ‘ctypes.memoryview_at’ with
     arguments ‘address’, ‘size’, ‘readonly’.

     Adicionado na versão 3.14.


File: python.info,  Node: Data types,  Next: Tipos de dados fundamentais<2>,  Prev: Funções utilitárias,  Up: Referência ctypes

5.16.9.31 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(): 31cb. helper function.
     Another instance variable is exposed as *note _objects: 31da.; 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: 2267.):

      -- 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: 2ea. is raised.

          Levanta um *note evento de auditoria: 1b5d.
          ‘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: 2ea. is raised.

          Levanta um *note evento de auditoria: 1b5d.
          ‘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: 1b5d. ‘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:
          174a. 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 class variables of ctypes data types:

      -- Atributo: __pointer_type__

          The pointer type that was created by calling *note POINTER():
          1f0. for corresponding ctypes data type.  If a pointer type
          was not yet created, the attribute is missing.

          Adicionado na versão 3.14.

     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_: 31dd. 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: Structured data types,  Prev: Data types,  Up: Referência ctypes

5.16.9.32 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: 31e1. is a subclass of *note _CData: 31d9, 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: 2e. 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: 318f. of *note c_char_p: 1995,
you will always receive a Python bytes object, 'not' a *note c_char_p:
1995. 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:
1997, 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: 1b9d.

 -- Classe: ctypes.c_float

     Represents the C float datatype.  The constructor accepts an
     optional float initializer.

 -- Classe: ctypes.c_double_complex

     Represents the C double complex datatype, if available.  The
     constructor accepts an optional *note complex: 197. initializer.

     Adicionado na versão 3.14.

 -- Classe: ctypes.c_float_complex

     Represents the C float complex datatype, if available.  The
     constructor accepts an optional *note complex: 197. initializer.

     Adicionado na versão 3.14.

 -- Classe: ctypes.c_longdouble_complex

     Represents the C long double complex datatype, if available.  The
     constructor accepts an optional *note complex: 197. initializer.

     Adicionado na versão 3.14.

 -- 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: 3166.

 -- Classe: ctypes.c_int8

     Represents the C 8-bit signed int datatype.  It is an alias for
     *note c_byte: 1a18.

 -- Classe: ctypes.c_int16

     Represents the C 16-bit signed int datatype.  Usually an alias for
     *note c_short: 3173.

 -- Classe: ctypes.c_int32

     Represents the C 32-bit signed int datatype.  Usually an alias for
     *note c_int: 3165.

 -- Classe: ctypes.c_int64

     Represents the C 64-bit signed int datatype.  Usually an alias for
     *note c_longlong: 317f.

 -- 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: 317e.

 -- Classe: ctypes.c_uint8

     Represents the C 8-bit unsigned int datatype.  It is an alias for
     *note c_ubyte: 1a19.

 -- Classe: ctypes.c_uint16

     Represents the C 16-bit unsigned int datatype.  Usually an alias
     for *note c_ushort: 3174.

 -- Classe: ctypes.c_uint32

     Represents the C 32-bit unsigned int datatype.  Usually an alias
     for *note c_uint: 3179.

 -- Classe: ctypes.c_uint64

     Represents the C 64-bit unsigned int datatype.  Usually an alias
     for *note c_ulonglong: 3180.

 -- 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: 1fed.: Windows

 -- Classe: ctypes.py_object

     Represents the C *note PyObject: 5d5.* datatype.  Calling this
     without an argument creates a ‘NULL’ *note PyObject: 5d5.* pointer.

     Alterado na versão 3.14: ‘py_object’ is now a *note generic type:
     1a1.

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: Structured data types,  Next: Arrays and pointers,  Prev: Tipos de dados fundamentais<2>,  Up: Referência ctypes

5.16.9.33 Structured data types
...............................

 -- Classe: ctypes.Union (*args, **kw)

     Abstract base class for unions in native byte order.

     Unions share common attributes and behavior with structures; see
     *note Structure: 1e4. documentation for details.

 -- 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_: 1888.
     class variable.  *note ctypes: 2e. will create *note descriptor:
     17e7.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: 3165, 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_: 1888. 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 ‘_fields_’ class variable can only be set once.  Later
          assignments will raise an *note AttributeError: 5e4.

          Additionally, the ‘_fields_’ class variable must be defined
          before the structure or union type is first used: an instance
          or subclass is created, *note sizeof(): 31d3. is called on it,
          and so on.  Later assignments to ‘_fields_’ will raise an
          *note AttributeError: 5e4.  If ‘_fields_’ has not been set
          before such use, the structure or union will have no own
          fields, as if ‘_fields_’ was empty.

          Sub-subclasses of structure types inherit the fields of the
          base class plus the *note _fields_: 1888. defined in the
          sub-subclass, if any.

      -- Atributo: _pack_

          An optional small integer that allows overriding the alignment
          of structure fields in the instance.

          This is only implemented for the MSVC-compatible memory layout
          (see *note _layout_: 1e6.).

          Setting ‘_pack_’ to 0 is the same as not setting it at all.
          Otherwise, the value must be a positive power of two.  The
          effect is equivalent to ‘#pragma pack(N)’ in C, except *note
          ctypes: 2e. may allow larger 'n' than what the compiler
          accepts.

          ‘_pack_’ must already be defined when *note _fields_: 1888. is
          assigned, otherwise it will have no effect.

          Deprecated since version 3.14, will be removed in version
          3.19: For historical reasons, if ‘_pack_’ is non-zero, the
          MSVC-compatible layout will be used by default.  On
          non-Windows platforms, this default is deprecated and is
          slated to become an error in Python 3.19.  If it is intended,
          set *note _layout_: 1e6. to ‘'ms'’ explicitly.

      -- Atributo: _align_

          An optional small integer that allows increasing the alignment
          of the structure when being packed or unpacked to/from memory.

          The value must not be negative.  The effect is equivalent to
          ‘__attribute__((aligned(N)))’ on GCC or ‘#pragma align(N)’ on
          MSVC, except *note ctypes: 2e. may allow values that the
          compiler would reject.

          ‘_align_’ can only 'increase' a structure’s alignment
          requirements.  Setting it to 0 or 1 has no effect.

          Using values that are not powers of two is discouraged and may
          lead to surprising behavior.

          ‘_align_’ must already be defined when *note _fields_: 1888.
          is assigned, otherwise it will have no effect.

          Adicionado na versão 3.13.

      -- Atributo: _layout_

          An optional string naming the struct/union layout.  It can
          currently be set to:

             - ‘"ms"’: the layout used by the Microsoft compiler (MSVC).
               On GCC and Clang, this layout can be selected with
               ‘__attribute__((ms_struct))’.

             - ‘"gcc-sysv"’: the layout used by GCC with the System V or
               “SysV-like” data model, as used on Linux and macOS. With
               this layout, *note _pack_: 315. must be unset or zero.

          If not set explicitly, ‘ctypes’ will use a default that
          matches the platform conventions.  This default may change in
          future Python releases (for example, when a new platform gains
          official support, or when a difference between similar
          platforms is found).  Currently the default will be:

             - On Windows: ‘"ms"’

             - When *note _pack_: 315. is specified: ‘"ms"’.  (This is
               deprecated; see *note _pack_: 315. documentation.)

             - Otherwise: ‘"gcc-sysv"’

          ‘_layout_’ must already be defined when *note _fields_: 1888.
          is assigned, otherwise it will have no effect.

          Adicionado na versão 3.14.

      -- Atributo: _anonymous_

          An optional sequence that lists the names of unnamed
          (anonymous) fields.  *note _anonymous_: 31e5. must be already
          defined when *note _fields_: 1888. is assigned, otherwise it
          will have no effect.

          The fields listed in this variable must be structure or union
          type fields.  *note ctypes: 2e. 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_: 1888. 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_:
     1888.  Keyword arguments in the constructor are interpreted as
     attribute assignments, so they will initialize *note _fields_:
     1888. with the same name, or create new attributes for names not
     present in *note _fields_: 1888.

 -- Classe: ctypes.CField (*args, **kw)

     Descriptor for fields of a *note Structure: 1e4. and *note Union:
     1e5.  For example:

          >>> class Color(Structure):
          ...     _fields_ = (
          ...         ('red', c_uint8),
          ...         ('green', c_uint8),
          ...         ('blue', c_uint8),
          ...         ('intense', c_bool, 1),
          ...         ('blinking', c_bool, 1),
          ...    )
          ...
          >>> Color.red
          <ctypes.CField 'red' type=c_ubyte, ofs=0, size=1>
          >>> Color.green.type
          <class 'ctypes.c_ubyte'>
          >>> Color.blue.byte_offset
          2
          >>> Color.intense
          <ctypes.CField 'intense' type=c_bool, ofs=3, bit_size=1, bit_offset=0>
          >>> Color.blinking.bit_offset
          1

     All attributes are read-only.

     ‘CField’ objects are created via *note _fields_: 1888.; do not
     instantiate the class directly.

     Adicionado na versão 3.14: Previously, descriptors only had
     ‘offset’ and ‘size’ attributes and a readable string
     representation; the ‘CField’ class was not available directly.

      -- Atributo: name

          Name of the field, as a string.

      -- Atributo: type

          Type of the field, as a *note ctypes class: 31d7.

      -- Atributo: offset
      -- Atributo: byte_offset

          Offset of the field, in bytes.

          For bitfields, this is the offset of the underlying
          byte-aligned 'storage unit'; see *note bit_offset: 31ea.

      -- Atributo: byte_size

          Size of the field, in bytes.

          For bitfields, this is the size of the underlying 'storage
          unit'.  Typically, it has the same size as the bitfield’s
          type.

      -- Atributo: size

          For non-bitfields, equivalent to *note byte_size: 31eb.

          For bitfields, this contains a backwards-compatible bit-packed
          value that combines *note bit_size: 31ed. and *note
          bit_offset: 31ea.  Prefer using the explicit attributes
          instead.

      -- Atributo: is_bitfield

          True if this is a bitfield.

      -- Atributo: bit_offset
      -- Atributo: bit_size

          The location of a bitfield within its 'storage unit', that is,
          within *note byte_size: 31eb. bytes of memory starting at
          *note byte_offset: 31e9.

          To get the field’s value, read the storage unit as an integer,
          *note shift left: 2356. by ‘bit_offset’ and take the
          ‘bit_size’ least significant bits.

          For non-bitfields, ‘bit_offset’ is zero and ‘bit_size’ is
          equal to ‘byte_size * 8’.

      -- Atributo: is_anonymous

          True if this field is anonymous, that is, it contains nested
          sub-fields that should be merged into a containing structure
          or union.


File: python.info,  Node: Arrays and pointers,  Next: Exceções<10>,  Prev: Structured data types,  Up: Referência ctypes

5.16.9.34 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: 2e. data type with a non-negative
     integer.  Alternatively, you can subclass this type and define
     *note _length_: 31f2. and *note _type_: 31f3. 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: 1cc2.

      -- Atributo: _length_

          A positive integer specifying the number of elements in the
          array.  Out-of-range subscripts result in an *note IndexError:
          1723.  Will be returned by *note len(): 835.

      -- 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: 2e. data type and 'length' an integer.

     This function is *note soft deprecated: 23c. 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(): 1f0.
     with the type that will be pointed to; this is done automatically
     by *note pointer(): 1994.

     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(): 835. will raise *note
     TypeError: 198.  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: Exceções<10>,  Prev: Arrays and pointers,  Up: Referência ctypes

5.16.9.35 Exceções
..................

 -- Exceção: ctypes.ArgumentError

     This exception is raised when a foreign function call cannot
     convert one of the passed arguments.

 -- Exceção: ctypes.COMError (hresult, text, details)

     This exception is raised when a COM method call failed.

      -- Atributo: hresult

          The integer value representing the error code.

      -- Atributo: text

          The error message.

      -- Atributo: details

          The 5-tuple ‘(descr, source, helpfile, helpcontext, progid)’.

          'descr' is the textual description.  'source' is the
          language-dependent ‘ProgID’ for the class or application that
          raised the error.  'helpfile' is the path of the help file.
          'helpcontext' is the help context identifier.  'progid' is the
          ‘ProgID’ of the interface that defined the error.

     *note Disponibilidade: 1fed.: Windows

     Adicionado na versão 3.14.


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: 7. 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: 3201. 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: 3202.

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: 1460.  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:
1bd.  É 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(): 4b6. 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(): 3203. executa o analisador e
coloca os dados extraídos em um objeto *note argparse.Namespace: 3204.:

     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: a4. para ‘argparse’, veja *note Atualizando
     código optparse: 13aa.

* 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<11>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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, *, suggest_on_error=False, color=True)

     Cria um novo objeto *note ArgumentParser: 1bd.  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: 1bc. - O nome do programa (padrão: gerado a partir
          de atributos de módulo ‘__main__’ e de ‘sys.argv[0]’)

        * *note usage: 3206. - A string que descreve o uso do programa
          (padrão: gerado a partir de argumentos adicionados ao
          analisador sintático)

        * *note description: 3207. - Texto para exibir antes da ajuda
          dos argumentos (por padrão, nenhum texto)

        * *note epilog: 3208. - Texto para exibir após da ajuda dos
          argumentos (por padrão, nenhum texto)

        * *note parents: 3209. - Uma lista de objetos *note
          ArgumentParser: 1bd. cujos argumentos também devem ser
          incluídos

        * *note formatter_class: 320a. - Uma classe para personalizar a
          saída de ajuda

        * *note prefix_chars: 320b. - O conjunto de caracteres que
          prefixam argumentos opcionais (padrão: “-“)

        * *note fromfile_prefix_chars: 320c. - O conjunto de caracteres
          que prefixam os arquivos dos quais os argumentos adicionais
          devem ser lidos (padrão: ‘None’)

        * *note argument_default: 320d. - O valor padrão global para
          argumentos (padrão: ‘None’)

        * *note conflict_handler: 320e. - A estratégia para resolver
          opcionais conflitantes (geralmente desnecessário)

        * *note add_help: 320f. - Adiciona uma opção ‘-h/--help’ para o
          analisador sintático (padrão: ‘True’)

        * *note allow_abbrev: fb3. - Permite que opções longas sejam
          abreviadas se a abreviação não for ambígua.  (padrão: ‘True’)

        * *note exit_on_error: 3210. - Determina se ‘ArgumentParser’ sai
          ou não com informações de erro quando ocorre um erro.
          (padrão: ‘True’)

        * *note suggest_on_error: 3211. - Habilita sugestões para
          escolhas de argumentos e nomes de subanalisadores digitados
          incorretamente (padrão: ‘False’)

        * *note color: 3212. - Permite saída colorida (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.

     Alterado na versão 3.14: Os parâmetros 'suggest_on_error' e 'color'
     foram adicionados.

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::
* suggest_on_error::
* cor::


File: python.info,  Node: prog,  Next: usage,  Up: Objetos ArgumentParser

5.17.1.2 prog
.............

Por padrão, *note ArgumentParser: 1bd. 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: 2ae9. 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: 23b. 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: 1bd.:

     >>> 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]’, a partir de atributos de módulo ‘__main__’ 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

Alterado na versão 3.14: O valor padrão ‘prog’ agora reflete como
‘__main__’ foi realmente executado, em vez de ser sempre
‘os.path.basename(sys.argv[0])’.


File: python.info,  Node: usage,  Next: description,  Prev: prog,  Up: Objetos ArgumentParser

5.17.1.3 usage
..............

Por padrão, *note ArgumentParser: 1bd. 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.

Quando uma mensagem de uso personalizada é especificada para o
analisador sintático principal, você também pode considerar passar o
argumento ‘prog’ para *note add_subparsers(): e05. ou os argumentos
‘prog’ e ‘usage’ para ‘add_parser()’, para garantir prefixos de comando
e informações de uso consistentes entre os subanalisadores.


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: 1bd.
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: 320a.


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: 1bd.:

     >>> 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: 3207, 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:
320a. para *note ArgumentParser: 1bd.


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: 1bd. pode ser usado.  O
argumento ‘parents=’ pega uma lista de objetos *note ArgumentParser:
1bd, coleta todas as ações posicionais e opcionais deles, e adiciona
essas ações ao objeto *note ArgumentParser: 1bd. 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: 1bd. 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: 1bd. 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: 3216. e *note RawTextHelpFormatter:
3217. dão mais controle sobre como as descrições textuais são exibidas.
Por padrão, objetos *note ArgumentParser: 1bd. quebram em linha os
textos *note description: 3207. e *note epilog: 3208. 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: 3216. como ‘formatter_class=’
indica que *note description: 3207. e *note epilog: 3208. 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: 3217. 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: 1b3f. 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: 3218. usa o nome de argumento *note
type: 3219. para cada argumento como o nome de exibição para seus
valores (em vez de usar o *note dest: 321a. 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: 1bd.:

     >>> 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: 1bd, 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(): 321b.) 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: 1bd. usa *note tratador de erros e codificação do
sistema de arquivos: 752. 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: 1bd. alterou a
codificação e os erros para ler arquivos de argumentos do padrão (por
exemplo, *note locale.getpreferredencoding(False): 751. e ‘"strict"’)
para *note tratador de erros e codificação do sistema de arquivos: 752.
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(): 4b6. ou chamando os métodos *note
set_defaults(): 321c. com um conjunto específico de pares nome-valor.
Às vezes, no entanto, pode ser útil especificar um único padrão para
todo o analisador para argumentos.  Isso pode ser feito passando o
argumento nomeado ‘argument_default=’ para *note ArgumentParser: 1bd.
Por exemplo, para suprimir globalmente a criação de atributos em
chamadas *note parse_args(): 3203, 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(): 3203. de um *note ArgumentParser: 1bd, ele *note
reconhece as abreviações: fb2. 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: 1bd. não permitem duas ações com a mesma
string de opções.  Por padrão, objetos *note ArgumentParser: 1bd.
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: 3209.) 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: 1bd.:

     >>> 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: 1bd. 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 a ação ‘-f’, porque
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: 1bd. 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: 1bd.:

     >>> 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,  Next: suggest_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(): 3203. de uma instância de *note
ArgumentParser: 1bd, ele vai exibir uma 'message' para *note sys.stderr:
b29. 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: suggest_on_error,  Next: cor,  Prev: exit_on_error,  Up: Objetos ArgumentParser

5.17.1.15 suggest_on_error
..........................

Por padrão, quando um usuário passa uma escolha de argumento ou nome de
subanalisador inválido, *note ArgumentParser: 1bd. será encerrado com
informações de erro e listará as escolhas de argumento permitidas (se
especificado) ou nomes de subanalisadores como parte da mensagem de
erro.

Se o usuário desejar habilitar sugestões para escolhas de argumentos e
nomes de subanalisadores com erros de digitação, o recurso pode ser
habilitado definindo ‘suggest_on_error’ como ‘True’.  Observe que isso
só se aplica a argumentos quando as opções especificadas são strings:

     >>> parser = argparse.ArgumentParser(description='Process some integers.',
                                          suggest_on_error=True)
     >>> parser.add_argument('--action', choices=['sum', 'max'])
     >>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
     ...                     help='an integer for the accumulator')
     >>> parser.parse_args(['--action', 'sumn', 1, 2, 3])
     tester.py: error: argument --action: invalid choice: 'sumn', maybe you meant 'sum'? (choose from 'sum', 'max')

Se você estiver escrevendo um código que precisa ser compatível com
versões mais antigas do Python e quiser usar oportunisticamente
‘suggest_on_error’ quando estiver disponível, você pode defini-lo como
um atributo após inicializar o analisador sintático em vez de usar o
argumento nomeado:

     >>> parser = argparse.ArgumentParser(description='Process some integers.')
     >>> parser.suggest_on_error = True

Adicionado na versão 3.14.


File: python.info,  Node: cor,  Prev: suggest_on_error,  Up: Objetos ArgumentParser

5.17.1.16 cor
.............

Por padrão, a mensagem de ajuda é impressa em cores usando sequências de
escape ANSI(1). Se desejar mensagens de ajuda em texto simples, você
pode desabilitar esta *note no seu ambiente local: 1b7. ou no próprio
analisador de argumentos, definindo ‘color’ como ‘False’:

     >>> parser = argparse.ArgumentParser(description='Process some integers.',
     ...                                  color=False)
     >>> parser.add_argument('--action', choices=['sum', 'max'])
     >>> parser.add_argument('integers', metavar='N', type=int, nargs='+',
     ...                     help='an integer for the accumulator')
     >>> parser.parse_args(['--help'])

Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/ANSI_escape_code


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.17 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: 321f. - Um nome ou uma lista de strings
          de opções, por exemplo.  ‘'foo'’ ou ‘'-f', '--foo'’.

        * *note action: 187d. - O tipo básico de ação a ser executada
          quando esse argumento é encontrado na linha de comando.

        * *note nargs: 1883. - O número de argumentos de linha de
          comando que devem ser consumidos.

        * *note const: 1885. - Um valor constante exigido por algumas
          seleções *note action: 187d. e *note nargs: 1883.

        * *note default: 1884. - O valor produzido se o argumento
          estiver ausente da linha de comando e se estiver ausente do
          objeto espaço de nomes.

        * *note type: 3219. - O tipo para o qual o argumento de linha de
          comando deve ser convertido.

        * *note choices: 187f. - Uma sequência dos valores permitidos
          para o argumento.

        * *note required: 3220. - Se a opção de linha de comando pode ou
          não ser omitida (somente opcionais).

        * *note help: 3221. - Uma breve descrição do que o argumento
          faz.

        * *note metavar: 3222. - Um nome para o argumento nas mensagens
          de uso.

        * *note dest: 321a. - O nome do atributo a ser adicionado ao
          objeto retornado por *note parse_args(): 3203.

        * *note deprecated: 3223. - 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::
* action::
* nargs::
* const::
* default::
* type::
* choices::
* required::
* help::
* metavar::
* dest::
* deprecated::
* Classes de ação::


File: python.info,  Node: name ou flags,  Next: action,  Up: O método add_argument

5.17.1.18 name ou flags
.......................

O método *note add_argument(): 4b6. 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(): 4b6. 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(): 3203. é 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

Por padrão, ‘argparse’ lida automaticamente com a nomenclatura interna e
os nomes de exibição dos argumentos, simplificando o processo sem exigir
configuração adicional.  Dessa forma, você não precisa especificar os
parâmetros *note dest: 321a. e *note metavar: 3222.  O parâmetro *note
dest: 321a. assume por padrão o nome do argumento com sublinhados ‘_’
substituindo os hífens ‘-’.  O parâmetro *note metavar: 3222. assume por
padrão o nome em letras maiúsculas.  Por exemplo:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('--foo-bar')
     >>> parser.parse_args(['--foo-bar', 'FOO-BAR']
     Namespace(foo_bar='FOO-BAR')
     >>> parser.print_help()
     usage:  [-h] [--foo-bar FOO-BAR]

     optional arguments:
      -h, --help  show this help message and exit
      --foo-bar FOO-BAR


File: python.info,  Node: action,  Next: nargs,  Prev: name ou flags,  Up: O método add_argument

5.17.1.19 action
................

Objetos *note ArgumentParser: 1bd. 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(): 3203.  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: 1885.; observe que o argumento nomeado *note
     const: 1885. 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'’ usados para armazenar os valores ‘True’ e ‘False’
     respectivamente.  Além disso, eles criam valores padrão de ‘False’
     e ‘True’ respectivamente.

          >>> 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 armazena uma lista e anexa o valor
     especificado pelo argumento nomeado *note const: 1885. à lista;
     observe que o argumento nomeado *note const: 1885. 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 armazena uma lista e anexa cada item da lista de
     argumentos multivalorada a ela.  A ação ‘'extend'’ é normalmente
     usada com o valor do argumento nomeado *note nargs: 1883. ‘'+'’ ou
     ‘'*'’.  Observe que quando *note nargs: 1883. é ‘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 nomeado
     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: 1bd. para detalhes de como a saída é
     criada.

   * ‘'version'’ - Isso espera um argumento nomeado ‘version=’ na
     chamada *note add_argument(): 4b6. 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: 1aa3. (por exemplo, *note BooleanOptionalAction: 1afa.) 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: 1aa3, 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(): 3226. 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: 1aa3.


File: python.info,  Node: nargs,  Next: const,  Prev: action,  Up: O método add_argument

5.17.1.20 nargs
...............

Os objetos *note ArgumentParser: 1bd. 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: 3228.  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: 1884.
     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: 1885. 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='?')
          >>> parser.add_argument('outfile', nargs='?')
          >>> parser.parse_args(['input.txt', 'output.txt'])
          Namespace(infile='input.txt', outfile='output.txt')
          >>> parser.parse_args(['input.txt'])
          Namespace(infile='input.txt', outfile=None)
          >>> parser.parse_args([])
          Namespace(infile=None, outfile=None)

   * ‘'*'’.  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: 187d.  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.21 const
...............

O argumento ‘const’ de *note add_argument(): 4b6. é 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: 1bd.  Os dois
usos mais comuns são:

   * Quando *note add_argument(): 4b6. é 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(): 3203.  Consulte a descrição da *note
     action: 187d. para obter exemplos.  Se ‘const’ não for fornecido
     *note add_argument(): 4b6, será recebido um valor padrão de ‘None’.

   * Quando *note add_argument(): 4b6. é 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:
     1883. 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: type,  Prev: const,  Up: O método add_argument

5.17.1.22 default
.................

Todos os argumentos opcionais e alguns argumentos posicionais podem ser
omitidos na linha de comando.  O argumento nomeado ‘default’ de *note
add_argument(): 4b6, 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: 3219, se fornecido,
antes de definir o atributo no valor de retorno *note Namespace: 3204.
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: 1883. 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: 3220,
o valor ‘default’ é ignorado.  Por exemplo, isso se aplica a argumentos
posicionais com valores de *note nargs: 1883. 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: type,  Next: choices,  Prev: default,  Up: O método add_argument

5.17.1.23 type
..............

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: 196. ou
*note int: 19b.  O argumento nomeado ‘type’ para *note add_argument():
4b6. permite que qualquer verificação de tipo e conversões de tipo
necessárias sejam realizadas.

Se o argumento nomeado *note type: 3219. for usado com *note default:
1884, 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(): 3226.).  Se a
função levantar *note ArgumentTypeError: 322c, *note TypeError: 198. ou
*note ValueError: 2ea, 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('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(): 3c0. 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: 1017. não seria bem formatado e uma
exceção *note FileNotFoundError: 263. não seria tratada.

Mesmo *note FileType: 30a. tem suas limitações para uso com o argumento
nomeado ‘type’.  Se um argumento usar *note FileType: 30a. 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:
186. para gerenciar os arquivos.

Para verificadores de tipo que simplesmente verificam um conjunto fixo
de valores, considere usar o argumento nomeado *note choices: 187f.


File: python.info,  Node: choices,  Next: required,  Prev: type,  Up: O método add_argument

5.17.1.24 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(): 4b6.  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: 24c, objetos *note tuple: 608. e sequências
personalizadas são todos suportados.

O uso de *note enum.Enum: 837. 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: 3219, portanto, os objetos em 'choices' devem
corresponder ao *note type: 3219. 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: 3219.
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: 3222.
explícito.


File: python.info,  Node: required,  Next: help,  Prev: choices,  Up: O método add_argument

5.17.1.25 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(): 4b6.:

     >>> 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(): 3203. 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.26 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: 1884.  Os especificadores disponíveis incluem o nome do
programa, ‘%(prog)s’ e a maioria dos argumentos nomeados para *note
add_argument(): 4b6, 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.27 metavar
.................

Quando *note ArgumentParser: 1bd. 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: 321a. como o “nome” de
cada objeto.  Por padrão, para ações de argumentos posicionais, o valor
*note dest: 321a. é usado diretamente, e para ações de argumentos
opcionais, o valor *note dest: 321a. é 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(): 3203. ainda é determinado pelo
valor *note dest: 321a.

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.28 dest
..............

A maioria das ações *note ArgumentParser: 1bd. adiciona algum valor como
um atributo do objeto retornado por *note parse_args(): 3203.  O nome
deste atributo é determinado pelo argumento nomeado ‘dest’ de *note
add_argument(): 4b6.  Para ações de argumento posicional, ‘dest’ é
normalmente fornecido como o primeiro argumento para *note
add_argument(): 4b6.:

     >>> 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: 1bd. 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.29 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():
4b6, 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: b29. (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.30 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(): 4b6.

 -- 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: 1bd. 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(): 4b6, 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: 1bd. que contém
               esta ação.

             * 'namespace' - O objeto *note Namespace: 3204. que será
               retornado por *note parse_args(): 3203.  A maioria das
               ações adicionam um atributo a este objeto usando *note
               setattr(): 244c.

             * '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: 3219. para *note add_argument(): 4b6.

             * '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: 1aa3. 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.31 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(): 4b6. 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: 3237. - Lista de strings para analisar.  O padrão
          é obtido de *note sys.argv: 1460.

        * *note namespace: 3238. - Um objeto para receber os atributos.
          O padrão é um novo objeto *note Namespace: 3204. 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.32 Sintaxe de valores da opção
.....................................

O método *note parse_args(): 3203. 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.33 Argumentos inválidos
..............................

Ao analisar a linha de comando, *note parse_args(): 3203. 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.34 Argumentos contendo ‘-’
.................................

O método *note parse_args(): 3203. 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(): 3203. é
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(): 3203. 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:
3228. 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.35 Abreviações de argumento (correspondência de prefixo)
...............................................................

O método *note parse_args(): 3203. *note por padrão: fb3. 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:
fb3. 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.36 Além do ‘sys.argv’
............................

Às vezes, pode ser útil ter uma instância de *note ArgumentParser: 1bd.
analisando argumentos diferentes daqueles de *note sys.argv: 1460.  Isso
pode ser feito passando uma lista de strings para *note parse_args():
3203.  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.37 O objeto Namespace
............................

 -- Classe: argparse.Namespace

     Classe simples usada por padrão por *note parse_args(): 3203. para
     criar um objeto contendo atributos e retorná-lo.

     Esta classe é deliberadamente simples, apenas uma subclasse *note
     object: c72. 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(): 1cd9.:

          >>> 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: 1bd. atribuindo
     atributos a um objeto já existente, em vez de um novo objeto *note
     Namespace: 3204.  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<11>,  Prev: O método parse_args,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.38 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.39 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:
     1bd. oferece suporte à criação de tais subcomandos com o 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: 1bd.)

        * *note action: 187d. - o tipo básico de ação a ser executada
          quando esse argumento é encontrado na linha de comando

        * *note dest: 321a. - nome do atributo sob o qual o nome do
          subcomando será armazenado; por padrão ‘None’ e nenhum valor é
          armazenado

        * *note required: 3220. - Se um subcomando deve ou não ser
          fornecido, por padrão ‘False’ (adicionado em 3.7)

        * *note help: 3221. - ajuda para o grupo de subanalisadores na
          saída de ajuda, por padrão ‘None’

        * *note metavar: 3222. - 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(): 3203. conterá
     apenas atributos para o analisador principal e o subanalisador que
     foi selecionado pela linha de comando (e não 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, somente a ajuda para aquele parser em particular
     será impressa.  A mensagem de ajuda não incluirá mensagens do
     analisador sintático pai ou do analisador sintático irmão.  (Uma
     mensagem de ajuda para cada comando do subanalisador, entretanto,
     pode ser dada fornecendo 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 help

          options:
            -h, --help  show this help message and exit
            --foo   foo help

          >>> parser.parse_args(['a', '--help'])
          usage: PROG a [-h] bar

          positional arguments:
            bar     bar help

          options:
            -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(): e05. também oferece suporte aos
     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 exit

          subcommands:
            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()’ oferece suporte também 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(): e05. com chamadas
     para *note set_defaults(): 321c. para que cada subanalisador saiba
     qual função Python ele 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(): 3203. fazer o
     trabalho de chamar a função apropriada após a análise sintática do
     argumento ser concluída.  Associar funções com ações como essa é
     normalmente a maneira mais fácil de lidar com as diferentes ações
     para 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():
     e05. 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'.

     Alterado na versão 3.14: O 'prog' do subanalisador não é mais
     afetado por uma mensagem de uso personalizada no analisador
     principal.


File: python.info,  Node: Objetos FileType,  Next: Grupos de argumentos,  Prev: Subcomandos,  Up: Outros utilitários

5.17.1.40 Objetos FileType
..........................

 -- Classe: argparse.FileType (mode='r', bufsize=-1, encoding=None,
          errors=None)

     A fábrica *note FileType: 30a. cria objetos que podem ser passados
     para o argumento de tipo de *note ArgumentParser.add_argument():
     4b6.  Argumentos que têm objetos *note FileType: 30a. 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(): 314. 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: 754. para objetos *note
     FileType: 30a. legíveis e *note sys.stdout: cc0. para objetos *note
     FileType: 30a. 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'>)

          Nota: Se um argumento usar 'FileType' e um argumento
          subsequente falhar, um erro será relatado, mas o arquivo não
          será fechado automaticamente.  Isso também pode danificar os
          arquivos de saída.  Neste caso, seria melhor esperar até que o
          analisador sintático tenha sido executado e então usar a
          instrução *note with: 186. para gerenciar os arquivos.

     Alterado na versão 3.4: Adicionados os parâmetros 'encodings' e
     'errors'.

     Descontinuado desde a versão 3.14.


File: python.info,  Node: Grupos de argumentos,  Next: Exclusão mútua,  Prev: Objetos FileType,  Up: Outros utilitários

5.17.1.41 Grupos de argumentos
..............................

 -- Método: ArgumentParser.add_argument_group (title=None,
          description=None, *[, argument_default][, conflict_handler])

     Por padrão, *note ArgumentParser: 1bd. 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(): 2e9. retorna um objeto de
     grupo de argumentos que tem um método *note add_argument(): 4b6.
     como um *note ArgumentParser: 1bd. 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:
     320d. e *note conflict_handler: 320e. permitem um controle mais
     refinado do comportamento do grupo de argumentos.  Esses parâmetros
     têm o mesmo significado que no construtor *note ArgumentParser:
     1bd, 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”.

     Deprecated since version 3.11, removed in version 3.14: Chamar
     *note add_argument_group(): 2e9. em um grupo de argumentos agora
     levanta uma exceção.  Esse aninhamento nunca foi suportado,
     frequentemente não funcionava corretamente e era exposto
     involuntariamente por meio de herança.

     Descontinuado desde a versão 3.14: Passar *note prefix_chars: 320b.
     para *note add_argument_group(): 2e9. agora está descontinuado.


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.42 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(): 2eb. 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(): 2e9.  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

     Deprecated since version 3.11, removed in version 3.14: Chamar
     *note add_argument_group(): 2e9. ou *note
     add_mutually_exclusive_group(): 2eb. em um grupo mutuamente
     exclusivo agora levanta uma exceção.  Esse aninhamento nunca foi
     suportado, frequentemente não funcionava corretamente e era exposto
     involuntariamente por meio de herança.


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.43 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(): 3203. serão totalmente determinados pela inspeção dos
     argumentos da linha de comando e das ações dos argumentos.  *note
     set_defaults(): 321c. 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 padrões no nível do analisador sempre substituem os
     padrões no nível do argumento:

          >>> 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(): e05. 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(): 4b6. ou por *note
     set_defaults(): 321c.:

          >>> 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.44 Imprimindo a ajuda
............................

Na maioria das aplicações típicas, *note parse_args(): 3203. 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: 1bd.
     deve ser invocado na linha de comando.  Se 'file' for ‘None’, *note
     sys.stdout: cc0. 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: 1bd.  Se 'file' for ‘None’, *note sys.stdout: cc0.
     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: 1bd. 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: 1bd.


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.45 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(): 324b. pode ser útil.

     Este método funciona de forma semelhante a *note parse_args():
     3203, 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: fb2. se
     aplicam a *note parse_known_args(): 324b.  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.46 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:
     1bd.) são lidos com um argumento por linha.  *note
     convert_arg_line_to_args(): 321b. 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.47 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: b29.
     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: b29. 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.48 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(): ceb. e *note
     parse_known_intermixed_args(): 3251. 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(): 324b. e *note parse_intermixed_args(): ceb.: 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(): 3251. 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():
     ceb. 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.49 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<11>,  Prev: Outros utilitários,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.50 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<11>

5.17.1.51 Tutorial de Argparse
..............................


autor: Tshepang Mbambo

Este tutorial pretende ser uma introdução gentil ao *note argparse: 7. —
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: a4. (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: 65.
     (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.52 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.53 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:
     7.  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.54 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(): 4b6, 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(): 3203. realmente retorna alguns dados
     das opções especificadas, neste caso, ‘echo’.

   * A variável é uma forma de “mágica” que *note argparse: 7. 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: 7. trata as opções
que damos a ele como strings, a menos que digamos o contrário.  Então,
vamos dizer ao *note argparse: 7. 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.55 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: 181.

   * 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.56 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.57 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: 198.).

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: 7. é 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.58 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.59 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(): 3203. 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.60 Opções conflitantes
.............................

Até agora, trabalhamos com dois métodos de uma instância *note
argparse.ArgumentParser: 1bd.  Vamos apresentar um terceiro, *note
add_mutually_exclusive_group(): 2eb.  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.61 Como traduzir a saída do argparse
...........................................

A saída do módulo *note argparse: 7, como seu texto de ajuda e mensagens
de erro, são todos traduzidos usando o módulo *note gettext: 67.  Isso
permite que os aplicativos localizem facilmente as mensagens produzidas
por *note argparse: 7.  Veja também *note Internacionalizando seus
programas e módulos: 3261.

Por exemplo, nesta saída *note argparse: 7.:

     $ 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: 7. 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: 7. 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: 67, *note argparse: 7. será
capaz de exibir as mensagens traduzidas.

Para traduzir suas próprias strings na saída *note argparse: 7, use
*note gettext: 67.

   ---------- 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.62 Conversores de tipo personalizados
............................................

O módulo *note argparse: 7. 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: 3204.  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.63 Conclusão
...................

O módulo *note argparse: 7. 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<11>

5.17.1.64 Migrando código ‘optparse’ para ‘argparse’
....................................................

O módulo *note argparse: 7. oferece vários recursos de nível mais alto
não fornecidos nativamente pelo módulo *note optparse: a4, 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: 7. tentou manter a
compatibilidade com *note optparse: a4.  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: 3201, as aplicações que atualmente usam *note optparse: a4.
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: a4. para *note
argparse: 7, as seguintes sugestões devem ser úteis:

   * Substituir todas as chamadas de *note
     optparse.OptionParser.add_option(): 3268. por chamadas de *note
     ArgumentParser.add_argument(): 4b6.

   * Substituir ‘(options, args) = parser.parse_args()’ por ‘args =
     parser.parse_args()’ e adicionar chamadas adicionais a *note
     ArgumentParser.add_argument(): 4b6. para os argumentos posicionais.
     Tenha em mente que o que anteriormente era chamado de ‘options’,
     agora no contexto do *note argparse: 7. é chamado de ‘args’.

   * Substituir *note optparse.OptionParser.disable_interspersed_args():
     3269. usando *note parse_intermixed_args(): ceb. em vez de *note
     parse_args(): 3203.

   * 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: 326a. por *note Namespace: 3204.
     e *note optparse.OptionError: 326b. e *note
     optparse.OptionValueError: 326c. por *note ArgumentError: 3254.

   * 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<12>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 65.: 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: a4.: 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: 7.: 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: 7. é 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: 65. é 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: a4. deve ser considerado como uma alternativa ao *note
argparse: 7. nos seguintes casos:

   * uma aplicação já está usando *note optparse: a4. e não quer
     arriscar as sutis mudanças comportamentais que podem surgir ao
     migrar para *note argparse: 7.

   * 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: a4.
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: a4. é uma biblioteca mais conveniente, flexível e
poderosa para analisar opções de linha de comando do que o minimalista
módulo *note getopt: 65.  *note optparse: a4. usa um estilo mais
declarativo de análise de linha de comando: você cria uma instância de
*note OptionParser: 16bb, preenche-a com opções e analisa a linha de
comando.  *note optparse: a4. 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: a4. 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: a4. define atributos do
objeto ‘options’ retornado por *note parse_args(): 16bc. com base nos
valores de linha de comando fornecidos pelo usuário.  Quando *note
parse_args(): 16bc. retorna da análise desta linha de comando,
‘options.filename’ será ‘"outfile"’ e ‘options.verbose’ será ‘False’.
*note optparse: a4. 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: a4. 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: a4. 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: a4.

     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: a4,
     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: a4, 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: a4. 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: a4. 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: a4. 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:
a4.

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: a4. 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(): 3268.
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: a4. encontra 'strings de
opção' e procura opções a partir delas.

Depois que todas as suas opções estiverem definidas, instrua *note
optparse: a4. 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(): 16bc, mas isso raramente é necessário: por padrão,
ele usa ‘sys.argv[1:]’.)

*note parse_args(): 16bc. 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: 327c, *note type: 327d, *note dest: 327e.
(destino) e *note help: 327f.  Destes, *note action: 327c. é 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: a4. o que fazer quando ele encontra uma
opção na linha de comando.  Há um conjunto fixo de ações codificadas em
*note optparse: a4.; adicionar novas ações é um tópico avançado abordado
na seção *note Estendendo optparse: 3282.  A maioria das ações diz ao
*note optparse: a4. 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: a4. 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: a4.
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:
a4. para analisá-la:

     args = ["-f", "foo.txt"]
     (options, args) = parser.parse_args(args)

Quando *note optparse: a4. 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(): 16bc,
‘options.filename’ é ‘"foo.txt"’.

Alguns outros tipos de opção suportados por *note optparse: a4. 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: a4. 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: a4. 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: a4. olha para a primeira
string de opção curta: o destino padrão para ‘-f’ é ‘f’.

*note optparse: a4. também inclui o tipo ‘complex’ embutido.  Adicionar
tipos é abordado na seção *note Estendendo optparse: 3282.


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: a4.
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: a4. 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: a4. são:

‘"store_const"’

     armazena um valor constante, predefinido via *note Option.const:
     3289.

‘"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: 328a. e na seção
*note Funções de retorno de opção: 328b.


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: a4. 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: a4. 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(): 16bc.:

     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: a4. 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: 327f. 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: a4. 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: a4. sai após imprimir o texto de ajuda.)

Há muita coisa acontecendo aqui para ajudar *note optparse: a4. 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: a4. 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: a4. 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: a4. 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: a4. 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: a4. vai substituí-lo por *note str():
     169. 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: 16bb. 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: 3291.:

 -- Classe: optparse.OptionGroup (parser, title, description=None)

     onde

        * 'parser' é a instância *note OptionParser: 16bb. na qual o
          grupo será inserido

        * 'title' é o título do grupo

        * 'description', opcional, é uma descrição longa do grupo

*note OptionGroup: 3291. herda de ‘OptionContainer’ (como *note
OptionParser: 16bb.) 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: 16bb. ‘add_option_group()’ o grupo é adicionado ao
analisador definido anteriormente.

Continuando com o analisador definido na seção anterior, adicionar um
*note OptionGroup: 3291. 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: 3291. 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: 3291, 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: a4. 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: a4. 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():
     3296, 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(): 3295, 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: a4.
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(): 3268, 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: 326b. ou *note TypeError: 198.) 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:
a4. 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: a4. 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: a4. 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: a4.
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: a4. 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: a4. é 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: a4. 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(): 3268. 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(): 3268.

     ‘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: a4. 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: 329f.

     ‘description’ (padrão: ‘None’)

          Um parágrafo de texto que fornece uma breve visão geral do seu
          programa.  *note optparse: a4. 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: a4. fornece duas
          classes concretas para essa finalidade: IndentedHelpFormatter
          e TitledHelpFormatter.

     ‘add_help_option’ (padrão: ‘True’)

          Se verdadeiro, *note optparse: a4. 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(): 3268, como
mostrado na seção *note Tutorial: 327a.  ‘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: a4. 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: 32a4. é com o
método ‘add_option()’ de *note OptionParser: 16bb.

 -- 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: 327c, 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: a4. levanta uma
     exceção *note OptionError: 326b. explicando seu erro.

     A 'action' de uma opção determina o que *note optparse: a4. faz
     quando encontra essa opção na linha de comando.  As ações de opção
     padrão codificadas no *note optparse: a4. são:

     ‘"store"’

          armazena o argumento desta opção (padrão)

     ‘"store_const"’

          armazena um valor constante, predefinido via *note
          Option.const: 3289.

     ‘"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: 3289.

     ‘"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:
     327d. e *note dest: 327e.; consulte *note Ações de opção padrão:
     32a5.)

Como você pode ver, a maioria das ações envolve armazenar ou atualizar
um valor em algum lugar.  *note optparse: a4. sempre cria um objeto
especial para isso, convencionalmente chamado de ‘options’, que é uma
instância de *note optparse.Values: 326a.

 -- 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(): 16bc, e pode ser substituído por uma
     subclasse personalizada passada para o argumento 'values' de *note
     OptionParser.parse_args(): 16bc. (conforme descrito em *note
     Análise de argumentos: 32a6.).

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:
327e. (destino).

Por exemplo, quando você chama

     parser.parse_args()

uma das primeiras coisas que *note optparse: a4. 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: a4, ao ver esta opção, fará o equivalente a

     options.filename = "foo"

Os atributos de opção *note type: 327d. e *note dest: 327e. são quase
tão importantes quanto *note action: 327c, mas *note action: 327c. é 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(): 3268. em vez de diretamente, e
     pode ser substituído por uma classe personalizada por meio do
     argumento 'option_class' para *note OptionParser: 16bb.

Os seguintes atributos de opção podem ser passados como argumentos
nomeados para *note OptionParser.add_option(): 3268.  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: a4.
levanta *note OptionError: 326b.

 -- Atributo: Option.action

     (padrão: ‘"store"’)

     Determina o comportamento de *note optparse: a4. quando esta opção
     é vista na linha de comando; as opções disponíveis estão
     documentadas *note aqui: 32a5.

 -- 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: 32a9.

 -- 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: a4. onde escrevê-lo: *note
     dest: 327e. nomeia um atributo do objeto ‘options’ que o *note
     optparse: a4. 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(): 32ab.

 -- Atributo: Option.nargs

     (padrão: 1)

     Quantos argumentos do tipo *note type: 327d. devem ser consumidos
     quando esta opção for vista.  Se > 1, *note optparse: a4.
     armazenará uma tupla de valores em *note dest: 327e.

 -- 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: 328b. 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:
     327f. (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: 327a. 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: a4.; algumas têm atributos obrigatórios, que você deve
especificar para qualquer opção que use essa ação.

   * ‘"store"’ [relevante: *note type: 327d, *note dest: 327e, *note
     nargs: 32ac, *note choices: 32ad.]

     A opção deve ser seguida por um argumento, que é convertido em um
     valor de acordo com *note type: 327d. e armazenado em *note dest:
     327e.  Se *note nargs: 32ac. > 1, vários argumentos serão
     consumidos da linha de comando; todos serão convertidos de acordo
     com *note type: 327d. e armazenados em *note dest: 327e. como uma
     tupla.  Veja a seção *note Tipos de opção padrão: 32a9.

     Se *note choices: 32ad. for fornecido (uma lista ou tupla de
     strings), o tipo padrão será ‘"choice"’.

     Se *note type: 327d. não for fornecido, o padrão será ‘"string"’.

     Se *note dest: 327e. não for fornecido, *note optparse: a4. 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: a4. 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: a4. vai definir

          options.f = "foo.txt"
          options.point = (1.0, -3.5, 4.0)
          options.f = "bar.txt"

   * ‘"store_const"’ [obrigatório: *note const: 3289.; relevante: *note
     dest: 327e.]

     O valor de *note const: 3289. é armazenado em *note dest: 327e.

     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: a4. vai definir

          options.verbose = 2

   * ‘"store_true"’ [relevante: *note dest: 327e.]

     Um caso especial de ‘"store_const"’ que armazena ‘True’ em *note
     dest: 327e.

   * ‘"store_false"’ [relevante: *note dest: 327e.]

     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: 327d, *note dest: 327e, *note
     nargs: 32ac, *note choices: 32ad.]

     A opção deve ser seguida por um argumento, que é anexado à lista em
     *note dest: 327e.  Se nenhum valor padrão para *note dest: 327e.
     for fornecido, uma lista vazia será criada automaticamente quando
     *note optparse: a4. encontrar esta opção pela primeira vez na linha
     de comando.  Se *note nargs: 32ac. > 1, vários argumentos serão
     consumidos e uma tupla de comprimento *note nargs: 32ac. será
     anexada a *note dest: 327e.

     Os padrões para *note type: 327d. e *note dest: 327e. 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: a4.
     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: 3289.; relevante: *note
     dest: 327e.]

     Como ‘"store_const"’, mas o valor de *note const: 3289. é anexado a
     *note dest: 327e.; assim como em ‘"append"’, *note dest: 327e.
     assume como padrão ‘None’, e uma lista vazia é criada
     automaticamente na primeira vez que a opção é encontrada.

   * ‘"count"’ [relevante: *note dest: 327e.]

     Incrementa o inteiro armazenado em *note dest: 327e.  Se nenhum
     valor padrão for fornecido, *note dest: 327e. é 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: a4. 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: 32ae.; relevante: *note
     type: 327d, *note nargs: 32ac, *note callback_args: 32af, *note
     callback_kwargs: 32b0.]

     Chama a função especificada por *note callback: 32ae, que é chamada
     como

          func(option, opt_str, value, parser, *args, **kwargs)

     Veja a seção *note Funções de retorno de opção: 328b. 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: 327f. passada para cada opção.

     Se nenhuma string de *note help: 327f. 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: a4. adiciona automaticamente uma opção *note help:
     327f. 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: a4. 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: a4. 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: 327f, você raramente criará opções ‘version’, já que *note
     optparse: a4. 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: a4. 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:
3282.

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(): 19b. com a base apropriada (2,
8, 10 ou 16).  Se isso falhar, *note optparse: a4. 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(): 196. e *note complex(): 197, com
tratamento de erros semelhante.

As opções ‘"choice"’ são um subtipo das opções ‘"string"’.  O atributo
da opção *note choices: 32ad. (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: 326c. 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(): 16bc.

 -- 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: 326a. para armazenar argumentos de
          opção (padrão: uma nova instância de *note Values: 326a.) – 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: a4.

     ‘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(): 244c. (aproximadamente uma para cada argumento de opção
armazenado em um destino de opção) e retornado por *note parse_args():
16bc.

Se *note parse_args(): 16bc. 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: a4. 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(): 3269.  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: 16bb. 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: 16bb, levanta *note
     ValueError: 2ea.


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: a4. 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: 32bc.

     ‘"resolve"’

          resolve conflitos de opções de forma inteligente (veja abaixo)

Como exemplo, vamos definir um *note OptionParser: 16bb. 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: a4. 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: a4.
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: a4. 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(): 3296, 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(): 32ab. é 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(): 32ab.:

          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: a4. não são o
bastante para suas necessidades, você tem duas escolhas: estender *note
optparse: a4. ou definir uma opção de retorno de chamada.  Estender
*note optparse: a4. é 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(): 3268.  Além
de *note action: 327c, 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: a4. 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: a4. sempre passa quatro argumentos particulares para seu
retorno de chamada, e ele só passará argumentos adicionais se você
especificá-los via *note callback_args: 32af. e *note callback_kwargs:
32b0.  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: 327d.

     tem seu significado usual: como com as ações ‘"store"’ ou
     ‘"append"’, ele instrui *note optparse: a4. a consumir um argumento
     e convertê-lo para *note type: 327d.  Em vez de armazenar o(s)
     valor(es) convertido(s) em qualquer lugar, no entanto, *note
     optparse: a4. os passa para sua função de retorno de chamada.

*note nargs: 32ac.

     também tem seu significado usual: se for fornecido e > 1, *note
     optparse: a4. consumirá argumentos *note nargs: 32ac, cada um dos
     quais deve ser conversível para *note type: 327d.  Em seguida, ele
     passa uma tupla de valores convertidos para seu retorno de chamada.

*note callback_args: 32af.

     uma tupla de argumentos posicionais extras para passar para a
     função de retorno

*note callback_kwargs: 32b0.

     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: a4. só esperará um argumento se *note type: 327d. estiver
     definido; o tipo de ‘value’ será o tipo implícito pelo tipo da
     opção.  Se *note type: 327d. para esta opção for ‘None’ (nenhum
     argumento esperado), então ‘value’ será ‘None’.  Se *note nargs:
     32ac. > 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():
          16bc.)

     ‘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: a4. 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: 32af.

‘kwargs’

     é um dicionário de argumentos nomeados arbitrários fornecidos via
     *note callback_kwargs: 32b0.


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:
326c. se houver algum problema com a opção ou seu(s) argumento(s).
*note optparse: a4. 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: 327d, então a opção aceita um argumento que deve ser
conversível para esse tipo; se você definir ainda *note nargs: 32ac,
então a opção aceita argumentos *note nargs: 32ac.

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: a4. 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: a4. 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: a4. 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: a4. 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<12>,  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:
a4. 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: 32a4. de *note optparse: a4.  Esta classe tem
alguns atributos que definem os tipos de *note optparse: a4.: *note
TYPES: 32d9. e *note TYPE_CHECKER: 32da.

 -- Atributo: Option.TYPES

     Uma tupla de nomes de tipos; na sua subclasse, basta definir uma
     nova tupla *note TYPES: 32d9. 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: 32a4, ‘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(): 16bc, 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: 326c. se encontrar algum problema.  *note
     OptionValueError: 326c. recebe um único argumento de string, que é
     passado como está para o método ‘error()’ do *note OptionParser:
     16bb, 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: a4. 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: 32da.
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(): 29. de *note Option.TYPE_CHECKER:
32da, acabaríamos modificando o atributo *note TYPE_CHECKER: 32da. da
classe Option de *note optparse: a4.  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: a4, 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: a4. tem algumas classificações para ações:

Ações “store”

     ações que resultam em *note optparse: a4. armazenando um valor em
     um atributo da instância OptionValues atual; essas opções exigem
     que um atributo *note dest: 327e. 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:
     327d. 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: a4. atribui o tipo padrão, ‘"string"’,
     a opções sem tipo explícito cuja ação é listada em *note
     ALWAYS_TYPED_ACTIONS: 32e0.

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: 32de. e
     *note TYPED_ACTIONS: 32df.

   * para garantir que *note optparse: a4. atribua o tipo padrão de
     ‘"string"’ às ações ‘"extend"’, colocamos a ação ‘"extend"’ em
     *note ALWAYS_TYPED_ACTIONS: 32e0. 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: a4.

   * ‘values’ é uma instância da classe optparse_parser.Values, que
     fornece o método muito útil ‘ensure_value()’.  ‘ensure_value()’ é
     essencialmente *note getattr(): dbe. 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<12>,  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: 32a4. 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: 16bb.

 -- 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

O módulo *note getpass: 66. fornece duas funções:

 -- Função: getpass.getpass (prompt='Password: ', stream=None, *,
          echo_char=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).

     O argumento 'echo_char' controla como a entrada do usuário é
     exibida durante a digitação.  Se 'echo_char' for ‘None’ (padrão), a
     entrada permanece oculta.  Caso contrário, 'echo_char' deve ser um
     único caractere ASCII imprimível e cada caractere digitado será
     substituído por ela.  Por exemplo, ‘echo_char='*'’ exibirá
     asteriscos em vez da entrada real.

     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: 32e7.

          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.

          Nota: Em sistemas Unix, quando 'echo_char' é definido, o
          terminal será configurado para operar em ‘modo não
          canônico(2)’.  Em particular, isso significa que atalhos de
          edição de linha, como ‘Ctrl’+‘U’, não funcionarão e podem
          inserir caracteres inesperados na entrada.

     Alterado na versão 3.14: Adicionado o parâmetro 'echo_char' para
     feedback do teclado.

 -- Exceção: getpass.GetPassWarning

     A subclasse *note UserWarning: 25a6. é 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: b7, caso
     contrário, uma exceção *note OSError: 2bf. é levantada.

     Em geral, esta função deve ter preferência sobre *note
     os.getlogin(): 1790.

     Alterado na versão 3.13: Anteriormente, várias exceções além de
     apenas *note OSError: 2bf. eram levantadas.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/getpass.py

   (2) 
https://manpages.debian.org/termios(3)#Canonical_and_noncanonical_mode


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(): 314.

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(): 9f6.  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(): 9f6. ou *note FileInput: 935.  Se ocorrer um erro de E/S
durante a abertura ou leitura de um arquivo, *note OSError: 2bf. será
levantada.

Alterado na versão 3.3: *note IOError: 1249. costumava ser levantada;
agora é um apelido de *note OSError: 2bf.

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():
9f6. ou *note FileInput(): 935.  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():
9f7. 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: 935.  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:
     935.

     A instância *note FileInput: 935. pode ser usada como um
     gerenciador de contexto na instrução *note with: 186.  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(): 9f6.; se não houver estado ativo, *note RuntimeError:
243. 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: 935. é a implementação; seus métodos
     *note filename(): 32eb, *note fileno(): 161f, *note lineno(): 32ec,
     *note filelineno(): 32ed, *note isfirstline(): 32ee, *note
     isstdin(): 32ef, *note nextfile(): 32f0. e *note close(): 32f1.
     correspondem às funções de mesmo nome no módulo.  Além disso, é
     *note iterável: 1423. e possui um método *note readline(): 1f5b.
     que retorna a próxima linha de entrada.  A sequência deve ser
     acessada em ordem estritamente sequencial; acesso aleatório e *note
     readline(): 1f5b. não podem ser misturados.

     Com 'mode' você pode especificar qual modo de arquivo será passado
     para *note open(): 314.  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(): 314. ou 'openhook'.

     Uma instância *note FileInput: 935. pode ser usada como um
     gerenciador de contexto na instrução *note with: 186.  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(): 9f6. ou para o construtor *note
FileInput: 935, 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: 6b. e *note bz2: 14.  Se a extensão do nome do arquivo
     não for ‘'.gz'’ ou ‘'.bz2'’, o arquivo é aberto normalmente (ou
     seja, usando *note open(): 314. sem qualquer descompactação).

     Os valores 'encoding' e 'errors' são passados para *note
     io.TextIOWrapper: 9b4. 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(): 314,
     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(): 9f6. e *note FileInput: 935. agora
     possuem parâmetros 'encoding' e 'errors'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 2f. 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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

     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: 30.

     Utilidades para trabalhar com caracteres ASCII, independentemente
     de suas configurações locais.

Módulo *note curses.panel: 31.

     Uma extensão de painel stackeada que adiciona profundidade às
     janelas do curses.

Módulo *note curses.textpad: 32.

     Widget de texto editável para suporte ao curses ‘Emacs’-like
     bindings.

*note Programação em Curses com Python: 32f5.

     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.14/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: 2f. 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: 32f9.

The module *note curses: 2f. defines the following functions:

 -- Função: curses.assume_default_colors (fg, bg, /)

     Allow use of default values for colors on terminals supporting this
     feature.  Use this to support transparency in your application.

        * Assign terminal default foreground/background colors to color
          number ‘-1’.  So ‘init_pair(x, COLOR_RED, -1)’ will initialize
          pair 'x' as red on default background and ‘init_pair(x, -1,
          COLOR_BLUE)’ will initialize pair 'x' as default foreground on
          blue.

        * Change the definition of the color-pair ‘0’ to ‘(fg, bg)’.

     Adicionado na versão 3.14.

 -- 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(): 32fe. then *note cbreak(): 32fd. 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: 3300, *note
     A_REVERSE: 3301, and the other ‘A_*’ attributes.  *note
     pair_number(): 3302. 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(): 3305. 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(): 3307. 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(): 3309. atualiza a tela física para corresponder
     à tela virtual.

     The virtual screen may be updated by a *note noutrefresh(): 330a.
     call after write operations such as *note addstr(): 330b. have been
     performed on a window.  The normal *note refresh(): 330c. 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(): 3310. routine, if used, must be called before
     *note initscr(): 1865. 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(): 32fb.

 -- 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(): 1793. returns *note KEY_MOUSE: 3314. 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: 3315, *note BUTTONn_RELEASED: 3316, *note
     BUTTONn_CLICKED: 3317, *note BUTTONn_DOUBLE_CLICKED: 3318, *note
     BUTTONn_TRIPLE_CLICKED: 3319, *note BUTTON_SHIFT: 331a, *note
     BUTTON_CTRL: 331b, *note BUTTON_ALT: 331c.

     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: 331e. 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(): 3320. 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(): 3326. 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(): 9e9. 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(): 32fc.
     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 can only be changed by *note use_default_colors(): 1f6.
     and *note assume_default_colors(): 1f5.).  The value of 'fg' and
     'bg' arguments must be between ‘0’ and ‘COLORS - 1’, or, after
     calling ‘use_default_colors()’ or ‘assume_default_colors()’, ‘-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: 18d0. 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(): 1882. would modify the window
     structure, ‘False’ otherwise.

 -- Função: curses.isendwin ()

     Return ‘True’ if *note endwin(): 330e. 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(): 1865.

 -- 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(): 330c. and
     *note noutrefresh(): 330a. 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: 18d0, 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(): 32ff. 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(): 3336. always goes to standard output.

 -- Função: curses.qiflush ([flag])

     If 'flag' is ‘False’, the effect is the same as calling *note
     noqiflush(): 3334.  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(): 3304.

 -- Função: curses.reset_shell_mode ()

     Restore the terminal to “shell” mode, as previously saved by *note
     def_shell_mode(): 3306.

 -- Função: curses.resetty ()

     Restore the state of the terminal modes to what it was at the last
     call to *note savetty(): 3339.

 -- Função: curses.resize_term (nlines, ncols)

     Backend function used by *note resizeterm(): 1881, performing most
     of the work; when resizing the windows, *note resize_term(): 1882.
     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(): 3338.

 -- Função: curses.get_escdelay ()

     Retrieves the value set by *note set_escdelay(): ae3.

     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(): ae5.

     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: 331e. 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(): 1865.

     *note start_color(): 333c. initializes eight basic colors (black,
     red, green, yellow, blue, magenta, cyan, and white), and two global
     variables in the *note curses: 2f. module, *note COLORS: 333d. and
     *note COLOR_PAIRS: 333e, 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(): 1793. will return it.

          Nota: Only one 'ch' can be pushed before ‘getch()’ is called.

 -- Função: curses.update_lines_cols ()

     Update the *note LINES: fe1. and *note COLS: fe2. 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(): 1293. 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: 3314. 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():
     1865. 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 ()

     Equivalent to ‘assume_default_colors(-1, -1)’.

 -- 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(): 1865. and *note
     newwin(): 3330. 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: 32f8.  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: 32f8.  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(): 330b. with a 'str' that has
               embedded newlines.  Instead, call *note addstr(): 330b.
               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: 3353.
                                               
                                               
     'rs'            Right side                *note ACS_VLINE: 3353.
                                               
                                               
     'ts'            Top                       *note ACS_HLINE: 3354.
                                               
                                               
     'bs'            Bottom                    *note ACS_HLINE: 3354.
                                               
                                               
     'tl'            Upper-left corner         *note ACS_ULCORNER: 3355.
                                               
                                               
     'tr'            Upper-right corner        *note ACS_URCORNER: 3356.
                                               
                                               
     'bl'            Bottom-left corner        *note ACS_LLCORNER: 3357.
                                               
                                               
     'br'            Bottom-right corner       *note ACS_LRCORNER: 3358.
                                               

 -- Método: window.box ([vertch, horch])

     Similar to *note border(): 3352, 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(): 335b. method so that the contents will be
     redisplayed by the next window refresh.

 -- Método: window.clear ()

     Like *note erase(): 335d, but also cause the whole window to be
     repainted upon next call to *note refresh(): 330c.

 -- Método: window.clearok (flag)

     If 'flag' is ‘True’, the next call to *note refresh(): 330c. 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():
     3360. 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(): 3364. is the
     same as calling *note subwin(): 3365, 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(): 330c. 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(): 3365.  By default, current locale encoding is used
     (see *note locale.getencoding(): 327.).

     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(): 1793. 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.  The maximum value for 'n' is 2047.

     Alterado na versão 3.14: The maximum value for 'n' was increased
     from 1023 to 2047.

 -- 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: 2f. 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(): 330c. 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(): 17a5. returns a string at most 'n'
     characters long (exclusive of the trailing NUL). The maximum value
     for 'n' is 2047.

     Alterado na versão 3.14: The maximum value for 'n' was increased
     from 1023 to 2047.

 -- Método: window.is_linetouched (line)

     Return ‘True’ if the specified line was modified since the last
     call to *note refresh(): 330c.; otherwise return ‘False’.  Raise a
     *note curses.error: 32f8. 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(): 330c.; 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: 2f.
     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(): 1793. 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(): 3309.

 -- 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(): 337f. 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(): 3380. 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(): 331f. 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(): 330c. call.

 -- Método: window.redrawwin ()

     Touch the entire window, causing it to be completely redrawn on the
     next *note refresh(): 330c. 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(): 332f.  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(): 3351.)
     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(): 336f.

 -- 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():
     330c, so it should almost never be necessary to call it manually.

 -- Método: window.syncok (flag)

     If 'flag' is ‘True’, then *note syncup(): 338c. 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(): 1793. will return ‘-1’ if no input
     is waiting.  If 'delay' is positive, then *note getch(): 1793. 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(): 330c.

 -- 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: 2f. module defines the following data members:

 -- Dado: curses.ERR

     Some curses routines that return an integer, such as *note getch():
     1793, return *note ERR: 3391. upon failure.

 -- Dado: curses.OK

     Some curses routines that return an integer, such as *note napms():
     1864, return *note OK: 3392. upon success.

 -- Dado: curses.version

 -- 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(): 333c.

 -- 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(): 333c.

 -- Dado: curses.COLS

     The width of the screen, i.e., the number of columns.  It is
     defined only after the call to *note initscr(): 1865.  Updated by
     *note update_lines_cols(): fe0, *note resizeterm(): 1881. and *note
     resize_term(): 1882.

 -- Dado: curses.LINES

     The height of the screen, i.e., the number of lines.  It is defined
     only after the call to *note initscr(): 1865.  Updated by *note
     update_lines_cols(): fe0, *note resizeterm(): 1881. and *note
     resize_term(): 1882.

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     Salvar
                              
                              
 -- 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     Desfazer
                              
                              
 -- 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: 33af,
*note KEY_F2: 33af, *note KEY_F3: 33af, *note KEY_F4: 33af.) available,
and the arrow keys mapped to *note KEY_UP: 33a9, *note KEY_DOWN: 33a8,
*note KEY_LEFT: 33aa. and *note KEY_RIGHT: 33ab. 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(): 1865. 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(): 3313.:

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: 32. module provides a *note Textbox: 3432.
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: 32. 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: 3432. object as follows:

 -- Classe: curses.textpad.Textbox (win)

     Return a textbox widget object.  The 'win' argument should be a
     curses *note window: 18d0. 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: 3436. flag
     is initially on.

     *note Textbox: 3432. 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: 3436. 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: 33aa.                ‘Control’-‘B’
                                               
                                               
          *note KEY_RIGHT: 33ab.               ‘Control’-‘F’
                                               
                                               
          *note KEY_UP: 33a9.                  ‘Control’-‘P’
                                               
                                               
          *note KEY_DOWN: 33a8.                ‘Control’-‘N’
                                               
                                               
          *note KEY_BACKSPACE: 33ad.           ‘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:
          3436. 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: 30. 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: 3443.
                    
                    
 -- 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: 3446.: “Tabulação
          curses.ascii.HThorizontal”
                    
                    
 -- Dado:           Alimentação de linha ou 'line feed'
          curses.ascii.LF

 -- Dado:           Apelido para *note LF: 3448.: “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(): 21d6.

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.14/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: 31. 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(): 3309, 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(): 347b. 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: 17b7. 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: 17b7. ou instância de sua subclasse é
     um framework de interpretador orientado a linhas.  Não há um bom
     motivo para instanciar *note Cmd: 17b7. 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: 17b7. e
     encapsular métodos de ação.

     O argumento opcional 'completekey' é o nome *note readline: bf. de
     uma chave de conclusão; o padrão é ‘Tab’.  Se 'completekey' não for
     *note None: 87a. e *note readline: bf. 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: 1964.  Especificamente,
     se *note readline.backend: 1964. 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: 754. e *note
     sys.stdout: cc0.

     Se você quiser que um determinado 'stdin' seja usado, certifique-se
     de definir o atributo *note use_rawinput: 348f. 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.14/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: 17b7. 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: 3493.).

     Se o módulo *note readline: bf. 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(): 1969.  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(): 3494.
     retornar um valor true.  O argumento 'stop' para *note postcmd():
     3494. é 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: 17b7. 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(): 3496. e *note postcmd(): 3494.
     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(): 3497. é
     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: 17b7.; ele existe
     para ser substituído por subclasses.  O valor de retorno é usado
     como o comando que será executado pelo método *note onecmd():
     3495.; a implementação *note precmd(): 3496. 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: 17b7.; 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(): 3494.;
     este será o valor de retorno do método *note onecmd(): 3495.  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(): 3492. é
     chamado.  Este método é um stub em *note Cmd: 17b7.; ele existe
     para ser substituído por subclasses.

 -- Método: Cmd.postloop ()

     Método gancho executado uma vez quando *note cmdloop(): 3492. está
     para ser retornado.  Este método é um stub em *note Cmd: 17b7.; ele
     existe para ser substituído por subclasses.

Instâncias das subclasses *note Cmd: 17b7. 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(): 3492. 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(): 3492. 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(): 3492.
     usa *note input(): 14d4. para exibir um prompt e ler o próximo
     comando; se false, *note sys.stdout.write(): cc0. e *note
     sys.stdin.readline(): 754. são usados.  (Isso significa que ao
     importar *note readline: bf, 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: 1a. é ú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: 107.

Comandos básicos do turtle, como *note forward(): 34a6, são adicionados
a uma subclasse de *note Cmd: 17b7. 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(): 3496. 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: 349f. 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.
* concurrent.interpreters — Múltiplos interpretadores no mesmo processo: concurrent interpreters — Múltiplos interpretadores no mesmo processo.
* 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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.14/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: 176.:

     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: 93e. 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: bb. provides a thread-safe interface for exchanging data
between running threads.

*note asyncio: b. 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: 46d, 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: 98. or *note
concurrent.futures.ProcessPoolExecutor: 1d6.  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: 98. module, which uses separate
processes to bypass the *note global interpreter lock: 46d. (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, *note free-threaded: 1f3. 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: 176. atualmente ativos.
     A quantidade retornada é igual ao tamanho da lista retornada por
     *note enumerate(): 1b49.

     The function ‘activeCount’ is a deprecated alias for this function.

 -- Função: threading.current_thread ()

     Return the current *note Thread: 176. 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(): c26.

     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: f30, a exceção é silenciosamente
     ignorada.  Caso contrário, a exceção é exibida em *note sys.stderr:
     b29.

     Se esta função levantar uma exceção, *note sys.excepthook(): a02. é
     chamada para tratá-la.

     *note threading.excepthook(): a41. pode ser substituída para
     controlar como exceções não capturadas levantadas por *note
     Thread.run(): c26. 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(): a02. trata exceções não capturadas.

     Adicionado na versão 3.8.

 -- Dado: threading.__excepthook__

     Holds the original value of *note threading.excepthook(): a41.  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: 1fed.: 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: 176. objects currently active.
     The list includes daemonic threads and dummy thread objects created
     by *note current_thread(): 35b.  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: 176. 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(): 2e0.
     for each thread, before its *note run(): c26. 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(): 2e0. for each
     thread, before its *note run(): c26. method is called.

     Adicionado na versão 3.12.

 -- Função: threading.gettrace ()

     Obtém a função trace conforme definido por *note settrace(): a3e.

     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(): 16ec.
     for each thread, before its *note run(): c26. 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(): 16ec. for each
     thread, before its *note run(): c26. 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(): a3f.

     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: 243. será levantada.  Se o
     tamanho da pilha especificado for inválido, uma *note ValueError:
     2ea. 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: 1fed.: 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(): 89c, *note RLock.acquire(): 1071,
     *note Condition.wait(): 1b55, etc.).  Specifying a timeout greater
     than this value will raise an *note OverflowError: a77.

     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: 176. 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: 17ca.
object and use its attributes:

     >>> mydata = local()
     >>> mydata.number = 42
     >>> mydata.number
     42

You can also access the *note local: 17ca.-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: 17ca. object, including
their *note __dict__: 772. 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: 17ca. objects by subclassing the
*note local: 17ca. 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__(): 8b4.
method, it will be called each time the *note local: 17ca. object is
used in a separate thread.  This is necessary to initialize each
thread’s dictionary.

Now if we create a *note local: 17ca. 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__: 7ec, 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: 176. 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(): c26. 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(): c26. methods of this
class.

Once a thread object is created, its activity must be started by calling
the thread’s *note start(): 178. method.  This invokes the *note run():
c26. 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(): c26. method terminates –
either normally, or by raising an unhandled exception.  The *note
is_alive(): b3c. method tests whether the thread is alive.

Other threads can call a thread’s *note join(): 13e0. method.  This
blocks the calling thread until the thread whose *note join(): 13e0.
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: 29f. attribute.

If the *note run(): c26. method raises an exception, *note
threading.excepthook(): a41. is called to handle it.  By default, *note
threading.excepthook(): a41. ignores silently *note SystemExit: f30.

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: 359. 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: 1354.

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: 34b5.  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, context=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():
     c26. 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.

     'context' is the *note Context: 177. value to use when starting the
     thread.  The default value is ‘None’ which indicates that the *note
     sys.flags.thread_inherit_context: 175. flag controls the behaviour.
     If the flag is true, threads will start with a copy of the context
     of the caller of *note start(): 178.  If false, they will start
     with an empty context.  To explicitly start with an empty context,
     pass a new instance of *note Context(): 177.  To explicitly start
     with a copy of the current context, pass the value from *note
     copy_context(): 34b6.  The flag defaults true on free-threaded
     builds and false otherwise.

     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.

     Alterado na versão 3.14: Adicionado o parâmetro 'context'.

      -- 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(): c26. method to be invoked in a
          separate thread of control.

          This method will raise a *note RuntimeError: 243. if called
          more than once on the same thread object.

          If supported, set the operating system thread name to *note
          threading.Thread.name: 29f.  The name can be truncated
          depending on the operating system thread name limits.

          Alterado na versão 3.14: Set the operating system thread name.

      -- Método: run ()

          Method representing the thread’s activity.

          You may override this method in a subclass.  The standard
          *note run(): c26. 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: 176. 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(): 13e0. 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():
          13e0. always returns ‘None’, you must call *note is_alive():
          b3c. after *note join(): 13e0. to decide whether a timeout
          happened – if the thread is still alive, the *note join():
          13e0. 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(): 13e0. raises a *note RuntimeError: 243. if an
          attempt is made to join the current thread as that would cause
          a deadlock.  It is also an error to *note join(): 13e0. a
          thread before it has been started and attempts to do so raise
          the same exception.

          If an attempt is made to join a running daemonic thread in
          late stages of *note Python finalization: 473. ‘join()’ raises
          a *note PythonFinalizationError: 472.

          Alterado na versão 3.14: May raise *note
          PythonFinalizationError: 472.

      -- 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.

          On some platforms, the thread name is set at the operating
          system level when the thread starts, so that it is visible in
          task managers.  This name may be truncated to fit in a
          system-specific limit (for example, 15 bytes on Linux or 63
          bytes on macOS).

          Changes to 'name' are only reflected at the OS level when the
          currently running thread is renamed.  (Setting the 'name'
          attribute of a different thread only updates the Python Thread
          object.)

      -- Método: getName ()
      -- Método: setName ()

          Deprecated getter/setter API for *note name: 29f.; 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(): 1356. 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():
          c27. 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: 1fed.: 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(): c26.
          method starts until just after the *note run(): c26. method
          terminates.  The module function *note enumerate(): 1b49.
          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(): 178. is called, otherwise *note RuntimeError:
          243. 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: 359. = ‘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: 359.; 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(): 89c. and *note release(): 14be.  When the state is unlocked,
*note acquire(): 89c. changes the state to locked and returns
immediately.  When the state is locked, *note acquire(): 89c. blocks
until a call to *note release(): 14be. in another thread changes it to
unlocked, then the *note acquire(): 89c. call resets it to locked and
returns.  The *note release(): 14be. 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:
243. will be raised.

Locks also support the *note context management protocol: 34bb.

When more than one thread is blocked in *note acquire(): 89c. waiting
for the state to turn to unlocked, only one thread proceeds when a *note
release(): 14be. 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.

          Alterado na versão 3.14: Lock acquisition can now be
          interrupted by signals on Windows.

      -- 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: 243.
          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(): 1071. method to lock it, and its
*note release(): 14be. method to unlock it.

     Nota: Reentrant locks support the *note context management
     protocol: 34bb, so it is recommended to use *note with: 186.
     instead of manually calling *note acquire(): 1071. and *note
     release(): 34bf. to handle acquiring and releasing the lock for a
     block of code.

RLock’s *note acquire(): 1071./*note release(): 34bf. call pairs may be
nested, unlike Lock’s *note acquire(): 89c./*note release(): 14be.  Only
the final *note release(): 34bf. (the *note release(): 14be. of the
outermost pair) resets the lock to an unlocked state and allows another
thread blocked in *note acquire(): 1071. to proceed.

*note acquire(): 1071./*note release(): 34bf. 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: 34bb.

               Recommended over manual ‘acquire()’ and *note release():
               34bf. 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: 1930. and ‘RLock’;
                    *note Lock: 1930. 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():
          34bf. 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: 243. is raised if this method is called
          when the lock is not acquired.

          There is no return value.

      -- Método: locked ()

          Return a boolean indicating whether this object is locked
          right now.

          Adicionado na versão 3.14.


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: 34bb.:
using the ‘with’ statement acquires the associated lock for the duration
of the enclosed block.  The *note acquire(): 34c2. and *note release():
34c3. methods also call the corresponding methods of the associated
lock.

Other methods must be called with the associated lock held.  The *note
wait(): 1b55. method releases the lock, and then blocks until another
thread awakens it by calling *note notify(): 1a82. or *note
notify_all(): 356.  Once awakened, *note wait(): 1b55. re-acquires the
lock and returns.  It is also possible to specify a timeout.

The *note notify(): 1a82. method wakes up one of the threads waiting for
the condition variable, if any are waiting.  The *note notify_all():
356. method wakes up all threads waiting for the condition variable.

Note: the *note notify(): 1a82. and *note notify_all(): 356. methods
don’t release the lock; this means that the thread or threads awakened
will not return from their *note wait(): 1b55. call immediately, but
only when the thread that called *note notify(): 1a82. or *note
notify_all(): 356. 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(): 1b55. repeatedly until
they see the desired state, while threads that modify the state call
*note notify(): 1a82. or *note notify_all(): 356. 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(): 1b55. can return after an arbitrary long time, and
the condition which prompted the *note notify(): 1a82. call may no
longer hold true.  This is inherent to multi-threaded programming.  The
*note wait_for(): 34c4. 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(): 1a82. and *note notify_all(): 356,
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: 1930. or *note RLock: 32c. object, and it is used as the
     underlying lock.  Otherwise, a new *note RLock: 32c. 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: locked ()

          Return a boolean indicating whether this object is locked
          right now.

          Adicionado na versão 3.14.

      -- 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: 243. is raised.

          This method releases the underlying lock, and then blocks
          until it is awakened by a *note notify(): 1a82. or *note
          notify_all(): 356. 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: 32c, it is not
          released using its *note release(): 34c3. method, since this
          may not actually unlock the lock when it was acquired multiple
          times recursively.  Instead, an internal interface of the
          *note RLock: 32c. 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.

          The return value is ‘True’ unless a given 'timeout' expired,
          in which case it is ‘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(): 1b55. 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(): 1b55.:
          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: 243. 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(): 1b55. call until it can reacquire the lock.
          Since *note notify(): 1a82. 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(): 1a82, 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: 243. 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(): 144f. and *note release(): 34c8.).

A semaphore manages an internal counter which is decremented by each
*note acquire(): 144f. call and incremented by each *note release():
34c8. call.  The counter can never go below zero; when *note acquire():
144f. finds that it is zero, it blocks, waiting until some other thread
calls *note release(): 34c8.

Semaphores also support the *note context management protocol: 34bb.

 -- Classe: threading.Semaphore (value=1)

     This class implements semaphore objects.  A semaphore manages an
     atomic counter representing the number of *note release(): 34c8.
     calls minus the number of *note acquire(): 144f. calls, plus an
     initial value.  The *note acquire(): 144f. 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: 2ea. 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(): 34c8.  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(): 34c8.  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: 2ea. 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(): 34cd. method and reset to false with the *note clear():
34ce. method.  The *note wait(): 1522. 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(): 34cd. method and reset to
     false with the *note clear(): 34ce. method.  The *note wait():
     1522. 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():
          1522. once the flag is true will not block at all.

      -- Método: clear ()

          Reset the internal flag to false.  Subsequently, threads
          calling *note wait(): 1522. will block until *note set():
          34cd. 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: 1355. is a subclass
of *note Thread: 176. and as such also functions as an example of
creating custom threads.

Timers are started, as with threads, by calling their *note Timer.start:
178. method.  The timer can be stopped (before its action has begun) by
calling the *note cancel(): 34d1. 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(): 34d3.
method and will block until all of the threads have made their *note
wait(): 34d3. 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(): 34d3. 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: 13e1.
          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: 13e1.
          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(): 34d3. to fail with the *note
          BrokenBarrierError: 13e1.  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: 243, is raised
     when the *note Barrier: 13df. 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: 186.
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: 1930, *note RLock: 32c, *note Condition: 1351,
*note Semaphore: 1352, and *note BoundedSemaphore: 1353. objects may be
used as *note with: 186. 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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 98. é um pacote que oferece suporte à invocação
de processos utilizando uma API semelhante ao módulo *note threading:
f3.  O pacote *note multiprocessing: 98. oferece simultaneamente
concorrência local e remota, efetivamente contornando a *note trava
global do interpretador: 46d, ao utilizar subprocessos ao invés de
threads.  Devido a isso, o módulo *note multiprocessing: 98. permite ao
programador aproveitar totalmente os múltiplos processadores de uma
máquina.  Ele funciona tanto em POSIX como em Windows.

O módulo *note multiprocessing: 98. também introduz APIs que não têm
análogos no módulo *note threading: f3.  Um exemplo principal disso é o
objeto *note Pool: 1161. que oferece um meio conveniente de paralelizar
a execução de uma função em vários valores de entrada, distribuindo os
dados de entrada entre processos (paralelismo de dados).  O exemplo a
seguir demonstra a prática comum de definir tais funções em um módulo
para que os processos filhos possam importar esse módulo com sucesso.
Este exemplo básico de paralelismo de dados usando *note Pool: 1161,

     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]

Ver também
..........

*note concurrent.futures.ProcessPoolExecutor: 1d6. 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: 1161, a API *note concurrent.futures: 24.
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: 98, os processos são gerados criando um objeto
*note Process: 251. e então chamando seu método *note start(): 1583.
*note Process: 251. segue a API de *note threading.Thread: 176.  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: 34df.

The arguments to *note Process: 251. 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: 5e4. 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: 98. 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(): 34e1. 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(): 4af. 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.

          Alterado na versão 3.14: Esse não é mais o método de
          inicialização padrão em nenhuma plataforma.  O código que
          requer 'fork' deve especificar explicitamente isso por meio de
          *note get_context(): 249. ou *note set_start_method(): 24a.

          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():
          4af. que esse método de inicialização chama internamente
          levantará *note DeprecationWarning: 1a3.  Use um método de
          inicialização diferente.  Veja a documentação de *note
          os.fork(): 4af. 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(): 4af.
          Nenhum recurso desnecessário é herdado.

          Disponível em plataformas POSIX que suportem a passagem de
          arquivo descritor para encadeamentos Unix, como Linux.  O
          padrão nessas plataformas.

          Alterado na versão 3.14: Isso se tornou o método de
          inicialização padrão nas plataformas POSIX.

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).

Alterado na versão 3.14: Nas plataformas POSIX, o método de
inicialização padrão foi alterado de 'fork' para 'forkserver' para
manter o desempenho, mas evitar incompatibilidades comuns de processos
multithreads.  Consulte gh-84559(2).

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: 1914.) 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(): 24a. 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(): 24a. não deve ser usada mais de uma vez no
programa.

Alternativamente, você pode usar *note get_context(): 249. 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: 98. or *note ProcessPoolExecutor:
1d6. 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

   (2) https://github.com/python/cpython/issues/84559


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: 98. tem suporte a dois tipos de canal de
comunicação entre processos:

'Filas'

     A classe *note Queue: 1aa0. é quase um clone de *note queue.Queue:
     1586.  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: 98. será serializado.

'Encadeamentos'

     A função *note Pipe(): 34e3. 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(): 34e3.
     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: 98. contém equivalentes de todas as primitivas de
sincronização de *note threading: f3.  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: 98. 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: 34e6. ou *note Array: 34e7.  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: 8.: ‘'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: 9e, 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(): 24f. controla
     um processo de servidor que contém objetos Python e permite que
     outros processos os manipulem usando proxies.

     A manager returned by *note Manager(): 24f. will support types
     *note list: 24c, *note dict: 183, *note set: 184, *note Namespace:
     34e8, *note Lock: 17bd, *note RLock: 17be, *note Semaphore: 34e9,
     *note BoundedSemaphore: 34ea, *note Condition: 34eb, *note Event:
     1b07, *note Barrier: 34ec, *note Queue: 1aa0, *note Value: 34e6.
     and *note Array: 34e7.  For example,

          from multiprocessing import Process, Manager

          def f(d, l, s):
              d[1] = '1'
              d['2'] = 2
              d[0.25] = None
              l.reverse()
              s.add('a')
              s.add('b')

          if __name__ == '__main__':
              with Manager() as manager:
                  d = manager.dict()
                  l = manager.list(range(10))
                  s = manager.set()

                  p = Process(target=f, args=(d, l, s))
                  p.start()
                  p.join()

                  print(d)
                  print(l)
                  print(s)

     vai exibir

          {0.25: None, 1: '1', '2': 2}
          [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
          {'a', 'b'}

     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: 1161. 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: 34df, mas vale a pena apontar aqui.  Isso
     significa que alguns exemplos, como os exemplos *note
     multiprocessing.pool.Pool: 1161. 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: 98. replica principalmente a API do
módulo *note threading: f3.

* Menu:

* Process e exceções::
* Encadeamentos e filas::
* Diversos: Diversos<5>.
* 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: Process e exceções,  Next: Encadeamentos e filas,  Up: Referência<3>

5.18.2.9 ‘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: 251. possui
     equivalentes de todos os métodos de *note threading.Thread: 176.

     O construtor deve sempre ser chamado com argumentos nomeados.
     'group' deve sempre ser ‘None’; ele existe somente para
     compatibilidade com *note threading.Thread: 176.  'target' é o
     objeto chamável a ser invocado pelo método *note run(): 34e1.  O
     padrão é ‘None’, o que significa que nada é chamado.  'name' é o
     nome do processo (veja *note name: 34f0. 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: 34f1. 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: 251. must be
          picklable.  This is frequently observed when trying to create
          a *note Process: 251. or use a *note
          concurrent.futures.ProcessPoolExecutor: 1d6. 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: 5e4. 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: 34f2.  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:
          1d5.  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(): 34e1. 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: 251. 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(): 34e1. 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():
          1585. é 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: 34f3. 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(): 1583. 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(): 1583. 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: 176, os objetos *note Process:
     251. 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(): 34e1. da criança retornar
          normalmente, o código de saída será 0.  Se ele terminar via
          *note sys.exit(): 276. 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(): 34e1, 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: 98. é inicializado, o processo
          principal recebe uma string aleatória usando *note
          os.urandom(): 73b.

          Quando um objeto *note Process: 251. é criado, ele herda a
          chave de autenticação do seu processo pai, embora isso possa
          ser alterado definindo *note authkey: 34f5. para outra
          sequência de bytes.

          Veja *note Authentication keys: 34f6.

      -- 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():
          12db.  Caso contrário, chamar *note join(): 1585. é 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: c6.

          Adicionado na versão 3.3.

      -- Método: interrupt ()

          Encerra o processo.  Funciona em POSIX usando o sinal *note
          SIGINT: 252.  O comportamento no Windows é indefinido.

          Por padrão, isso encerra o processo filho levantando *note
          KeyboardInterrupt: bbb.  Esse comportamento pode ser alterado
          com a configuração do respectivo sinal manipulador no processo
          filho *note signal.signal(): 1330. para *note SIGINT: 252.

          Observação: se o processo filho capturar e descartar *note
          KeyboardInterrupt: bbb, o processo não será encerrado.

          Observação: o comportamento padrão também definirá *note
          exitcode: 34f3. para ‘1’ como se um exceção não-capturada
          fosse levantada no filho processo.  Para ter um *note
          exitcode: 34f3. diferente, você pode simplesmente capturar
          *note KeyboardInterrupt: bbb. e chamar ‘exit(your_code)’.

          Adicionado na versão 3.14.

      -- Método: terminate ()

          Encerra o processo.  No POSIX isso é feito usando o sinal
          *note SIGTERM: 15d0.; 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(): 17c1, mas usando o sinal
          ‘SIGKILL’ no POSIX.

          Adicionado na versão 3.7.

      -- Método: close ()

          Fecha o objeto *note Process: 251, liberando todos os recursos
          associados a ele.  *note ValueError: 2ea. é levantado se o
          processo subjacente ainda estiver em execução.  Uma vez que
          *note close(): d42. retorne com sucesso, a maioria dos outros
          métodos e atributos do objeto *note Process: 251. levantará
          *note ValueError: 2ea.

          Adicionado na versão 3.7.

     Observe que os métodos *note start(): 1583, *note join(): 1585,
     *note is_alive(): 1584, *note terminate(): 17c1. e *note exitcode:
     34f3. devem ser chamados somente pelo processo que criou o objeto
     processo.

     Exemplo de uso de alguns dos métodos de *note Process: 251.:

          >>> 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: 98.

 -- 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: 34f8, 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<5>,  Prev: Process e exceções,  Up: Referência<3>

5.18.2.10 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(): 34e3. (para uma
conexão entre dois processos) ou uma fila (que permite múltiplos
produtores e consumidores).

Os tipos *note Queue: 1aa0, *note SimpleQueue: b06. e *note
JoinableQueue: 34fc. são filas FIFO multiprodutoras e multiconsumidoras
modeladas na classe *note queue.Queue: 1586. da biblioteca padrão.  Elas
diferem porque *note Queue: 1aa0. não tem os métodos *note task_done():
34fd. e *note join(): 34fe. introduzidos na classe *note queue.Queue:
1586. do Python 2.5.

Se você usar *note JoinableQueue: 34fc, então você 'deve' chamar *note
JoinableQueue.task_done(): 34ff. 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: 98. serializam todos os objetos que são
colocados nelas usando *note pickle: ab.  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: 3500.

     Nota: *note multiprocessing: 98. usa as exceções usuais *note
     queue.Empty: 3501. e *note queue.Full: 3502. para sinalizar um
     tempo limite.  Elas não estão disponíveis no espaço de nomes do
     *note multiprocessing: 98, então você precisa importá-las de *note
     queue: bb.

     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: 3500.

       1. Depois de colocar um objeto em uma fila vazia, pode haver um
          atraso infinitesimal antes que o método *note empty(): 18bc.
          da fila retorne *note False: d1f. e *note get_nowait(): 3503.
          possa retornar sem levantar *note queue.Empty: 3501.

       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():
     17c1. ou *note os.kill(): 1559. enquanto estiver tentando usar uma
     *note Queue: 1aa0, 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: 3504.), 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: 34df.

Para um exemplo do uso de filas para comunicação entre processos, veja
*note Exemplos: 3505.

 -- Função: multiprocessing.Pipe ([duplex])

     Retorna um par ‘(conn1, conn2)’ de objetos *note Connection: 12dc.
     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: ab. 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.

     As exceções usuais *note queue.Empty: 3501. e *note queue.Full:
     3502. do módulo *note queue: bb. da biblioteca padrão são
     levantadas para sinalizar tempos limite.

     *note Queue: 1aa0. implementa todos os métodos de *note
     queue.Queue: 1586, exceto *note task_done(): 34fd. e *note join():
     34fe.

      -- 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: 368.
          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: 2bf. 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: 3502.
          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: 3502. ('timeout' é ignorado nesse
          caso).

          Alterado na versão 3.8: Se a fila for fechada, *note
          ValueError: 2ea. será levantada em vez de *note
          AssertionError: 8ad.

      -- 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: 3501. 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: 3501. ('timeout' é ignorado nesse
          caso).

          Alterado na versão 3.8: Se a fila for fechada, *note
          ValueError: 2ea. será levantada em vez de *note OSError: 2bf.

      -- Método: get_nowait ()

          Equivalente a ‘get(False)’.

     *note multiprocessing.Queue: 1aa0. tem alguns métodos adicionais
     não encontrados em *note queue.Queue: 1586.  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(): 1cd4, *note put(): 1cd3. and *note
          empty(): 18bc. 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(): 1aa1. 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(): 3504. para
          fazer *note join_thread(): 3509. não fazer nada.

      -- Método: cancel_join_thread ()

          Impede que *note join_thread(): 3509. bloqueie.  Em
          particular, isso impede que o thread de segundo plano seja
          unido automaticamente quando o processo sai – veja *note
          join_thread(): 3509.

          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:
          1aa0. resultarão em um *note ImportError: 64f.  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: 1aa0. simplificado, muito próximo de um
     *note Pipe: 34e3. travado.

      -- 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(): 350a, *note put(): 350b. e
          *note empty(): 18bd. 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: 2bf. 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: 34fc, uma subclasse de *note Queue: 1aa0, é
     uma fila que também possui os métodos *note task_done(): 34ff. e
     *note join(): 350c.

      -- Método: task_done ()

          Indica que a tarefa anteriormente enfileirado está concluída.
          Para cada *note get(): 1cd4. usado para buscar uma tarefa, uma
          chamada subsequente para *note task_done(): 34ff. avisa à
          fila, que o processamento na tarefa está concluído.

          Se um *note join(): 34fe. estiver causando bloqueio no
          momento, ele irá continuar quando todos os itens tiverem sido
          processados (significando que uma chamada *note task_done():
          34ff. foi recebida para cada item que foi chamado o método
          *note put(): 1cd3. para colocar na fila).

          Levanta *note ValueError: 2ea. 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(): 34ff. 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(): 34fe. desbloqueia.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3770


File: python.info,  Node: Diversos<5>,  Next: Objetos de conexão,  Prev: Encadeamentos e filas,  Up: Referência<3>

5.18.2.11 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(): 4d4. (ou ‘len(os.sched_getaffinity(0))’).

     Quando o número de CPUs não pode ser determinado, uma *note
     NotImplementedError: 368. é levantada.

     Ver também
     ..........

     *note os.cpu_count(): 4d5. *note os.process_cpu_count(): 4d4.

     Alterado na versão 3.13: O valor de retorno também pode ser
     substituído usando o sinalizador *note -X cpu_count: 16f. ou *note
     PYTHON_CPU_COUNT: 518, pois este é apenas um invólucro em torno das
     APIs de contagem de CPU do *note os: a5.

 -- Função: multiprocessing.current_process ()

     Retorna o objeto *note Process: 251. correspondente ao processo
     atual.

     Um análogo de *note threading.current_thread(): 35b.

 -- Função: multiprocessing.parent_process ()

     Retorna o objeto *note Process: 251. correspondente ao processo pai
     do *note current_process(): 350f.  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:
     98. 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: 243.

     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: 1d5.

     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: 98.

     Se 'method' for ‘None’, então o contexto padrão será retornado.
     Observe que, se o método de inicialização global não tiver sido
     definido, isso o definirá como método padrão.  Caso contrário,
     'method' deve ser ‘'fork'’, ‘'spawn'’, ‘'forkserver'’.  *note
     ValueError: 2ea. é levantada se o método de inicialização não
     estiver disponível.  Consulte *note Contextos e métodos de
     inicialização: 1d5.

     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 has not been set and 'allow_none' is
     ‘False’, then the start method is set to the default and the name
     is returned.  If the start method has not been set and 'allow_none'
     is ‘True’ then ‘None’ is returned.

     O valor de retorno pode ser ‘'fork'’, ‘'spawn'’, ‘'forkserver'’ ou
     ‘None’.  Veja *note Contextos e métodos de inicialização: 1d5.

     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: 3ea. é 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:
     59a.

 -- 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: 64f.
     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: 251.).

     Só é significativo ao usar o método de inicialização
     ‘'forkserver'’.  Consulte *note Contextos e métodos de
     inicialização: 1d5.

     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: 243. 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: 1d5.

     Adicionado na versão 3.4.

     Nota: *note multiprocessing: 98. não contém equivalentes a *note
     threading.active_count(): 35c, *note threading.enumerate(): 1b49,
     *note threading.settrace(): a3e, *note threading.setprofile(): a3f,
     *note threading.Timer: 1355. ou *note threading.local: 17ca.

   ---------- 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<5>,  Up: Referência<3>

5.18.2.12 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: 34e3. –
veja também *note Listeners and Clients: 3512.

 -- 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(): 3514.

          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: 2ea.

      -- Método: recv ()

          Retorna um objeto enviado a partir da outra extremidade da
          conexão usando *note send(): 3513.  Bloqueia até que haja algo
          para receber.  Levanta *note EOFError: 14d5. 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():
          12db.

      -- Método: send_bytes (buffer[, offset[, size]])

          Enviar dados de bytes de um *note objeto bytes ou similar:
          193. 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: 2ea.

      -- 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: 14d5. 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: 2bf. 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: 1249, que agora é um apelido de *note OSError: 2bf.

      -- 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: 14d5. se não houver mais
          nada para receber e a outra extremidade tenha sido fechada.

          'buffer' deve ser um *note objeto bytes ou similar: 193.
          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():
     3513. e *note Connection.recv(): 3514.

     Objetos de conexão agora também oferecem suporte ao protocolo de
     gerenciamento de contexto — veja *note Tipos de Gerenciador de
     Contexto: 22a1.  *note __enter__(): 2539. retorna o objeto de
     conexão, e *note __exit__(): 253a. chama *note close(): 3516.

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(): 3514. 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():
     3514. e *note send(): 3513. após executar algum tipo de
     autenticação.  Veja *note Authentication keys: 34f6.

     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.13 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: f3.

Observe que também é possível criar primitivas de sincronização usando
um objeto gerenciador — veja *note Gerenciadores: 3500.

 -- Classe: multiprocessing.Barrier (parties[, action[, timeout]])

     Um objeto de barreira: um clone de *note threading.Barrier: 13df.

     Adicionado na versão 3.3.

 -- Classe: multiprocessing.BoundedSemaphore ([value])

     Um objeto semáforo delimitado: um análogo próximo de *note
     threading.BoundedSemaphore: 1353.

     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(): 351d.

          Nota: No macOS, isso é indistinguível de *note Semaphore:
          34e9. 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: 1351.

     Se 'lock' for especificado, ele deverá ser um objeto *note Lock:
     17bd. ou *note RLock: 17be. de *note multiprocessing: 98.

     Alterado na versão 3.3: O método *note wait_for(): 34c4. foi
     adicionado.

 -- Classe: multiprocessing.Event

     Um clone de *note threading.Event: 1354.

 -- Classe: multiprocessing.Lock

     Um objeto de trava não recursivo: um análogo próximo de *note
     threading.Lock: 1930.  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: 1930. conforme se aplica a
     threads são replicados aqui em *note multiprocessing.Lock: 17bd.
     conforme se aplica a processos ou threads, exceto conforme
     observado.

     Observe que *note Lock: 17bd. é na verdade uma função de fábrica
     que retorna uma instância de ‘multiprocessing.synchronize.Lock’
     inicializada com um contexto padrão.

     *note Lock: 17bd. oferece suporte ao protocolo *note gerenciador de
     contexto: 1e0. e, portanto, pode ser usado em instruções *note
     with: 186.

      -- 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(): 89c.

          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():
          89c.  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():
          14be, exceto que quando invocado em uma trava desatravada, uma
          *note ValueError: 2ea. é levantada.

      -- Método: locked ()

          Return a boolean indicating whether this object is locked
          right now.

          Adicionado na versão 3.14.

 -- Classe: multiprocessing.RLock

     Um objeto de trava recursiva: um análogo próximo de *note
     threading.RLock: 32c.  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: 17be. é na verdade uma função de fábrica
     que retorna uma instância de ‘multiprocessing.synchronize.RLock’
     inicializada com um contexto padrão.

     *note RLock: 17be. oferece suporte ao protocolo *note gerenciador
     de contexto: 1e0. e, portanto, pode ser usado em instruções *note
     with: 186.

      -- 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(): 1071,
          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(): 351d.  Observe que alguns desses
          comportamentos de 'timeout' diferem dos comportamentos
          implementados em *note threading.RLock.acquire(): 1071.

      -- 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:
          8ad. é 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(): 34bf.

      -- Método: locked ()

          Return a boolean indicating whether this object is locked
          right now.

          Adicionado na versão 3.14.

 -- Classe: multiprocessing.Semaphore ([value])

     Um objeto semáforo: um análogo próximo de *note
     threading.Semaphore: 1352.

     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(): 351d.

     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: 64f.  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.14 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: 2e. 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: 34e6.

     '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: 8.  '*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: 17bd. ou *note RLock: 17be, 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' 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: 8.  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.

     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: 17bd. ou *note RLock: 17be, 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: 3171. 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.15 O módulo ‘multiprocessing.sharedctypes’
.................................................

O módulo *note multiprocessing.sharedctypes: 9e. fornece funções para
alocar objetos *note ctypes: 2e. 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: 8.  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(): 3524. 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: 8.  '*args' é passado para o construtor para o tipo.

     Observe que definir e obter o valor é potencialmente não atômico –
     use *note Value(): 3526. para garantir que o acesso seja
     sincronizado automaticamente usando uma trava.

     Observe que um vetor de *note ctypes.c_char: 3171. tem atributos
     ‘value’ e ‘raw’ que permitem usá-la para armazenar e recuperar
     strings – veja a documentação de *note ctypes: 2e.

 -- Função: multiprocessing.sharedctypes.Array (typecode_or_type,
          size_or_initializer, *, lock=True)

     O mesmo que *note RawArray(): 3523, 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: 17bd. ou *note RLock: 17be, 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.

 -- Função: multiprocessing.sharedctypes.Value (typecode_or_type, *args,
          lock=True)

     O mesmo que *note RawValue(): 3525, 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: 17bd. ou *note RLock: 17be, 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.

 -- 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])

     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:
     17be. é criado automaticamente.

     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: 1e0. 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: 1e4.)

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.16 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: 17f8. 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: 9b. 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(): 352a. 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: ab.
     serialization) or ‘'xmlrpclib'’ (use *note xmlrpc.client: 134.
     serialization).

     'ctx' is a context object, or ‘None’ (use the current context).
     See the ‘get_context()’ function.

     'shutdown_timeout' is a timeout in seconds used to wait until the
     process used by the manager completes in the *note shutdown():
     352b. 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: 352d. 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(): 352a. 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(): 352e. method, or if the
          'create_method' argument is ‘False’ then this can be left as
          ‘None’.

          'proxytype' is a subclass of *note BaseProxy: 3530. 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(): 3531.  (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__(): 76f. 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: 3529. 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:
     22a1.  *note __enter__(): 2539. starts the server process (if it
     has not already started) and then returns the manager object.
     *note __exit__(): 253a. calls *note shutdown(): 352b.

     In previous versions *note __enter__(): 2539. did not start the
     manager’s server process if it was not already started.

 -- Classe: multiprocessing.managers.SyncManager

     A subclass of *note BaseManager: 3529. which can be used for the
     synchronization of processes.  Objects of this type are returned by
     *note multiprocessing.Manager(): 24f.

     Its methods create and return *note Objetos proxies: 24b. 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: 13df. object and
          return a proxy for it.

          Adicionado na versão 3.3.

      -- Método: BoundedSemaphore ([value])

          Create a shared *note threading.BoundedSemaphore: 1353. object
          and return a proxy for it.

      -- Método: Condition ([lock])

          Create a shared *note threading.Condition: 1351. object and
          return a proxy for it.

          If 'lock' is supplied then it should be a proxy for a *note
          threading.Lock: 1930. or *note threading.RLock: 32c. object.

          Alterado na versão 3.3: O método *note wait_for(): 34c4. foi
          adicionado.

      -- Método: Event ()

          Create a shared *note threading.Event: 1354. object and return
          a proxy for it.

      -- Método: Lock ()

          Create a shared *note threading.Lock: 1930. object and return
          a proxy for it.

      -- Método: Namespace ()

          Create a shared *note Namespace: 34e8. object and return a
          proxy for it.

      -- Método: Queue ([maxsize])

          Create a shared *note queue.Queue: 1586. object and return a
          proxy for it.

      -- Método: RLock ()

          Create a shared *note threading.RLock: 32c. object and return
          a proxy for it.

      -- Método: Semaphore ([value])

          Create a shared *note threading.Semaphore: 1352. 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: 183. object and return a proxy for
          it.

      -- Método: list ()

      -- Método: list (sequence)

          Create a shared *note list: 24c. object and return a proxy for
          it.

      -- Método: set ()

      -- Método: set (sequence)

      -- Método: set (mapping)

          Cria um objeto *note set: 184. compartilhado e retorna um
          proxy para ele.

          Adicionado na versão 3.14: Foi adicionado suporte para *note
          set: 184.

     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: 17f8.

 -- Classe: multiprocessing.managers.Namespace

     A type that can register with *note SyncManager: 17f8.

     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.17 Customized managers
.............................

To create one’s own manager, one creates a subclass of *note
BaseManager: 3529. and uses the *note register(): 352f. 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.18 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.19 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(): 169. a um proxy, o retorno
representará o referente, enquanto que ao aplicar o *note repr(): 1c1, 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:
24b.  Isso permite o aninhamento dessas listas e dicionários gerenciados
e outros *note Objetos proxies: 24b.:

     >>> 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: 24c. ou *note dict: 183.
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: 24b. 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: 98. 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: 3530.

      -- 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():
          352f.

          If an exception is raised by the call, then is re-raised by
          *note _callmethod(): 3531.  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():
          3531.

          Note in particular that an exception will be raised if
          'methodname' has not been 'exposed'.

          An example of the usage of *note _callmethod(): 3531.:

               >>> 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.20 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.21 Process Pools
.......................

One can create a pool of processes which will carry out tasks submitted
to it with the *note Pool: 1161. 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(): 4d4. 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(): 1161. method of a
     context object.  In both cases 'context' is set appropriately.

     Note that the methods of the pool object should only be called by
     the process which created the pool.

          Aviso: *note multiprocessing.pool: 9c. 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(): 3543. and *note terminate(): 3544. 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__(): 11f3. 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(): 4d4. by default, instead of *note
     os.cpu_count(): 4d5.

          Nota: Worker processes within a *note Pool: 1161. 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: 1161. 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(): 1588. 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(): 1587. method which returns a
          *note AsyncResult: 3545. 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(): 19f. built-in
          function (it supports only one 'iterable' argument though, for
          multiple iterables see *note starmap(): 12de.).  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(): 3546. or *note
          imap_unordered(): 3547. with explicit 'chunksize' option for
          better efficiency.

      -- Método: map_async (func, iterable[, chunksize[, callback[,
               error_callback]]])

          A variant of the *note map(): 12e1. method which returns a
          *note AsyncResult: 3545. 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(): 12e1.

          The 'chunksize' argument is the same as the one used by the
          *note map(): 12e1. 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(): 3546. method has an
          optional 'timeout' parameter: ‘next(timeout)’ will raise *note
          multiprocessing.TimeoutError: 34fa. if the result cannot be
          returned within 'timeout' seconds.

      -- Método: imap_unordered (func, iterable[, chunksize])

          The same as *note imap(): 3546. 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(): 12e1. 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(): 12de. and *note map_async():
          12e2. 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(): 3544. will be called immediately.

      -- Método: join ()

          Wait for the worker processes to exit.  One must call *note
          close(): 3543. or *note terminate(): 3544. before using *note
          join(): 3548.

     Alterado na versão 3.3: Pool objects now support the context
     management protocol – see *note Tipos de Gerenciador de Contexto:
     22a1.  *note __enter__(): 2539. returns the pool object, and *note
     __exit__(): 253a. calls *note terminate(): 3544.

 -- Classe: multiprocessing.pool.AsyncResult

     The class of the result returned by *note Pool.apply_async(): 1588.
     and *note Pool.map_async(): 12e2.

      -- 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: 34fa. is raised.  If the
          remote call raised an exception then that exception will be
          reraised by *note get(): 3549.

      -- 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: 2ea. if the result is
          not ready.

          Alterado na versão 3.7: If the result is not ready, *note
          ValueError: 2ea. is raised instead of *note AssertionError:
          8ad.

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.22 Listeners and Clients
...............................

Usually message passing between processes is done using queues or by
using *note Connection: 12dc. objects returned by *note Pipe(): 34e3.

However, the *note multiprocessing.connection: 99. 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: 6e. 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: 34f9. 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: 34f9. 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: 12dc.

     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: 3551.)

     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: 34f9. is raised if authentication fails.
     See *note Authentication keys: 34f6.

 -- 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: 3551.  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(): 2b6b.

     If the listener object uses a socket then 'backlog' (1 by default)
     is passed to the *note listen(): 1054. 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: 34f9. is raised if authentication fails.
     See *note Authentication keys: 34f6.

      -- Método: accept ()

          Accept a connection on the bound socket or named pipe of the
          listener object and return a *note Connection: 12dc. object.
          If authentication is attempted and fails, then *note
          AuthenticationError: 34f9. 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:
     22a1.  *note __enter__(): 2539. returns the listener object, and
     *note __exit__(): 253a. calls *note close(): 3552.

 -- 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: 12dc. object;

        * a connected and readable *note socket.socket: f95. object; or

        * the *note sentinel: 12dd. attribute of a *note Process: 251.
          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(): f94. is interrupted by a signal, it
     can raise *note OSError: 2bf. with an error number of ‘EINTR’,
     whereas *note wait(): 12db. 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(): 2b6d. 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(): 12db. 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.23 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(): 3550. 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.24 Authentication keys
.............................

When one uses *note Connection.recv: 3514, the data received is
automatically unpickled.  Unfortunately unpickling data from an
untrusted source is a security risk.  Therefore *note Listener: 1960.
and *note Client(): 3550. use the *note hmac: 6e. 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: 251.).  This value will be automatically inherited by any *note
Process: 251. 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(): 73b.


File: python.info,  Node: Gerando logs<2>,  Next: The multiprocessing dummy module,  Prev: Authentication keys,  Up: Referência<3>

5.18.2.25 Gerando logs
......................

Some support for logging is available.  Note, however, that the *note
logging: 8b. 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: 98.  If
     necessary, a new one will be created.

     When first created the logger has level *note logging.NOTSET: 2fea.
     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(): 30b5. but in
     addition to returning the logger created by get_logger, it adds a
     handler which sends output to *note sys.stderr: b29. 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: 8b. module.


File: python.info,  Node: The multiprocessing dummy module,  Prev: Gerando logs<2>,  Up: Referência<3>

5.18.2.26 The ‘multiprocessing.dummy’ module
............................................

*note multiprocessing.dummy: 9a. replicates the API of *note
multiprocessing: 98. but is no more than a wrapper around the *note
threading: f3. module.

In particular, the ‘Pool’ function provided by *note
multiprocessing.dummy: 9a. returns an instance of *note ThreadPool:
1bb3, which is a subclass of *note Pool: 1161. 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: 1bb3. instances are
     fully interface compatible with *note Pool: 1161. instances, and
     their resources must also be properly managed, either by using the
     pool as a context manager or by calling *note close(): 3543. and
     *note terminate(): 3544. manually.

     'processes' is the number of worker threads to use.  If 'processes'
     is ‘None’ then the number returned by *note os.process_cpu_count():
     4d4. is used.

     If 'initializer' is not ‘None’ then each worker process will call
     ‘initializer(*initargs)’ when it starts.

     Unlike *note Pool: 1161, 'maxtasksperchild' and 'context' cannot be
     provided.

          Nota: A *note ThreadPool: 1bb3. shares the same interface as
          *note Pool: 1161, which is designed around a pool of processes
          and predates the introduction of the *note concurrent.futures:
          24. 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: 3545, that is not understood by any other
          libraries.

          Users should generally prefer to use *note
          concurrent.futures.ThreadPoolExecutor: 93e, which has a
          simpler interface that was designed around threads from the
          start, and which returns *note concurrent.futures.Future:
          13ae. instances that are compatible with many other libraries,
          including *note asyncio: b.


File: python.info,  Node: Programming guidelines,  Next: Exemplos<15>,  Prev: Referência<3>,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.27 Programming guidelines
................................

There are certain guidelines and idioms which should be adhered to when
using *note multiprocessing: 98.

* 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.28 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(): 350e. is called) all
     completed processes which have not yet been joined will be joined.
     Also calling a finished process’s *note Process.is_alive: 1584.
     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: 98. 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: 17c1. 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: 17c1. 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: 3504. 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: 754. with a “file like object”

     *note multiprocessing: 98. 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():
     754. with a “file-like object” with output buffering.  This danger
     is that if multiple processes call *note close(): 500. 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.29 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: 251. are picklable.
     Also, if you subclass ‘Process.__init__’, you must make sure that
     instances will be picklable when the *note Process.start: 1583.
     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: 1583. 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: 243.:

          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<15>,  Prev: Programming guidelines,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.30 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: 1161.:

     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: 1914, 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: 3529, *note SharedMemoryManager: 3562,
também é fornecida no módulo *note multiprocessing.managers: 9b.

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(): 3563. deve ser chamado.  Quando
     um bloco de memória compartilhada não é mais necessário para nenhum
     processo, o método *note unlink(): 3564. deve ser chamado para
     garantir a limpeza apropriada.


     Parâmetros:

        * ‘name’ (*note str: 169.‘ | ’‘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: 3c0.) – Controla quando um novo bloco de
          memória compartilhada é criado (‘True’) ou um bloco de memória
          compartilhada existente é anexado (‘False’).

        * ‘size’ (*note int: 19b.) – 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: 3c0.) – 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: 98. 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: dc. 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(): 3563. 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(): 3564.

      -- 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(): 3564. e *note close():
          3563. podem ser chamados em qualquer ordem, mas tentar acessar
          dados dentro de um bloco de memória compartilhada após *note
          unlink(): 3564. 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: 1914.:

     >>> 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: 1914. 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: 3529.
     que pode ser usada para o gerenciamento dos blocos de memória
     compartilhada entre processos.

     Uma chamada ao método *note start(): 352a. 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(): 352b. na instância.
     Isso aciona uma chamada de *note unlink(): 3564. em todos os
     objetos *note SharedMemory: 3568. 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: 3568. e para criar um objeto lista ou similar
     (*note ShareableList: 3569.) apoiado por memória compartilhada.

     Consulte *note BaseManager: 3529. 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: 3568. com o
          'size' especificado em bytes.

      -- Método: ShareableList (sequence)

          Cria e retorna um novo objeto *note ShareableList: 3569,
          inicializado pelos valores da entrada 'sequence'.

O exemplo a seguir demonstra os mecanismos básicos de um *note
SharedMemoryManager: 3562.:

     >>> 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: 3562. através da instrução
*note with: 186. 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: 3562. em uma instrução *note with:
186, 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: 19b. (com sinal, 64-bit)

        * *note float: 196.

        * *note bool: 3c0.

        * *note str: 169. (menos de 10M bytes cada quando codificado
          como UTF-8)

        * *note bytes: 192. (menos de 10M bytes cada)

        * ‘None’

     Ele também difere notavelmente do tipo embutido *note list: 24c,
     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: 1914.  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: 192. e *note str: 169.  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: 2ea. se 'value' não estiver presente.

      -- Atributo: format

          Atributo somente leitura contendo o formato de empacotamento
          *note struct: db. usado por todos os valores armazenados
          atualmente.

      -- Atributo: shm

          A instância de *note SharedMemory: 1914. onde os valores são
          armazenados.

O exemplo a seguir demonstra o uso básico de uma instância de *note
ShareableList: 1c0f.:

     >>> 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: 1c0f. 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:
1c0f. (e o subjacente *note SharedMemory: 1914.) 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.14/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’
----------------------------

Este pacote contém os seguintes módulos:

   * *note concurrent.futures: 24. – Iniciando tarefas em paralelo

   * *note concurrent.interpreters: 25. — Múltiplos interpretadores no
     mesmo processo


File: python.info,  Node: concurrent futures — Launching parallel tasks,  Next: concurrent interpreters — Múltiplos interpretadores no mesmo processo,  Prev: O pacote concurrent,  Up: Execução Concorrente

5.18.5 ‘concurrent.futures’ — Launching parallel tasks
------------------------------------------------------

Adicionado na versão 3.2.

'Source code:' Lib/concurrent/futures/thread.py(1),
Lib/concurrent/futures/process.py(2), and
Lib/concurrent/futures/interpreter.py(3)

__________________________________________________________________

The *note concurrent.futures: 24. module provides a high-level interface
for asynchronously executing callables.

The asynchronous execution can be performed with threads, using *note
ThreadPoolExecutor: 93e. or *note InterpreterPoolExecutor: 1d2, or
separate processes, using *note ProcessPoolExecutor: 1d6.  Each
implements the same interface, which is defined by the abstract *note
Executor: 3574. class.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

* Menu:

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

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/concurrent/futures/thread.py

   (2) 
https://github.com/python/cpython/tree/3.14/Lib/concurrent/futures/process.py

   (3) 
https://github.com/python/cpython/tree/3.14/Lib/concurrent/futures/interpreter.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: 13ae. 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,
               buffersize=None)

          Similar to *note map(fn, *iterables): 19f. except:

             * The 'iterables' are collected immediately rather than
               lazily, unless a 'buffersize' is specified to limit the
               number of submitted tasks whose results have not yet been
               yielded.  If the buffer is full, iteration over the
               'iterables' pauses until a result is yielded from the
               buffer.

             * 'fn' is executed asynchronously and several calls to 'fn'
               may be made concurrently.

          The returned iterator raises a *note TimeoutError: a2c. if
          *note __next__(): 14c9. is called and the result isn’t
          available after 'timeout' seconds from the original call to
          *note Executor.map(): fd8.  '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: 1d6, 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: 93e.
          and *note InterpreterPoolExecutor: 1d2, 'chunksize' has no
          effect.

          Alterado na versão 3.5: Added the 'chunksize' parameter.

          Alterado na versão 3.14: Added the 'buffersize' parameter.

      -- 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(): c69. and *note
          Executor.map(): fd8. made after shutdown will raise *note
          RuntimeError: 243.

          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: 1e0. via the *note
          with: 186. statement, which will shutdown the *note Executor:
          3574. (waiting as if *note Executor.shutdown(): ae0. 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: InterpreterPoolExecutor,  Prev: Executor Objects,  Up: concurrent futures — Launching parallel tasks

5.18.5.2 ThreadPoolExecutor
...........................

*note ThreadPoolExecutor: 93e. is an *note Executor: 3574. subclass that
uses a pool of threads to execute calls asynchronously.

Deadlocks can occur when the callable associated with a *note Future:
13ae. waits on the results of another *note Future: 13ae.  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: 3574. 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: 3577,
     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: 93e. 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:
     1d6.

     Alterado na versão 3.6: Added the 'thread_name_prefix' parameter to
     allow users to control the *note threading.Thread: 176. 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: InterpreterPoolExecutor,  Next: `ProcessPoolExecutor`,  Prev: ThreadPoolExecutor,  Up: concurrent futures — Launching parallel tasks

5.18.5.4 InterpreterPoolExecutor
................................

The *note InterpreterPoolExecutor: 1d2. class uses a pool of
interpreters to execute calls asynchronously.  It is a *note
ThreadPoolExecutor: 93e. subclass, which means each worker is running in
its own thread.  The difference here is that each worker has its own
interpreter, and runs each task using that interpreter.

The biggest benefit to using interpreters instead of only threads is
true multi-core parallelism.  Each interpreter has its own *note Global
Interpreter Lock: 46d, so code running in one interpreter can run on one
CPU core, while code in another interpreter runs unblocked on a
different core.

The tradeoff is that writing concurrent code for use with multiple
interpreters can take extra effort.  However, this is because it forces
you to be deliberate about how and when interpreters interact, and to be
explicit about what data is shared between interpreters.  This results
in several benefits that help balance the extra effort, including true
multi-core parallelism, For example, code written this way can make it
easier to reason about concurrency.  Another major benefit is that you
don’t have to deal with several of the big pain points of using threads,
like race conditions.

Each worker’s interpreter is isolated from all the other interpreters.
“Isolated” means each interpreter has its own runtime state and operates
completely independently.  For example, if you redirect *note
sys.stdout: cc0. in one interpreter, it will not be automatically
redirected to any other interpreter.  If you import a module in one
interpreter, it is not automatically imported in any other.  You would
need to import the module separately in interpreter where you need it.
In fact, each module imported in an interpreter is a completely separate
object from the same module in a different interpreter, including *note
sys: df, *note builtins: 13, and even ‘__main__’.

Isolation means a mutable object, or other data, cannot be used by more
than one interpreter at the same time.  That effectively means
interpreters cannot actually share such objects or data.  Instead, each
interpreter must have its own copy, and you will have to synchronize any
changes between the copies manually.  Immutable objects and data, like
the builtin singletons, strings, and tuples of immutable objects, don’t
have these limitations.

Communicating and synchronizing between interpreters is most effectively
done using dedicated tools, like those proposed in PEP 734(1).  One less
efficient alternative is to serialize with *note pickle: ab. and then
send the bytes over a shared *note socket: d1. or *note pipe: 1a80.

 -- Classe: concurrent.futures.InterpreterPoolExecutor
          (max_workers=None, thread_name_prefix='', initializer=None,
          initargs=())

     A *note ThreadPoolExecutor: 93e. subclass that executes calls
     asynchronously using a pool of at most 'max_workers' threads.  Each
     thread runs tasks in its own interpreter.  The worker interpreters
     are isolated from each other, which means each has its own runtime
     state and that they can’t share any mutable objects or other data.
     Each interpreter has its own *note Global Interpreter Lock: 46d,
     which means code run with this executor has true multi-core
     parallelism.

     The optional 'initializer' and 'initargs' arguments have the same
     meaning as for ‘ThreadPoolExecutor’: the initializer is run when
     each worker is created, though in this case it is run in the
     worker’s interpreter.  The executor serializes the 'initializer'
     and 'initargs' using *note pickle: ab. when sending them to the
     worker’s interpreter.

          Nota: The executor may replace uncaught exceptions from
          'initializer' with *note ExecutionFailed: 357a.

     Other caveats from parent *note ThreadPoolExecutor: 93e. apply
     here.

*note submit(): c69. and *note map(): fd8. work like normal, except the
worker serializes the callable and arguments using *note pickle: ab.
when sending them to its interpreter.  The worker likewise serializes
the return value when sending it back.

When a worker’s current task raises an uncaught exception, the worker
always tries to preserve the exception as-is.  If that is successful
then it also sets the ‘__cause__’ to a corresponding *note
ExecutionFailed: 357a. instance, which contains a summary of the
original exception.  In the uncommon case that the worker is not able to
preserve the original as-is then it directly preserves the corresponding
*note ExecutionFailed: 357a. instance instead.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0734/


File: python.info,  Node: `ProcessPoolExecutor`,  Next: Future Objects,  Prev: InterpreterPoolExecutor,  Up: concurrent futures — Launching parallel tasks

5.18.5.5 ‘`ProcessPoolExecutor`’
................................

The *note ProcessPoolExecutor: 1d6. class is an *note Executor: 3574.
subclass that uses a pool of processes to execute calls asynchronously.
*note ProcessPoolExecutor: 1d6. uses the *note multiprocessing: 98.
module, which allows it to side-step the *note Global Interpreter Lock:
46d. 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: 1d6. will not work in the
interactive interpreter.

Calling *note Executor: 3574. or *note Future: 13ae. methods from a
callable submitted to a *note ProcessPoolExecutor: 1d6. will result in
deadlock.

Note that the restrictions on functions and arguments needing to
picklable as per *note multiprocessing.Process: 251. apply when using
*note submit(): c69. and *note map(): fd8. on a *note
ProcessPoolExecutor: 1d6.  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: 3574. 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(): 4d4.  If 'max_workers' is less than or
     equal to ‘0’, then a *note ValueError: 2ea. will be raised.  On
     Windows, 'max_workers' must be less than or equal to ‘61’.  If it
     is not then *note ValueError: 2ea. 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: 98. context or ‘None’.  It will be used to
     launch the workers.  If 'mp_context' is ‘None’ or not given, the
     default *note multiprocessing: 98. context is used.  See *note
     Contextos e métodos de inicialização: 1d5.

     '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: 357c,
     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.

     Alterado na versão 3.3: When one of the worker processes terminates
     abruptly, a *note BrokenProcessPool: 357c. 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.

     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: 98. context uses
     the ‘"fork"’ start method: The *note os.fork(): 4af. function
     called internally to spawn workers may raise a *note
     DeprecationWarning: 1a3.  Pass a 'mp_context' configured to use a
     different start method.  See the *note os.fork(): 4af.
     documentation for further explanation.

     Alterado na versão 3.13: 'max_workers' uses *note
     os.process_cpu_count(): 4d4. by default, instead of *note
     os.cpu_count(): 4d5.

     Alterado na versão 3.14: The default process start method (see
     *note Contextos e métodos de inicialização: 1d5.) changed away from
     'fork'.  If you require the 'fork' start method for *note
     ProcessPoolExecutor: 1d6. you must explicitly pass
     ‘mp_context=multiprocessing.get_context("fork")’.

      -- Método: terminate_workers ()

          Attempt to terminate all living worker processes immediately
          by calling *note Process.terminate: 17c1. on each of them.
          Internally, it will also call *note Executor.shutdown(): ae0.
          to ensure that all other resources associated with the
          executor are freed.

          After calling this method the caller should no longer submit
          tasks to the executor.

          Adicionado na versão 3.14.

      -- Método: kill_workers ()

          Attempt to kill all living worker processes immediately by
          calling *note Process.kill: d43. on each of them.  Internally,
          it will also call *note Executor.shutdown(): ae0. to ensure
          that all other resources associated with the executor are
          freed.

          After calling this method the caller should no longer submit
          tasks to the executor.

          Adicionado na versão 3.14.

* Menu:

* ProcessPoolExecutor Example::


File: python.info,  Node: ProcessPoolExecutor Example,  Up: `ProcessPoolExecutor`

5.18.5.6 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.7 Future Objects
.......................

The *note Future: 13ae. class encapsulates the asynchronous execution of
a callable.  *note Future: 13ae. instances are created by *note
Executor.submit(): c69.

 -- Classe: concurrent.futures.Future

     Encapsulates the asynchronous execution of a callable.  *note
     Future: 13ae. instances are created by *note Executor.submit():
     c69. 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: a2c. 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: bc4. 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: a2c. 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: bc4. 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:
          bc3. subclass, it will be logged and ignored.  If the callable
          raises a *note BaseException: 7cc. subclass, the behavior is
          undefined.

          If the future has already completed or been cancelled, 'fn'
          will be called immediately.

     The following *note Future: 13ae. methods are meant for use in unit
     tests and *note Executor: 3574. implementations.

      -- Método: set_running_or_notify_cancel ()

          This method should only be called by *note Executor: 3574.
          implementations before executing the work associated with the
          *note Future: 13ae. and by unit tests.

          If the method returns ‘False’ then the *note Future: 13ae. was
          cancelled, i.e.  *note Future.cancel(): 357f. was called and
          returned ‘True’.  Any threads waiting on the *note Future:
          13ae. completing (i.e.  through *note as_completed(): 1907. or
          *note wait(): 1b06.) will be woken up.

          If the method returns ‘True’ then the *note Future: 13ae. was
          not cancelled and has been put in the running state, i.e.
          calls to *note Future.running(): 3581. will return ‘True’.

          This method can only be called once and cannot be called after
          *note Future.set_result(): 3587. or *note
          Future.set_exception(): 3588. have been called.

      -- Método: set_result (result)

          Sets the result of the work associated with the *note Future:
          13ae. to 'result'.

          This method should only be used by *note Executor: 3574.
          implementations and unit tests.

          Alterado na versão 3.8: This method raises *note
          concurrent.futures.InvalidStateError: 18a4. if the *note
          Future: 13ae. is already done.

      -- Método: set_exception (exception)

          Sets the result of the work associated with the *note Future:
          13ae. to the *note Exception: bc3. 'exception'.

          This method should only be used by *note Executor: 3574.
          implementations and unit tests.

          Alterado na versão 3.8: This method raises *note
          concurrent.futures.InvalidStateError: 18a4. if the *note
          Future: 13ae. is already done.


File: python.info,  Node: Module Functions,  Next: Exception classes,  Prev: Future Objects,  Up: concurrent futures — Launching parallel tasks

5.18.5.8 Module Functions
.........................

 -- Função: concurrent.futures.wait (fs, timeout=None,
          return_when=ALL_COMPLETED)

     Wait for the *note Future: 13ae. instances (possibly created by
     different *note Executor: 3574. 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: 358c.
                                                            
                                                            
      -- 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: 13ae. instances
     (possibly created by different *note Executor: 3574. 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(): 1907. is called will be yielded first.  The
     returned iterator raises a *note TimeoutError: a2c. if *note
     __next__(): 14c9. is called and the result isn’t available after
     'timeout' seconds from the original call to *note as_completed():
     1907.  '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.9 Exception classes
..........................

 -- Exceção: concurrent.futures.CancelledError

     Raised when a future is cancelled.

 -- Exceção: concurrent.futures.TimeoutError

     A deprecated alias of *note TimeoutError: a2c, 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: a2c.

 -- Exceção: concurrent.futures.BrokenExecutor

     Derived from *note RuntimeError: 243, 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: 358f, this exception class is
     raised when one of the workers of a *note ThreadPoolExecutor: 93e.
     has failed initializing.

     Adicionado na versão 3.7.

 -- Exceção: concurrent.futures.interpreter.BrokenInterpreterPool

     Derived from *note BrokenThreadPool: 3577, this exception class is
     raised when one of the workers of a *note InterpreterPoolExecutor:
     1d2. has failed initializing.

     Adicionado na versão 3.14.

 -- Exceção: concurrent.futures.interpreter.ExecutionFailed

     Raised from *note InterpreterPoolExecutor: 1d2. when the given
     initializer fails or from *note submit(): c69. when there’s an
     uncaught exception from the submitted task.

     Adicionado na versão 3.14.

 -- Exceção: concurrent.futures.process.BrokenProcessPool

     Derived from *note BrokenExecutor: 358f. (formerly *note
     RuntimeError: 243.), this exception class is raised when one of the
     workers of a *note ProcessPoolExecutor: 1d6. 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: concurrent interpreters — Múltiplos interpretadores no mesmo processo,  Next: subprocess — Gerenciamento de subprocessos,  Prev: concurrent futures — Launching parallel tasks,  Up: Execução Concorrente

5.18.6 ‘concurrent.interpreters’ — Múltiplos interpretadores no mesmo processo
------------------------------------------------------------------------------

Adicionado na versão 3.14.

'Source code:' Lib/concurrent/interpreters(1)

__________________________________________________________________

O módulo ‘concurrent.interpreters’ constrói interfaces de nível mais
alto sobre o módulo de mais baixo nível ‘_interpreters’.

The module is primarily meant to provide a basic API for managing
interpreters (AKA “subinterpreters”) and running things in them.
Running mostly involves switching to an interpreter (in the current
thread) and calling a function in that execution context.

For concurrency, interpreters themselves (and this module) don’t provide
much more than isolation, which on its own isn’t useful.  Actual
concurrency is available separately through *note threads: f3. See *note
below: 3594.

Ver também
..........

*note InterpreterPoolExecutor: 1d2.

          combines threads with interpreters in a familiar interface.

*note Isolando módulos de extensão: 166.

     como atualizar um módulo de extensão para oferecer suporte a vários
     interpretadores

PEP 554(2)

PEP 734(3)

PEP 684(4)

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

* Menu:

* Detalhes-chave::
* Introdução: Introdução<10>.
* Referência: Referência<4>.
* Uso básico: Uso básico<3>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/concurrent/interpreters

   (2) https://peps.python.org/pep-0554/

   (3) https://peps.python.org/pep-0734/

   (4) https://peps.python.org/pep-0684/


File: python.info,  Node: Detalhes-chave,  Next: Introdução<10>,  Up: concurrent interpreters — Múltiplos interpretadores no mesmo processo

5.18.6.1 Detalhes-chave
.......................

Before we dive in further, there are a small number of details to keep
in mind about using multiple interpreters:

   * *note isolated: 3596., by default

   * nenhuma thread implícita

   * nem todos os pacotes PyPI oferecem suporte ao uso em múltiplos
     interpretadores ainda


File: python.info,  Node: Introdução<10>,  Next: Referência<4>,  Prev: Detalhes-chave,  Up: concurrent interpreters — Múltiplos interpretadores no mesmo processo

5.18.6.2 Introdução
...................

An “interpreter” is effectively the execution context of the Python
runtime.  It contains all of the state the runtime needs to execute a
program.  This includes things like the import state and builtins.
(Each thread, even if there’s only the main thread, has some extra
runtime state, in addition to the current interpreter, related to the
current exception and the bytecode eval loop.)

The concept and functionality of the interpreter have been a part of
Python since version 2.2, but the feature was only available through the
C-API and not well known, and the *note isolation: 3596. was relatively
incomplete until version 3.12.

* Menu:

* Multiple Interpreters and Isolation::
* Running in an Interpreter::
* Concurrency and Parallelism::
* Communication Between Interpreters::
* “Sharing” Objects::


File: python.info,  Node: Multiple Interpreters and Isolation,  Next: Running in an Interpreter,  Up: Introdução<10>

5.18.6.3 Multiple Interpreters and Isolation
............................................

A Python implementation may support using multiple interpreters in the
same process.  CPython has this support.  Each interpreter is
effectively isolated from the others (with a limited number of carefully
managed process-global exceptions to the rule).

That isolation is primarily useful as a strong separation between
distinct logical components of a program, where you want to have careful
control of how those components interact.

     Nota: Interpreters in the same process can technically never be
     strictly isolated from one another since there are few restrictions
     on memory access within the same process.  The Python runtime makes
     a best effort at isolation but extension modules may easily violate
     that.  Therefore, do not use multiple interpreters in
     security-sensitive situations, where they shouldn’t have access to
     each other’s data.


File: python.info,  Node: Running in an Interpreter,  Next: Concurrency and Parallelism,  Prev: Multiple Interpreters and Isolation,  Up: Introdução<10>

5.18.6.4 Running in an Interpreter
..................................

Running in a different interpreter involves switching to it in the
current thread and then calling some function.  The runtime will execute
the function using the current interpreter’s state.  The
‘concurrent.interpreters’ module provides a basic API for creating and
managing interpreters, as well as the switch-and-call operation.

No other threads are automatically started for the operation.  There is
*note a helper: 359b.for that though.  There is another dedicated helper
for calling the builtin *note exec(): 49c. in an interpreter.

When *note exec(): 49c. (or *note eval(): 49d.) are called in an
interpreter, they run using the interpreter’s ‘__main__’ module as the
“globals” namespace.  The same is true for functions that aren’t
associated with any module.  This is the same as how scripts invoked
from the command-line run in the ‘__main__’ module.


File: python.info,  Node: Concurrency and Parallelism,  Next: Communication Between Interpreters,  Prev: Running in an Interpreter,  Up: Introdução<10>

5.18.6.5 Concurrency and Parallelism
....................................

As noted earlier, interpreters do not provide any concurrency on their
own.  They strictly represent the isolated execution context the runtime
will use 'in the current thread'.  That isolation makes them similar to
processes, but they still enjoy in-process efficiency, like threads.

All that said, interpreters do naturally support certain flavors of
concurrency.  There’s a powerful side effect of that isolation.  It
enables a different approach to concurrency than you can take with async
or threads.  It’s a similar concurrency model to CSP or the actor model,
a model which is relatively easy to reason about.

You can take advantage of that concurrency model in a single thread,
switching back and forth between interpreters, Stackless-style.
However, this model is more useful when you combine interpreters with
multiple threads.  This mostly involves starting a new thread, where you
switch to another interpreter and run what you want there.

Each actual thread in Python, even if you’re only running in the main
thread, has its own 'current' execution context.  Multiple threads can
use the same interpreter or different ones.

At a high level, you can think of the combination of threads and
interpreters as threads with opt-in sharing.

As a significant bonus, interpreters are sufficiently isolated that they
do not share the *note GIL: 164, which means combining threads with
multiple interpreters enables full multi-core parallelism.  (This has
been the case since Python 3.12.)


File: python.info,  Node: Communication Between Interpreters,  Next: “Sharing” Objects,  Prev: Concurrency and Parallelism,  Up: Introdução<10>

5.18.6.6 Communication Between Interpreters
...........................................

In practice, multiple interpreters are useful only if we have a way to
communicate between them.  This usually involves some form of message
passing, but can even mean sharing data in some carefully managed way.

With this in mind, the ‘concurrent.interpreters’ module provides a *note
queue.Queue: 1586. implementation, available through *note
create_queue(): 359e.


File: python.info,  Node: “Sharing” Objects,  Prev: Communication Between Interpreters,  Up: Introdução<10>

5.18.6.7 “Sharing” Objects
..........................

Any data actually shared between interpreters loses the thread-safety
provided by the *note GIL: 164.  There are various options for dealing
with this in extension modules.  However, from Python code the lack of
thread-safety means objects can’t actually be shared, with a few
exceptions.  Instead, a copy must be created, which means mutable
objects won’t stay in sync.

By default, most objects are copied with *note pickle: ab. when they are
passed to another interpreter.  Nearly all of the immutable builtin
objects are either directly shared or copied efficiently.  For example:

   * *note None: 87a.

   * *note bool: 3c0. (*note True: dfb. and *note False: d1f.)

   * *note bytes: 192.

   * *note str: 169.

   * *note int: 19b.

   * *note float: 196.

   * *note tuple: 608. (of similarly supported objects)

There is a small number of Python types that actually share mutable data
between interpreters:

   * *note memoryview: 165.

   * *note Queue: 35a1.


File: python.info,  Node: Referência<4>,  Next: Uso básico<3>,  Prev: Introdução<10>,  Up: concurrent interpreters — Múltiplos interpretadores no mesmo processo

5.18.6.8 Referência
...................

Este módulo define as seguintes funções:

 -- Função: concurrent.interpreters.list_all ()

     Retorna *note list: 24c. de objetos *note Interpreter: 35a4, um
     para cada interpretador existente.

 -- Função: concurrent.interpreters.get_current ()

     Retorna um objeto *note Interpreter: 35a4. para o interpretador em
     execução no momento.

 -- Função: concurrent.interpreters.get_main ()

     Return an *note Interpreter: 35a4. object for the main interpreter.
     This is the interpreter the runtime created to run the *note REPL:
     48b. or the script given at the command-line.  It is usually the
     only one.

 -- Função: concurrent.interpreters.create ()

     Inicializa um novo interpretador Python (ocioso) e retorna um
     objeto *note Interpreter: 35a4. para ele.

 -- Função: concurrent.interpreters.create_queue ()

     Initialize a new cross-interpreter queue and return a *note Queue:
     35a1. object for it.

* Menu:

* Objetos interpretador::
* Exceções: Exceções<13>.
* Communicating Between Interpreters::


File: python.info,  Node: Objetos interpretador,  Next: Exceções<13>,  Up: Referência<4>

5.18.6.9 Objetos interpretador
..............................

 -- Classe: concurrent.interpreters.Interpreter (id)

     Um único interpretador no processo atual.

     Geralmente, *note Interpreter: 35a4. não deve ser chamado
     diretamente.  Em vez disso, use *note create(): 1746. ou uma das
     outras funções do módulo.

      -- Atributo: id

          (somente leitura)

          The underlying interpreter’s ID.

      -- Atributo: whence

          (somente leitura)

          Uma string descrevendo de onde o interpretador veio.

      -- Método: is_running ()

          Retorna ‘True’ se o interpretador estiver executando código em
          seu módulo ‘__main__’ e ‘False’ caso contrário.

      -- Método: close ()

          Finaliza e destrói o interpretador.

      -- Método: prepare_main (ns=None, **kwargs)

          Bind objects in the interpreter’s ‘__main__’ module.

          Some objects are actually shared and some are copied
          efficiently, but most are copied via *note pickle: ab.  See
          *note “Sharing” Objects: 359f.

      -- Método: exec (code, /, dedent=True)

          Executa o código-fonte fornecido no interpretador (na thread
          atual).

      -- Método: call (callable, /, *args, **kwargs)

          Retorna o resultado da chamada da execução da função fornecida
          no interpretador (na thread atual).

      -- Método: call_in_thread (callable, /, *args, **kwargs)

          Executa a função fornecida no interpretador (em uma nova
          thread).


File: python.info,  Node: Exceções<13>,  Next: Communicating Between Interpreters,  Prev: Objetos interpretador,  Up: Referência<4>

5.18.6.10 Exceções
..................

 -- Exceção: concurrent.interpreters.InterpreterError

     Esta exceção, uma subclasse de *note Exception: bc3, é levantada
     quando ocorre um erro relacionado ao interpretador.

 -- Exceção: concurrent.interpreters.InterpreterNotFoundError

     Esta exceção, uma subclasse de *note InterpreterError: 35b1, é
     levantada quando o interpretador de destino não existe mais.

 -- Exceção: concurrent.interpreters.ExecutionFailed

     Esta exceção, uma subclasse de *note InterpreterError: 35b1, é
     levantada quando o código em execução levanta uma exceção não
     capturada.

      -- Atributo: excinfo

          Um snapshot básico da exceção levantada no outro
          interpretador.

 -- Exceção: concurrent.interpreters.NotShareableError

     Esta exceção, uma subclasse de *note TypeError: 198, é levantada
     quando um objeto não pode ser enviado para outro interpretador.


File: python.info,  Node: Communicating Between Interpreters,  Prev: Exceções<13>,  Up: Referência<4>

5.18.6.11 Communicating Between Interpreters
............................................

 -- Classe: concurrent.interpreters.Queue (id)

     A wrapper around a low-level, cross-interpreter queue, which
     implements the *note queue.Queue: 1586. interface.  The underlying
     queue can only be created through *note create_queue(): 359e.

     Some objects are actually shared and some are copied efficiently,
     but most are copied via *note pickle: ab.  See *note “Sharing”
     Objects: 359f.

      -- Atributo: id

          (somente leitura)

          The queue’s ID.

 -- Exceção: concurrent.interpreters.QueueEmptyError

     This exception, a subclass of *note queue.Empty: 3501, is raised
     from ‘Queue.get()’ and ‘Queue.get_nowait()’ when the queue is
     empty.

 -- Exceção: concurrent.interpreters.QueueFullError

     This exception, a subclass of *note queue.Full: 3502, is raised
     from ‘Queue.put()’ and ‘Queue.put_nowait()’ when the queue is full.


File: python.info,  Node: Uso básico<3>,  Prev: Referência<4>,  Up: concurrent interpreters — Múltiplos interpretadores no mesmo processo

5.18.6.12 Uso básico
....................

Criando um interpretador e executando código nele:

     from concurrent import interpreters

     interp = interpreters.create()

     # Run in the current OS thread.

     interp.exec('print("spam!")')

     interp.exec("""if True:
         print('spam!')
         """)

     from textwrap import dedent
     interp.exec(dedent("""
         print('spam!')
         """))

     def run(arg):
         return arg

     res = interp.call(run, 'spam!')
     print(res)

     def run():
         print('spam!')

     interp.call(run)

     # Run in new OS thread.

     t = interp.call_in_thread(run)
     t.join()


File: python.info,  Node: subprocess — Gerenciamento de subprocessos,  Next: sched — Agendador de eventos,  Prev: concurrent interpreters — Múltiplos interpretadores no mesmo processo,  Up: Execução Concorrente

5.18.7 ‘subprocess’ — Gerenciamento de subprocessos
---------------------------------------------------

'Código-fonte:' Lib/subprocess.py(1)

__________________________________________________________________

O módulo *note subprocess: dc. 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: dc. 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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

* 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.14/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.7.1 Usando o módulo ‘subprocess’
.....................................

A abordagem recomendada para invocar subprocessos é usar a função *note
run(): d73. para todos os casos de uso que ela pode manipular.  Para
casos de uso mais avançados, a interface subjacente *note Popen: 4b1.
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: 1069.

     Os argumentos mostrados acima são meramente os mais comuns,
     descritos abaixo em *note Argumentos usados frequentemente: 35bf.
     (daí o uso de notação somente-nomeado na assinatura abreviada).  A
     assinatura da função completa é basicamente a mesma do construtor
     *note Popen: 4b1. - 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: 4b1. é
     automaticamente criado com 'stdout' and 'stderr' definidos como
     *note PIPE: d74.  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: d74. e 'stderr' para *note STDOUT: 35c0, ao invés de
     usar 'capture_output'.

     Um 'timeout' pode ser especificado em segundos, ele é passado
     internamente para *note Popen.communicate(): 35c1.  Se o tempo
     limite expirar, o processo filho será eliminado e aguardado.  A
     exceção *note TimeoutExpired: 17ba. 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(): 35c1.
     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: 4b1. é automaticamente criado com *note PIPE:
     d74, 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: 1520. 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: 9b4. 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: 4b1.  Este mapeamento pode
     ser str para str em qualquer plataforma ou bytes para bytes em
     plataformas POSIX como *note os.environ: 258. ou *note os.environb:
     259.

     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(): d73, 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(): d73. 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: 35c5. será ‘None’.

      -- Atributo: stderr

          Stderr capturado do processo filho.  Uma sequência de bytes ou
          uma string se *note run(): d73. foi chamada com uma
          codificação, erros ou text=True.  ‘None’ se stderr não foi
          capturado.

      -- Método: check_returncode ()

          Se *note returncode: 35c3. é diferente de zero, levantar um
          *note CalledProcessError: 1520.

     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: 4b1. e indica que o arquivo
     especial *note os.devnull: 1cca. 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: 4b1. e indica que um
     encadeamento para o fluxo padrão deve ser aberto.  Mais útil com
     *note Popen.communicate(): 35c1.

 -- Dado: subprocess.STDOUT

     Valor especial que pode ser usado como o argumento 'stderr' para
     *note Popen: 4b1. 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: 35c7, 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():
          d73. ou *note check_output(): 11b8.  Caso contrário, ‘None’.
          Isto é sempre *note bytes: 192. 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: 35cc.

      -- Atributo: stderr

          Saída de stderr do processo filho se ele foi capturado por
          *note run(): d73.  Caso contrário, ‘None’.  Isto é sempre
          *note bytes: 192. 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: 35c7, levantada quando um
     processo executado por *note check_call(): 35cd, *note
     check_output(): 11b8. ou *note run(): d73. (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():
          d73. ou *note check_output(): 11b8.  Caso contrário, ‘None’.

      -- Atributo: stdout

          Apelido para a saída, para simetria com *note stderr: 35d2.

      -- Atributo: stderr

          Saída stderr do processo filho se ele foi capturado por *note
          run(): d73.  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<14>.


File: python.info,  Node: Argumentos usados frequentemente,  Next: Construtor Popen,  Up: Usando o módulo subprocess

5.18.7.2 Argumentos usados frequentemente
.........................................

Para suportar uma ampla variedade de casos de uso, o construtor *note
Popen: 4b1. (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: dfb. (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: d74, *note DEVNULL:
     134a, um descritor de arquivo existente (um número inteiro
     positivo) e um *note objeto arquivo: 13bf. existente com um
     descritor de arquivo válido.  Com as configurações padrão de
     ‘None’, nenhum redirecionamento ocorrerá.  *note PIPE: d74. indica
     que um novo canal para o filho deve ser criado.  *note DEVNULL:
     134a. indica que o arquivo especial *note os.devnull: 1cca. será
     usado.  Além disso, 'stderr' pode ser *note STDOUT: 35c0, 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: 9b4.

     Para 'stdin', os caracteres de fim de linha ‘'\n'’ na entrada serão
     convertidos para o separador de linha padrão *note os.linesep:
     246c.  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: 9b4.
     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: 35d4, *note Popen.stdout: 35d5. e *note
          Popen.stderr: 35d6. não são atualizados pelo método *note
          Popen.communicate(): 35c1.

     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: 68,
     *note fnmatch: 60, *note os.walk(): 6c5, *note
     os.path.expandvars(): 15ca, *note os.path.expanduser(): bff. e
     *note shutil: ca.).

     Alterado na versão 3.3: Quando 'universal_newlines' é ‘True’, a
     classe usa a codificação *note locale.getpreferredencoding(False):
     751. em vez de ‘locale.getpreferredencoding()’.  Veja a classe
     *note io.TextIOWrapper: 9b4. para mais informações sobre esta
     alteração.

          Nota: Leia a seção *note Security Considerations: 35d7. 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: 4b1.


File: python.info,  Node: Construtor Popen,  Next: Exceções<14>,  Prev: Argumentos usados frequentemente,  Up: Usando o módulo subprocess

5.18.7.3 Construtor Popen
.........................

A criação e gerenciamento do processo subjacente neste módulo é
manipulado pela classe *note Popen: 4b1.  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(): 2f48. para executar o
     programa filho.  No Windows, a classe usa a função Windows
     ‘CreateProcess()’.  Os argumentos para *note Popen: 4b1. 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: 59a.  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(): 6d0.  Em
          todas as plataformas, passar *note sys.executable: 3ea. é 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(): 2f48, 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(): 753. 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: 35d9.  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: 59a. 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: 59a. 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: 4b1. 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: 35d7. antes
          de usar ‘shell=True’.

     'bufsize' será fornecido como o argumento correspondente à função
     *note open(): 314. 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: 59a. no POSIX.

     Alterado na versão 3.8: O parâmetro 'executable' aceita um *note
     objeto caminho ou similar: 59a. 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: d74, *note DEVNULL:
     134a, um descritor de arquivo existente (um número inteiro
     positivo) e um *note objeto arquivo: 13bf. existente com um
     descritor de arquivo válido.  Com as configurações padrão de
     ‘None’, nenhum redirecionamento ocorrerá.  *note PIPE: d74. indica
     que um novo canal para o filho deve ser criado.  *note DEVNULL:
     134a. indica que o arquivo especial *note os.devnull: 1cca. será
     usado.  Além disso, 'stderr' pode ser *note STDOUT: 35c0, 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(): 1c71. ou *note os.setpgid(): 2ead. 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: 243.  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:
     10f2.

     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: dfc, or
     by standard handle redirection.

     Alterado na versão 3.2: The default for 'close_fds' was changed
     from *note False: d1f. to what is described above.

     Alterado na versão 3.7: On Windows the default for 'close_fds' was
     changed from *note False: d1f. to *note True: dfb. when redirecting
     the standard handles.  It’s now possible to set 'close_fds' to
     *note True: dfb. 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: dfb.  (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: 59a. 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: 59a. on POSIX.

     Alterado na versão 3.7: 'cwd' parameter accepts a *note path-like
     object: 59a. 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: 1fed.: 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: 1fed.: 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(): 35da. and the value in ‘gr_gid’ will be used.  If
     the value is an integer, it will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1fed.: 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(): 35da. and the values in ‘gr_gid’ will be
     used.  Integer values will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1fed.: 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(): 35db. and the value in ‘pw_uid’ will be used.  If
     the value is an integer, it will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 258.
     or *note os.environb: 259.

          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: 35bf.  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: 35dc. 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: 35dd.

        * *note CREATE_NEW_PROCESS_GROUP: 35de.

        * *note ABOVE_NORMAL_PRIORITY_CLASS: 35df.

        * *note BELOW_NORMAL_PRIORITY_CLASS: 35e0.

        * *note HIGH_PRIORITY_CLASS: 35e1.

        * *note IDLE_PRIORITY_CLASS: 35e2.

        * *note NORMAL_PRIORITY_CLASS: 35e3.

        * *note REALTIME_PRIORITY_CLASS: 35e4.

        * *note CREATE_NO_WINDOW: 35e5.

        * *note DETACHED_PROCESS: 35e6.

        * *note CREATE_DEFAULT_ERROR_MODE: 35e7.

        * *note CREATE_BREAKAWAY_FROM_JOB: 35e8.

     'pipesize' can be used to change the size of the pipe when *note
     PIPE: d74. 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:
     186. 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: 1b5d. ‘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: 546. se o processo filho ainda estiver em
     execução.

     Alterado na versão 3.8: Popen can use *note os.posix_spawn(): 528.
     in some cases for better performance.  On Windows Subsystem for
     Linux and QEMU User Emulation, Popen constructor using *note
     os.posix_spawn(): 528. no longer raise an exception on errors like
     missing program, but the child process fails with a non-zero *note
     returncode: c77.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Side-by-Side_Assembly


File: python.info,  Node: Exceções<14>,  Prev: Construtor Popen,  Up: Usando o módulo subprocess

5.18.7.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: 2bf.  This occurs,
for example, when trying to execute a non-existent file.  Applications
should prepare for *note OSError: 2bf. exceptions.  Note that, when
‘shell=True’, *note OSError: 2bf. 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: 2ea. será levantada se *note Popen: 4b1. for
chamado com argumentos inválidos.

*note check_call(): 35cd. e *note check_output(): 11b8. levantarão *note
CalledProcessError: 1520. 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(): d73. and *note Popen.communicate(): 35c1. will raise
*note TimeoutExpired: 17ba. if the timeout expires before the process
exits.

Todas as exceções definidas neste módulo herdam de *note
SubprocessError: 35c7.

Adicionado na versão 3.3: A classe base *note SubprocessError: 35c7. 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.7.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: 35eb, it is possible to use
*note shlex.quote(): 57b. 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.7.6 Objetos Popen
......................

Instâncias da classe *note Popen: 4b1. têm os seguintes métodos:

 -- Método: Popen.poll ()

     Check if child process has terminated.  Set and return *note
     returncode: c77. attribute.  Otherwise, returns ‘None’.

 -- Método: Popen.wait (timeout=None)

     Wait for child process to terminate.  Set and return *note
     returncode: c77. attribute.

     If the process does not terminate after 'timeout' seconds, raise a
     *note TimeoutExpired: 17ba. 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(): 35c1. 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:
          b. module for an asynchronous wait: see *note
          asyncio.create_subprocess_exec: c5f.

     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: c77. 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(): 35c1. 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: 17ba. exception will be raised.  Catching this
     exception and retrying communication will not lose any output.

     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()

          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():
          15cd.  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: 15d0.
     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(): 15ce. is an alias for *note
     terminate(): 15cd.

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: 4b1. -
     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: d74, this attribute is a
     writeable stream object as returned by *note open(): 314.  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: d74, this attribute is ‘None’.

 -- Atributo: Popen.stdout

     If the 'stdout' argument was *note PIPE: d74, this attribute is a
     readable stream object as returned by *note open(): 314.  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: d74, this attribute is ‘None’.

 -- Atributo: Popen.stderr

     If the 'stderr' argument was *note PIPE: d74, this attribute is a
     readable stream object as returned by *note open(): 314.  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: d74, this attribute is ‘None’.

     Aviso: Use *note communicate(): 35c1. rather than *note
     .stdin.write: 35d4, *note .stdout.read: 35d5. or *note
     .stderr.read: 35d6. 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: c77. is
     set by a call to the *note poll(): 35ed, *note wait(): ed4, or
     *note communicate(): 35c1. 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.7.7 Windows Popen Helpers
..............................

The *note STARTUPINFO: 35dc. 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: 4b1. 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:
          35dc. 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: 35f1. specifies *note STARTF_USESTDHANDLES:
          35f3, this attribute is the standard input handle for the
          process.  If *note STARTF_USESTDHANDLES: 35f3. is not
          specified, the default for standard input is the keyboard
          buffer.

      -- Atributo: hStdOutput

          If *note dwFlags: 35f1. specifies *note STARTF_USESTDHANDLES:
          35f3, 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: 35f1. specifies *note STARTF_USESTDHANDLES:
          35f3, 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: 35f1. specifies *note STARTF_USESHOWWINDOW:
          35f7, 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: 35f8. is provided for this attribute.  It is
          used when *note Popen: 4b1. 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(): 10f6. when passed to the
               *note Popen: 4b1. constructor, else *note OSError: 2bf.
               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(): 164c.  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.7.8 Constantes do Windows
..............................

The *note subprocess: dc. 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: 35f2, *note
     STARTUPINFO.hStdOutput: 35f4, and *note STARTUPINFO.hStdError:
     35f5. attributes contain additional information.

 -- Dado: subprocess.STARTF_USESHOWWINDOW

     Specifies that the *note STARTUPINFO.wShowWindow: 35f6. attribute
     contains additional information.

 -- Dado: subprocess.STARTF_FORCEONFEEDBACK

     A *note STARTUPINFO.dwFlags: 35f1. 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: 35f1. 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: 4b1. ‘creationflags’ parameter to specify that a new
     process group will be created.  This flag is necessary for using
     *note os.kill(): 1559. on the subprocess.

     This flag is ignored if *note CREATE_NEW_CONSOLE: 35dd. is
     specified.

 -- Dado: subprocess.ABOVE_NORMAL_PRIORITY_CLASS

     A *note Popen: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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: 4b1. ‘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.7.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(): d73. 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: c77. attribute.

     Code needing to capture stdout or stderr should use *note run():
     d73. instead:

          run(...).returncode

     To suppress stdout or stderr, supply a value of *note DEVNULL:
     134a.

     The arguments shown above are merely some common ones.  The full
     function signature is the same as that of the *note Popen: 4b1.
     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: 1520.  The *note CalledProcessError: 1520.
     object will have the return code in the *note returncode: 35ce.
     attribute.  If *note check_call(): 35cd. 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():
     d73. instead:

          run(..., check=True)

     To suppress stdout or stderr, supply a value of *note DEVNULL:
     134a.

     The arguments shown above are merely some common ones.  The full
     function signature is the same as that of the *note Popen: 4b1.
     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: 1520.  The *note CalledProcessError: 1520.
     object will have the return code in the *note returncode: 35ce.
     attribute and any output in the *note output: 35d0. 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(): d73.
     - most arguments are passed directly through to that interface.
     One API deviation from *note run(): d73. 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: 35bf. and *note run(): d73.

     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(): d73. 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.7.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: 2bf. instead.

     In addition, the replacements using *note check_output(): 11b8.
     will fail with a *note CalledProcessError: 1520. if the requested
     operation produces a non-zero return code.  The output is still
     available as the *note output: 35d0. attribute of the raised
     exception.

In the following examples, we assume that the relevant functions have
already been imported from the *note subprocess: dc. 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(): Replacing os popen.


File: python.info,  Node: Replacing /bin/sh shell command substitution,  Next: Replacing shell pipeline,  Up: Replacing Older Functions with the subprocess Module

5.18.7.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.7.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.7.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(): d75. return value is encoded differently to that
     of *note os.system(): 164c.

   * The *note os.system(): 164c. function ignores SIGINT and SIGQUIT
     signals while the command is running, but the caller must do this
     separately when using the *note subprocess: dc. 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,  Prev: Substituindo os system,  Up: Replacing Older Functions with the subprocess Module

5.18.7.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,  Prev: Replacing the os spawn family,  Up: Replacing Older Functions with the subprocess Module

5.18.7.15 Replacing ‘os.popen()’
................................

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: Legacy Shell Invocation Functions,  Next: Notas<2>,  Prev: Replacing Older Functions with the subprocess Module,  Up: subprocess — Gerenciamento de subprocessos

5.18.7.16 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():
     11b8. and return a 2-tuple ‘(exitcode, output)’.  'encoding' and
     'errors' are used to decode output; see the notes on *note
     Argumentos usados frequentemente: 35bf. 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: 1fed.: 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: c77.

     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(): 11ba, 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: 1fed.: 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.7.17 Notas
...............

* Menu:

* Timeout Behavior::
* Converter uma sequência de argumentos em uma string no Windows::
* Disable use of posix_spawn(): Disable use of 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.7.18 Timeout Behavior
..........................

When using the ‘timeout’ parameter in functions like *note run(): d73,
*note Popen.wait(): ed4, or *note Popen.communicate(): 35c1, 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: 17ba. 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: Disable use of posix_spawn,  Prev: Timeout Behavior,  Up: Notas<2>

5.18.7.19 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: c9.

     Module which provides function to parse and escape command lines.


File: python.info,  Node: Disable use of posix_spawn,  Prev: Converter uma sequência de argumentos em uma string no Windows,  Up: Notas<2>

5.18.7.20 Disable use of ‘posix_spawn()’
........................................

On Linux, *note subprocess: dc. defaults to using the ‘vfork()’ system
call internally when it is safe to do so rather than ‘fork()’.  This
greatly improves performance.

     subprocess._USE_POSIX_SPAWN = False  # See CPython issue gh-NNNNNN.

It is safe to set this to false on any Python version.  It will have no
effect on older or newer versions where unsupported.  Do not assume the
attribute is available to read.  Despite the name, a true value does not
indicate 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’


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.8 ‘sched’ — Agendador de eventos
-------------------------------------

'Código-fonte:' Lib/sched.py(1)

__________________________________________________________________

O módulo *note sched: c4. 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: 1323. 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: 1323. 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.14/Lib/sched.py


File: python.info,  Node: Objetos Scheduler,  Up: sched — Agendador de eventos

5.18.8.1 Objetos Scheduler
..........................

As instâncias *note scheduler: 1323. 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(): 1bd3.).

     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(): 1325.

     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: 2ea.

 -- 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(): 1322.

     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: 853. 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.9 ‘queue’ — A synchronized queue class
-------------------------------------------

'Código-fonte:' Lib/queue.py(1)

__________________________________________________________________

The *note queue: bb. 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: 1586. 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: 6d.
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: d55, whose specific implementation provides additional
guarantees in exchange for the smaller functionality.

The *note queue: bb. 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(): 3059. (or *note
     get_nowait(): 3618.) is called on a *note Queue: 1586. object which
     is empty.

 -- Exceção: queue.Full

     Exception raised when non-blocking *note put(): 3619. (or *note
     put_nowait(): 3058.) is called on a *note Queue: 1586. object which
     is full.

 -- Exceção: queue.ShutDown

     Exception raised when *note put(): 3619. or *note get(): 3059. is
     called on a *note Queue: 1586. 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.14/Lib/queue.py


File: python.info,  Node: Objetos Queue,  Next: Objetos SimpleQueue,  Up: queue — A synchronized queue class

5.18.9.1 Objetos Queue
......................

Queue objects (*note Queue: 1586, *note LifoQueue: 2547, or *note
PriorityQueue: 2548.) 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: 3502. 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: 3502. exception ('timeout' is
     ignored in that case).

     Raises *note ShutDown: 53d. 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: 3501.
     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: 3501. 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: bbb.

     Raises *note ShutDown: 53d. 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(): 3059. used to fetch a
     task, a subsequent call to *note task_done(): 34fd. tells the queue
     that the processing on the task is complete.

     If a *note join(): 34fe. is currently blocking, it will resume when
     all items have been processed (meaning that a *note task_done():
     34fd. call was received for every item that had been *note put():
     3619. into the queue).

     Levanta *note ValueError: 2ea. 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(): 34fd. 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(): 34fe. unblocks.

* Menu:

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


File: python.info,  Node: Waiting for task completion,  Next: Terminating queues,  Up: Objetos Queue

5.18.9.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.9.3 Terminating queues
...........................

When no longer needed, *note Queue: 1586. objects can be wound down
until empty or terminated immediately with a hard shutdown.

 -- Método: Queue.shutdown (immediate=False)

     Put a *note Queue: 1586. instance into a shutdown mode.

     The queue can no longer grow.  Future calls to *note put(): 3619.
     raise *note ShutDown: 53d.  Currently blocked callers of *note
     put(): 3619. will be unblocked and will raise *note ShutDown: 53d.
     in the formerly blocked thread.

     If 'immediate' is false (the default), the queue can be wound down
     normally with *note get(): 3059. calls to extract tasks that have
     already been loaded.

     And if *note task_done(): 34fd. is called for each remaining task,
     a pending *note join(): 34fe. will be unblocked normally.

     Once the queue is empty, future calls to *note get(): 3059. will
     raise *note ShutDown: 53d.

     If 'immediate' is true, the queue is terminated immediately.  The
     queue is drained to be completely empty.  All callers of *note
     join(): 34fe. are unblocked regardless of the number of unfinished
     tasks.  Blocked callers of *note get(): 3059. are unblocked and
     will raise *note ShutDown: 53d. because the queue is empty.

     Use caution when using *note join(): 34fe. with 'immediate' set to
     true.  This unblocks the join even when no work has been done on
     the tasks, violating the usual invariant for joining a queue.

     Adicionado na versão 3.13.


File: python.info,  Node: Objetos SimpleQueue,  Prev: Objetos Queue,  Up: queue — A synchronized queue class

5.18.9.4 Objetos SimpleQueue
............................

*note SimpleQueue: d55. 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():
     3619.

     '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: 11a. callbacks.

 -- Método: SimpleQueue.put_nowait (item)

     Equivalent to ‘put(item, block=False)’, provided for compatibility
     with *note Queue.put_nowait(): 3058.

 -- 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: 3501.
     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: 3501. exception ('timeout' is ignored
     in that case).

 -- Método: SimpleQueue.get_nowait ()

     Equivalente a ‘get(False)’.

Ver também
..........

Class *note multiprocessing.Queue: 1aa0.

     A queue class for use in a multi-processing (rather than
     multi-threading) context.

*note collections.deque: 7e9. is an alternative implementation of
unbounded queues with fast atomic *note append(): 2818. and *note
popleft(): 281e. 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.10 ‘contextvars’ — Variáveis de contexto
---------------------------------------------

__________________________________________________________________

Este módulo fornece APIs para gerenciar, armazenar e acessar o estado
local do contexto.  A classe *note ContextVar: 17db. é usada para
declarar e trabalhar com 'Variáveis de Contexto'.  A função *note
copy_context(): 34b6. e a classe *note Context: 177. 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(): 17ca. 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.10.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(): 362c. 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:
     177. 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: 24e6.

      -- 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: 1e1. que pode ser usado para
          restaurar a variável ao seu valor anterior através do método
          *note ContextVar.reset(): 362f.

      -- Método: reset (token)

          Redefine a variável de contexto para o valor que tinha antes
          de *note ContextVar.set(): 362e.  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.

 -- Classe: contextvars.Token

     Objetos 'token' são retornados pelo método *note ContextVar.set():
     362e.  Eles podem ser passados para o método *note
     ContextVar.reset(): 362f. para reverter o valor da variável para o
     que era antes do 'set' correspondente.

     O token oferece suporte a *note protocolo do gerenciador de
     contexto: 229f. para restaurar o valor da variável de contexto
     correspondente na saída do bloco *note with: 186.:

          var = ContextVar('var', default='default value')

          with var.set('new value'):
              assert var.get() == 'new value'

          assert var.get() == 'default value'

     Adicionado na versão 3.14: Adicionado suporte para uso como
     gerenciador de contexto.

      -- Atributo: var

          Uma propriedade somente leitura.  Aponta para o objeto *note
          ContextVar: 17db. que criou o token.

      -- Atributo: old_value

          Uma propriedade somente leitura.  Defina como o valor que a
          variável tinha antes da chamada do método *note
          ContextVar.set(): 362e. que criou o token.  Aponta para *note
          Token.MISSING: 176a. se a variável não foi definida antes da
          chamada.

      -- Atributo: MISSING

          Um objeto marcador usado por *note Token.old_value: 3631.


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.10.2 Gerenciamento de contexto manual
..........................................

 -- Função: contextvars.copy_context ()

     Retorna uma cópia do objeto *note Context: 177. atual.

     O trecho a seguir obtém uma cópia do contexto atual e imprime todas
     as variáveis e seus valores que sã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: 17db. 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():
     34b6.

     Cada thread tem sua própria pilha efetiva de objetos ‘Context’.  O
     *note contexto atual: 18b8. é 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(): 189e, 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(): 189e,
     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: 17db. se comportam de maneira semelhante a *note
     threading.local(): 17ca. 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: 243.

     Após sair de um contexto, ele pode ser acessado novamente (de
     qualquer thread).

     Quaisquer alterações nos valores de *note ContextVar: 17db. por
     meio do método *note ContextVar.set(): 362e. são registradas no
     contexto atual.  O método *note ContextVar.get(): 362c. 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: abd.

      -- 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: 17db. 'var'.  Se
          a variável não for definida no objeto contexto, uma *note
          KeyError: 5dd. é 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.10.3 Suporte a asyncio
...........................

Variáveis de contexto encontram suporte nativo em *note asyncio: b. 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.11 ‘_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: f3. 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: 243.

 -- 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(): 501. é 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: f30, ela é
     ignorada.

     Levanta um *note evento de auditoria: 1b5d.
     ‘_thread.start_new_thread’ com os argumentos ‘function’, ‘args’,
     ‘kwargs’.

     Alterado na versão 3.8: *note sys.unraisablehook(): 501. 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: 252. será
     simulado.

     Se o sinal fornecido não for tratado pelo Python (o sinal foi
     definido como *note signal.SIG_DFL: 1ac4. ou *note signal.SIG_IGN:
     1ac3.), 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():
          1aa6.

 -- Função: _thread.exit ()

     Levanta a exceção *note SystemExit: f30.  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’ da 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 uma thread
     termina e outra é criada.

 -- 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: 1fed.: 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 novas threads.
     O argumento opcional 'size' especifica o tamanho da pilha a ser
     usado para threads criadas 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
     permitida, uma *note RuntimeError: 243. será levantada.  Se o
     tamanho da pilha especificado for inválido, um *note ValueError:
     2ea. será levantado 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: 1fed.: 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: 89c.  A especificação de um tempo limite maior que
     esse valor vai levantar um *note OverflowError: a77.

     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.

     Alterado na versão 3.14: As aquisições de trava agora podem ser
     interrompidas por sinais no Windows.

 -- 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: 186, 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: bbb. será recebida por essa thread).

   * Chamar *note sys.exit(): 276. ou levantar a exceção *note
     SystemExit: f30. é o equivalente a chamar *note _thread.exit():
     363e.

   * 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: 8ed. … *note finally:
     1b0. 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: cb. e *note mmap: 94.  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: 364d.

     Explicação dos fundamentos do asyncio.

asyncio fornece um conjunto de APIs de 'alto nível' para:

   * *note executar corrotinas do Python: 364e. simultaneamente e ter
     controle total sobre sua execução;

   * realizar *note IPC e E/S de rede: 364f.;

   * controlar *note subprocessos: 3650.;

   * distribuir tarefas por meio de *note filas: 3651.;

   * *note sincronizar: 3652. 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: f6a, que fornecem APIs
     assíncronas para *note rede: 3653, execução de *note subprocessos:
     3654, tratamento de *note sinais de sistemas operacionais: 3655.
     etc;

   * implementar protocolos eficientes usando *note transportes: 3656.;

   * *note fazer uma ponte: 3657. sobre bibliotecas baseadas em chamadas
     e codificar com a sintaxe de async/await.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

REPL de asyncio
...............

Você pode experimentar um contexto atual ‘asyncio’ no *note REPL: 48b.:

     $ 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'

Levanta um *note evento de auditoria: 1b5d. ‘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: 1b8. também é executado.  Emite eventos de auditoria.

Referência
..........

* Menu:

* Runners::
* Corrotinas e Tarefas::
* Streams::
* Synchronization Primitives::
* Subprocessos::
* Filas::
* Exceções: Exceções<16>.
* Call Graph Introspection::
* Laço de Eventos::
* Futuros::
* Transports and 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: f6a. 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.14/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)

     Execute 'coro' in an asyncio event loop and return the result.

     The argument can be any awaitable object.

     This function runs the awaitable, 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: 1fe8. settings.

     If 'loop_factory' is not ‘None’, it is used to create a new event
     loop; otherwise *note asyncio.new_event_loop(): 365c. 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:
     19a6. 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(): ada.

     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.

     Alterado na versão 3.14: 'coro' can be any awaitable object.

          Nota: The ‘asyncio’ policy system is deprecated and will be
          removed in Python 3.16; from there on, an explicit
          'loop_factory' is needed to configure the event loop.


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: f6a. and *note contextvars.Context: 177.

     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: 1fe8. 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():
     365c. is used and set as current event loop with *note
     asyncio.set_event_loop(): 1a71. if 'loop_factory' is ‘None’.

     Basically, *note asyncio.run(): 2f1. 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)

          Execute 'coro' in the embedded event loop.

          The argument can be any awaitable object.

          If the argument is a coroutine, it is wrapped in a Task.

          An optional keyword-only 'context' argument allows specifying
          a custom *note contextvars.Context: 177. for the code to run
          in.  The runner’s default context is used if context is
          ‘None’.

          Returns the awaitable’s result or raises an exception.

          Esta função não pode ser chamada quando outro laço de eventos
          asyncio está executando na mesma thread.

          Alterado na versão 3.14: 'coro' can be any awaitable object.

      -- Método: close ()

          Close the runner.

          Finalize asynchronous generators, shutdown default executor,
          close the event loop and release embedded *note
          contextvars.Context: 177.

      -- Método: get_loop ()

          Return the event loop associated with the runner instance.

          Nota: *note Runner: 2f3. uses the lazy initialization
          strategy, its constructor doesn’t initialize underlying
          low-level structures.

          Embedded 'loop' and 'context' are created at the *note with:
          186. body entering or the first call of *note run(): 2f1. or
          *note get_loop(): 365f.


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: 252. is raised by ‘Ctrl’-‘C’, *note
KeyboardInterrupt: bbb. exception is raised in the main thread by
default.  However this doesn’t work with *note asyncio: b. because it
can interrupt asyncio internals and can hang the program from exiting.

To mitigate this issue, *note asyncio: b. handles *note signal.SIGINT:
252. as follows:

  1. *note asyncio.Runner.run(): 18a0. installs a custom *note
     signal.SIGINT: 252. handler before any user code is executed and
     removes it when exiting from the function.

  2. The *note Runner: 2f3. creates the main task for the passed
     coroutine for its execution.

  3. When *note signal.SIGINT: 252. is raised by ‘Ctrl’-‘C’, the custom
     signal handler cancels the main task by calling *note
     asyncio.Task.cancel(): 4cd. which raises *note
     asyncio.CancelledError: 4ce. 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(): 18a0. raises *note KeyboardInterrupt:
     bbb.

  4. A user could write a tight loop which cannot be interrupted by
     *note asyncio.Task.cancel(): 4cd, in which case the second
     following ‘Ctrl’-‘C’ immediately raises the *note
     KeyboardInterrupt: bbb. 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::
* Task Cancellation::
* Task Groups::
* Dormindo::
* Executando tarefas concorrentemente::
* Eager Task Factory::
* 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
...................

'Source code:' Lib/asyncio/coroutines.py(1)

__________________________________________________________________

*note Corrotinas: 6ae. 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(): 2f1. 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(): 1c9. para executar corrotinas
     concorrentemente como *note Tasks: 1c7. 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: 4cb. class provides a more modern
     alternative to *note create_task(): 1c9.  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: 4cb.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 18d.  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: 7e2.;

        * 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(): 1c9, 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: dba. é 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(): adc.


File: python.info,  Node: Criando Tarefas,  Next: Task Cancellation,  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,
          eager_start=None, **kwargs)

     Envolva a *note corrotina: 364e. 'coro' em uma *note Task: 1c7. e
     agende sua execução.  Retorne o objeto Task.

     The full function signature is largely the same as that of the
     *note Task: 1c7. constructor (or factory) - all of the keyword
     arguments to this function are passed through to that interface.

     An optional keyword-only 'context' argument allows specifying a
     custom *note contextvars.Context: 177. for the 'coro' to run in.
     The current context copy is created when no 'context' is provided.

     An optional keyword-only 'eager_start' argument allows specifying
     if the task should execute eagerly during the call to create_task,
     or be scheduled later.  If 'eager_start' is not passed the mode set
     by *note loop.set_task_factory(): 1c8. will be used.

     A tarefa é executada no laço e retornada por *note
     get_running_loop(): cf4, *note RuntimeError: 243. é levantado se
     não existir nenhum loop na thread atual.

          Nota: *note asyncio.TaskGroup.create_task(): 1cb. is a new
          alternative leveraging structural concurrency; it allows for
          waiting for a group of related tasks with strong safety
          guarantees.

          Importante: Mantenha uma referência para o resultado dessa
          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.  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))

                   # Add task to the set. This creates a strong reference.
                   background_tasks.add(task)

                   # To prevent keeping references to finished tasks forever,
                   # make each task remove its own reference from the set after
                   # completion:
                   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'.

     Alterado na versão 3.14: Added the 'eager_start' parameter by
     passing on all 'kwargs'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/asyncio/tasks.py


File: python.info,  Node: Task Cancellation,  Next: Task Groups,  Prev: Criando Tarefas,  Up: Corrotinas e Tarefas

5.19.1.9 Task Cancellation
..........................

Tasks can easily and safely be cancelled.  When a task is cancelled,
*note asyncio.CancelledError: 4ce. 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: 4ce. is
explicitly caught, it should generally be propagated when clean-up is
complete.  *note asyncio.CancelledError: 4ce. directly subclasses *note
BaseException: 7cc. so most code will not need to be aware of it.

The asyncio components that enable structured concurrency, like *note
asyncio.TaskGroup: 4cb. and *note asyncio.timeout(): 809, are
implemented using cancellation internally and might misbehave if a
coroutine swallows *note asyncio.CancelledError: 4ce.  Similarly, user
code should not generally call *note uncancel: 4d0.  However, in cases
when suppressing *note asyncio.CancelledError: 4ce. is truly desired, it
is necessary to also call ‘uncancel()’ to completely remove the
cancellation state.


File: python.info,  Node: Task Groups,  Next: Dormindo,  Prev: Task Cancellation,  Up: Corrotinas e Tarefas

5.19.1.10 Task Groups
.....................

Task groups combine a task creation API with a convenient and reliable
way to wait for all tasks in the group to finish.

 -- Classe: asyncio.TaskGroup

     An *note asynchronous context manager: 807. holding a group of
     tasks.  Tasks can be added to the group using *note create_task():
     1c9.  All tasks are awaited when the context manager exits.

     Adicionado na versão 3.11.

      -- Método: create_task (coro, *, name=None, context=None,
               eager_start=None, **kwargs)

          Create a task in this task group.  The signature matches that
          of *note asyncio.create_task(): 1c9.  If the task group is
          inactive (e.g.  not yet entered, already finished, or in the
          process of shutting down), we will close the given ‘coro’.

          Alterado na versão 3.13: Close the given coroutine if the task
          group is not active.

          Alterado na versão 3.14: Passes on all 'kwargs' to *note
          loop.create_task(): 1ca.

Exemplo:

     async def main():
         async with asyncio.TaskGroup() as tg:
             task1 = tg.create_task(some_coro(...))
             task2 = tg.create_task(another_coro(...))
         print(f"Both tasks have completed now: {task1.result()}, {task2.result()}")

The ‘async with’ statement will wait for all tasks in the group to
finish.  While waiting, new tasks may still be added to the group (for
example, by passing ‘tg’ into one of the coroutines and calling
‘tg.create_task()’ in that coroutine).  Once the last task has finished
and the ‘async with’ block is exited, no new tasks may be added to the
group.

The first time any of the tasks belonging to the group fails with an
exception other than *note asyncio.CancelledError: 4ce, the remaining
tasks in the group are cancelled.  No further tasks can then be added to
the group.  At this point, if the body of the ‘async with’ statement is
still active (i.e., *note __aexit__(): 18e5. hasn’t been called yet),
the task directly containing the ‘async with’ statement is also
cancelled.  The resulting *note asyncio.CancelledError: 4ce. will
interrupt an ‘await’, but it will not bubble out of the containing
‘async with’ statement.

Once all tasks have finished, if any tasks have failed with an exception
other than *note asyncio.CancelledError: 4ce, those exceptions are
combined in an *note ExceptionGroup: 4cc. or *note BaseExceptionGroup:
55f. (as appropriate; see their documentation) which is then raised.

Two base exceptions are treated specially: If any task fails with *note
KeyboardInterrupt: bbb. or *note SystemExit: f30, the task group still
cancels the remaining tasks and waits for them, but then the initial
*note KeyboardInterrupt: bbb. or *note SystemExit: f30. is re-raised
instead of *note ExceptionGroup: 4cc. or *note BaseExceptionGroup: 55f.

If the body of the ‘async with’ statement exits with an exception (so
*note __aexit__(): 18e5. is called with an exception set), this is
treated the same as if one of the tasks failed: the remaining tasks are
cancelled and then waited for, and non-cancellation exceptions are
grouped into an exception group and raised.  The exception passed into
*note __aexit__(): 18e5, unless it is *note asyncio.CancelledError: 4ce,
is also included in the exception group.  The same special case is made
for *note KeyboardInterrupt: bbb. and *note SystemExit: f30. as in the
previous paragraph.

Task groups are careful not to mix up the internal cancellation used to
“wake up” their *note __aexit__(): 18e5. with cancellation requests for
the task in which they are running made by other parties.  In
particular, when one task group is syntactically nested in another, and
both experience an exception in one of their child tasks simultaneously,
the inner task group will process its exceptions, and then the outer
task group will receive another cancellation and process its own
exceptions.

In the case where a task group is cancelled externally and also must
raise an *note ExceptionGroup: 4cc, it will call the parent task’s *note
cancel(): 4cd. method.  This ensures that a *note
asyncio.CancelledError: 4ce. will be raised at the next *note await:
18d, so the cancellation is not lost.

Task groups preserve the cancellation count reported by *note
asyncio.Task.cancelling(): 4cf.

Alterado na versão 3.13: Improved handling of simultaneous internal and
external cancellations and correct preservation of cancellation counts.

* Menu:

* Terminating a Task Group::


File: python.info,  Node: Terminating a Task Group,  Up: Task Groups

5.19.1.11 Terminating a Task Group
..................................

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: Task Groups,  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: 2ea. if 'delay'
     is *note nan: 868.


File: python.info,  Node: Executando tarefas concorrentemente,  Next: Eager Task Factory,  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: 3665. 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: 4ce.
     – 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: 4cb.
          '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: Eager Task Factory,  Next: Protegendo contra cancelamento,  Prev: Executando tarefas concorrentemente,  Up: Corrotinas e Tarefas

5.19.1.14 Eager Task Factory
............................

 -- 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): 1c8.),
     coroutines begin execution synchronously during *note Task: 1c7.
     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(): 697, using the provided
     'custom_task_constructor' when creating a new task instead of the
     default *note Task: 1c7.

     'custom_task_constructor' must be a 'callable' with the signature
     matching the signature of *note Task.__init__: 1c7.  The callable
     must return a *note asyncio.Task: 1c7.-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):
     1c8.).

     Adicionado na versão 3.12.


File: python.info,  Node: Protegendo contra cancelamento,  Next: Tempo limite,  Prev: Eager Task Factory,  Up: Corrotinas e Tarefas

5.19.1.15 Protegendo contra cancelamento
........................................

 -- Função: awaitable asyncio.shield (aw)

     Protege um *note objeto aguardável: 3665. de ser *note cancelado:
     4cd.

     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: 4ce.

     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: 807. 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(): 3674.

     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: 4ce. internally,
     transforming it into a *note TimeoutError: a2c. which can be caught
     and handled.

          Nota: The *note asyncio.timeout(): 809. context manager is
          what transforms the *note asyncio.CancelledError: 4ce. into a
          *note TimeoutError: a2c, which means the *note TimeoutError:
          a2c. can only be caught 'outside' of the context manager.

     Example of catching *note TimeoutError: a2c.:

          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(): 809. can
     be rescheduled to a different deadline and inspected.

      -- Classe: asyncio.Timeout (when)

          An *note asynchronous context manager: 807. 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(): 809, 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: 3665. '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: a2c.

     Para evitar o *note cancelamento: 4cd. da tarefa, envolva-a com
     *note shield(): c59.

     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: a2c. immediately.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Raises *note TimeoutError: a2c. instead of
     *note asyncio.TimeoutError: 19ed.


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: dba. and *note Task: 1c7. 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: a2c.
     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: 367b.
                                                            
                                                            
      -- Dado: asyncio.ALL_COMPLETED                        A função irá retornar quando todos os futuros
                                                            encerrarem ou forem cancelados.
                                                            

     Diferente de *note wait_for(): 80a, ‘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: 3665. 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: 4c1. or a plain *note iterator: 4c2.  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: a2c. 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: 4c1. or as a plain *note iterator:
     4c2. (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: 177. 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: 164, ‘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: 13ae. 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:

          def in_thread(loop: asyncio.AbstractEventLoop) -> None:
              # Run some blocking IO
              pathlib.Path("example.txt").write_text("hello world", encoding="utf8")

              # 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=2) == 3

          async def amain() -> None:
              # Get the running loop
              loop = asyncio.get_running_loop()

              # Run something in a thread
              await asyncio.to_thread(in_thread, loop)

     It’s also possible to run the other way around.  Example:

          @contextlib.contextmanager
          def loop_in_thread() -> Generator[asyncio.AbstractEventLoop]:
              loop_fut = concurrent.futures.Future[asyncio.AbstractEventLoop]()
              stop_event = asyncio.Event()

              async def main() -> None:
                  loop_fut.set_result(asyncio.get_running_loop())
                  await stop_event.wait()

              with concurrent.futures.ThreadPoolExecutor(1) as tpe:
                  complete_fut = tpe.submit(asyncio.run, main())
                  for fut in concurrent.futures.as_completed((loop_fut, complete_fut)):
                      if fut is loop_fut:
                          loop = loop_fut.result()
                          try:
                              yield loop
                          finally:
                              loop.call_soon_threadsafe(stop_event.set)
                      else:
                          fut.result()

          # Create a loop in another thread
          with loop_in_thread() as loop:
              # 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=2) == 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: 367e. 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: 1c7. atualmente em execução, ou
     ‘None’ se nenhuma tarefa estiver executando.

     Se 'loop' for ‘None’, então *note get_running_loop(): cf4. é 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: 1c7. ainda não
     concluídos a serem executados pelo laço.

     Se 'loop' for ‘None’, então *note get_running_loop(): cf4. é 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: dba. que executa uma *note
     corrotina: 364e. 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ço de eventos usam agendamento cooperativo: um ciclo de evento
     executa uma Tarefa de cada vez.  Enquanto uma Tarefa aguarda a
     conclusão de um Futuro, o laço de eventos executa outras Tarefas,
     funções de retorno, ou executa operações de IO.

     Use a função de alto nível *note asyncio.create_task(): 1c9. para
     criar Tarefas, ou as funções de baixo nível *note
     loop.create_task(): 1ca. ou *note ensure_future(): e65.
     Instanciação manual de Tarefas é desencorajado.

     Para cancelar uma Tarefa em execução, use o método *note cancel():
     4cd.  Chamar ele fará com que a Tarefa levante uma exceção *note
     CancelledError: 4ce. dentro da corrotina contida.  Se a corrotina
     estiver esperando por um objeto Future durante o cancelamento, o
     objeto Future será cancelado.

     *note cancelled(): 3682. pode ser usado para verificar se a Tarefa
     foi cancelada.  O método retorna ‘True’ se a corrotina envolta não
     suprimiu a exceção *note CancelledError: 4ce. e foi na verdade
     cancelada.

     *note asyncio.Task: 1c7. herda de *note Future: dba. todas as suas
     APIs exceto *note Future.set_result(): 3683. e *note
     Future.set_exception(): e6c.

     An optional keyword-only 'context' argument allows specifying a
     custom *note contextvars.Context: 177. 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.

     An optional keyword-only 'eager_start' argument allows eagerly
     starting the execution of the *note asyncio.Task: 1c7. at task
     creation time.  If set to ‘True’ and the event loop is running, the
     task will start executing the coroutine immediately, until the
     first time the coroutine blocks.  If the coroutine returns or
     raises without blocking, the task will be finished eagerly and will
     skip scheduling to the event loop.

     Alterado na versão 3.7: Adicionado suporte para o módulo *note
     contextvars: 28.

     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 é especificado, e não existe 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: Added the 'eager_start' parameter.

      -- 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: 4ce.

          If the Task’s result isn’t yet available, this method raises
          an *note InvalidStateError: 3686. 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: 4ce.

          Se a Tarefa não estiver 'concluída' ainda, este método levanta
          uma exceção *note InvalidStateError: 3686.

      -- 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():
          cf1. 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(): 1868. 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 foi cancelada, isto retorna uma lista vazia.  Se a
          corrotina foi terminada por uma exceção, isto 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 o número de frames
          máximo para retornar; 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 situação da pilha de execução para esta
          Tarefa.

          Isto produz uma saída similar a do módulo traceback para
          frames recuperados por *note get_stack(): 368a.

          O argumento 'limit' é passado para *note get_stack(): 368a.
          diretamente.

          The 'file' argument is an I/O stream to which the output is
          written; by default output is written to *note sys.stdout:
          cc0.

      -- Método: get_coro ()

          Retorna o objeto corrotina contido pela *note Task: 1c7.

               Nota: This will return ‘None’ for Tasks which have
               already completed eagerly.  See the *note Eager Task
               Factory: 3670.

          Adicionado na versão 3.8.

          Alterado na versão 3.12: Newly added eager task execution
          means result may be ‘None’.

      -- Método: get_context ()

          Return the *note contextvars.Context: 177. object associated
          with the task.

          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, o qual é então
          convertido para uma string.

          Na implementação padrão da Tarefa, o nome será visível na
          *note repr(): 1c1. 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’.

          The method arranges for a *note CancelledError: 4ce. exception
          to be thrown into the wrapped coroutine on the next cycle of
          the event loop.

          The coroutine then has a chance to clean up or even deny the
          request by suppressing the exception with a *note try: 8ed. …
          … ‘except CancelledError’ … *note finally: 1b0. block.
          Therefore, unlike *note Future.cancel(): 1abc, *note
          Task.cancel(): 4cd. 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(): 4d0. in addition to catching the
          exception.

          Alterado na versão 3.9: Adicionado o parâmetro 'msg'.

          Alterado na versão 3.11: The ‘msg’ parameter is propagated
          from cancelled task to its awaiter.

          O seguinte exemplo ilustra como corrotinas podem interceptar o
          cancelamento de requisições:

               async def cancel_me():
                   print('cancel_me(): before sleep')

                   try:
                       # Wait for 1 hour
                       await asyncio.sleep(3600)
                   except asyncio.CancelledError:
                       print('cancel_me(): cancel sleep')
                       raise
                   finally:
                       print('cancel_me(): after sleep')

               async def main():
                   # Create a "cancel_me" Task
                   task = asyncio.create_task(cancel_me())

                   # Wait for 1 second
                   await asyncio.sleep(1)

                   task.cancel()
                   try:
                       await task
                   except asyncio.CancelledError:
                       print("main(): cancel_me is cancelled now")

               asyncio.run(main())

               # Expected output:
               #
               #     cancel_me(): before sleep
               #     cancel_me(): cancel sleep
               #     cancel_me(): after sleep
               #     main(): cancel_me is cancelled now

      -- Método: cancelled ()

          Retorna ‘True’ se a Tarefa for 'cancelada'.

          A Tarefa é 'cancelada' quando o cancelamento foi requisitado
          com *note cancel(): 4cd. e a corrotina contida propagou a
          exceção *note CancelledError: 4ce. gerada nela.

      -- Método: uncancel ()

          Decrement the count of cancellation requests to this Task.

          Returns the remaining number of cancellation requests.

          Note that once execution of a cancelled task completed,
          further calls to *note uncancel(): 4d0. are ineffective.

          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 Task Groups: 366a. and *note
          asyncio.timeout(): 809. to continue running, isolating
          cancellation to the respective structured block.  For example:

               async def make_request_with_timeout():
                   try:
                       async with asyncio.timeout(1):
                           # Structured block affected by the timeout:
                           await make_request()
                           await make_another_request()
                   except TimeoutError:
                       log("There was a timeout")
                   # Outer code not affected by the timeout:
                   await unrelated_code()

          While the block with ‘make_request()’ and
          ‘make_another_request()’ might get cancelled due to the
          timeout, ‘unrelated_code()’ should continue running even in
          case of the timeout.  This is implemented with *note
          uncancel(): 4d0.  *note TaskGroup: 4cb. context managers use
          *note uncancel(): 4d0. in a similar fashion.

          If end-user code is, for some reason, suppressing cancellation
          by catching *note CancelledError: 4ce, it needs to call this
          method to remove the cancellation state.

          When this method decrements the cancellation count to zero,
          the method checks if a previous *note cancel(): 4cd. call had
          arranged for *note CancelledError: 4ce. to be thrown into the
          task.  If it hasn’t been thrown yet, that arrangement will be
          rescinded (by resetting the internal ‘_must_cancel’ flag).

     Alterado na versão 3.13: Changed to rescind pending cancellation
     requests upon reaching zero.

      -- Método: cancelling ()

          Return the number of pending cancellation requests to this
          Task, i.e., the number of calls to *note cancel(): 4cd. less
          the number of *note uncancel(): 4d0. calls.

          Note that if this number is greater than zero but the Task is
          still executing, *note cancelled(): 3682. will still return
          ‘False’.  This is because this number can be lowered by
          calling *note uncancel(): 4d0, which can lead to the task not
          being cancelled after all if the cancellation requests go down
          to zero.

          This method is used by asyncio’s internals and isn’t expected
          to be used by end-user code.  See *note uncancel(): 4d0. for
          more details.

          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: 3691. 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: 1b68. e *note StreamWriter: 19af.

     'limit' determina o tamanho limite do buffer usado pela instância
     *note StreamReader: 1b68. retornada.  Por padrão, 'limit' é
     definido em 64 KiB.

     O resto dos argumentos é passado diretamente para *note
     loop.create_connection(): 80d.

          Nota: The 'sock' argument transfers ownership of the socket to
          the *note StreamWriter: 19af. created.  To close the socket,
          call its *note close(): 3692. 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: 1b68. e *note StreamWriter: 19af.

     'client_connected_cb' pode ser simplesmente algo chamável ou uma
     *note função de corrotina: 364e.; se ele for uma função de
     corrotina, ele será automaticamente agendado como uma *note Task:
     1c7.

     'limit' determina o tamanho limite do buffer usado pela instância
     *note StreamReader: 1b68. retornada.  Por padrão, 'limit' é
     definido em 64 KiB.

     O resto dos argumentos são passados diretamente para *note
     loop.create_server(): cfc.

          Nota: The 'sock' argument transfers ownership of the socket to
          the server created.  To close the socket, call the server’s
          *note close(): 3693. 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(): d02, mas opera em soquetes Unix.

     Veja também a documentação do método *note
     loop.create_unix_connection(): 3695.

          Nota: The 'sock' argument transfers ownership of the socket to
          the *note StreamWriter: 19af. created.  To close the socket,
          call its *note close(): 3692. method.

     *note Disponibilidade: 1fed.: Unix.

     Alterado na versão 3.7: Added the 'ssl_handshake_timeout'
     parameter.  The 'path' parameter can now be a *note path-like
     object: 59a.

     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(): d03, 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(): 4c4.

          Nota: The 'sock' argument transfers ownership of the socket to
          the server created.  To close the socket, call the server’s
          *note close(): 3693. method.

     *note Disponibilidade: 1fed.: 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: 59a.

     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<16>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: f68, the object
     supports the *note async for: c94. statement.

     Não é recomendado instanciar objetos 'StreamReader' diretamente;
     use *note open_connection(): d02. e *note start_server(): d03. 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: 192.  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: 1bc2. se EOF é atingido
          antes que 'n' sejam lidos.  Use o atributo *note
          IncompleteReadError.partial: 369b. 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: 369c. é
          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: 1bc2. é
          levantada, e o buffer interno é redefinido.  O atributo *note
          IncompleteReadError.partial: 369b. 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: 369c, 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: 608. of separators.

      -- Método: at_eof ()

          Retorna ‘True’ se o buffer estiver vazio e *note feed_eof():
          3698. foi chamado.


File: python.info,  Node: StreamWriter,  Next: Exemplos<16>,  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(): d02. e *note start_server(): d03. 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(): 36a2, ‘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(): c86. 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(): 1a57.
          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: 354.

             * '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(): 3692. 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<16>,  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<16>

5.19.1.26 Cliente para eco TCP usando streams
.............................................

Cliente de eco TCP usando a função *note asyncio.open_connection():
d02.:

     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: 36a7. usa o método
de baixo nível *note loop.create_connection(): 80d.


File: python.info,  Node: Servidor eco TCP usando streams,  Next: Obtém headers HTTP,  Prev: Cliente para eco TCP usando streams,  Up: Exemplos<16>

5.19.1.27 Servidor eco TCP usando streams
.........................................

Servidor eco TCP usando a função *note asyncio.start_server(): d03.:

     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: 36aa. utiliza o método
*note loop.create_server(): cfc.


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<16>

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<16>

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(): d02.:

     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: 36ae. utiliza um protocolo de baixo nível e o
método *note loop.create_connection(): 80d.

O exemplo para *note monitorar um descritor de arquivo para leitura de
eventos: 36af. utiliza o método de baixo nível *note loop.add_reader():
36b0. 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: f3. module with two important caveats:

   * asyncio primitives are not thread-safe, therefore they should not
     be used for OS thread synchronization (use *note threading: f3. for
     that);

   * methods of these synchronization primitives do not accept the
     'timeout' argument; use the *note asyncio.wait_for(): 80a. function
     to perform operations with timeouts.

asyncio has the following basic synchronization primitives:

   * *note Lock: c5a.

   * *note Event: 2f2.

   * *note Condition: c5b.

   * *note Semaphore: c5c.

   * *note BoundedSemaphore: c5d.

   * *note Barrier: 80b.

__________________________________________________________________

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 185.
     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():
          36b5. 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: 243. 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(): 36b9. method and reset to 'false' with the
     *note clear(): 36ba. method.  The *note wait(): 36bb. 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(): 36b9.

      -- 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(): 36bb. will now
          block until the *note set(): 36b9. 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: 2f2. and a *note Lock: c5a.  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: c5a. 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: 185.
     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: 243. 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(): 1933, 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: 243. error is raised.

      -- Método: release ()

          Release the underlying lock.

          When invoked on an unlocked lock, a *note RuntimeError: 243.
          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: 243. is raised.

          This method releases the underlying lock, and then blocks
          until it is awakened by a *note notify(): 1933. or *note
          notify_all(): 36c1. 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(): 195c. again.  For this reason, you
          may prefer to use *note wait_for(): 36c3. 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(): 195c. 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(): 195d. call and incremented by each *note
     release(): 36c5. call.  The counter can never go below zero; when
     *note acquire(): 195d. finds that it is zero, it blocks, waiting
     until some task calls *note release(): 36c5.

     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: 2ea. 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: 185.
     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(): 36c5. 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: c5d, *note Semaphore: c5c.
          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: c5c. that raises
     a *note ValueError: 2ea. in *note release(): 36c5. 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(): 36c9. method and would be blocked until
     the specified number of tasks end up waiting on *note wait(): 36c9.
     At that point all of the waiting tasks would unblock
     simultaneously.

     *note async with: 185. can be used as an alternative to awaiting on
     *note wait(): 36c9.

     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: 80c.
          exception if the barrier is broken or reset while a task is
          waiting.  It could raise a *note CancelledError: 4ce. 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: 80c.
          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(): 36c9. to fail with the *note
          BrokenBarrierError: 80c.  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: 243, is raised
     when the *note Barrier: 80b. 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: 186. 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: 36d4.

* Menu:

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

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/subprocess.py

   (2) 
https://github.com/python/cpython/tree/3.14/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: 1b68. para *note stdout: 36d6. e *note stderr:
     36d7. (se *note subprocess.PIPE: d74. for passado para os
     argumentos 'stdout' e 'stderr').

     Retorna uma instância de *note Process: 36d8.

     Veja a documentação de *note loop.subprocess_exec(): 36d9. para
     outros parâmetros.

     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: 1b68. para *note stdout: 36d6. e *note stderr:
     36d7. (se *note subprocess.PIPE: d74. for passado para os
     argumentos 'stdout' e 'stderr').

     Retorna uma instância de *note Process: 36d8.

     Veja a documentação de *note loop.subprocess_shell(): 36da. para
     outros parâmetros.

          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(): 57b. 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: 812. for usada.  Veja *note Suporte para
     subprocesso para Windows: 36db. para detalhes.

Ver também
..........

asyncio também tem as seguintes APIs 'de baixo nível' para trabalhar com
subprocessos: *note loop.subprocess_exec(): 36d9, *note
loop.subprocess_shell(): 36da, *note loop.connect_read_pipe(): 36dc,
*note loop.connect_write_pipe(): 36dd, assim como os *note Transportes
de Subprocesso: 36de. e *note Protocolos de Subprocesso: 36df.

   ---------- 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: 36e2. irá apontar para uma instância *note
     StreamWriter: 19af.

     Se 'PIPE' for passado para os argumentos 'stdout' ou 'stderr', os
     atributos *note Process.stdout: 36d6. e *note Process.stderr: 36d7.
     irão apontar para instâncias *note StreamReader: 1b68.

 -- 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: 1cca. 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(): c5f. e *note
create_subprocess_shell(): c60. 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(): c5f. e *note
     create_subprocess_shell(): c60.

     Esta classe é projetada para ter uma API similar a classe *note
     subprocess.Popen: 4b1, 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(): 35ed.;

        * os métodos *note communicate(): 19db. e *note wait(): 36e6.
          não têm um parâmetro 'timeout': utilize a função ‘wait_for()’;

        * o método *note Process.wait(): 36e6. é assíncrono, enquanto
          que o método *note subprocess.Popen.wait(): ed4. é
          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: 367e.

     Veja também a seção *note Subprocesso e Threads: 36e7.

      -- Método: async wait ()

          Aguarda o processo filho encerrar.

          Define e retorna o atributo *note returncode: 36e8.

               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(): 19db. 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: 192.) que será enviada para o processo filho.

          Retorna uma tupla ‘(stdout_data, stderr_data)’.

          Se qualquer exceção *note BrokenPipeError: 1252. ou *note
          ConnectionResetError: 1255. 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: 15d0. é um apelido para
               *note terminate(): 36e9.  ‘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: 15d0. 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: d44. para o
          processo filho.

          No Windows, este método é um atalho para *note terminate():
          36e9.

      -- Atributo: stdin

          Fluxo de entrada padrão (*note StreamWriter: 19af.) ou ‘None’
          se o processo foi criado com ‘stdin=None’.

      -- Atributo: stdout

          Fluxo de saída padrão (*note StreamReader: 1b68.) ou ‘None’ se
          o processo foi criado com ‘stdout=None’.

      -- Atributo: stderr

          Erro de fluxo padrão (*note StreamReader: 1b68.) ou ‘None’ se
          o processo foi criado com ‘stderr=None’.

          Aviso: Use o método *note communicate(): 19db. ao invés de
          *note process.stdin.write(): 36e2, *note await
          process.stdout.read(): 36d6. ou *note await
          process.stderr.read(): 36d7.  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(): c60, 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<17>.


File: python.info,  Node: Subprocesso e Threads,  Next: Exemplos<17>,  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: 812. apenas (por padrão), a classe *note
SelectorEventLoop: 312. não tem suporte a subprocesso.

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: 367e.


File: python.info,  Node: Exemplos<17>,  Prev: Subprocesso e Threads,  Up: Interagindo com subprocessos

5.19.1.42 Exemplos
..................

Um exemplo de uso da classe *note Process: 36d8. para controlar um
subprocesso e a classe *note StreamReader: 1b68. para ler a partir da
sua saída padrão.  O subprocesso é criado pela função *note
create_subprocess_exec(): c5f.:

     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: 36ee. escrito usando APIs de baixo
nível.


File: python.info,  Node: Filas,  Next: Exceções<16>,  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: bb.  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(): 80a. para realizar operações de
fila com um tempo limite timeout.

Veja também a seção *note Exemplos: 36f2. 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<15>.
* Exemplos: Exemplos<18>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 36f4.

     Ao contrário da biblioteca padrão de threading *note queue: bb, o
     tamanho da fila é sempre conhecido e pode ser obtido através da
     chamada do método *note qsize(): 36f5.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Esta classe *note não é segura para thread: 367e.

      -- 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: 36f6. itens na fila.

          Se a fila foi inicializada com ‘maxsize=0’ (o padrão), então
          *note full(): 36f8. 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: 4c7. 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: 36fa.

      -- 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(): fbb. 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(): fba. 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: 4c7. 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: 36fd.

      -- Método: qsize ()

          Retorna o número de itens na fila.

      -- Método: shutdown (immediate=False)

          Put a *note Queue: c5e. instance into a shutdown mode.

          The queue can no longer grow.  Future calls to *note put():
          36fb. raise *note QueueShutDown: 4c7.  Currently blocked
          callers of *note put(): 36fb. will be unblocked and will raise
          *note QueueShutDown: 4c7. in the formerly blocked thread.

          If 'immediate' is false (the default), the queue can be wound
          down normally with *note get(): 36f4. calls to extract tasks
          that have already been loaded.

          And if *note task_done(): fbb. is called for each remaining
          task, a pending *note join(): fba. will be unblocked normally.

          Once the queue is empty, future calls to *note get(): 36f4.
          will raise *note QueueShutDown: 4c7.

          If 'immediate' is true, the queue is terminated immediately.
          The queue is drained to be completely empty.  All callers of
          *note join(): fba. are unblocked regardless of the number of
          unfinished tasks.  Blocked callers of *note get(): 36f4. are
          unblocked and will raise *note QueueShutDown: 4c7. because the
          queue is empty.

          Use caution when using *note join(): fba. with 'immediate' set
          to true.  This unblocks the join even when no work has been
          done on the tasks, violating the usual invariant for joining a
          queue.

          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(): 36f4.
          usado para buscar um item de trabalho, uma chamada subsequente
          para *note task_done(): fbb. avisa à fila, que o processamento
          no item de trabalho está concluído.

          Se um *note join(): fba. estiver sendo bloqueado no momento,
          ele irá continuar quando todos os itens tiverem sido
          processados (significando que uma chamada *note task_done():
          fbb. foi recebida para cada item que foi chamado o método
          *note put(): 36fb. para colocar na fila).

          Levanta *note ValueError: 2ea. 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: c5e.; 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<15>,  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: c5e. que recupera as entradas
     adicionadas mais recentemente primeiro (último a entrar, primeiro a
     sair).


File: python.info,  Node: Exceções<15>,  Next: Exemplos<18>,  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(): 36f9.
     é chamado em uma fila vazia.

 -- Exceção: asyncio.QueueFull

     Exceção levantada quando o método *note put_nowait(): 36fc. é
     chamado em uma fila que atingiu seu 'maxsize'.

 -- Exceção: asyncio.QueueShutDown

     Exceção levantada quando *note put(): 36fb. ou *note get(): 36f4. é
     chamado em uma fila que foi desligada.

     Adicionado na versão 3.13.


File: python.info,  Node: Exemplos<18>,  Prev: Exceções<15>,  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<16>,  Next: Call Graph Introspection,  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: a2c, 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: a2c.

 -- 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: 4ce. é agora uma
     subclasse de *note BaseException: 7cc. em vez de *note Exception:
     bc3.

 -- Exceção: asyncio.InvalidStateError

     Estado interno inválido de *note Task: 1c7. ou *note Future: dba.

     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: 243.

 -- Exceção: asyncio.IncompleteReadError

     A operação de leitura solicitada não foi totalmente concluída.

     Levantada pelas *note APIs de fluxo de asyncio: 364f.

     Esta exceção é uma subclasse de *note EOFError: 14d5.

      -- Atributo: expected

          O número total (*note int: 19b.) de bytes esperados.

      -- Atributo: partial

          Uma string de *note bytes: 192. 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: 364f.

      -- Atributo: consumed

          O número total de bytes a serem consumidos.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/exceptions.py


File: python.info,  Node: Call Graph Introspection,  Next: Laço de Eventos,  Prev: Exceções<16>,  Up: asyncio — E/S assíncrona

5.19.1.50 Call Graph Introspection
..................................

'Source code:' Lib/asyncio/graph.py(1)

__________________________________________________________________

asyncio has powerful runtime call graph introspection utilities to trace
the entire call graph of a running 'coroutine' or 'task', or a suspended
'future'.  These utilities and the underlying machinery can be used from
within a Python program or by external profilers and debuggers.

Adicionado na versão 3.14.

 -- Função: asyncio.print_call_graph (future=None, /, *, file=None,
          depth=1, limit=None)

     Print the async call graph for the current task or the provided
     *note Task: 1c7. or *note Future: dba.

     This function prints entries starting from the top frame and going
     down towards the invocation point.

     The function receives an optional 'future' argument.  If not
     passed, the current running task will be used.

     If the function is called on 'the current task', the optional
     keyword-only 'depth' argument can be used to skip the specified
     number of frames from top of the stack.

     If the optional keyword-only 'limit' argument is provided, each
     call stack in the resulting graph is truncated to include at most
     ‘abs(limit)’ entries.  If 'limit' is positive, the entries left are
     the closest to the invocation point.  If 'limit' is negative, the
     topmost entries are left.  If 'limit' is omitted or ‘None’, all
     entries are present.  If 'limit' is ‘0’, the call stack is not
     printed at all, only “awaited by” information is printed.

     If 'file' is omitted or ‘None’, the function will print to *note
     sys.stdout: cc0.

     'Example:'

     The following Python code:

          import asyncio

          async def test():
              asyncio.print_call_graph()

          async def main():
              async with asyncio.TaskGroup() as g:
                  g.create_task(test(), name='test')

          asyncio.run(main())

     irá exibir:

          * Task(name='test', id=0x1039f0fe0)
          + Call stack:
          |   File 't2.py', line 4, in async test()
          + Awaited by:
             * Task(name='Task-1', id=0x103a5e060)
                + Call stack:
                |   File 'taskgroups.py', line 107, in async TaskGroup.__aexit__()
                |   File 't2.py', line 7, in async main()

 -- Função: asyncio.format_call_graph (future=None, /, *, depth=1,
          limit=None)

     Like *note print_call_graph(): 1cd, but returns a string.  If
     'future' is ‘None’ and there’s no current task, the function
     returns an empty string.

 -- Função: asyncio.capture_call_graph (future=None, /, *, depth=1,
          limit=None)

     Capture the async call graph for the current task or the provided
     *note Task: 1c7. or *note Future: dba.

     The function receives an optional 'future' argument.  If not
     passed, the current running task will be used.  If there’s no
     current task, the function returns ‘None’.

     If the function is called on 'the current task', the optional
     keyword-only 'depth' argument can be used to skip the specified
     number of frames from top of the stack.

     Returns a ‘FutureCallGraph’ data class object:

        * ‘FutureCallGraph(future, call_stack, awaited_by)’

               Where 'future' is a reference to a *note Future: dba. or
               a *note Task: 1c7. (or their subclasses.)

               ‘call_stack’ is a tuple of ‘FrameCallGraphEntry’ objects.

               ‘awaited_by’ is a tuple of ‘FutureCallGraph’ objects.

        * ‘FrameCallGraphEntry(frame)’

               Where 'frame' is a frame object of a regular Python
               function in the call stack.

* Menu:

* Low level utility functions::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/asyncio/graph.py


File: python.info,  Node: Low level utility functions,  Up: Call Graph Introspection

5.19.1.51 Low level utility functions
.....................................

To introspect an async call graph asyncio requires cooperation from
control flow structures, such as *note shield(): c59. or *note
TaskGroup: 4cb.  Any time an intermediate *note Future: dba. object with
low-level APIs like *note Future.add_done_callback(): cf1. is involved,
the following two functions should be used to inform asyncio about how
exactly such intermediate future objects are connected with the tasks
they wrap or control.

 -- Função: asyncio.future_add_to_awaited_by (future, waiter, /)

     Record that 'future' is awaited on by 'waiter'.

     Both 'future' and 'waiter' must be instances of *note Future: dba.
     or *note Task: 1c7. or their subclasses, otherwise the call would
     have no effect.

     A call to ‘future_add_to_awaited_by()’ must be followed by an
     eventual call to the *note future_discard_from_awaited_by(): 3712.
     function with the same arguments.

 -- Função: asyncio.future_discard_from_awaited_by (future, waiter, /)

     Record that 'future' is no longer awaited on by 'waiter'.

     Both 'future' and 'waiter' must be instances of *note Future: dba.
     or *note Task: 1c7. or their subclasses, otherwise the call would
     have no effect.


File: python.info,  Node: Laço de Eventos,  Next: Futuros,  Prev: Call Graph Introspection,  Up: asyncio — E/S assíncrona

5.19.1.52 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(): 2f1, 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: 243. 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(): cf4. é preferido ao invés de *note
     get_event_loop(): 2f0. em corrotinas e funções de retorno.

     Como observado acima, considere usar também a função de alto nível
     *note asyncio.run(): 2f1. ao invés de usar funções de baixo nível
     para manualmente criar e fechar um laço de eventos.

     Alterado na versão 3.14: Raises a *note RuntimeError: 243. if there
     is no current event loop.

          Nota: The ‘asyncio’ policy system is deprecated and will be
          removed in Python 3.16; from there on, this function will
          return the current running event loop if present else it will
          return the loop set by *note set_event_loop(): 1a71.

 -- 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(): 2f0,
*note set_event_loop(): 1a71, e *note new_event_loop(): 365c. podem ser
alteradas *note definindo uma política de laço de eventos customizada:
3716.

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: 3717. é a documentação de
     referência das APIs de laço de eventos;

   * A seção *note Tratadores de função de retorno: 3718. documenta as
     instâncias das classes *note Handle: 1d39. e *note TimerHandle:
     1a15, que são retornadas por métodos de agendamento tais como *note
     loop.call_soon(): cee. e *note loop.call_later(): d00.;

   * A seção *note Objetos Server: 3719. documenta tipos retornados a
     partir de métodos de laço de eventos, como *note
     loop.create_server(): cfc.;

   * A seção *note Implementações do Laço de Eventos: 371a. documenta as
     classes *note SelectorEventLoop: 312. e *note ProactorEventLoop:
     812.;

   * A seção *note Exemplos: 371b. 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<19>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/asyncio/events.py

   (2) 
https://github.com/python/cpython/tree/3.14/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.53 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.54 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:
     dba.) seja completada.

     Se o argumento é um *note objeto corrotina: 364e, ele é
     implicitamente agendado para executar como uma *note asyncio.Task:
     1c7.

     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(): e6b. seja chamado.

     If *note stop(): e6b. is called before *note run_forever(): 371e.
     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(): e6b. for chamado enquanto *note run_forever():
     371e. 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(): 371e. ou *note run_until_complete(): e66.
     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: 2327.
     objects to close with an *note aclose(): acb. 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(): 2f1. 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: 93e.  Uma vez que
     este método tenha sido chamado, usar o executor padrão com *note
     loop.run_in_executor(): adc. levantará um *note RuntimeError: 243.

     O parâmetro 'timeout' especifica a quantidade de tempo (em *note
     float: 196. 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: 4d1.
     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():
          2f1, 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.55 Agendando funções de retorno
......................................

 -- Método: loop.call_soon (callback, *args, context=None)

     Agenda a 'função de retorno' *note callback: 2c3f. para ser chamada
     com argumentos 'args' na próxima iteração do laço de eventos.

     Return an instance of *note asyncio.Handle: 1d39, 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: 177. for the 'callback' to run in.
     Callbacks use the current context when no 'context' is provided.

     Unlike *note call_soon_threadsafe(): cef, this method is not
     thread-safe.

 -- Método: loop.call_soon_threadsafe (callback, *args, context=None)

     A thread-safe variant of *note call_soon(): cee.  When scheduling
     callbacks from another thread, this function 'must' be used, since
     *note call_soon(): cee. 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: 243. 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: 367e. 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: b. não
     permite passar argumentos nomeados.  Para fazer isso, use *note
     functools.partial(): 216.:

          # 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.56 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: 1a15. é 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(): 216.

     Um argumento opcional somente-nomeado 'context' permite especificar
     um *note contextvars.Context: 177. 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(): d00. 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(): 3725.

     O comportamento deste método é o mesmo que *note call_later(): d00.

     Uma instância de *note asyncio.TimerHandle: 1a15. é retornada, a
     qual pode ser usada para cancelar a função de retorno.

          Nota: For performance, callbacks scheduled with *note
          loop.call_at(): cf0. 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: 196, 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(): c58.

   ---------- 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.57 Criando Futures e Tasks
.................................

 -- Método: loop.create_future ()

     Cria um objeto *note asyncio.Future: dba. 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,
          eager_start=None, **kwargs)

     Schedule the execution of *note coroutine: 364e. 'coro'.  Return a
     *note Task: 1c7. object.

     Laços de eventos de terceiros podem usar suas próprias subclasses
     de *note Task: 1c7. para interoperabilidade.  Neste caso, o tipo do
     resultado é uma subclasse de *note Task: 1c7.

     The full function signature is largely the same as that of the
     *note Task: 1c7. constructor (or factory) - all of the keyword
     arguments to this function are passed through to that interface.

     Se o argumento 'name' for fornecido e não é ‘None’, ele é definido
     como o nome da tarefa, usando *note Task.set_name(): bc6.

     An optional keyword-only 'context' argument allows specifying a
     custom *note contextvars.Context: 177. for the 'coro' to run in.
     The current context copy is created when no 'context' is provided.

     An optional keyword-only 'eager_start' argument allows specifying
     if the task should execute eagerly during the call to create_task,
     or be scheduled later.  If 'eager_start' is not passed the mode set
     by *note loop.set_task_factory(): 1c8. will be used.

     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: Added ‘kwargs’ which passes on arbitrary
     extra parameters, including ‘name’ and ‘context’.

     Alterado na versão 3.13.4: Rolled back the change that passes on
     'name' and 'context' (if it is None), while still passing on other
     arbitrary keyword arguments (to avoid breaking backwards
     compatibility with 3.13.3).

     Alterado na versão 3.14: All 'kwargs' are now passed on.  The
     'eager_start' parameter works with eager task factories.

 -- Método: loop.set_task_factory (factory)

     Define a factory da tarefa que será usada por *note
     loop.create_task(): 1ca.

     If 'factory' is ‘None’ the default task factory will be set.
     Otherwise, 'factory' must be a 'callable' with the signature
     matching ‘(loop, coro, **kwargs)’, where 'loop' is a reference to
     the active event loop, and 'coro' is a coroutine object.  The
     callable must pass on all 'kwargs', and return a *note
     asyncio.Task: 1c7.-compatible object.

     Alterado na versão 3.13.3: Required that all 'kwargs' are passed on
     to *note asyncio.Task: 1c7.

     Alterado na versão 3.13.4: 'name' is no longer passed to task
     factories.  'context' is no longer passed to task factories if it
     is ‘None’.

     Alterado na versão 3.14: 'name' and 'context' are now
     unconditionally passed on to task factories again.

 -- Método: loop.get_task_factory ()

     Retorna uma factory de tarefa ou ‘None’ se a factory 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.58 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'.

     The socket family can be either *note AF_INET: 1abf. or *note
     AF_INET6: 1ac0. depending on 'host' (or the 'family' argument, if
     provided).

     The socket type will be *note SOCK_STREAM: 14ef.

     'protocol_factory' deve ser um chamável que retorne uma
     implementação do *note protocolo asyncio: 3728.

     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: 3729. é criado
          para ela.

       2. 'protocol_factory' é chamada sem argumentos e é esperada que
          retorne uma instância de *note protocolo: 3728.

       3. A instância de protocolo é acoplada com o transporte, através
          da chamada do seu método *note connection_made(): 372a.

       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: 354, este contexto é
          usado para criar o transporte; se 'ssl' for *note True: dfb,
          um contexto padrão retornado de *note
          ssl.create_default_context(): 479. é usado.

          Ver também
          ..........

          *note Considerações de segurança sobre SSL/TLS: 372b.

        * '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: d1.

        * '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(): e02.
          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:
          f95. 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(): 372c. 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: 812.

     Alterado na versão 3.6: The socket option *note socket.TCP_NODELAY:
     d60. 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(): d02. é uma API alternativa de
     alto nível.  Ela retorna um par de (*note StreamReader: 1b68, *note
     StreamWriter: 19af.) 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: 1abf, *note
     AF_INET6: 1ac0, or *note AF_UNIX: 1ac2, depending on 'host' (or the
     'family' argument, if provided).

     The socket type will be *note SOCK_DGRAM: 14ee.

     'protocol_factory' deve ser algo chamável, retornando uma
     implementação de *note protocolo: 3728.

     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(): e02.

               Nota: On Windows, when using the proactor event loop with
               ‘local_addr=None’, an *note OSError: 2bf. 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(): e02.

        * 'family', 'proto', 'flags' são os endereços familiares,
          protocolo e flags opcionais a serem passados para *note
          getaddrinfo(): e02. para resolução do 'host'.  Se fornecido,
          esses devem ser todos inteiros do módulo de constantes *note
          socket: d1. 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: d60. 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: f95. pre-existente, já
          conectado, para ser usado pelo transporte.  Se especificado,
          'local_addr' e 'remote_addr' devem ser omitidos (devem ser
          *note None: 87a.).

               Nota: The 'sock' argument transfers ownership of the
               socket to the transport created.  To close the socket,
               call the transport’s *note close(): 372c. method.

     Veja *note protocolo UDP eco cliente: 372d. e *note protocolo UDP
     eco servidor: 372e. 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: d60. 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: d60. 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: 1ac2.; socket type will be
     *note SOCK_STREAM: 14ef.

     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: 169, *note bytes: 192, e caminhos *note Path:
     265. são suportados.

     Veja a documentação do método *note loop.create_connection(): 80d.
     para informações a respeito de argumentos para este método.

     *note Disponibilidade: 1fed.: 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: 59a.

     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.59 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: 14ef.)
     listening on 'port' of the 'host' address.

     Retorna um objeto *note Server: cfb.

     Argumentos:

        * 'protocol_factory' deve ser algo chamável, retornando uma
          implementação de *note protocolo: 3728.

        * 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: 1abf. or
          *note AF_INET6: 1ac0. 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: 3730.).

        * 'flags' é uma máscara de bits para *note getaddrinfo(): e02.

        * '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(): 3693. method.

        * 'backlog' é o número máximo de conexões enfileiradas passadas
          para *note listen(): 1054. (padrão é 100).

        * 'ssl' pode ser definido para uma instância de *note
          SSLContext: 354. 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(): cfd. ou *note
          Server.serve_forever(): cfe. para fazer o servidor começar a
          aceitar conexões.

     Alterado na versão 3.5: Adicionado suporte para SSL/TLS na *note
     ProactorEventLoop: 812.

     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: d60. 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(): d03. é uma API alternativa de alto
     nível que retorna um par de *note StreamReader: 1b68. e *note
     StreamWriter: 19af. 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(): cfc. but works with the
     *note AF_UNIX: 1ac2. 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: 169, *note bytes: 192, e caminhos *note Path:
     265. 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(): cfc. para
     informações sobre argumentos para este método.

     *note Disponibilidade: 1fed.: 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: 265.

     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: 3728.

        * 'sock' é um objeto soquete pré-existente retornado a partir de
          *note socket.accept: f96.

               Nota: The 'sock' argument transfers ownership of the
               socket to the transport created.  To close the socket,
               call the transport’s *note close(): 372c. method.

        * 'ssl' pode ser definido para um *note SSLContext: 354. 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.60 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(): cf8. 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(): 159e. 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: 3708. 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.61 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(): cfc. e *note create_connection(): 80d.
          retornam.

        * 'sslcontext': uma instância configurada de *note SSLContext:
          354.

        * 'server_side' informe ‘True’ quando uma conexão no lado do
          servidor estiver sendo atualizada (como a que é criada por
          *note create_server(): cfc.).

        * '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.62 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(): 216. *note para passar argumentos
     nomeados: 3722. 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: 3738. 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.63 Trabalhando com objetos soquete diretamente
.....................................................

Em geral, implementações de protocolo que usam APIs baseadas em
transporte, tais como *note loop.create_connection(): 80d. e *note
loop.create_server(): cfc. 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: f95. diretamente é mais conveniente.

 -- Método: async loop.sock_recv (sock, nbytes)

     Recebe até 'nbytes' do 'sock'.  Versão assíncrona de *note
     socket.recv(): f98.

     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: dba.  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(): 1519.

     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(): f99.

     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(): 151a.

     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(): f9c.

     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: dba.  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(): f9d.

     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(): f97.

     '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(): b51.  Se não estiver, *note
     loop.getaddrinfo(): e02. será usado para resolver 'address'.

     Ver também
     ..........

     *note loop.create_connection(): 80d. e *note
     asyncio.open_connection(): d02.

 -- Método: async loop.sock_accept (sock)

     Aceita uma conexão.  Modelado baseado no método bloqueante *note
     socket.accept(): f96.

     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: dba.  Desde o Python 3.7, este é um
     método ‘async def’.

     Ver também
     ..........

     *note loop.create_server(): cfc. e *note start_server(): d03.

 -- Método: async loop.sock_sendfile (sock, file, offset=0, count=None,
          *, fallback=True)

     Envia um arquivo usando *note os.sendfile: cf8. de alto desempenho
     se possível.  Retorna o número total de bytes enviados.

     Versão assíncrona de *note socket.sendfile(): 1053.

     'sock' deve ser um *note socket: f95. *note socket.SOCK_STREAM:
     14ef. 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(): 159e. 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: 3708. 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.64 DNS
.............

 -- Método: async loop.getaddrinfo (host, port, *, family=0, type=0,
          proto=0, flags=0)

     Versão assíncrona de *note socket.getaddrinfo(): 19fb.

 -- Método: async loop.getnameinfo (sockaddr, flags=0)

     Versão assíncrona de *note socket.getnameinfo(): 1978.

     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: dba.  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.65 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: 3728.

     'pipe' é um *note objeto arquivo ou similar: 13bf.

     Retorna um par ‘(transport, protocol)’, onde 'transport' suporta a
     interface *note ReadTransport: 373c. e 'protocol' é um objeto
     instanciado pelo 'protocol_factory'.

     Com o *note SelectorEventLoop: 312. 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: 3728.

     'pipe' é um *note objeto arquivo ou similar: 13bf.

     Retorna um part ‘(transport, protocol)’, onde 'transport' suporta a
     interface *note WriteTransport: 373d. e 'protocol' é um objeto
     instanciado pelo 'protocol_factory'.

     Com o *note SelectorEventLoop: 312. do laço de eventos, o 'pipe' é
     definido para modo não bloqueante.

     Nota: *note SelectorEventLoop: 312. não suporta os métodos acima no
     Windows.  Use *note ProactorEventLoop: 812. ao invés para Windows.

Ver também
..........

Os métodos *note loop.subprocess_exec(): 36d9. e *note
loop.subprocess_shell(): 36da.


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.66 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(): 1330, uma função de
     retorno registrada com esta função tem autorização para interagir
     com o laço de eventos.

     Levanta *note ValueError: 2ea. se o número do sinal é inválido ou
     impossível de capturar.  Levanta *note RuntimeError: 243. se existe
     um problema definindo o tratador.

     Use *note functools.partial(): 216. *note para passar argumentos
     nomeados: 3722. para a 'callback'.

     Assim como *note signal.signal(): 1330, 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: 1fed.: Unix.

Ver também
..........

O módulo *note signal: cb.


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.67 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: 3574. instance.  The default executor
     is used if 'executor' is ‘None’.  The default executor can be set
     by *note loop.set_default_executor(): 93f, otherwise, a *note
     concurrent.futures.ThreadPoolExecutor: 93e. will be
     lazy-initialized and used by *note run_in_executor(): adc. 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)

              # 4. Run in a custom interpreter pool:
              with concurrent.futures.InterpreterPoolExecutor() as pool:
                  result = await loop.run_in_executor(
                      pool, cpu_bound)
                  print('custom interpreter 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: 98, which is used by *note ProcessPoolExecutor:
     1d6.  See *note Safe importing of main module: 355d.

     Este método retorna um objeto *note asyncio.Future: dba.

     Use *note functools.partial(): 216. *note para passar argumentos
     nomeados: 3722. para 'func'.

     Alterado na versão 3.5.3: *note loop.run_in_executor(): adc. 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: 93e.) 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(): adc.  'executor' must be an instance of *note
     ThreadPoolExecutor: 93e, which includes *note
     InterpreterPoolExecutor: 1d2.

     Alterado na versão 3.11: 'executor' must be an instance of *note
     ThreadPoolExecutor: 93e.


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.68 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(): 3744. para detalhes a respeito do
     contexto).

     If the handler is called on behalf of a *note Task: 1c7. or *note
     Handle: 1d39, it is run in the *note contextvars.Context: 177. of
     that task or callback handle.

     Alterado na versão 3.12: The handler may be called in the *note
     Context: 177. 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(): 3744.

 -- 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: dba.;

        * ‘task’ (opcional): instância de *note asyncio.Task: 1c7.;

        * ‘handle’ (opcional): instância de *note asyncio.Handle: 1d39.;

        * ‘protocol’ (opcional): instância de *note Protocol: 3728.;

        * ‘transport’ (opcional): instância de *note Transport: 3729.;

        * ‘socket’ (opcional): instância de *note socket.socket: f95.;

        * ‘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(): 3743. 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.69 Habilitando o modo de debug
.....................................

 -- Método: loop.get_debug ()

     Obtém o modo de debug (*note bool: 3c0.) do laço de eventos.

     O valor padrão é ‘True’ se a variável de ambiente *note
     PYTHONASYNCIODEBUG: 1fe7. 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: 502. 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: 1fe8.


File: python.info,  Node: Executando Subprocessos,  Prev: Habilitando o modo de debug,  Up: Métodos do laço de eventos

5.19.1.70 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(): c60. e *note
asyncio.create_subprocess_exec(): c5f. ao invés.

     Nota: No Windows, o laço de eventos padrão *note ProactorEventLoop:
     812. oferece suporte pra subprocessos, enquanto *note
     SelectorEventLoop: 312, não.  Veja *note Suporte para subprocessos
     no Windows: 36db. 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: 169.;

        * ou *note bytes: 192, encodados na *note codificação do sistema
          de arquivos: 2ad6.

     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: 4b1. da biblioteca
     padrão ser chamada com ‘shell=False’ e a lista de strings ser
     passada como o primeiro argumento; entretanto, onde *note Popen:
     4b1. 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: 3749.

     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(): 1a80.

             * a constante *note subprocess.PIPE: d74. (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: 134a, a qual indica
               que o arquivo especial *note os.devnull: 1cca. será usado

        * 'stdout' pode ser qualquer um destes:

             * a file-like object

             * a constante *note subprocess.PIPE: d74. (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: 134a, a qual indica
               que o arquivo especial *note os.devnull: 1cca. será usado

        * 'stderr' pode ser qualquer um destes:

             * a file-like object

             * a constante *note subprocess.PIPE: d74. (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: 134a, a qual indica
               que o arquivo especial *note os.devnull: 1cca. será usado

             * a constante *note subprocess.STDOUT: 35c0, 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: 4b1. 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(): ac9. 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(): 36dd. or *note
     connect_read_pipe(): 36dc. for use with the event loop.

     Veja o construtor da classe *note subprocess.Popen: 4b1. para
     documentação sobre outros argumentos.

     Retorna um par ‘(transport, protocol)’, onde 'transport' conforma
     com a classe base *note asyncio.SubprocessTransport: 374a. e
     'protocol' é um objeto instanciado pelo 'protocol_factory'.

 -- 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: 169. ou uma string de *note bytes: 192. codificada na *note
     codificação do sistema de arquivos: 2ad6, usando a sintaxe “shell”
     da plataforma.

     Isto é similar a classe *note subprocess.Popen: 4b1. 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: 3749.

     Veja *note subprocess_exec(): 36d9. para mais detalhes sobre os
     argumentos remanescentes.

     Retorna um par ‘(transport, protocol)’, onde 'transport' conforma
     com a classe base *note SubprocessTransport: 374a. e 'protocol' é
     um objeto instanciado pelo 'protocol_factory'.

     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(): 57b. 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.71 Tratadores de função de retorno
.........................................

 -- Classe: asyncio.Handle

     Um objeto invólucro de função de retorno retornado por *note
     loop.call_soon(): cee, *note loop.call_soon_threadsafe(): cef.

      -- Método: get_context ()

          Return the *note contextvars.Context: 177. 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(): d00, e *note loop.call_at(): cf0.

     Esta classe é uma subclasse de *note Handle: 1d39.

      -- Método: when ()

          Retorna o tempo de uma função de retorno agendada como *note
          float: 196. segundos.

          O tempo é um timestamp absoluto, usando a mesma referência de
          tempo que *note loop.time(): 3725.

          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.72 Objetos Server
........................

Objetos Server são criados pelas funções *note loop.create_server():
cfc, *note loop.create_unix_server(): 4c4, *note start_server(): d03, e
*note start_unix_server(): 3696.

Do not instantiate the *note Server: cfb. 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: e04. 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(): 197d. 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(): 372c. on all associated transports.

          *note close(): 3693. should be called before *note
          close_clients(): 4c8. 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(): 374d. on all associated transports.

          *note close(): 3693. should be called before *note
          abort_clients(): 4c9. 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(): cfc. e *note asyncio.start_server():
          d03. permite criar um objeto Server que não está aceitando
          conexões inicialmente.  Neste caso ‘Server.start_serving()’,
          ou *note Server.serve_forever(): cfe. 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(): 3693. 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<19>,  Prev: Objetos Server,  Up: Laço de Eventos

5.19.1.73 Implementações do Laço de Eventos
...........................................

asyncio vem com duas implementações de laço de eventos diferente: *note
SelectorEventLoop: 312. e *note ProactorEventLoop: 812.

By default asyncio is configured to use *note EventLoop: 19a6.

 -- Classe: asyncio.SelectorEventLoop

     A subclass of *note AbstractEventLoop: b4e. based on the *note
     selectors: c7. 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

          async def main():
             ...

          loop_factory = lambda: asyncio.SelectorEventLoop(selectors.SelectSelector())
          asyncio.run(main(), loop_factory=loop_factory)

     *note Disponibilidade: 1fed.: Unix, Windows.

 -- Classe: asyncio.ProactorEventLoop

     A subclass of *note AbstractEventLoop: b4e. for Windows that uses
     “I/O Completion Ports” (IOCP).

     *note Disponibilidade: 1fed.: 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: b4e. for the given platform.

          It is an alias to *note SelectorEventLoop: 312. on Unix and
          *note ProactorEventLoop: 812. 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: 371c. 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<19>,  Prev: Implementações do Laço de Eventos,  Up: Laço de Eventos

5.19.1.74 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(): 371e. e *note loop.call_soon(): cee.  Aplicações
asyncio modernas raramente precisam ser escritas desta forma; considere
usar as funções de alto nível como *note asyncio.run(): 2f1.

* 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<19>

5.19.1.75 Hello World com call_soon()
.....................................

Um exemplo usando o método *note loop.call_soon(): cee. 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: 364e. criado com uma corrotina e
a função *note run(): 2f1.


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<19>

5.19.1.76 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(): d00.
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: 366d. criado com uma corrotina e
a função *note run(): 2f1.


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<19>

5.19.1.77 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(): 36b0. 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: 36ae. similar usando transportes, protocolos, e o
     método *note loop.create_connection(): 80d.

   * Outro *note exemplo: 36ac. similar usando a função de alto nível
     *note asyncio.open_connection(): d02. 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<19>

5.19.1.78 Define tratadores de sinais para SIGINT e SIGTERM
...........................................................

(Este exemplo de ‘signals’ apenas funciona no Unix.)

Register handlers for signals *note SIGINT: 252. and *note SIGTERM:
15d0. using the *note loop.add_signal_handler(): 373f. 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 and Protocols,  Prev: Laço de Eventos,  Up: asyncio — E/S assíncrona

5.19.1.79 Futuros
.................

'Source code:' Lib/asyncio/futures.py(1), Lib/asyncio/base_futures.py(2)

__________________________________________________________________

'Future' objects are used to bridge 'low-level callback-based code' with
high-level async/await code.

* Menu:

* Future Functions::
* Future Object::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/futures.py

   (2) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/base_futures.py


File: python.info,  Node: Future Functions,  Next: Future Object,  Up: Futuros

5.19.1.80 Future Functions
..........................

 -- Função: asyncio.isfuture (obj)

     Return ‘True’ if 'obj' is either of:

        * an instance of *note asyncio.Future: dba,

        * an instance of *note asyncio.Task: 1c7,

        * 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: dba, a *note
          Task: 1c7, or a Future-like object (*note isfuture(): 375b. is
          used for the test.)

        * a *note Task: 1c7. object wrapping 'obj', if 'obj' is a
          coroutine (*note iscoroutine(): 69b. is used for the test); in
          this case the coroutine will be scheduled by
          ‘ensure_future()’.

        * a *note Task: 1c7. object that would await on 'obj', if 'obj'
          is an awaitable (*note inspect.isawaitable(): 100d. is used
          for the test.)

     If 'obj' is neither of the above a *note TypeError: 198. is raised.

          Importante: Save a reference to the result of this function,
          to avoid a task disappearing mid-execution.

          See also the *note create_task(): 1c9. function which is the
          preferred way for creating new tasks or use *note
          asyncio.TaskGroup: 4cb. which keeps reference to the task
          internally.

     Alterado na versão 3.5.1: The function accepts any *note awaitable:
     4c3. 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: 13ae. object in a *note
     asyncio.Future: dba. 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: Future Object,  Prev: Future Functions,  Up: Futuros

5.19.1.81 Future Object
.......................

 -- Classe: asyncio.Future (*, loop=None)

     A Future represents an eventual result of an asynchronous
     operation.  Not thread-safe.

     Future is an *note awaitable: 4c3. object.  Coroutines can await on
     Future objects until they either have a result or an exception set,
     or until they are cancelled.  A Future can be awaited multiple
     times and the result is same.

     Typically Futures are used to enable low-level callback-based code
     (e.g.  in protocols implemented using asyncio *note transports:
     3656.) to interoperate with high-level async/await code.

     The rule of thumb is to never expose Future objects in user-facing
     APIs, and the recommended way to create a Future object is to call
     *note loop.create_future(): e68.  This way alternative event loop
     implementations can inject their own optimized implementations of a
     Future object.

     Alterado na versão 3.7: Adicionado suporte para o módulo *note
     contextvars: 28.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se 'loop' não é especificado, e não existe 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(): 3683. method, the result value is returned.

          If the Future is 'done' and has an exception set by the *note
          set_exception(): e6c. method, this method raises the
          exception.

          Se o futuro foi 'cancelled', este método levanta uma exceção
          *note CancelledError: 4ce.

          If the Future’s result isn’t yet available, this method raises
          an *note InvalidStateError: 3686. exception.

      -- Método: set_result (result)

          Mark the Future as 'done' and set its result.

          Raises an *note InvalidStateError: 3686. 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: 3686. 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(): 3683. or *note
          set_exception(): e6c. 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(): cee.

          Um argumento opcional somente-nomeado 'context' permite
          especificar um *note contextvars.Context: 177. customizado
          para executar na 'função de retorno'.  O contexto atual é
          usado quando nenhum 'context' é fornecido.

          *note functools.partial(): 216. 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: 4ce.

          If the Future isn’t 'done' yet, this method raises an *note
          InvalidStateError: 3686. 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: 13ae.  Key differences include:

        - unlike asyncio Futures, *note concurrent.futures.Future: 13ae.
          instances cannot be awaited.

        - *note asyncio.Future.result(): 375e. and *note
          asyncio.Future.exception(): 3761. do not accept the 'timeout'
          argument.

        - *note asyncio.Future.result(): 375e. and *note
          asyncio.Future.exception(): 3761. raise an *note
          InvalidStateError: 3686. exception when the Future is not
          'done'.

        - Callbacks registered with *note
          asyncio.Future.add_done_callback(): cf1. are not called
          immediately.  They are scheduled with *note loop.call_soon():
          cee. instead.

        - asyncio Future is not compatible with the *note
          concurrent.futures.wait(): 1b06. and *note
          concurrent.futures.as_completed(): 1907. functions.

        - *note asyncio.Future.cancel(): 1abc. accepts an optional ‘msg’
          argument, but *note concurrent.futures.Future.cancel(): 357f.
          does not.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/


File: python.info,  Node: Transports and Protocols,  Next: Políticas,  Prev: Futuros,  Up: asyncio — E/S assíncrona

5.19.1.82 Transports and Protocols
..................................

Prefácio
........

Transports and Protocols are used by the 'low-level' event loop APIs
such as *note loop.create_connection(): 80d.  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: 3766. and *note
Protocols: 3767.

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(): 80d.) 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: 3766. section documents asyncio *note
     BaseTransport: 3768, *note ReadTransport: 373c, *note
     WriteTransport: 373d, *note Transport: 3769, *note
     DatagramTransport: 1a55, and *note SubprocessTransport: 374a.
     classes.

   * The *note Protocols: 3767. section documents asyncio *note
     BaseProtocol: 376a, *note Protocol: 376b, *note BufferedProtocol:
     c87, *note DatagramProtocol: 8d3, and *note SubprocessProtocol:
     3749. classes.

   * The *note Examples: 376c. section showcases how to work with
     transports, protocols, and low-level event loop APIs.

* Menu:

* Transportes::
* Protocolos: Protocolos<2>.
* Exemplos: Exemplos<20>.


File: python.info,  Node: Transportes,  Next: Protocolos<2>,  Up: Transports and Protocols

5.19.1.83 Transportes
.....................

'Source code:' Lib/asyncio/transports.py(1)

__________________________________________________________________

Transports are classes provided by *note asyncio: b. in order to
abstract various kinds of communication channels.

Transport objects are always instantiated by an *note asyncio event
loop: f6a.

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: 367e.

* 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.14/Lib/asyncio/transports.py


File: python.info,  Node: Transports Hierarchy,  Next: Base Transport,  Up: Transportes

5.19.1.84 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(): 36dd. event loop method and are also
     used by subprocess-related methods like *note
     loop.subprocess_exec(): 36d9.

 -- 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(): 36dc. event loop method and are also used
     by subprocess-related methods like *note loop.subprocess_exec():
     36d9.

 -- 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(): 80d, *note
     loop.create_unix_connection(): 3695, *note loop.create_server():
     cfc, *note loop.sendfile(): 3732, 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(): 931. 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(): 36da. and *note
     loop.subprocess_exec(): 36d9.


File: python.info,  Node: Base Transport,  Next: Read-only Transports,  Prev: Transports Hierarchy,  Up: Transportes

5.19.1.85 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(): 376f. method will be called with *note
     None: 87a. 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():
               3770. (‘None’ on error)

             - ‘'socket'’: *note socket.socket: f95. instance

             - ‘'sockname'’: the socket’s own address, result of *note
               socket.socket.getsockname(): 283.

        * 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(): 1341.

             - ‘'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(): 3771.

             - ‘'peercert'’: peer certificate; result of *note
               ssl.SSLSocket.getpeercert(): 11ae.

             - ‘'sslcontext'’: *note ssl.SSLContext: 354. instance

             - ‘'ssl_object'’: *note ssl.SSLObject: d6e. or *note
               ssl.SSLSocket: add. instance

        * pipe:

             - ‘'pipe'’: pipe object

        * subprocess:

             - ‘'subprocess'’: *note subprocess.Popen: 4b1. 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.86 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(): 1a35. method
     until *note resume_reading(): d06. 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(): 1a35. 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.87 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():
     376f. method will eventually be called with *note None: 87a. as its
     argument.

 -- Método: WriteTransport.can_write_eof ()

     Return *note True: dfb. if the transport supports *note
     write_eof(): 3777, *note False: d1f. 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(): 3779. 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(): 377a. and *note
     protocol.resume_writing(): 377b. 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(): 377a. is called when the buffer size becomes
     greater than or equal to the 'high' value.  If writing has been
     paused, *note resume_writing(): 377b. 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(): 377a. to be called whenever the
     buffer becomes non-empty.  Setting 'low' to zero causes *note
     resume_writing(): 377b. 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(): fb8. 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(): 1753. 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: 368. 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.88 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: 87a,
     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():
     376f. method will eventually be called with *note None: 87a. as its
     argument.


File: python.info,  Node: Transportes de Subprocesso,  Prev: Transportes de datagrama,  Up: Transportes

5.19.1.89 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: 87a. if the subprocess was not
          created with ‘stdin=PIPE’

        * ‘1’: readable streaming transport of the standard output
          ('stdout'), or *note None: 87a. if the subprocess was not
          created with ‘stdout=PIPE’

        * ‘2’: readable streaming transport of the standard error
          ('stderr'), or *note None: 87a. if the subprocess was not
          created with ‘stderr=PIPE’

        * other 'fd': *note None: 87a.

 -- Método: SubprocessTransport.get_returncode ()

     Return the subprocess return code as an integer or *note None: 87a.
     if it hasn’t returned, which is similar to the *note
     subprocess.Popen.returncode: c77. 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(): 3783.

     See also *note subprocess.Popen.kill(): 15ce.

 -- Método: SubprocessTransport.send_signal (signal)

     Send the 'signal' number to the subprocess, as in *note
     subprocess.Popen.send_signal(): 15cf.

 -- Método: SubprocessTransport.terminate ()

     Interrompe o subprocesso.

     On POSIX systems, this method sends *note SIGTERM: 15d0. to the
     subprocess.  On Windows, the Windows API function
     ‘TerminateProcess()’ is called to stop the subprocess.

     See also *note subprocess.Popen.terminate(): 15cd.

 -- Método: SubprocessTransport.close ()

     Kill the subprocess by calling the *note kill(): 3782. method.

     If the subprocess hasn’t returned yet, and close transports of
     'stdin', 'stdout', and 'stderr' pipes.


File: python.info,  Node: Protocolos<2>,  Next: Exemplos<20>,  Prev: Transportes,  Up: Transports and Protocols

5.19.1.90 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: 3729.

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.14/Lib/asyncio/protocols.py


File: python.info,  Node: Protocolos de Base,  Next: Base Protocol,  Up: Protocolos<2>

5.19.1.91 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<2>

5.19.1.92 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: 87a.  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(): 3779.
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():
377a. is not called: the buffer size must go strictly over.

Conversely, *note resume_writing(): 377b. 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<2>

5.19.1.93 Streaming Protocols
.............................

Event methods, such as *note loop.create_server(): cfc, *note
loop.create_unix_server(): 4c4, *note loop.create_connection(): 80d,
*note loop.create_unix_connection(): 3695, *note
loop.connect_accepted_socket(): 9d4, *note loop.connect_read_pipe():
36dc, and *note loop.connect_write_pipe(): 36dd. 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(): 3789. 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(): 3777, 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<2>

5.19.1.94 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: 3788.

‘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: c87.
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: 25f.

 -- 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(): 3789.
     method.

*note get_buffer(): 378b. can be called an arbitrary number of times
during a connection.  However, *note protocol.eof_received(): 3789. is
called at most once and, if called, *note get_buffer(): 378b. and *note
buffer_updated(): 378c. 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<2>

5.19.1.95 Protocolos de Datagramas
..................................

Datagram Protocol instances should be constructed by protocol factories
passed to the *note loop.create_datagram_endpoint(): 931. 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: 2bf.  'exc' is the *note OSError: 2bf. 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: 2bf. with ‘errno’ set to *note errno.ENOBUFS:
     1a8d. may or may not be raised; if it is raised, it will be
     reported to *note DatagramProtocol.error_received(): 3790. but
     otherwise ignored.


File: python.info,  Node: Protocolos de Subprocesso,  Prev: Protocolos de Datagramas,  Up: Protocolos<2>

5.19.1.96 Protocolos de Subprocesso
...................................

Subprocess Protocol instances should be constructed by protocol
factories passed to the *note loop.subprocess_exec(): 36d9. and *note
loop.subprocess_shell(): 36da. 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(): 1a6c. and *note
     pipe_connection_lost(): 3792. methods.


File: python.info,  Node: Exemplos<20>,  Prev: Protocolos<2>,  Up: Transports and Protocols

5.19.1.97 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<20>

5.19.1.98 TCP Echo Server
.........................

Create a TCP echo server using the *note loop.create_server(): cfc.
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: 36a8. example uses the
high-level *note asyncio.start_server(): d03. function.


File: python.info,  Node: TCP Echo Client,  Next: UDP Echo Server,  Prev: TCP Echo Server,  Up: Exemplos<20>

5.19.1.99 TCP Echo Client
.........................

A TCP echo client using the *note loop.create_connection(): 80d. 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: 36a5. example uses the
high-level *note asyncio.open_connection(): d02. function.


File: python.info,  Node: UDP Echo Server,  Next: UDP Echo Client,  Prev: TCP Echo Client,  Up: Exemplos<20>

5.19.1.100 UDP Echo Server
..........................

A UDP echo server, using the *note loop.create_datagram_endpoint(): 931.
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<20>

5.19.1.101 UDP Echo Client
..........................

A UDP echo client, using the *note loop.create_datagram_endpoint(): 931.
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<20>

5.19.1.102 Connecting Existing Sockets
......................................

Wait until a socket receives data using the *note
loop.create_connection(): 80d. 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: 36af. example uses
the low-level *note loop.add_reader(): 36b0. method to register an FD.

The *note register an open socket to wait for data using streams: 36ac.
example uses high-level streams created by the *note open_connection():
d02. function in a coroutine.


File: python.info,  Node: loop subprocess_exec and SubprocessProtocol,  Prev: Connecting Existing Sockets,  Up: Exemplos<20>

5.19.1.103 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(): 36d9.
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: 36ed. written using high-level APIs.


File: python.info,  Node: Políticas,  Next: Suporte a plataformas,  Prev: Transports and Protocols,  Up: asyncio — E/S assíncrona

5.19.1.104 Políticas
....................

     Aviso: Policies are deprecated and will be removed in Python 3.16.
     Users are encouraged to use the *note asyncio.run(): 2f1. function
     or the *note asyncio.Runner: 2f3. with 'loop_factory' to use the
     desired loop implementation.

An event loop policy is a global object used to get and set the current
*note event loop: f6a, as well as create new event loops.  The default
policy can be *note replaced: 379c. with *note built-in alternatives:
379d. to use different event loop implementations, or substituted by a
*note custom policy: 379e. that can override these behaviors.

The *note policy object: 379f. 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(): 2f0, *note set_event_loop(): 1a71, and *note
new_event_loop(): 365c.

Policy objects should implement the APIs defined in the *note
AbstractEventLoopPolicy: 30c. abstract base class.

* Menu:

* Getting and Setting the Policy::
* Policy Objects::
* Custom Policies::


File: python.info,  Node: Getting and Setting the Policy,  Next: Policy Objects,  Up: Políticas

5.19.1.105 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.

     Descontinuado desde a versão 3.14: The *note
     get_event_loop_policy(): 310. function is deprecated and will be
     removed in Python 3.16.

 -- 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.

     Descontinuado desde a versão 3.14: The *note
     set_event_loop_policy(): 311. function is deprecated and will be
     removed in Python 3.16.


File: python.info,  Node: Policy Objects,  Next: Custom Policies,  Prev: Getting and Setting the Policy,  Up: Políticas

5.19.1.106 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: b4e. 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’.

     Descontinuado desde a versão 3.14: The *note
     AbstractEventLoopPolicy: 30c. class is deprecated and will be
     removed in Python 3.16.

asyncio ships with the following built-in policies:

 -- Classe: asyncio.DefaultEventLoopPolicy

     The default asyncio policy.  Uses *note SelectorEventLoop: 312. on
     Unix and *note ProactorEventLoop: 812. 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: 812.
     is now used by default.

     Alterado na versão 3.14: The *note get_event_loop(): 2f0. method of
     the default asyncio policy now raises a *note RuntimeError: 243. if
     there is no set event loop.

     Descontinuado desde a versão 3.14: The *note
     DefaultEventLoopPolicy: 30d. class is deprecated and will be
     removed in Python 3.16.

 -- Classe: asyncio.WindowsSelectorEventLoopPolicy

     An alternative event loop policy that uses the *note
     SelectorEventLoop: 312. event loop implementation.

     *note Disponibilidade: 1fed.: Windows.

     Descontinuado desde a versão 3.14: The *note
     WindowsSelectorEventLoopPolicy: 30e. class is deprecated and will
     be removed in Python 3.16.

 -- Classe: asyncio.WindowsProactorEventLoopPolicy

     An alternative event loop policy that uses the *note
     ProactorEventLoop: 812. event loop implementation.

     *note Disponibilidade: 1fed.: Windows.

     Descontinuado desde a versão 3.14: The *note
     WindowsProactorEventLoopPolicy: 30f. class is deprecated and will
     be removed in Python 3.16.


File: python.info,  Node: Custom Policies,  Prev: Policy Objects,  Up: Políticas

5.19.1.107 Custom Policies
..........................

To implement a new event loop policy, it is recommended to subclass
*note DefaultEventLoopPolicy: 30d. 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.108 Suporte a plataformas
................................

The *note asyncio: b. 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.109 Todas as plataformas
...............................

   * *note loop.add_reader(): 36b0. and *note loop.add_writer(): 3736.
     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.110 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: 812. is now
the default event loop.

All event loops on Windows do not support the following methods:

   * *note loop.create_unix_connection(): 3695. and *note
     loop.create_unix_server(): 4c4. are not supported.  The *note
     socket.AF_UNIX: 1ac2. socket family is specific to Unix.

   * *note loop.add_signal_handler(): 373f. and *note
     loop.remove_signal_handler(): 3740. are not supported.

*note SelectorEventLoop: 312. has the following limitations:

   * *note SelectSelector: 37ab. is used to wait on socket events: it
     supports sockets and is limited to 512 sockets.

   * *note loop.add_reader(): 36b0. and *note loop.add_writer(): 3736.
     only accept socket handles (e.g.  pipe file descriptors are not
     supported).

   * Pipes are not supported, so the *note loop.connect_read_pipe():
     36dc. and *note loop.connect_write_pipe(): 36dd. methods are not
     implemented.

   * *note Subprocesses: 3650. are not supported, i.e.  *note
     loop.subprocess_exec(): 36d9. and *note loop.subprocess_shell():
     36da. methods are not implemented.

*note ProactorEventLoop: 812. has the following limitations:

   * The *note loop.add_reader(): 36b0. and *note loop.add_writer():
     3736. 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.14/Lib/asyncio/proactor_events.py

   (2) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/windows_events.py

   (3) 
https://github.com/python/cpython/tree/3.14/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.111 Suporte para subprocesso no Windows
..............................................

On Windows, the default event loop *note ProactorEventLoop: 812.
supports subprocesses, whereas *note SelectorEventLoop: 312. does not.


File: python.info,  Node: macOS<51>,  Prev: Windows<81>,  Up: Suporte a plataformas

5.19.1.112 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: 37ae, which does not support character devices
on these versions.  The *note SelectorEventLoop: 312. can be manually
configured to use *note SelectSelector: 37ab. or *note PollSelector:
dc5. 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.113 Extensão
...................

A direção principal para estender o módulo *note asyncio: b. é 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.114 Escrevendo um laço de eventos personalizado
......................................................

*note asyncio.AbstractEventLoop: b4e. 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.115 Construtores privados de Future e Task
.................................................

As classes *note asyncio.Future: dba. e *note asyncio.Task: 1c7. nunca
deverão ser criadas diretamente.  Por favor, as substitua pelas
'factories' correspondentes: *note loop.create_future(): e68. e *note
loop.create_task(): 1ca. ou *note asyncio.create_task(): 1c9.

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(): 1ca.

     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.116 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(): b45. e
*note asyncio.current_task(): 69a.:

 -- 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(): 22ad. ou *note coroutine.throw():
     710.).

 -- 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(): 22ad.
     ou *note coroutine.throw(): 710.


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.117 Í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<17>.


File: python.info,  Node: Tarefas,  Next: Filas<2>,  Up: Índice da API de alto nível

5.19.1.118 Tarefas
..................

Utilitários para executar programas asyncio, criar Tarefas, e esperar
por múltiplas coisas com tempos limites.

*note run(): 2f1.                                      Cria um laço de eventos, roda uma corrotina, fecha o
                                                       laço.
                                                       
                                                       
*note Runner: 2f3.                                     Um gerenciador de contexto que simplifica várias
                                                       chamadas assíncronas de funções.
                                                       
                                                       
*note Task: 1c7.                                       Objeto Task.
                                                       
                                                       
*note TaskGroup: 4cb.                                  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(): 1c9.                              Inicia uma Task asyncio e a retorna.
                                                       
                                                       
*note current_task(): 69a.                             Retorna para a Tarefa atual.
                                                       
                                                       
*note all_tasks(): b45.                                Retorna todas as tarefas que ainda não foram
                                                       concluídas em um laço de eventos.
                                                       
                                                       
‘await’ *note sleep(): c58.                            Dorme for um número de segundos.
                                                       
                                                       
‘await’ *note gather(): 808.                           Agenda e espera por coisas concorrentemente.
                                                       
                                                       
‘await’ *note wait_for(): 80a.                         Executa com um tempo limite.
                                                       
                                                       
‘await’ *note shield(): c59.                           Protege contra cancelamento.
                                                       
                                                       
‘await’ *note wait(): 69c.                             Monitora para conclusão.
                                                       
                                                       
*note timeout(): 809.                                  Executa com um tempo limite.  Útil nos casos em que
                                                       o ‘wait_for’ não é adequado.
                                                       
                                                       
*note to_thread(): adb.                                Executa uma função assincronamente em uma thread
                                                       separada.
                                                       
                                                       
*note run_coroutine_threadsafe(): a78.                 Agenda uma corrotina a partir de outra thread do
                                                       sistema operacional.
                                                       
                                                       
‘for in’ *note as_completed(): 4c0.                    Monitora a conclusão com um loop ‘for’.
                                                       

Exemplos
........

   * *note Usando asyncio.gather() para executar coisas em paralelo:
     366f.

   * *note Usando asyncio.wait_for() para forçar um tempo limite de
     execução: 3677.

   * *note Cancelamento: 368c.

   * *note Usando asyncio.sleep(): 366d.

   * Veja também a *note página principal de documentação sobre Tarefas:
     364e.


File: python.info,  Node: Filas<2>,  Next: Subprocessos<2>,  Prev: Tarefas,  Up: Índice da API de alto nível

5.19.1.119 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: c5e.                                      Uma fila FIFO - Primeiro que entra, é o primeiro que
                                                       sai.
                                                       
                                                       
*note PriorityQueue: 36ff.                             Uma fila de prioridade.
                                                       
                                                       
*note LifoQueue: 3701.                                 Uma fila LIFO - Último que entra, é o primeiro que
                                                       sai.
                                                       

Exemplos
........

   * *note Usando asyncio.Queue para distribuir cargas de trabalho entre
     diversas Tasks: 3703.

   * Veja também a *note Página de documentação da classe Queue: 3651.


File: python.info,  Node: Subprocessos<2>,  Next: Streams<2>,  Prev: Filas<2>,  Up: Índice da API de alto nível

5.19.1.120 Subprocessos
.......................

Utilitários para iniciar subprocessos e executar comandos no console.

‘await’ *note create_subprocess_exec(): c5f.           Cria um subprocesso.
                                                       
                                                       
‘await’ *note create_subprocess_shell(): c60.          Executa um comando no console.
                                                       

Exemplos
........

   * *note Executando um comando no console: 36d3.

   * Veja também a *note documentação de subprocessos de APIs: 3650.


File: python.info,  Node: Streams<2>,  Next: Sincronização,  Prev: Subprocessos<2>,  Up: Índice da API de alto nível

5.19.1.121 Streams
..................

APIs de alto nível para trabalhar com entrada e saída de rede.

‘await’ *note open_connection(): d02.                  Estabelece uma conexão TCP.
                                                       
                                                       
‘await’ *note open_unix_connection(): 3694.            Estabelece uma conexão com soquete Unix.
                                                       
                                                       
‘await’ *note start_server(): d03.                     Inicia um servidor TCP.
                                                       
                                                       
‘await’ *note start_unix_server(): 3696.               Inicia um servidor com soquete Unix.
                                                       
                                                       
*note StreamReader: 1b68.                              Objeto async/await de alto nível para receber dados
                                                       de rede.
                                                       
                                                       
*note StreamWriter: 19af.                              Objeto async/await de alto nível para enviar dados
                                                       pela rede.
                                                       

Exemplos
........

   * *note Exemplo de cliente TCP: 3690.

   * Veja também a documentação das *note APIs de streams: 364f.


File: python.info,  Node: Sincronização,  Next: Exceções<17>,  Prev: Streams<2>,  Up: Índice da API de alto nível

5.19.1.122 Sincronização
........................

Primitivas de sincronização similares a threads, que podem ser usadas em
tarefas.

*note Lock: c5a.                                       Uma trava mutex.
                                                       
                                                       
*note Event: 2f2.                                      Um objeto de evento.
                                                       
                                                       
*note Condition: c5b.                                  Um objeto de condição.
                                                       
                                                       
*note Semaphore: c5c.                                  Um semáforo.
                                                       
                                                       
*note BoundedSemaphore: c5d.                           Um semáforo limitado.
                                                       
                                                       
*note Barrier: 80b.                                    Um objeto barreira.
                                                       

Exemplos
........

   * *note Usando asyncio.Event: 36bc.

   * *note Usando asyncio.Barrier: 36ca.

   * Veja também a documentação das *note primitivas de sincronização de
     asyncio: 3652.


File: python.info,  Node: Exceções<17>,  Prev: Sincronização,  Up: Índice da API de alto nível

5.19.1.123 Exceções
...................

*note asyncio.CancelledError: 4ce.                     Levantado quanto a Tarefa é cancelada.  Veja também
                                                       *note Task.cancel(): 4cd.
                                                       
                                                       
*note asyncio.BrokenBarrierError: 80c.                 Levantado quando um Barreira é quebrada.  veja
                                                       também *note Barrier.wait(): 36c9. .
                                                       

Exemplos
........

   * *note Manipulando CancelledError para executar código no
     cancelamento de uma requisição: 368c.

   * Veja também a lista completa de *note exceções específicas de
     asyncio: 3705.


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.124 Í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<3>.
* 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.125 Obtendo o laço de eventos
....................................

*note asyncio.get_running_loop(): cf4.                 A função 'preferida' para obter o laço de eventos em
                                                       execução.
                                                       
                                                       
*note asyncio.get_event_loop(): 2f0.                   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(): 1a71.                  Define o laço de eventos como atual através da
                                                       política atual.
                                                       
                                                       
*note asyncio.new_event_loop(): 365c.                  Cria um novo laço de eventos.
                                                       

Exemplos
........

   * *note Usando asyncio.get_running_loop(): 3762.


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.126 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: 371c.

Ciclo de vida
.............

*note loop.run_until_complete(): e66.                  Executa um Future/Task/aguardável até que esteja
                                                       completo.
                                                       
                                                       
*note loop.run_forever(): 371e.                        Executa o laço de eventos para sempre.
                                                       
                                                       
*note loop.stop(): e6b.                                Para o laço de eventos.
                                                       
                                                       
*note loop.close(): 3720.                              Fecha o laço de eventos.
                                                       
                                                       
*note loop.is_running(): 371f.                         Retorna ‘True’ se o laço de eventos estiver rodando.
                                                       
                                                       
*note loop.is_closed(): fb7.                           Retorna ‘True’ se o laço de eventos estiver fechado.
                                                       
                                                       
‘await’ *note loop.shutdown_asyncgens(): e6d.          Fecha geradores assíncronos.
                                                       

Depuração
.........

*note loop.set_debug(): fb5.                           Habilita ou desabilita o modo de debug.
                                                       
                                                       
*note loop.get_debug(): fb6.                           Obtém o modo de debug atual.
                                                       

Agendando funções de retorno (callbacks)
........................................

*note loop.call_soon(): cee.                           Invoca uma função de retorno brevemente.
                                                       
                                                       
*note loop.call_soon_threadsafe(): cef.                Uma variante segura para thread de
                                                       *note loop.call_soon(): cee.
                                                       
                                                       
*note loop.call_later(): d00.                          Invoca uma função de retorno 'após' o tempo
                                                       especificado.
                                                       
                                                       
*note loop.call_at(): cf0.                             Invoca uma função de retorno 'no' instante
                                                       especificado.
                                                       

Grupo de Thread/Interpretador/Processo
......................................

‘await’ *note loop.run_in_executor(): adc.             Executa uma função vinculada à CPU ou outra que seja
                                                       bloqueante em um executor
                                                       *note concurrent.futures: 24.
                                                       
                                                       
*note loop.set_default_executor(): 93f.                Define o executor padrão para
                                                       *note loop.run_in_executor(): adc.
                                                       

Tasks e Futures
...............

*note loop.create_future(): e68.                       Cria um objeto *note Future: dba.
                                                       
                                                       
*note loop.create_task(): 1ca.                         Agenda corrotina como uma *note Task: 1c7.
                                                       
                                                       
*note loop.set_task_factory(): 1c8.                    Define uma factory usada por
                                                       *note loop.create_task(): 1ca. para criar
                                                       *note Tasks: 1c7.
                                                       
                                                       
*note loop.get_task_factory(): fb9.                    Obtém o factory *note loop.create_task(): 1ca. usado
                                                       para criar *note Tasks: 1c7.
                                                       

DNS
...

‘await’ *note loop.getaddrinfo(): e02.                 Versão assíncrona de
                                                       *note socket.getaddrinfo(): 19fb.
                                                       
                                                       
‘await’ *note loop.getnameinfo(): e03.                 Versão assíncrona de
                                                       *note socket.getnameinfo(): 1978.
                                                       

Rede e IPC
..........

‘await’ *note loop.create_connection(): 80d.           Abre uma conexão TCP.
                                                       
                                                       
‘await’ *note loop.create_server(): cfc.               Cria um servidor TCP.
                                                       
                                                       
‘await’ *note loop.create_unix_connection(): 3695.     Abre uma conexão soquete Unix.
                                                       
                                                       
‘await’ *note loop.create_unix_server(): 4c4.          Cria um servidor soquete Unix.
                                                       
                                                       
‘await’ *note loop.connect_accepted_socket(): 9d4.     Envolve um *note socket: f95. em um par ‘(transport,
                                                       protocol)’.
                                                       
                                                       
‘await’ *note loop.create_datagram_endpoint(): 931.    Abre uma conexão por datagrama (UDP).
                                                       
                                                       
‘await’ *note loop.sendfile(): 3732.                   Envia um arquivo por meio de um transporte.
                                                       
                                                       
‘await’ *note loop.start_tls(): cf2.                   Atualiza uma conexão existente para TLS.
                                                       
                                                       
‘await’ *note loop.connect_read_pipe(): 36dc.          Envolve a leitura final de um encadeamento em um par
                                                       ‘(transport, protocol)’.
                                                       
                                                       
‘await’ *note loop.connect_write_pipe(): 36dd.         Envolve a escrita final de um encadeamento em um par
                                                       ‘(transport, protocol)’.
                                                       

Soquetes
........

‘await’ *note loop.sock_recv(): dff.                   Recebe dados do *note socket: f95.
                                                       
                                                       
‘await’ *note loop.sock_recv_into(): cf3.              Recebe dados do *note socket: f95. em um buffer.
                                                       
                                                       
‘await’ *note loop.sock_recvfrom(): 810.               Recebe um datagrama do *note socket: f95.
                                                       
                                                       
‘await’ *note loop.sock_recvfrom_into(): 811.          Recebe um datagrama do *note socket: f95. em um
                                                       buffer.
                                                       
                                                       
‘await’ *note loop.sock_sendall(): e00.                Envia dados para o *note socket: f95.
                                                       
                                                       
‘await’ *note loop.sock_sendto(): 80f.                 Envia um datagrama por meio de *note socket: f95.
                                                       para o endereço dado.
                                                       
                                                       
‘await’ *note loop.sock_connect(): fbc.                Conecta ao *note socket: f95.
                                                       
                                                       
‘await’ *note loop.sock_accept(): e01.                 Aceita uma conexão do *note socket: f95.
                                                       
                                                       
‘await’ *note loop.sock_sendfile(): cf7.               Envia um arquivo usando o *note socket: f95.
                                                       
                                                       
*note loop.add_reader(): 36b0.                         Começa a observar um descritor de arquivo,
                                                       aguardando por disponibilidade de leitura.
                                                       
                                                       
*note loop.remove_reader(): 3735.                      Interrompe o monitoramento de um descritor de
                                                       arquivo, que aguarda disponibilidade de leitura.
                                                       
                                                       
*note loop.add_writer(): 3736.                         Começa a observar um descritor de arquivo,
                                                       aguardando por disponibilidade para escrita.
                                                       
                                                       
*note loop.remove_writer(): 3737.                      Interrompe o monitoramento de um descritor de
                                                       arquivo, que aguarda disponibilidade para escrita.
                                                       

Sinais Unix
...........

*note loop.add_signal_handler(): 373f.                 Adiciona um tratador para um *note signal: cb.
                                                       
                                                       
*note loop.remove_signal_handler(): 3740.              Remove um tratador para um *note signal: cb.
                                                       

Subprocessos
............

*note loop.subprocess_exec(): 36d9.                    Inicia um subprocesso.
                                                       
                                                       
*note loop.subprocess_shell(): 36da.                   Inicia um subprocesso a partir de um comando shell.
                                                       

Tratamento de erros
...................

*note loop.call_exception_handler(): 3744.             Chama o tratamento de exceção.
                                                       
                                                       
*note loop.set_exception_handler(): 3743.              Define um novo tratador de exceção.
                                                       
                                                       
*note loop.get_exception_handler(): e69.               Obtém o tratador de exceção atual.
                                                       
                                                       
*note loop.default_exception_handler(): 3745.          A implementação padrão do tratador de exceção.
                                                       

Exemplos
........

   * *note Usando asyncio.new_event_loop() e loop.run_forever(): 3750.

   * *note Usando loop.call_later(): 3752.

   * Usando ‘loop.create_connection()’ para implementar *note um
     cliente-eco: 36a7.

   * Usando ‘loop.create_connection()’ para *note conectar a um soquete:
     36ae.

   * *note Usando add_reader() para monitorar um descritor de arquivo
     para eventos de leitura: 36af.

   * *note Usando loop.add_signal_handler(): 3755.

   * *note Usando loop.subprocess_exec(): 36ee.


File: python.info,  Node: Transportes<2>,  Next: Protocolos<3>,  Prev: Métodos do laço de eventos<2>,  Up: Índice de APIs de baixo nível

5.19.1.127 Transportes
......................

Todos os transportes implementam os seguintes métodos:

*note transport.close(): 372c.                         Fecha o transporte.
                                                       
                                                       
*note transport.is_closing(): e67.                     Retorna ‘True’ se o transporte estiver fechando ou
                                                       estiver fechado.
                                                       
                                                       
*note transport.get_extra_info(): c86.                 Solicita informação a respeito do transporte.
                                                       
                                                       
*note transport.set_protocol(): 3772.                  Define um novo protocolo.
                                                       
                                                       
*note transport.get_protocol(): 3773.                  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(): 80d, *note loop.create_unix_connection():
3695, *note loop.connect_read_pipe(): 36dc, etc:

Realiza leitura de Transportes
..............................

*note transport.is_reading(): d05.                     Retorna ‘True’ se o transporte estiver recebendo.
                                                       
                                                       
*note transport.pause_reading(): d07.                  Pausa o recebimento.
                                                       
                                                       
*note transport.resume_reading(): d06.                 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(): 80d, *note loop.create_unix_connection():
3695, *note loop.connect_write_pipe(): 36dd, etc:

Realiza escrita de Transportes
..............................

*note transport.write(): 1753.                         Escreve dados para o transporte.
                                                       
                                                       
*note transport.writelines(): 1752.                    Escreve buffers para o transporte.
                                                       
                                                       
*note transport.can_write_eof(): 3776.                 Retorna *note True: dfb. se o transporte suporta o
                                                       envio de EOF.
                                                       
                                                       
*note transport.write_eof(): 3777.                     Fecha e envia EOF após descarregar dados que estavam
                                                       no buffer.
                                                       
                                                       
*note transport.abort(): 374d.                         Fecha o transporte imediatamente.
                                                       
                                                       
*note transport.get_write_buffer_size(): 3778.         Retorna o tamanho atual do buffer de saída.
                                                       
                                                       
*note transport.get_write_buffer_limits(): fb8.        Retorna marcas d’água alta e baixa para controle do
                                                       fluxo de escrita.
                                                       
                                                       
*note transport.set_write_buffer_limits(): 3779.       Define novas marcas d’água alta e baixa para
                                                       controle do fluxo de escrita.
                                                       

Transporte retornado por *note loop.create_datagram_endpoint(): 931.:

Transportes de datagrama
........................

*note transport.sendto(): 4c5.                         Envia dados para o par remoto.
                                                       
                                                       
*note transport.abort(): 377d.                         Fecha o transporte imediatamente.
                                                       

Abstração de transporte de baixo nível sobre subprocessos.  Retornado
por *note loop.subprocess_exec(): 36d9. e *note loop.subprocess_shell():
36da.:

Transportes de Subprocesso
..........................

*note transport.get_pid(): 377f.                       Retorna o process id do subprocesso.
                                                       
                                                       
*note transport.get_pipe_transport(): 3780.            Retorna o transporte para o encadeamento de
                                                       comunicação requisitada ('stdin', 'stdout', ou
                                                       'stderr').
                                                       
                                                       
*note transport.get_returncode(): 3781.                Retorna o código de retorno do subprocesso.
                                                       
                                                       
*note transport.kill(): 3782.                          Mata o subprocesso.
                                                       
                                                       
*note transport.send_signal(): 3784.                   Envia um sinal para o subprocesso.
                                                       
                                                       
*note transport.terminate(): 3783.                     Interrompe o subprocesso.
                                                       
                                                       
*note transport.close(): 3785.                         Mata o subprocesso e fecha todos os encadeamentos.
                                                       


File: python.info,  Node: Protocolos<3>,  Next: Políticas de laço de eventos,  Prev: Transportes<2>,  Up: Índice de APIs de baixo nível

5.19.1.128 Protocolos
.....................

Classes de protocolos podem implementar os seguintes 'métodos de função
de retorno':

‘callback’ *note connection_made(): 372a.              Chamado quando uma conexão é estabelecida.
                                                       
                                                       
‘callback’ *note connection_lost(): 376f.              Chamado quanto a conexão é perdida ou fechada.
                                                       
                                                       
‘callback’ *note pause_writing(): 377a.                Chamado quando o buffer de transporte ultrapassa a
                                                       marca de nível alto d’água.
                                                       
                                                       
‘callback’ *note resume_writing(): 377b.               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(): 1a35.                Chamado quando algum dado é recebido.
                                                       
                                                       
‘callback’ *note eof_received(): 3789.                 Chamado quando um EOF é recebido.
                                                       

Protocolos de Streaming Bufferizados
....................................

‘callback’ *note get_buffer(): 378b.                   Chamada para alocar um novo buffer para recebimento.
                                                       
                                                       
‘callback’ *note buffer_updated(): 378c.               Chamado quando o buffer foi atualizado com os dados
                                                       recebidos.
                                                       
                                                       
‘callback’ *note eof_received(): 378d.                 Chamado quando um EOF é recebido.
                                                       

Protocolos de Datagramas
........................

‘callback’ *note datagram_received(): 378f.            Chamado quando um datagrama é recebido.
                                                       
                                                       
‘callback’ *note error_received(): 3790.               Chamado quando uma operação de envio ou recebimento
                                                       anterior levanta um *note OSError: 2bf.
                                                       

Protocolos de Subprocesso
.........................

‘callback’ *note pipe_data_received(): 1a6c.           Chamado quando o processo filho escreve dados no seu
                                                       encadeamento 'stdout' ou 'stderr'.
                                                       
                                                       
‘callback’ *note pipe_connection_lost(): 3792.         Chamado quando um dos encadeamentos comunicando com
                                                       o processo filho é fechado.
                                                       
                                                       
‘callback’ *note process_exited(): 1a6b.               Chamado quando o processo filho sai.  Isso pode ser
                                                       chamado antes dos métodos
                                                       *note pipe_data_received(): 1a6c. e
                                                       *note pipe_connection_lost(): 3792.
                                                       


File: python.info,  Node: Políticas de laço de eventos,  Prev: Protocolos<3>,  Up: Índice de APIs de baixo nível

5.19.1.129 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(): 2f0.  Veja também a
*note seção principal de políticas: 3716. para mais detalhes.

Acessando Políticas
...................

*note asyncio.get_event_loop_policy(): 310.            Retorna a política de todo o processo atual.
                                                       
                                                       
*note asyncio.set_event_loop_policy(): 311.            Define uma nova política para todo o processo.
                                                       
                                                       
*note AbstractEventLoopPolicy: 30c.                    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.130 Desenvolvendo com asyncio
....................................

Asynchronous programming is different from classic “sequential”
programming.

This page lists common mistakes and traps and explains how to avoid
them.

* Menu:

* Modo de Depuração::
* Concorrência e Múltiplas Threads::
* Executando código bloqueante::
* Gerando logs: Gerando logs<3>.
* Detect never-awaited coroutines::
* Detect never-retrieved exceptions::


File: python.info,  Node: Modo de Depuração,  Next: Concorrência e Múltiplas Threads,  Up: Desenvolvendo com asyncio

5.19.1.131 Modo de Depuração
............................

By default asyncio runs in production mode.  In order to ease the
development asyncio has a 'debug mode'.

There are several ways to enable asyncio debug mode:

   * Setting the *note PYTHONASYNCIODEBUG: 1fe7. environment variable to
     ‘1’.

   * Usando o *note Modo de Desenvolvimento do Python: 502.

   * Passando ‘debug=True’ para *note asyncio.run(): 2f1.

   * Chamando *note loop.set_debug(): fb5.

Além de habilitar o modo de depuração, considere também:

   * setting the log level of the *note asyncio logger: 37d0. to *note
     logging.DEBUG: 2fee, for example the following snippet of code can
     be run at startup of the application:

          logging.basicConfig(level=logging.DEBUG)

   * configuring the *note warnings: 118. module to display *note
     ResourceWarning: 546. warnings.  One way of doing that is by using
     the *note -W: abb. ‘default’ command line option.

Quando o modo de depuração está habilitado:

   * Many non-threadsafe asyncio APIs (such as *note loop.call_soon():
     cee. and *note loop.call_at(): cf0. methods) raise an exception if
     they are called from a wrong thread.

   * 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: 3747.
     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.132 Concorrência e Múltiplas Threads
...........................................

An event loop runs in a thread (typically the main thread) and executes
all callbacks and Tasks in its thread.  While a Task is running in the
event loop, no other Tasks can run in the same thread.  When a Task
executes an ‘await’ expression, the running Task gets suspended, and the
event loop executes the next Task.

Para agendar uma *note callback: 2c3f. de outra thread do SO, o método
*note loop.call_soon_threadsafe(): cef. deve ser usado.  Exemplo:

     loop.call_soon_threadsafe(callback, *args)

Almost all asyncio objects are not thread safe, which is typically not a
problem unless there is code that works with them from outside of a Task
or a callback.  If there’s a need for such code to call a low-level
asyncio API, the *note loop.call_soon_threadsafe(): cef. method should
be used, e.g.:

     loop.call_soon_threadsafe(fut.cancel)

To schedule a coroutine object from a different OS thread, the *note
run_coroutine_threadsafe(): a78. function should be used.  It returns a
*note concurrent.futures.Future: 13ae. to access the result:

     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()

To handle signals the event loop must be run in the main thread.

The *note loop.run_in_executor(): adc. method can be used with a *note
concurrent.futures.ThreadPoolExecutor: 93e. or *note
InterpreterPoolExecutor: 1d2. 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: 98.).  The *note Métodos do laço de eventos: 371c.
section lists APIs that can read from pipes and watch file descriptors
without blocking the event loop.  In addition, asyncio’s *note
Subprocess: 3650. APIs provide a way to start a process and communicate
with it from the event loop.  Lastly, the aforementioned *note
loop.run_in_executor(): adc. method can also be used with a *note
concurrent.futures.ProcessPoolExecutor: 1d6. 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.133 Executando código bloqueante
.......................................

Blocking (CPU-bound) code should not be called directly.  For example,
if a function performs a CPU-intensive calculation for 1 second, all
concurrent asyncio Tasks and IO operations would be delayed by 1 second.

An executor can be used to run a task in a different thread, including
in a different interpreter, or even in a different process to avoid
blocking the OS thread with the event loop.  See the *note
loop.run_in_executor(): adc. method for more details.


File: python.info,  Node: Gerando logs<3>,  Next: Detect never-awaited coroutines,  Prev: Executando código bloqueante,  Up: Desenvolvendo com asyncio

5.19.1.134 Gerando logs
.......................

asyncio usa o módulo *note logging: 8b. e todo registro é feito via o
registrador ‘"asyncio"’.

The default log level is *note logging.INFO: 2fec, which can be easily
adjusted:

     logging.getLogger("asyncio").setLevel(logging.WARNING)

Network logging can block the event loop.  It is recommended to use a
separate thread for handling logs or use non-blocking IO. For example,
see *note Dealing with handlers that block: 37d5.


File: python.info,  Node: Detect never-awaited coroutines,  Next: Detect never-retrieved exceptions,  Prev: Gerando logs<3>,  Up: Desenvolvendo com asyncio

5.19.1.135 Detect never-awaited coroutines
..........................................

When a coroutine function is called, but not awaited (e.g.  ‘coro()’
instead of ‘await coro()’) or the coroutine is not scheduled with *note
asyncio.create_task(): 1c9, asyncio will emit a *note RuntimeWarning:
4d1.:

     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()

Output in debug mode:

     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()

The usual fix is to either await the coroutine or call the *note
asyncio.create_task(): 1c9. function:

     async def main():
         await test()


File: python.info,  Node: Detect never-retrieved exceptions,  Prev: Detect never-awaited coroutines,  Up: Desenvolvendo com asyncio

5.19.1.136 Detect never-retrieved exceptions
............................................

If a *note Future.set_exception(): e6c. is called but the Future object
is never awaited on, the exception would never be propagated to the user
code.  In this case, asyncio would emit a log message when the Future
object is garbage collected.

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: 1fe8. to get the traceback where the task
was created:

     asyncio.run(main(), debug=True)

Output in debug mode:

     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.14/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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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(): f95. 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: d2.

     Classes que simplificam a escrita de servidores de rede.

Módulo *note ssl: d5.

     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.14/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: 1ac2. 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: 193. 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: 1ac2. socket
     paths were assumed to use UTF-8 encoding.

     Alterado na versão 3.5: Writable *note bytes-like object: 193. is
     now accepted.

   - A pair ‘(host, port)’ is used for the *note AF_INET: 1abf. 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: 1ac0. 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: d1. 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: 37de. 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: 37df. 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: b22. 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.

   - *note AF_BLUETOOTH: 1ac1. supports the following protocols and
     address formats:

        - *note BTPROTO_L2CAP: 282. accepts a tuple ‘(bdaddr, psm[,
          cid[, bdaddr_type]])’ where:

             - ‘bdaddr’ is a string specifying the Bluetooth address.

             - ‘psm’ is an integer specifying the Protocol/Service
               Multiplexer.

             - ‘cid’ is an optional integer specifying the Channel
               Identifier.  If not given, defaults to zero.

             - ‘bdaddr_type’ is an optional integer specifying the
               address type; one of *note BDADDR_BREDR: 37e0. (default),
               *note BDADDR_LE_PUBLIC: 37e1, *note BDADDR_LE_RANDOM:
               37e2.

          Alterado na versão 3.14: Added ‘cid’ and ‘bdaddr_type’ fields.

        - *note BTPROTO_RFCOMM: 37e3. accepts ‘(bdaddr, channel)’ where
          ‘bdaddr’ is the Bluetooth address as a string and ‘channel’ is
          an integer.

        - *note BTPROTO_HCI: 280. accepts a format that depends on your
          OS.

             - On Linux it accepts an integer ‘device_id’ or a tuple
               ‘(device_id, [channel])’ where ‘device_id’ specifies the
               number of the Bluetooth device, and ‘channel’ is an
               optional integer specifying the HCI channel (*note
               HCI_CHANNEL_RAW: 37e4. by default).

             - 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.

          Alterado na versão 3.14: Added ‘channel’ field.  ‘device_id’
          not packed in a tuple is now accepted.

        - *note BTPROTO_SCO: 281. accepts ‘bdaddr’ where ‘bdaddr’ is the
          Bluetooth address as a string or a *note bytes: 192. object.
          (ex.  ‘'12:23:34:45:56:67'’ or ‘b'12:23:34:45:56:67'’)

          Alterado na versão 3.14: FreeBSD support added.

   - *note AF_ALG: ec6. 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: 1fed.: Linux >= 2.6.38.

     Some algorithm types require more recent Kernels.

     Adicionado na versão 3.6.

   - *note AF_VSOCK: d61. 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: 1fed.: Linux >= 3.9

     See ‘vsock(7)(2)’

     Adicionado na versão 3.7.

   - *note AF_PACKET: 37e5. 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: 1a51. to capture all protocols, one of the *note
          ETHERTYPE_* constants: 1a52. 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: 1fed.: Linux >= 2.2.

   - *note AF_QIPCRTR: 37e6. 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: 1fed.: 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: 1fed.: Linux >= 2.6.20, FreeBSD >= 10.1

     Adicionado na versão 3.9.

   - *note AF_HYPERV: 37e7. 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: 2bf. or one of its
subclasses.

Non-blocking mode is supported through *note setblocking(): 2eca.  A
generalization of this based on timeouts is supported through *note
settimeout(): 37e8.

   ---------- 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: d1. exports the following elements.

* Menu:

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


File: python.info,  Node: Exceções<18>,  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: 2bf.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 2bf.

 -- Exceção: socket.herror

     A subclass of *note OSError: 2bf, 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(): 1b70. and
     *note gethostbyaddr(): 1b6f.  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: 2bf.

 -- Exceção: socket.gaierror

     A subclass of *note OSError: 2bf, this exception is raised for
     address-related errors by *note getaddrinfo(): 19fb. and *note
     getnameinfo(): 1978.  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: 2bf.

 -- Exceção: socket.timeout

     A deprecated alias of *note TimeoutError: a2c.

     A subclass of *note OSError: 2bf, this exception is raised when a
     timeout occurs on a socket which has had timeouts enabled via a
     prior call to *note settimeout(): 37e8. (or implicitly through
     *note setdefaulttimeout(): 37ec.).  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: 2bf.

     Alterado na versão 3.10: Esta classe foi feita como um apelido de
     *note TimeoutError: a2c.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: Constantes<8>,  Next: Funções<8>,  Prev: Exceções<18>,  Up: Conteúdo do módulo<4>

5.19.2.4 Constantes
...................

The AF_* and SOCK_* constants are now ‘AddressFamily’ and ‘SocketKind’
*note IntEnum: ecf. 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(): f95.  If the *note
     AF_UNIX: 1ac2. 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: 3730. means that *note getaddrinfo(): 19fb. 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(): f95.  More constants may be available
     depending on the system.  (Only *note SOCK_STREAM: 14ef. and *note
     SOCK_DGRAM: 14ee. 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: 1fed.: 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(): ec5. and *note getsockopt(): ec4. 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: Added support for ‘TCP_FASTOPEN’,
     ‘TCP_KEEPCNT’ on Windows platforms when available.

     Alterado na versão 3.7: ‘TCP_NOTSENT_LOWAT’ was added.

     Added support for ‘TCP_KEEPIDLE’, ‘TCP_KEEPINTVL’ on Windows
     platforms when available.

     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.

     Alterado na versão 3.14: Added missing ‘IP_FREEBIND’, ‘IP_RECVERR’,
     ‘IPV6_RECVERR’, ‘IP_RECVTTL’, and ‘IP_RECVORIGDSTADDR’ on Linux.

     Alterado na versão 3.14: Added support for ‘TCP_QUICKACK’ on
     Windows platforms when available.

 -- 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: 1fed.: 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.14: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: Linux >= 2.2.

 -- Dado: socket.ETH_P_ALL

     ‘ETH_P_ALL’ can be used in the *note socket: f95. constructor as
     'proto' for the *note AF_PACKET: 37e5. family in order to capture
     every packet, regardless of protocol.

     For more information, see the ‘packet(7)(2)’ manpage.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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(): ec2. 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: 1fed.: 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: 1fed.: Linux >= 4.8.

     Adicionado na versão 3.7.

 -- Dado: socket.AF_LINK

     *note Disponibilidade: 1fed.: 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.AF_BLUETOOTH
 -- Dado: socket.BTPROTO_L2CAP
 -- Dado: socket.BTPROTO_RFCOMM
 -- Dado: socket.BTPROTO_HCI
 -- Dado: socket.BTPROTO_SCO

     Integer constants for use with Bluetooth addresses.

 -- Dado: socket.BDADDR_ANY
 -- Dado: socket.BDADDR_LOCAL

     These are string constants containing Bluetooth addresses with
     special meanings.  For example, *note BDADDR_ANY: 37fd. can be used
     to indicate any address when specifying the binding socket with
     *note BTPROTO_RFCOMM: 37e3.

 -- Dado: socket.BDADDR_BREDR
 -- Dado: socket.BDADDR_LE_PUBLIC
 -- Dado: socket.BDADDR_LE_RANDOM

     These constants describe the Bluetooth address type when binding or
     connecting a *note BTPROTO_L2CAP: 282. socket.

     *note Disponibilidade: 1fed.: Linux, FreeBSD

     Adicionado na versão 3.14.

 -- Dado: socket.SOL_RFCOMM
 -- Dado: socket.SOL_L2CAP
 -- Dado: socket.SOL_HCI
 -- Dado: socket.SOL_SCO
 -- Dado: socket.SOL_BLUETOOTH

     Used in the level argument to the *note setsockopt(): ec5. and
     *note getsockopt(): ec4. methods of Bluetooth socket objects.

     *note SOL_BLUETOOTH: 3803. is only available on Linux.  Other
     constants are available if the corresponding protocol is supported.

 -- Dado: SO_L2CAP_*
 -- Dado: socket.L2CAP_LM

 -- Dado: L2CAP_LM_*

 -- Dado: SO_RFCOMM_*

 -- Dado: RFCOMM_LM_*

 -- Dado: SO_SCO_*

 -- Dado: SO_BTH_*

 -- Dado: BT_*

     Used in the option name and value argument to the *note
     setsockopt(): ec5. and *note getsockopt(): ec4. methods of
     Bluetooth socket objects.

     ‘BT_*’ and *note L2CAP_LM: 3804. are only available on Linux.
     ‘SO_BTH_*’ are only available on Windows.  Other constants may be
     available on Linux and various BSD platforms.

     Adicionado na versão 3.14.

 -- Dado: socket.HCI_FILTER
 -- Dado: socket.HCI_TIME_STAMP
 -- Dado: socket.HCI_DATA_DIR
 -- Dado: socket.SO_HCI_EVT_FILTER
 -- Dado: socket.SO_HCI_PKT_FILTER

     Option names for use with *note BTPROTO_HCI: 280.  Availability and
     format of the option values depend on platform.

     Alterado na versão 3.14: Added ‘SO_HCI_EVT_FILTER’ and
     ‘SO_HCI_PKT_FILTER’ on NetBSD and DragonFly BSD. Added
     ‘HCI_DATA_DIR’ on FreeBSD, NetBSD and DragonFly BSD.

 -- Dado: socket.HCI_DEV_NONE

     The ‘device_id’ value used to create an HCI socket that isn’t
     specific to a single Bluetooth adapter.

     *note Disponibilidade: 1fed.: Linux

     Adicionado na versão 3.14.

 -- Dado: socket.HCI_CHANNEL_RAW
 -- Dado: socket.HCI_CHANNEL_USER
 -- Dado: socket.HCI_CHANNEL_MONITOR
 -- Dado: socket.HCI_CHANNEL_CONTROL
 -- Dado: socket.HCI_CHANNEL_LOGGING

     Possible values for ‘channel’ field in the *note BTPROTO_HCI: 280.
     address.

     *note Disponibilidade: 1fed.: Linux

     Adicionado na versão 3.14.

 -- Dado: socket.AF_QIPCRTR

     Constant for Qualcomm’s IPC router protocol, used to communicate
     with service providing remote processors.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: Linux >= 3.9

 -- Dado: socket.SO_REUSEPORT_LB

          Constant to enable duplicate address and port bindings with
          load balancing.

     Adicionado na versão 3.14.

     *note Disponibilidade: 1fed.: FreeBSD >= 12.0

 -- 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: 1fed.: 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: 1fed.: 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(): 3825. method of
     socket objects.

     *note Disponibilidade: 1fed.: 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: 3828.

 -- 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: 1abf.
     (the default), *note AF_INET6: 1ac0, *note AF_UNIX: 1ac2, *note
     AF_CAN: 37de, *note AF_PACKET: 37e5, or *note AF_RDS: 37f5.  The
     socket type should be *note SOCK_STREAM: 14ef. (the default), *note
     SOCK_DGRAM: 14ee, *note SOCK_RAW: 37ee. 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:
     37de. the protocol should be one of ‘CAN_RAW’, *note CAN_BCM: 1199,
     *note CAN_ISOTP: 37df. or *note CAN_J1939: b22.

     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(): 3770. but not the actual OS resource.  Unlike
     *note socket.fromfd(): 3829, 'fileno' will return the same socket
     and not a duplicate.  This may help close a detached socket using
     *note socket.close(): d5e.

     The newly created socket is *note non-inheritable: 10f2.

     Levanta um *note evento de auditoria: 1b5d. ‘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: df8. or *note
     SOCK_CLOEXEC: df9. bit flags are applied to 'type' they are
     cleared, and *note socket.type: dfa. 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(): f95.
     function above.  The default family is *note AF_UNIX: 1ac2. if
     defined on the platform; otherwise, the default is *note AF_INET:
     1abf.

     The newly created sockets are *note non-inheritable: 10f2.

     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(): f97.: if 'host'
     is a non-numeric hostname, it will try to resolve it for both *note
     AF_INET: 1abf. and *note AF_INET6: 1ac0, 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(): 382a. 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: 4cc.
     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: 1abf. or *note AF_INET6:
     1ac0.  'backlog' is the queue size passed to *note socket.listen():
     1054.; 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: 1ac0. and
     the platform supports it the socket will be able to accept both
     IPv4 and IPv6 connections, else it will raise *note ValueError:
     2ea.  Most POSIX platforms and Windows are supposed to support this
     functionality.  When this functionality is enabled the address
     returned by *note socket.getpeername(): 3770. 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(): c17.:

          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(): 2b6d. method) and build a socket
     object from the result.  Address family, socket type and protocol
     number are as for the *note socket(): f95. 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: 10f2.

     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(): df6. method.  The socket is assumed to be in
     blocking mode.

     *note Disponibilidade: 1fed.: 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: d1. module also offers various network-related
services:

 -- Função: socket.close (fd)

     Close a socket file descriptor.  This is like *note os.close():
     d5f, but for sockets.  On some platforms (most noticeable Windows)
     *note os.close(): d5f. 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:
     3730, 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(): f95. 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: 1abf, a ‘(address,
     port, flowinfo, scope_id)’ 4-tuple for *note AF_INET6: 1ac0.), and
     is meant to be passed to the *note socket.connect(): f97. 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: 14ef. or *note SOCK_DGRAM: 14ee.) 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: 1b5d. ‘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(): 1b6f. 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():
     2eb4. 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(): 1b70. for a more complete interface.  *note
     gethostbyname(): 382d. does not support IPv6 name resolution, and
     *note getaddrinfo(): 19fb. should be used instead for IPv4/v6 dual
     stack support.

     Levanta um *note evento de auditoria: 1b5d. ‘socket.gethostbyname’
     com o argumento ‘hostname’.

     *note Disponibilidade: 1fed.: 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(): 1b70. does not support IPv6 name
     resolution, and *note getaddrinfo(): 19fb. should be used instead
     for IPv4/v6 dual stack support.

     Levanta um *note evento de auditoria: 1b5d. ‘socket.gethostbyname’
     com o argumento ‘hostname’.

     *note Disponibilidade: 1fed.: 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: 1b5d. ‘socket.gethostname’
     sem argumentos.

     Note: *note gethostname(): 2eb4. doesn’t always return the fully
     qualified domain name; use *note getfqdn(): 1a24. for that.

     *note Disponibilidade: 1fed.: 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(): 1a24.
     *note gethostbyaddr(): 1b6f. supports both IPv4 and IPv6.

     Levanta um *note evento de auditoria: 1b5d. ‘socket.gethostbyaddr’
     com o argumento ‘ip_address’.

     *note Disponibilidade: 1fed.: 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: 1b5d. ‘socket.getnameinfo’
     com o argumento ‘sockaddr’.

     *note Disponibilidade: 1fed.: 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(): f95. function.  This is usually only needed for
     sockets opened in “raw” mode (*note SOCK_RAW: 37ee.); for the
     normal socket modes, the correct protocol is chosen automatically
     if the protocol is omitted or zero.

     *note Disponibilidade: 1fed.: 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: 1b5d. ‘socket.getservbyname’
     com os argumentos ‘servicename’, ‘protocolname’.

     *note Disponibilidade: 1fed.: 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: 1b5d. ‘socket.getservbyport’
     com os argumentos ‘port’ e ‘protocolname’.

     *note Disponibilidade: 1fed.: 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: a77. 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: a77. 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(): b50. 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: 2bf. will be raised.  Note that exactly what is
     valid depends on the underlying C implementation of ‘inet_aton()’.

     *note inet_aton(): b50. does not support IPv6, and *note
     inet_pton(): b51. 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:
     193. 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: 2bf. will be raised.  *note inet_ntoa():
     3833. does not support IPv6, and *note inet_ntop(): 119b. should be
     used instead for IPv4/v6 dual stack support.

     Alterado na versão 3.5: Writable *note bytes-like object: 193. 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(): b51. is useful when a
     library or network protocol calls for an object of type ‘in_addr’
     (similar to *note inet_aton(): b50.) or ‘in6_addr’.

     Supported values for 'address_family' are currently *note AF_INET:
     1abf. and *note AF_INET6: 1ac0.  If the IP address string
     'ip_string' is invalid, *note OSError: 2bf. 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: 1fed.: 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: 193. 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(): 119b. is useful when a library or network
     protocol returns an object of type ‘in_addr’ (similar to *note
     inet_ntoa(): 3833.) or ‘in6_addr’.

     Supported values for 'address_family' are currently *note AF_INET:
     1abf. and *note AF_INET6: 1ac0.  If the bytes object 'packed_ip' is
     not the correct length for the specified address family, *note
     ValueError: 2ea. will be raised.  *note OSError: 2bf. is raised for
     errors from the call to *note inet_ntop(): 119b.

     *note Disponibilidade: 1fed.: Unix, Windows.

     Alterado na versão 3.4: Suporte para Windows adicionado.

     Alterado na versão 3.5: Writable *note bytes-like object: 193. 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(): f9a. to
     receive a single item of ancillary data, but RFC 3542(4) requires
     portable applications to use *note CMSG_SPACE(): 1ccd. and thus
     include space for padding, even when the item will be the last in
     the buffer.  Raises *note OverflowError: a77. if 'length' is
     outside the permissible range of values.

     *note Disponibilidade: 1fed.: 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(): f9a. 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(): 1ccd.
     values for their associated data lengths.  Raises *note
     OverflowError: a77. 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: 1fed.: 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(): 37e8. 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: 2bf. if you don’t have enough rights.

     Levanta um *note evento de auditoria: 1b5d. ‘socket.sethostname’
     com o argumento ‘name’.

     *note Disponibilidade: 1fed.: 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: 2bf. if the system call fails.

     *note Disponibilidade: 1fed.: 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: 2bf. if no interface with the given
     name exists.

     *note Disponibilidade: 1fed.: 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():
     c18.

 -- Função: socket.if_indextoname (if_index)

     Return a network interface name corresponding to an interface index
     number.  *note OSError: 2bf. if no interface with the given index
     exists.

     *note Disponibilidade: 1fed.: 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():
     c18.

 -- Função: socket.send_fds (sock, buffers, fds[, flags[, address]])

     Send the list of file descriptors 'fds' over an *note AF_UNIX:
     1ac2. socket 'sock'.  The 'fds' parameter is a sequence of file
     descriptors.  Consult *note sendmsg(): 696. for the documentation
     of these parameters.

     *note Disponibilidade: 1fed.: Unix, not WASI.

     Unix platforms supporting *note sendmsg(): 696. 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:
     1ac2. socket 'sock'.  Return ‘(msg, list(fds), flags, addr)’.
     Consult *note recvmsg(): f9a. for the documentation of these
     parameters.

     *note Disponibilidade: 1fed.: Unix, not WASI.

     Unix platforms supporting *note recvmsg(): f9a. 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():
139b, these correspond to Unix system calls applicable to sockets.

Alterado na versão 3.2: Support for the *note context manager: 1e0.
protocol was added.  Exiting the context manager is equivalent to
calling *note close(): d5e.

 -- 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: 10f2.

     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: f7c.
     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: 1b5d. ‘socket.bind’ com os
     argumentos ‘self’, ‘address’.

     *note Disponibilidade: 1fed.: 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(): 139b. 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(): d5e. them explicitly, or to
     use a *note with: 186. statement around them.

     Alterado na versão 3.6: *note OSError: 2bf. is now raised if an
     error occurs when the underlying ‘close()’ call is made.

          Nota: *note close(): d5e. 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(): 3825. before *note
          close(): d5e.

 -- 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: a2c.
     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: f7c. exception if the
     connection is interrupted by a signal (or the exception raised by
     the signal handler).

     Levanta um *note evento de auditoria: 1b5d. ‘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: f7c.
     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: 1fed.: 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: 1b5d. ‘socket.connect’ com os
     argumentos ‘self’, ‘address’.

     *note Disponibilidade: 1fed.: 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: 10f2.

     Alterado na versão 3.4: The socket is now non-inheritable.

     *note Disponibilidade: 1fed.: 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(): f94.

     Under Windows the small integer returned by this method cannot be
     used where a file descriptor can be used (such as *note
     os.fdopen(): 2217.).  Unix does not have this limitation.

 -- Método: socket.get_inheritable ()

     Get the *note inheritable flag: 10f2. 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.: d60.) 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: db. for a way to decode C structures encoded as byte
     strings).

     *note Disponibilidade: 1fed.: 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(): 2eca. or *note settimeout(): 37e8.

 -- Método: socket.ioctl (control, option)

     The *note ioctl(): ec2. 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(): 17bb. and
     *note fcntl.ioctl(): 1669. 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’.

     *note Disponibilidade: 1fed.: Windows

     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: 1fed.: 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: 13bf. associated with the socket.  The
     exact returned type depends on the arguments given to *note
     makefile(): 139b.  These arguments are interpreted the same way as
     by the built-in *note open(): 314. 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(): 139b. won’t
     close the original socket unless all other file objects have been
     closed and *note socket.close(): d5e. has been called on the socket
     object.

          Nota: On Windows, the file-like object created by *note
          makefile(): 139b. cannot be used where a file object with a
          file descriptor is expected, such as the stream arguments of
          *note subprocess.Popen(): 4b1.

 -- 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: f7c.
     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: f7c.
     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(): 1978.

 -- 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(): 1ccd. or *note CMSG_LEN(): 1cce, 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(): f98.

     The return value is a 4-tuple: ‘(data, ancdata, msg_flags,
     address)’.  The 'data' item is a *note bytes: 192. 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: 192. 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(): 696. and *note recvmsg(): f9a.
     can be used to pass file descriptors between processes over an
     *note AF_UNIX: 1ac2. socket.  When this facility is used (it is
     often restricted to *note SOCK_STREAM: 14ef. sockets), *note
     recvmsg(): f9a. will return, in its ancillary data, items of the
     form ‘(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)’, where 'fds' is
     a *note bytes: 192. object representing the new file descriptors as
     a binary array of the native C int type.  If *note recvmsg(): f9a.
     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(): f9a. will
     issue a *note RuntimeWarning: 4d1, 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(): 696.

          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: 1fed.: 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: f7c.
     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(): f9a. 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: 342. 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(): 1845. 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():
     f9a.

     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(): f9a.

     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: 1fed.: 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(): f98. 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: 3838.

     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: f7c.
     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(): f98. above.  Unlike *note send(): f9b, 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: f7c.
     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(): f98. above.  Return the number of bytes sent.
     (The format of 'address' depends on the address family — see
     above.)

     Levanta um *note evento de auditoria: 1b5d. ‘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: f7c.
     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: 193.
     (e.g.  *note bytes: 192. objects); the operating system may set a
     limit (*note sysconf(): 1845. 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(): 1ccd.)
     might support sending only one control message per call.  The
     'flags' argument defaults to 0 and has the same meaning as for
     *note send(): f9b.  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: 1ac2. socket, on systems which support the
     ‘SCM_RIGHTS’ mechanism.  See also *note recvmsg(): f9a.

          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: 1fed.: Unix, not WASI.

     Most Unix platforms.

     Levanta um *note evento de auditoria: 1b5d. ‘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: f7c.
     exception (see PEP 475(15) for the rationale).

 -- Método: socket.sendmsg_afalg ([msg], *, op[, iv[, assoclen[,
          flags]]])

     Specialized version of *note sendmsg(): 696. for *note AF_ALG: ec6.
     socket.  Set mode, IV, AEAD associated data length and flags for
     *note AF_ALG: ec6. socket.

     *note Disponibilidade: 1fed.: 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: cf8. 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: cf8. is not available (e.g.  Windows) or
     'file' is not a regular file *note send(): f9b. 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(): 159e. can be used to figure out the number of bytes
     which were sent.  The socket must be of *note SOCK_STREAM: 14ef.
     type.  Non-blocking sockets are not supported.

     Adicionado na versão 3.5.

 -- Método: socket.set_inheritable (inheritable)

     Set the *note inheritable flag: 10f2. 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(): 37e8.
     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: df8. flag on *note socket.type: dfa.

 -- 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: a2b. 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: 3839.

     Alterado na versão 3.7: The method no longer toggles *note
     SOCK_NONBLOCK: df8. flag on *note socket.type: dfa.

 -- Método: socket.setsockopt (level, optname, value: int)

 -- Método: socket.setsockopt (level, optname, value: 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: 193. 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: db. 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: 193. is
     now accepted.

     Alterado na versão 3.6: setsockopt(level, optname, None, optlen:
     int) form added.

     *note Disponibilidade: 1fed.: not WASI.

 -- Método: socket.shutdown (how)

     Shut down one or both halves of the connection.  If 'how' is *note
     SHUT_RD: 3822, further receives are disallowed.  If 'how' is *note
     SHUT_WR: 3823, further sends are disallowed.  If 'how' is *note
     SHUT_RDWR: 3824, further sends and receives are disallowed.

     *note Disponibilidade: 1fed.: 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(): df5.  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: 1fed.: Windows.

     Adicionado na versão 3.3.

Note that there are no methods ‘read()’ or ‘write()’; use *note recv():
f98. and *note send(): f9b. without 'flags' argument instead.

Socket objects also have these (read-only) attributes that correspond to
the values given to the *note socket: f95. 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(): 37ec.

   * 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: c6. 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: a2b. 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(): 3836. 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(): f97. operation is also subject to the timeout
setting, and in general it is recommended to call *note settimeout():
37e8. before calling *note connect(): f97. or pass a timeout parameter
to *note create_connection(): 877.  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(): 382a. is not *note None: 87a, sockets
returned by the *note accept(): f96. 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(): f96. is in 'blocking mode';

   * if the listening socket is in 'non-blocking mode', whether the
     socket returned by *note accept(): f96. 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(): f95, *note bind(): 1728, *note listen(): 1054,
*note accept(): f96. (possibly repeating the *note accept(): f96. to
service more than one client), while a client only needs the sequence
*note socket(): f95, *note connect(): f97.  Also note that the server
does not *note sendall(): f9c./*note recv(): f98. on the socket it is
listening on but on the new socket returned by *note accept(): f96.

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: 1199.) the
socket, you can use the *note socket.send(): f9b. and *note
socket.recv(): f98. 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: d1. 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: 372b.  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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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: add, que é derivada
do tipo *note socket.socket: f95, 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: 354.
ajuda a gerenciar configurações e certificados, que podem ser herdados
por soquetes SSL criados por meio do método *note
SSLContext.wrap_socket(): 73d.

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<21>.
* 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.14/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<19>.
* 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: add. devem ser criadas usando o método
*note SSLContext.wrap_socket(): 73d.  A função auxiliar *note
create_default_context(): 479. 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<19>,  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: 354. 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: 354. object with default settings
     for the given 'purpose'.  The settings are chosen by the *note ssl:
     d5. module, and usually represent a higher security level than when
     calling the *note SSLContext: 354. constructor directly.

     'cafile', 'capath', 'cadata' represent optional CA certificates to
     trust for certificate verification, as in *note
     SSLContext.load_verify_locations(): 10e4.  If all three are *note
     None: 87a, this function can choose to trust the system’s default
     CA certificates instead.

     The settings are: *note PROTOCOL_TLS_CLIENT: a68. or *note
     PROTOCOL_TLS_SERVER: a69, *note OP_NO_SSLv2: a30, and *note
     OP_NO_SSLv3: a31. with high encryption cipher suites without RC4
     and without unauthenticated cipher suites.  Passing *note
     SERVER_AUTH: 11a9. as 'purpose' sets *note verify_mode: 3847. to
     *note CERT_REQUIRED: 3848. and either loads CA certificates (when
     at least one of 'cafile', 'capath' or 'cadata' is given) or uses
     *note SSLContext.load_default_certs(): 11a8. to load default CA
     certificates.

     When *note keylog_filename: 3849. is supported and the environment
     variable ‘SSLKEYLOGFILE’ is set, *note create_default_context():
     479. enables key logging.

     The default settings for this context include *note
     VERIFY_X509_PARTIAL_CHAIN: 47a. and *note VERIFY_X509_STRICT: 47b.
     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: 354. and apply the settings yourself.

          Nota: If you find that when certain older clients or servers
          attempt to connect with a *note SSLContext: 354. 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: a31.  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: 47b. 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: a68. or *note PROTOCOL_TLS_SERVER: a69.
     protocol instead of generic *note PROTOCOL_TLS: 384a.

     Alterado na versão 3.13: The context now uses *note
     VERIFY_X509_PARTIAL_CHAIN: 47a. and *note VERIFY_X509_STRICT: 47b.
     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<19>,  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: 2bf.  The error code and
     message of *note SSLError: 1475. instances are provided by the
     OpenSSL library.

     Alterado na versão 3.3: *note SSLError: 1475. used to be a subtype
     of *note socket.error: 124c.

      -- 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: 1475. 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: 1475. raised by a *note non-blocking
     SSL socket: 384d. 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: 1475. raised by a *note non-blocking
     SSL socket: 384d. 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: 1475. 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: 1475. 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: 1475. 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: d69.

     Alterado na versão 3.7: The exception is now an alias for *note
     SSLCertVerificationError: d69.


File: python.info,  Node: Random generation,  Next: Manipulação de certificados,  Prev: Exceções<19>,  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: 1475. 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(): 1b69. can be used to check the
     status of the PRNG and *note RAND_add(): 3853. can be used to seed
     the PRNG.

     For almost all applications *note os.urandom(): 73b. 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(): 3853. 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: 193. 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(): 10e4.  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: 3855. to *note PROTOCOL_TLS: 384a. 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(): 11a1.  The return value is a
     *note named tuple: 853. ‘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: 1fed.: 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: 1fed.: 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: ecf. or *note
     enum.IntFlag: e8e. collections.

     Adicionado na versão 3.6.

 -- Dado: ssl.CERT_NONE

     Possible value for *note SSLContext.verify_mode: 3847.  Except for
     *note PROTOCOL_TLS_CLIENT: a68, 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: 372b.
     below.

 -- Dado: ssl.CERT_OPTIONAL

     Possible value for *note SSLContext.verify_mode: 3847.  In client
     mode, *note CERT_OPTIONAL: 385a. has the same meaning as *note
     CERT_REQUIRED: 3848.  It is recommended to use *note CERT_REQUIRED:
     3848. 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(): 10e4.

 -- Dado: ssl.CERT_REQUIRED

     Possible value for *note SSLContext.verify_mode: 3847.  In this
     mode, certificates are required from the other side of the socket
     connection; an *note SSLError: 1475. 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: 385b. must be enabled
     as well to verify the authenticity of a cert.  *note
     PROTOCOL_TLS_CLIENT: a68. uses *note CERT_REQUIRED: 3848. and
     enables *note check_hostname: 385b. 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(): 10e4.

 -- Classe: ssl.VerifyMode

     *note enum.IntEnum: ecf. collection of CERT_* constants.

     Adicionado na versão 3.6.

 -- Dado: ssl.VERIFY_DEFAULT

     Possible value for *note SSLContext.verify_flags: 11a4.  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: 11a4.  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: 10e4,
     validation will fail.

     Adicionado na versão 3.4.

 -- Dado: ssl.VERIFY_CRL_CHECK_CHAIN

     Possible value for *note SSLContext.verify_flags: 11a4.  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: 11a4. 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: 11a4. to enables
     proxy certificate verification.

     Adicionado na versão 3.10.

 -- Dado: ssl.VERIFY_X509_TRUSTED_FIRST

     Possible value for *note SSLContext.verify_flags: 11a4.  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: 11a4.  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: e8e. 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: a68. and *note PROTOCOL_TLS_SERVER: a69.

 -- 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: 3848. and
     *note check_hostname: 385b. 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: 384a.

     Descontinuado desde a versão 3.6: Use *note PROTOCOL_TLS: 384a.
     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: a69. or *note PROTOCOL_TLS_CLIENT: a68. with
     *note SSLContext.minimum_version: a66. and *note
     SSLContext.maximum_version: a67. 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: 384a.  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: 384a.  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: 384a.  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: a66.
     and *note SSLContext.maximum_version: a67. instead.

 -- Dado: ssl.OP_NO_TLSv1_1

     Prevents a TLSv1.1 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 384a.  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: 384a.  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: 384a.  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: e8e. 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: d6a. 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(): 355. 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.HAS_PHA

     Whether the OpenSSL library has built-in support for TLS-PHA.

     Adicionado na versão 3.14.

 -- 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():
     1340.

     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(): 11ad.

     Adicionado na versão 3.4.

 -- Classe: ssl.AlertDescription

     *note enum.IntEnum: ecf. collection of ALERT_DESCRIPTION_*
     constants.

     Adicionado na versão 3.6.

 -- Dado: Purpose.SERVER_AUTH

     Option for *note create_default_context(): 479. and *note
     SSLContext.load_default_certs(): 11a8.  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(): 479. and *note
     SSLContext.load_default_certs(): 11a8.  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: ecf. collection of SSL_ERROR_* constants.

     Adicionado na versão 3.6.

 -- Classe: ssl.TLSVersion

     *note enum.IntEnum: ecf. collection of SSL and TLS versions for
     *note SSLContext.maximum_version: a67. and *note
     SSLContext.minimum_version: a66.

     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: 387a.
     members except *note TLSVersion.TLSv1_2: 3880. and *note
     TLSVersion.TLSv1_3: 3881. 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:
     3828.:

        - *note accept(): f96.

        - *note bind(): 1728.

        - *note close(): f33.

        - *note connect(): f97.

        - *note detach(): 1418.

        - *note fileno(): 3836.

        - *note getpeername(): 3770, *note getsockname(): 283.

        - *note getsockopt(): ec4, *note setsockopt(): ec5.

        - *note gettimeout(): 3837, *note settimeout(): 37e8, *note
          setblocking(): 2eca.

        - *note listen(): 1054.

        - *note makefile(): 139b.

        - *note recv(): f98, *note recv_into(): 1519. (but passing a
          non-zero ‘flags’ argument is not allowed)

        - *note send(): f9b, *note sendall(): f9c. (with the same
          limitation)

        - *note sendfile(): 1053. (but *note os.sendfile: cf8. will be
          used for plain-text sockets only, else *note send(): f9b. will
          be used)

        - *note shutdown(): 3825.

     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: 384d.

     Instances of *note SSLSocket: add. must be created using the *note
     SSLContext.wrap_socket(): 73d. 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: add. instance directly, use *note
     SSLContext.wrap_socket(): 73d. to wrap a socket.

     Alterado na versão 3.7: *note SSLSocket: add. instances must to
     created with *note wrap_socket(): 73d.  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: 105f. or *note SSLWantWriteError:
     1060. if the socket is *note non-blocking: 384d. and the read would
     block.

     As at any time a re-negotiation is possible, a call to *note
     read(): 1064. 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(): 1064.

 -- 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: 105f. or *note SSLWantWriteError:
     1060. if the socket is *note non-blocking: 384d. and the write
     would block.

     As at any time a re-negotiation is possible, a call to *note
     write(): 1065. 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(): 1065.

     Nota: The *note read(): 1064. and *note write(): 1065. 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():
     3883. was not called.

     Normally you should use the socket API methods like *note recv():
     f98. and *note send(): f9b. 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():
     3837. 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: 385b. attribute
     of the socket’s *note context: 3884. 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: 2ea.

     If the ‘binary_form’ parameter is *note False: d1f, and a
     certificate was received from the peer, this method returns a *note
     dict: 183. 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: dfb, and a
     certificate was provided, this method returns the DER-encoded form
     of the entire certificate as a sequence of bytes, or *note None:
     87a. 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(): 11ae. will return *note None: 87a. if you used
          *note CERT_NONE: 3859. (rather than *note CERT_OPTIONAL: 385a.
          or *note CERT_REQUIRED: 3848.).

     See also *note SSLContext.check_hostname: 385b.

     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: 2ea. 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(): 18b1.

     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(): 1062. 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: 1342. 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: 3875. list.  Currently only the ‘tls-unique’
     channel binding, defined by RFC 5929(2), is supported.  *note
     ValueError: 2ea. 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(): 105a. 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(): 355.
     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:
     c1c.

     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: 1475. 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: 368.

     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: 354. 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: 169. 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: ecd. 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(): 1063. 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: 384a.; 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(): 479. lets the *note ssl: d5. 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: 1342, *note
     OP_CIPHER_SERVER_PREFERENCE: 1345, *note OP_SINGLE_DH_USE: 3866,
     *note OP_SINGLE_ECDH_USE: 3867, *note OP_NO_SSLv2: a30, and *note
     OP_NO_SSLv3: a31. (except for *note PROTOCOL_SSLv3: 3855.) 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: 354. without
     protocol argument is deprecated.  The context class will either
     require *note PROTOCOL_TLS_CLIENT: a68. or *note
     PROTOCOL_TLS_SERVER: a69. 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: 384a,
     *note PROTOCOL_TLS_CLIENT: a68, and *note PROTOCOL_TLS_SERVER: a69.
     use TLS 1.2 as minimum TLS version.

          Nota: *note SSLContext: 354. 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: 354. 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: 354. 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: 3889. 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: 1475. 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(): 11a1.  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: 11a9.
     loads certificates, that are flagged and trusted for TLS web server
     authentication (client side sockets).  *note Purpose.CLIENT_AUTH:
     11aa. 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: 3847. is
     other than *note CERT_NONE: 3859.  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: 11a4. 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: 3889. 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: 193.
     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: d1f. each list entry
     is a dict like the output of *note SSLSocket.getpeercert(): 11ae.
     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(): 388a.

     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: 1475. will be raised.

          Nota: when connected, the *note SSLSocket.cipher(): 3771.
          method of SSL sockets will give the currently selected cipher.

          TLS 1.3 cipher suites cannot be disabled with *note
          set_ciphers(): 388a.

 -- 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(): 105b. method will return the
     agreed-upon protocol.

     This method will raise *note NotImplementedError: 368. if *note
     HAS_ALPN: 105c. 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(): a6a. method will return the
     agreed-upon protocol.

     This method will raise *note NotImplementedError: 368. if *note
     HAS_NPN: 386e. 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: add, the second is a string
     that represents the server name that the client is intending to
     communicate (or *note None: 87a. if the TLS Client Hello does not
     contain a server name) and the third argument is the original *note
     SSLContext: 354.  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: add.’s *note SSLSocket.context: 3884. attribute to a
     new object of type *note SSLContext: 354. 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(): 105b. and *note
     SSLSocket.context: 3884.  The *note SSLSocket.getpeercert(): 11ae,
     *note SSLSocket.get_verified_chain(): 18b0, *note
     SSLSocket.get_unverified_chain(): 18b1. *note SSLSocket.cipher():
     3771. and *note SSLSocket.compression(): 1341. 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_*: 3877. can be returned.  Other return
     values will result in a TLS fatal error with *note
     ALERT_DESCRIPTION_INTERNAL_ERROR: 3877.

     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: 3876.

     This method will raise *note NotImplementedError: 368. 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: 1b78. 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:
     3877. 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: 3866. 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: 3867. option to further improve security.

     This method is not available if *note HAS_ECDH: 386c. 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: 388b. (default *note SSLSocket:
     add.).  The returned SSL socket is tied to the context, its
     settings and certificates.  'sock' must be a *note SOCK_STREAM:
     14ef. 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: 1475.

     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: 2ea. 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(): 1063. method.  Calling
     *note SSLSocket.do_handshake(): 1063. 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: dfb. (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: d1f, it will raise the exceptions back to
     the caller.

     'session', see *note session: 188f.

     To wrap an *note SSLSocket: add. in another *note SSLSocket: add,
     use *note SSLContext.wrap_bio(): d6f.

     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: 388b. instead of hard-coded *note
     SSLSocket: add.

 -- Atributo: SSLContext.sslsocket_class

     The return type of *note SSLContext.wrap_socket(): 73d, defaults to
     *note SSLSocket: add.  The attribute can be assigned to on
     instances of *note SSLContext: 354. in order to return a custom
     subclass of *note SSLSocket: add.

     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: 388c. (default *note
     SSLObject: d6e.).  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(): 73d.

     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: 388c. instead of hard-coded *note
     SSLObject: d6e.

 -- Atributo: SSLContext.sslobject_class

     The return type of *note SSLContext.wrap_bio(): d6f, defaults to
     *note SSLObject: d6e.  The attribute can be overridden on instance
     of class in order to return a custom subclass of *note SSLObject:
     d6e.

     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(): 1063.  The context’s *note verify_mode:
     3847. must be set to *note CERT_OPTIONAL: 385a. or *note
     CERT_REQUIRED: 3848, and you must pass 'server_hostname' to *note
     wrap_socket(): 73d. in order to match the hostname.  Enabling
     hostname checking automatically sets *note verify_mode: 3847. from
     *note CERT_NONE: 3859. to *note CERT_REQUIRED: 3848.  It cannot be
     set back to *note CERT_NONE: 3859. as long as hostname checking is
     enabled.  The *note PROTOCOL_TLS_CLIENT: a68. 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: 3847. is now
     automatically changed to *note CERT_REQUIRED: 3848. when hostname
     checking is enabled and *note verify_mode: 3847. is *note
     CERT_NONE: 3859.  Previously the same operation would have failed
     with a *note ValueError: 2ea.

 -- 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: 387a. enum member representing the highest
     supported TLS version.  The value defaults to *note
     TLSVersion.MAXIMUM_SUPPORTED: 387c.  The attribute is read-only for
     protocols other than *note PROTOCOL_TLS: 384a, *note
     PROTOCOL_TLS_CLIENT: a68, and *note PROTOCOL_TLS_SERVER: a69.

     The attributes *note maximum_version: a67, *note minimum_version:
     a66. and *note SSLContext.options: a2f. 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: 3864. in *note options: a2f. and *note
     maximum_version: a67. set to *note TLSVersion.TLSv1_2: 3880. 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: a67. except it is the lowest
     supported version or *note TLSVersion.MINIMUM_SUPPORTED: 387b.

     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: a69. 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: 3861, but you can
     specify other options such as *note OP_NO_SSLv2: a30. by ORing them
     together.

     Alterado na versão 3.6: *note SSLContext.options: a2f. returns
     *note Options: 3869. 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: a66. and *note
     SSLContext.maximum_version: a67. 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:
     3847. must be set to *note CERT_OPTIONAL: 385a. or *note
     CERT_REQUIRED: 3848, too.  The actual client cert exchange is
     delayed until *note SSLSocket.verify_client_post_handshake(): c1d.
     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: 385b. 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: 11a6. 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: 11a4.
     returns *note VerifyFlags: 385e. 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: 3859, *note CERT_OPTIONAL: 385a. or *note CERT_REQUIRED:
     3848.

     Alterado na versão 3.6: *note SSLContext.verify_mode: 3847. returns
     *note VerifyMode: 385c. 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: 193. representing the pre-shared key.
     Return a zero length PSK to reject the connection.

     Setting ‘callback’ to *note None: 87a. removes any existing
     callback.

          Nota: When using TLS 1.3:

             - the ‘hint’ parameter is always *note None: 87a.

             - 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: 368. if *note
     HAS_PSK: 3874. 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: 193. representing the pre-shared key.  Return a
     zero length PSK to reject the connection.

     Setting ‘callback’ to *note None: 87a. 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: 368. if *note
     HAS_PSK: 3874. is ‘False’.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) TLS 1.3 protocol will be available with *note PROTOCOL_TLS: 384a.
in OpenSSL >= 1.1.1.  There is no dedicated PROTOCOL constant for just
TLS 1.3.

   (2) *note SSLContext: 354. disables SSLv2 with *note OP_NO_SSLv2:
a30. by default.

   (3) *note SSLContext: 354. disables SSLv3 with *note OP_NO_SSLv3:
a31. by default.

   (4) TLS 1.3 protocol will be available with *note PROTOCOL_TLS: 384a.
in OpenSSL >= 1.1.1.  There is no dedicated PROTOCOL constant for just
TLS 1.3.

   (5) *note SSLContext: 354. disables SSLv2 with *note OP_NO_SSLv2:
a30. by default.

   (6) *note SSLContext: 354. disables SSLv3 with *note OP_NO_SSLv3:
a31. 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<21>,  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(): 11a8, this is done automatically with
*note create_default_context(): 479.


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(): 591. 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<21>,  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<21>

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<21>

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: a68. protocol configures the context for
cert validation and hostname verification.  *note verify_mode: 3847. is
set to *note CERT_REQUIRED: 3848. and *note check_hostname: 385b. 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:
3848. and *note check_hostname: 385b. 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: 372b. below.


File: python.info,  Node: Server-side operation,  Prev: Client-side operation,  Up: Exemplos<21>

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(): 73d. 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: 384d. and use an
event loop).


File: python.info,  Node: Notes on non-blocking sockets,  Next: Підтримка BIO пам’яті<2>,  Prev: Exemplos<21>,  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: add. methods will raise either *note
     SSLWantWriteError: 1060. or *note SSLWantReadError: 105f. instead
     of *note BlockingIOError: 234. if an I/O operation would block.
     *note SSLWantReadError: 105f. will be raised if a read operation on
     the underlying socket is necessary, and *note SSLWantWriteError:
     1060. 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: 1060. or *note SSLWantReadError: 105f.

   - Calling *note select(): f94. 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(): f94.

   - Conversely, since the SSL layer has its own framing, a SSL socket
     may still have data available for reading without *note select():
     f94. 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(): f94. call if still necessary.

     (of course, similar provisions apply when using other primitives
     such as *note poll(): 2f37, or those in the *note selectors: c7.
     module)

   - The SSL handshake itself will be non-blocking: the *note
     SSLSocket.do_handshake(): 1063. method has to be retried until it
     returns successfully.  Here is a synopsis using *note select():
     f94. 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: b. module supports *note non-blocking SSL sockets:
384d. and provides a higher level *note Streams API: 364f.  It polls for
events using the *note selectors: c7. module and handles *note
SSLWantWriteError: 1060, *note SSLWantReadError: 105f. and *note
BlockingIOError: 234. 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: add. 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:
f95, from which *note SSLSocket: add. 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: f95. 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: add. called *note SSLObject: d6e. is provided.

 -- Classe: ssl.SSLObject

     A reduced-scope variant of *note SSLSocket: add. 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: d6e.
     instance must be created using the *note wrap_bio(): d6f. method.
     This method will create the *note SSLObject: d6e. 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: 3884.

        - *note server_side: 3886.

        - *note server_hostname: d6c.

        - *note session: 188f.

        - *note session_reused: 3887.

        - *note read(): 1064.

        - *note write(): 1065.

        - *note getpeercert(): 11ae.

        - *note get_verified_chain(): 18b0.

        - *note get_unverified_chain(): 18b1.

        - *note selected_alpn_protocol(): 105b.

        - *note selected_npn_protocol(): a6a.

        - *note cipher(): 3771.

        - *note shared_ciphers(): 1062.

        - *note compression(): 1341.

        - *note pending(): 3885.

        - *note do_handshake(): 1063.

        - *note verify_client_post_handshake(): c1d.

        - *note unwrap(): 3883.

        - *note get_channel_binding(): 1340.

        - *note version(): 105e.

     When compared to *note SSLSocket: add, this object lacks the
     following features:

        - Any form of network IO; ‘recv()’ and ‘send()’ read and write
          only to the underlying *note MemoryBIO: 1058. buffers.

        - There is no 'do_handshake_on_connect' machinery.  You must
          always manually call *note do_handshake(): 1063. 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: 19f0. exception.

        - The method *note unwrap(): 3883. 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(): 11ad. will get an *note
          SSLObject: d6e. instance instead of a *note SSLSocket: add.
          instance as its first parameter.

     Some notes related to the use of *note SSLObject: d6e.:

        - All IO on an *note SSLObject: d6e. is *note non-blocking:
          384d.  This means that for example *note read(): 1064. will
          raise an *note SSLWantReadError: 105f. if it needs more data
          than the incoming BIO has available.

     Alterado na versão 3.7: *note SSLObject: d6e. instances must be
     created with *note wrap_bio(): d6f.  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: 1058. 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(): 38a1.  The
          attribute *note eof: 389f. 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: 188f.

      -- 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(): 479. 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: b1d.
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(): 591.

By contrast, if you create the SSL context by calling the *note
SSLContext: 354. 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: 354. constructor directly, *note
CERT_NONE: 3859. 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: 3848.  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(): 11ae, 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: 385b. 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: 3848. 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: a68. or *note
PROTOCOL_TLS_SERVER: a69. 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: a68. 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(): 388a. 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(): ece. 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: 98. or *note concurrent.futures:
24. 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(): 4af.  Any successful call of *note RAND_add(): 3853. or *note
RAND_bytes(): 73c. 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(): 388a. cannot enable or disable any TLS
     1.3 ciphers yet, but *note SSLContext.get_ciphers(): ece. returns
     them.

   - Session tickets are no longer sent as part of the initial handshake
     and are handled differently.  *note SSLSocket.session: 188f. and
     *note SSLSession: ecd. 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: f95.

     Documentation of underlying *note socket: d1. 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., Jeffrey I. Schiller

RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile(4)

     D. Cooper

RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2(5)

     T. Dierks et.  al.

RFC 6066: Transport Layer Security (TLS) Extensions(6)

     D. 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: c7. permite multiplexação de E/S de
     alto nível e eficiente, construída sobre as primitivas do módulo
     *note select: c6.  Os usuários são encorajados a usar o módulo
     *note selectors: c7. em vez disso, a menos que queiram controle
     preciso sobre as primitivas de nível de SO usadas.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

O módulo define o seguinte:

 -- Exceção: select.error

     Um apelido descontinuado de *note OSError: 2bf.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 2bf.

 -- 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: 38b4. 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: 10f2.

     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: 38b5.
     section below for the methods supported by epolling objects.

     ‘epoll’ objects support the context management protocol: when used
     in a *note with: 186. statement, the new file descriptor is
     automatically closed at the end of the block.

     O novo descritor de arquivo é *note não herdável: 10f2.

     Alterado na versão 3.3: Added the 'flags' parameter.

     Alterado na versão 3.4: Support for the *note with: 186. 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(): 10f4. 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: 38b6. 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: 38b7. below for the methods supported by
     kqueue objects.

     O novo descritor de arquivo é *note não herdável: 10f2.

     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: 38b9. below for the methods supported by
     kevent objects.

 -- Função: select.select (rlist, wlist, xlist[, timeout])

     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(): 2b6d. 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 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: 13bf. (e.g.  ‘sys.stdin’, or objects returned by
     *note open(): 314. or *note os.popen(): 318.), socket objects
     returned by *note socket.socket(): f95.  You may also define a
     'wrapper' class yourself, as long as it has an appropriate *note
     fileno(): 2b6d. 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: f7c.

 -- 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(): f94, ‘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: 1fed.: 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(): 2f37. 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(): 2b6d. 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(): 38bd. followed by a *note
     register(): 38bb.  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(): 38bb. method, 'fd' can be an integer or
     an object with a *note fileno(): 2b6d. 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: 87a, 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: f7c.

   ---------- 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.
                                   
                                   
     ‘EPOLLWAKEUP’                 Prevents sleep during event waiting.
                                   

     Adicionado na versão 3.6: ‘EPOLLEXCLUSIVE’ was added.  It’s only
     supported by Linux Kernel 4.5 or later.

     Adicionado na versão 3.14: ‘EPOLLWAKEUP’ was added.  It’s only
     supported by Linux Kernel 3.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: b4a. 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: f7c.

   ---------- 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(): 2f37. 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(): 2b6d. 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: 2bf. 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(): 38c5. method, 'fd' can be an integer or
     an object with a *note fileno(): 2b6d. method that returns an
     integer.

     Attempting to remove a file descriptor that was never registered
     causes a *note KeyError: 5dd. 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: 87a, 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: f7c.

   ---------- 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: f7c.

   ---------- 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(): 2b6d. 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<11>.
* Classes: Classes<4>.
* Exemplos: Exemplos<22>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/selectors.py


File: python.info,  Node: Introdução<11>,  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: c6. 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: 38d8. abstract base class, along with
several concrete implementations (*note KqueueSelector: 37ae, *note
EpollSelector: dc4.…), 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(): 2b6d. method, or a raw file
descriptor.  See *note file object: 13bf.

*note DefaultSelector: 38d9. 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: c6.

     Low-level I/O multiplexing module.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.


File: python.info,  Node: Classes<4>,  Next: Exemplos<22>,  Prev: Introdução<11>,  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: 38dd. is a *note namedtuple: 4da. used to
     associate a file object to its underlying file descriptor, selected
     event mask and attached data.  It is returned by several *note
     BaseSelector: 38d8. 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: 38d8. 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: 38d9. instead,
     or one of *note SelectSelector: 37ab, *note KqueueSelector: 37ae.
     etc.  if you want to specifically use an implementation, and your
     platform supports it.  *note BaseSelector: 38d8. and its concrete
     implementations support the *note context manager: 1e0. 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: 38dd. instance, or
          raises a *note ValueError: 2ea. in case of invalid event mask
          or file descriptor, or *note KeyError: 5dd. 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: 38dd. instance,
          or raises a *note KeyError: 5dd. if 'fileobj' is not
          registered.  It will raise *note ValueError: 2ea. 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: 38dd. instance, or
          raises a *note ValueError: 2ea. in case of invalid event mask
          or file descriptor, or *note KeyError: 5dd. 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: 38dd. 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: 38dd. instance associated
          to this file object, or raises *note KeyError: 5dd. 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: abd. instance mapping registered
          file objects to their associated *note SelectorKey: 38dd.
          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(): f94.-based selector.

 -- Classe: selectors.PollSelector

     *note select.poll(): 2f37.-based selector.

 -- Classe: selectors.EpollSelector

     *note select.epoll(): 118a.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.epoll(): 118a. object.

 -- Classe: selectors.DevpollSelector

     *note select.devpoll(): 118c.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.devpoll(): 118c. object.

     Adicionado na versão 3.5.

 -- Classe: selectors.KqueueSelector

     *note select.kqueue(): 1981.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.kqueue(): 1981. object.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Exemplos<22>,  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<23>.
* Nota sobre SIGPIPE::
* Nota sobre manipuladores de sinais e exceções::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 1330. permite definir manipuladores
personalizados a serem executados quando um sinal é recebido.  Um
pequeno número de manipuladores padrão são instalados: *note SIGPIPE:
38f0. é ignorado (então erros de gravação em encadeamentos e sockets
podem ser relatados como exceções comuns do Python) e *note SIGINT: 252.
é traduzido em uma exceção *note KeyboardInterrupt: bbb. 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: 2f72, 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: 38f2. para
executar o manipulador de sinal Python correspondente em um ponto
posterior (por exemplo, na próxima instrução *note bytecode: 4a4.).
Isso tem consequências:

   * Faz pouco sentido capturar erros síncronos como *note SIGFPE: 1277.
     ou *note SIGSEGV: 1276. 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: 5c. 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: 257e. 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: f3. 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<23>,  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: 1ac4, *note SIG_IGN: 1ac3.) e sigmask (*note
SIG_BLOCK: 38f6, *note SIG_UNBLOCK: 38f7, *note SIG_SETMASK: 38f8.)
listadas abaixo foram transformadas em *note enums: ecf. (*note Signals:
38f9, *note Handlers: 38fa. e *note Sigmasks: 38fb. respectivamente).
As funções *note getsignal(): 1962, *note pthread_sigmask(): 132c, *note
sigpending(): 132e. e *note sigwait(): 132f. retornam *note enums: ecf.
legíveis por humanos como objetos *note Signals: 38f9.

O módulo de sinal define três enumerações:

 -- Classe: signal.Signals

     Coleção de *note enum.IntEnum: ecf. de constantes SIG* e constantes
     CTRL_*.

     Adicionado na versão 3.5.

 -- Classe: signal.Handlers

     Coleção de *note enum.IntEnum: ecf. das constantes *note SIG_DFL:
     1ac4. e *note SIG_IGN: 1ac3.

     Adicionado na versão 3.5.

 -- Classe: signal.Sigmasks

     Coleção de *note enum.IntEnum: ecf. das constantes *note SIG_BLOCK:
     38f6, *note SIG_UNBLOCK: 38f7. e *note SIG_SETMASK: 38f8.

     *note Disponibilidade: 1fed.: 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: cb. 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: 38fc. é
     despejar o núcleo e sair, enquanto a ação padrão para *note
     SIGCHLD: 2f72. é 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: 1fed.: Unix.

 -- Dado: signal.SIGBREAK

     Interrupção do teclado (CTRL + BREAK).

     *note Disponibilidade: 1fed.: Windows.

 -- Dado: signal.SIGBUS

     Erro de barramento (acesso incorreto à memória).

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGCHLD

     Processo filho interrompido ou encerrado.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGCLD

     Apelido para *note SIGCHLD: 2f72.

     *note Disponibilidade: 1fed.: not macOS.

 -- Dado: signal.SIGCONT

     Continua o processo se ele estiver parado no momento

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGFPE

     Exceção de ponto flutuante.  Por exemplo, divisão por zero.

     Ver também
     ..........

     *note ZeroDivisionError: b35. é 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: 1fed.: Unix.

 -- Dado: signal.SIGILL

     Instrução ilegal.

 -- Dado: signal.SIGINT

     Interrupção do teclado (CTRL + C).

     A ação padrão é levantar *note KeyboardInterrupt: bbb.

 -- Dado: signal.SIGKILL

     Sinal para encerrar forçadamente.

     Ele não pode ser capturado, bloqueado ou ignorado.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGPIPE

     Encadeamento quebrado: escreve no encadeamento sem leitores.

     A ação padrão é ignorar o sinal.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGQUIT

     Terminal quit signal.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGSEGV

     Falha de segmentação: referência de memória inválida.

 -- 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: 1fed.: 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: 1fed.: Unix.

 -- Dado: signal.SIGUSR2

     Sinal definido pelo usuário 2.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: signal.SIGWINCH

     Sinal de redimensionamento do Windows.

     *note Disponibilidade: 1fed.: Unix.

 -- Dado: SIG*

     Todos os números de sinal são definidos simbolicamente.  Por
     exemplo, o sinal de desligamento é definido como *note
     signal.SIGHUP: 3900.; 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():
     1559.

     *note Disponibilidade: 1fed.: 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():
     1559.

     *note Disponibilidade: 1fed.: 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(): 3904. para obter números de sinais válidos.

 -- Dado: signal.ITIMER_REAL

     Diminui o intervalo do temporizador em tempo real e entrega *note
     SIGALRM: 38fd. 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(): 132c. 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(): 132c. 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(): 132c. indicando que a máscara de sinal deve ser
     substituída.

     Adicionado na versão 3.3.

O módulo *note signal: cb. define uma exceção:

 -- Exceção: signal.ItimerError

     Levantada para sinalizar um erro da implementação subjacente de
     *note setitimer(): 3909. ou *note getitimer(): 390a.  Espere este
     erro se um temporizador de intervalo inválido ou um tempo negativo
     for passado para *note setitimer(): 3909.  Este erro é um subtipo
     de *note OSError: 2bf.

     Adicionado na versão 3.3: Este erro costumava ser um subtipo de
     *note IOError: 1249, que agora é um apelido de *note OSError: 2bf.

O módulo *note signal: cb. 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: 38fd. 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: 1fed.: 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: 1ac3, *note signal.SIG_DFL:
     1ac4. ou *note None: 87a.  Aqui, *note signal.SIG_IGN: 1ac3.
     significa que o sinal foi ignorado anteriormente, *note
     signal.SIG_DFL: 1ac4. 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: 252.  Retorna *note None: 87a. se 'signalnum' não
     tiver descrição.  Levanta *note ValueError: 2ea. 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: 1fed.: Unix.

     Veja a página man ‘signal(2)(9)’ para mais informações.

     veja também *note sigwait(): 132f, *note sigwaitinfo(): f9f, *note
     sigtimedwait(): f9e. e *note sigpending(): 132e.

 -- 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: 1fed.: Linux >= 5.1, Android >= *note
     build-time: d77. 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: 38f4.  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: f7c.

     Utilize a *note threading.get_ident(): 1356. ou o atributo *note
     ident: 2fc7. dos objetos *note threading.Thread: 176. 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: 1b5d. ‘signal.pthread_kill’
     com os argumentos ‘thread_id’, ‘signalnum’.

     *note Disponibilidade: 1fed.: Unix.

     Veja a página man ‘pthread_kill(3)(11)’ para mais informações.

     Veja também *note os.kill(): 1559.

     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: 38f6.: O conjunto de sinais bloqueados é a
          união do conjunto atual e do argumento 'mask'.

        * *note SIG_UNBLOCK: 38f7.: 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: 38f8.: O conjunto de sinais bloqueados é
          definido como o argumento 'mask'.

     'mask' é um conjunto de números de sinais (ex.: {*note
     signal.SIGINT: 252, *note signal.SIGTERM: 15d0.}).  Use *note
     valid_signals(): 3904. 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: d44. e ‘SIGSTOP’ não podem ser bloqueados.

     *note Disponibilidade: 1fed.: Unix.

     Veja a página man ‘sigprocmask(2)(12)’ e ‘pthread_sigmask(3)(13)’
     para mais informações.

     Veja também *note pause(): 390c, *note sigpending(): 132e. e *note
     sigwait(): 132f.

     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: 3905, *note signal.ITIMER_VIRTUAL: 3906.
     ou *note signal.ITIMER_PROF: 3907.) especificado por 'which' para
     disparar após 'seconds' (float é aceito, diferente de *note
     alarm(): 390b.) 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: 3905. enviará *note SIGALRM: 38fd, *note
     signal.ITIMER_VIRTUAL: 3906. enviará ‘SIGVTALRM’ e *note
     signal.ITIMER_PROF: 3907. enviará ‘SIGPROF’.

     Os valores antigos são retornados como uma tupla: (atraso,
     intervalo).

     Tentar passar um intervalo de tempo inválido causará uma *note
     ItimerError: 3908.

     *note Disponibilidade: 1fed.: Unix.

 -- Função: signal.getitimer (which)

     Retorna o valor atual de um intervalo de tempo especificado por
     'which'.

     *note Disponibilidade: 1fed.: 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: 38f4.; tentar
     chamá-la de outras threads levantará uma exceção *note ValueError:
     2ea.

     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: d1f, 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: 1fed.: 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(): cb. 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: 1ac3. ou *note signal.SIG_DFL: 1ac4.  O manipulador
     de sinal anterior será retornado (veja a descrição de *note
     getsignal(): 1962. 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: 38f4.; tentar
     chamá-la de outras threads levantará uma exceção *note ValueError:
     2ea.

     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: 8e4. ou consulte as descrições de atributo no
     módulo *note inspect: 82.).

     No Windows, *note signal(): cb. só pode ser chamado com *note
     SIGABRT: 1278, *note SIGFPE: 1277, *note SIGILL: 127a, *note
     SIGINT: 252, *note SIGSEGV: 1276, *note SIGTERM: 15d0. ou *note
     SIGBREAK: 38fe.  Uma exceção *note ValueError: 2ea. 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: 5e4. 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: 1fed.: Unix.

     Veja a página man ‘sigpending(2)(16)’ para mais informações.

     Veja também *note pause(): 390c, *note pthread_sigmask(): 132c. e
     *note sigwait(): 132f.

     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: 1fed.: Unix.

     Veja a página man ‘sigwait(3)(17)’ para mais informações.

     Veja também *note pause(): 390c, *note pthread_sigmask(): 132c,
     *note sigpending(): 132e, *note sigwaitinfo(): f9f. e *note
     sigtimedwait(): f9e.

     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: f7c. 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: 1fed.: Unix.

     Veja a página man ‘sigwaitinfo(2)(18)’ para mais informações.

     Veja também *note pause(): 390c, *note sigwait(): 132f. e *note
     sigtimedwait(): f9e.

     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(): f9f, mas recebe um argumento
     'timeout' adicional que especifica um tempo limite.  Se 'timeout'
     for especificado como ‘0’, uma consulta será realizada.  Retorna
     *note None: 87a. se ocorrer um tempo limite.

     *note Disponibilidade: 1fed.: Unix.

     Veja a página man ‘sigtimedwait(2)(20)’ para mais informações.

     Veja também *note pause(): 390c, *note sigwait(): 132f. e *note
     sigwaitinfo(): f9f.

     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<23>,  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(): 390b. 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(): f86. 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<23>,  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: 38f0. 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: 38f0. como *note SIG_DFL:
1ac4. para evitar *note BrokenPipeError: 1252.  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: 4a4.  Mais notavelmente, uma *note
KeyboardInterrupt: bbb. 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: bbb. (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: bbb, 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: bbb. como forma de encerrar o programa
sem problemas.  Em vez disso, devem instalar seu próprio manipulador
*note SIGINT: 252.  Abaixo está um exemplo de um servidor HTTP que evita
*note KeyboardInterrupt: bbb.:

     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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

Objetos arquivo mapeados na memória se comportam como *note bytearray:
342. e como *note objetos arquivo: 13bf.  Você pode usar objetos mmap na
maioria dos lugares onde *note bytearray: 342. é esperado; por exemplo,
você pode usar o módulo *note re: be. 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: 513,
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(): 2b6d. 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(): f86, 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(): 2b89. 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: 198.  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: 1b5d. ‘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: 513. for chamado.

     'flags' especifica a natureza do mapeamento.  *note MAP_PRIVATE:
     3914. 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: 3915. cria um mapeamento
     compartilhado com todos os outros processos que mapeiam as mesmas
     áreas do arquivo.  O valor padrão é *note MAP_SHARED: 3915.  Alguns
     sistemas têm sinalizadores adicionais possíveis, com a lista
     completa especificada em *note constantes MAP_*: 3916.

     '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(): 3917. e *note resize(): 3918. 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: 513.:

          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: 513. can also be used as a context manager in a *note
     with: 186. 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: 1b5d. ‘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: 193.
          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: 391c. 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: 198. exception.

      -- Método: read ([n])

          Return a *note bytes: 192. 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: 198. exception.
          Resizing a map created with 'trackfd' set to ‘False’, will
          raise a *note ValueError: 2ea. exception.

          'On Windows': Resizing the map will raise an *note OSError:
          2bf. 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: 193.
          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: 2ea. 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: 198. exception.

          Alterado na versão 3.5: Writable *note bytes-like object: 193.
          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: 198. 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(): bf1.  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(): 513.  *note MAP_ALIGNED_SUPER: 19ff. is only available
     at FreeBSD and *note MAP_CONCEAL: 1a00. 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: 1beb. constant.

     Adicionado na versão 3.11: Added *note MAP_STACK: 3941. constant.

     Adicionado na versão 3.12: Added *note MAP_ALIGNED_SUPER: 19ff. and
     *note MAP_CONCEAL: 1a00. constants.

     Adicionado na versão 3.13: Added *note MAP_32BIT: 1958, *note
     MAP_HASSEMAPHORE: 1953, *note MAP_JIT: 1955, *note MAP_NOCACHE:
     1954, *note MAP_NOEXTEND: 1952, *note MAP_NORESERVE: 1951, *note
     MAP_RESILIENT_CODESIGN: 1956, *note MAP_RESILIENT_MEDIA: 1957,
     *note MAP_TPRO: 195b, *note MAP_TRANSLATED_ALLOW_EXECUTE: 1959, and
     *note MAP_UNIX03: 195a. 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 — Manipulate mailboxes in various formats::
* 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: 3f. é 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: cf.  O pacote *note email: 3f.
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: 48.  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: 579.

Os outros dois componentes principais do pacote são *note parser: 52. e
*note generator: 44.  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: 579.  O gerador pega um *note
EmailMessage: 579. 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: 53.  Cada *note
EmailMessage: 579, cada *note generator: 44. e cada *note parser: 52.
tem um objeto associado *note policy: 53. que controla seu
comportamento.  Normalmente, uma aplicação precisa especificar a
política apenas quando uma *note EmailMessage: 579. é criada,
instanciando diretamente uma *note EmailMessage: 579. para criar um novo
e-mail ou analisando um fluxo de entrada usando um *note parser: 52.
Mas a política pode ser alterada quando a mensagem é serializada usando
um *note generator: 44.  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: 3f.
Começamos com o modelo de objeto *note message: 48, que é a interface
principal que uma aplicação usará, e seguimos com os componentes de
*note parser: 52. e *note generator: 44.  Em seguida, abordamos os
controles *note policy: 53, 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: 52.
pode detectar.  A seguir, abordamos os subcomponentes *note
headerregistry: 46. e os subcomponentes *note contentmanager: 41, 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: 57a, cobrem a API legada *note compat32: e8b. que lida muito
mais diretamente com os detalhes de como as mensagens de e-mail são
representadas.  A API *note compat32: e8b. '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: e8b. 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: 579./*note EmailPolicy: 12b3.

Conteúdos da documentação do pacote *note email: 3f.:

* 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.14/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: 3f. package is the *note
EmailMessage: 579. class, imported from the *note email.message: 48.
module.  It is the base class for the *note email: 3f. object model.
*note EmailMessage: 579. 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: 579. 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: 579. 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: 579. 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: 394b. 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: 53. documentation.

      -- 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: 57a. class
          'maxheaderlen' is accepted, but defaults to ‘None’, which
          means that by default the line length is controlled by the
          *note max_line_length: 394d. 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: 13ca.

          Flattening the message may trigger changes to the *note
          EmailMessage: 579. 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: 13ca. 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: fee. 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(6)-like message
          representation, instead of being a direct alias for *note
          as_string(): 394c.

      -- 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: 13cb.

          Flattening the message may trigger changes to the *note
          EmailMessage: 579. 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: 13cb. for
          a more flexible API for serializing messages.

      -- Método: __bytes__ ()

          Equivalent to *note as_bytes(): 394f.  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: 579. objects, otherwise return ‘False’.  When
          *note is_multipart(): 3951. returns ‘False’, the payload
          should be a string object (which might be a CTE encoded binary
          payload).  Note that *note is_multipart(): 3951. 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: 579. 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: 3953. 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(): 3955, but in an *note EmailMessage: 579.
     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: 5dd. 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(): 3959. 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: 395a.

      -- 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: 53. defines certain headers to be unique
          (as the standard policies do), this method may raise a *note
          ValueError: 2ea. 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__(): 581. 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__(): 395b. 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(7) 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(8) 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: 5dd.

      -- 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(): 3963.  If the ‘Content-Type’ header is
          invalid, return ‘text/plain’.

          (According to RFC 2045(9), messages always have a default
          type, *note get_content_type(): 3962. will always return a
          value.  RFC 2045(10) 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(11) 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(): 3962.

      -- 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(): 3962.

      -- 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(12) 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:
          579. está descontinuado.

          Note that existing parameter values of headers may be accessed
          through the *note params: 3968. 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:
          579. 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(): 396b.

      -- 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(): 396b.

      -- Método: set_boundary (boundary)

          Set the ‘boundary’ parameter of the ‘Content-Type’ header to
          'boundary'.  *note set_boundary(): 396d. will always quote
          'boundary' if necessary.  A *note HeaderParseError: 396e. 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(): 3960, because *note
          set_boundary(): 396d. 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(): 3972.

      -- 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(13).

          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(): 3974. 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(): 3974. 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(): 3951. 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(): 3974.)

      -- Método: get_content (*args, content_manager=None, **kw)

          Call the *note get_content(): 3979. 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: 53.

      -- Método: set_content (*args, content_manager=None, **kw)

          Call the *note set_content(): 397a. 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: 53.

      -- 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():
          1b4c. method, and *note attach(): 397f. it to the ‘multipart’.
          If the message is a non-‘multipart’, call *note
          make_related(): 397b. and then proceed as above.  If the
          message is any other type of ‘multipart’, raise a *note
          TypeError: 198.  If 'content_manager' is not specified, use
          the ‘content_manager’ specified by the current *note policy:
          53.  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(): 1b4c. method, and *note attach(): 397f. it to
          the ‘multipart’.  If the message is a non-‘multipart’ or
          ‘multipart/related’, call *note make_alternative(): 397c. and
          then proceed as above.  If the message is any other type of
          ‘multipart’, raise a *note TypeError: 198.  If
          'content_manager' is not specified, use the ‘content_manager’
          specified by the current *note policy: 53.

      -- 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():
          1b4c. method, and *note attach(): 397f. it to the ‘multipart’.
          If the message is a non-‘multipart’, ‘multipart/related’, or
          ‘multipart/alternative’, call *note make_mixed(): 397d. and
          then proceed as above.  If 'content_manager' is not specified,
          use the ‘content_manager’ specified by the current *note
          policy: 53.  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: 579. 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: 1399.
          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: 13ca. 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: 52. and *note
          email.generator: 44. 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: 3984, 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: 43.
          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: 579, except that no ‘MIME-Version’ headers
     are added when *note set_content(): 1b4c. is called, since
     sub-parts do not need their own ‘MIME-Version’ headers.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/email/message.py

   (2) Originally added in 3.4 as a *note provisional module: 1238.
Docs for legacy message class moved to *note email.message.Message;
Representing an email message using the compat32 API: 394a.

   (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) https://datatracker.ietf.org/doc/html/rfc6531.html

   (7) https://datatracker.ietf.org/doc/html/rfc2231.html

   (8) https://datatracker.ietf.org/doc/html/rfc2231.html

   (9) https://datatracker.ietf.org/doc/html/rfc2045.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/rfc2231.html

   (13) 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: 579. object,
adding headers using the dictionary interface, and adding payload(s)
using *note set_content(): 1b4c. and related methods, or they can be
created by parsing a serialized representation of the email message.

The *note email: 3f. 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: 579. 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(): 3951. method, and the subparts can be accessed via the
payload manipulation methods, such as *note get_body(): 3975, *note
iter_parts(): 3977, and *note walk(): 3974.

There are actually two parser interfaces available for use, the *note
Parser: 1399. API and the incremental *note FeedParser: 398a. API. The
*note Parser: 1399. 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: 398a. 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: 398a. 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: 3f. package’s bundled parser and the
*note EmailMessage: 579. class is embodied in the *note Policy: 12af.
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.14/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: 13c7, 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: 13c7. can of course be used to parse an email
message fully contained in a *note bytes-like object: 193, string, or
file, but the *note BytesParser: 13c8. API may be more convenient for
such use cases.  The semantics and results of the two parser APIs are
identical.

The *note BytesFeedParser: 13c7.’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: 13c7. 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: 3986.
attribute with a list of any problems it found in a message.  See the
*note email.errors: 43. module for the list of defects that it can find.

Here is the API for the *note BytesFeedParser: 13c7.:

 -- Classe: email.parser.BytesFeedParser (_factory=None, *,
          policy=policy.compat32)

     Create a *note BytesFeedParser: 13c7. instance.  Optional
     '_factory' is a no-argument callable; if not specified use the
     *note message_factory: e8a. 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: 12b0. policy, which maintains backward
     compatibility with the Python 3.2 version of the email package and
     provides *note Message: 57a. as the default factory.  All other
     policies provide *note EmailMessage: 579. as the default
     '_factory'.  For more information on what else 'policy' controls,
     see the *note policy: 53. documentation.

     Note: 'The policy keyword should always be specified'; The default
     will change to *note email.policy.default: 394b. 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: 193. 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(): 398c. is called after this method has been called.

 -- Classe: email.parser.FeedParser (_factory=None, *,
          policy=policy.compat32)

     Works like *note BytesFeedParser: 13c7. except that the input to
     the *note feed(): 398c. 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: fee. 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: 13c8. class, imported from the *note
email.parser: 52. 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: 193. or file.  The *note email.parser: 52.
module also provides *note Parser: 1399. for parsing strings, and
header-only parsers, *note BytesHeaderParser: 12b7. and *note
HeaderParser: 12b8, which can be used if you’re only interested in the
headers of the message.  *note BytesHeaderParser: 12b7. and *note
HeaderParser: 12b8. 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: 13c8. instance.  The '_class' and
     'policy' arguments have the same meaning and semantics as the
     '_factory' and 'policy' arguments of *note BytesFeedParser: 13c7.

     Note: 'The policy keyword should always be specified'; The default
     will change to *note email.policy.default: 394b. 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(): 257b. and the ‘read()’
          methods.

          The bytes contained in 'fp' must be formatted as a block of
          RFC 5322(1) (or, if *note utf8: fee. 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(): 398f. method, except it takes a
          *note bytes-like object: 193. instead of a file-like object.
          Calling this method on a *note bytes-like object: 193. is
          equivalent to wrapping 'bytes' in a *note BytesIO: 109a.
          instance first and calling *note parse(): 398f.

          Optional 'headersonly' is as with the *note parse(): 398f.
          method.

     Adicionado na versão 3.2.

 -- Classe: email.parser.BytesHeaderParser (_class=None, *,
          policy=policy.compat32)

     Exactly like *note BytesParser: 13c8, 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: 13c8, 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(): 1f5b. and the
          *note read(): 1f21. methods on file-like objects.

          Other than the text mode requirement, this method operates
          like *note BytesParser.parse(): 398f.

      -- Método: parsestr (text, headersonly=False)

          Similar to the *note parse(): 3991. 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: 111f. instance first and calling *note parse():
          3991.

          Optional 'headersonly' is as with the *note parse(): 3991.
          method.

 -- Classe: email.parser.HeaderParser (_class=None, *,
          policy=policy.compat32)

     Exactly like *note Parser: 1399, 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: 3f. 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:
     193.  This is equivalent to ‘BytesParser().parsebytes(s)’.
     Optional '_class' and 'policy' are interpreted as with the *note
     BytesParser: 13c8. 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: 13bf.  This is equivalent to
     ‘BytesParser().parse(fp)’.  '_class' and 'policy' are interpreted
     as with the *note BytesParser: 13c8. 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: 1399. 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: 13bf.  This is equivalent to ‘Parser().parse(fp)’.
     '_class' and 'policy' are interpreted as with the *note Parser:
     1399. 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(): 13c5.
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(): 3951, and *note iter_parts(): 3977. 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(): 3951, and *note iter_parts(): 3977. 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(): 3951. method will return ‘True’.  The single
     element yielded by *note iter_parts(): 3977. 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(): 3951. method may return ‘False’.  If such messages
     were parsed with the *note FeedParser: 398a, they will have an
     instance of the *note MultipartInvariantViolationDefect: 3996.
     class in their 'defects' attribute list.  See *note email.errors:
     43. 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(): 104f. 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: 52, 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: 53. não transformadora seja usada para ambas.  Ou seja,
analisar o fluxo de bytes serializado por meio da classe *note
BytesParser: 13c8. e, em seguida, regenerar o fluxo de bytes serializado
usando *note BytesGenerator: 13cb. deve produzir uma saída idêntica à
entrada (2).  (Por outro lado, usar o gerador em um *note EmailMessage:
579. construído pelo programa pode resultar em alterações no objeto
*note EmailMessage: 579. à medida que os padrões são preenchidos.)

A classe *note Generator: 13ca. 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: 13ca. 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: 13cb. que gravará qualquer
     mensagem fornecida ao método *note flatten(): 399b, ou qualquer
     texto codificado surrogateescape fornecido ao método *note write():
     399c, no *note objeto arquivo ou similar: 289a. '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_: fec. da 'policy' (que é ‘True’ para a política
     *note compat32: e8b. 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: 8f. 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: 57a. ou *note
     EmailMessage: 579. passado para ‘flatten’ para controlar a geração
     de mensagens.  Consulte *note email.policy: 53. 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: 13cb. foi criada.

          Se a opção *note policy: 53. *note cte_type: 399d. 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: 8f.) 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: 13cb. 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: 13cb.

Para facilitar, *note EmailMessage: 579. fornece os métodos *note
as_bytes(): 394f. e ‘bytes(aMessage)’ (também conhecidos como *note
__bytes__(): 3950.), que simplificam a geração de uma representação
binária serializada de um objeto de mensagem.  Para mais detalhes,
consulte *note email.message: 48.

Como strings não podem representar dados binários, a classe *note
Generator: 13ca. 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: 13ca. 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: 13cb, e não *note Generator: 13ca.

 -- Classe: email.generator.Generator (outfp, mangle_from_=None,
          maxheaderlen=None, *, policy=None)

     Retorna um objeto *note Generator: 13ca. que gravará qualquer
     mensagem fornecida ao método *note flatten(): 399f, ou qualquer
     texto fornecido ao método *note write(): 39a0, no *note objeto
     arquivo ou similar: 289a. '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_: fec. da 'policy' (que é ‘True’ para a política
     *note compat32: e8b. 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: 8f. 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: 57a. ou *note
     EmailMessage: 579. passado para ‘flatten’ para controlar a geração
     de mensagens.  Consulte *note email.policy: 53. 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: 13ca. foi criada.

          Se a opção *note policy: 53. *note cte_type: 399d. 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: 8f.) 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:
          13ca. 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: 13ca.  Isso fornece API arquivo ou similar
          suficiente para que instâncias de *note Generator: 13ca. sejam
          usadas na função *note print(): 116b.

Para facilitar, *note EmailMessage: 579. fornece os métodos *note
as_string(): 394c. e ‘str(aMessage)’ (também conhecidos como *note
__str__(): 394e.), que simplificam a geração de uma representação de
string formatada de um objeto de mensagem.  Para mais detalhes, consulte
*note email.message: 48.

O módulo *note email.generator: 44. também fornece uma classe derivada,
*note DecodedGenerator: e89, que é como a classe base *note Generator:
13ca, 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: 13ca, exceto que para qualquer subparte
     da mensagem passada para *note Generator.flatten(): 399f, 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: 13ca.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 53. que
exijam ajustes automáticos (por exemplo, *note refold_source: 399a. 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: 3f. 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: 12af. object encapsulates a set of attributes and
methods that control the behavior of various components of the email
package during use.  *note Policy: 12af. 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: 52. classes and the related convenience
functions, and for the *note Message: 57a. class, this is the *note
Compat32: 12b0. policy, via its corresponding pre-defined instance *note
compat32: e8b.  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: 579.
is the *note EmailPolicy: 12b3. policy, via its pre-defined instance
*note default: 394b.

When a *note Message: 57a. or *note EmailMessage: 579. object is
created, it acquires a policy.  If the message is created by a *note
parser: 52, 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: 44, 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:
52. 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: 52. module.

The first part of this documentation covers the features of *note
Policy: 12af, an *note abstract base class: 13b2. that defines the
features that are common to all policy objects, including *note
compat32: e8b.  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: 12b3. and *note Compat32: 12b0, which
implement the hooks that provide the standard behavior and the backward
compatible behavior and features, respectively.

*note Policy: 12af. instances are immutable, but they can be cloned,
accepting the same keyword arguments as the class constructor and
returning a new *note Policy: 12af. 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: 13cb. 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(): 112d. 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: 13b2. 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(): 12b1. 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: 87a. 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(): 39a6. and *note utf8: fee. 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: dfb, any defects encountered will be raised as
          errors.  If *note False: d1f. (the default), defects will be
          passed to the *note register_defect(): 39a8. method.

      -- Atributo: mangle_from_

          If *note True: dfb, 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: d1f.

          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: 57a. is used.

          Adicionado na versão 3.6.

      -- Atributo: verify_generated_headers

          If ‘True’ (the default), the generator will raise *note
          HeaderWriteError: 39a9. 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: 12b0. policy.  For backwards compatible,
          but unsafe, behavior, it must be set to ‘False’ explicitly.

          Adicionado na versão 3.13.

     The following *note Policy: 12af. 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: 12af. 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: 12af. 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: 39ab.

          The default implementation checks the *note raise_on_defect:
          39a7. 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(): 39a8.

      -- Método: register_defect (obj, defect)

          Register a 'defect' on 'obj'.  In the email package, 'defect'
          will always be a subclass of *note MessageDefect: 39ab.

          The default implementation calls the ‘append’ method of the
          ‘defects’ attribute of 'obj'.  When the email package calls
          *note handle_defect: 39aa, '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: 579.
          or *note Message: 57a. 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: 2ea. 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: 39a5. 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(): 39b0, 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: 12af. 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: e8a. attribute is
     *note EmailMessage: 579.

     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: 52. (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: 46.) 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(): 3978. or *note
          set_content(): 1b4c. method of an *note EmailMessage: 579.
          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: 39b2.

          Adicionado na versão 3.4.

     The class provides the following concrete implementations of the
     abstract methods of *note Policy: 12af.:

      -- Método: header_max_count (name)

          Returns the value of the *note max_count: 39b4. 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: 399a.
          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():
          1452.  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(): 192e. if *note cte_type: 399d. is
          ‘7bit’, except that the returned value is bytes.

          If *note cte_type: 399d. 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: 12b3. 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: fee. 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(): 1050. 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: 12b3, 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: 57a. results in that header
     being parsed and a header object created.

   * Fetching a header value from a *note Message: 57a. 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: 579. 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: 46.

 -- Classe: email.policy.Compat32 (**kw)

     This concrete *note Policy: 12af. is the backward compatibility
     policy.  It replicates the behavior of the email package in Python
     3.2.  The *note policy: 53. module also defines an instance of this
     class, *note compat32: e8b, 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: 12af. default:

      -- Atributo: mangle_from_

          O padrão é ‘True’.

     The class provides the following concrete implementations of the
     abstract methods of *note Policy: 12af.:

      -- 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: 1b4d. object using the ‘unknown-8bit’ charset.
          Otherwise it is returned unmodified.

      -- Método: fold (name, value)

          Headers are folded using the *note Header: 1b4d. 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: 1b4d. 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: 12b0, providing backward
     compatibility with the behavior of the email package in Python 3.2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 1238.

   (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:
43.

 -- Exceção: email.errors.MessageError

     Essa é a classe base para todas as exceções que o pacote *note
     email: 3f. pode levantar.  Ela é derivada da classe padrão *note
     Exception: bc3. e não define métodos adicionais.

 -- Exceção: email.errors.MessageParseError

     Essa é a classe base para exceções levantadas pela classe *note
     Parser: 1399.  Ela é derivada do *note MessageError: 39c4.  Essa
     classe pode ser usada internamente pelo analisador sintático usado
     pelo *note headerregistry: 46.

 -- 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: 39c5.  The *note set_boundary(): 396d. method
     will raise this error if the content type is unknown when the
     method is called.  *note Header: 1b4d. 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(): 397f. method is called on an instance
     of a class derived from *note MIMENonMultipart: 39c8. (e.g.  *note
     MIMEImage: 39c9.).  *note MultipartConversionError: 39c7. multiply
     inherits from *note MessageError: 39c4. and the built-in *note
     TypeError: 198.

 -- Exceção: email.errors.HeaderWriteError

     Raised when an error occurs when the *note generator: 44. 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: 2ea.

 -- Exceção: email.errors.HeaderDefect

     This is the base class for all defects found when parsing email
     headers.  It is derived from *note MessageDefect: 39ab.

Here is the list of the defects that the *note FeedParser: 398a. 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:
39ab.

 -- 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():
     3972. 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.14/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: 169.  The
particular class used to represent a given header is determined by the
*note header_factory: 39b1. of the *note policy: 53. 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:
12b3, all headers are produced by *note HeaderRegistry: 39d9. and have
*note BaseHeader: 395a. 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: 39da.
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: 39d9.  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: 39d9, 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: 39b1. 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: 39b1. call for 'name'; that is, case is
          preserved.

      -- Atributo: defects

          A tuple of *note HeaderDefect: 39ca. instances reporting any
          RFC compliance problems found during parsing.  The email
          package tries to be complete about detecting compliance
          issues.  See the *note errors: 43. 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: 39a5. characters as
          required to correctly fold the header according to 'policy'.
          A *note cte_type: 399d. of ‘8bit’ will be treated as if it
          were ‘7bit’, since headers may not contain arbitrary binary
          data.  If *note utf8: fee. 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():
     488. 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:
          4dc. 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: 39df. will be a naive *note datetime: 4dc.  If
          a specific timezone offset is found (including ‘+0000’), then
          *note datetime: 39df. will contain an aware ‘datetime’ that
          uses *note datetime.timezone: 12bb. 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: 4dc.
     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(): 2f5. function
     from the *note utils: 54. 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: 39e2. 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: 39e3. is ‘None’.

      -- Atributo: addresses

          A tuple of *note Address: 39e5. 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: 56. encoded domain names are also
     decoded to unicode.  The ‘decoded’ value is set by *note joining:
     24e4. the *note str: 169. value of the elements of the ‘groups’
     attribute with ‘', '’.

     A list of *note Address: 39e5. and *note Group: 39e2. 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: 39e0. 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: 53.),
          accessing this attribute will result in a *note ValueError:
          2ea.

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: 39b4. 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: 39ec. 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: 39ec. 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.ContentTransferEncoding

     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: 12b3. 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__:
     169a. 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: 39e5. 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.14/Lib/email/headerregistry.py

   (2) Originally added in 3.3 as a *note provisional module: 1238.

   (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: 5dd. for the full MIME type.

      -- Método: set_content (msg, obj, *args, **kw)

          If the ‘maintype’ is ‘multipart’, raise a *note TypeError:
          198.; otherwise look up a handler function based on the type
          of 'obj' (see next paragraph), call *note clear_content():
          3983. 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: 220c. (‘typ.__qualname__’)

             * the type’s *note name: 1699. (‘typ.__name__’).

          If none of the above match, repeat all of the checks above for
          each of the types in the *note MRO: 1835. (*note typ.__mro__:
          220e.).  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: 5dd. for the fully qualified
          name of the type.

          Also add a ‘MIME-Version’ header if one is not present (see
          also *note MIMEPart: 1130.).

      -- 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(): 3a04.

      -- 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():
          3a06.  For the possible values of 'typekey', see *note
          set_content(): 3a06.

* Menu:

* Content Manager Instances::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/email/contentmanager.py

   (2) Originally added in 3.4 as a *note provisional module: 1238.


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: 39b2, although more may be added in the future.
*note raw_data_manager: 39b2. is the *note content_manager: 1131.
provided by *note EmailPolicy: 12b3. and its derivatives.

 -- Dado: email.contentmanager.raw_data_manager

     This content manager provides only a minimum interface beyond that
     provided by *note Message: 57a. itself: it deals only with text,
     raw byte strings, and *note Message: 57a. 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: 579. object (for
          ‘message/rfc822’ parts), or a ‘bytes’ object (for all other
          non-multipart types).  Raise a *note KeyError: 5dd. 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: 198. if they are not
               specified.

             * For *note EmailMessage: 579. 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: 2ea.

             * For ‘str’ objects, if 'cte' is not set use heuristics to
               determine the most compact encoding.  Prior to encoding,
               *note str.splitlines(): 1452. is used to normalize all
               line boundaries, ensuring that each line of the payload
               is terminated by the current policy’s *note linesep:
               39a5. 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: 579, 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: 13cb.
               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: 3f. 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: 52.:

     # 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: 57a. class is very similar to the *note EmailMessage:
579. 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: 579. 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: 57a.) policy *note Compat32: 12b0.  If you are going to use
another policy, you should be using the *note EmailMessage: 579. 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: 57a. 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: 57a. 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: 57a. objects, for
MIME container documents (e.g.  ‘multipart/*’ and ‘message/rfc822’).

Here are the methods of the *note Message: 57a. class:

 -- Classe: email.message.Message (policy=compat32)

     If 'policy' is specified (it must be an instance of a *note policy:
     53. class) use the rules it specifies to update and serialize the
     representation of the message.  If 'policy' is not set, use the
     *note compat32: 12b0. policy, which maintains backward
     compatibility with the Python 3.2 version of the email package.
     For more information see the *note policy: 53. 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: 57a. 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: 13ca. instance and
          use its *note flatten(): 399f. 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(): 112d. and *note BytesGenerator: 13cb.)

          Alterado na versão 3.4: the 'policy' keyword argument was
          added.

      -- Método: __str__ ()

          Equivalent to *note as_string(): 112c.  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: 57a. 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: 13cb.
          instance and use its *note flatten(): 399b. 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(): 112d.  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: 57a. objects, otherwise return ‘False’.  When *note
          is_multipart(): 3972. returns ‘False’, the payload should be a
          string object (which might be a CTE encoded binary payload).
          (Note that *note is_multipart(): 3972. 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: 57a.
          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: 57a. objects before the
          call.  After the call, the payload will always be a list of
          *note Message: 57a. objects.  If you want to set the payload
          to a scalar object (e.g.  a string), use *note set_payload():
          3a11. instead.

          This is a legacy method.  On the *note EmailMessage: 579.
          class its functionality is replaced by *note set_content():
          1b4c. 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: 57a. objects when *note is_multipart(): 3972. is
          ‘True’, or a string when *note is_multipart(): 3972. 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(): 13c9. will
          return the 'i'-th element of the payload, counting from zero,
          if *note is_multipart(): 3972. is ‘True’.  An *note
          IndexError: 1723. 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(): 3972.
          is ‘False’) and 'i' is given, a *note TypeError: 198. 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: 39d2. or *note
          InvalidBase64CharactersDefect: 39d3, 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: 579.
          class its functionality is replaced by *note get_content():
          3978. and *note iter_parts(): 3977.

      -- 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(): 3a12. for details.

          This is a legacy method.  On the *note EmailMessage: 579.
          class its functionality is replaced by *note set_content():
          1b4c.

      -- Método: set_charset (charset)

          Set the character set of the payload to 'charset', which can
          either be a *note Charset: ff0. instance (see *note
          email.charset: 40.), a string naming a character set, or
          ‘None’.  If it is a string, it will be converted to a *note
          Charset: ff0. 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: 198.

          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: ff0, 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: 579.
          class its functionality is replaced by the 'charset' parameter
          of the *note email.message.EmailMessage.set_content(): 1b4c.
          method.

      -- Método: get_charset ()

          Return the *note Charset: ff0. instance associated with the
          message’s payload.

          This is a legacy method.  On the *note EmailMessage: 579.
          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(): 3a14, but in a *note
     Message: 57a. 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:
     1b4d. 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: 5dd. 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(): 3a17. 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__(): 581. 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__(): 17e3. 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:
          5dd. 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(): 3a1e. will be
          returned.  Since according to RFC 2045(5), messages always
          have a default type, *note get_content_type(): 3a1d. 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(): 3a1d.

      -- 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(): 3a1d.

      -- 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(): 3a23. 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: 579.
          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():
          3a24, passing in the return value from *note get_param():
          3a23.  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: 579.
          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: 2ea. 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: 579.
          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(): 396b.

      -- 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(): 396b.

      -- Método: set_boundary (boundary)

          Set the ‘boundary’ parameter of the ‘Content-Type’ header to
          'boundary'.  *note set_boundary(): 3a29. will always quote
          'boundary' if necessary.  A *note HeaderParseError: 396e. 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(): 17e4, because *note
          set_boundary(): 3a29. 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(): 3a13.
          which returns the *note Charset: ff0. 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(): 3a2c. 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(): 3a2c. 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(): 3972. 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: 57a. 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: 1399.
          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: 13ca. 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: 52. and *note
          email.generator: 44. 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: 13ca. 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: 43.
          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: 41.
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: 57a. manualmente.  De fato, você também pode pegar uma
estrutura existente e adicionar novos objetos *note Message: 57a,
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: 57a, adicionando anexos e todos os cabeçalhos apropriados
manualmente.  Porém, para mensagens MIME, o pacote *note email: 3f.
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: 4c.

     Esta é a classe base para todas as subclasses específicas de MIME
     de *note Message: 57a.  Normalmente você não criará instâncias
     especificamente de *note MIMEBase: 3a33, embora possa.  A *note
     MIMEBase: 3a33. é 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:
     17e4.

     Se 'policy' for especificado, (o padrão é a política *note
     compat32: 12b0.) será passado para *note Message: 57a.

     A classe *note MIMEBase: 3a33. 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: 50.

     Uma subclasse de *note MIMEBase: 3a33, 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(): 397f, que só faz sentido para mensagens ‘multipart’.  Se
     *note attach(): 397f. for chamado, uma exceção *note
     MultipartConversionError: 39c7. será levantada.

 -- Classe: email.mime.multipart.MIMEMultipart (_subtype='mixed',
          boundary=None, _subparts=None, *, policy=compat32, **_params)

     Módulo: *note email.mime.multipart: 4f.

     Uma subclasse de *note MIMEBase: 3a33, 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: 397f.

     O argumento opcional 'policy' tem como padrão *note compat32: 12b0.

     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: 4a.

     Uma subclasse de *note MIMENonMultipart: 39c8, a classe *note
     MIMEApplication: 3a35. é 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: 3a35.  Ele
     deve usar *note get_payload(): 13c9. e *note set_payload(): 3a11.
     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: 42. para obter uma
     lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 12b0.

     '_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: 4b.

     Uma subclasse de *note MIMENonMultipart: 39c8, a classe *note
     MIMEAudio: 3a36. é 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: 198. é 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:
     3a36.  Ele deve usar *note get_payload(): 13c9. e *note
     set_payload(): 3a11. 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:
     42. para obter uma lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 12b0.

     '_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: 4d.

     Uma subclasse de *note MIMENonMultipart: 39c8, a classe *note
     MIMEImage: 39c9. é 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: 198. 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:
     39c9.  Ele deve usar *note get_payload(): 13c9. e *note
     set_payload(): 3a11. 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:
     42. para obter uma lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 12b0.

     '_params' são passados diretamente para o construtor *note
     MIMEBase: 3a33.

     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: 4e.

     Uma subclasse de *note MIMENonMultipart: 39c8, a classe *note
     MIMEMessage: 3a37. é usada para criar objetos MIME do tipo
     principal ‘message’.  '_msg' é usado como carga útil e deve ser uma
     instância da classe *note Message: 57a. (ou uma subclasse dela),
     caso contrário, uma *note TypeError: 198. é levantada.

     O opcional '_subtype' define o subtipo da mensagem; o padrão é
     ‘rfc822’.

     O argumento opcional 'policy' tem como padrão *note compat32: 12b0.

     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: 51.

     Uma subclasse de *note MIMENonMultipart: 39c8, a classe *note
     MIMEText: fef. é 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: 39c8.; 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: ff0.

     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: 12b0.

     Alterado na versão 3.5: '_charset' também aceita instâncias de
     *note Charset: ff0.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 579. 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:
3f. package supports these standards in its *note email.header: 45. and
*note email.charset: 40. 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: 1b4d.
class and assign the field in the *note Message: 57a. object to an
instance of *note Header: 1b4d. instead of using a string for the header
value.  Import the *note Header: 1b4d. class from the *note
email.header: 45. 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: 1b4d. instance and
passing in the character set that the byte string was encoded in.  When
the subsequent *note Message: 57a. 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: 1b4d. 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(): 3a3b. method calls.  's' may be an
     instance of *note bytes: 192. or *note str: 169, but see the *note
     append(): 3a3b. documentation for semantics.

     Optional 'charset' serves two purposes: it has the same meaning as
     the 'charset' argument to the *note append(): 3a3b. method.  It
     also sets the default character set for all subsequent *note
     append(): 3a3b. 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(): 3a3b. 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():
     3a3b. 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: ff0.
          instance (see *note email.charset: 40.) or the name of a
          character set, which will be converted to a *note Charset:
          ff0. 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: 192. or *note str: 169.
          If it is an instance of *note bytes: 192, then 'charset' is
          the encoding of that byte string, and a *note UnicodeError:
          45f. will be raised if the string cannot be decoded with that
          character set.

          If 's' is an instance of *note str: 169, 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: 1b4d. 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: 1b4d. 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: 1b4d.
          instances for equality.

      -- Método: __ne__ (other)

          This method allows you to compare two *note Header: 1b4d.
          instances for inequality.

The *note email.header: 45. 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: 192, 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: 169.

     An *note email.errors.HeaderParseError: 396e. 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: 39d9.

 -- Função: email.header.make_header (decoded_seq, maxlinelen=None,
          header_name=None, continuation_ws=' ')

     Create a *note Header: 1b4d. instance from a sequence of pairs as
     returned by *note decode_header(): 12b4.

     *note decode_header(): 12b4. 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: 1b4d. instance.  Optional 'maxlinelen',
     'header_name', and 'continuation_ws' are as in the *note Header:
     1b4d. 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.14/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: ff0. 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: ff0. são usadas em vários outros módulos do pacote *note
email: 3f.

Importa esta classe do módulo *note email.charset: 40.

 -- 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: ff0. 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: ff0. 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(): 3a4b, 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: ff0. 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: ff0. para verificar a igualdade.

      -- Método: __ne__ (other)

          Este método permite que você compare duas instâncias *note
          Charset: ff0. para verificar a desigualdade.

O módulo *note email.charset: 40. 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(): 3a52. para adicionar codecs que o
     módulo não conhece.  Consulte a documentação do módulo *note
     codecs: 1c. 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(): ac8. do *note str: 169.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 1b4c.

Este módulo está descontinuado no Python 3.  As funções fornecidas aqui
não devem ser chamadas explicitamente, pois a classe *note MIMEText:
fef. 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: 57a. 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: 3f. fornece alguns codificadores convenientes em
seu módulo *note encoders: 42.  Esses codificadores são realmente usados
pelos construtores de classe *note MIMEAudio: 3a36. e *note MIMEImage:
39c9. 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: 198. 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.14/Lib/email/encoders.py

   (2) Observe que a codificação com *note encode_quopri(): 3a57. 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: 54.
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: 4dc. 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.

     Adicionado na versão 3.3.

     Deprecated since version 3.12, removed in version 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(): 4ee, 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: 169. ou
     a *note Charset: ff0.  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: 3a17.

     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(): 3a60. 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(): 3a60. retorna uma
     9-tupla que pode ser passada diretamente para *note time.mktime():
     13e4.; 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(): 3a60, mas retorna
     ‘None’ ou uma tupla de 10; os primeiros 9 elementos formam uma
     tupla que pode ser passada diretamente para *note time.mktime():
     13e4, 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(): 12b9.  Desempenha a mesma
     função que *note parsedate(): 3a60, mas em caso de sucesso retorna
     um *note datetime: 4dc.; 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: 12bb. *note tzinfo: 7eb.

     Adicionado na versão 3.3.

 -- Função: email.utils.mktime_tz (tuple)

     Transforma uma tupla de 10 conforme retornado por *note
     parsedate_tz(): 1b22. 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(): 13bc. e *note
     time.localtime(): 16e7, 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:
     34.  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: 3a23. pode retornar uma tupla de
     3 contendo o conjunto de caracteres, idioma e valor.  *note
     collapse_rfc2231_value(): 3a24. transforma isso em uma string
     Unicode.  'errors' opcionais são passados para o argumento 'errors'
     do método *note encode(): ac8. de *note str: 169.; 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(): 3a24. 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.14/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: 3a2c.  O módulo *note email.iterators: 47.
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(): 1f5b, pulando todos os
     cabeçalhos intermediários.

     'decode' opcional é passado por meio do *note Message.get_payload:
     13c9.

 -- 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(): 3a68. 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(): 116b.  'level' usado internamente.  'include_default', se
     verdadeiro, também imprime o tipo padrão.

Ver também
..........

Módulo *note smtplib: cf.

     Cliente SMTP (Protocolo Simples de Envio de E-mail)

Módulo *note poplib: b1.

     Cliente POP (Post Office Protocol)

Módulo *note imaplib: 78.

     Cliente IMAP (Internet Message Access Protocol)

Módulo *note mailbox: 8f.

     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.14/Lib/email/iterators.py


File: python.info,  Node: json — Codificador e decodificador JSON,  Next: mailbox — Manipulate mailboxes in various formats,  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: 91. e *note pickle: ab. 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: f36.:

     >>> 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: 86. para validar a partir do console e exibir
formatado:

     $ echo '{"json":"obj"}' | python -m json
     {
         "json": "obj"
     }
     $ echo '{1.2:3.4}' | python -m json
     Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Veja *note Interface de linha de comando: 23d. 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<4>.
* Codificadores e decodificadores::
* Exceções: Exceções<20>.
* Conformidade e interoperabilidade entre padrões::
* Interface de linha de comando: Interface de linha de comando<4>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<4>,  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: 289a. com suporte a ‘.write()’)
     usando essa *note tabela de conversão de Python para JSON: 3a6e.

          Nota: Diferente de *note pickle: ab. e *note marshal: 91, JSON
          não é um protocolo com datagrama, assim tentar serializar
          múltiplos objetos com chamadas repetidas para *note dump():
          f34. usando o mesmo 'fp' resultará em um arquivo JSON
          inválido.


     Parâmetros:

        * ‘obj’ (*note object: c72.) – O objeto Python a ser
          serializado.

        * ‘fp’ (*note file-like object: 289a.) – O objeto arquivo ou
          similar 'obj' para o qual será serializado.  O módulo ‘json’
          sempre produz objetos *note str: 169, e não objetos *note
          bytes: 192.  Dessa forma, ‘fp.write()’ precisa ter suporte
          para entradas *note str: 169.

        * ‘skipkeys’ (*note bool: 3c0.) – Se ‘True’, as chaves que não
          forem de um tipo básico (*note str: 169, *note int: 19b, *note
          float: 196, *note bool: 3c0, ‘None’) serão ignoradas ao invés
          de levantar uma exceção *note TypeError: 198.  Padrão ‘False’.

        * ‘ensure_ascii’ (*note bool: 3c0.) – Se ‘True’ (o padrão), será
          garantido que a saída terá todos os caracteres não ASCII que
          chegam escapados.  Se ‘False’, esses caracteres serão emitidos
          como estão.

        * ‘check_circular’ (*note bool: 3c0.) – 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: f5c. (ou pior).  Padrão ‘True’.

        * ‘allow_nan’ (*note bool: 3c0.) – Se ‘False’, serialização de
          valores *note float: 196. fora de intervalo (‘nan’, ‘inf’,
          ‘-inf’) vai resultar em um *note ValueError: 2ea. 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: f36. subclass) – Se definido, um
          codificador JSON personalizado com o método *note default():
          3a6f. substituído, para serializar em tipos de dados
          personalizados.  Se ‘None’ (o padrão), ‘JSONEncoder’ é usado.

        * ‘indent’ (*note int: 19b.‘ | ’*note str: 169.‘ | ’‘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: 608.‘ | ’‘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: 2c1e. | 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: 198.  Se ‘None’ (o
          padrão), ‘TypeError’ é levantada.

        * ‘sort_keys’ (*note bool: 3c0.) – 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: 59e.

 -- 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: 169. com formato JSON usando
     essa *note tabela de conversão: 3a6e.  Os argumentos têm o mesmo
     significado que na função *note dump(): f34.

          Nota: Chaves nos pares chave/valor de JSON são sempre do tipo
          *note str: 169.  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: 3a70.


     Parâmetros:

        * ‘fp’ (*note file-like object: 289a.) – Um *note arquivo texto:
          1f22. ou *note arquivo binário: 1f23. com suporte a ‘.read()’
          contendo o documento JSON a ser desserializado.

        * ‘cls’ (a *note JSONDecoder: f37. 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: 2c1e. | None) – Se definido,
          uma função que é chamada com o resultado de qualquer literal
          de objeto JSON decodificado (um *note dict: 183.).  O valor de
          retorno desta função será usado em vez do *note dict: 183.
          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: 2c1e. | 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: 183.  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: 2c1e. | 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: 1fd.

        * ‘parse_int’ (*note callable: 2c1e. | 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: 196.

        * ‘parse_constant’ (*note callable: 2c1e. | 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: 1017. – Quando os dados a serem
          desserializados não forem um documento JSON válido.

        * *note UnicodeDecodeError: bfe. – 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: 59e.

        * 'fp' agora pode ser um *note arquivo binário: 1f23.  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():
     19b. agora limita o tamanho máximo da string de inteiro via *note
     limitação de comprimento de string na conversão para inteiro: 800.
     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(): ea6, mas em vez de um objeto arquivo ou
     similar, desserializa 's' (uma instância de *note str: 169, *note
     bytes: 192. ou *note bytearray: 342. contendo um documento JSON)
     para um objeto Python usando essa *note tabela de conversão: 3a70.

     Alterado na versão 3.6: 's' agora pode ser um do tipo *note bytes:
     192. ou *note bytearray: 342.  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<20>,  Prev: Uso básico<4>,  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              dicionário
                         
                         
     array               lista
                         
                         
     string              str
                         
                         
     número (inteiro)    int
                         
                         
     número (real)       float
                         
                         
     verdadeiro          True
                         
                         
     falso               False
                         
                         
     nulo                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: 183.  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: 183.  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: 1fd.).

     '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: 196.).

     '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: 1017.

     Alterado na versão 3.6: Todos os parâmetros agora são *note
     somente-nomeado: 59e.

      -- Método: decode (s)

          Retorna a representação Python de 's' (uma instância *note
          str: 169. contendo um documento JSON).

          Uma exceção *note JSONDecodeError: 1017. 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:
          169. 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
                                                  
     -----------------------------------------------------------------
                                                  
     dicionário                                   objeto
                                                  
                                                  
     list, tuple                                  array
                                                  
                                                  
     str                                          string
                                                  
                                                  
     int, float e Enums derivados de int e        number
     float                                        

     True                                         verdadeiro
                                                  
                                                  
     False                                        falso
                                                  
                                                  
     None                                         nulo
                                                  

     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(): 3a6f. 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: 198.).

     Se 'skipkeys' é falso (o padrão), então sluma *note TypeError: 198.
     será levantada ao tentar codificar as chaves que não são *note str:
     169, *note int: 19b, *note float: 196, *note bool: 3c0. ou ‘None’.
     Se 'skipkeys' é verdadeiro, esses itens são simplesmente pulados.

     Se 'ensure_ascii' for verdadeiro (o padrão), será garantido que a
     saída terá todos os caracteres não ASCII que chegam escapados.  Se
     'ensure_ascii' for falso, a saída desses caracteres ficará como
     está.

     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: f5c.).
     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: 2ea. 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: 198.  Se não for especificada, *note
     TypeError: 198. é levantada.

     Alterado na versão 3.6: Todos os parâmetros agora são *note
     somente-nomeado: 59e.

      -- 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: 198.).

          Por exemplo, para suporte a iteradores arbitrários, você
          poderia implementar *note default(): 3a6f. 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<20>,  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: 2ea. 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<4>,  Prev: Exceções<20>,  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: f36. e *note JSONDecoder:
f37, 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.

Além do parâmetro 'ensure_ascii', este módulo é definido estritamente em
termos de conversão entre objetos Python e *note strings Unicode: 169.
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: 2ea. 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: 169.) 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: 183. ou *note list: 24c. 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: 19b. de magnitude extremamente
grande, ou quando serializando instâncias de tipos numéricos “exóticos”
como *note decimal.Decimal: 1fd.


File: python.info,  Node: Interface de linha de comando<4>,  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: 86. pode ser invocado como um script via ‘python -m
json’ para validar e fazer uma impressão bem formatada de objetos JSON.
O submódulo *note json.tool: 87. implementa essa interface.

Se os argumentos opcionais ‘infile’ e ‘outfile’ não forem especificados,
*note sys.stdin: 754. e *note sys.stdout: cc0. serão usados
respectivamente:

     $ echo '{"json": "obj"}' | python -m json
     {
         "json": "obj"
     }
     $ echo '{1.2:3.4}' | python -m json
     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: 3a83. para ordenar a saída de dicionários
alfabeticamente pela chave.

Alterado na versão 3.14: O módulo *note json: 86. agora pode ser
executado diretamente como ‘python -m json’.  Para retrocompatibilidade,
a invocação da CLI como ‘python -m json.tool’ continua sendo aceita.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/json/tool.py


File: python.info,  Node: Opções de linha de comando<3>,  Up: Interface de linha de comando<4>

5.20.2.11 Opções de linha de comando
....................................

 -- Option: infile

     O arquivo JSON para ser validado ou saída embelezada:

          $ python -m json 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: 754.

 -- Option: outfile

     Escreve a saída de 'infile' para o 'outfile' dado.  Caso contrário,
     escreve em *note sys.stdout: cc0.

 -- 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():
     f35. 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 — Manipulate mailboxes in various formats,  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’ — Manipulate mailboxes in various formats
----------------------------------------------------------

'Código-fonte:' Lib/mailbox.py(1)

__________________________________________________________________

This module defines two classes, *note Mailbox: 1448. and *note Message:
144c, for accessing and manipulating on-disk mailboxes and the messages
they contain.  ‘Mailbox’ offers a dictionary-like mapping from keys to
messages.  ‘Message’ extends the *note email.message: 48. module’s *note
Message: 57a. class with format-specific state and behavior.  Supported
mailbox formats are Maildir, mbox, MH, Babyl, and MMDF.

Ver também
..........

Module *note email: 3f.

     Represent and manipulate messages.

* Menu:

* Mailbox objects::
* Message objects::
* Exceções: Exceções<21>.
* Exemplos: Exemplos<24>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/mailbox.py


File: python.info,  Node: Mailbox objects,  Next: Message objects,  Up: mailbox — Manipulate mailboxes in various formats

5.20.3.1 ‘Mailbox’ objects
..........................

 -- Classe: mailbox.Mailbox

     A mailbox, which may be inspected and modified.

     The ‘Mailbox’ class defines an interface and is not intended to be
     instantiated.  Instead, format-specific subclasses should inherit
     from ‘Mailbox’ and your code should instantiate a particular
     subclass.

     The ‘Mailbox’ interface is dictionary-like, with small keys
     corresponding to messages.  Keys are issued by the ‘Mailbox’
     instance with which they will be used and are only meaningful to
     that ‘Mailbox’ instance.  A key continues to identify a message
     even if the corresponding message is modified, such as by replacing
     it with another message.

     Messages may be added to a ‘Mailbox’ instance using the set-like
     method *note add(): 1447. and removed using a ‘del’ statement or
     the set-like methods *note remove(): 3a94. and *note discard():
     3a95.

     ‘Mailbox’ interface semantics differ from dictionary semantics in
     some noteworthy ways.  Each time a message is requested, a new
     representation (typically a *note Message: 144c. instance) is
     generated based upon the current state of the mailbox.  Similarly,
     when a message is added to a ‘Mailbox’ instance, the provided
     message representation’s contents are copied.  In neither case is a
     reference to the message representation kept by the ‘Mailbox’
     instance.

     The default ‘Mailbox’ *note iterator: 4c2. iterates over message
     representations, not keys as the default *note dictionary: 183.
     iterator does.  Moreover, modification of a mailbox during
     iteration is safe and well-defined.  Messages added to the mailbox
     after an iterator is created will not be seen by the iterator.
     Messages removed from the mailbox before the iterator yields them
     will be silently skipped, though using a key from an iterator may
     result in a *note KeyError: 5dd. exception if the corresponding
     message is subsequently removed.

          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: 652.;
          try to avoid using single-file formats such as *note mbox:
          1937. for concurrent writing.  If you’re modifying a mailbox,
          you 'must' lock it by calling the *note lock(): 3a96. and
          *note unlock(): 3a97. 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: 144c. instance, an
          *note email.message.Message: 57a. 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: 144c. subclass (e.g., if it’s
          an *note mboxMessage: 3953. instance and this is an *note
          mbox: 1937. 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: 5dd. exception is
          raised if the method was called as *note remove(): 3a94. or
          *note __delitem__(): 3a98. but no exception is raised if the
          method was called as *note discard(): 3a95.  The behavior of
          *note discard(): 3a95. 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: 5dd. exception if no message already
          corresponds to 'key'.

          As with *note add(): 1447, parameter 'message' may be a *note
          Message: 144c. instance, an *note email.message.Message: 57a.
          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:
          144c. subclass (e.g., if it’s an *note mboxMessage: 3953.
          instance and this is an *note mbox: 1937. 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: 4c2. over all keys

      -- Método: keys ()

          The same as *note iterkeys(): 3a9a, except that a *note list:
          24c. is returned rather than an *note iterator: 4c2.

      -- Método: itervalues ()
      -- Método: __iter__ ()

          Return an *note iterator: 4c2. over representations of all
          messages.  The messages are represented as instances of the
          appropriate format-specific *note Message: 144c. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

               Nota: The behavior of *note __iter__(): 3a9d. is unlike
               that of dictionaries, which iterate over keys.

      -- Método: values ()

          The same as *note itervalues(): 3a9c, except that a *note
          list: 24c. is returned rather than an *note iterator: 4c2.

      -- Método: iteritems ()

          Return an *note iterator: 4c2. 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: 144c. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

      -- Método: items ()

          The same as *note iteritems(): 3a9f, except that a *note list:
          24c. of pairs is returned rather than an *note iterator: 4c2.
          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(): 3aa1. and a *note KeyError: 5dd.
          exception is raised if the method was called as
          ‘__getitem__()’.  The message is represented as an instance of
          the appropriate format-specific *note Message: 144c. 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: 144c. subclass, or raise a *note KeyError: 5dd.
          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: 5dd. 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: 5dd. exception if no such
          message exists.  The message is processed through *note
          email.message.Message: 57a. to convert it to a 7bit clean
          representation.

      -- Método: get_file (key)

          Return a *note file-like: 289a. representation of the message
          corresponding to 'key', or raise a *note KeyError: 5dd.
          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: 1f23.; previously it was incorrectly returned in
          text mode.  Also, the *note file-like object: 289a. now
          supports the *note context manager: 1e0. protocol: you can use
          a *note with: 186. statement to automatically close it.

               Nota: Unlike other representations of messages, *note
               file-like: 289a. 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: 144c. 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: 5dd. exception.  The message is represented as an
          instance of the appropriate format-specific *note Message:
          144c. 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__(): 3a99.  As with *note __setitem__(): 3a99,
          each 'key' must already correspond to a message in the mailbox
          or else a *note KeyError: 5dd. 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: 1448. 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: 3aaa. 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: Mailbox objects

5.20.3.2 ‘Maildir’ objects
..........................

 -- Classe: mailbox.Maildir (dirname, factory=None, create=True)

     A subclass of *note Mailbox: 1448. 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: 3aae. 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: 652. now ignores files with
     a leading dot.

     ‘Maildir’ instances have all of the methods of *note Mailbox: 1448.
     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: 3ab2. 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: 3ab5. 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: 3aae. object, use its
          *note get_flags(): 3ab7. method instead, because changes made
          by the message’s *note set_flags(): 3ab8, *note add_flag():
          3ab9. and *note remove_flag(): 3aba. methods are not reflected
          here until the mailbox’s *note __setitem__(): 3abb. 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: 3aae. object, use its
          *note set_flags(): 3ab8. method instead, because changes made
          with this mailbox method will not be visible to the message
          object’s method, *note get_flags(): 3ab7.

          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(): 3ab9. method are similar to those
          for *note set_flags(): 1985.; 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(): 3aba. method are similar to
          those for *note set_flags(): 1985.; 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: 3aae. object, use its
          *note get_info(): 3abc. method instead, because changes made
          by the message’s *note set_info(): 3abd. method are not
          reflected here until the mailbox’s *note __setitem__(): 3abb.
          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: 3aae. object, use its
          *note set_info(): 3abd. method instead, because changes made
          with this mailbox method will not be visible to the message
          object’s method, *note get_info(): 3abc.

          Adicionado na versão 3.13.

     Some *note Mailbox: 1448. 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: Mailbox objects

5.20.3.3 ‘mbox’ objects
.......................

 -- Classe: mailbox.mbox (path, factory=None, create=True)

     A subclass of *note Mailbox: 1448. 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: 3953. 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: 1448. 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(): 1901. or *note
          close(): 3aab. 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: Mailbox objects

5.20.3.4 ‘MH’ objects
.....................

 -- Classe: mailbox.MH (path, factory=None, create=True)

     A subclass of *note Mailbox: 1448. 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: 3ace. 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: 1448. 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: 3ab2. 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: 3ab5. 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(): 3ad3.

      -- 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: 1448. 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(): 3ada.

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: Mailbox objects

5.20.3.5 ‘Babyl’ objects
........................

 -- Classe: mailbox.Babyl (path, factory=None, create=True)

     A subclass of *note Mailbox: 1448. 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: 3ae1. 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: 1448.
     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: 1448. 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: 109a. 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: Mailbox objects

5.20.3.6 ‘MMDF’ objects
.......................

 -- Classe: mailbox.MMDF (path, factory=None, create=True)

     A subclass of *note Mailbox: 1448. 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: 3ae8. 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: 1448. 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(): 1901. or *note
          close(): 3aab. 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<21>,  Prev: Mailbox objects,  Up: mailbox — Manipulate mailboxes in various formats

5.20.3.7 ‘Message’ objects
..........................

 -- Classe: mailbox.Message (message=None)

     A subclass of the *note email.message: 48. module’s *note Message:
     57a.  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: 57a.
     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 2822(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: 1448. 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/rfc2822.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: 144c. 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: 3953. or *note MMDFMessage: 3ae8. instance, the ‘Status’
and ‘X-Status’ headers are omitted and the following conversions take
place:

Resulting state          *note mboxMessage: 3953. or
                         *note MMDFMessage: 3ae8. 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: 3ace. instance, the following conversions take place:

Resulting state                     *note MHMessage: 3ace. 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: 3ae1. instance, the following conversions take place:

Resulting state                     *note BabylMessage: 3ae1. 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: 144c. 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: eda.
          instance, a tuple suitable for passing to *note
          time.strftime(): 13e5, or ‘True’ (to use *note time.gmtime():
          13bc.).

      -- 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: 3aae. instance, a “From “ line is generated based upon
the *note MaildirMessage: 3aae. instance’s delivery date, and the
following conversions take place:

Resulting state       *note MaildirMessage: 3aae. 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:
3ace. instance, the following conversions take place:

Resulting state         *note MHMessage: 3ace. 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: 3ae1. instance, the following conversions take place:

Resulting state         *note BabylMessage: 3ae1. 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: 3ae8. instance, the “From “ line is copied and all flags
directly correspond:

Resulting state       *note MMDFMessage: 3ae8. 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: 144c. 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: 3aae. instance, the following conversions take place:

Resulting state          *note MaildirMessage: 3aae. 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:
3953. or *note MMDFMessage: 3ae8. instance, the ‘Status’ and ‘X-Status’
headers are omitted and the following conversions take place:

Resulting state          *note mboxMessage: 3953. or
                         *note MMDFMessage: 3ae8. 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:
3ae1. instance, the following conversions take place:

Resulting state          *note BabylMessage: 3ae1. 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: 144c. 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: 144c. 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: 144c. instance, an *note email.message.Message: 57a.
          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: 3aae. instance, the following conversions take place:

Resulting state         *note MaildirMessage: 3aae. 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: 3953. or *note MMDFMessage: 3ae8. instance, the ‘Status’
and ‘X-Status’ headers are omitted and the following conversions take
place:

Resulting state        *note mboxMessage: 3953. or
                       *note MMDFMessage: 3ae8. 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:
3ace. instance, the following conversions take place:

Resulting state        *note MHMessage: 3ace. 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: 144c. 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: 3953.:

      -- 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: eda.
          instance, a tuple suitable for passing to *note
          time.strftime(): 13e5, or ‘True’ (to use *note time.gmtime():
          13bc.).

      -- 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: 3aae. instance, a “From “ line is generated based upon
the *note MaildirMessage: 3aae. instance’s delivery date, and the
following conversions take place:

Resulting state       *note MaildirMessage: 3aae. 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:
3ace. instance, the following conversions take place:

Resulting state         *note MHMessage: 3ace. 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: 3ae1. instance, the following conversions take place:

Resulting state         *note BabylMessage: 3ae1. 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: 3953. instance, the “From “ line is copied and all flags
directly correspond:

Resulting state       *note mboxMessage: 3953. 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<21>,  Next: Exemplos<24>,  Prev: Message objects,  Up: mailbox — Manipulate mailboxes in various formats

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: 1448. 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: 196b. instance attempts to read a corrupted
     ‘.mh_sequences’ file.


File: python.info,  Node: Exemplos<24>,  Prev: Exceções<21>,  Up: mailbox — Manipulate mailboxes in various formats

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 — Manipulate mailboxes in various formats,  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: 93. 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():
3b1c. se confiarem nas informações configuradas por *note init(): 3b1c.

 -- 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: 59a.

     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). No entanto, o comportamento deste módulo
     também depende do sistema operacional subjacente.  Somente tipos de
     arquivo reconhecidos pelo sistema operacional ou registrados
     explicitamente no banco de dados interno do Python podem ser
     identificados.  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: 59a.

     Descontinuado desde a versão 3.13: Passar um caminho de arquivo em
     vez de URL está *note suavemente descontinuado: 23c.  Use *note
     guess_file_type(): 510. 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(): 511, mas aceita um
     caminho em vez de URL. O caminho pode ser uma string, um objeto
     bytes ou um *note objeto caminho ou similar: 59a.

     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(): 511. e
     *note guess_file_type(): 510.

     O argumento opcional 'strict' tem o mesmo significado que usado com
     a função *note guess_type(): 511.

 -- 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(): 511. e *note guess_file_type(): 510.  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(): 511.

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: 3b1e.;
     no Windows, as configurações atuais do registro são carregadas.
     Cada arquivo nomeado em 'files' ou *note knownfiles: 3b1e. tem
     precedência sobre os definidos anteriormente.  É permitido chamar
     *note init(): 3b1c. 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(): 3b1c.

 -- 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::
* Uso na linha de comando: Uso na linha de comando<4>.
* Exemplos na linha de comando: Exemplos na linha de comando<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/mimetypes.py

   (2) https://www.iana.org/assignments/media-types/media-types.xhtml


File: python.info,  Node: Objetos MimeTypes,  Next: Uso na linha de comando<4>,  Up: mimetypes — Mapeia nomes de arquivos para tipos MIME

5.20.4.1 Objetos MimeTypes
..........................

A classe *note MimeTypes: 16e9. pode ser útil para aplicações que podem
querer mais de um banco de dados do tipo MIME; ela fornece uma interface
semelhante à do módulo *note mimetypes: 93.

 -- Classe: mimetypes.MimeTypes (filenames=(), strict=True)

     This class represents a MIME-types database.  By default, it
     provides access to the same database as the rest of this module.
     The initial database is a copy of that provided by the module, and
     may be extended by loading additional ‘mime.types’-style files into
     the database using the *note read(): 3b27. or *note readfp(): 3b28.
     methods.  The mapping dictionaries may also be cleared before
     loading additional data if the default data is not desired.

     The optional 'filenames' parameter can be used to cause additional
     files to be loaded “on top” of the default database.

      -- Atributo: suffix_map

          Dictionary mapping suffixes to suffixes.  This is used to
          allow recognition of encoded files for which the encoding and
          the type are indicated by the same extension.  For example,
          the ‘.tgz’ extension is mapped to ‘.tar.gz’ to allow the
          encoding and type to be recognized separately.  This is
          initially a copy of the global *note suffix_map: 3b21. defined
          in the module.

      -- Atributo: encodings_map

          Dictionary mapping filename extensions to encoding types.
          This is initially a copy of the global *note encodings_map:
          3b22. defined in the module.

      -- Atributo: types_map

          Tuple containing two dictionaries, mapping filename extensions
          to MIME types: the first dictionary is for the non-standards
          types and the second one is for the standard types.  They are
          initialized by *note common_types: 3b24. and *note types_map:
          3b23.

      -- Atributo: types_map_inv

          Tuple containing two dictionaries, mapping MIME types to a
          list of filename extensions: the first dictionary is for the
          non-standards types and the second one is for the standard
          types.  They are initialized by *note common_types: 3b24. and
          *note types_map: 3b23.

      -- Método: guess_extension (type, strict=True)

          Similar to the *note guess_extension(): 3b1d. function, using
          the tables stored as part of the object.

      -- Método: guess_type (url, strict=True)

          Similar to the *note guess_type(): 511. function, using the
          tables stored as part of the object.

      -- Método: guess_file_type (path, *, strict=True)

          Similar to the *note guess_file_type(): 510. function, using
          the tables stored as part of the object.

          Adicionado na versão 3.13.

      -- Método: guess_all_extensions (type, strict=True)

          Similar to the *note guess_all_extensions(): 1b39. function,
          using the tables stored as part of the object.

      -- Método: read (filename, strict=True)

          Load MIME information from a file named 'filename'.  This uses
          *note readfp(): 3b28. to parse the file.

          If 'strict' is ‘True’, information will be added to list of
          standard types, else to the list of non-standard types.

      -- Método: readfp (fp, strict=True)

          Carrega informações do tipo MIME de um arquivo aberto 'fp'.  O
          arquivo precisa estar no formato padrão dos arquivos
          ‘mime.types’.

          If 'strict' is ‘True’, information will be added to the list
          of standard types, else to the list of non-standard types.

      -- Método: read_windows_registry (strict=True)

          Carrega informações do tipo MIME a partir do registro do
          Windows.

          *note Disponibilidade: 1fed.: Windows.

          If 'strict' is ‘True’, information will be added to the list
          of standard types, else to the list of non-standard types.

          Adicionado na versão 3.2.

      -- Método: add_type (type, ext, strict=True)

          Add a mapping from the MIME type 'type' to the extension
          'ext'.  Valid extensions start with a ‘.’ or are empty.  When
          the extension is already known, the new type will replace the
          old one.  When the type is already known the extension will be
          added to the list of known extensions.

          Quando 'strict' for ‘True’ (o padrão), o mapeamento será
          adicionado aos tipos MIME oficiais, caso contrário, aos
          não-padrão.

          Deprecated since version 3.14, will be removed in version
          3.16: Invalid, undotted extensions will raise a *note
          ValueError: 2ea. in Python 3.16.


File: python.info,  Node: Uso na linha de comando<4>,  Next: Exemplos na linha de comando<2>,  Prev: Objetos MimeTypes,  Up: mimetypes — Mapeia nomes de arquivos para tipos MIME

5.20.4.2 Uso na linha de comando
................................

The ‘mimetypes’ module can be executed as a script from the command
line.

     python -m mimetypes [-h] [-e] [-l] type [type ...]

As seguintes opções são aceitas:

 -- Opção Do Programa: -h
 -- Opção Do Programa: --help

     Mostra a mensagem de ajuda e sai.

 -- Opção Do Programa: -e
 -- Opção Do Programa: --extension

     Guess extension instead of type.

 -- Opção Do Programa: -l
 -- Opção Do Programa: --lenient

     Additionally search for some common, but non-standard types.

By default the script converts MIME types to file extensions.  However,
if ‘--extension’ is specified, it converts file extensions to MIME
types.

For each ‘type’ entry, the script writes a line into the standard output
stream.  If an unknown type occurs, it writes an error message into the
standard error stream and exits with the return code ‘1’.


File: python.info,  Node: Exemplos na linha de comando<2>,  Prev: Uso na linha de comando<4>,  Up: mimetypes — Mapeia nomes de arquivos para tipos MIME

5.20.4.3 Exemplos na linha de comando
.....................................

Here are some examples of typical usage of the ‘mimetypes’ command-line
interface:

     $ # get a MIME type by a file name
     $ python -m mimetypes filename.png
     type: image/png encoding: None

     $ # get a MIME type by a URL
     $ python -m mimetypes https://example.com/filename.txt
     type: text/plain encoding: None

     $ # get a complex MIME type
     $ python -m mimetypes filename.tar.gz
     type: application/x-tar encoding: gzip

     $ # get a MIME type for a rare file extension
     $ python -m mimetypes filename.pict
     error: unknown extension of filename.pict

     $ # now look in the extended database built into Python
     $ python -m mimetypes --lenient filename.pict
     type: image/pict encoding: None

     $ # get a file extension by a MIME type
     $ python -m mimetypes --extension text/javascript
     .js

     $ # get a file extension by a rare MIME type
     $ python -m mimetypes --extension text/xul
     error: unknown type text/xul

     $ # now look in the extended database again
     $ python -m mimetypes --extension --lenient text/xul
     .xul

     $ # try to feed an unknown file extension
     $ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt
     type: application/x-sh encoding: None
     type: application/x-netcdf encoding: None
     error: unknown extension of filename.xxx

     $ # try to feed an unknown MIME type
     $ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
     .aac
     .opus
     error: unknown type audio/future


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: 3b3c. RFC 4648(2) (Base64,
Base32 and Base16) and the non-standard *note Base85 encodings: 3b3d.

Existem duas interfaces fornecidas por este módulo.  A interface moderna
oferece suporte a codificar *note objetos bytes ou similares: 193. para
*note bytes: 192. ASCII, e decodificar *note objetos bytes ou similares:
193. ou strings contendo ASCII para *note bytes: 192.  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: 3b3e. does not support decoding from
strings, but it does provide functions for encoding and decoding to and
from *note file objects: 13bf.  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: 3f. 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: 193.
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.14/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: 193. 's' usando Base64 e
     retorna o *note bytes: 192. codificado.

     Optional 'altchars' must be a *note bytes-like object: 193. 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: 2ea. if the length of
     'altchars' is not 2.  Raises a *note TypeError: 198. if 'altchars'
     is not a *note bytes-like object: 193.

 -- Função: base64.b64decode (s, altchars=None, validate=False)

     Decodifica o *note objeto bytes ou similar: 193. ou string ASCII
     's' codificada em Base64 e retorna o *note bytes: 192.
     decodificado.

     Optional 'altchars' must be a *note bytes-like object: 193. or
     ASCII string of length 2 which specifies the alternative alphabet
     used instead of the ‘+’ and ‘/’ characters.

     A *note binascii.Error: 121c. 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: 121c.

     For more information about the strict base64 check, see *note
     binascii.a2b_base64(): 18e8.

     May assert or raise a *note ValueError: 2ea. if the length of
     'altchars' is not 2.

 -- Função: base64.standard_b64encode (s)

     Encode *note bytes-like object: 193. 's' using the standard Base64
     alphabet and return the encoded *note bytes: 192.

 -- Função: base64.standard_b64decode (s)

     Decode *note bytes-like object: 193. or ASCII string 's' using the
     standard Base64 alphabet and return the decoded *note bytes: 192.

 -- Função: base64.urlsafe_b64encode (s)

     Encode *note bytes-like object: 193. '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: 192.  The result can still contain ‘=’.

 -- Função: base64.urlsafe_b64decode (s)

     Decode *note bytes-like object: 193. 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: 192.

 -- Função: base64.b32encode (s)

     Encode the *note bytes-like object: 193. 's' using Base32 and
     return the encoded *note bytes: 192.

 -- Função: base64.b32decode (s, casefold=False, map01=None)

     Decode the Base32 encoded *note bytes-like object: 193. or ASCII
     string 's' and return the decoded *note bytes: 192.

     '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: 121c. 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(): 3b45. 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(): 121b. 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: 193. 's' using Base16 and
     return the encoded *note bytes: 192.

 -- Função: base64.b16decode (s, casefold=False)

     Decode the Base16 encoded *note bytes-like object: 193. or ASCII
     string 's' and return the decoded *note bytes: 192.

     '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: 121c. 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(): 1116. and *note b85encode(): 1118. 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: 193. 'b' using Ascii85 and
     return the encoded *note bytes: 192.

     '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: 193. or ASCII
     string 'b' and return the decoded *note bytes: 192.

     '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 *note bytes-like object: 193. or ASCII
     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: 193. 'b' using base85 (as used
     in e.g.  git-style binary diffs) and return the encoded *note
     bytes: 192.

     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: 193. or ASCII
     string 'b' and return the decoded *note bytes: 192.  Padding is
     implicitly removed, if necessary.

     Adicionado na versão 3.4.

 -- Função: base64.z85encode (s)

     Encode the *note bytes-like object: 193. 's' using Z85 (as used in
     ZeroMQ) and return the encoded *note bytes: 192.  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: 193. or ASCII
     string 's' and return the decoded *note bytes: 192.  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: 13bf.  'input' will be read until
     ‘input.readline()’ returns an empty bytes object.

 -- Função: base64.decodebytes (s)

     Decode the *note bytes-like object: 193. 's', which must contain
     one or more lines of base64 encoded data, and return the decoded
     *note bytes: 192.

     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: 13bf.  'input' will be read
     until ‘input.read()’ returns an empty bytes object.  *note
     encode(): 3b4a. 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: 193. 's', which can contain
     arbitrary binary data, and return *note bytes: 192. 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: 11.

     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: 11. 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: f. em vez disso.  O módulo *note binascii:
11. 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: 193. (como *note bytes: 192, *note bytearray: 342. 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: 11. 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: 121c.

     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(): f59. 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(): 2718.
     'hexstr' must contain an even number of hexadecimal digits (which
     can be upper or lower case), otherwise an *note Error: 121c.
     exception is raised.

     Similar functionality (accepting only text string arguments, but
     more liberal towards whitespace) is also accessible using the *note
     bytes.fromhex(): 190. 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: f.

     Support for RFC compliant base64-style encoding in base 16, 32, 64,
     and 85.

Módulo *note quopri: bc.

     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: f. é 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: 13bf.  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: 13bf.  '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(): 271b, exceto pelo fato de aceitar uma fonte
     *note bytes: 192. e retornar o correspondente decodificado *note
     bytes: 192.

 -- Função: quopri.encodestring (s, quotetabs=False, header=False)

     Como *note encode(): 271a, exceto pelo fato de aceitar uma fonte
     *note bytes: 192. e retornar o *note bytes: 192. codificado
     correspondente.  Por padrão, envia um valor ‘False’ para o
     parâmetro 'quotetabs' da função *note encode(): 271a.

Ver também
..........

Módulo *note base64: f.

     Codifica e decodifica dados de base64 MIME

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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 — Simple HTML and XHTML parser: html parser — Simple HTML and XHTML parser.
* 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 — Base classes for SAX handlers: xml sax handler — Base classes for SAX handlers.
* 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 — Simple HTML and XHTML parser,  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: 12ce.

     Adicionado na versão 3.4.

__________________________________________________________________

Sub módulos no pacote ‘html’ são:

   * *note html.parser: 71. – analisador HTML/XHTML com modo de análise
     branda

   * *note html.entities: 70. – definições das entidade HTML

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/html/__init__.py


File: python.info,  Node: html parser — Simple HTML and XHTML parser,  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’ — Simple HTML and XHTML parser
---------------------------------------------------

'Código-fonte:' Lib/html/parser.py(1)

__________________________________________________________________

This module defines a class *note HTMLParser: a6d. which serves as the
basis for parsing text files formatted in HTML (HyperText Mark-up
Language) and XHTML.

 -- Classe: html.parser.HTMLParser (*, convert_charrefs=True)

     Create a parser instance able to parse invalid markup.

     If 'convert_charrefs' is ‘True’ (the default), all character
     references (except the ones in ‘script’/‘style’ elements) are
     automatically converted to the corresponding Unicode characters.

     An *note HTMLParser: a6d. instance is fed HTML data and calls
     handler methods when start tags, end tags, text, comments, and
     other markup elements are encountered.  The user should subclass
     *note HTMLParser: a6d. and override its methods to implement the
     desired behavior.

     This parser does not check that end tags match start tags or call
     the end-tag handler for elements which are closed implicitly by
     closing an outer element.

     Alterado na versão 3.4: 'convert_charrefs' keyword argument added.

     Alterado na versão 3.5: The default value for argument
     'convert_charrefs' is now ‘True’.

* Menu:

* Example HTML Parser Application::
* HTMLParser Methods::
* Exemplos: Exemplos<25>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/html/parser.py


File: python.info,  Node: Example HTML Parser Application,  Next: HTMLParser Methods,  Up: html parser — Simple HTML and XHTML parser

5.21.2.1 Example HTML Parser Application
........................................

As a basic example, below is a simple HTML parser that uses the *note
HTMLParser: a6d. class to print out start tags, end tags, and data as
they are encountered:

     from html.parser import HTMLParser

     class MyHTMLParser(HTMLParser):
         def handle_starttag(self, tag, attrs):
             print("Encountered a start tag:", tag)

         def handle_endtag(self, tag):
             print("Encountered an end tag :", tag)

         def handle_data(self, data):
             print("Encountered some data  :", data)

     parser = MyHTMLParser()
     parser.feed('<html><head><title>Test</title></head>'
                 '<body><h1>Parse me!</h1></body></html>')

The output will then be:

     Encountered a start tag: html
     Encountered a start tag: head
     Encountered a start tag: title
     Encountered some data  : Test
     Encountered an end tag : title
     Encountered an end tag : head
     Encountered a start tag: body
     Encountered a start tag: h1
     Encountered some data  : Parse me!
     Encountered an end tag : h1
     Encountered an end tag : body
     Encountered an end tag : html


File: python.info,  Node: HTMLParser Methods,  Next: Exemplos<25>,  Prev: Example HTML Parser Application,  Up: html parser — Simple HTML and XHTML parser

5.21.2.2 ‘HTMLParser’ Methods
.............................

*note HTMLParser: a6d. instances have the following methods:

 -- Método: HTMLParser.feed (data)

     Feed some text to the parser.  It is processed insofar as it
     consists of complete elements; incomplete data is buffered until
     more data is fed or *note close(): 17a9. is called.  'data' must be
     *note str: 169.

 -- Método: HTMLParser.close ()

     Force processing of all buffered data as if it were followed by an
     end-of-file mark.  This method may be redefined by a derived class
     to define additional processing at the end of the input, but the
     redefined version should always call the *note HTMLParser: a6d.
     base class method *note close(): 17a9.

 -- Método: HTMLParser.reset ()

     Reset the instance.  Loses all unprocessed data.  This is called
     implicitly at instantiation time.

 -- Método: HTMLParser.getpos ()

     Return current line number and offset.

 -- Método: HTMLParser.get_starttag_text ()

     Return the text of the most recently opened start tag.  This should
     not normally be needed for structured processing, but may be useful
     in dealing with HTML “as deployed” or for re-generating input with
     minimal changes (whitespace between attributes can be preserved,
     etc.).

The following methods are called when data or markup elements are
encountered and they are meant to be overridden in a subclass.  The base
class implementations do nothing (except for *note handle_startendtag():
3b69.):

 -- Método: HTMLParser.handle_starttag (tag, attrs)

     This method is called to handle the start tag of an element (e.g.
     ‘<div id="main">’).

     The 'tag' argument is the name of the tag converted to lower case.
     The 'attrs' argument is a list of ‘(name, value)’ pairs containing
     the attributes found inside the tag’s ‘<>’ brackets.  The 'name'
     will be translated to lower case, and quotes in the 'value' have
     been removed, and character and entity references have been
     replaced.

     For instance, for the tag ‘<A HREF="https://www.cwi.nl/">’, this
     method would be called as ‘handle_starttag('a', [('href',
     'https://www.cwi.nl/')])’.

     All entity references from *note html.entities: 70. are replaced in
     the attribute values.

 -- Método: HTMLParser.handle_endtag (tag)

     This method is called to handle the end tag of an element (e.g.
     ‘</div>’).

     The 'tag' argument is the name of the tag converted to lower case.

 -- Método: HTMLParser.handle_startendtag (tag, attrs)

     Similar to *note handle_starttag(): 3b6a, but called when the
     parser encounters an XHTML-style empty tag (‘<img ... />’).  This
     method may be overridden by subclasses which require this
     particular lexical information; the default implementation simply
     calls *note handle_starttag(): 3b6a. and *note handle_endtag():
     3b6b.

 -- Método: HTMLParser.handle_data (data)

     This method is called to process arbitrary data (e.g.  text nodes
     and the content of ‘<script>...</script>’ and
     ‘<style>...</style>’).

 -- Método: HTMLParser.handle_entityref (name)

     This method is called to process a named character reference of the
     form ‘&name;’ (e.g.  ‘&gt;’), where 'name' is a general entity
     reference (e.g.  ‘'gt'’).  This method is never called if
     'convert_charrefs' is ‘True’.

 -- Método: HTMLParser.handle_charref (name)

     This method is called to process decimal and hexadecimal numeric
     character references of the form ‘&#NNN;’ and ‘&#xNNN;’.  For
     example, the decimal equivalent for ‘&gt;’ is ‘&#62;’, whereas the
     hexadecimal is ‘&#x3E;’; in this case the method will receive
     ‘'62'’ or ‘'x3E'’.  This method is never called if
     'convert_charrefs' is ‘True’.

 -- Método: HTMLParser.handle_comment (data)

     This method is called when a comment is encountered (e.g.
     ‘<!--comment-->’).

     For example, the comment ‘<!-- comment -->’ will cause this method
     to be called with the argument ‘' comment '’.

     The content of Internet Explorer conditional comments (condcoms)
     will also be sent to this method, so, for ‘<!--[if IE
     9]>IE9-specific content<![endif]-->’, this method will receive
     ‘'[if IE 9]>IE9-specific content<![endif]'’.

 -- Método: HTMLParser.handle_decl (decl)

     This method is called to handle an HTML doctype declaration (e.g.
     ‘<!DOCTYPE html>’).

     The 'decl' parameter will be the entire contents of the declaration
     inside the ‘<!...>’ markup (e.g.  ‘'DOCTYPE html'’).

 -- Método: HTMLParser.handle_pi (data)

     Method called when a processing instruction is encountered.  The
     'data' parameter will contain the entire processing instruction.
     For example, for the processing instruction ‘<?proc color='red'>’,
     this method would be called as ‘handle_pi("proc color='red'")’.  It
     is intended to be overridden by a derived class; the base class
     implementation does nothing.

          Nota: The *note HTMLParser: a6d. class uses the SGML syntactic
          rules for processing instructions.  An XHTML processing
          instruction using the trailing ‘'?'’ will cause the ‘'?'’ to
          be included in 'data'.

 -- Método: HTMLParser.unknown_decl (data)

     This method is called when an unrecognized declaration is read by
     the parser.

     The 'data' parameter will be the entire contents of the declaration
     inside the ‘<![...]>’ markup.  It is sometimes useful to be
     overridden by a derived class.  The base class implementation does
     nothing.


File: python.info,  Node: Exemplos<25>,  Prev: HTMLParser Methods,  Up: html parser — Simple HTML and XHTML parser

5.21.2.3 Exemplos
.................

The following class implements a parser that will be used to illustrate
more examples:

     from html.parser import HTMLParser
     from html.entities import name2codepoint

     class MyHTMLParser(HTMLParser):
         def handle_starttag(self, tag, attrs):
             print("Start tag:", tag)
             for attr in attrs:
                 print("     attr:", attr)

         def handle_endtag(self, tag):
             print("End tag  :", tag)

         def handle_data(self, data):
             print("Data     :", data)

         def handle_comment(self, data):
             print("Comment  :", data)

         def handle_entityref(self, name):
             c = chr(name2codepoint[name])
             print("Named ent:", 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()

Parsing a 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"

Parsing an element with a few attributes and a title:

     >>> parser.feed('<img src="python-logo.png" alt="The Python logo">')
     Start tag: img
          attr: ('src', 'python-logo.png')
          attr: ('alt', 'The Python logo')
     >>>
     >>> parser.feed('<h1>Python</h1>')
     Start tag: h1
     Data     : Python
     End tag  : h1

The content of ‘script’ and ‘style’ elements is returned as is, without
further parsing:

     >>> parser.feed('<style type="text/css">#python { color: green }</style>')
     Start tag: style
          attr: ('type', 'text/css')
     Data     : #python { color: green }
     End tag  : style

     >>> parser.feed('<script type="text/javascript">'
     ...             'alert("<strong>hello!</strong>");</script>')
     Start tag: script
          attr: ('type', 'text/javascript')
     Data     : alert("<strong>hello!</strong>");
     End tag  : script

Parsing comments:

     >>> parser.feed('<!--a comment-->'
     ...             '<!--[if IE 9]>IE-specific content<![endif]-->')
     Comment  : a comment
     Comment  : [if IE 9]>IE-specific content<![endif]

Parsing named and numeric character references and converting them to
the correct char (note: these 3 references are all equivalent to ‘'>'’):

     >>> parser = MyHTMLParser()
     >>> parser.feed('&gt;&#62;&#x3E;')
     Data     : >>>

     >>> parser = MyHTMLParser(convert_charrefs=False)
     >>> parser.feed('&gt;&#62;&#x3E;')
     Named ent: >
     Num ent  : >
     Num ent  : >

Feeding incomplete chunks to *note feed(): 3b65. works, but *note
handle_data(): 3b6c. might be called more than once (unless
'convert_charrefs' is set to ‘True’):

     >>> 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

Parsing invalid HTML (e.g.  unquoted attributes) also works:

     >>> parser.feed('<p><a class=link href=#main>tag soup</p ></a>')
     Start tag: p
     Start tag: a
          attr: ('class', 'link')
          attr: ('href', '#main')
     Data     : tag soup
     End tag  : p
     End tag  : a


File: python.info,  Node: html entities — Definições de entidades gerais de HTML,  Next: Módulos de Processamento de XML,  Prev: html parser — Simple HTML and XHTML parser,  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: 12ce, *note
name2codepoint: 3b78, *note codepoint2name: 3b79. e *note entitydefs:
3b7a.

 -- 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(): b46.

     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.14/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: 3b7f.

É importante observar que os módulos no pacote *note xml: 126. 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: 12c. estará sempre disponível.

A documentação para os pacotes *note xml.dom: 127. e *note xml.sax: 12f.
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: 12b.: a API de ElementTree, um
     processador XML simples e leve

   * *note xml.dom: 127.: a definição da API de DOM

   * *note xml.dom.minidom: 128.: uma implementação mínima do DOM

   * suporte para construir árvores parciais de DOM no *note
     xml.dom.pulldom: 129.

   * *note xml.sax: 12f.: Classe base SAX2 e funções de conveniência

   * *note xml.parsers.expat: 12c.: a ligação do analisador sintático
     Expat
* Menu:

* Segurança no XML::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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.

Versões do Expat anteriores à 2.6.0 podem ser vulneráveis a “billion
laughs”, “quadratic blowup” e “large tokens”.  O Python pode ser
vulnerável se usar versões mais antigas do Expat como biblioteca
fornecida pelo sistema.  Verifique ‘pyexpat.EXPAT_VERSION’.

*note xmlrpc: 133. é 'vulnerável' ao ataque “decompression bomb”.

billion laughs / exponential entity expansion

     O ataque Billion Laughs(1) (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(2); 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(3), 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(4).

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Billion_laughs

   (2) https://en.wikipedia.org/wiki/Billion_laughs

   (3) https://en.wikipedia.org/wiki/Zip_bomb

   (4) 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: 12b. 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: 3b7f.

* Menu:

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

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 12b.
(‘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: b3d. representa todo o
documento XML como uma árvore e *note Element: 360. 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: b3d.  Interações com um único elemento XML e seus
subelementos são feitos a nível de *note Element: 360. .


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(): 3b89. obtém o XML de uma string e armazena em um
*note Element: 360, que será o elemento raiz dessa árvore.  Outras
funções de análise sintática podem criar um *note ElementTree: b3d.
Cheque a documentação para se certificar sobre qual dado será retornado.

Assim como um *note Element: 360, ‘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: c3f. para o construtor *note XMLParser: c3e.


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: c3e. 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: 360. totalmente construídos.

A ferramenta mais poderosa para fazer isso é *note XMLPullParser: 11e9.
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(): 3b8b.  Para obter os elementos XML analisados,
chame *note XMLPullParser.read_events(): 3b8c.  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: 11e9. 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():
573.  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(): 570. 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: 360. 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(): 1549.:

     >>> 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(): 17e2. encontra apenas elementos com uma tag que
são filhos diretos do elemento atual.  *note Element.find(): 17e0.
encontra o 'primeiro' filho com uma tag específica, e *note
Element.text: 3b8e. acessa o conteúdo de texto do elemento.  *note
Element.get(): 3b8f. 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: d9a.


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: b3d. fornece uma maneira simples de construir
documentos XML e escrevê-los em arquivos.  O método *note
ElementTree.write(): c7f. serve para esse propósito.

Uma vez criado, um objeto *note Element: 360. pode ser manipulado
alterando diretamente seus campos (como *note Element.text: 3b8e.),
adicionando e modificando atributos (método *note Element.set(): 3b91.),
bem como como adicionar novos filhos (por exemplo, com *note
Element.append(): 3b92.).

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(): 17dc.  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(): 3b94. 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():
17e0. ou *note findall(): 17e2.:

     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<5>,  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: 3b87.:

     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<5>,  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<5>

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: c3e. skips over comments in the input
     instead of creating comment objects for them.  An *note
     ElementTree: b3d. will only contain comment nodes if they have been
     inserted into to the tree using one of the *note Element: 360.
     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(): 3b9d. 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():
     3b9e.  'text' is a string containing XML data.  'parser' is an
     optional parser instance.  If not given, the standard *note
     XMLParser: c3e. parser is used.  Returns an *note Element: 360.
     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: c3e. parser is used.  Returns an
     *note Element: 360. 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: 13bf. 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: c3e. parser is used.  'parser' must
     be a subclass of *note XMLParser: c3e. and can only use the default
     *note TreeBuilder: c3f. as a target.  Returns an *note iterator:
     4c2. 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(): 573. 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: 11e9.

          Nota: *note iterparse(): 573. 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: c3e. parser
     is used.  Returns an *note ElementTree: b3d. 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: c3e. skips over processing instructions
     in the input instead of creating PI objects for them.  An *note
     ElementTree: b3d. will only contain processing instruction nodes if
     they have been inserted into to the tree using one of the *note
     Element: 360. 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: 360. 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(): c7f.  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(): 11eb. 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: 360. 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(): c7f.  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(): 11ec. 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: c3e. parser is used.
     Returns an *note Element: 360. 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: c3e. parser
     is used.  Returns a tuple containing an *note Element: 360.
     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<6>,  Prev: Referência<5>,  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: 12a. 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: 12b. 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<6>,  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<22>.


File: python.info,  Node: Funções<10>,  Next: Element Objects,  Up: Referência<6>

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: 360. 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: 360. or an
     *note ElementTree: b3d. instance to find such element.  'loader' is
     an optional resource loader.  If omitted, it defaults to *note
     default_loader(): 3baa.  If given, it should be a callable that
     implements the same interface as *note default_loader(): 3baa.
     '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<6>

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():
          13d1, 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: 198. if
          'subelement' is not an *note Element: 360.

      -- Método: extend (subelements)

          Appends 'subelements' from an iterable of elements.  Raises
          *note TypeError: 198. if a subelement is not an *note Element:
          360.

          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: d9a.  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:
          d9a.  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: d9a.  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: 198. if 'subelement' is not an *note
          Element: 360.

      -- Método: iter (tag=None)

          Creates a tree *note iterator: 4c2. 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:
          d9a.  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(): 3b94.
          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: 360. objects also support the following sequence
     type methods for working with subelements: *note __delitem__():
     14c8, *note __getitem__(): 581, *note __setitem__(): 14c7, *note
     __len__(): 2245.

     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: 1a3.

     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(): c3d. 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<6>

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(): 17e0, starting at the root of
          the tree.

      -- Método: findall (match, namespaces=None)

          Same as *note Element.findall(): 17e2, starting at the root of
          the tree.

      -- Método: findtext (match, default=None, namespaces=None)

          Same as *note Element.findtext(): 17e1, 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(): 13d0, 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: 13bf.  'parser'
          is an optional parser instance.  If not given, the standard
          *note XMLParser: c3e. 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: 13bf. 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: 169.) or binary
          (*note bytes: 192.).  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:
          13bf.; 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(): c7f. 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<6>

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: 3bc1.
     instances are opaque.


File: python.info,  Node: TreeBuilder Objects,  Next: Objetos XMLParser,  Prev: QName Objects,  Up: Referência<6>

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(): 3b9c. and *note
     ProcessingInstruction(): 3ba2. 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: 360. 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: c3f. 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: c3f. 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(): c3d. 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<6>

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: 12c. for efficient, event-based parsing of
     XML. It can be fed XML data incrementally with the *note feed():
     3bcd. 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: c3f. 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: 59e.
     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(): 56f.
          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(): 572.
          for details.

          Note that *note flush(): 56f. has been backported to some
          prior releases of CPython as a security fix.  Check for
          availability of *note flush(): 56f. using *note hasattr():
          6ee. if used in code running across a variety of Python
          versions.

          Adicionado na versão 3.13.

     *note XMLParser.feed(): 3bcd. 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:
     c3f. class.  *note XMLParser.close(): 3bce. calls 'target"s method
     ‘close()’.  *note XMLParser: c3e. 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<22>,  Prev: Objetos XMLParser,  Up: Referência<6>

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: c3e, but
     instead of pushing calls to a callback target, *note XMLPullParser:
     11e9. 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(): 570.
          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(): 572.
          for details.

          Note that *note flush(): 570. has been backported to some
          prior releases of CPython as a security fix.  Check for
          availability of *note flush(): 570. using *note hasattr():
          6ee. 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(): 3bce, this method always returns
          *note None: 87a.  Any events not yet retrieved when the parser
          is closed can still be read with *note read_events(): 3b8c.

      -- 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: 360. 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: 87a. (this may change in a future
               version)

          Events provided in a previous call to *note read_events():
          3b8c. 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(): 3b8c. will have
          unpredictable results.

          Nota: *note XMLPullParser: 11e9. 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<22>,  Prev: XMLPullParser Objects,  Up: Referência<6>

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: 12c. 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(): 3bd8.  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: 3bd9. 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: 128.

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.14/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: 127. 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: 64f.  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: 127. 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: 3be2.  Interface to the underlying
                                                                             implementation.
                                                                             
                                                                             
‘Node’                               *note Objetos Node: 3be3.               Base interface for most objects in
                                                                             a document.
                                                                             
                                                                             
‘NodeList’                           *note Objetos NodeList: 2241.           Interface for a sequence of nodes.
                                                                             
                                                                             
‘DocumentType’                       *note DocumentType Objects: 3be4.       Information about the declarations
                                                                             needed to process a document.
                                                                             
                                                                             
‘Document’                           *note Document Objects: 3be5.           Object which represents an entire
                                                                             document.
                                                                             
                                                                             
‘Element’                            *note Element Objects: 3be6.            Element nodes in the document
                                                                             hierarchy.
                                                                             
                                                                             
‘Attr’                               *note Attr Objects: 3be7.               Attribute value nodes on element
                                                                             nodes.
                                                                             
                                                                             
‘Comment’                            *note Comment Objects: 3be8.            Representation of comments in the
                                                                             source document.
                                                                             
                                                                             
‘Text’                               *note Text and CDATASection Objects: 3be9.Nodes containing textual content
                                                                             from the document.
                                                                             
                                                                             
‘ProcessingInstruction’              *note Objetos ProcessingInstruction: 3bea.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<23>.


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(): 3bee, 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: 3bf3.  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: 3bfb.  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: 2ea. 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: 2ea. 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: 2ea.
     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__(): 2245. and *note __getitem__(): 581.; this allows
iteration over the ‘NodeList’ in *note for: 347. statements and proper
support for the *note len(): 835. built-in function.

If a DOM implementation supports modification of the document, the
‘NodeList’ implementation must also support the *note __setitem__():
14c7. and *note __delitem__(): 14c8. 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: 3c26. is raised.

 -- Método: Element.removeAttributeNode (oldAttr)

     Remove and return 'oldAttr' from the attribute list, if present.
     If 'oldAttr' is not present, *note NotFoundErr: 3c26. 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: 3c2b. 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: 3c2b. 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<23>,  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<23>,  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: 3c40, and a number of constants that allow applications to
determine what sort of error occurred.  *note DOMException: 3c40.
instances carry a *note code: 1b. 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: 1b. 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: 3c41.
                                           
                                           
‘HIERARCHY_REQUEST_ERR’                    *note HierarchyRequestErr: 3c42.
                                           
                                           
‘INDEX_SIZE_ERR’                           *note IndexSizeErr: 3c43.
                                           
                                           
‘INUSE_ATTRIBUTE_ERR’                      *note InuseAttributeErr: 3c2b.
                                           
                                           
‘INVALID_ACCESS_ERR’                       *note InvalidAccessErr: 3c44.
                                           
                                           
‘INVALID_CHARACTER_ERR’                    *note InvalidCharacterErr: 3c45.
                                           
                                           
‘INVALID_MODIFICATION_ERR’                 *note InvalidModificationErr: 3c46.
                                           
                                           
‘INVALID_STATE_ERR’                        *note InvalidStateErr: 3c47.
                                           
                                           
‘NAMESPACE_ERR’                            *note NamespaceErr: 3c48.
                                           
                                           
‘NOT_FOUND_ERR’                            *note NotFoundErr: 3c26.
                                           
                                           
‘NOT_SUPPORTED_ERR’                        *note NotSupportedErr: 3c49.
                                           
                                           
‘NO_DATA_ALLOWED_ERR’                      *note NoDataAllowedErr: 3c4a.
                                           
                                           
‘NO_MODIFICATION_ALLOWED_ERR’              *note NoModificationAllowedErr: 3c4b.
                                           
                                           
‘SYNTAX_ERR’                               *note SyntaxErr: 3c4c.
                                           
                                           
‘WRONG_DOCUMENT_ERR’                       *note WrongDocumentErr: 3c4d.
                                           

   ---------- 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: 5e4.

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: 128. 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: 12b. 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: 3b7f.

DOM applications typically start by parsing some XML into a DOM. With
*note xml.dom.minidom: 128, 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(): 3c56. 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(): 3c57.:

 -- Função: xml.dom.minidom.parseString (string, parser=None)

     Return a ‘Document’ that represents the 'string'.  This method
     creates an *note io.StringIO: 111f. object for the string and
     passes that on to *note parse(): 3c56.

Both functions return a ‘Document’ object representing the content of
the document.

What the *note parse(): 3c56. and *note parseString(): 3c57. 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: 127. package or
the *note xml.dom.minidom: 128. 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: 128.-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: 128.

* Menu:

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

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 127. module documentation.  This section lists the differences
between the API and *note xml.dom.minidom: 128.

 -- 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: 186. 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(): c7c. 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():
     c7c.

     Alterado na versão 3.8: The *note toxml(): c7d. 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(): c7d.

     The 'standalone' argument behaves exactly as in *note writexml():
     c7c.

     Alterado na versão 3.8: The *note toprettyxml(): c7e. 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: 128. 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:
     348. 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: 128. 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:
     128.  Instead, *note xml.dom.minidom: 128. uses standard Python
     exceptions such as *note TypeError: 198. and *note AttributeError:
     5e4.

   * ‘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: 128.:

   * ‘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: 129. 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: 3b7f.

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(): 3c62. e alternar para o processamento
relacionado ao DOM.

 -- Classe: xml.dom.pulldom.PullDom (documentFactory=None)

     Subclasse de *note xml.sax.handler.ContentHandler: 3c64.

 -- Classe: xml.dom.pulldom.SAX2DOM (documentFactory=None)

     Subclasse de *note xml.sax.handler.ContentHandler: 3c64.

 -- Função: xml.dom.pulldom.parse (stream_or_string, parser=None,
          bufsize=None)

     Retorna um *note DOMEventStream: 933. 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: 3c67.  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(): 3c68.:

 -- Função: xml.dom.pulldom.parseString (string, parser=None)

     Retorna um *note DOMEventStream: 933. que representa a 'string'
     (Unicode).

 -- Dado: xml.dom.pulldom.default_bufsize

     Valor padrão para o parâmetro 'bufsize' para *note parse(): 3c66.

     O valor desta variável pode ser alterado antes de chamar *note
     parse(): 3c66. e o novo valor entrará em vigor.

* Menu:

* Objetos DOMEventStream::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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__(): 581. 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(): 3c62. 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 — Base classes for SAX handlers,  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: 12f. 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: 3b7f.

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(): 3c71. on the parser object and
argument *note feature_external_ges: 3c72.

As funções de conveniência são:

 -- Função: xml.sax.make_parser (parser_list=[])

     Create and return a SAX *note XMLReader: 3c67. 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: 3c64. instance.  If 'error_handler' is given, it
     must be a SAX *note ErrorHandler: 3c73. instance; if omitted, *note
     SAXParseException: 3c74. 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(): 1c9d, but parses from a buffer 'string'
     received as a parameter.  'string' must be a *note str: 169.
     instance or a *note bytes-like object: 193.

     Alterado na versão 3.5: Added support of *note str: 169. 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: 1091, *note Locator:
3c75, ‘Attributes’, ‘AttributesNS’, and *note XMLReader: 3c67.
interfaces are defined in the module *note xml.sax.xmlreader: 132.  The
handler interfaces are defined in *note xml.sax.handler: 130.  For
convenience, *note InputSource: 1091. (which is often instantiated
directly) and the handler classes are also available from *note xml.sax:
12f.  These interfaces are described below.

In addition to these classes, *note xml.sax: 12f. 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: 3c73. 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: 3c76. raised on parse errors.
     Instances of this class are passed to the methods of the SAX *note
     ErrorHandler: 3c73. interface to provide information about the
     parse error.  This class supports the SAX *note Locator: 3c75.
     interface as well as the *note SAXException: 3c76. interface.

 -- Exceção: xml.sax.SAXNotRecognizedException (msg, exception=None)

     Subclass of *note SAXException: 3c76. raised when a SAX *note
     XMLReader: 3c67. 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: 3c76. raised when a SAX *note
     XMLReader: 3c67. 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: 130.

     Definitions of the interfaces for application-provided objects.

Module *note xml.sax.saxutils: 131.

     Convenience functions for use in SAX applications.

Module *note xml.sax.xmlreader: 132.

     Definitions of the interfaces for parser-provided objects.

* Menu:

* SAXException Objects::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 3c76. 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 — Base classes for SAX handlers,  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’ — Base classes for SAX handlers
---------------------------------------------------------

'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: 130, 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: 130. 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

          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.14/Lib/xml/sax/handler.py


File: python.info,  Node: ContentHandler Objects,  Next: DTDHandler Objects,  Up: xml sax handler — Base classes for SAX handlers

5.21.10.1 ContentHandler Objects
................................

Users are expected to subclass *note ContentHandler: 3c64. 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(): 3c8f.).

 -- 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(): 3c92. and
     *note endPrefixMapping(): 3c93. events supply the information to
     the application to expand prefixes in those contexts itself, if
     necessary.

     Note that *note startPrefixMapping(): 3c92. and *note
     endPrefixMapping(): 3c93. events are not guaranteed to be properly
     nested relative to each-other: all *note startPrefixMapping():
     3c92. events will occur before the corresponding *note
     startElement(): 1731. event, and all *note endPrefixMapping():
     3c93. events will occur after the corresponding *note endElement():
     1732. event, but their order is not guaranteed.

 -- Método: ContentHandler.endPrefixMapping (prefix)

     End the scope of a prefix-URI mapping.

     See *note startPrefixMapping(): 3c92. for details.  This event will
     always occur after the corresponding *note endElement(): 1732.
     event, but the order of *note endPrefixMapping(): 3c93. 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: 3c94. 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(): 29. 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(): 1731. 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: 3c96. 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(): 29. 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(): 3c95, 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 — Base classes for SAX handlers

5.21.10.2 DTDHandler Objects
............................

As instâncias *note DTDHandler: 3c80. 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 — Base classes for SAX handlers

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 — Base classes for SAX handlers

5.21.10.4 ErrorHandler Objects
..............................

Objects with this interface are used to receive error and warning
information from the *note XMLReader: 3c67.  If you create an object
that implements this interface, then register the object with your *note
XMLReader: 3c67, 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: 3c74. 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 — Base classes for SAX handlers

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 — Base classes for SAX handlers,  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: 131. 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(): 3cb1, 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(): 3cb3. 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: 3c64.
     escrevendo eventos SAX de volta em um documento XML. Em outras
     palavras, usar um *note XMLGenerator: 3cb4. 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:
     3c67. 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: 1091. 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: 1091.; os analisadores usarão esta função para
     implementar o argumento polimórfico 'source' em seu método *note
     parse(): 3cb7.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 3c67. 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(): 1cd2. 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:
     3c67. 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(): 3cb7. method and for returning from
     EntityResolver.resolveEntity.

     An *note InputSource: 1091. belongs to the application, the *note
     XMLReader: 3c67. is not allowed to modify *note InputSource: 1091.
     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: 3c94.).  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: 3cbc, which will
     be passed to ‘startElementNS()’.  It is derived from *note
     AttributesImpl: 3cbc, 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: 3c96.).

* Menu:

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

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 3c67. 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: 265. or
     *note path-like: 59a. object, or an *note InputSource: 1091.
     object.  When *note parse(): 3cb7. 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: 3c64.

 -- Método: XMLReader.setContentHandler (handler)

     Set the current *note ContentHandler: 3c64.  If no *note
     ContentHandler: 3c64. is set, content events will be discarded.

 -- Método: XMLReader.getDTDHandler ()

     Return the current *note DTDHandler: 3c80.

 -- Método: XMLReader.setDTDHandler (handler)

     Set the current *note DTDHandler: 3c80.  If no *note DTDHandler:
     3c80. is set, DTD events will be discarded.

 -- Método: XMLReader.getEntityResolver ()

     Return the current *note EntityResolver: 3c81.

 -- Método: XMLReader.setEntityResolver (handler)

     Set the current *note EntityResolver: 3c81.  If no *note
     EntityResolver: 3c81. 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: 3c73.

 -- Método: XMLReader.setErrorHandler (handler)

     Set the current error handler.  If no *note ErrorHandler: 3c73. 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: 130.

 -- 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: 130.

 -- 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: 3cbb. 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: 3c75. 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: 1091.

 -- Método: InputSource.getPublicId ()

     Returns the public identifier of this *note InputSource: 1091.

 -- Método: InputSource.setSystemId (id)

     Sets the system identifier of this *note InputSource: 1091.

 -- Método: InputSource.getSystemId ()

     Returns the system identifier of this *note InputSource: 1091.

 -- Método: InputSource.setEncoding (encoding)

     Sets the character encoding of this *note InputSource: 1091.

     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: 1091. is ignored
     if the *note InputSource: 1091. 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: 1f23.) 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: 1f22.) 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:
13b7, including the methods ‘copy()’, ‘get()’, *note __contains__():
15ab, ‘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: 3c94.).  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: 3b7f.

O módulo *note xml.parsers.expat: 12c. é 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: 3cf0. para mais informações sobre como
     interpretar erros do Expat.

 -- Exceção: xml.parsers.expat.error

     Apelido para *note ExpatError: 1474.

 -- Dado: xml.parsers.expat.XMLParserType

     O tipo dos valores de retorno da função *note ParserCreate(): 3cf3.

O módulo *note xml.parsers.expat: 12c. 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.

     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: 2ea. 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(): 3cfa,
     *note NotationDeclHandler(): 3cfb, and *note
     UnparsedEntityDeclHandler(): 3cfc. functions.

 -- Método: xmlparser.GetBase ()

     Returns a string containing the base set by a previous call to
     *note SetBase(): 3cf9, or ‘None’ if *note SetBase(): 3cf9. 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(): 3cfa. handler function, described
     below.  The child parser is created with the *note
     ordered_attributes: 3cff. and *note specified_attributes: 3d00. 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: 3cfa. with *note
     None: 87a. for all arguments to allow an alternate DTD to be
     loaded.  If the document does not contain a document type
     declaration, the *note ExternalEntityRefHandler: 3cfa. will still
     be called, but the *note StartDoctypeDeclHandler: 3d03. and *note
     EndDoctypeDeclHandler: 3d04. 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(): 3cf7. or
     *note ParseFile(): 3cf8. methods are called; calling it after
     either of those have been called causes *note ExpatError: 1474. to
     be raised with the *note code: 1b. 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(): 572. has been
     backported to some prior releases of CPython as a security fix.
     Check for availability of *note SetReparseDeferralEnabled(): 572.
     using *note hasattr(): 6ee. 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 attributes:

 -- Atributo: xmlparser.buffer_size

     The size of the buffer used when *note buffer_text: 16b0. 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(): 3d06. 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: 16b0. 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:
     16b0. 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: 1474. 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(): 3cf4. 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: 3cff. is true, this is a
     list (see *note ordered_attributes: 3cff. 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: 3d15, *note EndCdataSectionHandler: 3d16,
     and *note ElementDeclHandler: 3d10. 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(): 3d06.  Set the *note buffer_text:
     16b0. 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: 3d17. 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:
     3d12. 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: 3d18. was called to
     indicate the start of each namespace declaration’s scope.  Calls to
     this handler are made after the corresponding *note
     EndElementHandler: 3d13. 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: 3d16. 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(): 3d1b, 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)

     Called for references to external entities.  'base' is the current
     base, as set by a previous call to *note SetBase(): 3cf9.  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: 3d1b. callback, if provided.


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: 1474. exceptions have a number of interesting
attributes:

 -- Atributo: ExpatError.code

     Expat’s internal error number for the specific error.  The *note
     errors.messages: 3d20. 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: 12d. module also provides error message constants
     and a dictionary *note codes: 3d21. 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: 12e. 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: 12d. 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:
1b. 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: 12c. 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.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NOT_STARTED

     The parser was tried to be stopped or suspended before it started.

     Adicionado na versão 3.14.


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: d1, 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 — HTTP modules::
* http.client — HTTP protocol client: http client — HTTP protocol client.
* ftplib — FTP protocol client::
* poplib — Cliente de protocolo POP3::
* imaplib — IMAP4 protocol client::
* smtplib — SMTP protocol client::
* uuid — Objetos UUID conforme RFC 9562::
* 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: 11b. 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():
17ed. 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: 1fe1. 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 o valor for uma única palavra que se refere a
um dos navegadores já registrados, este navegador será adicionado à
frente da lista de pesquisa; se a parte não contiver ‘%s’, ela será
simplesmente interpretada como o nome do navegador a ser iniciado.  (2)

Alterado na versão 3.14: A variável ‘BROWSER’ agora também pode ser
usada para reordenar a lista de padrões da plataforma.  Isso é
particularmente útil no macOS, onde os padrões da plataforma não se
referem às ferramentas de linha de comando em ‘PATH’.

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:
11b. no iOS requer o módulo *note ctypes: 2e.  Se *note ctypes: 2e. não
estiver disponível, as chamadas para *note open(): 17ed. falharão.

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: 1fed.: 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: 1b5d. ‘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(): 3d60.

     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(): 3d62. 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(): 3d62. sem argumento.
     Caso contrário, este ponto de entrada só é útil se você planeja
     definir a variável ‘BROWSER’ ou chamar *note get(): 3d62. 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(): 3d62. 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)

* Menu:

* Objetos controladores de navegador::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: Objetos controladores de navegador,  Up: webbrowser — Controlador de navegador web conveniente

5.22.1.1 Objetos controladores de navegador
...........................................

Os controladores de navegador fornecem o atributo *note name: 593. 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(): 3d60.

 -- 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(): 3d60.


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: 11e. é 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<26>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 3d6d. 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(): 3d6f, 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(): 3d71, 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(): 3d73. 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: 123.
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: 3d74. usado para converter um objeto
     arquivo ou similar em um *note iterador: 4c2.  Os objetos
     resultantes são *note iteráveis: 1423.  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__(): 581. 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: 108e, 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: 108e. oferecem suporte a operações de
     mapeamento típicas, incluindo *note __getitem__(): 581, *note
     get(): 1ee9, *note __setitem__(): 14c7, *note setdefault(): 126f,
     *note __delitem__(): 14c8. e *note __contains__(): 15ab.  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: 108e. 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: 108e. 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: 108e. é 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: 108e. 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: 108e. 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: 76.) 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: 123.)

 -- 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: 121.) é capaz de executar uma aplicação WSGI
     simples corretamente.

     O chamável 'start_response' deve seguir o protocolo *note
     StartResponse: 3d7a.

 -- Classe: wsgiref.simple_server.WSGIServer (server_address,
          RequestHandlerClass)

     Cria uma instância *note WSGIServer: 3d7b.  'server_address' deve
     ser uma tupla ‘(host,port)’ e 'RequestHandlerClass' deve ser a
     subclasse de *note http.server.BaseHTTPRequestHandler: 12c7. que
     será usada para processar solicitações.

     Normalmente você não precisa chamar esse construtor, pois a função
     *note make_server(): 3d79. pode cuidar de todos os detalhes para
     você.

     *note WSGIServer: 3d7b. é uma subclasse de *note
     http.server.HTTPServer: 3d7c, então todos os seus métodos (como
     ‘serve_forever()’ e ‘handle_request()’) estão disponíveis.  *note
     WSGIServer: 3d7b. 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(): 3d7d. é normalmente chamado por
     *note make_server(): 3d79, e *note get_app(): 3d7e. 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: 3d7b.).

     Você não precisa criar instâncias desta classe diretamente; elas
     são criadas automaticamente conforme necessário pelos objetos *note
     WSGIServer: 3d7b.  Você pode, no entanto, estender esta classe e
     fornecê-la como uma 'handler_class' para a função *note
     make_server(): 3d79.  Alguns métodos possivelmente relevantes para
     substituir em subclasses:

      -- Método: get_environ ()

          Retorna um dicionário *note WSGIEnvironment: 3d6d. para uma
          solicitação.  A implementação padrão copia o conteúdo do
          atributo de dicionário ‘base_environ’ do objeto *note
          WSGIServer: 3d7b. 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: 11f. 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: 124.  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: 8ad. sendo levantado; note, entretanto, que a forma
     como esses erros são manipulados depende do servidor.  Por exemplo,
     *note wsgiref.simple_server: 121. e outros servidores baseados em
     *note wsgiref.handlers: 11f. (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: 118. 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: 118, 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: 3d87. que
     define ‘wsgi.run_once’ como true, ‘wsgi.multithread’ como false e
     ‘wsgi.multiprocess’ como true, e sempre usa *note sys: df. e *note
     os: a5. para obter os fluxos CGI e o ambiente necessários.

 -- Classe: wsgiref.handlers.IISCGIHandler

     Uma alternativa especializada para *note CGIHandler: 3d86, 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: 3d86, 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: 3d86, but instead of using the *note
     sys: df. and *note os: a5. 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: 3d89. 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:
     3d89.

 -- Classe: wsgiref.handlers.SimpleHandler (stdin, stdout, stderr,
          environ, multithread=True, multiprocess=False)

     Similar to *note BaseCGIHandler: 3d87, 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: 3d87.

     This class is a subclass of *note BaseHandler: 1c8a.  It overrides
     the ‘__init__()’, *note get_stdin(): 3d8a, *note get_stderr():
     3d8b, *note add_cgi_vars(): 3d8c, *note _write(): 3d8d, and *note
     _flush(): 3d8e. 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(): ecb. method of 'stdout' should write each chunk
     in full, like *note io.BufferedIOBase: 898.

 -- 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: 1c8a. 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: 1c8a. 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: 1c8a. 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(): 3d8d.
          actually sends the data).

      -- Método: get_stdin ()

          Return an object compatible with *note InputStream: 3d90.
          suitable for use as the ‘wsgi.input’ of the request currently
          being processed.

      -- Método: get_stderr ()

          Return an object compatible with *note ErrorStream: 3d91.
          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: 1c8a.
     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: 1c8a, 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: 1c8a, 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: 1c8a,
          but *note CGIHandler: 3d86. 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: 11f. 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: 3d97. 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: 3d87. and *note CGIHandler: 3d86.) 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: 123. 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(): 3d8a,
          *note get_stderr(): 3d8b, and *note add_cgi_vars(): 3d8c.
          methods and the *note wsgi_file_wrapper: 3d9a. attribute.  It
          also inserts a ‘SERVER_SOFTWARE’ key if not present, as long
          as the *note origin_server: 3d97. attribute is a true value
          and the *note server_software: 3d96. 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(): 3d9b. 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: 3d7a. protocol.

          The default implementation just uses the *note error_status:
          3d9e, *note error_headers: 3d9f, and *note error_body: 3da0.
          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: 3d74, or ‘None’.  The default value
          of this attribute is the *note wsgiref.util.FileWrapper: 934.
          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: 3d9a. 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(): 3d8d. and *note _flush(): 3d8e. 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:
          1c8a, but false in *note BaseCGIHandler: 3d87. and *note
          CGIHandler: 3d86.

      -- Atributo: http_version

          If *note origin_server: 3d97. 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: 3d86. and *note IISCGIHandler: 3d88. 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<26>,  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: 564. 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: 564. describing a WSGI Input Stream(4).

 -- Classe: wsgiref.types.ErrorStream

     A *note typing.Protocol: 564. describing a WSGI Error Stream(5).

 -- Classe: wsgiref.types.FileWrapper

     A *note typing.Protocol: 564. describing a file wrapper(6).  See
     *note wsgiref.util.FileWrapper: 934. 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<26>,  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: 3d7a.
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: 111. para abrir e ler URLs

   * *note urllib.error: 10f. contendo as exceções levantadas por *note
     urllib.request: 111.

   * *note urllib.parse: 110. para analisar URLs

   * *note urllib.robotparser: 113. para analisar arquivos ‘robots.txt’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 111. 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(): 4af. porque a implementação *note
     getproxies(): 3dac. 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

O módulo *note urllib.request: 111. 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: 11ce.

     '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: 11ce. 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: 354. descrevendo as várias opções SSL. Veja *note
     HTTPSConnection: d2a. para mais detalhes.

     Esta função sempre retorna um objeto que pode funcionar como um
     *note gerenciador de contexto: 1e0. e tem as propriedades 'url',
     'headers' e 'status'.  Veja *note urllib.response.addinfourl: 3dad.
     para mais detalhes sobre essas propriedades.

     Para URLs HTTP e HTTPS, esta função retorna um objeto *note
     http.client.HTTPResponse: 12ca. 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: 3dae. — a frase de razão
     retornada pelo servidor — em vez dos cabeçalhos de resposta como é
     especificado na documentação para *note HTTPResponse: 12ca.

     Para URLs de FTP, arquivo e dados, esta função retorna um objeto
     *note urllib.response.addinfourl: 3dad.

     Levanta *note URLError: 2bd. quando ocorrer erros de protocolo.

     Observe que ‘None’ pode ser retornado se nenhum manipulador lidar
     com a solicitação (embora a *note OpenerDirector: 3daf. global
     instalada padrão use *note UnknownHandler: 3db0. 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: 1c6c. é 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(): 305. 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: 1c6c.

     O abridor padrão levanta um *note evento de auditoria: 1b5d.
     ‘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: 386d. 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(): 105a.

     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: 3daf. 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(): 11d2. em vez de *note urlopen(): 305.  O
     código não verifica se há um *note OpenerDirector: 3daf. real, e
     qualquer classe com a interface apropriada funcionará.

 -- Função: urllib.request.build_opener ([handler, ...])

     Return an *note OpenerDirector: 3daf. instance, which chains the
     handlers in the order given.  'handler's can be either instances of
     *note BaseHandler: 3db2, or subclasses of *note BaseHandler: 3db2.
     (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: 1c6c.
     (if proxy settings are detected), *note UnknownHandler: 3db0, *note
     HTTPHandler: eec, *note HTTPDefaultErrorHandler: 3db3, *note
     HTTPRedirectHandler: 3db4, *note FTPHandler: 3db5, *note
     FileHandler: 3db6, *note HTTPErrorProcessor: 3db7.

     If the Python installation has SSL support (i.e., if the *note ssl:
     d5. module can be imported), *note HTTPSHandler: 141f. will also be
     added.

     A *note BaseHandler: 3db2. subclass may also change its
     ‘handler_order’ attribute to modify its position in the handlers
     list.

 -- Função: urllib.request.pathname2url (path, *, add_scheme=False)

     Convert the given local path to a ‘file:’ URL. This function uses
     *note quote(): d90. function to encode the path.

     If 'add_scheme' is false (the default), the return value omits the
     ‘file:’ scheme prefix.  Set 'add_scheme' to true to return a
     complete URL.

     This example shows the function being used on Windows:

          >>> from urllib.request import pathname2url
          >>> path = 'C:\\Program Files'
          >>> pathname2url(path, add_scheme=True)
          'file:///C:/Program%20Files'

     Alterado na versão 3.14: Windows drive letters are no longer
     converted to uppercase, and ‘:’ characters not following a drive
     letter no longer cause an *note OSError: 2bf. exception to be
     raised on Windows.

     Alterado na versão 3.14: Paths beginning with a slash are converted
     to URLs with authority sections.  For example, the path
     ‘/etc/hosts’ is converted to the URL ‘///etc/hosts’.

     Alterado na versão 3.14: The 'add_scheme' parameter was added.

 -- Função: urllib.request.url2pathname (url, *, require_scheme=False,
          resolve_host=False)

     Convert the given ‘file:’ URL to a local path.  This function uses
     *note unquote(): 1a2e. to decode the URL.

     If 'require_scheme' is false (the default), the given value should
     omit a ‘file:’ scheme prefix.  If 'require_scheme' is set to true,
     the given value should include the prefix; a *note URLError: 2bd.
     is raised if it doesn’t.

     The URL authority is discarded if it is empty, ‘localhost’, or the
     local hostname.  Otherwise, if 'resolve_host' is set to true, the
     authority is resolved using *note socket.gethostbyname(): 382d. and
     discarded if it matches a local IP address (as per RFC 8089 §3(3)).
     If the authority is still unhandled, then on Windows a UNC path is
     returned, and on other platforms a *note URLError: 2bd. is raised.

     This example shows the function being used on Windows:

          >>> from urllib.request import url2pathname
          >>> url = 'file:///C:/Program%20Files'
          >>> url2pathname(url, require_scheme=True)
          'C:\\Program Files'

     Alterado na versão 3.14: Windows drive letters are no longer
     converted to uppercase, and ‘:’ characters not following a drive
     letter no longer cause an *note OSError: 2bf. exception to be
     raised on Windows.

     Alterado na versão 3.14: The URL authority is discarded if it
     matches the local hostname.  Otherwise, if the authority isn’t
     empty or ‘localhost’, then on Windows a UNC path is returned (as
     before), and on other platforms a *note URLError: 2bd. is raised.

     Alterado na versão 3.14: The URL query and fragment components are
     discarded if present.

     Alterado na versão 3.14: The 'require_scheme' and 'resolve_host'
     parameters were added.

 -- 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: eec. 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(4), 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(): 108b. 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(): 3db8. 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: 10e.’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(5).  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(6).  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: 11cf. attribute and is used by *note
     get_method(): 1365.  The default is ‘'GET'’ if 'data' is ‘None’ or
     ‘'POST'’ otherwise.  Subclasses may indicate a different default
     method by setting the *note method: 11cf. 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: 11cf. argument is
     added to the Request class.

     Alterado na versão 3.4: Default *note Request.method: 11cf. 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: 3daf. class opens URLs via *note
     BaseHandler: 3db2.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: 11d4. 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(): 3dac.

 -- 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: 3dbb. 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: 3dba.;
     refer to section *note HTTPPasswordMgr Objects: 3dbc. for
     information on the interface that must be supported.  If
     'passwd_mgr' also provides ‘is_authenticated’ and
     ‘update_authenticated’ methods (see *note
     HTTPPasswordMgrWithPriorAuth Objects: 3dbd.), 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: 3dba.; refer to section *note HTTPPasswordMgr
     Objects: 3dbc. for information on the interface that must be
     supported.  HTTPBasicAuthHandler will raise a *note ValueError:
     2ea. 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:
     3dba.; refer to section *note HTTPPasswordMgr Objects: 3dbc. 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: 3dba.;
     refer to section *note HTTPPasswordMgr Objects: 3dbc. for
     information on the interface that must be supported.

     Alterado na versão 3.14: Added support for HTTP digest
     authentication algorithm ‘SHA-256’.

 -- 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: 3dba.; refer to section *note HTTPPasswordMgr
     Objects: 3dbc. 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: 2ea.
     when presented with an authentication scheme other than Digest or
     Basic.

     Alterado na versão 3.3: Raise *note ValueError: 2ea. 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:
     3dba.; refer to section *note HTTPPasswordMgr Objects: 3dbc. 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: d2a.

     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<27>.
* Legacy interface::
* urllib.request Restrictions: urllib request Restrictions.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/urllib/request.py

   (2) https://requests.readthedocs.io/en/master/

   (3) https://datatracker.ietf.org/doc/html/rfc8089.html#section-3

   (4) https://datatracker.ietf.org/doc/html/rfc7230.html

   (5) https://datatracker.ietf.org/doc/html/rfc2965.html

   (6) 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: 11ce.’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: 11d0. 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: 11ce. 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: 11d1.
     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: 87a, which means that *note get_method(): 1365. 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():
     1365.) either by providing a default value by setting it at the
     class level in a *note Request: 11ce. subclass, or by passing a
     value in to the *note Request: 11ce. 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: 11cf. is not ‘None’, return its value, otherwise
     return ‘'GET'’ if *note Request.data: 11d1. 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: 11cf.

 -- 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: 11d0.

 -- 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: 3daf. instances have the following methods:

 -- Método: OpenerDirector.add_handler (handler)

     'handler' should be an instance of *note BaseHandler: 3db2.  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(): 3dd2. 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>(): 3dd3. 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(): 3dd4. para
          maiores informações.

        * ‘<protocol>_response()’ — signal that the handler knows how to
          post-process 'protocol' responses.

          Veja *note BaseHandler.<protocol>_response(): 3dd5. 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(): 305.
     (which simply calls the *note open(): 314. method on the currently
     installed global *note OpenerDirector: 3daf.).  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(): 305.

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: 87a. value (ie.  a response), or raises an
     exception (usually *note URLError: 2bd.).  Exceptions are allowed
     to propagate.

     In fact, the above algorithm is first tried for methods named *note
     default_open(): 3dd7.  If all such methods return *note None: 87a,
     the algorithm is repeated for methods named like
     ‘<protocol>_open()’.  If all such methods return *note None: 87a,
     the algorithm is repeated for methods named *note unknown_open():
     3dd8.

     Note that the implementation of these methods may involve calls of
     the parent *note OpenerDirector: 3daf. instance’s *note open():
     11d2. and *note error(): 3dd6. 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: 3db2. 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: 3db2.

     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: 3daf, 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: 3db2, but
     subclasses should define it if they want to catch all URLs.

     This method, if implemented, will be called by the parent *note
     OpenerDirector: 3daf.  It should return a file-like object as
     described in the return value of the *note open(): 11d2. method of
     *note OpenerDirector: 3daf, or ‘None’.  It should raise *note
     URLError: 2bd, unless a truly exceptional thing happens (for
     example, *note MemoryError: 1809. should not be mapped to *note
     URLError: 2bd.).

     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: 3db2, 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: 3daf.  Return values should be the same as for
     *note default_open(): 3dd7.

 -- Método: BaseHandler.unknown_open (req)

     This method is 'not' defined in *note BaseHandler: 3db2, 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:
     3ddd. *note OpenerDirector: 3daf.  Return values should be the same
     as for *note default_open(): 3dd7.

 -- Método: BaseHandler.http_error_default (req, fp, code, msg, hdrs)

     This method is 'not' defined in *note BaseHandler: 3db2, 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: 3daf. getting the error,
     and should not normally be called in other circumstances.

     *note OpenerDirector: 3daf. will call this method with five
     positional arguments:

       1. a *note Request: 11ce. 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(): 305.

 -- 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: 3db2, 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(): 3dde.

 -- Método: BaseHandler.<protocol>_request(req)

     This method is 'not' defined in *note BaseHandler: 3db2, 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: 3daf.  'req' will be a *note Request: 11ce. object.
     The return value should be a *note Request: 11ce. object.

 -- Método: BaseHandler.<protocol>_response(req, response)

     This method is 'not' defined in *note BaseHandler: 3db2, 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: 3daf.  'req' will be a *note Request: 11ce. object.
     'response' will be an object implementing the same interface as the
     return value of *note urlopen(): 305.  The return value should
     implement the same interface as the return value of *note
     urlopen(): 305.


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: 11d4. is
     raised.  See RFC 2616(1) for details of the precise meanings of the
     various redirection codes.

     An *note HTTPError: 11d4. 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: 11ce. 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: 11ce. to allow ‘http_error_30*()’ to perform the redirect
     to 'newurl'.  Otherwise, raise *note HTTPError: 11d4. 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: 3daf. 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(): 3de2, but called for the
     ‘found’ response.

 -- Método: HTTPRedirectHandler.http_error_303 (req, fp, code, msg,
          hdrs)

     The same as *note http_error_301(): 3de2, 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(): 3de2, 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(): 3de2, 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: 3db9. instances have one attribute:

 -- Atributo: HTTPCookieProcessor.cookiejar

     The *note http.cookiejar.CookieJar: 3dea. 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: 1c6c. 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: 3dba. and *note
HTTPPasswordMgrWithDefaultRealm: 3dbb. 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: 3dbb. 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:
3dbb. 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(): 3dee.  '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: 3dbb. 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: 11ce. 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: 11ce. 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: 2bd.
     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: 2ea. 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: 19d5. objects are *note FTPHandler: 3db5. 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: 2bd. exception.


File: python.info,  Node: HTTPErrorProcessor Objects,  Next: Exemplos<27>,  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(): 3dd6.  Eventually, *note
     HTTPDefaultErrorHandler: 3db3. will raise an *note HTTPError: 11d4.
     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(): 3e1d.


File: python.info,  Node: Exemplos<27>,  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: 3e21.

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: 1e0. 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: 11ce.:

     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(): 307. provides many handlers by default, including
a *note ProxyHandler: 1c6c.  By default, *note ProxyHandler: 1c6c. 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: 1c6c. with one
that uses programmatically supplied proxy URLs, and adds proxy
authorization support with *note ProxyBasicAuthHandler: 3dbf.

     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: 11ce. 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: 3daf. automatically adds a ‘User-Agent’ header to
every *note Request: 11ce.  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: 11ce. is
passed to *note urlopen(): 305. (or *note OpenerDirector.open(): 11d2.).
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.build_opener(urllib.request.ProxyHandler(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.build_opener(urllib.request.ProxyHandler({}}))
     >>> 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<27>,  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(): 305. returned (for a remote object).
     Exceptions are the same as for *note urlopen(): 305.

     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(): 108b. function.

     *note urlretrieve(): 306. will raise *note ContentTooShortError:
     3e24. 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(): 306.


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(): 306. 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(): 305. and *note urlretrieve(): 306. 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(): 305. or *note urlretrieve():
     306. 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:
     71. 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: 62. module.


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: 112. 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: 111. module.  The typical response object is a
*note urllib.response.addinfourl: 3dad. 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: 579. 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: 1840.

      -- Método: info ()

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          headers: 3e27.

      -- Atributo: code

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          status: 3e28.

      -- Método: getcode ()

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          status: 3e28.


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: 18dd.

O módulo *note urllib.parse: 110. 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.14/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: 853. 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: 853, 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: 87a.
                                                                      
                                                                      
     ‘password’                         Senha                         *note None: 87a.
                                                                      
                                                                      
     ‘hostname’                         Nome de máquina (em           *note None: 87a.
                                        minúsculo)                    
                                        
                                                                      
     ‘port’                             Número da porta como          *note None: 87a.
                                        inteiro, se presente          
                                        

     Ler o atributo ‘port’ irá levantar uma *note ValueError: 2ea. se
     uma porta inválida for especificada no URL. Veja a seção *note
     Structured Parse Results: 3e31. para mais informações sobre o
     objeto de resultado.

     Colchetes sem correspondência no atributo ‘netloc’ levantará uma
     *note ValueError: 2ea.

     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: 2ea.  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(): 35f. não realiza validação.  Veja
          *note Segurança ao analisar URLs: 3e32. 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: 2ea, em vez de retornar *note None: 87a.

     Alterado na versão 3.8: Os caracteres que afetam a análise de
     netloc sob normalização NFKC agora levantarão *note ValueError:
     2ea.

 -- 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: 2ea.

     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(): ac9.

     O argumento opcional 'max_num_fields' é o número máximo de campos a
     serem lidos.  Se definido, então levanta um *note ValueError: 2ea.
     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(): 108b. (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.

     Descontinuado desde a versão 3.14: Accepting objects with false
     values (like ‘0’ and ‘[]’) except empty strings and byte-like
     objects and ‘None’ is now deprecated.

 -- 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: 2ea.

     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(): ac9.

     O argumento opcional 'max_num_fields' é o número máximo de campos a
     serem lidos.  Se definido, então levanta um *note ValueError: 2ea.
     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(): 108b. 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(): 35f, mas não divide os
     parâmetros da URL. Isto deve ser usado geralmente em vez de *note
     urlparse(): 35f. 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: 853. de 5 itens:

          (esquema de endereçamento, local de rede, caminho, consulta, identificador de fragmento).

     O valor de retorno é uma *note tupla nomeada: 853, 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: 87a.
                                                                      
                                                                      
     ‘password’                         Senha                         *note None: 87a.
                                                                      
                                                                      
     ‘hostname’                         Nome de máquina (em           *note None: 87a.
                                        minúsculo)                    
                                        
                                                                      
     ‘port’                             Número da porta como          *note None: 87a.
                                        inteiro, se presente          
                                        

     Ler o atributo ‘port’ irá levantar uma *note ValueError: 2ea. se
     uma porta inválida for especificada no URL. Veja a seção *note
     Structured Parse Results: 3e31. para mais informações sobre o
     objeto de resultado.

     Colchetes sem correspondência no atributo ‘netloc’ levantará uma
     *note ValueError: 2ea.

     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: 2ea.  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(): f2e. não executa validação.  Veja
          *note Segurança ao analisar URLs: 3e32. para detalhes.

     Alterado na versão 3.6: Números de porta fora do intervalo agora
     levantam *note ValueError: 2ea, em vez de retornar *note None: 87a.

     Alterado na versão 3.8: Os caracteres que afetam a análise de
     netloc sob normalização NFKC agora levantarão *note ValueError:
     2ea.

     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(): f2e. 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(): 35f.

          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(): f2e. e *note urlunsplit(): 1890,
          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: 853, 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: 3e31. 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(): f2e. e *note urlparse(): 35f. 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: 192. e *note bytearray: 342. além
de objetos *note str: 169.

Se dados *note str: 169. forem passados, o resultado também conterá
apenas dados *note str: 169.  Se dados *note bytes: 192. ou *note
bytearray: 342. forem passados, o resultado conterá apenas dados *note
bytes: 192.

Tentar misturar dados *note str: 169. com *note bytes: 192. ou *note
bytearray: 342. em uma única chamada de função resultará em uma *note
TypeError: 198. sendo levantada, enquanto tentar passar valores de bytes
não-ASCII acionará *note UnicodeDecodeError: bfe.

Para prover uma conversão mais fácil de objetos de resultado entre *note
str: 169. e *note bytes: 192, 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: 169.) ou um método ‘decode()’ (quando o resultado
contém dados *note bytes: 192.).  As assinaturas desses métodos
correspondem às dos métodos *note str: 169. e *note bytes: 192.
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: 192. (para métodos ‘encode()’) ou dados *note
str: 169. (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(): 35f, *note urlsplit():
f2e. and *note urldefrag(): 1443. functions are subclasses of the *note
tuple: 608. 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(): 1443. results, only empty fragment
     identifiers will be removed.  For *note urlsplit(): f2e. and *note
     urlparse(): 35f. 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: 169. objects:

 -- Classe: urllib.parse.DefragResult (url, fragment)

     Concrete class for *note urldefrag(): 1443. results containing
     *note str: 169. data.  The ‘encode()’ method returns a *note
     DefragResultBytes: 3e39. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.ParseResult (scheme, netloc, path, params,
          query, fragment)

     Concrete class for *note urlparse(): 35f. results containing *note
     str: 169. data.  The ‘encode()’ method returns a *note
     ParseResultBytes: 3e3b. instance.

 -- Classe: urllib.parse.SplitResult (scheme, netloc, path, query,
          fragment)

     Concrete class for *note urlsplit(): f2e. results containing *note
     str: 169. data.  The ‘encode()’ method returns a *note
     SplitResultBytes: 3e3d. instance.

The following classes provide the implementations of the parse results
when operating on *note bytes: 192. or *note bytearray: 342. objects:

 -- Classe: urllib.parse.DefragResultBytes (url, fragment)

     Concrete class for *note urldefrag(): 1443. results containing
     *note bytes: 192. data.  The ‘decode()’ method returns a *note
     DefragResult: 3e38. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.ParseResultBytes (scheme, netloc, path, params,
          query, fragment)

     Concrete class for *note urlparse(): 35f. results containing *note
     bytes: 192. data.  The ‘decode()’ method returns a *note
     ParseResult: 3e3a. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.SplitResultBytes (scheme, netloc, path, query,
          fragment)

     Concrete class for *note urlsplit(): f2e. results containing *note
     bytes: 192. data.  The ‘decode()’ method returns a *note
     SplitResult: 3e3c. 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: 169. or a *note bytes: 192.
     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():
     ac8. method.  'encoding' defaults to ‘'utf-8'’.  'errors' defaults
     to ‘'strict'’, meaning unsupported characters raise a *note
     UnicodeEncodeError: 87c.  'encoding' and 'errors' must not be
     supplied if 'string' is a *note bytes: 192, or a *note TypeError:
     198. 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(): d90, 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(): d90, but accepts a *note bytes: 192. object
     rather than a *note str: 169, 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(): ac9. method.

     'string' may be either a *note str: 169. or a *note bytes: 192.
     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(): 1a2e, but also replace plus signs with
     spaces, as required for unquoting HTML form values.

     'string' must be a *note str: 169.

     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: 192. object.

     'string' may be either a *note str: 169. or a *note bytes: 192.
     object.

     If it is a *note str: 169, 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: 169. or *note bytes: 192. 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():
     305. function, then it should be encoded to bytes, otherwise it
     would result in a *note TypeError: 198.

     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(): 1444. 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(): d90, 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: 169.).

     To reverse this encoding process, *note parse_qs(): 31d. and *note
     parse_qsl(): 31c. are provided in this module to parse query
     strings into Python data structures.

     Refer to *note urllib examples: 3e22. to find out how the *note
     urllib.parse.urlencode(): 108b. 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.

     Descontinuado desde a versão 3.14: Accepting objects with false
     values (like ‘0’ and ‘[]’) except empty strings and byte-like
     objects and ‘None’ is now deprecated.

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: 10f. define as classes de exceção para
exceções levantadas por *note urllib.request: 111.  A classe de exceção
base é *note URLError: 2bd.

As seguintes exceções são levantadas por *note urllib.error: 10f.
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:
     2bf.

      -- 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: 2bd. costumava ser um
     subtipo de *note IOError: 1249, que agora é um apelido de *note
     OSError: 2bf.

 -- Exceção: urllib.error.HTTPError (url, code, msg, hdrs, fp)

     Embora seja uma exceção (uma subclasse de *note URLError: 2bd.),
     uma *note HTTPError: 11d4. também pode funcionar como um valor de
     retorno não excepcional do tipo arquivo (a mesma coisa que *note
     urlopen(): 305. 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: 3e46.

      -- 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: 11d4.  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(): 306.
     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.14/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 — HTTP modules,  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: eee, 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: 853. ‘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(): 24c.  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: eee.:

     >>> 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.14/Lib/urllib/robotparser.py


File: python.info,  Node: http — HTTP modules,  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’ — HTTP modules
----------------------------

'Código-fonte:' Lib/http/__init__.py(1)

__________________________________________________________________

*note http: 72. é um pacote que coleta vários módulos para trabalhar com
o Protocolo de Transferência de Hipertexto:

   * *note http.client: 73. é um cliente de protocolo HTTP de baixo
     nível; para abertura de URL de alto nível, use *note
     urllib.request: 111.

   * *note http.server: 76. contém classes básicas de servidor HTTP
     baseadas em *note socketserver: d2.

   * *note http.cookies: 75. tem utilidades para implementar
     gerenciamento de estado com cookies

   * *note http.cookiejar: 74. provê persistência de cookies

O módulo *note http: 72. 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: ecf. 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.14/Lib/http/__init__.py


File: python.info,  Node: códigos de status HTTP,  Next: Categorias de HTTP status,  Up: http — HTTP modules

5.22.9.1 códigos de status HTTP
...............................

Supported, IANA-registered status codes(1) available in *note
http.HTTPStatus: af2. are:

Código      Nome da Enumeração                      Detalhes
                                                    
----------------------------------------------------------------------------------------------------------------------------------------
                                                    
‘100’       ‘CONTINUE’                              HTTP Semantics RFC 9110(2), Section 15.2.1
                                                    
                                                    
‘101’       ‘SWITCHING_PROTOCOLS’                   HTTP Semantics RFC 9110(3), Section 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), Section 15.3.1
                                                    
                                                    
‘201’       ‘CREATED’                               HTTP Semantics RFC 9110(7), Section 15.3.2
                                                    
                                                    
‘202’       ‘ACCEPTED’                              HTTP Semantics RFC 9110(8), Section 15.3.3
                                                    
                                                    
‘203’       ‘NON_AUTHORITATIVE_INFORMATION’         HTTP Semantics RFC 9110(9), Section 15.3.4
                                                    
                                                    
‘204’       ‘NO_CONTENT’                            HTTP Semantics RFC 9110(10), Section 15.3.5
                                                    
                                                    
‘205’       ‘RESET_CONTENT’                         HTTP Semantics RFC 9110(11), Section 15.3.6
                                                    
                                                    
‘206’       ‘PARTIAL_CONTENT’                       HTTP Semantics RFC 9110(12), Section 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), Section 15.4.1
                                                    
                                                    
‘301’       ‘MOVED_PERMANENTLY’                     HTTP Semantics RFC 9110(17), Section 15.4.2
                                                    
                                                    
‘302’       ‘FOUND’                                 HTTP Semantics RFC 9110(18), Section 15.4.3
                                                    
                                                    
‘303’       ‘SEE_OTHER’                             HTTP Semantics RFC 9110(19), Section 15.4.4
                                                    
                                                    
‘304’       ‘NOT_MODIFIED’                          HTTP Semantics RFC 9110(20), Section 15.4.5
                                                    
                                                    
‘305’       ‘USE_PROXY’                             HTTP Semantics RFC 9110(21), Section 15.4.6
                                                    
                                                    
‘307’       ‘TEMPORARY_REDIRECT’                    HTTP Semantics RFC 9110(22), Section 15.4.8
                                                    
                                                    
‘308’       ‘PERMANENT_REDIRECT’                    HTTP Semantics RFC 9110(23), Section 15.4.9
                                                    
                                                    
‘400’       ‘BAD_REQUEST’                           HTTP Semantics RFC 9110(24), Section 15.5.1
                                                    
                                                    
‘401’       ‘UNAUTHORIZED’                          HTTP Semantics RFC 9110(25), Section 15.5.2
                                                    
                                                    
‘402’       ‘PAYMENT_REQUIRED’                      HTTP Semantics RFC 9110(26), Section 15.5.3
                                                    
                                                    
‘403’       ‘FORBIDDEN’                             HTTP Semantics RFC 9110(27), Section 15.5.4
                                                    
                                                    
‘404’       ‘NOT_FOUND’                             HTTP Semantics RFC 9110(28), Section 15.5.5
                                                    
                                                    
‘405’       ‘METHOD_NOT_ALLOWED’                    HTTP Semantics RFC 9110(29), Section 15.5.6
                                                    
                                                    
‘406’       ‘NOT_ACCEPTABLE’                        HTTP Semantics RFC 9110(30), Section 15.5.7
                                                    
                                                    
‘407’       ‘PROXY_AUTHENTICATION_REQUIRED’         HTTP Semantics RFC 9110(31), Section 15.5.8
                                                    
                                                    
‘408’       ‘REQUEST_TIMEOUT’                       HTTP Semantics RFC 9110(32), Section 15.5.9
                                                    
                                                    
‘409’       ‘CONFLICT’                              HTTP Semantics RFC 9110(33), Section 15.5.10
                                                    
                                                    
‘410’       ‘GONE’                                  HTTP Semantics RFC 9110(34), Section 15.5.11
                                                    
                                                    
‘411’       ‘LENGTH_REQUIRED’                       HTTP Semantics RFC 9110(35), Section 15.5.12
                                                    
                                                    
‘412’       ‘PRECONDITION_FAILED’                   HTTP Semantics RFC 9110(36), Section 15.5.13
                                                    
                                                    
‘413’       ‘CONTENT_TOO_LARGE’                     HTTP Semantics RFC 9110(37), Section 15.5.14
                                                    
                                                    
‘414’       ‘URI_TOO_LONG’                          HTTP Semantics RFC 9110(38), Section 15.5.15
                                                    
                                                    
‘415’       ‘UNSUPPORTED_MEDIA_TYPE’                HTTP Semantics RFC 9110(39), Section 15.5.16
                                                    
                                                    
‘416’       ‘RANGE_NOT_SATISFIABLE’                 HTTP Semantics RFC 9110(40), Section 15.5.17
                                                    
                                                    
‘417’       ‘EXPECTATION_FAILED’                    HTTP Semantics RFC 9110(41), Section 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), Section 15.5.20
                                                    
                                                    
‘422’       ‘UNPROCESSABLE_CONTENT’                 HTTP Semantics RFC 9110(44), Section 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), Section 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), Section 15.6.1
                                                    
                                                    
‘501’       ‘NOT_IMPLEMENTED’                       HTTP Semantics RFC 9110(54), Section 15.6.2
                                                    
                                                    
‘502’       ‘BAD_GATEWAY’                           HTTP Semantics RFC 9110(55), Section 15.6.3
                                                    
                                                    
‘503’       ‘SERVICE_UNAVAILABLE’                   HTTP Semantics RFC 9110(56), Section 15.6.4
                                                    
                                                    
‘504’       ‘GATEWAY_TIMEOUT’                       HTTP Semantics RFC 9110(57), Section 15.6.5
                                                    
                                                    
‘505’       ‘HTTP_VERSION_NOT_SUPPORTED’            HTTP Semantics RFC 9110(58), Section 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: 73. 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: Foi implementada a RFC9110 referente a nomeação
de constantes de status.  Nomes antigos de constantes foram preservados
para manter a retrocompatibilidade.

   ---------- 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 — HTTP modules

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), Section 15
                                                      
                                                      
‘is_success’             ‘200 <= status <= 299’       HTTP Semantics RFC 9110(2), Section 15
                                                      
                                                      
‘is_redirection’         ‘300 <= status <= 399’       HTTP Semantics RFC 9110(3), Section 15
                                                      
                                                      
‘is_client_error’        ‘400 <= status <= 499’       HTTP Semantics RFC 9110(4), Section 15
                                                      
                                                      
‘is_server_error’        ‘500 <= status <= 599’       HTTP Semantics RFC 9110(5), Section 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.

     A subclass of *note enum.StrEnum: 822. that defines a set of HTTP
     methods and descriptions written in English.

     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 — HTTP modules

5.22.9.3 Métodos HTTP
.....................

Supported, IANA-registered methods(1) available in *note
http.HTTPMethod: 3e59. are:

Método          Nome da Enumeração                      Detalhes
                                                        
-------------------------------------------------------------------------------------------------------------------------------
                                                        
‘GET’           ‘GET’                                   HTTP Semantics RFC 9110(2), Section 9.3.1
                                                        
                                                        
‘HEAD’          ‘HEAD’                                  HTTP Semantics RFC 9110(3), Section 9.3.2
                                                        
                                                        
‘POST’          ‘POST’                                  HTTP Semantics RFC 9110(4), Section 9.3.3
                                                        
                                                        
‘PUT’           ‘PUT’                                   HTTP Semantics RFC 9110(5), Section 9.3.4
                                                        
                                                        
‘DELETE’        ‘DELETE’                                HTTP Semantics RFC 9110(6), Section 9.3.5
                                                        
                                                        
‘CONNECT’       ‘CONNECT’                               HTTP Semantics RFC 9110(7), Section 9.3.6
                                                        
                                                        
‘OPTIONS’       ‘OPTIONS’                               HTTP Semantics RFC 9110(8), Section 9.3.7
                                                        
                                                        
‘TRACE’         ‘TRACE’                                 HTTP Semantics RFC 9110(9), Section 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 — HTTP modules,  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: 111. 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: d5.).

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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: d29. 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: d29. 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: 354. descrevendo as várias opções do SSL.

     Por favor leia *note Considerações de segurança: 372b. 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: 386d. 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: c1c. 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(): 105a.

     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: 898.
     reader (i.e.  not text) and must provide a valid RFC 2822(3) style
     header.

     Esta função retorna uma instância de *note http.client.HTTPMessage:
     3e5f. que armazena os campos do cabeçalho, mas não o payload (o
     mesmo que *note HTTPResponse.msg: 3e60. e *note
     http.server.BaseHTTPRequestHandler.headers: 3e61.).  Depois de
     retornar, o ponteiro de arquivo 'fp' está pronto para ler o corpo
     da requisição HTTP.

          Nota: *note parse_headers(): 1cdf. 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: bc3.

 -- Exceção: http.client.NotConnected

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.InvalidURL

     Uma subclasse de *note HTTPException: 3e62, levantada se uma porta
     é fornecida e esta é não-numérica ou vazia.

 -- Exceção: http.client.UnknownProtocol

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.UnknownTransferEncoding

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.UnimplementedFileMode

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.IncompleteRead

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.ImproperConnectionState

     Uma subclasse de *note HTTPException: 3e62.

 -- Exceção: http.client.CannotSendRequest

     Uma subclasse de *note ImproperConnectionState: 3e69.

 -- Exceção: http.client.CannotSendHeader

     Uma subclasse de *note ImproperConnectionState: 3e69.

 -- Exceção: http.client.ResponseNotReady

     Uma subclasse de *note ImproperConnectionState: 3e69.

 -- Exceção: http.client.BadStatusLine

     Uma subclasse de *note HTTPException: 3e62.  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: 3e62.  Levantada se uma linha
     excessivamente longa é recebida, do servidor, no protocolo HTTP.

 -- Exceção: http.client.RemoteDisconnected

     Uma subclasse de *note ConnectionResetError: 1255. e *note
     BadStatusLine: 3e6d.  Levantada por *note
     HTTPConnection.getresponse(): ffe. 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: 3e6d.‘('')’ 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: 3e56. 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<28>.
* HTTPMessage Objects::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/http/client.py

   (2) https://requests.readthedocs.io/en/latest/

   (3) https://datatracker.ietf.org/doc/html/rfc2822.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: d29. 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:
     169, um *note objeto bytes ou similar: 193, um *note objeto
     arquivo: 13bf. aberto, ou um iterável de *note bytes: 192.  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: 13bf, 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: 899, 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: 13bf, 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: 169. or bytes-like
          object that is not also a file as the body representation.

     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: 12ca. instance.

          Nota: Note that you must have read the whole response before
          you can send a new request to the server.

     Alterado na versão 3.5: Se uma *note ConnectionError: 1000. ou
     subclasse for levantada, o objeto *note HTTPConnection: d29. estará
     pronto para se reconectar quando uma nova solicitação for enviada.

 -- 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: 12ca.
     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: d2a. constructor, and the address of the host that
     we eventually want to reach to the *note set_tunnel(): 1424.
     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: 1b5d. ‘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(): e9b. 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: 25f. the encoding will result in a single chunk.  If
     'message_body' is a *note collections.abc.Iterable: 253f, each
     iteration of 'message_body' will result in a chunk.  If
     'message_body' is a *note file object: 13bf, 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(): e9c. method has been called and before
     *note getresponse(): ffe. is called.

     Levanta um *note evento de auditoria: 1b5d. ‘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<28>,  Prev: Objetos de HTTPConnection,  Up: http client — HTTP protocol client

5.22.10.2 Objetos HTTPResponse
..............................

An *note HTTPResponse: 12ca. 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: 898. 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: 3e5f. instance containing the
     response headers.  *note http.client.HTTPMessage: 3e5f. is a
     subclass of *note email.message.Message: 57a.

 -- 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: 579. 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: 3e84. 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:
     3e81.

 -- Método: HTTPResponse.info ()

     Descontinuado desde a versão 3.9: Deprecated in favor of *note
     headers: 3e82.

 -- Método: HTTPResponse.getcode ()

     Descontinuado desde a versão 3.9: Deprecated in favor of *note
     status: 3e83.


File: python.info,  Node: Exemplos<28>,  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: 11ce. 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<28>,  Up: http client — HTTP protocol client

5.22.10.4 HTTPMessage Objects
.............................

 -- Classe: http.client.HTTPMessage (email.message.Message)

An *note http.client.HTTPMessage: 3e5f. instance holds the headers from
an HTTP response.  It is implemented using the *note
email.message.Message: 57a. 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: aec. and a few related items.
The *note FTP: aec. 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: 111. 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

Here’s a sample session using the *note ftplib: 62. 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<7>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<7>,  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<7>

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: aec. class.


     Parâmetros:

        * ‘host’ (*note str: 169.) – The hostname to connect to.  If
          given, ‘connect(host)’ is implicitly called by the
          constructor.

        * ‘user’ (*note str: 169.) – The username to log in with
          (default: ‘'anonymous'’).  If given, ‘login(host, passwd,
          acct)’ is implicitly called by the constructor.

        * ‘passwd’ (*note str: 169.) – 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: 169.) – Account information to be used for
          the ‘ACCT’ FTP command.  Few systems implement this.  See
          RFC-959(1) for more details.

        * ‘timeout’ (*note float: 196.‘ | ’‘None’) – A timeout in
          seconds for blocking operations like *note connect(): 3e93.
          (default: the global default timeout setting).

        * ‘source_address’ (*note tuple: 608.‘ | ’‘None’) – A 2-tuple
          ‘(host, port)’ for the socket to bind to as its source address
          before connecting.

        * ‘encoding’ (*note str: 169.) – The encoding for directories
          and filenames (default: ‘'utf-8'’).

     The *note FTP: aec. class supports the *note with: 186. 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: 186.
     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: 2ea. 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: aec. instances have the following methods:

      -- Método: set_debuglevel (level)

          Set the instance’s debugging level as an *note int: 19b.  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: aec. instance
          was created.  All other ‘FTP’ methods can only be called after
          a connection has successfully been made.


          Parâmetros:

             * ‘host’ (*note str: 169.) – The host to connect to.

             * ‘port’ (*note int: 19b.) – 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: 196.‘ | ’‘None’) – A timeout in
               seconds for the connection attempt (default: the global
               default timeout setting).

             * ‘source_address’ (*note tuple: 608.‘ | ’‘None’) – A
               2-tuple ‘(host, port)’ for the socket to bind to as its
               source address before connecting.

          Levanta um *note evento de auditoria: 1b5d. ‘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: aec. instance
          was created.  Most FTP commands are only allowed after the
          client has logged in.


          Parâmetros:

             * ‘user’ (*note str: 169.) – The username to log in with
               (default: ‘'anonymous'’).

             * ‘passwd’ (*note str: 169.) – 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: 169.) – 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: 1b5d. ‘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: 3e9a. otherwise.

          Levanta um *note evento de auditoria: 1b5d. ‘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: 169.) – An appropriate ‘RETR’ command:
               ‘"RETR FILENAME"’.

             * ‘callback’ (*note callable: 2c1e.) – A single parameter
               callable that is called for each block of data received,
               with its single argument being the data as *note bytes:
               192.

             * ‘blocksize’ (*note int: 19b.) – The maximum chunk size to
               read on the low-level *note socket: f95. 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: 19b.) – A ‘REST’ command to be sent to
               the server.  See the documentation for the 'rest'
               parameter of the *note transfercmd(): 3e9c. 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():
          3e9b.) 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: cc0.

      -- 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: 169.) – An appropriate ‘STOR’ command:
               ‘"STOR FILENAME"’.

             * ‘fp’ (*note file object: 13bf.) – A file object (opened
               in binary mode) which is read until EOF, using its *note
               read(): 1012. method in blocks of size 'blocksize' to
               provide the data to be stored.

             * ‘blocksize’ (*note int: 19b.) – The read block size.
               Defaults to ‘8192’.

             * ‘callback’ (*note callable: 2c1e.) – A single parameter
               callable that is called for each block of data sent, with
               its single argument being the data as *note bytes: 192.

             * ‘rest’ (*note int: 19b.) – A ‘REST’ command to be sent to
               the server.  See the documentation for the 'rest'
               parameter of the *note transfercmd(): 3e9c. 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(): 1505.).  Lines are
          read until EOF from the *note file object: 13bf. 'fp' (opened
          in binary mode) using its *note readline(): 257b. 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(): 3e9c. 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:
          3e9a. exception will be raised.  If this happens, simply call
          *note transfercmd(): 3e9c. without a 'rest' argument.

      -- Método: ntransfercmd (cmd, rest=None)

          Like *note transfercmd(): 3e9c, 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(): 3e9c.

      -- 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():
               12be. 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(): 3e9d.;
          the default prints to *note sys.stdout: cc0.  This method
          returns ‘None’.

               Nota: If your server supports the command, *note mlsd():
               12be. 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: 3ea3. on permission errors or *note
          error_reply: 3e9a. 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():
          3eaa. method which renders the *note FTP: aec. 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(): 3ea9.  After this call the *note FTP:
          aec. instance should not be used any more (after a call to
          *note close(): 3eaa. or *note quit(): 3ea9. you cannot reopen
          the connection by issuing another *note login(): 3e96.
          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<7>

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: aec. 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(): 3eac. method.


     Parâmetros:

        * ‘host’ (*note str: 169.) – The hostname to connect to.  If
          given, ‘connect(host)’ is implicitly called by the
          constructor.

        * ‘user’ (*note str: 169.) – The username to log in with
          (default: ‘'anonymous'’).  If given, ‘login(host, passwd,
          acct)’ is implicitly called by the constructor.

        * ‘passwd’ (*note str: 169.) – 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: 169.) – 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: 354.) – 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:
          372b. for best practices.

        * ‘timeout’ (*note float: 196.‘ | ’‘None’) – A timeout in
          seconds for blocking operations like *note connect(): 3e93.
          (default: the global default timeout setting).

        * ‘source_address’ (*note tuple: 608.‘ | ’‘None’) – A 2-tuple
          ‘(host, port)’ for the socket to bind to as its source address
          before connecting.

        * ‘encoding’ (*note str: 169.) – 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: 385b. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 386d.).

     Alterado na versão 3.9: If the 'timeout' parameter is set to be
     zero, it will raise a *note ValueError: 2ea. 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: aed. 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: aec, defining these
     additional methods and attributes:

      -- Atributo: ssl_version

          The SSL version to use (defaults to *note ssl.PROTOCOL_SSLv23:
          385f.).

      -- Método: auth ()

          Set up a secure control connection by using TLS or SSL,
          depending on what is specified in the *note ssl_version: 3ead.
          attribute.

          Alterado na versão 3.4: The method now supports hostname check
          with *note ssl.SSLContext.check_hostname: 385b. and 'Server
          Name Indication' (see *note ssl.HAS_SNI: 386d.).

      -- 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<7>

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:
     aec. 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: 2bf. and *note EOFError: 14d5.

Ver também
..........

Módulo *note netrc: 9f.

     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: b13, que encapsula uma
conexão com um servidor POP3 e implementa o protocolo conforme definido
em RFC 1939(2).  A classe *note POP3: b13. oferece suporte aos conjuntos
de comandos mínimos e opcionais de RFC 1939(3).  A classe *note POP3:
b13. 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: b14, 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: af5, pois os servidores
IMAP tendem a ter uma implementação melhor.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

O módulo *note poplib: b1. 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: 1b5d. ‘ftplib.connect’ com os
     argumentos ‘self’, ‘host’, ‘port’.

     Todos os comandos levantarão um *note evento de auditoria: 1b5d.
     ‘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: 2ea. 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: b13. 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: b13.  'context' é
     um objeto opcional *note ssl.SSLContext: 354. 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: 372b. para obter as melhores práticas.

     Levanta um *note evento de auditoria: 1b5d. ‘ftplib.connect’ com os
     argumentos ‘self’, ‘host’, ‘port’.

     Todos os comandos levantarão um *note evento de auditoria: 1b5d.
     ‘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: 385b. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 386d.).

     Alterado na versão 3.9: Se o parâmetro 'timeout' for definido como
     zero, será levantada *note ValueError: 2ea. 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: b1.:

 -- Exceção: poplib.error_proto

     Exceção levantada em caso de erros deste módulo (erros do módulo
     *note socket: d1. não são detectados).  O motivo da exceção é
     passado ao construtor como uma string.

Ver também
..........

Módulo *note imaplib: 78.

     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.14/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: b13. 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(): 1397.
     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: 1398. 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: 354. 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: 372b. for best practices.

     This method supports hostname checking via *note
     ssl.SSLContext.check_hostname: 385b. and 'Server Name Indication'
     (see *note ssl.HAS_SNI: 386d.).

     Adicionado na versão 3.4.

Instances of *note POP3_SSL: b14. 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 — SMTP protocol client,  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: af5, *note IMAP4_SSL:
af6. and *note IMAP4_stream: af8, 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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

Three classes are provided by the *note imaplib: 78. module, *note
IMAP4: af5. 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: af5. class supports the *note with: 186.
     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: 186.
     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: af5.
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: 1768.  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:
     1768.  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: af5. 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: 354. 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: 372b. 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: 385b. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 386d.).

     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: af5. 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: eda. 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(): 556.), a 9-tuple representing local
     time an instance of *note time.struct_time: eda. (as returned by
     *note time.localtime(): 16e7.), an aware instance of *note
     datetime.datetime: 4dc, 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.14/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)'’).

Most commands return 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: af5. 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(): 1003. 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.idle (duration=None)

     Return an ‘Idler’: an iterable context manager implementing the
     IMAP4 ‘IDLE’ command as defined in RFC 2177(4).

     The returned object sends the ‘IDLE’ command when activated by the
     *note with: 186. statement, produces IMAP untagged responses via
     the *note iterator: 4c2. protocol, and sends ‘DONE’ upon context
     exit.

     All untagged responses that arrive after sending the ‘IDLE’ command
     (including any that arrive before the server acknowledges the
     command) will be available via iteration.  Any leftover responses
     (those not iterated in the *note with: 186. context) can be
     retrieved in the usual way after ‘IDLE’ ends, using *note
     IMAP4.response(): 3ee1.

     Responses are represented as ‘(type, [data, ...])’ tuples, as
     described in *note IMAP4 Objects: 3ed3.

     The 'duration' argument sets a maximum duration (in seconds) to
     keep idling, after which any ongoing iteration will stop.  It can
     be an *note int: 19b. or *note float: 196, or ‘None’ for no time
     limit.  Callers wishing to avoid inactivity timeouts on servers
     that impose them should keep this at most 29 minutes (1740
     seconds).  Requires a socket connection; 'duration' must be ‘None’
     on *note IMAP4_stream: af8. connections.

          >>> with M.idle(duration=29 * 60) as idler:
          ...     for typ, data in idler:
          ...         print(typ, data)
          ...
          EXISTS [b'1']
          RECENT [b'1']

      -- Método: Idler.burst (interval=0.1)

          Yield a burst of responses no more than 'interval' seconds
          apart (expressed as an *note int: 19b. or *note float: 196.).

          This *note generator: 1257. is an alternative to iterating one
          response at a time, intended to aid in efficient batch
          processing.  It retrieves the next response along with any
          immediately available subsequent responses.  (For example, a
          rapid series of ‘EXPUNGE’ responses after a bulk delete.)

          Requires a socket connection; does not work on *note
          IMAP4_stream: af8. connections.

               >>> with M.idle() as idler:
               ...     # get a response and any others following by < 0.1 seconds
               ...     batch = list(idler.burst())
               ...     print(f'processing {len(batch)} responses...')
               ...     print(batch)
               ...
               processing 3 responses...
               [('EXPUNGE', [b'2']), ('EXPUNGE', [b'1']), ('RECENT', [b'0'])]

               Dica: The ‘IDLE’ context’s maximum duration, as passed to
               *note IMAP4.idle(): 22c, is respected when waiting for
               the first response in a burst.  Therefore, an expired
               ‘Idler’ will cause this generator to return immediately
               without producing anything.  Callers should consider this
               if using it in a loop.

          Nota: The iterator returned by *note IMAP4.idle(): 22c. is
          usable only within a *note with: 186. statement.  Before or
          after that context, unsolicited responses are collected
          internally whenever a command finishes, and can be retrieved
          with *note IMAP4.response(): 3ee1.

          Nota: The ‘Idler’ class name and structure are internal
          interfaces, subject to change.  Calling code can rely on its
          context management, iteration, and public method to remain
          stable, but should not subclass, instantiate, compare, or
          otherwise directly reference the class.

     Adicionado na versão 3.14.

 -- 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.14: An *note IMAP4.error: 1768. 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(5).

 -- 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: 2ea. to reject
     creating a non-blocking socket.  This method is implicitly called
     by the *note IMAP4: af5. constructor.  The connection objects
     established by this method will be used in the *note IMAP4.read():
     3ee9, *note IMAP4.readline(): 3eea, *note IMAP4.send(): 3eeb, and
     *note IMAP4.shutdown(): 3eec. methods.  You may override this
     method.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 1003. 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: 1b5d. ‘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(): c78.  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: 354. object.  This will
     enable encryption on the IMAP connection.  Please read *note
     Considerações de segurança: 372b. 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: 385b. and 'Server Name
     Indication' (see *note ssl.HAS_SNI: 386d.).

 -- 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(6) 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(7) (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(): af9. 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(): afa, 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: af5.:

 -- 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(): 1003. 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/rfc2177.html

   (5) https://datatracker.ietf.org/doc/html/rfc2342.html

   (6) https://datatracker.ietf.org/doc/html/rfc2060.html

   (7) 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 — SMTP protocol client,  Next: uuid — Objetos UUID conforme RFC 9562,  Prev: imaplib — IMAP4 protocol client,  Up: Protocolos de Internet e Suporte

5.22.14 ‘smtplib’ — SMTP protocol client
----------------------------------------

'Código-fonte:' Lib/smtplib.py(1)

__________________________________________________________________

The *note smtplib: cf. module defines an SMTP client session object that
can be used to send mail to any internet machine with an SMTP or ESMTP
listener daemon.  For details of SMTP and ESMTP operation, consult RFC
821(2) (Simple Mail Transfer Protocol) and RFC 1869(3) (SMTP Service
Extensions).

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

 -- Classe: smtplib.SMTP (host='', port=0, local_hostname=None[,
          timeout], source_address=None)

     An *note SMTP: b1d. 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(): 1c66. 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(): 1a24.  If the *note connect(): 1c66. call returns
     anything other than a success code, an *note SMTPConnectError:
     3f06. 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: a2c. 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(): 104f, and *note SMTP.quit(): 3f07. methods.  An
     example is included below.

     The *note SMTP: b1d. class supports the *note with: 186. 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: 1b5d.
     ‘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: 186.
     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: 2ea. 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: b1e. instance behaves exactly the same as
     instances of *note SMTP: b1d.  *note SMTP_SSL: b1e. should be used
     for situations where SSL is required from the beginning of the
     connection and using ‘starttls()’ 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: b1d. class.  'context', also
     optional, can contain a *note SSLContext: 354. and allows
     configuring various aspects of the secure connection.  Please read
     *note Considerações de segurança: 372b. 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: 385b. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 386d.).

     Alterado na versão 3.9: If the 'timeout' parameter is set to be
     zero, it will raise a *note ValueError: 2ea. 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 ‘connect()’ 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: b1d. 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: 2bf. 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: 2bf.

 -- Exceção: smtplib.SMTPServerDisconnected

     This exception is raised when the server unexpectedly disconnects,
     or when an attempt is made to use the *note SMTP: b1d. 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.  The error code is stored in the
     ‘smtp_code’ attribute of the error, and the ‘smtp_error’ attribute
     is set to the error message.

 -- Exceção: smtplib.SMTPSenderRefused

     Sender address refused.  In addition to the attributes set by on
     all *note SMTPResponseException: 3f09. exceptions, this sets
     ‘sender’ to the string that the SMTP server refused.

 -- Exceção: smtplib.SMTPRecipientsRefused

     All recipient addresses refused.  The errors for each recipient are
     accessible through the attribute ‘recipients’, which is a
     dictionary of exactly the same sort as *note SMTP.sendmail(): 104f.
     returns.

 -- 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.14/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 — SMTP protocol client

5.22.14.1 Objetos SMTP
......................

An *note SMTP: b1d. 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: 3f08. 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: 1b5d. ‘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
     ‘helo_resp’ 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():
     104f. 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(): 3f14.  Also sets several informational
     attributes: the message returned by the server is stored as the
     ‘ehlo_resp’ attribute, ‘does_esmtp’ is set to ‘True’ or ‘False’
     depending on whether the server supports ESMTP, and
     ‘esmtp_features’ 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(): 3f14. before sending mail,
     it should not be necessary to call this method explicitly.  It will
     be implicitly called by *note sendmail(): 104f. when necessary.

 -- Método: SMTP.ehlo_or_helo_if_needed ()

     This method calls *note ehlo(): 3f13. and/or *note helo(): 3f12. if
     there has been no previous ‘EHLO’ or ‘HELO’ command this session.
     It tries ESMTP ‘EHLO’ first.

     *note SMTPHeloError: 3f0d.

          The server didn’t reply properly to the ‘HELO’ greeting.

 -- Método: SMTP.has_extn (name)

     Return *note True: dfb. if 'name' is in the set of SMTP service
     extensions returned by the server, *note False: d1f. 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: 3f0d.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPAuthenticationError: 3f0e.

          O servidor não aceitou a combinação de usuário/senha.

     *note SMTPNotSupportedError: 1c65.

          The ‘AUTH’ command is not supported by the server.

     *note SMTPException: 1197.

          No suitable authentication method was found.

     Each of the authentication methods supported by *note smtplib: cf.
     are tried in turn if they are advertised as supported by the
     server.  See *note auth(): 104d. for a list of supported
     authentication methods.  'initial_response_ok' is passed through to
     *note auth(): 104d.

     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: 1c65. 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 ‘esmtp_features’.

     '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(): 3f17. 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: cf.

     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(): 3f13. again.

     If 'keyfile' and 'certfile' are provided, they are used to create
     an *note ssl.SSLContext: 354.

     Optional 'context' parameter is an *note ssl.SSLContext: 354.
     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: 3f0d.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPNotSupportedError: 1c65.

          O servidor não da suporte a extensão STARTTLS.

     *note RuntimeError: 243.

          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
     ‘SSLContext.check_hostname’ and 'Server Name Indicator' (see *note
     HAS_SNI: 386d.).

     Alterado na versão 3.5: The error raised for lack of STARTTLS
     support is now the *note SMTPNotSupportedError: 1c65. subclass
     instead of the base *note SMTPException: 1197.

 -- 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'.  (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: 3f0b.

          All recipients were refused.  Nobody got the mail.  The
          ‘recipients’ attribute of the exception object is a dictionary
          with information about the refused recipients (like the one
          returned when at least one recipient was accepted).

     *note SMTPHeloError: 3f0d.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPSenderRefused: 3f0a.

          O servidor não aceita o 'from_addr'.

     *note SMTPDataError: 3f0c.

          The server replied with an unexpected error code (other than a
          refusal of a recipient).

     *note SMTPNotSupportedError: 1c65.

          ‘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: 1c65. 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(): 104f.
     with the message represented by an *note email.message.Message:
     57a. object.  The arguments have the same meaning as for *note
     sendmail(): 104f, 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: 2ea. is
     raised, since there is no way to unambiguously detect the most
     recent set of ‘Resent-’ headers.

     ‘send_message’ serializes 'msg' using *note BytesGenerator: 13cb.
     with ‘\r\n’ as the 'linesep', and calls *note sendmail(): 104f. 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: 1c65. is raised.  Otherwise the
     ‘Message’ is serialized with a clone of its *note policy: 53. with
     the *note utf8: fee. 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.

   ---------- 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 — SMTP protocol client

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: 3f.
     package’s features to construct an email message, which you can
     then send via *note send_message(): 1050.; see *note email;
     Exemplos: 1132.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc822.html


File: python.info,  Node: uuid — Objetos UUID conforme RFC 9562,  Next: socketserver — Um framework para servidores de rede,  Prev: smtplib — SMTP protocol client,  Up: Protocolos de Internet e Suporte

5.22.15 ‘uuid’ — Objetos UUID conforme
--------------------------------------

'RFC 9562'

'Código-fonte:' Lib/uuid.py(1)

__________________________________________________________________

Este módulo fornece objetos *note UUID: c4a. imutáveis (a classe *note
UUID: c4a.) e *note funções: 3f1d. para gerar UUIDs correspondentes a
uma versão específica de UUID, conforme especificado em RFC 9562(2) (que
substitui RFC 4122(3)), por exemplo, *note uuid1(): d95. para a versão 1
de UUID, *note uuid3(): 2e3. para a versão 3 de UUID e assim por diante.
Observe que a versão 2 de UUID foi omitida deliberadamente, pois está
fora do escopo da RFC.

Se tudo o que você quer é um ID único, você provavelmente deve chamar
*note uuid1(): d95. ou *note uuid4(): 2e5.  Note que *note uuid1(): d95.
pode comprometer a privacidade, pois cria um UUID contendo o endereço de
rede do computador.  *note uuid4(): 2e5. cria um UUID aleatório.

Dependendo do suporte da plataforma subjacente, *note uuid1(): d95. 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: c4a. têm
um atributo *note is_safe: d93. 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 9562(4), 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: 3f22.  A comparação com um objeto não
     UUID levanta uma *note TypeError: 198.

     ‘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: c4a. 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. Relevante apenas para
                                                       a versão 1.
                                                       
                                                       
 -- Atributo: UUID.time_mid                            Os próximos 16 bits do UUID. Relevante apenas para a
                                                       versão 1.
                                                       
                                                       
 -- Atributo: UUID.time_hi_version                     Os próximos 16 bits do UUID. Relevante apenas para a
                                                       versão 1.
                                                       
                                                       
 -- Atributo: UUID.clock_seq_hi_variant                Os próximos 8 bits do UUID. Relevante apenas para as
                                                       versões 1 e 6.
                                                       
                                                       
 -- Atributo: UUID.clock_seq_low                       Os próximos 8 bits do UUID. Relevante apenas para as
                                                       versões 1 e 6.
                                                       
                                                       
 -- Atributo: UUID.node                                Os últimos 48 bits do UUID. Relevante apenas para a
                                                       versão 1.
                                                       
                                                       
 -- Atributo: UUID.time                                O registro de data e hora de 60 bits como uma
                                                       contagem de intervalos de 100 nanossegundos desde a
                                                       época gregoriana (1582-10-15 00:00:00) para as
                                                       versões 1 e 6, ou o registro de data e hora de 48
                                                       bits em milissegundos desde a época Unix (1970-01-01
                                                       00:00:00) para a versão 7.
                                                       
                                                       
 -- Atributo: UUID.clock_seq                           Número de sequência de 14 bits.  Relevante apenas
                                                       para as versões 1 e 6.
                                                       

 -- 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 9562(5).

 -- Atributo: UUID.variant

     A variante UUID, que determina o layout interno do UUID. Esta será
     uma das constantes *note RESERVED_NCS: 3f30, *note RFC_4122: 3f31,
     *note RESERVED_MICROSOFT: 3f32. ou *note RESERVED_FUTURE: 3f33.

 -- Atributo: UUID.version

     O número da versão do UUID (1 a 8, significativo somente quando a
     variante é *note RFC_4122: 3f31.).

     Alterado na versão 3.14: Adicionadas versões 6, 7 e 8 do UUID.

 -- Atributo: UUID.is_safe

     Uma enumeração de *note SafeUUID: 3f1e. que indica se a plataforma
     gerou o UUID de forma segura para multiprocessamento.

     Adicionado na versão 3.7.

O módulo *note uuid: 116. 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(6).  “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 de acordo com RFC 9562, §5.1(7).

     Quando 'node' não é especificado, *note getnode(): d94. é usado
     para obter o endereço de hardware como um inteiro positivo de 48
     bits.  Quando um número de sequência 'clock_seq' não é
     especificado, um inteiro positivo pseudoaleatório de 14 bits é
     gerado.

     Se 'node' ou 'clock_seq' excederem a contagem de bits esperada,
     apenas seus bits menos significativos serão mantidos.

 -- 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: 192.
     ou uma string que será codificada usando UTF-8) de acordo com RFC
     9562, §5.3(8).

 -- Função: uuid.uuid4 ()

     Gera um UUID aleatório em um método criptograficamente seguro de
     acordo com RFC 9562, §5.4(9).

 -- 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:
     192. ou uma string que será codificada usando UTF-8) de acordo com
     RFC 9562, §5.5(10).

 -- Função: uuid.uuid6 (node=None, clock_seq=None)

     Gera um UUID a partir de um número de sequência e hora atual de
     acordo com RFC 9562, §5.6(11).

     Esta é uma alternativa ao *note uuid1(): d95. para melhorar a
     localidade do banco de dados.

     Quando 'node' não é especificado, *note getnode(): d94. é usado
     para obter o endereço de hardware como um inteiro positivo de 48
     bits.  Quando um número de sequência 'clock_seq' não é
     especificado, um inteiro positivo pseudoaleatório de 14 bits é
     gerado.

     Se 'node' ou 'clock_seq' excederem a contagem de bits esperada,
     apenas seus bits menos significativos serão mantidos.

     Adicionado na versão 3.14.

 -- Função: uuid.uuid7 ()

     Gera um UUID baseado em tempo de acordo com RFC 9562, §5.7(12).

     Para portabilidade entre plataformas sem precisão de
     submilissegundos, os UUIDs produzidos por esta função incorporam um
     registro de data e hora de 48 bits e usam um contador de 42 bits
     para garantir a monotonicidade dentro de um milissegundo.

     Adicionado na versão 3.14.

 -- Função: uuid.uuid8 (a=None, b=None, c=None)

     Gera um UUID pseudoaleatório de acordo com RFC 9562, §5.8(13).

     Quando especificados, espera-se que os parâmetros 'a', 'b' e 'c'
     sejam inteiros positivos de 48, 12 e 62 bits, respectivamente.  Se
     excederem a contagem de bits esperada, apenas os bits menos
     significativos serão mantidos; argumentos não especificados são
     substituídos por um inteiro pseudoaleatório de tamanho apropriado.

     Por padrão, 'a', 'b' e 'c' não são gerados por um gerador de
     números pseudoaleatórios criptograficamente seguro (CSPRNG). Use
     *note uuid4(): 2e5. quando um UUID precisar ser usado em um
     contexto de segurança sensível.

     Adicionado na versão 3.14.

O módulo *note uuid: 116. define os seguintes identificadores de espaço
de nomes para uso com *note uuid3(): 2e3. ou *note uuid5(): 2e4.

 -- 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: 116. define as seguintes constantes para os valores
possíveis do atributo *note variant: 3f2f.:

 -- Dado: uuid.RESERVED_NCS

     Reservado para compatibilidade com NCS.

 -- Dado: uuid.RFC_4122

     Especifica o layout do UUID fornecido em RFC 4122(14).  Esta
     constante é mantida para retrocompatibilidade, mesmo que RFC
     4122(15) tenha sido substituído por RFC 9562(16).

 -- Dado: uuid.RESERVED_MICROSOFT

     Reservado para compatibilidade com Microsoft.

 -- Dado: uuid.RESERVED_FUTURE

     Reservado para definição futura.

O módulo *note uuid: 116. define os valores especiais de UUID Nil e Max:

 -- Dado: uuid.NIL

     Uma forma especial de UUID que é especificada para ter todos os 128
     bits definidos como zero de acordo com RFC 9562, §5.9(17).

     Adicionado na versão 3.14.

 -- Dado: uuid.MAX

     Uma forma especial de UUID que é especificada para ter todos os 128
     bits definidos como um, de acordo com RFC 9562, §5.10(18).

     Adicionado na versão 3.14.

Ver também
..........

RFC 9562(19) - 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<5>.
* Exemplo: Exemplo<11>.
* Exemplo de linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/uuid.py

   (2) https://datatracker.ietf.org/doc/html/rfc9562.html

   (3) https://datatracker.ietf.org/doc/html/rfc4122.html

   (4) https://datatracker.ietf.org/doc/html/rfc9562.html

   (5) https://datatracker.ietf.org/doc/html/rfc9562.html

   (6) https://datatracker.ietf.org/doc/html/rfc4122.html

   (7) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.1

   (8) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.3

   (9) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.4

   (10) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.5

   (11) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.6

   (12) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.7

   (13) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.8

   (14) https://datatracker.ietf.org/doc/html/rfc4122.html

   (15) https://datatracker.ietf.org/doc/html/rfc4122.html

   (16) https://datatracker.ietf.org/doc/html/rfc9562.html

   (17) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.9

   (18) https://datatracker.ietf.org/doc/html/rfc9562.html#section-5.10

   (19) https://datatracker.ietf.org/doc/html/rfc9562.html


File: python.info,  Node: Uso na linha de comando<5>,  Next: Exemplo<11>,  Up: uuid — Objetos UUID conforme RFC 9562

5.22.15.1 Uso na linha de comando
.................................

Adicionado na versão 3.12.

O módulo *note uuid: 116. pode ser invocado como um script na linha de
comando:

     python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5,uuid6,uuid7,uuid8}] [-n ESPAÇOS-DE-NOME] [-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(): 2e5. é usado.

     Alterado na versão 3.14: Permite gerar versões 6, 7 e 8 do UUID.

 -- 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(): 2e3. / *note uuid5(): 2e4.

 -- Option: -N <name>
 -- Option: --name <name>

     O nome usado como parte da geração do uuid.  Requerido apenas para
     funções *note uuid3(): 2e3. / *note uuid5(): 2e4.

 -- Option: -C <num>
 -- Option: --count <num>

     Gera 'num' novos UUIDs.

     Adicionado na versão 3.14.


File: python.info,  Node: Exemplo<11>,  Next: Exemplo de linha de comando,  Prev: Uso na linha de comando<5>,  Up: uuid — Objetos UUID conforme RFC 9562

5.22.15.2 Exemplo
.................

Aqui estão alguns exemplos de uso típico do módulo *note uuid: 116.:

     >>> 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')

     >>> # make a UUID from a string of hex digits (braces and hyphens ignored)
     >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

     >>> # convert a UUID to a string of hex digits in standard form
     >>> str(x)
     '00010203-0405-0607-0809-0a0b0c0d0e0f'

     >>> # get the raw 16 bytes of the UUID
     >>> x.bytes
     b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

     >>> # make a UUID from a 16-byte string
     >>> uuid.UUID(bytes=x.bytes)
     UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

     >>> # get the Nil UUID
     >>> uuid.NIL
     UUID('00000000-0000-0000-0000-000000000000')

     >>> # get the Max UUID
     >>> uuid.MAX
     UUID('ffffffff-ffff-ffff-ffff-ffffffffffff')

     >>> # same as UUIDv1 but with fields reordered to improve DB locality
     >>> uuid.uuid6()
     UUID('1f0799c0-98b9-62db-92c6-a0d365b91053')

     >>> # get UUIDv7 creation (local) time as a timestamp in milliseconds
     >>> u = uuid.uuid7()
     >>> u.time
     1743936859822

     >>> # get UUIDv7 creation (local) time as a datetime object
     >>> import datetime as dt
     >>> dt.datetime.fromtimestamp(u.time / 1000)
     datetime.datetime(...)

     >>> # make a UUID with custom blocks
     >>> uuid.uuid8(0x12345678, 0x9abcdef0, 0x11223344)
     UUID('00001234-5678-8ef0-8000-000011223344')


File: python.info,  Node: Exemplo de linha de comando,  Prev: Exemplo<11>,  Up: uuid — Objetos UUID conforme RFC 9562

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: 116.:

     # 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

     # gera 42 UUIDs aleatórios
     $ python -m uuid -C 42


File: python.info,  Node: socketserver — Um framework para servidores de rede,  Next: http server — HTTP servers,  Prev: uuid — Objetos UUID conforme RFC 9562,  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: d2. simplifica a tarefa de escrever
servidores de rede.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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(): 3f4a. e *note server_activate(): 3f4b.  Os outros
     parâmetros são passados para a classe base *note BaseServer: 1339.

 -- 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: 151b.

 -- 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: 151b.

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: d65. e *note ThreadingMixIn: d2e. 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: 3f4f. e substituindo seu método *note handle():
3f50.; 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: 186.  Em seguida, chame o
método *note handle_request(): 151e. ou *note serve_forever(): 133b. do
objeto do servidor para processar uma ou muitas solicitações.
Finalmente, chame *note server_close(): d63. para fechar o soquete (a
menos que você tenha usado uma instrução ‘with’).

Ao herdar de *note ThreadingMixIn: d2e. 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:
d2e. 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: d1f, o que significa que o Python não sairá até
que todas as threads criadas por *note ThreadingMixIn: d2e. 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<29>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 3f4e. deriva de *note UDPServer:
3f4c, não de *note UnixStreamServer: 3f4d. — 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: 3f52. é 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: 3f4c.  Definir os vários atributos também
     altera o comportamento do mecanismo de servidor subjacente.

     *note ForkingMixIn: d65. e as classes Forking mencionadas abaixo
     estão disponíveis apenas em plataformas POSIX que oferecem suporte
     a *note fork(): 4af.

      -- Atributo: block_on_close

          *note ForkingMixIn.server_close: d63. aguarda até que todos os
          processos filho sejam concluídos, exceto se o atributo *note
          block_on_close: d64. for ‘False’.

          *note ThreadingMixIn.server_close: d63. aguarda até que todos
          as threads não daemon sejam concluídos, exceto se o atributo
          *note block_on_close: d64. for ‘False’.

      -- Atributo: max_children

          Especifica quantos processos filho existirão para processar
          solicitações simultaneamente para *note ForkingMixIn: d65.  Se
          o limite for atingido, novas solicitações aguardarão até que
          um processo filho seja concluído.

      -- Atributo: daemon_threads

          Para *note ThreadingMixIn: d2e, use threads como daemon
          definindo *note ThreadingMixIn.daemon_threads: 3f54. como
          ‘True’ para não esperar até que as threads sejam concluídas.

     Alterado na versão 3.7: *note ForkingMixIn.server_close: d63. e
     *note ThreadingMixIn.server_close: d63. 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: d64. 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: 3f4f. e redefinir seu método *note handle(): 3f50.
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: eca. ou *note
DatagramRequestHandler: 3f5c.

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(): 3f50.

Outra abordagem para lidar com múltiplas requisições simultâneas em um
ambiente que não oferece suporte a threads nem *note fork(): 4af. (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: c7. 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: 3f5e. e
     *note RequestHandlerClass: 3f5f.

      -- 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: c7, 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(): 3f61, *note
          verify_request(): 3f62. e *note process_request(): 3f63.  Se o
          método *note handle(): 3f50. fornecido pelo usuário da classe
          manipuladora levantar uma exceção, o método *note
          handle_error(): f31. do servidor será chamado.  Se nenhuma
          solicitação for recebida dentro de *note timeout: 151c.
          segundos, *note handle_timeout(): 151d. será chamado e *note
          handle_request(): 151e. retornará.

      -- Método: serve_forever (poll_interval=0.5)

          Manipula solicitações até uma solicitação explícita *note
          shutdown(): 1ccc.  Sonda para desligamento a cada
          'poll_interval' segundos.  Ignora o atributo *note timeout:
          151c.  Ele também chama *note service_actions(): 133a, 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: d65. usa *note service_actions():
          133a. 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(): 133b.  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(): 133b. para parar e esperar
          até que isso aconteça.  *note shutdown(): 1ccc. deve ser
          chamado enquanto *note serve_forever(): 133b. 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: 1abf, *note
          socket.AF_INET6: 1ac0. e *note socket.AF_UNIX: 1ac2.
          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: d1. 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: d1f, 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: 3f67. 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: 14ef. e *note socket.SOCK_DGRAM: 14ee. são
          dois valores comuns.

      -- Atributo: timeout

          Duração do tempo limite, medida em segundos, ou *note None:
          87a. se nenhum tempo limite for desejado.  Se *note
          handle_request(): 151e. não receber nenhuma requisição de
          entrada dentro do período de tempo limite, o método *note
          handle_timeout(): 151d. será chamado.

     Existem vários métodos de servidor que podem ser substituídos por
     subclasses de classes de servidor base, como *note TCPServer:
     151b.; 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: 3f5f. e chamando seu método *note
          handle(): 3f50.

      -- 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(): 3f50. de uma
          instância *note RequestHandlerClass: 3f5f. 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: bc3.

      -- Método: handle_timeout ()

          Esta função é chamada quando o atributo *note timeout: 151c.
          foi definido para um valor diferente de *note None: 87a. 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(): 3f69. para criar uma instância
          de *note RequestHandlerClass: 3f5f.  Se desejado, esta função
          pode criar um novo processo ou thread para manipular a
          solicitação; as classes *note ForkingMixIn: d65. e *note
          ThreadingMixIn: d2e. 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(): 1054. 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:
          dfb, a solicitação será processada, e se for *note False: d1f,
          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: dfb.

     Alterado na versão 3.6: Foi adicionado suporte para o protocolo
     *note gerenciador de contexto: 1e0.  Sair do gerenciador de
     contexto é equivalente a chamar *note server_close(): d63.


File: python.info,  Node: Objetos manipulador de requisições,  Next: Exemplos<29>,  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(): 3f50. 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(): 3f50. 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: 3f6c.; o
          endereço do cliente como *note client_address: 3f6d.; e a
          instância do servidor como *note server: 3f6e, caso precise de
          acesso a informações por servidor.

          O tipo de *note request: 3f6c. é diferente para serviços de
          datagrama ou fluxo.  Para serviços de fluxo, *note request:
          3f6c. é um objeto soquete; para serviços de datagrama, *note
          request: 3f6c. é um par de string e soquete.

      -- Método: finish ()

          Chamada após o método *note handle(): 3f50. para executar
          quaisquer ações de limpeza necessárias.  A implementação
          padrão não faz nada.  Se *note setup(): 3f6b. levanta uma
          exceção, esta função não será chamada.

      -- Atributo: request

          O 'novo' objeto *note socket.socket: f95. a ser usado para se
          comunicar com o cliente.

      -- Atributo: client_address

          Endereço do cliente retornado por *note
          BaseServer.get_request(): 3f61.

      -- Atributo: server

          Objeto *note BaseServer: 1339. usado para manipular a
          solicitação.

 -- Classe: socketserver.StreamRequestHandler
 -- Classe: socketserver.DatagramRequestHandler

     Essas subclasses *note BaseRequestHandler: 3f4f. substituem os
     métodos *note setup(): 3f6b. e *note finish(): 3f6f. e fornecem os
     atributos *note rfile: 3f70. e *note wfile: ec9.

      -- Atributo: rfile

          Um objeto arquivo do qual recebe a solicitação é lido.
          Oferece suporte à interface legível *note io.BufferedIOBase:
          898.

      -- Atributo: wfile

          Um objeto arquivo no qual a resposta é escrita.  Oferece
          suporte à interface gravável *note io.BufferedIOBase: 898.

     Alterado na versão 3.6: *note wfile: ec9. também oferece suporte à
     interface gravável *note io.BufferedIOBase: 898.


File: python.info,  Node: Exemplos<29>,  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<29>

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<29>

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<29>

5.22.16.7 Mixins assíncronos
............................

Para construir manipuladores assíncronos, use as classes *note
ThreadingMixIn: d2e. e *note ForkingMixIn: d65.

Um exemplo para a classe *note ThreadingMixIn: d2e.:

     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: d65. é 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(): 4af.


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: 76. is not recommended for production.
     It only implements *note basic security checks: 3f78.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

One class, *note HTTPServer: 3d7c, is a *note socketserver.TCPServer:
151b. 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: 151b. 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: d2e.  This is useful to
     handle web browsers pre-opening sockets, on which *note HTTPServer:
     3d7c. would wait indefinitely.

     Adicionado na versão 3.7.

 -- Classe: http.server.HTTPSServer (server_address,
          RequestHandlerClass, bind_and_activate=True, *, certfile,
          keyfile=None, password=None, alpn_protocols=None)

     Subclass of *note HTTPServer: 3d7c. with a wrapped socket using the
     *note ssl: d5. module.  If the *note ssl: d5. module is not
     available, instantiating a ‘HTTPSServer’ object fails with a *note
     RuntimeError: 243.

     The 'certfile' argument is the path to the SSL certificate chain
     file, and the 'keyfile' is the path to file containing the private
     key.

     A 'password' can be specified for files protected and wrapped with
     PKCS#8, but beware that this could possibly expose hardcoded
     passwords in clear.

     Ver também
     ..........

     See *note ssl.SSLContext.load_cert_chain(): 591. for additional
     information on the accepted values for 'certfile', 'keyfile' and
     'password'.

     When specified, the 'alpn_protocols' argument must be a sequence of
     strings specifying the “Application-Layer Protocol Negotiation”
     (ALPN) protocols supported by the server.  ALPN allows the server
     and the client to negotiate the application protocol during the TLS
     handshake.

     By default, it is set to ‘["http/1.1"]’, meaning the server
     supports HTTP/1.1.

     Adicionado na versão 3.14.

 -- Classe: http.server.ThreadingHTTPSServer (server_address,
          RequestHandlerClass, bind_and_activate=True, *, certfile,
          keyfile=None, password=None, alpn_protocols=None)

     This class is identical to *note HTTPSServer: 227. but uses threads
     to handle requests by inheriting from *note ThreadingMixIn: d2e.
     This is analogous to *note ThreadingHTTPServer: d2d. only using
     *note HTTPSServer: 227.

     Adicionado na versão 3.14.

The *note HTTPServer: 3d7c, *note ThreadingHTTPServer: d2d, *note
HTTPSServer: 227. and *note ThreadingHTTPSServer: 3f79. 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: 12c7. 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: 12c7. 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():
          3f7d. 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(): 3f7d.  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: 3f82. class variable.  This instance parses and
          manages the headers in the HTTP request.  The *note
          parse_headers(): 1cdf. function from *note http.client: 73. is
          used to parse the headers and it requires that the HTTP
          request provide a valid RFC 2822(3) style header.

      -- Atributo: rfile

          An *note io.BufferedIOBase: 898. 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:
          898. stream.

     *note BaseHTTPRequestHandler: 12c7. 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: 3f87. method and the *note
          server_version: 3f85. class variable.  For example,
          ‘'Python/1.4'’.

      -- Atributo: error_message_format

          Specifies a format string that should be used by *note
          send_error(): 1145. method for building an error response to
          the client.  The string is filled by default with variables
          from *note responses: 3e46. based on the status code that
          passed to *note send_error(): 1145.

      -- 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():
          3f8a.) 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: 57a.-like class to
          parse HTTP headers.  Typically, this is not overridden, and it
          defaults to *note http.client.HTTPMessage: 3e5f.

      -- 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(): 3f8b. and *note
          send_error(): 1145. methods.

     Uma instância de *note BaseHTTPRequestHandler: 12c7. tem os
     seguintes métodos:

      -- Método: handle ()

          Calls *note handle_one_request(): 3f7d. 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: 1146. attribute and
          emitted, after a complete set of headers, as the response
          body.  The *note responses: 3e46. 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(): 3f87. and *note date_time_string(): 3f8f.
          methods, respectively.  If the server does not intend to send
          any other headers using the *note send_header(): 3f8a. method,
          then *note send_response(): 3f8e. should be followed by an
          *note end_headers(): 12c8. call.

          Alterado na versão 3.3: Headers are stored to an internal
          buffer and *note end_headers(): 12c8. 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():
          12c8. or *note flush_headers(): 12c9. 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(): 12c8. 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(): 12c9.

          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(): 3f92, 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(): 3f92.
          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: 3f85. and *note
          sys_version: 3f86. 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(): 556.),
          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: 59a.

     Muito do trabalho, como analisar o pedido, é feito pela classe base
     *note BaseHTTPRequestHandler: 12c7.  Esta classe implementa as
     funções *note do_GET(): 3f95. e *note do_HEAD(): 3f96.

     The following are defined as class-level attributes of *note
     SimpleHTTPRequestHandler: d2c.:

      -- 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: d2c. 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(): 3f95. 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(): 12f6. to scan the directory, and returns a ‘404’
          error response if the *note listdir(): 12f6. fails.

          If the request was mapped to a file, it is opened.  Any *note
          OSError: 2bf. 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: d2c. 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: d2c. 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: d2c.

          Nota: CGI scripts run by the *note CGIHTTPRequestHandler: 323.
          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: 323. 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: 323. 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.

     Deprecated since version 3.13, will be removed in version 3.15:
     *note CGIHTTPRequestHandler: 323. 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: 3f78.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/http/server.py

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://datatracker.ietf.org/doc/html/rfc2822.html

   (4) https://github.com/python/cpython/tree/3.14/Lib/http/server.py


File: python.info,  Node: Interface de linha de comando<5>,  Next: Considerações de segurança<3>,  Up: http server — HTTP servers

5.22.17.1 Interface de linha de comando
.......................................

*note http.server: 76. can also be invoked directly using the *note -m:
23b. 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: 323. can be enabled in the command
     line by passing the ‘--cgi’ option:

          python -m http.server --cgi

     Deprecated since version 3.13, will be removed in version 3.15:
     *note http.server: 76. command line ‘--cgi’ support is being
     removed because *note CGIHTTPRequestHandler: 323. is being removed.

     Aviso: *note CGIHTTPRequestHandler: 323. 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.

 -- Option: --tls-cert

     Specifies a TLS certificate chain for HTTPS connections:

          python -m http.server --tls-cert fullchain.pem

     Adicionado na versão 3.14.

 -- Option: --tls-key

     Specifies a private key file for HTTPS connections.

     This option requires ‘--tls-cert’ to be specified.

     Adicionado na versão 3.14.

 -- Option: --tls-password-file

     Specifies the password file for password-protected private keys:

          python -m http.server \
                 --tls-cert cert.pem \
                 --tls-key key.pem \
                 --tls-password-file password.txt

     This option requires ‘–tls-cert'’ to be specified.

     Adicionado na versão 3.14.


File: python.info,  Node: Considerações de segurança<3>,  Prev: Interface de linha de comando<5>,  Up: http server — HTTP servers

5.22.17.2 Considerações de segurança
....................................

*note SimpleHTTPRequestHandler: d2c. 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: 12c7. ‘.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: 75. 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: 14bf, *note
string.digits: 25b5. and ‘!#$%&'*+-.^_`|~:’ denote the set of valid
characters allowed by this module in a cookie name (as *note key: def.).

Alterado na versão 3.3: Allowed ‘:’ as a valid cookie name character.

     Nota: On encountering an invalid cookie, *note CookieError: 3fa7.
     is raised, so if your cookie data comes from a browser you should
     always prepare for invalid data and catch *note CookieError: 3fa7.
     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: df2. instances.  Note that upon
     setting a key to a value, the value is first converted to a *note
     Morsel: df2. containing the key and the value.

     If 'input' is given, it is passed to the *note load(): 3fa9.
     method.

 -- Classe: http.cookies.SimpleCookie ([input])

     This class derives from *note BaseCookie: 3fa8. and overrides *note
     value_decode(): 3faa. and *note value_encode(): 3fab.
     ‘SimpleCookie’ supports strings as cookie values.  When setting the
     value, ‘SimpleCookie’ calls the builtin *note str(): 169. to
     convert the value to a string.  Values received from HTTP are kept
     as strings.

Ver também
..........

Módulo *note http.cookiejar: 74.

     HTTP cookie handling for web 'clients'.  The *note http.cookiejar:
     74. and *note http.cookies: 75. 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.14/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: 3fa8. — 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: 3fa8. — it exists so
     it can be overridden.

     In general, it should be the case that *note value_encode(): 3fab.
     and *note value_decode(): 3faa. 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: df2.’s *note
     output(): 3faf. 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(): 3fae.

 -- 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: df2.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
           -- Atributo: partitioned

     The attribute *note httponly: 15c1. 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: 3fb9. 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 attribute *note partitioned: 3fba. indicates to user agents
     that these cross-site cookies 'should' only be available in the
     same top-level context that the cookie was first set in.  For this
     to be accepted by the user agent, you 'must' also set ‘Secure’.

     In addition, it is recommended to use the ‘__Host’ prefix when
     setting partitioned cookies to make them bound to the hostname and
     not the registrable domain.  Read CHIPS (Cookies Having Independent
     Partitioned State)(3) for full details and examples.

     The keys are case-insensitive and their default value is ‘''’.

     Alterado na versão 3.5: ‘__eq__()’ now takes *note key: def. and
     *note value: df0. into account.

     Alterado na versão 3.7: Attributes *note key: def, *note value:
     df0. and *note coded_value: df1. are read-only.  Use *note set():
     df3. for setting them.

     Alterado na versão 3.8: Added support for the *note samesite: 3fb9.
     attribute.

     Alterado na versão 3.14: Added support for the *note partitioned:
     3fba. 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: df2.

 -- 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(): 3faf.

 -- 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(): 3faf.

 -- 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(4) 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(5) attribute,
     otherwise behave the same as *note dict.setdefault(): 126f.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2109.html

   (2) https://datatracker.ietf.org/doc/html/rfc2109.html

   (3) https://github.com/privacycg/CHIPS/blob/main/README.md

   (4) https://datatracker.ietf.org/doc/html/rfc2109.html

   (5) 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:
75. 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=\\012;";')
     >>> print(C)
     Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"
     >>> 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: 74. module defines classes for automatic
handling of HTTP cookies.  It is useful for accessing web sites 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: 74. 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: 3fc5. raise this exception on
     failure to load cookies from a file.  *note LoadError: 3fc4. is a
     subclass of *note OSError: 2bf.

     Alterado na versão 3.3: *note LoadError: 3fc4. used to be a subtype
     of *note IOError: 1249, which is now an alias of *note OSError:
     2bf.

As seguintes classes são disponibilizadas:

 -- Classe: http.cookiejar.CookieJar (policy=None)

     'policy' is an object implementing the *note CookiePolicy: 3fc6.
     interface.

     The *note CookieJar: 3dea. class stores HTTP cookies.  It extracts
     cookies from HTTP requests, and returns them in HTTP responses.
     *note CookieJar: 3dea. 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: 3fc6.
     interface.  For the other arguments, see the documentation for the
     corresponding attributes.

     A *note CookieJar: 3dea. 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(): 3fc7. or *note revert():
     3fc8. method is called.  Subclasses of this class are documented in
     section *note FileCookieJar subclasses and co-operation with web
     browsers: 3fc9.

     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: 59a.

 -- 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: 87a, 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: 3fc6. and *note DefaultCookiePolicy: 1caa.
     objects.

     *note DefaultCookiePolicy: 1caa. 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: 3fca. is ‘True’, RFC 2109 cookies are
     ‘downgraded’ by the *note CookieJar: 3dea. instance to Netscape
     cookies, by setting the ‘version’ attribute of the *note Cookie:
     3fcb. instance to 0.  *note DefaultCookiePolicy: 1caa. 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:
     74. construct their own *note Cookie: 3fcb. instances.  Instead, if
     necessary, call ‘make_cookies()’ on a *note CookieJar: 3dea.
     instance.

Ver também
..........

Módulo *note urllib.request: 111.

     URL opening with automatic cookie handling.

Module *note http.cookies: 75.

     HTTP cookie classes, principally useful for server-side code.  The
     *note http.cookiejar: 74. and *note http.cookies: 75. 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:
     74.) 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<30>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 3dea. objects support the *note iterator: 4c2. protocol
for iterating over contained *note Cookie: 3fcb. objects.

*note CookieJar: 3dea. 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: 3dea.’s *note CookiePolicy: 3fc6. instance
     are true and false respectively), the ‘Cookie2’ header is also
     added when appropriate.

     The 'request' object (usually a *note urllib.request.Request: 11ce.
     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: 111.

     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: 3dea, where allowed by policy.

     The *note CookieJar: 3dea. 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(): 3fd0.
     method’s approval).

     The 'response' object (usually the result of a call to *note
     urllib.request.urlopen(): 305, or similar) should support an
     ‘info()’ method, which returns an *note email.message.Message: 57a.
     instance.

     The 'request' object (usually a *note urllib.request.Request: 11ce.
     instance) must support the method ‘get_full_url()’ and the
     attributes ‘host’, ‘unverifiable’ and ‘origin_req_host’, as
     documented by *note urllib.request: 111.  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: 3fc6. instance to be used.

 -- Método: CookieJar.make_cookies (response, request)

     Return sequence of *note Cookie: 3fcb. objects extracted from
     'response' object.

     See the documentation for *note extract_cookies(): 3fcf. for the
     interfaces required of the 'response' and 'request' arguments.

 -- Método: CookieJar.set_cookie_if_ok (cookie, request)

     Set a *note Cookie: 3fcb. if policy says it’s OK to do so.

 -- Método: CookieJar.set_cookie (cookie)

     Set a *note Cookie: 3fcb, 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: 5dd. 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: 3fc5. 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: 368.  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: 87a, *note ValueError: 2ea. 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(): 3fc7. or *note revert(): 3fc8. 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(): 3fd7.

     The named file must be in the format understood by the class, or
     *note LoadError: 3fc4. will be raised.  Also, *note OSError: 2bf.
     may be raised, for example if the file does not exist.

     Alterado na versão 3.3: *note IOError: 1249. costumava ser
     levantado, agora ele é um codinome para *note OSError: 2bf.

 -- Método: FileCookieJar.revert (filename=None, ignore_discard=False,
          ignore_expires=False)

     Clear all cookies and reload cookies from a saved file.

     *note revert(): 3fc8. can raise the same exceptions as *note
     load(): 3fc7.  If there is a failure, the object’s state will not
     be altered.

*note FileCookieJar: 3fc5. 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: 3dea. object may ignore it.  None of
     the *note FileCookieJar: 3fc5. 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: 3dea. subclasses are provided for reading
and writing.

 -- Classe: http.cookiejar.MozillaCookieJar (filename=None,
          delayload=None, policy=None)

     A *note FileCookieJar: 3fc5. 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: 3fc5. 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: 59a.

   ---------- 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: 3fc6. 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: 3fcb. instance.  'request' is an object
     implementing the interface defined by the documentation for *note
     CookieJar.extract_cookies(): 3fcf.

 -- Método: CookiePolicy.return_ok (cookie, request)

     Return boolean value indicating whether cookie should be returned
     to server.

     'cookie' is a *note Cookie: 3fcb. instance.  'request' is an object
     implementing the interface defined by the documentation for *note
     CookieJar.add_cookie_header(): 3fce.

 -- 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(): 3fe0.
     and *note path_return_ok(): 3fe1. leaves all the work to *note
     return_ok(): 3fdf.

     If *note domain_return_ok(): 3fe0. returns true for the cookie
     domain, *note path_return_ok(): 3fe1. is called for the cookie
     path.  Otherwise, *note path_return_ok(): 3fe1. and *note
     return_ok(): 3fdf. are never called for that cookie domain.  If
     *note path_return_ok(): 3fe1. returns true, *note return_ok():
     3fdf. is called with the *note Cookie: 3fcb. object itself for a
     full check.  Otherwise, *note return_ok(): 3fdf. is never called
     for that cookie path.

     Note that *note domain_return_ok(): 3fe0. 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(): 3fe1.

     The 'request' argument is as documented for *note return_ok():
     3fdf.

 -- 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(): 3fe0.

In addition to implementing the methods above, implementations of the
*note CookiePolicy: 3fc6. 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: 3fc6. class is by
subclassing from *note DefaultCookiePolicy: 1caa. and overriding some or
all of the methods above.  *note CookiePolicy: 3fc6. 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: 3fc6. 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: 87a.

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: 1caa. 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: 87a, 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: 87a.

 -- Método: DefaultCookiePolicy.is_not_allowed (domain)

     Return ‘True’ if 'domain' is not on the allowlist for setting or
     receiving cookies.

*note DefaultCookiePolicy: 1caa. 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: 3dea. 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: 3fcb. instance
     to 0.  The default value is *note None: 87a, 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: 3ff0. 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<30>,  Prev: DefaultCookiePolicy Objects,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.5 Objetos Cookie
........................

*note Cookie: 3fcb. 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: 74. 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: 3fc6. 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: 87a.  Netscape cookies have *note version:
     3ff9. 0.  RFC 2965(2) and RFC 2109(3) cookies have a ‘version’
     cookie-attribute of 1.  However, note that *note http.cookiejar:
     74. may ‘downgrade’ RFC 2109 cookies to Netscape cookies, in which
     case *note version: 3ff9. is 0.

 -- Atributo: Cookie.name

     Cookie name (a string).

 -- Atributo: Cookie.value

     Cookie value (a string), or *note None: 87a.

 -- Atributo: Cookie.port

     String representing a port or a set of ports (eg.  ‘80’, or
     ‘80,8080’), or *note None: 87a.

 -- 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: 87a.
     See also the *note is_expired(): 4001. 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: 87a.

 -- Atributo: Cookie.comment_url

     URL linking to a comment from the server explaining the function of
     this cookie, or *note None: 87a.

 -- 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: 74. may ‘downgrade’ RFC 2109
     cookies to Netscape cookies, in which case *note version: 3ff9. 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: 3fcb. 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<30>,  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:
74.:

     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: 1caa.
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: 134.

   * *note xmlrpc.server: 135.


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: 134. 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: 3b7f.

Alterado na versão 3.5: Para URIs com HTTPS, *note xmlrpc.client: 134.
agora faz todas as validações de certificado e nome do servidor
necessárias por padrão.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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: c41. é 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: 198, 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: 4dc. e dados binários representados com objetos
     *note bytes: 192.; essa flag é False por padrão.  Objetos *note
     datetime.datetime: 4dc, *note bytes: 192. e *note bytearray: 342.
     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: 354. 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: 3c0.
                                
                                
     ‘int’, ‘i1’, ‘i2’, ‘i4’,   *note int: 19b. no intervalo de -2147483648 a 2147483647.
     ‘i8’ ou ‘biginteger’       Os valores recebem a tag ‘<int>’.
                                
                                
     ‘double’ ou ‘float’        *note float: 196.  Os valores recebem a tag ‘<double>’.
                                
                                
     ‘string’                   *note str: 169.
                                
                                
     ‘array’                    *note list: 24c. ou *note tuple: 608. contendo elementos
                                conformáveis.  As matrizes são retornadas como
                                *note lists: 24c.
                                
                                
     ‘struct’                   *note dict: 183.  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__: 772. delas é transmitido.
                                
                                
     ‘dateTime.iso8601’         *note DateTime: 15d4. ou *note datetime.datetime: 4dc.  O
                                tipo retornado depende de volumes de sinalizadores
                                'use_builtin_types' e 'use_datetime'.
                                
                                
     ‘base64’                   *note Binary: 4013, *note bytes: 192. ou
                                *note bytearray: 342.  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: 1fd.  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: 4014,
     usado para que o servidor XML-RPC indique erros, ou *note
     ProtocolError: 4015. para indicar erros na camada HTTP/HTTPS. Tnato
     *note Fault: 4014. quanto *note ProtocolError: 4015. 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: 192. ou *note bytearray: 342. ou a classe
     wrapper *note Binary: 4013. descrito abaixo.

     ‘Server’ foi mantido como um apelido para *note ServerProxy: c41.
     para compatibilidade retroativa.  Código novo deve usar *note
     ServerProxy: c41.

     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.14/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: c41. 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: 4014. or *note
ProtocolError: 4015. 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: c41. support the
*note context manager: 1e0. 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:
     4dc. 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: 15d4. item
          to the 'out' stream object.

     It also supports certain of Python’s built-in operators through
     *note rich comparison: 149c. and *note __repr__(): 824. 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: 4013.
     object is provided by an attribute:

      -- Atributo: data

          The binary data encapsulated by the *note Binary: 4013.
          instance.  The data is provided as a *note bytes: 192. object.

     *note Binary: 4013. objects have the following methods, supported
     mainly for internal use by the marshalling/unmarshalling code:

      -- Método: decode (bytes)

          Accept a base64 *note bytes: 192. 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__(): ce5. and *note __ne__(): 1705. 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: 4014. 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: 4014. 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: 4015. 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: 4015. 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: 402f. 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: 402f. 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: 1257.; 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: 4014. 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: 87a. 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: 4014. exception.  The
     'use_builtin_types' flag can be used to cause date/time values to
     be presented as *note datetime.datetime: 4dc. objects and binary
     data to be presented as *note bytes: 192. 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: 4035.


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: 135. fornece um framework básico de
servidor para servidores XML-RPC escritos em Python.  Os servidores
podem ser independentes, usando *note SimpleXMLRPCServer: 4039, ou
incorporados em um ambiente CGI, usando *note CGIXMLRPCRequestHandler:
403a.

     Aviso: O módulo *note xmlrpc.server: 135. 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: 3b7f.

*note Disponibilidade: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. 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: 1523.  Os parâmetros 'addr' e
     'requestHandler' são passados para o construtor *note
     socketserver.TCPServer: 151b.  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: 134. 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(): 1626. 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: 134. 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(): 1626. 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: 4039. seja respeitado.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 4039. é baseada em *note
socketserver.TCPServer: 151b. 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__: 14d0. 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__: 14d0. será usado.

     Alterado na versão 3.7: *note register_function(): 403d. 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(): 403d.  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: 403a. 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__: 14d0. 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__: 14d0. será usado.

     Alterado na versão 3.7: *note register_function(): 4044. 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(): 4044.  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: 1c5d. ou incorporados em um
ambiente CGI, usando *note DocCGIXMLRPCRequestHandler: 404a.

 -- 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: 4039.;
     'requestHandler' assume como padrão *note DocXMLRPCRequestHandler:
     404b.

     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: 1c5d.
     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: 1c5d. é derivada de *note
SimpleXMLRPCServer: 4039. 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: 404a. é derivada de *note
CGIXMLRPCRequestHandler: 403a. 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: 84. 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: 4058.

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.14/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: 84. 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: 506. ou *note IPv6Address:
     507. 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: 2ea. é 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: 508. ou *note IPv6Network:
     509. 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: 508. ou *note IPv6Network: 509.  Uma
     exceção *note ValueError: 2ea. é 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: 1ab0. ou *note
     IPv6Interface: 1ab1. 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: 2ea. é 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<2>.


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: 506. e *note IPv6Address: 507.
compartilham muitos atributos comuns.  Alguns atributos que são
significativos apenas para endereços IPv6 também são implementados por
objetos *note IPv4Address: 506, 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: 819, portanto podem ser usados como chaves em
dicionários.

 -- Classe: ipaddress.IPv4Address (address)

     Constrói um endereço IPv4.  Uma exceção *note AddressValueError:
     405f. é 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: 192. 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():
     b51.

      -- Atributo: version

          O número de versão apropriado: ‘4’ para IPv4, ‘6’ para IPv6.

          Alterado na versão 3.14: Disponibilizado na classe.

      -- 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.

          Alterado na versão 3.14: Disponibilizado na classe.

      -- 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: 192. 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: 4066.):

                    address.is_private == address.ipv4_mapped.is_private

          ‘is_private’ tem valor oposto a *note is_global: 1155, 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: 4066.):

               address.is_global == address.ipv4_mapped.is_global

          ‘is_global’ tem valor oposto a *note is_private: 1903, 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: 1903. 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: 4069. & 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: 506. 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(): 169, ‘'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:
     405f. é 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: 192. 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: 506.:

      -- 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: 1903.
          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: 506.

     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<2>,  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(): 169. e *note int(): 19b.:

     >>> 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<2>,  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<2>

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<2>

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: 508. e *note IPv6Network: 509. 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<3>.


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<3>,  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: 508. e *note IPv6Network: 509, portanto, para evitar
duplicação, eles são documentados apenas para *note IPv4Network: 508.
Objetos de rede são *note hasheáveis: 819, 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: 192. 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 *note IPv4Address: 506. 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: 405f. é levantada se 'address'
     não for um endereço IPv4 válido.  Uma exceção *note
     NetmaskValueError: 4080. é 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: 2ea. 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: 198. 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: 506.

      -- 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: 506.

      -- Atributo: netmask

          A máscara de rede, como um objeto *note IPv4Address: 506.

      -- 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: 2ea. 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: 192. 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 *note IPv6Address: 507. existente; e a
          máscara de rede é um número inteiro que representa o
          comprimento do prefixo.

     Uma exceção *note AddressValueError: 405f. é levantada se 'address'
     não for um endereço IPv6 válido.  Uma exceção *note
     NetmaskValueError: 4080. é 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: 2ea. 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: 508.

      -- Atributo: is_site_local

          Este 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<3>,  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<3>

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<3>

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(): 4094.).  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<3>

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: 819, 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: 508, exceto que endereços de
     host arbitrários são sempre aceitos.

     *note IPv4Interface: 1ab0. é uma subclasse de *note IPv4Address:
     506, portanto herda todos os atributos dessa classe.  Além disso,
     os seguintes atributos estão disponíveis:

      -- Atributo: ip

          O endereço (*note IPv4Address: 506.) 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: 508.) à 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: 509, exceto que endereços de
     host arbitrários são sempre aceitos.

     *note IPv6Interface: 1ab1. é uma subclasse de *note IPv6Address:
     507, 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: 1ab0.

* Menu:

* Operadores: Operadores<4>.


File: python.info,  Node: Operadores<4>,  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<4>

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: 2ea. é 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: 2ea. é 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: 506. ou *note IPv6Address: 507. no intervalo e 'last'
     é o último *note IPv4Address: 506. ou *note IPv6Address: 507. no
     intervalo.  Uma exceção *note TypeError: 198. é levantada se
     'first' ou 'last' não forem endereços IP ou não forem da mesma
     versão.  Uma exceção *note ValueError: 2ea. é 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: 508. ou *note
     IPv6Network: 509. recolhidos.  'addresses' é um *note iterável:
     1423. de objetos *note IPv4Network: 508. ou *note IPv6Network: 509.
     Uma exceção *note TypeError: 198. é 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: 84. os ordene de qualquer maneira.  Se
     precisar fazer isso, você pode usar esta função como argumento
     'key' para *note sorted(): dbb.

     '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: 119. 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: 119. 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: 334. object, while a
     'mode' of ‘'wb'’ returns a *note Wave_write: 335. 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(): b3b. function may be used in a *note with: 186.
     statement.  When the ‘with’ block completes, the *note
     Wave_read.close(): 40d2. or *note Wave_write.close(): 40d3. 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.14/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(): b3b, have the
     following methods:

      -- Método: close ()

          Close the stream if it was opened by *note wave: 119, 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(): 40db.  Usually
          ‘'not compressed'’ parallels ‘'NONE'’.

      -- Método: getparams ()

          Returns a *note namedtuple(): 4da. ‘(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: 192. 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’.

          Deprecated since version 3.13, will be removed in version
          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.

          Deprecated since version 3.13, will be removed in version
          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)

          Set the file pointer to the specified position.

      -- Método: tell ()

          Return current file pointer position.


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

     Write a WAV file.

     Wave_write objects, as returned by *note open(): b3b.

     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(): 40e2. or *note
     setparams(): 40e3. with the number of frames that will be written
     before *note close(): 40d3. is called and then using *note
     writeframesraw(): 11e2. to write the frame data, or by calling
     *note writeframes(): 11e3. with all of the frame data to be
     written.  In the latter case *note writeframes(): 11e3. 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: 119.  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(): 40e0. and *note
          Wave_read.setpos(): 40df. methods.

      -- Método: writeframesraw (data)

          Escreve quadros de áudio, sem corrigir 'nframes'.

          Alterado na versão 3.4: Todo *note objeto bytes ou similar:
          193. 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:
          193. agora é aceito.

          Note that it is invalid to set any parameters after calling
          *note writeframes(): 11e3. or *note writeframesraw(): 11e2,
          and any attempt to do so will raise *note wave.Error: 40d4.


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: 20. 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: 20. 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.14/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: 67. 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.14/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: 67. 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: 67. 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(): 1658, mas procura a mensagem no
     'domain' especificado.

 -- Função: gettext.ngettext (singular, plural, n)

     Semelhante a *note gettext(): 1658, 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(): 40fb, 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(): 67, *note dgettext(): 40fa, *note
     ngettext(): 40fb, *note dngettext(): 40fc.), 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: 3e3.).
Por esse motivo, é sempre melhor chamar *note bindtextdomain(): 40f8.
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: 67. 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: 4101. 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(): 40f9. leva.  'localedir' opcional é como em *note
     bindtextdomain(): 40f8.  '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(): 4102. 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():
     4102.  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(): 4102. 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: 4101.  O
     construtor da classe deve usar um único argumento *note objeto
     arquivo: 13bf.

     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(): 74c. é 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: 2bf. se 'fallback' for falso (que é o padrão) e retorna
     uma instância *note NullTranslations: 4103. se 'fallback' for
     verdadeiro.

     Alterado na versão 3.3: *note IOError: 1249. costumava ser
     levantada, agora ele é um apelido para *note OSError: 2bf.

     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(): c61.

     Para o parâmetro 'names', por favor, veja a descrição do método
     *note install(): 4104. 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(): 40f8.
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: 4103.; 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: 13bf. 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(): 4106.  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(): bde. 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(): 40fe. 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(): 4108. 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: 4103.: *note GNUTranslations: 4101.  Esta classe
substitui ‘_parse()’ para permitir a leitura de arquivos ‘.mo’ do
formato GNU ‘gettext’ nos formatos big-endian e little-endian.

*note GNUTranslations: 4101. 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: 4101. pode
levantar *note OSError: 2bf.

 -- 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(): 4108. 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(): 4109.  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(): bde. 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(): 40fe. 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: 67. 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(): c61. 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: 67. 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 _: 67.  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: 67.
para o processamento de tradução real em tempo de execução.

Como você usa o módulo *note gettext: 67. 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(): c62.:

     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: 1a4f.).  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: 8a. 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: 8a. é 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: 8a. define a seguinte exceção e funções:

 -- Exceção: locale.Error

     Exceção levantada quando a localidade passada para *note
     setlocale(): 326. não é reconhecida.

 -- Função: locale.setlocale (category, locale=None)

     Se 'locale' for fornecido e não ‘None’, *note setlocale(): 326.
     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: 411f. 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: 411e. é 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:
     411f, 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.

     *note setlocale(): 326. não é seguro para thread na maioria dos
     sistemas.  As aplicações normalmente começam com uma chamada de

          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: 4120.    ‘'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: 4121, 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: 4122.   ‘'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:
     4121. 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(): 451. 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(): 13e5. 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(): 13e5. 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(): 13e5. 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(): 13e5.
          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:
               4128. 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: 4150. e
               *note NOEXPR: 4151. usam uma sintaxe adequada para a
               função ‘regex’ da biblioteca C, que pode ser diferente da
               sintaxe usada em *note re: be.

      -- 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(): 13e5. 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(): 13e5.
          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(): 13e5.
          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(): 13e5.
          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.

     A função define temporariamente a localidade ‘LC_CTYPE’ para a
     localidade da categoria que determina o valor solicitado
     (‘LC_TIME’, ‘LC_NUMERIC’, ‘LC_MONETARY’ ou ‘LC_MESSAGES’) se as
     localidades forem diferentes e a string resultante não for ASCII.
     Essa alteração temporária afeta outras threads.

     Alterado na versão 3.14: A função agora define temporariamente a
     localidade de ‘LC_CTYPE’ em alguns casos.

 -- 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:
     411f, 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)’.

     Deprecated since version 3.11, will be removed in version 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: 4158.  O padrão é *note LC_CTYPE: 4159.

     O código de idioma tem o mesmo formato de *note nome de localidade:
     411f, 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: 544. 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(): 326.
     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: 85b. é retornado,
     sempre retorna ‘'utf-8'’, a *note codificação da localidade: 544. e
     o argumento 'do_setlocale' são ignorados.

     A *note pré-inicialização do Python: 415a. configura a localidade
     LC_CTYPE. Veja também *note tratador de erros e codificação do
     sistema de arquivos: 752.

     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: 85b. estiver
     habilitado.

 -- Função: locale.getencoding ()

     Obtém a atual *note codificação da localidade: 544.:

        * No Android e no VxWorks, retorna ‘"utf-8"’.

        * No Unix, retorna a codificação da localidade *note LC_CTYPE:
          4159. 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: 415a. configura a localidade
     LC_CTYPE. Veja também *note tratador de erros e codificação do
     sistema de arquivos: 752.

     Este função é semelhante a *note getpreferredencoding(False): 751,
     exceto pelo fato de que esta função ignora o *note Modo UTF-8 do
     Python: 85b.

     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(): 326.  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(): 326.

 -- Função: locale.strcoll (string1, string2)

     Compara duas strings de acordo com a configuração atual *note
     LC_COLLATE: 415d.  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: 4120.  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: 4122.

     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(): 326.
          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: 4120.

     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: 4120.

     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: 4120, chamando 'func' com o resultado
     da chamada à *note delocalize(): 101b. em 'string'.

 -- Função: locale.atoi (string)

     Converte uma string em um número inteiro, seguindo as convenções de
     *note LC_NUMERIC: 4120.

 -- 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, um
     ‘pyctype.h’ interno fornece equivalentes independentes de
     localidade como ‘Py_TOLOWER’.

 -- Dado: locale.LC_COLLATE

     Categoria da localidade para classificação de strings.  As funções
     *note strcoll(): 415c. e *note strxfrm(): 1747. do módulo *note
     locale: 8a. são afetadas.

 -- Dado: locale.LC_TIME

     Categoria da localidade para a formatação de hora.  A função *note
     time.strftime(): 13e5. 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():
     dec.

 -- 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(): 2eb2. 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(): 737, *note atoi(): 4162, *note atof(): 4161.
     e *note str(): 415f. do módulo *note locale: 8a. 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(): dec.

Exemplo:

     >>> import locale
     >>> loc = locale.getlocale()  # obtém localidade atual
     # usa localidade de alemão; o nome pode variar conforme plataforma
     >>> locale.setlocale(locale.LC_ALL, 'de_DE')
     >>> locale.strcoll('f\xe4n', 'foo')  # compara uma string contendo um umlaut
     >>> locale.setlocale(locale.LC_ALL, '')   # usa a localidade preferida do usuário
     >>> locale.setlocale(locale.LC_ALL, 'C')  # usa a localidade padrão (C)
     >>> locale.setlocale(locale.LC_ALL, loc)  # restaura localidade salva

* 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.14/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: 4159. é 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(): 326. 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(): 13e5.), 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(): 4161, *note atoi(): 4162, *note format_string(): 737, *note
str(): 415f.

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(): 326, 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: 8a. 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(): 67,
*note dgettext(): 416c, *note dcgettext(): 416d, *note textdomain():
416e, *note bindtextdomain(): 416f. e *note bind_textdomain_codeset():
4170.  Elas são semelhantes às mesmas funções no módulo *note gettext:
67, 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: 67. 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: f6.
e sua extensão, o módulo *note tkinter.ttk: ff.

O pacote *note tkinter: f6. é uma fina camada orientada a objetos no
topo do Tcl/Tk.  Para usar *note tkinter: f6, 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: f6. é um conjunto
de envólucros que implementam os widgets Tk como classes Python.

As principais virtudes do *note tkinter: f6. 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: f6. 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: f6. (“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: f6. 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: f6.
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.14/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: 4178. 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: 18f0. 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: ff.

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: f6. 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: f6. principal, bem como
do módulo *note tkinter.ttk: ff, 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: 18f0. 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(): 417a. 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: 18f0. lê e interpreta os arquivos de perfil, chamados
     ‘.`className'.tcl’ e ‘.`baseName'.tcl’, por meio do interpretador
     Tcl e chama *note exec(): 49c. 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: 2af8.

      -- Atributo: tk

          Objeto da aplicação Tk criado ao instanciar *note Tk: 18f0.
          Isso fornece acesso ao interpretador Tcl.  Cada widget anexado
          à mesma instância de *note Tk: 18f0. tem o mesmo valor para o
          atributo *note tk: 417b.

      -- Atributo: master

          O objeto widget que contém este widget.  Para *note Tk: 18f0,
          o 'master' é *note None: 87a. porque é a janela principal.  Os
          termos 'master' e 'parent' são semelhantes e às vezes usados
          alternadamente como nome de argumento; No entanto, chamar
          ‘winfo_parent()’ retorna uma string com o nome do widget
          enquanto *note master: 417c. retorna o objeto.
          'parent'/'child' reflete a relação de árvore enquanto
          'master'/'slave' reflete a estrutura do contêiner.

      -- Atributo: children

          Descendentes diretos deste widget como um *note dict: 183. 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(): 417a. é uma função fábrica que cria um objeto
     assim como o criado pela classe *note Tk: 18f0, 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(): 417a. 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: f6.

     Módulo principal Tkinter.

*note tkinter.colorchooser: f7.

     Caixa de diálogo para permitir que o usuário escolha uma cor.

*note tkinter.commondialog: f8.

     Classe base para os diálogos definidos nos outros módulos listados
     aqui.

*note tkinter.filedialog: fa.

     Diálogos comuns para permitir ao usuário especificar um arquivo
     para abrir ou salvar.

*note tkinter.font: fb.

     Utilitários para ajudar a trabalhar com fontes.

*note tkinter.messagebox: fc.

     Acesso às caixas de diálogo padrão do Tk.

*note tkinter.scrolledtext: fd.

     Componente de texto com uma barra de rolagem vertical integrada.

*note tkinter.simpledialog: fe.

     Diálogos básicos e funções de conveniência.

*note tkinter.ttk: ff.

     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: f6.

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: f6. 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: 77.

     Ambiente Integrado de Desenvolvimento e Aprendizagem do Python
     (IDLE). Baseado em *note tkinter: f6.

‘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: f6.

*note tkinter.dnd: f9.

     (experimental) Suporte de arrastar e soltar para *note tkinter: f6.
     Será descontinuado quando for substituído pelo Tk DND.

*note turtle: 107.

     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 seria 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(): 116b, 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(): 839.  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: f6. 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: f6. contém um interpretador
Tcl.  Ele também controla qual thread criou aquele interpretador.
Chamadas para *note tkinter: f6. 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: f6. 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: f6. 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: f6. 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: f6. 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
.......................

O empacotador é um dos mecanismos de gerenciamento de geometria do Tk.
Gerenciadores de geometria são utilizados para especificar as posições
relativas dos widgets dentro dos seus contêineres - os seus 'processos
pai' mútuos.  Em contraste ao mais incômodo 'posicionador' (que é usado
com menos frequência, e não falaremos dele aqui), o empacotador recebe a
especificação de relacionamento qualitativo - 'acima', 'à esquerda de',
'preenchimento', etc.  - e determina as coordenadas de posição exatas
para você.

O tamanho de qualquer widget 'mestre' é determinado pelo tamanho dos
“widgets escravos” internos.  O empacotador é usado para controlar onde
os widgets escravos aparecem dentro do mestre no qual são empacotados.
Você pode empacotar widgets em quadros e quadros em outros quadros, a
fim de obter o tipo de layout que deseja.  Além disso, o arranjo é
ajustado dinamicamente para acomodar alterações incrementais na
configuração, uma vez que é empacotado.

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

     Tipo âncora.  Denota onde o packer deverá posicionar cada ajudante
     em seu pacote.

expand

     Booleano, ‘0’ ou ‘1’.

fill

     Valores legais: ‘'x'’, ‘'y'’, ‘'both'’, ‘'none'’.

ipadx e ipady

     Uma distância - designando o deslocamento interno de cada lado do
     widget ajudante.

padx e pady

     Uma distância - designando o deslocamento externo de cada lado do
     widget ajudante.

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: f6. 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: f6.

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: f6, 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.

Para chegar à janela de nível superior que contém um determinado widget,
geralmente você pode apenas consultar o mestre do widget.  Claro, se o
widget foi compactado dentro de um quadro, o mestre não representará uma
janela de nível superior.  Para chegar à janela de nível superior que
contém um widget arbitrário, você pode chamar o método ‘_root()’.  Este
método começa com um sublinhado para denotar o fato de que esta função é
parte da implementação, e não uma interface para a funcionalidade Tk.

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"’, ‘"right"’ e
     ‘"fill"’.

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:

sequence

     é 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: f6.:

Í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(): 1524. ou *note readline():
257b. de *note BufferedIOBase: 898. ou *note TextIOBase: 899, já que
eles insistirão em ler uma quantidade predefinida de bytes.  Para
sockets, os métodos *note recv(): f98. ou *note recvfrom(): f99. 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():
     2b6d. (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: f7. fornece a classe *note Chooser:
419a. 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: 419b.

 -- 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: f8.

     Módulo de diálogo padrão do Tkinter

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: fb. apresenta a classe *note Font: 1bad.
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: 1bad. 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: 1bad. 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.14/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: fe. 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.14/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: fa. 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.14/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: 41b9.
     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: 41bb. 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: 41b9.
     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: 41bb. 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: f8. fornece a a classe *note
Dialog: 419b, 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: fc, *note Leitura e escrita de
arquivos: 1f1b.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: fc. 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: 41d8, *note CANCEL:
41d9, *note YES: 41da, *note NO: 41db.) 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: 41dd. do botão padrão
               para essa janela de mensagem (*note OK: 41d8, *note
               CANCEL: 41d9, 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: 41de. a ser apresentado.  Se
               essa opção não for especificada, o ícone *note INFO:
               41df. 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: 41e0. 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: 41da. e
     *note NO: 41db.  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:
     41d8. e *note CANCEL: 41d9.  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: 41e8. e *note CANCEL: 41d9.  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: 41da. e *note NO:
     41db.  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: 41da, *note NO:
     41db. e *note CANCEL: 41d9.  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: 41eb,
     *note RETRY: 41e8. e *note IGNORE: 41ec.

 -- Dado: tkinter.messagebox.OK = 'ok'

     Exibe um botão cujo nome simbólico é *note OK: 41d8.

 -- Dado: tkinter.messagebox.OKCANCEL = 'okcancel'

     Exibe dois botões cujos nomes simbólicos são *note OK: 41d8. e
     *note CANCEL: 41d9.

 -- Dado: tkinter.messagebox.RETRYCANCEL = 'retrycancel'

     Exibe dois botões cujos nomes simbólicos são *note RETRY: 41e8. e
     *note CANCEL: 41d9.

 -- Dado: tkinter.messagebox.YESNO = 'yesno'

     Exibe dois botões cujos nomes simbólicos são *note YES: 41da. e
     *note NO: 41db.

 -- Dado: tkinter.messagebox.YESNOCANCEL = 'yesnocancel'

     Exibe três botões cujos nomes simbólicos são *note YES: 41da, *note
     NO: 41db. e *note CANCEL: 41d9.
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.14/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: fd. 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: 41f8. é 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: 41f8.
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.14/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: f9. 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: 418c.).  A função deve chamar *note dnd_start(): 41fe, 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: 418c.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: ff. 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: ff. é 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.14/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: ff. (‘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:
d81.  As outras seis são novas: *note Combobox: 4209, *note Notebook:
420a, *note Progressbar: 420b, ‘Separator’, ‘Sizegrip’ e *note Treeview:
c7a.  E todas elas são subclasses de *note Widget: 420c.

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: 420d, veja a documentação
da classe *note Style: 559.


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
                
-----------------------------------------------------------------------------------
                
class           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.
                
                
style           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(): 1bc0,
                   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(): 4213. 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: 420c.: ‘Widget.cget()’,
‘Widget.configure()’, *note Widget.identify(): 4216, *note
Widget.instate(): 4217. and *note Widget.state(): 4213, 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’.
                      
                      
values                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: 420c.: ‘Widget.cget()’,
‘Widget.configure()’, *note Widget.identify(): 4216, *note
Widget.instate(): 4217. and *note Widget.state(): 4213, 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.
                           
                           
values                     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: 420c.
                
                
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: 4211. 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(): 4228. 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(): 422a.)


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: 4227. 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():
          422d. 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: 4227. 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.
               
               
value          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'.
               
               
variable       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(): 4239. 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(): 4238. 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: 4241.

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:
4210. and the methods *note Treeview.xview(): 4242. and *note
Treeview.yview(): 4243.

* 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.
             
             
values       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(): 4248. and *note Treeview.selection(): c79.
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: 4245. 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(): 425a.

      -- 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: 426b.

          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(): 558. 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(): 558. 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(): 426f.

      -- 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(): 4268, *note Style.map():
          1bc0, *note Style.layout(): 426a. and *note
          Style.element_create(): 558. 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(): 4216. 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: 426b.


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 multi-janela 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

* 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.14/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
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.

Output windows, such as used for Edit => Find in Files, are a subtype of
editor window.  They currently have the same top menu but a different
default title and context menu.

No macOS, há um menu de aplicações.  Ele muda dinamicamente de acordo
com 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 Arquivo (Console e Editor): Menu Arquivo Console e Editor.
* Edit menu (Shell and Editor): Edit menu Shell and Editor.
* Format menu (Editor window only): Format menu Editor window only.
* 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 Arquivo Console e Editor,  Next: Edit menu Shell and Editor,  Up: Menus

5.25.9.2 Menu Arquivo (Console e Editor)
........................................

Novo Arquivo

     Create a new file editing window.

Abrir…

     Open an existing file with an Open dialog.

Open Module…

     Open an existing module (searches sys.path).

Arquivos Recentes

     Open a list of recent files.  Click one to open it.

Module Browser

     Show functions, classes, and methods in the current Editor file in
     a tree structure.  In the shell, open a module first.

Path Browser

     Show sys.path directories, modules, functions, classes and methods
     in a tree structure.

Salvar

     Save the current window to the associated file, if there is one.
     Windows that have been changed since being opened or last saved
     have a * before and after the window title.  If there is no
     associated file, do Save As instead.

Salvar como…

     Save the current window with a Save As dialog.  The file saved
     becomes the new associated file for the window.  (If your file
     namager is set to hide extensions, the current extension will be
     omitted in the file name box.  If the new filename has no ‘.’,
     ‘.py’ and ‘.txt’ will be added for Python and text files, except
     that on macOS Aqua,’.py’ is added for all files.)

Save Copy As…

     Save the current window to different file without changing the
     associated file.  (See Save As note above about filename
     extensions.)

Print Window

     Print the current window to the default printer.

Close Window

     Close the current window (if an unsaved editor, ask to save; if an
     unsaved Shell, ask to quit execution).  Calling ‘exit()’ or
     ‘close()’ in the Shell window also closes Shell.  If this is the
     only window, also exit IDLE.

Exit IDLE

     Close all windows and quit IDLE (ask to save unsaved edit windows).


File: python.info,  Node: Edit menu Shell and Editor,  Next: Format menu Editor window only,  Prev: Menu Arquivo Console e Editor,  Up: Menus

5.25.9.3 Edit menu (Shell and Editor)
.....................................

Desfazer

     Desfaz a última alteração na janela atual.  Um máximo de 1000
     alterações podem ser desfeitas.

Redo

     Redo the last undone change to the current window.

Select All

     Select the entire contents of the current window.

Cut

     Copy selection into the system-wide clipboard; then delete the
     selection.

Copy

     Copy selection into the system-wide clipboard.

Paste

     Insert contents of the system-wide clipboard into the current
     window.

The clipboard functions are also available in context menus.

Find…

     Open a search dialog with many options

Find Again

     Repeat the last search, if there is one.

Find Selection

     Search for the currently selected string, if there is one.

Find in Files…

     Open a file search dialog.  Put results in a new output window.

Replace…

     Open a search-and-replace dialog.

Go to Line

     Move the cursor to the beginning of the line requested and make
     that line visible.  A request past the end of the file goes to the
     end.  Clear any selection and update the line and column status.

Show Completions

     Open a scrollable list allowing selection of existing names.  See
     *note Completions: 4279. in the Editing and navigation section
     below.

Expand Word

     Expand a prefix you have typed to match a full word in the same
     window; repeat to get a different expansion.

Show Call Tip

     After an unclosed parenthesis for a function, open a small window
     with function parameter hints.  See *note Calltips: 427a. in the
     Editing and navigation section below.

Show Surrounding Parens

     Highlight the surrounding parenthesis.


File: python.info,  Node: Format menu Editor window only,  Next: Run menu Editor window only,  Prev: Edit menu Shell and Editor,  Up: Menus

5.25.9.4 Format menu (Editor window only)
.........................................

Format Paragraph

     Reformat the current blank-line-delimited paragraph in comment
     block or multiline string or selected line in a string.  All lines
     in the paragraph will be formatted to less than N columns, where N
     defaults to 72.

Indent Region

     Shift selected lines right by the indent width (default 4 spaces).

Dedent Region

     Shift selected lines left by the indent width (default 4 spaces).

Comment Out Region

     Insert ## in front of selected lines.

Uncomment Region

     Remove leading # or ## from selected lines.

Tabify Region

     Turn 'leading' stretches of spaces into tabs.  (Note: We recommend
     using 4 space blocks to indent Python code.)

Untabify Region

     Turn 'all' tabs into the correct number of spaces.

Toggle Tabs

     Open a dialog to switch between indenting with spaces and tabs.

New Indent Width

     Open a dialog to change indent width.  The accepted default by the
     Python community is 4 spaces.

Strip Trailing Chitespace

     Remove trailing space and other whitespace characters after the
     last non-whitespace character of a line by applying str.rstrip to
     each line, including lines within multiline strings.  Except for
     Shell windows, remove extra newlines at the end of the file.


File: python.info,  Node: Run menu Editor window only,  Next: Shell menu Shell window only,  Prev: Format menu Editor window only,  Up: Menus

5.25.9.5 Run menu (Editor window only)
......................................

Run Module

     Do *note Check Module: 427f.  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: 427e, but run the module with customized
     settings.  'Command Line Arguments' extend *note sys.argv: 1460. 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: 4285. 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: 4286. 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: 4285.).

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.

Documentação do Python

     Access local Python documentation, if installed, or start a web
     browser and open docs.python.org showing the latest Python
     documentation.

Demonstração com o Turtle

     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: 4289. 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

     Copy selection into the system-wide clipboard; then delete the
     selection.

Copy

     Copy selection into the system-wide clipboard.

Paste

     Insert contents of the system-wide clipboard into the current
     window.

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::
* Automatic indentation::
* Busca e Substituição::
* Completions::
* Calltips::
* 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: Automatic indentation,  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: Automatic indentation,  Next: Busca e Substituição,  Prev: Teclas de atalho,  Up: Editing and Navigation

5.25.9.15 Automatic indentation
...............................

After a block-opening statement, the next line is indented by 4 spaces
(in the Python Shell window by one tab).  After certain keywords (break,
return etc.)  the next line is dedented.  In leading indentation,
‘Backspace’ deletes up to 4 spaces if they are there.  ‘Tab’ inserts
spaces (in the Python Shell window one tab), number depends on Indent
width.  Currently, tabs are restricted to four spaces due to Tcl/Tk
limitations.

See also the indent/dedent region commands on the *note Format menu:
427b.


File: python.info,  Node: Busca e Substituição,  Next: Completions,  Prev: Automatic indentation,  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: Calltips,  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: 86f. or *note os.altsep: 870. 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: Calltips,  Next: Code Context,  Prev: Completions,  Up: Editing and Navigation

5.25.9.18 Calltips
..................

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: Code Context,  Next: Shell window,  Prev: Calltips,  Up: Editing and Navigation

5.25.9.19 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.20 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: 18e. 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.21 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: a03. *note match: a04,
*note case: a04, and *note _: a05. 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.22 Startup and Code Execution
....................................

Upon startup with the ‘-s’ option, IDLE will execute the file referenced
by the environment variables ‘IDLESTARTUP’ or *note PYTHONSTARTUP: 1b8.
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<6>.
* 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<6>,  Next: Startup failure,  Up: Startup and Code Execution

5.25.9.23 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: 1b8.) 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<6>,  Up: Startup and Code Execution

5.25.9.24 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.25 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(): 249f. 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.26 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.27 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.28 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.29 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.30 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.31 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.32 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.33 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.34 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.14/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<12>.
* 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.14/Lib/turtle.py


File: python.info,  Node: Introdução<12>,  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<12>,  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: f6. 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::
* Inicie e encerre o preenchimento automaticamente::
* 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: Inicie e encerre o preenchimento automaticamente,  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: 42b1. 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(): 34a6.  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: f6. 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: Inicie e encerre o preenchimento automaticamente,  Next: Use o espaço de nomes do módulo turtle,  Prev: Comece o mais rápido possível,  Up: Como fazer…

5.25.10.11 Inicie e encerre o preenchimento automaticamente
...........................................................

A partir do Python 3.14, você pode usar o *note gerenciador de contexto:
1e0. *note fill(): 2a2. em vez de *note begin_fill(): 42bd. e *note
end_fill(): 42be. para iniciar e encerrar o preenchimento
automaticamente.  Aqui está um exemplo:

     with fill():
         for i in range(4):
             forward(100)
             right(90)

     forward(200)

O código acima equivale a:

     begin_fill()
     for i in range(4):
         forward(100)
         right(90)
     end_fill()

     forward(200)


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: Inicie e encerre o preenchimento automaticamente,  Up: Como fazer…

5.25.10.12 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.13 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.14 Use o módulo gráficos da tartaruga orientado a objetos
.................................................................

Ver também
..........

*note Explicação de interface orientada a objetos: 42c2.

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: 42c3. 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.15 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.16 Métodos de Turtle
............................

Movimentos de Turtle

     Movimento e desenho

               *note forward(): 34a6. | *note fd(): 42c6.
               *note backward(): 42c7. | *note bk(): 42c8. | *note back(): 42c9.
               *note right(): 42ca. | *note rt(): 42cb.
               *note left(): 42cc. | *note lt(): 42cd.
               *note goto(): 42ce. | *note setpos(): 42cf. | *note setposition(): 42d0.
               *note teleport(): 19d3.
               *note setx(): 42d1.
               *note sety(): 42d2.
               *note setheading(): 42d3. | *note seth(): 42d4.
               *note home(): 42d5.
               *note circle(): 42d6.
               *note dot(): 42d7.
               *note stamp(): 42d8.
               *note clearstamp(): 42d9.
               *note clearstamps(): 42da.
               *note undo(): 42db.
               *note speed(): 42dc.

     Fala o estado de Turtle

               *note position(): 42dd. | *note pos(): 42de.
               *note towards(): 42df.
               *note xcor(): 42e0.
               *note ycor(): 42e1.
               *note heading(): 42e2.
               *note distance(): 42e3.

     Configuração e Medidas

               *note degrees(): 42e4.
               *note radians(): 42e5.

Controle da Caneta

     Estado do Desenho

               *note pendown(): 42e6. | *note pd(): 42e7. | *note down(): 42e8.
               *note penup(): 42e9. | *note pu(): 42ea. | *note up(): 42eb.
               *note pensize(): 42ec. | *note width(): 42ed.
               *note pen(): 42ee.
               *note isdown(): 42ef.

     Controle da Cor

               *note color(): 42f0.
               *note pencolor(): 42f1.
               *note fillcolor(): 42f2.

     Preenchimento

               *note filling(): 42f3.
               *note fill(): 2a2.
               *note begin_fill(): 42bd.
               *note end_fill(): 42be.

     Mais sobre o Controle do Desenho

               *note reset(): 42f4.
               *note clear(): 42f5.
               *note write(): 42f6.

Estado da tartaruga

     Visibilidade

               *note showturtle(): 42f7. | *note st(): 42f8.
               *note hideturtle(): 42f9. | *note ht(): 42fa.
               *note isvisible(): 42fb.

     Aparência

               *note shape(): 42fc.
               *note resizemode(): 42fd.
               *note shapesize(): 42fe. | *note turtlesize(): 42ff.
               *note shearfactor(): 4300.
               *note tiltangle(): 924.
               *note tilt(): 4301.
               *note shapetransform(): 4302.
               *note get_shapepoly(): 4303.

Eventos Utilizados

          *note onclick(): 4304.
          *note onrelease(): 4305.
          *note ondrag(): 4306.

Métodos Especiais da Tartaruga

          *note poly(): 2a3.
          *note begin_poly(): 4307.
          *note end_poly(): 4308.
          *note get_poly(): 4309.
          *note clone(): 430a.
          *note getturtle(): 430b. | *note getpen(): 430c.
          *note getscreen(): 430d.
          *note setundobuffer(): 430e.
          *note undobufferentries(): 430f.


File: python.info,  Node: Métodos de TurtleScreen/Screen,  Prev: Métodos de Turtle,  Up: Referência Gráficos de Tartaruga

5.25.10.17 Métodos de TurtleScreen/Screen
.........................................

Controle da Janela

          *note bgcolor(): 4311.
          *note bgpic(): 4312.
          *note clearscreen(): 4313.
          *note resetscreen(): 4314.
          *note screensize(): 4315.
          *note setworldcoordinates(): 4316.

Controle da animação

          *note no_animation(): 2a4.
          *note delay(): 4317.
          *note tracer(): 4318.
          *note update(): 4319.

Usando os eventos de tela

          *note listen(): 431a.
          *note onkey(): 431b. | *note onkeyrelease(): 431c.
          *note onkeypress(): 431d.
          *note onclick(): 4304. | *note onscreenclick(): 431e.
          *note ontimer(): 431f.
          *note mainloop(): 4320. | *note done(): 4321.

Configurações e métodos especiais

          *note mode(): 4322.
          *note colormode(): 4323.
          *note getcanvas(): 4324.
          *note getshapes(): 4325.
          *note register_shape(): 4326. | *note addshape(): 4327.
          *note turtles(): 4328.
          *note window_height(): 4329.
          *note window_width(): 432a.

Métodos de entrada

          *note textinput(): 1b65.
          *note numinput(): 1b66.

Métodos específicos para Screen

          *note bye(): 432b.
          *note exitonclick(): 432c.
          *note save(): 18c1.
          *note setup(): 432d.
          *note title(): 432e.


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.18 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.19 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(): 42e4. e *note radians(): 42e5.)  A orientação do
     ângulo depende do modo tartaruga, veja *note mode(): 4322.

          >>> 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(): 42e4. e *note radians(): 42e5.)  A orientação do
     ângulo depende do modo tartaruga, veja *note mode(): 4322.

          >>> 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: 4331. (por exemplo, como retornado pela função *note
     pos(): 42de.).

     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(): 4322.).

          >>> 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 (size=None, *color)


     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(): 42d8. 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.20 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: 4331.).

          >>> 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(): 4322.).

          >>> 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.21 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.22 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.23 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(): 42ee. 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.24 Controle da Cor
..........................

 -- Função: turtle.pencolor (*args)

     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.

     ‘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(): 4323.).

     ‘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 (*args)

     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.

     ‘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(): 4323.).

     ‘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 (*args)

     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(): 42f1. e *note fillcolor(): 42f2.

     ‘color(colorstring)’, ‘color((r,g,b))’, ‘color(r,g,b)’

          Entradas como em *note pencolor(): 42f1, 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(): 4323.


File: python.info,  Node: Preenchimento,  Next: Mais sobre o Controle do Desenho,  Prev: Controle da Cor,  Up: Controle da Caneta<2>

5.25.10.25 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.fill ()

     Preenche a forma desenhada no bloco ‘with turtle.fill():’.

          >>> turtle.color("black", "red")
          >>> with turtle.fill():
          ...     turtle.circle(80)

     Usar ‘fill()’ equivale a adicionar *note begin_fill(): 42bd. antes
     do bloco de preenchimento e *note end_fill(): 42be. depois do bloco
     de preenchimento:

          >>> turtle.color("black", "red")
          >>> turtle.begin_fill()
          >>> turtle.circle(80)
          >>> turtle.end_fill()

     Adicionado na versão 3.14.

 -- 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(): 42bd.

     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.26 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.27 Estado da tartaruga
..............................

* Menu:

* Visibilidade::
* Aparência::


File: python.info,  Node: Visibilidade,  Next: Aparência,  Up: Estado da tartaruga

5.25.10.28 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.29 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():
     4326. .

          >>> 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(): 42fe.

        - “noresize”: não acontece nenhuma adaptação na aparência da
          tartaruga.

     ‘resizemode("user")’ é chamado por *note shapesize(): 42fe. 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.30 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.31 Métodos Especiais da Tartaruga
.........................................

 -- Função: turtle.poly ()

     Registra os vértices de um polígono desenhado no bloco ‘with
     turtle.poly():’.  O primeiro e o último vértices serão conectados.

          >>> with turtle.poly():
          ...     turtle.forward(100)
          ...     turtle.right(60)
          ...     turtle.forward(100)

     Adicionado na versão 3.14.

 -- 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: 433e. 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(): 42db. .  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.32 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: 4341. 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(): 4342.

     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: 4341. é usada internamente pelo método
     *note register_shape(): 4326. 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.33 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.34 Controle da Janela
.............................

 -- Função: turtle.bgcolor (*args)


     Parâmetros: ‘args’ – uma sequência de cores ou três números no
     intervalo 0..colormode ou uma tupla de 3 elementos desses números

     Define ou retorna a cor de fundo do TurtleScreen.

          >>> 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 de imagem
     (PNG, GIF, PGM e PPM) 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.35 Controle da animação
...............................

 -- Função: turtle.no_animation ()

     Desabilita temporariamente a animação da tartaruga.  O código
     escrito dentro do bloco ‘no_animation’ não será animado; assim que
     o bloco de código for fechado, o desenho aparecerá.

          >>> with screen.no_animation():
          ...     for dist in range(2, 400, 2):
          ...         fd(dist)
          ...         rt(90)

     Adicionado na versão 3.14.

 -- 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(): 4317.).

          >>> 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(): 42dc.


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.36 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(): 431a. 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(): 431a.)

          >>> 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(): 431a.)

          >>> 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.37 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.38 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: 107.  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á quatro maneiras diferentes de chamar esta função:

       1. 'name' é o nome de um arquivo de imagem (PNG, GIF, PGM e PPM)
          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' é o nome de um
          arquivo de imagem (PNG, GIF, PGM e PPM): Instala a forma de
          imagem correspondente.

               >>> screen.register_shape("turtle", "turtle.gif")

               Nota: As formas de imagem 'não' giram ao girar a
               tartaruga, portanto, elas não exibem o rumo da tartaruga!

       3. '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)))

       4. 'name' é uma string arbitrária e 'shape' é um objeto
          (composto) *note Shape: 4341.: 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)’ .

     Alterado na versão 3.14: Adicionado suporte para os formatos de
     imagem PNG, PGM e PPM. É possível especificar tanto o nome da forma
     quanto o nome do arquivo de imagem.

 -- 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.39 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.save (filename, overwrite=False)

     Salva o desenho atual da tartaruga (e tartarugas) como um arquivo
     PostScript.


     Parâmetros:

        * ‘filename’ – o caminho do arquivo PostScript salvo

        * ‘overwrite’ – Se for ‘False’ e já existir um arquivo com o
          nome fornecido, a função levantará uma ‘FileExistsError’.  Se
          for ‘True’, o arquivo será sobrescrito.

          >>> screen.save("my_drawing.ps")
          >>> screen.save("my_drawing.ps", overwrite=True)

     Adicionado na versão 3.14.

 -- 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.40 Classes Públicas
...........................

 -- Classe: turtle.RawTurtle (canvas)
 -- Classe: turtle.RawPen (canvas)


     Parâmetros: ‘canvas’ – um ‘tkinter.Canvas’, um *note
     ScrolledCanvas: 434e. ou um *note TurtleScreen: 433e.

     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: 42c3, 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(): 4311.
     etc., que são descritos acima.

 -- Classe: turtle.Screen

     Subclasse do TurtleScreen, com *note quatro métodos adicionados:
     434a.

 -- 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(): 4342.)
                     

      -- 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: 4340.

 -- 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.41 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: 434f. cria automaticamente uma
nova instância de *note Screen: 42c3, caso esta não esteja presente.

‘Turtle’ é um subclasse de *note RawTurtle: 434c, 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: 434e. ou *note TurtleScreen: 433e.

*note TurtleScreen: 433e. é a superfície de desenho básica para uma
tartaruga.  *note Screen: 42c3. é uma subclasse de ‘TurtleScreen’ e
inclui *note alguns métodos adicionais: 434a. para gerenciar sua
aparência (incluindo tamanho e título) e comportamento.  O construtor
‘TurtleScreen’ precisa de um ‘tkinter.Canvas’ ou um *note
ScrolledCanvas: 434e. 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.42 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.43 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(): aca. 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.44 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: 107. 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.45 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: 432d.

   - As linhas 5 e 6 correspondem a argumento do método *note
     Screen.screensize: 4315.

   - '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: 107.).

   - 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(): 432c. entre no loop principal.

Pode haver um arquivo ‘turtle.cfg’ no diretório em que o *note turtle:
107. 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.46 ‘turtledemo’ — Scripts de Demonstração
.................................................

O pacote *note turtledemo: 108. 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: 108. 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: 107.  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(): 4318,
                     clássico complexo                  delay,
                                                        *note update(): 4319.
                                                        
                                                        
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
                     horário do seu computador          de relógio, ontimer
                                                        
                                                        
colormixer           experimento com r, g, b            *note ondrag(): 4306.
                                                        
                                                        
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
                                                        (shape, shapesize)
                                                        
                                                        
nim                  jogue o clássico jogo nim com      tartarugas como gravetos,
                     três montes de gravetos contra o   acionadas por eventos
                     computador.                        (mouse, teclado)
                                                        
                                                        
paint                programa de desenho super          *note onclick(): 4304.
                     minimalista                        
                     
                                                        
peça                 elementar                          tartaruga: aparência e
                                                        animação
                                                        
                                                        
penrose              ladrilhos irregulares com pipas    *note stamp(): 42d8.
                     e dardos                           
                     
                                                        
planet_and_moon      simulação de um sistema            formas compostas,
                     gravitacional                      *note Vec2D: 4331.
                                                        
                                                        
rosette              um padrão do artigo Wikipédia      *note clone(): 430a,
                     sobre gráficos de tartaruga        *note undo(): 42db.
                                                        
                                                        
round_dance          tartarugas dançantes girando em    formas compostas, clonar
                     pares na direção oposta            o shapesize, inclinação,
                                                        get_shapepoly, atualizar
                                                        
                                                        
sorting_animate      demonstração visual de             alinhamento simples,
                     diferentes tipos de métodos de     randomização
                     ordenação                          
                     
                                                        
tree                 uma árvore (gráfica) da largura    *note clone(): 430a.
                     inicial (usando geradores)         
                     
                                                        
two_canvases         desenho simples                    tartarugas em duas telas
                                                        
                                                        
yinyang              outro exemplo elementar            *note circle(): 42d6.
                                                        

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.47 Modificações desde a versão do Python 2.6
....................................................

   - O métodos *note Turtle.tracer: 4318, *note Turtle.window_width:
     432a. e *note Turtle.window_height: 4329. foram removidos.  O
     métodos com esses nomes e funcionalidades agora estão disponíveis
     apenas como métodos da classe *note Screen: 42c3.  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: 433e./*note Screen: 42c3.).

   - O método ‘Turtle.fill()’ foi eliminado.  O comportamento de *note
     begin_fill(): 42bd. e *note end_fill(): 42be. foi ligeiramente
     alterado: agora, todo processo de preenchimento deve ser concluído
     com uma chamada para ‘end_fill()’.

   - Um método *note Turtle.filling: 42f3. 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.48 Modificações desde a versão do Python 3.0
....................................................

   - Foram adicionados a class *note Turtle: 434f. os métodos *note
     shearfactor(): 4300. , *note shapetransform(): 4302. e *note
     get_shapepoly(): 4303.  Assim, o limite completo de transformações
     lineares regulares está agora disponível para transformar as formas
     de tartarugas.  O *note tiltangle(): 924. foi melhorado em termos
     de funcionalidade: agora pode ser usado para obter ou definir o
     ângulo de inclinação.

   - Na classe *note Screen: 42c3, o método *note onkeypress(): 431d.
     foi adicionado como um complemento ao *note onkey(): 431b.  Como
     esse último vincula ações ao liberar uma tecla pressionada, um
     apelido: *note onkeyrelease(): 431c. também foi adicionado a ele.

   - O método *note Screen.mainloop: 4320. foi adicionado.  Não é mais
     necessário utilizar a função *note mainloop(): 4320. quando estiver
     trabalhando com os objetos *note Screen: 42c3. e *note Turtle:
     434f.

   - Dois novos métodos para informar dados foram adicionados: *note
     Screen.textinput: 1b65. e *note Screen.numinput: 1b66.  Estes
     métodos abrem caixas de diálogo para digitação e retornam strings e
     números, respectivamente.


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: ba. recebe um módulo e gera
documentação com base no conteúdo do módulo.  Os módulos *note doctest:
3e. e *note unittest: 10c. 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 — Unit testing framework::
* 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: 56d, 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: 196, conforme indicado pela *note dica de
tipo: 2262. ‘edge_length: float’.  Espera-se que a função retorne uma
instância de *note str: 169, conforme indicado pela dica ‘-> str’.

Embora as dicas de tipo possam ser classes simples como *note float:
196. ou *note str: 169, elas também podem ser mais complexas.  O módulo
*note typing: 10a. 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.14/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: 661,
que por sua vez cria uma instância da classe *note TypeAliasType: 2ad.
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: 661. é 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: 9c2. 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: ee5. 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: ee5. 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: 2c1e. – podem ser anotados
com *note collections.abc.Callable: 9e1. ou com o tipo descontinuado
*note typing.Callable: 9be.  ‘Callable[[int], str]’ expressa uma função
que recebe um único parâmetro de tipo *note int: 19b. e retorna uma
*note str: 169.

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: 481, *note
Concatenate: 9bd. 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:
4365, or funções que recebem apenas parâmetros somente-nomeados.  No
entanto, essas assinaturas podem ser expressas ao se definir uma *note
Protocol: 564. com um método *note __call__(): 76f.:

     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:
481.  Além disso, se esse chamável adiciona ou remove argumentos de
outros chamáveis, o operador *note Concatenate: 9bd. 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: 481. e *note Concatenate: 9bd.  Veja PEP 612(1) para mais
detalhes.

Ver também
..........

A documentação para *note ParamSpec: 481. e *note Concatenate: 9bd.
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: 5a6.:

     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: 480. 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: 24c. 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: abd. 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: 608. 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]: 436a.) 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: f38. são classes, *note
Any: 8b0, *note type variables: 2260. 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: f38, que é a raiz da *note
hierarquia de metaclasses: 2255. 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]: fcf.  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: fcf. 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]: 253f. ou *note
Iterator[YieldType]: 2540.:

     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]: e7b.).  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]: fd3. e *note
AsyncIterator[YieldType]: fd2. 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]: fd1.  Argumentos genéricos correspondem àqueles
da classe *note Generator: fcf, 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: 436d. ‘T’.  Isso também torna ‘T’ válido
como um tipo dentro do corpo da classe.

Classes genéricas implicitamente herdar de *note Generic: 18ad.  Para
compatibilidade com Python 3.11 e versões inferiores, também é possível
herdar explicitamente de *note Generic: 18ad. 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__(): 938, 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: 480. 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: 18ad. 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:
8b0. 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: 18ad. 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: 18ad. 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: 481.:

     >>> 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: 481. também podem ser
criadas usando herança explícita de *note Generic: 18ad.  Neste caso,
‘**’ não é usado:

     from typing import ParamSpec, Generic

     P = ParamSpec('P')

     class Z(Generic[P]):
         ...

Outra diferença entre *note TypeVar: 480. e *note ParamSpec: 481. é 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: 481. 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: 18ad. agora pode ser
parametrizado através de expressões de parâmetros.  Veja *note
ParamSpec: 481. 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:
819. 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: 8b0.  Um verificador de tipo
estático tratará cada tipo como sendo compatível com *note Any: 8b0. e
*note Any: 8b0. 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: 8b0. 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: 8b0. 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: 169. e
receba um valor *note int: 19b. 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: 8b0.:

     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: 8b0. 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: 8b0. com o comportamento de *note
object: c72.  Semelhante a *note Any: 8b0, todo tipo é um subtipo de
*note object: c72.  No entanto, ao contrário de *note Any: 8b0, o
inverso não é verdadeiro: *note object: c72. 'não' é um subtipo de
qualquer outro tipo.

Isso significa que quando o tipo de um valor é *note object: c72, 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: c72. para indicar que um valor pode ser de qualquer
tipo de maneira segura.  Use *note Any: 8b0. 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: 253f.  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: 564, 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<4>.
* ABCs e protocolos 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<4>,  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: 8b0.

        * *note Any: 8b0. é compatível com todos os tipos.

     Alterado na versão 3.11: *note Any: 8b0. 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: 4373.

     Definição:

          AnyStr = TypeVar('AnyStr', str, bytes)

     ‘AnyStr’ deve ser usado para funções que podem aceitar argumentos
     *note str: 169. ou *note bytes: 192. 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: 8b0, 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!"

     Deprecated since version 3.13, will be removed in version 3.18:
     Descontinuado em favor da nova *note sintaxe de parâmetro de tipo:
     5a6.  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(): 276.:

          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(): 8ab.:

          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: 4374.

     Adicionado na versão 3.11: Adicionado *note Never: 8ac.

 -- 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: 488.s que são usados como construtores
          alternativos e retornam instâncias do parâmetro ‘cls’.

        - Anotando um método *note __enter__(): 7d9. 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: 678.

     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: 9c2. foi
     descontinuado em favor da instrução *note type: 661, que cria
     instâncias de *note TypeAliasType: 2ad. e oferece suporte nativo a
     referências futuras.  Observe que embora *note TypeAlias: 9c2. e
     *note TypeAliasType: 2ad. 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: 9c2. não está planejada
     atualmente, mas os usuários são encorajados a migrar para
     instruções *note type: 661.

   ---------- 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.

 -- Classe: 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: 2ad. 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: 9bb.

     Alterado na versão 3.14: *note types.UnionType: 2a6. agora é um
     apelido para *note Union: 2a7, e tanto ‘Union[int, str]’ quanto
     ‘int | str’ criam instâncias da mesma classe.  Para verificar se um
     objeto é um ‘Union’ em tempo de execução, use ‘isinstance(obj,
     Union)’.  Para compatibilidade com versões anteriores do Python,
     use ‘get_origin(obj) is typing.Union or get_origin(obj) is
     types.UnionType’.

 -- 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: 9bb.

 -- Dado: typing.Concatenate

     Forma especial para anotar funções de ordem superior.

     ‘Concatenate’ pode ser usado em conjunção com *note Callable: 2560.
     e *note ParamSpec: 481. 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: 2560.  O último
     parâmetro de ‘Concatenate’ deve ser um *note ParamSpec: 481. ou
     reticências (‘...’).

     Por exemplo, para anotar um decorador ‘with_lock’ que oferece uma
     instância de *note threading.Lock: 1930. 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: 481. 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: 481.

        * *note Anotações de objetos chamáveis: 2560.

 -- 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: 2ad. 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: 198. durante comparações de igualdade se um de
     seus parâmetros não for *note hasheável: 819.

 -- 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: 566. aceita apenas tipos e não pode ser subscrita
     posteriormente.

     *note ClassVar: 566. não é uma classe, e não deve ser usada com
     *note isinstance(): 2ac. ou *note issubclass(): 9ba.  *note
     ClassVar: 566. 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: 566. agora pode ser
     aninhada em *note Final: 567. 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: 567. agora pode ser aninhada
     em *note ClassVar: 566. e vice-versa.

 -- Dado: typing.Required

     Uma construção especial de tipagem para marcar uma chave de *note
     TypedDict: 330. como necessária.

     Isso é útil principalmente para TypedDicts com ‘total=False’.  Veja
     *note TypedDict: 330. 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: 330. como potencialmente ausente.

     Veja *note TypedDict: 330. 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: 330. 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: 330. 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.

     Using ‘Annotated[T, x]’ as an annotation still allows for static
     typechecking of ‘T’, as type checkers will simply ignore the
     metadata ‘x’.  In this way, ‘Annotated’ differs from the *note
     @no_type_check: 8b8. decorator, which can also be used for adding
     annotations outside the scope of the typing system, but completely
     disables typechecking for a function or class.

     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(): 2ac.).

      -- 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: 2ad. 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: 482.
     desempacotado:

          type Variadic[*Ts] = Annotated[*Ts, Ann1] = Annotated[T1, T2, T3, ..., Ann1]  # NÃO válido

     onde ‘T1’, ‘T2’, … são *note TypeVars: 480.  Isso é inválido, pois
     somente um tipo deve ser passado para Annotated.

     Por padrão, *note get_type_hints(): 8b5. 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(): 2aa. 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: 486. 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: 485, 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: 4376. 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: 482. e *note
     builtins.tuple: 608.  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: 330.
     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: 5a6. e a instrução *note type: 661.).
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: 676.

     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: 677.

     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: 677, *note classes
     genéricas: 676. e *note apelidos de tipo genérico: 679.:

          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: 18ad. 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: 5a6. 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:
     198.

      -- 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: 5a6. , a limite é
          avaliado somente quando o atributo é acessado, não quando o
          tipo variável é criado (consulte *note Avaliação preguiçosa:
          67a.).

      -- Método: evaluate_bound ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __bound__: 437c.  Quando chamado diretamente,
          este método oferece suporte apenas ao formato *note VALUE:
          15e, que equivale a acessar o atributo *note __bound__: 437c.
          diretamente, mas o objeto do método pode ser passado para
          *note annotationlib.call_evaluate_function(): 437f. para
          avaliar o valor em um formato diferente.

          Adicionado na versão 3.14.

      -- 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: 5a6. , a restrição é
          avaliada somente quando o atributo é acessado, não quando o
          tipo variável é criado (consulte *note Avaliação preguiçosa:
          67a.).

      -- Método: evaluate_constraints ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __constraints__: 4380.  Quando chamado
          diretamente, este método oferece suporte apenas ao formato
          *note VALUE: 15e, que equivale a acessar o atributo *note
          __constraints__: 4380. diretamente, mas o objeto do método
          pode ser passado para *note
          annotationlib.call_evaluate_function(): 437f. para avaliar o
          valor em um formato diferente.

          Adicionado na versão 3.14.

      -- Atributo: __default__

          O padrão valor do tipo variável, ou *note typing.NoDefault:
          562. se ele não tiver padrão.

          Adicionado na versão 3.13.

      -- Método: evaluate_default ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __default__: 4382.  Quando chamado diretamente,
          este método oferece suporte apenas ao formato *note VALUE:
          15e, que equivale a acessar o atributo *note __default__:
          4382. diretamente, mas o objeto do método pode ser passado
          para *note annotationlib.call_evaluate_function(): 437f. para
          avaliar o valor em um formato diferente.

          Adicionado na versão 3.14.

      -- 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__: 4382. não é o
          singleton *note typing.NoDefault: 562, exceto por não forçar a
          avaliação instantânea do valor padrão que é *note avaliado
          preguiçosamente: 67a.

          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: 5a6. 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: 436d. que permite genéricos 'variádicos'.

     Tuplas de tipo variável podem ser declarada em *note listas de
     parâmetros de tipo: 5a6. 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: 18ea. 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: 562. se não existir padrão.

          Adicionado na versão 3.13.

      -- Método: evaluate_default ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __default__: 4386.  Quando chamado diretamente,
          este método oferece suporte apenas ao formato *note VALUE:
          15e, que equivale a acessar o atributo *note __default__:
          4386. diretamente, mas o objeto do método pode ser passado
          para *note annotationlib.call_evaluate_function(): 437f. para
          avaliar o valor em um formato diferente.

          Adicionado na versão 3.14.

      -- 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__: 4386.
          não é o singleton *note typing.NoDefault: 562, exceto por não
          forçar a avaliação instantânea do valor padrão que é *note
          avaliado preguiçosamente: 67a.

          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: 5a6.
     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: 436d.

     Em *note listas de parâmetros de tipo: 5a6. 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:
     18ad. 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: 480. 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: 8b0.

       2. *note cast(): 4389. 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: 9bf. e *note ParamSpecKwargs: 9c0.

      -- 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: 562. se não tiver padrão.

          Adicionado na versão 3.13.

      -- Método: evaluate_default ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __default__: 438d.  Quando chamado diretamente,
          este método oferece suporte apenas ao formato *note VALUE:
          15e, que equivale a acessar o atributo *note __default__:
          438d. diretamente, mas o objeto do método pode ser passado
          para *note annotationlib.call_evaluate_function(): 437f. para
          avaliar o valor em um formato diferente.

          Adicionado na versão 3.14.

      -- 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__: 438d.
          não é o singleton *note typing.NoDefault: 562, exceto por não
          forçar a avaliação instantânea do valor padrão que é *note
          avaliado preguiçosamente: 67a.

          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:
     480.  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: 5a6.
     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: 9bd.

        * *note Anotações de objetos chamáveis: 2560.

 -- Dado: typing.ParamSpecArgs
 -- Dado: typing.ParamSpecKwargs

     Tipos dos argumentos e dos argumentos nomeados de um *note
     ParamSpec: 481.  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(): 2aa. 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: 661.

     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__

          The name of the module in which the type alias was defined:

               >>> 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: 67a, 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

      -- Método: evaluate_value ()

          Uma *note função de avaliação: 437e. correspondente ao
          atributo *note __value__: 4393.  Quando chamado diretamente,
          este método oferece suporte apenas ao formato *note VALUE:
          15e, que equivale a acessar o atributo *note __value__: 4393.
          diretamente, mas o objeto do método pode ser passado para
          *note annotationlib.call_evaluate_function(): 437f. para
          avaliar o valor em um formato diferente.

               >>> type Alias = undefined
               >>> Alias.__value__
               Traceback (most recent call last):
               ...
               NameError: name 'undefined' is not defined
               >>> from annotationlib import Format, call_evaluate_function
               >>> Alias.evaluate_value(Format.VALUE)
               Traceback (most recent call last):
               ...
               NameError: name 'undefined' is not defined
               >>> call_evaluate_function(Alias.evaluate_value, Format.FORWARDREF)
               ForwardRef('undefined')

          Adicionado na versão 3.14.

     Descompactando
     ..............

     Apelidos de tipo oferecem suporte a desempacotamento em estrela
     usando a sintaxe ‘*Alias’.  Isso equivale a usar ‘Unpack[Alias]’
     diretamente:

          >>> type Alias = tuple[int, str]
          >>> type Unpacked = tuple[bool, *Alias]
          >>> Unpacked.__value__
          tuple[bool, typing.Unpack[Alias]]

     Adicionado na versão 3.14.

   ---------- 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(): 4da.

     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(): 4da.)

     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.11: Adiciona suporte a tuplas nomeadas
     genéricas.

     Alterado na versão 3.14: O uso de *note super(): 1a6. (e a *note
     variável de clausura: 17f7. ‘__class__’) em métodos de subclasses
     de ‘NamedTuple’ não é suportado e causa um *note TypeError: 198.

     Deprecated since version 3.13, will be removed in version 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.

     Deprecated since version 3.13, will be removed in version 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: 4362. 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__

          The name of the module in which the new type is defined.

      -- 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(): 669. (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(): 2ac. ou *note issubclass(): 9ba.

     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(): 2ac. e *note
     issubclass(): 9ba.  Isso permite uma verificação estrutural
     simples, muito semelhante a “pôneis de um truque só” em *note
     collections.abc: 1f, como *note Iterable: 253f.  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: 198. 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:
          d6e. é uma classe e, portanto, passa por uma verificação *note
          issubclass(): 9ba. em relação a *note Callable: 2560.  No
          entanto, o método ‘ssl.SSLObject.__init__’ existe apenas para
          levantar um *note TypeError: 198. com uma mensagem mais
          informativa, o que impossibilita chamar (instanciar) o *note
          ssl.SSLObject: d6e.

          Nota: uma verificação com *note isinstance(): 2ac. 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():
          6ee. 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(): 2ac. agora verifica os protocolos verificáveis em
     tempo de execução usando *note inspect.getattr_static(): 6b1. para
     procurar o atributo (anteriormente, era usado *note hasattr():
     6ee.).  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(): 2ac.
     ao comparar objetos com o protocolo.  Consulte o *note O que há de
     novo no Python 3.12: 6ed. para mais detalhes.

 -- Classe: typing.TypedDict (dict)

     Uma construção especial para adicionar dicas de tipo a um
     dicionário.  Em tempo de execução, é um simples *note dict: 183.

     ‘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:
     183.:

          Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})

     Esta sintaxe funcional permite definirmos chaves usando *note
     identificadores: 214b. inválidos, por exemplo, por serem
     palavras-chave ou conterem hífens, ou quando os nomes das chaves
     não devem ser *note desconfigurados: 1f58. 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: 7d6.:

          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: 7d5.:

          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: 18ad.  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: 18ad. 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: 9cf. para
     obter mais informações sobre as melhores práticas de anotações),
     *note __total__: 4399, *note __required_keys__: 439a. e *note
     __optional_keys__: 439b.

      -- 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: 7d6, ou pode herdar de outro ‘TypedDict’
          com ‘total=False’.  Portanto, geralmente é melhor usar *note
          __required_keys__: 439a. e *note __optional_keys__: 439b. 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: 7e7. contendo chaves
          obrigatórias e opcionais, respectivamente.

          As chaves marcadas com *note Required: 7d5. sempre aparecerão
          em ‘__required_keys__’ e as chaves marcadas com *note
          NotRequired: 7d6. 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: 484. está refletido nos seguintes
     atributos:

      -- Atributo: __readonly_keys__

          Um *note frozenset: 7e7. contendo os nomes de todas as chaves
          somente para leitura.  As chaves são somente para leitura se
          tiverem o qualificador *note ReadOnly: 484.

          Adicionado na versão 3.13.

      -- Atributo: __mutable_keys__

          Um *note frozenset: 7e7. contendo os nomes de todas as chaves
          mutáveis.  As chaves são mutáveis se não tiverem o
          qualificador *note ReadOnly: 484.

          Adicionado na versão 3.13.

     Consulte a seção TypedDict(3) na documentação de tipagem para obter
     mais exemplos e regras detalhadas.

     Adicionado na versão 3.8.

     Alterado na versão 3.11: Adicionado suporte para marcar chaves
     individuais como *note Required: 7d5. ou *note NotRequired: 7d6.
     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: 484.

     Deprecated since version 3.13, will be removed in version 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://typing.python.org/en/latest/spec/typeddict.html#typeddict

   (4) https://peps.python.org/pep-0655/


File: python.info,  Node: Protocolos<4>,  Next: ABCs e protocolos para trabalhar com E/S,  Prev: Tipos primitivos especiais,  Up: Conteúdo do módulo<7>

5.26.1.18 Protocolos
....................

The following protocols are provided by the ‘typing’ module.  All are
decorated with *note @runtime_checkable: 669.

 -- 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 e protocolos para trabalhar com E/S,  Next: Funções e decoradores,  Prev: Protocolos<4>,  Up: Conteúdo do módulo<7>

5.26.1.19 ABCs e protocolos para trabalhar com E/S
..................................................

 -- Classe: typing.IO [AnyStr]
 -- Classe: typing.TextIO [AnyStr]
 -- Classe: typing.BinaryIO [AnyStr]

     A classe genérica ‘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(): 314.  Note que essas classes não
     são protocolos e sua interface é bem ampla.

Os protocolos *note io.Reader: 235. e *note io.Writer: 236. oferecem uma
alternativa mais simples para tipos de argumentos, quando apenas os
métodos ‘read()’ ou ‘write()’ são acessados, respectivamente:

     def read_and_write(reader: Reader[str], writer: Writer[bytes]):
         data = reader.read()
         writer.write(data.encode())

Considere também usar *note collections.abc.Iterable: 253f. para iterar
sobre as linhas de um fluxo de entrada:

     def read_config(stream: Iterable[str]):
         for line in stream:
             ...


File: python.info,  Node: Funções e decoradores,  Next: Auxiliares de introspecção,  Prev: ABCs e protocolos 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: 19b.
     ou uma *note str: 169, 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: 196.  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: 8ac, 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: b29. 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: 4db.

     ‘dataclass_transform’ may be used to decorate a class, metaclass,
     or a function that is itself a decorator.  The presence of
     ‘@dataclass_transform()’ tells a static type checker that the
     decorated object performs runtime “magic” that transforms a class
     in a similar way to *note @dataclasses.dataclass: 4db.

     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

     The ‘CustomerModel’ classes defined above will be treated by type
     checkers similarly to classes created with *note
     @dataclasses.dataclass: 4db.  For example, type checkers will
     assume these classes have ‘__init__’ methods that accept ‘id’ and
     ‘name’.

     The decorated class, metaclass, or function may accept the
     following bool arguments which type checkers will assume have the
     same effect as they would have on the *note @dataclasses.dataclass:
     4db. decorator: ‘init’, ‘eq’, ‘order’, ‘unsafe_hash’, ‘frozen’,
     ‘match_args’, ‘kw_only’, and ‘slots’.  It must be possible for the
     value of these arguments (‘True’ or ‘False’) to be statically
     evaluated.

     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: 3c0.) – Indica se o parâmetro ‘eq’ é
          presumido como ‘True’ ou ‘False’ se for omitido pelo chamador.
          O padrão é ‘True’.

        * ‘order_default’ (*note bool: 3c0.) – 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: 3c0.) – 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: 3c0.) – 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: 608.‘[’*note Callable:
          9e1.‘[’‘...’‘, ’‘Any’‘]’‘, ’‘...’‘]’) – Especifica uma lista
          estática de classes ou funções compatíveis que descrevem
          campos, semelhante a *note dataclasses.field(): 18ae.  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.

     Consulte 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: 368.

     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():
     8b2.

 -- Função: typing.get_overloads (func)

     Return a sequence of *note @overload: 43a4.-decorated definitions
     for 'func'.

     'func' is the function object for the implementation of the
     overloaded function.  For example, given the definition of
     ‘process’ in the documentation for *note @overload: 43a4,
     ‘get_overloads(process)’ will return a sequence of three function
     objects for the three defined overloads.  If called on a function
     with no overloads, ‘get_overloads()’ returns an empty sequence.

     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: 92f. 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(): 8b8.

     Isso envolve o decorador com algo que envolve a função decorada em
     *note no_type_check(): 8b8.

     Deprecated since version 3.13, will be removed in version 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: 1ae7. são tratados avaliando-as em
          'globalns', 'localns' e (quando aplicável) no espaço de nomes
          de *note parâmetro de tipo: 5a6. 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: a48.

        * If *note @no_type_check: 8b8. has been applied to 'obj', an
          empty dictionary is returned.

        * 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__: 220e.
          e combinando iterativamente os dicionários ‘__annotations__’.
          Anotações em classes que aparecem antes na *note ordem de
          resolução de métodos: 2471. 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, ...]’ por ‘T’, a menos que 'include_extras' seja
          definido como ‘True’ (consulte *note Annotated: b2d. para
          obter mais informações).

     Veja também *note annotationlib.get_annotations(): 456, uma função
     de nível inferior que retorna anotações mais diretamente.

          Cuidado: Esta função pode executar código arbitrário contido
          em anotações.  Consulte *note Security implications of
          introspecting annotations: 43a7. para obter mais informações.

          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: 44f.  Por exemplo,
          isso pode acontecer com *note apelidos de tipo: 678.
          importados que incluem referências futuras, ou com nomes
          importados em *note if TYPE_CHECKING: ee4.

     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:
     b2d. 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: 1e, ele será normalizado para a classe
     original.  Se ‘X’ for uma instância de *note ParamSpecArgs: 9bf. ou
     *note ParamSpecKwargs: 9c0, retorna o *note ParamSpec: 481.
     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: a4b, 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: 564.

          >>> 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: 198. 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: 564.

     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: 330.

     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, ‘List["AlgumaClasse"]’ é implicitamente transformado
     em ‘List[ForwardRef("AlgumaClasse")]’.  ‘ForwardRef’ não deve ser
     instanciada por um usuário, mas pode ser usada 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.

     Alterado na versão 3.14: Este agora é um apelido para *note
     annotationlib.ForwardRef: 17c3.  Vários comportamentos não
     documentados desta classe foram alterados; por exemplo, após a
     avaliação de um ‘ForwardRef’, o valor avaliado não é mais
     armazenado em cache.

 -- Função: typing.evaluate_forward_ref (forward_ref, *, owner=None,
          globals=None, locals=None, type_params=None,
          format=annotationlib.Format.VALUE)

     Avalia um *note annotationlib.ForwardRef: 17c3. como um *note dica
     de tipo: 2262.

     Isso é semelhante a chamar *note
     annotationlib.ForwardRef.evaluate(): 1770, mas diferentemente desse
     método, ‘evaluate_forward_ref()’ também avalia recursivamente
     referências futuras aninhadas dentro da dica de tipo.

     Consulte a documentação de *note
     annotationlib.ForwardRef.evaluate(): 1770. para saber o significado
     dos parâmetros 'owner', 'globals', 'locals', 'type_params' e
     'format'.

          Cuidado: Esta função pode executar código arbitrário contido
          em anotações.  Consulte *note Security implications of
          introspecting annotations: 43a7. para obter mais informações.

     Adicionado na versão 3.14.

 -- 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.

     Um módulo cuja importação é cara e que contém apenas tipos usados
     para anotações de tipagem pode ser importado com segurança dentro
     de um bloco ‘if TYPE_CHECKING:’.  Isso impede que o módulo seja
     importado em tempo de execução; anotações não são avaliadas de
     forma ansiosa (veja PEP 649(1)), portanto, usar símbolos
     indefinidos em anotações é inofensivo – desde que você não os
     examine posteriormente.  Sua ferramenta de análise de tipos
     estáticos definirá ‘TYPE_CHECKING’ como ‘True’ durante a análise de
     tipos estáticos, o que significa que o módulo será importado e os
     tipos serão verificados corretamente durante essa análise.

     Uso:

          if TYPE_CHECKING:
              import expensive_mod

          def fun(arg: expensive_mod.SomeType) -> None:
              local_var: expensive_mod.AnotherType = other_fun()

     Se você ocasionalmente precisar examinar anotações de tipo em tempo
     de execução que podem conter símbolos indefinidos, use *note
     annotationlib.get_annotations(): 456. com um parâmetro ‘format’ de
     *note annotationlib.Format.STRING: 160. ou *note
     annotationlib.Format.FORWARDREF: 15f. para recuperar as anotações
     com segurança sem levantar *note NameError: 44f.

     Adicionado na versão 3.5.2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/


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: 183.

     Note que, para anotar argumentos, prefere-se usar um tipo de
     coleção abstrata como *note Mapping: abd. em vez de *note dict:
     183. ou ‘typing.Dict’.

     Descontinuado desde a versão 3.9: *note builtins.dict: 183. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(1) e *note
     Tipo Generic Alias: 8b6.

 -- Classe: typing.List (list, MutableSequence[T])

     Apelido descontinuado de *note list: 24c.

     Note que, para anotar argumentos, é preferível usar um tipo de
     coleção abstrata, como *note Sequence: 13c0. ou *note Iterable:
     253f, em vez de *note list: 24c. ou ‘typing.List’.

     Descontinuado desde a versão 3.9: *note builtins.list: 24c. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(2) e *note
     Tipo Generic Alias: 8b6.

 -- Classe: typing.Set (set, MutableSet[T])

     Apelido descontinuado de *note builtins.set: 184.

     Note que, para anotar argumentos, prefere-se usar um tipo de
     coleção abstrata como *note collections.abc.Set: 2537. em vez de
     *note set: 184. ou *note typing.Set: 43b0.

     Descontinuado desde a versão 3.9: *note builtins.set: 184. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(3) e *note
     Tipo Generic Alias: 8b6.

 -- Classe: typing.FrozenSet (frozenset, AbstractSet[T_co])

     Apelido descontinuado de *note builtins.frozenset: 7e7.

     Descontinuado desde a versão 3.9: *note builtins.frozenset: 7e7.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(4) e
     *note Tipo Generic Alias: 8b6.

 -- Dado: typing.Tuple

     Apelido descontinuado para *note tuple: 608.

     *note tuple: 608. e ‘Tuple’ são casos especiais no sistema de
     tipos; consulte *note Anotando tuplas: 2561. para obter mais
     detalhes.

     Descontinuado desde a versão 3.9: *note builtins.tuple: 608. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(5) e *note
     Tipo Generic Alias: 8b6.

 -- Classe: typing.Type (Generic[CT_co])

     Apelido descontinuado de *note type: f38.

     Consulte *note O tipo de objetos de classe: 4369. para obter
     detalhes sobre como usar *note type: f38. 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: f38. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(6) e *note
     Tipo Generic Alias: 8b6.

   ---------- 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: 13b8.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note collections.defaultdict:
     13b8. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.OrderedDict (collections.OrderedDict,
          MutableMapping[KT, VT])

     Apelido descontinuado de *note collections.OrderedDict: 7e8.

     Adicionado na versão 3.7.2.

     Descontinuado desde a versão 3.9: *note collections.OrderedDict:
     7e8. agora oferece suporte a subscrição (‘[]’).  consulte PEP
     585(2) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.ChainMap (collections.ChainMap, MutableMapping[KT,
          VT])

     Apelido descontinuado de *note collections.ChainMap: e0a.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.ChainMap: e0a.
     agora oferece suporte a subscrição (‘[]’).  consulte PEP 585(3) e
     *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Counter (collections.Counter, Dict[T, int])

     Apelido descontinuado de *note collections.Counter: 128d.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.Counter: 128d.
     agora oferece suporte a subscrição (‘[]’).  consulte PEP 585(4) e
     *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Deque (deque, MutableSequence[T])

     Apelido descontinuado de *note collections.deque: 7e9.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.deque: 7e9.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(5) e
     *note Tipo Generic Alias: 8b6.

   ---------- 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(): dc2. e *note re.match(): 1429.

     Esses tipos (e as funções correspondentes) são genéricas sobre
     *note AnyStr: 5a5.  ‘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: be. agora suporte ‘[]’.  Consulte PEP 585(1) e *note Tipo
     Generic Alias: 8b6.

 -- Classe: typing.Text

     Apelido descontinuado de *note str: 169.

     ‘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: 169. 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: 2537.

     Descontinuado desde a versão 3.9: *note collections.abc.Set: 2537.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(1) e
     *note Tipo Generic Alias: 8b6.

 -- Classe: typing.ByteString (Sequence[int])

     Apelido descontinuado para *note collections.abc.ByteString: 340.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 25f. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 341. 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: 192. e
     *note bytearray: 342.  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: 165, 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.

     Deprecated since version 3.9, will be removed in version 3.17.

 -- Classe: typing.Collection (Sized, Iterable[T_co], Container[T_co])

     Apelido descontinuado de *note collections.abc.Collection: e78.

     Adicionado na versão 3.6.

     Descontinuado desde a versão 3.9: *note collections.abc.Collection:
     e78. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(3) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Container (Generic[T_co])

     Apelido descontinuado de *note collections.abc.Container: 2541.

     Descontinuado desde a versão 3.9: *note collections.abc.Container:
     2541. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(4) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.ItemsView (MappingView, AbstractSet[tuple[KT_co,
          VT_co]])

     Apelido descontinuado de *note collections.abc.ItemsView: 2545.

     Descontinuado desde a versão 3.9: *note collections.abc.ItemsView:
     2545. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.KeysView (MappingView, AbstractSet[KT_co])

     Apelido descontinuado de *note collections.abc.KeysView: 2544.

     Descontinuado desde a versão 3.9: *note collections.abc.KeysView:
     2544. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(6) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Mapping (Collection[KT], Generic[KT, VT_co])

     Apelido descontinuado de *note collections.abc.Mapping: abd.

     Descontinuado desde a versão 3.9: *note collections.abc.Mapping:
     abd. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(7) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.MappingView (Sized)

     Apelido descontinuado de *note collections.abc.MappingView: 2543.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MappingView: 2543. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(8) e *note Tipo Generic Alias:
     8b6.

 -- Classe: typing.MutableMapping (Mapping[KT, VT])

     Apelido descontinuado de *note collections.abc.MutableMapping:
     12a8.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MutableMapping: 12a8. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(9) e *note Tipo Generic Alias:
     8b6.

 -- Classe: typing.MutableSequence (Sequence[T])

     Apelido descontinuado de *note collections.abc.MutableSequence:
     4b9.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MutableSequence: 4b9. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(10) e *note Tipo Generic
     Alias: 8b6.

 -- Classe: typing.MutableSet (AbstractSet[T])

     Apelido descontinuado de *note collections.abc.MutableSet: 2542.

     Descontinuado desde a versão 3.9: *note collections.abc.MutableSet:
     2542. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(11) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Sequence (Reversible[T_co], Collection[T_co])

     Apelido descontinuado de *note collections.abc.Sequence: 13c0.

     Descontinuado desde a versão 3.9: *note collections.abc.Sequence:
     13c0. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(12) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.ValuesView (MappingView, Collection[_VT_co])

     Apelido descontinuado de *note collections.abc.ValuesView: 2546.

     Descontinuado desde a versão 3.9: *note collections.abc.ValuesView:
     2546. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(13) e *note Tipo Generic Alias: 8b6.

   ---------- 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: fd1.

     Consulte *note Anotando geradores e corrotinas: 2838. para obter
     detalhes sobre como usar *note collections.abc.Coroutine: fd1. 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:
     fd1. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.AsyncGenerator (AsyncIterator[YieldType],
          Generic[YieldType, SendType])

     Apelido descontinuado de *note collections.abc.AsyncGenerator: e7b.

     Consulte *note Anotando geradores e corrotinas: 2838. para obter
     detalhes sobre como usar *note collections.abc.AsyncGenerator: e7b.
     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: e7b. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(2) e *note Tipo Generic Alias:
     8b6.

     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: fd3.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note
     collections.abc.AsyncIterable: fd3. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(3) e *note Tipo Generic Alias:
     8b6.

 -- Classe: typing.AsyncIterator (AsyncIterable[T_co])

     Apelido descontinuado de *note collections.abc.AsyncIterator: fd2.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note
     collections.abc.AsyncIterator: fd2. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(4) e *note Tipo Generic Alias:
     8b6.

 -- Classe: typing.Awaitable (Generic[T_co])

     Apelido descontinuado de *note collections.abc.Awaitable: fd0.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note collections.abc.Awaitable:
     fd0. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 8b6.

   ---------- 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: 253f.

     Descontinuado desde a versão 3.9: *note collections.abc.Iterable:
     253f. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Iterator (Iterable[T_co])

     Apelido descontinuado de *note collections.abc.Iterator: 2540.

     Descontinuado desde a versão 3.9: *note collections.abc.Iterator:
     2540. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(2) e *note Tipo Generic Alias: 8b6.

 -- Dado: typing.Callable

     Apelido descontinuado de *note collections.abc.Callable: 9e1.

     Veja *note Anotações de objetos chamáveis: 2560. para detalhes
     sobre como usar *note collections.abc.Callable: 9e1. e
     ‘typing.Callable’ em anotações de tipo.

     Descontinuado desde a versão 3.9: *note collections.abc.Callable:
     9e1. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(3) e *note Tipo Generic Alias: 8b6.

     Alterado na versão 3.10: ‘Callable’ agora oferece suporte a *note
     ParamSpec: 481. e *note Concatenate: 9bd.  Veja PEP 612(4) para
     mais detalhes.

 -- Classe: typing.Generator (Iterator[YieldType], Generic[YieldType,
          SendType, ReturnType])

     Apelido descontinuado de *note collections.abc.Generator: fcf.

     Consulte *note Anotando geradores e corrotinas: 2838. para obter
     detalhes sobre como usar *note collections.abc.Generator: fcf. e
     ‘typing.Generator’ em anotações de tipos.

     Descontinuado desde a versão 3.9: *note collections.abc.Generator:
     fcf. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 8b6.

     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: 70e.

     Descontinuado desde a versão 3.12: Use *note
     collections.abc.Hashable: 70e. diretamente.

 -- Classe: typing.Reversible (Iterable[T_co])

     Apelido descontinuado de *note collections.abc.Reversible: e79.

     Descontinuado desde a versão 3.9: *note collections.abc.Reversible:
     e79. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(6) e *note Tipo Generic Alias: 8b6.

 -- Classe: typing.Sized

     Apelido descontinuado de *note collections.abc.Sized: 70f.

     Descontinuado desde a versão 3.12: Use *note collections.abc.Sized:
     70f. 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:
     e7e.

     O primeiro parâmetro de tipo, ‘T_co’, representa o tipo retornado
     pelo método *note __enter__(): 7d9.  O segundo parâmetro opcional
     de tipo, ‘ExitT_co’, cujo valor-padrão é ‘bool | None’, representa
     o tipo retornado pelo método *note __exit__(): 14fc.

     Adicionado na versão 3.5.4.

     Descontinuado desde a versão 3.9: *note
     contextlib.AbstractContextManager: e7e. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(1) e *note Tipo Generic Alias:
     8b6.

     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: d14.

     O primeiro parâmetro de tipo, ‘T_co’, representa o tipo retornado
     pelo método *note __aenter__(): 22b2.  O segundo parâmetro opcional
     de tipo, ‘AExitT_co’, cujo valor-padrão é ‘bool | None’, representa
     o tipo retornado pelo método *note __aexit__(): 18e5.

     Adicionado na versão 3.6.2.

     Descontinuado desde a versão 3.9: *note
     contextlib.AbstractAsyncContextManager: d14. agora oferece suporte
     a subscrição (‘[]’).  Consulte PEP 585(2) e *note Tipo Generic
     Alias: 8b6.

     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: 43aa.
                                                            para mais informações)
                                                            
                                                                                          
*note typing.ByteString: 343. 3.9                           3.17                          gh-91896(2)
                                                                                          
                                                                                          
*note typing.Text: 35d.       3.11                          Não definido                  gh-92332(3)
                                                                                          
                                                                                          
*note typing.Hashable: 70c.   3.12                          Não definido                  gh-94309(4)
e *note typing.Sized: 70d.                                                                

*note typing.TypeAlias: 9c2.  3.12                          Não definido                  PEP 695(5)
                                                                                          
                                                                                          
*note @typing.no_type_check_decorator: 331.3.13             3.15                          gh-106309(6)
                                                                                          
                                                                                          
*note typing.AnyStr: 5a5.     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__: b17.) 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(): 188a.).

A função embutida *note help(): aca. 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: df,
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():
22e. em vez de *note inspect.getfullargspec(): 936. 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.14/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:
16f. ou configurando a variável de ambiente *note PYTHONDEVMODE: cda.
como ‘1’.

Veja também a *note compilação de depuração do Python: 503.

* 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: 1fd7. ‘default’.  Os seguintes
     avisos são exibidos:

        * *note DeprecationWarning: 1a3.

        * *note ImportWarning: 713.

        * *note PendingDeprecationWarning: abc.

        * *note ResourceWarning: 546.

     Normalmente, os avisos acima são filtrados pelos *note filtros de
     avisos: 1fd7. padrão.

     Ele se comporta como se a opção de linha de comando *note -W
     default: abb. fosse usada.

     Use a opção de linha de comando *note -W error: abb. ou defina a
     variável de ambiente *note PYTHONWARNINGS: d97. 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(): e58.

     Se comporta como se a variável de ambiente *note PYTHONMALLOC: e52.
     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: e52. como ‘default’.

   * Chama *note faulthandler.enable(): 20e. na inicialização do Python
     para instalar manipuladores para os sinais *note SIGSEGV: 1276,
     *note SIGFPE: 1277, *note SIGABRT: 1278, *note SIGBUS: 1279. e
     *note SIGILL: 127a. 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: 16f. fosse usada ou se a variável de ambiente *note
     PYTHONFAULTHANDLER: 127b. estivesse definida como ‘1’.

   * Ativa o *note modo de depuração de asyncio: 1fe8.  Por exemplo,
     *note asyncio: b. verifica as corrotinas que não foram aguardadas
     ('await') e as registra.

     Ele se comporta como se a variável de ambiente *note
     PYTHONASYNCIODEBUG: 1fe7. estivesse definida como ‘1’.

   * Verifica os argumentos 'encoding' e 'errors' para operações de
     codificação e decodificação de strings.  Exemplos: *note open():
     314, *note str.encode(): ac8. e *note bytes.decode(): ac9.

     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: 4ff. registra exceções ‘close()’.

   * Define o atributo *note dev_mode: 1d37. de *note sys.flags: 891.
     como ‘True’.

O Modo de Desenvolvimento do Python não ativa o módulo *note
tracemalloc: 105. por padrão porque o custo adicional (para desempenho e
memória) seria muito grande.  A ativação do módulo *note tracemalloc:
105. fornece informações adicionais sobre a origem de alguns erros.  Por
exemplo, *note ResourceWarning: 546. 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: 18c. remova as instruções *note assert: b56. nem
configure *note __debug__: 9d0. 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: 891.

Alterado na versão 3.8: O destrutor de *note io.IOBase: 4ff. 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: 546.:

     $ 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: 105. 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:
546. 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 — Unit testing framework,  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: 3e. 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: 3e. 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: 3e. 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: 3e.!  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’.

Adicionado na versão 3.13: A saída é colorizada por padrão e ela pode
ser *note controlada usando variáveis de ambiente: 1b7.

* 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<7>.
* Como ele funciona::
* Basic API::
* API do Unittest::
* Advanced API::
* Depuração::
* Soapbox::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 165c, ou proibi-lo passando ‘verbose=False’.  Em qualquer um
desses casos, *note sys.argv: 1460. não é examinado por *note testmod():
165c. (então passar ‘-v’ ou não não tem efeito).

Há também um atalho de linha de comando para executar *note testmod():
165c, veja a seção *note Uso na linha de comando: 43e6.

Para mais informações sobre *note testmod(): 165c, veja a seção *note
Basic API: 43e7.


File: python.info,  Node: Utilização comum Verificando exemplos em um arquivo texto,  Next: Uso na linha de comando<7>,  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():
43ea.:

     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(): 165c, *note testfile(): 43ea. 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(): 43ea. procura por arquivos no diretório do
módulo chamador.  Veja a seção *note Basic API: 43e7. para uma descrição
dos argumentos opcionais que podem ser usados para dizer para procurar
por arquivos em outros locais.

Assim como *note testmod(): 165c, a verbosidade de *note testfile():
43ea. 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():
43ea, veja a seção *note Uso na linha de comando: 43e6.

Para maiores informações em *note testfile(): 43ea, veja a seção *note
Basic API: 43e7.


File: python.info,  Node: Uso na linha de comando<7>,  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: 3e. 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(): 165c. 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(): 43ea.:

          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:
     1129.

     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<7>,  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: 43f9. ou a *note diretiva: 43fa. 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: 43fb. 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: 3e. 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(): 165c. ou
*note testfile(): 43ea.


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: 2ea. 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: 2ea.) 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: 165d. 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: 2ea. 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: 1504. 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: 18e.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: 235a. together and passed to various functions.
The names can also be used in *note doctest directives: 43fa, 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: 4402. 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: 4403. 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: 43f9. 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: 198. 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: 165d. 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: 1504. 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: 4406. 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: 3e. 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(): 4408. can be
     used when subclassing *note OutputChecker: 4409. or *note
     DocTestRunner: 440a. to create new options that are supported by
     your subclasses.  *note register_optionflag(): 4408. 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: 1129.
for an individual example.  Doctest directives are special Python
comments following an example’s source code:

     directive:             "#" "doctest:" *note directive_options: 440d.
     directive_options:     *note directive_option: 440e. ("," *note directive_option: 440e.)*
     directive_option:      *note on_or_off: 440f. *note directive_option_name: 4410.
     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: 3e. 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: 165d. 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(): 165c. and *note testfile(): 43ea. 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: 43e4.
and *note Utilização comum; Verificando exemplos em um arquivo texto:
43e8.

 -- 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():
     1654.: 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: 1460.

     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: 235a. of option flags.  See section *note Flags
     opcionais: 1129.

     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: 43fb.
     (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: 4414. in
     conjunction with *note testmod(): 165c. continues to get output for
     objects with no tests.  The 'exclude_empty' argument to the newer
     *note DocTestFinder: 18ec. constructor defaults to true.

     Optional arguments 'extraglobs', 'verbose', 'report',
     'optionflags', 'raise_on_error', and 'globs' are the same as for
     function *note testfile(): 43ea. 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(): 43ea. 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: 3e. provides two
functions that can be used to create *note unittest: 10c. test suites
from modules and text files containing doctests.  To integrate with
*note unittest: 10c. test discovery, include a *note load_tests: 4418.
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: fea.
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: fea.

     The returned *note unittest.TestSuite: fea. 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: 441a. 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: 1967. object.  The
     'setUp' function can access the test globals as the *note globs:
     441b. 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: 1967.
     object.  The 'tearDown' function can access the test globals as the
     *note globs: 441b. 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: 1129.  See function
     *note set_unittest_reportflags(): 441c. below for a better way to
     set reporting options.

     Optional argument 'parser' specifies a *note DocTestParser: 43fb.
     (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(): 4419.

 -- 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:
     fea.

     The returned *note unittest.TestSuite: fea. 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: 441a. 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__: 2208.

     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: 18ec.
     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(): 4419. above, but they
     are called for each docstring.

     This function uses the same search technique as *note testmod():
     165c.

     Alterado na versão 3.5: *note DocTestSuite(): fe9. returns an empty
     *note unittest.TestSuite: fea. if 'module' contains no docstrings
     instead of raising *note ValueError: 2ea.

Under the covers, *note DocTestSuite(): fe9. creates a *note
unittest.TestSuite: fea. out of ‘doctest.DocTestCase’ instances, and
‘DocTestCase’ is a subclass of *note unittest.TestCase: 2b2.
‘DocTestCase’ isn’t documented here (it’s an internal detail), but
studying its code can answer questions about the exact details of *note
unittest: 10c. integration.

Similarly, *note DocFileSuite(): 4419. creates a *note
unittest.TestSuite: fea. out of ‘doctest.DocFileCase’ instances, and
‘DocFileCase’ is a subclass of ‘DocTestCase’.

So both ways of creating a *note unittest.TestSuite: fea. run instances
of ‘DocTestCase’.  This is important for a subtle reason: when you run
*note doctest: 3e. 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: 10c. 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: 3e. also supports a notion of ‘doctest’
reporting flags specific to *note unittest: 10c. support, via this
function:

 -- Função: doctest.set_unittest_reportflags (flags)

     Set the *note doctest: 3e. reporting flags to use.

     Argument 'flags' takes the *note bitwise OR: 235a. of option flags.
     See section *note Flags opcionais: 1129.  Only “reporting flags”
     can be used.

     This is a module-global setting, and affects all future doctests
     run by module *note unittest: 10c.: 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:
     235a. into the option flags, and the option flags so augmented are
     passed to the *note DocTestRunner: 440a. 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: 10c. 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: 441f.: A single Python *note statement: 2a9d, paired
     with its expected output.

   * *note DocTest: 1967.: A collection of *note Example: 441f.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: 18ec.: Finds all docstrings in a given module,
     and uses a *note DocTestParser: 43fb. to create a *note DocTest:
     1967. from every docstring that contains interactive examples.

   * *note DocTestParser: 43fb.: Creates a *note DocTest: 1967. object
     from a string (such as an object’s docstring).

   * *note DocTestRunner: 440a.: Executes the examples in a *note
     DocTest: 1967, and uses an *note OutputChecker: 4409. to verify
     their output.

   * *note OutputChecker: 4409.: 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: 1967. defines the following attributes.  They are
     initialized by the constructor, and should not be modified
     directly.

      -- Atributo: examples

          A list of *note Example: 441f. 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: 441b. after
          the test is run.

      -- Atributo: name

          A string name identifying the *note DocTest: 1967.  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: 1967. 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: 4424. where this *note
          DocTest: 1967. 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: 441f. 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: 4429. 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(): a44.  *note exc_msg: 442a.
          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:
          440a.’s *note optionflags: 1129.).  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: 1967.s that
     are relevant to a given object, from its docstring and the
     docstrings of its contained objects.  *note DocTest: 1967.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:
     43fb. 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(): 19ae. will only examine the given object, and
     not any contained objects.

     If the optional argument 'exclude_empty' is false, then *note
     DocTestFinder.find(): 19ae. will include tests for objects with
     empty docstrings.

     *note DocTestFinder: 18ec. defines the following method:

      -- Método: find (obj[, name][, module][, globs][, extraglobs])

          Return a list of the *note DocTest: 1967.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: 1967.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: 1967. 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__: 2208, 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: 1967. object.

     *note DocTestParser: 43fb. 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: 1967. object.

          'globs', 'name', 'filename', and 'lineno' are attributes for
          the new ‘DocTest’ object.  See the documentation for *note
          DocTest: 1967. 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: 441f. 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: 441f.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: 1967.

     The comparison between expected outputs and actual outputs is done
     by an *note OutputChecker: 4409.  This comparison may be customized
     with a number of option flags; see section *note Flags opcionais:
     1129. 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(): 4e8.; 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(): 443b, *note report_success(): 443c, *note
     report_unexpected_exception(): 443d, and *note report_failure():
     443e.

     The optional keyword argument 'checker' specifies the *note
     OutputChecker: 4409. 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: 440a.’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: 1129.

     The test runner accumulates statistics.  The aggregated number of
     attempted, failed and skipped examples is also available via the
     *note tries: 443f, *note failures: 4440. and *note skips: 4e9.
     attributes.  The *note run(): 4e8. and *note summarize(): 4414.
     methods return a *note TestResults: 4436. instance.

     *note DocTestRunner: 440a. 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: 440a. 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(): 4e8.

      -- 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: 440a.
          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(): 4e8.

      -- Método: report_failure (out, test, example, got)

          Report that the given example failed.  This method is provided
          to allow subclasses of *note DocTestRunner: 440a. 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(): 4e8.

      -- 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: 440a. 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(): 88f.).  'test' is the
          test containing 'example'.  'out' is the output function that
          was passed to *note DocTestRunner.run(): 4e8.

      -- Método: run (test, compileflags=None, out=None,
               clear_globs=True)

          Run the examples in 'test' (a *note DocTest: 1967. object),
          and display the results using the writer function 'out'.
          Return a *note TestResults: 4436. 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: 440a.’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: 4436.
          instance.

          The optional 'verbose' argument controls how detailed the
          summary is.  If the verbosity is not specified, then the *note
          DocTestRunner: 440a.’s verbosity is used.

     *note DocTestParser: 43fb. 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: 4409.
     defines two methods: *note check_output(): 4443, which compares a
     given pair of outputs, and returns ‘True’ if they match; and *note
     output_difference(): 4444, which returns a string describing the
     differences between two outputs.

     *note OutputChecker: 4409. 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: 1129. 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: aa.

   * The *note DebugRunner: 4447. class is a subclass of *note
     DocTestRunner: 440a. 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: 10c. cases generated by *note DocTestSuite():
     fe9. support the *note debug(): 4448. method defined by *note
     unittest.TestCase: 2b2.

   * You can add a call to *note pdb.set_trace(): 271. 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(): 4449. 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(): 444a. 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: aa.

     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(): 15cb, 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(): 49c. call to
     *note pdb.run(): 444b.

 -- Função: doctest.debug_src (src, pm=False, globs=None)

     Debug the doctests in a string.

     This is like function *note debug(): 4448. 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(): 4448. 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: 4447. 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: 4447.’s docstring (which is a doctest!)  for more details:

 -- Classe: doctest.DebugRunner (checker=None, verbose=None,
          optionflags=0)

     A subclass of *note DocTestRunner: 440a. that raises an exception
     as soon as a failure is encountered.  If an unexpected exception
     occurs, an *note UnexpectedException: 444d. exception is raised,
     containing the test, the example, and the original exception.  If
     the output doesn’t match, then a *note DocTestFailure: 444e.
     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: 440a. in section *note
     Advanced API: 441e.

There are two exceptions that may be raised by *note DebugRunner: 4447.
instances:

 -- Exceção: doctest.DocTestFailure (test, example, got)

     An exception raised by *note DocTestRunner: 440a. 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: 444e. defines the following attributes:

 -- Atributo: DocTestFailure.test

     The *note DocTest: 1967. object that was being run when the example
     failed.

 -- Atributo: DocTestFailure.example

     The *note Example: 441f. that failed.

 -- Atributo: DocTestFailure.got

     The example’s actual output.

 -- Exceção: doctest.UnexpectedException (test, example, exc_info)

     An exception raised by *note DocTestRunner: 440a. 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: 444d. define os seguintes atributos:

 -- Atributo: UnexpectedException.test

     The *note DocTest: 1967. object that was being run when the example
     failed.

 -- Atributo: UnexpectedException.example

     The *note Example: 441f. that failed.

 -- Atributo: UnexpectedException.exc_info

     A tuple containing information about the unexpected exception, as
     returned by *note sys.exc_info(): 88f.


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: 3e. 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: 3e. 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(): 43ea. or *note
     DocFileSuite(): 4419.  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__: 43f6. 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 — Unit testing framework,  Next: unittest mock — mock object library,  Prev: doctest — Teste exemplos interativos de Python,  Up: Ferramentas de Desenvolvimento

5.26.5 ‘unittest’ — Unit testing framework
------------------------------------------

'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: 445a.)

O framework de testes unitários *note unittest: 10c. 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: 10c. 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: 10c. fornece uma classe base, *note TestCase: 2b2,
     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: 3e.

     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: 10c.

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<3>.
* 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.14/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<3>,  Up: unittest — Unit testing framework

5.26.5.1 Exemplo Básico
.......................

O módulo *note unittest: 10c. 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: 2b2.  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():
741. para verificar se há um resultado esperado; *note assertTrue():
73f. ou *note assertFalse(): 740. para verificar uma condição; ou *note
assertRaises(): 745. 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: b56. para que o runner de teste possa acumular todos os
resultados do teste e produzir um relatório.

Os métodos *note setUp(): 1534. e *note tearDown(): 1535. 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: 445d.

O bloco final mostra uma maneira simples de executar os testes.  A
função *note unittest.main(): 11d9. 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(): 11d9. 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:
10c. 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<3>,  Next: Test Discovery,  Prev: Exemplo Básico,  Up: unittest — Unit testing framework

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: 4460. é 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.

Adicionado na versão 3.14: A saída é colorizada por padrão e ela pode
ser *note controlada usando variáveis de ambiente: 1b7.

* 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<3>

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: bbb. comum.

     Veja *note Signal Handling: 4464. 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(): 1b44.; 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<3>,  Up: unittest — Unit testing framework

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: 1ef3. or
*note packages: 1f03. importable from the top-level directory of the
project (this means that their filenames must be valid *note
identifiers: 214b.).

O descobrimento de testes é implementado no *note TestLoader.discover():
11db, 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: 446c, *note -p: 446e. e *note -t: 4470. 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: 4472.

Alterado na versão 3.4: O descobrimento de testes possui suporte para
*note pacotes de espaço de nomes: 2b1.

Alterado na versão 3.11: Test discovery dropped the *note namespace
packages: 2b1. support.  It has been broken since Python 3.7.  Start
directory and its subdirectories containing tests must be regular
package that have ‘__init__.py’ file.

If the start directory is the dotted name of the package, the ancestor
packages can be namespace packages.

Alterado na versão 3.14: Test discovery supports *note namespace
package: 2b1. as start directory again.  To avoid scanning directories
unrelated to Python, tests are not searched in subdirectories that do
not contain ‘__init__.py’.


File: python.info,  Node: Organizando código teste,  Next: Reutilizando códigos de teste antigos,  Prev: Test Discovery,  Up: unittest — Unit testing framework

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: 10c, casos de teste são representados por
instâncias *note unittest.TestCase: 2b2.  Para criar seus próprios casos
de teste, você deve escrever subclasses de *note TestCase: 2b2. ou
utilizar *note FunctionTestCase: 19b8.

O código de teste em uma instância da classe *note TestCase: 2b2. 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: 2b2. 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: 445a. provided by the *note TestCase: 2b2. base class.  If the
test fails, an exception will be raised with an explanatory message, and
*note unittest: 10c. 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(): 1534, 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(): 1534. 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(): 1535.
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(): 1534. for bem sucedido, o método *note
tearDown(): 1535. será executado, independente do resultado do método de
teste.

Tal ambiente de trabalho do código de teste é chamado de 'definição de
contexto de teste'.  Uma nova instância TestCase é criada como uma única
definição de contexto de teste usada para executar cada método de teste.
Portanto, os métodos *note setUp(): 1534, *note tearDown(): 1535, e
‘__init__()’ serão chamados uma vez por teste.

É recomendado utilizar implementações de TestCase para agrupar testes de
acordo com as funcionalidades que eles testam.  *note unittest: 10c.
disponibiliza um mecanismo para isso: a 'suíte de testes', representada
pela classe *note TestSuite: fea. do módulo *note unittest: 10c.  Em
grande parte dos casos, chamar *note unittest.main(): 11d9. é 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 — Unit testing framework

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: 10c. sem converter cada função
antiga para uma subclasse de *note TestCase: 2b2.

Por isso, *note unittest: 10c. contém uma classe *note FunctionTestCase:
19b8.  Esta subclasse de *note TestCase: 2b2. 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: 19b8. poder ser
     utilizada para converter rapidamente um teste existente em um teste
     do módulo *note unittest: 10c, esta abordagem não é recomendada.
     Investir tempo para configurar corretamente uma subclasse de *note
     TestCase: 2b2. irá tornar futuras refatorações infinitamente mais
     fáceis.

Em alguns casos, os testes existentes podem ter sido escritos utilizando
o módulo *note doctest: 3e.  Se for o caso, *note doctest: 3e. contém a
classe ‘DocTestSuite’ que pode construir, automaticamente, instâncias
*note unittest.TestSuite: fea. a partir dos testes baseados em *note
doctest: 3e.


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 — Unit testing framework

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:
1363.

Ignorar um teste é simplesmente uma questão de utilizar o *note
decorador: 92f. *note skip(): 1c75. ou uma de suas variantes
condicionais, chamando *note TestCase.skipTest(): 4478. em um *note
setUp(): 1534. ou método de teste, ou levantando *note SkipTest: 11da.
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(): 1534. 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(): 4479.:

     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(): 1c75. 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(): 4478. 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(): 1534. ou *note
tearDown(): 1535. executados.  Classes ignoradas não terão seus métodos
*note setUpClass(): c38. ou *note tearDownClass(): 1532. executados.
Módulos ignorados não terão seus métodos *note setUpModule(): c37. ou
*note tearDownModule(): 1531. 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 — Unit testing framework

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(): 11d7.

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 — Unit testing framework

5.26.5.9 Classes e funções
..........................

Esta seção descreve de maneira aprofundada a API do módulo *note
unittest: 10c.

* 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: 2b2. representam unidades
     lógicas de teste no universo do *note unittest: 10c.  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: 2b2. irá executar um único
     método base: o método chamado 'methodName'.  Em muitos casos de uso
     da classe *note TestCase: 2b2, você não precisará modificar o
     'methodName' ou reimplementar o método ‘runTest()’ padrão.

     Alterado na versão 3.2: *note TestCase: 2b2. pode ser instanciada
     com sucesso sem fornecer um 'methodName'.  Isso torna mais fácil
     experimentar com *note TestCase: 2b2. a partir de um interpretador
     interativo.

     Instâncias *note TestCase: 2b2. 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: 8ad. ou *note SkipTest: 11da,
          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: 8ad. ou *note SkipTest: 11da. 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(): 1534. 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(): 488.:

               @classmethod
               def setUpClass(cls):
                   ...

          Veja *note Classes e Módulos de Definição de Contexto: 4481.
          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(): 488.:

               @classmethod
               def tearDownClass(cls):
                   ...

          Veja *note Classes e Módulos de Definição de Contexto: 4481.
          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: 1363, passado como 'result'.  Se
          'result' for omitido, ou definido como ‘None’, um objeto
          resultado temporário é criado (chamando o método *note
          defaultTestResult(): 4482.) e utilizado.  O objeto resultado é
          retornado para quem chamou o método *note run(): 1362.

          O mesmo efeito pode ser obtido ao chamar uma instância da
          classe *note TestCase: 2b2.

          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():
          1534, pula o teste em execução.  Veja *note Ignorando testes e
          falhas esperadas: 4477. 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: 11d8. 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: 2b2. 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): 741.                 ‘a == b’
                                                   
                                                                                     
     *note assertNotEqual(a, b): 742.              ‘a != b’
                                                   
                                                                                     
     *note assertTrue(x): 73f.                     ‘bool(x) is True’
                                                   
                                                                                     
     *note assertFalse(x): 740.                    ‘bool(x) is False’
                                                   
                                                                                     
     *note assertIs(a, b): 1536.                   ‘a is b’                          3.1
                                                                                     
                                                                                     
     *note assertIsNot(a, b): 1537.                ‘a is not b’                      3.1
                                                                                     
                                                                                     
     *note assertIsNone(x): 1486.                  ‘x is None’                       3.1
                                                                                     
                                                                                     
     *note assertIsNotNone(x): 1487.               ‘x is not None’                   3.1
                                                                                     
                                                                                     
     *note assertIn(a, b): 153f.                   ‘a in b’                          3.1
                                                                                     
                                                                                     
     *note assertNotIn(a, b): 1540.                ‘a not in b’                      3.1
                                                                                     
                                                                                     
     *note assertIsInstance(a, b): 1538.           ‘isinstance(a, b)’                3.2
                                                                                     
                                                                                     
     *note assertNotIsInstance(a, b): 1539.        ‘not isinstance(a, b)’            3.2
                                                                                     
                                                                                     
     *note assertIsSubclass(a, b): 2b5.            ‘issubclass(a, b)’                3.14
                                                                                     
                                                                                     
     *note assertNotIsSubclass(a, b): 2b6.         ‘not issubclass(a, b)’            3.14
                                                                                     

     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: 1530.).  Note que o argumento
     nomeado 'msg' pode ser passado para *note assertRaises(): 745,
     *note assertRaisesRegex(): 747, *note assertWarns(): 1360. e *note
     assertWarnsRegex(): 1361. 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(): 1543, 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:
          4483.)

          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():
          153e. 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(): 2ac.).  Para checar pelo tipo
          exato, use *note assertIs(type(obj), cls): 1536.

          Adicionado na versão 3.2.

      -- Método: assertIsSubclass (cls, superclass, msg=None)
      -- Método: assertNotIsSubclass (cls, superclass, msg=None)

          Test that 'cls' is (or is not) a subclass of 'superclass'
          (which can be a class or a tuple of classes, as supported by
          *note issubclass(): 9ba.).  To check for the exact type, use
          *note assertIs(cls, superclass): 1536.

          Adicionado na versão 3.14.

     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): 745.             ‘fun(*args, **kwds)’ levanta 'exc'
                                                                   
                                                                                                              
     *note assertRaisesRegex(exc, r, fun, *args, **kwds): 747.     ‘fun(*args, **kwds)’ levanta 'exc' e a     3.1
                                                                   mensagem casa com a expressão regular      
                                                                   'r'
                                                                   
                                                                                                              
     *note assertWarns(warn, fun, *args, **kwds): 1360.            ‘fun(*args, **kwds)’ levanta 'warn'        3.2
                                                                                                              
                                                                                                              
     *note assertWarnsRegex(warn, r, fun, *args, **kwds): 1361.    ‘fun(*args, **kwds)’ levanta 'warn' e a    3.2
                                                                   mensagem casa com a expressão regular      
                                                                   'r'
                                                                   
                                                                                                              
     *note assertLogs(logger, level): a4f.                         O bloco ‘with’ registra logs no 'logger'   Módulos para
                                                                   com pelo menos um nível 'level'            processamento
                                                                                                              de XML
                                                                                                              
                                                                                                              
     *note assertNoLogs(logger, level): a4e.                       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(): 745.  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(): 745. aceita o argumento nomeado adicional
          'msg'.

          O gerenciador de contexto irá armazenar o objeto exceção
          capturado no seu atributo ‘exception’.  Isso pode ser útil se
          a intenção for realizar testes adicionais na exceção
          levantada:

               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(): 745. como gerenciador de
          contexto.

          Alterado na versão 3.2: Adicionado o atributo ‘exception’.

          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(): 745. 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(): 1428.  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(): 747.

          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(): 1360.  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(): 1360. aceita o argumento nomeado adicional
          'msg'.

          O gerenciador de contexto irá armazenar o objeto de aviso
          capturado no atributo ‘warning’ e a linha de código fonte que
          acionou o aviso nos atributos ‘filename’ e ‘lineno’.  Isso
          pode ser útil se a intenção for executar verificações
          adicionais no aviso capturado:

               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(): 1360. 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(): 1428.  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: d3a. ou uma *note str: 169. 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: 2ff3.).  The default is *note logging.INFO:
          2fec.

          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: 11dc. que foram compatíveis com os
               critérios dados.

           -- Atributo: output

               Uma lista de objetos da classe *note str: 169. 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: d3a. ou um objeto da classe *note str: 169.
          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: 2ff3.).  The default is *note logging.INFO:
          2fec.

          Ao contrário de *note assertLogs(): a4f, 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): 743.         ‘round(a-b, 7) == 0’
                                                 
                                                                                      
     *note assertNotAlmostEqual(a, b): 744.      ‘round(a-b, 7) != 0’
                                                 
                                                                                      
     *note assertGreater(a, b): 153a.            ‘a > b’                              3.1
                                                                                      
                                                                                      
     *note assertGreaterEqual(a, b): 153b.       ‘a >= b’                             3.1
                                                                                      
                                                                                      
     *note assertLess(a, b): 153c.               ‘a < b’                              3.1
                                                                                      
                                                                                      
     *note assertLessEqual(a, b): 153d.          ‘a <= b’                             3.1
                                                                                      
                                                                                      
     *note assertRegex(s, r): 746.               ‘r.search(s)’                        3.1
                                                                                      
                                                                                      
     *note assertNotRegex(s, r): 748.            ‘not r.search(s)’                    3.2
                                                                                      
                                                                                      
     *note assertCountEqual(a, b): 1426.         'a' e 'b' possuem os mesmos          3.2
                                                 elementos na mesma quantidade,       
                                                 independente da sua ordem.
                                                 
                                                                                      
     *note assertStartsWith(a, b): 2b7.          ‘a.startswith(b)’                    3.14
                                                                                      
                                                                                      
     *note assertNotStartsWith(a, b): 2b8.       ‘not a.startswith(b)’                3.14
                                                                                      
                                                                                      
     *note assertEndsWith(a, b): 2b9.            ‘a.endswith(b)’                      3.14
                                                                                      
                                                                                      
     *note assertNotEndsWith(a, b): 2ba.         ‘not a.endswith(b)’                  3.14
                                                                                      
                                                                                      
     *note assertHasAttr(a, b): 2b3.             ‘hastattr(a, b)’                     3.14
                                                                                      
                                                                                      
     *note assertNotHasAttr(a, b): 2b4.          ‘not hastattr(a, b)’                 3.14
                                                                                      

      -- 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(): 14d6.) 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: 198.

          Alterado na versão 3.2: *note assertAlmostEqual(): 743.
          considera, automaticamente, objetos quase iguais que possuem a
          comparação de igualdade dada como verdadeira.  *note
          assertNotAlmostEqual(): 744. 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():
          1428.

          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(): 746.

          Adicionado na versão 3.2: *note assertNotRegex(): 748.

      -- 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.

      -- Método: assertStartsWith (s, prefix, msg=None)

      -- Método: assertNotStartsWith (s, prefix, msg=None)

          Test that the Unicode or byte string 's' starts (or does not
          start) with a 'prefix'.  'prefix' can also be a tuple of
          strings to try.

          Adicionado na versão 3.14.

      -- Método: assertEndsWith (s, suffix, msg=None)

      -- Método: assertNotEndsWith (s, suffix, msg=None)

          Test that the Unicode or byte string 's' ends (or does not
          end) with a 'suffix'.  'suffix' can also be a tuple of strings
          to try.

          Adicionado na versão 3.14.

      -- Método: assertHasAttr (obj, name, msg=None)

      -- Método: assertNotHasAttr (obj, name, msg=None)

          Test that the object 'obj' has (or has not) an attribute
          'name'.

          Adicionado na versão 3.14.

     The *note assertEqual(): 741. 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(): 1543.:

      -- Método: addTypeEqualityFunc (typeobj, function)

          Registers a type-specific method called by *note
          assertEqual(): 741. 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(): 741. does.  It
          must raise *note self.failureException(msg): 441a. 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(): 741. 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): 153e.       strings                           3.1
                                                                                     
                                                                                     
     *note assertSequenceEqual(a, b): 1485.        sequências                        3.1
                                                                                     
                                                                                     
     *note assertListEqual(a, b): 1483.            listas                            3.1
                                                                                     
                                                                                     
     *note assertTupleEqual(a, b): 1484.           tuplas                            3.1
                                                                                     
                                                                                     
     *note assertSetEqual(a, b): 1481.             sets ou frozensets                3.1
                                                                                     
                                                                                     
     *note assertDictEqual(a, b): 1482.            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(): 741.

          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():
          741, but it’s used to implement *note assertListEqual(): 1483.
          and *note assertTupleEqual(): 1484.

          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(): 741.

          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(): 741.

          Fails if either of 'first' or 'second' does not have a
          ‘set.difference()’ 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(): 741.

          Adicionado na versão 3.1.

     Finally the *note TestCase: 2b2. 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: 8ad.

      -- 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(): 1485. (including all the
          sequence comparison methods that delegate to it), *note
          assertDictEqual(): 1482. and *note assertMultiLineEqual():
          153e.

          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: 2b2. 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(): 1362. method).

          For *note TestCase: 2b2. instances, this will always be an
          instance of *note TestResult: 1363.; subclasses of *note
          TestCase: 2b2. 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: 749. in Python 3.2.

      -- Método: addCleanup (function, /, *args, **kwargs)

          Add a function to be called after *note tearDown(): 1535. 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(): c68. when they are added.

          If *note setUp(): 1534. fails, meaning that *note tearDown():
          1535. 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: 1e0.  If successful,
          also add its *note __exit__(): 14fc. method as a cleanup
          function by *note addCleanup(): c68. and return the result of
          the *note __enter__(): 7d9. method.

          Adicionado na versão 3.11.

      -- Método: doCleanups ()

          This method is called unconditionally after *note tearDown():
          1535, or after *note setUp(): 1534. if *note setUp(): 1534.
          raises an exception.

          It is responsible for calling all the cleanup functions added
          by *note addCleanup(): c68.  If you need cleanup functions to
          be called 'prior' to *note tearDown(): 1535. then you can call
          *note doCleanups(): 1533. yourself.

          *note doCleanups(): 1533. 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(): 1532.
          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(): c36. when they
          are added.

          If *note setUpClass(): c38. fails, meaning that *note
          tearDownClass(): 1532. 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: 1e0.  If successful,
          also add its *note __exit__(): 14fc. method as a cleanup
          function by *note addClassCleanup(): c36. and return the
          result of the *note __enter__(): 7d9. method.

          Adicionado na versão 3.11.

      -- Método: classmethod doClassCleanups ()

          This method is called unconditionally after *note
          tearDownClass(): 1532, or after *note setUpClass(): c38. if
          *note setUpClass(): c38. raises an exception.

          It is responsible for calling all the cleanup functions added
          by *note addClassCleanup(): c36.  If you need cleanup
          functions to be called 'prior' to *note tearDownClass(): 1532.
          then you can call *note doClassCleanups(): 448b. yourself.

          *note doClassCleanups(): 448b. 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: 2b2. and also
     accepts coroutines as test functions.

     Adicionado na versão 3.8.

      -- Atributo: loop_factory

          The 'loop_factory' passed to *note asyncio.Runner: 2f3.
          Override in subclasses with *note asyncio.EventLoop: 19a6. 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 ‘setUp()’.  This is called immediately before calling
          the test method; other than *note AssertionError: 8ad. or
          *note SkipTest: 11da, 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
          ‘tearDown()’.  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: 8ad. or *note
          SkipTest: 11da, 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(): 448d. 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: 7e5.
          If successful, also add its *note __aexit__(): 18e5. method as
          a cleanup function by *note addAsyncCleanup(): 448f. and
          return the result of the *note __aenter__(): 22b2. 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: 1363. object passed as
          'result'.  If 'result' is omitted or ‘None’, a temporary
          result object is created (by calling the ‘defaultTestResult()’
          method) and used.  The result object is returned to *note
          run(): 4490.’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: 2b2.
     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: 10c.-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: fea. 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: fea. objects behave much like *note TestCase: 2b2.
     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: fea. instances:

      -- Método: addTest (test)

          Add a *note TestCase: 2b2. or *note TestSuite: fea. to the
          suite.

      -- Método: addTests (tests)

          Add all the tests from an iterable of *note TestCase: 2b2. and
          *note TestSuite: fea. instances to this test suite.

          This is equivalent to iterating over 'tests', calling *note
          addTest(): 4493. for each element.

     *note TestSuite: fea. shares the following methods with *note
     TestCase: 2b2.:

      -- 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(): 1362, *note TestSuite.run():
          4495. 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: fea. 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(): 4495. must
          be the same for each call iteration.  After *note
          TestSuite.run(): 4495, 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: fea. 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: fea. held references to each *note TestCase: 2b2.
          after *note TestSuite.run(): 4495.  Subclasses can restore
          that behavior by overriding ‘TestSuite._removeTestAtIndex()’.

     In the typical usage of a *note TestSuite: fea. object, the *note
     run(): 4495. 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: 58c. 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: 10c. module provides an
     instance that can be shared as *note unittest.defaultTestLoader:
     4499.  Using a subclass or instance, however, allows customization
     of some configurable properties.

     Objetos da classe *note TestLoader: 58c. 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: 58c. possuem os seguintes
     métodos:

      -- Método: loadTestsFromTestCase (testCaseClass)

          Return a suite of all test cases contained in the *note
          TestCase: 2b2.-derived ‘testCaseClass’.

          A test case instance is created for each method named by *note
          getTestCaseNames(): 58f.  By default these are the method
          names beginning with ‘test’.  If *note getTestCaseNames():
          58f. 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: 2b2. and creates an instance of the class
          for each test method defined for the class.

               Nota: While using a hierarchy of *note TestCase:
               2b2.-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: 4472.  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: fea. instance, or a
          callable object which returns a *note TestCase: 2b2. or *note
          TestSuite: fea. 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: 2b2.-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: 64f. or *note
          AttributeError: 5e4. 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(): 1541, 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:
          2b2.

      -- 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: 11da. 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:
          11da. on import are recorded as skips, not errors.

          'start_dir' can be a *note namespace packages: 2b1.

          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: 2b1.  It has been broken since Python 3.7,
          and Python 3.11 officially removes it.

          Alterado na versão 3.13: 'top_level_dir' is only stored for
          the duration of 'discover' call.

          Alterado na versão 3.14: 'start_dir' can once again be a *note
          namespace package: 2b1.

     The following attributes of a *note TestLoader: 58c. 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(): 58f. and all the
          ‘loadTestsFrom*’ methods.

      -- Atributo: sortTestMethodsUsing

          Function to be used to compare method names when sorting them
          in *note getTestCaseNames(): 58f. 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: fea. 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(): 1b44, 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: 1363. object stores the results of a set of
     tests.  The *note TestCase: 2b2. and *note TestSuite: fea. 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: 10c. may want
     access to the *note TestResult: 1363. object generated by running a
     set of tests for reporting purposes; a *note TestResult: 1363.
     instance is returned by the ‘TestRunner.run()’ method for this
     purpose.

     *note TestResult: 1363. 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: 2b2. 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: 2b2. instances
          and strings holding formatted tracebacks.  Each tuple
          represents a test where a failure was explicitly signalled
          using the *note assert* methods: 445a.

      -- Atributo: skipped

          A list containing 2-tuples of *note TestCase: 2b2. 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: 2b2. 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: 2b2. 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(): 44a4.

      -- 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(): 44a7. and *note stopTest():
          44a8. 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(): 44a4. 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: 44a2. from tests marked with the
          *note expectedFailure(): 4479. 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:
          44a3. 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:
          19ee. 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: 1363. 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(): 88f.: ‘(type, value, traceback)’.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note errors: 449e.
          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(): 88f.:
          ‘(type, value, traceback)’.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note failures: 449f.
          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: 44a0. attribute.

      -- Método: addExpectedFailure (test, err)

          Called when the test case 'test' fails or errors, but was
          marked with the *note expectedFailure(): 4479. decorator.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note expectedFailures:
          44a1. 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(): 4479. decorator, but succeeded.

          The default implementation appends the test to the instance’s
          *note unexpectedSuccesses: 44a2. 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: 2b2. instance describing the subtest.

          If 'outcome' is *note None: 87a, the subtest succeeded.
          Otherwise, it failed with an exception where 'outcome' is a
          tuple of the form returned by *note sys.exc_info(): 88f.:
          ‘(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: 1363. used by the
     *note TextTestRunner: 19ee.  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: 58c. class intended to be shared.
     If no customization of the *note TestLoader: 58c. 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: b29.
     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: 1a3, *note
     PendingDeprecationWarning: abc, *note ResourceWarning: 546. and
     *note ImportWarning: 713. even if they are *note ignored by
     default: 44af.  This behavior can be overridden using Python’s
     ‘-Wd’ or ‘-Wa’ options (see *note Warning control: 1fd6.) 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: b29. 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(): 44b1.  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: 749. 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: fea.
          or *note TestCase: 2b2. instance.  A *note TestResult: 1363.
          is created by calling *note _makeResult(): 44b0. 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: 1460.
     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(): 276. 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: 58c.
     instance, and defaults to *note defaultTestLoader: 4499.

     ‘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(): 276.:

          >>> 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: 4461.

     The 'warnings' argument specifies the *note warning filter: 1b1.
     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: 1fd6.), 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: 1363.

     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(): 58d. 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: fea.

'loader' is the instance of *note TestLoader: 58c. 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: 2b2. 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(): 11db, 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: fea. 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 — Unit testing framework

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

Definições de contexto em um nível de classe e módulo são implementadas
na classe *note TestSuite: fea.  Quando a suíte de testes encontrar um
teste de uma nova classe, o método ‘tearDownClass()’ da classe anterior
(se houver alguma) é chamado logo antes da chamada do método
‘setUpClass()’ da nova classe.

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: 2b2.) 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: 2b2. 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: 11da. 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: 11da. 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(): 1531. 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(): c35. when they are added.

     If *note setUpModule(): c37. fails, meaning that *note
     tearDownModule(): 1531. 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: 1e0.  If successful, also
     add its *note __exit__(): 14fc. method as a cleanup function by
     *note addModuleCleanup(): c35. and return the result of the *note
     __enter__(): 7d9. method.

     Adicionado na versão 3.11.

 -- Função: unittest.doModuleCleanups ()

     This function is called unconditionally after *note
     tearDownModule(): 1531, or after *note setUpModule(): c37. if *note
     setUpModule(): c37. raises an exception.

     It is responsible for calling all the cleanup functions added by
     *note addModuleCleanup(): c35.  If you need cleanup functions to be
     called 'prior' to *note tearDownModule(): 1531. then you can call
     *note doModuleCleanups(): 1ae0. yourself.

     *note doModuleCleanups(): 1ae0. 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 — Unit testing framework

5.26.5.17 Tratamento de sinal
.............................

Adicionado na versão 3.2.

The *note -c/-catch: 152d. command-line option to unittest, along with
the ‘catchbreak’ parameter to *note unittest.main(): 11d9, 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: bbb. 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: 252. handler.
If the ‘unittest’ handler is called but 'isn’t' the installed *note
signal.SIGINT: 252. 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(): 152e.
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: 252. is
     received (usually in response to the user pressing control-c) all
     registered results have *note stop(): 44a4. called.

 -- Função: unittest.registerResult (result)

     Register a *note TestResult: 1363. 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: 1363. 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(): 44a4. 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 — Unit testing framework,  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: 10d. é 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: 10d. fornece uma classe core *note Mock: c34.
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(): 1088. 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: d8d. para criar objetos únicos.
Veja o *note guia rápido: 44ba. para alguns exemplos de como usar *note
Mock: c34, *note MagicMock: 1085. e *note patch(): 1088.

Mock foi projetado para uso com *note unittest: 10c. 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: 10d. 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.14/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: c34. e *note MagicMock: 1085. 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: 44bb. 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: 5e4.

O gerenciador de contexto / decorador *note patch(): 1088. 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(): 1088, é 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: 44bc.

Assim como um decorador *note patch(): 1088. 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(): 18bb. 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: 44bd. de
Python.  A maneira mais fácil de usar métodos mágicos é com a classe
*note MagicMock: 1085.  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: 1085. é 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: 44be.  A especificação automática pode ser
feita por meio do argumento 'autospec' para fazer patch ou pela função
*note create_autospec(): 1886.  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(): 1886. 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: c34. é 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: 1085. é uma subclasse de *note Mock: c34. 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: 44c0. e *note
NonCallableMagicMock: 44c1.

The *note patch(): 1088. decorators makes it easy to temporarily replace
classes in a particular module with a *note Mock: c34. object.  By
default *note patch(): 1088. will create a *note MagicMock: 1085. for
you.  You can specify an alternative class of *note Mock: c34. using the
'new_callable' argument to *note patch(): 1088.

 -- 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: c34. object.  *note Mock: c34. 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:
          5e4.

          If 'spec' is an object (rather than a list of strings) then
          *note __class__: 169b. returns the class of the spec object.
          This allows mocks to pass *note isinstance(): 2ac. 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: 5e4.

        * 'side_effect': A function to be called whenever the Mock is
          called.  See the *note side_effect: 44bb. 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: 44c2, 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: 44c3. attribute.

        * 'unsafe': By default, accessing any attribute whose name
          starts with 'assert', 'assret', 'asert', 'aseert' or 'assrt'
          will raise an *note AttributeError: 5e4.  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: 5e4.).

          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(): 44c4. 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(): 1cb9. and *note
          assert_called_once_with(): 44c5. that only pass if the call is
          the most recent one, and in the case of *note
          assert_called_once_with(): 44c5. 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: 44c7. 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: 44c7.

               >>> 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: 44c3.:

               >>> 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: 44bb.:

               >>> 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(): eea. 'doesn’t' clear the *note
          return_value: 44c3, *note side_effect: 44bb. 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: 44c9. and *note mock_calls: 44c7.
          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(): 44c4. exists to make it easier to do
          configuration after the mock has been created.

      -- Método: __dir__ ()

          *note Mock: c34. 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: 44cb. 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: 44c3. 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: 44c2. singleton the call to the mock will then
          return whatever the function returns.  If the function returns
          *note DEFAULT: 44c2. then the mock will return its normal
          value (from the *note return_value: 44c3.).

          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: 44c2.
          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: 44bb. 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: 44bb. 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: 44bb. 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: 1c20, along with members of the lists *note
          call_args_list: 44cf, *note method_calls: 44c9. and *note
          mock_calls: 44c7. are *note call: 1c6a. 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: 44d0.

          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: 1c6a. object can be used for
          conveniently constructing lists of calls to compare with *note
          call_args_list: 44cf.

               >>> 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: 44cf. are *note call: 1c6a.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 44d0.

      -- 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: 44c9. are *note call: 1c6a.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 44d0.

      -- Atributo: mock_calls

          *note mock_calls: 44c7. 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: 44c7. are *note call: 1c6a.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 44d0.

               Nota: The way *note mock_calls: 44c7. 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(): 2ac. 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(): 2ac. 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: c34.  The constructor
     parameters have the same meaning of *note Mock: c34, 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(): 2ac. tests:

     >>> mock = Mock(spec=SomeClass)
     >>> isinstance(mock, SomeClass)
     True
     >>> mock = Mock(spec_set=SomeClass())
     >>> isinstance(mock, SomeClass)
     True

The *note Mock: c34. classes have support for mocking magic methods.
See *note magic methods: 44bd. for the full details.

The mock classes and the *note patch(): 1088. decorators all take
arbitrary keyword arguments for configuration.  For the *note patch():
1088. 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(): 1cb9, *note
assert_called_once_with(): 44c5, *note assert_has_calls(): 195f. and
*note assert_any_call(): 44c6.  When *note Especificação automática:
44be, 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: 4ad, or other *note
     descriptor: 17e7, on a class.  *note PropertyMock: 44d2. provides
     *note __get__(): 16d6. and *note __set__(): 224c. methods so you
     can specify a return value when it is fetched.

     Fetching a *note PropertyMock: 44d2. 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: 44d2. 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: 5e4. is raised by *note
     PropertyMock: 44d2, it will be interpreted as a missing descriptor
     and *note __getattr__(): 6ef. 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__(): 6ef. 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: 1085.  The *note
     AsyncMock: c33. object will behave so the object is recognized as
     an async function, and the result of a call is an awaitable.

          >>> mock = AsyncMock()
          >>> inspect.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: c33. object.

     Setting the 'spec' of a *note Mock: c34. or *note MagicMock: 1085.
     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: c34, *note MagicMock: 1085, or
     *note AsyncMock: c33. to a class with asynchronous and synchronous
     functions will automatically detect the synchronous functions and
     set them as *note MagicMock: 1085. (if the parent mock is *note
     AsyncMock: c33. or *note MagicMock: 1085.) or *note Mock: c34. (if
     the parent mock is *note Mock: c34.).  All asynchronous functions
     will be *note AsyncMock: c33.

          >>> 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: 1c1f. 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: 1c1f.

               >>> 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(): eea.  Also sets *note
          await_count: 44db. to 0, *note await_args: 44dc. to None, and
          clears the *note await_args_list: 1c1f.

      -- 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: 1c20.

               >>> 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: 1085. for multithreading tests.  The
     *note ThreadingMock: 44dd. 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: 44de. attribute,
     which defaults to blocking (‘None’).

     You can configure the global default timeout by setting *note
     ThreadingMock.DEFAULT_TIMEOUT: 44de.

      -- 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: 8ad. 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: 8ad. 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: 44dd.

     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: 5e4.  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: 44bd.


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: 44c3. 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: 1c20. and *note call_args_list: 44cf.

If *note side_effect: 44bb. 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: 44bb. 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: 44bb. 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: 44c3. from inside *note side_effect:
44bb, or return *note DEFAULT: 44c2.:

     >>> 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: 44bb, 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: 44bb. 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: de9. 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(): 6ee.
call, or raise an *note AttributeError: 5e4. 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: 5e4.

     >>> 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: c34. 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(): 44c4.:

     >>> 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: 44c9. and *note mock_calls: 44c7.
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(): 1088. are automatically given
names.  To attach mocks that have names to a parent you use the *note
attach_mock(): 18a8. 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: 44e8.

 -- Função: unittest.mock.patch (target, new=DEFAULT, spec=None,
          create=False, spec_set=None, autospec=None, new_callable=None,
          **kwargs)

     *note patch(): 1088. 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: c33. if the patched object is an async function or a
     *note MagicMock: 1085. otherwise.  If *note patch(): 1088. 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():
     1088. 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(): 1088. 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: 1085. 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: c33. is used for async functions and *note
     MagicMock: 1085. 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: 198. 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(): 1886. function and *note
     Especificação automática: 44be.

     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(): 1088. 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: 2b2. 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(): 1088. finds tests by looking for
     method names that start with ‘patch.TEST_PREFIX’.  By default this
     is ‘'test'’, which matches the way *note unittest: 10c. 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(): 1088. is
     creating a mock object for you.

     *note patch(): 1088. takes arbitrary keyword arguments.  These will
     be passed to *note AsyncMock: c33. if the patched object is
     asynchronous, to *note MagicMock: 1085. 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(): 1088. 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: 1085.
'instance'.  If the class is instantiated in the code under test then it
will be the *note return_value: 44c3. of the mock that will be used.

If the class is instantiated multiple times you could use *note
side_effect: 44bb. 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: 44c3.  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(): 1088. 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: 1085. for the created
mock.  For example, if you wanted a *note NonCallableMock: 44c0. 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: 111f. 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(): 1088. 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: 44c3. and *note side_effect: 44bb, 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(): 1088. 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: 5e4.:

     >>> @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(): 1088. 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(): 1088. now returns an *note
AsyncMock: c33. 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(): 185c. 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(): 1088.  Like *note patch(): 1088, *note
     patch.object(): 185c. takes arbitrary keyword arguments for
     configuring the mock object it creates.

     When used as a class decorator *note patch.object(): 185c. honours
     ‘patch.TEST_PREFIX’ for choosing which methods to wrap.

You can either call *note patch.object(): 185c. 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(): 185c.
have the same meaning as they do for *note patch(): 1088.


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, where the restored
     dictionary is a copy of the dictionary as it was before 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(): 18bb. can also be called with arbitrary keyword
     arguments to set values in the dictionary.

     Alterado na versão 3.8: *note patch.dict(): 18bb. now returns the
     patched dictionary when used as a context manager.

*note patch.dict(): 18bb. 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(): 18bb. 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:
44eb.

*note patch.dict(): 18bb. 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(): 18bb. 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(): 18bb. 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__(): 581, *note
__setitem__(): 14c7, *note __delitem__(): 14c8. and either *note
__iter__(): 1f5f. or *note __contains__(): 15ab.

     >>> 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: 44c2. as the value if you want *note
     patch.multiple(): 44ed. 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(): 44ed. is used
     as a context manager.

     *note patch.multiple(): 44ed. 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(): 1088.  These arguments will be applied to 'all'
     patches done by *note patch.multiple(): 44ed.

     When used as a class decorator *note patch.multiple(): 44ed.
     honours ‘patch.TEST_PREFIX’ for choosing which methods to wrap.

If you want *note patch.multiple(): 44ed. to create mocks for you, then
you can use *note DEFAULT: 44c2. as the value.  If you use *note
patch.multiple(): 44ed. 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(): 44ed. can be nested with other ‘patch’
decorators, but put arguments passed by keyword 'after' any of the
standard arguments created by *note patch(): 1088.:

     >>> @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(): 44ed. 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(): 1088, *note patch.object(): 185c. or
*note patch.dict(): 18bb. 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(): 1088. 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: 2b2.:

     >>> 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(): c68. 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(): 44f0.

 -- 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(): 21d6.:

     >>> @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: 58c. 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(): 1088. 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(): 1088.  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(): 1088. 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: 44e7. and *note patch.object: 44e9. 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: c34. supports mocking the Python protocol methods, also
known as *note “magic methods”: 44f8.  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: 186. 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: 44c9, but
they are recorded in *note mock_calls: 44c7.

     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: 5e4.

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__(): e40.

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: 1085. e *note
NonCallableMagicMock: 44c1.

 -- Classe: unittest.mock.MagicMock (*args, **kw)

     ‘MagicMock’ is a subclass of *note Mock: c34. with default
     implementations of most of the *note magic methods: 44f8.  You can
     use ‘MagicMock’ without having to configure the magic methods
     yourself.

     The constructor parameters have the same meaning as for *note Mock:
     c34.

     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: 1085.

     The constructor parameters have the same meaning as for *note
     MagicMock: 1085, 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: 1085. 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: 1a2.

   * ‘__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: 44bb. 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: 29. or *note pickled:
     ab.

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: d8d.
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: 44c2. object is a pre-created sentinel (actually
     ‘sentinel.DEFAULT’).  It can be used by *note side_effect: 44bb.
     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(): 1c6a. is a helper object for making simpler
     assertions, for comparing with *note call_args: 1c20, *note
     call_args_list: 44cf, *note mock_calls: 44c7. and *note
     method_calls: 44c9.  *note call(): 1c6a. can also be used with
     *note assert_has_calls(): 195f.

          >>> 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(): 44fe. 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: 44c7. on a mock.
Manually constructing the sequence of calls can be tedious.

*note call_list(): 44fe. 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: 1c20, *note Mock.call_args_list: 44cf. and *note
Mock.mock_calls: 44c7. attributes can be introspected to get at the
individual arguments they contain.

The ‘call’ objects in *note Mock.call_args: 1c20. and *note
Mock.call_args_list: 44cf. are two-tuples of (positional args, keyword
args) whereas the ‘call’ objects in *note Mock.mock_calls: 44c7, 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:
     5e4.

     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(): 1886. also takes arbitrary keyword
     arguments that are passed to the constructor of the created mock.

See *note Especificação automática: 44be. for examples of how to use
auto-speccing with *note create_autospec(): 1886. and the 'autospec'
argument to *note patch(): 1088.

Alterado na versão 3.8: *note create_autospec(): 1886. now returns an
*note AsyncMock: c33. 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: 1c20. 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(): 1cb9. and *note
assert_called_once_with(): 44c5. 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: 1c68. can also be used in comparisons with call lists like
*note mock_calls: 44c7.:

     >>> m = MagicMock(return_value=None)
     >>> m(1)
     >>> m(1, 2)
     >>> m(object())
     >>> m.mock_calls == [call(1), call(1, 2), ANY]
     True

*note ANY: 1c68. 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: 44cb. is a module level variable that controls the way
mock objects respond to *note dir(): 839.  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: c34. rather than the
thing being mocked) underscore and double underscore prefixed attributes
have been filtered from the result of calling *note dir(): 839. on a
*note Mock: c34.  If you dislike this behaviour you can switch it off by
setting the module level switch *note FILTER_DIR: 44cb.:

     >>> 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: 44cb.


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(): 314.  It works for *note open(): 314. 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: 1085. 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(): 1012, *note
     readline(): 257b, and *note readlines(): 2636. 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(): 257b. and *note
     readlines(): 2636. support.  The mock of *note read(): 1012.
     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__(): 1f5f. to
     implementation so that iteration (such as in for loops) correctly
     consumes 'read_data'.

Using *note open(): 314. 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(): 314. it
is the 'returned object' that is used as a context manager (and has
*note __enter__(): 7d9. and *note __exit__(): 14fc. called).

Mocking context managers with a *note MagicMock: 1085. 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: 198. if they are called incorrectly.

Before I explain how auto-speccing works, here’s why it is needed.

*note Mock: c34. 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: 10d. 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(): 1088. / *note patch.object(): 185c. or use the *note
create_autospec(): 1886. function to create a mock with a spec.  If you
use the ‘autospec=True’ argument to *note patch(): 1088. 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(): 1088. calls and then be protected against bugs
due to typos and api changes.

As well as using 'autospec' through *note patch(): 1088. there is a
*note create_autospec(): 1886. 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__(): 8b4. 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__():
8b4.  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(): 1088.
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(): 839. - 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: 44bb.

  2. *note return_value: 44c3.

  3. 'wraps'

If all three are set, mock will return the value from *note side_effect:
44bb, ignoring *note return_value: 44c3. 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: 44bb, if you
reassign its value back to ‘None’, the order of precedence will be
checked between *note return_value: 44c3. and the wrapped object,
ignoring *note side_effect: 44bb.

     >>> order_mock.get_value.side_effect = None
     >>> order_mock.get_value()
     'second'

If the value being returned by *note side_effect: 44bb. is *note
DEFAULT: 44c2, 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: c34. wraps an object, the default value of *note
return_value: 44c3. will be *note DEFAULT: 44c2.

     >>> 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: 44bb. 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: c34. 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: c34. e
     *note MagicMock: 1085. 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: 44cd. é
definido como ‘True’.  Mais importante, podemos usar o método *note
assert_called_with(): 1cb9. ou *note assert_called_once_with(): 44c5.
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():
1cb9. 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():
1088. 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: 44c3.

     >>> 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: 44c7. 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: 1c6a. 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: 1c6a. 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: 44bb.  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: f6b. through ‘__aiter__’.  The *note
return_value: 44c3. 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: 807. 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: c34. 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: 44be.

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(): 11dd. is used to patch *note open(): 314. method.
*note side_effect: 44bb. 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(): 1088, é 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: 44bc.

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(): 1088,
*note patch.object(): 185c. and *note patch.dict(): 18bb.  ‘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: 13.) then use
*note patch(): 1088. instead of *note patch.object(): 185c.:

     >>> 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(): 1088. with
only one argument (or *note patch.object(): 185c. 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(): 18bb. 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(): 1088. 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: 44c3. 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: c34. 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(): 314. 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():
44c4. 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: 44c7. 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(): 44fe. 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
.........................

In some tests I wanted to mock out a call to *note
datetime.date.today(): 16b8. to return a known date, but I didn’t want
to prevent the code under test from creating new date objects.
Unfortunately *note datetime.date: 1f9. is written in C, and so I
couldn’t just monkey-patch out the static *note datetime.date.today():
16b8. method.

I found a simple way of doing this that involved effectively wrapping
the date class with a mock, but passing through calls to the constructor
to the real class (and returning real instances).

The *note patch decorator: 1088. is used here to mock out the ‘date’
class in the module under test.  The *note side_effect: 44bb. 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: 1f9. globally, we patch
‘date’ in the module that 'uses' it.  See *note where to patch: 44bc.

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:
bb8. 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__(): 1f5f, so we can mock this
using a *note MagicMock: 1085.

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: 24c.), 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():
1088. (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: 44ef.  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(): c68. 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
.................................

Whilst writing tests today I needed to patch an 'unbound method'
(patching the method on the class rather than on the instance).  I
needed self to be passed in as the first argument because I want to make
asserts about which objects were calling this particular method.  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(): 1088. 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 I wanted:

     >>> 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(): 44c5. method that also asserts that the *note
call_count: 44ce. 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: 44cf.:

     >>> 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: 1c6a. 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: 44bb.
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: c34. or
*note MagicMock: 1085. that copies (using *note copy.deepcopy(): d59.)
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: 44ef. 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: 1085, which will behave like a
dictionary, and using *note side_effect: 44bb. to delegate dictionary
access to a real underlying dictionary that is under our control.

When the *note __getitem__(): 581. and *note __setitem__(): 14c7.
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: 44cf. 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: 5dd. 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:
c34.  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: 17ab.
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(): 18bb. to 'temporarily' put a
mock in place in *note sys.modules: 17ab.  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: 17ab.

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: c34. class allows you to track the 'order' of method
calls on your mock objects through the *note method_calls: 44c9.
attribute.  This doesn’t allow you to track the order of calls between
separate mock objects, however we can use *note mock_calls: 44c7. 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(): 18a8.
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(): 195f. method.  This takes a list of calls
(constructed with the *note call: 1c6a. object).  If that sequence of
calls are in *note mock_calls: 44c7. 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: 1c68. 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(): 1cb9. 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: 8ad. 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: 8ad. 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: e8. é 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: e8. contém todos os testes de regressão do Python,
bem como os módulos *note test.support: ea. e *note test.regrtest: e9.
*note test.support: ea. é utilizado para aprimorar seus testes enquanto
o *note test.regrtest: e9. direciona a suite de testes.

Cada módulo no pacote *note test: e8. 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: 10c. ou *note
doctest: 3e.  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: 10c.

     Escrevendo testes de regressão PyUnit.

Módulo *note doctest: 3e.

     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: 10c. 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: e9, por conta própria, como um script que
suporte o *note unittest: 10c. 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: 2b2. 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: 2b2.

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: e8. pode ser executado como um script para conduzir
o conjunto de testes de regressão do Python, graças à opção *note -m:
23b.: ‘python -m test’.  Nos bastidores, ele usa *note test.regrtest:
e9.; 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: e8.  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: e8. 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: e8. 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.

Adicionado na versão 3.14: A saída é colorizada por padrão e ela pode
ser *note controlada usando variáveis de ambiente: 1b7.


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: ea. fornece suporte para a suíte de testes
de regressão do Python.

     Nota: *note test.support: ea. 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: 10c.
     e métodos de asserção de *note unittest.TestCase: 2b2.

 -- Exceção: test.support.ResourceDenied

     Subclasse de *note unittest.SkipTest: 11da.  Levantada quando um
     recurso (como uma conexão de rede) não está disponível.  Levantada
     pela função *note requires(): 4530.

O módulo *note test.support: ea. 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: e9.

 -- Dado: test.support.is_jython

     ‘True’ se o interpretador em execução for Jython.

 -- Dado: test.support.is_android

     ‘True’ if ‘sys.platform’ is ‘android’.

 -- Dado: test.support.is_emscripten

     ‘True’ if ‘sys.platform’ is ‘emscripten’.

 -- Dado: test.support.is_wasi

     ‘True’ if ‘sys.platform’ is ‘wasi’.

 -- Dado: test.support.is_apple_mobile

     ‘True’ if ‘sys.platform’ is ‘ios’, ‘tvos’, or ‘watchos’.

 -- Dado: test.support.is_apple

     ‘True’ if ‘sys.platform’ is ‘darwin’ or ‘is_apple_mobile’ is
     ‘True’.

 -- 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(): f97, *note recv(): f98. e *note send(): f9b. de *note
     socket.socket: f95.

     Seu valor padrão é 5 segundos.

     Veja também *note INTERNET_TIMEOUT: 1c54.

 -- 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: 1c54.
     não deve marcar um teste como falhado, mas ignorá-lo: veja *note
     transient_internet(): 4539.

     Seu valor padrão é 1 minuto.

     Veja também *note LOOPBACK_TIMEOUT: 1c53.

 -- 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: 1b52. começar a falhar
     aleatoriamente em buildbots lentos, use *note LONG_TIMEOUT: 1c55.

     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: 1c53, *note INTERNET_TIMEOUT:
     1c54. e *note SHORT_TIMEOUT: 1b52.

 -- 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: 179c.
     definida, ou seja, se o Python foi *note criado no modo de
     depuração: 503.

     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: ea.

 -- 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: 13c1. para grandes testes de memória.

 -- Dado: test.support.max_memuse

     Set by *note set_memlimit(): 4543. as the memory limit for big
     memory tests.  Limited by *note MAX_Py_ssize_t: 4541.

 -- Dado: test.support.real_max_memuse

     Set by *note set_memlimit(): 4543. as the memory limit for big
     memory tests.  Not limited by *note MAX_Py_ssize_t: 4541.

 -- 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: 204c. option.

     See also the *note HAVE_DOCSTRINGS: 4546. variable.

 -- Dado: test.support.HAVE_DOCSTRINGS

     Set to ‘True’ if function docstrings are available.  See the *note
     python -OO: 18c. option, which strips docstrings of functions
     implemented in Python.

     See also the *note MISSING_C_DOCSTRINGS: 4545. 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:
     4548.).  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: ea. 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: 8ad. 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(): 454c. 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: e9. is
     executing the tests.

 -- 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: 452f. if 'resource' is not available.
     'msg' is the argument to *note ResourceDenied: 452f. 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: e9.

 -- 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(): b3a. 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: 4542. e *note
     real_max_memuse: 4544. 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(): 4556. 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: 111f.

     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: 5c.

 -- 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: cc0. and then on
     *note sys.stderr: b29.  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__: 4563.  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: 8ad. if the process exit code is not
     equal to 'exitcode'.

     If the process runs longer than 'timeout' seconds (*note
     SHORT_TIMEOUT: 1b52. by default), kill the process and raise an
     *note AssertionError: 8ad.  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: 5d5. 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: 4566. 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(): 4479.  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: 164. 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: 139. doesn’t exist.

 -- Função: @test.support.requires_gzip

     Decorator for skipping tests if *note gzip: 6b. doesn’t exist.

 -- Função: @test.support.requires_bz2

     Decorator for skipping tests if *note bz2: 14. doesn’t exist.

 -- Função: @test.support.requires_lzma

     Decorator for skipping tests if *note lzma: 8e. 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: 4546.

 -- Função: @test.support.requires_limited_api

     Decorator for only running the test if *note Limited C API: 62b. 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(): 4555. on
     'guards'.  If that returns ‘False’, then uses 'msg' as the reason
     for skipping the test.

 -- Função: @test.support.thread_unsafe (reason=None)

     Decorator for marking tests as thread-unsafe.  This test always
     runs in one thread even when invoked with ‘--parallel-threads’.

 -- 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.linked_to_musl ()

     Return ‘False’ if there is no evidence the interpreter was compiled
     with ‘musl’, otherwise return a version triple, either ‘(0, 0, 0)’
     if the version is unknown, or the actual version if it is known.
     Intended for use in ‘skip’ decorators.  ‘emscripten’ and ‘wasi’ are
     assumed to be compiled with ‘musl’; otherwise ‘platform.libc_ver’
     is checked.

 -- 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: 10c. instance for
     the test.  'errtext' is the regular expression which should match
     the string representation of the raised *note SyntaxError: 18e.  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: 452e.

 -- 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: 11da. if *note
     AttributeError: 5e4. is raised.

 -- Função: test.support.catch_unraisable_exception ()

     Context manager catching unraisable exception using *note
     sys.unraisablehook(): 501.

     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: 10c. ‘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: 11da.
     if *note tracemalloc: 105. 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__: 2568. 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: 2bf.

     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(): 1849. 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: ea. 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(): 174f. is used to set *note
     resource.RLIMIT_CORE: 458d.’s soft limit to 0 to prevent coredump
     file creation.

     On both platforms, the old value is restored by *note __exit__():
     14fc.

 -- 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(): 458f. 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: ef. 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: 1abf, *note
     SOCK_STREAM: 14ef.), 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(): 4597. 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(): 4597. over *note
     find_unused_port(): 4596. 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: 1abf. and
     ‘sock.type’ is *note SOCK_STREAM: 14ef, 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: 11da. if *note
     PermissionError: f32. 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: 452f. 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: ee. 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: 3ed. is one way to get most of the
     testsuite to run in that situation.  *note PYTHONPATH: 1213. 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(): 459d. 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():
     4b1.  Returns a *note subprocess.Popen: 4b1. object.

 -- Função: test.support.script_helper.kill_python (p)

     Run the given *note subprocess.Popen: 4b1. 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: eb. 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: 8ad.

 -- Método: BytecodeTestCase.assertNotInBytecode (x, opname,
          argval=_UNSPECIFIED)

     Throws *note AssertionError: 8ad. 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: f0. 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:
     8ad. 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(): 34cd.  ‘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: 176. exception
     using *note threading.excepthook(): a41.

     Attributes set when an exception is caught:

        * ‘exc_type’

        * ‘exc_value’

        * ‘exc_traceback’

        * ‘thread’

     See *note threading.excepthook(): a41. 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.

 -- Função: test.support.threading_helper.run_concurrently (worker_func,
          nthreads, args=(), kwargs={})

     Run the worker function concurrently in multiple threads.
     Re-raises an exception if any thread raises one, after all threads
     have finished.


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: ed. 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(): e43.

 -- Dado: test.support.os_helper.SAVEDCWD

     Set to *note os.getcwd(): 185f.

 -- 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: 45b4.
     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: 59a.  It implements the *note
     __fspath__(): e40. 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, *others)

     Temporarily unset one or more environment variables.

     Alterado na versão 3.14: More than one environment variable can be
     unset.

 -- 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(): 12ef. 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(): 353. on 'path' or call *note
     os.lstat(): 6bd. and *note os.rmdir(): 12ef. to remove a path and
     its contents.  As with *note rmdir(): 45c4, 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(): 527.

     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(): 527.  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(): 12f1. on 'filename'.  As with *note
     rmdir(): 45c4, 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: ec. 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: 64f.

     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: 64f. 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: 11da.
     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: 290.

     Adicionado na versão 3.1.

 -- Função: test.support.import_helper.modules_setup ()

     Retorna a cópia de *note sys.modules: 17ab.

 -- 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: 1a3. 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:
     3e1.

     This makes a copy of *note sys.path: 3e1, appends any directories
     given as positional arguments, then reverts *note sys.path: 3e1. to
     the copied settings when the context ends.

     Note that 'all' *note sys.path: 3e1. 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: f1. 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: 25a5. or a subclass.  Roughly equivalent to *note
     warnings.catch_warnings(): 179. with *note
     warnings.simplefilter('ignore', category=category): 8c5.  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: 546. was
     raised.  You must remove the object which may emit *note
     ResourceWarning: 546. 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: 1ae. is
     emitted only once, and that it will be converted to a *note
     SyntaxError: 18e. when turned into error.  'testcase' is the *note
     unittest: 10c. instance for the test.  'errtext' is the regular
     expression which should match the string representation of the
     emitted *note SyntaxWarning: 1ae. and raised *note SyntaxError:
     18e.  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(): 179.
     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(): 8c5. 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(): 179. is available via the recorder object’s *note
     warnings: 118. 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(): 45d9. 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(): 45d9. 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(): 186e. ou *note PySys_Audit(): 607. 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(): 45e0. e *note PySys_AddAuditHook(): 45e1.
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]: 45e2.
                                                                                               
                                                                                               
array.__new__                      ‘typecode’, ‘initializer’                                   *note [1]: 4b8.
                                                                                               
                                                                                               
builtins.breakpoint                ‘breakpointhook’                                            *note [1]: 270.
                                                                                               
                                                                                               
builtins.id                        ‘id’                                                        *note [1]: 1614.
                                                                                               
                                                                                               
builtins.input                     ‘prompt’                                                    *note [1]: 14d4.
                                                                                               
                                                                                               
builtins.input/result              ‘result’                                                    *note [1]: 14d4.
                                                                                               
                                                                                               
code.__new__                       ‘code’, ‘filename’, ‘name’, ‘argcount’,                     *note [1]: 32d.
                                   ‘posonlyargcount’, ‘kwonlyargcount’, ‘nlocals’,             
                                   ‘stacksize’, ‘flags’
                                   
                                                                                               
compile                            ‘source’, ‘filename’                                        *note [1]: 4ab.
                                                                                               
                                                                                               
cpython.PyConfig_Set               ‘name’, ‘value’                                             *note [1]: 37a.
                                                                                               
                                                                                               
cpython.PyInterpreterState_Clear                                                               *note [1]: 45e3.
                                                                                               
                                                                                               
cpython.PyInterpreterState_New                                                                 *note [1]: 45e4.
                                                                                               
                                                                                               
cpython._PySys_ClearAuditHooks                                                                 *note [1]: f05.
                                                                                               
                                                                                               
cpython.remote_debugger_script     ‘script_path’                                               *note [1]: 45e5.
                                                                                               
                                                                                               
cpython.run_command                ‘command’                                                   *note [1]: 1a8.
                                                                                               
                                                                                               
cpython.run_file                   ‘filename’                                                  *note [1]: 45e6.
                                                                                               
                                                                                               
cpython.run_interactivehook        ‘hook’                                                      *note [1]: 11be.
                                                                                               
                                                                                               
cpython.run_module                 ‘module-name’                                               *note [1]: 23b.
                                                                                               
                                                                                               
cpython.run_startup                ‘filename’                                                  *note [1]: 1b8.
                                                                                               
                                                                                               
cpython.run_stdin                                                                              *note [1]: 45e7.*note [2]: 45e8.*note [3]: 45e9.
                                                                                               
                                                                                               
ctypes.addressof                   ‘obj’                                                       *note [1]: 31cb.
                                                                                               
                                                                                               
ctypes.call_function               ‘func_pointer’, ‘arguments’                                 *note [1]: 31c5.
                                                                                               
                                                                                               
ctypes.cdata                       ‘address’                                                   *note [1]: 31d6.
                                                                                               
                                                                                               
ctypes.cdata/buffer                ‘pointer’, ‘size’, ‘offset’                                 *note [1]: 31db.*note [2]: 31dc.
                                                                                               
                                                                                               
ctypes.create_string_buffer        ‘init’, ‘size’                                              *note [1]: 3183.
                                                                                               
                                                                                               
ctypes.create_unicode_buffer       ‘init’, ‘size’                                              *note [1]: 1c6b.
                                                                                               
                                                                                               
ctypes.dlopen                      ‘name’                                                      *note [1]: 31c3.
                                                                                               
                                                                                               
ctypes.dlsym                       ‘library’, ‘name’                                           *note [1]: 31c3.
                                                                                               
                                                                                               
ctypes.dlsym/handle                ‘handle’, ‘name’                                            *note [1]: 31c3.
                                                                                               
                                                                                               
ctypes.get_errno                                                                               *note [1]: 31bd.
                                                                                               
                                                                                               
ctypes.get_last_error                                                                          *note [1]: 31bf.
                                                                                               
                                                                                               
ctypes.memoryview_at               ‘address’, ‘size’, ‘readonly’                               *note [1]: 45ea.
                                                                                               
                                                                                               
ctypes.set_errno                   ‘errno’                                                     *note [1]: 31be.
                                                                                               
                                                                                               
ctypes.set_exception               ‘code’                                                      *note [1]: 31c5.
                                                                                               
                                                                                               
ctypes.set_last_error              ‘error’                                                     *note [1]: 31c0.
                                                                                               
                                                                                               
ctypes.string_at                   ‘ptr’, ‘size’                                               *note [1]: 1eb.
                                                                                               
                                                                                               
ctypes.wstring_at                  ‘ptr’, ‘size’                                               *note [1]: 31d5.
                                                                                               
                                                                                               
ensurepip.bootstrap                ‘root’                                                      *note [1]: 45eb.
                                                                                               
                                                                                               
exec                               ‘code_object’                                               *note [1]: 49d.*note [2]: 49c.
                                                                                               
                                                                                               
fcntl.fcntl                        ‘fd’, ‘cmd’, ‘arg’                                          *note [1]: 17bb.
                                                                                               
                                                                                               
fcntl.flock                        ‘fd’, ‘operation’                                           *note [1]: 45ec.
                                                                                               
                                                                                               
fcntl.ioctl                        ‘fd’, ‘request’, ‘arg’                                      *note [1]: 1669.
                                                                                               
                                                                                               
fcntl.lockf                        ‘fd’, ‘cmd’, ‘len’, ‘start’, ‘whence’                       *note [1]: 15dd.
                                                                                               
                                                                                               
ftplib.connect                     ‘self’, ‘host’, ‘port’                                      *note [1]: 3e93.
                                                                                               
                                                                                               
ftplib.sendcmd                     ‘self’, ‘cmd’                                               *note [1]: 3e98.*note [2]: 3e99.
                                                                                               
                                                                                               
function.__new__                   ‘code’                                                      *note [1]: a79.
                                                                                               
                                                                                               
gc.get_objects                     ‘generation’                                                *note [1]: 9fa.
                                                                                               
                                                                                               
gc.get_referents                   ‘objs’                                                      *note [1]: 9fc.
                                                                                               
                                                                                               
gc.get_referrers                   ‘objs’                                                      *note [1]: 9fb.
                                                                                               
                                                                                               
glob.glob                          ‘pathname’, ‘recursive’                                     *note [1]: 599.*note [2]: 9fe.
                                                                                               
                                                                                               
glob.glob/2                        ‘pathname’, ‘recursive’, ‘root_dir’, ‘dir_fd’               *note [1]: 599.*note [2]: 9fe.
                                                                                               
                                                                                               
http.client.connect                ‘self’, ‘host’, ‘port’                                      *note [1]: 3e75.
                                                                                               
                                                                                               
http.client.send                   ‘self’, ‘data’                                              *note [1]: 3e7a.
                                                                                               
                                                                                               
imaplib.open                       ‘self’, ‘host’, ‘port’                                      *note [1]: af7.
                                                                                               
                                                                                               
imaplib.send                       ‘self’, ‘data’                                              *note [1]: 3eeb.
                                                                                               
                                                                                               
import                             ‘module’, ‘filename’, ‘sys.path’, ‘sys.meta_path’,          *note [1]: 7ed.
                                   ‘sys.path_hooks’                                            
                                   
                                                                                               
marshal.dumps                      ‘value’, ‘version’                                          *note [1]: 2be6.
                                                                                               
                                                                                               
marshal.load                                                                                   *note [1]: 1cac.
                                                                                               
                                                                                               
marshal.loads                      ‘bytes’                                                     *note [1]: 1cac.
                                                                                               
                                                                                               
mmap.__new__                       ‘fileno’, ‘length’, ‘access’, ‘offset’                      *note [1]: 513.
                                                                                               
                                                                                               
msvcrt.get_osfhandle               ‘fd’                                                        *note [1]: 45ed.
                                                                                               
                                                                                               
msvcrt.locking                     ‘fd’, ‘mode’, ‘nbytes’                                      *note [1]: 45ee.
                                                                                               
                                                                                               
msvcrt.open_osfhandle              ‘handle’, ‘flags’                                           *note [1]: 45ef.
                                                                                               
                                                                                               
object.__delattr__                 ‘obj’, ‘name’                                               *note [1]: 2213.
                                                                                               
                                                                                               
object.__getattr__                 ‘obj’, ‘name’                                               *note [1]: dbf.
                                                                                               
                                                                                               
object.__setattr__                 ‘obj’, ‘name’, ‘value’                                      *note [1]: 2212.
                                                                                               
                                                                                               
open                               ‘path’, ‘mode’, ‘flags’                                     *note [1]: 314.*note [2]: 735.*note [3]: f86.
                                                                                               
                                                                                               
os.add_dll_directory               ‘path’                                                      *note [1]: bd3.
                                                                                               
                                                                                               
os.chdir                           ‘path’                                                      *note [1]: 816.*note [2]: f7d.
                                                                                               
                                                                                               
os.chflags                         ‘path’, ‘flags’                                             *note [1]: 12e9.*note [2]: 2f08.
                                                                                               
                                                                                               
os.chmod                           ‘path’, ‘mode’, ‘dir_fd’                                    *note [1]: 523.*note [2]: 524.*note [3]: 522.
                                                                                               
                                                                                               
os.chown                           ‘path’, ‘uid’, ‘gid’, ‘dir_fd’                              *note [1]: 12ea.*note [2]: f7e.*note [3]: 2f09.
                                                                                               
                                                                                               
os.exec                            ‘path’, ‘args’, ‘env’                                       *note [1]: 2f42.
                                                                                               
                                                                                               
os.fork                                                                                        *note [1]: 4af.
                                                                                               
                                                                                               
os.forkpty                                                                                     *note [1]: 4b0.
                                                                                               
                                                                                               
os.fwalk                           ‘top’, ‘topdown’, ‘onerror’, ‘follow_symlinks’, ‘dir_fd’    *note [1]: d46.
                                                                                               
                                                                                               
os.getxattr                        ‘path’, ‘attribute’                                         *note [1]: 1300.
                                                                                               
                                                                                               
os.kill                            ‘pid’, ‘sig’                                                *note [1]: 1559.
                                                                                               
                                                                                               
os.killpg                          ‘pgid’, ‘sig’                                               *note [1]: 1c72.
                                                                                               
                                                                                               
os.link                            ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’                    *note [1]: 12eb.
                                                                                               
                                                                                               
os.listdir                         ‘path’                                                      *note [1]: 12f6.
                                                                                               
                                                                                               
os.listdrives                                                                                  *note [1]: 6ba.
                                                                                               
                                                                                               
os.listmounts                      ‘volume’                                                    *note [1]: 6bc.
                                                                                               
                                                                                               
os.listvolumes                                                                                 *note [1]: 6bb.
                                                                                               
                                                                                               
os.listxattr                       ‘path’                                                      *note [1]: 1301.
                                                                                               
                                                                                               
os.lockf                           ‘fd’, ‘cmd’, ‘len’                                          *note [1]: 130f.
                                                                                               
                                                                                               
os.mkdir                           ‘path’, ‘mode’, ‘dir_fd’                                    *note [1]: 526.*note [2]: 525.
                                                                                               
                                                                                               
os.posix_spawn                     ‘path’, ‘argv’, ‘env’                                       *note [1]: 528.*note [2]: 1cc7.
                                                                                               
                                                                                               
os.putenv                          ‘key’, ‘value’                                              *note [1]: 25a.
                                                                                               
                                                                                               
os.remove                          ‘path’, ‘dir_fd’                                            *note [1]: 12ec.*note [2]: 2f0d.*note [3]: 12f1.
                                                                                               
                                                                                               
os.removexattr                     ‘path’, ‘attribute’                                         *note [1]: 1302.
                                                                                               
                                                                                               
os.rename                          ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’                    *note [1]: 12ed.*note [2]: 2f0e.*note [3]: 12ee.
                                                                                               
                                                                                               
os.rmdir                           ‘path’, ‘dir_fd’                                            *note [1]: 12ef.
                                                                                               
                                                                                               
os.scandir                         ‘path’                                                      *note [1]: c48.
                                                                                               
                                                                                               
os.setxattr                        ‘path’, ‘attribute’, ‘value’, ‘flags’                       *note [1]: 1303.
                                                                                               
                                                                                               
os.spawn                           ‘mode’, ‘path’, ‘args’, ‘env’                               *note [1]: 319.
                                                                                               
                                                                                               
os.startfile                       ‘path’, ‘operation’                                         *note [1]: 1b6e.
                                                                                               
                                                                                               
os.startfile/2                     ‘path’, ‘operation’, ‘arguments’, ‘cwd’, ‘show_cmd’         *note [1]: 1b6e.
                                                                                               
                                                                                               
os.symlink                         ‘src’, ‘dst’, ‘dir_fd’                                      *note [1]: 12f0.
                                                                                               
                                                                                               
os.system                          ‘command’                                                   *note [1]: 164c.
                                                                                               
                                                                                               
os.truncate                        ‘fd’, ‘length’                                              *note [1]: f83.*note [2]: 1031.
                                                                                               
                                                                                               
os.unsetenv                        ‘key’                                                       *note [1]: 25b.
                                                                                               
                                                                                               
os.utime                           ‘path’, ‘times’, ‘ns’, ‘dir_fd’                             *note [1]: 12f2.
                                                                                               
                                                                                               
os.walk                            ‘top’, ‘topdown’, ‘onerror’, ‘followlinks’                  *note [1]: 6c5.
                                                                                               
                                                                                               
pathlib.Path.glob                  ‘self’, ‘pattern’                                           *note [1]: 531.
                                                                                               
                                                                                               
pathlib.Path.rglob                 ‘self’, ‘pattern’                                           *note [1]: 532.
                                                                                               
                                                                                               
pdb.Pdb                                                                                        *note [1]: 272.
                                                                                               
                                                                                               
pickle.find_class                  ‘module’, ‘name’                                            *note [1]: 2bbc.
                                                                                               
                                                                                               
poplib.connect                     ‘self’, ‘host’, ‘port’                                      *note [1]: b13.*note [2]: b14.
                                                                                               
                                                                                               
poplib.putline                     ‘self’, ‘line’                                              *note [1]: b13.*note [2]: b14.
                                                                                               
                                                                                               
pty.spawn                          ‘argv’                                                      *note [1]: 1178.
                                                                                               
                                                                                               
resource.prlimit                   ‘pid’, ‘resource’, ‘limits’                                 *note [1]: 1180.
                                                                                               
                                                                                               
resource.setrlimit                 ‘resource’, ‘limits’                                        *note [1]: 174f.
                                                                                               
                                                                                               
setopencodehook                                                                                *note [1]: 19d6.
                                                                                               
                                                                                               
shutil.chown                       ‘path’, ‘user’, ‘group’                                     *note [1]: 542.
                                                                                               
                                                                                               
shutil.copyfile                    ‘src’, ‘dst’                                                *note [1]: c44.*note [2]: c45.*note [3]: c43.
                                                                                               
                                                                                               
shutil.copymode                    ‘src’, ‘dst’                                                *note [1]: c44.*note [2]: 1961.
                                                                                               
                                                                                               
shutil.copystat                    ‘src’, ‘dst’                                                *note [1]: c45.*note [2]: 132a.
                                                                                               
                                                                                               
shutil.copytree                    ‘src’, ‘dst’                                                *note [1]: c14.
                                                                                               
                                                                                               
shutil.make_archive                ‘base_name’, ‘format’, ‘root_dir’, ‘base_dir’               *note [1]: 6cf.
                                                                                               
                                                                                               
shutil.move                        ‘src’, ‘dst’                                                *note [1]: 1049.
                                                                                               
                                                                                               
shutil.rmtree                      ‘path’, ‘dir_fd’                                            *note [1]: 353.
                                                                                               
                                                                                               
shutil.unpack_archive              ‘filename’, ‘extract_dir’, ‘format’                         *note [1]: 68b.
                                                                                               
                                                                                               
signal.pthread_kill                ‘thread_id’, ‘signalnum’                                    *note [1]: 132d.
                                                                                               
                                                                                               
smtplib.connect                    ‘self’, ‘host’, ‘port’                                      *note [1]: 1c66.
                                                                                               
                                                                                               
smtplib.send                       ‘self’, ‘data’                                              *note [1]: b1d.
                                                                                               
                                                                                               
socket.__new__                     ‘self’, ‘family’, ‘type’, ‘protocol’                        *note [1]: f95.
                                                                                               
                                                                                               
socket.bind                        ‘self’, ‘address’                                           *note [1]: 1728.
                                                                                               
                                                                                               
socket.connect                     ‘self’, ‘address’                                           *note [1]: f97.*note [2]: 1727.
                                                                                               
                                                                                               
socket.getaddrinfo                 ‘host’, ‘port’, ‘family’, ‘type’, ‘protocol’                *note [1]: 19fb.
                                                                                               
                                                                                               
socket.gethostbyaddr               ‘ip_address’                                                *note [1]: 1b6f.
                                                                                               
                                                                                               
socket.gethostbyname               ‘hostname’                                                  *note [1]: 382d.*note [2]: 1b70.
                                                                                               
                                                                                               
socket.gethostname                                                                             *note [1]: 2eb4.
                                                                                               
                                                                                               
socket.getnameinfo                 ‘sockaddr’                                                  *note [1]: 1978.
                                                                                               
                                                                                               
socket.getservbyname               ‘servicename’, ‘protocolname’                               *note [1]: 382f.
                                                                                               
                                                                                               
socket.getservbyport               ‘port’, ‘protocolname’                                      *note [1]: 3830.
                                                                                               
                                                                                               
socket.sendmsg                     ‘self’, ‘address’                                           *note [1]: 696.
                                                                                               
                                                                                               
socket.sendto                      ‘self’, ‘address’                                           *note [1]: f9d.
                                                                                               
                                                                                               
socket.sethostname                 ‘name’                                                      *note [1]: 1337.
                                                                                               
                                                                                               
sqlite3.connect                    ‘database’                                                  *note [1]: 59f.
                                                                                               
                                                                                               
sqlite3.connect/handle             ‘connection_handle’                                         *note [1]: 59f.
                                                                                               
                                                                                               
sqlite3.enable_load_extension      ‘connection’, ‘enabled’                                     *note [1]: a35.
                                                                                               
                                                                                               
sqlite3.load_extension             ‘connection’, ‘path’                                        *note [1]: 6d4.
                                                                                               
                                                                                               
subprocess.Popen                   ‘executable’, ‘args’, ‘cwd’, ‘env’                          *note [1]: 4b1.
                                                                                               
                                                                                               
sys._current_exceptions                                                                        *note [1]: 6de.
                                                                                               
                                                                                               
sys._current_frames                                                                            *note [1]: 1624.
                                                                                               
                                                                                               
sys._getframe                      ‘frame’                                                     *note [1]: 8e5.
                                                                                               
                                                                                               
sys._getframemodulename            ‘depth’                                                     *note [1]: 1a17.
                                                                                               
                                                                                               
sys.addaudithook                                                                               *note [1]: 45e1.*note [2]: 45e0.
                                                                                               
                                                                                               
sys.excepthook                     ‘hook’, ‘type’, ‘value’, ‘traceback’                        *note [1]: a02.
                                                                                               
                                                                                               
sys.monitoring.register_callback   ‘func’                                                      *note [1]: 45f0.
                                                                                               
                                                                                               
sys.remote_exec                    ‘pid’                                                       *note [1]: 45f1.
                                                                                               
                                                                                               
sys.set_asyncgen_hooks_finalizer                                                               *note [1]: 18e1.
                                                                                               
                                                                                               
sys.set_asyncgen_hooks_firstiter                                                               *note [1]: 18e1.
                                                                                               
                                                                                               
sys.setprofile                                                                                 *note [1]: 16ec.
                                                                                               
                                                                                               
sys.settrace                                                                                   *note [1]: 2e0.
                                                                                               
                                                                                               
sys.unraisablehook                 ‘hook’, ‘unraisable’                                        *note [1]: 501.
                                                                                               
                                                                                               
syslog.closelog                                                                                *note [1]: 756.
                                                                                               
                                                                                               
syslog.openlog                     ‘ident’, ‘logoption’, ‘facility’                            *note [1]: 755.
                                                                                               
                                                                                               
syslog.setlogmask                  ‘maskpri’                                                   *note [1]: 45f2.
                                                                                               
                                                                                               
syslog.syslog                      ‘priority’, ‘message’                                       *note [1]: 757.
                                                                                               
                                                                                               
tempfile.mkdtemp                   ‘fullpath’                                                  *note [1]: 1430.*note [2]: 527.
                                                                                               
                                                                                               
tempfile.mkstemp                   ‘fullpath’                                                  *note [1]: 6e2.*note [2]: 2b6a.*note [3]: 2b6b.
                                                                                               
                                                                                               
time.sleep                         ‘secs’                                                      *note [1]: 45f3.
                                                                                               
                                                                                               
urllib.Request                     ‘fullurl’, ‘data’, ‘headers’, ‘method’                      *note [1]: 305.
                                                                                               
                                                                                               
webbrowser.open                    ‘url’                                                       *note [1]: 17ed.
                                                                                               
                                                                                               
winreg.ConnectRegistry             ‘computer_name’, ‘key’                                      *note [1]: 45f4.
                                                                                               
                                                                                               
winreg.CreateKey                   ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 45f5.*note [2]: 1554.
                                                                                               
                                                                                               
winreg.DeleteKey                   ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 45f6.*note [2]: 1555.
                                                                                               
                                                                                               
winreg.DeleteValue                 ‘key’, ‘value’                                              *note [1]: 45f7.
                                                                                               
                                                                                               
winreg.DisableReflectionKey        ‘key’                                                       *note [1]: 1556.
                                                                                               
                                                                                               
winreg.EnableReflectionKey         ‘key’                                                       *note [1]: 1557.
                                                                                               
                                                                                               
winreg.EnumKey                     ‘key’, ‘index’                                              *note [1]: 45f8.
                                                                                               
                                                                                               
winreg.EnumValue                   ‘key’, ‘index’                                              *note [1]: 45f9.
                                                                                               
                                                                                               
winreg.ExpandEnvironmentStrings    ‘str’                                                       *note [1]: 15e9.
                                                                                               
                                                                                               
winreg.LoadKey                     ‘key’, ‘sub_key’, ‘file_name’                               *note [1]: 45fa.
                                                                                               
                                                                                               
winreg.OpenKey                     ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 45fb.
                                                                                               
                                                                                               
winreg.OpenKey/result              ‘key’                                                       *note [1]: 45f5.*note [2]: 1554.*note [3]: 45fb.
                                                                                               
                                                                                               
winreg.PyHKEY.Detach               ‘key’                                                       *note [1]: 45fc.
                                                                                               
                                                                                               
winreg.QueryInfoKey                ‘key’                                                       *note [1]: 45fd.
                                                                                               
                                                                                               
winreg.QueryReflectionKey          ‘key’                                                       *note [1]: 1558.
                                                                                               
                                                                                               
winreg.QueryValue                  ‘key’, ‘sub_key’, ‘value_name’                              *note [1]: 45fe.*note [2]: 45ff.
                                                                                               
                                                                                               
winreg.SaveKey                     ‘key’, ‘file_name’                                          *note [1]: 4600.
                                                                                               
                                                                                               
winreg.SetValue                    ‘key’, ‘sub_key’, ‘type’, ‘value’                           *note [1]: 4601.*note [2]: 1a36.
                                                                                               

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’
                                 
                                 
_posixsubprocess.fork_exec       ‘exec_list’, ‘args’, ‘env’
                                 
                                 
ctypes.PyObj_FromPtr             ‘obj’
                                 

Adicionado na versão 3.14: O evento de auditoria interno
‘_posixsubprocess.fork_exec’.

   ---------- 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: 10. 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: 2d4. para sair do
     depurador.

O módulo *note bdb: 10. também define duas classes:

 -- Classe: bdb.Breakpoint (self, file, line, temporary=False,
          cond=None, funcname=None)

     This class implements temporary breakpoints, ignore counts,
     disabling and (re-)enabling, and conditionals.

     Breakpoints are indexed by number through a list called *note
     bpbynumber: 4606. and by ‘(file, line)’ pairs through *note bplist:
     4607.  The former points to a single instance of class *note
     Breakpoint: 4605.  The latter points to a list of such instances
     since there may be more than one breakpoint per line.

     When creating a breakpoint, its associated *note file name: 4608.
     should be in canonical form.  If a *note funcname: 4609. is
     defined, a breakpoint *note hit: 460a. will be counted when the
     first line of that function is executed.  A *note conditional:
     460b. breakpoint always counts a *note hit: 460a.

     *note Breakpoint: 4605. instances have the following methods:

      -- Método: deleteMe ()

          Delete the breakpoint from the list associated to a file/line.
          If it is the last breakpoint in that position, it also deletes
          the entry for the file/line.

      -- Método: enable ()

          Mark the breakpoint as enabled.

      -- Método: disable ()

          Mark the breakpoint as disabled.

      -- Método: bpformat ()

          Return a string with all the information about the breakpoint,
          nicely formatted:

             * Breakpoint number.

             * Temporary status (del or keep).

             * File/line position.

             * Break condition.

             * Número de vezes para ignorar.

             * Number of times hit.

          Adicionado na versão 3.2.

      -- Método: bpprint (out=None)

          Print the output of *note bpformat(): 460f. to the file 'out',
          or if it is ‘None’, to standard output.

     *note Breakpoint: 4605. instances have the following attributes:

      -- Atributo: file

          Nome do arquivo do *note Breakpoint: 4605.

      -- Atributo: line

          Line number of the *note Breakpoint: 4605. within *note file:
          4608.

      -- Atributo: temporary

          ‘True’ if a *note Breakpoint: 4605. at (file, line) is
          temporary.

      -- Atributo: cond

          Condition for evaluating a *note Breakpoint: 4605. at (file,
          line).

      -- Atributo: funcname

          Function name that defines whether a *note Breakpoint: 4605.
          is hit upon entering the function.

      -- Atributo: enabled

          ‘True’ if *note Breakpoint: 4605. is enabled.

      -- Atributo: bpbynumber

          Numeric index for a single instance of a *note Breakpoint:
          4605.

      -- Atributo: bplist

          Dictionary of *note Breakpoint: 4605. instances indexed by
          (*note file: 4608, *note line: 4611.) tuples.

      -- Atributo: ignore

          Number of times to ignore a *note Breakpoint: 4605.

      -- Atributo: hits

          Count of the number of times a *note Breakpoint: 4605. has
          been hit.

 -- Classe: bdb.Bdb (skip=None, backend='settrace')

     The *note Bdb: 2d4. class acts as a generic Python debugger base
     class.

     This class takes care of the details of the trace facility; a
     derived class should implement user interaction.  The standard
     debugger class (*note pdb.Pdb: 272.) is an example.

     The 'skip' argument, if given, must be an iterable of glob-style
     module name patterns.  The debugger will not step into frames that
     originate in a module that matches one of these patterns.  Whether
     a frame is considered to originate in a certain module is
     determined by the ‘__name__’ in the frame globals.

     The 'backend' argument specifies the backend to use for *note Bdb:
     2d4.  It can be either ‘'settrace'’ or ‘'monitoring'’.
     ‘'settrace'’ uses *note sys.settrace(): 2e0. which has the best
     backward compatibility.  The ‘'monitoring'’ backend uses the new
     *note sys.monitoring: e0. that was introduced in Python 3.12, which
     can be much more efficient because it can disable unused events.
     We are trying to keep the exact interfaces for both backends, but
     there are some differences.  The debugger developers are encouraged
     to use the ‘'monitoring'’ backend to achieve better performance.

     Alterado na versão 3.1: Adicionado o parâmetro 'skip'.

     Alterado na versão 3.14: Added the 'backend' parameter.

     The following methods of *note Bdb: 2d4. normally don’t need to be
     overridden.

      -- Método: canonic (filename)

          Return canonical form of 'filename'.

          For real file names, the canonical form is an
          operating-system-dependent, *note case-normalized: 2af7. *note
          absolute path: 1516.  A 'filename' with angle brackets, such
          as ‘"<stdin>"’ generated in interactive mode, is returned
          unchanged.

      -- Método: start_trace (self)

          Start tracing.  For ‘'settrace'’ backend, this method is
          equivalent to ‘sys.settrace(self.trace_dispatch)’

          Adicionado na versão 3.14.

      -- Método: stop_trace (self)

          Stop tracing.  For ‘'settrace'’ backend, this method is
          equivalent to ‘sys.settrace(None)’

          Adicionado na versão 3.14.

      -- Método: reset ()

          Set the ‘botframe’, ‘stopframe’, ‘returnframe’ and *note
          quitting: 4619. attributes with values ready to start
          debugging.

      -- Método: trace_dispatch (frame, event, arg)

          This function is installed as the trace function of debugged
          frames.  Its return value is the new trace function (in most
          cases, that is, itself).

          The default implementation decides how to dispatch a frame,
          depending on the type of event (passed as a string) that is
          about to be executed.  'event' can be one of the following:

             * ‘"line"’: A new line of code is going to be executed.

             * ‘"call"’: A function is about to be called, or another
               code block entered.

             * ‘"return"’: A function or other code block is about to
               return.

             * ‘"exception"’: An exception has occurred.

             * ‘"c_call"’: A C function is about to be called.

             * ‘"c_return"’: A C function has returned.

             * ‘"c_exception"’: A C function has raised an exception.

          For the Python events, specialized functions (see below) are
          called.  For the C events, no action is taken.

          The 'arg' parameter depends on the previous event.

          See the documentation for *note sys.settrace(): 2e0. for more
          information on the trace function.  For more information on
          code and frame objects, refer to *note A hierarquia de tipos
          padrão: 21cb.

      -- Método: dispatch_line (frame)

          If the debugger should stop on the current line, invoke the
          *note user_line(): 461c. method (which should be overridden in
          subclasses).  Raise a *note BdbQuit: 277. exception if the
          *note quitting: 4619. flag is set (which can be set from *note
          user_line(): 461c.).  Return a reference to the *note
          trace_dispatch(): 461a. method for further tracing in that
          scope.

      -- Método: dispatch_call (frame, arg)

          If the debugger should stop on this function call, invoke the
          *note user_call(): 461e. method (which should be overridden in
          subclasses).  Raise a *note BdbQuit: 277. exception if the
          *note quitting: 4619. flag is set (which can be set from *note
          user_call(): 461e.).  Return a reference to the *note
          trace_dispatch(): 461a. method for further tracing in that
          scope.

      -- Método: dispatch_return (frame, arg)

          If the debugger should stop on this function return, invoke
          the *note user_return(): 4620. method (which should be
          overridden in subclasses).  Raise a *note BdbQuit: 277.
          exception if the *note quitting: 4619. flag is set (which can
          be set from *note user_return(): 4620.).  Return a reference
          to the *note trace_dispatch(): 461a. method for further
          tracing in that scope.

      -- Método: dispatch_exception (frame, arg)

          If the debugger should stop at this exception, invokes the
          *note user_exception(): 4622. method (which should be
          overridden in subclasses).  Raise a *note BdbQuit: 277.
          exception if the *note quitting: 4619. flag is set (which can
          be set from *note user_exception(): 4622.).  Return a
          reference to the *note trace_dispatch(): 461a. method for
          further tracing in that scope.

     Normally derived classes don’t override the following methods, but
     they may if they want to redefine the definition of stopping and
     breakpoints.

      -- Método: is_skipped_line (module_name)

          Return ‘True’ if 'module_name' matches any skip pattern.

      -- Método: stop_here (frame)

          Return ‘True’ if 'frame' is below the starting frame in the
          stack.

      -- Método: break_here (frame)

          Return ‘True’ if there is an effective breakpoint for this
          line.

          Check whether a line or function breakpoint exists and is in
          effect.  Delete temporary breakpoints based on information
          from *note effective(): 4626.

      -- Método: break_anywhere (frame)

          Return ‘True’ if any breakpoint exists for 'frame'’s filename.

     Derived classes should override these methods to gain control over
     debugger operation.

      -- Método: user_call (frame, argument_list)

          Called from *note dispatch_call(): 461d. if a break might stop
          inside the called function.

          'argument_list' is not used anymore and will always be ‘None’.
          The argument is kept for backwards compatibility.

      -- Método: user_line (frame)

          Called from *note dispatch_line(): 461b. when either *note
          stop_here(): 4624. or *note break_here(): 4625. returns
          ‘True’.

      -- Método: user_return (frame, return_value)

          Called from *note dispatch_return(): 461f. when *note
          stop_here(): 4624. returns ‘True’.

      -- Método: user_exception (frame, exc_info)

          Called from *note dispatch_exception(): 4621. when *note
          stop_here(): 4624. returns ‘True’.

      -- Método: do_clear (arg)

          Handle how a breakpoint must be removed when it is a temporary
          one.

          This method must be implemented by derived classes.

     Derived classes and clients can call the following methods to
     affect the stepping state.

      -- Método: set_step ()

          Stop after one line of code.

      -- Método: set_next (frame)

          Stop on the next line in or below the given frame.

      -- Método: set_return (frame)

          Stop when returning from the given frame.

      -- Método: set_until (frame, lineno=None)

          Stop when the line with the 'lineno' greater than the current
          one is reached or when returning from current frame.

      -- Método: set_trace ([frame])

          Start debugging from 'frame'.  If 'frame' is not specified,
          debugging starts from caller’s frame.

          Alterado na versão 3.13: *note set_trace(): 462e. entrará no
          depurador imediatamente, em vez de na próxima linha de código
          a ser executada.

      -- Método: set_continue ()

          Stop only at breakpoints or when finished.  If there are no
          breakpoints, set the system trace function to ‘None’.

      -- Método: set_quit ()

          Set the ‘quitting’ attribute to ‘True’.  This raises *note
          BdbQuit: 277. in the next call to one of the ‘dispatch_*()’
          methods.

     Derived classes and clients can call the following methods to
     manipulate breakpoints.  These methods return a string containing
     an error message if something went wrong, or ‘None’ if all is well.

      -- Método: set_break (filename, lineno, temporary=False,
               cond=None, funcname=None)

          Set a new breakpoint.  If the 'lineno' line doesn’t exist for
          the 'filename' passed as argument, return an error message.
          The 'filename' should be in canonical form, as described in
          the *note canonic(): 4615. method.

      -- Método: clear_break (filename, lineno)

          Delete the breakpoints in 'filename' and 'lineno'.  If none
          were set, return an error message.

      -- Método: clear_bpbynumber (arg)

          Delete the breakpoint which has the index 'arg' in the *note
          Breakpoint.bpbynumber: 4606.  If 'arg' is not numeric or out
          of range, return an error message.

      -- Método: clear_all_file_breaks (filename)

          Delete all breakpoints in 'filename'.  If none were set,
          return an error message.

      -- Método: clear_all_breaks ()

          Delete all existing breakpoints.  If none were set, return an
          error message.

      -- Método: get_bpbynumber (arg)

          Return a breakpoint specified by the given number.  If 'arg'
          is a string, it will be converted to a number.  If 'arg' is a
          non-numeric string, if the given breakpoint never existed or
          has been deleted, a *note ValueError: 2ea. is raised.

          Adicionado na versão 3.2.

      -- Método: get_break (filename, lineno)

          Return ‘True’ if there is a breakpoint for 'lineno' in
          'filename'.

      -- Método: get_breaks (filename, lineno)

          Return all breakpoints for 'lineno' in 'filename', or an empty
          list if none are set.

      -- Método: get_file_breaks (filename)

          Return all breakpoints in 'filename', or an empty list if none
          are set.

      -- Método: get_all_breaks ()

          Return all breakpoints that are set.

     Derived classes and clients can call the following methods to
     disable and restart events to achieve better performance.  These
     methods only work when using the ‘'monitoring'’ backend.

      -- Método: disable_current_event ()

          Disable the current event until the next time *note
          restart_events(): 463b. is called.  This is helpful when the
          debugger is not interested in the current line.

          Adicionado na versão 3.14.

      -- Método: restart_events ()

          Restart all the disabled events.  This function is
          automatically called in ‘dispatch_*’ methods after ‘user_*’
          methods are called.  If the ‘dispatch_*’ methods are not
          overridden, the disabled events will be restarted after each
          user interaction.

          Adicionado na versão 3.14.

     Derived classes and clients can call the following methods to get a
     data structure representing a stack trace.

      -- Método: get_stack (f, t)

          Return a list of (frame, lineno) tuples in a stack trace, and
          a size.

          The most recently called frame is last in the list.  The size
          is the number of frames below the frame where the debugger was
          invoked.

      -- Método: format_stack_entry (frame_lineno, lprefix=': ')

          Return a string with information about a stack entry, which is
          a ‘(frame, lineno)’ tuple.  The return string contains:

             * The canonical filename which contains the frame.

             * O nome da função ou ‘"<lambda>"’.

             * O argumento de entrada.

             * The return value.

             * The line of code (if it exists).

     Os dois métodos a seguir podem ser chamados pelos clientes para
     usar um depurador e depurar uma *note instrução: 2a9d, fornecida
     como uma string.

      -- Método: run (cmd, globals=None, locals=None)

          Debug a statement executed via the *note exec(): 49c.
          function.  'globals' defaults to ‘__main__.__dict__’, 'locals'
          defaults to 'globals'.

      -- Método: runeval (expr, globals=None, locals=None)

          Debug an expression executed via the *note eval(): 49d.
          function.  'globals' and 'locals' have the same meaning as in
          *note run(): 463e.

      -- Método: runctx (cmd, globals, locals)

          For backwards compatibility.  Calls the *note run(): 463e.
          method.

      -- Método: runcall (func, /, *args, **kwds)

          Debug a single function call, and return its result.

Finally, the module defines the following functions:

 -- Função: bdb.checkfuncname (b, frame)

     Return ‘True’ if we should break here, depending on the way the
     *note Breakpoint: 4605. 'b' was set.

     If it was set via line number, it checks if *note b.line: 4611. is
     the same as the one in 'frame'.  If the breakpoint was set via
     *note function name: 4609, 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)

     Return ‘(active breakpoint, delete temporary flag)’ or ‘(None,
     None)’ as the breakpoint to act upon.

     The 'active breakpoint' is the first entry in *note bplist: 4607.
     for the (*note file: 4608, *note line: 4611.) (which must exist)
     that is *note enabled: 4613, for which *note checkfuncname(): 4641.
     is true, and that has neither a false *note condition: 460b. nor
     positive *note ignore: 4614. count.  The 'flag', meaning that a
     temporary breakpoint should be deleted, is ‘False’ only when the
     *note cond: 460b. cannot be evaluated (in which case, *note ignore:
     4614. count is ignored).

     If no such entry exists, then ‘(None, None)’ is returned.

 -- Função: bdb.set_trace ()

     Start debugging with a *note Bdb: 2d4. instance from caller’s
     frame.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 20e. to install fault handlers for the *note
SIGSEGV: 1276, *note SIGFPE: 1277, *note SIGABRT: 1278, *note SIGBUS:
1279, and *note SIGILL: 127a. signals.  You can also enable them at
startup by setting the *note PYTHONFAULTHANDLER: 127b. environment
variable or by using the *note -X: 16f. ‘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: b29.
To see tracebacks, applications must be run in the terminal.  A log file
can alternatively be passed to *note faulthandler.enable(): 20e.

The module is implemented in C, so tracebacks can be dumped on a crash
or when Python is deadlocked.

The *note Python Development Mode: 502. calls *note
faulthandler.enable(): 20e. at Python startup.

Ver também
..........

Module *note pdb: aa.

     Interactive source code debugger for Python programs.

Módulo *note traceback: 104.

     Interface padrão para extrair, formatar e imprimir rastreamentos de
     pilha de programas Python.

* Menu:

* Dumping the traceback::
* Dumping the C stack::
* 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: Dumping the C stack,  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(): 107b, 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: Dumping the C stack,  Next: Fault handler state,  Prev: Dumping the traceback,  Up: faulthandler — Dump the Python traceback

5.27.3.2 Dumping the C stack
............................

Adicionado na versão 3.14.

 -- Função: faulthandler.dump_c_stack (file=sys.stderr)

     Dump the C stack trace of the current thread into 'file'.

     If the Python build does not support it or the operating system
     does not provide a stack trace, then this prints an error in place
     of a dumped C stack.

* Menu:

* C Stack Compatibility::


File: python.info,  Node: C Stack Compatibility,  Up: Dumping the C stack

5.27.3.3 C Stack Compatibility
..............................

If the system does not support the C-level ‘backtrace(3)(1)’ or
‘dladdr1(3)(2)’, then C stack dumps will not work.  An error will be
printed instead of the stack.

Additionally, some compilers do not support *note CPython’s: 8fa.
implementation of C stack dumps.  As a result, a different error may be
printed instead of the stack, even if the operating system supports
dumping stacks.

     Nota: Dumping C stacks can be arbitrarily slow, depending on the
     DWARF level of the binaries in the call stack.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/backtrace(3)

   (2) https://manpages.debian.org/dladdr1(3)


File: python.info,  Node: Fault handler state,  Next: Dumping the tracebacks after a timeout,  Prev: Dumping the C stack,  Up: faulthandler — Dump the Python traceback

5.27.3.4 Fault handler state
............................

 -- Função: faulthandler.enable (file=sys.stderr, all_threads=True,
          c_stack=True)

     Enable the fault handler: install handlers for the *note SIGSEGV:
     1276, *note SIGFPE: 1277, *note SIGABRT: 1278, *note SIGBUS: 1279.
     and *note SIGILL: 127a. 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: 4649.

     If 'c_stack' is ‘True’, then the C stack trace is printed after the
     Python traceback, unless the system does not support it.  See *note
     dump_c_stack(): 20d. for more information on compatibility.

     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.

     Alterado na versão 3.14: Only the current thread is dumped if the
     *note GIL: 164. is disabled to prevent the risk of data races.

     Alterado na versão 3.14: The dump now displays the C stack trace if
     'c_stack' is true.

 -- Função: faulthandler.disable ()

     Disable the fault handler: uninstall the signal handlers installed
     by *note enable(): 20e.

 -- 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.5 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(): 464d. is called: see *note issue
     with file descriptors: 4649.

     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(): ff5.


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.6 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(): 464f.: see *note issue with file descriptors:
     4649.

     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(): ff3.  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.7 Issue with file descriptors
....................................

*note enable(): 20e, *note dump_traceback_later(): ff5. and *note
register(): ff3. 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(): d4e. 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.8 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 "/opt/python/Lib/ctypes/__init__.py", line 486 in string_at
       File "<stdin>", line 1 in <module>

     Current thread's C stack trace (most recent call first):
       Binary file "/opt/python/python", at _Py_DumpStack+0x42 [0x5b27f7d7147e]
       Binary file "/opt/python/python", at +0x32dcbd [0x5b27f7d85cbd]
       Binary file "/opt/python/python", at +0x32df8a [0x5b27f7d85f8a]
       Binary file "/usr/lib/libc.so.6", at +0x3def0 [0x77b73226bef0]
       Binary file "/usr/lib/libc.so.6", at +0x17ef9c [0x77b7323acf9c]
       Binary file "/opt/python/build/lib.linux-x86_64-3.14/_ctypes.cpython-314d-x86_64-linux-gnu.so", at +0xcdf6 [0x77b7315dddf6]
       Binary file "/usr/lib/libffi.so.8", at +0x7976 [0x77b73158f976]
       Binary file "/usr/lib/libffi.so.8", at +0x413c [0x77b73158c13c]
       Binary file "/usr/lib/libffi.so.8", at ffi_call+0x12e [0x77b73158ef0e]
       Binary file "/opt/python/build/lib.linux-x86_64-3.14/_ctypes.cpython-314d-x86_64-linux-gnu.so", at +0x15a33 [0x77b7315e6a33]
       Binary file "/opt/python/build/lib.linux-x86_64-3.14/_ctypes.cpython-314d-x86_64-linux-gnu.so", at +0x164fa [0x77b7315e74fa]
       Binary file "/opt/python/build/lib.linux-x86_64-3.14/_ctypes.cpython-314d-x86_64-linux-gnu.so", at +0xc624 [0x77b7315dd624]
       Binary file "/opt/python/python", at _PyObject_MakeTpCall+0xce [0x5b27f7b73883]
       Binary file "/opt/python/python", at +0x11bab6 [0x5b27f7b73ab6]
       Binary file "/opt/python/python", at PyObject_Vectorcall+0x23 [0x5b27f7b73b04]
       Binary file "/opt/python/python", at _PyEval_EvalFrameDefault+0x490c [0x5b27f7cbb302]
       Binary file "/opt/python/python", at +0x2818e6 [0x5b27f7cd98e6]
       Binary file "/opt/python/python", at +0x281aab [0x5b27f7cd9aab]
       Binary file "/opt/python/python", at PyEval_EvalCode+0xc5 [0x5b27f7cd9ba3]
       Binary file "/opt/python/python", at +0x255957 [0x5b27f7cad957]
       Binary file "/opt/python/python", at +0x255ab4 [0x5b27f7cadab4]
       Binary file "/opt/python/python", at _PyEval_EvalFrameDefault+0x6c3e [0x5b27f7cbd634]
       Binary file "/opt/python/python", at +0x2818e6 [0x5b27f7cd98e6]
       Binary file "/opt/python/python", at +0x281aab [0x5b27f7cd9aab]
       Binary file "/opt/python/python", at +0x11b6e1 [0x5b27f7b736e1]
       Binary file "/opt/python/python", at +0x11d348 [0x5b27f7b75348]
       Binary file "/opt/python/python", at +0x11d626 [0x5b27f7b75626]
       Binary file "/opt/python/python", at PyObject_Call+0x20 [0x5b27f7b7565e]
       Binary file "/opt/python/python", at +0x32a67a [0x5b27f7d8267a]
       Binary file "/opt/python/python", at +0x32a7f8 [0x5b27f7d827f8]
       Binary file "/opt/python/python", at +0x32ac1b [0x5b27f7d82c1b]
       Binary file "/opt/python/python", at Py_RunMain+0x31 [0x5b27f7d82ebe]
       <truncated rest of calls>
     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: aa. 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: 272.  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: 10. e *note cmd: 1a.

Ver também
..........

Módulo *note faulthandler: 5c.

     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: 104.

     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:
4656.

Alterado na versão 3.7: A função embutida *note breakpoint(): 270,
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: bf. 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’.

Você também pode invocar *note pdb: aa. na linha de comando para depurar
outros scripts.  Por exemplo:

     python -m pdb [-c comando] (-m módulo | -p pid | arquivo_python) [argumentos ...]

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: 4659.

     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’.

 -- Option: -p, --pid <pid>

     Anexa ao processo com o PID especificado.

     Adicionado na versão 3.14.

Para anexar a um processo Python em execução para depuração remota, use
a opção ‘-p’ ou ‘--pid’ com o PID do processo de destino:

     python -m pdb -p 1234

     Nota: Anexar a um processo remoto bloqueado em uma chamada de
     sistema ou aguardando E/S só funcionará quando a próxima instrução
     de bytecode for executada ou quando o processo receber um sinal.

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(2) significa que
atribuições de nomes feitas via ‘pdb’ afetarão imediatamente o escopo
ativo, mesmo quando executado dentro de um *note escopo otimizado: 49b.

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: 4656. ou pode
     percorrer a instrução usando *note step: 465c. ou *note next: 465d.
     (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(): 49c. ou *note eval(): 49d.)

 -- 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():
     465e. retorna, ele retorna o valor de 'expression'.  Caso
     contrário, esta função é semelhante a *note run(): 444b.

 -- 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():
     465f. 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, commands=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.  O argumento 'commands', se fornecido, é uma lista de
     comandos para executar quando o depurador é iniciado.

     Alterado na versão 3.7: O argumento somente-nomeado 'header'.

     Alterado na versão 3.13: *note set_trace(): 271. entrará no
     depurador imediatamente, em vez da próxima linha de código a ser
     executada.

     Adicionado na versão 3.14: O argumento 'commands'.

 -- Função: awaitable pdb.set_trace_async (*, header=None,
          commands=None)

     Versão async de *note set_trace(): 271.  Esta função deve ser usada
     dentro de uma função async com *note await: 18d.

          async def f():
              await pdb.set_trace_async()

     As instruções *note await: 18d. são suportadas se o depurador for
     invocado por esta função.

     Adicionado na versão 3.14.

 -- Função: pdb.post_mortem (t=None)

     Entra em depuração post-mortem da exceção fornecida ou *note objeto
     traceback: cdf.  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: 6da.

 -- Função: pdb.set_default_backend (backend)

     Há dois backends suportados para pdb: ‘'settrace'’ e
     ‘'monitoring'’.  Consulte *note bdb.Bdb: 2d4. para obter detalhes.
     O usuário pode definir o backend padrão a ser usado caso nenhum
     seja especificado ao instanciar *note Pdb: 272.  Se nenhum backend
     for especificado, o padrão será ‘'settrace'’.

          Nota: *note breakpoint(): 270. e *note set_trace(): 271. não
          serão afetados por esta função.  Eles sempre usam o backend
          ‘'monitoring'’.

     Adicionado na versão 3.14.

 -- Função: pdb.get_default_backend ()

     Retorna o backend padrão para pdb.

     Adicionado na versão 3.14.

As funções ‘run*’ e a *note set_trace(): 271. são aliases, ou apelidos,
para instanciar a classe *note Pdb: 272. 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, mode=None,
          backend=None, colorize=False)

     *note Pdb: 272. é a classe do depurador.

     Os argumentos 'completekey', 'stdin' e 'stdout' são passados para a
     classe subjacente *note cmd.Cmd: 17b7.; 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.  (3)

     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: 4656.  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.

     O argumento 'mode' especifica como o depurador foi invocado.  Ele
     afeta o funcionamento de alguns comandos do depurador.  Os valores
     válidos são ‘'inline'’ (usado pelo comando embutido breakpoint()),
     ‘'cli'’ (usado pela invocação da linha de comando) ou ‘None’ (para
     comportamento retrocompatível, como antes da adição do argumento
     'mode').

     O argumento 'backend' especifica o backend a ser usado pelo
     depurador.  Se ‘None’ for passado, o backend padrão será usado.
     Consulte *note set_default_backend(): 4660.  Caso contrário, os
     backends implementados são ‘'settrace'’ e ‘'monitoring'’.

     O argumento 'colorize', se definido como ‘True’, habilitará a saída
     colorida no depurador, se houver suporte para cores.  Isso
     destacará o código-fonte exibido no pdb.

     Exemplo de chamada para habilitar rastreamento com 'skip':

          import pdb; pdb.Pdb(skip=['django.*']).set_trace()

     Levanta um *note evento de auditoria: 1b5d. ‘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'.

     Adicionado na versão 3.14: Adicionado o argumento 'mode'.

     Adicionado na versão 3.14: Adicionado o argumento 'backend'.

     Adicionado na versão 3.14: Adicionado o argumento 'colorize'.

     Alterado na versão 3.14: Pontos de interrupção em linha como *note
     breakpoint(): 270. ou *note pdb.set_trace(): 271. sempre
     interromperão o programa ao chamar o quadro, ignorando o padrão
     'skip' (se houver).

      -- 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.

* Menu:

* Comandos de depuração::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/pdb.py

   (2) https://peps.python.org/pep-0667/

   (3) 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,  Up: pdb — O depurador do Python

5.27.4.1 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: 4666, 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: 4667.  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 quatro '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

   * ‘$_asynctask’: a tarefa asyncio se o pdb parar em uma função
     assíncrona

Adicionado na versão 3.12: Adicionado o recurso de 'variável de
conveniência'.

Adicionado na versão 3.14: Adicionada a variável de conveniência
‘$_asynctask’.

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: 4656. ou *note next: 465d.
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: aa.).  Como o argumento 'command' deve ser um identificador,
     ‘help exec’ deve ser inserido para obter ajuda sobre o comando ‘!’.

 -- Pdbcommand: w(here) [count]

     Exibe um stack trace (situação da pilha de execução), com o quadro
     mais recente na parte inferior.  Se 'count' for 0, exibe a entrada
     do quadro atual.  Se 'count' for negativo, exibe os quadros menos
     recentes - 'count'.  Se 'count' for positivo, exibe os quadros
     'count' mais recentes.  Uma seta (‘>’) indica o quadro atual, que
     determina o contexto da maioria dos comandos.

     Alterado na versão 3.14: o argumento 'count' foi adicionado

 -- 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: 3e1.  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: 466c.

 -- 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:
     4656, ou *note step: 465c, ou qualquer outro comando que reinicie a
     execução.

     Especificar qualquer comando que retome a execução (atualmente
     *note continue: 4656, *note step: 465c, *note next: 465d, *note
     return: 4673, *note until: 4674, *note jump: 4675, *note quit:
     4676. e suas abreviações) finaliza a lista de comandos (como se
     esse comando fosse imediatamente seguido pelo end).  Isso ocorre
     porque sempre que você retoma a execução (mesmo com um simples next
     ou step), 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 a lista de comandos contiver o comando ‘silent’ ou um comando
     que retome a execução, a mensagem de ponto de interrupção contendo
     informações sobre o quadro não será exibida.

     Alterado na versão 3.14: As informações do quadro não serão
     exibidas se um comando que retome a execução estiver presente na
     lista de comandos.

 -- 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: 465d. e
     *note step: 465c. é que *note step: 465c. para dentro de uma função
     chamada, enquanto *note next: 465d. 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: 347. ou
     sair de uma cláusula *note finally: 1b0.

 -- 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: 4666.

     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(): 116b.

 -- Pdbcommand: pp expression

     Como o comando *note p: 116c, exceto que o valor de 'expression' é
     bastante impresso usando o módulo *note pprint: b3.

 -- 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:
     1b.) 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: 467d.

     Alterado na versão 3.13: *note interact: 467d. direciona sua saída
     para o canal de saída do depurador em vez de *note sys.stderr: b29.

 -- 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: 4a6. 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: c9. e o resultado é usado como o novo
     *note sys.argv: 1460.  Histórico, pontos de interrupção, ações e
     opções do depurador são preservados.  *note restart: 4682. é um
     apelido para *note run: 4681.

     Alterado na versão 3.14: Os comandos *note run: 4681. e *note
     restart: 4682. são desabilitados quando o depurador é invocado no
     modo ‘'inline'’.

 -- Pdbcommand: q(uit)

     Sai do depurador.  O programa que está sendo executado é abortado.
     Uma entrada com fim de arquivo equivale a *note quit: 4676.

     Um prompt de confirmação será exibido se o depurador for invocado
     no modo ‘'inline'’.  ‘y’, ‘Y’, ‘<Enter>’ ou ‘EOF’ confirmarão o
     encerramento.

     Alterado na versão 3.14: Um prompt de confirmação será exibido se o
     depurador for invocado no modo ‘'inline'’.  Após a confirmação, o
     depurador chamará *note sys.exit(): 276. imediatamente, em vez de
     levantar *note bdb.BdbQuit: 277. no próximo evento de rastreamento.

 -- 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.14/Lib/profile.py

   (2) https://github.com/python/cpython/tree/3.14/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: 2b. and *note profile: b4. 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: b5. module.

A biblioteca padrão do Python tem duas implementações diferentes para a
mesma interface de profiling:

  1. *note cProfile: 2b. 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: b4, a pure Python module whose interface is imitated
     by *note cProfile: 2b, 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: f5. 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: b4. instead of *note cProfile: 2b. if the latter is
not available on your system.)

The above action would run *note re.compile(): dc2. 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: 468d. class reads profile results from a file
and formats them in various ways.  The files *note cProfile: 2b. and
*note profile: b4. 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(): 4691. sort values to sort
     the output by.  This only applies when *note -o: 468f. 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:
     2b.

     Adicionado na versão 3.8: Added the ‘-m’ option to *note profile:
     b4.

The *note pstats: b5. module’s *note Stats: 468d. 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(): 4693. method removed the extraneous path from
all the module names.  The *note sort_stats(): 4691. method sorted all
the entries according to the standard module/line/name string that is
printed.  The *note print_stats(): 4694. 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: b5. module is a statistics
browser for reading and examining profile dumps.  It has a simple
line-oriented interface (implemented using *note cmd: 1a.) 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: b4. and *note cProfile: 2b. 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(): 49c. 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: 468d. instance and prints a simple profiling report.  If the
     sort value is specified, it is passed to this *note Stats: 468d.
     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(): 4696, 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(): 4696.
     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: bcc. 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: bcc. class can also be used as a context manager
     (supported only in *note cProfile: 2b. module.  see *note Tipos de
     Gerenciador de Contexto: 22a1.):

          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: 2b.

      -- Método: disable ()

          Para de coletar dados de profilling.  Apenas em *note
          cProfile: 2b.

      -- 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: 468d. 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: 4691.

          Adicionado na versão 3.13: *note print_stats(): 469b. 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(): 49c.

      -- Método: runctx (cmd, globals, locals)

          Profile the cmd via *note exec(): 49c. 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(): 276. 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: 468d.
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: b4. or *note
     cProfile: 2b.  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: 468d. object, the
     *note add(): 46a1. method can be used.

     Instead of reading the profile data from a file, a
     ‘cProfile.Profile’ or *note profile.Profile: bcc. object can be
     used as the profile data source.

     Os objetos de *note Stats: 468d. tem os seguintes métodos:

      -- Método: strip_dirs ()

          This method for the *note Stats: 468d. 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(): 4693. 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: 468d. 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(): 4696. 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: 468d. 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: bcc. and ‘cProfile.Profile’ classes.

      -- Método: sort_stats (*keys)

          This method modifies the *note Stats: 468d. 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: 468d. 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: 468d. class prints out a
          report as described in the *note profile.run(): 4696.
          definition.

          The order of the printing is based on the last *note
          sort_stats(): 4691. operation done on the object (subject to
          caveats in *note add(): 46a1. and *note strip_dirs(): 4693.).

          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: 468d. 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(): 4694, 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: b4, 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: 2b, 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: 468d. 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(): 46a4. 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: b4. than with the
lower-overhead *note cProfile: 2b.  For this reason, *note profile: b4.
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: b4. 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: 46aa.).

     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: bcc. or ‘cProfile.Profile’,
‘your_time_func’’s return value will be interpreted differently:

*note profile.Profile: bcc.

     ‘your_time_func’ should return a single number, or a list of
     numbers whose sum is the current time (like what *note os.times():
     1311. 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: 46ac.).  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(): 1311. 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: f4. that can be
used to make precise measurements of process or wall-clock time.  For
example, see *note time.perf_counter(): c6e.


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:
46b2. e um *note chamável: 46b3.  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<4>.
* Exemplos: Exemplos<31>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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:
46b2. 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: 46b3.

     >>> 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:
46b3.:

     >>> timeit.timeit(lambda: "-".join(map(str, range(100))), number=10000)
     0.19665591977536678

Observe, entretanto, que *note timeit(): 1074. determinará
automaticamente o número de repetições somente quando a interface de
linha de comando for usada.  Na seção *note Exemplos: 46b5. você
encontrará exemplos mais avançados.


File: python.info,  Node: Interface em Python,  Next: Interface de Linha de Comando<4>,  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: 16b6. com o código de 'setup' e
     a função 'timer' função para executar o método *note timeit(): edd.
     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: 16b6. com a instrução fornecida, o
     código de 'setup' e a função 'timer' e para executar o método *note
     repeat(): 46b8. 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(): c6e. é 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(): edd.  Os métodos *note repeat(): 46b8. e *note
     autorange(): edc. são convenientes para chamar *note timeit(): edd.
     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():
     edd.  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(): edd. desativa
               temporariamente *note coleta de lixo: 1bbc. 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():
          edd.

          Esta é uma função de conveniência que chama *note timeit():
          edd. 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(): edd.
          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(): edd. algumas vezes.

          Esse é um função de conveniência que chama o *note timeit():
          edd. repetidamente e retorna uma lista de resultados.  O
          primeiro argumento especifica quantas vezes deve chamar o
          *note timeit(): edd.  O segundo argumento especifica o
          argumento 'number' para *note timeit(): edd.

               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(): 1101. 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: b29.


File: python.info,  Node: Interface de Linha de Comando<4>,  Next: Exemplos<31>,  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(): c6f. em vez de *note
     time.perf_counter(): c6e, 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: 46c0. são tratadas de forma semelhante.

Se *note -n: 46bc. 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(): 46b9. 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: 46be. é boa para isso; o padrão
de 5 repetições provavelmente é suficiente na maioria dos casos.  Você
pode usar *note time.process_time(): c6f. 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<31>,  Prev: Interface de Linha de Comando<4>,  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: 16b6. 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(): 6ee.
vs.  *note try: 8ed./*note except: 1ab. 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: f5. 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(): 1b0b. 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: 103. 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<8>.
* Interface programática::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/trace.py

   (2) https://coverage.readthedocs.io/


File: python.info,  Node: Uso na linha de comando<8>,  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: 103. 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<8>

5.27.7.2 Opções principais
..........................

Pelo menos uma das seguintes opções deve ser especificada ao invocar
*note trace: 103.  A opção *note -listfuncs: 46d3. é mutuamente
exclusiva com as opções *note -trace: 46d4. e *note -count: 46d5.
Quando *note -listfuncs: 46d3. é fornecida, nem *note -count: 46d5. nem
*note -trace: 46d4. 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: 46d7, *note -file: 46d8. e *note
     -no-report: 46d9. 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: 46d5. e *note -file: 46d8.  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<8>

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: 46d5.

 -- 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: 46d5. ou *note -report: 46dc, 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: 46d5, 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<8>

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: 1fe1.


File: python.info,  Node: Interface programática,  Prev: Uso na linha de comando<8>,  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(): 49c.

      -- 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: 46ef. com os parâmetros de rastreamento
          atuais.

      -- Método: results ()

          Retorna um objeto *note CoverageResults: 46f3. que contém os
          resultados cumulativos de todas as chamadas anteriores para
          ‘run’, ‘runctx’ e ‘runfunc’ para a instância *note Trace:
          46ef. fornecida.  Não redefine os resultados de rastreamento
          acumulados.

 -- Classe: trace.CoverageResults

     Um contêiner para resultados de cobertura, criado por *note
     Trace.results(): 46f2.  Não deve ser criado diretamente pelo
     usuário.

      -- Método: update (other)

          Mescla dados de outro objeto *note CoverageResults: 46f3.

      -- 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: 263.

          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

   * Estatísticas sobre blocos de memória alocados por nome de arquivo e
     por número de linha: tamanho total, número e tamanho médio dos
     blocos de memória alocados

   * Calcula as diferenças entre dois instantâneos para detectar
     vazamentos de memória

To trace most memory blocks allocated by Python, the module should be
started as early as possible by setting the *note PYTHONTRACEMALLOC:
1fda. environment variable to ‘1’, or by using *note -X: 16f.
‘tracemalloc’ command line option.  The *note tracemalloc.start(): 1fd9.
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: 1fda. environment variable to ‘25’, or use the *note
-X: 16f. ‘tracemalloc=25’ command line option.

* Menu:

* Exemplos: Exemplos<32>.
* API::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/tracemalloc.py


File: python.info,  Node: Exemplos<32>,  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<32>

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: 1e. module allocated ‘244
KiB’ to build *note namedtuple: 4da. types.

See *note Snapshot.statistics(): 46fb. for more options.


File: python.info,  Node: Compute differences,  Next: Get the traceback of a memory block,  Prev: Exibe o top 10,  Up: Exemplos<32>

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: 89. 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(): 46fd. method to analyze the snapshot
offline.  Then use the *note Snapshot.load(): 46fe. method reload the
snapshot.


File: python.info,  Node: Get the traceback of a memory block,  Next: Pretty top,  Prev: Compute differences,  Up: Exemplos<32>

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:
7b. module to load data (bytecode and constants) from modules: ‘870.1
KiB’.  The traceback is where the *note importlib: 7b. loaded data most
recently: on the ‘import pdb’ line of the *note doctest: 3e. 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<32>

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(): 46fb. 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():
4702. and *note reset_peak(): b2b. 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(): b2b. 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(): 1fd9. call.  Without the call to *note reset_peak(): b2b,
‘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: 24c, and writing
‘sum(range(...))’).


File: python.info,  Node: API,  Prev: Exemplos<32>,  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(): 180e.

 -- Função: tracemalloc.get_object_traceback (obj)

     Get the traceback where the Python object 'obj' was allocated.
     Return a *note Traceback: d83. instance, or ‘None’ if the *note
     tracemalloc: 105. module is not tracing memory allocations or did
     not trace the allocation of the object.

     See also *note gc.get_referrers(): 9fb. and *note sys.getsizeof():
     1a13. functions.

 -- Função: tracemalloc.get_traceback_limit ()

     Get the maximum number of frames stored in the traceback of a
     trace.

     The *note tracemalloc: 105. module must be tracing memory
     allocations to get the limit, otherwise an exception is raised.

     The limit is set by the *note start(): 1fd9. function.

 -- Função: tracemalloc.get_traced_memory ()

     Get the current size and peak size of memory blocks traced by the
     *note tracemalloc: 105. 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:
     105. module to the current size.

     Do nothing if the *note tracemalloc: 105. 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(): 4705.
     Snapshots taken with *note take_snapshot(): 4707. before a call to
     *note reset_peak(): b2b. can be meaningfully compared to snapshots
     taken after the call.

     See also *note get_traced_memory(): 4702.

     Adicionado na versão 3.9.

 -- Função: tracemalloc.get_tracemalloc_memory ()

     Get the memory usage in bytes of the *note tracemalloc: 105. module
     used to store traces of memory blocks.  Return an *note int: 19b.

 -- Função: tracemalloc.is_tracing ()

     ‘True’ if the *note tracemalloc: 105. module is tracing Python
     memory allocations, ‘False’ otherwise.

     See also *note start(): 1fd9. and *note stop(): 180e. 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: 470a. 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(): 470b. and *note
     Snapshot.statistics(): 46fb. methods.

     Storing more frames increases the memory and CPU overhead of the
     *note tracemalloc: 105. module.  Use the *note
     get_tracemalloc_memory(): 4708. function to measure how much memory
     is used by the *note tracemalloc: 105. module.

     The *note PYTHONTRACEMALLOC: 1fda. environment variable
     (‘PYTHONTRACEMALLOC=NFRAME’) and the *note -X: 16f.
     ‘tracemalloc=NFRAME’ command line option can be used to start
     tracing at startup.

     See also *note stop(): 180e, *note is_tracing(): 4709. and *note
     get_traceback_limit(): 4706. 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(): 4707. function to take a snapshot of
     traces before clearing them.

     See also *note start(): 1fd9, *note is_tracing(): 4709. and *note
     clear_traces(): 4705. functions.

 -- Função: tracemalloc.take_snapshot ()

     Take a snapshot of traces of memory blocks allocated by Python.
     Return a new *note Snapshot: 470c. instance.

     The snapshot does not include memory blocks allocated before the
     *note tracemalloc: 105. module started to trace memory allocations.

     Tracebacks of traces are limited to *note get_traceback_limit():
     4706. frames.  Use the 'nframe' parameter of the *note start():
     1fd9. function to store more frames.

     The *note tracemalloc: 105. module must be tracing memory
     allocations to take a snapshot, see the *note start(): 1fd9.
     function.

     See also the *note get_object_traceback(): 1dee. 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: 470f.

          If 'inclusive' is ‘False’ (exclude), match memory blocks not
          allocated in the address space *note domain: 470f.

      -- 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(): 1b43. 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: dc. module

        * ‘Filter(False, tracemalloc.__file__)’ excludes traces of the
          *note tracemalloc: 105. 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: 4712. 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: 4714. at line number *note lineno: 4715.

          If 'inclusive' is ‘False’ (exclude), ignore memory blocks
          allocated in a file with a name matching *note
          filename_pattern: 4714. at line number *note lineno: 4715.

      -- 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(): 4706. function and *note
          Snapshot.traceback_limit: 4717. 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: d83. class is a sequence of *note Frame: 4719.
     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(): 4707. 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: 471d. instances
          grouped by 'key_type'.

          See the *note Snapshot.statistics(): 46fb. 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: 471e, *note
          StatisticDiff.size: 471f, absolute value of *note
          StatisticDiff.count_diff: 4720, *note Statistic.count: 4721.
          and then by *note StatisticDiff.traceback: 4722.

      -- Método: dump (filename)

          Write the snapshot into a file.

          Use *note load(): 46fe. to reload the snapshot.

      -- Método: filter_traces (filters)

          Create a new *note Snapshot: 470c. instance with a filtered
          *note traces: 4724. sequence, 'filters' is a list of *note
          DomainFilter: ee1. and *note Filter: 4711. instances.  If
          'filters' is an empty list, return a new *note Snapshot: 470c.
          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: ee1. instances are
          now also accepted in 'filters'.

      -- Método: classmethod load (filename)

          Load a snapshot from a file.

          See also *note dump(): 46fd.

      -- Método: statistics (key_type: str, cumulative: bool = False)

          Get statistics as a sorted list of *note Statistic: 4725.
          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: 4726, *note Statistic.count: 4721. and
          then by *note Statistic.traceback: 4727.

      -- Atributo: traceback_limit

          Maximum number of frames stored in the traceback of *note
          traces: 4724.: result of the *note get_traceback_limit():
          4706. when the snapshot was taken.

      -- Atributo: traces

          Traces of all memory blocks allocated by Python: sequence of
          *note Trace: 4728. instances.

          The sequence has an undefined order.  Use the *note
          Snapshot.statistics(): 46fb. 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(): 46fb. returns a list of *note
     Statistic: 4725. instances.

     See also the *note StatisticDiff: 471d. 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: d83. 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: 470c. instance.

     *note Snapshot.compare_to(): 470b. returns a list of *note
     StatisticDiff: 471d. instances.  See also the *note Statistic:
     4725. 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: d83. 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: 4724. attribute is a sequence of *note
     Trace: 4728. instances.

     Alterado na versão 3.6: Added the *note domain: 472d. 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: d83. instance.


File: python.info,  Node: Traceback,  Prev: Trace,  Up: API

5.27.8.16 Traceback
...................

 -- Classe: tracemalloc.Traceback

     Sequence of *note Frame: 4719. 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(): 4706. frames.  See the *note
     take_snapshot(): 4707. function.  The original number of frames of
     the traceback is stored in the *note Traceback.total_nframe: 470a.
     attribute.  That allows to know if a traceback has been truncated
     by the traceback limit.

     The *note Trace.traceback: 472f. attribute is an instance of *note
     Traceback: d83. 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: 470a.
     attribute was added.

      -- Método: format (limit=None, most_recent_first=False)

          Format the traceback as a list of lines.  Use the *note
          linecache: 89. 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(): 4731. function,
          except that *note format(): d84. 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: 59. 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: 10ee.

     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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/ensurepip

   (2) https://peps.python.org/pep-0453/


File: python.info,  Node: Interface de linha de comando<6>,  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<6>,  Up: ensurepip — Inicialização do instalador do pip

5.28.1.2 API do módulo
......................

O *note ensurepip: 59. 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:
     2ea.

     'verbosity' controla o nível de saída para *note sys.stdout: cc0.
     da operação de inicialização.

     Levanta um *note evento de auditoria: 1b5d. ‘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: cc.  Um ambiente virtual é
criado sobre uma instalação Python existente, conhecido como o Python
“base” do ambiente virtual, e por padrão é isolado dos pacotes no
ambiente base, de forma que apenas aqueles explicitamente instalados no
ambiente virtual estejam disponíveis.  Consulte *note Ambientes
virtuais: 4742. e a *note documentação sobre ambientes virtuais: 4743.
do *note site: cc. para obter mais informações.

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: 1fed.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 2107. ou *note
plataformas WebAssembly: 1a86.

* 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.14/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: 3e5. 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.

Deprecated since version 3.6, removed in version 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: 59. 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: 3e4. e *note sys.exec_prefix: 3e8.
apontam para os diretórios do ambiente virtual, enquanto *note
sys.base_prefix: 3e3. e *note sys.base_exec_prefix: 3e7. 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 Gerenciador de instalação do Python: 7cf. 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: 56a.

 -- 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: 56a. 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: 59. 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(): 4752.

     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: 56a. 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: 56a. 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(): 4754, *note
          create_configuration(): 4755, *note setup_python(): 4756,
          *note setup_scripts(): 4757. e *note post_setup(): 4758. 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: 56a. 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: 4df. 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(): 4759.).

             * ‘env_name’ - O nome do ambiente virtual.  Usado para
               ‘__VENV_NAME__’ em scripts de ativação (veja *note
               install_scripts(): 4759.).

             * ‘prompt’ - O prompt a ser usado pelos scripts de
               ativação.  Usado para ‘__VENV_PROMPT__’ em scripts de
               ativação (veja *note install_scripts(): 4759.).

             * ‘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(): 4759.).

             * ‘env_exe’ - O nome do interpretador Python no ambiente
               virtual.  Usado para ‘__VENV_PYTHON__’ em scripts de
               ativação (veja *note install_scripts(): 4759.).

             * ‘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: 446. 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(): 4757. ou *note post_setup(): 4758. 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:
          2e91. 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(): 4756. 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(): 4756. em vez
     de *note setup_scripts(): 4757.  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: 56a. com os argumentos nomeados
     fornecidos e chame seu método *note create(): 4753. 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: 56a.
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: 1fc8.  O módulo fornece uma *note Interface de
linha de comando: 475f. e uma *note API do Python: 4760.

* Menu:

* Exemplo básico::
* Interface de linha de comando: Interface de linha de comando<7>.
* API do Python::
* Exemplos: Exemplos<33>.
* 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.14/Lib/zipapp.py


File: python.info,  Node: Exemplo básico,  Next: Interface de linha de comando<7>,  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:
475f. 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<7>,  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: 4767. 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: 4769. 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<33>,  Prev: Interface de linha de comando<7>,  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:
          59a. 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: 59a. 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: 59a, 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:
     87a.  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<33>,  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(): d9d.:

     >>> 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(): d9d.:

     >>> 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: 109a. 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<33>,  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: 136, é 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: 4773. 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: 3e1. 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(): e47. no POSIX.

  2. Dados padrão do zipfile, conforme gerados pelo módulo *note
     zipfile: 137.  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::
* annotationlib — Funcionalidade para introspecção de anotações::
* 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: 1fed.: 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(): 186e, 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(): 45e1. 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(): 45e1. antes de inicializar o tempo de
     execução, e quaisquer módulos que permitam modificação arbitrária
     da memória (como *note ctypes: 2e.) devem ser completamente
     removidos ou monitorados de perto.

     Chamar *note sys.addaudithook(): 45e0. levantará um evento de
     auditoria denominado ‘sys.addaudithook’ sem argumentos.  Se
     qualquer gancho existente levantar uma exceção derivada de *note
     RuntimeError: 243, 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: 1b14. 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:
     bc3, mas não de *note RuntimeError: 243, não são mais suprimidas.

     Quando o rastreamento está ativado (consulte *note settrace():
     2e0.), 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:
     1a8. 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: 5f.

     Veja também *note sys.orig_argv: a37.

          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(): 186e. 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():
     45e0. ou *note PySys_AddAuditHook(): 45e1.

     O equivalente nativo desta função é *note PySys_Audit(): 607.  Usar
     a função nativa é preferível quando possível.

     Veja *note tabela de eventos de auditoria: 1b14. para todos os
     eventos levantados pelo CPython.

     Adicionado na versão 3.8.

 -- Dado: sys.base_exec_prefix

     Equivalente a *note exec_prefix: 3e8, mas referindo-se à instalação
     base do Python.

     Ao executar em *note Ambientes virtuais: 4742, *note exec_prefix:
     3e8. é substituído pelo prefixo do ambiente virtual.  *note
     base_exec_prefix: 3e7, por outro lado, não muda e sempre aponta
     para a instalação base do Python.  Consulte *note Ambientes
     virtuais: 4742. para obter mais informações.

     Adicionado na versão 3.3.

 -- Dado: sys.base_prefix

     Equivalente a *note prefix: 3e4, mas referindo-se à instalação base
     do Python.

     Ao executar em *note ambiente virtual: 3e5, *note prefix: 3e4. é
     substituído pelo prefixo do ambiente virtual.  *note base_prefix:
     3e3, por outro lado, não muda e sempre aponta para a instalação
     base do Python.  Consulte *note Ambientes virtuais: 4742. para
     obter mais informações.

     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: a38.

 -- 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(): 2e0. ou *note setprofile(): 16ec.
     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(): 361.

 -- 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: 104. 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: 1b5d. ‘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: 1b5d.
     ‘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(): 270.  Por padrão, ela leva você ao depurador *note
     pdb: aa, 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: cc5.  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(): 270.

     Observe que se algo der errado ao importar o chamável nomeado por
     *note PYTHONBREAKPOINT: cc5, uma *note RuntimeWarning: 4d1. é
     relatado e o ponto de interrupção é ignorado.

     Observe também que se ‘sys.breakpointhook()’ for sobrescrito
     programaticamente, *note PYTHONBREAKPOINT: cc5. '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: 503. (*note
     opção -with-pydebug do configure: 65a.), 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: 1fed.: 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: 2266. 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:
     87c.

 -- 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: 15be. e da variável de ambiente *note
     PYTHONDONTWRITEBYTECODE: 15bf, mas você mesmo pode configurá-lo
     para controlar geração de arquivo bytecode.

 -- Dado: sys._emscripten_info

     Um *note tupla nomeada: 853. 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: 1fed.: 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: 21. 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: 16f. ‘pycache_prefix=PATH’ ou na
     variável de ambiente *note PYTHONPYCACHEPREFIX: b91. (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: f30. é 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:
     243, 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(): 501. lida com exceções que não
     podem ser levantadas e a função *note threading.excepthook(): a41.
     trata exceções levantadas por *note threading.Thread.run(): c26.

 -- 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(): 890. retornaria ‘e’), *note exc_info(): 88f.
     retorna a tupla ‘(type(e), e, e.__traceback__)’.  Ou seja, uma
     tupla contendo o tipo da exceção (uma subclasse de *note
     BaseException: 7cc.), a própria exceção e um *note objeto de
     traceback: cdf. 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(): 88f.

 -- 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: 3e5. estiver em vigor,
          este *note exec_prefix: 3e8. vai apontar para o ambiente
          virtual.  O valor para a instalação do Python ainda estará
          disponível, via *note base_exec_prefix: 3e7.  Confira *note
          Ambientes virtuais: 4742. para mais informações.

     Alterado na versão 3.14: Ao executar em um *note ambiente virtual:
     3e5, *note prefix: 3e4. e *note exec_prefix: 3e8. agora são
     definidos como o prefixo do ambiente virtual pela *note
     inicialização do caminho: 1834, em vez de *note site: cc.  Isso
     significa que *note prefix: 3e4. e *note exec_prefix: 3e8. sempre
     apontam para o ambiente virtual, mesmo quando *note site: cc. está
     desabilitado (*note -S: 13a4.).

 -- 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: 3ea. será uma string vazia ou
     ‘None’.

 -- Função: sys.exit ([arg])

     Levanta uma exceção *note SystemExit: f30, 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: b29. 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(): 247a. 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: 8ed.
     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: f30. (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: 853. 'flags' expõe o status dos
     sinalizadores de linha de comando.  Os sinalizadores devem ser
     acessados somente pelo nome e não pelo índice.  Os atributos são
     somente leitura.

      -- Atributo: flags.debug                              *note -d: 1fd0.
                                                            
                                                            
      -- Atributo: flags.inspect                            *note -i: 16c9.
                                                            
                                                            
      -- Atributo: flags.interactive                        *note -i: 16c9.
                                                            
                                                            
      -- Atributo: flags.isolated                           *note -I: b4d.
                                                            
                                                            
      -- Atributo: flags.optimize                           *note -O: 18c. ou *note -OO: fa9.
                                                            
                                                            
      -- Atributo: flags.dont_write_bytecode                *note -B: 15be.
                                                            
                                                            
      -- Atributo: flags.no_user_site                       *note -s: 1580.
                                                            
                                                            
      -- Atributo: flags.no_site                            *note -S: 13a4.
                                                            
                                                            
      -- Atributo: flags.ignore_environment                 *note -E: b4c.
                                                            
                                                            
      -- Atributo: flags.verbose                            *note -v: 1616.
                                                            
                                                            
      -- Atributo: flags.bytes_warning                      *note -b: 7ee.
                                                            
                                                            
      -- Atributo: flags.quiet                              *note -q: 1fd3.
                                                            
                                                            
      -- Atributo: flags.hash_randomization                 *note -R: 1d2d.
                                                            
                                                            
      -- Atributo: flags.dev_mode                           *note -X dev: 16f.
                                                            (*note Modo de Desenvolvimento do Python: 502.)
                                                            
                                                            
      -- Atributo: flags.utf8_mode                          *note -X utf8: 16f.
                                                            
                                                            
      -- Atributo: flags.safe_path                          *note -P: 7b6.
                                                            
                                                            
      -- Atributo: flags.int_max_str_digits                 *note -X int_max_str_digits: 16f.
                                                            (*note limitação de comprimento de string na conversão para inteiro: 800.)
                                                            
                                                            
      -- Atributo: flags.warn_default_encoding              *note -X warn_default_encoding: 16f.
                                                            
                                                            
      -- Atributo: flags.gil                                *note -X gil: 16f. e *note PYTHON_GIL: 494.
                                                            
                                                            
      -- Atributo: flags.thread_inherit_context             *note -X thread_inherit_context: 16f. e
                                                            *note PYTHON_THREAD_INHERIT_CONTEXT: 17cf.
                                                            
                                                            
      -- Atributo: flags.context_aware_warnings             *note -X context_aware_warnings: 16f. e
                                                            *note PYTHON_CONTEXT_AWARE_WARNINGS: 17c6.
                                                            

     Alterado na versão 3.2: Adicionado o atributo ‘quiet’ para o novo
     sinalizador *note -q: 1fd3.

     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: b4d. ‘isolated’.

     Alterado na versão 3.7: Adicionado o atributo ‘dev_mode’ para o
     novo *note Modo de Desenvolvimento do Python: 502. e o atributo
     ‘utf8_mode’ para o novo sinalizador *note -X: 16f. ‘utf8’.

     Alterado na versão 3.10: Adicionado o atributo
     ‘warn_default_encoding’ para o sinalizador *note -X: 16f.
     ‘warn_default_encoding’.

     Alterado na versão 3.11: Adicionado o atributo ‘safe_path’ para a
     opção *note -P: 7b6.

     Alterado na versão 3.11: Adicionado o atributo
     ‘int_max_str_digits’.

     Alterado na versão 3.13: Adicionado o atributo ‘gil’.

     Alterado na versão 3.14: Adicionado o atributo
     ‘thread_inherit_context’.

     Alterado na versão 3.14: Adicionado o atributo
     ‘context_aware_warnings’.

 -- Dado: sys.float_info

     Uma *note tupla nomeada: 853. 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]: 4799, ‘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): b04. 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: 479b. 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: 479b.
     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(): 1c1. 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(): 361. e *note gc.collect(): 1b3. 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(): 11bd.
     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(): 1906.

     *note Disponibilidade: 1fed.: 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(): ac8.

 -- 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: a5.
     (constantes ‘RTLD_XXX’, por exemplo *note os.RTLD_LAZY: 1314.).

     *note Disponibilidade: 1fed.: Unix.

 -- Função: sys.getfilesystemencoding ()

     Obtém o *note codificação do sistema de arquivos: 752.: a
     codificação usada com o *note manipulador de erros do sistema de
     arquivos: 752. 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(): ed6.

     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(): e43. e *note os.fsdecode(): e42. 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:
     752. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 988.: veja os membros *note filesystem_encoding:
     418. e *note filesystem_errors: 419. do *note PyConfig: 3f4.

     Alterado na versão 3.2: O resultado de *note
     getfilesystemencoding(): e47. 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(): 33c. para mais informações.

     Alterado na versão 3.7: Retorna ‘'utf-8'’ se o *note Modo UTF-8 do
     Python: 85b. estiver ativado.

 -- Função: sys.getfilesystemencodeerrors ()

     Obtém o *note manipulador de erros do sistema de arquivos: 752.: o
     manipulador de erros usado com a *note codificação do sistema de
     arquivos: 752. para converter entre nomes de arquivos Unicode e
     nomes de arquivos de bytes.  A codificação do sistema de arquivos é
     retornado de *note getfilesystemencoding(): e47.

     *note os.fsencode(): e43. e *note os.fsdecode(): e42. 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:
     752. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 988.: veja os membros *note filesystem_encoding:
     418. e *note filesystem_errors: 419. do *note PyConfig: 3f4.

     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: 800.  Veja também *note
     set_int_max_str_digits(): 1849.

     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(): 2cd.

     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: 28f. 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.

     Objetos *note imortais: 28f. com uma grande contagem de referências
     podem ser identificados via *note _is_immortal(): 28e.

     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(): 6df.

 -- 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: 198. será levantada.

     *note getsizeof(): 1a13. 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(): 1a13. 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(): b3a.

     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: 2ea. é levantada.  O padrão
     para 'depth' é zero, retornando o quadro no topo da pilha de
     chamadas.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 1b5d.
     ‘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: 62a.  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: 47a7.
     definido como 1 ou usando *note Py_NewInterpreter(): 1a5f. e o
     *note interpretador principal: 163.).  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.14: 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(): 16ec.

 -- Função: sys.gettrace ()

     Obtém a função trace conforme definido por *note settrace(): 2e0.

     A função *note gettrace(): 15d2. 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: af. para obter a
          versão precisa do sistema operacional.

     *note Disponibilidade: 1fed.: 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: 4da. no formato ‘(firstiter, finalizer)’, onde
     'firstiter' e 'finalizer' devem ser ‘None’ ou funções que recebem
     um *note iterador gerador assíncrono: 47a8. 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():
     d79.

     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: 853. 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: 2494.

      -- 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

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Adicionado 'algorithm', 'hash_bits' e
     'seed_bits'

 -- 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(): 14cb.  A *note tupla nomeada: 853.
     *note sys.version_info: 8a4. 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: 47b1.

 -- 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: 8a4.  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: 47b0.

     '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.

     'supports_isolated_interpreters' é um valor booleano que indica se
     esta implementação oferece suporte a múltiplos interpretadores
     isolados.  É ‘True’ para CPython na maioria das plataformas.
     Plataformas com este suporte implementam o módulo de baixo nível
     ‘_interpreters’.

     Ver também
     ..........

     PEP 684(8), PEP 734(9) e *note concurrent.interpreters: 25.

     *note sys.implementation: 730. 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: 730.
     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(10) para mais informações.

     Adicionado na versão 3.3.

     Alterado na versão 3.14: Adicionado o campo
     ‘supports_isolated_interpreters’.

          Nota: A adição de novos atributos obrigatórios deve passar
          pelo processo normal de PEPs.  Veja a PEP 421(11) para mais
          informações.

 -- Dado: sys.int_info

     Uma *note tupla nomeada: 853. 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(): 1786.
          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(): 1849, *note
          PYTHONINTMAXSTRDIGITS: 1a66. ou *note -X int_max_str_digits:
          16f.

     Adicionado na versão 3.1.

     Alterado na versão 3.11: Adicionados *note default_max_str_digits:
     256d. e *note str_digits_check_threshold: 47b4.

 -- Dado: sys.__interactivehook__

     Quando esse atributo existe, seu valor é chamado automaticamente
     (sem argumentos) quando o interpretador é iniciado em *note modo
     interativo: 440.  Isso é feito após o arquivo *note PYTHONSTARTUP:
     1b8. ser lido, para que você possa definir esse gancho lá.  O
     módulo *note site: cc. *note define isso: 11bf.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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: 28f.; você deve
     manter uma referência ao valor de retorno de *note intern(): 14d7.
     para se beneficiar dela.

 -- Função: sys._is_gil_enabled ()

     Retorna *note True: dfb. se a *note GIL: 164. estiver habiltada e
     *note False: d1f. 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: dfb. se o interpretador Python principal
     estiver *note desligando: 473.  Retorna *note False: d1f. caso
     contrário.

     Veja também a exceção *note PythonFinalizationError: 472.

     Adicionado na versão 3.5.

 -- Dado: sys._jit

     Utilitários para observar compilação just-in-time.

     A compilação JIT é um 'detalhe de implementação experimental' do
     CPython.  Não há garantia de que ‘sys._jit’ exista ou se comporte
     da mesma maneira em todas as implementações, versões ou
     configurações de construção do Python.

     Adicionado na versão 3.14.

      -- Função: _jit.is_available ()

          Retorna ‘True’ se o executável Python atual oferecer suporte à
          compilação JIT e ‘False’ caso contrário.  Isso pode ser
          controlado compilando o CPython com a opção
          ‘--experimental-jit’ no Windows e a opção *note
          -enable-experimental-jit: 44b. em todas as outras plataformas.

      -- Função: _jit.is_enabled ()

          Retorna ‘True’ se a compilação JIT estiver habilitada para o
          processo Python atual (implica *note sys._jit.is_available():
          44c.), e ‘False’ caso contrário.  Se a compilação JIT estiver
          disponível, isso pode ser controlado definindo a variável de
          ambiente *note PYTHON_JIT: 44a. como ‘0’ (desabilitada) ou ‘1’
          (habilitada) na inicialização do interpretador.

      -- Função: _jit.is_active ()

          Retorna ‘True’ se o quadro Python mais alto estiver executando
          código JIT (implica *note sys._jit.is_enabled(): 44d.), e
          ‘False’ caso contrário.

               Nota: Esta função destina-se a testar e depurar o próprio
               JIT. Deve ser evitada para qualquer outro propósito.

               Nota: Devido à natureza do rastreamento de compiladores
               JIT, chamadas repetidas a esta função podem gerar
               resultados surpreendentes.  Por exemplo, ramificar seu
               valor de retorno provavelmente levará a um comportamento
               inesperado (se isso fizer com que o código JIT seja
               inserido ou encerrado):

                    >>> for warmup in range(BIG_NUMBER):
                    ...     # Esta linha está "quente" e, eventualmente, é compilada JIT:
                    ...     if sys._jit.is_active():
                    ...         # Esta linha está "fria" e é executada no interpretador:
                    ...         assert sys._jit.is_active()
                    ...
                    Traceback (most recent call last):
                      File "<stdin>", line 5, in <module>
                        assert sys._jit.is_active()
                               ~~~~~~~~~~~~~~~~~~^^
                    AssertionError

 -- 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: aa. para mais informações.)

     Adicionado na versão 3.12.

 -- Função: sys._is_immortal (op)

     Retorna *note True: dfb. se o objeto fornecido for *note imortal:
     28f, *note False: d1f. caso contrário.

          Nota: Objetos que são imortais (e, portanto, retornam ‘True’
          ao serem passados para esta função) não têm garantia de serem
          imortais em versões futuras, e vice-versa para objetos
          mortais.

     Adicionado na versão 3.14.

     Esta função deve ser usada apenas para fins especializados.  Não é
     garantido que exista em todas as implementações do Python.

 -- Função: sys._is_interned (string)

     Retorna *note True: dfb. se a string fornecida for “internalizada”,
     *note False: d1f. 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:
     6da. em vez disso.  Elas mantêm a representação legada de
     ‘sys.last_exc’, conforme retornada de *note exc_info(): 88f. acima.

 -- Dado: sys.maxsize

     Um inteiro que fornece o valor máximo que uma variável do tipo
     *note Py_ssize_t: c49. 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(12), ‘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: 1266. que
     têm seus métodos *note find_spec(): a5e. 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(): a5e. é 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__:
     1f09. do pacote pai é passado como segundo argumento.  O método
     retorna um *note spec de módulo: 21fc, ou ‘None’ se o módulo não
     for encontrado.

     Ver também
     ..........

     *note importlib.abc.MetaPathFinder: a64.

          A classe base abstrata que define a interface dos objetos
          localizadores em *note meta_path: f1b.

     *note importlib.machinery.ModuleSpec: 2117.

          A classe concreta da qual *note find_spec(): a5e. deve
          retornar instâncias.

     Alterado na versão 3.4: *note Especificações de módulo: 21fc. foram
     introduzidas no Python 3.4, pela PEP 451(13).

     Alterado na versão 3.12: Foi removido o alternativa que procurava
     um método ‘find_module()’ se uma entrada *note meta_path: f1b. não
     tivesse um método *note find_spec(): a5e.

 -- 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: a37. são os argumentos para o
     interpretador Python, enquanto os elementos de *note sys.argv:
     1460. 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: a37. e ausentes em *note sys.argv: 1460.

     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: 1213, 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:
     3e1. ('antes' das entradas inseridas como resultado de *note
     PYTHONPATH: 1213.):

        * 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: 7b6. ou a variável de ambiente
     *note PYTHONSAFEPATH: 7b7.

     Um programa é livre para modificar esta lista para seus próprios
     propósitos.  Somente strings devem ser adicionadas a *note
     sys.path: 3e1.; todos os outros tipos de dados são ignorados
     durante a importação.

     Ver também
     ..........

        * Módulo *note site: cc. Descreve como usar arquivos .pth para
          estender *note sys.path: 3e1.

 -- Dado: sys.path_hooks

     Uma lista de chamáveis que recebem um argumento de caminho para
     tentar criar um *note localizador: 2203. para o caminho.  Se um
     localizador puder ser criado, ele deve ser retornado pelo chamável,
     senão, ele levanta *note ImportError: 64f.

     Originalmente especificado na PEP 302(14).

 -- Dado: sys.path_importer_cache

     Um dicionário atuando como um cache para objetos do *note
     localizador: 2203.  As chaves são caminhos que foram passados para
     *note sys.path_hooks: 121a. 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: 121a, então ‘None’ é armazenado.

     Originalmente especificado na PEP 302(15).

 -- Dado: sys.platform

     Uma string contendo um identificador da plataforma.  Valores
     conhecidos são:

     Sistema              Valor de ‘platform’
                          
     -----------------------------------------------------
                          
     AIX                  ‘'aix'’
                          
                          
     Android              ‘'android'’
                          
                          
     Emscripten           ‘'emscripten'’
                          
                          
     FreeBSD              ‘'freebsd'’
                          
                          
     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'’, '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('sunos'):
              # código específico do SunOS aqui...

     Alterado na versão 3.3: No Linux, *note sys.platform: 290. 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: 290. 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: 290. agora
     retorna ‘'android'’ em vez de ‘'linux'’.

     Alterado na versão 3.14: No FreeBSD, *note sys.platform: 290. não
     contém mais a versão principal.  É sempre ‘'freebsd'’, em vez de
     ‘'freebsd13'’ ou ‘'freebsd14'’.

     Ver também
     ..........

     *note os.name: 2e91. tem uma granularidade mais substancial.  *note
     os.uname(): 1312. fornece informações de versão dependentes do
     sistema.

     O módulo *note platform: af. 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: a5.)

        * ‘/usr/lib64/pythonX.Y/lib-dynload/’: Módulos de extensão C da
          biblioteca padrão (como o módulo *note errno: 5b, o nome exato
          do arquivo é específico da plataforma)

        * ‘/usr/lib/pythonX.Y/site-packages/’ (sempre usa ‘lib’, não
          *note sys.platlibdir: b28.): 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: 1ffc. para o
     script ‘configure’.  Veja *note Caminhos de instalação: 446. para
     caminhos derivados.

          Nota: Se um *note ambiente virtual: 3e5. estiver em vigor,
          este *note prefix: 3e4. vai apontar para o ambiente virtual.
          O valor para a instalação do Python ainda estará disponível,
          via *note base_prefix: 3e3.  Confira *note Ambientes virtuais:
          4742. para mais informações.

     Alterado na versão 3.14: Ao executar em um *note ambiente virtual:
     3e5, *note prefix: 3e4. e *note exec_prefix: 3e8. agora são
     definidos como o prefixo do ambiente virtual pela *note
     inicialização do caminho: 1834, em vez de *note site: cc.  Isso
     significa que *note prefix: 3e4. e *note exec_prefix: 3e8. sempre
     apontam para o ambiente virtual, mesmo quando *note site: cc. está
     desabilitado (*note -S: 13a4.).

 -- 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(): 169. é 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: a5. (constantes ‘RTLD_XXX’, por
     exemplo, *note os.RTLD_LAZY: 1314.).

     *note Disponibilidade: 1fed.: Unix.

 -- Função: sys.set_int_max_str_digits (maxdigits)

     Define a *note limitação de comprimento de string na conversão para
     inteiro: 800. usada por este interpretador.  Veja também *note
     get_int_max_str_digits(): 1786.

     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: 4687. 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(): 2e0.), 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(): 2e0.  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(): 1ad6.

     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: 1b5d. ‘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: f5c. será levantada.

     Alterado na versão 3.5.1: Uma exceção *note RecursionError: f5c.
     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(): 2e0.
     para cada thread que está sendo depurada ou usar *note
     threading.settrace(): a3e.

     As funções de rastreamento devem ter três argumentos: 'frame',
     'event' e 'arg'.  'frame' é o *note quadro de pilha atual: 8e4.
     '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(): 1ad6.

     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: dca. como *note
          False: d1f. naquele *note quadro: 8e4.

     ‘'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: 3c. 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:
          dcb. como *note True: dfb. no *note quadro: 8e4.

     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(): 2e0. não faz.  Observe que, para que isso
     funcione, uma função de rastreamento global deve ter sido instalada
     com *note settrace(): 2e0. 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: 21cb.

     Levanta um *note evento de auditoria: 1b5d. ‘sys.settrace’ sem
     argumentos.

     A função *note settrace(): 2e0. 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: dca. e *note f_trace_opcodes: dcb.
     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: 47a8. 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: 1b5d.
     ‘sys.set_asyncgen_hooks_firstiter’ sem argumentos.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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(16) 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(17)

          Nota: Esta função foi adicionada provisoriamente (veja PEP
          411(18) 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(19) 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"’.

     Os trampolins empilháveis não podem ser ativados se o JIT estiver
     ativo.

     *note Disponibilidade: 1fed.: Linux.

     Adicionado na versão 3.12.

     Ver também
     ..........

        * *note Suporte do Python ao perfilador perf do Linux: 4a8.

        * ‘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: 1fed.: 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: 1fed.: Linux.

     Adicionado na versão 3.12.

 -- Função: sys.remote_exec (pid, script)

     Executa 'script', um arquivo contendo código Python no processo
     remoto com o 'pid' fornecido.

     Esta função retorna imediatamente, e o código será executado pela
     thread principal do processo de destino na próxima oportunidade
     disponível, de forma semelhante à manipulação de sinais.  Não há
     interface para determinar quando o código foi executado.  O
     chamador é responsável por garantir que o arquivo ainda exista
     sempre que o processo remoto tentar lê-lo e que ele não tenha sido
     sobrescrito.

     O processo remoto deve estar executando um interpretador CPython da
     mesma versão principal e secundária que o processo local.  Se o
     interpretador local ou remoto for de pré-lançamento (alfa, beta ou
     candidato a lançamento), os interpretadores local e remoto devem
     ser exatamente da mesma versão.

     Quando o código é executado no processo remoto, um *note evento de
     auditoria: 1b5d. ‘sys.remote_exec’ é gerado com o 'pid' e o caminho
     para o arquivo de script.  Este evento é levantado no processo que
     chamou *note sys.remote_exec(): 16d.

     Quando o script é executado no processo remoto, um *note evento de
     auditoria: 1b5d. ‘cpython.remote_debugger_script’ é levantado com o
     caminho no processo remoto.  Este evento é levantado no processo
     remoto, não naquele que chamou *note sys.remote_exec(): 16d.

     *note Disponibilidade: 1fed.: Unix, Windows.

     Adicionado na versão 3.14.

 -- Função: sys._enablelegacywindowsfsencoding ()

     Altera *note tratador de erros e codificação do sistema de
     arquivos: 752. 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: 33d. antes de iniciar o Python.

     Veja também *note sys.getfilesystemencoding(): e47. e *note
     sys.getfilesystemencodeerrors(): ed6.

     *note Disponibilidade: 1fed.: 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: 33d. em vez disso.

     Adicionado na versão 3.6: Veja PEP 529(20) para mais detalhes.

     Deprecated since version 3.13, will be removed in version 3.16: Use
     *note PYTHONLEGACYWINDOWSFSENCODING: 33d.

 -- Dado: sys.stdin
 -- Dado: sys.stdout
 -- Dado: sys.stderr

     *note Objetos arquivo: 13bf. usados pelo interpretador para entrada
     padrão, saída e erros:

        * ‘stdin’ é usado para todas as entradas interativas (incluindo
          chamadas para *note input(): 14d4.);

        * ‘stdout’ é usado para a saída das instruções *note print():
          116b. e *note expressões: 2266. e para os prompts de *note
          input(): 14d4.;

        * Os prompts do próprio interpretador e suas mensagens de erro
          vão para ‘stderr’.

     Esses fluxos são *note arquivos texto: 1f22. regulares como aqueles
     retornados pela função *note open(): 314.  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: 638. e *note
          PyConfig.stdio_errors: 47b6.

          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:
          544. 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: 1200. antes de iniciar o Python ou usando a
          nova opção de linha de comando *note -X: 16f. ‘utf8’ e a
          variável de ambiente *note PYTHONUTF8: cc2.  No entanto, para
          o console do Windows, isso só se aplica quando *note
          PYTHONLEGACYWINDOWSSTDIO: e49. 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: 1c44. ou definindo a variável de ambiente *note
          PYTHONUNBUFFERED: 1c45.

     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: 149f.
          Por exemplo, para escrever bytes em *note stdout: cc0, 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: 111f,
          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: 1efc.

     Adicionado na versão 3.10.

 -- Dado: sys.thread_info

     Uma *note tupla nomeada: 853. 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(): 1b3.).

     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(): 501. pode ser substituída para
     controlar como exceções não levantáveis são manipuladas.

     Ver também
     ..........

     *note excepthook(): a02, 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: 8a4. e as funções fornecidas pelo módulo
     *note platform: af.

 -- Dado: sys.api_version

     A versão da API C, equivalente à macro C *note PYTHON_API_VERSION:
     47bc.  Definido para retrocompatibilidade.

     Atualmente, essa constante não é atualizada nas novas versões de
     Python e não é útil para controle de versão.  Isso pode mudar no
     futuro.

 -- 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: 118. 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: df. para fins informativos; modificar esse valor
     não tem efeito nas chaves de registro usadas pelo Python.

     *note Disponibilidade: 1fed.: 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: e0. 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: 16f.  Os nomes de
     opção são mapeados para seus valores, se fornecidos explicitamente,
     ou para *note True: dfb.  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: 16f.  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-0684/

   (9) https://peps.python.org/pep-0734/

   (10) https://peps.python.org/pep-0421/

   (11) https://peps.python.org/pep-0421/

   (12) https://peps.python.org/pep-0393/

   (13) https://peps.python.org/pep-0451/

   (14) https://peps.python.org/pep-0302/

   (15) https://peps.python.org/pep-0302/

   (16) https://peps.python.org/pep-0525/

   (17) 
https://github.com/python/cpython/tree/3.14/Lib/asyncio/base_events.py

   (18) https://peps.python.org/pep-0411/

   (19) https://peps.python.org/pep-0411/

   (20) 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: e0. é um espaço de nomes dentro do
     módulo *note sys: df, 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: e0. 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: 47c1.

   * *note Eventos: 47c2.

   * *note Funções de retorno de chamadas: 47c3.

* 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: 2ea. se 'tool_id' estiver em uso.

 -- Função: sys.monitoring.clear_tool_id (tool_id: int, /) -> None

     Cancela o registro de todos os eventos e funções de retorno de
     chamada associados a 'tool_id'.

 -- Função: sys.monitoring.free_tool_id (tool_id: int, /) -> None

     Deve ser chamado quando uma ferramenta não precisar mais de
     'tool_id'.  Chamará *note clear_tool_id(): 1880. antes de liberar
     'tool_id'.

 -- 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_LEFT

     Uma ramificação condicional vai para a esquerda.

     Cabe à ferramenta determinar como apresentar os ramos “esquerdo” e
     “direito”.  Não há garantia de qual ramo é “esquerdo” e qual é
     “direito”, exceto que será consistente durante toda a duração do
     programa.

 -- monitoring-event: sys.monitoring.events.BRANCH_RIGHT

     Uma ramificação condicional vai para a direita.

 -- 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 desenrolamento de uma exceção.
     Isso inclui exceções levantadas diretamente na função e que podem
     continuar a se propagar.

 -- 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: 47d3.

 -- monitoring-event: sys.monitoring.events.RERAISE

     Uma exceção é levantada novamente, por exemplo, no final de um
     bloco *note finally: 1b0.

 -- monitoring-event: sys.monitoring.events.STOP_ITERATION

     Uma exceção artificial *note StopIteration: de9. é levantada;
     consulte *note o evento STOP_ITERATION: 47d5.

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: 47cf. e *note PY_START: 47d0, 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:
              ...

     Definir este evento desativa todos os eventos.

* Menu:

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


File: python.info,  Node: Eventos locais,  Next: Evento descontinuado,  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: 47d0.

   * *note PY_RESUME: 47ce.

   * *note PY_RETURN: 47cf.

   * *note PY_YIELD: 47d2.

   * *note CALL: 18ff.

   * *note LINE: 47cd.

   * *note INSTRUCTION: 47cb.

   * *note JUMP: 47cc.

   * *note BRANCH_LEFT: 294.

   * *note BRANCH_RIGHT: 295.

   * *note STOP_ITERATION: 47d3.


File: python.info,  Node: Evento descontinuado,  Next: Eventos auxiliares,  Prev: Eventos locais,  Up: Eventos

5.29.2.5 Evento descontinuado
.............................

   * ‘BRANCH’

O evento ‘BRANCH’ foi descontinuado na versão 3.14.  Usar os eventos
*note BRANCH_LEFT: 294. e *note BRANCH_RIGHT: 295. proporcionará um
desempenho muito melhor, pois podem ser desabilitados independentemente.


File: python.info,  Node: Eventos auxiliares,  Next: Outros eventos,  Prev: Evento descontinuado,  Up: Eventos

5.29.2.6 Eventos auxiliares
...........................

Os eventos auxiliares podem ser monitorados como outros eventos, mas são
controlados por outro evento:

   * *note C_RAISE: 47c8.

   * *note C_RETURN: 47c9.

Os eventos *note C_RETURN: 47c9. e *note C_RAISE: 47c8. são controlados
pelo evento *note CALL: 18ff.  Os eventos *note C_RETURN: 47c9. e *note
C_RAISE: 47c8. só serão vistos se o evento *note CALL: 18ff.
correspondente estiver sendo monitorado.


File: python.info,  Node: Outros eventos,  Next: O evento STOP_ITERATION,  Prev: Eventos auxiliares,  Up: Eventos

5.29.2.7 Outros eventos
.......................

Outros eventos não estão necessariamente vinculados a um local
específico no programa e não podem ser desativados individualmente.

Os outros eventos que podem ser monitorados são:

   * *note PY_THROW: 17bf.

   * *note PY_UNWIND: 47d1.

   * *note RAISE: 18c4.

   * *note EXCEPTION_HANDLED: 47ca.


File: python.info,  Node: O evento STOP_ITERATION,  Prev: Outros eventos,  Up: Eventos

5.29.2.8 O evento STOP_ITERATION
................................

PEP 380(1) especifica que uma exceção *note StopIteration: de9. é
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: 47d3. é fornecido.  O *note STOP_ITERATION: 47d3. pode
ser desativado localmente, ao contrário do *note RAISE: 18c4.

Observe que o evento *note STOP_ITERATION: 47d3. e o evento *note RAISE:
18c4. para uma exceção *note StopIteration: de9. são equivalentes e
tratados como intercambiáveis ao gerar eventos.  As implementações
favorecerão *note STOP_ITERATION: 47d3. por questões de desempenho, mas
podem gerar um evento *note RAISE: 18c4. com uma *note StopIteration:
de9.

   ---------- 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.9 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 e/ou para um objeto código
específico.  Um evento vai acionar apenas uma vez, mesmo se ele for
ligado globalmente e localmente.

* 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.10 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: 2ea. 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.11 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: 32d. 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: 47f.).

 -- Função: sys.monitoring.get_local_events (tool_id: int, code:
          CodeType, /) -> int

     Retorna todos os eventos locais para 'code'

 -- Função: sys.monitoring.set_local_events (tool_id: int, code:
          CodeType, event_set: int, /) -> None

     Ativa todos os eventos locais para 'code' que estão definidos em
     'event_set'.  Levanta a *note ValueError: 2ea. se 'tool_id' não
     estiver em uso.


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.12 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 eventos locais podem ser desativados para um local de código
específico, retornando *note sys.monitoring.DISABLE: 47e4. 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.

 -- Função: sys.monitoring.restart_events () -> None

     Habilita todos os eventos que foram desabilitados por *note
     sys.monitoring.DISABLE: 47e4. 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.13 Registro de funções de retorno de chamada
...................................................

 -- 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(): 45f0. retorna ‘None’.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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.

Os retornos de chamada são chamados apenas uma vez, independentemente de
o evento estar ativado global e localmente.  Portanto, se um evento
puder ser ativado tanto para eventos globais quanto locais pelo seu
código, o retorno de chamada precisa ser escrito para lidar com qualquer
um dos gatilhos.

* 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.14 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.  Funções de retorno retornando um objeto diferente de *note
DISABLE: 47e4. vai ter nenhum efeito.  Eventos diferentes fornecerão à
função de retorno de chamada argumentos diferentes, como segue:

   * *note PY_START: 47d0. e *note PY_RESUME: 47ce.:

          func(code: CodeType, instruction_offset: int) -> object

   * *note PY_RETURN: 47cf. e *note PY_YIELD: 47d2.:

          func(code: CodeType, instruction_offset: int, retval: object) -> object

   * *note CALL: 18ff, *note C_RAISE: 47c8. e *note C_RETURN: 47c9.
     ('arg0' pode ser *note MISSING: 47e8. especificamente):

          func(code: CodeType, instruction_offset: int, callable: object, arg0: object) -> object

     'code' representa o objeto de código onde a chamada está sendo
     feita, enquanto 'callable' é o objeto que está prestes a ser
     chamado (e, portanto, acionou o evento).  Se não houver argumentos,
     'arg0' é definido como *note sys.monitoring.MISSING: 47e8.

     Para métodos de instância, 'callable' será o objeto função
     encontrado na classe com 'arg0' definido para a instância (ou seja,
     o argumento ‘self’ para o método).

   * *note RAISE: 18c4, *note RERAISE: 47d4, *note EXCEPTION_HANDLED:
     47ca, *note PY_UNWIND: 47d1, *note PY_THROW: 17bf. e *note
     STOP_ITERATION: 47d3.:

          func(code: CodeType, instruction_offset: int, exception: BaseException) -> object

   * *note LINE: 47cd.:

          func(code: CodeType, line_number: int) -> object

   * *note BRANCH_LEFT: 294, *note BRANCH_RIGHT: 295. e *note JUMP:
     47cc.:

          func(code: CodeType, instruction_offset: int, destination_offset: int) -> object

     Observe que o 'destination_offset' é onde o código será executado
     em seguida.

   * *note INSTRUCTION: 47cb.:

          func(code: CodeType, instruction_offset: int) -> object


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: e1. 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<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: e1. coloca todas as variáveis encontradas nestes
arquivos em um dicionário que pode ser acessado usando *note
get_config_vars(): 297. ou *note get_config_var(): 174.

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 'nome'.  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: e1. sob identificadores únicos baseados no valor
retornado por *note os.name: 2e91.  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: 1518.).

   - 'posix_venv': esquema para *note ambientes virtuais do Python: 117.
     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: 117. 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:
1518. (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: 1fe4.).

* 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: e1. 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: e1.

 -- 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(): 47fa.  Ele pode ser passado para as funções
     *note sysconfig: e1. que recebem um argumento 'scheme', como *note
     get_paths(): 33e.

     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(): 1ac7. e *note get_preferred_scheme(): 894.

     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: e1.

 -- 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(): 47fc.

     *note sysconfig: e1. 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(): 1528. usará as variáveis retornadas por *note
     get_config_vars(): 297. 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(): 47fa.  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(): 297.

     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: 5dd.

 -- 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():
     1528. 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(): 33e.
     vai levantar uma *note KeyError: 5dd.


File: python.info,  Node: Outras funções<3>,  Next: Uso na linha de comando<9>,  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(): 1312.), 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: 290.

 -- 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<9>,  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: e1. 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(): 143e, *note get_python_version(): 143f, *note
get_path(): 1528. e *note get_config_vars(): 297.


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(): 314.

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(): 314. que envolve o embutido *note
open(): 314, 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__: 772. 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: 2475.

   * *note Exceções embutidas: 1b27.

   * *note Funções embutidas: 1458.

   * *note Tipos embutidos: 247f.


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: 1ef3. 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: 23b.:

          $ 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: 1a8.:

          $ 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: 1ef3.


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(): 276.  Por exemplo:

     sys.exit(main())

Uma vez que a chamada à ‘main’ está embutida dentro de *note sys.exit():
276, a expectativa é que a sua função retorne somente valores aceitável
para *note sys.exit(): 276.; 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(): 276. 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: b29.  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: 1f03. 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: 23b.  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: 1f07. na seção *note Módulos: 1ef3. 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: 117, 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: c3. para mais detalhes sobre o sinalizador *note -m:
23b. para o executável do interpretador.

Veja *note zipapp: 136. 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: 1ef4.) 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`!')

         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

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: 17ab.
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: 17ab, o Python o passa para ‘namely’.  Veja *note
Considerações especiais sobre __main__: 22f2. 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

O escopo ‘__main__’ é usado na implementação de *note pdb: aa. e *note
rlcompleter: c2.


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, onde essa
condição (normalmente) não garante o levantamento de uma exceção e o
encerramento do programa.  Por exemplo, pode-se querer emitir um aviso
quando um programa usa um módulo obsoleto.

Os programadores Python emitem avisos chamando a função *note warn():
1707. definida neste módulo.  (Os programadores C usam *note
PyErr_WarnEx(): 163b.; veja *note Tratamento de Exceções: 4815. para
detalhes).

Mensagens de aviso são normalmente escritas no *note sys.stderr: b29,
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 *note categoria de aviso: 25a4, o texto da
mensagem de aviso e o local de origem onde 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, é feita uma determinação 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: 1b1, que é uma sequência de regras e ações
correspondentes.  As regras podem ser adicionadas ao filtro chamando
*note filterwarnings(): 1697. e redefinidas para seu estado padrão
chamando *note resetwarnings(): 4816.

A exibição de mensagens de aviso é feita chamando *note showwarning():
4817, que pode ser substituída; a implementação padrão desta função
formata a mensagem chamando *note formatwarning(): 1cae, que também está
disponível para uso por implementações personalizadas.

Ver também
..........

*note logging.captureWarnings(): 303a. 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::
* Concurrent safety of Context Managers::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 25a2, 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: 25a5.

As seguintes classes de categorias de avisos estão definidas atualmente:

Classe                                 Descrição
                                       
-------------------------------------------------------------------------------------------
                                       
*note Warning: 25a5.                   Esta é a classe base de todas as classes de
                                       categoria de aviso.  É uma subclasse de
                                       *note Exception: bc3.
                                       
                                       
*note UserWarning: 25a6.               A categoria padrão para *note warn(): 1707.
                                       
                                       
*note DeprecationWarning: 1a3.         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: 1ae.              Base category for warnings about dubious
                                       syntactic features (typically emitted when
                                       compiling Python source code, and hence may not
                                       be suppressed by runtime filters)
                                       
                                       
*note RuntimeWarning: 4d1.             Categoria base para avisos sobre recursos
                                       duvidosos de tempo de execução.
                                       
                                       
*note FutureWarning: 64d.              Categoria base para avisos sobre recursos
                                       descontinuados quando esses avisos se destinam a
                                       usuários finais de aplicações escritas em Python.
                                       
                                       
*note PendingDeprecationWarning: abc.  Categoria base para avisos sobre recursos que
                                       serão descontinuados no futuro (ignorados por
                                       padrão).
                                       
                                       
*note ImportWarning: 713.              Categoria base para avisos acionados durante o
                                       processo de importação de um módulo (ignorado por
                                       padrão).
                                       
                                       
*note UnicodeWarning: 1615.            Categoria base para avisos relacionados a
                                       Unicode.
                                       
                                       
*note BytesWarning: e10.               Categoria base para avisos relacionados a
                                       *note bytes: 192. e *note bytearray: 342.
                                       
                                       
*note ResourceWarning: 546.            Categoria base para avisos relacionados a uso de
                                       recursos (ignorado por padrão).
                                       

Alterado na versão 3.7: Anteriormente, *note DeprecationWarning: 1a3. e
*note FutureWarning: 64d. 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 com cada
especificação de filtro na lista, por sua vez, 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
                         
                         
     ‘"all"’             alias to “always”
                         
                         
     ‘"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 que o início
     da mensagem de aviso deve corresponder, sem distinção entre
     maiúsculas e minúsculas.  Em *note -W: abb. e *note PYTHONWARNINGS:
     d97, '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: 25a5.) 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: abb. e *note
     PYTHONWARNINGS: d97, 'module' é uma string literal que o nome do
     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: 25a5. é derivada da classe embutida *note
Exception: bc3, para transformar um aviso em um erro, simplesmente
levantamos ‘category(message)’.

Se um aviso for relatado e não corresponder a nenhum filtro registrado,
a ação “padrão” será aplicada (daí seu 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
.....................................

The warnings filter is initialized by *note -W: abb. options passed to
the Python interpreter command line and the *note PYTHONWARNINGS: d97.
environment variable.  The interpreter saves the arguments for all
supplied entries without interpretation in *note sys.warnoptions: 3f2.;
the *note warnings: 118. module parses these when it is first imported
(invalid options are ignored, after printing a message to *note
sys.stderr: b29.).

Individual warnings filters are specified as a sequence of fields
separated by colons:

     action:message:category:module:line

The meaning of each of these fields is as described in *note O filtro de
avisos: 1b1.  When listing multiple filters on a single line (as for
*note PYTHONWARNINGS: d97.), 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: abb. command-line option, the *note
PYTHONWARNINGS: d97. environment variable and calls to *note
filterwarnings(): 1697.

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: 503, the list of default warning filters is
empty.

Alterado na versão 3.2: *note DeprecationWarning: 1a3. is now ignored by
default in addition to *note PendingDeprecationWarning: abc.

Alterado na versão 3.7: *note DeprecationWarning: 1a3. is once again
shown by default when triggered directly by code in ‘__main__’.

Alterado na versão 3.7: *note BytesWarning: e10. no longer appears in
the default filter list and is instead configured via *note
sys.warnoptions: 3f2. when *note -b: 7ee. 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: 3f2. 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: 1a3. 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: 179.
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.

          Nota: See *note Concurrent safety of Context Managers: 4823.
          for details on the concurrency-safety of the *note
          catch_warnings: 179. context manager when used in programs
          using multiple threads or async functions.


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: 179.
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.

          Nota: See *note Concurrent safety of Context Managers: 4823.
          for details on the concurrency-safety of the *note
          catch_warnings: 179. context manager when used in programs
          using multiple threads or async functions.

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: 1a3. (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: 10c.
module does this).

In less ideal cases, applications can be checked for use of deprecated
interfaces by passing *note -Wd: abb. 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:
abb. (e.g.  ‘-W error’).  See the *note -W: abb. 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: 25a4.; it defaults to *note UserWarning: 25a6.
     Alternatively, 'message' can be a *note Warning: 25a5. 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: 1b1.  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: 546.

     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():
     1707, passing in explicitly the message, category, filename and
     line number, and optionally the module name and the registry (which
     should be the ‘__warningregistry__’ dictionary of the module).  The
     module name defaults to the filename with ‘.py’ stripped; if no
     registry is passed, the warning is never suppressed.  'message'
     must be a string and 'category' a subclass of *note Warning: 25a5.
     or 'message' may be a *note Warning: 25a5. instance, in which case
     'category' will be ignored.

     '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: 546.

     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: b29.  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(): 4817. 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(): 1cae. 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: 1b1.  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: 1b1.  The meaning of the function parameters is as
     for *note filterwarnings(): 1697, 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(): 1697, including that of
     the *note -W: abb. command line options and calls to *note
     simplefilter(): 8c5.

 -- 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: 56d. 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: 43a4. decorator for the attribute to exist on
     the overload as returned by *note typing.get_overloads(): 8b2.

     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,  Next: Concurrent safety of Context Managers,  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)

     A context manager that copies and, upon exit, restores the warnings
     filter and the *note showwarning(): 4817. function.  If the
     'record' argument is *note False: d1f. (the default) the context
     manager returns *note None: 87a. on entry.  If 'record' is *note
     True: dfb, a list is returned that is progressively populated with
     objects as seen by a custom *note showwarning(): 4817. function
     (which also suppresses output to ‘sys.stdout’).  Each object in the
     list has attributes with the same names as the arguments to *note
     showwarning(): 4817.

     The 'module' argument takes a module that will be used instead of
     the module returned when you import *note warnings: 118. whose
     filter will be protected.  This argument exists primarily for
     testing the *note warnings: 118. module itself.

     If the 'action' argument is not ‘None’, the remaining arguments are
     passed to *note simplefilter(): 8c5. as if it were called
     immediately on entering the context.

     See *note O filtro de avisos: 1b1. for the meaning of the
     'category' and 'lineno' parameters.

          Nota: See *note Concurrent safety of Context Managers: 4823.
          for details on the concurrency-safety of the *note
          catch_warnings: 179. context manager when used in programs
          using multiple threads or async functions.

     Alterado na versão 3.11: Added the 'action', 'category', 'lineno',
     and 'append' parameters.


File: python.info,  Node: Concurrent safety of Context Managers,  Prev: Gerenciadores de contexto disponíveis,  Up: warnings — Controle de avisos

5.29.6.12 Concurrent safety of Context Managers
...............................................

The behavior of *note catch_warnings: 179. context manager depends on
the *note sys.flags.context_aware_warnings: 18a. flag.  If the flag is
true, the context manager behaves in a concurrent-safe fashion and
otherwise not.  Concurrent-safe means that it is both thread-safe and
safe to use within *note asyncio coroutines: 364e. and tasks.  Being
thread-safe means that behavior is predictable in a multi-threaded
program.  The flag defaults to true for free-threaded builds and false
otherwise.

If the *note context_aware_warnings: 18a. flag is false, then *note
catch_warnings: 179. will modify the global attributes of the *note
warnings: 118. module.  This is not safe if used within a concurrent
program (using multiple threads or using asyncio coroutines).  For
example, if two or more threads use the *note catch_warnings: 179. class
at the same time, the behavior is undefined.

If the flag is true, *note catch_warnings: 179. will not modify global
attributes and will instead use a *note ContextVar: 17db. to store the
newly established warning filtering state.  A context variable provides
thread-local storage and it makes the use of *note catch_warnings: 179.
thread-safe.

The 'record' parameter of the context handler also behaves differently
depending on the value of the flag.  When 'record' is true and the flag
is false, the context manager works by replacing and then later
restoring the module’s *note showwarning(): 4817. function.  That is not
concurrent-safe.

When 'record' is true and the flag is true, the *note showwarning():
4817. function is not replaced.  Instead, the recording status is
indicated by an internal property in the context variable.  In this
case, the *note showwarning(): 4817. function will not be restored when
exiting the context handler.

The *note context_aware_warnings: 18a. flag can be set the *note -X
context_aware_warnings: 16f. command-line option or by the *note
PYTHON_CONTEXT_AWARE_WARNINGS: 17c6. environment variable.

          Nota: It is likely that most programs that desire thread-safe
          behaviour of the warnings module will also want to set the
          *note thread_inherit_context: 175. flag to true.  That flag
          causes threads created by *note threading.Thread: 176. to
          start with a copy of the context variables from the thread
          starting it.  When true, the context established by *note
          catch_warnings: 179. in one thread will also apply to new
          threads started by it.  If false, new threads will start with
          an empty warnings context variable, meaning that any filtering
          that was established by a *note catch_warnings: 179. context
          manager will no longer be active.

Alterado na versão 3.14: Added the *note
sys.flags.context_aware_warnings: 18a. flag and the use of a context
variable for *note catch_warnings: 179. if the flag is true.  Previous
versions of Python acted as if the flag was always set to false.


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: 1b4f. tais como *note
__init__(): 8b4. e *note __repr__(): 824. 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.14/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: 92f. que é usado para adicionar
     *note métodos especiais: 1b4f. 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: f45.  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__():
          8b4. 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__():
          824. 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__(): ce5.
          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__(): 149c, *note __le__(): 1506, *note __gt__(): 1507. e
          *note __ge__(): 1508. 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: 2ea. é
          levantada.

          Se a classe do usuário já define algum dentre ‘__lt__()’,
          ‘__le__()’, ‘__gt__()’ ou ‘__ge__()’, então *note TypeError:
          198. é levantada.

        - 'unsafe_hash': Se verdadeiro, força ‘dataclasses’ a criar um
          método *note __hash__(): ce6, mesmo que não seja seguro
          fazê-lo.  Caso contrário, gera um método *note __hash__():
          ce6. 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(): 7f6, 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__(): ce6, 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: 198.

          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: c72,
          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: 482f. below.

          If *note __setattr__(): 2212. or *note __delattr__(): 2213. is
          defined in the class and 'frozen' is true, then *note
          TypeError: 198. is raised.

        - 'match_args': Se verdadeiro (o padrão é ‘True’), a tupla *note
          __match_args__: 1b62. será criada a partir da lista de
          parâmetros não-somente-nomeado para o método *note __init__():
          8b4. 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__(): 8b4. gerado a partir de um
          campo somente-nomeado deve ser especificado com um campo
          quando ‘__init__()’ é chamado.  Veja a entrada *note
          parâmetro: 21e4. do glossário para detalhes.  Veja também a
          seção *note KW_ONLY: 4830.

          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__: 16d9. será gerado e uma nova classe será retornada
          no lugar da original.  Se ‘__slots__’ já estiver definido na
          classe, então *note TypeError: 198. será levantada.

               Aviso: Passar parâmetros para uma classe base *note
               __init_subclass__(): 838. ao usar ‘slots=True’ resultará
               em um *note TypeError: 198.  Use ‘__init_subclass__’ sem
               parâmetros ou use valores padrão como solução
               alternativa.  Consulte gh-91126(1) 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: 2251.  Portanto, não use ‘__slots__’ para
          recuperar os nomes dos campos de uma classe de dados.  Use
          *note fields(): 1887. 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: 11e6.  É 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__(): 8b4. adicionado, que será definido como:

          def __init__(self, a: int, b: int = 0):

     *note TypeError: 198. 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, doc=None)

     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: 4831. é 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: 4831.

     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__(): 8b4. gerado.

        - 'repr': Se verdadeiro (o padrão), este campo é incluído na
          string retornada pelo método *note __repr__(): 824. gerado.

        - 'hash': Pode ser um bool ou ‘None’.  Se verdadeiro, este campo
          é incluído no método *note __hash__(): ce6. gerado.  Se false,
          este campo é excluído do *note __hash__(): ce6. 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__():
          ce5, *note __gt__(): 1507, etc.).

        - 'metadata': Pode ser um mapeamento ou ‘None’.  ‘None’ é
          tratado como um dicionário vazio.  Este valor é agrupado em
          *note MappingProxyType(): 68d. para torná-lo somente leitura e
          exposto no objeto *note Field: 18af.  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__(): 8b4. gerados são calculados.

          Campos somente-nomeados também não são incluídos em
          ‘__match_args__’.

          Adicionado na versão 3.10.

        - 'doc': docstring opcional para este campo.

          Adicionado na versão 3.14.

     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: 4db. 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(): 1887.
     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(): 18ae.
          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: 4832.  Fields annotated with ‘InitVar’ are considered
     pseudo-fields, and thus are neither returned by the *note fields():
     1887. function nor used in any way except adding them as parameters
     to *note __init__(): 8b4. and an optional *note __post_init__():
     4833.

 -- Função: dataclasses.fields (class_or_instance)

     Retorna uma tupla de objetos *note Field: 18af. 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:
     198. 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(): d59.

     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: 198. 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(): d59.

     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: 198. 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,
          decorator=dataclass)

     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: 8b0. 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: 4db.

     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.

     The 'decorator' parameter is a callable that will be used to create
     the dataclass.  It should take the class object as a first argument
     and the same keyword arguments as *note @dataclass: 4db.  By
     default, the *note @dataclass: 4db. function is used.

     This function is not strictly required, because any Python
     mechanism for creating a new class with *note __annotations__: 455.
     can then apply the *note @dataclass: 4db. 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

     Adicionado na versão 3.14: Added the 'decorator' parameter.

 -- 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: 198.  If keys in 'changes' are not field names of
     the given dataclass, raises *note TypeError: 198.

     The newly returned object is created by calling the *note
     __init__(): 8b4. method of the dataclass.  This ensures that *note
     __post_init__(): 4833, 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__(): 4833.

     It is an error for 'changes' to contain any fields that are defined
     as having ‘init=False’.  A *note ValueError: 2ea. 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__(): 4833, 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(): 1c0.

 -- 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__(): 8b4. 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__(): 2212. or
     *note __delattr__(): 2213. is called on a dataclass which was
     defined with ‘frozen=True’.  It is a subclass of *note
     AttributeError: 5e4.

   ---------- Footnotes ----------

   (1) 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__(): 8b4, 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__(): 8b4. method generated by *note @dataclass: 4db.
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__(): 4833. 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():
19a9. 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: 4db. 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: 566.  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(): 1887. 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: 4db. 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: 1ac6.  If a
field is an *note InitVar: 1ac6, 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(): 1887. function.  Init-only fields are
added as parameters to the generated *note __init__(): 8b4. method, and
are passed to the optional *note __post_init__(): 4833. 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(): 1887. will return *note Field: 18af.
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: 4db. decorator you can
emulate immutability.  In that case, dataclasses will add *note
__setattr__(): 2212. and *note __delattr__(): 2213. methods to the
class.  These methods will raise a *note FrozenInstanceError: 4834. when
invoked.

There is a tiny performance penalty when using ‘frozen=True’: *note
__init__(): 8b4. 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: 4db.
decorator, it looks through all of the class’s base classes in reverse
MRO (that is, starting at *note object: c72.) 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: 19b, as specified in class ‘C’.

The generated *note __init__(): 8b4. 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__(): 8b4. 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(): 18ae. 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__(): 8b4. (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: 4db. decorator will raise a
*note ValueError: 2ea. 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: 24c, *note dict: 183, or *note set: 184, 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: e3d. as their default
value have the following special behaviors:

   * The value for the field passed to the dataclass’s *note __init__():
     8b4. method is passed to the descriptor’s *note __set__(): 224c.
     method rather than overwriting the descriptor object.

   * Similarly, when getting or setting the field, the descriptor’s
     *note __get__(): 16d6. or ‘__set__()’ method is called rather than
     returning or overwriting the descriptor object.

   * To determine whether a field contains a default value, *note
     @dataclass: 4db. 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: 5e4. 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: 186.  Para mais informações, veja também *note
Tipos de Gerenciador de Contexto: 22a1. e *note Gerenciadores de
contexto da instrução with: 229f.

* 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.14/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: 13b2. para classes que implementam
     *note object.__enter__(): 7d9. e *note object.__exit__(): 14fc.
     Uma implementação padrão para *note object.__enter__(): 7d9. é
     fornecida, que retorna ‘self’, enquanto *note object.__exit__():
     14fc. é um método abstrato que, por padrão, retorna ‘None’.  Veja
     também a definição de *note Tipos de Gerenciador de Contexto: 22a1.

     Adicionado na versão 3.6.

 -- Classe: contextlib.AbstractAsyncContextManager

     Uma *note classe base abstrata: 13b2. para classes que implementam
     *note object.__aenter__(): 22b2. e *note object.__aexit__(): 18e5.
     Uma implementação padrão para *note object.__aenter__(): 22b2. é
     fornecida, que retorna ‘self’, enquanto *note object.__aexit__():
     18e5. é um método abstrato que, por padrão, retorna ‘None’.  Veja
     também a definição de *note Gerenciadores de contexto assíncronos:
     807.

     Adicionado na versão 3.7.

 -- Função: @contextlib.contextmanager

     Esta função é um *note decorador: 92f. que pode ser usado para
     definir uma função de fábrica para gerenciadores de contexto de
     instrução *note with: 186, sem precisar criar uma classe ou separar
     os métodos *note __enter__(): 7d9. e *note __exit__(): 14fc.

     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: 1257. quando chamada.  Este iterador deve produzir
     exatamente um valor, que será vinculado aos alvos na cláusula ‘as’
     da instrução *note with: 186, se houver.

     No ponto em que o gerador é produzido, o bloco aninhado na
     instrução *note with: 186. é 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: 8ed.…*note except: 1ab.…*note finally: 1b0. 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(): 13fe. usa *note ContextDecorator: 13fd.
     para que os gerenciadores de contexto que ela cria possam ser
     usados como decoradores, bem como em instruções *note with: 186.
     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():
     13fe. 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: 13fd.

 -- Função: @contextlib.asynccontextmanager

     Semelhante a *note contextmanager(): 13fe, mas cria um *note
     gerenciador de contexto assíncrono: 807.

     Esta função é um *note decorador: 92f. que pode ser usado para
     definir uma função de fábrica para gerenciadores de contexto
     assíncronos de instrução *note async with: 185, sem precisar criar
     uma classe ou separar os métodos *note __aenter__(): 22b2. e *note
     __aexit__(): 18e5.  Ela deve ser aplicada a uma função que atua
     como *note gerador assíncrono: 2327.

     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(): d13. podem ser usados como decoradores ou
     com instruções *note async with: 185.:

          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(): d13. 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(): d13. 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: 186.
     for encerrado.

          Nota: A maioria dos tipos que gerenciam recursos suporta o
          protocolo de *note gerenciador de contexto: 1e0, que fecha
          'thing' ao sair da declaração *note with: 186.  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(): 305.
          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: 17f. 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: 807.:

          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: 7e5. 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: 4846.

     Se o código dentro do bloco ‘with’ levantar uma exceção *note
     BaseExceptionGroup: 55f, 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(): 1975. 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: 55f.

 -- Função: contextlib.redirect_stdout (new_target)

     Context manager for temporarily redirecting *note sys.stdout: cc0.
     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(): aca. normally is sent to
     'sys.stdout'.  You can capture that output in a string by
     redirecting the output to an *note io.StringIO: 111f. object.  The
     replacement stream is returned from the ‘__enter__’ method and so
     is available as the target of the *note with: 186. statement:

          with redirect_stdout(io.StringIO()) as f:
              help(pow)
          s = f.getvalue()

     To send the output of *note help(): aca. 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(): aca. to 'sys.stderr':

          with redirect_stdout(sys.stderr):
              help(pow)

     Note that the global side effect on *note sys.stdout: cc0. 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: 4846.

     Adicionado na versão 3.4.

 -- Função: contextlib.redirect_stderr (new_target)

     Similar to *note redirect_stdout(): fdc. but redirecting *note
     sys.stderr: b29. to another file or file-like object.

     O gerenciador de contexto é *note reentrante: 4846.

     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(): 816, it changes the
     current working directory upon entering and restores the old one on
     exit.

     O gerenciador de contexto é *note reentrante: 4846.

     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(): 13fe, 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: 186. 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: 13fd. 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__(): 7d9. method returns the *note ExitStack:
     d12. 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: 186.
     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: 186. 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__():
          14fc. method to the callback stack.  The return value is the
          result of the context manager’s own *note __enter__(): 7d9.
          method.

          These context managers may suppress exceptions just as they
          normally would if used directly as part of a *note with: 186.
          statement.

          Alterado na versão 3.11: Raises *note TypeError: 198. instead
          of *note AttributeError: 5e4. if 'cm' is not a context
          manager.

      -- Método: push (exit)

          Adds a context manager’s *note __exit__(): 14fc. method to the
          callback stack.

          As ‘__enter__’ is 'not' invoked, this method can be used to
          cover part of an *note __enter__(): 7d9. implementation with a
          context manager’s own *note __exit__(): 14fc. 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__(): 14fc. 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__():
          14fc. 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: d12.
          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: 186. 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: 807, similar to *note
     ExitStack: d12, that supports combining both synchronous and
     asynchronous context managers, as well as having coroutines for
     cleanup logic.

     The *note close(): 4849. method is not implemented; *note aclose():
     484a. must be used instead.

      -- Método: async enter_async_context (cm)

          Similar to *note ExitStack.enter_context(): 7e3. but expects
          an asynchronous context manager.

          Alterado na versão 3.11: Raises *note TypeError: 198. instead
          of *note AttributeError: 5e4. if 'cm' is not an asynchronous
          context manager.

      -- Método: push_async_exit (exit)

          Similar to *note ExitStack.push(): 4847. but expects either an
          asynchronous context manager or a coroutine function.

      -- Método: push_async_callback (callback, /, *args, **kwds)

          Similar to *note ExitStack.callback(): c6a. but expects a
          coroutine function.

      -- Método: async aclose ()

          Similar to *note ExitStack.close(): 4849. but properly handles
          awaitables.

     Continuing the example for *note asynccontextmanager(): d13.:

          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: 27.

* 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: d12. is the one given in the
class documentation: supporting a variable number of context managers
and other cleanup operations in a single *note with: 186. 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: d12. also makes it quite easy to use *note
with: 186. 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: 186. statement body or the context manager’s ‘__exit__’
method.  By using *note ExitStack: d12. 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: 8ed./*note except: 1ab./*note finally: 1b0. 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: d12. can make it easier to handle various situations that
can’t be handled directly in a *note with: 186. 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(): 4847, this
method can be useful in cleaning up an already allocated resource if
later steps in the *note __enter__(): 7d9. 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: d12. 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(): c6a. 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: 13fd. 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: 13fd.
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__(): 7d9.  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: 186.

   ---------- 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: 186. 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: 186.
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: 186. statement will close the file, preventing any
further IO operations using that file object.

Context managers created using *note contextmanager(): 13fe. 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: 186. statements,
but may also be used 'inside' a ‘with’ statement that is already using
the same context manager.

*note threading.RLock: 32c. is an example of a reentrant context
manager, as are *note suppress(): 111e, *note redirect_stdout(): fdc,
and *note chdir(): 815.  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(): fdc, for example, is definitely not
thread safe, as it makes a global modification to the system state by
binding *note sys.stdout: cc0. 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: 1930. is an example of a reusable, but not
reentrant, context manager (for a reentrant lock, it is necessary to use
*note threading.RLock: 32c. instead).

Another example of a reusable, but not reentrant, context manager is
*note ExitStack: d12, 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: d12. 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: 13b2. (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: a2. sobre uma hierarquia de tipo para números baseado nas
ABCs.)

O módulo *note collections: 1e. tem algumas classes concretas que
derivam de ABCs; essas podem, evidentemente, ser ainda mais derivadas.
Além disso, o submódulo *note collections.abc: 1f. 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: 819. ou se é um
*note mapeamento: 13b7.

Este módulo fornece a metaclasse *note ABCMeta: 1111. para definir ABCs
e uma classe auxiliar *note ABC: 1110. para alternativamente definir
ABCs através de herança:

 -- Classe: abc.ABC

     Uma classe auxiliar que tem *note ABCMeta: 1111. 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: 1111,
     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(): 9ba,
     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(): 1a6.).  (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():
          110f.

     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(): 9ba. sem a necessidade de
          chamar *note register(): 1284. em toda classe que você queira
          considerar uma subclasse da ABC. (Este método de classe é
          chamado do método *note __subclasscheck__(): 225e. da ABC.)

          Este método deve retornar ‘True’, ‘False’ ou *note
          NotImplemented: 1a2.  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__(): e5d, 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__(): 2836. definido aqui
     diz que qualquer classe que tenha um método *note __iter__(): e5d.
     em seu *note __dict__: 772. (ou no de uma de suas classes base,
     acessados via lista *note __mro__: 220e.) é 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__():
     e5d. (ela usa o protocolo iterável antigo, definido em termos de
     *note __len__(): 2245. e *note __getitem__(): 581.).  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: 1111. 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(): 4859.  A ‘abstractmethod()’ afeta apenas
     subclasses derivadas usando herança regular; “subclasses virtuais”
     registradas com o método *note register(): 1284. 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: 4ad. 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(): 1a6. 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: 488. com *note abstractmethod(): 1281, tornando
     redundante este decorador.

     Uma subclasse da *note classmethod(): 488. embutida, indicando um
     método de classe abstrato.  Caso contrário, é similar à *note
     abstractmethod(): 1281.

     Este caso especial está descontinuado, pois o decorador da *note
     classmethod(): 488. 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: 450. com *note abstractmethod(): 1281, tornando
     redundante este decorador.

     Uma subclasse da *note staticmethod(): 450. embutida, indicando um
     método estático abstrato.  Caso contrário, ela é similar à *note
     abstractmethod(): 1281.

     Este caso especial está descontinuado, pois o decorador da *note
     staticmethod(): 450. 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: 4ad, *note property.getter(): 1915, *note
     property.setter(): 1916. e *note property.deleter(): 1917. com
     *note abstractmethod(): 1281, tornando redundante este decorador.

     Uma subclasse da *note property(): 4ad. embutida, indicando uma
     propriedade abstrata.

     Este caso especial está descontinuado, pois o decorador da *note
     property(): 4ad. 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(): 1284. 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: 1111, 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.14/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: d. 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: d. 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(): 258c. é 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(): a74.  É possível
     registrar mais ou menos a mesma função e argumentos.

     Na terminação normal do programa (por exemplo, se *note sys.exit():
     276. 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: f30.
     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(): 4af.
          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: f3. 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(): 4af. um novo processo em uma função registrada
     agora leva a *note RuntimeError: 243.

 -- Função: atexit.unregister (func)

     Remove 'func' da lista de funções a serem executadas no
     desligamento do interpretador.  *note unregister(): 485d.
     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: d. 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: bf.

     Exemplo útil de *note atexit: d. para ler e escrever arquivos de
     histórico de *note readline: bf.

* 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(): a74. 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: 92f.:

     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: cdf. — these are objects of
type *note types.TracebackType: cdd, which are assigned to the *note
__traceback__: 14c2. field of *note BaseException: 7cc. instances.

Ver também
..........

Módulo *note faulthandler: 5c.

     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: aa.

     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: 55c. class and its helper classes *note
     StackSummary: 1079. and *note FrameSummary: 107a.  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.

Adicionado na versão 3.13: A saída é colorizada por padrão e ela pode
ser *note controlada usando variáveis de ambiente: 1b7.

* Menu:

* Funções de nível de módulo::
* 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.14/Lib/traceback.py


File: python.info,  Node: Funções de nível de módulo,  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: cdf. '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: b29.;
     otherwise it should be an open *note file: 13bf. or *note file-like
     object: 289a. to receive the output.

          Nota: The meaning of the 'limit' parameter is different than
          the meaning of *note sys.tracebacklimit: 1897.  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: cdf. 'tb' to 'file'.  This differs from *note
     print_tb(): 107b. 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: 18e. 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(): 107b.  If 'chain' is true (the default), then chained
     exceptions (the *note __cause__: 14c4. or *note __context__: 14c3.
     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: 6da.).

 -- 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: 8e4. to start.  The
     optional 'file' argument has the same meaning as for *note
     print_tb(): 107b.

     Alterado na versão 3.5: Added negative 'limit' support.

 -- Função: traceback.extract_tb (tb, limit=None)

     Return a *note StackSummary: 1079. object representing a list of
     “pre-processed” stack trace entries extracted from the *note
     traceback object: cdf. 'tb'.  It is useful for alternate formatting
     of stack traces.  The optional 'limit' argument has the same
     meaning as for *note print_tb(): 107b.  A “pre-processed” stack
     trace entry is a *note FrameSummary: 107a. object containing
     attributes *note filename: 4866, *note lineno: 4867, *note name:
     4868, and *note line: 4869. 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: 8e4.
     The return value has the same format as for *note extract_tb():
     4865.  The optional 'f' and 'limit' arguments have the same meaning
     as for *note print_stack(): 107c.

 -- Função: traceback.print_list (extracted_list, file=None)

     Print the list of tuples as returned by *note extract_tb(): 4865.
     or *note extract_stack(): 486a. as a formatted stack trace to the
     given file.  If 'file' is ‘None’, the output is written to *note
     sys.stderr: b29.

 -- Função: traceback.format_list (extracted_list)

     Given a list of tuples or *note FrameSummary: 107a. objects as
     returned by *note extract_tb(): 4865. or *note extract_stack():
     486a, 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: 6dc.  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: 18e. 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: 2575.

     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: 55f, 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: 2575. 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(): a45.  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(): a45.

     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(): a45.

 -- 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: cdf. 'tb' by calling the *note clear(): 57e. method of
     each *note frame object: 8e4.

     Adicionado na versão 3.4.

 -- Função: traceback.walk_stack (f)

     Walk a stack following *note f.f_back: 984. 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(): 486e.

     Adicionado na versão 3.5.

     Alterado na versão 3.14: This function previously returned a
     generator that would walk the stack when first iterated over.  The
     generator returned now is the state of the stack when ‘walk_stack’
     is called.

 -- Função: traceback.walk_tb (tb)

     Walk a traceback following *note tb_next: cde. yielding the frame
     and line number for each frame.  This helper is used with *note
     StackSummary.extract(): 486e.

     Adicionado na versão 3.5.


File: python.info,  Node: TracebackException Objects,  Next: StackSummary Objects,  Prev: Funções de nível de módulo,  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: cdf. and *note frame: 8e4. 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: 1079. class.

     If 'compact' is true, only data that is required by
     ‘TracebackException’’s *note format(): 199. method is saved in the
     class attributes.  In particular, the *note __context__: 4870.
     field is calculated only if *note __cause__: 4871. is ‘None’ and
     *note __suppress_context__: 4872. 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: 55f.).  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__: 14c4.

      -- Atributo: __context__

          A ‘TracebackException’ of the original *note __context__:
          14c3.

      -- Atributo: exceptions

          If ‘self’ represents an *note ExceptionGroup: 4cc, 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__: 23a1. value from the original
          exception.

      -- Atributo: __notes__

          The *note __notes__: 2575. 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: 1079. 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: 1079. 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(): 199.

          Adicionado na versão 3.11.

      -- Método: format (*, chain=True)

          Format the exception.

          If 'chain' is not ‘True’, *note __cause__: 4871. and *note
          __context__: 4870. 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(): a45. 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: 18e. 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: 55f, 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: 2575.
          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(): 1077. or *note
          walk_tb(): 1078.).

          If 'limit' is supplied, only this many frames are taken from
          'frame_gen'.  If 'lookup_lines' is ‘False’, the returned *note
          FrameSummary: 107a. 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():
          1c1. 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: 107a. 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: 8e4.
          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: 8e4.
          involved in the stack.  This method is called for each *note
          FrameSummary: 107a. object to be printed by *note
          StackSummary.format(): 4881.  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: 8e4. in a *note
traceback: cdf.

 -- 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: 8e4. in the *note traceback: cdf.
     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: 4869. attribute accessed
     (which also happens when casting it to a *note tuple: 608.).  *note
     line: 4869. 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: 155f. on a *note frame
          object: 8e4. 'f'.

      -- Atributo: lineno

          The line number of the source code for this frame.

      -- Atributo: name

          Equivalent to accessing *note f.f_code.co_name: 221b. on a
          *note frame object: 8e4. '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: 1b. 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 na forma ‘from __future__ import feature’ são chamadas de
*note instruções future: 45a.  Esses são casos especiais do compilador
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 que estão
     importando.

   * 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 através da importação *note __future__: 0. e
     examinando seus conteúdos.

   * Para garantir que *note instruções future: 45a. 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 desse 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.14/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): 'Avaliação
          __future__.annotations                                                          adiada de anotações', PEP
                                                                                          649(11): 'Avaliação
                                                                                          diferida de anotações
                                                                                          usando descritores'
                                                                                          

 -- 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: 8a4.:

          (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(): 4ab. para
     habilitar o recurso no código compilado dinamicamente.  Este
     sinalizador é armazenado no atributo *note _Feature.compiler_flag:
     2229. em instâncias de *note _Feature: 2456.

Ver também
..........

*note Instruções future: 45a.

     Como o compilador trata as importações de future.

PEP 236(12) - 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’ estava programado para se
tornar obrigatório no Python 3.10, mas a alteração foi adiada e, por
fim, cancelada.  Este recurso será eventualmente descontinuado e
removido.  Veja PEP 649 (https://peps.python.org/pep-0649/) e PEP 749
(https://peps.python.org/pep-0749/).

   (10) https://peps.python.org/pep-0563/

   (11) https://peps.python.org/pep-0649/

   (12) 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
disponibiliza a habilidade de desabilitar o coletor, ajustar a
frequência da coleção, e configurar as opções de depuração.  Ele também
fornece acesso para 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 desabilitar o coletor se você tem certeza que
o seu programa não cria ciclos de referência.  A coleta automática pode
ser desabilitada 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 objetos coletados pelo coletor de
lixo sejam salvos para inspeção em gc.garbage.

O módulo *note gc: 64. 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)

     Realiza uma coleta.  O argumento opcional 'generation' pode ser um
     inteiro especificando qual geração coletar (de 0 a 2).  Uma exceção
     *note ValueError: 2ea. é levantada se o número de geração for
     inválido.  A soma dos objetos coletados e dos objetos incoletáveis
     é retornada.

     Chamar ‘gc.collect(0)’ executará uma coleta de GC na geração mais
     jovem.

     Chamar ‘gc.collect(1)’ executará uma coleta de GC na geração mais
     jovem e um incremento na geração antiga.

     Chamar ‘gc.collect(2)’ ou ‘gc.collect()’ executa uma coleta
     completa

     As listas livres mantidas para vários tipos embutidos são limpas
     sempre que uma coleta completa ou coleta 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: 196.

     O efeito de chamar ‘gc.collect()’ enquanto o interpretador já está
     realizando uma coleta é indefinido.

     Alterado na versão 3.14: ‘generation=1’ executa um incremento de
     coleta.

 -- 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 da seguinte forma:

        * 0: Todos os objetos da geração jovem

        * 1: Nenhum objeto, pois não há geração 1 (desde o Python 3.14)

        * 2: Todos os objetos da geração antiga

     Alterado na versão 3.8: Novo parâmetro 'generation'.

     Alterado na versão 3.14: A geração 1 foi removida

     Levanta um *note evento de auditoria: 1b5d. ‘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: 13bd.) 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 duas gerações, dependendo se
     sobreviveram ou não a uma coleção.  Os novos objetos são colocados
     na geração jovem.  Se um objeto sobreviver a uma coleção, ele é
     movido para a geração antiga.

     Para decidir quando executar, o coletor registra 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 excede
     'threshold0', a coleta é iniciada.  Para cada coleta, todos os
     objetos da geração jovem e uma fração da geração antiga são
     coletados.

     Na construção com threads livres, o aumento no uso de memória do
     processo também é verificado antes da execução do coletor.  Se o
     uso de memória não tiver aumentado 10% desde a última coleta e o
     número líquido de alocações de objetos não tiver excedido 40 vezes
     o limite 0, a coleta não será executada.

     A fração da geração antiga coletada é 'inversamente' proporcional a
     'threshold1'.  Quanto maior o 'threshold1', mais lentos os objetos
     da geração antiga são coletados.  Para o valor padrão de 10, 1% da
     geração antiga é escaneado durante cada coleta.

     'threshold2' é ignorado.

     Consulte o design do coletor de lixo(1) para mais informações.

     Alterado na versão 3.14: 'threshold2' é ignorado

 -- 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(): 1b3.
     antes de chamar *note get_referrers(): 9fb.

          Aviso: Deve-se tomar cuidado ao usar objetos retornados por
          *note get_referrers(): 9fb. porque alguns deles ainda podem
          estar em construção e, portanto, em um estado temporariamente
          inválido.  Evite usar *note get_referrers(): 9fb. para
          qualquer finalidade que não seja depuração.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 977. dos
     argumentos (se houver), e podem não ser todos os objetos
     diretamente alcançáveis.  Os métodos *note tp_traverse: 977. 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: 1b5d. ‘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})
          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: 48a1. 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: 473, um *note ResourceWarning: 546.
     é emitido, que é silencioso por padrão.  Se *note
     DEBUG_UNCOLLECTABLE: 13be. 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__(): 11f3. não vão mais para *note gc.garbage:
     13bd.

 -- 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: 13bd.

     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: 13bd.

     Adicionado na versão 3.3.

As seguintes constantes são fornecidas para uso com *note set_debug():
489f.:

 -- 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: 13bd. em *note desligamento do interpretador: 473, 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/3.14/InternalDocs/garbage_collector.md

   (2) https://peps.python.org/pep-0442/


File: python.info,  Node: inspect — Inspecione objetos vivos,  Next: annotationlib — Funcionalidade para introspecção de anotações,  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: 82. 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<8>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 1af9. 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(): 1af9.  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: 21fa. para atributos de módulo):

Tipo                  Atributo                Descrição
                                              
------------------------------------------------------------------------------
                                              
class                 __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: 5a6.
                                              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: 4a4. 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: 5a6.
                                              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_generator             retorna o gerador ou objeto
                                              de corrotina que possui este
                                              quadro, ou ‘None’ se o quadro
                                              for de uma função regular
                                              
                                              
                      f_trace                 função de rastreamento para
                                              este quadro, ou ‘None’
                                              
                                              
                      f_trace_lines           indica se um evento de
                                              rastreamento é acionado para
                                              cada linha de origem
                                              
                                              
                      f_trace_opcodes         indica se eventos por código
                                              de operação são solicitados
                                              
                                              
                      clear()                 usado para limpar todas as
                                              referências a variáveis
                                              locais
                                              
                                              
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: 2228.
                                              
                                              
                      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
                                              
                                              
                      co_lines()              returns an iterator that
                                              yields successive bytecode
                                              ranges
                                              
                                              
                      co_positions()          returns an iterator of source
                                              code positions for each
                                              bytecode instruction
                                              
                                              
                      replace()               returns a copy of the code
                                              object with new values
                                              
                                              
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_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_code                 código
                                              
                                              
                      cr_origin               where coroutine was created,
                                              or ‘None’.  See
                                              *note sys.set_coroutine_origin_tracking_depth(): d79.
                                              
                                              
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.14: Add ‘f_generator’ attribute to frames.

 -- 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(): 1af9. 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__(): 1758.

 -- 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(): 84e. 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(): 48a9.  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: 7b.

 -- 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.ispackage (object)

     Return ‘True’ if the object is a *note package: 232.

     Adicionado na versão 3.14.

 -- Função: inspect.isfunction (object)

     Return ‘True’ if the object is a Python function, which includes
     functions created by a *note lambda: 2a54. 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(): 216. now return ‘True’ if the wrapped function
     is a Python generator function.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): 217. 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: f67. (a
     function defined with an *note async def: 7e2. syntax), a *note
     functools.partial(): 216. wrapping a *note coroutine function: f67,
     or a sync function marked with *note markcoroutinefunction(): 6ad.

     Adicionado na versão 3.5.

     Alterado na versão 3.8: Functions wrapped in *note
     functools.partial(): 216. now return ‘True’ if the wrapped function
     is a *note coroutine function: f67.

     Alterado na versão 3.12: Sync functions marked with *note
     markcoroutinefunction(): 6ad. now return ‘True’.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): 217. now return ‘True’ if the wrapped
     function is a *note coroutine function: f67.

 -- Função: inspect.markcoroutinefunction (func)

     Decorator to mark a callable as a *note coroutine function: f67. if
     it would not otherwise be detected by *note iscoroutinefunction():
     30b.

     This may be of use for sync functions that return a *note
     coroutine: 6ae, if the function is passed to an API that requires
     *note iscoroutinefunction(): 30b.

     When possible, using an *note async def: 7e2. function is
     preferred.  Also acceptable is calling the function and testing the
     return with *note iscoroutine(): 100c.

     Adicionado na versão 3.12.

 -- Função: inspect.iscoroutine (object)

     Return ‘True’ if the object is a *note coroutine: 6ae. created by
     an *note async def: 7e2. function.

     Adicionado na versão 3.5.

 -- Função: inspect.isawaitable (object)

     Return ‘True’ if the object can be used in *note await: 18d.
     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:
     2327. 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(): 216. now return ‘True’ if the wrapped function
     is an *note asynchronous generator: 2327. function.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): 217. now return ‘True’ if the wrapped
     function is a *note coroutine function: f67.

 -- Função: inspect.isasyncgen (object)

     Return ‘True’ if the object is an *note asynchronous generator
     iterator: 47a8. created by an *note asynchronous generator: 2327.
     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:
     850.

     These are instances of *note MethodWrapperType: 850, such as *note
     __str__(): 825, *note __eq__(): ce5. and *note __repr__(): 824.

     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(): 48ac, *note isclass(): 48ab, *note isfunction():
     48ad. or *note isbuiltin(): 48b3. are true.

     This, for example, is true of ‘int.__add__’.  An object passing
     this test has a *note __get__(): 16d6. method, but not a *note
     __set__(): 224c. method or a *note __delete__(): 18a2. method.
     Beyond that, the set of attributes varies.  A *note __name__: 125c.
     attribute is usually sensible, and *note __doc__: b17. often is.

     Methods implemented via descriptors that also pass one of the other
     tests return ‘False’ from the *note ismethoddescriptor(): 18a1.
     test, simply because the other tests promise more – you can, e.g.,
     count on having the *note __func__: 14f8. attribute (etc) when an
     object passes *note ismethod(): 48ac.

     Alterado na versão 3.13: This function no longer incorrectly
     reports objects with *note __get__(): 16d6. and *note __delete__():
     18a2, but not *note __set__(): 224c, 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__: 224c. or a *note __delete__:
     18a2. 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__: 125c. 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: da6.
     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: 766.
     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(): 196a.  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: 198. 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: 198. 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: 2bf. is raised if the source code
     cannot be retrieved.  A *note TypeError: 198. is raised if the
     object is a built-in module, class, or function.

     Alterado na versão 3.3: *note OSError: 2bf. is raised instead of
     *note IOError: 1249, 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: 2bf. is raised if the source code cannot be retrieved.  A
     *note TypeError: 198. is raised if the object is a built-in module,
     class, or function.

     Alterado na versão 3.3: *note OSError: 2bf. is raised instead of
     *note IOError: 1249, 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: 4dd. 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,
          annotation_format=Format.VALUE)

     Return a *note Signature: 4dd. 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(): 216. objects.

     If some of the annotations are strings (e.g., because ‘from
     __future__ import annotations’ was used), *note signature(): 22e.
     will attempt to automatically un-stringize the annotations using
     *note annotationlib.get_annotations(): 456.  The 'globals',
     'locals', and 'eval_str' parameters are passed into
     ‘annotationlib.get_annotations()’ when resolving the annotations;
     see the documentation for ‘annotationlib.get_annotations()’ for
     instructions on how to use these parameters.  A member of the *note
     annotationlib.Format: 22f. enum can be passed to the
     'annotation_format' parameter to control the format of the returned
     annotations.  For example, use
     ‘annotation_format=annotationlib.Format.STRING’ to return
     annotations in string format.

     Raises *note ValueError: 2ea. if no signature can be provided, and
     *note TypeError: 198. 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 annotationlib.get_annotations(): 456. 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: 2465.

     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.

     Alterado na versão 3.14: The 'annotation_format' parameter was
     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: 4de. object in its *note
     parameters: 48bc. collection.

     The optional 'parameters' argument is a sequence of *note
     Parameter: 4de. 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(): 48bd. or *note copy.replace(): 1c0. to make a
     modified copy.

     Alterado na versão 3.5: ‘Signature’ objects are now picklable and
     *note hashable: 819.

      -- 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: 4de. 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: 48be.

      -- Método: bind (*args, **kwargs)

          Create a mapping from positional and keyword arguments to
          parameters.  Returns *note BoundArguments: 125f. if ‘*args’
          and ‘**kwargs’ match the signature, or raises a *note
          TypeError: 198.

      -- Método: bind_partial (*args, **kwargs)

          Works the same way as *note Signature.bind(): 17f6, but allows
          the omission of some required arguments (mimics *note
          functools.partial(): 216. behavior.)  Returns *note
          BoundArguments: 125f, or raises a *note TypeError: 198. if the
          passed arguments do not match the signature.

      -- Método: replace (*[, parameters][, return_annotation])

          Create a new *note Signature: 4dd. instance based on the
          instance *note replace(): 48bd. 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: 48be.

               >>> 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: 4dd. objects are also supported by the
          generic function *note copy.replace(): 1c0.

      -- Método: format (*, max_width=None,
               quote_annotation_strings=True)

          Create a string representation of the *note Signature: 4dd.
          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.

          If 'quote_annotation_strings' is False, *note annotations:
          15c. in the signature are displayed without opening and
          closing quotation marks if they are strings.  This is useful
          if the signature was created with the *note STRING: 160.
          format or if ‘from __future__ import annotations’ was used.

          Adicionado na versão 3.13.

          Alterado na versão 3.14: The 'unquote_annotations' parameter
          was added.

      -- Método: classmethod from_callable (obj, *, follow_wrapped=True,
               globals=None, locals=None, eval_str=False)

          Return a *note Signature: 4dd. (or its subclass) object for a
          given callable 'obj'.

          This method simplifies subclassing of *note Signature: 4dd.:

               class MySignature(Signature):
                   pass
               sig = MySignature.from_callable(sum)
               assert isinstance(sig, MySignature)

          Its behavior is otherwise identical to that of *note
          signature(): 22e.

          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(): 48c1. ou
     *note copy.replace(): 1c0. 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: 819.

      -- 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: 48c2.

      -- 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: 48c2.

      -- Atributo: kind

          Descreve como valores de argumento são vinculados ao
          parâmetro.  Os possíveis valores são acessíveis via *note
          Parameter: 4de. (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: 48c6.

          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: 4de. 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: 48c2.

               >>> 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: 4de. também são suportados pela
          função genérica *note copy.replace(): 1c0.

     Alterado na versão 3.4: Em Python 3.3, era permitido objetos *note
     Parameter: 4de. 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(): 17f6. or *note
     Signature.bind_partial(): 48c0. 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: afe. will reflect in *note args: 48c8. and *note
          kwargs: 48c9.

          Should be used in conjunction with *note Signature.parameters:
          48bc. for any argument processing purposes.

               Nota: Arguments for which *note Signature.bind(): 17f6.
               or *note Signature.bind_partial(): 48c0. relied on a
               default value are skipped.  However, if needed, use *note
               BoundArguments.apply_defaults(): 100b. to add them.

          Alterado na versão 3.9: *note arguments: afe. is now of type
          *note dict: 183.  Formerly, it was of type *note
          collections.OrderedDict: 7e8.

      -- Atributo: args

          A tuple of positional arguments values.  Dynamically computed
          from the *note arguments: afe. attribute.

      -- Atributo: kwargs

          A dict of keyword arguments values.  Dynamically computed from
          the *note arguments: afe. attribute.  Arguments that can be
          passed positionally are included in *note args: 48c8. instead.

      -- Atributo: signature

          A reference to the parent *note Signature: 4dd. 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: 48c8. and *note kwargs: 48c9. 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: 853. 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(): 22e. and *note Signature Object: 48ba.
     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(): 22e, 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(): 22e. 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: 853. ‘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(): 10b5.  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(): 17f6.
     and *note Signature.bind_partial(): 48c0. 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: 853.
     ‘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: 198. 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(): 22e. uses
     this to stop unwrapping if any object in the chain has a
     ‘__signature__’ attribute defined.

     *note ValueError: 2ea. 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, format=annotationlib.Format.VALUE)

     Calcula o dicionário de anotações para um objeto.

     This is an alias for *note annotationlib.get_annotations(): 456.;
     see the documentation of that function for more information.

          Cuidado: Esta função pode executar código arbitrário contido
          em anotações.  Consulte *note Security implications of
          introspecting annotations: 43a7. para obter mais informações.

     Adicionado na versão 3.10.

     Alterado na versão 3.14: This function is now an alias for *note
     annotationlib.get_annotations(): 456.  Calling it as
     ‘inspect.get_annotations’ will continue to work.


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: 851. 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: 8e4. 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: 48d5. list.

      -- Atributo: positions

          A *note dis.Positions: 1892. 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: 853. instead of
     a *note tuple: 608.

     Alterado na versão 3.11: ‘FrameInfo’ is now a class instance (that
     is backwards compatible with the previous *note named tuple: 853.).

 -- 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: 48db. list.

      -- Atributo: positions

          A *note dis.Positions: 1892. 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: 853.).

     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: 1b0. clause.  This is also important
     if the cycle detector was disabled when Python was compiled or
     using *note gc.disable(): 489d.  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(): 57e. 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: 852. object is returned.

     Alterado na versão 3.11: A *note Traceback: 852. object is returned
     instead of a named tuple.

 -- Função: inspect.getouterframes (frame, context=1)

     Get a list of *note FrameInfo: 851. 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: 853.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 851. objects is
     returned.

 -- Função: inspect.getinnerframes (traceback, context=1)

     Get a list of *note FrameInfo: 851. 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: 853.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 851. 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: 851. 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: 853.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 851. objects is
     returned.

 -- Função: inspect.trace (context=1)

     Return a list of *note FrameInfo: 851. 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: 853.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 851. 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(): dbe. and *note hasattr(): 6ee. can trigger code
execution when fetching or checking for the existence of attributes.
Descriptors, like properties, will be invoked and *note __getattr__():
6ef. and *note __getattribute__(): dbf. may be called.

For cases where you want passive introspection, like documentation
tools, this can be inconvenient.  *note getattr_static(): 6b1. has the
same signature as *note getattr(): dbe. 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__(): 6ef. or *note
     __getattribute__(): dbf.

     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__: 772. 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(): 6b1. 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(): 1432. 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: 7e2.
     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: 7e2. functions which use the *note
     yield: bb8. 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():
     468. in the body of the generator, and all the same caveats apply.

     If 'generator' is a *note generator: 1257. with no currently
     associated frame, then an empty dictionary is returned.  *note
     TypeError: 198. 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(): 12d2, but
     works for coroutine objects created by *note async def: 7e2.
     functions.

     Adicionado na versão 3.5.

 -- Função: inspect.getasyncgenlocals (agen)

     This function is analogous to *note getgeneratorlocals(): 12d2, but
     works for asynchronous generator objects created by *note async
     def: 7e2. functions which use the *note yield: bb8. 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: 1833. 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:
     49f. 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.

 -- Dado: inspect.CO_HAS_DOCSTRING

     The flag is set when there is a docstring for the code object in
     the source code.  If set, it will be the first item in *note
     co_consts: 17ff.

     Adicionado na versão 3.14.

 -- Dado: inspect.CO_METHOD

     The flag is set when the code object is a function defined in class
     scope.

     Adicionado na versão 3.14.

     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: 82. 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<8>,  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: e8e. that represents the flags that
     can be passed to the *note __buffer__(): 681. method of objects
     implementing the *note buffer protocol: 25f.

     The meaning of the flags is explained at *note Tipos de solicitação
     do buffer: 48ec.

      -- 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<8>,  Prev: Buffer flags,  Up: inspect — Inspecione objetos vivos

5.29.14.10 Interface de linha de comando
........................................

The *note inspect: 82. 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: annotationlib — Funcionalidade para introspecção de anotações,  Next: 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 ‘annotationlib’ — Funcionalidade para introspecção de anotações
-----------------------------------------------------------------------

Adicionado na versão 3.14.

'Código-fonte:' Lib/annotationlib.py(1)

__________________________________________________________________

O módulo ‘annotationlib’ fornece ferramentas para introspecção de *note
anotações: 15c. em módulos, classes e funções.

As anotações são *note avaliadas preguiçosamente: 67a. e frequentemente
contêm referências futuras a objetos que ainda não foram definidos
quando a anotação é criada.  Este módulo fornece um conjunto de
ferramentas de baixo nível que podem ser usadas para recuperar anotações
de forma confiável, mesmo na presença de referências futuras e outros
casos extremos.

Este módulo oferece suporte a recuperação de anotações em três formatos
principais (veja *note Format: 22f.), cada um dos quais funciona melhor
para diferentes casos de uso:

   * *note VALUE: 15e. avalia as anotações e retorna seus valores.  Isso
     é mais simples de usar, mas pode levantar erros, por exemplo, se as
     anotações contiverem referências a nomes indefinidos.

   * *note FORWARDREF: 15f. retorna objetos *note ForwardRef: 17c3. para
     anotações que não podem ser resolvidas, permitindo que você
     inspecione as anotações sem avaliá-las.  Isso é útil quando você
     precisa trabalhar com anotações que podem conter referências de
     encaminhamento não resolvidas.

   * *note STRING: 160. retorna as anotações como uma string, semelhante
     a como apareceria no arquivo fonte.  Isso é útil para geradores de
     documentação que desejam exibir anotações de forma legível.

A função *note get_annotations(): 456. é o principal ponto de entrada
para recuperar anotações.  Dada uma função, classe ou módulo, ela
retorna um dicionário de anotações no formato solicitado.  Este módulo
também fornece funcionalidade para trabalhar diretamente com a *note
função de anotação: 15d, usada para avaliar anotações, como *note
get_annotate_from_class_namespace(): 458. e *note
call_annotate_function(): 4903, bem como a função *note
call_evaluate_function(): 437f. para trabalhar com *note funções de
avaliação: 437e.

     Cuidado: Most functionality in this module can execute arbitrary
     code; see *note the security section: 43a7. for more information.

Ver também
..........

PEP 649(2) propôs o modelo atual de como as anotações funcionam em
Python.

PEP 749(3) expandiu vários aspectos de PEP 649(4) e introduziu o módulo
‘annotationlib’.

*note Boas práticas para anotações: 9cf. fornece práticas recomendadas
para trabalhar com anotações.

typing-extensions(5) fornece um backport de *note get_annotations():
456. que funciona em versões anteriores do Python.

* Menu:

* Semânticas de anotação::
* Classes: Classes<5>.
* Funções: Funções<12>.
* Receitas: Receitas<3>.
* Limitações do formato STRING::
* Limitações do formato FORWARDREF::
* Security implications of introspecting annotations::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/annotationlib.py

   (2) https://peps.python.org/pep-0649/

   (3) https://peps.python.org/pep-0749/

   (4) https://peps.python.org/pep-0649/

   (5) https://pypi.org/project/typing-extensions/


File: python.info,  Node: Semânticas de anotação,  Next: Classes<5>,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.1 Semânticas de anotação
................................

A forma como as anotações são avaliadas mudou ao longo da história do
Python 3 e atualmente ainda depende de uma *note importação futura: 45a.
Houve modelos de execução para anotações:

   * 'Semântica de estoque' (padrão no Python 3.0 a 3.13; veja PEP
     3107(1) e PEP 526(2)): As anotações são avaliadas avidamente, à
     medida que são encontradas no código-fonte.

   * 'Anotações em string' (usadas com ‘from __future__ import
     annotations’ no Python 3.7 e versões mais recentes; veja PEP
     563(3)): As anotações são armazenadas apenas como strings.

   * 'Avaliação adiada' (padrão no Python 3.14 e versões mais recentes;
     veja PEP 649(4) e PEP 749(5)): As anotações são avaliadas
     preguiçosamente, somente quando são acessadas.

Como exemplo, considere o seguinte programa:

     def func(a: Cls) -> None:
         print(a)

     class Cls: pass

     print(func.__annotations__)

Isso se comportará da seguinte maneira:

   * De acordo com a semântica de estoque (Python 3.13 e versões
     anteriores), ele levantará uma *note NameError: 44f. na linha onde
     ‘func’ está definido, porque ‘Cls’ é um nome indefinido naquele
     ponto.

   * Em anotações stringificadas (se ‘from __future__ import
     annotations’ for usado), exibirá ‘{'a': 'Cls', 'return': 'None'}’.

   * Em avaliação adiada (Python 3.14 e posterior), exibirá ‘{'a':
     <class 'Cls'>, 'return': None}’.

A semântica de estoque foi usada quando as anotações de função foram
introduzidas pela primeira vez no Python 3.0 (por PEP 3107(6)) porque
esta era a maneira mais simples e óbvia de implementar anotações.  O
mesmo modelo de execução foi usado quando as anotações de variáveis
foram introduzidas no Python 3.6 (por PEP 526(7)).  No entanto, a
semântica de estoque causou problemas ao usar anotações como dicas de
tipo, como a necessidade de se referir a nomes que ainda não estavam
definidos quando a anotação era encontrada.  Além disso, havia problemas
de desempenho com a execução de anotações no momento da importação do
módulo.  Portanto, no Python 3.7, PEP 563(8) introduziu a capacidade de
armazenar anotações como strings usando a sintaxe ‘from __future__
import annotations’.  O plano na época era eventualmente tornar esse
comportamento o padrão, mas um problema surgiu: anotações em string são
mais difíceis de processar para aqueles que inspecionam anotações em
tempo de execução.  Uma proposta alternativa, PEP 649(9), introduziu o
terceiro modelo de execução, avaliação adiada, e foi implementada no
Python 3.14.  Anotações em string ainda são usadas se ‘from __future__
import annotations’ estiver presente, mas esse comportamento será
eventualmente removido.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3107/

   (2) https://peps.python.org/pep-0526/

   (3) https://peps.python.org/pep-0563/

   (4) https://peps.python.org/pep-0649/

   (5) https://peps.python.org/pep-0749/

   (6) https://peps.python.org/pep-3107/

   (7) https://peps.python.org/pep-0526/

   (8) https://peps.python.org/pep-0563/

   (9) https://peps.python.org/pep-0649/


File: python.info,  Node: Classes<5>,  Next: Funções<12>,  Prev: Semânticas de anotação,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.2 Classes
.................

 -- Classe: annotationlib.Format

     Uma *note IntEnum: ecf. que descreve os formatos nos quais as
     anotações podem ser retornadas.  Membros da enumeração, ou seus
     valores inteiros equivalentes, podem ser passados para *note
     get_annotations(): 456. e outras funções neste módulo, bem como
     para funções *note __annotate__: 18cc.

      -- Atributo: VALUE = 1

          Os valores são o resultado da avaliação das expressões de
          anotação.

      -- Atributo: VALUE_WITH_FAKE_GLOBALS = 2

          Valor especial usado para sinalizar que uma função de anotação
          está sendo avaliada em um ambiente especial com variáveis
          globais falsas.  Ao receber este valor, as funções de anotação
          devem retornar o mesmo valor do formato *note Format.VALUE:
          15e. ou levantar *note NotImplementedError: 368. para
          sinalizar que não suportam execução neste ambiente.  Este
          formato é usado apenas internamente e não deve ser passado
          para as funções deste módulo.

      -- Atributo: FORWARDREF = 3

          Valores são valores de anotação reais (conforme o formato
          *note Format.VALUE: 15e.) para valores definidos e proxies
          *note ForwardRef: 17c3. para valores indefinidos.  Objetos
          reais podem conter referências a objetos proxy *note
          ForwardRef: 17c3.

      -- Atributo: STRING = 4

          Valores são a string de texto da anotação como ela aparece no
          código-fonte, até modificações, incluindo, mas não se
          limitando a, normalizações de espaços em branco e otimizações
          de valores constantes.

          Os valores exatos dessas strings podem mudar em versões
          futuras do Python.

     Adicionado na versão 3.14.

 -- Classe: annotationlib.ForwardRef

     Um objeto proxy para referências futuras em anotações.

     Instâncias desta classe são retornadas quando o formato *note
     FORWARDREF: 15f. é usado e as anotações contêm um nome que não pode
     ser resolvido.  Isso pode acontecer quando uma referência de avanço
     é usada em uma anotação, como quando uma classe é referenciada
     antes de ser definida.

      -- Atributo: __forward_arg__

          Uma string contendo o código que foi avaliado para produzir
          *note ForwardRef: 17c3.  A string pode não ser exatamente
          equivalente à fonte original.

      -- Método: evaluate (*, owner=None, globals=None, locals=None,
               type_params=None, format=Format.VALUE)

          Avalia a referência futura, retornando seu valor.

          Se o argumento 'format' for *note VALUE: 15e. (o padrão), este
          método poderá levantar uma exceção, como *note NameError: 44f,
          caso a referência futura se refira a um nome que não pode ser
          resolvido.  Os argumentos deste método podem ser usados para
          fornecer ligações para nomes que, de outra forma, seriam
          indefinidos.  Se o argumento 'format' for *note FORWARDREF:
          15f, o método nunca levantará uma exceção, mas poderá retornar
          uma instância de *note ForwardRef: 17c3.  Por exemplo, se o
          objeto de referência futura contiver o código
          ‘list[undefined]’, onde ‘undefined’ é um nome que não está
          definido, avaliá-lo com o formato *note FORWARDREF: 15f.
          retornará ‘list[ForwardRef('undefined')]’.  Se o argumento
          'format' for *note STRING: 160, o método retornará *note
          __forward_arg__: 4907.

          O parâmetro 'owner' fornece o mecanismo preferencial para
          passar informações de escopo para este método.  O proprietário
          de uma *note ForwardRef: 17c3. é o objeto que contém a
          anotação da qual a *note ForwardRef: 17c3. deriva, como um
          objeto módulo, objeto tipo ou objeto função.

          Os parâmetros 'globals', 'locals' e 'type_params' fornecem um
          mecanismo mais preciso para influenciar os nomes disponíveis
          quando *note ForwardRef: 17c3. é avaliado.  'globals' e
          'locals' são passados para *note eval(): 49d, representando os
          espaços de nomes global e local nos quais o nome é avaliado.
          O parâmetro 'type_params' é relevante para objetos criados
          usando a sintaxe nativa para *note classes genéricas: 676. e
          *note funções: 677.  É uma tupla de *note parâmetros de tipo:
          5a6. que estão no escopo enquanto a referência futura está
          sendo avaliada.  Por exemplo, ao avaliar um *note ForwardRef:
          17c3. recuperado de uma anotação encontrada no espaço de nomes
          de classe de uma classe genérica ‘C’, 'type_params' deve ser
          definido como ‘C.__type_params__’.

          Instâncias de *note ForwardRef: 17c3. retornadas por *note
          get_annotations(): 456. retêm referências a informações sobre
          o escopo de onde se originaram, portanto, chamar esse método
          sem argumentos adicionais pode ser suficiente para avaliar
          tais objetos.  Instâncias de *note ForwardRef: 17c3. criadas
          por outros meios podem não ter nenhuma informação sobre seu
          escopo, portanto, passar argumentos para esse método pode ser
          necessário para avaliá-las com sucesso.

          Se nenhum entre 'owner', 'globals', 'locals' ou 'type_params'
          for fornecido e *note ForwardRef: 17c3. não contiver
          informações sobre sua origem, dicionários globals e locals
          vazios serão usados.

     Adicionado na versão 3.14.


File: python.info,  Node: Funções<12>,  Next: Receitas<3>,  Prev: Classes<5>,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.3 Funções
.................

 -- Função: annotationlib.annotations_to_string (annotations)

     Converte um dicionário de anotações contendo valores de tempo de
     execução em um dicionário contendo apenas strings.  Se os valores
     ainda não forem strings, eles serão convertidos usando *note
     type_repr(): 17c0.  Isso serve como um auxiliar para funções de
     anotação fornecidas pelo usuário que oferecem suporte ao formato
     *note STRING: 160, mas não têm acesso ao código que cria as
     anotações.

     Por exemplo, isso é usado para implementar o *note STRING: 160.
     para classes *note typing.TypedDict: 330. criadas por meio da
     sintaxe funcional:

          >>> from typing import TypedDict
          >>> Movie = TypedDict("movie", {"name": str, "year": int})
          >>> get_annotations(Movie, format=Format.STRING)
          {'name': 'str', 'year': 'int'}

     Adicionado na versão 3.14.

 -- Função: annotationlib.call_annotate_function (annotate, format, *,
          owner=None)

     Chama a *note função de anotação: 15d. 'annotate' com o 'format'
     fornecido, um membro da enumeração *note Format: 22f. e retorne o
     dicionário de anotações produzido pela função.

     Esta função auxiliar é necessária porque as funções de anotação
     geradas pelo compilador para funções, classes e módulos oferecem
     suporte a apenas o formato *note VALUE: 15e. quando chamadas
     diretamente.  Para oferecer suporte a outros formatos, esta função
     chama a função de anotação em um ambiente especial que permite a
     produção de anotações nos outros formatos.  Este é um bloco de
     construção útil ao implementar funcionalidades que precisam avaliar
     anotações parcialmente enquanto uma classe está sendo construída.

     'owner' é o objeto que possui a função de anotação, geralmente uma
     função, classe ou módulo.  Se fornecido, é usado no formato *note
     FORWARDREF: 15f. para produzir um objeto *note ForwardRef: 17c3.
     que contém mais informações.

     Ver também
     ..........

     PEP 649(1) contém uma explicação da técnica de implementação usada
     por esta função.

     Adicionado na versão 3.14.

 -- Função: annotationlib.call_evaluate_function (evaluate, format, *,
          owner=None)

     Chama a *note função de avaliação: 437e. 'evaluate' com o 'format'
     fornecido, um membro da enumeração *note Format: 22f. e retorna o
     valor produzido pela função.  Isso é semelhante a *note
     call_annotate_function(): 4903, mas esta última sempre retorna um
     dicionário que mapeia strings para anotações, enquanto esta função
     retorna um único valor.

     Isso se destina ao uso com as funções de avaliação geradas para
     elementos avaliados preguiçosamente relacionados a apelidos de tipo
     e parâmetros de tipo:

        * *note typing.TypeAliasType.evaluate_value(): 4394, o valor dos
          apelidos de tipo

        * *note typing.TypeVar.evaluate_bound(): 437d, a delimitação das
          variáveis de tipo

        * *note typing.TypeVar.evaluate_constraints(): 4381, as
          restrições de tipos variáveis

        * *note typing.TypeVar.evaluate_default(): 4383, o valor padrão
          de tipos variáveis

        * *note typing.ParamSpec.evaluate_default(): 438e, o valor
          padrão de especificações de parâmetros

        * *note typing.TypeVarTuple.evaluate_default(): 4387, o valor
          padrão de tuplas de tipos variáveis

     'owner' é o objeto que possui a função de avaliação, como o apelido
     de tipo ou o objeto de tipo variável.

     'format' pode ser usado para controlar o formato no qual o valor é
     retornado:

          >>> type Alias = undefined
          >>> call_evaluate_function(Alias.evaluate_value, Format.VALUE)
          Traceback (most recent call last):
          ...
          NameError: name 'undefined' is not defined
          >>> call_evaluate_function(Alias.evaluate_value, Format.FORWARDREF)
          ForwardRef('undefined')
          >>> call_evaluate_function(Alias.evaluate_value, Format.STRING)
          'undefined'

     Adicionado na versão 3.14.

 -- Função: annotationlib.get_annotate_from_class_namespace (namespace)

     Recupera a *note função de anotação: 15d. de um dicionário de
     espaço de nomes de classe 'namespace'.  Retorna ‘None’ se o espaço
     de nomes não contiver uma função de anotação.  Isso é útil
     principalmente antes da classe ser totalmente criada (por exemplo,
     em uma metaclasse); após a classe existir, a função de anotação
     pode ser recuperada com ‘cls.__annotate__’.  Veja *note abaixo:
     490a. para um exemplo usando esta função em uma metaclasse.

     Adicionado na versão 3.14.

 -- Função: annotationlib.get_annotations (obj, *, globals=None,
          locals=None, eval_str=False, format=Format.VALUE)

     Calcula o dicionário de anotações para um objeto.

     'obj' pode ser um objeto chamável, classe, módulo ou outro objeto
     com os atributos *note __annotate__: 18cc. ou *note
     __annotations__: 455.  Passar qualquer outro objeto levanta *note
     TypeError: 198.

     O parâmetro 'format' controla o formato em que as anotações são
     retornadas e deve ser um membro da enumeração *note Format: 22f. ou
     seu equivalente inteiro.  Os diferentes formatos funcionam da
     seguinte forma:

        * VALUE: ‘object.__annotations__’ é tentado primeiro; se não
          existir, a função ‘object.__annotate__’ é chamada, se existir.

        * FORWARDREF: Se ‘object.__annotations__’ existir e puder ser
          avaliado com sucesso, ele será usado; caso contrário, a função
          ‘object.__annotate__’ será chamada.  Se também não existir,
          ‘object.__annotations__’ será tentado novamente e qualquer
          erro ao acessá-lo será levantado novamente.

        * STRING: Se ‘object.__annotate__’ existir, ele será chamado
          primeiro; caso contrário, ‘object.__annotations__’ será usado
          e transformado em string usando *note annotations_to_string():
          4909.

     Retorna um dict.  ‘get_annotations()’ retorna um novo dict toda vez
     que é chamado; chamá-lo duas vezes no mesmo objeto retornará dois
     dicts diferentes, mas equivalentes.

     Esta função cuida de vários detalhes para você:

        * Se 'eval_str' for verdadeiro, valores do tipo ‘str’ serão
          descodificados usando *note eval(): 49d.  Isso se destina ao
          uso com anotações transformadas em string (‘from __future__
          import annotations’).  É um erro definir 'eval_str' como true
          com formatos diferentes de *note Format.VALUE: 15e.

        * Se 'obj' não tiver um dicionário de anotações, retorna um
          dicionário vazio.  (Funções e métodos sempre têm um dicionário
          de anotações; classes, módulos e outros tipos de chamáveis
          podem não ter.)

        * Ignora anotações herdadas em classes, bem como anotações em
          metaclasses.  Se uma classe não tiver seu próprio dicionário
          de anotações, retorna um dicionário vazio.

        * Todos os acessos aos membros do objeto e valores do dicionário
          são feitos usando ‘getattr()’ e ‘dict.get()’ por segurança.

     'eval_str' controla se valores do tipo ‘str’ são substituídos ou
     não pelo resultado da chamada de *note eval(): 49d. nesses valores:

        * Se eval_str for verdadeiro, *note eval(): 49d. será chamado em
          valores do tipo ‘str’.  (Observe que ‘get_annotations()’ não
          captura exceções; se *note eval(): 49d. levanta uma exceção,
          ele desenrolará a pilha após a chamada de
          ‘get_annotations()’.)

        * Se 'eval_str' for falso (o padrão), os valores do tipo ‘str’
          não serão alterados.

     'globals' e 'locals' são passados para *note eval(): 49d.; consulte
     a documentação de *note eval(): 49d. para mais informações.  Se
     'globals' ou 'locals' for ‘None’, esta função pode substituir esse
     valor por um padrão específico do contexto, dependendo de
     ‘type(obj)’:

        * Se 'obj' for um módulo, 'globals' assume como padrão
          ‘obj.__dict__’.

        * Se 'obj' for uma classe, 'globals' assume como padrão
          ‘sys.modules[obj.__module__].__dict__’ e 'locals' assume como
          padrão o espaço de nomes da classe 'obj'.

        * Se 'obj' for um chamável, 'globals' assume como padrão *note
          obj.__globals__: 14cf, embora se 'obj' for uma função
          encapsulada (usando *note functools.update_wrapper(): 1218.)
          ou um objeto *note functools.partial: 216, ela será
          desencapsulada até que uma função não encapsulada seja
          encontrada.

     Chamar ‘get_annotations()’ é uma boa prática para acessar o
     dicionário de anotações de qualquer objeto.  Consulte *note Boas
     práticas para anotações: 9cf. para obter mais informações sobre as
     práticas recomendadas para anotações.

          >>> def f(a: int, b: str) -> float:
          ...     pass
          >>> get_annotations(f)
          {'a': <class 'int'>, 'b': <class 'str'>, 'return': <class 'float'>}

     Adicionado na versão 3.14.

 -- Função: annotationlib.type_repr (value)

     Converte um valor Python arbitrário para um formato adequado para
     uso pelo formato *note STRING: 160.  Isso chama *note repr(): 1c1.
     para a maioria dos objetos, mas tem um tratamento especial para
     alguns objetos, como objetos tipo.

     Isto serve como um auxiliar para funções de anotação fornecidas
     pelo usuário que oferecem suporte ao formato *note STRING: 160, mas
     não têm acesso ao código que cria as anotações.  Também pode ser
     usado para fornecer uma representação de string amigável para
     outros objetos que contêm valores comumente encontrados em
     anotações.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) 
https://peps.python.org/pep-0649/#the-stringizer-and-the-fake-globals-environment


File: python.info,  Node: Receitas<3>,  Next: Limitações do formato STRING,  Prev: Funções<12>,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.4 Receitas
..................

* Menu:

* Usando anotações em uma metaclasse::


File: python.info,  Node: Usando anotações em uma metaclasse,  Up: Receitas<3>

5.29.15.5 Usando anotações em uma metaclasse
............................................

Uma *note metaclasse: 2255. pode querer inspecionar ou até mesmo
modificar as anotações no corpo de uma classe durante a criação da
classe.  Isso requer a recuperação das anotações do dicionário de
espaços de nomes da classe.  Para classes criadas com ‘from __future__
import annotations’, as anotações estarão na chave ‘__annotations__’ do
dicionário.  Para outras classes com anotações, *note
get_annotate_from_class_namespace(): 458. pode ser usado para obter a
função annotate, e *note call_annotate_function(): 4903. pode ser usado
para chamá-la e recuperar as anotações.  Usar o formato *note
FORWARDREF: 15f. geralmente é a melhor opção, pois permite que as
anotações se refiram a nomes que ainda não podem ser resolvidos quando a
classe é criada.

Para modificar as anotações, é melhor criar uma função de anotação que
chame a função de anotação original, faça os ajustes necessários e
retorne o resultado.

Abaixo está um exemplo de uma metaclasse que filtra todas as anotações
*note typing.ClassVar: 566. da classe e as coloca em um atributo
separado:

     import annotationlib
     import typing

     class ClassVarSeparator(type):
        def __new__(mcls, name, bases, ns):
           if "__annotations__" in ns:  # from __future__ import annotations
              annotations = ns["__annotations__"]
              classvar_keys = {
                 key for key, value in annotations.items()
                 # Use comparação de strings para simplificar; uma solução
                 # mais robusta poderia usar annotationlib.ForwardRef.evaluate
                 if value.startswith("ClassVar")
              }
              classvars = {key: annotations[key] for key in classvar_keys}
              ns["__annotations__"] = {
                 key: value for key, value in annotations.items()
                 if key not in classvar_keys
              }
              wrapped_annotate = None
           elif annotate := annotationlib.get_annotate_from_class_namespace(ns):
              annotations = annotationlib.call_annotate_function(
                 annotate, format=annotationlib.Format.FORWARDREF
              )
              classvar_keys = {
                 key for key, value in annotations.items()
                 if typing.get_origin(value) is typing.ClassVar
              }
              classvars = {key: annotations[key] for key in classvar_keys}

              def wrapped_annotate(format):
                 annos = annotationlib.call_annotate_function(annotate, format, owner=typ)
                 return {key: value for key, value in annos.items() if key not in classvar_keys}

           else:  # nenhuma anotação
              classvars = {}
              wrapped_annotate = None
           typ = super().__new__(mcls, name, bases, ns)

           if wrapped_annotate is not None:
              # Encapsula o __annotate__ original com um invólucro que remove ClassVars
              typ.__annotate__ = wrapped_annotate
           typ.classvars = classvars  # Armazena as ClassVars em um atributo separado
           return typ


File: python.info,  Node: Limitações do formato STRING,  Next: Limitações do formato FORWARDREF,  Prev: Receitas<3>,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.6 Limitações do formato ‘STRING’
........................................

O formato *note STRING: 160. tem como objetivo aproximar o código-fonte
da anotação, mas a estratégia de implementação usada significa que nem
sempre é possível recuperar o código-fonte exato.

Primeiro, a transformação em string, é claro, não pode recuperar nenhuma
informação que não esteja presente no código compilado, incluindo
comentários, espaços em branco, parênteses e operações que são
simplificadas pelo compilador.

Em segundo lugar, a transformação em string pode interceptar quase todas
as operações que envolvem nomes pesquisados em algum escopo, mas não
pode interceptar operações que operem totalmente em constantes.  Como
corolário, isso também significa que não é seguro solicitar o formato
‘STRING’ em código não confiável: Python é poderoso o suficiente para
permitir a execução arbitrária de código mesmo sem acesso a nenhuma
variável global ou embutida.  Por exemplo:

     >>> def f(x: (1).__class__.__base__.__subclasses__()[-1].__init__.__builtins__["print"]("Hello world")): pass
     ...
     >>> annotationlib.get_annotations(f, format=annotationlib.Format.STRING)
     Hello world
     {'x': 'None'}

     Nota: Este exemplo específico funciona no momento em que este
     artigo foi escrito, mas depende de detalhes de implementação e não
     há garantia de que funcionará no futuro.

Entre os diferentes tipos de expressões que existem em Python, conforme
representado pelo módulo *note ast: 9, algumas expressões são
suportadas, o que significa que o formato ‘STRING’ geralmente pode
recuperar o código-fonte original; outras não são suportadas, o que
significa que podem resultar em saída incorreta ou erro.

Os seguintes são aceitos (às vezes com ressalvas):

   * *note ast.BinOp: 1c69.

   * *note ast.UnaryOp: 490e.

        * *note ast.Invert: 490f. (‘~’), *note ast.UAdd: 4910. (‘+’) e
          *note ast.USub: 4911. (‘-’) são suportadas

        * *note ast.Not: 4912. (‘not’) não é suportada

   * *note ast.Dict: 1c00. (exceto ao usar desempacotamento ‘**’)

   * *note ast.Set: 4913.

   * *note ast.Compare: 4914.

        * *note ast.Eq: 4915. e *note ast.NotEq: 4916. são suportadas

        * *note ast.Lt: 4917, *note ast.LtE: 4918, *note ast.Gt: 4919. e
          *note ast.GtE: 491a. são suportadas, mas o operando pode ser
          invertido

        * *note ast.Is: 491b, *note ast.IsNot: 491c, *note ast.In: 491d.
          e *note ast.NotIn: 491e. não são suportadas

   * *note ast.Call: 491f. (exceto ao usar desempacotamento ‘**’)

   * *note ast.Constant: 2ed. (embora não seja a representação exata da
     constante; por exemplo, sequências de escape em strings são
     perdidas; números hexadecimais são convertidos em decimais)

   * *note ast.Attribute: 4920. (presumindo que o valor não é uma
     constante)

   * *note ast.Subscript: 4921. (presumindo que o valor não é uma
     constante)

   * *note ast.Starred: 4922. (desempacotamento ‘*’)

   * *note ast.Name: 1be2.

   * *note ast.List: 4923.

   * *note ast.Tuple: 4924.

   * *note ast.Slice: 4925.

Os seguintes não são suportados, mas geram um erro informativo quando
encontrados pela transformação em string:

   * *note ast.FormattedValue: 4926. (f-strings; o erro não é detectado
     se especificadores de conversões como ‘!r’ forem usados)

   * *note ast.JoinedStr: 199a. (f-strings)

Os seguintes itens não são suportados e resultam em saída incorreta:

   * *note ast.BoolOp: 4927. (‘and’ e ‘or’)

   * *note ast.IfExp: 4928.

   * *note ast.Lambda: 4929.

   * *note ast.ListComp: 492a.

   * *note ast.SetComp: 492b.

   * *note ast.DictComp: 492c.

   * *note ast.GeneratorExp: 492d.

Os seguintes itens não são permitidos em escopos de anotação e,
portanto, não são relevantes:

   * *note ast.NamedExpr: 492e. (‘:=’)

   * *note ast.Await: 492f.

   * *note ast.Yield: 4930.

   * *note ast.YieldFrom: 4931.


File: python.info,  Node: Limitações do formato FORWARDREF,  Next: Security implications of introspecting annotations,  Prev: Limitações do formato STRING,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.7 Limitações do formato ‘FORWARDREF’
............................................

O formato *note FORWARDREF: 15f. visa produzir valores reais o máximo
possível, com tudo o que não puder ser resolvido sendo substituído por
objetos *note ForwardRef: 17c3.  Ele é afetado, em linhas gerais, pelas
mesmas limitações do formato *note STRING: 160.: anotações que realizam
operações em literais ou que usam tipos de expressão não suportados
podem levantar exceções quando avaliadas usando o formato *note
FORWARDREF: 15f.

Abaixo estão alguns exemplos do comportamento com expressões não
suportadas:

     >>> from annotationlib import get_annotations, Format
     >>> def zerodiv(x: 1 / 0): ...
     >>> get_annotations(zerodiv, format=Format.STRING)
     Traceback (most recent call last):
       ...
     ZeroDivisionError: division by zero
     >>> get_annotations(zerodiv, format=Format.FORWARDREF)
     Traceback (most recent call last):
       ...
     ZeroDivisionError: division by zero
     >>> def ifexp(x: 1 if y else 0): ...
     >>> get_annotations(ifexp, format=Format.STRING)
     {'x': '1'}


File: python.info,  Node: Security implications of introspecting annotations,  Prev: Limitações do formato FORWARDREF,  Up: annotationlib — Funcionalidade para introspecção de anotações

5.29.15.8 Security implications of introspecting annotations
............................................................

Much of the functionality in this module involves executing code related
to annotations, which can then do arbitrary things.  For example, *note
get_annotations(): 456. may call an arbitrary *note annotate function:
15d, and *note ForwardRef.evaluate(): 1770. may call *note eval(): 49d.
on an arbitrary string.  Code contained in an annotation might make
arbitrary system calls, enter an infinite loop, or perform any other
operation.  This is also true for any access of the *note
__annotations__: 455. attribute, and for various functions in the *note
typing: 10a. module that work with annotations, such as *note
typing.get_type_hints(): 8b5.

Any security issue arising from this also applies immediately after
importing code that may contain untrusted annotations: importing code
can always cause arbitrary operations to be performed.  However, it is
unsafe to accept strings or other input from an untrusted source and
pass them to any of the APIs for introspecting annotations, for example
by editing an ‘__annotations__’ dictionary or directly creating a *note
ForwardRef: 17c3. object.


File: python.info,  Node: site — Gancho de configuração específico do site,  Prev: annotationlib — Funcionalidade para introspecção de anotações,  Up: Serviços de Tempo de Execução Python

5.29.16 ‘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: 13a4.
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: 2478,
incluindo *note help(): aca. ao espaço de nomes embutido.  No entanto, a
opção de inicialização do Python *note -S: 13a4. 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(): 1fd4.

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: 13a4.

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: 1f3. e é anexado se
‘"t"’ estiver presente na constante *note sys.abiflags: c4d.)  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: 1f3. são identificadas pelo sufixo “t” no nome do diretório
específico da versão, como ‘lib/python3.13t/’.

Alterado na versão 3.14: *note site: cc. não é mais responsável por
atualizar *note sys.prefix: 3e4. e *note sys.exec_prefix: 3e8. em *note
Ambientes virtuais: 4742.  Isso agora é feito durante a *note
inicialização do caminho: 1834.  Como resultado, em *note Ambientes
virtuais: 4742, *note sys.prefix: 3e4. e *note sys.exec_prefix: 3e8. não
dependem mais da inicialização de *note site: cc. e, portanto, não são
afetados por *note -S: 13a4.

Ao executar em um *note ambiente virtual: 4742, o arquivo ‘pyvenv.cfg’
em *note sys.prefix: 3e4. é verificado em busca de configurações
específicas do site.  Se a chave ‘include-system-site-packages’ existir
e estiver definida como ‘true’ (sem distinção entre maiúsculas e
minúsculas), os prefixos de nível de sistema serão pesquisados em busca
de site-packages; caso contrário, não serã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: 544.
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<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/site.py


File: python.info,  Node: sitecustomize,  Next: usercustomize,  Up: site — Gancho de configuração específico do site

5.29.16.1 ‘sitecustomize’
.........................

Após essas manipulações de caminho, é feita uma tentativa de importar um
módulo chamado *note sitecustomize: cd, 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: 64f. ou sua exceção de
subclasse, e o atributo *note name: 257c. 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: cd. 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.16.2 ‘usercustomize’
.........................

Depois disso, é feita uma tentativa de importar um módulo chamado *note
usercustomize: 114, que pode executar personalizações arbitrárias
específicas do usuário, se *note ENABLE_USER_SITE: 4939. 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: 1580.  Se esta importação falhar com um *note ImportError:
64f. ou sua exceção de subclasse, e o atributo *note name: 257c. 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: cd. e *note
usercustomize: 114. 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.16.3 Configuração Readline
...............................

Em sistemas que oferecem suporte a *note readline: bf, este módulo
também importará e configurará o módulo *note rlcompleter: c2, se o
Python for iniciado em *note modo interativo: 440. e sem a opção *note
-S: 13a4.  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__: 11be. no seu módulo *note sitecustomize: cd. ou
*note usercustomize: 114. ou no seu arquivo *note PYTHONSTARTUP: 1b8.

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<9>,  Prev: Configuração Readline,  Up: site — Gancho de configuração específico do site

5.29.16.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: 1580. ou *note
     PYTHONNOUSERSITE: 1581.).  ‘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(): 143c. 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(): 143b. 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: 1fe5.  Veja também *note
     PYTHONUSERBASE: 157f.

 -- 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: 13a4.

     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: cd. ou *note
     usercustomize: 114. (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:
     1518.  Se ele ainda não foi inicializado, esta função também o
     definirá, respeitando *note PYTHONUSERBASE: 157f.

     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: 1fe4.  Se ele ainda não foi inicializado, esta
     função também o definirá, respeitando *note USER_BASE: 1518.  Para
     determinar se o site-packages específico do usuário foi adicionado
     a ‘sys.path’, *note ENABLE_USER_SITE: 4939. deve ser usado.

     Adicionado na versão 3.2.


File: python.info,  Node: Interface de linha de comando<9>,  Prev: Conteúdo do módulo<10>,  Up: site — Gancho de configuração específico do site

5.29.16.5 Interface de linha de comando
.......................................

O módulo *note site: cc. 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: 3e1. na saída padrão, seguido pelo valor de *note USER_BASE:
1518. e se o diretório existe, depois o mesmo para *note USER_SITE:
1fe4. e, finalmente, o valor de *note ENABLE_USER_SITE: 4939.

 -- 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: 1fe1.

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:
     1834. – A inicialização de *note sys.path: 3e1.

Ver também
..........

   * Veja o módulo *note concurrent.interpreters: 25, que expõe de forma
     semelhante a funcionalidade principal do runtime.

   ---------- 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: 1b.  (O
módulo *note codeop: 1d. é 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: 1896. 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: f30, 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: 26a0. e define 'readfunc' para ser usado como o
     método *note InteractiveConsole.raw_input(): 4947, se fornecido.
     Se 'local' for fornecido, ele será passado para o construtor *note
     InteractiveConsole: 26a0. 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: 26a0.  O método
     *note interact(): 4948. 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: 18e. se o comando
     estiver completo e contém um erro de sintaxe, ou levanta *note
     OverflowError: a77. ou *note ValueError: 2ea. 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.14/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(): 4949.; o padrão para
     'filename' é ‘'<input>'’, e para 'symbol' é ‘'single'’.  Uma de
     várias coisas pode acontecer:

        * A entrada está incorreta; *note compile_command(): 4949.
          levantou uma exceção (*note SyntaxError: 18e. ou *note
          OverflowError: a77.).  Um traceback da sintaxe será impresso
          chamando o método *note showsyntaxerror(): 494d.  *note
          runsource(): 494c. retorna ‘False’.

        * A entrada está incompleta e são necessárias mais entradas;
          *note compile_command(): 4949. retornou ‘None’.  *note
          runsource(): 494c. retorna ‘True’.

        * A entrada está completa; *note compile_command(): 4949.
          retornou um objeto código.  O código é executado chamando
          *note runcode(): 494e. (que também lida com exceções de tempo
          de execução, exceto *note SystemExit: f30.).  *note
          runsource(): 494c. 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(): fc2. é chamado para exibir um traceback.  Todas as
     exceções são capturadas, exceto *note SystemExit: f30, que pode ser
     propagada.

     Uma observação sobre *note KeyboardInterrupt: bbb.: 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():
     494f.

 -- 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(): 494f.

     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: 26a0. é uma subclasse de *note
InteractiveInterpreter: 1896. 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(): 494c.
     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: 14d5. é 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: 1d. 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: 1b.  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: 1b.

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: 1d. 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: 18e. é levantada se houver sintaxe Python
     inválida, e *note OverflowError: a77. ou *note ValueError: 2ea. 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: 2a9d. (‘'exec'’) ou como uma *note expressão: 2266.
     (‘'eval'’).  Qualquer outro valor fará com que *note ValueError:
     2ea. 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__(): 76f.
     idênticos em assinatura à função embutida *note compile(): 4ab, 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__(): 76f.
     idênticos em assinatura a *note compile_command(): 1a6f.; 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.14/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: 138. explicitamente; ele é
usado automaticamente pelo mecanismo embutido no *note import: 7ed. para
itens *note sys.path: 3e1. que são caminhos para arquivos ZIP.

Normalmente, *note sys.path: 3e1. é uma lista de nomes de diretórios
como strings.  Este módulo também permite que um item de *note sys.path:
3e1. 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) - Importar módulos de arquivos Zip

     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: 7b. - 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: 64f, portanto, também pode ser capturada como
     *note ImportError: 64f.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<34>,  Up: zipimport - Importa módulos de arquivos Zip

5.31.1.1 Objetos zipimporter
............................

*note zipimporter: 4962. é 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: 495f. é 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(): a54.

      -- Método: create_module (spec)

          Implementação de *note importlib.abc.Loader.create_module():
          ea0. que retorna *note None: 87a. 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():
          a60.

          Adicionado na versão 3.10.

      -- Método: find_spec (fullname, target=None)

          Uma implementação de *note
          importlib.abc.PathEntryFinder.find_spec(): a62.

          Adicionado na versão 3.10.

      -- Método: get_code (fullname)

          Retorna o objeto código para o módulo especificado.  Levanta
          *note ZipImportError: 495f. se o módulo não puder ser
          importado.

      -- Método: get_data (pathname)

          Retorna os dados associados a 'pathname'.  Levanta *note
          OSError: 2bf. se o arquivo não for encontrado.

          Alterado na versão 3.3: *note IOError: 1249. costumava ser
          levantada, agora ela é um apelido para *note OSError: 2bf.

      -- Método: get_filename (fullname)

          Retorna o valor que ‘__file__’ seria definido se o módulo
          especificado fosse importado.  Levanta *note ZipImportError:
          495f. 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: 495f. se o módulo não puder ser encontrado, e
          retorna *note None: 87a. 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: 495f. 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:
          495f. em caso de falha.

          Deprecated since version 3.10, will be removed in version
          3.15: Use *note exec_module(): 337.

      -- 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: 4968. e *note prefix: 4969, quando
     combinados com uma barra, são iguais ao argumento original
     'archivepath' fornecido ao construtor da *note zipimporter: 4962.


File: python.info,  Node: Exemplos<34>,  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: 138. 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: 3e1. que tenha um
     subdiretório que corresponda ao nome do pacote, adiciona o
     subdiretório ao *note __path__: 1f09. 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: cc. 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: 3e1. seja uma sequência.  Itens de
     *note sys.path: 3e1. que não sejam strings referentes a diretórios
     existentes são ignorados.  Itens Unicode em *note sys.path: 3e1.
     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(): bfb.).

 -- Função: pkgutil.get_importer (path_item)

     Recupera um *note localizador: 2203. para o 'path_item' fornecido.

     O localizador retornado é armazenado em cache em *note
     sys.path_importer_cache: 7ef. 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: 121a. for necessária.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 7b. em vez de depender da emulação de importação
     interna do pacote da PEP 302(2).

 -- Função: pkgutil.iter_importers (fullname='')

     Produz objetos *note localizador: 2203. 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: f1b. e *note sys.path_hooks: 121a.).

     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: 7b. em vez de depender da emulação de importação
     interna do pacote da PEP 302(3).

 -- Função: pkgutil.iter_modules (path=None, prefix='')

     Levanta *note ModuleInfo: f3c. para todos os submódulos em 'path'
     ou, se 'path' for ‘None’, todos os módulos de nível superior em
     *note sys.path: 3e1.

     '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: 2203. 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: 1268. e *note
          zipimport.zipimporter: 4962.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 7b. em vez de depender da emulação de importação
     interna do pacote da PEP 302(4).

 -- Função: pkgutil.walk_packages (path=None, prefix='', onerror=None)

     Levanta *note ModuleInfo: f3c. 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: 64f.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: 2203. 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: 1268. e *note
          zipimport.zipimporter: 4962.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 7b. em vez de depender da emulação de importação
     interna do pacote da PEP 302(5).

 -- Função: pkgutil.get_data (package, resource)

     Obtém um recurso de um pacote.

     Este é um invólucro para a API *note get_data: 4971. do *note
     carregador: 1965.  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: 1965. que não oferece suporte a *note get_data:
     4971, ‘None’ será retornado.  Em particular, o *note carregador:
     1965. para *note pacotes de espaço de nomes: 2b1. não oferece
     suporte a *note get_data: 4971.

 -- 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(6)) - 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: 2ea. – se 'name' não estiver em um formato
     reconhecido.

     *note ImportError: 64f. – se uma importação falhou quando não
     deveria.

     *note AttributeError: 5e4. – 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.14/Lib/pkgutil.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/

   (6) 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: 1c9c. 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(): 4978. e *note
     report(): 4979. 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: 497b.

* Menu:

* Exemplo de uso de ModuleFinder::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: c3. é 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: 23b. 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: c3.  Se essa limitação não for aceitável para um
determinado caso de uso, *note importlib: 7b. provavelmente será uma
escolha mais adequada do que este módulo.

O módulo *note runpy: c3. 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(): 1aae.

     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: 87a, 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: 21fa. com base no spec de módulo.

     Se o argumento 'alter_sys' for fornecido e for avaliado como *note
     True: dfb, 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: df. 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: 23b. 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: 2117.
     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: 3e1. 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: 3e1. (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(): 49e.

     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: 87a. 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:
     87a.

     Se 'file_path' for uma referência a uma entrada válida de *note
     sys.path: 3e1, 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: 21fa. com base no
     spec de módulo.

     Várias alterações também são feitas no módulo *note sys: df.
     Primeiramente, *note sys.path: 3e1. 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: df. são revertidas antes que a
     função retorne.

     Note que, diferentemente de *note run_module(): 1aae, as alterações
     feitas em *note sys: df. 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: 3e1.  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: 1fc8. 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: 3e1. 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: 1c5e. - Detalhes da linha de comando
do CPython

A função *note importlib.import_module(): 731.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<13>.
* Funções: Funções<13>.
* 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<35>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/Lib/importlib/__init__.py


File: python.info,  Node: Introdução<13>,  Next: Funções<13>,  Up: importlib — A implementação de import

5.31.5.1 Introdução
...................

O pacote *note importlib: 7b. tem três propósitos.

Uma é fornecer a implementação da instrução *note import: 7ed. (e,
portanto, por extensão, a função *note __import__(): ac7.) 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: 7ed. são expostos
neste pacote, tornando mais fácil para os usuários criarem seus próprios
objetos personalizados (conhecidos genericamente como *note importador:
22dc.) 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: 7e. apresenta acesso a metadados de
     distribuições de terceiros.

   * *note importlib.resources: 7f. fornece rotinas para acessar
     “recursos” não codificados de pacotes Python.

Ver também
..........

*note A instrução import: 7ed.

     A referência da linguagem para a instrução *note import: 7ed.

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: 17ab.).

A função *note __import__(): 1263.

     A instrução *note import: 7ed. é um açúcar sintático para esta
     função.

*note A inicialização do caminho de pesquisa de módulos sys.path: 1834.

     A inicialização de *note sys.path: 3e1.

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<13>,  Next: importlib abc – classes base abstratas relacionadas a importação,  Prev: Introdução<13>,  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__(): ac7.

          Nota: A importação programática de módulos deve usar *note
          import_module(): 731. 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(): 731. atua como um wrapper
     simplificador em torno de *note importlib.__import__(): 1263.  Isso
     significa que toda a semântica da função é derivada de *note
     importlib.__import__(): 1263.  A diferença mais importante entre
     essas duas funções é que *note import_module(): 731. retorna o
     pacote ou módulo especificado (por exemplo, ‘pkg.mod’), enquanto
     *note __import__(): ac7. 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(): dfe. 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: f1b.  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: 3e1. 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: 17ab.).

     Quando *note reload(): 732. é 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: 1965. 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:
     8ed. 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: df, *note
     __main__: 1, *note builtins: 13. 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:
     14a7. … *note import: 7ed. …, chamar *note reload(): 732. 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: d31. é levantada
     quando o módulo que está sendo recarregado não possui um *note
     ModuleSpec: 2117.

          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: 1930. 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<13>,  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: 7c. contém todas as principais classes
base abstratas usadas por *note import: 7ed.  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: 1266.

     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: 21fc. 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__: 1f09. 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(): a63. 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(): dfe. ao invalidar os
          caches de todos os localizadores em *note sys.meta_path: f1b.

          Alterado na versão 3.4: Retorna ‘None’ quando chamado em vez
          de *note NotImplemented: 1a2.

 -- Classe: importlib.abc.PathEntryFinder

     Uma classe base abstrata que representa um *note localizador de
     entrada de caminho: 1267.  Embora tenha algumas semelhanças com
     *note MetaPathFinder: a64, ‘PathEntryFinder’ deve ser usado apenas
     dentro do subsistema de importação baseado em caminho fornecido por
     *note importlib.machinery.PathFinder: 1219.

     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: 21fc. para o
          módulo especificado.  O localizador irá procurar pelo módulo
          apenas dentro do *note entrada de caminho: 22eb. 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(): a63. 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(): dfd.
          ao invalidar os caches de todos os localizadores em cache.

 -- Classe: importlib.abc.Loader

     Uma classe base abstrata para um *note carregador: 1965.  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:
     4988.

     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(): a60. é 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():
          a60. for chamado.  Quando este método existir, *note
          create_module(): ea0. deve ser definido.

          Adicionado na versão 3.4.

          Alterado na versão 3.6: *note create_module(): ea0. 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: 64f. será levantada,
          caso contrário, o módulo carregado será retornado.

          Se o módulo solicitado já existir em *note sys.modules: 17ab,
          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: 17ab. 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: 17ab.; módulos já em
          *note sys.modules: 17ab. 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__: 157d.

             - *note module.__file__: 2202.

             - *note module.__cached__: 31f. '(descontinuado)'

             - *note module.__path__: 1f09.

             - *note module.__package__: 321. '(descontinuado)'

             - *note module.__loader__: 339. '(descontinuado)'

          Quando *note exec_module(): a60. está disponível, então a
          funcionalidade compatível com versões anteriores é fornecida.

          Alterado na versão 3.4: Levanta *note ImportError: 64f. quando
          chamado em vez de *note NotImplementedError: 368.
          Funcionalidade fornecida quando *note exec_module(): a60. está
          disponível.

          Deprecated since version 3.4, will be removed in version 3.15:
          A API recomendada para carregar um módulo é *note
          exec_module(): a60. (e *note create_module(): ea0.).  Os
          carregadores devem implementá-lo em vez de *note
          load_module(): a5f.  O mecanismo de importação cuida de todas
          as outras responsabilidades de *note load_module(): a5f.
          quando *note exec_module(): a60. é implementado.

 -- Classe: importlib.abc.ResourceLoader

     'Substituída por TraversableResources'

          Uma classe base abstrata para um *note carregador: 1965. 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: This ABC is deprecated in
          favour of supporting resource loading through *note
          importlib.resources.abc.TraversableResources: 2f7.  This class
          exists for backwards compatibility only with other ABCs in
          this module.

           -- 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:
                    2bf. deve ser levantada se o 'path' não puder ser
                    encontrado.  Espera-se que o 'path' seja construído
                    usando o atributo *note __file__: 2202. de um módulo
                    ou um item de *note __path__: 1f09. de um pacote.

                    Alterado na versão 3.4: Levanta *note OSError: 2bf.
                    em vez de *note NotImplementedError: 368.

 -- Classe: importlib.abc.InspectLoader

     Uma classe base abstrata para um *note carregador: 1965. 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: 64f. 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: f29, 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:
               64f. se o carregador não puder encontrar o módulo
               especificado.

               Alterado na versão 3.4: Levanta *note ImportError: 64f.
               em vez de *note NotImplementedError: 368.

      -- 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: 64f. é levantada se o *note carregador: 1965. não
          puder encontrar o módulo.

          Alterado na versão 3.4: Levanta *note ImportError: 64f. em vez
          de *note NotImplementedError: 368.

      -- 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(): 4ab. 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(): a60.

          Adicionado na versão 3.4.

      -- Método: load_module (fullname)

          Implementação de *note Loader.load_module(): a5f.

          Deprecated since version 3.4, will be removed in version 3.15:
          use *note exec_module(): 1208.

 -- Classe: importlib.abc.ExecutionLoader

     Uma classe base abstrata que herda de *note InspectLoader: 114a.
     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__: 2202. para o módulo especificado.  Se nenhum
               caminho estiver disponível, *note ImportError: 64f. é
               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: 64f.
               em vez de *note NotImplementedError: 368.

 -- Classe: importlib.abc.FileLoader (fullname, path)

     Uma classe base abstrata que herda de *note ResourceLoader: dd6. e
     *note ExecutionLoader: 498b, fornecendo implementações concretas de
     *note ResourceLoader.get_data(): 4971. e *note
     ExecutionLoader.get_filename(): 498c.

     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.

          Deprecated since version 3.4, will be removed in version 3.15:
          Use *note Loader.exec_module(): a60.

      -- Método: abstractmethod get_filename (fullname)

          Retorna *note path: 498e.

      -- 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: dd6. e *note ExecutionLoader: 498b, exigindo a
     implementação de:

        * *note ResourceLoader.get_data(): 4971.

        * 
          *note ExecutionLoader.get_filename(): 498c.

               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: 368.) 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: 183.
          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: 2bf. é levantada.

          Adicionado na versão 3.3.

          Alterado na versão 3.4: Levanta *note OSError: 2bf. em vez de
          *note NotImplementedError: 368.

      -- 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(): 1386.  Você não
          precisa implementá-lo, mas ele ainda está disponível para fins
          de compatibilidade.  Levanta *note OSError: 2bf. se o caminho
          não puder ser manipulado.

          Alterado na versão 3.4: Levanta *note OSError: 2bf. em vez de
          *note NotImplementedError: 368.

      -- 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: 259f./*note PermissionError:
          f32.), não propaga a exceção.

          Alterado na versão 3.4: Não mais levanta *note
          NotImplementedError: 368. quando chamado.

      -- Método: get_code (fullname)

          Implementação concreta de *note InspectLoader.get_code():
          114b.

      -- Método: exec_module (module)

          Implementação concreta de *note Loader.exec_module(): a60.

          Adicionado na versão 3.4.

      -- Método: load_module (fullname)

          Implementação concreta de *note Loader.load_module(): a5f.

          Deprecated since version 3.4, will be removed in version 3.15:
          Use *note exec_module(): 1209.

      -- Método: get_source (fullname)

          Implementação concreta de *note InspectLoader.get_source():
          114e.

      -- Método: is_package (fullname)

          Implementação concreta de *note InspectLoader.is_package():
          4989.  Um módulo é determinado como um pacote se seu caminho
          de arquivo (conforme fornecido por *note
          ExecutionLoader.get_filename(): 498c.) 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: 13b2. 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: 59a.
     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: 87a.  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.

     Deprecated since version 3.12, removed in version 3.14: Use *note
     importlib.resources.abc.TraversableResources: 2f7.

      -- Método: abstractmethod open_resource (resource)

               Retorna um *note objeto arquivo ou similar: 289a. aberto
               para leitura binária de 'resource'.

               Se o recurso não puder ser encontrado, *note
               FileNotFoundError: 263. é 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: 263.

      -- Método: abstractmethod is_resource (name)

               Retorna ‘True’ se o 'name' nomeado for considerado um
               recurso.  *note FileNotFoundError: 263. é levantada se
               'name' não existir.

      -- Método: abstractmethod contents ()

               Retorna um *note iterável: 1423. 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(): 4999. 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: 265.
     adequados para percorrer diretórios e abrir arquivos.

     Para uma representação do objeto no sistema de arquivos, use *note
     importlib.resources.as_file(): 6aa.

     Adicionado na versão 3.9.

     Deprecated since version 3.12, removed in version 3.14: Use *note
     importlib.resources.abc.Traversable: 2f8.

      -- 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: 2adb.).

          Ao abrir como texto, aceita parâmetros de codificação como os
          aceitos por *note io.TextIOWrapper: 9b4.

      -- 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(): 6ab.  Subclasse
     *note importlib.resources.abc.ResourceReader: 4988. e fornece
     implementações concretas dos métodos abstratos de *note
     importlib.resources.abc.ResourceReader: 4988.  Portanto, qualquer
     carregador que forneça *note importlib.abc.TraversableResources:
     1b26. 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.

     Deprecated since version 3.12, removed in version 3.14: Use *note
     importlib.resources.abc.TraversableResources: 2f7.

      -- Método: abstractmethod files ()

          Retorna um objeto *note importlib.resources.abc.Traversable:
          2f8. para o pacote carregado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 7ed. 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: 72f.
     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: 72f.
     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(): f28.).

     Adicionado na versão 3.3.

 -- Classe: importlib.machinery.BuiltinImporter

     Um *note importador: 22dc. para módulos embutidos.  Todos os
     módulos embutidos conhecidos estão listados em *note
     sys.builtin_module_names: 1efc.  Esta classe implementa os ABCs
     *note importlib.abc.MetaPathFinder: a64. e *note
     importlib.abc.InspectLoader: 114a.

     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: 22dc. para módulos congelados.  Esta classe
     implementa os ABCs *note importlib.abc.MetaPathFinder: a64. e *note
     importlib.abc.InspectLoader: 114a.

     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: 2203. para módulos declarados no registro do
     Windows.  Esta classe implementa a ABC *note
     importlib.abc.MetaPathFinder: a64.

     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:
     cc. em vez disso.  Versões futuras do Python podem não habilitar
     esse localizador por padrão.

 -- Classe: importlib.machinery.PathFinder

     Um *note Localizador: 2203. para atributos *note sys.path: 3e1. e
     pacote ‘__path__’.  Esta classe implementa a ABC *note
     importlib.abc.MetaPathFinder: a64.

     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: 21fc. para
          o módulo especificado por 'fullname' em *note sys.path: 3e1.
          ou, se definido, em 'path'.  Para cada entrada de caminho
          pesquisada, *note sys.path_importer_cache: 7ef. é verificado.
          Se um objeto não falso for encontrado, ele será usado como o
          *note localizador de entrada de caminho: 1267. para procurar o
          módulo que está sendo pesquisado.  Se nenhuma entrada for
          encontrada em *note sys.path_importer_cache: 7ef, então *note
          sys.path_hooks: 121a. será pesquisado para um localizador para
          a entrada de caminho e, se encontrado, será armazenado em
          *note sys.path_importer_cache: 7ef. 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: 7ef.

      -- Método: classmethod invalidate_caches ()

          Chama *note importlib.abc.PathEntryFinder.invalidate_caches():
          4987. em todos os localizadores armazenados em *note
          sys.path_importer_cache: 7ef. que definem o método.  Caso
          contrário, as entradas em *note sys.path_importer_cache: 7ef.
          definidas como ‘None’ são excluídas.

          Alterado na versão 3.7: Entradas de ‘None’ em *note
          sys.path_importer_cache: 7ef. são excluídas.

     Alterado na versão 3.4: Chama objetos em *note sys.path_hooks:
     121a. 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:
     a65. 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(): dfe.

     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: 49a5.

          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: 121a.  Uma instância de *note FileFinder:
          1268. é 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: 64f. será levantada.

 -- Classe: importlib.machinery.SourceFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.SourceLoader:
     4992. subclassificando *note importlib.abc.FileLoader: 1269. 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: 49a9. parecer ser para um
          pacote.

      -- Método: path_stats (path)

          Implementação concreta de *note
          importlib.abc.SourceLoader.path_stats(): 1386.

      -- Método: set_data (path, data)

          Implementação concreta de *note
          importlib.abc.SourceLoader.set_data(): 4993.

      -- Método: load_module (name=None)

          Implementação concreta de *note
          importlib.abc.Loader.load_module(): a5f. onde a especificação
          do nome do módulo para carregar é opcional

          Deprecated since version 3.6, will be removed in version 3.15:
          Use *note importlib.abc.Loader.exec_module(): a60.

 -- Classe: importlib.machinery.SourcelessFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.FileLoader: 1269.
     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: 49ae.

      -- Método: get_code (fullname)

          Retorna o objeto código para *note name: 49ad. criado a partir
          de *note path: 49ae.

      -- 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():
     a5f. onde a especificação do nome do módulo para carregar é
     opcional

     Deprecated since version 3.6, will be removed in version 3.15: Use
     *note importlib.abc.Loader.exec_module(): a60.

 -- Classe: importlib.machinery.ExtensionFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.ExecutionLoader:
     498b. 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: 72e.

      -- 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: 49b3.

          Adicionado na versão 3.4.

 -- Classe: importlib.machinery.NamespaceLoader (name, path,
          path_finder)

     Uma implementação concreta de *note importlib.abc.InspectLoader:
     114a. 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__: 21fd.
     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__: 2202. at runtime and this will not be automatically
     reflected in the module’s *note __spec__.origin: 49b9, and vice
     versa.

     Adicionado na versão 3.4.

      -- Atributo: name

          The module’s fully qualified name (see *note module.__name__:
          157d.).  The *note finder: 2203. should always set this
          attribute to a non-empty string.

      -- Atributo: loader

          The *note loader: 1965. used to load the module (see *note
          module.__loader__: 339.).  The *note finder: 2203. should
          always set this attribute.

      -- Atributo: origin

          The location the *note loader: 1965. should use to load the
          module (see *note module.__file__: 2202.).  For example, for
          modules loaded from a ‘.py’ file this is the filename.  The
          *note finder: 2203. should always set this attribute to a
          meaningful value for the *note loader: 1965. 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: 70b. of strings enumerating
          the locations in which a package’s submodules will be found
          (see *note module.__path__: 1f09.).  Most of the time there
          will only be a single directory in this list.

          The *note finder: 2203. 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: 2203. 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__: 31f.).  The *note finder: 2203.
          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__: 321.  If the module is a package then this
          is the same as *note name: 21fe.

      -- Atributo: has_location

          ‘True’ if the spec’s *note origin: 49b9. refers to a loadable
          location, ‘False’ otherwise.  This value impacts how ‘origin’
          is interpreted and how the module’s *note __file__: 2202. is
          populated.

 -- Classe: importlib.machinery.AppleFrameworkLoader (name, path)

     A specialization of *note importlib.machinery.ExtensionFileLoader:
     ea2. 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 be 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 completo de importação 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’.

     When a module is loaded with this loader, the ‘__file__’ for the
     module will report as the location of the ‘.fwork’ file.  This
     allows code to use the ‘__file__’ of a module as an anchor for file
     system traversal.  However, the spec origin will reference the
     location of the 'actual' binary in the ‘.framework’ folder.

     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: 1fed.: 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.14/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<35>,  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: 22dc.

 -- 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: 4992.

     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: 368. 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: 2ea. 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: 198. 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:
     59a.

 -- 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: 2ea. is raised.  If ‘sys.implementation.cache_tag’ is
     not defined, *note NotImplementedError: 368. is raised.

     Adicionado na versão 3.4.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     59a.

 -- 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(): 114e.).

     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: 64f. is raised if 'name' is a relative module
     name but 'package' is a false value (e.g.  ‘None’ or the empty
     string).  *note ImportError: 64f. 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: 64f. instead of *note
     ValueError: 2ea. for invalid relative import attempts.

 -- Função: importlib.util.find_spec (name, package=None)

     Localiza o *note spec: 21fc. para um módulo, opcionalmente relativo
     ao nome do 'package' especificado.  Se o módulo estiver em *note
     sys.modules: 17ab, então ‘sys.modules[name].__spec__’ será
     retornado (a menos que o spec seja ‘None’ ou não esteja definido,
     nesse caso *note ValueError: 2ea. é levantada).  Caso contrário,
     uma pesquisa usando *note sys.meta_path: f1b. é 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: d31.
     instead of *note AttributeError: 5e4. if 'package' is in fact not a
     package (i.e.  lacks a *note __path__: 1f09. attribute).

 -- Função: importlib.util.module_from_spec (spec)

     Create a new module based on 'spec' and *note
     spec.loader.create_module: ea0.

     If *note spec.loader.create_module: ea0. does not return ‘None’,
     then any pre-existing attributes will not be reset.  Also, no *note
     AttributeError: 5e4. will be raised if triggered while accessing
     'spec' or setting an attribute on the module.

     This function is preferred over using *note types.ModuleType: 1009.
     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: 2117. instance
     based on a loader.  The parameters have the same meaning as they do
     for ModuleSpec.  The function uses available *note loader: 1965.
     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: 2117. 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:
     59a.

 -- 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(): d32. 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(): a60. as control over what module type is used for
     the module is required.  For those same reasons, the loader’s *note
     create_module(): ea0. method must return ‘None’ or a type for which
     its ‘__class__’ attribute can be mutated along with not using *note
     slots: 7ec.  Finally, modules which substitute the object placed
     into *note sys.modules: 17ab. will not work as there is no way to
     properly replace the module references throughout the interpreter
     safely; *note ValueError: 2ea. 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(): ea0,
     removing the compatibility warning for *note
     importlib.machinery.BuiltinImporter: ea1. and *note
     importlib.machinery.ExtensionFileLoader: ea2.

      -- 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.14/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<35>,  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<35>

5.31.5.7 Importing programmatically
...................................

To programmatically import a module, use *note
importlib.import_module(): 731.

     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<35>

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():
5a8.

Note that if ‘name’ is a submodule (contains a dot), *note
importlib.util.find_spec(): 5a8. 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<35>

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: 3e1. being searched.  Alternatives should first be
considered first, such as modifying *note sys.path: 3e1. when a proper
module is required, or using *note runpy.run_path(): 49e. 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<35>

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<35>

5.31.5.11 Setting up an importer
................................

For deep customizations of import, you typically want to implement an
*note importer: 22dc.  This means managing both the *note finder: 2203.
and *note loader: 1965. side of things.  For finders there are two
flavours to choose from depending on your needs: a *note meta path
finder: 1266. or a *note path entry finder: 1267.  The former is what
you would put on *note sys.meta_path: f1b. while the latter is what you
create using a *note path entry hook: 22ed. on *note sys.path_hooks:
121a. which works with *note sys.path: 3e1. 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<35>

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(): 731.:

     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: 329. 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:
138.

     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: 10bd. que desejam oferecer suporte à leitura de recursos
devem implementar um método ‘get_resource_reader(fullname)’ conforme
especificado por *note importlib.resources.abc.ResourceReader: 4988.

 -- Classe: importlib.resources.Anchor

     Representa uma âncora para recursos, seja um *note objeto módulo:
     1009. 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: 2f8. 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: 49cc. 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: 1a3.  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: 2f8. que representa um arquivo ou
     diretório, normalmente de *note importlib.resources.files(): 6ab,
     retorna um gerenciador de contexto para uso em uma instrução *note
     with: 186.  O gerenciador de contexto fornece um objeto *note
     pathlib.Path: 265.

     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.14/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: 49cc, assim como em *note files(): 6ab.
     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: 2f8, 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: 49ce. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função retorna um objeto *note BinaryIO: 239, 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: 49ce. para detalhes sobre 'anchor' e
     'path_names'.  'encoding' e 'errors' têm o mesmo significado que na
     embutida *note open(): 314.

     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: 238, 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: 192.

     Veja *note a introdução: 49ce. 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: 169.
     Por padrão, o conteúdo é lido como UTF-8 estrito.

     Veja *note a introdução: 49ce. para detalhes sobre 'anchor' e
     'path_names'.  'encoding' e 'errors' têm o mesmo significado que na
     embutida *note open(): 314.

     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: 186.  O gerenciador de contexto
     fornece um objeto *note pathlib.Path: 265.

     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(): a1a. 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: 49ce. 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: 49ce. 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: 169.  O iterável não recorre em subdiretórios.

     Veja *note a introdução: 49ce. 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: 13b2. 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: 59a.
     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: 87a.  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: 2f7.

      -- Método: abstractmethod open_resource (resource)

          Retorna um *note objeto arquivo ou similar: 289a. aberto para
          leitura binária de 'resource'.

          Se o recurso não puder ser encontrado, *note
          FileNotFoundError: 263. é 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: 263.

      -- Método: abstractmethod is_resource (name)

          Retorna ‘True’ se o 'name' nomeado for considerado um recurso.
          *note FileNotFoundError: 263. é levantada se 'name' não
          existir.

      -- Método: abstractmethod contents ()

          Retorna um *note iterável: 1423. 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():
          49d4. 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: 265.
     adequados para percorrer diretórios e abrir arquivos.

     Para uma representação do objeto no sistema de arquivos, use *note
     importlib.resources.as_file(): 6aa.

      -- 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: 2adb.).

          Ao abrir como texto, aceita parâmetros de codificação como os
          aceitos por *note io.TextIOWrapper: 9b4.

      -- 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(): 6ab.  É uma
     subclasse de *note ResourceReader: 4988. 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:
          2f8. para o pacote carregado.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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: 7f, 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(): a07. 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: 3e1.  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::
* Implementando provedores personalizados::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.14/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#metadata-api

   (5) 
https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points

   (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: 582.

Você pode obter os *note metadados para uma distribuição: 49e5.:

     >>> 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: 49e6,
listar seus *note arquivos constituintes: 49e7. e obter uma lista dos
*note Requisitos de distribuição: 49e8. da distribuição.

 -- Exceção: importlib.metadata.PackageNotFoundError

     Subclasse de *note ModuleNotFoundError: d31. 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: 49ed. 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__(): 581.).

   ---------- 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:
     49f1.

     Levanta *note PackageNotFoundError: 49e9. 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: 49f1. 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: 49e9. 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: 49e9. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

     Retorna *note None: 87a. 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: 6c2. 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: 49f5.  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: 87a.  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: 49e9. 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: f1b. 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: 49fd. descrevendo o
     pacote de distribuição nomeado.

     Levanta *note PackageNotFoundError: 49e9. 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(): 49fc.:

     >>> 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: Implementando provedores personalizados,  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: 192. em
     ‘sys.path’.

   - ‘importlib.metadata’ irá incidentalmente honrar objetos *note
     pathlib.Path: 265. 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: Implementando provedores personalizados,  Prev: Descoberta de distribuição,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.11 Implementando provedores personalizados
.................................................

‘importlib.metadata’ aborda duas superfícies de API, uma para
'consumidores' e outra para 'provedores'.  A maioria dos usuários são
consumidores, consumindo metadados fornecidos pelos pacotes.  Existem
outros casos de uso, no entanto, em que os usuários desejam expor
metadados por meio de algum outro mecanismo, como junto com um
importador personalizado.  Esse caso de uso exige um 'provedor
personalizado'.

Como os metadados de Pacote de Distribuição(1) não estão disponíveis por
meio de pesquisas a *note sys.path: 3e1. ou carregadores de pacotes
diretamente, os metadados de uma distribuição são encontrados através de
*note localizadores: 22da. 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: 1266. em *note
sys.meta_path: f1b.

A implementação possui ganchos integrados ao ‘PathFinder’, servindo
metadados para pacotes de distribuição encontrados no sistema de
arquivos.

A classe abstrata *note importlib.abc.MetaPathFinder: a64. 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: f1b. 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()) -> Iterable[Distribution]:
         """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 buscado pelo consumidor.

Na prática, 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: Implementando provedores personalizados

5.31.8.12 Exemplo
.................

Imagine 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: 3e1.

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: 1a8. ou um módulo com *note -m:
23b.

A variável de ambiente *note PYTHONPATH: 1213. é 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: 1213. 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:
     cc. 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: 20fc. 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: 3ed. 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: b28. e *note PYTHONPLATLIBDIR: 1be3.

Uma vez encontrados, ‘prefix’ e ‘exec_prefix’ estão disponíveis em *note
sys.base_prefix: 3e3. e *note sys.base_exec_prefix: 3e7,
respectivamente.

Se *note PYTHONHOME: 3ed. não estiver definido e um arquivo ‘pyvenv.cfg’
for encontrado ao lado do executável principal ou em seu diretório pai,
*note sys.prefix: 3e4. e *note sys.exec_prefix: 3e8. serão definidos
para o diretório que contém ‘pyvenv.cfg’; caso contrário, serão
definidos com o mesmo valor que *note sys.base_prefix: 3e3. e *note
sys.base_exec_prefix: 3e7, respectivamente.  Isso é usado por *note
Ambientes virtuais: 4742.

Finalmente, o módulo *note site: cc. é 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: cd. ou *note usercustomize: 114. conforme descrito
na documentação do módulo *note site: cc.

     Nota: Certas opções de linha de comando podem afetar ainda mais os
     cálculos de caminho.  Veja *note -E: b4c, *note -I: b4d, *note -s:
     1580. e *note -S: 13a4. para mais detalhes.

Alterado na versão 3.14: *note sys.prefix: 3e4. e *note sys.exec_prefix:
3e8. agora são definidos para o diretório ‘pyvenv.cfg’ durante a
inicialização do caminho.  Isso era feito anteriormente por *note site:
cc. e, portanto, afetado por *note -S: 13a4.

* 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
...........................

Ambientes virtuais colocam um arquivo ‘pyvenv.cfg’ em seu prefixo, o que
faz com que *note sys.prefix: 3e4. e *note sys.exec_prefix: 3e8. apontem
para eles, em vez da instalação base.

Os valores ‘prefix’ e ‘exec_prefix’ da instalação base estão disponíveis
em *note sys.base_prefix: 3e3. e *note sys.base_exec_prefix: 3e7.

Além de ser usado como um marcador para identificar ambientes virtuais,
‘pyvenv.cfg’ também pode ser usado para configurar a inicialização do
*note site: cc.  Consulte a *note documentação de ambientes virtuais:
4743. do *note site: cc.

     Nota: *note PYTHONHOME: 3ed. substitui a detecção ‘pyvenv.cfg’.

     Nota: Existem outras maneiras de implementar “ambientes virtuais”.
     Esta documentação menciona implementações baseadas no mecanismo
     ‘pyvenv.cfg’, como *note venv: 117.  A maioria das implementações
     de ambientes virtuais segue o modelo definido por *note venv: 117,
     mas pode haver implementações exóticas que divergem dele.


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: 3e1, 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: 3e1.  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: cc. 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: cc. 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(): 3f3. e a estrutura *note PyConfig: 3f4. podem
ser usados para inicializar o Python.  Os detalhes específicos do
caminho estão descritos em *note Python Path Configuration: aa0.

Ver também
..........

   * *note Encontrando módulos: e0e. para observações detalhadas do
     Windows.

   * *note Utilizando Python em plataformas Unix: 1ff2. 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: 9. 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: 4a0d. como um sinalizador para a função embutida
*note compile(): 4ab, ou usando o auxiliar *note parse(): 1c2. fornecido
neste módulo.  O resultado será uma árvore de objetos cujas classes
herdam de *note ast.AST: 4bd.  Uma árvore de sintaxe abstrata pode ser
compilada em um objeto código Python usando a função embutida *note
compile(): 4ab.

* 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<10>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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:

     -- ASDL's 4 builtin types are:
     -- 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' indicates that we annotate simple name without parens
               | AnnAssign(expr target, expr annotation, expr? value, int simple)

               -- use 'orelse' because else is a keyword in target languages
               | 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 is the byte offset in the utf8 string the parser uses
               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

               -- BoolOp() can use left & right?
         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)
              -- the grammar constrains where yield expressions can occur
              | Await(expr value)
              | Yield(expr? value)
              | YieldFrom(expr value)
              -- need sequences for compare to distinguish between
              -- 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)
              | Interpolation(expr value, constant str, int conversion, expr? format_spec)
              | JoinedStr(expr* values)
              | TemplateStr(expr* values)
              | Constant(constant value, string? kind)

              -- the following expression can appear in assignment context
              | 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)

              -- can appear only in Subscript
              | Slice(expr? lower, expr? upper, expr? step)

               -- col_offset is the byte offset in the utf8 string the parser uses
               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)

         -- keyword arguments supplied to call (NULL identifier for **kwargs)
         keyword = (identifier? arg, expr value)
                    attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         -- import name with optional 'as' alias.
         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)
                 -- The optional "rest" MatchMapping parameter handles capturing extra mapping keys

                 | 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: 4a0e.  Elas são definidas no módulo C
     ‘_ast’ e reexportadas no *note ast: 9.

     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: 1c69. 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: 1c69. 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(): 4ab.

      -- 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: 1867.) 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: 4a11, *note col_offset: 4a12, *note
          end_lineno: 4a13. e *note end_col_offset: 4a14.  O *note
          lineno: 4a11. e *note end_lineno: 4a13. 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: 4a12. e *note end_col_offset: 4a14. 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: 490e,
     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(): 4bc.  Se qualquer outro campo for omitido,
     uma *note DeprecationWarning: 1a3. 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: 2ed. é 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.

Alterado na versão 3.14: A saída *note __repr__(): 824. dos nós *note
AST: 4bd. inclui os valores dos campos dos nós.

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.

Deprecated since version 3.13, will be removed in version 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: 242c.  Tipo de nó
     gerado por *note ast.parse(): 1c2. com 'mode' no padrão ‘"exec"’.

     ‘body’ é uma *note list: 24c. das *note Instruções: 4a18. do
     módulo.

     ‘type_ignores’ é uma *note list: 24c. dos comentários de ignorar
     tipo do módulo; veja *note ast.parse(): 1c2. 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: 2432. Python.  Tipo de nó
     gerado por *note ast.parse(): 1c2. quando 'mode' é ‘"eval"’.

     ‘body’ é um nó único, um dos *note tipos de expressão: 4a1a.

          >>> print(ast.dump(ast.parse('123', mode='eval'), indent=4))
          Expression(
              body=Constant(value=123))

 -- Classe: ast.Interactive (body)

     Uma única *note entrada interativa: 242f, como em *note Modo
     interativo: 48e.  Tipo de nó gerado por *note ast.parse(): 1c2.
     quando 'mode' é ‘"single"’.

     ‘body’ é uma *note list: 24c. de *note nós de instrução: 4a18.

          >>> 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():
     1c2. 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: 24c. de *note nós de expressão: 4a1a.

     ‘returns’ é um único *note nó de expressão: 4a1a.

          >>> 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: 169, *note bytes:
     192, *note int: 19b, *note float: 196, *note complex: 197. e *note
     bool: 3c0, e as constantes *note None: 87a. e *note Ellipsis: 21c4.

          >>> 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: 199a.

        * ‘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

             * 97 (‘ord('a')’): ‘!a’ *note ASCII: 15d7. formatting

             * 114 (‘ord('r')’): ‘!r’ *note repr(): 1c1. formatting

             * 115 (‘ord('s')’): ‘!s’ *note string: 169. formatting

        * ‘format_spec’ é um nó *note JoinedStr: 199a. 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:
     4926. e *note Constant: 2ed.

          >>> 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.TemplateStr (values, /)

     Adicionado na versão 3.14.

     Node representing a template string literal, comprising a series of
     *note Interpolation: 4a1e. and *note Constant: 2ed. nodes.  These
     nodes may be any order, and do not need to be interleaved.

          >>> expr = ast.parse('t"{name} finished {place:ordinal}"', mode='eval')
          >>> print(ast.dump(expr, indent=4))
          Expression(
              body=TemplateStr(
                  values=[
                      Interpolation(
                          value=Name(id='name', ctx=Load()),
                          str='name',
                          conversion=-1),
                      Constant(value=' finished '),
                      Interpolation(
                          value=Name(id='place', ctx=Load()),
                          str='place',
                          conversion=-1,
                          format_spec=JoinedStr(
                              values=[
                                  Constant(value='ordinal')]))]))

 -- Classe: ast.Interpolation (value, str, conversion, format_spec=None)

     Adicionado na versão 3.14.

     Node representing a single interpolation field in a template string
     literal.

        * ‘value’ is any expression node (such as a literal, a variable,
          or a function call).  This has the same meaning as
          ‘FormattedValue.value’.

        * ‘str’ is a constant containing the text of the interpolation
          expression.

        * ‘conversion’ é um inteiro:

             * -1: no conversion

             * 97 (‘ord('a')’): ‘!a’ *note ASCII: 15d7. conversion

             * 114 (‘ord('r')’): ‘!r’ *note repr(): 1c1. conversion

             * 115 (‘ord('s')’): ‘!s’ *note string: 169. conversion

          This has the same meaning as ‘FormattedValue.conversion’.

        * ‘format_spec’ is a *note JoinedStr: 199a. node representing
          the formatting of the value, or ‘None’ if no format was
          specified.  Both ‘conversion’ and ‘format_spec’ can be set at
          the same time.  This has the same meaning as
          ‘FormattedValue.format_spec’.

 -- 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: 4a1f. se o contêiner for um
     alvo de atribuição (ou seja, ‘(x,y)=algumacoisa’), e *note Load:
     4bc. 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: 1be2.  Este tipo deve ser usado ao
     construir um nó *note Call: 491f. 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: 2ed, um *note
     Name: 1be2, um *note Lambda: 4929, um *note Yield: 4930. ou *note
     YieldFrom: 4931.

          >>> 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: 4912. é a palavra reservada
     ‘not’, *note Invert: 490f. é 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: 4a31. ou
     *note And: 4a32.  ‘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: 490e.

          >>> 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: 1be2. ou *note Attribute: 4920.  Dos argumentos:

        * ‘args’ contém uma lista dos argumentos passados por posição.

        * ‘keywords’ contém uma lista de objetos *note keyword: 4a33.
          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:
     1be2.

          >>> 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: 1be2.  ‘attr’ é uma string simples
     fornecendo o nome do atributo, e ‘ctx’ é *note Load: 4bc, *note
     Store: 4a1f. ou *note Del: 4a21. 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: 4a34. 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: 4924. e conter uma *note
     Slice: 4925.  ‘ctx’ é *note Load: 4bc, *note Store: 4a1f. ou *note
     Del: 4a21. 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: 4921, diretamente ou como um elemento de *note
     Tuple: 4924.

          >>> 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: 4a37.

          >>> 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: 1be2.
     ou *note Tuple: 4924.  ‘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: 4924. ou *note List: 4923. 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: 1be2, *note Attribute: 4920. ou
     *note Subscript: 4921.  ‘annotation’ é a anotação, como um nó *note
     Constant: 2ed. ou *note Name: 1be2.  ‘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: 1be2. que não aparece entre parênteses; todos os outros
     alvos são considerados complexos.  Apenas alvos simples aparecem no
     dicionário *note __annotations__: 455. 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: 1be2. para ‘x’ (com o contexto *note Store:
     4a1f.), ‘op’ é *note Add: 4a24, e ‘value’ é uma *note Constant:
     2ed. com valor para 1.

     O atributo ‘target’ não pode ser da classe *note Tuple: 4924. ou
     *note List: 4923, diferentemente dos alvos de *note Assign: 4a34.

          >>> 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: 491f. ou *note Name: 1be2,
     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:
     4914.  ‘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: 1be2, *note Attribute: 4920. ou *note Subscript:
     4921.

          >>> 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: 678. criado através da instrução *note
     type: 661.  ‘name’ é o nome do apelido, ‘type_params’ é uma lista
     de *note parâmetros de tipo: 4a40, 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: 1b61.

          >>> 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: 4914.  ‘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: 4a45. 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: 1be2, *note Tuple: 4924,
     *note List: 4923, *note Attribute: 4920. ou *note Subscript: 4921.
     ‘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: 4914.

          >>> 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: 4a4c.

          >>> 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: 4a4b, mas os nós *note
     ExceptHandler: 4a4c. 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: 1be2. (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: 4a4f.
     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: 491f.  ‘optional_vars’ é um *note Name: 1be2, *note
     Tuple: 4924. ou *note List: 4923. 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: 4a53. 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: 4bd. 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(): 1c2. 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: 5a6. podem existir em classes, funções e
apelidos de tipo.

 -- Classe: ast.TypeVar (name, bound, default_value)

     Uma *note typing.TypeVar: 480.  ‘name’ é o nome da variável de
     tipo.  ‘bound’ é o limite ou as restrições, se houver.  Se ‘bound’
     for uma *note Tuple: 4924, 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: 481.  ‘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: 482.  ‘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: 4a62.

        * ‘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: 4a40.

      -- 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: 19b7, ‘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: 4a64.

        * ‘vararg’ e ‘kwarg’ são nós *note arg: 4a64. ú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:
     1be2.

      -- 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: 4a23. 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: 4a33,
          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: 19b7.

        * ‘type_params’ é uma lista de *note parâmetros de tipo: 4a40.

          >>> 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: 19b7.

     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: 19b6.

     >>> 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: 4a46. e *note With: 4a4e,
     respectivamente.  Válido apenas no corpo de *note AsyncFunctionDef:
     19b6.

     Nota: Quando uma string é analisada por *note ast.parse(): 1c2, 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:
     4a24.).


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: 9. 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: 4a6d. aos sinalizadores passados para *note
     compile(): 4ab.  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: 4a17. (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: a04.  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: 2ea.
     é 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: 18e.
          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(): 1c2. 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: 4bd. e gera uma string
     com código que produziria um objeto *note ast.AST: 4bd. equivalente
     se analisado novamente com *note ast.parse(): 1c2.

          Aviso: A string de código produzida não será necessariamente
          igual ao código original que gerou o objeto *note ast.AST:
          4bd. (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: f5c.

     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(): 49d. 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: 2ea, *note TypeError: 198,
          *note SyntaxError: 18e, *note MemoryError: 1809. e *note
          RecursionError: f5c. 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: 19b7, *note AsyncFunctionDef: 19b6, *note ClassDef:
     19b5. ou *note Module: 4a17.) ou ‘None’ se não tiver uma docstring.
     Se 'clean' for verdadeiro, limpa o recuo da docstring com *note
     inspect.cleandoc(): 196a.

     Alterado na versão 3.5: Não há suporte a *note AsyncFunctionDef:
     19b6.

 -- 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: 4a11, *note
     end_lineno: 4a13, *note col_offset: 4a12. ou *note end_col_offset:
     4a14.) 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(): 4ab, o
     compilador espera atributos *note lineno: 4a11. e *note col_offset:
     4a12. 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: 4a11, *note col_offset:
     4a12, *note end_lineno: 4a13. e *note end_col_offset: 4a14.) 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(): 4a73.

     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(): 4a74. se aquele método
          não existir.

      -- Método: generic_visit (node)

          Este visitante chama *note visit(): 4a73. 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(): 4a74. ou os visite por
          conta própria.

      -- Método: visit_Constant (node)

          Manipula todos os nós constantes.

     Não use o *note NodeVisitor: 2ee. se você quiser aplicar mudanças
     nos nós durante a travessia.  Para isso existe um visitante
     especial (*note NodeTransformer: 4a75.) 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(): c57. para lidar com nós de constantes.

 -- Classe: ast.NodeTransformer

     A subclasse *note NodeVisitor: 2ee. que percorre a árvore de
     sintaxe abstrata e permite a modificação de nós.

     O *note NodeTransformer: 4a75. 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(): 4a74. 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: 4a75. introduz novos nós (que não faziam
     parte da árvore original) sem fornecer informações de localização
     (como *note lineno: 4a11.), *note fix_missing_locations(): 4a6e.
     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<10>,  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(): 4ab.
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(): 4ab. ou *note ast.parse(): 1c2.

     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.

 -- Função: ast.compare (a, b, /, *, compare_attributes=False)

     Compara recursivamente duas ASTs.

     'compare_attributes' afeta se os atributos AST são considerados na
     comparação.  Se 'compare_attributes' for ‘False’ (padrão), os
     atributos serão ignorados.  Caso contrário, todos devem ser iguais.
     Esta opção é útil para verificar se os ASTs são estruturalmente
     iguais, mas diferem em espaços em branco ou detalhes semelhantes.
     Os atributos incluem números de linha e deslocamentos de coluna.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0526/


File: python.info,  Node: Uso na linha de comando<10>,  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: 9. 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(): 1c2.

 -- 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).

 -- Option: --feature-version <version>

     Versão do Python no formato 3.x (por exemplo, 3.10).  O padrão é a
     versão atual do interpretador.

     Adicionado na versão 3.14.

 -- Option: -O <level>
 -- Option: --optimize <level>

     Nível de otimização do analisador.  O padrão é sem otimização.

     Adicionado na versão 3.14.

 -- Option: --show-empty

     Exibe listas e campos vazios com o valor ‘None’.  O padrão é não
     exibir objetos vazios.

     Adicionado na versão 3.14.

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: de. provides
an interface to examine these tables.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 4a89. 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(): 4ab.


File: python.info,  Node: Examining Symbol Tables,  Next: Uso na linha de comando<11>,  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: 4a89.
     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: 4a5.

      -- 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: 661. constructions.

      -- Atributo: TYPE_PARAMETERS = "type parameters"

          Used for the symbol table of *note generic functions: 677. or
          *note generic classes: 676.

      -- 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: 18a5. 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: 18a5. enumeration.

          The exact values of the returned string may change in the
          future, and thus, it is recommended to use *note
          SymbolTableType: 18a5. 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(): 18a6. 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: 480. 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(): 4a98.

      -- Método: get_identifiers ()

          Return a view object containing the names of symbols in the
          table.  See the *note documentation of view objects: 2535.

      -- Método: lookup (name)

          Lookup 'name' in the table and return a *note Symbol: 288.
          instance.

      -- Método: get_symbols ()

          Return a list of *note Symbol: 288. 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: 4a89.

      -- 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: 17f7. in this function.

 -- Classe: symtable.Class

     A namespace of a class.  This class inherits from *note
     SymbolTable: 4a89.

      -- 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: 1649. or *note async def: 7e2.

          Functions defined in a deeper scope (e.g., in an inner class)
          are not picked up by *note get_methods(): 31b.

          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()[2]
               >>> class_A.get_methods()
               ('f', 'g', 'h')

          Although ‘A().f()’ raises *note TypeError: 198. at runtime,
          ‘A.f’ is still considered as a method-like function.

          Deprecated since version 3.14, will be removed in version
          3.16.

 -- Classe: symtable.Symbol

     An entry in a *note SymbolTable: 4a89. 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_type_parameter ()

          Return ‘True’ if the symbol is a type parameter.

          Adicionado na versão 3.14.

      -- 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_free_class ()

          Return 'True' if a class-scoped symbol is free from the
          perspective of a method.

          Consider the following example:

               def f():
                   x = 1  # function-scoped
                   class C:
                       x = 2  # class-scoped
                       def method(self):
                           return x

          In this example, the class-scoped symbol ‘x’ is considered to
          be free from the perspective of ‘C.method’, thereby allowing
          the latter to return '1' at runtime and not '2'.

          Adicionado na versão 3.14.

      -- Método: is_assigned ()

          Return ‘True’ if the symbol is assigned to in its block.

      -- Método: is_comp_iter ()

          Return ‘True’ if the symbol is a comprehension iteration
          variable.

          Adicionado na versão 3.14.

      -- Método: is_comp_cell ()

          Return ‘True’ if the symbol is a cell in an inlined
          comprehension.

          Adicionado na versão 3.14.

      -- 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: 2ea.
          is raised.


File: python.info,  Node: Uso na linha de comando<11>,  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: de. 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: 4ab4. ou
*note OP: 2135, ou um token ‘"match"’ pode ser *note NAME: 2163. ou
*note SOFT_KEYWORD: 4ab5.

 -- 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: 214b.  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: 214c.

 -- Dado: token.STRING

     Valor de token que indica um *note literal de string ou byte: 214a,
     excluindo *note literais de strings formatadas: 19a.  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: 2137. ou
     *note delimitador: 2136.

     Este valor é relatado apenas pelo módulo *note tokenize: 101.
     Internamente, o tokenizador usa *note tipos exatos de tokens: 21ba.
     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: 2150.

 -- 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: 2150.
     para indicar o início de um *note bloco indentado: 2147.

 -- Dado: token.DEDENT

     Valor de token usado no início de uma *note linha lógica: 2150.
     para indicar o fim de um *note bloco indentado: 2147.

 -- Dado: token.FSTRING_START

     Valor de token usado para indicar o início de um *note literal de
     f-string: 19a.

     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: 19a, 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: 4abe, *note RBRACE: 4abf,
     *note EXCLAMATION: 4ac0. e *note COLON: 4ac1.

 -- Dado: token.FSTRING_END

     Valor de token usado para indicar o fim de um *note literal de
     f-string: 19a.

     A string do token contém as aspas de fechamento.

 -- Dado: token.TSTRING_START

     Valor de token usado para indicar o início de um literal de string
     template.

     A string de token inclui o prefixo e as aspas iniciais, mas nenhum
     conteúdo do literal.

     Adicionado na versão 3.14.

 -- Dado: token.TSTRING_MIDDLE

     Valor de token usado para texto literal dentro de um literal de
     string template, incluindo especificações de formato.

     Campos de substituição (ou seja, as partes não literais de
     t-strings) usam os mesmos tokens que outras expressões e são
     delimitados pelos tokens *note LBRACE: 4abe, *note RBRACE: 4abf,
     *note EXCLAMATION: 4ac0. e *note COLON: 4ac1.

     Adicionado na versão 3.14.

 -- Dado: token.TSTRING_END

     Valor de token usado para indicar o fim de um literal de string
     template.

     A string do token contém as aspas de fechamento.

     Adicionado na versão 3.14.

 -- Dado: token.ENDMARKER

     Valor de token que indica o fim da entrada.  Usado em *note regras
     de gramática de nível superior: 2429.

 -- 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(): 6f5. 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: 101.

Os seguintes tipos de token não são produzidos pelo módulo *note
tokenize: 101. 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: 4aba. regulares somente com o sinalizador *note
     PyCF_TYPE_COMMENTS: 4a6d.

 -- 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: 4aba.
     regulares somente com o sinalizador *note PyCF_TYPE_COMMENTS: 4a6d.

 -- Dado: token.SOFT_KEYWORD

     Valor de token indicando uma *note palavra reservada contextual:
     a03.

     O tokenizador nunca produz esse valor.  Para verificar uma palavra
     reservada contextual, passe uma string do token *note NAME: 2163.
     para *note keyword.issoftkeyword(): 4ac9.

 -- Dado: token.ERRORTOKEN

     Valor de token usado para indicar uma entrada errada.

     O módulo *note tokenize: 101. geralmente indica erros levantando
     exceções em vez de emitir este token.  Ele também pode emitir
     tokens como *note OP: 2135. ou *note NAME: 2163. com strings que
     são rejeitadas posteriormente pelo parser.
Os tokens restantes representam *note operadores: 2137. e *note
delimitadores: 2136. específicos.  (O módulo *note tokenize: 101. os
relata como *note OP: 2135.; consulte ‘exact_type’ na documentação *note
tokenize: 101. 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: 4aba, *note
NL: 4abb. e *note ENCODING: 4ac6.

Alterado na versão 3.7: Removido os tokens ‘AWAIT’ e ‘ASYNC’.  “async” e
“await” são agora tokenizados como tokens *note NAME: 2163.

Alterado na versão 3.8: Adicionados *note TYPE_COMMENT: 4ac8, *note
TYPE_IGNORE: 4ac7, *note COLONEQUAL: 4af5.  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(): 1c2. com
‘feature_version’ definido como 6 ou inferior).

Alterado na versão 3.12: Adicionado *note EXCLAMATION: 4ac0.

Alterado na versão 3.13: Removidos novamente os tokens ‘AWAIT’ e
‘ASYNC’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 2134. ou *note palavra reservada contextual:
a03.

 -- Função: keyword.iskeyword (s)

     Retorna ‘True’ se 's' for uma *note palavra reservada: 2134. do
     Python.

 -- Dado: keyword.kwlist

     Sequência contendo todas as *note palavras reservadas: 2134.
     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:
     a03. do Python.

     Adicionado na versão 3.9.

 -- Dado: keyword.softkwlist

     Sequência contendo todas as *note palavras reservadas contextuais:
     a03. 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.14/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: 101. 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: 2137. e *note delimitadores: 2136. e *note Ellipsis: 21c4.
são retornados usando o tipo de token genérico *note OP: 2135.  O tipo
exato pode ser determinado verificando a propriedade ‘exact_type’ na
*note tupla nomeada: 853. retornada de *note tokenize.tokenize(): 6f5.

     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(): 1c2.).
     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<12>.
* Exemplos: Exemplos<36>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/tokenize.py


File: python.info,  Node: Tokenizando entradas,  Next: Uso na linha de comando<12>,  Up: tokenize — Tokenizador para código-fonte Python

5.32.5.1 Tokenizando entradas
.............................

O ponto de entrada principal é um *note gerador: 1257.:

 -- Função: tokenize.tokenize (readline)

     O gerador *note tokenize(): 6f5. requer um argumento, 'readline',
     que deve ser um objeto chamável que fornece a mesma interface que o
     método *note io.IOBase.readline(): 257b. 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: 853. com os nomes dos campos: ‘tipo
     string início fim linha’.

     A *note tupla nomeada: 853. retornada tem uma propriedade adicional
     chamada ‘exact_type’ que contém o tipo exato do operador para
     tokens *note OP: 2135.  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(): 6f5. 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(): 6f5, o argumento 'readline' é um
     chamável que retorna uma única linha de entrada.  No entanto, *note
     generate_tokens(): 6f6. espera que 'readline' retorne um objeto str
     em vez de bytes.

     O resultado é um iterador produzindo tuplas nomeadas, exatamente
     como *note tokenize(): 6f5.  Ele não produz um token *note
     ENCODING: 4ac6.

Todas as constantes do módulo *note token: 100. também são exportadas de
*note tokenize: 101.

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: 4ac6, que
     é a primeira sequência de tokens gerada por *note tokenize(): 6f5.
     Se não houver nenhum token de codificação na entrada, ele retorna
     um str em vez disso.

*note tokenize(): 6f5. 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(): 2b82. é 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(): 6f5.

     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: 18e. 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(): 2b81. para abrir arquivos de código-fonte Python:
     ele usa *note detect_encoding(): 2b82. 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(): 2b82.

     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<12>,  Next: Exemplos<36>,  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: 101. 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<36>,  Prev: Uso na linha de comando<12>,  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: 4b04.:

     $ 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(): 6f6.:

     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(): 6f5.:

     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(): 4b0a.
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(): 116b.

 -- 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(): 4b0e. se detectar um recuo
     ambíguo.  Capturado e manipulado em *note check(): 4b0a.

 -- Função: tabnanny.process_tokens (tokens)

     Esta função é usada por *note check(): 4b0a. para processar os
     tokens gerados pelo módulo *note tokenize: 101.

Ver também
..........

Módulo *note tokenize: 101.

     Scanner léxico para código-fonte Python.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: b9. 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 Class::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/pyclbr.py


File: python.info,  Node: Objetos Function,  Next: Objetos Class,  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: 183. 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: 7e2.  Caso contrário, ‘False’.

          Adicionado na versão 3.10.


File: python.info,  Node: Objetos Class,  Prev: Objetos Function,  Up: pyclbr — Suporte a navegador de módulos do Python

5.32.7.2 Objetos Class
......................

 -- Classe: pyclbr.Class

     Instâncias da classe ‘Class’ descrevem classes definidas por
     instruções class.  Elas têm os mesmos atributos que *note
     Functions: 4b14. 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(): a23. são listadas como uma string com o nome
          da classe em vez de como objetos de ‘Class’.

      -- Atributo: methods

          Um *note dicionário: 183. que mapeia nomes de métodos para
          números de linha.  Isso pode ser derivado do dicionário *note
          children: 4b24. 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: b8. 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: 4b2a. 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: 4b2a. 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: 1216. 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(): 4ab.  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: 4b2b. e controla como o cache do bytecode
     gerado é invalidado em tempo de execução.  O padrão é *note
     PycInvalidationMode.CHECKED_HASH: 4b2c. se a variável de ambiente
     ‘SOURCE_DATE_EPOCH’ estiver configurada, caso contrário, o padrão é
     *note PycInvalidationMode.TIMESTAMP: 4b2d.

     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: 7b. 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: 7b. faz, por exemplo,
     permissões, semântica de gravação e movimentação, etc.  Também foi
     adicionada a ressalva de que *note FileExistsError: 1216. é
     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: 4b2c.

     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: 7f7. 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: 4b2c, 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<5>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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<5>,  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: 4b33.

Ver também
..........

Módulo *note compileall: 21.

     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: 1fed.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 1a86. para mais informações.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/compileall.py


File: python.info,  Node: Uso na linha de comando<13>,  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(): 4d4. 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: 7f7. 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(): 6e0.  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(): 4ab. porque o próprio interpretador
Python já fornece a opção: ‘python -O -m compileall’.

Da mesma forma, a função *note compile(): 4ab. respeita a configuração
*note sys.pycache_prefix: b92.  O cache do bytecode gerado somente será
útil se *note compile(): 4ab. for executado com o mesmo *note
sys.pycache_prefix: b92. (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<13>,  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: 117d.

     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(): 4ab.  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: 2ea.
     será levantada.

     'invalidation_mode' deve ser um membro de enum *note
     py_compile.PycInvalidationMode: 4b2b. 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: e3f.

     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:
     59a.

     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: 117d.

     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(): 4ab.  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: 4b2b. 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: e3f.

     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(): d0f.  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: b8.

     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: 3c. oferece suporte à análise de *note bytecode:
4a4. 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: 8fd.  Tais instruções são escondidas por padrão, mas podem
ser visualizadas passando ‘show_caches=True’ para qualquer utilidade do
*note dis: 3c.  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: 8fd. da instrução de pulo.

Como consequência, a presença de instruções *note CACHE: 8fd. é
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.

Alterado na versão 3.14: A opção de linha de comando *note -P: 207. e o
argumento ‘show_positions’ foram adicionados.

A opção de linha de comando *note -S: 208. foi adicionada.

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_BORROW         0 (alist)
                   CALL                     1
                   RETURN_VALUE

(O “2” é o número da linha).

* Menu:

* Interface de linha de comando: Interface de linha de comando<10>.
* 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.14/Lib/dis.py


File: python.info,  Node: Interface de linha de comando<10>,  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: 3c. pode ser invocado como um script na linha de
comando:

     python -m dis [-h] [-C] [-O] [-P] [-S] [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.

 -- Option: -P, --show-positions

     Mostra posições de instruções no código-fonte.

     Adicionado na versão 3.14.

 -- Option: -S, --specialized

     Mostra bytecode especializado.

     Adicionado na versão 3.14.

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<10>,  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: 203. 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,
          show_positions=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(): 4ab.).

     Esta é um invólucro de conveniência que encapsula muitas das
     funções listadas abaixo, principalmente a *note get_instructions():
     4e6, já que iterar sobre sobre uma instância de *note Bytecode:
     203. produz operações bytecode como instâncias de *note
     Instruction: 202.

     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(): 1125. vai mostrar um marcador de
     “instrução atual” sobre o opcode especificado.

     Se 'show_caches' for ‘True’, o *note dis(): 1125. vai exibir
     entradas de cache em linha usadas pelo interpretador para
     especializar o bytecode.

     Se 'adaptive' for ‘True’, o *note dis(): 1125. vai exibir bytecode
     especializado que pode ser diferente do bytecode original.

     Se 'show_offsets' for ‘True’, o *note dis(): 1125. vai incluir
     deslocamentos em instruções na saída.

     Se 'show_positions' for ‘True’, *note dis(): 1125. incluirá
     posições do código-fonte da instrução na saída.

      -- Método: classmethod from_traceback (tb, *, show_caches=False)

          Constrói uma instância de *note Bytecode: 203. 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(): 204, 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():
          1435.

     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'.

     Alterado na versão 3.13: Adicionado o parâmetro 'show_offsets'

     Alterado na versão 3.14: Foi adicionado o parâmetro
     'show_positions'.

Exemplo:

     >>> bytecode = dis.Bytecode(myfunc)
     >>> for instr in bytecode:
     ...     print(instr.opname)
     ...
     RESUME
     LOAD_GLOBAL
     LOAD_FAST_BORROW
     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: 3c. 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, show_offsets=False,
          show_positions=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: 4a5.  Strings são compiladas para objetos de código com a
     função embutida *note compile(): 4ab. 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'.

     Alterado na versão 3.13: Foi adicionado o parâmetro 'show_offsets'.

     Alterado na versão 3.14: Foi adicionado o parâmetro
     'show_positions'.

 -- Função: dis.distb (tb=None, *, file=None, show_caches=False,
          adaptive=False, show_offset=False, show_positions=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'.

     Alterado na versão 3.14: Foi adicionado o parâmetro
     'show_positions'.

 -- Função: dis.disassemble (code, lasti=-1, *, file=None,
          show_caches=False, adaptive=False, show_offsets=False,
          show_positions=False)
 -- Função: dis.disco (code, lasti=-1, *, file=None, show_caches=False,
          adaptive=False, show_offsets=False, show_positions=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. a localização do código-fonte da instrução.  Informações
          completas sobre a localização são exibidas se 'show_positions'
          for verdadeiro.  Caso contrário (o padrão), apenas o número da
          linha é exibido.

       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'.

     Alterado na versão 3.14: Foi adicionado o parâmetro
     'show_positions'.

 -- 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:
     202. 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():
     3c.

     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: 202. 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(): 34d. do *note
     objeto de código: 4e0. '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(): 34d. da PEP
     626(1) é usado ao invés dos atributos *note co_firstlineno: 2226. e
     *note co_lnotab: 32e. do *note objeto de código: 4e0.

     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(): 1127. 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(): 4e6. e a classe *note Bytecode: 203.
fornecem detalhes de instruções de bytecode como instâncias de *note
Instruction: 202.:

 -- 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: 4b62.

      -- 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: 4b61.

      -- 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:
          4b66.

      -- Dado: arg

          argumento numérico para a operação (se houver), caso contrário
          ‘None’

      -- Dado: oparg

          apelido para *note arg: 4b67.

      -- 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: 4b6b.

      -- 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: 1892. 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: NOT_TAKEN

     Código sem ação.  Usado pelo interpretador para registrar os
     eventos *note BRANCH_LEFT: 294. e *note BRANCH_RIGHT: 295. para
     *note sys.monitoring: e0.

     Adicionado na versão 3.14.

 -- Opcode: POP_ITER

     Remove o iterador do topo da pilha.

     Adicionado na versão 3.14.

 -- 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: 3c0.

 -- 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: dcd. ou um objeto
     *note corrotina: 6ae, 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.

     Alterado na versão 3.14: Com oparg :‘NB_SUBSCR’, implementa
     subscrito binário (substitui o opcode ‘BINARY_SUBSCR’)

 -- 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()
          values = 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: 48e8, 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: c94.  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: 1cc5,
     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():
     711. ou *note close(): 19a4. através do quadro atual.  Se
     ‘STACK[-1]’ for uma instância de *note StopIteration: de9, 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.

'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: 4b84, *note LIST_APPEND: 4b85. e *note
MAP_ADD: c95, 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: YIELD_VALUE

     Gera ‘STACK.pop()’ a partir de um *note gerador: 1257.

     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: f45. 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 ‘f_lasti`’ 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: 186.

     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_COMMON_CONSTANT

     Envia uma constante comum para a pilha.  O interpretador contém uma
     lista codificada de constantes suportadas por esta instrução.
     Usado pela instrução *note assert: b56. para carregar *note
     AssertionError: 8ad.

     Adicionado na versão 3.14.

 -- 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: GET_LEN

     Executa ‘STACK.append(len(STACK[-1]))’.  Usado em instruções *note
     match: a04. 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:
     abd. (ou, de forma mais técnica: se tiver o sinalizador *note
     Py_TPFLAGS_MAPPING: 1b47. definido no seu *note tp_flags: 1b60.),
     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:
     13c0. e 'não' for uma instância de *note str: 169./*note bytes:
     192./*note bytearray: 342. (ou, de forma mais técnica: se tiver o
     sinalizador *note Py_TPFLAGS_SEQUENCE: 1b48. definido no seu *note
     tp_flags: 1b60.), 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: 608.
     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: 2225. do *note objeto de código: 4e0.  O
     compilador tenta usar *note STORE_FAST: 19a1. ou *note
     STORE_GLOBAL: 4b8e. se possível.

 -- Opcode: DELETE_NAME (namei)

     Implementa ‘del name’, onde 'namei' é o índice no atributo *note
     co_names: 2225. do *note objeto de código: 4e0.

 -- 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: 2225. do *note
     objeto de código: 4e0.

 -- Opcode: DELETE_ATTR (namei)

     Implementa:

          obj = STACK.pop()
          del obj.name

     onde 'namei' é o índice do nome no *note co_names: 2225. do *note
     objeto de código: 4e0.

 -- Opcode: STORE_GLOBAL (namei)

     Funciona como o *note STORE_NAME: 4b8d, mas o nome é armazenado com
     um nome global.

 -- Opcode: DELETE_GLOBAL (namei)

     Funciona como o *note DELETE_NAME: 4b8f, mas deleta um nome global.

 -- Opcode: LOAD_CONST (consti)

     Põe ‘co_consts[consti]’ no topo da pilha.

 -- Opcode: LOAD_SMALL_INT (i)

     Coloca o inteiro ‘i’ na pilha.  ‘i’ deve estar em ‘range(256)’

     Adicionado na versão 3.14.

 -- 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: 701. e *note LOAD_FROM_DICT_OR_GLOBALS:
     702.

     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: 1998.  Isso é usado para carregar
     variáveis globais em *note escopos de anotação: 4a5. dentro dos
     corpos de classe.

     Adicionado na versão 3.12.

 -- Opcode: BUILD_TEMPLATE

     Constrói uma nova instância *note Template: 16a. a partir de uma
     tupla de strings e uma tupla de interpolações e envia o objeto
     resultante para a pilha:

          interpolations = STACK.pop()
          strings = STACK.pop()
          STACK.append(_build_template(strings, interpolations))

     Adicionado na versão 3.14.

 -- Opcode: BUILD_INTERPOLATION (format)

     Constrói uma nova instância *note Interpolation: 16b. a partir de
     um valor e sua expressão de origem e envia o objeto resultante para
     a pilha.

     Se nenhuma especificação de conversão ou formato estiver presente,
     ‘format’ será definido como ‘2’.

     If the low bit of ‘format’ is set, it indicates that the
     interpolation contains a format specification.

     If ‘format >> 2’ is non-zero, it indicates that the interpolation
     contains a conversion.  The value of ‘format >> 2’ is the
     conversion type (‘0’ for no conversion, ‘1’ for ‘!s’, ‘2’ for ‘!r’,
     and ‘3’ for ‘!a’):

          conversion = format >> 2
          if format & 1:
              format_spec = STACK.pop()
          else:
              format_spec = None
          expression = STACK.pop()
          value = STACK.pop()
          STACK.append(_build_interpolation(value, expression, conversion, format_spec))

     Adicionado na versão 3.14.

 -- 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: 4b95, but creates a list.

 -- Opcode: BUILD_SET (count)

     Works as *note BUILD_TUPLE: 4b95, 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_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: 4b9a. 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: 90a. or *note CALL_KW:
     36f. 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(): 1a6, 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: 6f9, 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: 6f9, 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(): 1a6. (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: 3c0.

 -- 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__(): ac7.  The module object is pushed onto the
     stack.  The current namespace is not affected: for a proper import
     statement, a subsequent *note STORE_FAST: 19a1. 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: 19a1. 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: 3c0.

 -- 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: 3c0.

 -- 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: 4c2.  Call its *note __next__():
     14c9. 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: 1724.

 -- Opcode: LOAD_FAST_BORROW (var_num)

     Pushes a borrowed reference to the local ‘co_varnames[var_num]’
     onto the stack.

     Adicionado na versão 3.14.

 -- 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_BORROW_LOAD_FAST_BORROW (var_nums)

     Pushes borrowed references to ‘co_varnames[var_nums >> 4]’ and
     ‘co_varnames[var_nums & 15]’ onto the stack.

     Adicionado na versão 3.14.

 -- Opcode: LOAD_FAST_CHECK (var_num)

     Pushes a reference to the local ‘co_varnames[var_num]’ onto the
     stack, raising an *note UnboundLocalError: 1724. 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: 2221.

 -- 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: 4ba3.  This is used for loading *note
     closure variables: 17f7. in class bodies (which previously used
     ‘LOAD_CLASSDEREF’) and in *note annotation scopes: 4a5. 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: 2221.

 -- Opcode: DELETE_DEREF (i)

     Empties the cell contained in slot ‘i’ of the “fast locals”
     storage.  Used by the *note del: 1a4f. 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: 2221.

 -- Opcode: COPY_FREE_VARS (n)

     Copia as ‘n’ *note variáveis livres (de clausura): 17f7. 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: 36f.

 -- 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: 608. 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 ‘LOAD_METHOD’ 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: 4ba7.

 -- 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(): 689. 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(): 169. on 'value'

        * ‘oparg == 2’: call *note repr(): 1c1. on 'value'

        * ‘oparg == 3’: call *note ascii(): 15d7. 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’ operand 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: de9, 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: 598. 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: 3c. 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: 598. 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: 480.
                                             
                                             
     ‘INTRINSIC_PARAMSPEC’                   Cria um *note typing.ParamSpec: 481.
                                             
                                             
     ‘INTRINSIC_TYPEVARTUPLE’                Cria um
                                             *note typing.TypeVarTuple: 482.
                                             
                                             
     ‘INTRINSIC_SUBSCRIPT_GENERIC’           Returns *note typing.Generic: 18ad.
                                             subscripted with the argument
                                             
                                             
     ‘INTRINSIC_TYPEALIAS’                   Creates a
                                             *note typing.TypeAliasType: 2ad.;
                                             used in the *note type: 661.
                                             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: 4cc. to raise
                                                  from a ‘try-except*’.
                                                  
                                                  
     ‘INTRINSIC_TYPEVAR_WITH_BOUND’               Creates a *note typing.TypeVar: 480.
                                                  with a bound.
                                                  
                                                  
     ‘INTRINSIC_TYPEVAR_WITH_CONSTRAINTS’         Creates a *note typing.TypeVar: 480.
                                                  with constraints.
                                                  
                                                  
     ‘INTRINSIC_SET_FUNCTION_TYPE_PARAMS’         Sets the ‘__type_params__’ attribute
                                                  of a function.
                                                  

     Adicionado na versão 3.12.

 -- Opcode: LOAD_SPECIAL

     Performs special method lookup on ‘STACK[-1]’.  If
     ‘type(STACK[-1]).__xxx__’ is a method, leave
     ‘type(STACK[-1]).__xxx__; STACK[-1]’ on the stack.  If
     ‘type(STACK[-1]).__xxx__’ is not a method, leave
     ‘STACK[-1].__xxx__; NULL’ on the stack.

     Adicionado na versão 3.14.

'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: 186. and *note async with: 185.
     constructs, which push the return value of the context manager’s
     *note __enter__(): 7d9. or *note __aenter__(): 22b2. 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: LOAD_CONST_IMMORTAL (consti)

     Funciona como *note LOAD_CONST: 4b93, mas é mais eficiente para
     objetos imortais.

 -- Opcode: JUMP
 -- Opcode: JUMP_NO_INTERRUPT

     Undirected relative jump instructions which are replaced by their
     directed (forward/backward) counterparts by the assembler.

 -- Opcode: JUMP_IF_TRUE
 -- Opcode: JUMP_IF_FALSE

     Conditional jumps which do not impact the stack.  Replaced by the
     sequence ‘COPY 1’, ‘TO_BOOL’, ‘POP_JUMP_IF_TRUE/FALSE’.

 -- 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.


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:
     17f7.  ‘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: 4bb7.

 -- 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: ab, 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: ab.; usuários comuns do módulo *note
pickle: ab. provavelmente não acharão o módulo *note pickletools: ac.
relevante.

* Menu:

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

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/pickletools.py


File: python.info,  Node: Uso na linha de comando<14>,  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 de linha de comando: Opções de linha de comando<5>.


File: python.info,  Node: Opções de linha de comando<5>,  Up: Uso na linha de comando<14>

5.32.11.2 Opções de 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 com pickle for especificado,
     exibe o preâmbulo fornecido antes de cada desmontagem.

 -- Option: pickle_file

     Um arquivo serializado com pickle para ler, ou ‘-’ para indicar
     leitura da entrada padrão.


File: python.info,  Node: Interface programática<2>,  Prev: Uso na linha de comando<14>,  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: 4c2. 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: 66. usa isso na implementação da função *note
getpass(): 66.

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.

Alterado na versão 3.3: As operações neste módulo agora levantam *note
OSError: 2bf. onde *note IOError: 1249. 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: 2bf. 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: 1b5d. ‘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: 2bf. é 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: 2bf. é 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: 2ee2.; para binário, deve ser *note os.O_BINARY:
     2ed3.

 -- 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: 2ed5, *note os.O_RDONLY: 2ed1,
     *note os.O_TEXT: 2ee2. e *note os.O_NOINHERIT: 2edd.  O descritor
     de arquivo retornado pode ser usado como parâmetro para *note
     os.fdopen(): 2217. para criar um objeto de arquivo.

     O descritor de arquivo é herdável por padrão.  Passe o sinalizador
     *note os.O_NOINHERIT: 2edd. para torná-lo não herdável.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 2bf. se 'fd' não for reconhecido.

     Levanta um *note evento de auditoria: 1b5d. ‘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 ()

     Returns a nonzero value if a keypress is waiting to be read.
     Otherwise, return 0.

 -- Função: msvcrt.getch ()

     Read a keypress and return the resulting character as a byte
     string.  Nothing is echoed to the console.  This call will block if
     a keypress is not already available, but will not wait for ‘Enter’
     to be pressed.  If the pressed key was a special function key, this
     will return ‘'\000'’ or ‘'\xe0'’; the next call will return the
     keycode.  The ‘Control’-‘C’ keypress cannot be read with this
     function.

 -- Função: msvcrt.getwch ()

     Variante com caractere largo de *note getch(): 4bde, retornando um
     valor Unicode.

 -- Função: msvcrt.getche ()

     Similar to *note getch(): 4bde, but the keypress will be echoed if
     it represents a printable character.

 -- Função: msvcrt.getwche ()

     Variante com caractere largo de *note getche(): 4bdf, 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(): 4be0, 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(): 4bde.
     ou *note getche(): 4bdf.

 -- Função: msvcrt.ungetwch (unicode_char)

     Variante com caractere largo de *note ungetch(): 4be1, 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: 2bf.

 -- Função: msvcrt.set_error_mode (mode)

     Changes the location where the C runtime writes an error message
     for an error that might end the program.  'mode' must be one of the
     ‘OUT_*’ constants listed below or *note REPORT_ERRMODE: 4be7.
     Returns the old setting or -1 if an error occurs.  Only available
     in *note debug build of Python: 503.

 -- Dado: msvcrt.OUT_TO_DEFAULT

     Error sink is determined by the app’s type.  Only available in
     *note debug build of Python: 503.

 -- Dado: msvcrt.OUT_TO_STDERR

     Error sink is a standard error.  Only available in *note debug
     build of Python: 503.

 -- Dado: msvcrt.OUT_TO_MSGBOX

     Error sink is a message box.  Only available in *note debug build
     of Python: 503.

 -- Dado: msvcrt.REPORT_ERRMODE

     Report the current error mode value.  Only available in *note debug
     build of Python: 503.

 -- Função: msvcrt.CrtSetReportMode (type, mode)

     Specifies the destination or destinations for a specific report
     type generated by ‘_CrtDbgReport()’ in the MS VC++ runtime.  'type'
     must be one of the ‘CRT_*’ constants listed below.  'mode' must be
     one of the ‘CRTDBG_*’ constants listed below.  Only available in
     *note debug build of Python: 503.

 -- Função: msvcrt.CrtSetReportFile (type, file)

     After you use *note CrtSetReportMode(): 4beb. to specify *note
     CRTDBG_MODE_FILE: 4bed, you can specify the file handle to receive
     the message text.  'type' must be one of the ‘CRT_*’ constants
     listed below.  'file' should be the file handle your want
     specified.  Only available in *note debug build of Python: 503.

 -- Dado: msvcrt.CRT_WARN

     Warnings, messages, and information that doesn’t need immediate
     attention.

 -- Dado: msvcrt.CRT_ERROR

     Errors, unrecoverable problems, and issues that require immediate
     attention.

 -- Dado: msvcrt.CRT_ASSERT

     Assertion failures.

 -- Dado: msvcrt.CRTDBG_MODE_DEBUG

     Writes the message to the debugger’s output window.

 -- Dado: msvcrt.CRTDBG_MODE_FILE

     Writes the message to a user-supplied file handle.  *note
     CrtSetReportFile(): 4bec. should be called to define the specific
     file or stream to use as the destination.

 -- Dado: msvcrt.CRTDBG_MODE_WNDW

     Creates a message box to display the message along with the
     ‘Abort’, ‘Retry’, and ‘Ignore’ buttons.

 -- Dado: msvcrt.CRTDBG_REPORT_MODE

     Returns current 'mode' for the specified 'type'.

 -- 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: 4bf7. é usado para garantir que os identificadores sejam
fechados corretamente, mesmo que o programador não os feche
explicitamente.

Alterado na versão 3.3: Várias funções neste módulo costumavam levantar
um *note WindowsError: 124b. , que agora é um apelido de *note OSError:
2bf.

* Menu:

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


File: python.info,  Node: Funções<14>,  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(): 4bfc.), 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: 4bf7.

     '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: 2bf. será levantada.

     Levanta um *note evento de auditoria: 1b5d.
     ‘winreg.ConnectRegistry’ com os argumentos ‘computer_name’, ‘key’.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- Função: winreg.CreateKey (key, sub_key)

     Cria ou abre a chave especificada, retornando um *note objeto
     identificador: 4bf7.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4bfd.

     '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: 2bf. será levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.CreateKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.OpenKey/result’
     com o argumento ‘key’.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- Função: winreg.CreateKeyEx (key, sub_key, reserved=0,
          access=KEY_WRITE)

     Cria ou abre a chave especificada, retornando um *note objeto
     identificador: 4bf7.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4bfd.

     '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: 4bfe.  Consulte *note Direitos de acesso: 4bff.
     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: 2bf. será levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.CreateKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.OpenKey/result’
     com o argumento ‘key’.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- Função: winreg.DeleteKey (key, sub_key)

     Exclui a chave especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4bfd.

     '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: 2bf. será levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.DeleteKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- 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_*: 4bfd.

     '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: 4c00.  No Windows de 32 bits, as constantes
     WOW64 são ignoradas.  Consulte *note Direitos de acesso: 4bff. 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: 2bf. será levantada.

     Em versões do Windows sem suporte, *note NotImplementedError: 368.
     é levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.DeleteKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- 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_*: 4bfd.

     'value' é uma string que identifica o valor a ser removido.

     Levanta um *note evento de auditoria: 1b5d. ‘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_*: 4bfd.

     '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: 2bf. seja levantada, indicando que não há mais valores
     disponíveis.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.EnumKey’ com os
     argumentos ‘key’, ‘index’.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- 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_*: 4bfd.

     '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: 2bf. 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(): 1a36.)
                 

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.EnumValue’ com
     os argumentos ‘key’, ‘index’.

     Alterado na versão 3.3: Veja *note acima: 4bf8.

 -- 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: 4c01.:

          >>> ExpandEnvironmentStrings('%windir%')
          'C:\\Windows'

     Levanta um *note evento de auditoria: 1b5d.
     ‘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_*: 4bfd.

     Não é necessário chamar *note FlushKey(): 4c02. 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(): 4bfb, o método *note FlushKey():
     4c02. retorna somente quando todos os dados foram gravados no
     registro.  Uma aplicação só deve chamar *note FlushKey(): 4c02. 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(): 4c02.
          é 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():
     45f4. ou uma das constantes *note HKEY_USERS: 4c03. ou *note
     HKEY_LOCAL_MACHINE: 4c04.

     '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(): 4600.  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(): 45fa. 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(): 45f4, então o caminho especificado em
     'file_name' será relativo ao computador remoto.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 4bf7.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4bfd.

     '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: 4c06.  Consulte *note Direitos de acesso: 4bff.
     para outros valores permitidos.

     O resultado é um novo identificador para a chave especificada.

     Se a função falhar, *note OSError: 2bf. será levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘winreg.OpenKey’ com os
     argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 4bf8.

 -- 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_*: 4bfd.

     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: 1b5d. ‘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_*: 4bfd.

     '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():
     4601. 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(): 45ff. se possível.

     Levanta um *note evento de auditoria: 1b5d. ‘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_*: 4bfd.

     '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(): 1a36.)
                 

     Levanta um *note evento de auditoria: 1b5d. ‘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_*: 4bfd.

     '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(): 45fa.

     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: 1b5d. ‘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_*: 4bfd.

     '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: 4c07, o que significa que apenas strings são
     suportadas.  Use a função *note SetValueEx(): 1a36. 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: 4c08.

     Levanta um *note evento de auditoria: 1b5d. ‘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_*: 4bfd.

     '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: 4c09. 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: 4c08.

     Para abrir a chave, use os métodos *note CreateKey(): 45f5. ou
     *note OpenKey(): 45fb.

     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: 1b5d. ‘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_*: 4bfd.

     Geralmente levantará *note NotImplementedError: 368. 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: 1b5d.
     ‘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_*: 4bfd.

     Geralmente levantará *note NotImplementedError: 368. 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: 1b5d.
     ‘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_*: 4bfd.

     Retorna ‘True’ se a reflexão estiver desabilitada.

     Geralmente levantará *note NotImplementedError: 368. se executado
     em um sistema operacional de 32 bits.

     Levanta um *note evento de auditoria: 1b5d.
     ‘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<14>,  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: 11c.

* 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: 4c14, *note KEY_SET_VALUE: 4c08, *note
     KEY_CREATE_SUB_KEY: 4c15, *note KEY_ENUMERATE_SUB_KEYS: 4c16, *note
     KEY_NOTIFY: 4c17. e *note KEY_CREATE_LINK: 4c18.

 -- Dado: winreg.KEY_WRITE

     Combina os direitos de acesso STANDARD_RIGHTS_WRITE, *note
     KEY_SET_VALUE: 4c08. e *note KEY_CREATE_SUB_KEY: 4c15.

 -- Dado: winreg.KEY_READ

     Combina os valores STANDARD_RIGHTS_READ, *note KEY_QUERY_VALUE:
     4c14, *note KEY_ENUMERATE_SUB_KEYS: 4c16. e *note KEY_NOTIFY: 4c17.

 -- Dado: winreg.KEY_EXECUTE

     Equivalente a *note KEY_READ: 4c06.

 -- 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: 4c1f.

 -- 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: ef3.

     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(): 4bfc. no objeto ou a função
*note CloseKey(): 4bfb.

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__(): 14d1. –
portanto

     if handle:
         print("Sim")

vai exibir ‘Sim’ se o identificador for válido no momento (não foi
fechado ou desanexado).

O objeto também oferece suporte à semântica de comparação, portanto, os
objetos identificador serão comparados como verdadeiros se ambos fizerem
referência ao mesmo valor de identificador subjacente do Windows.

Objetos identificador podem ser convertidos em um inteiro (por exemplo,
usando a função embutida *note int(): 19b.), caso em que o valor do
identificador do Windows subjacente é retornado.  Você também pode usar
o método *note Detach(): 45fc. 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: 1b5d. ‘winreg.PyHKEY.Detach’
     com o argumento ‘key’.

 -- Método: PyHKEY.__enter__ ()
 -- Método: PyHKEY.__exit__ (*exc_info)

     O objeto HKEY implementa *note __enter__(): 7d9. e *note
     __exit__(): 14fc. e, portanto, oferece suporte ao protocolo de
     contexto para a instrução *note with: 186.:

          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: 186.


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: 11d. fornece acesso ao mecanismo básico de
reprodução de som fornecido pelas plataformas Windows.  Inclui funções e
várias constantes.

 -- 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: 243. é
     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: 193.
     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: 243. 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: 243. será levantada.

 -- Dado: winsound.SND_FILENAME

     O parâmetro 'sound' é o nome de um arquivo WAV. Não use com *note
     SND_ALIAS: 4c2f.

 -- 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: 4c30. também seja
     especificado.  Se nenhum som padrão for registrado, levanta *note
     RuntimeError: 243.  Não use com *note SND_FILENAME: 4c2e.

     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(): ef7.        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: 4c32.
     também deve ser usado para evitar bloqueio.  Não pode ser usado com
     *note SND_MEMORY: 4c33.

 -- Dado: winsound.SND_MEMORY

     O parâmetro 'sound' para *note PlaySound(): ef7. é uma imagem de
     memória de um arquivo WAV, como um *note objeto bytes ou similar:
     193.

          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: 4c32.
          levantará *note RuntimeError: 243.

 -- 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: 4c2f. para especificar um apelido de som definido
     pela aplicação.

 -- Dado: winsound.SND_SENTRY

     Aciona um evento SoundSentry quando o som é reproduzido.

     Adicionado na versão 3.14.

 -- Dado: winsound.SND_SYNC

     O som é reproduzido de forma sincronizada.  Este é o comportamento
     padrão.

     Adicionado na versão 3.14.

 -- Dado: winsound.SND_SYSTEM

     Atribui o som à sessão de áudio para sons de notificação do
     sistema.

     Adicionado na versão 3.14.

 -- 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’.

 -- Dado: winsound.MB_ICONERROR

     Reproduz o som ‘SystemHand’.

     Adicionado na versão 3.14.

 -- Dado: winsound.MB_ICONINFORMATION

     Reproduz o som ‘SystemDefault’.

     Adicionado na versão 3.14.

 -- Dado: winsound.MB_ICONSTOP

     Reproduz o som ‘SystemHand’.

     Adicionado na versão 3.14.

 -- Dado: winsound.MB_ICONWARNING

     Reproduz o som ‘SystemExclamation’.

     Adicionado na versão 3.14.


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: ebc. 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: c9. 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: d1f. (the default), the parsing of comments in the
     given string will be disabled (setting the *note commenters: 4c4a.
     attribute of the *note shlex: ebc. 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: 754.

 -- 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(): 753.

          >>> 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(): 57b.).

     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(): 57b. 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(): d73. 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(): 57b. 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():
     753.:

          >>> 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: c9. module defines the following class:

 -- Classe: shlex.shlex (instream=None, infile=None, posix=False,
          punctuation_chars=False)

     A *note shlex: ebc. 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(): 1f21. and *note
     readline(): 1f5b. 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: 4c4b. 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: ebc. instance will operate in
     compatibility mode.  When operating in POSIX mode, *note shlex:
     ebc. 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: 4c4c. attribute that appear in
     'punctuation_chars' will be removed from *note wordchars: 4c4c.
     See *note Improved Compatibility with Shells: ebd. for more
     information.  'punctuation_chars' can be set only upon *note shlex:
     ebc. 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: 26.

     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.14/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: ebc. instance has the following methods:

 -- Método: shlex.get_token ()

     Return a token.  If tokens have been stacked using *note
     push_token(): 4c50, pop a token off the stack.  Otherwise, read one
     from the input stream.  If reading encounters an immediate
     end-of-file, *note eof: 4c51. 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: ebc. detects a source request (see *note source:
     4c54. 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():
     314. 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(): 500. method of the sourced
     input stream when it returns EOF.

     For more explicit control of source stacking, use the *note
     push_source(): 4c55. and *note pop_source(): 4c56. 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(): 4c53. 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: c9. users to
     generate error messages in the standard, parseable format
     understood by Emacs and other Unix tools.

Instances of *note shlex: ebc. 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: 1c6d. 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: 4c58. 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: 4c5b. that will interpret escape
     characters defined in *note escape: 4c5a.  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:
     ebc, getting tokens in a similar way to shell arguments.  When used
     in combination with *note punctuation_chars: 1c6d, tokens will be
     split on whitespace in addition to those characters.

     Alterado na versão 3.8: The *note punctuation_chars: 1c6d.
     attribute was made compatible with the *note whitespace_split:
     4c58. 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: ebc. 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(): 500. 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: ebc.
     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: ebc. 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: 4c58. 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: ebc. 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: ebc. 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: 4c5c. (e.g.  ‘"'"’)  preserve the literal value of
     all characters within the quotes;

   * Enclosing characters in quotes which are part of *note
     escapedquotes: 4c5c. (e.g.  ‘'"'’)  preserves the literal value of
     all characters within the quotes, with the exception of the
     characters mentioned in *note escape: 4c5a.  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: 87a. 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: c9. 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:
     4c4c. 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: 4c58.
     when using *note punctuation_chars: 1c6d, which will negate *note
     wordchars: 4c4c. entirely.

For best effect, ‘punctuation_chars’ should be set in conjunction with
‘posix=True’.  (Note that ‘posix=False’ is the default for *note shlex:
ebc.)


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: 1fed.: Unix.

'Não importe este módulo diretamente.'  Em vez disso, importe o módulo
*note os: a5, que fornece uma versão 'portátil' dessa interface.  No
Unix, o módulo *note os: a5. fornece um superconjunto da interface *note
posix: b2.  Em sistemas operacionais não Unix, o módulo *note posix: b2.
não está disponível, mas um subconjunto está sempre disponível na
interface *note os: a5.  Uma vez que *note os: a5. é importado, seu uso
'não' causa penalidade de desempenho em comparação com *note posix: b2.
Além disso, *note os: a5. fornece algumas funcionalidades adicionais,
como chamar automaticamente *note putenv(): 25a. 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: 2bf.

* 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: a5,
*note posix: b2. 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(): 2ea7, *note popen(): 318. ou *note
     system(): 164c.  Se você precisar alterar o ambiente, passe
     ‘environ’ para *note execve(): 12f5. ou adicione atribuições de
     variável e instruções de exportação para a string de comando para
     *note system(): 164c. ou *note popen(): 318.

     Alterado na versão 3.2: No Unix, chaves e valores são bytes.

          Nota: O módulo *note os: a5. 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: 258. tornará este dicionário obsoleto.  O uso do
          módulo *note os: a5. é recomendado sobre o acesso direto ao
          módulo *note posix: b2.


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: 1fed.: 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: 5dd. é 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: 6a.

     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: 1fed.: 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(): 35da. ou *note getgrgid(): f16.)

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: 5dd. é levantada se a entrada
     solicitada não puder ser encontrada.

     Alterado na versão 3.10: *note TypeError: 198. é 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: 5dd. é 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: b7.

     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: 1fed.: 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:
13bf, 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:
     e7.

 -- 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(): 192f.  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(): 4c7d.  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: 106.

     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(): 192f. e
uma instrução *note try: 8ed. … *note finally: 1b0. 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: 106. define funções para colocar o tty nos modos de
cbreak e não tratados (raw).

*note Disponibilidade: 1fed.: Unix.

Por requerer o módulo *note termios: e7, ele funcionará apenas no Unix.

O módulo *note tty: 106. 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(): 192f, 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(): 192f, 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(): 1931. 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: 4c78, e é passado para
     *note termios.tcsetattr(): 19a8.  O retorna valor de *note
     termios.tcgetattr(): 192f. é 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: 4c78, e é passado
     para *note termios.tcsetattr(): 19a8.  O retorna valor de *note
     termios.tcgetattr(): 192f. é 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: e7.

     Interface baixo nível para controle de terminal.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: b6. 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: 1fed.: 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: b6. 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: 111.

 -- Função: pty.openpty ()

     Abre um novo par de pseudoterminais, usando *note os.openpty():
     2ee8, 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(): f8e. no
     processo filho.

     *note os.waitstatus_to_exitcode(): b0d. pode ser usado para
     converter o status de saída em um código de saída.

     Levanta um *note evento de auditoria: 1b5d. ‘pty.spawn’ com o
     argumento ‘argv’.

     Alterado na versão 3.4: *note spawn(): 1178. agora retorna o valor
     de status de *note os.waitpid(): f8e. no processo filho.

* Menu:

* Exemplo: Exemplo<16>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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: 1fed.: 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:
4ff, como o próprio ‘sys.stdin’, que fornece um *note fileno(): 2b6d.
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: 1249, mas agora levantam um *note OSError: 2bf.

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(): bf4.

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: 5d.
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’.

Alterado na versão 3.14: No Linux >= 6.1, o módulo ‘fcntl’ expõe o
‘F_DUPFD_QUERY’ para consultar um descritor de arquivo apontando para o
mesmo arquivo.

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(): 2b6d. 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: 5d, usando os mesmos nomes usados nos arquivos de cabeçalho
     C relevantes.  O argumento 'arg' pode ser um valor inteiro, um
     *note objeto bytes ou similar: 193. 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 é um objeto bytes ou similar, ele representa uma
     estrutura binária, por exemplo, criada por *note struct.pack():
     1472.  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: 192.  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: 2bf. é
     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: 1b5d. ‘fcntl.fcntl’ com os
     argumentos ‘fd’, ‘cmd’, ‘arg’.

     Alterado na versão 3.14: Adicione suporte a *note objetos bytes ou
     similares: 193. arbitrários, não apenas *note bytes: 192.

 -- Função: fcntl.ioctl (fd, request, arg=0, mutate_flag=True, /)

     Esta função é idêntica à função *note fcntl(): 17bb, 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: e7, 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: 193. 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(): 17bb.

     Se 'arg' oferece suporte à interface de buffer de leitura e escrita
     (como *note bytearray: 342.) 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(): 1669. e copiado
     de volta para o buffer fornecido.

     Se a chamada a ‘ioctl()’ falhar, uma exceção *note OSError: 2bf. é
     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: 1b5d. ‘fcntl.ioctl’ com os
     argumentos ‘fd’, ‘request’, ‘arg’.

     Alterado na versão 3.14: A GIL é sempre liberada durante uma
     chamada de sistema.  Chamadas de sistema que falham com EINTR são
     repetidas automaticamente.

 -- 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(): 2b6d.
     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: 2bf. será
     levantada.

     Levanta um *note evento de auditoria: 1b5d. ‘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(): 17bb.  'fd' é o descritor de arquivo (objetos
     arquivo que fornecem um método *note fileno(): 2b6d. 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: 2bf. será levantada e terá um atributo 'errno'
     definido como *note EACCES: 259f. ou *note EAGAIN: 2590.
     (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(): 1488, especificamente:

        * ‘0’ – relativo ao início do arquivo (*note os.SEEK_SET: 1489.)

        * ‘1’ – relativo à posição atual do buffer (*note os.SEEK_CUR:
          148a.)

        * ‘2’ – relativo ao fim do arquivo (*note os.SEEK_END: 148b.)

     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: 1b5d. ‘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: 192.  O layout da estrutura da variável 'lockdata' depende
do sistema — portanto, usar a chamada *note flock(): 45ec. pode ser
melhor.

Ver também
..........

Módulo *note os: a5.

     Se os sinalizadores de trava *note O_SHLOCK: 1620. e *note
     O_EXLOCK: 1621. estiverem presentes no módulo *note os: a5.
     (somente no BSD), a função *note os.open(): f86. fornece uma
     alternativa às funções *note lockf(): 15dd. e *note flock(): 45ec.

   ---------- 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: 1fed.: 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: 2bf. é levantada em caso de falha de chamada
de sistema.

 -- Exceção: resource.error

     Um apelido descontinuado de *note OSError: 2bf.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 2bf.

* 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():
174f. 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: 2ea. se um recurso
     inválido for especificado, ou *note error: 4c92. se a chamada do
     sistema subjacente falhar inesperadamente.

 -- Função: resource.setrlimit (resource, limits)

     Sets new limits of consumption of 'resource'.  The 'limits'
     argument must be a tuple ‘(soft, hard)’ of two integers describing
     the new limits.  A value of *note RLIM_INFINITY: 174e. can be used
     to request a limit that is unlimited.

     Raises *note ValueError: 2ea. if an invalid resource is specified,
     if the new soft limit exceeds the hard limit, or if a process tries
     to raise its hard limit.  Specifying a limit of *note
     RLIM_INFINITY: 174e. when the hard or system limit for that
     resource is not unlimited will result in a *note ValueError: 2ea.
     A process with the effective UID of super-user can request any
     valid limit value, including unlimited, but *note ValueError: 2ea.
     will still be raised if the requested limit exceeds the system
     imposed limit.

     ‘setrlimit’ também pode levantar *note error: 4c92. se a chamada do
     sistema subjacente falhar.

     VxWorks only supports setting *note RLIMIT_NOFILE: 4c94.

     Levanta um *note evento de auditoria: 1b5d. ‘resource.setrlimit’
     com os argumentos ‘resource’, ‘limits’.

 -- Função: resource.prlimit (pid, resource[, limits])

     Combina *note setrlimit(): 174f. e *note getrlimit(): 174d. 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(): 174f, 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: 1251. quando 'pid' não pode ser
     encontrado e *note PermissionError: f32. quando o usuário não tem
     ‘CAP_SYS_RESOURCE’ para o processo.

     Levanta um *note evento de auditoria: 1b5d. ‘resource.prlimit’ com
     os argumentos ‘pid’, ‘resource’, ‘limits’.

     *note Disponibilidade: 1fed.: 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(): 174f. e *note getrlimit(): 174d. 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 ‘SIGXCPU’ é enviado ao
     processo.  (Consulte a documentação do módulo *note signal: cb.
     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: 4c94.

 -- Dado: resource.RLIMIT_MEMLOCK

     O espaço máximo de endereço que pode ser travado na memória.

 -- Dado: resource.RLIMIT_VMEM

     The largest area of mapped memory which the process may occupy.
     Usually an alias of *note RLIMIT_AS: 4c9e.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: Linux >= 2.6.12.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_RTPRIO

     O teto da prioridade em tempo real.

     *note Disponibilidade: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 1fed.: 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: 2ea. se um parâmetro
     'who' inválido for especificado.  Também pode levantar uma exceção
     *note error: 4c92. 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(): 1622. para especificar quais informações de processos devem
ser fornecidas.

 -- Dado: resource.RUSAGE_SELF

     Passeapara *note getrusage(): 1622. 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(): 1622. para solicitar recursos
     consumidos por processos filhos do processo de chamada que foram
     encerrados e aguardados.

 -- Dado: resource.RUSAGE_BOTH

     Passa para *note getrusage(): 1622. 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(): 1622. 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: 1fed.: 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: 8d. como *note
SysLogHandler: 861.

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: 4ca8,
     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(): 755. é usado.

     Se *note openlog(): 755. não foi chamado antes da chamada para
     *note syslog(): e2, *note openlog(): 755. será chamado sem
     argumentos.

     Levanta um *note evento de auditoria: 1b5d. ‘syslog.syslog’ com os
     argumentos ‘priority’, ‘message’.

     Alterado na versão 3.2: Nas versões anteriores, *note openlog():
     755. não seria chamado automaticamente se não fosse chamado antes
     da chamada para *note syslog(): e2, 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(): 755. deve ser chamado no
     interpretador principal antes de *note syslog(): e2. pode ser usado
     em um subinterpretador.  Caso contrário, vai levantar *note
     RuntimeError: 243.

 -- Função: syslog.openlog ([ident[, logoption[, facility]]])

     As opções de log das chamadas subsequentes *note syslog(): e2.
     podem ser definidas chamando *note openlog(): 755.  *note syslog():
     e2. irá chamar *note openlog(): 755. 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: 4ca9.) define o recurso
     padrão para mensagens que não possuem um recurso explicitamente
     codificado.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 243. 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(): 755. será chamado na
     primeira chamada *note syslog(): e2. (se *note openlog(): 755.
     ainda não foi chamado), e 'ident' e outro *note openlog(): 755. os
     parâmetros são redefinidos para os padrões.

     Levanta um *note evento de auditoria: 1b5d. ‘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: 243. 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(): e2. 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: 1b5d. ‘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: 4cb2, *note LOG_FTP: 4cb5, *note LOG_NETINFO:
     4cbb, *note LOG_REMOTEAUTH: 4cbe, *note LOG_INSTALL: 4cb6. e *note
     LOG_RAS: 4cbd.

     Alterado na versão 3.13: Adicionados *note LOG_FTP: 4cb5, *note
     LOG_NETINFO: 4cbb, *note LOG_REMOTEAUTH: 4cbe, *note LOG_INSTALL:
     4cb6, *note LOG_RAS: 4cbd. e *note LOG_LAUNCHD: 4cb8.

 -- 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: 4ccc, *note LOG_NOWAIT: 4ccd. e *note LOG_PERROR:
     4cce.

* Menu:

* Exemplos: Exemplos<37>.


File: python.info,  Node: Exemplos<37>,  Up: syslog — Rotinas da biblioteca syslog do Unix

5.34.10.1 Exemplos
..................

* Menu:

* Exemplo simples::


File: python.info,  Node: Exemplo simples,  Up: Exemplos<37>

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: 4a79.

   * *note asyncio: 3658.

   * *note base64: f.

   * *note calendar: 1d0.

   * *note code: 1b.

   * *note compileall: 4b39.

   * *note cProfile: 2b.: veja *note profile: 468e.

   * *note dis: 4b50.

   * *note doctest: 43e6.

   * ‘encodings.rot_13’

   * *note ensurepip: 59.

   * *note filecmp: 5e.

   * *note fileinput: 5f.

   * *note ftplib: 62.

   * *note gzip: 2ce9.

   * *note http.server: 1147.

   * ‘idlelib’

   * *note inspect: 1151.

   * *note json: 23d.

   * *note mimetypes: 246.

   * *note pdb: aa.

   * *note pickle: 2bd1.

   * *note pickletools: 2bd2.

   * *note platform: 30da.

   * *note poplib: b1.

   * *note profile: 468e.

   * *note pstats: b5.

   * *note py_compile: 4b30.

   * *note pyclbr: b9.

   * *note pydoc: ba.

   * *note quopri: bc.

   * *note random: 478.

   * *note runpy: c3.

   * *note site: 493e.

   * *note sqlite3: 668.

   * *note symtable: 4ab0.

   * *note sysconfig: 4801.

   * *note tabnanny: e3.

   * *note tarfile: 11c1.

   * ‘this’

   * *note timeit: 46b2.

   * *note tokenize: 4b01.

   * *note trace: 46cf.

   * *note turtledemo: 108.

   * *note unittest: 445f.

   * *note uuid: 66a.

   * *note venv: 117.

   * *note webbrowser: 11b.

   * *note zipapp: 475f.

   * *note zipfile: 2d58.

Consulte também a *note interface de linha de comando do Python: 1c5e.


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: 65. 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: a4. e *note argparse: 7.).

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: 23c. 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: a4.  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: 7.

__________________________________________________________________

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: 7. 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: a4.  Veja *note Escolhendo uma biblioteca de análise de
linha de comando: 3201. 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 (‘':'’) e opções que aceitam o argumento
     opcional seguido por dois caracteres de 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 (‘'='’).  Opções longas que aceitam um argumento opcional
     devem ser seguidas por um sinal de igualdade e ponto de
     interrogação (‘'=?'’).  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: 1842. 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.

     Alterado na versão 3.14: Argumentos opcionais são suportados.

 -- Função: getopt.gnu_getopt (args, shortopts, longopts=[])

     Esta função funciona como *note getopt(): 65, 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(): 65. 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.

     Se o primeiro caractere da string de opção for ‘'-'’, argumentos
     não opcionais seguidos por opções serão adicionados à lista de
     pares opção-valor como um par que tem ‘None’ como primeiro elemento
     e a lista de argumentos não opcionais como segundo elemento.  O
     segundo elemento do resultado ‘gnu_getopt()’ é uma lista de
     argumentos do programa após a última opção.

     Alterado na versão 3.14: Suporte para retornar opções misturadas e
     argumentos não opcionais em ordem.

 -- 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: 1842.; 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']

Argumentos opcionais devem ser especificados explicitamente:

     >>> s = '-Con -C --color=off --color a1 a2'
     >>> args = s.split()
     >>> args
     ['-Con', '-C', '--color=off', '--color', 'a1', 'a2']
     >>> optlist, args = getopt.getopt(args, 'C::', ['color=?'])
     >>> optlist
     [('-C', 'on'), ('-C', ''), ('--color', 'off'), ('--color', '')]
     >>> args
     ['a1', 'a2']

A ordem dos argumentos opcionais e não opcionais pode ser preservada:

     >>> s = 'a1 -x a2 a3 a4 --long a5 a6'
     >>> args = s.split()
     >>> args
     ['a1', '-x', 'a2', 'a3', 'a4', '--long', 'a5', 'a6']
     >>> optlist, args = getopt.gnu_getopt(args, '-x:', ['long='])
     >>> optlist
     [(None, ['a1']), ('-x', 'a2'), (None, ['a3', 'a4']), ('--long', 'a5')]
     >>> args
     ['a6']

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: a4.:

     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: 7.:

     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:
3201. 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: a4.

     Análise de opções de linha de comando declarativa.

Módulo *note argparse: 7.

     Opção de linha de comando e biblioteca de análise de argumentos
     mais opinativa.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/Lib/getopt.py


File: python.info,  Node: Módulos removidos,  Next: Considerações de segurança<4>,  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
-------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
------------------------------------------------------------------------

Deprecated since version 3.6, removed in version 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 71b. 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: b. 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
----------------------------------------------------

Deprecated since version 3.6, removed in version 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 71b. 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: b. 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
------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
-------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
-------------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
---------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
--------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Applications can use the *note hashlib: 6c. module from the standard
library.  Other possible replacements are third-party libraries from
PyPI: legacycrypt(2), bcrypt(3), or argon2-cffi(4).  These are not
supported or maintained by the Python core team.

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
--------------------------------------------------------------

Deprecated since version 3.10, removed in version 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 721. 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
-------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
------------------------------------------------------------

Deprecated since version 3.4, removed in version 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 72b. após ser descontinuado no Python
3.4.

O *note aviso de remoção: 72b. inclui orientação para migrar código de
‘imp’ para *note importlib: 7b.

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
--------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
---------------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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)
--------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
---------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
--------------------------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
---------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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: dc. 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
-------------------------------

Deprecated since version 3.6, removed in version 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 71b. 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
------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
--------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
-------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
------------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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
--------------------------------------------------

Deprecated since version 3.11, removed in version 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 46a. 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<4>,  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: f.: *note considerações de segurança do base64: 3b4b.
     na RFC 4648(1)

   * *note hashlib: 6c.: *note todos os construtores usam um argumento
     somente-nomeado “usedforsecurity”, desativando algoritmos
     conhecidos não seguros e bloqueados: 2e57.

   * *note http.server: 76. 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: 3f78.

   * *note logging: 8b.: *note configuração do Logging usa eval(): 3042.

   * *note multiprocessing: 98.: *note Connection.recv() usa pickle:
     351b.

   * *note pickle: ab.: *note Restringindo globais no pickle: 2bbd.

   * *note random: bd. não deve ser usado para o propósito de segurança.
     Em vez disso, use *note secrets: c5.

   * *note shelve: c8.: *note shelve é baseado no pickle e, portanto,
     inadequado para lidar com fontes não confiáveis: 2bdf.

   * *note ssl: d5.: *note Considerações de segurança de SSL/TLS: 372b.

   * *note subprocess: dc.: *note Considerações de segurança de
     Subprocess: 35ea.

   * *note tempfile: e6.: *note mktemp foi descontinuado em razão de
     vulnerabilidade de condições de corrida: 2b76.

   * *note xml: 126.: *note Segurança no XML: 3b7f.

   * *note zipfile: 137.: *note Arquivos .zip preparados de forma
     maliciosa podem causar esgotamento do volume do disco: 2d67.

A opção de linha de comando *note -I: b4d. pode ser usada para executar
o Python no modo isolado.  Quando não pode ser usado, a opção *note -P:
7b6. ou a variável de ambiente *note PYTHONSAFEPATH: 7b7. pode ser usada
para não preceder um caminho potencialmente inseguro para *note
sys.path: 3e1. 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:
1e71.  *note A Referência da Linguagem Python: 14a. fornece uma
definição mais formal da linguagem.  *note A Biblioteca Padrão do
Python: 149. 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: 1e73. 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: 4d2f. 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: 2e. 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: 620. 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: 654. 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: 654. 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(): 3be. 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(): 3be. 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: a5. — 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(): 88f.  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(): 791.  Its arguments are
an exception object and a C string.  The exception object is usually a
predefined object like *note PyExc_ZeroDivisionError: 4d38.  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(): 4d39, 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(): 790, which takes two object arguments, the
exception and its associated value.  You don’t need to *note
Py_INCREF(): 784. the objects passed to any of these functions.

You can test non-destructively whether an exception has been set with
*note PyErr_Occurred(): 1b94.  This returns the current exception
object, or ‘NULL’ if no exception has occurred.  You normally don’t need
to call *note PyErr_Occurred(): 1b94. 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():
1227.  The only time C code should call *note PyErr_Clear(): 1227. 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(): 4d3a. and return a failure indicator itself.  All the
object-creating functions (for example, *note PyLong_FromLong(): 1add.)
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(): 3be. 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():
987. or *note Py_DECREF(): 785. 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: 4d38, which you can use directly.
Of course, you should choose exceptions wisely — don’t use *note
PyExc_TypeError: 4d3b. to mean that a file couldn’t be opened (that
should probably be *note PyExc_OSError: 4d3c.).  If something’s wrong
with the argument list, the *note PyArg_ParseTuple(): 3be. function
usually raises *note PyExc_TypeError: 4d3b.  If you have an argument
whose value must be in a particular range or must satisfy other
conditions, *note PyExc_ValueError: 4d3d. 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(): 1465. in the
module’s *note Py_mod_exec: b6b. 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: b6b.
function is called.

For now, let’s avoid the issue: we will block repeated initialization by
raising an *note ImportError: 64f.:

     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(): 1465. function may create a class with the
base class being *note Exception: bc3. (unless another class is passed
in instead of ‘NULL’), described in *note Exceções embutidas: 1b27.

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(): 785. 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: 16c1. 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(): 791. 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(): 3be.  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(): 3be.:

     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(): 1add.

     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: 1662. macro):

     Py_INCREF(Py_None);
     return Py_None;

*note Py_None: 4d40. 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(): 3be. 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(): 3be.; more information on this
function is provided below.

The *note METH_KEYWORDS: 4d43. 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(): 618.
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: 16c1. 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(): 4d44, 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 ‘PyImport_Inittab’ table.
To add the module to the initialization table, use *note
PyImport_AppendInittab(): 1a4c, 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: 166, authors should consider
     marking the module as having no support for subinterpreters (via
     *note Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED: 4d45.).

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++: 4d48.) e
informações adicionais referentes apenas à construção no Windows
(capítulo *note Construindo Extensões C e C++ no Windows: 20cf.) 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: 1a8. 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(): 784. 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: 16f6. flag; this is described in section *note A tabela de
métodos e a função de inicialização do módulo: 4d41.  The *note
PyArg_ParseTuple(): 3be. function and its arguments are documented in
section *note Extraindo parâmetros em funções de extensão: 4d4b.

The macros *note Py_XINCREF(): c4e. and *note Py_XDECREF(): 987.
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: 4d4c.

Later, when it is time to call the function, you call the C function
*note PyObject_CallObject(): 4d4d.  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(): 3bf. 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(): 4d4d. returns a Python object pointer: this
is the return value of the Python function.  *note
PyObject_CallObject(): 4d4d. 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(): 785.-ed immediately after
the *note PyObject_CallObject(): 4d4d. call.

The return value of *note PyObject_CallObject(): 4d4d. 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(): 785. 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():
4d4d. 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(): 1227.  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(): 4d4d.  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(): 3bf.  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(): 3bf. may run out of memory, and
this should be checked.

You may also call a function with keyword arguments by using *note
PyObject_Call(): 631, which supports arguments and keyword arguments.
As in the above example, we use *note Py_BuildValue(): 3bf. 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(): 3be. 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: 3d2. 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(): 3be. 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(): 618. 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(): 3be. 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(): 618. 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: 198. 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(): 3be.  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(): 3be, 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(): 3be.: while the latter
requires its first argument to be a tuple (since Python argument lists
are always represented as tuples internally), *note Py_BuildValue():
3bf. 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: 64. module exposes a way to run the detector (the
*note collect(): 1b3. 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(): 785. 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():
785. 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(): 785.
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(): 785.  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(): 784.  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(): 1add. and *note
Py_BuildValue(): 3bf, 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(): 1add.
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(): 5e1.  The picture is less clear, here,
however, since a few common routines are exceptions: *note
PyTuple_GetItem(): 4d58, *note PyList_GetItem(): 5f3, *note
PyDict_GetItem(): 61c, and *note PyDict_GetItemString(): 61d. all return
references that you borrow from the tuple, list or dictionary.

The function *note PyImport_AddModule(): 5f0. 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(): 784. to become an independent owner.  There
are exactly two important exceptions to this rule: *note
PyTuple_SetItem(): 4d59. and *note PyList_SetItem(): 181b.  These
functions take over ownership of the item passed to them — even if they
fail!  (Note that *note PyDict_SetItem(): 4d5a. 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(): 784.

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(): 785. 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(): 181b.  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(): 181b. calls
*note Py_DECREF(): 785. on the replaced item, which invokes replaced
item’s corresponding *note tp_dealloc: 4d5d. function.  During
deallocation, *note tp_dealloc: 4d5d. calls *note tp_finalize: c90,
which is mapped to the ‘__del__()’ method for class instances (see PEP
442(1)).  This entire sequence happens synchronously within the *note
PyList_SetItem(): 181b. 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:
46d. protecting Python’s entire object space.  However, it is possible
to temporarily release this lock using the macro *note
Py_BEGIN_ALLOW_THREADS: 4d5e, and to re-acquire it using *note
Py_END_ALLOW_THREADS: c73.  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(): 784. and *note Py_DECREF(): 785. do not
check for ‘NULL’ pointers — however, their variants *note Py_XINCREF():
c4e. and *note Py_XDECREF(): 987. 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: 4d41.).  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(): 4d64. 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(): 1b11. 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: 4d35.  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: b6b. 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: b6b. 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: 288e. 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 gravador de um módulo de extensão C defina novos
tipos que podem ser manipulados a partir do código Python, da mesma
forma que os tipos embutidos *note str: 169. e *note list: 24c.  O
código para todos os 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: 8fa. considera todos os objetos
Python como variáveis do tipo *note PyObject: 5d5.*, que serve como um
“tipo base” para todos os objetos Python.  A própria estrutura *note
PyObject: 5d5. contém apenas a *note contagem de referências: 4d6a. do
objeto e um ponteiro para o “objeto de tipo” do objeto.  É aqui que
ocorre a ação; o objeto de tipo determina quais funções (C) são chamadas
pelo interpretador quando, por exemplo, um atributo é consultado em um
objeto, um método é chamado ou é multiplicado por outro objeto.  Essas
funções 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 por exemplo, então aqui está um
módulo mínimo, mas completo, que define um novo tipo chamado ‘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(): 792, 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);
     }

Agora isso é um pouco para ser absorvido de uma só vez, mas esperamos
que os bits pareçam familiares no capítulo anterior.  Este arquivo
define três coisas:

  1. What a ‘Custom’ 'object' contains: this is the ‘CustomObject’
     struct, which is allocated once for each ‘Custom’ instance.

  2. How the ‘Custom’ 'type' behaves: this is the ‘CustomType’ struct,
     which defines a set of flags and function pointers that the
     interpreter inspects when specific operations are requested.

  3. How to define and execute the ‘custom’ module: this is the
     ‘PyInit_custom’ function and the associated ‘custom_module’ struct
     for defining the module, and the ‘custom_module_exec’ function to
     set up a fresh module object.

O primeiro bit é

     typedef struct {
         PyObject_HEAD
     } CustomObject;

This is what a Custom object will contain.  ‘PyObject_HEAD’ is mandatory
at the start of each object struct and defines a field called ‘ob_base’
of type *note PyObject: 5d5, containing a pointer to a type object and a
reference count (these can be accessed using the macros *note Py_TYPE:
3c6. and *note Py_REFCNT: 2ce. respectively).  The reason for the macro
is to abstract away the layout and to enable additional fields in *note
debug builds: 503.

     Nota: There is no semicolon above after the *note PyObject_HEAD:
     14d9. macro.  Be wary of adding one by accident: some compilers
     will complain.

Of course, objects generally store additional data besides the standard
‘PyObject_HEAD’ boilerplate; for example, here is the definition for
standard Python floats:

     typedef struct {
         PyObject_HEAD
         double ob_fval;
     } PyFloatObject;

O segundo bit é a definição do objeto de tipo.

     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,
     };

     Nota: We recommend using C99-style designated initializers as
     above, to avoid listing all the *note PyTypeObject: c8f. fields
     that you don’t care about and also to avoid caring about the
     fields’ declaration order.

The actual definition of *note PyTypeObject: c8f. in ‘object.h’ has many
more *note fields: b7a. than the definition above.  The remaining fields
will be filled with zeros by the C compiler, and it’s common practice to
not specify them explicitly unless you need them.

Vamos separá-lo, um campo de cada vez

     .ob_base = PyVarObject_HEAD_INIT(NULL, 0)

This line is mandatory boilerplate to initialize the ‘ob_base’ field
mentioned above.

     .tp_name = "custom.Custom",

The name of our type.  This will appear in the default textual
representation of our objects and in some error messages, for example:

     >>> "" + custom.Custom()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: can only concatenate str (not "custom.Custom") to str

Note that the name is a dotted name that includes both the module name
and the name of the type within the module.  The module in this case is
‘custom’ and the type is ‘Custom’, so we set the type name to
‘custom.Custom’.  Using the real dotted import path is important to make
your type compatible with the *note pydoc: ba. and *note pickle: ab.
modules.

     .tp_basicsize = sizeof(CustomObject),
     .tp_itemsize = 0,

This is so that Python knows how much memory to allocate when creating
new ‘Custom’ instances.  *note tp_itemsize: 2252. is only used for
variable-sized objects and should otherwise be zero.

     Nota: If you want your type to be subclassable from Python, and
     your type has the same *note tp_basicsize: b74. as its base type,
     you may have problems with multiple inheritance.  A Python subclass
     of your type will have to list your type first in its *note
     __bases__: 169a, or else it will not be able to call your type’s
     *note __new__(): 795. method without getting an error.  You can
     avoid this problem by ensuring that your type has a larger value
     for *note tp_basicsize: b74. than its base type does.  Most of the
     time, this will be true anyway, because either your base type will
     be *note object: c72, or else you will be adding data members to
     your base type, and therefore increasing its size.

We set the class flags to *note Py_TPFLAGS_DEFAULT: 4d6b.

     .tp_flags = Py_TPFLAGS_DEFAULT,

All types should include this constant in their flags.  It enables all
of the members defined until at least Python 3.3.  If you need further
members, you will need to OR the corresponding flags.

We provide a doc string for the type in *note tp_doc: 4d6c.

     .tp_doc = PyDoc_STR("Custom objects"),

To enable object creation, we have to provide a *note tp_new: 794.
handler.  This is the equivalent of the Python method *note __new__():
795, but has to be specified explicitly.  In this case, we can just use
the default implementation provided by the API function *note
PyType_GenericNew(): 4d6d.

     .tp_new = PyType_GenericNew,

Everything else in the file should be familiar, except for some code in
‘custom_module_exec()’:

     if (PyType_Ready(&CustomType) < 0) {
         return -1;
     }

This initializes the ‘Custom’ type, filling in a number of members to
the appropriate default values, including *note ob_type: 4d6e. that we
initially set to ‘NULL’.

     if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
         return -1;
     }

This adds the type to the module dictionary.  This allows us to create
‘Custom’ instances by calling the ‘Custom’ class:

     >>> import custom
     >>> mycustom = custom.Custom()

That’s it!  All that remains is to build it; put the above code in a
file called ‘custom.c’,

     [build-system]
     requires = ["setuptools"]
     build-backend = "setuptools.build_meta"

     [project]
     name = "custom"
     version = "1"

in a file called ‘pyproject.toml’, and

     from setuptools import Extension, setup
     setup(ext_modules=[Extension("custom", ["custom.c"])])

in a file called ‘setup.py’; then typing

     $ python -m pip install .

in a shell should produce a file ‘custom.so’ in a subdirectory and
install it; now fire up Python — you should be able to ‘import custom’
and play around with ‘Custom’ objects.

Isso não foi tão difícil, foi?

Naturalmente, o tipo personalizado 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
.....................................................

Let’s extend the basic example to add some data and methods.  Let’s also
make the type usable as a base class.  We’ll create a new module,
‘custom2’ that adds these capabilities:

     #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(PyObject *op)
     {
         CustomObject *self = (CustomObject *) op;
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free(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 = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         CustomObject *self = (CustomObject *) op;
         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(PyObject *op, PyObject *Py_UNUSED(dummy))
     {
         CustomObject *self = (CustomObject *) op;
         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", 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 = Custom_init,
         .tp_dealloc = 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.

The ‘Custom’ type now has three data attributes in its C struct,
'first', 'last', and 'number'.  The 'first' and 'last' variables are
Python strings containing first and last names.  The 'number' attribute
is a C integer.

A estrutura do objeto é atualizada de acordo

     typedef struct {
         PyObject_HEAD
         PyObject *first; /* first name */
         PyObject *last;  /* last name */
         int number;
     } CustomObject;

Because we now have data to manage, we have to be more careful about
object allocation and deallocation.  At a minimum, we need a
deallocation method:

     static void
     Custom_dealloc(PyObject *op)
     {
         CustomObject *self = (CustomObject *) op;
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free(self);
     }

which is assigned to the *note tp_dealloc: 4d5d. member:

     .tp_dealloc = Custom_dealloc,

This method first clears the reference counts of the two Python
attributes.  *note Py_XDECREF(): 987. correctly handles the case where
its argument is ‘NULL’ (which might happen here if ‘tp_new’ failed
midway).  It then calls the *note tp_free: 4d70. member of the object’s
type (computed by ‘Py_TYPE(self)’) to free the object’s memory.  Note
that the object’s type might not be ‘CustomType’, because the object may
be an instance of a subclass.

     Nota: The explicit cast to ‘CustomObject *’ above is needed because
     we defined ‘Custom_dealloc’ to take a ‘PyObject *’ argument, as the
     ‘tp_dealloc’ function pointer expects to receive a ‘PyObject *’
     argument.  By assigning to the ‘tp_dealloc’ slot of a type, we
     declare that it can only be called with instances of our
     ‘CustomObject’ class, so the cast to ‘(CustomObject *)’ is safe.
     This is object-oriented polymorphism, in C!

     In existing code, or in previous versions of this tutorial, you
     might see similar functions take a pointer to the subtype object
     structure (‘CustomObject*’) directly, like this:

          Custom_dealloc(CustomObject *self)
          {
              Py_XDECREF(self->first);
              Py_XDECREF(self->last);
              Py_TYPE(self)->tp_free((PyObject *) self);
          }
          ...
          .tp_dealloc = (destructor) Custom_dealloc,

     This does the same thing on all architectures that CPython
     supports, but according to the C standard, it invokes undefined
     behavior.

We want to make sure that the first and last names are initialized to
empty strings, so we provide a ‘tp_new’ implementation:

     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;
     }

and install it in the *note tp_new: 794. member:

     .tp_new = Custom_new,

The ‘tp_new’ handler is responsible for creating (as opposed to
initializing) objects of the type.  It is exposed in Python as the *note
__new__(): 795. method.  It is not required to define a ‘tp_new’ member,
and indeed many extension types will simply reuse *note
PyType_GenericNew(): 4d6d. as done in the first version of the ‘Custom’
type above.  In this case, we use the ‘tp_new’ handler to initialize the
‘first’ and ‘last’ attributes to non-‘NULL’ default values.

‘tp_new’ is passed the type being instantiated (not necessarily
‘CustomType’, if a subclass is instantiated) and any arguments passed
when the type was called, and is expected to return the instance
created.  ‘tp_new’ handlers always accept positional and keyword
arguments, but they often ignore the arguments, leaving the argument
handling to initializer (a.k.a.  ‘tp_init’ in C or ‘__init__’ in Python)
methods.

     Nota: ‘tp_new’ shouldn’t call ‘tp_init’ explicitly, as the
     interpreter will do it itself.

The ‘tp_new’ implementation calls the *note tp_alloc: 4d71. slot to
allocate memory:

     self = (CustomObject *) type->tp_alloc(type, 0);

Since memory allocation may fail, we must check the *note tp_alloc:
4d71. result against ‘NULL’ before proceeding.

     Nota: We didn’t fill the *note tp_alloc: 4d71. slot ourselves.
     Rather *note PyType_Ready(): 975. fills it for us by inheriting it
     from our base class, which is *note object: c72. by default.  Most
     types use the default allocation strategy.

     Nota: If you are creating a co-operative *note tp_new: 794. (one
     that calls a base type’s *note tp_new: 794. or *note __new__():
     795.), you must 'not' try to determine what method to call using
     method resolution order at runtime.  Always statically determine
     what type you are going to call, and call its *note tp_new: 794.
     directly, or via ‘type->tp_base->tp_new’.  If you do not do this,
     Python subclasses of your type that also inherit from other
     Python-defined classes may not work correctly.  (Specifically, you
     may not be able to create instances of such subclasses without
     getting a *note TypeError: 198.)

We also define an initialization function which accepts arguments to
provide initial values for our instance:

     static int
     Custom_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         CustomObject *self = (CustomObject *) op;
         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;
     }

by filling the *note tp_init: 796. slot.

     .tp_init = Custom_init,

The *note tp_init: 796. slot is exposed in Python as the *note
__init__(): 8b4. method.  It is used to initialize an object after it’s
created.  Initializers always accept positional and keyword arguments,
and they should return either ‘0’ on success or ‘-1’ on error.

Unlike the ‘tp_new’ handler, there is no guarantee that ‘tp_init’ is
called at all (for example, the *note pickle: ab. module by default
doesn’t call *note __init__(): 8b4. on unpickled instances).  It can
also be called multiple times.  Anyone can call the ‘__init__()’ method
on our objects.  For this reason, we have to be extra careful when
assigning the new attribute values.  We might be tempted, for example to
assign the ‘first’ member like this:

     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 detach the *note thread state:
4d72. and let arbitrary code run in other threads that accesses and
modifies our object.

Para sermos paranoicos e nos protegermos contra essa possibilidade,
quase sempre realocamos os membros antes de decrementar suas contagens
de referência.  Quando não temos que 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
     detach the *note thread state: 4d72. nor cause any calls back into
     our type’s code;

   * when decrementing a reference count in a *note tp_dealloc: 4d5d.
     handler on a type which doesn’t support cyclic garbage collection
     (2).

We want to expose our instance variables as attributes.  There are a
number of ways to do that.  The simplest way is to define member
definitions:

     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 */
     };

and put the definitions in the *note tp_members: 4d73. slot:

     .tp_members = Custom_members,

Each member definition has a member name, type, offset, access flags and
documentation string.  See the *note Generic Attribute Management: 4d74.
section below for details.

A disadvantage of this approach is that it doesn’t provide a way to
restrict the types of objects that can be assigned to the Python
attributes.  We expect the first and last names to be strings, but any
Python objects can be assigned.  Further, the attributes can be deleted,
setting the C pointers to ‘NULL’.  Even though we can make sure the
members are initialized to non-‘NULL’ values, the members can be set to
‘NULL’ if the attributes are deleted.

We define a single method, ‘Custom.name()’, that outputs the objects
name as the concatenation of the first and last names.

     static PyObject *
     Custom_name(PyObject *op, PyObject *Py_UNUSED(dummy))
     {
         CustomObject *self = (CustomObject *) op;
         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);
     }

The method is implemented as a C function that takes a ‘Custom’ (or
‘Custom’ subclass) instance as the first argument.  Methods always take
an instance as the first argument.  Methods often take positional and
keyword arguments as well, but in this case we don’t take any and don’t
need to accept a positional argument tuple or keyword argument
dictionary.  This method is equivalent to the Python method:

     def name(self):
         return "%s %s" % (self.first, self.last)

Note that we have to check for the possibility that our ‘first’ and
‘last’ members are ‘NULL’.  This is because they can be deleted, in
which case they are set to ‘NULL’.  It would be better to prevent
deletion of these attributes and to restrict the attribute values to be
strings.  We’ll see how to do that in the next section.

Agora que definimos o método, precisamos criar uma array de definições
de métodos:

     static PyMethodDef Custom_methods[] = {
         {"name", Custom_name, METH_NOARGS,
          "Return the name, combining the first and last name"
         },
         {NULL}  /* Sentinel */
     };

(note that we used the *note METH_NOARGS: 16c2. flag to indicate that
the method is expecting no arguments other than 'self')

and assign it to the *note tp_methods: 4d75. slot:

     .tp_methods = Custom_methods,

Finally, we’ll make our type usable as a base class for subclassing.
We’ve written our methods carefully so far so that they don’t make any
assumptions about the type of the object being created or used, so all
we need to do is to add the *note Py_TPFLAGS_BASETYPE: 4d76. to our
class flag definition:

     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,

We rename ‘PyInit_custom()’ to ‘PyInit_custom2()’, update the module
name in the *note PyModuleDef: b6a. struct, and update the full class
name in the *note PyTypeObject: c8f. struct.

Finally, we update our ‘setup.py’ file to include the new module,

     from setuptools import Extension, setup
     setup(ext_modules=[
         Extension("custom", ["custom.c"]),
         Extension("custom2", ["custom2.c"]),
     ])

and then we re-install so that we can ‘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) We relied on this in the *note tp_dealloc: 4d5d. handler in this
example, because our type doesn’t support garbage collection.


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
.................................................................

In this section, we’ll provide finer control over how the ‘first’ and
‘last’ attributes are set in the ‘Custom’ example.  In the previous
version of our module, the instance variables ‘first’ and ‘last’ could
be set to non-string values or even deleted.  We want to make sure that
these attributes always contain 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(PyObject *op)
     {
         CustomObject *self = (CustomObject *) op;
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free(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 = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         CustomObject *self = (CustomObject *) op;
         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(PyObject *op, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         return Py_NewRef(self->first);
     }

     static int
     Custom_setfirst(PyObject *op, PyObject *value, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         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(PyObject *op, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         return Py_NewRef(self->last);
     }

     static int
     Custom_setlast(PyObject *op, PyObject *value, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         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", Custom_getfirst, Custom_setfirst,
          "first name", NULL},
         {"last", Custom_getlast, Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_name(PyObject *op, PyObject *Py_UNUSED(dummy))
     {
         CustomObject *self = (CustomObject *) op;
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

     static PyMethodDef Custom_methods[] = {
         {"name", 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 = Custom_init,
         .tp_dealloc = 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);
     }

To provide greater control, over the ‘first’ and ‘last’ attributes,
we’ll use custom getter and setter functions.  Here are the functions
for getting and setting the ‘first’ attribute:

     static PyObject *
     Custom_getfirst(PyObject *op, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         Py_INCREF(self->first);
         return self->first;
     }

     static int
     Custom_setfirst(PyObject *op, PyObject *value, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         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;
     }

The getter function is passed a ‘Custom’ object and a “closure”, which
is a void pointer.  In this case, the closure is ignored.  (The closure
supports an advanced usage in which definition data is passed to the
getter and setter.  This could, for example, be used to allow a single
set of getter and setter functions that decide the attribute to get or
set based on data in the closure.)

The setter function is passed the ‘Custom’ object, the new value, and
the closure.  The new value may be ‘NULL’, in which case the attribute
is being deleted.  In our setter, we raise an error if the attribute is
deleted or if its new value is not a string.

We create an array of *note PyGetSetDef: da6. structures:

     static PyGetSetDef Custom_getsetters[] = {
         {"first", Custom_getfirst, Custom_setfirst,
          "first name", NULL},
         {"last", Custom_getlast, Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

e registra isso num slot *note tp_getset: 4d78.:

     .tp_getset = Custom_getsetters,

The last item in a *note PyGetSetDef: da6. structure is the “closure”
mentioned above.  In this case, we aren’t using a closure, so we just
pass ‘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 */
     };

We also need to update the *note tp_init: 796. handler to only allow
strings (1) to be passed:

     static int
     Custom_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         CustomObject *self = (CustomObject *) op;
         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;
     }

With these changes, we can assure that the ‘first’ and ‘last’ members
are never ‘NULL’ so we can remove checks for ‘NULL’ values in almost all
cases.  This means that most of the *note Py_XDECREF(): 987. calls can
be converted to *note Py_DECREF(): 785. calls.  The only place we can’t
change these calls is in the ‘tp_dealloc’ implementation, where there is
the possibility that the initialization of these members failed in
‘tp_new’.

We also rename the module initialization function and module name in the
initialization function, as we did before, and we add an extra
definition to the ‘setup.py’ file.

   ---------- 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 cadeias 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
.........................................

Python has a *note cyclic garbage collector (GC): 1bbc. that can
identify unneeded objects even when their reference counts are not zero.
This can happen when objects are involved in cycles.  For example,
consider:

     >>> l = []
     >>> l.append(l)
     >>> del l

In this example, we create a list that contains itself.  When we delete
it, it still has a reference from itself.  Its reference count doesn’t
drop to zero.  Fortunately, Python’s cyclic garbage collector will
eventually figure out that the list is garbage and free it.

In the second version of the ‘Custom’ example, we allowed any kind of
object to be stored in the ‘first’ or ‘last’ attributes (1).  Besides,
in the second and third versions, we allowed subclassing ‘Custom’, and
subclasses may add arbitrary attributes.  For any of those two reasons,
‘Custom’ objects can participate in cycles:

     >>> import custom3
     >>> class Derived(custom3.Custom): pass
     ...
     >>> n = Derived()
     >>> n.some_attribute = n

To allow a ‘Custom’ instance participating in a reference cycle to be
properly detected and collected by the cyclic GC, our ‘Custom’ type
needs to fill two additional slots and to enable a flag that enables
these 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(PyObject *op, visitproc visit, void *arg)
     {
         CustomObject *self = (CustomObject *) op;
         Py_VISIT(self->first);
         Py_VISIT(self->last);
         return 0;
     }

     static int
     Custom_clear(PyObject *op)
     {
         CustomObject *self = (CustomObject *) op;
         Py_CLEAR(self->first);
         Py_CLEAR(self->last);
         return 0;
     }

     static void
     Custom_dealloc(PyObject *op)
     {
         PyObject_GC_UnTrack(op);
         (void)Custom_clear(op);
         Py_TYPE(op)->tp_free(op);
     }

     static PyObject *
     Custom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     {
         CustomObject *self;
         self = (CustomObject *) type->tp_alloc(type, 0);
         if (self != NULL) {
             self->first = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         CustomObject *self = (CustomObject *) op;
         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(PyObject *op, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         return Py_NewRef(self->first);
     }

     static int
     Custom_setfirst(PyObject *op, PyObject *value, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         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(PyObject *op, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         return Py_NewRef(self->last);
     }

     static int
     Custom_setlast(PyObject *op, PyObject *value, void *closure)
     {
         CustomObject *self = (CustomObject *) op;
         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", Custom_getfirst, Custom_setfirst,
          "first name", NULL},
         {"last", Custom_getlast, Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_name(PyObject *op, PyObject *Py_UNUSED(dummy))
     {
         CustomObject *self = (CustomObject *) op;
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

     static PyMethodDef Custom_methods[] = {
         {"name", 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 = Custom_init,
         .tp_dealloc = Custom_dealloc,
         .tp_traverse = Custom_traverse,
         .tp_clear = 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);
     }

First, the traversal method lets the cyclic GC know about subobjects
that could participate in cycles:

     static int
     Custom_traverse(PyObject *op, visitproc visit, void *arg)
     {
         CustomObject *self = (CustomObject *) op;
         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;
     }

For each subobject that can participate in cycles, we need to call the
‘visit()’ function, which is passed to the traversal method.  The
‘visit()’ function takes as arguments the subobject and the extra
argument 'arg' passed to the traversal method.  It returns an integer
value that must be returned if it is non-zero.

Python provides a *note Py_VISIT(): 4d7a. macro that automates calling
visit functions.  With *note Py_VISIT(): 4d7a, we can minimize the
amount of boilerplate in ‘Custom_traverse’:

     static int
     Custom_traverse(PyObject *op, visitproc visit, void *arg)
     {
         CustomObject *self = (CustomObject *) op;
         Py_VISIT(self->first);
         Py_VISIT(self->last);
         return 0;
     }

     Nota: The *note tp_traverse: 977. implementation must name its
     arguments exactly 'visit' and 'arg' in order to use *note
     Py_VISIT(): 4d7a.

Second, we need to provide a method for clearing any subobjects that can
participate in cycles:

     static int
     Custom_clear(PyObject *op)
     {
         CustomObject *self = (CustomObject *) op;
         Py_CLEAR(self->first);
         Py_CLEAR(self->last);
         return 0;
     }

Notice the use of the *note Py_CLEAR(): 78d. macro.  It is the
recommended and safe way to clear data attributes of arbitrary types
while decrementing their reference counts.  If you were to call *note
Py_XDECREF(): 987. instead on the attribute before setting it to ‘NULL’,
there is a possibility that the attribute’s destructor would call back
into code that reads the attribute again ('especially' if there is a
reference cycle).

     Nota: You could emulate *note Py_CLEAR(): 78d. by writing:

          PyObject *tmp;
          tmp = self->first;
          self->first = NULL;
          Py_XDECREF(tmp);

     Nevertheless, it is much easier and less error-prone to always use
     *note Py_CLEAR(): 78d. when deleting an attribute.  Don’t try to
     micro-optimize at the expense of robustness!

The deallocator ‘Custom_dealloc’ may call arbitrary code when clearing
attributes.  It means the circular GC can be triggered inside the
function.  Since the GC assumes reference count is not zero, we need to
untrack the object from the GC by calling *note PyObject_GC_UnTrack():
16f3. before clearing members.  Here is our reimplemented deallocator
using *note PyObject_GC_UnTrack(): 16f3. and ‘Custom_clear’:

     static void
     Custom_dealloc(PyObject *op)
     {
         PyObject_GC_UnTrack(op);
         (void)Custom_clear(op);
         Py_TYPE(op)->tp_free(op);
     }

Finally, we add the *note Py_TPFLAGS_HAVE_GC: 976. flag to the class
flags:

     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,

That’s pretty much it.  If we had written custom *note tp_alloc: 4d71.
or *note tp_free: 4d70. handlers, we’d need to modify them for cyclic
garbage collection.  Most extensions will use the versions automatically
provided.

   ---------- Footnotes ----------

   (1) Além disso, mesmo com nossos atributos restritos a instâncias de
strings, o usuário poderia passar arbitrariamente subclasses *note str:
169. 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
..........................................

It is possible to create new extension types that are derived from
existing types.  It is easiest to inherit from the built in types, since
an extension can easily use the *note PyTypeObject: c8f. it needs.  It
can be difficult to share these *note PyTypeObject: c8f. structures
between extension modules.

In this example we will create a ‘SubList’ type that inherits from the
built-in *note list: 24c. type.  The new type will be completely
compatible with regular lists, but will have an additional ‘increment()’
method that increases an internal counter:

     >>> 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(PyObject *op, PyObject *Py_UNUSED(dummy))
     {
         SubListObject *self = (SubListObject *) op;
         self->state++;
         return PyLong_FromLong(self->state);
     }

     static PyMethodDef SubList_methods[] = {
         {"increment", SubList_increment, METH_NOARGS,
          PyDoc_STR("increment state counter")},
         {NULL},
     };

     static int
     SubList_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         SubListObject *self = (SubListObject *) op;
         if (PyList_Type.tp_init(op, 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 = 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);
     }

As you can see, the source code closely resembles the ‘Custom’ examples
in previous sections.  We will break down the main differences between
them.

     typedef struct {
         PyListObject list;
         int state;
     } SubListObject;

The primary difference for derived type objects is that the base type’s
object structure must be the first value.  The base type will already
include the *note PyObject_HEAD(): 14d9. at the beginning of its
structure.

When a Python object is a ‘SubList’ instance, its ‘PyObject *’ pointer
can be safely cast to both ‘PyListObject *’ and ‘SubListObject *’:

     static int
     SubList_init(PyObject *op, PyObject *args, PyObject *kwds)
     {
         SubListObject *self = (SubListObject *) op;
         if (PyList_Type.tp_init(op, args, kwds) < 0)
             return -1;
         self->state = 0;
         return 0;
     }

We see above how to call through to the *note __init__(): 8b4. method of
the base type.

This pattern is important when writing a type with custom *note tp_new:
794. and *note tp_dealloc: 4d5d. members.  The *note tp_new: 794.
handler should not actually create the memory for the object with its
*note tp_alloc: 4d71, but let the base class handle it by calling its
own *note tp_new: 794.

The *note PyTypeObject: c8f. struct supports a *note tp_base: 4d7c.
specifying the type’s concrete base class.  Due to cross-platform
compiler issues, you can’t fill that field directly with a reference to
*note PyList_Type: 4d7d.; it should be done in the *note Py_mod_exec:
b6b. function:

     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;
     }

Before calling *note PyType_Ready(): 975, the type structure must have
the *note tp_base: 4d7c. slot filled in.  When we are deriving an
existing type, it is not necessary to fill out the *note tp_alloc: 4d71.
slot with *note PyType_GenericNew(): 4d6d. – the allocation function
from the base type will be inherited.

After that, calling *note PyType_Ready(): 975. and adding the type
object to the module is the same as with the basic ‘Custom’ examples.


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: c8f, with some fields only
used in *note debug builds: 503. 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 */
         PyMethodDef *tp_methods;
         PyMemberDef *tp_members;
         PyGetSetDef *tp_getset;
         // Strong reference on a heap type, borrowed reference on a static type
         PyTypeObject *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; /* no longer used */
         void *tp_subclasses;  /* for static builtin types this is an index */
         PyObject *tp_weaklist; /* not used for static builtin types */
         destructor tp_del;

         /* Type attribute cache version tag. Added in version 2.6.
          * If zero, the cache is invalid and must be initialized.
          */
         unsigned int tp_version_tag;

         destructor tp_finalize;
         vectorcallfunc tp_vectorcall;

         /* bitset of which type-watchers care about this type */
         unsigned char tp_watched;

         /* Number of tp_version_tag values used.
          * Set to _Py_ATTR_CACHE_UNUSED if the attribute cache is
          * disabled for this type (e.g. due to custom MRO entries).
          * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere).
          */
         uint16_t tp_versions_used;
     } 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: 2252. 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(PyObject *op)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         free(self->obj_UnderlyingDatatypePtr);
         Py_TYPE(self)->tp_free(self);
     }

If your type supports garbage collection, the destructor should call
*note PyObject_GC_UnTrack(): 16f3. before clearing any member fields:

     static void
     newdatatype_dealloc(PyObject *op)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         PyObject_GC_UnTrack(op);
         Py_CLEAR(self->other_obj);
         ...
         Py_TYPE(self)->tp_free(self);
     }

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():
425. and *note PyErr_Restore(): 428. 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(self)->tp_free(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: 977. and/or *note tp_clear:
     4d84.), some of the object’s members can have been cleared or
     finalized by the time *note tp_dealloc: 4d5d. is called.  Second,
     in *note tp_dealloc: 4d5d, 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: 4d5d. 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: 4d5d, and instead use the
     new *note tp_finalize: c90. 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(): 1c1. function, and the *note str(): 169.
function.  (The *note print(): 116b. function just calls *note str():
169.)  These handlers are both optional.

     reprfunc tp_repr;
     reprfunc tp_str;

The *note tp_repr: 4d86. 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(PyObject *op)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         return PyUnicode_FromFormat("Repr-ified_newdatatype{{size:%d}}",
                                     self->obj_UnderlyingDatatypePtr->size);
     }

If no *note tp_repr: 4d86. handler is specified, the interpreter will
supply a representation that uses the type’s *note tp_name: 1b95. and a
uniquely identifying value for the object.

The *note tp_str: 4d87. handler is to *note str(): 169. what the *note
tp_repr: 4d86. handler described above is to *note repr(): 1c1.; that
is, it is called when Python code calls *note str(): 169. on an instance
of your object.  Its implementation is very similar to the *note
tp_repr: 4d86. function, but the resulting string is intended for human
consumption.  If *note tp_str: 4d87. is not specified, the *note
tp_repr: 4d86. handler is used instead.

Here is a simple example:

     static PyObject *
     newdatatype_str(PyObject *op)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         return PyUnicode_FromFormat("Stringified_newdatatype{{size:%d}}",
                                     self->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: 5d5.*.  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: 5d5.* 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():
     975. 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(): 975. is called, it uses three tables
referenced by the type object to create *note descriptor: 17e7.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: 19a2. and *note tp_setattro: 4d8a. 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: 4d75. is not ‘NULL’, it must refer to an array of
*note PyMethodDef: 16c5. 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: 4d8b. 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: 17e7. will be
constructed and added to the type which will be able to extract a value
from the instance structure.  The *note type: 4d8c. field should contain
a type code like *note Py_T_INT: 7a1. or *note Py_T_DOUBLE: 7a2.; the
value will be used to determine how to convert Python values to and from
C values.  The *note flags: 4d8d. field is used to store flags which
control how the attribute can be accessed: you can set it to *note
Py_READONLY: 7a3. to prevent Python code from setting it.

An interesting advantage of using the *note tp_members: 4d73. 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__: 1f4a. attribute.

As with the *note tp_methods: 4d75. table, a sentinel entry with a *note
ml_name: 4d8b. 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: 5d5.* 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: 4d8f. handler is called when the object requires
an attribute look-up.  It is called in the same situations where the
*note __getattr__(): 6ef. method of a class would be called.

Aqui está um exemplo:

     static PyObject *
     newdatatype_getattr(PyObject *op, char *name)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         if (strcmp(name, "data") == 0) {
             return PyLong_FromLong(self->data);
         }

         PyErr_Format(PyExc_AttributeError,
                      "'%.100s' object has no attribute '%.400s'",
                      Py_TYPE(self)->tp_name, name);
         return NULL;
     }

The *note tp_setattr: 4d90. handler is called when the *note
__setattr__(): 2212. or *note __delattr__(): 2213. 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:
4d90. handler should be set to ‘NULL’.

     static int
     newdatatype_setattr(PyObject *op, 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: 4d92. handler is called when comparisons are
needed.  It is analogous to the *note rich comparison methods: 2244,
like ‘__lt__()’, and also called by *note PyObject_RichCompare(): 4d93.
and *note PyObject_RichCompareBool(): 1c43.

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(PyObject *lhs, PyObject *rhs, int op)
     {
         newdatatypeobject *obj1 = (newdatatypeobject *) lhs;
         newdatatypeobject *obj2 = (newdatatypeobject *) rhs;
         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;
         return Py_NewRef(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: 4d95.

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: 160f, *note
PySequenceMethods: 4d96, or *note PyMappingMethods: 4d97, 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(PyObject *op)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         Py_hash_t result;
         result = self->some_size + 32767 * self->some_number;
         if (result == -1) {
             result = -2;
         }
         return result;
     }

*note Py_hash_t: 145f. is a signed integer type with a platform-varying
width.  Returning ‘-1’ from *note tp_hash: 4d98. 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: 770. 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(): 3be. 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(): 618. to extract the arguments.  If
     you do not want to support keyword arguments and this is
     non-‘NULL’, raise a *note TypeError: 198. with a message saying
     that keyword arguments are not supported.

Here is a toy ‘tp_call’ implementation:

     static PyObject *
     newdatatype_call(PyObject *op, PyObject *args, PyObject *kwds)
     {
         newdatatypeobject *self = (newdatatypeobject *) op;
         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",
             self->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: 16dd.
corresponds to the Python *note __iter__(): e5d. method, while *note
tp_iternext: 16de. corresponds to the Python *note __next__(): 14c9.
method.

Any *note iterable: 1423. object must implement the *note tp_iter: 16dd.
handler, which must return an *note iterator: 4c2. 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: 16dd.

   * Objects which can only be iterated over once (usually due to side
     effects of iteration, such as file objects) can implement *note
     tp_iter: 16dd. by returning a new reference to themselves – and
     should also therefore implement the *note tp_iternext: 16de.
     handler.

Any *note iterator: 4c2. object should implement both *note tp_iter:
16dd. and *note tp_iternext: 16de.  An iterator’s *note tp_iter: 16dd.
handler should return a new reference to the iterator.  Its *note
tp_iternext: 16de. 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: 16de. may return ‘NULL’ without setting an
exception, or it may set *note StopIteration: de9. 'in addition' to
returning ‘NULL’; avoiding the exception can yield slightly better
performance.  If an actual error occurs, *note tp_iternext: 16de. 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: 11a.

For an object to be weakly referenceable, the extension type must set
the ‘Py_TPFLAGS_MANAGED_WEAKREF’ bit of the *note tp_flags: 1b60. field.
The legacy *note tp_weaklistoffset: b75. 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(): 78b.):

     static void
     Trivial_dealloc(PyObject *op)
     {
         /* Clear weakrefs first before calling any destructors */
         PyObject_ClearWeakRefs(op);
         /* ... remainder of destruction code omitted for brevity ... */
         Py_TYPE(op)->tp_free(op);
     }


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: 8fa. 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(): 1b9a.
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'.

Veja *note Definindo módulos de extensão: 4d9e. para detalhes.
* Menu:

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


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
.....................................................

A construção, o empacotamento e a distribuição de módulos de extensão
são melhor realizados com ferramentas de terceiros e estão fora do
escopo deste documento.  Uma ferramenta adequada é o Setuptools, cuja
documentação pode ser encontrada em
‘https://setuptools.pypa.io/en/latest/setuptools.html’.

O módulo *note distutils: 3d, que estava incluído na biblioteca padrão
até o Python 3.12, agora é mantido como parte do 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: 10f0.
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.14/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.

 -- C Macro: Py_NO_LINK_LIB

     Desativa a vinculação implícita baseada em ‘#pragma’ com a
     biblioteca Python, realizada dentro dos arquivos de cabeçalho
     CPython.

     Adicionado na versão 3.14.


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ê pode usar a biblioteca CPython de duas
maneiras:

  1. Por padrão, a inclusão de ‘PC/pyconfig.h’ diretamente ou via
     ‘Python.h’ aciona um link implícito e sensível à configuração com a
     biblioteca.  O arquivo de cabeçalho escolhe ‘pythonXY_d.lib’ para
     Debug, ‘pythonXY.lib’ para Release e ‘pythonX.lib’ para Release com
     a *note API Limitada: 4da9. habilitada.

     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
          cl /LD /I/python/include ni.c spam.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(): 3be.), mas sabe como encontrar o código
     Python graças ao ‘pythonXY.lib’ implicitamente ligado.

     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.

  2. Manualmente, definindo a macro *note Py_NO_LINK_LIB: 441. antes de
     incluir ‘Python.h’.  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 /DPy_NO_LINK_LIB /I/python/include spam.c ../libs/pythonXY.lib
          cl /LD /DPy_NO_LINK_LIB /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(): 3be.), 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(): 45d.  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(): 4dad,
or you can pass a stdio file pointer and a file name (for identification
in error messages only) to *note PyRun_SimpleFile(): 4dae.  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: 1e73.

     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: 620. for a description
     of this macro.

Setting *note PyConfig.program_name: 3ef. should be called before *note
Py_InitializeFromConfig(): 3f3. to inform the interpreter about paths to
Python run-time libraries.  Next, the Python interpreter is initialized
with *note Py_Initialize(): 45d, followed by the execution of a
hard-coded Python script that prints the date and time.  Afterwards, the
*note Py_FinalizeEx(): f05. 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(): 4dae. 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: 4db5. 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(): 15ed.  This routine needs a Python string as its
argument, which is constructed using the *note
PyUnicode_DecodeFSDefault(): 19c7. 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(): 5e1.  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():
45d.:

     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: 4dbb.)
you will have to read your system’s documentation about dynamic linking
and/or examine Python’s ‘Makefile’ (use *note
sysconfig.get_makefile_filename(): 4800. to find its location) and
compilation options.  In this case, the *note sysconfig: e1. 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: 1e72, 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<14>.
* Estabilidade da API C::
* A camada de nível muito alto::
* Contagem de referências::
* Tratamento de Exceções::
* Definindo módulos de extensão::
* 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<14>,  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:

* Compatibilidade com a versão da linguagem::
* 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<24>.
* Incorporando Python: Incorporando Python<2>.
* Compilações de depuração::
* Ferramentas de terceiros recomendadas: Ferramentas de terceiros recomendadas<2>.


File: python.info,  Node: Compatibilidade com a versão da linguagem,  Next: Padrões de codificação,  Up: Introdução<14>

7.1.1 Compatibilidade com a versão da linguagem
-----------------------------------------------

A API C do Python é compatível com as versões C11 e C++11 do C e C++.

Este é um limite inferior: a API C não requer recursos de versões
posteriores de C/C++.  Você 'não' precisa habilitar o “modo c11” do seu
compilador.


File: python.info,  Node: Padrões de codificação,  Next: Arquivos de inclusão,  Prev: Compatibilidade com a versão da linguagem,  Up: Introdução<14>

7.1.2 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<14>

7.1.3 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: 3d2. 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: 1ffc. e *note
exec_prefix: 1ffd. 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:
1ffc. incluem os cabeçalhos específicos da plataforma de *note
exec_prefix: 1ffd.

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<14>

7.1.4 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: 1662, *note PyMODINIT_FUNC: 16c1.).  Outras de utilidade
mais geral são definidas aqui.  Esta não é necessariamente uma lista
completa.

 -- C Macro: Py_ABS (x)

     Retorna o valor absoluto de ‘x’.

     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: 503.
     (se a macro *note Py_DEBUG: 179c. estiver definida), a macro *note
     Py_ALWAYS_INLINE: 1b5a. 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: b4c. foi
     passada na linha de comando (veja *note PyConfig.use_environment:
     408.).

 -- 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(): b70. 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: PyDoc_STRVAR (name, str)

     Cria uma variável com o nome ‘name’ que pode ser usada em
     docstrings.  Se o Python for compilado sem docstrings, o valor
     estará vazio.

     Use *note PyDoc_STRVAR: 1c12. 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: 1aad. 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}
          };

   ---------- 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<24>,  Prev: Macros úteis,  Up: Introdução<14>

7.1.5 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: 5d5.*.  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: 5d5, variáveis de apenas ponteiro do
tipo *note PyObject: 5d5.* 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: c8f.

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: 21cb.).  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: Tipos<2>.


File: python.info,  Node: Contagens de referências<2>,  Next: Tipos<2>,  Up: Objetos tipos e contagens de referências

7.1.5.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: 5d8. 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: 5d8. 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(): 784. para obter uma
nova referência a um objeto (ou seja, incrementar sua contagem de
referências em um), e *note Py_DECREF(): 785. para liberar essa
referência (ou seja, decrementar a contagem de referências em um).  A
macro *note Py_DECREF(): 785. é 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: 5d8. (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: 5d8. (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():
785, 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: 5d8. (ou seja, incrementam a contagem de referências) do objeto
que retornam.  Isso deixa o chamador com a responsabilidade de chamar
*note Py_DECREF(): 785. 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.5.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(): 785. ou *note Py_XDECREF(): 987. 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: 3d4.

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(): 181b. e *note PyTuple_SetItem(): 4d59, 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(): 1add. retorna uma nova referência que é
imediatamente roubada por *note PyTuple_SetItem(): 4d59.  Quando você
quiser continuar usando um objeto, embora a referência a ele seja
roubada, use *note Py_INCREF(): 784. para obter outra referência antes
de chamar a função de roubo de referência.

A propósito, *note PyTuple_SetItem(): 4d59. é a 'única' maneira de
definir itens de tupla; *note PySequence_SetItem(): 1cea. e *note
PyObject_SetItem(): 4dd3. se recusam a fazer isso, pois tuplas são um
tipo de dados imutável.  Você só deve usar *note PyTuple_SetItem():
4d59. para tuplas que você mesmo está criando.

O código equivalente para preencher uma lista pode ser escrita usando
*note PyList_New(): 4dd4. e *note PyList_SetItem(): 181b.

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(): 3bf, 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(): 4dd3. 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(): 4dd5. e
*note PySequence_GetItem(): 1ce9, 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(): 5f3, você não possui a referência — mas se obtiver o
mesmo item da mesma lista usando *note PySequence_GetItem(): 1ce9. (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(): 5f3, e uma vez usando *note PySequence_GetItem():
1ce9.

     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<2>,  Prev: Contagens de referências<2>,  Up: Objetos tipos e contagens de referências

7.1.5.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: 76a.'  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: c49.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0353/


File: python.info,  Node: Exceções<24>,  Next: Incorporando Python<2>,  Prev: Objetos tipos e contagens de referências,  Up: Introdução<14>

7.1.6 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(): 1b94.  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(): 1b94. 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(): 791.
é a função mais comum (embora não a mais geral) para definir o estado de
exceção, e *note PyErr_Clear(): 1227. 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: 8ed. … *note except: 1ab, 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(): 88f, 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(): 4dda. e *note
PyErr_Clear(): 1227. para lidar com exceções específicas, e o uso de
*note Py_XDECREF(): 987. para descartar referências de propriedade que
podem ser ‘NULL’ (observe o ‘'X'’ no nome; *note Py_DECREF(): 785.
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<24>,  Up: Introdução<14>

7.1.7 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(): 45d.  Isso
inicializa a tabela de módulos carregados e cria os módulos fundamentais
*note builtins: 13, *note __main__: 1. e *note sys: df.  Ela também
inicializa o caminho de pesquisa de módulos (‘sys.path’).

*note Py_Initialize(): 45d. 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: 3ee. e *note
PyConfig.parse_argv: 1bcb. devem estar definidas; veja *note
Configuração de inicialização do Python: 63a.

Na maioria dos sistemas (em particular, no Unix e no Windows, embora os
detalhes sejam ligeiramente diferentes), *note Py_Initialize(): 45d.
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:
3ed, ou insira diretórios adicionais na frente do caminho padrão
definindo *note PYTHONPATH: 1213.

A aplicação de incorporação pode orientar a pesquisa definindo *note
PyConfig.program_name: 3ef. 'antes' de chamar *note
Py_InitializeFromConfig(): 3f3.  Observe que *note PYTHONHOME: 3ed.
ainda substitui isso e *note PYTHONPATH: 1213. 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(): 3e0, *note
Py_GetPrefix(): 3e2, *note Py_GetExecPrefix(): 3e6. e *note
Py_GetProgramFullPath(): 3e9. (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(): 45d.) 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(): f05.  A função *note
Py_IsInitialized(): 4ddd. 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():
f05. '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<14>

7.1.8 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:
503.  ‘Py_DEBUG’ é habilitada na construção Unix adicionando *note
-with-pydebug: 65a. 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: 503.

Definir ‘Py_TRACE_REFS’ habilita o rastreamento de referência (veja a
opção *note opção -with-trace-refs de configure: 62a.).  Quando
definida, uma lista circular duplamente vinculada de objetos ativos é
mantida adicionando dois campos extras a cada *note PyObject: 5d5.  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<14>

7.1.9 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<14>,  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: 4de4. 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: 75e. (“Unstable API”), pode mudar em versões
     menores sem período de depreciação.  É marcado pelo prefixo
     ‘PyUnstable’ nos nomes.

   - *note API Limitada: 62b. (“Limited API”), é compatível em várias
     versões menores.  Quando *note Py_LIMITED_API: 654. é 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: 992.

 -- 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: 37f.
     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: 62b, 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(): 5f3. está disponível, sua
variante de macro “insegura” *note PyList_GET_ITEM(): 4deb. 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: 62b. ou
com a *note ABI Estável: 4de9.  ‘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: 4de9, 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: 62b. inclui os seguintes itens:

   * *note PY_VECTORCALL_ARGUMENTS_OFFSET: 775.

   * *note PyAIter_Check(): 4def.

   * *note PyArg_Parse(): 177c.

   * *note PyArg_ParseTuple(): 3be.

   * *note PyArg_ParseTupleAndKeywords(): 618.

   * *note PyArg_UnpackTuple(): 16f4.

   * *note PyArg_VaParse(): 4df0.

   * *note PyArg_VaParseTupleAndKeywords(): 619.

   * *note PyArg_ValidateKeywordArguments(): 4df1.

   * *note PyBaseObject_Type: 4df2.

   * *note PyBool_FromLong(): 4df3.

   * *note PyBool_Type: 4df4.

   * *note PyBuffer_FillContiguousStrides(): 958.

   * *note PyBuffer_FillInfo(): 959.

   * *note PyBuffer_FromContiguous(): 955.

   * *note PyBuffer_GetPointer(): 952.

   * *note PyBuffer_IsContiguous(): 957.

   * *note PyBuffer_Release(): 62f.

   * *note PyBuffer_SizeFromFormat(): 953.

   * *note PyBuffer_ToContiguous(): 954.

   * ‘PyByteArrayIter_Type’

   * *note PyByteArray_AsString(): 4df5.

   * *note PyByteArray_Concat(): 4df6.

   * *note PyByteArray_FromObject(): 159a.

   * *note PyByteArray_FromStringAndSize(): 159b.

   * *note PyByteArray_Resize(): 4df7.

   * *note PyByteArray_Size(): 4df8.

   * *note PyByteArray_Type: 4df9.

   * ‘PyBytesIter_Type’

   * *note PyBytes_AsString(): a7d.

   * *note PyBytes_AsStringAndSize(): 4dfa.

   * *note PyBytes_Concat(): 4dfb.

   * *note PyBytes_ConcatAndDel(): 4dfc.

   * ‘PyBytes_DecodeEscape()’

   * *note PyBytes_FromFormat(): 1cc1.

   * *note PyBytes_FromFormatV(): 4dfd.

   * *note PyBytes_FromObject(): 4dfe.

   * *note PyBytes_FromString(): 4dff.

   * *note PyBytes_FromStringAndSize(): 1592.

   * ‘PyBytes_Repr()’

   * *note PyBytes_Size(): 4e00.

   * *note PyBytes_Type: 4e01.

   * *note PyCFunction: 1666.

   * *note PyCFunctionFast: 4e02.

   * *note PyCFunctionFastWithKeywords: 4e03.

   * *note PyCFunctionWithKeywords: 4e04.

   * ‘PyCFunction_GetFlags()’

   * ‘PyCFunction_GetFunction()’

   * ‘PyCFunction_GetSelf()’

   * *note PyCFunction_New(): 1b96.

   * *note PyCFunction_NewEx(): 1c2d.

   * ‘PyCFunction_Type’

   * *note PyCMethod_New(): 1b90.

   * *note PyCallIter_New(): 4e05.

   * *note PyCallIter_Type: 4e06.

   * *note PyCallable_Check(): 4e07.

   * *note PyCapsule_Destructor: 4e08.

   * *note PyCapsule_GetContext(): 4e09.

   * *note PyCapsule_GetDestructor(): 4e0a.

   * *note PyCapsule_GetName(): 4e0b.

   * *note PyCapsule_GetPointer(): 4e0c.

   * *note PyCapsule_Import(): 1b11.

   * *note PyCapsule_IsValid(): 154e.

   * *note PyCapsule_New(): 4d64.

   * *note PyCapsule_SetContext(): 4e0d.

   * *note PyCapsule_SetDestructor(): 4e0e.

   * *note PyCapsule_SetName(): 4e0f.

   * *note PyCapsule_SetPointer(): 4e10.

   * ‘PyCapsule_Type’

   * ‘PyClassMethodDescr_Type’

   * *note PyCodec_BackslashReplaceErrors(): 4e11.

   * *note PyCodec_Decode(): 3de.

   * *note PyCodec_Decoder(): 4e12.

   * *note PyCodec_Encode(): 3df.

   * *note PyCodec_Encoder(): 4e13.

   * *note PyCodec_IgnoreErrors(): 4e14.

   * *note PyCodec_IncrementalDecoder(): 4e15.

   * *note PyCodec_IncrementalEncoder(): 4e16.

   * *note PyCodec_KnownEncoding(): 4e17.

   * *note PyCodec_LookupError(): 4e18.

   * *note PyCodec_NameReplaceErrors(): 10a5.

   * *note PyCodec_Register(): 4e19.

   * *note PyCodec_RegisterError(): 4e1a.

   * *note PyCodec_ReplaceErrors(): 4e1b.

   * *note PyCodec_StreamReader(): 4e1c.

   * *note PyCodec_StreamWriter(): 4e1d.

   * *note PyCodec_StrictErrors(): 4e1e.

   * *note PyCodec_Unregister(): a8d.

   * *note PyCodec_XMLCharRefReplaceErrors(): 4e1f.

   * *note PyComplex_FromDoubles(): 4e20.

   * *note PyComplex_ImagAsDouble(): 194f.

   * *note PyComplex_RealAsDouble(): 194e.

   * *note PyComplex_Type: 4e21.

   * *note PyDescr_NewClassMethod(): 4e22.

   * *note PyDescr_NewGetSet(): 4e23.

   * *note PyDescr_NewMember(): 4e24.

   * *note PyDescr_NewMethod(): 1c2c.

   * ‘PyDictItems_Type’

   * ‘PyDictIterItem_Type’

   * ‘PyDictIterKey_Type’

   * ‘PyDictIterValue_Type’

   * ‘PyDictKeys_Type’

   * *note PyDictProxy_New(): 4e25.

   * ‘PyDictProxy_Type’

   * ‘PyDictRevIterItem_Type’

   * ‘PyDictRevIterKey_Type’

   * ‘PyDictRevIterValue_Type’

   * ‘PyDictValues_Type’

   * *note PyDict_Clear(): 4e26.

   * *note PyDict_Contains(): 5d4.

   * *note PyDict_Copy(): 656.

   * *note PyDict_DelItem(): 4e27.

   * *note PyDict_DelItemString(): 4e28.

   * *note PyDict_GetItem(): 61c.

   * *note PyDict_GetItemRef(): 5d6.

   * *note PyDict_GetItemString(): 61d.

   * *note PyDict_GetItemStringRef(): 41e.

   * *note PyDict_GetItemWithError(): 5d7.

   * *note PyDict_Items(): 4e29.

   * *note PyDict_Keys(): 4e2a.

   * *note PyDict_Merge(): 4e2b.

   * *note PyDict_MergeFromSeq2(): 4e2c.

   * *note PyDict_New(): 4e2d.

   * *note PyDict_Next(): 18d6.

   * *note PyDict_SetItem(): 4d5a.

   * *note PyDict_SetItemString(): 18d4.

   * *note PyDict_Size(): 4e2e.

   * *note PyDict_Type: 4e2f.

   * *note PyDict_Update(): 4e30.

   * *note PyDict_Values(): 4e31.

   * *note PyEllipsis_Type: 4e32.

   * ‘PyEnum_Type’

   * *note PyErr_BadArgument(): 4e33.

   * *note PyErr_BadInternalCall(): 4e34.

   * *note PyErr_CheckSignals(): 688.

   * *note PyErr_Clear(): 1227.

   * ‘PyErr_Display()’

   * *note PyErr_DisplayException(): 432.

   * *note PyErr_ExceptionMatches(): 4dda.

   * *note PyErr_Fetch(): 425.

   * *note PyErr_Format(): 10a7.

   * *note PyErr_FormatV(): 10a6.

   * *note PyErr_GetExcInfo(): 96b.

   * *note PyErr_GetHandledException(): 968.

   * *note PyErr_GetRaisedException(): 426.

   * *note PyErr_GivenExceptionMatches(): 4e35.

   * *note PyErr_NewException(): 1465.

   * *note PyErr_NewExceptionWithDoc(): 1464.

   * *note PyErr_NoMemory(): 4d3a.

   * *note PyErr_NormalizeException(): 427.

   * *note PyErr_Occurred(): 1b94.

   * *note PyErr_Print(): 1be8.

   * *note PyErr_PrintEx(): 4e36.

   * ‘PyErr_ProgramText()’

   * *note PyErr_ResourceWarning(): f07.

   * *note PyErr_Restore(): 428.

   * *note PyErr_SetExcFromWindowsErr(): 4e37.

   * *note PyErr_SetExcFromWindowsErrWithFilename(): 19c5.

   * *note PyErr_SetExcFromWindowsErrWithFilenameObject(): 4e38.

   * *note PyErr_SetExcFromWindowsErrWithFilenameObjects(): 4e39.

   * *note PyErr_SetExcInfo(): 96a.

   * *note PyErr_SetFromErrno(): 4d39.

   * *note PyErr_SetFromErrnoWithFilename(): 19c4.

   * *note PyErr_SetFromErrnoWithFilenameObject(): 4e3a.

   * *note PyErr_SetFromErrnoWithFilenameObjects(): 4e3b.

   * *note PyErr_SetFromWindowsErr(): 4e3c.

   * *note PyErr_SetFromWindowsErrWithFilename(): 19c6.

   * *note PyErr_SetHandledException(): 969.

   * *note PyErr_SetImportError(): f2d.

   * *note PyErr_SetImportErrorSubclass(): f06.

   * *note PyErr_SetInterrupt(): 4e3d.

   * *note PyErr_SetInterruptEx(): a94.

   * *note PyErr_SetNone(): 4e3e.

   * *note PyErr_SetObject(): 790.

   * *note PyErr_SetRaisedException(): 429.

   * *note PyErr_SetString(): 791.

   * *note PyErr_SyntaxLocation(): 4e3f.

   * *note PyErr_SyntaxLocationEx(): 4e40.

   * *note PyErr_WarnEx(): 163b.

   * *note PyErr_WarnExplicit(): 19cc.

   * *note PyErr_WarnFormat(): 4e41.

   * *note PyErr_WriteUnraisable(): 5e6.

   * *note PyEval_AcquireThread(): 63d.

   * *note PyEval_EvalCode(): a7c.

   * *note PyEval_EvalCodeEx(): 1a12.

   * *note PyEval_EvalFrame(): 4e42.

   * *note PyEval_EvalFrameEx(): 1224.

   * *note PyEval_GetBuiltins(): 5e8.

   * *note PyEval_GetFrame(): 1a65.

   * *note PyEval_GetFrameBuiltins(): 5e7.

   * *note PyEval_GetFrameGlobals(): 5e9.

   * *note PyEval_GetFrameLocals(): 5eb.

   * *note PyEval_GetFuncDesc(): 4e43.

   * *note PyEval_GetFuncName(): 4e44.

   * *note PyEval_GetGlobals(): 5ea.

   * *note PyEval_GetLocals(): 5ec.

   * *note PyEval_InitThreads(): 18fb.

   * *note PyEval_ReleaseThread(): 4e45.

   * *note PyEval_RestoreThread(): 63c.

   * *note PyEval_SaveThread(): 63b.

   * *note PyExc_ArithmeticError: 4e46.

   * *note PyExc_AssertionError: 4e47.

   * *note PyExc_AttributeError: 4e48.

   * *note PyExc_BaseException: 4e49.

   * *note PyExc_BaseExceptionGroup: 4e4a.

   * *note PyExc_BlockingIOError: 4e4b.

   * *note PyExc_BrokenPipeError: 4e4c.

   * *note PyExc_BufferError: 4e4d.

   * *note PyExc_BytesWarning: 4e4e.

   * *note PyExc_ChildProcessError: 4e4f.

   * *note PyExc_ConnectionAbortedError: 4e50.

   * *note PyExc_ConnectionError: 4e51.

   * *note PyExc_ConnectionRefusedError: 4e52.

   * *note PyExc_ConnectionResetError: 4e53.

   * *note PyExc_DeprecationWarning: 4e54.

   * *note PyExc_EOFError: 4e55.

   * *note PyExc_EncodingWarning: 4e56.

   * *note PyExc_EnvironmentError: 4e57.

   * *note PyExc_Exception: 4e58.

   * *note PyExc_FileExistsError: 4e59.

   * *note PyExc_FileNotFoundError: 4e5a.

   * *note PyExc_FloatingPointError: 4e5b.

   * *note PyExc_FutureWarning: 4e5c.

   * *note PyExc_GeneratorExit: 4e5d.

   * *note PyExc_IOError: 4e5e.

   * *note PyExc_ImportError: 4e5f.

   * *note PyExc_ImportWarning: 4e60.

   * *note PyExc_IndentationError: 4e61.

   * *note PyExc_IndexError: 4e62.

   * *note PyExc_InterruptedError: 4e63.

   * *note PyExc_IsADirectoryError: 4e64.

   * *note PyExc_KeyError: 4e65.

   * *note PyExc_KeyboardInterrupt: 4e66.

   * *note PyExc_LookupError: 4e67.

   * *note PyExc_MemoryError: 4e68.

   * *note PyExc_ModuleNotFoundError: 4e69.

   * *note PyExc_NameError: 4e6a.

   * *note PyExc_NotADirectoryError: 4e6b.

   * *note PyExc_NotImplementedError: 4e6c.

   * *note PyExc_OSError: 4d3c.

   * *note PyExc_OverflowError: 4e6d.

   * *note PyExc_PendingDeprecationWarning: 4e6e.

   * *note PyExc_PermissionError: 4e6f.

   * *note PyExc_ProcessLookupError: 4e70.

   * *note PyExc_RecursionError: 10a8.

   * *note PyExc_ReferenceError: 4e71.

   * *note PyExc_ResourceWarning: 4e72.

   * *note PyExc_RuntimeError: 4e73.

   * *note PyExc_RuntimeWarning: 4e74.

   * *note PyExc_StopAsyncIteration: 4e75.

   * *note PyExc_StopIteration: 4e76.

   * *note PyExc_SyntaxError: 4e77.

   * *note PyExc_SyntaxWarning: 4e78.

   * *note PyExc_SystemError: 4e79.

   * *note PyExc_SystemExit: 4e7a.

   * *note PyExc_TabError: 4e7b.

   * *note PyExc_TimeoutError: 4e7c.

   * *note PyExc_TypeError: 4d3b.

   * *note PyExc_UnboundLocalError: 4e7d.

   * *note PyExc_UnicodeDecodeError: 4e7e.

   * *note PyExc_UnicodeEncodeError: 4e7f.

   * *note PyExc_UnicodeError: 4e80.

   * *note PyExc_UnicodeTranslateError: 4e81.

   * *note PyExc_UnicodeWarning: 4e82.

   * *note PyExc_UserWarning: 4e83.

   * *note PyExc_ValueError: 4d3d.

   * *note PyExc_Warning: 4e84.

   * *note PyExc_WindowsError: 4e85.

   * *note PyExc_ZeroDivisionError: 4d38.

   * *note PyExceptionClass_Name(): c4f.

   * *note PyException_GetArgs(): 780.

   * *note PyException_GetCause(): 4e86.

   * *note PyException_GetContext(): 4e87.

   * *note PyException_GetTraceback(): 4e88.

   * *note PyException_SetArgs(): 781.

   * *note PyException_SetCause(): 4e89.

   * *note PyException_SetContext(): 4e8a.

   * *note PyException_SetTraceback(): 1c85.

   * *note PyFile_FromFd(): 4e8b.

   * *note PyFile_GetLine(): 4e8c.

   * *note PyFile_WriteObject(): 4e8d.

   * *note PyFile_WriteString(): 4e8e.

   * ‘PyFilter_Type’

   * *note PyFloat_AsDouble(): c53.

   * *note PyFloat_FromDouble(): 4e8f.

   * *note PyFloat_FromString(): 4e90.

   * *note PyFloat_GetInfo(): 15e1.

   * *note PyFloat_GetMax(): 15df.

   * *note PyFloat_GetMin(): 15e0.

   * *note PyFloat_Type: 4e91.

   * *note PyFrameObject: 981.

   * *note PyFrame_GetCode(): 982.

   * *note PyFrame_GetLineNumber(): 983.

   * *note PyFrozenSet_New(): 1636.

   * *note PyFrozenSet_Type: 4e92.

   * *note PyGC_Collect(): b7b.

   * *note PyGC_Disable(): a9b.

   * *note PyGC_Enable(): a9a.

   * *note PyGC_IsEnabled(): a9c.

   * *note PyGILState_Ensure(): 63e.

   * *note PyGILState_GetThisThreadState(): 4e93.

   * *note PyGILState_Release(): 63f.

   * *note PyGILState_STATE: 4e94.

   * *note PyGetSetDef: da6.

   * ‘PyGetSetDescr_Type’

   * *note PyImport_AddModule(): 5f0.

   * *note PyImport_AddModuleObject(): 4e95.

   * *note PyImport_AddModuleRef(): 5ef.

   * *note PyImport_AppendInittab(): 1a4c.

   * *note PyImport_ExecCodeModule(): 4e96.

   * *note PyImport_ExecCodeModuleEx(): 4e97.

   * *note PyImport_ExecCodeModuleObject(): 4e98.

   * *note PyImport_ExecCodeModuleWithPathnames(): 4e99.

   * *note PyImport_GetImporter(): 19c3.

   * *note PyImport_GetMagicNumber(): 139f.

   * *note PyImport_GetMagicTag(): 4e9a.

   * *note PyImport_GetModule(): da0.

   * *note PyImport_GetModuleDict(): 4e9b.

   * *note PyImport_Import(): 15ed.

   * *note PyImport_ImportFrozenModule(): 4e9c.

   * *note PyImport_ImportFrozenModuleObject(): 4e9d.

   * *note PyImport_ImportModule(): 3d9.

   * *note PyImport_ImportModuleLevel(): 13a0.

   * *note PyImport_ImportModuleLevelObject(): 4e9e.

   * *note PyImport_ImportModuleNoBlock(): 3d8.

   * *note PyImport_ReloadModule(): 4e9f.

   * *note PyIndex_Check(): b77.

   * *note PyInterpreterState: ab0.

   * *note PyInterpreterState_Clear(): 45e3.

   * *note PyInterpreterState_Delete(): 4ea0.

   * *note PyInterpreterState_Get(): 640.

   * *note PyInterpreterState_GetDict(): 4ea1.

   * *note PyInterpreterState_GetID(): db3.

   * *note PyInterpreterState_New(): 45e4.

   * *note PyIter_Check(): 1b97.

   * *note PyIter_Next(): 396.

   * *note PyIter_NextItem(): 395.

   * *note PyIter_Send(): a8e.

   * ‘PyListIter_Type’

   * ‘PyListRevIter_Type’

   * *note PyList_Append(): 4ea2.

   * *note PyList_AsTuple(): 4ea3.

   * *note PyList_GetItem(): 5f3.

   * *note PyList_GetItemRef(): 5f2.

   * *note PyList_GetSlice(): 4ea4.

   * *note PyList_Insert(): 181a.

   * *note PyList_New(): 4dd4.

   * *note PyList_Reverse(): 4ea5.

   * *note PyList_SetItem(): 181b.

   * *note PyList_SetSlice(): 4ea6.

   * *note PyList_Size(): 160b.

   * *note PyList_Sort(): 4ea7.

   * *note PyList_Type: 4d7d.

   * *note PyLongObject: 39b.

   * ‘PyLongRangeIter_Type’

   * *note PyLong_AsDouble(): 18c5.

   * *note PyLong_AsInt(): 5f8.

   * *note PyLong_AsInt32(): 39c.

   * *note PyLong_AsInt64(): 39d.

   * *note PyLong_AsLong(): 5f9.

   * *note PyLong_AsLongAndOverflow(): 1462.

   * *note PyLong_AsLongLong(): 4ea8.

   * *note PyLong_AsLongLongAndOverflow(): 1461.

   * *note PyLong_AsNativeBytes(): 5fa.

   * *note PyLong_AsSize_t(): 4ea9.

   * *note PyLong_AsSsize_t(): 4eaa.

   * *note PyLong_AsUInt32(): 39e.

   * *note PyLong_AsUInt64(): 39f.

   * *note PyLong_AsUnsignedLong(): 4eab.

   * *note PyLong_AsUnsignedLongLong(): 1490.

   * *note PyLong_AsUnsignedLongLongMask(): 1c81.

   * *note PyLong_AsUnsignedLongMask(): 4eac.

   * *note PyLong_AsVoidPtr(): 4ead.

   * *note PyLong_FromDouble(): b32.

   * *note PyLong_FromInt32(): 3a0.

   * *note PyLong_FromInt64(): 3a1.

   * *note PyLong_FromLong(): 1add.

   * *note PyLong_FromLongLong(): 1ade.

   * *note PyLong_FromNativeBytes(): 5fb.

   * *note PyLong_FromSize_t(): 181e.

   * *note PyLong_FromSsize_t(): 1800.

   * *note PyLong_FromString(): 4eae.

   * *note PyLong_FromUInt32(): 3a2.

   * *note PyLong_FromUInt64(): 3a3.

   * *note PyLong_FromUnsignedLong(): 181c.

   * *note PyLong_FromUnsignedLongLong(): 181d.

   * *note PyLong_FromUnsignedNativeBytes(): 5fc.

   * *note PyLong_FromVoidPtr(): 4eaf.

   * *note PyLong_GetInfo(): 4eb0.

   * *note PyLong_Type: 4eb1.

   * ‘PyMap_Type’

   * *note PyMapping_Check(): 4eb2.

   * *note PyMapping_GetItemString(): 4eb3.

   * *note PyMapping_GetOptionalItem(): 5de.

   * *note PyMapping_GetOptionalItemString(): 5df.

   * *note PyMapping_HasKey(): 614.

   * *note PyMapping_HasKeyString(): 616.

   * *note PyMapping_HasKeyStringWithError(): 615.

   * *note PyMapping_HasKeyWithError(): 613.

   * *note PyMapping_Items(): dab.

   * *note PyMapping_Keys(): da9.

   * *note PyMapping_Length(): 4eb4.

   * *note PyMapping_SetItemString(): 4eb5.

   * *note PyMapping_Size(): 1cec.

   * *note PyMapping_Values(): daa.

   * *note PyMem_Calloc(): 10a3.

   * *note PyMem_Free(): 1633.

   * *note PyMem_Malloc(): e54.

   * *note PyMem_RawCalloc(): 626.

   * *note PyMem_RawFree(): 628.

   * *note PyMem_RawMalloc(): 625.

   * *note PyMem_RawRealloc(): 627.

   * *note PyMem_Realloc(): 1228.

   * *note PyMemberDef: 766.

   * ‘PyMemberDescr_Type’

   * *note PyMember_GetOne(): 79f.

   * *note PyMember_SetOne(): 7a0.

   * *note PyMemoryView_FromBuffer(): 95a.

   * *note PyMemoryView_FromMemory(): 136c.

   * *note PyMemoryView_FromObject(): 4eb6.

   * *note PyMemoryView_GetContiguous(): 4eb7.

   * ‘PyMemoryView_Type’

   * *note PyMethodDef: 16c5.

   * ‘PyMethodDescr_Type’

   * *note PyModuleDef: b6a.

   * ‘PyModuleDef_Base’

   * *note PyModuleDef_Init(): 4d44.

   * ‘PyModuleDef_Type’

   * *note PyModule_Add(): 5fd.

   * *note PyModule_AddFunctions(): 4eb8.

   * *note PyModule_AddIntConstant(): 172a.

   * *note PyModule_AddObject(): 5ff.

   * *note PyModule_AddObjectRef(): 5fe.

   * *note PyModule_AddStringConstant(): 172b.

   * *note PyModule_AddType(): b62.

   * *note PyModule_Create2(): 4eb9.

   * *note PyModule_ExecDef(): 10ab.

   * *note PyModule_FromDefAndSpec2(): 10aa.

   * *note PyModule_GetDef(): 4eba.

   * *note PyModule_GetDict(): 4ebb.

   * *note PyModule_GetFilename(): 42a.

   * *note PyModule_GetFilenameObject(): 42b.

   * *note PyModule_GetName(): 4ebc.

   * *note PyModule_GetNameObject(): 4ebd.

   * *note PyModule_GetState(): b6d.

   * *note PyModule_New(): 4ebe.

   * *note PyModule_NewObject(): 4ebf.

   * *note PyModule_SetDocString(): 4ec0.

   * *note PyModule_Type: 4ec1.

   * *note PyNumber_Absolute(): 4ec2.

   * *note PyNumber_Add(): 4ec3.

   * *note PyNumber_And(): 4ec4.

   * *note PyNumber_AsSsize_t(): 4ec5.

   * *note PyNumber_Check(): c50.

   * *note PyNumber_Divmod(): 4ec6.

   * *note PyNumber_Float(): c52.

   * *note PyNumber_FloorDivide(): 4ec7.

   * *note PyNumber_InPlaceAdd(): 4ec8.

   * *note PyNumber_InPlaceAnd(): 4ec9.

   * *note PyNumber_InPlaceFloorDivide(): 4eca.

   * *note PyNumber_InPlaceLshift(): 4ecb.

   * *note PyNumber_InPlaceMatrixMultiply(): 10ad.

   * *note PyNumber_InPlaceMultiply(): 4ecc.

   * *note PyNumber_InPlaceOr(): 4ecd.

   * *note PyNumber_InPlacePower(): 4ece.

   * *note PyNumber_InPlaceRemainder(): 4ecf.

   * *note PyNumber_InPlaceRshift(): 4ed0.

   * *note PyNumber_InPlaceSubtract(): 4ed1.

   * *note PyNumber_InPlaceTrueDivide(): 4ed2.

   * *note PyNumber_InPlaceXor(): 4ed3.

   * *note PyNumber_Index(): a89.

   * *note PyNumber_Invert(): 4ed4.

   * *note PyNumber_Long(): c51.

   * *note PyNumber_Lshift(): 4ed5.

   * *note PyNumber_MatrixMultiply(): 10ac.

   * *note PyNumber_Multiply(): 4ed6.

   * *note PyNumber_Negative(): 4ed7.

   * *note PyNumber_Or(): 4ed8.

   * *note PyNumber_Positive(): 4ed9.

   * *note PyNumber_Power(): 4eda.

   * *note PyNumber_Remainder(): 4edb.

   * *note PyNumber_Rshift(): 4edc.

   * *note PyNumber_Subtract(): 4edd.

   * *note PyNumber_ToBase(): 1a8f.

   * *note PyNumber_TrueDivide(): 4ede.

   * *note PyNumber_Xor(): 4edf.

   * *note PyOS_AfterFork(): 42c.

   * *note PyOS_AfterFork_Child(): 42d.

   * *note PyOS_AfterFork_Parent(): dad.

   * *note PyOS_BeforeFork(): dac.

   * *note PyOS_CheckStack(): 1ab8.

   * *note PyOS_FSPath(): f08.

   * *note PyOS_InputHook: 799.

   * ‘PyOS_InterruptOccurred()’

   * *note PyOS_double_to_string(): 4ee0.

   * *note PyOS_getsig(): 172c.

   * ‘PyOS_mystricmp()’

   * ‘PyOS_mystrnicmp()’

   * *note PyOS_setsig(): 172d.

   * *note PyOS_sighandler_t: 4ee1.

   * *note PyOS_snprintf(): 16f7.

   * *note PyOS_string_to_double(): 1491.

   * *note PyOS_strtol(): 4ee2.

   * *note PyOS_strtoul(): 4ee3.

   * *note PyOS_vsnprintf(): 16f8.

   * *note PyObject: 5d5.

   * *note PyObject.ob_refcnt: a95.

   * *note PyObject.ob_type: 4d6e.

   * *note PyObject_ASCII(): 4ee4.

   * *note PyObject_AsFileDescriptor(): 4ee5.

   * *note PyObject_Bytes(): 4ee6.

   * *note PyObject_Call(): 631.

   * *note PyObject_CallFunction(): 633.

   * *note PyObject_CallFunctionObjArgs(): 4ee7.

   * *note PyObject_CallMethod(): 634.

   * *note PyObject_CallMethodObjArgs(): 1c96.

   * *note PyObject_CallNoArgs(): 630.

   * *note PyObject_CallObject(): 4d4d.

   * *note PyObject_Calloc(): 10a4.

   * *note PyObject_CheckBuffer(): 62d.

   * *note PyObject_ClearWeakRefs(): 78b.

   * *note PyObject_CopyData(): 956.

   * *note PyObject_DelAttr(): 1799.

   * *note PyObject_DelAttrString(): 179a.

   * *note PyObject_DelItem(): 4ee8.

   * *note PyObject_DelItemString(): 4ee9.

   * *note PyObject_Dir(): 4eea.

   * *note PyObject_Format(): 4eeb.

   * *note PyObject_Free(): e53.

   * *note PyObject_GC_Del(): 16f1.

   * *note PyObject_GC_IsFinalized(): b64.

   * *note PyObject_GC_IsTracked(): b63.

   * *note PyObject_GC_Track(): 16f2.

   * *note PyObject_GC_UnTrack(): 16f3.

   * *note PyObject_GenericGetAttr(): 4eec.

   * *note PyObject_GenericGetDict(): 1bdd.

   * *note PyObject_GenericSetAttr(): 4eed.

   * *note PyObject_GenericSetDict(): 4eee.

   * *note PyObject_GetAIter(): 4eef.

   * *note PyObject_GetAttr(): 5e0.

   * *note PyObject_GetAttrString(): 5e1.

   * *note PyObject_GetBuffer(): 62e.

   * *note PyObject_GetItem(): 4dd5.

   * *note PyObject_GetIter(): 4ef0.

   * *note PyObject_GetOptionalAttr(): 5e2.

   * *note PyObject_GetOptionalAttrString(): 5e3.

   * *note PyObject_GetTypeData(): 760.

   * *note PyObject_HasAttr(): 610.

   * *note PyObject_HasAttrString(): 612.

   * *note PyObject_HasAttrStringWithError(): 611.

   * *note PyObject_HasAttrWithError(): 60f.

   * *note PyObject_Hash(): 433.

   * *note PyObject_HashNotImplemented(): 15b8.

   * *note PyObject_Init(): c54.

   * *note PyObject_InitVar(): 1bf8.

   * *note PyObject_IsInstance(): 109c.

   * *note PyObject_IsSubclass(): 109d.

   * *note PyObject_IsTrue(): 4ef1.

   * *note PyObject_Length(): 4ef2.

   * *note PyObject_Malloc(): e56.

   * *note PyObject_Not(): 4ef3.

   * *note PyObject_Realloc(): 1634.

   * *note PyObject_Repr(): 1225.

   * *note PyObject_RichCompare(): 4d93.

   * *note PyObject_RichCompareBool(): 1c43.

   * *note PyObject_SelfIter(): 4ef4.

   * *note PyObject_SetAttr(): 4ef5.

   * *note PyObject_SetAttrString(): 18d5.

   * *note PyObject_SetItem(): 4dd3.

   * *note PyObject_Size(): 4ef6.

   * *note PyObject_Str(): 1226.

   * *note PyObject_Type(): 4ef7.

   * *note PyObject_Vectorcall(): 773.

   * *note PyObject_VectorcallMethod(): 774.

   * *note PyProperty_Type: 4ef8.

   * ‘PyRangeIter_Type’

   * ‘PyRange_Type’

   * ‘PyReversed_Type’

   * *note PySeqIter_New(): 4ef9.

   * *note PySeqIter_Type: 4efa.

   * *note PySequence_Check(): 4efb.

   * *note PySequence_Concat(): 4efc.

   * *note PySequence_Contains(): 3d6.

   * *note PySequence_Count(): 4efd.

   * *note PySequence_DelItem(): 1ceb.

   * *note PySequence_DelSlice(): 4efe.

   * *note PySequence_Fast(): 1802.

   * *note PySequence_GetItem(): 1ce9.

   * *note PySequence_GetSlice(): 4eff.

   * *note PySequence_In(): 3d5.

   * *note PySequence_InPlaceConcat(): 4f00.

   * *note PySequence_InPlaceRepeat(): 4f01.

   * *note PySequence_Index(): 4f02.

   * *note PySequence_Length(): 4f03.

   * *note PySequence_List(): 4f04.

   * *note PySequence_Repeat(): 4f05.

   * *note PySequence_SetItem(): 1cea.

   * *note PySequence_SetSlice(): 4f06.

   * *note PySequence_Size(): 1ce8.

   * *note PySequence_Tuple(): 4f07.

   * ‘PySetIter_Type’

   * *note PySet_Add(): 1637.

   * *note PySet_Clear(): 4f08.

   * *note PySet_Contains(): 1639.

   * *note PySet_Discard(): 1638.

   * *note PySet_New(): 1635.

   * *note PySet_Pop(): 4f09.

   * *note PySet_Size(): 163a.

   * *note PySet_Type: 4f0a.

   * *note PySlice_AdjustIndices(): 430.

   * *note PySlice_GetIndices(): 4f0b.

   * *note PySlice_GetIndicesEx(): 42e.

   * *note PySlice_New(): 4f0c.

   * *note PySlice_Type: 4f0d.

   * *note PySlice_Unpack(): 42f.

   * *note PyState_AddModule(): 4f0e.

   * *note PyState_FindModule(): 4f0f.

   * *note PyState_RemoveModule(): 4f10.

   * *note PyStructSequence_Desc: da8.

   * *note PyStructSequence_Field: da7.

   * *note PyStructSequence_GetItem(): 4f11.

   * *note PyStructSequence_New(): 4f12.

   * *note PyStructSequence_NewType(): 4f13.

   * *note PyStructSequence_SetItem(): 4f14.

   * *note PyStructSequence_UnnamedField: b6f.

   * ‘PySuper_Type’

   * *note PySys_Audit(): 607.

   * *note PySys_AuditTuple(): 606.

   * *note PySys_FormatStderr(): 4f15.

   * *note PySys_FormatStdout(): 4f16.

   * *note PySys_GetObject(): 61e.

   * *note PySys_GetXOptions(): 4f17.

   * *note PySys_ResetWarnOptions(): 3f1.

   * *note PySys_SetArgv(): 18fa.

   * *note PySys_SetArgvEx(): 18f9.

   * *note PySys_SetObject(): 4f18.

   * *note PySys_WriteStderr(): 4f19.

   * *note PySys_WriteStdout(): 4f1a.

   * *note PyThreadState: 985.

   * *note PyThreadState_Clear(): 18d7.

   * *note PyThreadState_Delete(): 1c40.

   * *note PyThreadState_Get(): 609.

   * *note PyThreadState_GetDict(): 4f1b.

   * *note PyThreadState_GetFrame(): 986.

   * *note PyThreadState_GetID(): b60.

   * *note PyThreadState_GetInterpreter(): b5f.

   * *note PyThreadState_New(): 4f1c.

   * *note PyThreadState_SetAsyncExc(): db1.

   * *note PyThreadState_Swap(): 4f1d.

   * ‘PyThread_GetInfo()’

   * *note PyThread_ReInitTLS(): 43e.

   * ‘PyThread_acquire_lock()’

   * ‘PyThread_acquire_lock_timed()’

   * ‘PyThread_allocate_lock()’

   * *note PyThread_create_key(): 434.

   * *note PyThread_delete_key(): 436.

   * *note PyThread_delete_key_value(): 43c.

   * ‘PyThread_exit_thread()’

   * ‘PyThread_free_lock()’

   * *note PyThread_get_key_value(): 43a.

   * ‘PyThread_get_stacksize()’

   * ‘PyThread_get_thread_ident()’

   * ‘PyThread_get_thread_native_id()’

   * ‘PyThread_init_thread()’

   * ‘PyThread_release_lock()’

   * *note PyThread_set_key_value(): 438.

   * ‘PyThread_set_stacksize()’

   * ‘PyThread_start_new_thread()’

   * *note PyThread_tss_alloc(): 435.

   * *note PyThread_tss_create(): 4f1e.

   * *note PyThread_tss_delete(): 43d.

   * *note PyThread_tss_free(): 437.

   * *note PyThread_tss_get(): 43b.

   * *note PyThread_tss_is_created(): 4f1f.

   * *note PyThread_tss_set(): 439.

   * ‘PyTraceBack_Here()’

   * ‘PyTraceBack_Print()’

   * ‘PyTraceBack_Type’

   * ‘PyTupleIter_Type’

   * *note PyTuple_GetItem(): 4d58.

   * *note PyTuple_GetSlice(): 4f20.

   * *note PyTuple_New(): 632.

   * *note PyTuple_Pack(): 4f21.

   * *note PyTuple_SetItem(): 4d59.

   * *note PyTuple_Size(): 4f22.

   * *note PyTuple_Type: 4f23.

   * *note PyTypeObject: c8f.

   * *note PyType_ClearCache(): 4f24.

   * *note PyType_Freeze(): 3ac.

   * *note PyType_FromMetaclass(): 767.

   * *note PyType_FromModuleAndSpec(): 768.

   * *note PyType_FromSpec(): 792.

   * *note PyType_FromSpecWithBases(): 793.

   * *note PyType_GenericAlloc(): c55.

   * *note PyType_GenericNew(): 4d6d.

   * *note PyType_GetBaseByToken(): 3ad.

   * *note PyType_GetFlags(): 1bf7.

   * *note PyType_GetFullyQualifiedName(): 60a.

   * *note PyType_GetModule(): b5c.

   * *note PyType_GetModuleByDef(): 629.

   * *note PyType_GetModuleName(): 60c.

   * *note PyType_GetModuleState(): b5d.

   * *note PyType_GetName(): 94d.

   * *note PyType_GetQualName(): 94e.

   * *note PyType_GetSlot(): a92.

   * *note PyType_GetTypeDataSize(): 761.

   * *note PyType_IsSubtype(): 4f25.

   * *note PyType_Modified(): 1a97.

   * *note PyType_Ready(): 975.

   * *note PyType_Slot: 4f26.

   * *note PyType_Spec: 19c8.

   * *note PyType_Type: 764.

   * *note PyUnicodeDecodeError_Create(): 4f27.

   * *note PyUnicodeDecodeError_GetEncoding(): 4f28.

   * *note PyUnicodeDecodeError_GetEnd(): 4f29.

   * *note PyUnicodeDecodeError_GetObject(): 4f2a.

   * *note PyUnicodeDecodeError_GetReason(): 4f2b.

   * *note PyUnicodeDecodeError_GetStart(): 4f2c.

   * *note PyUnicodeDecodeError_SetEnd(): 4f2d.

   * *note PyUnicodeDecodeError_SetReason(): 4f2e.

   * *note PyUnicodeDecodeError_SetStart(): 4f2f.

   * *note PyUnicodeEncodeError_GetEncoding(): 4f30.

   * *note PyUnicodeEncodeError_GetEnd(): 1851.

   * *note PyUnicodeEncodeError_GetObject(): 4f31.

   * *note PyUnicodeEncodeError_GetReason(): 4f32.

   * *note PyUnicodeEncodeError_GetStart(): 1854.

   * *note PyUnicodeEncodeError_SetEnd(): 4f33.

   * *note PyUnicodeEncodeError_SetReason(): 4f34.

   * *note PyUnicodeEncodeError_SetStart(): 4f35.

   * *note PyUnicodeIter_Type: 4f36.

   * *note PyUnicodeTranslateError_GetEnd(): 4f37.

   * *note PyUnicodeTranslateError_GetObject(): 4f38.

   * *note PyUnicodeTranslateError_GetReason(): 4f39.

   * *note PyUnicodeTranslateError_GetStart(): 4f3a.

   * *note PyUnicodeTranslateError_SetEnd(): 4f3b.

   * *note PyUnicodeTranslateError_SetReason(): 4f3c.

   * *note PyUnicodeTranslateError_SetStart(): 4f3d.

   * *note PyUnicode_Append(): 4f3e.

   * *note PyUnicode_AppendAndDel(): 4f3f.

   * *note PyUnicode_AsASCIIString(): 138e.

   * *note PyUnicode_AsCharmapString(): 4f40.

   * ‘PyUnicode_AsDecodedObject()’

   * ‘PyUnicode_AsDecodedUnicode()’

   * ‘PyUnicode_AsEncodedObject()’

   * *note PyUnicode_AsEncodedString(): 4f41.

   * ‘PyUnicode_AsEncodedUnicode()’

   * *note PyUnicode_AsLatin1String(): 138d.

   * *note PyUnicode_AsMBCSString(): 138f.

   * *note PyUnicode_AsRawUnicodeEscapeString(): 138c.

   * *note PyUnicode_AsUCS4(): 1374.

   * *note PyUnicode_AsUCS4Copy(): aae.

   * *note PyUnicode_AsUTF16String(): 4f42.

   * *note PyUnicode_AsUTF32String(): 4f43.

   * *note PyUnicode_AsUTF8AndSize(): a8f.

   * *note PyUnicode_AsUTF8String(): 138a.

   * *note PyUnicode_AsUnicodeEscapeString(): 138b.

   * *note PyUnicode_AsWideChar(): 1ced.

   * *note PyUnicode_AsWideCharString(): aaf.

   * *note PyUnicode_BuildEncodingMap(): 19a0.

   * *note PyUnicode_Compare(): aaa.

   * *note PyUnicode_CompareWithASCIIString(): 1463.

   * *note PyUnicode_Concat(): 139d.

   * *note PyUnicode_Contains(): 4f44.

   * *note PyUnicode_Count(): 4f45.

   * *note PyUnicode_Decode(): 1c7e.

   * *note PyUnicode_DecodeASCII(): 4f46.

   * *note PyUnicode_DecodeCharmap(): 4f47.

   * *note PyUnicode_DecodeCodePageStateful(): 4f48.

   * *note PyUnicode_DecodeFSDefault(): 19c7.

   * *note PyUnicode_DecodeFSDefaultAndSize(): 4f49.

   * *note PyUnicode_DecodeLatin1(): 4f4a.

   * *note PyUnicode_DecodeLocale(): 4f4b.

   * *note PyUnicode_DecodeLocaleAndSize(): db6.

   * *note PyUnicode_DecodeMBCS(): 4f4c.

   * *note PyUnicode_DecodeMBCSStateful(): 4f4d.

   * *note PyUnicode_DecodeRawUnicodeEscape(): 4f4e.

   * *note PyUnicode_DecodeUTF16(): 4f4f.

   * *note PyUnicode_DecodeUTF16Stateful(): 4f50.

   * *note PyUnicode_DecodeUTF32(): 4f51.

   * *note PyUnicode_DecodeUTF32Stateful(): 4f52.

   * *note PyUnicode_DecodeUTF7(): 4f53.

   * *note PyUnicode_DecodeUTF7Stateful(): 4f54.

   * *note PyUnicode_DecodeUTF8(): 4f55.

   * *note PyUnicode_DecodeUTF8Stateful(): 1a48.

   * *note PyUnicode_DecodeUnicodeEscape(): 4f56.

   * *note PyUnicode_EncodeCodePage(): 1390.

   * *note PyUnicode_EncodeFSDefault(): 1ce7.

   * *note PyUnicode_EncodeLocale(): db7.

   * *note PyUnicode_Equal(): 3af.

   * *note PyUnicode_EqualToUTF8(): 60e.

   * *note PyUnicode_EqualToUTF8AndSize(): 60d.

   * *note PyUnicode_FSConverter(): f09.

   * *note PyUnicode_FSDecoder(): 78c.

   * *note PyUnicode_Find(): 4f57.

   * *note PyUnicode_FindChar(): aac.

   * *note PyUnicode_Format(): 4f58.

   * *note PyUnicode_FromEncodedObject(): 4f59.

   * *note PyUnicode_FromFormat(): 61f.

   * *note PyUnicode_FromFormatV(): 789.

   * *note PyUnicode_FromObject(): 4f5a.

   * *note PyUnicode_FromOrdinal(): 4f5b.

   * *note PyUnicode_FromString(): 4f5c.

   * *note PyUnicode_FromStringAndSize(): 4f5d.

   * *note PyUnicode_FromWideChar(): 1388.

   * *note PyUnicode_GetDefaultEncoding(): 4f5e.

   * *note PyUnicode_GetLength(): aa6.

   * *note PyUnicode_InternFromString(): 18d3.

   * *note PyUnicode_InternInPlace(): aa4.

   * *note PyUnicode_IsIdentifier(): 1c3d.

   * *note PyUnicode_Join(): 139e.

   * *note PyUnicode_Partition(): 17fc.

   * *note PyUnicode_RPartition(): 17fd.

   * *note PyUnicode_RSplit(): 17fb.

   * *note PyUnicode_ReadChar(): 136d.

   * *note PyUnicode_Replace(): 4f5f.

   * *note PyUnicode_Resize(): 4f60.

   * *note PyUnicode_RichCompare(): 4f61.

   * *note PyUnicode_Split(): 4f62.

   * *note PyUnicode_Splitlines(): 4f63.

   * *note PyUnicode_Substring(): aa9.

   * *note PyUnicode_Tailmatch(): aab.

   * *note PyUnicode_Translate(): 4f64.

   * *note PyUnicode_Type: 4f65.

   * *note PyUnicode_WriteChar(): 136e.

   * *note PyVarObject: 4566.

   * ‘PyVarObject.ob_base’

   * *note PyVarObject.ob_size: 4f66.

   * *note PyVectorcall_Call(): 76d.

   * *note PyVectorcall_NARGS(): 76c.

   * ‘PyWeakReference’

   * *note PyWeakref_GetObject(): 3da.

   * *note PyWeakref_GetRef(): 3dc.

   * *note PyWeakref_NewProxy(): 4f67.

   * *note PyWeakref_NewRef(): 1af3.

   * ‘PyWrapperDescr_Type’

   * *note PyWrapper_New(): 4f68.

   * ‘PyZip_Type’

   * *note Py_AddPendingCall(): b6e.

   * *note Py_AtExit(): 4f69.

   * *note Py_BEGIN_ALLOW_THREADS: 4d5e.

   * *note Py_BLOCK_THREADS: 4f6a.

   * *note Py_BuildValue(): 3bf.

   * *note Py_BytesMain(): bae.

   * *note Py_CompileString(): a7b.

   * *note Py_DecRef(): 4f6b.

   * *note Py_DecodeLocale(): db4.

   * *note Py_END_ALLOW_THREADS: c73.

   * *note Py_EncodeLocale(): db5.

   * *note Py_EndInterpreter(): 17ae.

   * *note Py_EnterRecursiveCall(): 3cf.

   * *note Py_Exit(): f3f.

   * *note Py_FatalError(): b70.

   * ‘Py_FileSystemDefaultEncodeErrors’

   * ‘Py_FileSystemDefaultEncoding’

   * *note Py_Finalize(): 45c.

   * *note Py_FinalizeEx(): f05.

   * *note Py_GenericAlias(): 4f6c.

   * *note Py_GenericAliasType: 4f6d.

   * *note Py_GetBuildInfo(): 1623.

   * *note Py_GetCompiler(): 4f6e.

   * *note Py_GetConstant(): 5ed.

   * *note Py_GetConstantBorrowed(): 5ee.

   * *note Py_GetCopyright(): 4f6f.

   * *note Py_GetExecPrefix(): 3e6.

   * *note Py_GetPath(): 3e0.

   * *note Py_GetPlatform(): 4f70.

   * *note Py_GetPrefix(): 3e2.

   * *note Py_GetProgramFullPath(): 3e9.

   * *note Py_GetProgramName(): 3eb.

   * *note Py_GetPythonHome(): 3ec.

   * ‘Py_GetRecursionLimit()’

   * *note Py_GetVersion(): 4f71.

   * ‘Py_HasFileSystemDefaultEncoding’

   * *note Py_IncRef(): 4f72.

   * *note Py_Initialize(): 45d.

   * *note Py_InitializeEx(): 4f73.

   * *note Py_Is(): a96.

   * *note Py_IsFalse(): a99.

   * *note Py_IsFinalizing(): 5f1.

   * *note Py_IsInitialized(): 4ddd.

   * *note Py_IsNone(): a97.

   * *note Py_IsTrue(): a98.

   * *note Py_LeaveRecursiveCall(): b61.

   * *note Py_Main(): e12.

   * ‘Py_MakePendingCalls()’

   * *note Py_NewInterpreter(): 1a5f.

   * *note Py_NewRef(): a90.

   * *note Py_PACK_FULL_VERSION(): 37d.

   * *note Py_PACK_VERSION(): 37c.

   * *note Py_REFCNT(): 2ce.

   * *note Py_ReprEnter(): 4f74.

   * *note Py_ReprLeave(): 4f75.

   * *note Py_SetProgramName(): 18f8.

   * *note Py_SetPythonHome(): 18f7.

   * ‘Py_SetRecursionLimit()’

   * *note Py_TYPE(): 3c6.

   * *note Py_UCS4: 33b.

   * *note Py_UNBLOCK_THREADS: 4f76.

   * ‘Py_UTF8Mode’

   * *note Py_VaBuildValue(): 4f77.

   * *note Py_Version: 37e.

   * *note Py_XNewRef(): a91.

   * *note Py_buffer: 951.

   * ‘Py_intptr_t’

   * *note Py_ssize_t: c49.

   * ‘Py_uintptr_t’

   * *note allocfunc: 4f78.

   * *note binaryfunc: 4f79.

   * *note descrgetfunc: 4f7a.

   * *note descrsetfunc: 4f7b.

   * *note destructor: 4f7c.

   * *note getattrfunc: 4f7d.

   * *note getattrofunc: 4f7e.

   * *note getbufferproc: 4f7f.

   * *note getiterfunc: 4f80.

   * *note getter: 4f81.

   * *note hashfunc: 4f82.

   * *note initproc: 4f83.

   * *note inquiry: 4f84.

   * *note iternextfunc: 4f85.

   * *note lenfunc: 4f86.

   * *note newfunc: 4f87.

   * *note objobjargproc: 4f88.

   * *note objobjproc: 4f89.

   * *note releasebufferproc: 4f8a.

   * *note reprfunc: 4f8b.

   * *note richcmpfunc: 4f8c.

   * *note setattrfunc: 4f8d.

   * *note setattrofunc: 4f8e.

   * *note setter: 4f8f.

   * *note ssizeargfunc: 4f90.

   * *note ssizeobjargproc: 4f91.

   * ‘ssizessizeargfunc’

   * ‘ssizessizeobjargproc’

   * ‘symtable’

   * *note ternaryfunc: 4f92.

   * *note traverseproc: 4f93.

   * *note unaryfunc: 4f94.

   * *note vectorcallfunc: 76e.

   * *note visitproc: 4f95.


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:
4f9a, *note Py_file_input: 4f9b. e *note Py_single_input: 4f9c.  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(): 4f9e. 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(): 4f9e. 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(): 4f9e. 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(): 4fa1, caso
     contrário, retorna o resultado de *note PyRun_SimpleFile(): 4dae.
     'filename' é decodificado da codificação do sistema de arquivos
     (*note sys.getfilesystemencoding(): e47.).  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(): 4fa2. abaixo, deixando o argumento *note
     PyCompilerFlags: c8b.* 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: f30. não tratada for
     levantada, esta função não retornará ‘-1’, mas sairá do processo,
     desde que *note PyConfig.inspect: 3fe. seja zero.

 -- C Função: int PyRun_SimpleFile (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_SimpleFileExFlags(): 1bab. 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(): 1bab. 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(): 4fa2, 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:
     752.  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_InteractiveOne (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_InteractiveOneFlags(): 4fa5. abaixo, deixando 'flags'
     definido como ‘NULL’.

 -- C Função: int PyRun_InteractiveOneFlags (FILE *fp, const char
          *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' é
     decodificado a partir do *note tratador de erros e codificação do
     sistema de arquivos: 752.

     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_InteractiveLoop (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_InteractiveLoopFlags(): 4fa6. 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:
     752.  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: 76a.'  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: 163.

 -- 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: bf. 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(): 625. ou *note PyMem_RawRealloc(): 627, ou ‘NULL’
     se ocorrer um erro.

     Alterado na versão 3.4: O resultado deve ser alocado por *note
     PyMem_RawMalloc(): 625. ou *note PyMem_RawRealloc(): 627, em vez de
     ser alocado por *note PyMem_Malloc(): e54. ou *note
     PyMem_Realloc(): 1228.

     Alterado na versão 3.12: Esta função só é chamada pelo *note
     interpretador principal: 163.

 -- C Função: *note PyObject: 5d5. *PyRun_String (const char *str, int
          start, PyObject *globals, PyObject *locals)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note PyRun_StringFlags(): 4fa7. abaixo, deixando
     'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 5d5. *PyRun_StringFlags (const char *str,
          int start, PyObject *globals, PyObject *locals,
          PyCompilerFlags *flags)
     'Retorna valor: Nova referência.'  Executa 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 seguintes: *note
     Py_eval_input: 4f9a, *note Py_file_input: 4f9b. ou *note
     Py_single_input: 4f9c.

     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: 5d5. *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(): 4fa9. abaixo, deixando
     'closeit' definido como ‘0’ e 'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 5d5. *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(): 4fa9. abaixo, deixando
     'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 5d5. *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(): 4fa9. abaixo, deixando
     'closeit' definido como ‘0’.

 -- C Função: *note PyObject: 5d5. *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(): 4fa7, 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: 752.  Se 'closeit' for true, o
     arquivo será fechado antes que *note PyRun_FileExFlags(): 4fa9.
     retorne.

 -- C Função: *note PyObject: 5d5. *Py_CompileString (const char *str,
          const char *filename, int start)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Esta é uma interface simplificada para *note
     Py_CompileStringFlags(): 4fac. abaixo, deixando 'flags' definido
     como ‘NULL’.

 -- C Função: *note PyObject: 5d5. *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(): 4fad. abaixo,
     com 'optimize' definido como ‘-1’.

 -- C Função: *note PyObject: 5d5. *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
     Py_eval_input: 4f9a, *note Py_file_input: 4f9b. ou *note
     Py_single_input: 4f9c.  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:
     18e.  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: 18c.  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: 5d5. *Py_CompileStringExFlags (const char
          *str, const char *filename, int start, PyCompilerFlags *flags,
          int optimize)
     'Retorna valor: Nova referência.'  Como *note
     Py_CompileStringObject(): 4fae, mas 'filename' é uma string de
     bytes decodificada a partir do *note tratador de erros e
     codificação do sistema de arquivos: 752.

     Adicionado na versão 3.2.

 -- C Função: *note PyObject: 5d5. *PyEval_EvalCode (PyObject *co,
          PyObject *globals, PyObject *locals)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Esta é uma interface simplificada para *note
     PyEval_EvalCodeEx(): 1a12, 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: 5d5. *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:
     76a.'  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: 59e. e uma
     tupla de clausura de células.

 -- C Função: *note PyObject: 5d5. *PyEval_EvalFrame (PyFrameObject *f)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Avalia um quadro de execução.  Esta é uma interface
     simplificada para *note PyEval_EvalFrameEx(): 1224, para
     retrocompatibilidade.

 -- C Função: *note PyObject: 5d5. *PyEval_EvalFrameEx (PyFrameObject
          *f, int throwflag)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 711. 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 Variável: int Py_eval_input

     O símbolo inicial da gramática Python para expressões isoladas;
     para uso com *note Py_CompileString(): a7b.

 -- 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(): a7b.  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(): a7b.  Este é o símbolo usado
     para o laço do interpretador interativo.

 -- 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:
     4fb0. é 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: 4fb0.

     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: 2455. 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:
     4fb6, para habilitar recursos normalmente selecionáveis usando
     *note instruções future: 45a.  Consulte *note Sinalizadores de
     objetos código: 4fb7. para obter uma lista completa.


File: python.info,  Node: Contagem de referências,  Next: Tratamento de Exceções,  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: c49. Py_REFCNT (PyObject *o)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  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: 28f. e têm uma refcount 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(): a9e. para definir uma contagem
     de referências de um objeto.

          Nota: On *note free threaded: 1f3. builds of Python, returning
          1 isn’t sufficient to determine if it’s safe to treat 'o' as
          having no access by other threads.  Use *note
          PyUnstable_Object_IsUniquelyReferenced(): 3c3. for that
          instead.

          Veja também a função *note
          PyUnstable_Object_IsUniqueReferencedTemporary(): 3c4.

     Alterado na versão 3.10: *note Py_REFCNT(): 2ce. is changed to the
     inline static function.

     Alterado na versão 3.11: The parameter type is no longer const
     *note PyObject: 5d5.*.

 -- 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: 2016,
     se 'refcnt' for maior que ‘UINT32_MAX’, o objeto será transformado
     em *note imortal: 28f.

     Esta função não tem efeito sobre objetos *note imortais: 28f.

     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: 5d8. to object 'o',
     indicating it is in use and should not be destroyed.

     Esta função não tem efeito sobre objetos *note imortais: 28f.

     Esta função é geralmente usada para transformar uma *note
     referência emprestada: 3d4. em uma *note referência forte: 5d8.
     local.  A função *note Py_NewRef(): a90. pode ser usada para criar
     uma nova *note referência forte: 5d8.

     When done using the object, release is by calling *note
     Py_DECREF(): 785.

     The object must not be ‘NULL’; if you aren’t sure that it isn’t
     ‘NULL’, use *note Py_XINCREF(): c4e.

     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(): 784, mas o objeto 'o' pode ser
     ‘NULL’, caso em que isso não tem efeito.

     Veja também *note Py_XNewRef(): a91.

 -- C Função: *note PyObject: 5d5. *Py_NewRef (PyObject *o)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Create a
     new *note strong reference: 5d8. to an object: call *note
     Py_INCREF(): 784. on 'o' and return the object 'o'.

     When the *note strong reference: 5d8. is no longer needed, *note
     Py_DECREF(): 785. should be called on it to release the reference.

     The object 'o' must not be ‘NULL’; use *note Py_XNewRef(): a91. 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(): 784.

     Adicionado na versão 3.10.

 -- C Função: *note PyObject: 5d5. *Py_XNewRef (PyObject *o)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'
     Semelhante a *note Py_NewRef(): a90, 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: 5d8. to object 'o', indicating
     the reference is no longer used.

     Esta função não tem efeito sobre objetos *note imortais: 28f.

     Once the last *note strong reference: 5d8. 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:
     5d8. before exiting its scope.

     The object must not be ‘NULL’; if you aren’t sure that it isn’t
     ‘NULL’, use *note Py_XDECREF(): 987.

     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__(): 11f3. 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(): 785. 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(): 785. 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(): 785, but the object 'o' can be
     ‘NULL’, in which case this has no effect.  The same warning from
     *note Py_DECREF(): 785. applies here as well.

 -- C Função: void Py_CLEAR (PyObject *o)

     Release a *note strong reference: 5d8. 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(): 785, except that the
     argument is also set to ‘NULL’.  The warning for *note Py_DECREF():
     785. 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: 76a.'  Indicate taking a new *note
     strong reference: 5d8. to object 'o'.  A function version of *note
     Py_XINCREF(): c4e.  It can be used for runtime dynamic embedding of
     Python.

 -- C Função: void Py_DecRef (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  Release a *note strong
     reference: 5d8. to object 'o'.  A function version of *note
     Py_XDECREF(): 987.  It can be used for runtime dynamic embedding of
     Python.

 -- C Macro: Py_SETREF (dst, src)

     Macro safely releasing a *note strong reference: 5d8. to object
     'dst' and setting 'dst' to 'src'.

     As in case of *note Py_CLEAR(): 78d, “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: 78e. macro that uses *note
     Py_XDECREF(): 987. instead of *note Py_DECREF(): 785.

     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,  Next: Definindo módulos de extensão,  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(): 88f.  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::
* Lançando exceções::
* Emitindo advertências::
* 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::


File: python.info,  Node: Impressão e limpeza,  Next: Lançando exceções,  Up: Tratamento de Exceções

7.5.1 Impressão e limpeza
-------------------------

 -- C Função: void PyErr_Clear ()
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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!

     If 'set_sys_last_vars' is nonzero, the variable *note sys.last_exc:
     6da. is set to the printed exception.  For backwards compatibility,
     the deprecated variables *note sys.last_type: 6db, *note
     sys.last_value: 6dc. and *note sys.last_traceback: 6dd. are also
     set to the type, value and traceback of this exception,
     respectively.

     Alterado na versão 3.12: The setting of *note sys.last_exc: 6da.
     was added.

 -- C Função: void PyErr_Print ()
     ' Parte da *note ABI Estável: 76a.'  Apelido para
     ‘PyErr_PrintEx(1)’.

 -- C Função: void PyErr_WriteUnraisable (PyObject *obj)
     ' Parte da *note ABI Estável: 76a.'  Chama *note
     sys.unraisablehook(): 501. 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__(): 11f3.

     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(): 501.

 -- C Função: void PyErr_FormatUnraisable (const char *format, ...)

     Similar to *note PyErr_WriteUnraisable(): 5e6, but the 'format' and
     subsequent parameters help format the warning message; they have
     the same meaning and values as in *note PyUnicode_FromFormat():
     61f.  ‘PyErr_WriteUnraisable(obj)’ is roughly equivalent to
     ‘PyErr_FormatUnraisable("Exception ignored in: %R", obj)’.  If
     'format' is ‘NULL’, only the traceback is printed.

     Adicionado na versão 3.13.

 -- C Função: void PyErr_DisplayException (PyObject *exc)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'  Print the
     standard traceback display of ‘exc’ to ‘sys.stderr’, including
     chained exceptions and notes.

     Adicionado na versão 3.12.


File: python.info,  Node: Lançando exceções,  Next: Emitindo advertências,  Prev: Impressão e limpeza,  Up: Tratamento de Exceções

7.5.2 Lançando 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: 76a.'  This is the most common way to
     set the error indicator.  The first argument specifies the
     exception type; it is normally one of the standard exceptions, e.g.
     *note PyExc_RuntimeError: 4e73.  You need not create a new *note
     strong reference: 5d8. to it (e.g.  with *note Py_INCREF(): 784.).
     The second argument is an error message; it is decoded from
     ‘'utf-8'’.

 -- C Função: void PyErr_SetObject (PyObject *type, PyObject *value)
     ' Parte da *note ABI Estável: 76a.'  Essa função é semelhante à
     *note PyErr_SetString(): 791. mas permite especificar um objeto
     Python arbitrário para o valor da exceção.

 -- C Função: *note PyObject: 5d5. *PyErr_Format (PyObject *exception,
          const char *format, ...)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'
     This function sets the error indicator and returns ‘NULL’.
     'exception' should be a Python exception class.  The 'format' and
     subsequent parameters help format the error message; they have the
     same meaning and values as in *note PyUnicode_FromFormat(): 61f.
     'format' is an ASCII-encoded string.

 -- C Função: *note PyObject: 5d5. *PyErr_FormatV (PyObject *exception,
          const char *format, va_list vargs)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.
     desde a versão 3.5.'  Igual a *note PyErr_Format(): 10a7, 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: 76a.'  Isso é uma abreviação para
     ‘PyErr_SetObject(type, Py_None)’.

 -- C Função: int PyErr_BadArgument ()
     ' Parte da *note ABI Estável: 76a.'  This is a shorthand for
     ‘PyErr_SetString(PyExc_TypeError, message)’, where 'message'
     indicates that a built-in operation was invoked with an illegal
     argument.  It is mostly for internal use.

 -- C Função: *note PyObject: 5d5. *PyErr_NoMemory ()
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'
     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: 5d5. *PyErr_SetFromErrno (PyObject *type)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'

     This is a convenience function to raise an exception when a C
     library function has returned an error and set the C variable
     ‘errno’.  It constructs a tuple object whose first item is the
     integer ‘errno’ value and whose second item is the corresponding
     error message (gotten from ‘strerror()’), and then calls
     ‘PyErr_SetObject(type, object)’.  On Unix, when the ‘errno’ value
     is ‘EINTR’, indicating an interrupted system call, this calls *note
     PyErr_CheckSignals(): 688, and if that set the error indicator,
     leaves it set to that.  The function always returns ‘NULL’, so a
     wrapper function around a system call can write ‘return
     PyErr_SetFromErrno(type);’ when the system call returns an error.

 -- C Função: *note PyObject: 5d5. *PyErr_SetFromErrnoWithFilenameObject
          (PyObject *type, PyObject *filenameObject)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'
     Similar to *note PyErr_SetFromErrno(): 4d39, with the additional
     behavior that if 'filenameObject' is not ‘NULL’, it is passed to
     the constructor of 'type' as a third parameter.  In the case of
     *note OSError: 2bf. exception, this is used to define the
     ‘filename’ attribute of the exception instance.

 -- C Função: *note PyObject: 5d5.
          *PyErr_SetFromErrnoWithFilenameObjects (PyObject *type,
          PyObject *filenameObject, PyObject *filenameObject2)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.
     desde a versão 3.7.'  Similar to *note
     PyErr_SetFromErrnoWithFilenameObject(): 4e3a, but takes a second
     filename object, for raising errors when a function that takes two
     filenames fails.

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 5d5. *PyErr_SetFromErrnoWithFilename
          (PyObject *type, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'
     Similar to *note PyErr_SetFromErrnoWithFilenameObject(): 4e3a, but
     the filename is given as a C string.  'filename' is decoded from
     the *note filesystem encoding and error handler: 752.

 -- C Função: *note PyObject: 5d5. *PyErr_SetFromWindowsErr (int ierr)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  This is a convenience function to
     raise *note OSError: 2bf.  If called with 'ierr' of ‘0’, the error
     code returned by a call to ‘GetLastError()’ is used instead.  It
     calls the Win32 function ‘FormatMessage()’ to retrieve the Windows
     description of error code given by 'ierr' or ‘GetLastError()’, then
     it constructs a *note OSError: 2bf. object with the *note winerror:
     2582. attribute set to the error code, the *note strerror: 2583.
     attribute set to the corresponding error message (gotten from
     ‘FormatMessage()’), and then calls ‘PyErr_SetObject(PyExc_OSError,
     object)’.  This function always returns ‘NULL’.

     *note Disponibilidade: 1fed.: Windows.

 -- C Função: *note PyObject: 5d5. *PyErr_SetExcFromWindowsErr (PyObject
          *type, int ierr)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  Similar to *note
     PyErr_SetFromWindowsErr(): 4e3c, with an additional parameter
     specifying the exception type to be raised.

     *note Disponibilidade: 1fed.: Windows.

 -- C Função: *note PyObject: 5d5. *PyErr_SetFromWindowsErrWithFilename
          (int ierr, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  Similar to *note
     PyErr_SetFromWindowsErr(): 4e3c, with the additional behavior that
     if 'filename' is not ‘NULL’, it is decoded from the filesystem
     encoding (*note os.fsdecode(): e42.) and passed to the constructor
     of *note OSError: 2bf. as a third parameter to be used to define
     the ‘filename’ attribute of the exception instance.

     *note Disponibilidade: 1fed.: Windows.

 -- C Função: *note PyObject: 5d5.
          *PyErr_SetExcFromWindowsErrWithFilenameObject (PyObject *type,
          int ierr, PyObject *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  Similar to *note
     PyErr_SetExcFromWindowsErr(): 4e37, with the additional behavior
     that if 'filename' is not ‘NULL’, it is passed to the constructor
     of *note OSError: 2bf. as a third parameter to be used to define
     the ‘filename’ attribute of the exception instance.

     *note Disponibilidade: 1fed.: Windows.

 -- C Função: *note PyObject: 5d5.
          *PyErr_SetExcFromWindowsErrWithFilenameObjects (PyObject
          *type, int ierr, PyObject *filename, PyObject *filename2)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  Similar à *note
     PyErr_SetExcFromWindowsErrWithFilenameObject(): 4e38, mas aceita um
     segundo caminho do objeto.

     *note Disponibilidade: 1fed.: Windows.

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 5d5.
          *PyErr_SetExcFromWindowsErrWithFilename (PyObject *type, int
          ierr, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a. on
     Windows desde a versão 3.7.'  Similar à *note
     PyErr_SetFromWindowsErrWithFilename(): 19c6, com um parâmetro
     adicional especificando o tipo de exceção a ser gerado.

     *note Disponibilidade: 1fed.: Windows.

 -- C Função: *note PyObject: 5d5. *PyErr_SetImportError (PyObject *msg,
          PyObject *name, PyObject *path)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.
     desde a versão 3.7.'  This is a convenience function to raise *note
     ImportError: 64f.  'msg' will be set as the exception’s message
     string.  'name' and 'path', both of which can be ‘NULL’, will be
     set as the *note ImportError: 64f.’s respective ‘name’ and ‘path’
     attributes.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *PyErr_SetImportErrorSubclass
          (PyObject *exception, PyObject *msg, PyObject *name, PyObject
          *path)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.
     desde a versão 3.6.'  Muito parecido com *note
     PyErr_SetImportError(): f2d. mas a função permite especificar uma
     subclasse de *note ImportError: 64f. para levantar uma exceção.

     Adicionado na versão 3.6.

 -- C Função: void PyErr_SyntaxLocationObject (PyObject *filename, int
          lineno, int col_offset)

     Set file, line, and offset information for the current exception.
     If the current exception is not a *note SyntaxError: 18e, then it
     sets additional attributes, which make the exception printing
     subsystem think the exception is a *note SyntaxError: 18e.

     Adicionado na versão 3.4.

 -- C Função: void PyErr_SyntaxLocationEx (const char *filename, int
          lineno, int col_offset)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Like *note
     PyErr_SyntaxLocationObject(): 4fc1, but 'filename' is a byte string
     decoded from the *note filesystem encoding and error handler: 752.

     Adicionado na versão 3.2.

 -- C Função: void PyErr_SyntaxLocation (const char *filename, int
          lineno)
     ' Parte da *note ABI Estável: 76a.'  Like *note
     PyErr_SyntaxLocationEx(): 4e40, but the 'col_offset' parameter is
     omitted.

 -- C Função: void PyErr_BadInternalCall ()
     ' Parte da *note ABI Estável: 76a.'  This is a shorthand for
     ‘PyErr_SetString(PyExc_SystemError, message)’, where 'message'
     indicates that an internal operation (e.g.  a Python/C API
     function) was invoked with an illegal argument.  It is mostly for
     internal use.


File: python.info,  Node: Emitindo advertências,  Next: Consultando o indicador de erro,  Prev: Lançando exceções,  Up: Tratamento de Exceções

7.5.3 Emitindo advertências
---------------------------

Use these functions to issue warnings from C code.  They mirror similar
functions exported by the Python *note warnings: 118. module.  They
normally print a warning message to 'sys.stderr'; however, it is also
possible that the user has specified that warnings are to be turned into
errors, and in that case they will raise an exception.  It is also
possible that the functions raise an exception because of a problem with
the warning machinery.  The return value is ‘0’ if no exception is
raised, or ‘-1’ if an exception is raised.  (It is not possible to
determine whether a warning message is actually printed, nor what the
reason is for the exception; this is intentional.)  If an exception is
raised, the caller should do its normal exception handling (for example,
*note Py_DECREF(): 785. owned references and return an error value).

 -- C Função: int PyErr_WarnEx (PyObject *category, const char *message,
          Py_ssize_t stack_level)
     ' Parte da *note ABI Estável: 76a.'  Issue a warning message.  The
     'category' argument is a warning category (see below) or ‘NULL’;
     the 'message' argument is a UTF-8 encoded string.  'stack_level' is
     a positive number giving a number of stack frames; the warning will
     be issued from the currently executing line of code in that stack
     frame.  A 'stack_level' of 1 is the function calling *note
     PyErr_WarnEx(): 163b, 2 is the function above that, and so forth.

     Warning categories must be subclasses of *note PyExc_Warning:
     4e84.; *note PyExc_Warning: 4e84. is a subclass of *note
     PyExc_Exception: 4e58.; the default warning category is *note
     PyExc_RuntimeWarning: 4e74.  The standard Python warning categories
     are available as global variables whose names are enumerated at
     *note Warning types: 4fc3.

     For information about warning control, see the documentation for
     the *note warnings: 118. module and the *note -W: abb. option in
     the command line documentation.  There is no C API for warning
     control.

 -- C Função: int PyErr_WarnExplicitObject (PyObject *category, PyObject
          *message, PyObject *filename, int lineno, PyObject *module,
          PyObject *registry)

     Issue a warning message with explicit control over all warning
     attributes.  This is a straightforward wrapper around the Python
     function *note warnings.warn_explicit(): ef1.; see there for more
     information.  The 'module' and 'registry' arguments may be set to
     ‘NULL’ to get the default effect described there.

     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: 76a.'  Similar to *note
     PyErr_WarnExplicitObject(): 4fc4. except that 'message' and
     'module' are UTF-8 encoded strings, and 'filename' is decoded from
     the *note filesystem encoding and error handler: 752.

 -- C Função: int PyErr_WarnFormat (PyObject *category, Py_ssize_t
          stack_level, const char *format, ...)
     ' Parte da *note ABI Estável: 76a.'  Function similar to *note
     PyErr_WarnEx(): 163b, but use *note PyUnicode_FromFormat(): 61f. 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: 76a. desde a versão 3.6.'  Function
     similar to *note PyErr_WarnFormat(): 4e41, but 'category' is *note
     ResourceWarning: 546. 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 advertências,  Up: Tratamento de Exceções

7.5.4 Consultando o indicador de erro
-------------------------------------

 -- C Função: *note PyObject: 5d5. *PyErr_Occurred ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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():
     428.).  If not set, return ‘NULL’.  You do not own a reference to
     the return value, so you do not need to *note Py_DECREF(): 785. it.

     The caller must have an *note attached thread state: 4d72.

          Nota: Do not compare the return value to a specific exception;
          use *note PyErr_ExceptionMatches(): 4dda. 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: 76a.'  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: 76a.'  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: 5d5. *PyErr_GetRaisedException (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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(): 968, 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: 76a. 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: 76a.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_GetRaisedException(): 426. instead.

     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);

                  /* ... code that might produce other errors ... */

                  PyErr_Restore(type, value, traceback);
               }

 -- C Função: void PyErr_Restore (PyObject *type, PyObject *value,
          PyObject *traceback)
     ' Parte da *note ABI Estável: 76a.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_SetRaisedException(): 429. instead.

     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(): 425. to save the current error
          indicator.

 -- C Função: void PyErr_NormalizeException (PyObject **exc, PyObject
          **val, PyObject **tb)
     ' Parte da *note ABI Estável: 76a.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_GetRaisedException(): 426. instead, to avoid any possible
     de-normalization.

     Under certain circumstances, the values returned by *note
     PyErr_Fetch(): 425. 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__: 14c2. 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: 5d5. *PyErr_GetHandledException (void)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.11.'  Retrieve
     the active exception instance, as would be returned by *note
     sys.exception(): 890.  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(): 969. 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: 76a. 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(): 968. 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: 76a. desde a versão 3.7.'  Retrieve
     the old-style representation of the exception info, as known from
     *note sys.exc_info(): 88f.  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(): 968.

          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(): 96a. 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: 76a. 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(): 969.

          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(): 96b. 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

7.5.5 Tratamento de sinal
-------------------------

 -- C Função: int PyErr_CheckSignals ()
     ' Parte da *note ABI Estável: 76a.'

     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: cb. 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():
     688. 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: bbb. exception.

 -- C Função: void PyErr_SetInterrupt ()
     ' Parte da *note ABI Estável: 76a.'

     Simulate the effect of a ‘SIGINT’ signal arriving.  This is
     equivalent to ‘PyErr_SetInterruptEx(SIGINT)’.

          Nota: This function is async-signal-safe.  It can be called
          without an *note attached thread state: 4d72. and from a C
          signal handler.

 -- C Função: int PyErr_SetInterruptEx (int signum)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'

     Simulate the effect of a signal arriving.  The next time *note
     PyErr_CheckSignals(): 688. 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).

     If the given signal isn’t handled by Python (it was set to *note
     signal.SIG_DFL: 1ac4. or *note signal.SIG_IGN: 1ac3.), it will be
     ignored.

     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 an *note attached thread state: 4d72. 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(): d5b. 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

7.5.6 Classes de exceção
------------------------

 -- C Função: *note PyObject: 5d5. *PyErr_NewException (const char
          *name, PyObject *base, PyObject *dict)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: bc3. (accessible in C as *note
     PyExc_Exception: 4e58.).

     The *note __module__: 60b. 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: 5d5. *PyErr_NewExceptionWithDoc (const
          char *name, const char *doc, PyObject *base, PyObject *dict)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Same as *note PyErr_NewException(): 1465, 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: 76a. desde a versão 3.8.'  Return
     *note tp_name: 1b95. of the exception class 'ob'.


File: python.info,  Node: Objeto Exceção,  Next: Objetos de exceção Unicode,  Prev: Classes de exceção,  Up: Tratamento de Exceções

7.5.7 Objeto Exceção
--------------------

 -- C Função: *note PyObject: 5d5. *PyException_GetTraceback (PyObject
          *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Return the traceback associated with the exception as a new
     reference, as accessible from Python through the *note
     __traceback__: 14c2. 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: 76a.'  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: 5d5. *PyException_GetContext (PyObject
          *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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__:
     14c3. 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: 76a.'  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: 5d5. *PyException_GetCause (PyObject *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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__:
     14c4. attribute.

 -- C Função: void PyException_SetCause (PyObject *ex, PyObject *cause)
     ' Parte da *note ABI Estável: 76a.'  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__: 23a1. attribute is implicitly set
     to ‘True’ by this function.

 -- C Função: *note PyObject: 5d5. *PyException_GetArgs (PyObject *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.12.'  Return *note args: 782. of exception
     'ex'.

 -- C Função: void PyException_SetArgs (PyObject *ex, PyObject *args)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'  Set *note
     args: 782. of exception 'ex' to 'args'.

 -- C Função: *note PyObject: 5d5. *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: 75e. 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: 4cc. 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

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: 5d5. *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:
     76a.'  Create a *note UnicodeDecodeError: bfe. object with the
     attributes 'encoding', 'object', 'length', 'start', 'end' and
     'reason'.  'encoding' and 'reason' are UTF-8 encoded strings.

 -- C Função: *note PyObject: 5d5. *PyUnicodeDecodeError_GetEncoding
          (PyObject *exc)
 -- C Função: *note PyObject: 5d5. *PyUnicodeEncodeError_GetEncoding
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna o atributo * encoding* dado no objeto da exceção.

 -- C Função: *note PyObject: 5d5. *PyUnicodeDecodeError_GetObject
          (PyObject *exc)
 -- C Função: *note PyObject: 5d5. *PyUnicodeEncodeError_GetObject
          (PyObject *exc)
 -- C Função: *note PyObject: 5d5. *PyUnicodeTranslateError_GetObject
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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.

     If the *note UnicodeError.object: 1852. is an empty sequence, the
     resulting 'start' is ‘0’.  Otherwise, it is clipped to ‘[0,
     len(object) - 1]’.

     Ver também
     ..........

     *note UnicodeError.start: 181f.

 -- 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: 76a.'  Set the 'start' attribute of
     the given exception object to 'start'.  Return ‘0’ on success, ‘-1’
     on failure.

          Nota: While passing a negative 'start' does not raise an
          exception, the corresponding getters will not consider it as a
          relative offset.

 -- 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: 76a.'  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’.

     If the *note UnicodeError.object: 1852. is an empty sequence, the
     resulting 'end' is ‘0’.  Otherwise, it is clipped to ‘[1,
     len(object)]’.

 -- 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: 76a.'  Set the 'end' attribute of the
     given exception object to 'end'.  Return ‘0’ on success, ‘-1’ on
     failure.

     Ver também
     ..........

     *note UnicodeError.end: 1820.

 -- C Função: *note PyObject: 5d5. *PyUnicodeDecodeError_GetReason
          (PyObject *exc)
 -- C Função: *note PyObject: 5d5. *PyUnicodeEncodeError_GetReason
          (PyObject *exc)
 -- C Função: *note PyObject: 5d5. *PyUnicodeTranslateError_GetReason
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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

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: 798. takes
care of recursion handling.

 -- C Função: int Py_EnterRecursiveCall (const char *where)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.9.'  Marca um
     ponto em que a chamada recursiva em nível C está prestes a ser
     executada.

     The function then checks if the stack limit is reached.  If this is
     the case, a *note RecursionError: f5c. 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: f5c.
     message caused by the recursion depth limit.

     Alterado na versão 3.9: This function is now also available in the
     *note limited API: 62b.

 -- C Função: void Py_LeaveRecursiveCall (void)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.9.'  Ends a
     *note Py_EnterRecursiveCall(): 3cf.  Must be called once for each
     'successful' invocation of *note Py_EnterRecursiveCall(): 3cf.

     Alterado na versão 3.9: This function is now also available in the
     *note limited API: 62b.

Properly implementing *note tp_repr: 4d86. for container types requires
special recursion handling.  In addition to protecting the stack, *note
tp_repr: 4d86. 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(): 13ef.

 -- C Função: int Py_ReprEnter (PyObject *object)
     ' Parte da *note ABI Estável: 76a.'  Chamado no início da
     implementação *note tp_repr: 4d86. para detectar ciclos.

     If the object has already been processed, the function returns a
     positive integer.  In that case the *note tp_repr: 4d86.
     implementation should return a string object indicating a cycle.
     As examples, *note dict: 183. objects return ‘{...}’ and *note
     list: 24c. 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: 4d86. deverá,
     normalmente,.  retornar ‘NULL’.

     Caso contrário, a função retorna zero e a implementação *note
     tp_repr: 4d86. poderá continuar normalmente.

 -- C Função: void Py_ReprLeave (PyObject *object)
     ' Parte da *note ABI Estável: 76a.'  Termina a *note
     Py_ReprEnter(): 4f74.  Deve ser chamado uma vez para cada chamada
     de *note Py_ReprEnter(): 4f74. que retorna zero.


File: python.info,  Node: Exception and warning types,  Prev: Controle de recursão,  Up: Tratamento de Exceções

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: 5d5.*; they are all
class objects.

For completeness, here are all the variables:

* Menu:

* Exception types::
* OSError aliases::
* Warning types::


File: python.info,  Node: Exception types,  Next: OSError aliases,  Up: Exception and warning types

7.5.10.1 Exception types
........................

C name                                                 Python name
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Variável: *note PyObject: 5d5.                   *note BaseException: 7cc.
          *PyExc_BaseException                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note BaseExceptionGroup: 55f.
          *PyExc_BaseExceptionGroup                    
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.11.'

 -- C Variável: *note PyObject: 5d5.                   *note Exception: bc3.
          *PyExc_Exception                             
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ArithmeticError: 2576.
          *PyExc_ArithmeticError                       
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note AssertionError: 8ad.
          *PyExc_AssertionError                        
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note AttributeError: 5e4.
          *PyExc_AttributeError                        
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note BlockingIOError: 234.
          *PyExc_BlockingIOError                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note BrokenPipeError: 1252.
          *PyExc_BrokenPipeError                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note BufferError: 1ac8.
          *PyExc_BufferError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ChildProcessError: 124e.
          *PyExc_ChildProcessError                     
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ConnectionAbortedError: 1253.
          *PyExc_ConnectionAbortedError                
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ConnectionError: 1000.
          *PyExc_ConnectionError                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ConnectionRefusedError: 1254.
          *PyExc_ConnectionRefusedError                
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ConnectionResetError: 1255.
          *PyExc_ConnectionResetError                  
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5. *PyExc_EOFError   *note EOFError: 14d5.
     ' Parte da *note ABI Estável: 76a.'               

 -- C Variável: *note PyObject: 5d5.                   *note FileExistsError: 1216.
          *PyExc_FileExistsError                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note FileNotFoundError: 263.
          *PyExc_FileNotFoundError                     
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note FloatingPointError: 2577.
          *PyExc_FloatingPointError                    
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note GeneratorExit: 15b9.
          *PyExc_GeneratorExit                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ImportError: 64f.
          *PyExc_ImportError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note IndentationError: 9a1.
          *PyExc_IndentationError                      
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note IndexError: 1723.
          *PyExc_IndexError                            
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note InterruptedError: f7c.
          *PyExc_InterruptedError                      
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note IsADirectoryError: 124f.
          *PyExc_IsADirectoryError                     
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5. *PyExc_KeyError   *note KeyError: 5dd.
     ' Parte da *note ABI Estável: 76a.'               

 -- C Variável: *note PyObject: 5d5.                   *note KeyboardInterrupt: bbb.
          *PyExc_KeyboardInterrupt                     
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note LookupError: 24e6.
          *PyExc_LookupError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note MemoryError: 1809.
          *PyExc_MemoryError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ModuleNotFoundError: d31.
          *PyExc_ModuleNotFoundError                   
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.6.'

 -- C Variável: *note PyObject: 5d5.                   *note NameError: 44f.
          *PyExc_NameError                             
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note NotADirectoryError: 1250.
          *PyExc_NotADirectoryError                    
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note NotImplementedError: 368.
          *PyExc_NotImplementedError                   
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5. *PyExc_OSError    *note OSError: 2bf.
     ' Parte da *note ABI Estável: 76a.'               

 -- C Variável: *note PyObject: 5d5.                   *note OverflowError: a77.
          *PyExc_OverflowError                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note PermissionError: f32.
          *PyExc_PermissionError                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ProcessLookupError: 1251.
          *PyExc_ProcessLookupError                    
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note PythonFinalizationError: 472.
          *PyExc_PythonFinalizationError               

 -- C Variável: *note PyObject: 5d5.                   *note RecursionError: f5c.
          *PyExc_RecursionError                        
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note ReferenceError: 16fb.
          *PyExc_ReferenceError                        
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note RuntimeError: 243.
          *PyExc_RuntimeError                          
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note StopAsyncIteration: 1cc5.
          *PyExc_StopAsyncIteration                    
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note StopIteration: de9.
          *PyExc_StopIteration                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note SyntaxError: 18e.
          *PyExc_SyntaxError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note SystemError: 78a.
          *PyExc_SystemError                           
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note SystemExit: f30.
          *PyExc_SystemExit                            
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5. *PyExc_TabError   *note TabError: 75a.
     ' Parte da *note ABI Estável: 76a.'               

 -- C Variável: *note PyObject: 5d5.                   *note TimeoutError: a2c.
          *PyExc_TimeoutError                          
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note TypeError: 198.
          *PyExc_TypeError                             
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnboundLocalError: 1724.
          *PyExc_UnboundLocalError                     
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnicodeDecodeError: bfe.
          *PyExc_UnicodeDecodeError                    
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnicodeEncodeError: 87c.
          *PyExc_UnicodeEncodeError                    
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnicodeError: 45f.
          *PyExc_UnicodeError                          
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnicodeTranslateError: 1853.
          *PyExc_UnicodeTranslateError                 
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ValueError: 2ea.
          *PyExc_ValueError                            
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ZeroDivisionError: b35.
          *PyExc_ZeroDivisionError                     
     ' Parte da *note ABI Estável: 76a.'

Adicionado na versão 3.3: *note PyExc_BlockingIOError: 4e4b, *note
PyExc_BrokenPipeError: 4e4c, *note PyExc_ChildProcessError: 4e4f, *note
PyExc_ConnectionError: 4e51, *note PyExc_ConnectionAbortedError: 4e50,
*note PyExc_ConnectionRefusedError: 4e52, *note
PyExc_ConnectionResetError: 4e53, *note PyExc_FileExistsError: 4e59,
*note PyExc_FileNotFoundError: 4e5a, *note PyExc_InterruptedError: 4e63,
*note PyExc_IsADirectoryError: 4e64, *note PyExc_NotADirectoryError:
4e6b, *note PyExc_PermissionError: 4e6f, *note PyExc_ProcessLookupError:
4e70. e *note PyExc_TimeoutError: 4e7c. foram introduzidos seguindo a
PEP 3151(1).

Adicionado na versão 3.5: *note PyExc_StopAsyncIteration: 4e75. e *note
PyExc_RecursionError: 10a8.

Adicionado na versão 3.6: *note PyExc_ModuleNotFoundError: 4e69.

Adicionado na versão 3.11: *note PyExc_BaseExceptionGroup: 4e4a.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: OSError aliases,  Next: Warning types,  Prev: Exception types,  Up: Exception and warning types

7.5.10.2 OSError aliases
........................

The following are a compatibility aliases to *note PyExc_OSError: 4d3c.

Alterado na versão 3.3: Esses aliases costumavam ser tipos de exceção
separados.

C name                                Python name                           Notas
                                                                            
------------------------------------------------------------------------------------------------------------------
                                                                            
 -- C Variável:                       *note OSError: 2bf.
          *note PyObject: 5d5.        
          *PyExc_EnvironmentError
     ' Parte da
     *note ABI Estável: 76a.'

 -- C Variável:                       *note OSError: 2bf.
          *note PyObject: 5d5.        
          *PyExc_IOError
     ' Parte da
     *note ABI Estável: 76a.'

 -- C Variável:                       *note OSError: 2bf.                   *note [win]: 4fd3.
          *note PyObject: 5d5.                                              
          *PyExc_WindowsError
     ' Parte da
     *note ABI Estável: 76a. 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
......................

C name                                                 Python name
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Variável: *note PyObject: 5d5. *PyExc_Warning    *note Warning: 25a5.
     ' Parte da *note ABI Estável: 76a.'               

 -- C Variável: *note PyObject: 5d5.                   *note BytesWarning: e10.
          *PyExc_BytesWarning                          
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note DeprecationWarning: 1a3.
          *PyExc_DeprecationWarning                    
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note EncodingWarning: 1fdb.
          *PyExc_EncodingWarning                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.10.'

 -- C Variável: *note PyObject: 5d5.                   *note FutureWarning: 64d.
          *PyExc_FutureWarning                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ImportWarning: 713.
          *PyExc_ImportWarning                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note PendingDeprecationWarning: abc.
          *PyExc_PendingDeprecationWarning             
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note ResourceWarning: 546.
          *PyExc_ResourceWarning                       
     ' Parte da *note ABI Estável: 76a. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 5d5.                   *note RuntimeWarning: 4d1.
          *PyExc_RuntimeWarning                        
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note SyntaxWarning: 1ae.
          *PyExc_SyntaxWarning                         
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UnicodeWarning: 1615.
          *PyExc_UnicodeWarning                        
     ' Parte da *note ABI Estável: 76a.'

 -- C Variável: *note PyObject: 5d5.                   *note UserWarning: 25a6.
          *PyExc_UserWarning                           
     ' Parte da *note ABI Estável: 76a.'

Adicionado na versão 3.2: *note PyExc_ResourceWarning: 4e72.

Adicionado na versão 3.10: *note PyExc_EncodingWarning: 4e56.


File: python.info,  Node: Definindo módulos de extensão,  Next: Utilitários<2>,  Prev: Tratamento de Exceções,  Up: Manual de referência da API Python/C

7.6 Definindo módulos de extensão
=================================

Uma extensão C para CPython é uma biblioteca compartilhada (por exemplo,
um arquivo ‘.so’ no Linux, uma DLL ‘.pyd’ no Windows), que pode ser
carregada no processo Python (por exemplo, ela é compilada com
configurações de compilador compatíveis) e que exporta uma *note função
de inicialização: 4fd8.

Para ser importável por padrão (ou seja, por *note
importlib.machinery.ExtensionFileLoader: ea2.), a biblioteca
compartilhada deve estar disponível em *note sys.path: 3e1. e deve ser
nomeada após o nome do módulo mais uma extensão listada em *note
importlib.machinery.EXTENSION_SUFFIXES: 72e.

     Nota: A construção, o empacotamento e a distribuição de módulos de
     extensão são melhor realizados com ferramentas de terceiros e estão
     fora do escopo deste documento.  Uma ferramenta adequada é o
     Setuptools, cuja documentação pode ser encontrada em
     ‘https://setuptools.pypa.io/en/latest/setuptools.html’.

Normalmente, a função de inicialização retorna uma definição de módulo
inicializada usando *note PyModuleDef_Init(): 4d44.  Isso permite
dividir o processo de criação em várias fases:

   - Antes que qualquer código substancial seja executado, o Python pode
     determinar quais recursos o módulo oferece suporte e pode ajustar o
     ambiente ou se recusar a carregar uma extensão incompatível.

   - Por padrão, o próprio Python cria o objeto módulo — ou seja, faz o
     equivalente a *note object.__new__(): 795. para classes.  Ele
     também define atributos iniciais como *note __package__: 321. e
     *note __loader__: 339.

   - Depois, o objeto do módulo é inicializado usando código específico
     da extensão — o equivalente a *note __init__(): 8b4. em classes.

Isso é chamado de 'inicialização multifásica' para diferenciá-lo do
esquema legado (mas ainda suportado) de 'inicialização monofásica', em
que a função de inicialização retorna um módulo totalmente construído.
Consulte a seção *note inicialização monofásica abaixo: 4fd9. para obter
detalhes.

Alterado na versão 3.5: Adicionado suporte para inicialização
multifásica ( PEP 489(1)).

* Menu:

* Várias instâncias de módulo::
* Função de inicialização::
* Inicialização multifásica::
* Inicialização monofásica legada::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/


File: python.info,  Node: Várias instâncias de módulo,  Next: Função de inicialização,  Up: Definindo módulos de extensão

7.6.1 Várias instâncias de módulo
---------------------------------

Por padrão, módulos de extensão não são singletons.  Por exemplo, se a
entrada *note sys.modules: 17ab. for removida e o módulo for
reimportado, um novo objeto de módulo será criado e normalmente
preenchido com novos métodos e tipos de objetos.  O módulo antigo está
sujeito à coleta de lixo normal.  Isso reflete o comportamento dos
módulos Python puros.

Instâncias adicionais do módulo podem ser criadas em *note
subinterpretadores: 163. ou após a reinicialização do tempo de execução
do Python (*note Py_Finalize(): 45c. e *note Py_Initialize(): 45d.).
Nesses casos, compartilhar objetos Python entre instâncias do módulo
provavelmente causaria travamentos ou comportamento indefinido.

Para evitar tais problemas, cada instância de um módulo de extensão deve
ser 'isolada': alterações em uma instância não devem afetar
implicitamente as outras, e todos os estados pertencentes ao módulo,
incluindo referências a objetos Python, devem ser específicos de uma
instância específica do módulo.  Consulte *note Isolando módulos de
extensão: 166. para obter mais detalhes e um guia prático.

Uma maneira mais simples de evitar esses problemas é *note levantar um
erro na inicialização repetida: 4fdb.

Espera-se que todos os módulos ofereçam suporte a *note
subinterpretador: 163, ou então sinalizem explicitamente a falta de
suporte.  Isso geralmente é obtido por isolamento ou bloqueio de
inicializações repetidas, como acima.  Um módulo também pode ser
limitado ao interpretador principal usando o slot *note
Py_mod_multiple_interpreters: 4fdc.


File: python.info,  Node: Função de inicialização,  Next: Inicialização multifásica,  Prev: Várias instâncias de módulo,  Up: Definindo módulos de extensão

7.6.2 Função de inicialização
-----------------------------

A função de inicialização definida por um módulo de extensão tem a
seguinte assinatura:

 -- C Função: *note PyObject: 5d5. *PyInit_modulename (void)

Seu nome deve ser ‘PyInit_<NOME>’, com ‘<nome>’ substituído pelo nome do
módulo.

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: 4fdf, 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

É recomendável definir a função de inicialização usando uma macro
auxiliar:

 -- C Macro: PyMODINIT_FUNC

     Declara uma função de inicialização do módulo de extensão.  Esta
     macro:

        * especifica o tipo de retorno *note PyObject: 5d5.*,

        * adiciona quaisquer declarações de vinculação especiais
          exigidas pela plataforma e

        * para C++, declara a função como ‘extern "C"’.

Por exemplo, um módulo chamado ‘spam’ seria definido assim:

     static struct PyModuleDef spam_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "spam",
         ...
     };

     PyMODINIT_FUNC
     PyInit_spam(void)
     {
         return PyModuleDef_Init(&spam_module);
     }

É 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(1) na PEP 489(2) para detalhes.

A função de inicialização normalmente é o único item não ‘static’
definido no código-fonte C do módulo.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/#multiple-modules-in-one-library

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Inicialização multifásica,  Next: Inicialização monofásica legada,  Prev: Função de inicialização,  Up: Definindo módulos de extensão

7.6.3 Inicialização multifásica
-------------------------------

Normalmente, a *note função de inicialização: 4fd8.
(‘PyInit_modulename’) retorna uma instância de *note PyModuleDef: b6a.
com *note m_slots: 4fe1. não ‘NULL’.  Antes de ser retornada, a
instância ‘PyModuleDef’ deve ser inicializada usando a seguinte função:

 -- C Função: *note PyObject: 5d5. *PyModuleDef_Init (PyModuleDef *def)
     ' Parte da *note ABI Estável: 76a. 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 uma contagem de
     referências.

     Retorna 'def' convertido para ‘PyObject*’, ou ‘NULL’ se ocorrer um
     erro.

     A chamada desta função é necessária para *note Inicialização
     multifásica: 4fdf.  Ela não deve ser usada em outros contextos.

     Observe que o Python assume que as estruturas ‘PyModuleDef’ são
     alocadas estaticamente.  Esta função pode retornar uma nova
     referência ou uma referência emprestada; esta referência não deve
     ser liberada.

     Adicionado na versão 3.5.


File: python.info,  Node: Inicialização monofásica legada,  Prev: Inicialização multifásica,  Up: Definindo módulos de extensão

7.6.4 Inicialização monofásica legada
-------------------------------------

     Atenção: A inicialização monofásica é um mecanismo legado para
     inicializar módulos de extensão, com desvantagens e falhas de
     projeto conhecidas.  Os autores de módulos de extensão são
     incentivados a utilizar a inicialização multifásica.

Na inicialização monofásica, a *note função de inicialização: 4fd8.
(‘PyInit_modulename’) deve criar, preencher e retornar um objeto de
módulo.  Isso normalmente é feito usando *note PyModule_Create(): 4fe3.
e funções como *note PyModule_AddObjectRef(): 5fe.

A inicialização monofásica difere do *note padrão: 4fdf. nas seguintes
maneiras:

   * Módulos monofásicos são, ou melhor, 'contêm', “singletons”.

     Quando o módulo é inicializado pela primeira vez, o Python salva o
     conteúdo do ‘__dict__’ do módulo (ou seja, normalmente, as funções
     e os tipos do módulo).

     Para importações subsequentes, o Python não chama a função de
     inicialização novamente.  Em vez disso, ele cria um novo objeto de
     módulo com um novo ‘__dict__’ e copia o conteúdo salvo para ele.
     Por exemplo, dado um módulo monofásico ‘_testsinglephase’ (1) que
     define uma função ‘sum’ e uma classe de exceção ‘error’:

          >>> import sys
          >>> import _testsinglephase as one
          >>> del sys.modules['_testsinglephase']
          >>> import _testsinglephase as two
          >>> one is two
          False
          >>> one.__dict__ is two.__dict__
          False
          >>> one.sum is two.sum
          True
          >>> one.error is two.error
          True

     O comportamento exato deve ser considerado um detalhe da
     implementação do CPython.

   * Para contornar o fato de que ‘PyInit_modulename’ não aceita um
     argumento 'spec', parte do estado do mecanismo de importação é
     salvo e aplicado ao primeiro módulo adequado criado durante a
     chamada ‘PyInit_modulename’.  Especificamente, quando um submódulo
     é importado, esse mecanismo adiciona o nome do pacote pai ao nome
     do módulo.

     Uma função monofásica ‘PyInit_modulename’ deve criar “seu” objeto
     de módulo o mais rápido possível, antes que qualquer outro objeto
     de módulo possa ser criado.

   * Nomes de módulos não ASCII (‘PyInitU_modulename’) não são
     suportados.

   * Módulos monofásicos oferecem suporte a funções de pesquisa de
     módulos como *note PyState_FindModule(): 4f0f.

   ---------- Footnotes ----------

   (1) ‘_testsinglephase’ é um módulo interno usado no conjunto de
autotestes do CPython; sua instalação pode ou não incluí-lo.


File: python.info,  Node: Utilitários<2>,  Next: Camada de Objetos Abstratos,  Prev: Definindo módulos de extensão,  Up: Manual de referência da API Python/C

7.7 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::
* System Functions::
* Process Control::
* 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::
* 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: System Functions,  Up: Utilitários<2>

7.7.1 Utilitários do sistema operacional
----------------------------------------

 -- C Função: *note PyObject: 5d5. *PyOS_FSPath (PyObject *path)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.6.'  Retorna a representação do sistema de
     arquivos para 'path'.  Se o objeto for um objeto *note str: 169. ou
     *note bytes: 192, então uma nova *note referência forte: 5d8. é
     retornada.  Se o objeto implementa a interface *note os.PathLike:
     e3f, então *note __fspath__(): e40. é retornado desde que seja um
     objeto *note str: 169. ou *note bytes: 192.  Caso contrário, *note
     TypeError: 198. é 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: 3fc. 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: 76a. 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”: 4fec. (do *note interpretador “main”:
          163.).  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: 76a. 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”: 4fec. (do *note interpretador “main”:
          163.).  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: 76a. 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”: 4fec. (do *note interpretador “main”:
          163.).  O mesmo vale para ‘PyOS_AfterFork_Child()’.

     Adicionado na versão 3.7.

     Ver também
     ..........

     *note os.register_at_fork(): 352. permite registrar funções
     personalizadas do Python para serem chamadas por *note
     PyOS_BeforeFork(): dac, *note PyOS_AfterFork_Parent(): dad. e *note
     PyOS_AfterFork_Child(): 42d.

 -- C Função: void PyOS_AfterFork ()
     ' Parte da *note ABI Estável: 76a. 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(): 42d.

 -- C Função: int PyOS_CheckStack ()
     ' Parte da *note ABI Estável: 76a. 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: 76a.'

 -- C Função: *note PyOS_sighandler_t: 4ee1. PyOS_getsig (int i)
     ' Parte da *note ABI Estável: 76a.'  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: 4ee1. PyOS_setsig (int i,
          PyOS_sighandler_t h)
     ' Parte da *note ABI Estável: 76a.'  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: wchar_t *Py_DecodeLocale (const char *arg, size_t *size)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'
          Aviso: Esta função não deve ser chamada diretamente: use a API
          *note PyConfig: 3f4. com a função *note
          PyConfig_SetBytesString(): ba1. que garante que *note Python
          esteja pré-inicializado: 415a.

          Esta função não deve ser chamada antes de *note Python estar
          pré-inicializado: 415a. e para que a localidade LC_CTYPE seja
          configurada corretamente: consulte a função *note
          Py_PreInitialize(): 41b.

     Decodifica uma string de bytes do *note tratador de erros e
     codificação do sistema de arquivos: 752.  Se o tratador de erros
     for o *note tratador de errors surrogateescape: 26ed, 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(): 628. 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: 752.
     são selecionados por *note PyConfig_Read(): 988.: veja os membros
     *note filesystem_encoding: 418. e *note filesystem_errors: 419. de
     *note PyConfig: 3f4.

     Erros de decodificação nunca devem acontecer, a menos que haja um
     bug na biblioteca C.

     Use a função *note Py_EncodeLocale(): db5. para codificar a string
     de caracteres de volta para uma string de bytes.

     Ver também
     ..........

     As funções *note PyUnicode_DecodeFSDefaultAndSize(): 4f49. e *note
     PyUnicode_DecodeLocaleAndSize(): db6.

     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: 85b.

     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: 415. for
     zero;

 -- C Função: char *Py_EncodeLocale (const wchar_t *text, size_t
          *error_pos)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Encode a
     wide character string to the *note filesystem encoding and error
     handler: 752.  If the error handler is *note surrogateescape error
     handler: 26ed, surrogate characters in the range U+DC80..U+DCFF are
     converted to bytes 0x80..0xFF.

     Return a pointer to a newly allocated byte string, use *note
     PyMem_Free(): 1633. to free the memory.  Return ‘NULL’ on encoding
     error or memory allocation error.

     If error_pos is not ‘NULL’, ‘*error_pos’ is set to ‘(size_t)-1’ on
     success, or set to the index of the invalid character on encoding
     error.

     *note tratador de erros e codificação do sistema de arquivos: 752.
     são selecionados por *note PyConfig_Read(): 988.: veja os membros
     *note filesystem_encoding: 418. e *note filesystem_errors: 419. de
     *note PyConfig: 3f4.

     Use the *note Py_DecodeLocale(): db4. function to decode the bytes
     string back to a wide character string.

          Aviso: Esta função não deve ser chamada antes de *note Python
          estar pré-inicializado: 415a. e para que a localidade LC_CTYPE
          seja configurada corretamente: consulte a função *note
          Py_PreInitialize(): 41b.

     Ver também
     ..........

     The *note PyUnicode_EncodeFSDefault(): 1ce7. and *note
     PyUnicode_EncodeLocale(): db7. functions.

     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: 85b.

     Alterado na versão 3.8: The function now uses the UTF-8 encoding on
     Windows if *note PyPreConfig.legacy_windows_fs_encoding: 415. is
     zero.

 -- C Função: FILE *Py_fopen (PyObject *path, const char *mode)

     Similar to ‘fopen()’, but 'path' is a Python object and an
     exception is set on error.

     'path' must be a *note str: 169. object, a *note bytes: 192.
     object, or a *note path-like object: 59a.

     On success, return the new file pointer.  On error, set an
     exception and return ‘NULL’.

     The file must be closed by *note Py_fclose(): 391. rather than
     calling directly ‘fclose()’.

     The file descriptor is created non-inheritable ( PEP 446(1)).

     The caller must have an *note attached thread state: 4d72.

     Adicionado na versão 3.14.

 -- C Função: int Py_fclose (FILE *file)

     Close a file that was opened by *note Py_fopen(): 390.

     On success, return ‘0’.  On error, return ‘EOF’ and ‘errno’ is set
     to indicate the error.  In either case, any further access
     (including another call to *note Py_fclose(): 391.) to the stream
     results in undefined behavior.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0446/


File: python.info,  Node: System Functions,  Next: Process Control,  Prev: Utilitários do sistema operacional,  Up: Utilitários<2>

7.7.2 System Functions
----------------------

These are utility functions that make functionality from the *note sys:
df. module accessible to C code.  They all work with the current
interpreter thread’s *note sys: df. module’s dict, which is contained in
the internal thread state structure.

 -- C Função: *note PyObject: 5d5. *PySys_GetObject (const char *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Return the object 'name' from the *note sys: df.
     module or ‘NULL’ if it does not exist, without setting an
     exception.

 -- C Função: int PySys_SetObject (const char *name, PyObject *v)
     ' Parte da *note ABI Estável: 76a.'  Set 'name' in the *note sys:
     df. module to 'v' unless 'v' is ‘NULL’, in which case 'name' is
     deleted from the sys module.  Returns ‘0’ on success, ‘-1’ on
     error.

 -- C Função: void PySys_ResetWarnOptions ()
     ' Parte da *note ABI Estável: 76a.'  Reset *note sys.warnoptions:
     3f2. to an empty list.  This function may be called prior to *note
     Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15:
     Clear *note sys.warnoptions: 3f2. and ‘warnings.filters’ instead.

 -- C Função: void PySys_WriteStdout (const char *format, ...)
     ' Parte da *note ABI Estável: 76a.'  Write the output string
     described by 'format' to *note sys.stdout: cc0.  No exceptions are
     raised, even if truncation occurs (see below).

     'format' should limit the total size of the formatted output string
     to 1000 bytes or less – after 1000 bytes, the output string is
     truncated.  In particular, this means that no unrestricted “%s”
     formats should occur; these should be limited using “%.<N>s” where
     <N> is a decimal number calculated so that <N> plus the maximum
     size of other formatted text does not exceed 1000 bytes.  Also
     watch out for “%f”, which can print hundreds of digits for very
     large numbers.

     If a problem occurs, or *note sys.stdout: cc0. is unset, the
     formatted message is written to the real (C level) 'stdout'.

 -- C Função: void PySys_WriteStderr (const char *format, ...)
     ' Parte da *note ABI Estável: 76a.'  As *note PySys_WriteStdout():
     4f1a, but write to *note sys.stderr: b29. or 'stderr' instead.

 -- C Função: void PySys_FormatStdout (const char *format, ...)
     ' Parte da *note ABI Estável: 76a.'  Function similar to
     PySys_WriteStdout() but format the message using *note
     PyUnicode_FromFormatV(): 789. and don’t truncate the message to an
     arbitrary length.

     Adicionado na versão 3.2.

 -- C Função: void PySys_FormatStderr (const char *format, ...)
     ' Parte da *note ABI Estável: 76a.'  As *note PySys_FormatStdout():
     4f16, but write to *note sys.stderr: b29. or 'stderr' instead.

     Adicionado na versão 3.2.

 -- C Função: *note PyObject: 5d5. *PySys_GetXOptions ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a. desde a versão 3.7.'  Return the current dictionary
     of *note -X: 16f. options, similarly to *note sys._xoptions: 1fde.
     On error, ‘NULL’ is returned and an exception is set.

     Adicionado na versão 3.2.

 -- C Função: int PySys_Audit (const char *event, const char *format,
          ...)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Raise an
     auditing event with any active hooks.  Return zero for success and
     non-zero with an exception set on failure.

     The 'event' string argument must not be 'NULL'.

     If any hooks have been added, 'format' and other arguments will be
     used to construct a tuple to pass.  Apart from ‘N’, the same format
     characters as used in *note Py_BuildValue(): 3bf. are available.
     If the built value is not a tuple, it will be added into a
     single-element tuple.

     The ‘N’ format option must not be used.  It consumes a reference,
     but since there is no way to know whether arguments to this
     function will be consumed, using it may cause reference leaks.

     Note that ‘#’ format characters should always be treated as *note
     Py_ssize_t: c49, regardless of whether ‘PY_SSIZE_T_CLEAN’ was
     defined.

     *note sys.audit(): 186e. performs the same function from Python
     code.

     See also *note PySys_AuditTuple(): 606.

     Adicionado na versão 3.8.

     Alterado na versão 3.8.2: Require *note Py_ssize_t: c49. for ‘#’
     format characters.  Previously, an unavoidable deprecation warning
     was raised.

 -- C Função: int PySys_AuditTuple (const char *event, PyObject *args)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Similar
     to *note PySys_Audit(): 607, but pass arguments as a Python object.
     'args' must be a *note tuple: 608.  To pass no arguments, 'args'
     can be 'NULL'.

     Adicionado na versão 3.13.

 -- C Função: int PySys_AddAuditHook (Py_AuditHookFunction hook, void
          *userData)

     Append the callable 'hook' to the list of active auditing hooks.
     Return zero on success and non-zero on failure.  If the runtime has
     been initialized, also set an error on failure.  Hooks added
     through this API are called for all interpreters created by the
     runtime.

     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.

     This function is safe to call before *note Py_Initialize(): 45d.
     When called after runtime initialization, existing audit hooks are
     notified and may silently abort the operation by raising an error
     subclassed from *note Exception: bc3. (other errors will not be
     silenced).

     The hook function is always called with an *note attached thread
     state: 4d72. by the Python interpreter that raised the event.

     See PEP 578(1) for a detailed description of auditing.  Functions
     in the runtime and standard library that raise events are listed in
     the *note audit events table: 1b14.  Details are in each function’s
     documentation.

     If the interpreter is initialized, this function raises an auditing
     event ‘sys.addaudithook’ with no arguments.  If any existing hooks
     raise an exception derived from *note Exception: bc3, the new hook
     will not be added and the exception is cleared.  As a result,
     callers cannot assume that their hook has been added unless they
     control all existing hooks.

      -- C Tipo: typedef int (*Py_AuditHookFunction)(const char *event,
               *note PyObject: 5d5. *args, void *userData)

          The type of the hook function.  'event' is the C string event
          argument passed to *note PySys_Audit(): 607. or *note
          PySys_AuditTuple(): 606.  'args' is guaranteed to be a *note
          PyTupleObject: 4ff0.  'userData' is the argument passed to
          PySys_AddAuditHook().

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0578/


File: python.info,  Node: Process Control,  Next: Importando módulos<2>,  Prev: System Functions,  Up: Utilitários<2>

7.7.3 Process Control
---------------------

 -- C Função: void Py_FatalError (const char *message)
     ' Parte da *note ABI Estável: 76a.'

     Print a fatal error message and kill the process.  No cleanup is
     performed.  This function should only be invoked when a condition
     is detected that would make it dangerous to continue using the
     Python interpreter; e.g., when the object administration appears to
     be corrupted.  On Unix, the standard C library function ‘abort()’
     is called which will attempt to produce a ‘core’ file.

     The ‘Py_FatalError()’ function is replaced with a macro which logs
     automatically the name of the current function, unless the
     ‘Py_LIMITED_API’ macro is defined.

     Alterado na versão 3.9: Log the function name automatically.

 -- C Função: void Py_Exit (int status)
     ' Parte da *note ABI Estável: 76a.'

     Exit the current process.  This calls *note Py_FinalizeEx(): f05.
     and then calls the standard C library function ‘exit(status)’.  If
     *note Py_FinalizeEx(): f05. indicates an error, the exit status is
     set to 120.

     Alterado na versão 3.6: Errors from finalization no longer ignored.

 -- C Função: int Py_AtExit (void (*func)())
     ' Parte da *note ABI Estável: 76a.'

     Register a cleanup function to be called by *note Py_FinalizeEx():
     f05.  The cleanup function will be called with no arguments and
     should return no value.  At most 32 cleanup functions can be
     registered.  When the registration is successful, *note
     Py_AtExit(): 4f69. returns ‘0’; on failure, it returns ‘-1’.  The
     cleanup function registered last is called first.  Each cleanup
     function will be called at most once.  Since Python’s internal
     finalization will have completed before the cleanup function, no
     Python APIs should be called by 'func'.

     Ver também
     ..........

     *note PyUnstable_AtExit(): 1850. for passing a ‘void *data’
     argument.


File: python.info,  Node: Importando módulos<2>,  Next: Suporte a marshalling de dados,  Prev: Process Control,  Up: Utilitários<2>

7.7.4 Importando módulos
------------------------

 -- C Função: *note PyObject: 5d5. *PyImport_ImportModule (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     This is a wrapper around *note PyImport_Import(): 15ed. which takes
     a const char* as an argument instead of a *note PyObject: 5d5.*.

 -- C Função: *note PyObject: 5d5. *PyImport_ImportModuleNoBlock (const
          char *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Esta função é um alias descontinuado de *note
     PyImport_ImportModule(): 3d9.

     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.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyImport_ImportModule(): 3d9. instead.

 -- C Função: *note PyObject: 5d5. *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__(): ac7.

     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__(): ac7, 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(): 3d9.

 -- C Função: *note PyObject: 5d5. *PyImport_ImportModuleLevelObject
          (PyObject *name, PyObject *globals, PyObject *locals, PyObject
          *fromlist, int level)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.7.'  Importa um módulo.  Isso é melhor
     descrito referindo-se à função embutida do Python *note
     __import__(): ac7, já que a função padrão *note __import__(): ac7.
     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__(): ac7, 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: 5d5. *PyImport_ImportModuleLevel (const
          char *name, PyObject *globals, PyObject *locals, PyObject
          *fromlist, int level)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Semelhante para *note PyImport_ImportModuleLevelObject():
     4e9e, 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: 5d5. *PyImport_Import (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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__(): ac7. 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: 5d5. *PyImport_ReloadModule (PyObject *m)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyImport_AddModuleRef (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.13.'  Return the module object corresponding
     to a module name.

     The 'name' argument may be of the form ‘package.module’.  First
     check the modules dictionary if there’s one there, and if not,
     create a new one and insert it in the modules dictionary.

     Return a *note strong reference: 5d8. to the module on success.
     Return ‘NULL’ with an exception set on failure.

     The module name 'name' is decoded from UTF-8.

     This function does not load or import the module; if the module
     wasn’t already loaded, you will get an empty module object.  Use
     *note PyImport_ImportModule(): 3d9. or one of its variants to
     import a module.  Package structures implied by a dotted name for
     'name' are not created if not already present.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyImport_AddModuleObject (PyObject
          *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a. desde a versão 3.7.'  Similar to *note
     PyImport_AddModuleRef(): 5ef, but return a *note borrowed
     reference: 3d4. and 'name' is a Python *note str: 169. object.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *PyImport_AddModule (const char
          *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Similar to *note PyImport_AddModuleRef(): 5ef, but
     return a *note borrowed reference: 3d4.

 -- C Função: *note PyObject: 5d5. *PyImport_ExecCodeModule (const char
          *name, PyObject *co)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     Given a module name (possibly of the form ‘package.module’) and a
     code object read from a Python bytecode file or obtained from the
     built-in function *note compile(): 4ab, load the module.  Return a
     new reference to the module object, or ‘NULL’ with an exception set
     if an error occurred.  'name' is removed from *note sys.modules:
     17ab. in error cases, even if 'name' was already in *note
     sys.modules: 17ab. on entry to *note PyImport_ExecCodeModule():
     4e96.  Leaving incompletely initialized modules in *note
     sys.modules: 17ab. is dangerous, as imports of such modules have no
     way to know that the module object is an unknown (and probably
     damaged with respect to the module author’s intents) state.

     The module’s *note __spec__: 21fd. and *note __loader__: 339. will
     be set, if not set already, with the appropriate values.  The
     spec’s loader will be set to the module’s ‘__loader__’ (if set) and
     to an instance of *note SourceFileLoader: 126a. otherwise.

     The module’s *note __file__: 2202. attribute will be set to the
     code object’s *note co_filename: 155f.  If applicable, *note
     __cached__: 31f. will also be set.

     Esta função recarregará o módulo se este já tiver sido importado.
     Veja *note PyImport_ReloadModule(): 4e9f. 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(): 4e97. e *note
     PyImport_ExecCodeModuleWithPathnames(): 4e99.

     Alterado na versão 3.12: The setting of *note __cached__: 31f. and
     *note __loader__: 339. is deprecated.  See *note ModuleSpec: 2117.
     for alternatives.

 -- C Função: *note PyObject: 5d5. *PyImport_ExecCodeModuleEx (const
          char *name, PyObject *co, const char *pathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Like *note PyImport_ExecCodeModule(): 4e96, but the *note
     __file__: 2202. attribute of the module object is set to 'pathname'
     if it is non-‘NULL’.

     Veja também *note PyImport_ExecCodeModuleWithPathnames(): 4e99.

 -- C Função: *note PyObject: 5d5. *PyImport_ExecCodeModuleObject
          (PyObject *name, PyObject *co, PyObject *pathname, PyObject
          *cpathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.7.'  Like *note PyImport_ExecCodeModuleEx():
     4e97, but the *note __cached__: 31f. attribute of the module object
     is set to 'cpathname' if it is non-‘NULL’.  Of the three functions,
     this is the preferred one to use.

     Adicionado na versão 3.3.

     Alterado na versão 3.12: Setting *note __cached__: 31f. is
     deprecated.  See *note ModuleSpec: 2117. for alternatives.

 -- C Função: *note PyObject: 5d5. *PyImport_ExecCodeModuleWithPathnames
          (const char *name, PyObject *co, const char *pathname, const
          char *cpathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Como *note PyImport_ExecCodeModuleObject(): 4e98, 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: Uses ‘imp.source_from_cache()’ in
     calculating the source path if only the bytecode path is provided.

     Alterado na versão 3.12: No longer uses the removed ‘imp’ module.

 -- C Função: long PyImport_GetMagicNumber ()
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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: 5d5. *PyImport_GetModuleDict ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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: 5d5. *PyImport_GetModule (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *PyImport_GetImporter (PyObject
          *path)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Return a finder object for a *note sys.path:
     3e1./‘pkg.__path__’ item 'path', possibly by fetching it from the
     *note sys.path_importer_cache: 7ef. dict.  If it wasn’t yet cached,
     traverse *note sys.path_hooks: 121a. 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: 22e0. could not find a
     finder for this path item.  Cache the result in *note
     sys.path_importer_cache: 7ef.  Return a new reference to the finder
     object.

 -- C Função: int PyImport_ImportFrozenModuleObject (PyObject *name)
     ' Parte da *note ABI Estável: 76a. 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(): 3d9.
     (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: 76a.'  Semelhante a *note
     PyImport_ImportFrozenModuleObject(): 4e9d, 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: 96e. *PyImport_FrozenModules

     Este ponteiro é inicializado para apontar para um vetor de
     registros de *note _frozen: 96e, 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: 76a.'  Adiciona um único módulo à
     tabela existente de módulos embutidos.  Este é um invólucro prático
     em torno de *note PyImport_ExtendInittab(): 1a4d, 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(): 45d.

 -- 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():
     1a4d. 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: 5d5. *(*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: 4ff8. 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():
     45d.

     Se Python é inicializado várias vezes, *note
     PyImport_AppendInittab(): 1a4c. ou *note PyImport_ExtendInittab():
     1a4d. devem ser chamados antes de cada inicialização do Python.

 -- C Função: *note PyObject: 5d5. *PyImport_ImportModuleAttr (PyObject
          *mod_name, PyObject *attr_name)
     'Retorna valor: Nova referência.'  Import the module 'mod_name' and
     get its attribute 'attr_name'.

     Names must be Python *note str: 169. objects.

     Helper function combining *note PyImport_Import(): 15ed. and *note
     PyObject_GetAttr(): 5e0.  For example, it can raise *note
     ImportError: 64f. if the module is not found, and *note
     AttributeError: 5e4. if the attribute doesn’t exist.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyImport_ImportModuleAttrString
          (const char *mod_name, const char *attr_name)
     'Retorna valor: Nova referência.'  Similar to *note
     PyImport_ImportModuleAttr(): 393, but names are UTF-8 encoded
     strings instead of Python *note str: 169. objects.

     Adicionado na versão 3.14.

   ---------- 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.7.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: 91.  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 várias versões do formato de dados; consulte
a *note documentação do módulo Python: 91. para obter detalhes.

 -- C Macro: Py_MARSHAL_VERSION

     A versão atual do formato.  Veja *note marshal.version: 2be5.

 -- 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(): 1b94. 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(): 1b94. para verificar isso.

 -- C Função: *note PyObject: 5d5. *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:
     14d5.) 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:
     14d5.) e retorna ‘-1’.

 -- C Função: *note PyObject: 5d5. *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: 14d5,
     *note ValueError: 2ea. ou *note TypeError: 198.) e retorna ‘NULL’.

 -- C Função: *note PyObject: 5d5. *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(): 5001, 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 essas variantes 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: 14d5,
     *note ValueError: 2ea. ou *note TypeError: 198.) e retorna ‘NULL’.

 -- C Função: *note PyObject: 5d5. *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: 14d5,
     *note ValueError: 2ea. ou *note TypeError: 198.) 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.7.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: 1e72.

As três primeiras funções descritas, *note PyArg_ParseTuple(): 3be,
*note PyArg_ParseTupleAndKeywords(): 618, e *note PyArg_Parse(): 177c,
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.7.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.7.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: 951.  Isso bloqueia o buffer subjacente para que o
     chamador possa posteriormente usar o buffer, mesmo dentro de um
     bloco *note Py_BEGIN_ALLOW_THREADS: 4d5e. sem que haja o risco de
     que dados mutáveis sejam redimensionados ou destruídos.  Dessa
     forma, 'você precisa chamar' *note PyBuffer_Release(): 62f. 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(): 1633. depois de ter
     concluído o processamento de dados (ou em qualquer caso de
     interrupção precoce).

   * Outros formatos usam um *note str: 169. ou um *note objeto bytes ou
     similar: 193. somente leitura, como *note bytes: 192, 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: 95c. do
     objeto deve ser ‘NULL’.  Isso não permite objetos mutáveis comuns,
     como *note bytearray: 342, mas também alguns objetos somente
     leitura, como *note memoryview: 165. ou *note bytes: 192.

     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: 169.) [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: 2ea. é 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: 45f. é
     levantada.

          Nota: Esse formato não aceita *note objetos bytes ou
          similares: 193.  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(): f09. como 'conversor'.

     Alterado na versão 3.5: Anteriormente, a exceção *note TypeError:
     198. era levantada quando pontos de código nulo embutidos em string
     Python eram encontrados.

‘s*’ (*note str: 169. ou *note objeto bytes ou similar: 193.) [Py_buffer]

     Esse formato aceita tanto objetos Unicode quanto objetos bytes ou
     similares.  Preenche uma estrutura *note Py_buffer: 951. 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: 169, *note objeto bytes ou similar: 193. somente leitura) [const char *, *note Py_ssize_t: c49.]

     Como ‘s*’, exceto que não fornece um *note buffer emprestado: 3d3.
     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: 169. 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: 169, *note objeto bytes ou similar: 193. 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: 951. é definida como
     ‘NULL’.

‘z#’ (*note str: 169, *note objeto bytes ou similar: 193. somente leitura ou ‘None’) [const char *, *note Py_ssize_t: c49.]

     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: 193. somente leitura) [const char *]

     Este formato converte um objeto bytes ou similar para um ponteiro C
     para uma string de caracteres *note emprestada: 3d3.; não aceita
     objetos Unicode.  O buffer de bytes não pode conter bytes nulos
     embutidos; se isso ocorrer uma exceção *note ValueError: 2ea. será
     levantada.

     Alterado na versão 3.5: Anteriormente, a exceção *note TypeError:
     198. era levantada quando pontos de código nulo embutidos em string
     Python eram encontrados no buffer de bytes.

‘y*’ (*note objeto bytes ou similar: 193.) [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: 193. somente leitura) [const char *, *note Py_ssize_t: c49.]

     Esta variação de ‘s#’ não aceita objetos Unicode, apenas objetos
     bytes ou similares.

‘S’ (*note bytes: 192.) [PyBytesObject *]

     Exige que o objeto Python seja um objeto *note bytes: 192, sem
     tentar nenhuma conversão.  Levanta *note TypeError: 198. se o
     objeto não for um objeto byte.  A variável C pode ser declarada
     como *note PyObject: 5d5.*.

‘Y’ (*note bytearray: 342.) [PyByteArrayObject *]

     Exige que o objeto Python seja um objeto *note bytearray: 342, sem
     aceitar qualquer conversão.  Levanta *note TypeError: 198. se o
     objeto não é um objeto *note bytearray: 342.  A variável C apenas
     pode ser declarada como *note PyObject: 5d5.*.

‘U’ (*note str: 169.) [PyObject *]

     Exige que o objeto python seja um objeto Unicode, sem tentar alguma
     conversão.  Levanta *note TypeError: 198. se o objeto não for um
     objeto Unicode.  A variável C deve ser declarada como *note
     PyObject: 5d5.*.

‘w*’ (*note objeto bytes ou similar: 193. 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: 951. fornecida pelo chamador.  O buffer pode conter
     bytes nulos incorporados.  O chamador deve chamar *note
     PyBuffer_Release(): 62f. quando isso for feito com o buffer.

‘es’ (*note str: 169.) [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(): 3be. 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(): 1633. para
     liberar o buffer alocado após o uso.

‘et’ (*note str: 169, *note bytes: 192. ou *note bytearray: 342.) [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: 169.) [const char *encoding, char **buffer, *note Py_ssize_t: c49. *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(): 1633. 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(): 3be. 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: 2ea. será definido.

     Em ambos os casos, o '*buffer_length' é definido como o comprimento
     dos dados codificados sem o byte NUL à direita.

‘et#’ (*note str: 169, *note bytes: 192. ou *note bytearray: 342.) [const char *encoding, char **buffer, *note Py_ssize_t: c49. *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.7.6.3 Números
...............

Esses formatos permitem representar números Python ou caracteres únicos
como números C. Formatos que exigem *note int: 19b, *note float: 196. ou
*note complex: 197. também podem usar os métodos especiais
correspondentes *note __index__(): 19e, *note __float__(): bb7. ou *note
__complex__(): 7f2. para converter o objeto Python para o tipo
necessário.

Para formatos inteiros com sinal, *note OverflowError: a77. é 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: 19b.) [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: 19b.) [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: 19b.) [short int]

     Converte um inteiro Python para um short int do C.

‘H’ (*note int: 19b.) [unsigned short int]

     Converte um inteiro Python para um unsigned short int do C, sem
     verificação de estouro.

‘i’ (*note int: 19b.) [int]

     Converte um inteiro Python para um int simples do C.

‘I’ (*note int: 19b.) [unsigned int]

     Converte um inteiro Python para um unsigned int do C, sem
     verificação de estouro.

‘l’ (*note int: 19b.) [long int]

     Converte um inteiro Python para um long int do C.

‘k’ (*note int: 19b.) [unsigned long]

     Converte um inteiro Python para um unsigned long do C sem
     verificação de estouro.

     Alterado na versão 3.14: Usa *note __index__(): 19e, se disponível.

‘L’ (*note int: 19b.) [longo longo]

     Converte um inteiro Python para um long long do C.

‘K’ (*note int: 19b.) [unsigned long long]

     Converte um inteiro Python para um unsigned long long do C sem
     verificação de estouro.

     Alterado na versão 3.14: Usa *note __index__(): 19e, se disponível.

‘n’ (*note int: 19b.) [*note Py_ssize_t: c49.]

     Converte um inteiro Python para um *note Py_ssize_t: c49. do C.

‘c’ (*note bytes: 192. ou *note bytearray: 342. de comprimento 1) [char]

     Converte um byte Python, representado com um objeto ‘byte’ ou *note
     bytearray: 342. de comprimento 1, para um char do C.

     Alterado na versão 3.3: Permite objetos *note bytearray: 342.

‘C’ (*note str: 169. de comprimento 1) [int]

     Converte um caractere Python, representado como uma *note str: 169.
     objeto de comprimento 1, para um int do C

‘f`’ (*note float: 196.) [float]

     Converte um número de ponto flutuante Python para um float do C.

‘d’ (*note float: 196.) [double]

     Converte um número de ponto flutuante Python para um double do C.

‘D’ (*note complex: 197.) [Py_complex]

     Converte um número complexo Python para uma estrutura C *note
     Py_complex: 5009.


File: python.info,  Node: Outros objetos,  Next: Funções da API,  Prev: Números<2>,  Up: Análise de argumentos<2>

7.7.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: 5d8. 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: 5d5.*) no qual o ponteiro do objeto está
     armazenado.  Se o objeto Python não tiver o tipo necessário, *note
     TypeError: 198. é 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(): f09. e
     *note PyUnicode_FSDecoder(): 78c.

     Alterado na versão 3.1: ‘Py_CLEANUP_SUPPORTED’ foi adicionado.

‘p’ (*note bool: 3c0.) [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: 17c2. para obter mais
     informações sobre como o Python testa valores para a verdade.

     Adicionado na versão 3.3.

‘(items)’ (sequência) ['itens-correspondentes']

     O objeto deve ser uma sequência Python (exceto *note str: 169,
     *note bytes: 192. ou *note bytearray: 342.) cujo comprimento é o
     número de unidades de formato em 'itens'.  Os argumentos C devem
     corresponder às unidades de formato individuais em 'itens'.  As
     unidades de formato para sequências podem ser aninhadas.

     Se 'items' contiver unidades de formato que armazenam um *note
     buffer emprestado: 3d3. (‘s’, ‘s#’, ‘z’, ‘z#’, ‘y’ ou ‘y#’) ou uma
     *note referência emprestada: 3d4. (‘S’, ‘Y’, ‘U’, ‘O’ ou ‘O!’), o
     objeto deve ser uma tupla Python.  O 'conversor' para a unidade de
     formato ‘O&’ em 'items' não deve armazenar um buffer emprestado ou
     uma referência emprestada.

     Alterado na versão 3.14: Objetos *note str: 169. e *note bytearray:
     342. não são mais aceitos como sequência.

     Descontinuado desde a versão 3.14: Sequências não-tuplas serão
     descontinuadas se 'items' contiver unidades de formato que
     armazenem um buffer emprestado ou uma referência emprestada.

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():
     3be. não toca no conteúdo da(s) variável(eis) C correspondente(s).

‘$’

     *note PyArg_ParseTupleAndKeywords(): 618. 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(): 3be.
     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.7.6.5 Funções da API
......................

 -- C Função: int PyArg_ParseTuple (PyObject *args, const char *format,
          ...)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  Idêntico a *note
     PyArg_ParseTuple(): 3be, 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: 76a.'  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: c6c.  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: 61a.

     Alterado na versão 3.6: Adicionado suporte para *note
     positional-only parameters: c6c.

     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: 76a.'  Idêntico a *note
     PyArg_ParseTupleAndKeywords(): 618, 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: 76a.'  Garante que as chaves no
     dicionário de argumento de palavras reservadas são strings.  Isso
     só é necessário se *note PyArg_ParseTupleAndKeywords(): 618. 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: 76a.'  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: 76a.'  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: 16f6. 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: 5d5.*; eles serão preenchidos com os valores de 'args';
     eles conterão *note referências emprestadas: 3d4.  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(): 16f4. neste exemplo é
     inteiramente equivalente à chamada para *note PyArg_ParseTuple():
     3be.:

          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(): 618. e *note
     PyArg_VaParseTupleAndKeywords(): 619.  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.7.6.6 Construindo valores
...........................

 -- C Função: *note PyObject: 5d5. *Py_BuildValue (const char *format,
          ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 3bf. 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(): 3bf.  Em outras palavras, se o seu código invoca
     ‘malloc()’ e passa a memória alocada para *note Py_BuildValue():
     3bf, seu código é responsável por chamar ‘free()’ para aquela
     memória uma vez que *note Py_BuildValue(): 3bf. 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: 169. ou ‘None’) [const char *]

          Converte uma string C terminada em NULL em um objeto Python
          *note str: 169. usando codificação ‘'utf-8'’.  Se o ponteiro
          da string C é ‘NULL’, ‘None’ é usado.

     ‘s#’ (*note str: 169. ou ‘None’) [const char *, *note Py_ssize_t: c49.]

          Converte uma string C e seu comprimento em um objeto Python
          *note str: 169. usando a codificação ‘'utf-8'’.  Se o ponteiro
          da string C é ‘NULL’, o comprimento é ignorado e ‘None’ é
          retornado.

     ‘y’ (*note bytes: 192.) [const char *]

          Isso converte uma string C para um objeto Python *note bytes:
          192.  Se o ponteiro da string C é ‘NULL’, ‘None’ é retornado.

     ‘y#’ (*note bytes: 192.) [const char *, *note Py_ssize_t: c49.]

          Isso converte uma string C e seu comprimento para um objeto
          Python.  Se o ponteiro da string C é ‘NULL’, ‘None’ é
          retornado.

     ‘z’ (*note str: 169. ou ‘None’) [const char *]

          O mesmo de ‘s’.

     ‘z#’ (*note str: 169. ou ‘None’) [const char *, *note Py_ssize_t: c49.]

          O mesmo de ‘s#’.

     ‘u’ (*note str: 169.) [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: 169.) [const wchar_t *, *note Py_ssize_t: c49.]

          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: 169. ou ‘None’) [const char *]

          O mesmo de ‘s’.

     ‘U#’ (*note str: 169. ou ‘None’) [const char *, *note Py_ssize_t: c49.]

          O mesmo de ‘s#’.

     ‘i’ (*note int: 19b.) [int]

          Converte um simples int do C em um objeto inteiro do Python.

     ‘b’ (*note int: 19b.) [char]

          Converte um simples char do C em um objeto inteiro do Python.

     ‘h’ (*note int: 19b.) [short int]

          Converte um simples short int do C em um objeto inteiro do
          Python.

     ‘l’ (*note int: 19b.) [long int]

          Converte um long int do C em um objeto inteiro do Python.

     ‘B’ (*note int: 19b.) [unsigned char]

          Converte um unsigned char do C em um objeto inteiro do Python.

     ‘H’ (*note int: 19b.) [unsigned short int]

          Converte um unsigned short int do C em um objeto inteiro do
          Python.

     ‘I’ (*note int: 19b.) [unsigned int]

          Converte um unsigned int do C em um objeto inteiro do Python.

     ‘k’ (*note int: 19b.) [unsigned long]

          Converte um unsigned long do C em um objeto inteiro do Python.

     ‘L’ (*note int: 19b.) [longo longo]

          Converte um long long do C em um objeto inteiro do Python.

     ‘K’ (*note int: 19b.) [unsigned long long]

          Converte um unsigned long long do C em um objeto inteiro do
          Python.

     ‘n’ (*note int: 19b.) [*note Py_ssize_t: c49.]

          Converte um *note Py_ssize_t: c49. do C em um objeto inteiro
          do Python.

     ‘p’ (*note bool: 3c0.) [int]

          Converte um int C para um objeto *note bool: 3c0. Python.

          Esteja ciente de que este formato requer um argumento ‘int’.
          Ao contrário da maioria dos outros contextos em C, argumentos
          variádicos não são convertidos automaticamente para um tipo
          adequado.  Você pode converter outro tipo (por exemplo, um
          ponteiro ou um float) para um valor ‘int’ adequado usando ‘(x)
          ? 1 : 0’ ou ‘!!x’.

          Adicionado na versão 3.14.

     ‘c’ (*note bytes: 192. de comprimento 1) [char]

          Converte um int representando um byte do C em um objeto *note
          bytes: 192. de comprimento 1 do Python.

     ‘C’ (*note str: 169. de comprimento 1) [int]

          Converte um int representando um caractere do C em um objeto
          *note str: 169. de comprimento 1 do Python.

     ‘d’ (*note float: 196.) [double]

          Converte um double do C em um número ponto flutuante do
          Python.

     ‘f`’ (*note float: 196.) [float]

          Converte um float do C em um número ponto flutuante do Python.

     ‘D’ (*note complex: 197.) [Py_complex *]

          Converte uma estrutura *note Py_complex: 5009. 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: 5d8. 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(): 3bf. irá
          retornar ‘NULL’ mas não irá levantar uma exceção.  Se nenhuma
          exceção foi levantada ainda, *note SystemError: 78a. é
          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: 5d8.  Ú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: 608.) ['matching-items']

          Converte uma sequência de valores C para uma tupla Python com
          o mesmo número de itens.

     ‘[items]’ (*note list: 24c.) ['matching-items']

          Converte uma sequência de valores C para uma lista Python com
          o mesmo número de itens.

     ‘{items}’ (*note dict: 183.) ['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: 78a. é definida e ‘NULL’ é retornado.

 -- C Função: *note PyObject: 5d5. *Py_VaBuildValue (const char *format,
          va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Idêntico a *note Py_BuildValue(): 3bf, 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: API do PyHash,  Prev: Análise de argumentos e construção de valores,  Up: Utilitários<2>

7.7.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: 76a.'  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: 76a.'  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(): 16f7. e *note PyOS_vsnprintf(): 16f8. 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’, “aconteceu algo de errado.” ‘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: 76a.'  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: 76a.'  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(): 4ee3, 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: 76a.'  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(): 196. 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: 2ea. 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_INFINITY’ (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: 76a.'  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(): 1c1.

     'flags' pode ser zero ou mais de valores ‘Py_DTSF_SIGN’,
     ‘Py_DTSF_ADD_DOT_0’ ou ‘Py_DTSF_ALT’, alternados por operador
     lógico OU:

        * ‘Py_DTSF_SIGN’ significa sempre preceder a string retornada
          com um caractere de sinal, mesmo se 'val' não for negativo.

        * ‘Py_DTSF_ADD_DOT_0’ significa garantir que a string retornada
          não se pareça com um inteiro.

        * ‘Py_DTSF_ALT’ significa aplicar regras de formatação
          “alternativas”.  Veja a documentação para o especificador
          ‘'#'’ de *note PyOS_snprintf(): 16f7. para detalhes.

     Se 'type' não for ‘NULL’, então o valor para o qual ele aponta será
     definido como um dos ‘Py_DTST_FINITE’, ‘Py_DTST_INFINITE’ ou
     ‘Py_DTST_NAN’, significando que 'val' é um número finito, um número
     infinito ou não um número, respectivamente.

     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(): 1633.

     Adicionado na versão 3.1.

 -- C Função: int PyOS_stricmp (const char *s1, const char *s2)

     Comparação de strings sem diferença entre maiúsculas e minúsculas.
     A função funciona quase de forma idêntica a ‘strcmp()’ exceto que
     ignora a diferença entre maiúsculas e minúsculas.

 -- C Função: int PyOS_strnicmp (const char *s1, const char *s2,
          Py_ssize_t size)

     Comparação de strings sem diferença entre maiúsculas e minúsculas.
     A função funciona quase de forma idêntica a ‘strncmp()’ exceto que
     ignora a diferença entre maiúsculas e minúsculas.

   ---------- 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: API do PyHash,  Next: Reflexão,  Prev: Conversão e formação de strings,  Up: Utilitários<2>

7.7.8 API do PyHash
-------------------

Veja também o membro *note PyTypeObject.tp_hash: 4d98. e *note Hashing
de tipos numéricos: 2494.

 -- 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: PyHASH_MODULUS

     O primo de Mersenne(1) ‘P = 2**n -1’, usado para esquema de hash
     numérico.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_BITS

     O expoente ‘n’ de ‘P’ em *note PyHASH_MODULUS: 1924.

     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.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_IMAG

     O multiplicador usado para a parte imaginária de um número
     complexo.

     Adicionado na versão 3.13.

 -- C Tipo: type PyHash_FuncDef

     Definição de função de hash usada por *note PyHash_GetFuncDef():
     501a.

      -- C Membro: *note Py_hash_t: 145f. (*const hash)(const void*,
               *note Py_ssize_t: c49.)

          Função de hash.

      -- C Membro: const char *name

          Nome de função hash (string codificada em UTF-8).

      -- C Membro: const int hash_bits

          Tamanho interno do valor do hash em bits.

      -- C Membro: const int seed_bits

          Tamanho da entrada de seed em bits.

     Adicionado na versão 3.4.

 -- C Função: *note PyHash_FuncDef: 5019. *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: 145f. 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: 145f. Py_HashBuffer (const void *ptr,
          Py_ssize_t len)

     Calcula e retorna o valor de hash de um buffer de 'len' bytes,
     começando no endereço 'ptr'.  O hash tem garantia de corresponder
     ao de *note bytes: 192, *note memoryview: 165. e outros objetos
     embutidos que implementam o *note protocolo de buffer: 25f.

     Usa esta função para implementar hash para objetos imutáveis cuja
     função *note tp_richcompare: 4d92. compara ao buffer de outro
     objeto.

     'len' deve ser maior que ou igual a ‘0’.

     Esta função sempre tem sucesso.

     Adicionado na versão 3.14.

 -- C Função: *note Py_hash_t: 145f. 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(): 422.

     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.7.9 Reflexão
--------------

 -- C Função: *note PyObject: 5d5. *PyEval_GetBuiltins (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameBuiltins(): 5e7.

     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: 5d5. *PyEval_GetLocals (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameLocals(): 5eb. para obter o mesmo comportamento que
     chamar *note locals(): 468. no código Python, ou então chame *note
     PyFrame_GetLocals(): 655. no resultado de *note PyEval_GetFrame():
     1a65. para acessar o atributo *note f_locals: 49f. 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(): 468. para detalhes do mapeamento retornado
     em diferentes escopos.

     Como esta função retorna uma *note referência emprestada: 3d4, o
     dicionário retornado para *note escopos otimizados: 49b. é
     armazenado em cache no objeto frame e permanecerá ativo enquanto o
     objeto frame o fizer.  Ao contrário de *note
     PyEval_GetFrameLocals(): 5eb. e *note locals(): 468, 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(): 655, *note locals(): 468. e *note
     FrameType.f_locals: 49f. não fazem mais uso do dicionário de cache
     compartilhado.  Consulte a *note entrada de O Que Há de Novo: 469.
     para detalhes adicionais.

 -- C Função: *note PyObject: 5d5. *PyEval_GetGlobals (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameGlobals(): 5e9.

     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: 981. *PyEval_GetFrame (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Retorna o quadro do *note estado de thread anexado:
     4d72, que é ‘NULL’ se nenhum quadro estiver em execução no momento.

     Veja também *note PyThreadState_GetFrame(): 986.

 -- C Função: *note PyObject: 5d5. *PyEval_GetFrameBuiltins (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *PyEval_GetFrameLocals (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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(): 468. em código Python.

     Para acessar *note f_locals: 49f. no quadro atual sem fazer um
     snapshot independente em *note escopos otimizados: 49b, chame *note
     PyFrame_GetLocals(): 655. no resultado de *note PyEval_GetFrame():
     1a65.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyEval_GetFrameGlobals (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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(): 1b0b. 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: 76a.'  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: 76a.'  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(): 4e44, 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.7.10 Registro de codec e funções de suporte
---------------------------------------------

 -- C Função: int PyCodec_Register (PyObject *search_function)
     ' Parte da *note ABI Estável: 76a.'  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: 76a. 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: 76a.'  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: 5d5. *PyCodec_Encode (PyObject *object,
          const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 24e6. se nenhum codificador puder ser
     encontrado.

 -- C Função: *note PyObject: 5d5. *PyCodec_Decode (PyObject *object,
          const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 24e6. se nenhum codificador puder ser
     encontrado.

* Menu:

* API de pesquisa de codec::
* API de registro de tratamentos de erros de decodificação Unicode::


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.7.10.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: 5dd. é definido e ‘NULL’ é retornado.

 -- C Função: *note PyObject: 5d5. *PyCodec_Encoder (const char
          *encoding)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém uma função de codificação para o 'encoding' dado.

 -- C Função: *note PyObject: 5d5. *PyCodec_Decoder (const char
          *encoding)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém uma função de decodificação para o 'encoding' dado.

 -- C Função: *note PyObject: 5d5. *PyCodec_IncrementalEncoder (const
          char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém um objeto *note IncrementalEncoder: 26d0. para o
     'encoding' dado.

 -- C Função: *note PyObject: 5d5. *PyCodec_IncrementalDecoder (const
          char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém um objeto *note IncrementalDecoder: 26d1. para o
     'encoding' dado.

 -- C Função: *note PyObject: 5d5. *PyCodec_StreamReader (const char
          *encoding, PyObject *stream, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém uma função de fábrica *note StreamReader: 26d5. para o
     'encoding' dado.

 -- C Função: *note PyObject: 5d5. *PyCodec_StreamWriter (const char
          *encoding, PyObject *stream, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Obtém uma função de fábrica *note StreamWriter: 26d4. para o
     'encoding' dado.


File: python.info,  Node: API de registro de tratamentos de erros de decodificação Unicode,  Prev: API de pesquisa de codec,  Up: Registro de codec e funções de suporte

7.7.10.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: 76a.'  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: 87c, *note UnicodeDecodeError: bfe. ou
     *note UnicodeTranslateError: 1853. 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: 45e.
     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: 5d5. *PyCodec_LookupError (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyCodec_StrictErrors (PyObject *exc)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 76a.'
     Levanta 'exc' como uma exceção.

 -- C Função: *note PyObject: 5d5. *PyCodec_IgnoreErrors (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Ignora o erro de unicode, ignorando a entrada que causou o
     erro.

 -- C Função: *note PyObject: 5d5. *PyCodec_ReplaceErrors (PyObject
          *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Substitui o erro de unicode por ‘?’ ou ‘U+FFFD’.

 -- C Função: *note PyObject: 5d5. *PyCodec_XMLCharRefReplaceErrors
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Substitui o erro de unicode por caracteres da referência
     XML.

 -- C Função: *note PyObject: 5d5. *PyCodec_BackslashReplaceErrors
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Substitui o erro de unicode com escapes de barra invertida
     (‘\x’, ‘\u’ e ‘\U’).

 -- C Função: *note PyObject: 5d5. *PyCodec_NameReplaceErrors (PyObject
          *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: API C PyTime,  Next: Suporte a Mapas do Perf,  Prev: Registro de codec e funções de suporte,  Up: Utilitários<2>

7.7.11 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: f4.

Para uma API C relacionada ao módulo *note datetime: 34, veja *note
Objetos DateTime: 502b.

* Menu:

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


File: python.info,  Node: Tipos<3>,  Next: Funções de relógio,  Up: API C PyTime

7.7.11.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(): 5d1. 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: 5c9. PyTime_MIN

     Valor mínimo de *note PyTime_t: 5c9.

 -- C Variável: *note PyTime_t: 5c9. PyTime_MAX

     Valor máximo de *note PyTime_t: 5c9.


File: python.info,  Node: Funções de relógio,  Next: Funções de relógio brutas,  Prev: Tipos<3>,  Up: API C PyTime

7.7.11.2 Funções de relógio
...........................

As funções a seguir aceitam um ponteiro para *note PyTime_t: 5c9. 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: 4e6d. 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 com um *note estado de thread anexado: 4d72.

 -- C Função: int PyTime_Monotonic (PyTime_t *result)

     Lê o relógio monótono.  Veja *note time.monotonic(): 555. 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(): c6e.
     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(): 556. 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.7.11.3 Funções de relógio brutas
..................................

Similar à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 tenha um *note estado de thread
anexado: 4d72.

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, *note anexe: 4d72.
um *note estado de thread: 17af. e chame a função regular (sem o sufixo
‘Raw’).  Observe que a função regular pode ser bem-sucedida mesmo após o
‘Raw’ falhar.

 -- C Função: int PyTime_MonotonicRaw (PyTime_t *result)

     Similar a *note PyTime_Monotonic(): 5cd, mas não define uma exceção
     em caso de erro, e não exige um *note estado de thread anexado:
     4d72.

 -- C Função: int PyTime_PerfCounterRaw (PyTime_t *result)

     Similar a *note PyTime_PerfCounter(): 5cf, mas não define uma
     exceção em caso de erro e não requer um *note estado de thread
     anexado: 4d72.

 -- C Função: int PyTime_TimeRaw (PyTime_t *result)

     Similar a *note PyTime_Time(): 5d1, mas não define uma exceção em
     caso de erro e não requer um *note estado de thread anexado: 4d72.


File: python.info,  Node: Funções de conversão,  Prev: Funções de relógio brutas,  Up: API C PyTime

7.7.11.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.7.12 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 o *note estado de thread anexado: 4d72. 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: 75e. 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(): 19e5. ).  Normalmente, não há
     necessidade de chamar isso explicitamente; basta usar *note
     PyUnstable_WritePerfMapEntry(): 19e5. 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: 75e. 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(): 19e6. 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(): 19e6. 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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Fecha o arquivo de mapa do perf aberto por *note
     PyUnstable_PerfMapState_Init(): 19e6.  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.8 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():
4dd4, 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.8.1 Protocolo de objeto
-------------------------

 -- C Função: *note PyObject: 5d5. *Py_GetConstant (unsigned int
          constant_id)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Obtém uma
     *note referência forte: 5d8. 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: 87a.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_FALSE               ‘1’       *note False: d1f.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_TRUE                ‘2’       *note True: dfb.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_ELLIPSIS            ‘3’       *note Ellipsis: 21c4.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_NOT_IMPLEMENTED     ‘4’       *note NotImplemented: 1a2.
                                                            
                                                            
      -- 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: 28f.

 -- C Função: *note PyObject: 5d5. *Py_GetConstantBorrowed (unsigned int
          constant_id)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'
     Semelhante a *note Py_GetConstant(): 5ed, mas retorna uma *note
     referência emprestada: 3d4.

     Esta função destina-se principalmente à compatibilidade com versões
     anteriores: usar *note Py_GetConstant(): 5ed. é 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: 5d5. *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: 5044.
     de dentro de uma função C (ou seja, cria uma nova *note referência
     forte: 5d8. para *note NotImplemented: 1a2. e retorna-a).

 -- C Macro: Py_PRINT_RAW

     Sinaliza a ser usado com múltiplas funções que imprimem o objeto
     (como *note PyObject_Print(): 18d2. e *note PyFile_WriteObject():
     4e8d.).  Se passada, esta função usaria o *note str(): 169. do
     objeto em vez do *note repr(): 1c1.

 -- 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: 5046.; if
     given, the *note str(): 169. of the object is written instead of
     the *note repr(): 1c1.

 -- C Função: int PyObject_HasAttrWithError (PyObject *o, PyObject
          *attr_name)
     ' Parte da *note ABI Estável: 76a. 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: 76a. desde a versão 3.13.'  This is
     the same as *note PyObject_HasAttrWithError(): 60f, but 'attr_name'
     is specified as a const char* UTF-8 encoded bytes string, rather
     than a *note PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: int PyObject_HasAttr (PyObject *o, PyObject *attr_name)
     ' Parte da *note ABI Estável: 76a.'  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__(): 6ef. and *note __getattribute__(): dbf. methods
          aren’t propagated, but instead given to *note
          sys.unraisablehook(): 501.  For proper error handling, use
          *note PyObject_HasAttrWithError(): 60f, *note
          PyObject_GetOptionalAttr(): 5e2. or *note PyObject_GetAttr():
          5e0. instead.

 -- C Função: int PyObject_HasAttrString (PyObject *o, const char
          *attr_name)
     ' Parte da *note ABI Estável: 76a.'  This is the same as *note
     PyObject_HasAttr(): 610, but 'attr_name' is specified as a const
     char* UTF-8 encoded bytes string, rather than a *note PyObject:
     5d5.*.

          Nota: Exceptions that occur when this calls *note
          __getattr__(): 6ef. and *note __getattribute__(): dbf. methods
          or while creating the temporary *note str: 169. object are
          silently ignored.  For proper error handling, use *note
          PyObject_HasAttrStringWithError(): 611, *note
          PyObject_GetOptionalAttrString(): 5e3. or *note
          PyObject_GetAttrString(): 5e1. instead.

 -- C Função: *note PyObject: 5d5. *PyObject_GetAttr (PyObject *o,
          PyObject *attr_name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 5e2. instead.

 -- C Função: *note PyObject: 5d5. *PyObject_GetAttrString (PyObject *o,
          const char *attr_name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  This is the same as *note PyObject_GetAttr(): 5e0, but
     'attr_name' is specified as a const char* UTF-8 encoded bytes
     string, rather than a *note PyObject: 5d5.*.

     If the missing attribute should not be treated as a failure, you
     can use *note PyObject_GetOptionalAttrString(): 5e3. instead.

 -- C Função: int PyObject_GetOptionalAttr (PyObject *obj, PyObject
          *attr_name, PyObject **result);
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Variant
     of *note PyObject_GetAttr(): 5e0. which doesn’t raise *note
     AttributeError: 5e4. if the attribute is not found.

     If the attribute is found, return ‘1’ and set '*result' to a new
     *note strong reference: 5d8. to the attribute.  If the attribute is
     not found, return ‘0’ and set '*result' to ‘NULL’; the *note
     AttributeError: 5e4. is silenced.  If an error other than *note
     AttributeError: 5e4. 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: 76a. desde a versão 3.13.'  This is
     the same as *note PyObject_GetOptionalAttr(): 5e2, but 'attr_name'
     is specified as a const char* UTF-8 encoded bytes string, rather
     than a *note PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyObject_GenericGetAttr (PyObject
          *o, PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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__: 772. (if present).  As
     outlined in *note Implementando descritores: e3d, data descriptors
     take preference over instance attributes, while non-data
     descriptors don’t.  Otherwise, an *note AttributeError: 5e4. is
     raised.

 -- C Função: int PyObject_SetAttr (PyObject *o, PyObject *attr_name,
          PyObject *v)
     ' Parte da *note ABI Estável: 76a.'  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(): 1799, 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: 76a.'  This is the same as *note
     PyObject_SetAttr(): 4ef5, but 'attr_name' is specified as a const
     char* UTF-8 encoded bytes string, rather than a *note PyObject:
     5d5.*.

     If 'v' is ‘NULL’, the attribute is deleted, but this feature is
     deprecated in favour of using *note PyObject_DelAttrString(): 179a.

     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(): 4f5c.
     and *note PyObject_SetAttr(): 4ef5. directly.  For more details,
     see *note PyUnicode_InternFromString(): 18d3, 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: 76a.'  Generic attribute setter and
     deleter function that is meant to be put into a type object’s *note
     tp_setattro: 4d8a. 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__: 772. (if present).  On success, ‘0’ is
     returned, otherwise an *note AttributeError: 5e4. is raised and
     ‘-1’ is returned.

 -- C Função: int PyObject_DelAttr (PyObject *o, PyObject *attr_name)
     ' Parte da *note ABI Estável: 76a. 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: 76a. desde a versão 3.13.'  This is
     the same as *note PyObject_DelAttr(): 1799, but 'attr_name' is
     specified as a const char* UTF-8 encoded bytes string, rather than
     a *note PyObject: 5d5.*.

     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(): 4f5c.
     and *note PyObject_DelAttr(): 1799. directly.  For more details,
     see *note PyUnicode_InternFromString(): 18d3, which may be used
     internally to create a key object for lookup.

 -- C Função: *note PyObject: 5d5. *PyObject_GenericGetDict (PyObject
          *o, void *context)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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__: 772. 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(): 5e0. 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: 76a. 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: 5d5. **_PyObject_GetDictPtr (PyObject
          *obj)

     Return a pointer to *note __dict__: 772. 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(): 5e0. when
     accessing an attribute on the object.

 -- C Função: *note PyObject: 5d5. *PyObject_RichCompare (PyObject *o1,
          PyObject *o2, int opid)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Compare the values of 'o1' and 'o2' using the operation
     specified by 'opid', which must be one of *note Py_LT: 5048, *note
     Py_LE: 5049, *note Py_EQ: 504a, *note Py_NE: 504b, *note Py_GT:
     504c, or *note Py_GE: 504d, 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: 76a.'  Compare the values of 'o1' and
     'o2' using the operation specified by 'opid', like *note
     PyObject_RichCompare(): 4d93, 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(): 1c43. will always return ‘1’ for *note
     Py_EQ: 504a. and ‘0’ for *note Py_NE: 504b.

 -- C Função: *note PyObject: 5d5. *PyObject_Format (PyObject *obj,
          PyObject *format_spec)
     ' Parte da *note ABI Estável: 76a.'  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: 5d5. *PyObject_Repr (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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(): 1c1. 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: 5d5. *PyObject_ASCII (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     As *note PyObject_Repr(): 1225, compute a string representation of
     object 'o', but escape the non-ASCII characters in the string
     returned by *note PyObject_Repr(): 1225. with ‘\x’, ‘\u’ or ‘\U’
     escapes.  This generates a string similar to that returned by *note
     PyObject_Repr(): 1225. in Python 2.  Called by the *note ascii():
     15d7. built-in function.

 -- C Função: *note PyObject: 5d5. *PyObject_Str (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 169. built-in function and, therefore, by the *note print():
     116b. 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: 5d5. *PyObject_Bytes (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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: 76a.'  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__(): 225e. 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__:
     220e.

     Normally only class objects, i.e.  instances of *note type: f38. or
     a derived class, are considered classes.  However, objects can
     override this by having a *note __bases__: 169a. 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: 76a.'  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__(): 225d. 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__: 169b. attribute.

     An object 'cls' can override if it is considered a class, and what
     its base classes are, by having a *note __bases__: 169a. attribute
     (which must be a tuple of base classes).

 -- C Função: *note Py_hash_t: 145f. PyObject_Hash (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'

     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: c49.

 -- C Função: *note Py_hash_t: 145f. PyObject_HashNotImplemented
          (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  Set a *note TypeError: 198.
     indicating that ‘type(o)’ is not *note hashable: 819. 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: 76a.'  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: 76a.'  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: 5d5. *PyObject_Type (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     When 'o' is non-‘NULL’, returns a type object corresponding to the
     object type of object 'o'.  On failure, raises *note SystemError:
     78a. and returns ‘NULL’.  This is equivalent to the Python
     expression ‘type(o)’.  This function creates a new *note strong
     reference: 5d8. to the return value.  There’s really no reason to
     use this function instead of the *note Py_TYPE(): 3c6. function,
     which returns a pointer of type *note PyTypeObject: c8f.*, except
     when a new *note strong reference: 5d8. 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: c49. PyObject_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: c49. PyObject_Length (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'

     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: c49. 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__():
     1104, 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: 5d5. *PyObject_GetItem (PyObject *o,
          PyObject *key)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 76a.'  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: 76a.'  É o mesmo que *note
     PyObject_DelItem(): 4ee8, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 5d5.*.

 -- C Função: *note PyObject: 5d5. *PyObject_Dir (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 1b94. will
     return false.

 -- C Função: *note PyObject: 5d5. *PyObject_GetIter (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 198. and returns ‘NULL’ if the object cannot be
     iterated.

 -- C Função: *note PyObject: 5d5. *PyObject_SelfIter (PyObject *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  This is equivalent to the Python ‘__iter__(self): return
     self’ method.  It is intended for *note iterator: 4c2. types, to be
     used in the *note PyTypeObject.tp_iter: 16dd. slot.

 -- C Função: *note PyObject: 5d5. *PyObject_GetAIter (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 198. 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: 76a. 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: 75f.
     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: c49. PyType_GetTypeDataSize
          (PyTypeObject *cls)
     ' Parte da *note ABI Estável: 76a. 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(): 760. returns.

     This may be larger than requested using *note
     -PyType_Spec.basicsize: 75f.; 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: 75f.  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: 762.

     On error, set an exception and return ‘NULL’.  *note TypeError:
     198. is raised if 'o' does not have *note Py_TPFLAGS_ITEMS_AT_END:
     762. 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: 603. 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 traverse function of the
     type which has the *note Py_TPFLAGS_MANAGED_DICT: 603. flag set.

     Adicionado na versão 3.13.

 -- C Função: int PyUnstable_Object_EnableDeferredRefcount (PyObject
          *obj)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Enable deferred reference counting(3) on 'obj', if supported by the
     runtime.  In the *note free-threaded: 1f3. build, this allows the
     interpreter to avoid reference count adjustments to 'obj', which
     may improve multi-threaded performance.  The tradeoff is that 'obj'
     will only be deallocated by the tracing garbage collector, and not
     when the interpreter no longer has any references to it.

     This function returns ‘1’ if deferred reference counting is enabled
     on 'obj', and ‘0’ if deferred reference counting is not supported
     or if the hint was ignored by the interpreter, such as when
     deferred reference counting is already enabled on 'obj'.  This
     function is thread-safe, and cannot fail.

     This function does nothing on builds with the *note GIL: 164.
     enabled, which do not support deferred reference counting.  This
     also does nothing if 'obj' is not an object tracked by the garbage
     collector (see *note gc.is_tracked(): 1509. and *note
     PyObject_GC_IsTracked(): b63.).

     This function is intended to be used soon after 'obj' is created,
     by the code that creates it, such as in the object’s *note tp_new:
     794. slot.

     Adicionado na versão 3.14.

 -- C Função: int PyUnstable_Object_IsUniqueReferencedTemporary
          (PyObject *obj)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Check if 'obj' is a unique temporary object.  Returns ‘1’ if 'obj'
     is known to be a unique temporary object, and ‘0’ otherwise.  This
     function cannot fail, but the check is conservative, and may return
     ‘0’ in some cases even if 'obj' is a unique temporary object.

     If an object is a unique temporary, it is guaranteed that the
     current code has the only reference to the object.  For arguments
     to C functions, this should be used instead of checking if the
     reference count is ‘1’.  Starting with Python 3.14, the interpreter
     internally avoids some reference count modifications when loading
     objects onto the operands stack by *note borrowing: 3d4. references
     when possible, which means that a reference count of ‘1’ by itself
     does not guarantee that a function argument uniquely referenced.

     In the example below, ‘my_func’ is called with a unique temporary
     object as its argument:

          my_func([1, 2, 3])

     In the example below, ‘my_func’ is 'not' called with a unique
     temporary object as its argument, even if its refcount is ‘1’:

          my_list = [1, 2, 3]
          my_func(my_list)

     See also the function *note Py_REFCNT(): 2ce.

     Adicionado na versão 3.14.

 -- C Função: int PyUnstable_IsImmortal (PyObject *obj)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Essa função retorna um valor diferente de zero se 'obj' for *note
     immortal: 28f, e zero caso contrário.  Essa função nunca falha.

          Nota: Objetos que são imortais em um versão do CPython não têm
          garantia de ser imortal em outro.

     Adicionado na versão 3.14.

 -- C Função: int PyUnstable_TryIncRef (PyObject *obj)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Increments the reference count of 'obj' if it is not zero.  Returns
     ‘1’ if the object’s reference count was successfully incremented.
     Otherwise, this function returns ‘0’.

     *note PyUnstable_EnableTryIncRef(): 1826. must have been called
     earlier on 'obj' or this function may spuriously return ‘0’ in the
     *note free threading: 1f3. build.

     This function is logically equivalent to the following C code,
     except that it behaves atomically in the *note free threading: 1f3.
     build:

          if (Py_REFCNT(op) > 0) {
             Py_INCREF(op);
             return 1;
          }
          return 0;

     This is intended as a building block for managing weak references
     without the overhead of a Python *note weak reference object: 504e.

     Typically, correct use of this function requires support from
     'obj'’s deallocator (*note tp_dealloc: 4d5d.).  For example, the
     following sketch could be adapted to implement a “weakmap” that
     works like a *note WeakValueDictionary: 187c. for a specific type:

          PyMutex mutex;

          PyObject *
          add_entry(weakmap_key_type *key, PyObject *value)
          {
              PyUnstable_EnableTryIncRef(value);
              weakmap_type weakmap = ...;
              PyMutex_Lock(&mutex);
              weakmap_add_entry(weakmap, key, value);
              PyMutex_Unlock(&mutex);
              Py_RETURN_NONE;
          }

          PyObject *
          get_value(weakmap_key_type *key)
          {
              weakmap_type weakmap = ...;
              PyMutex_Lock(&mutex);
              PyObject *result = weakmap_find(weakmap, key);
              if (PyUnstable_TryIncRef(result)) {
                  // `result` is safe to use
                  PyMutex_Unlock(&mutex);
                  return result;
              }
              // if we get here, `result` is starting to be garbage-collected,
              // but has not been removed from the weakmap yet
              PyMutex_Unlock(&mutex);
              return NULL;
          }

          // tp_dealloc function for weakmap values
          void
          value_dealloc(PyObject *value)
          {
              weakmap_type weakmap = ...;
              PyMutex_Lock(&mutex);
              weakmap_remove_value(weakmap, value);

              ...
              PyMutex_Unlock(&mutex);
          }

     Adicionado na versão 3.14.

 -- C Função: void PyUnstable_EnableTryIncRef (PyObject *obj)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Enables subsequent uses of *note PyUnstable_TryIncRef(): 1825. on
     'obj'.  The caller must hold a *note strong reference: 5d8. to
     'obj' when calling this.

     Adicionado na versão 3.14.

 -- C Função: int PyUnstable_Object_IsUniquelyReferenced (PyObject *op)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Determine if 'op' only has one reference.

     On GIL-enabled builds, this function is equivalent to *note
     Py_REFCNT: 2ce.(*note op: 3c3.) == 1.

     On a *note free threaded: 1f3. build, this checks if 'op'’s *note
     reference count: 4d6a. is equal to one and additionally checks if
     'op' is only used by this thread.  *note Py_REFCNT: 2ce.(*note op:
     3c3.) == 1 is 'not' thread-safe on free threaded builds; prefer
     this function.

     The caller must hold an *note attached thread state: 4d72, despite
     the fact that this function doesn’t call into the Python
     interpreter.  This function cannot fail.

     Adicionado na versão 3.14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3119/

   (2) https://peps.python.org/pep-3119/

   (3) https://peps.python.org/pep-0703/#deferred-reference-counting


File: python.info,  Node: Protocolo de chamada,  Next: Protocolo de número,  Prev: Protocolo de objeto,  Up: Camada de Objetos Abstratos

7.8.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.8.2.1 O protocolo 'tp_call'
.............................

Instâncias de classe que definem *note tp_call: 770. 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: 794. e
*note tp_init: 796. também passam argumento dessa forma.

Para chamar um objeto, use *note PyObject_Call(): 631. ou outra *note
API de chamada: 5053.


File: python.info,  Node: O protocolo vectorcall,  Next: API de chamada de objetos,  Prev: O protocolo tp_call,  Up: Protocolo de chamada

7.8.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(): 631.).  Portanto,
uma classe que suporta vectorcall precisa também implementar *note
tp_call: 770.  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: 770. para *note
PyVectorcall_Call(): 76d.  Vale a pena repetir:

     Aviso: Uma classe que suporte vectorcall também 'precisa'
     implementar *note tp_call: 770. com a mesma semântica.

Alterado na versão 3.12: O sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL:
76b. agora é removido da classe quando o método *note __call__(): 76f.
está reatribuído.  (Internamente, isso apenas define *note tp_call: 770,
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: 3cc. 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: 76b. e configurando *note
tp_vectorcall_offset: 5055. 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: 5d5. *(*vectorcallfunc)(*note
          PyObject: 5d5. *callable, *note PyObject: 5d5. *const *args,
          size_t nargsf, *note PyObject: 5d5. *kwnames)
     ' Parte da *note ABI Estável: 76a. 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: 775.  Para
          obter o número real de argumentos posicionais de 'nargsf', use
          *note PyVectorcall_NARGS(): 76c.

   - 
     '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: 76a. 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(): 774, 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: 775.  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: 5053. como qualquer outra invocável.  *note
PyObject_Vectorcall(): 773. 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.8.2.3 Controle de recursão
............................

Quando utilizando 'tp_call', invocadores não precisam se preocupar sobre
*note recursão: 4fcc.: CPython usa *note Py_EnterRecursiveCall(): 3cf. e
*note Py_LeaveRecursiveCall(): b61. 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.8.2.4 API de suporte à chamada de vetores
...........................................

 -- C Função: *note Py_ssize_t: c49. PyVectorcall_NARGS (size_t nargsf)
     ' Parte da *note ABI Estável: 76a. 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: 76e. 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: 5d5. *PyVectorcall_Call (PyObject
          *callable, PyObject *tuple, PyObject *dict)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'  Chama o
     *note vectorcallfunc: 76e. 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: 770. ou usada em uma implementação de ‘tp_call’.
     Ela não verifica o sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL:
     76b. 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.8.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(): 631.                    ‘PyObject *’           tupla                    dict/‘NULL’
                                                                                               
                                                                                               
*note PyObject_CallNoArgs(): 630.              ‘PyObject *’           —                        —
                                                                                               
                                                                                               
*note PyObject_CallOneArg(): b65.              ‘PyObject *’           1 objeto                 —
                                                                                               
                                                                                               
*note PyObject_CallObject(): 4d4d.             ‘PyObject *’           tupla/‘NULL’             —
                                                                                               
                                                                                               
*note PyObject_CallFunction(): 633.            ‘PyObject *’           formato                  —
                                                                                               
                                                                                               
*note PyObject_CallMethod(): 634.              obj + ‘char*’          formato                  —
                                                                                               
                                                                                               
*note PyObject_CallFunctionObjArgs(): 4ee7.    ‘PyObject *’           variádica                —
                                                                                               
                                                                                               
*note PyObject_CallMethodObjArgs(): 1c96.      obj + nome             variádica                —
                                                                                               
                                                                                               
*note PyObject_CallMethodNoArgs(): 505a.       obj + nome             —                        —
                                                                                               
                                                                                               
*note PyObject_CallMethodOneArg(): 505b.       obj + nome             1 objeto                 —
                                                                                               
                                                                                               
*note PyObject_Vectorcall(): 773.              ‘PyObject *’           vectorcall               vectorcall
                                                                                               
                                                                                               
*note PyObject_VectorcallDict(): 505c.         ‘PyObject *’           vectorcall               dict/‘NULL’
                                                                                               
                                                                                               
*note PyObject_VectorcallMethod(): 774.        arg + nome             vectorcall               vectorcall
                                                                                               

 -- C Função: *note PyObject: 5d5. *PyObject_Call (PyObject *callable,
          PyObject *args, PyObject *kwargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyObject_CallNoArgs (PyObject
          *callable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *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: 5d5. *PyObject_CallObject (PyObject
          *callable, PyObject *args)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyObject_CallFunction (PyObject
          *callable, const char *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 3bf.  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: 5d5.*,
     *note PyObject_CallFunctionObjArgs(): 4ee7. é uma alternativa mais
     rápida.

     Alterado na versão 3.4: O tipo de 'format' foi mudado de ‘char *’.

 -- C Função: *note PyObject: 5d5. *PyObject_CallMethod (PyObject *obj,
          const char *name, const char *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 3bf. 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: 5d5.*,
     *note PyObject_CallMethodObjArgs(): 1c96. é 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: 5d5. *PyObject_CallFunctionObjArgs
          (PyObject *callable, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Chama um objeto Python chamável de 'callable', com um número
     variável de argumentos *note PyObject: 5d5.*.  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: 5d5. *PyObject_CallMethodObjArgs (PyObject
          *obj, PyObject *name, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5.*.  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: 5d5. *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: 5d5. *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: 5d5. *PyObject_Vectorcall (PyObject
          *callable, PyObject *const *args, size_t nargsf, PyObject
          *kwnames)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'  Chama um
     objeto Python chamável 'callable'.  Os argumentos são os mesmos de
     *note vectorcallfunc: 76e.  Se 'callable' tiver suporte a *note
     vectorcall: 769, 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.9.

 -- C Função: *note PyObject: 5d5. *PyObject_VectorcallDict (PyObject
          *callable, PyObject *const *args, size_t nargsf, PyObject
          *kwdict)

     Chama 'callable' com argumentos posicionais passados exatamente
     como no protocolo *note vectorcall: 769, 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: 5d5. *PyObject_VectorcallMethod (PyObject
          *name, PyObject *const *args, size_t nargsf, PyObject
          *kwnames)
     ' Parte da *note ABI Estável: 76a. 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: 775. se o valor de ‘args[0]’ puder
     ser alterado temporariamente.  Argumentos nomeados podem ser
     passados como em *note PyObject_Vectorcall(): 773.

     Se o objeto tem o recurso *note Py_TPFLAGS_METHOD_DESCRIPTOR: 505d,
     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.8.2.6 API de suporte a chamadas
.................................

 -- C Função: int PyCallable_Check (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  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.8.3 Protocolo de número
-------------------------

 -- C Função: int PyNumber_Check (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  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: 5d5. *PyNumber_Add (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Subtract (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Multiply (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_MatrixMultiply (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *PyNumber_FloorDivide (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_TrueDivide (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Remainder (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Divmod (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     See the built-in function *note divmod(): b8f.  Returns ‘NULL’ on
     failure.  This is the equivalent of the Python expression
     ‘divmod(o1, o2)’.

 -- C Função: *note PyObject: 5d5. *PyNumber_Power (PyObject *o1,
          PyObject *o2, PyObject *o3)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     See the built-in function *note pow(): 1a4.  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: 4d40. in its place (passing ‘NULL’ for 'o3' would
     cause an illegal memory access).

 -- C Função: *note PyObject: 5d5. *PyNumber_Negative (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Positive (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Returns 'o' on success, or ‘NULL’ on failure.  This is the
     equivalent of the Python expression ‘+o’.

 -- C Função: *note PyObject: 5d5. *PyNumber_Absolute (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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: 5d5. *PyNumber_Invert (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Lshift (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Rshift (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_And (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Xor (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Or (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceAdd (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceSubtract (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceMultiply (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceMatrixMultiply
          (PyObject *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *PyNumber_InPlaceFloorDivide
          (PyObject *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceTrueDivide (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceRemainder (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlacePower (PyObject *o1,
          PyObject *o2, PyObject *o3)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     See the built-in function *note pow(): 1a4.  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: 4d40, or an in-place variant of ‘pow(o1, o2, o3)’
     otherwise.  If 'o3' is to be ignored, pass *note Py_None: 4d40. in
     its place (passing ‘NULL’ for 'o3' would cause an illegal memory
     access).

 -- C Função: *note PyObject: 5d5. *PyNumber_InPlaceLshift (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceRshift (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceAnd (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceXor (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_InPlaceOr (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyNumber_Long (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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: 5d5. *PyNumber_Float (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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: 5d5. *PyNumber_Index (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Returns the 'o' converted to a Python int on success or
     ‘NULL’ with a *note TypeError: 198. exception raised on failure.

     Alterado na versão 3.10: O resultado sempre tem o tipo exato *note
     int: 19b.  Anteriormente, o resultado poderia ter sido uma
     instância de uma subclasse de ‘int’.

 -- C Função: *note PyObject: 5d5. *PyNumber_ToBase (PyObject *n, int
          base)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): a89.
     first.

 -- C Função: *note Py_ssize_t: c49. PyNumber_AsSsize_t (PyObject *o,
          PyObject *exc)
     ' Parte da *note ABI Estável: 76a.'  Returns 'o' converted to a
     *note Py_ssize_t: c49. 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: c49. value would raise an *note
     OverflowError: a77, then the 'exc' argument is the type of
     exception that will be raised (usually *note IndexError: 1723. or
     *note OverflowError: a77.).  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: 76a. 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.8.4 Protocolo de sequência
----------------------------

 -- C Função: int PySequence_Check (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  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__(): 581. a menos que sejam subclasses de *note dict:
     183. 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: c49. PySequence_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: c49. PySequence_Length (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'

     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: 5d5. *PySequence_Concat (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PySequence_Repeat (PyObject *o,
          Py_ssize_t count)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PySequence_InPlaceConcat (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PySequence_InPlaceRepeat (PyObject
          *o, Py_ssize_t count)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PySequence_GetItem (PyObject *o,
          Py_ssize_t i)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna o elemento 'i' de 'o' ou ‘NULL’ em caso de falha.
     Equivale à expressão Python ‘o[i]’.

 -- C Função: *note PyObject: 5d5. *PySequence_GetSlice (PyObject *o,
          Py_ssize_t i1, Py_ssize_t i2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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(): 1ceb.

 -- C Função: int PySequence_DelItem (PyObject *o, Py_ssize_t i)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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: 76a.'  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: c49. PySequence_Count (PyObject *o,
          PyObject *value)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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: int PySequence_In (PyObject *o, PyObject *value)
     ' Parte da *note ABI Estável: 76a.'  Apelido para *note
     PySequence_Contains(): 3d6.

     Descontinuado desde a versão 3.14: A função está *note suavemente
     descontinuada: 23c. e não deve mais ser usada para escrever novos
     códigos.

 -- C Função: *note Py_ssize_t: c49. PySequence_Index (PyObject *o,
          PyObject *value)
     ' Parte da *note ABI Estável: 76a.'  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: 5d5. *PySequence_List (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PySequence_Tuple (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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: 5d5. *PySequence_Fast (PyObject *o, const
          char *m)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 198. 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: 4ff0. ou um *note PyListObject: 5067. 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: c49. PySequence_Fast_GET_SIZE (PyObject
          *o)

     Retorna o comprimento de 'o', presumindo que 'o' foi retornado por
     *note PySequence_Fast(): 1802. e que 'o' não seja ‘NULL’.  O
     tamanho também pode ser obtido ao chamar *note PySequence_Size():
     1ce8. em 'o', mas *note PySequence_Fast_GET_SIZE(): 3c7. é mais
     rápida, ao supor que 'o' é uma lista ou tupla.

 -- C Função: *note PyObject: 5d5. *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():
     1802, que 'o' seja ‘NULL’, e que 'i' esteja nos limites.

 -- C Função: *note PyObject: 5d5. **PySequence_Fast_ITEMS (PyObject *o)

     Retorna o vetor subjacente de ponteiros PyObject.  Presume que 'o'
     foi retornado por *note PySequence_Fast(): 1802. 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: 5d5. *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(): 1ce9, mas sem verificar se *note
     PySequence_Check(): 4efb. 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.8.5 Protocolo de mapeamento
-----------------------------

Veja também *note PyObject_GetItem(): 4dd5, *note PyObject_SetItem():
4dd3. e *note PyObject_DelItem(): 4ee8.

 -- C Função: int PyMapping_Check (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  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__(): 581. 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: c49. PyMapping_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: c49. PyMapping_Length (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'

     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: 5d5. *PyMapping_GetItemString (PyObject
          *o, const char *key)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  É o mesmo que *note PyObject_GetItem(): 4dd5, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 5d5.*.

 -- C Função: int PyMapping_GetOptionalItem (PyObject *obj, PyObject
          *key, PyObject **result)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Variante
     de *note PyObject_GetItem(): 4dd5. que não levanta *note KeyError:
     5dd. se a chave não for encontrada.

     Se a chave for encontrada, retorna ‘1’ e define '*result' como uma
     nova *note referência forte: 5d8. para o valor correspondente.  Se
     a chave não for encontrada, retorna ‘0’ e define '*result' como
     ‘NULL’; o *note KeyError: 5dd. é silenciado.  Se um erro diferente
     de *note KeyError: 5dd. 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: 76a. desde a versão 3.13.'  É o mesmo
     que *note PyMapping_GetOptionalItem(): 5de, mas 'key' é
     especificado como uma string de bytes codificada em UTF-8 const
     char*, em vez de um *note PyObject: 5d5.*.

     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: 76a.'  É o mesmo que *note
     PyObject_SetItem(): 4dd3, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 5d5.*.

 -- C Função: int PyMapping_DelItem (PyObject *o, PyObject *key)

     Este é um apelido de *note PyObject_DelItem(): 4ee8.

 -- C Função: int PyMapping_DelItemString (PyObject *o, const char *key)

     É o mesmo que *note PyObject_DelItem(): 4ee8, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 5d5.*.

 -- C Função: int PyMapping_HasKeyWithError (PyObject *o, PyObject *key)
     ' Parte da *note ABI Estável: 76a. 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: 76a. desde a versão 3.13.'  É o mesmo
     que *note PyMapping_HasKeyWithError(): 613, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: int PyMapping_HasKey (PyObject *o, PyObject *key)
     ' Parte da *note ABI Estável: 76a.'  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 esse método chama *note
          __getitem__(): 581. são silenciosamente ignoradas.  Para o
          tratamento adequado de erros, use *note
          PyMapping_HasKeyWithError(): 613, *note
          PyMapping_GetOptionalItem(): 5de. ou *note PyObject_GetItem():
          4dd5. em vez disso.

 -- C Função: int PyMapping_HasKeyString (PyObject *o, const char *key)
     ' Parte da *note ABI Estável: 76a.'  É o mesmo que *note
     PyMapping_HasKey(): 614, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 5d5.*.

          Nota: As exceções que ocorrem quando esse método chama *note
          __getitem__(): 581. ou ao criar o objeto temporário *note str:
          169. são silenciosamente ignoradas.  Para o tratamento
          adequado de erros, use *note
          PyMapping_HasKeyStringWithError(): 615, *note
          PyMapping_GetOptionalItemString(): 5df. ou *note
          PyMapping_GetItemString(): 4eb3. em vez disso.

 -- C Função: *note PyObject: 5d5. *PyMapping_Keys (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyMapping_Values (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyMapping_Items (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.8.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: 76a. desde a versão 3.8.'  Retorna
     valor diferente de zero se o objeto 'o' puder ser passado com
     segurança para *note PyIter_NextItem(): 395, e ‘0’ caso contrário.
     Esta função sempre tem sucesso.

 -- C Função: int PyAIter_Check (PyObject *o)
     ' Parte da *note ABI Estável: 76a. 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: int PyIter_NextItem (PyObject *iter, PyObject **item)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Retorna
     ‘1’ e define 'item' como uma *note referência forte: 5d8. do
     próximo valor do iterador 'iter' em caso de sucesso.  Retorna ‘0’ e
     define 'item' como ‘NULL’ se não houver valores restantes.  Retorna
     ‘-1’, define 'item' como ‘NULL’ e define uma exceção em caso de
     erro.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyIter_Next (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Esta é uma versão mais antiga de ‘PyIter_NextItem()’, que
     foi mantida para retrocompatibilidade.  Prefira *note
     PyIter_NextItem(): 395.

     Retorna o próximo valor do iterador 'o'.  O objeto deve ser um
     iterador de acordo com *note PyIter_Check(): 1b97. (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.

 -- C Tipo: type PySendResult

     O valor de enum usado para representar diferentes resultados de
     *note PyIter_Send(): a8e.

     Adicionado na versão 3.10.

 -- C Função: *note PySendResult: 5073. PyIter_Send (PyObject *iter,
          PyObject *arg, PyObject **presult)
     ' Parte da *note ABI Estável: 76a. 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.8.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: 192. e *note bytearray: 342. embutidas, e alguns tipos de
extensão como *note array.array: 4b8.  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: 25f.  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: 5077.; para Python, consulte *note
     Emulando tipos buffer: 22a5.

   - 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: 22a5.

Objetos simples como *note bytes: 192. e *note bytearray: 342. 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:
4b8. podem ser valores de vários bytes.

Um exemplo de interface de um consumidor de buffer é o método *note
write(): ecb. 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(): 17f9, 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(): 62e. com os parâmetros certos;

   * chamar *note PyArg_ParseTuple(): 3be. (ou um dos seus irmãos) com
     um dos *note códigos de formatação: 3d2. ‘y*’, ‘w*’ ou ‘s*’.

Em ambos os casos, *note PyBuffer_Release(): 62f. 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: 22a5. e *note memoryview: 165.

* 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.8.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: 5d5. 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: 507a. pode ser criado.

Para obter instruções curtas sobre como escrever um objeto exportador,
consulte *note Buffer Object Structures: 5077.  Para obter um buffer,
veja *note PyObject_GetBuffer(): 62e.

 -- C Tipo: type Py_buffer
     ' Parte da *note ABI Estável: 76a. (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: 507c. o valor pode
          apontar para o final do bloco de memória.

          Para vetores *note contíguos: 251b, o valor aponta para o
          início do bloco de memória.

      -- C Membro: *note PyObject: 5d5. *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(): 62f.  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(): 95a. ou
          *note PyBuffer_FillInfo(): 959. esse campo é ‘NULL’.  Em
          geral, objetos exportadores NÃO DEVEM usar esse esquema.

      -- C Membro: *note Py_ssize_t: c49. 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: 507f. ou *note PyBUF_WRITABLE: 15a7.

      -- C Membro: int readonly

          Um indicador de se o buffer é somente leitura.  Este campo é
          controlado pelo sinalizador *note PyBUF_WRITABLE: 15a7.

      -- C Membro: *note Py_ssize_t: c49. itemsize

          O tamanho do item em bytes de um único elemento.  O mesmo que
          o valor de *note struct.calcsize(): 1c60. chamado em valores
          não ‘NULL’ de *note format: 5082.

          Exceção importante: Se um consumidor requisita um buffer sem
          sinalizador *note PyBUF_FORMAT: 5083, *note format: 5082. será
          definido como ‘NULL’, mas *note itemsize: 5081. ainda terá seu
          valor para o formato original.

          Se *note shape: 5084. está presente, a igualdade
          ‘product(shape) * itemsize == len’ ainda é válida e o usuário
          pode usar *note itemsize: 5081. para navegar o buffer.

          Se *note shape: 5084. é ‘NULL’ como resultado de uma *note
          PyBUF_SIMPLE: 507f. ou uma requisição *note PyBUF_WRITABLE:
          15a7, o consumidor deve ignorar *note itemsize: 5081. e
          presumir ‘itemsize == 1’.

      -- C Membro: char *format

          Uma string terminada por 'NULL' no estilo de sintaxe de módulo
          *note struct: db. descrevendo os conteúdos de um único item.
          Se isso é ‘NULL’, ‘"B"’ (unsigned bytes) é presumido.

          Este campo é controlado pelo sinalizador *note PyBUF_FORMAT:
          5083.

      -- C Membro: int ndim

          O número de dimensões de memória representado como um array
          n-dimensional.  Se for ‘0’, *note buf: 507b. aponta para um
          único elemento representando um escalar.  Neste caso, *note
          shape: 5084, *note strides: 507c. e *note suboffsets: 5086.
          DEVEM ser ‘NULL’.  O número máximo de dimensões é dado por
          *note PyBUF_MAX_NDIM: 5087.

      -- C Membro: *note Py_ssize_t: c49. *shape

          Uma matriz de *note Py_ssize_t: c49. do comprimento *note
          ndim: 5085. 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: 507e.

          Os valores da forma são restritos a ‘shape[n] >= 0’.  The case
          ‘shape[n] == 0’ requer atenção especial.  Veja *note complex
          arrays: 5088. para mais informações.

          A forma de acesso a matriz é de somente leitura para o
          usuário.

      -- C Membro: *note Py_ssize_t: c49. *strides

          Um vetor de *note Py_ssize_t: c49. de comprimento *note ndim:
          5085. 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: 5088. para mais informações.

          A matriz de passos é somente leitura para o consumidor.

      -- C Membro: *note Py_ssize_t: c49. *suboffsets

          Uma matriz de *note Py_ssize_t: c49. de comprimento *note
          ndim: 5085.  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: 5088. 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

     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.8.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(): 62e.  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: 951. 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.8.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: 507d, *note buf: 507b,
*note len: 507e, *note itemsize: 5081, *note ndim: 5085.


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.8.7.4 apenas em formato
.........................

      -- C Macro: PyBUF_WRITABLE

          Controla o campo *note readonly: 5080. .  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: 507f. | *note PyBUF_WRITABLE: 15a7. pode ser
          usado para requisitar um buffer simples gravável.

      -- C Macro: PyBUF_FORMAT

          Controla o campo *note format: 5082.  Se configurado, este
          campo DEVE ser preenchido corretamente.  Caso contrário, este
          campo DEVE ser ‘NULL’.

:*note PyBUF_WRITABLE: 15a7. pode ser |’d para qualquer um dos
sinalizadores na próxima seção.  Uma vez que *note PyBUF_WRITABLE: 15a7.
é definido como 0, *note PyBUF_WRITABLE: 15a7. pode ser usado como uma
bandeira autônoma para solicitar um buffer simples gravável.

*note PyBUF_FORMAT: 5083. deve ser |’d para qualquer um dos
sinalizadores exceto *note PyBUF_SIMPLE: 507f, 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.8.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
                                                            
                                                            
 -- C Macro: PyBUF_STRIDES        sim         sim           NULL
                                                            
                                                            
 -- C Macro: PyBUF_ND             sim         NULL          NULL
                                                            
                                                            
 -- C Macro: PyBUF_SIMPLE         NULL        NULL          NULL
                                                            


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.8.7.6 requisições contíguas
.............................

*note contiguity: 251b. 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
                                                                                   
                                                                                   
 -- C Macro: PyBUF_F_CONTIGUOUS         sim         sim           NULL             F
                                                                                   
                                                                                   
 -- C Macro: PyBUF_ANY_CONTIGUOUS       sim         sim           NULL             C ou F
                                                                                   
                                                                                   
*note PyBUF_ND: 5090.                   sim         NULL          NULL             C
                                                                                   


File: python.info,  Node: requisições compostas,  Prev: requisições contíguas,  Up: Tipos de solicitação do buffer

7.8.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(): 957. para determinar a
contiguidade.

Solicitação                         Forma       Avanços       subconjuntos     contig       readonly       formato
                                                                                                           
------------------------------------------------------------------------------------------------------------------------
                                                                                                           
 -- C Macro: PyBUF_FULL             sim         sim           se necessário    U            0              sim
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_FULL_RO          sim         sim           se necessário    U            1 ou 0         sim
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_RECORDS          sim         sim           NULL             U            0              sim
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_RECORDS_RO       sim         sim           NULL             U            1 ou 0         sim
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_STRIDED          sim         sim           NULL             U            0              NULL
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_STRIDED_RO       sim         sim           NULL             U            1 ou 0         NULL
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_CONTIG           sim         NULL          NULL             C            0              NULL
                                                                                                           
                                                                                                           
 -- C Macro: PyBUF_CONTIG_RO        sim         NULL          NULL             C            1 ou 0         NULL
                                                                                                           


File: python.info,  Node: Vetores Complexos,  Next: Funções relacionadas ao Buffer,  Prev: Tipos de solicitação do buffer,  Up: Protocolo de buffer

7.8.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.8.7.9 Estilo NumPy: forma e avanços
.....................................

A estrutura lógica de vetores do estilo NumPy é definida por *note
itemsize: 5081, *note ndim: 5085, *note shape: 5084. e *note strides:
507c.

Se ‘ndim == 0’, a localização da memória apontada para *note buf: 507b.
é interpretada como um escalar de tamanho *note itemsize: 5081.  Nesse
caso, ambos *note shape: 5084. e *note strides: 507c. são ‘NULL’.

Se *note strides: 507c. é ‘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: 507b. 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.8.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: 507b,
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.8.7.11 Funções relacionadas ao Buffer
.......................................

 -- C Função: int PyObject_CheckBuffer (PyObject *obj)
     ' Parte da *note ABI Estável: 76a. 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(): 62e. 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: 76a. 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:
     1ac8, 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: 5077.).

     Chamadas bem sucedidas para *note PyObject_GetBuffer(): 62e. devem
     ser emparelhadas a chamadas para *note PyBuffer_Release(): 62f,
     similar para ‘malloc()’ e ‘free()’.  Assim, após o consumidor
     terminar com o buffer, *note PyBuffer_Release(): 62f. deve ser
     chamado exatamente uma vez.

 -- C Função: void PyBuffer_Release (Py_buffer *view)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.11.'  Libera o
     buffer de 'view' e libera o *note strong reference: 5d8. (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(): 62e.

 -- C Função: *note Py_ssize_t: c49. PyBuffer_SizeFromFormat (const char
          *format)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.11.'  Retorna o
     *note itemsize: 5081. implícito de *note format: 5082.  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: 76a. desde a versão 3.11.'  Retorna
     ‘1’ se a memória definida pela 'view' é *note contígua: 251b. 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: 76a. 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: 76a. 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: 76a. 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: 76a. 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: 76a. desde a versão 3.11.'  Preenche
     o array 'strides' com byte-strides de um array *note contíguo:
     251b. (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: 76a. 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:
     15a7. 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:
     1ac8. , defina ‘view->obj’ para ‘NULL’ e retorne ‘-1’ ;

     Se esta função é usada como parte de um *note getbufferproc: 5077,
     '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.9 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(): 50a3.  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 Função::
* Outros Objetos::


File: python.info,  Node: Objetos Fundamentais,  Next: Objetos Numéricos,  Up: Camada de Objetos Concretos

7.9.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.9.1.1 Objetos tipo
....................

 -- C Tipo: type PyTypeObject
     ' Parte da *note API Limitada: 76a. (como uma estrutura opaca).'  A
     estrutura C dos objetos usados para descrever tipos embutidos.

 -- C Variável: *note PyTypeObject: c8f. PyType_Type
     ' Parte da *note ABI Estável: 76a.'  Este é o objeto de tipo para
     objetos tipo; é o mesmo objeto que *note type: f38. 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: 76a.'  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: 76a.'  Return the *note tp_flags:
     1b60. 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:
     1b60. itself is not part of the *note limited API: 62b.

     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: 5d5. *PyType_GetDict (PyTypeObject *type)

     Return the type object’s internal namespace, which is otherwise
     only exposed via a read-only proxy (*note cls.__dict__: e4b.).
     This is a replacement for accessing *note tp_dict: 19cb. 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(): 5e0.)
     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: 76a.'  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(): 77b.  In case of error (e.g.  no more watcher IDs
     available), return ‘-1’ and set an exception.

     In free-threaded builds, *note PyType_AddWatcher(): 77a. 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(): 77a.).  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(): 77a.

     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(): 77a. will be called whenever *note
     PyType_Modified(): 1a97. 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(): 77a.

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*PyType_WatchCallback)(*note PyObject: 5d5.
          *type)

     Type of a type-watcher callback function.

     The callback must not modify 'type' or cause *note
     PyType_Modified(): 1a97. 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_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: 976.

 -- C Função: int PyType_IsSubtype (PyTypeObject *a, PyTypeObject *b)
     ' Parte da *note ABI Estável: 76a.'  Retorna verdadeiro se 'a' for
     um subtipo de 'b'.

     This function only checks for actual subtypes, which means that
     *note __subclasscheck__(): 225e. is not called on 'b'.  Call *note
     PyObject_IsSubclass(): 109d. to do the same check that *note
     issubclass(): 9ba. would do.

 -- C Função: *note PyObject: 5d5. *PyType_GenericAlloc (PyTypeObject
          *type, Py_ssize_t nitems)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Generic handler for the *note tp_alloc: 4d71. slot of a type
     object.  Uses Python’s default memory allocation mechanism to
     allocate memory for a new instance, zeros the memory, then
     initializes the memory as if by calling *note PyObject_Init(): c54.
     or *note PyObject_InitVar(): 1bf8.

     Do not call this directly to allocate memory for an object; call
     the type’s *note tp_alloc: 4d71. slot instead.

     For types that support garbage collection (i.e., the *note
     Py_TPFLAGS_HAVE_GC: 976. flag is set), this function behaves like
     *note PyObject_GC_New: c8c. or *note PyObject_GC_NewVar: c8d.
     (except the memory is guaranteed to be zeroed before
     initialization), and should be paired with *note PyObject_GC_Del():
     16f1. in *note tp_free: 4d70.  Otherwise, it behaves like *note
     PyObject_New: b72. or *note PyObject_NewVar: b73. (except the
     memory is guaranteed to be zeroed before initialization) and should
     be paired with *note PyObject_Free(): e53. in *note tp_free: 4d70.

 -- C Função: *note PyObject: 5d5. *PyType_GenericNew (PyTypeObject
          *type, PyObject *args, PyObject *kwds)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Generic handler for the *note tp_new: 794. slot of a type
     object.  Creates a new instance using the type’s *note tp_alloc:
     4d71. slot and returns the resulting object.

 -- C Função: int PyType_Ready (PyTypeObject *type)
     ' Parte da *note ABI Estável: 76a.'  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: 976. 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: 976. in its flags then it 'must' implement
          the GC protocol itself by at least implementing the *note
          tp_traverse: 977. handle.

 -- C Função: *note PyObject: 5d5. *PyType_GetName (PyTypeObject *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.11.'  Return the type’s name.  Equivalent to
     getting the type’s *note __name__: 1699. attribute.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 5d5. *PyType_GetQualName (PyTypeObject
          *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.11.'  Return the type’s qualified name.
     Equivalent to getting the type’s *note __qualname__: 220c.
     attribute.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 5d5. *PyType_GetFullyQualifiedName
          (PyTypeObject *type)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Return
     the type’s fully qualified name.  Equivalent to
     ‘f"{type.__module__}.{type.__qualname__}"’, or *note
     type.__qualname__: 220c. if *note type.__module__: 60b. is not a
     string or is equal to ‘"builtins"’.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyType_GetModuleName (PyTypeObject
          *type)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Return
     the type’s module name.  Equivalent to getting the *note
     type.__module__: 60b. attribute.

     Adicionado na versão 3.13.

 -- C Função: void *PyType_GetSlot (PyTypeObject *type, int slot)
     ' Parte da *note ABI Estável: 76a. 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: 50ac. por possíveis valores do
     argumento 'slot'.

     Adicionado na versão 3.4.

     Alterado na versão 3.10: *note PyType_GetSlot(): a92. can now
     accept all types.  Previously, it was limited to *note heap types:
     b54.

 -- C Função: *note PyObject: 5d5. *PyType_GetModule (PyTypeObject
          *type)
     ' Parte da *note ABI Estável: 76a. 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(): 768.

     Se nenhum módulo estiver associado com o tipo fornecido, define
     *note TypeError: 198. 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: 95d. to get the class that
     defines the method.  See *note PyType_GetModuleByDef(): 629. 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: 76a. 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(): b6d. on
     the result of *note PyType_GetModule(): b5c.

     Se nenhum módulo estiver associado com o tipo fornecido, define
     *note TypeError: 198. e retorna ‘NULL’.

     If the 'type' has an associated module but its state is ‘NULL’,
     returns ‘NULL’ without setting an exception.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 5d5. *PyType_GetModuleByDef (PyTypeObject
          *type, struct PyModuleDef *def)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a. desde a versão 3.13.'  Find the first superclass
     whose module was created from the given *note PyModuleDef: b6a.
     'def', and return that module.

     If no module is found, raises a *note TypeError: 198. and returns
     ‘NULL’.

     This function is intended to be used together with *note
     PyModule_GetState(): b6d. to get module state from slot methods
     (such as *note tp_init: 796. or *note nb_add: 50ad.) and other
     places where a method’s defining class cannot be passed using the
     *note PyCMethod: 95d. calling convention.

     The returned reference is *note borrowed: 3d4. from 'type', and
     will be valid as long as you hold a reference to 'type'.  Do not
     release it with *note Py_DECREF(): 785. or similar.

     Adicionado na versão 3.11.

 -- C Função: int PyType_GetBaseByToken (PyTypeObject *type, void
          *token, PyTypeObject **result)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Find the
     first superclass in 'type'’s *note method resolution order: 2471.
     whose *note Py_tp_token: 3ae. token is equal to the given one.

        * If found, set '*result' to a new *note strong reference: 5d8.
          to it and return ‘1’.

        * If not found, set '*result' to ‘NULL’ and return ‘0’.

        * On error, set '*result' to ‘NULL’ and return ‘-1’ with an
          exception set.

     The 'result' argument may be ‘NULL’, in which case '*result' is not
     set.  Use this if you need only the return value.

     The 'token' argument may not be ‘NULL’.

     Adicionado na versão 3.14.

 -- 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: 75e. 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.

* Menu:

* Creating Heap-Allocated Types::


File: python.info,  Node: Creating Heap-Allocated Types,  Up: Objetos tipo<2>

7.9.1.2 Creating Heap-Allocated Types
.....................................

The following functions and structs are used to create *note heap types:
b54.

 -- C Função: *note PyObject: 5d5. *PyType_FromMetaclass (PyTypeObject
          *metaclass, PyObject *module, PyType_Spec *spec, PyObject
          *bases)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'  Create
     and return a *note heap type: b54. from the 'spec' (see *note
     Py_TPFLAGS_HEAPTYPE: aa2.).

     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: 794. are not supported,
     except if ‘tp_new’ is ‘NULL’.

     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: c72.

     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(): b5c.  The
     associated module is not inherited by subclasses; it must be
     specified for each class individually.

     This function calls *note PyType_Ready(): 975. on the new type.

     Note that this function does 'not' fully match the behavior of
     calling *note type(): f38. or using the *note class: 14d3.
     statement.  With user-provided base types or metaclasses, prefer
     *note calling: 5053. *note type: f38. (or the metaclass) over
     ‘PyType_From*’ functions.  Specifically:

        * *note __new__(): 795. is not called on the new class (and it
          must be set to ‘type.__new__’).

        * *note __init__(): 8b4. is not called on the new class.

        * *note __init_subclass__(): 838. is not called on any bases.

        * *note __set_name__(): e3c. is not called on new descriptors.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 5d5. *PyType_FromModuleAndSpec (PyObject
          *module, PyType_Spec *spec, PyObject *bases)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: f38. instances were returned.

     The *note tp_new: 794. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 794. is deprecated.

     Alterado na versão 3.14: Creating classes whose metaclass overrides
     *note tp_new: 794. is no longer allowed.

 -- C Função: *note PyObject: 5d5. *PyType_FromSpecWithBases
          (PyType_Spec *spec, PyObject *bases)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: f38. instances were returned.

     The *note tp_new: 794. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 794. is deprecated.

     Alterado na versão 3.14: Creating classes whose metaclass overrides
     *note tp_new: 794. is no longer allowed.

 -- C Função: *note PyObject: 5d5. *PyType_FromSpec (PyType_Spec *spec)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: f38. instances
     were returned.

     The *note tp_new: 794. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 794. is deprecated.

     Alterado na versão 3.14: Creating classes whose metaclass overrides
     *note tp_new: 794. is no longer allowed.

 -- C Função: int PyType_Freeze (PyTypeObject *type)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Make a
     type immutable: set the *note Py_TPFLAGS_IMMUTABLETYPE: 3cc. flag.

     All base classes of 'type' must be immutable.

     On success, return ‘0’.  On error, set an exception and return
     ‘-1’.

     The type must not be used before it’s made immutable.  For example,
     type instances must not be created before the type is made
     immutable.

     Adicionado na versão 3.14.

 -- C Tipo: type PyType_Spec
     ' Parte da *note ABI Estável: 76a. (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:
          1b95.

      -- C Membro: int basicsize

          If positive, specifies the size of the instance in bytes.  It
          is used to set *note PyTypeObject.tp_basicsize: b74.

          If zero, specifies that *note tp_basicsize: b74. 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(): 760. 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: b74.’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: 2252.  See
          ‘tp_itemsize’ documentation for caveats.

          If zero, *note tp_itemsize: 2252. 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:
               2252.).

             - The requested *note PyType_Spec.basicsize: 75f. is
               positive, suggesting that the memory layout of the base
               class is known.

             - The requested *note PyType_Spec.basicsize: 75f. is zero,
               suggesting that the subclass does not access the
               instance’s memory directly.

             - With the *note Py_TPFLAGS_ITEMS_AT_END: 762. flag.

      -- C Membro: unsigned int flags

          Type flags, used to set *note PyTypeObject.tp_flags: 1b60.

          If the ‘Py_TPFLAGS_HEAPTYPE’ flag is not set, *note
          PyType_FromSpecWithBases(): 793. sets it automatically.

      -- C Membro: *note PyType_Slot: 4f26. *slots

          Array of *note PyType_Slot: 4f26. 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: 76a. (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: c8f, *note PyNumberMethods: 160f, *note
          PySequenceMethods: 4d96, *note PyMappingMethods: 4d97. and
          *note PyAsyncMethods: 50b4. with an added ‘Py_’ prefix.  For
          example, use:

             * ‘Py_tp_dealloc’ to set *note PyTypeObject.tp_dealloc:
               4d5d.

             * ‘Py_nb_add’ to set *note PyNumberMethods.nb_add: 50ad.

             * ‘Py_sq_length’ to set *note PySequenceMethods.sq_length:
               50b5.

          An additional slot is supported that does not correspond to a
          ‘PyTypeObject’ struct field:

             * *note Py_tp_token: 3ae.

          The following “offset” fields cannot be set using *note
          PyType_Slot: 4f26.:

             * *note tp_weaklistoffset: b75. (use *note
               Py_TPFLAGS_MANAGED_WEAKREF: 771. instead if possible)

             * *note tp_dictoffset: 50b6. (use *note
               Py_TPFLAGS_MANAGED_DICT: 603. instead if possible)

             * *note tp_vectorcall_offset: 5055. (use
               ‘"__vectorcalloffset__"’ in *note PyMemberDef: 50b7.)

          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: 4d73.  See *note
          PyMemberDef documentation: 50b7. for details.

          The following internal fields cannot be set at all when
          creating a heap type:

             * *note tp_dict: 19cb, *note tp_mro: 50b8, *note tp_cache:
               50b9, *note tp_subclasses: 787, and *note tp_weaklist:
               50ba.

          Setting ‘Py_tp_bases’ or ‘Py_tp_base’ may be problematic on
          some platforms.  To avoid issues, use the 'bases' argument of
          *note PyType_FromSpecWithBases(): 793. instead.

          Alterado na versão 3.9: Slots in *note PyBufferProcs: 50bb.
          may be set in the unlimited API.

          Alterado na versão 3.11: *note bf_getbuffer: 95b. and *note
          bf_releasebuffer: 95c. are now available under the *note
          limited API: 62b.

          Alterado na versão 3.14: The field *note tp_vectorcall: 18d1.
          can now set using ‘Py_tp_vectorcall’.  See the field’s
          documentation for details.

      -- C Membro: void *pfunc

          The desired value of the slot.  In most cases, this is a
          pointer to a function.

          'pfunc' values may not be ‘NULL’, except for the following
          slots:

             * ‘Py_tp_doc’

             * *note Py_tp_token: 3ae. (for clarity, prefer *note
               Py_TP_USE_SPEC: 50bd. rather than ‘NULL’)

 -- C Macro: Py_tp_token

     A *note slot: 50ac. that records a static memory layout ID for a
     class.

     If the *note PyType_Spec: 19c8. of the class is statically
     allocated, the token can be set to the spec using the special value
     *note Py_TP_USE_SPEC: 50bd.:

          static PyType_Slot foo_slots[] = {
             {Py_tp_token, Py_TP_USE_SPEC},

     It can also be set to an arbitrary pointer, but you must ensure
     that:

        * The pointer outlives the class, so it’s not reused for
          something else while the class exists.

        * It “belongs” to the extension module where the class lives, so
          it will not clash with other extensions.

     Use *note PyType_GetBaseByToken(): 3ad. to check if a class’s
     superclass has a given token – that is, check whether the memory
     layout is compatible.

     To get the token for a given class (without considering
     superclasses), use *note PyType_GetSlot(): a92. with ‘Py_tp_token’.

     Adicionado na versão 3.14.

      -- C Macro: Py_TP_USE_SPEC

          Used as a value with *note Py_tp_token: 3ae. to set the token
          to the class’s *note PyType_Spec: 19c8.  Expands to ‘NULL’.

          Adicionado na versão 3.14.


File: python.info,  Node: O Objeto None,  Prev: Objetos tipo<2>,  Up: Objetos Fundamentais

7.9.1.3 O Objeto ‘None’
.......................

Observe que o *note PyTypeObject: c8f. 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: 5d5. *Py_None

     O objeto Python ‘None’, denotando falta de valor.  Este objeto não
     tem métodos e é *note imortal: 28f.

     Alterado na versão 3.12: *note Py_None: 4d40. é *note imortal: 28f.

 -- C Macro: Py_RETURN_NONE

     Retorna *note Py_None: 4d40. de uma função.


File: python.info,  Node: Objetos Numéricos,  Next: Objetos Sequência,  Prev: Objetos Fundamentais,  Up: Camada de Objetos Concretos

7.9.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.9.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(): 1b94. para desambiguar.

 -- C Tipo: type PyLongObject
     ' Parte da *note API Limitada: 76a. (como uma estrutura opaca).'
     Este subtipo de *note PyObject: 5d5. representa um objeto inteiro
     Python.

 -- C Variável: *note PyTypeObject: c8f. PyLong_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo inteiro Python.  Este é o
     mesmo objeto que *note int: 19b. na camada Python.

 -- C Função: int PyLong_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyLongObject: 39b. ou um
     subtipo de *note PyLongObject: 39b.  Esta função sempre tem
     sucesso.

 -- C Função: int PyLong_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyLongObject: 39b, mas não
     um subtipo de *note PyLongObject: 39b.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 5d5. *PyLong_FromLong (long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. 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: 5d5. *PyLong_FromUnsignedLong (unsigned
          long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. de um
     unsigned long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromSsize_t (Py_ssize_t v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. de um *note
     Py_ssize_t: c49. C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromSize_t (size_t v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. de um
     ‘size_t’ C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromLongLong (long long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. de um long
     long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromInt32 (int32_t value)
 -- C Função: *note PyObject: 5d5. *PyLong_FromInt64 (int64_t value)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Retorna
     um novo objeto *note PyLongObject: 39b. de um int32_t ou int64_t C
     com sinal, ou ‘NULL’ com uma exceção definida no caso de falha.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyLong_FromUnsignedLongLong
          (unsigned long long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. de um
     unsigned long long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromUInt32 (uint32_t value)
 -- C Função: *note PyObject: 5d5. *PyLong_FromUInt64 (uint64_t value)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Retorna
     um novo objeto *note PyLongObject: 39b. de um uint32_t ou uint64_t
     C sem sinal, ou ‘NULL’ com uma exceção definida no caso de falha.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyLong_FromDouble (double v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyLongObject: 39b. da parte
     inteira de 'v' ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyLong_FromString (const char *str,
          char **pend, int base)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo *note PyLongObject: 39b. 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: 21a7.; neste caso, zeros à esquerda em um número
     decimal diferente de zero aumenta um *note ValueError: 2ea.  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: 2ea. será levantada.

     Ver também
     ..........

     As funções *note PyLong_AsNativeBytes(): 5fa. e *note
     PyLong_FromNativeBytes(): 5fb. podem ser usadas para converter um
     *note PyLongObject: 39b. de/para uma vetor de bytes na base ‘256’.

 -- C Função: *note PyObject: 5d5. *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: 5d5. *PyLong_FromVoidPtr (void *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um inteiro Python a partir do ponteiro 'p'.  O valor do
     ponteiro pode ser recuperado do valor resultante usando *note
     PyLong_AsVoidPtr(): 4ead.

 -- C Função: *note PyObject: 5d5. *PyLong_FromNativeBytes (const void
          *buffer, size_t n_bytes, int flags)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  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(): 5fa.  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(): 5fc.  Other flags
     are ignored.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyLong_FromUnsignedNativeBytes
          (const void *buffer, size_t n_bytes, int flags)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  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(): 5fa.  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 Função: long PyLong_AsLong (PyObject *obj)
     ' Parte da *note ABI Estável: 76a.'

     Return a C long representation of 'obj'.  If 'obj' is not an
     instance of *note PyLongObject: 39b, first call its *note
     __index__(): 19e. method (if present) to convert it to a *note
     PyLongObject: 39b.

     Raise *note OverflowError: a77. if the value of 'obj' is out of
     range for a long.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1b94.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

      -- C Função: long PyLong_AS_LONG (PyObject *obj)

          A *note soft deprecated: 23c. alias.  Exactly equivalent to
          the preferred ‘PyLong_AsLong’.  In particular, it can fail
          with *note OverflowError: a77. 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: 76a. desde a versão 3.13.'  Similar
     to *note PyLong_AsLong(): 5f9, 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: 76a.'  Return a C long representation
     of 'obj'.  If 'obj' is not an instance of *note PyLongObject: 39b,
     first call its *note __index__(): 19e. method (if present) to
     convert it to a *note PyLongObject: 39b.

     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(): 1b94.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

 -- C Função: long long PyLong_AsLongLong (PyObject *obj)
     ' Parte da *note ABI Estável: 76a.'

     Return a C long long representation of 'obj'.  If 'obj' is not an
     instance of *note PyLongObject: 39b, first call its *note
     __index__(): 19e. method (if present) to convert it to a *note
     PyLongObject: 39b.

     Raise *note OverflowError: a77. if the value of 'obj' is out of
     range for a long long.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1b94.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

 -- C Função: long long PyLong_AsLongLongAndOverflow (PyObject *obj, int
          *overflow)
     ' Parte da *note ABI Estável: 76a.'  Return a C long long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 39b, first call its *note __index__(): 19e. method
     (if present) to convert it to a *note PyLongObject: 39b.

     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(): 1b94.
     para desambiguar.

     Adicionado na versão 3.2.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

 -- C Função: *note Py_ssize_t: c49. PyLong_AsSsize_t (PyObject *pylong)
     ' Parte da *note ABI Estável: 76a.'

     Retorna uma representação de *note Py_ssize_t: c49. C de 'pylong'.
     'pylong' deve ser uma instância de *note PyLongObject: 39b.

     Levanta *note OverflowError: a77. se o valor de 'pylong' estiver
     fora do intervalo de um *note Py_ssize_t: c49.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1b94.
     para desambiguar.

 -- C Função: unsigned long PyLong_AsUnsignedLong (PyObject *pylong)
     ' Parte da *note ABI Estável: 76a.'

     Return a C unsigned long representation of 'pylong'.  'pylong' must
     be an instance of *note PyLongObject: 39b.

     Raise *note OverflowError: a77. 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(): 1b94. para desambiguar.

 -- C Função: size_t PyLong_AsSize_t (PyObject *pylong)
     ' Parte da *note ABI Estável: 76a.'

     Retorna uma representação de ‘size_t’ C de 'pylong'.  'pylong' deve
     ser uma instância de *note PyLongObject: 39b.

     Levanta *note OverflowError: a77. se o valor de 'pylong' estiver
     fora do intervalo de um ‘size_t’.

     Retorna ‘(size)-1’ no caso de erro.  Use *note PyErr_Occurred():
     1b94. para desambiguar.

 -- C Função: unsigned long long PyLong_AsUnsignedLongLong (PyObject
          *pylong)
     ' Parte da *note ABI Estável: 76a.'

     Return a C unsigned long long representation of 'pylong'.  'pylong'
     must be an instance of *note PyLongObject: 39b.

     Raise *note OverflowError: a77. 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(): 1b94. para desambiguar.

     Alterado na versão 3.1: Um 'pylong' negativo agora levanta *note
     OverflowError: a77, não *note TypeError: 198.

 -- C Função: unsigned long PyLong_AsUnsignedLongMask (PyObject *obj)
     ' Parte da *note ABI Estável: 76a.'  Return a C unsigned long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 39b, first call its *note __index__(): 19e. method
     (if present) to convert it to a *note PyLongObject: 39b.

     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(): 1b94. para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

 -- C Função: unsigned long long PyLong_AsUnsignedLongLongMask (PyObject
          *obj)
     ' Parte da *note ABI Estável: 76a.'  Return a C unsigned long long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 39b, first call its *note __index__(): 19e. method
     (if present) to convert it to a *note PyLongObject: 39b.

     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(): 1b94. para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 19d.

 -- C Função: int PyLong_AsInt32 (PyObject *obj, int32_t *value)
 -- C Função: int PyLong_AsInt64 (PyObject *obj, int64_t *value)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Set
     '*value' to a signed C int32_t or int64_t representation of 'obj'.

     If 'obj' is not an instance of *note PyLongObject: 39b, first call
     its *note __index__(): 19e. method (if present) to convert it to a
     *note PyLongObject: 39b.

     If the 'obj' value is out of range, raise an *note OverflowError:
     a77.

     Set '*value' and return ‘0’ on success.  Set an exception and
     return ‘-1’ on error.

     'value' must not be ‘NULL’.

     Adicionado na versão 3.14.

 -- C Função: int PyLong_AsUInt32 (PyObject *obj, uint32_t *value)
 -- C Função: int PyLong_AsUInt64 (PyObject *obj, uint64_t *value)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Set
     '*value' to an unsigned C uint32_t or uint64_t representation of
     'obj'.

     If 'obj' is not an instance of *note PyLongObject: 39b, first call
     its *note __index__(): 19e. method (if present) to convert it to a
     *note PyLongObject: 39b.

        * If 'obj' is negative, raise a *note ValueError: 2ea.

        * If the 'obj' value is out of range, raise an *note
          OverflowError: a77.

     Set '*value' and return ‘0’ on success.  Set an exception and
     return ‘-1’ on error.

     'value' must not be ‘NULL’.

     Adicionado na versão 3.14.

 -- C Função: double PyLong_AsDouble (PyObject *pylong)
     ' Parte da *note ABI Estável: 76a.'  Return a C double
     representation of 'pylong'.  'pylong' must be an instance of *note
     PyLongObject: 39b.

     Raise *note OverflowError: a77. if the value of 'pylong' is out of
     range for a double.

     Retorna ‘-1.0’ no caso de erro.  Use *note PyErr_Occurred(): 1b94.
     para desambiguar.

 -- C Função: void *PyLong_AsVoidPtr (PyObject *pylong)
     ' Parte da *note ABI Estável: 76a.'  Convert a Python integer
     'pylong' to a C void pointer.  If 'pylong' cannot be converted, an
     *note OverflowError: a77. will be raised.  This is only assured to
     produce a usable void pointer for values created with *note
     PyLong_FromVoidPtr(): 4eaf.

     Retorna ‘NULL’ no caso de erro.  Use *note PyErr_Occurred(): 1b94.
     para desambiguar.

 -- C Função: *note Py_ssize_t: c49. PyLong_AsNativeBytes (PyObject
          *pylong, void *buffer, Py_ssize_t n_bytes, int flags)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  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: large buffers are
     padded with zeroes.

     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__(): 19e. 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: 198.

          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: int PyLong_GetSign (PyObject *obj, int *sign)

     Get the sign of the integer object 'obj'.

     On success, set '*sign' to the integer sign (0, -1 or +1 for zero,
     negative or positive integer, respectively) and return 0.

     On failure, return -1 with an exception set.  This function always
     succeeds if 'obj' is a *note PyLongObject: 39b. or its subtype.

     Adicionado na versão 3.14.

 -- C Função: int PyLong_IsPositive (PyObject *obj)

     Check if the integer object 'obj' is positive (‘obj > 0’).

     If 'obj' is an instance of *note PyLongObject: 39b. or its subtype,
     return ‘1’ when it’s positive and ‘0’ otherwise.  Else set an
     exception and return ‘-1’.

     Adicionado na versão 3.14.

 -- C Função: int PyLong_IsNegative (PyObject *obj)

     Check if the integer object 'obj' is negative (‘obj < 0’).

     If 'obj' is an instance of *note PyLongObject: 39b. or its subtype,
     return ‘1’ when it’s negative and ‘0’ otherwise.  Else set an
     exception and return ‘-1’.

     Adicionado na versão 3.14.

 -- C Função: int PyLong_IsZero (PyObject *obj)

     Check if the integer object 'obj' is zero.

     If 'obj' is an instance of *note PyLongObject: 39b. or its subtype,
     return ‘1’ when it’s zero and ‘0’ otherwise.  Else set an exception
     and return ‘-1’.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyLong_GetInfo (void)
     ' Parte da *note ABI Estável: 76a.'  On success, return a read only
     *note named tuple: 853, that holds information about Python’s
     internal representation of integers.  See *note sys.int_info: 148f.
     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: 75e. 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(): 79c.; for others fall back to
     a *note PyLong_As*: 4ea9. function or *note PyLong_AsNativeBytes():
     5fa.

     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: c49. 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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     If 'op' is compact, as determined by *note
     PyUnstable_Long_IsCompact(): 79b, return its value.

     Otherwise, the return value is undefined.

     Adicionado na versão 3.12.

* Menu:

* Export API::
* PyLongWriter API::


File: python.info,  Node: Export API,  Next: PyLongWriter API,  Up: Objetos Inteiros

7.9.2.2 Export API
..................

Adicionado na versão 3.14.

 -- C Struct: struct PyLongLayout

     Layout of an array of “digits” (“limbs” in the GMP terminology),
     used to represent absolute value for arbitrary precision integers.

     Use *note PyLong_GetNativeLayout(): 3a4. to get the native layout
     of Python *note int: 19b. objects, used internally for integers
     with “big enough” absolute value.

     See also *note sys.int_info: 148f. which exposes similar
     information in Python.

      -- C Membro: uint8_t bits_per_digit

          Bits per digit.  For example, a 15 bit digit means that bits
          0-14 contain meaningful information.

      -- C Membro: uint8_t digit_size

          Digit size in bytes.  For example, a 15 bit digit will require
          at least 2 bytes.

      -- C Membro: int8_t digits_order

          Digits order:

             - ‘1’ for most significant digit first

             - ‘-1’ for least significant digit first

      -- C Membro: int8_t digit_endianness

          Digit endianness:

             - ‘1’ for most significant byte first (big endian)

             - ‘-1’ for least significant byte first (little endian)

 -- C Função: const *note PyLongLayout: 50d2. *PyLong_GetNativeLayout
          (void)

     Get the native layout of Python *note int: 19b. objects.

     See the *note PyLongLayout: 50d2. structure.

     The function must not be called before Python initialization nor
     after Python finalization.  The returned layout is valid until
     Python is finalized.  The layout is the same for all Python
     sub-interpreters in a process, and so it can be cached.

 -- C Struct: struct PyLongExport

     Export of a Python *note int: 19b. object.

     There are two cases:

        * If *note digits: 50d8. is ‘NULL’, only use the *note value:
          50d9. member.

        * If *note digits: 50d8. is not ‘NULL’, use *note negative:
          50da, *note ndigits: 50db. and *note digits: 50d8. members.

      -- C Membro: int64_t value

          The native integer value of the exported *note int: 19b.
          object.  Only valid if *note digits: 50d8. is ‘NULL’.

      -- C Membro: uint8_t negative

          ‘1’ if the number is negative, ‘0’ otherwise.  Only valid if
          *note digits: 50d8. is not ‘NULL’.

      -- C Membro: *note Py_ssize_t: c49. ndigits

          Number of digits in *note digits: 50d8. array.  Only valid if
          *note digits: 50d8. is not ‘NULL’.

      -- C Membro: const void *digits

          Read-only array of unsigned digits.  Can be ‘NULL’.

 -- C Função: int PyLong_Export (PyObject *obj, PyLongExport
          *export_long)

     Export a Python *note int: 19b. object.

     'export_long' must point to a *note PyLongExport: 50d7. structure
     allocated by the caller.  It must not be ‘NULL’.

     On success, fill in '*export_long' and return ‘0’.  On error, set
     an exception and return ‘-1’.

     *note PyLong_FreeExport(): 3a6. must be called when the export is
     no longer needed.

          'Detalhes da implementação do CPython:' This function always
          succeeds if 'obj' is a Python *note int: 19b. object or a
          subclass.

 -- C Função: void PyLong_FreeExport (PyLongExport *export_long)

     Release the export 'export_long' created by *note PyLong_Export():
     3a5.

     'Detalhes da implementação do CPython:' Calling *note
     PyLong_FreeExport(): 3a6. is optional if 'export_long->digits' is
     ‘NULL’.


File: python.info,  Node: PyLongWriter API,  Prev: Export API,  Up: Objetos Inteiros

7.9.2.3 PyLongWriter API
........................

The *note PyLongWriter: 50dd. API can be used to import an integer.

Adicionado na versão 3.14.

 -- C Struct: struct PyLongWriter

     A Python *note int: 19b. writer instance.

     The instance must be destroyed by *note PyLongWriter_Finish(): 3a8.
     or *note PyLongWriter_Discard(): 3a9.

 -- C Função: *note PyLongWriter: 50dd. *PyLongWriter_Create (int
          negative, Py_ssize_t ndigits, void **digits)

     Create a *note PyLongWriter: 50dd.

     On success, allocate '*digits' and return a writer.  On error, set
     an exception and return ‘NULL’.

     'negative' is ‘1’ if the number is negative, or ‘0’ otherwise.

     'ndigits' is the number of digits in the 'digits' array.  It must
     be greater than 0.

     'digits' must not be NULL.

     After a successful call to this function, the caller should fill in
     the array of digits 'digits' and then call *note
     PyLongWriter_Finish(): 3a8. to get a Python *note int: 19b.  The
     layout of 'digits' is described by *note PyLong_GetNativeLayout():
     3a4.

     Digits must be in the range [‘0’; ‘(1 << bits_per_digit) - 1’]
     (where the *note bits_per_digit: 50d3. is the number of bits per
     digit).  Any unused most significant digits must be set to ‘0’.

     Alternately, call *note PyLongWriter_Discard(): 3a9. to destroy the
     writer instance without creating an *note int: 19b. object.

 -- C Função: *note PyObject: 5d5. *PyLongWriter_Finish (PyLongWriter
          *writer)
     'Retorna valor: Nova referência.'  Finish a *note PyLongWriter:
     50dd. created by *note PyLongWriter_Create(): 3a7.

     On success, return a Python *note int: 19b. object.  On error, set
     an exception and return ‘NULL’.

     The function takes care of normalizing the digits and converts the
     object to a compact integer if needed.

     The writer instance and the 'digits' array are invalid after the
     call.

 -- C Função: void PyLongWriter_Discard (PyLongWriter *writer)

     Discard a *note PyLongWriter: 50dd. created by *note
     PyLongWriter_Create(): 3a7.

     If 'writer' is ‘NULL’, no operation is performed.

     The writer instance and the 'digits' array are invalid after the
     call.


File: python.info,  Node: Objetos Booleanos,  Next: Objetos de ponto flutuante,  Prev: Objetos Inteiros,  Up: Objetos Numéricos

7.9.2.4 Objetos Booleanos
.........................

Os booleanos no Python são implementados como um subclasse de inteiros.
Há apenas dois booleanos, *note Py_False: 50e2. e *note Py_True: 50e3.
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: c8f. PyBool_Type
     ' Parte da *note ABI Estável: 76a.'  Este instância de *note
     PyTypeObject: c8f. representa o tipo booleano em Python; é o mesmo
     objeto que *note bool: 3c0. na camada Python.

 -- C Função: int PyBool_Check (PyObject *o)

     Retorna verdadeiro se 'o' for do tipo *note PyBool_Type: 4df4.
     Esta função sempre tem sucesso.

 -- C Variável: *note PyObject: 5d5. *Py_False

     O objeto Python ‘False’.  Este objeto não tem métodos e é *note
     imortal: 28f.

     Alterado na versão 3.12: *note Py_False: 50e2. é *note imortal:
     28f.

 -- C Variável: *note PyObject: 5d5. *Py_True

     O objeto Python ‘True’.  Este objeto não tem métodos e é *note
     imortal: 28f.

     Alterado na versão 3.12: *note Py_True: 50e3. é *note imortal: 28f.

 -- C Macro: Py_RETURN_FALSE

     Retorna *note Py_False: 50e2. de uma função.

 -- C Macro: Py_RETURN_TRUE

     Retorna *note Py_True: 50e3. de uma função.

 -- C Função: *note PyObject: 5d5. *PyBool_FromLong (long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna *note Py_True: 50e3. ou *note Py_False: 50e2,
     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.9.2.5 Objetos de ponto flutuante
..................................

 -- C Tipo: type PyFloatObject

     Este subtipo de *note PyObject: 5d5. representa um objeto de ponto
     flutuante do Python.

 -- C Variável: *note PyTypeObject: c8f. PyFloat_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância do *note
     PyTypeObject: c8f. representa o tipo de ponto flutuante do Python.
     Este é o mesmo objeto *note float: 196. na camada do Python.

 -- C Função: int PyFloat_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyFloatObject: 50e9. ou um
     subtipo de *note PyFloatObject: 50e9.  Esta função sempre tem
     sucesso.

 -- C Função: int PyFloat_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyFloatObject: 50e9, mas
     um subtipo de *note PyFloatObject: 50e9.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 5d5. *PyFloat_FromString (PyObject *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um objeto *note PyFloatObject: 50e9. baseado em uma
     string de valor “str” ou ‘NULL’ em falha.

 -- C Função: *note PyObject: 5d5. *PyFloat_FromDouble (double v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um objeto *note PyFloatObject: 50e9. de 'v' ou ‘NULL’
     em falha.

 -- C Função: double PyFloat_AsDouble (PyObject *pyfloat)
     ' Parte da *note ABI Estável: 76a.'  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__():
     bb7, 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(): 1b94. para
     verificar se há erros.

     Alterado na versão 3.8: Usa *note __index__(): 19e, 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: 5d5. *PyFloat_GetInfo (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 76a.'  Retorna o ponto flutuante
     positivo mínimo normalizado 'DBL_MIN' como double do C.

* Menu:

* As funções Pack e Unpack::


File: python.info,  Node: As funções Pack e Unpack,  Up: Objetos de ponto flutuante

7.9.2.6 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.

Observe que o tipo NaNs pode não ser preservado em plataformas IEEE (NaN
silenciosos tornam-se silenciosos), por exemplo, em sistemas x86 no modo
de 32 bits.

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.9.2.7 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: a77.).

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.9.2.8 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(): 1b94. é verdadeiro (e uma exceção é definida,
provavelmente *note OverflowError: a77.).

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.9.2.9 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.9.2.10 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: 5009. _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: 5009.

 -- C Função: *note Py_complex: 5009. _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: 5009.

 -- C Função: *note Py_complex: 5009. _Py_c_neg (Py_complex num)

     Retorna a negação do número complexo 'num', utilizando a
     representação C *note Py_complex: 5009.

 -- C Função: *note Py_complex: 5009. _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: 5009.

 -- C Função: *note Py_complex: 5009. _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: 5009.

     Se 'divisor' é nulo, este método retorna zero e define ‘errno’ para
     ‘EDOM’.

 -- C Função: *note Py_complex: 5009. _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: 5009.

     Se 'num' for nulo e 'exp' não for um número real positivo, este
     método retorna zero e define ‘errno’ para ‘EDOM’.

     Define ‘errno’ para ‘ERANGE’ em caso de estouros.


File: python.info,  Node: Números complexos como objetos Python,  Prev: Números complexos como estruturas C,  Up: Objetos números complexos

7.9.2.11 Números complexos como objetos Python
..............................................

 -- C Tipo: type PyComplexObject

     Este subtipo de *note PyObject: 5d5. representa um objeto Python de
     número complexo.

 -- C Variável: *note PyTypeObject: c8f. PyComplex_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo de número complexo Python.  É
     o mesmo objeto que *note complex: 197. na camada Python.

 -- C Função: int PyComplex_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyComplexObject: 50fd. ou
     um subtipo de *note PyComplexObject: 50fd.  Esta função sempre tem
     sucesso.

 -- C Função: int PyComplex_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyComplexObject: 50fd, mas
     não um subtipo de *note PyComplexObject: 50fd.  Esta função sempre
     tem sucesso.

 -- C Função: *note PyObject: 5d5. *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: 5009.
     Retorna ‘NULL’ com uma exceção definida ao ocorrer um erro.

 -- C Função: *note PyObject: 5d5. *PyComplex_FromDoubles (double real,
          double imag)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto *note PyComplexObject: 50fd. 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: 76a.'  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__(): 7f2, 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(): c53. 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(): 1b94. para
     verificar se há erros.

     Alterado na versão 3.13: Usa *note __complex__(): 7f2, se
     disponível.

 -- C Função: double PyComplex_ImagAsDouble (PyObject *op)
     ' Parte da *note ABI Estável: 76a.'  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__(): 7f2, 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(): c53. 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(): 1b94. para
     verificar se há erros.

     Alterado na versão 3.13: Usa *note __complex__(): 7f2, se
     disponível.

 -- C Função: *note Py_complex: 5009. PyComplex_AsCComplex (PyObject
          *op)

     Retorna o valor *note Py_complex: 5009. do número complexo 'op'.

     Se 'op' não é um objeto de número complexo Python, mas tem um
     método *note __complex__(): 7f2, 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__(): bb7.  Se ‘__float__()’ não estiver definido, então ele
     volta para *note __index__(): 19e.

     Em caso de falha, este método retorna *note Py_complex: 5009. com
     *note real: 50f5. definido para ‘-1.0’ e com uma exceção definida,
     então deve-se chamar *note PyErr_Occurred(): 1b94. para verificar
     se há erros.

     Alterado na versão 3.8: Usa *note __index__(): 19e, se disponível.


File: python.info,  Node: Objetos Sequência,  Next: Coleções,  Prev: Objetos Numéricos,  Up: Camada de Objetos Concretos

7.9.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 byte array::
* Objetos Unicode e Codecs::
* Objeto tupla::
* Objetos sequência de estrutura::
* Objeto List::


File: python.info,  Node: Objetos Bytes,  Next: Objetos byte array,  Up: Objetos Sequência

7.9.3.1 Objetos Bytes
.....................

Estas funções levantam *note TypeError: 198. 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: 5d5. representando o objeto
     bytes do Python.

 -- C Variável: *note PyTypeObject: c8f. PyBytes_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo de bytes Python; é o mesmo
     objeto que *note bytes: 192. 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: 5d5. *PyBytes_FromString (const char *v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyBytes_FromStringAndSize (const
          char *v, Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyBytes_FromFormat (const char
          *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: c49.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: 5d5. *PyBytes_FromFormatV (const char
          *format, va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Idêntico a *note PyBytes_FromFormat(): 1cc1. exceto que é
     preciso exatamente dois argumentos.

 -- C Função: *note PyObject: 5d5. *PyBytes_FromObject (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna a representação de bytes do objeto 'o' que
     implementa o protocolo de buffer.

 -- C Função: *note Py_ssize_t: c49. PyBytes_Size (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  Retorna o comprimento dos
     bytes em objeto bytes 'o'.

 -- C Função: *note Py_ssize_t: c49. PyBytes_GET_SIZE (PyObject *o)

     Similar a *note PyBytes_Size(): 4e00, mas sem verificação de erro.

 -- C Função: char *PyBytes_AsString (PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  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(): a7d. retorna ‘NULL’ e levanta *note
     TypeError: 198.

 -- C Função: char *PyBytes_AS_STRING (PyObject *string)

     Similar a *note PyBytes_AsString(): a7d, 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: 76a.'  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: 2ea. 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(): 4dfa. retorna ‘-1’ e levanta *note
     TypeError: 198.

     Alterado na versão 3.5: Anteriormente *note TypeError: 198. 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: 76a.'  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: 76a.'  “Crie um novo objeto bytes em
     '*bytes' contendo o conteúdo de newpart anexado a bytes.  Esta
     versão libera a *note strong reference: 5d8. (referência forte)
     para newpart (ou seja, decrementa a contagem de referências a
     ele).”

 -- C Função: *note PyObject: 5d5. *PyBytes_Join (PyObject *sep,
          PyObject *iterable)

     Similar a ‘sep.join(iterable)’ no Python.

     'sep' deve ser um objeto Python *note bytes: 192.  (Observe que
     *note PyUnicode_Join(): 139e. aceita o separador ‘NULL’ e o trata
     como um espaço, enquanto *note PyBytes_Join(): 380. não aceita o
     separador ‘NULL’.)

     'iterable' deve ser um objeto iterável que produz objetos que
     implementam o *note protocolo de buffer: 25f.

     Em caso de sucesso, retorna um novo objeto *note bytes: 192.  Em
     caso de erro, define uma exceção e retorna ‘NULL’.

     Adicionado na versão 3.14.

 -- 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: 1809. é definido e ‘-1’ é retornado.

   ---------- 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,  Up: Objetos Sequência

7.9.3.2 Objetos byte array
..........................

 -- C Tipo: type PyByteArrayObject

     Esse subtipo de *note PyObject: 5d5. representa um objeto Python
     bytearray.

 -- C Variável: *note PyTypeObject: c8f. PyByteArray_Type
     ' Parte da *note ABI Estável: 76a.'  Essa instância de *note
     PyTypeObject: c8f. representa um tipo Python bytearray; é o mesmo
     objeto que o *note bytearray: 342. 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.9.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.9.3.4 Funções diretas da API
..............................

 -- C Função: *note PyObject: 5d5. *PyByteArray_FromObject (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto bytearray, 'o', que implementa o
     *note protocolo de buffer: 25f.

     Em caso de falha, retorna ‘NULL’ com uma exceção definida.

 -- C Função: *note PyObject: 5d5. *PyByteArray_FromStringAndSize (const
          char *string, Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyByteArray_Concat (PyObject *a,
          PyObject *b)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: c49. PyByteArray_Size (PyObject
          *bytearray)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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: 76a.'  Redimensiona o buffer interno
     de 'bytearray' para o tamanho 'len'.  Falha é um retorno ‘-1’ com
     um conjunto de exceções.

     Alterado na versão 3.14: Um 'len' negativo agora resultará na
     definição de uma exceção e no retorno de -1.


File: python.info,  Node: Macros,  Prev: Funções diretas da API,  Up: Objetos byte array

7.9.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(): 4df5, mas sem verificação
     de erro.

 -- C Função: *note Py_ssize_t: c49. PyByteArray_GET_SIZE (PyObject
          *bytearray)

     Similar a *note PyByteArray_Size(): 4df8, 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.9.3.6 Objetos Unicode e Codecs
................................

* Menu:

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


File: python.info,  Node: Objetos Unicode,  Next: Built-in Codecs,  Up: Objetos Unicode e Codecs

7.9.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: 3dd. 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.9.3.8 Tipo Unicode
....................

Estes são os tipos básicos de objetos Unicode usados para a
implementação Unicode em Python:

 -- C Variável: *note PyTypeObject: c8f. PyUnicode_Type
     ' Parte da *note ABI Estável: 76a.'  This instance of *note
     PyTypeObject: c8f. represents the Python Unicode type.  It is
     exposed to Python code as *note str: 169.

 -- C Variável: *note PyTypeObject: c8f. PyUnicodeIter_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo iterador Unicode do Python.  É
     usada para iterar sobre objetos string Unicode.

 -- C Tipo: type Py_UCS4
 -- C Tipo: type Py_UCS2
 -- C Tipo: type Py_UCS1
     ' Parte da *note ABI Estável: 76a.'  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: 33b.

     Adicionado na versão 3.3.

 -- C Tipo: type PyASCIIObject
 -- C Tipo: type PyCompactUnicodeObject
 -- C Tipo: type PyUnicodeObject

     Esses subtipos de *note PyObject: 5d5. 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: 5d5.

     Adicionado na versão 3.3.

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: *note Py_ssize_t: c49. 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: 136f. *PyUnicode_1BYTE_DATA (PyObject
          *unicode)
 -- C Função: *note Py_UCS2: 1370. *PyUnicode_2BYTE_DATA (PyObject
          *unicode)
 -- C Função: *note Py_UCS4: 33b. *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(): 1379. 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(): 1379.

     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)

     Write the code point 'value' to the given zero-based 'index' in a
     string.

     The 'kind' value and 'data' pointer must have been obtained from a
     string using *note PyUnicode_KIND(): 1379. and *note
     PyUnicode_DATA(): 1375. respectively.  You must hold a reference to
     that string while calling ‘PyUnicode_WRITE()’.  All requirements of
     *note PyUnicode_WriteChar(): 136e. also apply.

     The function performs no checks for any of its requirements, and is
     intended for usage in loops.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 33b. 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(): 1375.).  Nenhuma
     verificação ou chamada pronta é realizada.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 33b. 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(): 137d. se você fizer várias leituras consecutivas.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 33b. 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: 76a.'  Retorna ‘1’ se a string é um
     identificador válido conforme a definição da linguagem, seção *note
     Nomes (identificadores e palavras reservadas): 214b.  Do contrário,
     retorna ‘0’.

     Alterado na versão 3.9: A função não chama mais *note
     Py_FatalError(): b70. se a string não estiver pronta.

 -- C Função: unsigned int PyUnicode_IS_ASCII (PyObject *unicode)

     Return true if the string only contains ASCII characters.
     Equivalent to *note str.isascii(): cdc.

     Adicionado na versão 3.2.


File: python.info,  Node: Propriedade de caracteres Unicode,  Next: Creating and accessing Unicode strings,  Prev: Tipo Unicode,  Up: Objetos Unicode

7.9.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(): fcc.

These APIs can be used for fast direct character conversions:

 -- C Função: *note Py_UCS4: 33b. Py_UNICODE_TOLOWER (Py_UCS4 ch)

     Return the character 'ch' converted to lower case.

 -- C Função: *note Py_UCS4: 33b. Py_UNICODE_TOUPPER (Py_UCS4 ch)

     Return the character 'ch' converted to upper case.

 -- C Função: *note Py_UCS4: 33b. 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: 33b. Py_UNICODE_JOIN_SURROGATES (Py_UCS4
          high, Py_UCS4 low)

     Join two surrogate code points and return a single *note Py_UCS4:
     33b. 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.9.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: 5d5. *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.

     On error, set an exception and return ‘NULL’.

     After creation, the string can be filled by *note
     PyUnicode_WriteChar(): 136e, *note PyUnicode_CopyCharacters(): aa8,
     *note PyUnicode_Fill(): 1389, *note PyUnicode_WRITE(): 137f. or
     similar.  Since strings are supposed to be immutable, take care to
     not “use” the result while it is being modified.  In particular,
     before it’s filled with its final contents, a string:

        - must not be hashed,

        - must not be *note converted to UTF-8: a8f, or another
          non-“canonical” representation,

        - must not have its reference count changed,

        - must not be shared with code that might do one of the above.

     This list is not exhaustive.  Avoiding these uses is your
     responsibility; Python does not always check these requirements.

     To avoid accidentally exposing a partially-written string object,
     prefer using the *note PyUnicodeWriter: 3b0. API, or one of the
     ‘PyUnicode_From*’ functions below.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *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: 137a. etc., conforme retornado por *note
     PyUnicode_KIND(): 1379.).  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: 137c.) and it consists only of
     codepoints in the UCS1 range, it will be transformed into UCS1
     (*note PyUnicode_1BYTE_KIND: 137a.).

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromStringAndSize (const
          char *str, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 78a. 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: 5d5. *PyUnicode_FromString (const char
          *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Create a Unicode object from a UTF-8 encoded null-terminated
     char buffer 'str'.

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromFormat (const char
          *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5.*                 The result of calling
                                                                                 *note ascii(): 15d7.
                                                                                 
                                                                                 
     ‘U’                                   *note PyObject: 5d5.*                 A Unicode object.
                                                                                 
                                                                                 
     ‘V’                                   *note PyObject: 5d5.*, 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: 5d5.*                 The result of calling
                                                                                 *note PyObject_Str(): 1226.
                                                                                 
                                                                                 
     ‘R’                                   *note PyObject: 5d5.*                 The result of calling
                                                                                 *note PyObject_Repr(): 1225.
                                                                                 
                                                                                 
     ‘T’                                   *note PyObject: 5d5.*                 Get the fully qualified name of an
                                                                                 object type; call
                                                                                 *note PyType_GetFullyQualifiedName(): 60a.
                                                                                 
                                                                                 
     ‘#T’                                  *note PyObject: 5d5.*                 Similar to ‘T’ format, but use a
                                                                                 colon (‘:’) as separator between
                                                                                 the module name and the qualified
                                                                                 name.
                                                                                 
                                                                                 
     ‘N’                                   *note PyTypeObject: c8f.*             Get the fully qualified name of a
                                                                                 type; call
                                                                                 *note PyType_GetFullyQualifiedName(): 60a.
                                                                                 
                                                                                 
     ‘#N’                                  *note PyTypeObject: c8f.*             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: 78a.
     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: 5d5. *PyUnicode_FromFormatV (const char
          *format, va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Identical to *note PyUnicode_FromFormat(): 61f. except that
     it takes exactly two arguments.

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromObject (PyObject *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d8. to the
     object.

     Objects other than Unicode or its subtypes will cause a *note
     TypeError: 198.

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromOrdinal (int ordinal)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Create a Unicode Object from the given Unicode code point
     'ordinal'.

     The ordinal must be in ‘range(0x110000)’.  A *note ValueError: 2ea.
     is raised in the case it is not.

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromEncodedObject
          (PyObject *obj, const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Decode an encoded object 'obj' to a Unicode object.

     *note bytes: 192, *note bytearray: 342. and other *note bytes-like
     objects: 193. 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: 5133. for details).

     All other objects, including Unicode objects, cause a *note
     TypeError: 198. 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: void PyUnicode_Append (PyObject **p_left, PyObject *right)
     ' Parte da *note ABI Estável: 76a.'  Append the string 'right' to
     the end of 'p_left'.  'p_left' must point to a *note strong
     reference: 5d8. to a Unicode object; ‘PyUnicode_Append()’ releases
     (“steals”) this reference.

     On error, set '*p_left' to ‘NULL’ and set an exception.

     On success, set '*p_left' to a new strong reference to the result.

 -- C Função: void PyUnicode_AppendAndDel (PyObject **p_left, PyObject
          *right)
     ' Parte da *note ABI Estável: 76a.'  The function is similar to
     *note PyUnicode_Append(): 4f3e, with the only difference being that
     it decrements the reference count of 'right' by one.

 -- C Função: *note PyObject: 5d5. *PyUnicode_BuildEncodingMap (PyObject
          *string)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 198. and return ‘NULL’ on
     invalid input.

     Adicionado na versão 3.2.

 -- C Função: const char *PyUnicode_GetDefaultEncoding (void)
     ' Parte da *note ABI Estável: 76a.'  Return the name of the default
     string encoding, ‘"utf-8"’.  See *note sys.getdefaultencoding():
     47a6.

     The returned string does not need to be freed, and is valid until
     interpreter shutdown.

 -- C Função: *note Py_ssize_t: c49. PyUnicode_GetLength (PyObject
          *unicode)
     ' Parte da *note ABI Estável: 76a. 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: c49. 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.

     The string must not have been “used” yet.  See *note
     PyUnicode_New(): a9f. for details.

     Adicionado na versão 3.3.

 -- C Função: int PyUnicode_Resize (PyObject **unicode, Py_ssize_t
          length);
     ' Parte da *note ABI Estável: 76a.'  Resize a Unicode object
     '*unicode' to the new 'length' in code points.

     Try to resize the string in place (which is usually faster than
     allocating a new string and copying characters), or create a new
     string.

     '*unicode' is modified to point to the new (resized) object and ‘0’
     is returned on success.  Otherwise, ‘-1’ is returned and an
     exception is set, and '*unicode' is left untouched.

     The function doesn’t check string content, the result may not be a
     string in canonical representation.

 -- C Função: *note Py_ssize_t: c49. 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.

     The string must not have been “used” yet.  See *note
     PyUnicode_New(): a9f. for details.

     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: 76a. desde a versão 3.7.'  Write a
     'character' to the string 'unicode' at the zero-based 'index'.
     Return ‘0’ on success, ‘-1’ on error with an exception set.

     This function checks that 'unicode' is a Unicode object, that the
     index is not out of bounds, and that the object’s reference count
     is one.  See *note PyUnicode_WRITE(): 137f. for a version that
     skips these checks, making them your responsibility.

     The string must not have been “used” yet.  See *note
     PyUnicode_New(): a9f. for details.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 33b. PyUnicode_ReadChar (PyObject *unicode,
          Py_ssize_t index)
     ' Parte da *note ABI Estável: 76a. 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(): 137e, 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: 5d5. *PyUnicode_Substring (PyObject
          *unicode, Py_ssize_t start, Py_ssize_t end)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 33b. *PyUnicode_AsUCS4 (PyObject *unicode,
          Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)
     ' Parte da *note ABI Estável: 76a. 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: 78a. 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: 33b. *PyUnicode_AsUCS4Copy (PyObject
          *unicode)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Copy the
     string 'unicode' into a new UCS4 buffer that is allocated using
     *note PyMem_Malloc(): e54.  If this fails, ‘NULL’ is returned with
     a *note MemoryError: 1809. 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.9.3.11 Locale Encoding
........................

The current locale encoding can be used to decode text from the
operating system.

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeLocaleAndSize (const
          char *str, Py_ssize_t length, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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(): 4f49. to decode a
     string from the *note filesystem encoding and error handler: 752.

     This function ignores the *note Python UTF-8 Mode: 85b.

     Ver também
     ..........

     The *note Py_DecodeLocale(): db4. 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(): db4. was used for
     the ‘surrogateescape’, and the current locale encoding was used for
     ‘strict’.

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeLocale (const char
          *str, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.7.'  Similar to *note
     PyUnicode_DecodeLocaleAndSize(): db6, but compute the string length
     using ‘strlen()’.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *PyUnicode_EncodeLocale (PyObject
          *unicode, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 192.
     object.  'unicode' cannot contain embedded null characters.

     Use *note PyUnicode_EncodeFSDefault(): 1ce7. to encode a string to
     the *note filesystem encoding and error handler: 752.

     This function ignores the *note Python UTF-8 Mode: 85b.

     Ver também
     ..........

     The *note Py_EncodeLocale(): db5. 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(): db5. 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.9.3.12 File System Encoding
.............................

Functions encoding to and decoding from the *note filesystem encoding
and error handler: 752. ( PEP 383(1) and PEP 529(2)).

To encode file names to *note bytes: 192. 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: 76a.'  *note PyArg_Parse* converter:
     3d2.: encode *note str: 169. objects – obtained directly or through
     the *note os.PathLike: e3f. interface – to *note bytes: 192. using
     *note PyUnicode_EncodeFSDefault(): 1ce7.; *note bytes: 192. objects
     are output as-is.  'result' must be an address of a C variable of
     type *note PyObject: 5d5.* (or *note PyBytesObject: 98a.*).  On
     success, set the variable to a new *note strong reference: 5d8. to
     a *note bytes object: 5105. which must be released when it is no
     longer used and return a non-zero value (*note
     Py_CLEANUP_SUPPORTED: 500c.).  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:
     59a.

To decode file names to *note str: 169. 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: 76a.'  *note PyArg_Parse* converter:
     3d2.: decode *note bytes: 192. objects – obtained either directly
     or indirectly through the *note os.PathLike: e3f. interface – to
     *note str: 169. using *note PyUnicode_DecodeFSDefaultAndSize():
     4f49.; *note str: 169. objects are output as-is.  'result' must be
     an address of a C variable of type *note PyObject: 5d5.* (or *note
     PyUnicodeObject: 98c.*).  On success, set the variable to a new
     *note strong reference: 5d8. to a *note Unicode object: 5117. which
     must be released when it is no longer used and return a non-zero
     value (*note Py_CLEANUP_SUPPORTED: 500c.).  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:
     59a.

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeFSDefaultAndSize
          (const char *str, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Decode a string from the *note filesystem encoding and error
     handler: 752.

     If you need to decode a string from the current locale encoding,
     use *note PyUnicode_DecodeLocaleAndSize(): db6.

     Ver também
     ..........

     The *note Py_DecodeLocale(): db4. function.

     Alterado na versão 3.6: The *note filesystem error handler: 752. is
     now used.

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeFSDefault (const
          char *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Decode a null-terminated string from the *note filesystem
     encoding and error handler: 752.

     If the string length is known, use *note
     PyUnicode_DecodeFSDefaultAndSize(): 4f49.

     Alterado na versão 3.6: The *note filesystem error handler: 752. is
     now used.

 -- C Função: *note PyObject: 5d5. *PyUnicode_EncodeFSDefault (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Encode a Unicode object to the *note filesystem encoding and
     error handler: 752, and return *note bytes: 192.  Note that the
     resulting *note bytes: 192. object can contain null bytes.

     If you need to encode a string to the current locale encoding, use
     *note PyUnicode_EncodeLocale(): db7.

     Ver também
     ..........

     The *note Py_EncodeLocale(): db5. function.

     Adicionado na versão 3.2.

     Alterado na versão 3.6: The *note filesystem error handler: 752. 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.9.3.13 wchar_t Support
........................

‘wchar_t’ support for platforms which support it:

 -- C Função: *note PyObject: 5d5. *PyUnicode_FromWideChar (const
          wchar_t *wstr, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: c49. PyUnicode_AsWideChar (PyObject
          *unicode, wchar_t *wstr, Py_ssize_t size)
     ' Parte da *note ABI Estável: 76a.'  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: 76a. 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: 2ea. is raised.

     Returns a buffer allocated by *note PyMem_New: 1712. (use *note
     PyMem_Free(): 1633. to free it) on success.  On error, returns
     ‘NULL’ and '*size' is undefined.  Raises a *note MemoryError: 1809.
     if memory allocation is failed.

     Adicionado na versão 3.2.

     Alterado na versão 3.7: Raises a *note ValueError: 2ea. 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.9.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():
169. 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(): f09. for encoding file names.  This uses the
*note filesystem encoding and error handler: 752. 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: 2ea. 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.9.3.15 Generic Codecs
.......................

The following macro is provided:

 -- C Macro: Py_UNICODE_REPLACEMENT_CHARACTER

     The Unicode code point ‘U+FFFD’ (replacement character).

     This Unicode character is used as the replacement character during
     decoding if the 'errors' argument is set to “replace”.

These are the generic codec APIs:

 -- C Função: *note PyObject: 5d5. *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:
     76a.'  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(): 169.
     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: 5d5. *PyUnicode_AsEncodedString (PyObject
          *unicode, const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): ac8.
     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.9.3.16 UTF-8 Codecs
.....................

These are the UTF-8 codec APIs:

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeUTF8 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *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:
     76a.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF8(): 4f55.  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: 5d5. *PyUnicode_AsUTF8String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a. 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: 62b.

 -- C Função: const char *PyUnicode_AsUTF8 (PyObject *unicode)

     As *note PyUnicode_AsUTF8AndSize(): a8f, 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(): a8f.
          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.9.3.17 UTF-32 Codecs
......................

These are the UTF-32 codec APIs:

 -- C Função: *note PyObject: 5d5. *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:
     76a.'  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: 5d5. *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:
     76a.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF32(): 4f51.  If 'consumed' is not ‘NULL’, *note
     PyUnicode_DecodeUTF32Stateful(): 4f52. 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: 5d5. *PyUnicode_AsUTF32String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.3.18 UTF-16 Codecs
......................

These are the UTF-16 codec APIs:

 -- C Função: *note PyObject: 5d5. *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:
     76a.'  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: 5d5. *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:
     76a.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF16(): 4f4f.  If 'consumed' is not ‘NULL’, *note
     PyUnicode_DecodeUTF16Stateful(): 4f50. 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: 5d5. *PyUnicode_AsUTF16String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.3.19 UTF-7 Codecs
.....................

These are the UTF-7 codec APIs:

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeUTF7 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *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:
     76a.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF7(): 4f53.  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.9.3.20 Unicode-Escape Codecs
..............................

These are the “Unicode Escape” codec APIs:

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeUnicodeEscape (const
          char *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyUnicode_AsUnicodeEscapeString
          (PyObject *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.3.21 Raw-Unicode-Escape Codecs
..................................

These are the “Raw Unicode Escape” codec APIs:

 -- C Função: *note PyObject: 5d5. *PyUnicode_DecodeRawUnicodeEscape
          (const char *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyUnicode_AsRawUnicodeEscapeString
          (PyObject *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.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: 5d5. *PyUnicode_DecodeLatin1 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyUnicode_AsLatin1String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.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: 5d5. *PyUnicode_DecodeASCII (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyUnicode_AsASCIIString (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.9.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__(): 581. mapping interface; dictionaries and
sequences work well.

These are the mapping codec APIs:

 -- C Função: *note PyObject: 5d5. *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:
     76a.'  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: 24e6, 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: 5d5. *PyUnicode_AsCharmapString (PyObject
          *unicode, PyObject *mapping)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 24e6.) 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: 5d5. *PyUnicode_Translate (PyObject
          *unicode, PyObject *table, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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__(): 581.
     interface; dictionaries and sequences work well.  Unmapped
     character ordinals (ones which cause a *note LookupError: 24e6.)
     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.9.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: 5d5. *PyUnicode_DecodeMBCS (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *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:
     76a. on Windows desde a versão 3.7.'  If 'consumed' is ‘NULL’,
     behave like *note PyUnicode_DecodeMBCS(): 4f4c.  If 'consumed' is
     not ‘NULL’, *note PyUnicode_DecodeMBCSStateful(): 4f4d. 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: 5d5. *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:
     76a. on Windows desde a versão 3.7.'  Similar to *note
     PyUnicode_DecodeMBCSStateful(): 4f4d, except uses the code page
     specified by 'code_page'.

 -- C Função: *note PyObject: 5d5. *PyUnicode_AsMBCSString (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 5d5. *PyUnicode_EncodeCodePage (int
          code_page, PyObject *unicode, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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,  Next: PyUnicodeWriter,  Prev: Built-in Codecs,  Up: Objetos Unicode e Codecs

7.9.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: 5d5. *PyUnicode_Concat (PyObject *left,
          PyObject *right)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Concat two strings giving a new Unicode string.

 -- C Função: *note PyObject: 5d5. *PyUnicode_Split (PyObject *unicode,
          PyObject *sep, Py_ssize_t maxsplit)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 10a0.

 -- C Função: *note PyObject: 5d5. *PyUnicode_RSplit (PyObject *unicode,
          PyObject *sep, Py_ssize_t maxsplit)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Similar to *note PyUnicode_Split(): 4f62, 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(): 1451.

 -- C Função: *note PyObject: 5d5. *PyUnicode_Splitlines (PyObject
          *unicode, int keepends)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5d5. *PyUnicode_Partition (PyObject
          *unicode, PyObject *sep)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 10a1.

 -- C Função: *note PyObject: 5d5. *PyUnicode_RPartition (PyObject
          *unicode, PyObject *sep)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Similar to *note PyUnicode_Partition(): 17fc, 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(): 1454.

 -- C Função: *note PyObject: 5d5. *PyUnicode_Join (PyObject *separator,
          PyObject *seq)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Join a sequence of strings using the given 'separator' and
     return the resulting Unicode string.

 -- C Função: *note Py_ssize_t: c49. PyUnicode_Tailmatch (PyObject
          *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end,
          int direction)
     ' Parte da *note ABI Estável: 76a.'  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: c49. PyUnicode_Find (PyObject *unicode,
          PyObject *substr, Py_ssize_t start, Py_ssize_t end, int
          direction)
     ' Parte da *note ABI Estável: 76a.'  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: c49. PyUnicode_FindChar (PyObject
          *unicode, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int
          direction)
     ' Parte da *note ABI Estável: 76a. 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: c49. PyUnicode_Count (PyObject *unicode,
          PyObject *substr, Py_ssize_t start, Py_ssize_t end)
     ' Parte da *note ABI Estável: 76a.'  Return the number of
     non-overlapping occurrences of 'substr' in ‘unicode[start:end]’.
     Return ‘-1’ if an error occurred.

 -- C Função: *note PyObject: 5d5. *PyUnicode_Replace (PyObject
          *unicode, PyObject *substr, PyObject *replstr, Py_ssize_t
          maxcount)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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(): 1b94. to check for errors.

     Ver também
     ..........

     The *note PyUnicode_Equal(): 3af. function.

 -- C Função: int PyUnicode_Equal (PyObject *a, PyObject *b)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Test if
     two strings are equal:

        * Return ‘1’ if 'a' is equal to 'b'.

        * Return ‘0’ if 'a' is not equal to 'b'.

        * Set a *note TypeError: 198. exception and return ‘-1’ if 'a'
          or 'b' is not a *note str: 169. object.

     The function always succeeds if 'a' and 'b' are *note str: 169.
     objects.

     The function works for *note str: 169. subclasses, but does not
     honor custom ‘__eq__()’ method.

     Ver também
     ..........

     The *note PyUnicode_Compare(): aaa. function.

     Adicionado na versão 3.14.

 -- C Função: int PyUnicode_EqualToUTF8AndSize (PyObject *unicode, const
          char *string, Py_ssize_t size)
     ' Parte da *note ABI Estável: 76a. 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: 76a. desde a versão 3.13.'  Similar
     to *note PyUnicode_EqualToUTF8AndSize(): 60d, 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: 76a.'  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: 5d5. *PyUnicode_RichCompare (PyObject
          *left, PyObject *right, int op)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Rich compare two Unicode strings and return one of the
     following:

        * ‘NULL’ in case an exception was raised

        * *note Py_True: 50e3. or *note Py_False: 50e2. for successful
          comparisons

        * *note Py_NotImplemented: 5044. in case the type combination is
          unknown

     Possible values for 'op' are *note Py_GT: 504c, *note Py_GE: 504d,
     *note Py_EQ: 504a, *note Py_NE: 504b, *note Py_LT: 5048, and *note
     Py_LE: 5049.

 -- C Função: *note PyObject: 5d5. *PyUnicode_Format (PyObject *format,
          PyObject *args)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 76a.'  Intern the argument **note
     p_unicode: aa4. 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: aa4, it sets **note p_unicode: aa4. to it (releasing the
     reference to the old string object and creating a new *note strong
     reference: 5d8. to the interned string object), otherwise it leaves
     **note p_unicode: aa4. 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: 169. may not be interned,
     that is, *note PyUnicode_CheckExact: 511b.(**note p_unicode: aa4.)
     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: 5d5. *PyUnicode_InternFromString (const
          char *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  A combination of *note PyUnicode_FromString(): 4f5c. and
     *note PyUnicode_InternInPlace(): aa4, 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: 28f, 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(): 4f5c. and *note PyUnicode_InternInPlace():
     aa4. directly.

 -- C Função: unsigned int PyUnicode_CHECK_INTERNED (PyObject *str)

     Return a non-zero value if 'str' is interned, zero if not.  The
     'str' argument must be a string; this is not checked.  This
     function always succeeds.

     'Detalhes da implementação do CPython:' A non-zero return value may
     carry additional information about 'how' the string is interned.
     The meaning of such non-zero values, as well as each specific
     string’s intern-related details, may change between CPython
     versions.


File: python.info,  Node: PyUnicodeWriter,  Next: Deprecated API,  Prev: Methods and Slot Functions,  Up: Objetos Unicode e Codecs

7.9.3.27 PyUnicodeWriter
........................

The *note PyUnicodeWriter: 3b0. API can be used to create a Python *note
str: 169. object.

Adicionado na versão 3.14.

 -- C Tipo: type PyUnicodeWriter

     A Unicode writer instance.

     The instance must be destroyed by *note PyUnicodeWriter_Finish():
     3b4. on success, or *note PyUnicodeWriter_Discard(): 3b3. on error.

 -- C Função: *note PyUnicodeWriter: 3b0. *PyUnicodeWriter_Create
          (Py_ssize_t length)

     Create a Unicode writer instance.

     'length' must be greater than or equal to ‘0’.

     If 'length' is greater than ‘0’, preallocate an internal buffer of
     'length' characters.

     Set an exception and return ‘NULL’ on error.

 -- C Função: *note PyObject: 5d5. *PyUnicodeWriter_Finish
          (PyUnicodeWriter *writer)

     Return the final Python *note str: 169. object and destroy the
     writer instance.

     Set an exception and return ‘NULL’ on error.

     The writer instance is invalid after this call.

 -- C Função: void PyUnicodeWriter_Discard (PyUnicodeWriter *writer)

     Discard the internal Unicode buffer and destroy the writer
     instance.

     If 'writer' is ‘NULL’, no operation is performed.

     The writer instance is invalid after this call.

 -- C Função: int PyUnicodeWriter_WriteChar (PyUnicodeWriter *writer,
          Py_UCS4 ch)

     Write the single Unicode character 'ch' into 'writer'.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_WriteUTF8 (PyUnicodeWriter *writer,
          const char *str, Py_ssize_t size)

     Decode the string 'str' from UTF-8 in strict mode and write the
     output into 'writer'.

     'size' is the string length in bytes.  If 'size' is equal to ‘-1’,
     call ‘strlen(str)’ to get the string length.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

     See also *note PyUnicodeWriter_DecodeUTF8Stateful(): 3b2.

 -- C Função: int PyUnicodeWriter_WriteASCII (PyUnicodeWriter *writer,
          const char *str, Py_ssize_t size)

     Write the ASCII string 'str' into 'writer'.

     'size' is the string length in bytes.  If 'size' is equal to ‘-1’,
     call ‘strlen(str)’ to get the string length.

     'str' must only contain ASCII characters.  The behavior is
     undefined if 'str' contains non-ASCII characters.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

     Adicionado na versão 3.14.

 -- C Função: int PyUnicodeWriter_WriteWideChar (PyUnicodeWriter
          *writer, const wchar_t *str, Py_ssize_t size)

     Write the wide string 'str' into 'writer'.

     'size' is a number of wide characters.  If 'size' is equal to ‘-1’,
     call ‘wcslen(str)’ to get the string length.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_WriteUCS4 (PyUnicodeWriter *writer,
          Py_UCS4 *str, Py_ssize_t size)

     Writer the UCS4 string 'str' into 'writer'.

     'size' is a number of UCS4 characters.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_WriteStr (PyUnicodeWriter *writer,
          PyObject *obj)

     Call *note PyObject_Str(): 1226. on 'obj' and write the output into
     'writer'.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_WriteRepr (PyUnicodeWriter *writer,
          PyObject *obj)

     Call *note PyObject_Repr(): 1225. on 'obj' and write the output
     into 'writer'.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_WriteSubstring (PyUnicodeWriter
          *writer, PyObject *str, Py_ssize_t start, Py_ssize_t end)

     Write the substring ‘str[start:end]’ into 'writer'.

     'str' must be Python *note str: 169. object.  'start' must be
     greater than or equal to 0, and less than or equal to 'end'.  'end'
     must be less than or equal to 'str' length.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_Format (PyUnicodeWriter *writer, const
          char *format, ...)

     Similar to *note PyUnicode_FromFormat(): 61f, but write the output
     directly into 'writer'.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

 -- C Função: int PyUnicodeWriter_DecodeUTF8Stateful (PyUnicodeWriter
          *writer, const char *string, Py_ssize_t length, const char
          *errors, Py_ssize_t *consumed)

     Decode the string 'str' from UTF-8 with 'errors' error handler and
     write the output into 'writer'.

     'size' is the string length in bytes.  If 'size' is equal to ‘-1’,
     call ‘strlen(str)’ to get the string length.

     'errors' is an *note error handler: 1a8b. name, such as
     ‘"replace"’.  If 'errors' is ‘NULL’, use the strict error handler.

     If 'consumed' is not ‘NULL’, set '*consumed' to the number of
     decoded bytes on success.  If 'consumed' is ‘NULL’, treat trailing
     incomplete UTF-8 byte sequences as an error.

     On success, return ‘0’.  On error, set an exception, leave the
     writer unchanged, and return ‘-1’.

     See also *note PyUnicodeWriter_WriteUTF8(): 3bc.


File: python.info,  Node: Deprecated API,  Prev: PyUnicodeWriter,  Up: Objetos Unicode e Codecs

7.9.3.28 Deprecated API
.......................

The following API is deprecated.

 -- C Tipo: type Py_UNICODE

     This is a typedef of ‘wchar_t’, which is a 16-bit type or 32-bit
     type depending on the platform.  Please use ‘wchar_t’ directly
     instead.

     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.

     Deprecated since version 3.13, will be removed in version 3.15.

 -- C Função: int PyUnicode_READY (PyObject *unicode)

     Do nothing and return ‘0’.  This API is kept only for backward
     compatibility, but there are no plans to remove it.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.10: This API does nothing since
     Python 3.12.  Previously, this needed to be called for each string
     created using the old API (‘PyUnicode_FromUnicode()’ or similar).

 -- C Função: unsigned int PyUnicode_IS_READY (PyObject *unicode)

     Do nothing and return ‘1’.  This API is kept only for backward
     compatibility, but there are no plans to remove it.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.14: This API does nothing since
     Python 3.12.  Previously, this could be called to check if *note
     PyUnicode_READY(): 431. is necessary.


File: python.info,  Node: Objeto tupla,  Next: Objetos sequência de estrutura,  Prev: Objetos Unicode e Codecs,  Up: Objetos Sequência

7.9.3.29 Objeto tupla
.....................

 -- C Tipo: type PyTupleObject

     Este subtipo de *note PyObject: 5d5. representa um objeto tupla em
     Python.

 -- C Variável: *note PyTypeObject: c8f. PyTuple_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo tupla de Python; é o mesmo
     objeto que *note tuple: 608. 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: 5d5. *PyTuple_New (Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo objeto tupla de tamanho 'len', ou ‘NULL’ com
     uma exceção definida em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyTuple_Pack (Py_ssize_t n, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: c49. PyTuple_Size (PyObject *p)
     ' Parte da *note ABI Estável: 76a.'  Pega um ponteiro para um
     objeto tupla e retorna o tamanho dessa tupla.  No erro, retorna
     ‘-1’ e com uma exceção definida.

 -- C Função: *note Py_ssize_t: c49. PyTuple_GET_SIZE (PyObject *p)

     Como *note PyTuple_Size(): 4f22, mas sem verificação de erro.

 -- C Função: *note PyObject: 5d5. *PyTuple_GetItem (PyObject *p,
          Py_ssize_t pos)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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: 1723.

     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: 5d8, use *note
     Py_NewRef(PyTuple_GetItem(...)): a90. ou *note
     PySequence_GetItem(): 1ce9.

 -- C Função: *note PyObject: 5d5. *PyTuple_GET_ITEM (PyObject *p,
          Py_ssize_t pos)
     'Retorna valor: Referência emprestada.'  Como *note
     PyTuple_GetItem(): 4d58, mas faz nenhuma verificação de seus
     argumentos.

 -- C Função: *note PyObject: 5d5. *PyTuple_GetSlice (PyObject *p,
          Py_ssize_t low, Py_ssize_t high)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 1723.

          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(): 4d59, 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: 503. ou *note com
     asserções: 621.

          Nota: Esta função “rouba” uma referência para 'o' e, ao
          contrário de *note PyTuple_SetItem(): 4d59, '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.

          Aviso: Esta macro deve ser usada 'somente' em tuplas
          recém-criadas.  Usar esta macro em uma tupla que já está em
          uso (ou, em outras palavras, com uma contagem de referências >
          1) pode levar a um comportamento indefinido.

 -- 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: 1809. ou *note SystemError: 78a.


File: python.info,  Node: Objetos sequência de estrutura,  Next: Objeto List,  Prev: Objeto tupla,  Up: Objetos Sequência

7.9.3.30 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: c8f. *PyStructSequence_NewType
          (PyStructSequence_Desc *desc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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(): 4f12.

     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(): 11f9, 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: 76a. (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: da7. *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: 76a. (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: 5d5.*.  O índice no vetor *note
     fields: 5155. do *note PyStructSequence_Desc: da8. 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:
          b6f. 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: 76a. 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: 5d5. *PyStructSequence_New (PyTypeObject
          *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um instância de 'type', que deve ser criada com *note
     PyStructSequence_NewType(): 4f13.

     Retorna ‘NULL’ com uma exceção definida em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyStructSequence_GetItem (PyObject
          *p, Py_ssize_t pos)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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: 503. ou *note com
     asserções: 621.

 -- C Função: *note PyObject: 5d5. *PyStructSequence_GET_ITEM (PyObject
          *p, Py_ssize_t pos)
     'Retorna valor: Referência emprestada.'  Apelido para *note
     PyStructSequence_GetItem(): 4f11.

     Alterado na versão 3.13: Agora implementada como um apelido para
     *note PyStructSequence_GetItem(): 4f11.

 -- C Função: void PyStructSequence_SetItem (PyObject *p, Py_ssize_t
          pos, PyObject *o)
     ' Parte da *note ABI Estável: 76a.'  Define o campo no índice 'pos'
     da sequência de estrutura 'p' para o valor 'o'.  Como *note
     PyTuple_SET_ITEM(): 622, 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: 503. ou *note com
     asserções: 621.

          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(): 4f14.

     Alterado na versão 3.13: Agora implementada como um apelido para
     *note PyStructSequence_SetItem(): 4f14.


File: python.info,  Node: Objeto List,  Prev: Objetos sequência de estrutura,  Up: Objetos Sequência

7.9.3.31 Objeto List
....................

 -- C Tipo: type PyListObject

     Este subtipo de *note PyObject: 5d5. representa um objeto de lista
     Python.

 -- C Variável: *note PyTypeObject: c8f. PyList_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância de *note
     PyTypeObject: c8f. representa o tipo de lista Python.  Este é o
     mesmo objeto que *note list: 24c. 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: 5d5. *PyList_New (Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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():
          1cea. ou expor o objeto ao código Python antes de definir
          todos os itens para um objeto real com *note PyList_SetItem():
          181b. ou *note PyList_SET_ITEM(): 623.  As seguintes APIs são
          seguras desde que antes as listas tenham sido inicializadas:
          *note PyList_SetItem(): 181b. e *note PyList_SET_ITEM(): 623.

 -- C Função: *note Py_ssize_t: c49. PyList_Size (PyObject *list)
     ' Parte da *note ABI Estável: 76a.'

     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: c49. PyList_GET_SIZE (PyObject *list)

     Similar a *note PyList_Size(): 160b, mas sem verificação de erro.

 -- C Função: *note PyObject: 5d5. *PyList_GetItemRef (PyObject *list,
          Py_ssize_t index)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 1723.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyList_GetItem (PyObject *list,
          Py_ssize_t index)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Como *note PyList_GetItemRef(): 5f2, mas retorna
     uma *note referência emprestada: 3d4. em vez de uma *note
     referência forte: 5d8.

 -- C Função: *note PyObject: 5d5. *PyList_GET_ITEM (PyObject *list,
          Py_ssize_t i)
     'Retorna valor: Referência emprestada.'  Similar a *note
     PyList_GetItem(): 5f3, 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: 76a.'  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: 1723.

          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(): 181b. 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: 503. ou *note com
     asserções: 621.

          Nota: Esta macro “rouba” uma referência para o 'item' e, ao
          contrário de *note PyList_SetItem(): 181b, '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: 76a.'  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: 76a.'  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: 5d5. *PyList_GetSlice (PyObject *list,
          Py_ssize_t low, Py_ssize_t high)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 24c.  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: 24c.  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: 76a.'  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: 76a.'  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: 5d5. *PyList_AsTuple (PyObject *list)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     Retorna um novo objeto tupla contendo os conteúdos de 'list';
     equivale a ‘tuple(list)’.


File: python.info,  Node: Coleções,  Next: Objetos Função,  Prev: Objetos Sequência,  Up: Camada de Objetos Concretos

7.9.4 Coleções
--------------

* Menu:

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


File: python.info,  Node: Objetos dicionários,  Next: Objeto Set,  Up: Coleções

7.9.4.1 Objetos dicionários
...........................

 -- C Tipo: type PyDictObject

     Este subtipo do *note PyObject: 5d5. representa um objeto
     dicionário Python.

 -- C Variável: *note PyTypeObject: c8f. PyDict_Type
     ' Parte da *note ABI Estável: 76a.'  Esta instância do *note
     PyTypeObject: c8f. representa o tipo do dicionário Python.  Este é
     o mesmo objeto *note dict: 183. 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: 5d5. *PyDict_New ()
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um novo dicionário vazio ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyDictProxy_New (PyObject *mapping)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um objeto *note types.MappingProxyType: 68d. 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 Função: void PyDict_Clear (PyObject *p)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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
     é equivalente à expressão Python ‘key in p’.

 -- C Função: int PyDict_ContainsString (PyObject *p, const char *key)

     É o mesmo que *note PyDict_Contains(): 5d4, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyDict_Copy (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  Insere 'val' no dicionário 'p'
     com a tecla 'key'.  'key' deve ser *note hasheável: 819.; se não
     for, *note TypeError: 198. 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: 76a.'  É o mesmo que *note
     PyDict_SetItem(): 4d5a, mas 'key' é especificada como uma string de
     bytes const char* codificada em UTF-8, em vez de um *note PyObject:
     5d5.*.

 -- C Função: int PyDict_DelItem (PyObject *p, PyObject *key)
     ' Parte da *note ABI Estável: 76a.'  Remove a entrada no dicionário
     'p' com a chave 'key'.  'key' deve ser *note hasheável: 819.; se
     não for, *note TypeError: 198. é levantada.  Se 'key' não estiver
     no dicionário, *note KeyError: 5dd. é 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: 76a.'  É o mesmo que *note
     PyDict_DelItem(): 4e27, mas 'key' é especificada como uma string de
     bytes const char* codificada em UTF-8, em vez de um *note PyObject:
     5d5.*.

 -- C Função: int PyDict_GetItemRef (PyObject *p, PyObject *key,
          PyObject **result)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Retorna
     uma nova *note referência forte: 5d8. 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: 5d8. 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(): 4dd5.

 -- C Função: *note PyObject: 5d5. *PyDict_GetItem (PyObject *p,
          PyObject *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Retorna um *note referência emprestada: 3d4. 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__(): ce6. e *note __eq__(): ce5. são ignoradas
          silenciosamente.  Ao invés disso, use a função *note
          PyDict_GetItemWithError(): 5d7.

     Alterado na versão 3.10: Chamar esta API sem um *note estado de
     thread anexado: 4d72. era permitido por motivos históricos.  Não é
     mais permitido.

 -- C Função: *note PyObject: 5d5. *PyDict_GetItemWithError (PyObject
          *p, PyObject *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Variante de *note PyDict_GetItem(): 61c. 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: 5d5. *PyDict_GetItemString (PyObject *p,
          const char *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  É o mesmo que *note PyDict_GetItem(): 61c, mas
     'key' é especificada como uma string de bytes const char*
     codificada em UTF-8, em vez de um *note PyObject: 5d5.*.

          Nota: Exceções que ocorrem ao chamar os métodos *note
          __hash__(): ce6. e *note __eq__(): ce5. ou ao criar objetos
          temporários da classe *note str: 169. são ignoradas
          silenciosamente.  Ao invés disso, prefira usar a função *note
          PyDict_GetItemWithError(): 5d7. com sua própria 'key' de *note
          PyUnicode_FromString(): 4f5c.

 -- C Função: int PyDict_GetItemStringRef (PyObject *p, const char *key,
          PyObject **result)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Similar a
     *note PyDict_GetItemRef(): 5d6, mas 'key' é especificada como uma
     string de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyDict_SetDefault (PyObject *p,
          PyObject *key, PyObject *defaultobj)
     'Retorna valor: Referência emprestada.'  Isso é o mesmo que o *note
     dict.setdefault(): 126f. 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: 5d8. 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: 5dd. 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(): 5dc, mas sem o valor padrão e sem
     levantar *note KeyError: 5dd. 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(): 41f, mas 'key' é especificada como
     uma string de bytes const char* codificada em UTF-8, em vez de um
     *note PyObject: 5d5.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 5d5. *PyDict_Items (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um *note PyListObject: 5067. contendo todos os itens
     do dicionário.

 -- C Função: *note PyObject: 5d5. *PyDict_Keys (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um *note PyListObject: 5067. contendo todas as
     chaves do dicionário.

 -- C Função: *note PyObject: 5d5. *PyDict_Values (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um *note PyListObject: 5067. contendo todos os
     valores do dicionário 'p'.

 -- C Função: *note Py_ssize_t: c49. PyDict_Size (PyObject *p)
     ' Parte da *note ABI Estável: 76a.'

     Retorna o número de itens no dicionário.  Isso é equivalente a
     ‘len(p)’ em um dicionário.

 -- C Função: int PyDict_Next (PyObject *p, Py_ssize_t *ppos, PyObject
          **pkey, PyObject **pvalue)
     ' Parte da *note ABI Estável: 76a.'  Itera todos os pares de
     valores-chave no dicionário 'p'.  O *note Py_ssize_t: c49. 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: 5d5.* 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: 1f3. sem sincronização externa.  Você pode usar *note
     Py_BEGIN_CRITICAL_SECTION: 5168. 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();

          Nota: Na construção com threads livres, esta função pode ser
          usada com segurança dentro de uma seção crítica.  No entanto,
          as referências retornadas para 'pkey' e 'pvalue' são *note
          emprestadas: 3d4. e só são válidas enquanto a seção crítica é
          mantida.  Se precisar usar esses objetos fora da seção crítica
          ou quando a seção crítica puder ser suspensa, crie uma *note
          referência forte: 5d8. (por exemplo, usando *note Py_NewRef():
          a90.).

 -- C Função: int PyDict_Merge (PyObject *a, PyObject *b, int override)
     ' Parte da *note ABI Estável: 76a.'  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(): da9. e *note PyObject_GetItem(): 4dd5.  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: 76a.'  É o mesmo que ‘PyDict_Merge(a,
     b, 1)’ em C, e é semelhante a ‘a.update(b)’ em Python, exceto que
     *note PyDict_Update(): 4e30. 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: 76a.'  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(): 779.  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(): 3cd.  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(): 3cd. 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():
     3cd. 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:
          516b. event, *note PyObject: 5d5. *dict, *note PyObject: 5d5.
          *key, *note PyObject: 5d5. *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á impressa como uma exceção não reprovável
     usando *note PyErr_WriteUnraisable(): 5e6.  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 o restaure antes de retornar.

     Adicionado na versão 3.12.


File: python.info,  Node: Objeto Set,  Prev: Objetos dicionários,  Up: Coleções

7.9.4.2 Objeto Set
..................

Esta seção detalha a API pública para os objetos *note set: 184. e *note
frozenset: 7e7.  Qualquer funcionalidade não listada abaixo é melhor
acessada usando o protocolo de objeto abstrato (incluindo *note
PyObject_CallMethod(): 634, *note PyObject_RichCompareBool(): 1c43,
*note PyObject_Hash(): 433, *note PyObject_Repr(): 1225, *note
PyObject_IsTrue(): 4ef1, *note PyObject_Print(): 18d2. e *note
PyObject_GetIter(): 4ef0.) ou o protocolo abstrato de número (incluindo
*note PyNumber_And(): 4ec4, *note PyNumber_Subtract(): 4edd, *note
PyNumber_Or(): 4ed8, *note PyNumber_Xor(): 4edf, *note
PyNumber_InPlaceAnd(): 4ec9, *note PyNumber_InPlaceSubtract(): 4ed1,
*note PyNumber_InPlaceOr(): 4ecd. e *note PyNumber_InPlaceXor(): 4ed3.).

 -- C Tipo: type PySetObject

     Este subtipo de *note PyObject: 5d5. é usado para manter os dados
     internos para ambos os objetos *note set: 184. e *note frozenset:
     7e7.  É como um *note PyDictObject: 643. 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: c8f. PySet_Type
     ' Parte da *note ABI Estável: 76a.'  Essa é uma instância de *note
     PyTypeObject: c8f. representando o tipo Python *note set: 184.

 -- C Variável: *note PyTypeObject: c8f. PyFrozenSet_Type
     ' Parte da *note ABI Estável: 76a.'  Esta é uma instância de *note
     PyTypeObject: c8f. representando o tipo Python *note frozenset:
     7e7.

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: 184. 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: 7e7. 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: 184, um objeto
     *note frozenset: 7e7. 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: 184, 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: 184. ou um
     objeto *note frozenset: 7e7, 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: 7e7, mas
     não uma instância de um subtipo.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *PySet_New (PyObject *iterable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna uma nova *note set: 184. 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: 198. 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: 5d5. *PyFrozenSet_New (PyObject *iterable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna uma nova *note frozenset: 7e7. 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: 198. se 'iterable' não for realmente iterável.

As seguintes funções e macros estão disponíveis para instâncias de *note
set: 184. ou *note frozenset: 7e7. ou instâncias de seus subtipos.

 -- C Função: *note Py_ssize_t: c49. PySet_Size (PyObject *anyset)
     ' Parte da *note ABI Estável: 76a.'

     Retorna o comprimento de um objeto *note set: 184. ou *note
     frozenset: 7e7.  Equivalente a ‘len(anyset)’.  Levanta um *note
     SystemError: 78a. se 'anyset' não for um *note set: 184, *note
     frozenset: 7e7, ou uma instância de um subtipo.

 -- C Função: *note Py_ssize_t: c49. PySet_GET_SIZE (PyObject *anyset)

     Forma macro de *note PySet_Size(): 163a. sem verificação de erros.

 -- C Função: int PySet_Contains (PyObject *anyset, PyObject *key)
     ' Parte da *note ABI Estável: 76a.'  Retorna ‘1’ se encontrado, ‘0’
     se não encontrado, e ‘-1’ se um erro é encontrado.  Ao contrário do
     método Python *note __contains__(): 15ab, esta função não converte
     automaticamente conjuntos não hasheáveis em frozensets temporários.
     Levanta um *note TypeError: 198. se a 'key' não for hasheável.
     Levanta *note SystemError: 78a. se 'anyset' não é um *note set:
     184, *note frozenset: 7e7, ou uma instância de um subtipo.

 -- C Função: int PySet_Add (PyObject *set, PyObject *key)
     ' Parte da *note ABI Estável: 76a.'  Adiciona 'key' a uma instância
     de *note set: 184.  Também funciona com instâncias de *note
     frozenset: 7e7. (como *note PyTuple_SetItem(): 4d59, 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:
     198. se a 'key' não for hasheável.  Levanta uma *note MemoryError:
     1809. se não houver espaço para crescer.  Levanta uma *note
     SystemError: 78a. se 'set' não for uma instância de *note set: 184.
     ou seu subtipo.

As seguintes funções estão disponíveis para instâncias de *note set:
184. ou seus subtipos, mas não para instâncias de *note frozenset: 7e7.
ou seus subtipos.

 -- C Função: int PySet_Discard (PyObject *set, PyObject *key)
     ' Parte da *note ABI Estável: 76a.'  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: 5dd. para
     chaves ausentes.  Levanta uma *note TypeError: 198. se a 'key' não
     for hasheável.  Ao contrário do método Python *note discard():
     2530, esta função não converte automaticamente conjuntos não
     hasheáveis em frozensets temporários.  Levanta *note SystemError:
     78a. se 'set' não é uma instância de *note set: 184. ou seu
     subtipo.

 -- C Função: *note PyObject: 5d5. *PySet_Pop (PyObject *set)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 5dd. se o conjunto estiver vazio.  Levanta
     uma *note SystemError: 78a. se 'set' não for uma instância de *note
     set: 184. ou seu subtipo.

 -- C Função: int PySet_Clear (PyObject *set)
     ' Parte da *note ABI Estável: 76a.'  Esvazia um conjunto existente
     de todos os elementos.  Retorna ‘0’ em caso de sucesso.  Retorna
     ‘-1’ e levanta *note SystemError: 78a. se 'set' não for uma
     instância de *note set: 184. ou seu subtipo.


File: python.info,  Node: Objetos Função,  Next: Outros Objetos,  Prev: Coleções,  Up: Camada de Objetos Concretos

7.9.5 Objetos Função
--------------------

* Menu:

* Objetos Função: Objetos Função<2>.
* 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 Função<2>,  Next: Objetos de Método de Instância,  Up: Objetos Função

7.9.5.1 Objetos Função
......................

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: c8f. PyFunction_Type

     Esta é uma instância de *note PyTypeObject: c8f. 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: 517d.).  O parâmetro não deve ser ‘NULL’.  Esta
     função sempre obtém sucesso.

 -- C Função: *note PyObject: 5d5. *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__: 21e3. é adquirido por meio de
     'globals'.  Os valores-padrão de argumentos, anotações, e
     fechamento são definidos como ‘NULL’.  O atributo *note
     __qualname__: 21e2. é definido com o mesmo valor do campo *note
     co_qualname: 221c. de um objeto código.

 -- C Função: *note PyObject: 5d5. *PyFunction_NewWithQualName (PyObject
          *code, PyObject *globals, PyObject *qualname)
     'Retorna valor: Nova referência.'  Similar a *note
     PyFunction_New(): 517f, mas também permite definir o atributo *note
     __qualname__: 21e2. 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: 221c. do
     objeto código.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *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: 5d5. *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: 5d5. *PyFunction_GetModule (PyObject *op)
     'Retorna valor: Referência emprestada.'  Retorna uma *note
     referência emprestada: 3d4. ao atributo *note __module__: 21e3. do
     *note objeto função: 595. 'op'.  Pode ser ‘NULL’.

     Normalmente, trata-se de um *note string: 169. contendo o nome do
     módulo, mas pode ser definido como qualquer outro objeto pelo
     código Python.

 -- C Função: *note PyObject: 5d5. *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: 78a. 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: 5d5. *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: *note PyObject: 5d5. *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: 78a. e retorna ‘-1’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *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: 78a. e retorna ‘-1’ em caso de falha.

 -- C Função: *note PyObject: 5d5. *PyFunction_GET_CODE (PyObject *op)
 -- C Função: *note PyObject: 5d5. *PyFunction_GET_GLOBALS (PyObject
          *op)
 -- C Função: *note PyObject: 5d5. *PyFunction_GET_MODULE (PyObject *op)
 -- C Função: *note PyObject: 5d5. *PyFunction_GET_DEFAULTS (PyObject
          *op)
 -- C Função: *note PyObject: 5d5. *PyFunction_GET_KW_DEFAULTS (PyObject
          *op)
 -- C Função: *note PyObject: 5d5. *PyFunction_GET_CLOSURE (PyObject
          *op)
 -- C Função: *note PyObject: 5d5. *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: 517d. é 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(): 5192.  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(): 5191. 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: 5193. event, *note PyFunctionObject:
          778. *func, *note PyObject: 5d5. *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: 3d4. 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(): 5e6.  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 Função<2>,  Up: Objetos Função

7.9.5.2 Objetos de Método de Instância
......................................

Um método de instância é um invólucro para um *note PyCFunction: 1666. e
a nova maneira de vincular um *note PyCFunction: 1666. a um objeto
classe.  Ele substitui a chamada anterior ‘PyMethod_New(func, NULL,
class)’.

 -- C Variável: *note PyTypeObject: c8f. PyInstanceMethod_Type

     Esta instância de *note PyTypeObject: c8f. 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: 5199.).  O parâmetro não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *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: 5d5. *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: 5d5. *PyInstanceMethod_GET_FUNCTION
          (PyObject *im)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyInstanceMethod_Function(): 519c. 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 Função

7.9.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: c8f. PyMethod_Type

     Esta instância de *note PyTypeObject: c8f. 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: 51a0.).  O parâmetro não deve ser ‘NULL’.  Esta
     função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *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: 5d5. *PyMethod_Function (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Retorna o objeto função
     associado ao método 'meth'.

 -- C Função: *note PyObject: 5d5. *PyMethod_GET_FUNCTION (PyObject
          *meth)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyMethod_Function(): 51a3. que evita a verificação de erros.

 -- C Função: *note PyObject: 5d5. *PyMethod_Self (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Retorna a instância
     associada com o método 'meth'.

 -- C Função: *note PyObject: 5d5. *PyMethod_GET_SELF (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyMethod_Self(): 51a5. 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 Função

7.9.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: c8f. 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: 5d5. *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: 5d5. *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: 5d5. *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 Função

7.9.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: c8f. PyCode_Type

     Esta é uma instância de *note PyTypeObject: c8f. representando o
     *note objeto código: 4e0. Python.

 -- C Função: int PyCode_Check (PyObject *co)

     Retorna verdadeiro se 'co' for um *note objeto código: 4e0.  Esta
     função sempre tem sucesso.

 -- C Função: *note Py_ssize_t: c49. PyCode_GetNumFree (PyCodeObject
          *co)

     Retorna o número de *note variáveis livres (de clausura): 17f7. 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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Retorna a posição da primeira *note variável livre (de clausura):
     17f7. em um objeto código.

     Alterado na versão 3.13: Renomeado de ‘PyCode_GetFirstFree’ como
     parte da *note API C Instável: 75e.  O nome antigo foi
     descontinuado, mas continuará disponível até que a assinatura mude
     novamente.

 -- C Função: *note PyCodeObject: 970. *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: 75e. 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(): 154b.

     Como a definição de bytecode muda constantemente, chamar *note
     PyUnstable_Code_New(): 51b7. 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: 75e.  O nome antigo foi descontinuado, mas
     continuará disponível até que a assinatura mude novamente.

 -- C Função: *note PyCodeObject: 970.
          *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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Similar a *note PyUnstable_Code_New(): 51b7, 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: 970. *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(): 983.

     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: 5d5. *PyCode_GetCode (PyCodeObject *co)

     Equivalente ao código Python ‘getattr(co, 'co_code')’.  Retorna uma
     referência forte a um *note PyBytesObject: 98a. 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: 5d5. *PyCode_GetVarnames (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_varnames')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4ff0. 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: 5d5. *PyCode_GetCellvars (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_cellvars')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4ff0. 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: 5d5. *PyCode_GetFreevars (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_freevars')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4ff0. contendo os
     nomes das *note variáveis livres (de clausura): 17f7.  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(): 77d.  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(): 77c. 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: 51b9.
          event, *note PyCodeObject: 970. *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á impressa como uma exceção não reprovável
     usando *note PyErr_WriteUnraisable(): 5e6.  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 o restaure antes de retornar.

     Adicionado na versão 3.12.

   ---------- 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 Função

7.9.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: 1833. (por exemplo,
usando *note PyObject_GetAttrString(): 5e1.) e definidos usando um
argumento 'flags' para *note PyUnstable_Code_New(): 51b7. e funções
semelhantes.

Os sinalizadores cujos nomes começam com ‘CO_FUTURE_’ correspondem a
recursos normalmente selecionáveis por *note instruções future: 45a.
Esses sinalizadores podem ser usados em *note PyCompilerFlags.cf_flags:
4fb0.  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: 48e1.
                                                       
                                                       
 -- C Macro: CO_NEWLOCALS                              *note inspect.CO_NEWLOCALS: 48e2.
                                                       
                                                       
 -- C Macro: CO_VARARGS                                *note inspect.CO_VARARGS: 48e3.
                                                       
                                                       
 -- C Macro: CO_VARKEYWORDS                            *note inspect.CO_VARKEYWORDS: 48e4.
                                                       
                                                       
 -- C Macro: CO_NESTED                                 *note inspect.CO_NESTED: 48e5.
                                                       
                                                       
 -- C Macro: CO_GENERATOR                              *note inspect.CO_GENERATOR: 48e6.
                                                       
                                                       
 -- C Macro: CO_COROUTINE                              *note inspect.CO_COROUTINE: 48e7.
                                                       
                                                       
 -- C Macro: CO_ITERABLE_COROUTINE                     *note inspect.CO_ITERABLE_COROUTINE: 48e8.
                                                       
                                                       
 -- C Macro: CO_ASYNC_GENERATOR                        *note inspect.CO_ASYNC_GENERATOR: 48e9.
                                                       
                                                       
 -- C Macro: CO_HAS_DOCSTRING                          *note inspect.CO_HAS_DOCSTRING: 222a.
                                                       
                                                       
 -- C Macro: CO_METHOD                                 *note inspect.CO_METHOD: 48ea.
                                                       
                                                       
 -- C Macro: CO_FUTURE_DIVISION                        sem efeito (*note __future__.division: 488f.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_ABSOLUTE_IMPORT                 sem efeito (*note __future__.absolute_import: 4890.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_WITH_STATEMENT                  sem efeito (*note __future__.with_statement: 4891.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_PRINT_FUNCTION                  sem efeito (*note __future__.print_function: 4892.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_UNICODE_LITERALS                sem efeito
                                                       (*note __future__.unicode_literals: 4893.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_GENERATOR_STOP                  sem efeito (*note __future__.generator_stop: 4894.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_ANNOTATIONS                     *note __future__.annotations: 4895.
                                                       


File: python.info,  Node: Informação adicional,  Prev: Sinalizadores de objetos código,  Up: Objetos Função

7.9.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: c49.
          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: 75e. 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(): 4f6b. quando armazenar *note
     PyObject: 5d5.

     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: 75e. 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: 75e. 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,  Prev: Objetos Função,  Up: Camada de Objetos Concretos

7.9.6 Outros Objetos
--------------------

* Menu:

* Objetos arquivos::
* Objetos do Módulo::
* Module definitions::
* Creating extension modules dynamically::
* Support functions::
* Objetos Iteradores::
* Objetos Descritores::
* Objetos Slice::
* Objetos MemoryView::
* 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 DateTime: Objetos DateTime<2>.
* Objetos de indicação de tipos::


File: python.info,  Node: Objetos arquivos,  Next: Objetos do Módulo,  Up: Outros Objetos

7.9.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: 83, 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: 83.

 -- C Função: *note PyObject: 5d5. *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:
     76a.'  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(): 735.

          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: 76a.'  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(): 2b6d. 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: 5d5. *PyFile_GetLine (PyObject *p, int n)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     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(): 257b.  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: 14d5. é
     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(): 19d4.
     para passar seu parâmetro por meio do manipulador fornecido.

     O 'handler' é uma função do tipo:

      -- C Tipo: typedef *note PyObject: 5d5.
               *(*Py_OpenCodeHookFunction)(*note PyObject: 5d5.*, void*)

          Equivalente de *note PyObject: 5d5. *(*)(*note PyObject: 5d5.
          *path, void *userData), sendo 'path' garantido como sendo
          *note PyUnicodeObject: 98c.

     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(): 19d6. 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(): 45d.

     Levanta um *note evento de auditoria: 1b5d. ‘setopencodehook’ sem
     argumentos.

     Adicionado na versão 3.8.

 -- C Função: int PyFile_WriteObject (PyObject *obj, PyObject *p, int
          flags)
     ' Parte da *note ABI Estável: 76a.'

     Escreve o objeto 'obj' no objeto arquivo 'p'.  O único sinalizador
     suportado para 'flags' é *note Py_PRINT_RAW: 5046.; se fornecido, o
     *note str(): 169. do objeto é escrito em vez de *note repr(): 1c1.
     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: 76a.'  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: Module definitions,  Prev: Objetos arquivos,  Up: Outros Objetos

7.9.6.2 Objetos do Módulo
.........................

 -- C Variável: *note PyTypeObject: c8f. PyModule_Type
     ' Parte da *note ABI Estável: 76a.'

     Esta instância de *note PyTypeObject: c8f. representa o tipo de
     módulo Python.  Isso é exposto a programas Python como
     ‘types.ModuleType’.

 -- 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: 4ec1.  Essa função é sempre bem-sucedida.

 -- C Função: *note PyObject: 5d5. *PyModule_NewObject (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.7.'

     Retorna um novo objeto de módulo com *note module.__name__: 157d.
     definido como 'name'.  Os atributos ‘__name__’, *note __doc__:
     1af7, *note __package__: 321. e *note __loader__: 339. do módulo
     são preenchidos (todos, exceto ‘__name__’, são definidos como
     ‘None’).  O chamador é responsável por definir um atributo *note
     __file__: 2202.

     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__: 321. e *note __loader__:
     339. agora estão definidos como ‘None’.

 -- C Função: *note PyObject: 5d5. *PyModule_New (const char *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Semelhante a *note PyModule_NewObject(): 4ebf, mas o nome é
     uma string codificada em UTF-8 em vez de um objeto Unicode.

 -- C Função: *note PyObject: 5d5. *PyModule_GetDict (PyObject *module)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'

     Retorna o objeto dicionário que implementa o espaço de nomes de
     'module'; este objeto é o mesmo que o atributo *note __dict__: 772.
     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: 78a. é
     levantada e ‘NULL’ é retornado.

     É recomendado que as extensões usem outras funções ‘PyModule_*’ e
     ‘PyObject_*’ em vez de manipular diretamente o *note __dict__: 772.
     de um módulo.

 -- C Função: *note PyObject: 5d5. *PyModule_GetNameObject (PyObject
          *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.7.'

     Retorna o valor *note __name__: 157d. do 'module'.  Se o módulo não
     fornecer um, ou se não for uma string, *note SystemError: 78a. é
     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: 76a.'  Semelhante a *note
     PyModule_GetNameObject(): 4ebd. mas retorna o nome codificado em
     ‘'utf-8'’

 -- C Função: void *PyModule_GetState (PyObject *module)
     ' Parte da *note ABI Estável: 76a.'  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: b6c.

 -- C Função: *note PyModuleDef: b6a. *PyModule_GetDef (PyObject
          *module)
     ' Parte da *note ABI Estável: 76a.'  Retorna um ponteiro para a
     estrutura *note PyModuleDef: b6a. da qual o módulo foi criado, ou
     ‘NULL’ se o módulo não foi criado de uma definição.

 -- C Função: *note PyObject: 5d5. *PyModule_GetFilenameObject (PyObject
          *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

     Retorna o nome do arquivo do qual o 'module' foi carregado usando o
     atributo *note __file__: 2202. do 'module'.  Se não estiver
     definido, ou se não for uma string unicode, levanta *note
     SystemError: 78a. 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: 76a.'  Semelhante a *note
     PyModule_GetFilenameObject(): 42b. mas retorna o nome do arquivo
     codificado em ‘utf-8’.

     Descontinuado desde a versão 3.2: *note PyModule_GetFilename():
     42a.: levanta *note UnicodeEncodeError: 87c. quando há nomes de
     arquivos não codificáveis, use *note PyModule_GetFilenameObject():
     42b.


File: python.info,  Node: Module definitions,  Next: Creating extension modules dynamically,  Prev: Objetos do Módulo,  Up: Outros Objetos

7.9.6.3 Module definitions
..........................

The functions in the previous section work on any module object,
including modules imported from Python code.

Modules defined using the C API typically use a 'module definition',
*note PyModuleDef: b6a. – a statically allocated, constant “description”
of how a module should be created.

The definition is usually used to define an extension’s “main” module
object (see *note Definindo módulos de extensão: 4d9e. for details).  It
is also used to *note create extension modules dynamically: 51de.

Unlike *note PyModule_New(): 4ebe, the definition allows management of
'module state' – a piece of memory that is allocated and cleared
together with the module object.  Unlike the module’s Python attributes,
Python code cannot replace or delete data stored in module state.

 -- C Tipo: type PyModuleDef
     ' Parte da *note ABI Estável: 76a. (incluindo todos os membros).'
     The module definition struct, which holds all information needed to
     create a module object.  This structure must be statically
     allocated (or be otherwise guaranteed to be valid while any modules
     created from it exist).  Usually, there is only one variable of
     this type for each extension module.

      -- 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: 1c12. é usada.

      -- C Membro: *note Py_ssize_t: c49. 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():
          b6d, 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: b69. ter sido chamada, se
          presente.

          Setting it to a non-negative value means that the module can
          be re-initialized and specifies the additional amount of
          memory it requires for its state.

          Setting ‘m_size’ to ‘-1’ means that the module does not
          support sub-interpreters, because it has global state.
          Negative ‘m_size’ is only allowed when using *note legacy
          single-phase initialization: 4fd9. or when *note creating
          modules dynamically: 51de.

          Ver PEP 3121(1) para mais detalhes.

      -- C Membro: *note PyMethodDef: 16c5. *m_methods

          Um ponteiro para uma tabela de funções de nível de módulo,
          descritas por valores *note PyMethodDef: 16c5.  Pode ser
          ‘NULL’ se nenhuma função estiver presente.

      -- C Membro: *note PyModuleDef_Slot: 51e3. *m_slots

          An array of slot definitions for multi-phase initialization,
          terminated by a ‘{0, NULL}’ entry.  When using legacy
          single-phase initialization, 'm_slots' must be ‘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: 4f84. m_reload

      -- C Membro: *note traverseproc: 4f93. 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: b6b.).  Mais
          precisamente, esta função não é chamada se *note m_size: b6c.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): b6d.) 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: 4f84. 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: b6b.).  Mais
          precisamente, esta função não é chamada se *note m_size: b6c.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): b6d.) for ‘NULL’.

          Assim como *note PyTypeObject.tp_clear: 4d84, 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: b69. é 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: 51e5. 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: b6b.).  Mais
          precisamente, esta função não é chamada se *note m_size: b6c.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): b6d.) for ‘NULL’.

          Alterado na versão 3.9: Não é mais chamado antes que o estado
          do módulo seja alocado.

* Menu:

* Module slots::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3121/


File: python.info,  Node: Module slots,  Up: Module definitions

7.9.6.4 Module slots
....................

 -- C Tipo: type PyModuleDef_Slot

      -- 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.

Os tipos de slot disponíveis são:

 -- C Macro: Py_mod_create

     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: 5d5. *create_module (PyObject *spec,
               PyModuleDef *def)

     The function receives a *note ModuleSpec: 2117. 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(): 4ebe.
     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: 4ec1.  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’.

 -- C Macro: Py_mod_exec

     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'.

 -- C Macro: Py_mod_multiple_interpreters

     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: 166.)

      -- 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: 166.)

     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

     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: 493.  Otherwise, it determines whether or not
     importing this module will cause the GIL to be automatically
     enabled.  See *note CPython com threads livres: 466. 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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0451/


File: python.info,  Node: Creating extension modules dynamically,  Next: Support functions,  Prev: Module definitions,  Up: Outros Objetos

7.9.6.5 Creating extension modules dynamically
..............................................

The following functions may be used to create a module outside of an
extension’s *note initialization function: 4fd8.  They are also used in
*note single-phase initialization: 4fd9.

 -- C Função: *note PyObject: 5d5. *PyModule_Create (PyModuleDef *def)
     'Retorna valor: Nova referência.'  Create a new module object,
     given the definition in 'def'.  This is a macro that calls *note
     PyModule_Create2(): 4eb9. with 'module_api_version' set to *note
     PYTHON_API_VERSION: 47bc, or to *note PYTHON_ABI_VERSION: 51f1. if
     using the *note limited API: 62b.

 -- C Função: *note PyObject: 5d5. *PyModule_Create2 (PyModuleDef *def,
          int module_api_version)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 4d1. is emitted.

     Retorna ‘NULL’ com uma exceção definida em caso de erro.

     This function does not support slots.  The *note m_slots: 4fe1.
     member of 'def' must be ‘NULL’.

          Nota: A maioria dos usos dessa função deve ser feita com *note
          PyModule_Create(): 4fe3.; use-o apenas se tiver certeza de que
          precisa.

 -- C Função: *note PyObject: 5d5. *PyModule_FromDefAndSpec (PyModuleDef
          *def, PyObject *spec)
     'Retorna valor: Nova referência.'  This macro calls *note
     PyModule_FromDefAndSpec2(): 10aa. with 'module_api_version' set to
     *note PYTHON_API_VERSION: 47bc, or to *note PYTHON_ABI_VERSION:
     51f1. if using the *note limited API: 62b.

     Adicionado na versão 3.5.

 -- C Função: *note PyObject: 5d5. *PyModule_FromDefAndSpec2
          (PyModuleDef *def, PyObject *spec, int module_api_version)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 4d1. is
     emitted.

     Retorna ‘NULL’ com uma exceção definida em caso de erro.

     Note that this does not process execution slots (*note Py_mod_exec:
     b6b.).  Both ‘PyModule_FromDefAndSpec’ and ‘PyModule_ExecDef’ must
     be called to fully initialize a module.

          Nota: Most uses of this function should be using *note
          PyModule_FromDefAndSpec(): 10a9. 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: 76a. desde a versão 3.7.'  Process
     any execution slots (*note Py_mod_exec: b6b.) given in 'def'.

     Adicionado na versão 3.5.

 -- C Macro: PYTHON_API_VERSION

     The C API version.  Defined for backwards compatibility.

     Atualmente, essa constante não é atualizada nas novas versões de
     Python e não é útil para controle de versão.  Isso pode mudar no
     futuro.

 -- C Macro: PYTHON_ABI_VERSION

     Defined as ‘3’ for backwards compatibility.

     Atualmente, essa constante não é atualizada nas novas versões de
     Python e não é útil para controle de versão.  Isso pode mudar no
     futuro.


File: python.info,  Node: Support functions,  Next: Objetos Iteradores,  Prev: Creating extension modules dynamically,  Up: Outros Objetos

7.9.6.6 Support functions
.........................

The following functions are provided to help initialize a module state.
They are intended for a module’s execution slots (*note Py_mod_exec:
b6b.), the initialization function for legacy *note single-phase
initialization: 4fd9, or code that creates modules dynamically.

 -- C Função: int PyModule_AddObjectRef (PyObject *module, const char
          *name, PyObject *value)
     ' Parte da *note ABI Estável: 76a. 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(): 4f5c. and *note
     PyObject_SetAttr(): 4ef5. directly.  For more details, see *note
     PyUnicode_InternFromString(): 18d3, 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: 76a. desde a versão 3.13.'  Similar
     to *note PyModule_AddObjectRef(): 5fe, 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: 76a.'  Similar to *note
     PyModule_AddObjectRef(): 5fe, but steals a reference to 'value' on
     success (if it returns ‘0’).

     The new *note PyModule_Add(): 5fd. or *note
     PyModule_AddObjectRef(): 5fe. functions are recommended, since it
     is easy to introduce reference leaks by misusing the *note
     PyModule_AddObject(): 5ff. 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(): 987. '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(): 5ff.
     is *note soft deprecated: 23c.

 -- C Função: int PyModule_AddIntConstant (PyObject *module, const char
          *name, long value)
     ' Parte da *note ABI Estável: 76a.'  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():
     1add. and *note PyModule_AddObjectRef(): 5fe.; 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: 76a.'  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(): 18d3. and *note
     PyModule_AddObjectRef(): 5fe.; 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: 76a. desde a versão 3.10.'  Add a
     type object to 'module'.  The type object is finalized by calling
     internally *note PyType_Ready(): 975.  The name of the type object
     is taken from the last component of *note tp_name: 1b95. after dot.
     Return ‘-1’ with an exception set on error, ‘0’ on success.

     Adicionado na versão 3.9.

 -- C Função: int PyModule_AddFunctions (PyObject *module, PyMethodDef
          *functions)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Add the
     functions from the ‘NULL’ terminated 'functions' array to 'module'.
     Refer to the *note PyMethodDef: 16c5. 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’ (such as when using *note Inicialização multifásica:
     4fdf, ‘PyModule_Create’, or ‘PyModule_FromDefAndSpec’).  Some
     module authors may prefer defining functions in multiple *note
     PyMethodDef: 16c5. arrays; in that case they should call this
     function directly.

     Adicionado na versão 3.5.

 -- C Função: int PyModule_SetDocString (PyObject *module, const char
          *docstring)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Set the
     docstring for 'module' to 'docstring'.  This function is called
     automatically when creating a module from ‘PyModuleDef’ (such as
     when using *note Inicialização multifásica: 4fdf,
     ‘PyModule_Create’, or ‘PyModule_FromDefAndSpec’).

     Adicionado na versão 3.5.

 -- 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: 75e. 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: 47c.  It must be called during 'module'’s
     initialization function when using *note Inicialização monofásica
     legada: 4fd9.  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: 493.  Return ‘-1’
     with an exception set on error, ‘0’ on success.

     Adicionado na versão 3.13.

* Menu:

* Module lookup (single-phase initialization): Module lookup single-phase initialization.


File: python.info,  Node: Module lookup single-phase initialization,  Up: Support functions

7.9.6.7 Module lookup (single-phase initialization)
...................................................

The legacy *note single-phase initialization: 4fd9. initialization
scheme 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: 5d5. *PyState_FindModule (PyModuleDef
          *def)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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(): 4f0e. 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: 76a. 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(): 4f0f.

     Only effective on modules created using single-phase
     initialization.

     Python calls ‘PyState_AddModule’ automatically after importing a
     module that uses *note single-phase initialization: 4fd9, 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).

     If a module was attached previously using the same 'def', it is
     replaced by the new 'module'.

     The caller must have an *note attached thread state: 4d72.

     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: 76a. 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 have an *note attached thread state: 4d72.

     Adicionado na versão 3.3.


File: python.info,  Node: Objetos Iteradores,  Next: Objetos Descritores,  Prev: Support functions,  Up: Outros Objetos

7.9.6.8 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__(): 581.  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: c8f. PySeqIter_Type
     ' Parte da *note ABI Estável: 76a.'  Objeto de tipo para objetos
     iteradores retornados por *note PySeqIter_New(): 4ef9. e a forma de
     um argumento da função embutida *note iter(): 9cd. 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: 4efa.
     Esta função sempre é bem-sucedida.

 -- C Função: *note PyObject: 5d5. *PySeqIter_New (PyObject *seq)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Retorna um iterador que funcione com um objeto de sequência
     geral, 'seq'.  A iteração termina quando a sequência levanta *note
     IndexError: 1723. para a operação de assinatura.

 -- C Variável: *note PyTypeObject: c8f. PyCallIter_Type
     ' Parte da *note ABI Estável: 76a.'  Objeto de tipo para objetos
     iteradores retornados por *note PyCallIter_New(): 4e05. e a forma
     de dois argumentos da função embutida *note iter(): 9cd.

 -- C Função: int PyCallIter_Check (PyObject *op)

     Retorna true se o tipo de 'op' for *note PyCallIter_Type: 4e06.
     Esta função sempre é bem-sucedida.

 -- C Função: *note PyObject: 5d5. *PyCallIter_New (PyObject *callable,
          PyObject *sentinel)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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.


File: python.info,  Node: Objetos Descritores,  Next: Objetos Slice,  Prev: Objetos Iteradores,  Up: Outros Objetos

7.9.6.9 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: c8f. PyProperty_Type
     ' Parte da *note ABI Estável: 76a.'  O tipo de objeto para os tipos
     de descritores embutidos.

 -- C Função: *note PyObject: 5d5. *PyDescr_NewGetSet (PyTypeObject
          *type, struct PyGetSetDef *getset)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

 -- C Função: *note PyObject: 5d5. *PyDescr_NewMember (PyTypeObject
          *type, struct PyMemberDef *meth)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

 -- C Função: *note PyObject: 5d5. *PyDescr_NewMethod (PyTypeObject
          *type, struct PyMethodDef *meth)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

 -- C Função: *note PyObject: 5d5. *PyDescr_NewWrapper (PyTypeObject
          *type, struct wrapperbase *wrapper, void *wrapped)
     'Retorna valor: Nova referência.'

 -- C Função: *note PyObject: 5d5. *PyDescr_NewClassMethod (PyTypeObject
          *type, PyMethodDef *method)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'

 -- C Função: int PyDescr_IsData (PyObject *descr)

     Retorna não-zero se os objetos descritores '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: 5d5. *PyWrapper_New (PyObject*, PyObject*)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'


File: python.info,  Node: Objetos Slice,  Next: Objetos MemoryView,  Prev: Objetos Descritores,  Up: Outros Objetos

7.9.6.10 Objetos Slice
......................

 -- C Variável: *note PyTypeObject: c8f. PySlice_Type
     ' Parte da *note ABI Estável: 76a.'  Tipo de objeto para objetos
     fatia.  Isso é o mesmo que *note slice: 689. 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: 5d5. *PySlice_New (PyObject *start,
          PyObject *stop, PyObject *step)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 76a.'  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: 76a.'  Substituição utilizável para
     *note PySlice_GetIndices(): 4f0b.  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(): 42f. e *note
          PySlice_AdjustIndices(): 430. 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: 76a. 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: c49. PySlice_AdjustIndices (Py_ssize_t
          length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
     ' Parte da *note ABI Estável: 76a. 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.9.6.11 Objeto Ellipsis
........................

 -- C Variável: *note PyTypeObject: c8f. PyEllipsis_Type
     ' Parte da *note ABI Estável: 76a.'  O tipo do objeto Python *note
     Ellipsis: 21c4.  O mesmo que *note types.EllipsisType: a47. na
     camada Python.

 -- C Variável: *note PyObject: 5d5. *Py_Ellipsis

     O objeto Python ‘Ellipsis’.  Este objeto não tem métodos.  Como
     *note Py_None: 4d40, é um objeto singleton *note imortal: 28f.

     Alterado na versão 3.12: *note Py_Ellipsis: 5205. é imortal.


File: python.info,  Node: Objetos MemoryView,  Next: Objetos referência fraca<2>,  Prev: Objetos Slice,  Up: Outros Objetos

7.9.6.12 Objetos MemoryView
...........................

Um objeto *note memoryview: 165. expõe a *note interface de buffer: 25f.
a nível de C como um objeto Python que pode ser passado como qualquer
outro objeto.

 -- C Função: *note PyObject: 5d5. *PyMemoryView_FromObject (PyObject
          *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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

     Sinalizador para solicitar um buffer de somente leitura.

 -- C Macro: PyBUF_WRITE

     Sinalizador para solicitar um buffer gravável.

 -- C Função: *note PyObject: 5d5. *PyMemoryView_FromMemory (char *mem,
          Py_ssize_t size, int flags)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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: 1947. ou *note PyBUF_WRITE: 1948.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 5d5. *PyMemoryView_FromBuffer (const
          Py_buffer *view)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. 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(): 136c. é a função
     preferida.

 -- C Função: *note PyObject: 5d5. *PyMemoryView_GetContiguous (PyObject
          *obj, int buffertype, char order)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um objeto memoryview para um pedaço *note contíguo:
     251b. 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: 1947. ou *note
     PyBUF_WRITE: 1948.

 -- 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:
     165.  Esta função sempre tem sucesso.

 -- C Função: *note Py_buffer: 951. *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: 5d5. *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(): 136c. ou *note
     PyMemoryView_FromBuffer(): 95a.  'mview' 'deve' ser uma instância
     de memoryview.


File: python.info,  Node: Objetos referência fraca<2>,  Next: Capsules<2>,  Prev: Objetos MemoryView,  Up: Outros Objetos

7.9.6.13 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.  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: 5d5. *PyWeakref_NewRef (PyObject *ob,
          PyObject *callback)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 198.

 -- C Função: *note PyObject: 5d5. *PyWeakref_NewProxy (PyObject *ob,
          PyObject *callback)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  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: 198.

 -- C Função: int PyWeakref_GetRef (PyObject *ref, PyObject **pobj)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Obtém uma
     *note referência forte: 5d8. 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: 5d8. 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: 5d5. *PyWeakref_GetObject (PyObject *ref)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Retorna uma *note referência emprestada: 3d4. 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:
          3d4. para o objeto referenciado.  Isso significa que você deve
          sempre chamar *note Py_INCREF(): 784. no objeto, exceto quando
          ele não puder ser destruído antes do último uso da referência
          emprestada.

     Deprecated since version 3.13, will be removed in version 3.15: Usa
     *note PyWeakref_GetRef(): 3dc.

 -- C Função: *note PyObject: 5d5. *PyWeakref_GET_OBJECT (PyObject *ref)
     'Retorna valor: Referência emprestada.'  Semelhante a *note
     PyWeakref_GetObject(): 3da, mas não verifica erros.

     Deprecated since version 3.13, will be removed in version 3.15: Usa
     *note PyWeakref_GetRef(): 3dc.

 -- C Função: int PyWeakref_IsDead (PyObject *ref)

     Testa se a referência fraca 'ref' está inativa.  Retorna 1 se a
     referência estiver inativa, 0 se estiver ativa e -1 com um erro
     definido se 'ref' não for um objeto referência fraca.

     Adicionado na versão 3.14.

 -- C Função: void PyObject_ClearWeakRefs (PyObject *object)
     ' Parte da *note ABI Estável: 76a.'  Esta função é chamada pelo
     tratador *note tp_dealloc: 4d5d. 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: 75e. 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: 4d5d. para
     tipos com finalizadores (por exemplo, *note __del__(): 11f3.).  O
     manipulador para esses objetos primeiro chama *note
     PyObject_ClearWeakRefs(): 78b. 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(): 78b. 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.9.6.14 Capsules
.................

Consulte *note Fornecendo uma API C para um módulo de extensão: 154f.
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: 5d5. 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 Tipo: type PyCapsule_Destructor
     ' Parte da *note ABI Estável: 76a.'  O tipo de um retorno de
     chamada destruidor para uma cápsula.  Definido como:

          typedef void (*PyCapsule_Destructor)(PyObject *);

     Veja *note PyCapsule_New(): 4d64. 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: 146e.  Esta
     função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *PyCapsule_New (void *pointer, const
          char *name, PyCapsule_Destructor destructor)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Cria um *note PyCapsule: 146e. 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(): 1b11.

 -- C Função: void *PyCapsule_GetPointer (PyObject *capsule, const char
          *name)
     ' Parte da *note ABI Estável: 76a.'  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: 4e08. PyCapsule_GetDestructor
          (PyObject *capsule)
     ' Parte da *note ABI Estável: 76a.'  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(): 154e. ou *note PyErr_Occurred(): 1b94. para
     desambiguar.

 -- C Função: void *PyCapsule_GetContext (PyObject *capsule)
     ' Parte da *note ABI Estável: 76a.'  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(): 154e. ou *note PyErr_Occurred(): 1b94. para
     desambiguar.

 -- C Função: const char *PyCapsule_GetName (PyObject *capsule)
     ' Parte da *note ABI Estável: 76a.'  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():
     154e. ou *note PyErr_Occurred(): 1b94. para desambiguar.

 -- C Função: void *PyCapsule_Import (const char *name, int no_block)
     ' Parte da *note ABI Estável: 76a.'  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(): 3d9.) 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: 76a.'  Determina se 'capsule' é ou
     não uma cápsula válida.  Uma cápsula válida é diferente de ‘NULL’,
     passa *note PyCapsule_CheckExact(): 5215, possui um ponteiro
     diferente de ‘NULL’ armazenado e seu nome interno corresponde ao
     parâmetro 'name'.  (Consulte *note PyCapsule_GetPointer(): 4e0c.
     para obter informações sobre como os nomes das cápsulas são
     comparados.)

     Em outras palavras, se *note PyCapsule_IsValid(): 154e. 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: 76a.'  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: 76a.'  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: 76a.'  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: 76a.'  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.9.6.15 Objetos Frame
......................

 -- C Tipo: type PyFrameObject
     ' Parte da *note API Limitada: 76a. (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: 980.
     para detalhes.

As funções *note PyEval_GetFrame(): 1a65. e *note
PyThreadState_GetFrame(): 986. podem ser utilizadas para obter um objeto
frame.

Veja também *note Reflexão: 5022.

 -- C Variável: *note PyTypeObject: c8f. PyFrame_Type

     O tipo de objetos frame.  É o mesmo objeto que *note
     types.FrameType: 1af6. na camada Python.

     Alterado na versão 3.11: Anteriormente, este tipo só estava
     disponível após incluir ‘<frameobject.h>’.

 -- 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: 981. *PyFrame_GetBack (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtém o 'frame' próximo ao
     quadro externo.

     Retorna uma *note referência forte: 5d8. ou ‘NULL’ se 'frame' não
     tiver quadro externo.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 5d5. *PyFrame_GetBuiltins (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Get the 'frame'’s *note
     f_builtins: 2231. attribute.

     Retorna uma *note referência forte: 5d8.  O resultado não pode ser
     ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: *note PyCodeObject: 970. *PyFrame_GetCode (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.10.'  Obtém o código de 'frame'.

     Retorna uma *note referência forte: 5d8.

     O resultado (código do frame) não pode ser ‘NULL’.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 5d5. *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: 5d8, ou ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 5d5. *PyFrame_GetGlobals (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Get the 'frame'’s *note
     f_globals: 2230. attribute.

     Retorna uma *note referência forte: 5d8.  O resultado não pode ser
     ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: int PyFrame_GetLasti (PyFrameObject *frame)

     Get the 'frame'’s *note f_lasti: a7e. attribute.

     Retorna -1 se ‘frame.f_lasti’ é ‘None’.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 5d5. *PyFrame_GetVar (PyFrameObject
          *frame, PyObject *name)
     'Retorna valor: Nova referência.'  Get the variable 'name' of
     'frame'.

        * Return a *note strong reference: 5d8. to the variable value on
          success.

        * Raise *note NameError: 44f. and return ‘NULL’ if the variable
          does not exist.

        * Raise an exception and return ‘NULL’ on error.

     'name' type must be a *note str: 169.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 5d5. *PyFrame_GetVarString (PyFrameObject
          *frame, const char *name)
     'Retorna valor: Nova referência.'  Similar to *note
     PyFrame_GetVar(): 77e, but the variable name is a C string encoded
     in UTF-8.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 5d5. *PyFrame_GetLocals (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Get the 'frame'’s *note
     f_locals: 49f. attribute.  If the frame refers to an *note
     optimized scope: 49b, this returns a write-through proxy object
     that allows modifying the locals.  In all other cases (classes,
     modules, *note exec(): 49c, *note eval(): 49d.) it returns the
     mapping representing the frame locals directly (as described for
     *note locals(): 468.).

     Retorna uma *note referência forte: 5d8.

     Adicionado na versão 3.11.

     Alterado na versão 3.13: As part of PEP 667(1), return an instance
     of *note PyFrameLocalsProxy_Type: 5219.

 -- C Função: int PyFrame_GetLineNumber (PyFrameObject *frame)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Retorna o
     número da linha do 'frame' atualmente em execução.

* Menu:

* Frame Locals Proxies::
* Internal Frames::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Frame Locals Proxies,  Next: Internal Frames,  Up: Objetos Frame

7.9.6.16 Frame Locals Proxies
.............................

Adicionado na versão 3.13.

The *note f_locals: 49f. attribute on a *note frame object: 8e4. 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: c8f. PyFrameLocalsProxy_Type

     The type of frame *note locals(): 468. proxy objects.

 -- C Função: int PyFrameLocalsProxy_Check (PyObject *obj)

     Return non-zero if 'obj' is a frame *note locals(): 468. proxy.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Internal Frames,  Prev: Frame Locals Proxies,  Up: Objetos Frame

7.9.6.17 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: 5d5. *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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
          Return a *note strong reference: 5d8. 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: 75e. 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: 75e. 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.9.6.18 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():
5224. ou *note PyGen_NewWithQualName(): 5225.

 -- C Tipo: type PyGenObject

     A estrutura C usada para objetos geradores.

 -- C Variável: *note PyTypeObject: c8f. 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: 5227.;
     'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *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: 5d5. *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’.


File: python.info,  Node: Objetos corrotina<2>,  Next: Objetos de variáveis de contexto,  Prev: Objetos Geradores,  Up: Outros Objetos

7.9.6.19 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: c8f. 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: 522e.; 'ob' não
     deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 5d5. *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 DateTime<2>,  Prev: Objetos corrotina<2>,  Up: Outros Objetos

7.9.6.20 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: 5d5. em vez de *note PyContext: 5234, *note PyContextVar:
     5235. e *note PyContextToken: 5236.  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: 28.

 -- C Tipo: type PyContext

     A estrutura C usada para representar um objeto *note
     contextvars.Context: 177.

 -- C Tipo: type PyContextVar

     A estrutura C usada para representar um objeto *note
     contextvars.ContextVar: 17db.

 -- C Tipo: type PyContextToken

     A estrutura C usada para representar um objeto *note
     contextvars.Token: 1e1.

 -- C Variável: *note PyTypeObject: c8f. PyContext_Type

     O objeto de tipo que representa o tipo de 'contexto'.

 -- C Variável: *note PyTypeObject: c8f. PyContextVar_Type

     O objeto de tipo que representa o tipo de 'variável de contexto'.

 -- C Variável: *note PyTypeObject: c8f. 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: 5237.
     '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:
     5238.  '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:
     5239.  '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: 5d5. *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: 5d5. *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: 5d5. *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.

 -- C Função: int PyContext_AddWatcher (PyContext_WatchCallback
          callback)

     Registra 'callback' como um observador do objeto contexto para o
     interpretador atual.  Devolve um ID que pode ser passado para *note
     PyContext_ClearWatcher(): 18d9.  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.14.

 -- C Função: int PyContext_ClearWatcher (int watcher_id)

     Libera o observador identificado por 'watcher_id' anteriormente
     retornado por *note PyContext_AddWatcher(): 18d8. 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.14.

 -- C Tipo: type PyContextEvent

     Enumeração de possíveis eventos do observador de objeto contexto:

        - ‘Py_CONTEXT_SWITCHED’: O *note contexto atual: 18b8. foi
          alternado para um contexto diferente.  O objeto passado para o
          retorno de chamada de observação é o objeto *note
          contextvars.Context: 177, que está atualmente em uso, ou None
          se não houver contexto atual.

     Adicionado na versão 3.14.

 -- C Tipo: typedef int (*PyContext_WatchCallback)(*note PyContextEvent:
          5242. event, *note PyObject: 5d5. *obj)

     Função de retorno de chamada do observador de objetos contexto.  O
     objeto passado para o retorno de chamada é específico do evento;
     consulte *note PyContextEvent: 5242. para obter detalhes.

     Se o retorno de chamada retornar com uma exceção definida, ele
     deverá retornar ‘-1’; essa exceção será impressa como uma exceção
     não levantável usando *note PyErr_FormatUnraisable(): 5e5.  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.14.

Funções de variável de contexto:

 -- C Função: *note PyObject: 5d5. *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: 5d5. *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(): 5246. 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 DateTime<2>,  Next: Objetos de indicação de tipos,  Prev: Objetos de variáveis de contexto,  Up: Outros Objetos

7.9.6.21 Objetos DateTime
.........................

Vários objetos de data e hora são fornecidos pelo módulo *note datetime:
34.  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 ‘PyDateTime_IMPORT’ 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,
‘PyDateTimeAPI’, usada pelas macros a seguir.

 -- C Tipo: type PyDateTime_Date

     Esta é uma instância de *note PyObject: 5d5. representando o objeto
     data do Python.

 -- C Tipo: type PyDateTime_DateTime

     Esta é uma instância de *note PyObject: 5d5. representando o objeto
     datetime do Python.

 -- C Tipo: type PyDateTime_Time

     Esta é uma instância de *note PyObject: 5d5. representando o objeto
     hora do Python.

 -- C Tipo: type PyDateTime_Delta

     Esta é uma instância de *note PyObject: 5d5. representando a
     diferença entre dois valores de datetime.

 -- C Variável: *note PyTypeObject: c8f. PyDateTime_DateType

     Esta instância de *note PyTypeObject: c8f. representa o tipo data
     do Python; é o mesmo objeto que *note datetime.date: 1f9. na camada
     de Python.

 -- C Variável: *note PyTypeObject: c8f. PyDateTime_DateTimeType

     Esta instância de *note PyTypeObject: c8f. representa o tipo
     datetime do Python; é o mesmo objeto que *note datetime.datetime:
     4dc. na camada de Python.

 -- C Variável: *note PyTypeObject: c8f. PyDateTime_TimeType

     Esta instância de *note PyTypeObject: c8f. representa o tipo hora
     do Python; é o mesmo objeto que *note datetime.time: 1fa. na camada
     de Python.

 -- C Variável: *note PyTypeObject: c8f. PyDateTime_DeltaType

     Esta instância de *note PyTypeObject: c8f. representa o tipo Python
     para a diferença entre dois valores de datetime; é o mesmo objeto
     que *note datetime.timedelta: bb9. na camada de Python.

 -- C Variável: *note PyTypeObject: c8f. PyDateTime_TZInfoType

     Esta instância de *note PyTypeObject: c8f. representa o tipo fuso
     horário do Python; é o mesmo objeto que *note datetime.tzinfo: 7eb.
     na camada de Python.

Macro para acesso ao singleton UTC:

 -- C Variável: *note PyObject: 5d5. *PyDateTime_TimeZone_UTC

     Retorna um singleton do fuso horário representando o UTC, o mesmo
     objeto que *note datetime.timezone.utc: 81c.

     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:
     524f. 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:
     524f.  '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:
     5250. 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: 5250.  '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:
     5251. 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:
     5251.  '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:
     5252. 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:
     5252.  '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:
     5253. 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:
     5253.  'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

Macros para criar objetos:

 -- C Função: *note PyObject: 5d5. *PyDate_FromDate (int year, int
          month, int day)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.date: 1f9. com o ano, mês e dia especificados.

 -- C Função: *note PyObject: 5d5. *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: 4dc. com o ano, mês, dia, hora, minuto, segundo,
     microssegundo especificados.

 -- C Função: *note PyObject: 5d5. *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: 4dc. 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: 5d5. *PyTime_FromTime (int hour, int
          minute, int second, int usecond)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.time: 1fa. com a hora, minuto, segundo e microssegundo
     especificados.

 -- C Função: *note PyObject: 5d5. *PyTime_FromTimeAndFold (int hour,
          int minute, int second, int usecond, int fold)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.time: 1fa. com a hora, minuto, segundo, microssegundo e a
     dobra especificados.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 5d5. *PyDelta_FromDSU (int days, int
          seconds, int useconds)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timedelta: bb9. 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:
     bb9.

 -- C Função: *note PyObject: 5d5. *PyTimeZone_FromOffset (PyObject
          *offset)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timezone: 12bb. com um deslocamento fixo sem nome
     representado pelo argumento 'offset'.

     Adicionado na versão 3.7.

 -- C Função: *note PyObject: 5d5. *PyTimeZone_FromOffsetAndName
          (PyObject *offset, PyObject *name)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timezone: 12bb. 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: 524b, inclusive subclasses (como
*note PyDateTime_DateTime: 524c.).  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: 524c, 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: 5d5. *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: 524d, 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: 5d5. *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: 524e, 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: 5d5. *PyDateTime_FromTimestamp (PyObject
          *args)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     *note datetime.datetime: 4dc. dado uma tupla de argumentos que
     possa ser passada ao método *note
     datetime.datetime.fromtimestamp(): 707.

 -- C Função: *note PyObject: 5d5. *PyDate_FromTimestamp (PyObject
          *args)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     *note datetime.date: 1f9. dado uma tupla de argumentos que possa
     ser passada ao método *note datetime.date.fromtimestamp(): dc1.


File: python.info,  Node: Objetos de indicação de tipos,  Prev: Objetos DateTime<2>,  Up: Outros Objetos

7.9.6.22 Objetos de indicação de tipos
......................................

São fornecidos vários tipos embutidos para sugestão de tipo.
Atualmente, dois tipos existem – *note GenericAlias: 8b6. e *note Union:
9bb.  Apenas ‘GenericAlias’ está exposto ao C.

 -- C Função: *note PyObject: 5d5. *Py_GenericAlias (PyObject *origin,
          PyObject *args)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.9.'  Cria um
     objeto *note GenericAlias: 8b6.  Equivalente a chamar a classe
     Python *note types.GenericAlias: 9e2.  Os argumentos 'origin' e
     'args' definem os atributos ‘__origin__’ e ‘__args__’ de
     ‘GenericAlias’ respectivamente.  'origin' deve ser um *note
     PyTypeObject: c8f.*, e 'args' pode ser um *note PyTupleObject:
     4ff0.* 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__(): 938.

     Adicionado na versão 3.9.

 -- C Variável: *note PyTypeObject: c8f. Py_GenericAliasType
     ' Parte da *note ABI Estável: 76a. desde a versão 3.9.'  O tipo C
     do objeto retornado por *note Py_GenericAlias(): 4f6c.  Equivalente
     a *note types.GenericAlias: 9e2. no Python.

     Adicionado na versão 3.9.


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.10 Inicialização, finalização e threads
=========================================

Veja *note Configuração de inicialização do Python: 63a. 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::
* Process-wide parameters::
* 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>.


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.10.1 Antes da inicialização do Python
---------------------------------------

Em uma aplicação que incorpora Python, a função *note Py_Initialize():
45d. 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: 527e.

As seguintes funções podem ser seguramente chamadas antes da
inicialização do Python.

   * Funções que inicializam o interpretador:

        * *note Py_Initialize(): 45d.

        * *note Py_InitializeEx(): 4f73.

        * *note Py_InitializeFromConfig(): 3f3.

        * *note Py_BytesMain(): bae.

        * *note Py_Main(): e12.

        * as funções de pré-inicialização de tempo de execução cobertas
          em *note Configuração de Inicialização do Python: 63a.

   * Funções de configuração:

        * *note PyImport_AppendInittab(): 1a4c.

        * *note PyImport_ExtendInittab(): 1a4d.

        * ‘PyInitFrozenExtensions()’

        * *note PyMem_SetAllocator(): 79d.

        * *note PyMem_SetupDebugHooks(): e58.

        * *note PyObject_SetArenaAllocator(): 527f.

        * *note Py_SetProgramName(): 18f8.

        * *note Py_SetPythonHome(): 18f7.

        * *note PySys_ResetWarnOptions(): 3f1.

        * as funções de configuração cobertas em *note Configuração de
          Inicialização do Python: 63a.

   * Funções informativas:

        * *note Py_IsInitialized(): 4ddd.

        * *note PyMem_GetAllocator(): 5280.

        * *note PyObject_GetArenaAllocator(): 5281.

        * *note Py_GetBuildInfo(): 1623.

        * *note Py_GetCompiler(): 4f6e.

        * *note Py_GetCopyright(): 4f6f.

        * *note Py_GetPlatform(): 4f70.

        * *note Py_GetVersion(): 4f71.

        * *note Py_IsInitialized(): 4ddd.

   * Utilitários:

        * *note Py_DecodeLocale(): db4.

        * o relatório de status é funções utilitárias cobertas em *note
          Configuração de Inicialização do Python: 63a.

   * Alocadores de memória:

        * *note PyMem_RawMalloc(): 625.

        * *note PyMem_RawRealloc(): 627.

        * *note PyMem_RawCalloc(): 626.

        * *note PyMem_RawFree(): 628.

   * Sincronização:

        * *note PyMutex_Lock(): 5c7.

        * *note PyMutex_Unlock(): 5c8.

     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(): db5, *note Py_GetPath(): 3e0, *note
     Py_GetPrefix(): 3e2, *note Py_GetExecPrefix(): 3e6, *note
     Py_GetProgramFullPath(): 3e9, *note Py_GetPythonHome(): 3ec, *note
     Py_GetProgramName(): 3eb, *note PyEval_InitThreads(): 18fb, e *note
     Py_RunMain(): bb2.


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.10.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: 1fc8.

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: 403. para 1 e ‘-bb’ define *note
Py_BytesWarningFlag: 403. para 2.

 -- C Variável: int Py_BytesWarningFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.bytes_warning: 404. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     63a.

     Emite um aviso ao comparar *note bytes: 192. ou *note bytearray:
     342. com *note str: 169. ou *note bytes: 192. com *note int: 19b.
     Emite um erro se for maior ou igual a ‘2’.

     Definida pela opção *note -b: 7ee.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_DebugFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.parser_debug: 3f6. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     63a.

     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: 1fd0. e a variável de ambiente
     *note PYTHONDEBUG: 1fd1.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_DontWriteBytecodeFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.write_bytecode: 40a. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     63a.

     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: 15be. e pela variável de ambiente
     *note PYTHONDONTWRITEBYTECODE: 15bf.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_FrozenFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.pathconfig_warnings: 406. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 63a.

     Suprime mensagens de erro ao calcular o caminho de pesquisa do
     módulo em *note Py_GetPath(): 3e0.

     Sinalizador privado usado pelos programas ‘_freeze_module’ e
     ‘frozenmain’.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_HashRandomizationFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração de *note PyConfig.hash_seed: 411. e *note
     PyConfig.use_hash_seed: 410. deve ser usada em seu lugar, consulte
     *note Configuração de inicialização do Python: 63a.

     Definida como ‘1’ se a variável de ambiente *note PYTHONHASHSEED:
     1273. estiver definida como uma string não vazia.

     Se o sinalizador for diferente de zero, lê a variável de ambiente
     *note PYTHONHASHSEED: 1273. para inicializar a semente de hash
     secreta.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_IgnoreEnvironmentFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.use_environment: 408. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     63a.

     Ignora todas as variáveis de ambiente ‘PYTHON*’, por exemplo *note
     PYTHONPATH: 1213. e *note PYTHONHOME: 3ed, que podem estar
     definidas.

     Definida pelas opções *note -E: b4c. e *note -I: b4d.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_InspectFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.inspect: 3fe. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     Quando um script é passado como primeiro argumento ou a opção *note
     -c: 1a8. é usada, entre no modo interativo após executar o script
     ou o comando, mesmo quando *note sys.stdin: 754. não parece ser um
     terminal.

     Definida pela opção *note -i: 16c9. e pela variável de ambiente
     *note PYTHONINSPECT: 16c8.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_InteractiveFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.interactive: 3fc. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     Definida pela opção *note -i: 16c9.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_IsolatedFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.isolated: 413. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     Executa o Python no modo isolado.  No modo isolado, *note sys.path:
     3e1. 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: b4d.

     Adicionado na versão 3.4.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_LegacyWindowsFSEncodingFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyPreConfig.legacy_windows_fs_encoding: 415.
     deve ser usada em seu lugar, consulte *note Configuração de
     inicialização do Python: 63a.

     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: 752.

     Definida como ‘1’ se a variável de ambiente *note
     PYTHONLEGACYWINDOWSFSENCODING: 33d. estiver definida como uma
     string não vazia.

     Veja PEP 529(1) para mais detalhes.

     *note Disponibilidade: 1fed.: Windows.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_LegacyWindowsStdioFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.legacy_windows_stdio: 417. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 63a.

     Se o sinalizador for diferente de zero, usa *note io.FileIO: 150b.
     em vez de ‘io._WindowsConsoleIO’ para fluxos padrão *note sys: df.

     Definida como ‘1’ se a variável de ambiente *note
     PYTHONLEGACYWINDOWSSTDIO: e49. estiver definida como uma string não
     vazia.

     Veja a PEP 528(2) para mais detalhes.

     *note Disponibilidade: 1fed.: Windows.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_NoSiteFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.site_import: 402. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     Desabilita a importação do módulo *note site: cc. e as manipulações
     dependentes do site de *note sys.path: 3e1. que isso acarreta.
     Também desabilita essas manipulações se *note site: cc. for
     explicitamente importado mais tarde (chame *note site.main(): 1fd4.
     se você quiser que eles sejam acionados).

     Definida pela opção *note -S: 13a4.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_NoUserSiteDirectory

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.user_site_directory: 40c. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 63a.

     Não adiciona o ‘diretório site-packages de usuário’ a *note
     sys.path: 3e1.

     Definida pelas opções *note -s: 1580. e *note -I: b4d, e pela
     variável de ambiente *note PYTHONNOUSERSITE: 1581.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_OptimizeFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.optimization_level: 400. deve ser usada
     em seu lugar, consulte *note Configuração de inicialização do
     Python: 63a.

     Definida pela opção *note -O: 18c. e pela variável de ambiente
     *note PYTHONOPTIMIZE: 1fd2.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_QuietFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.quiet: 3fa. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     Não exibe as mensagens de direito autoral e de versão nem mesmo no
     modo interativo.

     Definida pela opção *note -q: 1fd3.

     Adicionado na versão 3.2.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_UnbufferedStdioFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.buffered_stdio: 40e. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     63a.

     Força os fluxos stdout e stderr a não serem armazenados em buffer.

     Definida pela opção *note -u: 1c44. e pela variável de ambiente
     *note PYTHONUNBUFFERED: 1c45.

     Deprecated since version 3.12, will be removed in version 3.15.

 -- C Variável: int Py_VerboseFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.verbose: 3f8. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 63a.

     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: 1616. e a variável de ambiente
     *note PYTHONVERBOSE: 1fd5.

     Deprecated since version 3.12, will be removed in version 3.15.

   ---------- 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: Process-wide parameters,  Prev: Variáveis de configuração global,  Up: Inicialização finalização e threads

7.10.3 Inicializando e encerrando o interpretador
-------------------------------------------------

 -- C Função: void Py_Initialize ()
     ' Parte da *note ABI Estável: 76a.'

     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 Python/C API; veja *note Antes da Inicialização do
     Python: db2. para algumas exceções.

     Isso inicializa a tabela de módulos carregados (‘sys.modules’) e
     cria os módulos fundamentais *note builtins: 13, *note __main__: 1.
     e *note sys: df.  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: 63a. para isso.
     Isso é um no-op quando chamado pela segunda vez (sem chamar *note
     Py_FinalizeEx(): f05. primeiro).  Não há valor de retorno; é um
     erro fatal se a inicialização falhar.

     Usa *note Py_InitializeFromConfig(): 3f3. para personalizar a *note
     Configuração de inicialização do Python: 63a.

          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: 76a.'  Esta função funciona como
     *note Py_Initialize(): 45d. 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(): 3f3. para personalizar a *note
     Configuração de inicialização do Python: 63a.

 -- C Função: *note PyStatus: b9a. Py_InitializeFromConfig (const
          PyConfig *config)

     Inicializa o Python a partir da configuração 'config', conforme
     descrito em *note Initialization with PyConfig: 5284.

     Consulte a seção *note Configuração de Inicialização do Python:
     63a. 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: 76a.'  Retorna true (diferente de
     zero) quando o interpretador Python foi inicializado, false (zero)
     se não.  Após *note Py_FinalizeEx(): f05. ser chamado, isso retorna
     false até que *note Py_Initialize(): 45d. seja chamado novamente.

 -- C Função: int Py_IsFinalizing ()
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Retorna
     verdadeiro (diferente de zero) se o interpretador Python principal
     estiver em *note desligamento: 473.  Retorna falso (zero) caso
     contrário.

     Adicionado na versão 3.13.

 -- C Função: int Py_FinalizeEx ()
     ' Parte da *note ABI Estável: 76a. desde a versão 3.6.'  Desfaz
     todas as inicializações feitas por *note Py_Initialize(): 45d. e o
     uso subsequente de funções da API Python/C, e destrói todos os
     subinterpretadores (veja *note Py_NewInterpreter(): 1a5f. abaixo)
     que foram criados e ainda não destruídos desde a última chamada a
     *note Py_Initialize(): 45d.  Esta operação é ineficaz quando
     chamada pela segunda vez (sem chamar *note Py_Initialize(): 45d.
     novamente primeiro).

     Como isso é o inverso de *note Py_Initialize(): 45d, 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(): bb2. 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.

     Observe que o Python fará o máximo possível para liberar toda a
     memória alocada pelo interpretador Python.  Portanto, qualquer
     extensão C deve certificar-se de limpar corretamente todos os
     PyObjects alocados anteriormente antes de usá-los em chamadas
     subsequentes para *note Py_Initialize(): 45d.  Caso contrário, isso
     pode introduzir vulnerabilidades e comportamento incorreto.

     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 e advertências:' A destruição de módulos e objetos em módulos
     é feita em ordem aleatória; isso pode fazer com que destrutores
     (métodos *note __del__(): 11f3.) falhem quando dependem de outros
     objetos (até mesmo funções) ou módulos.  Módulos de extensão
     carregados dinamicamente pelo Python não são descarregados.
     Pequenas quantidades de memória alocadas pelo interpretador Python
     podem não ser liberadas (se você encontrar um vazamento, por favor,
     reporte-o).  Memória presa em referências circulares entre objetos
     não é liberada.  Strings internadas serão todas desalocadas
     independentemente de sua contagem de referências.  Parte da memória
     alocada por módulos de extensão pode não ser liberada.  Algumas
     extensões podem não funcionar corretamente se sua rotina de
     inicialização for chamada mais de uma vez; isso pode acontecer se
     uma aplicação chamar *note Py_Initialize(): 45d. e *note
     Py_FinalizeEx(): f05. mais de uma vez.  *note Py_FinalizeEx(): f05.
     não deve ser chamado recursivamente de dentro de si mesmo.
     Portanto, ele não deve ser chamado por nenhum código que possa ser
     executado como parte do processo de desligamento do interpretador,
     como manipuladores *note atexit: d, finalizadores de objetos ou
     qualquer código que possa ser executado durante a limpeza dos
     arquivos de stdout e stderr.

     Levanta um *note evento de auditoria: 1b5d.
     ‘cpython._PySys_ClearAuditHooks’ sem argumentos.

     Adicionado na versão 3.6.

 -- C Função: void Py_Finalize ()
     ' Parte da *note ABI Estável: 76a.'  Esta é uma versão compatível
     com retrocompatibilidade de *note Py_FinalizeEx(): f05. que
     desconsidera o valor de retorno.

 -- C Função: int Py_BytesMain (int argc, char **argv)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.8.'  Semelhante
     a *note Py_Main(): e12, mas 'argv' é um vetor de strings de bytes,
     permitindo que o aplicativo de chamada delegue a etapa de
     decodificação de texto ao tempo 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: 76a.'  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 *note
     Linha de comando: 11fd.

     Isso é disponibilizado para programas que desejam oferecer suporte
     à interface de linha de comando completa do CPython, em vez de
     apenas incorporar um tempo 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():
     db4.  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).

     The return value is ‘2’ if the argument list does not represent a
     valid Python command line, and otherwise the same as *note
     Py_RunMain(): bb2.

     Em termos das APIs de configuração de tempo de execução do CPython
     documentadas na seção de *note configuração de runtime: 63a. (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(): 45d, *note
     Py_InitializeEx(): 4f73. ou *note Py_InitializeFromConfig(): 3f3.
     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
     runtime, 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 runtime).

 -- C Função: int Py_RunMain (void)

     Executes the main module in a fully configured CPython runtime.

     Executes the command (*note PyConfig.run_command: 5285.), the
     script (*note PyConfig.run_filename: 5286.) or the module (*note
     PyConfig.run_module: 5287.) specified on the command line or in the
     configuration.  If none of these values are set, runs the
     interactive Python prompt (REPL) using the ‘__main__’ module’s
     global namespace.

     If *note PyConfig.inspect: 3fe. is not set (the default), the
     return value will be ‘0’ if the interpreter exits normally (that
     is, without raising an exception), the exit status of an unhandled
     *note SystemExit: f30, or ‘1’ for any other unhandled exception.

     If *note PyConfig.inspect: 3fe. is set (such as when the *note -i:
     16c9. option is used), rather than returning when the interpreter
     exits, execution will instead resume in an interactive Python
     prompt (REPL) using the ‘__main__’ module’s global namespace.  If
     the interpreter exited with an exception, it is immediately raised
     in the REPL session.  The function return value is then determined
     by the way the 'REPL session' terminates: ‘0’, ‘1’, or the status
     of a *note SystemExit: f30, as specified above.

     This function always finalizes the Python interpreter before it
     returns.

     See *note Python Configuration: 5288. for an example of a
     customized Python that always runs in isolated mode using *note
     Py_RunMain(): bb2.

 -- 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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Register an *note atexit: d. callback for the target interpreter
     'interp'.  This is similar to *note Py_AtExit(): 4f69, but takes an
     explicit interpreter and data pointer for the callback.

     There must be an *note attached thread state: 4d72. for 'interp'.

     Adicionado na versão 3.13.


File: python.info,  Node: Process-wide parameters,  Next: Estado de thread e a trava global do interpretador,  Prev: Inicializando e encerrando o interpretador,  Up: Inicialização finalização e threads

7.10.4 Process-wide parameters
------------------------------

 -- C Função: void Py_SetProgramName (const wchar_t *name)
     ' Parte da *note ABI Estável: 76a.'

     This API is kept for backward compatibility: setting *note
     PyConfig.program_name: 3ef. should be used instead, see *note
     Python Initialization Configuration: 63a.

     Esta função deve ser chamada antes de *note Py_Initialize(): 45d.
     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(): 3e0. 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(): db4. to decode a bytes string to get a
     wchar_t* string.

     Deprecated since version 3.11, will be removed in version 3.15.

 -- C Função: wchar_t *Py_GetProgramName ()
     ' Parte da *note ABI Estável: 76a.'  Return the program name set
     with *note PyConfig.program_name: 3ef, or the default.  The
     returned string points into static storage; the caller should not
     modify its value.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.)
     instead.

 -- C Função: wchar_t *Py_GetPrefix ()
     ' Parte da *note ABI Estável: 76a.'  Return the 'prefix' for
     installed platform-independent files.  This is derived through a
     number of complicated rules from the program name set with *note
     PyConfig.program_name: 3ef. and some environment variables; for
     example, if the program name is ‘'/usr/local/bin/python'’, the
     prefix is ‘'/usr/local'’.  The returned string points into static
     storage; the caller should not modify its value.  This corresponds
     to the ‘prefix’ variable in the top-level ‘Makefile’ and the *note
     -prefix: 1ffc. argument to the ‘configure’ script at build time.
     The value is available to Python code as ‘sys.base_prefix’.  It is
     only useful on Unix.  See also the next function.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("base_prefix"): 379. (*note sys.base_prefix:
     3e3.) instead.  Use *note PyConfig_Get("prefix"): 379. (*note
     sys.prefix: 3e4.) if *note virtual environments: 3e5. need to be
     handled.

 -- C Função: wchar_t *Py_GetExecPrefix ()
     ' Parte da *note ABI Estável: 76a.'  Return the 'exec-prefix' for
     installed platform-'dependent' files.  This is derived through a
     number of complicated rules from the program name set with *note
     PyConfig.program_name: 3ef. and some environment variables; for
     example, if the program name is ‘'/usr/local/bin/python'’, the
     exec-prefix is ‘'/usr/local'’.  The returned string points into
     static storage; the caller should not modify its value.  This
     corresponds to the ‘exec_prefix’ variable in the top-level
     ‘Makefile’ and the ‘--exec-prefix’ argument to the ‘configure’
     script at build time.  The value is available to Python code as
     ‘sys.base_exec_prefix’.  It is only useful on Unix.

     Background: The exec-prefix differs from the prefix when platform
     dependent files (such as executables and shared libraries) are
     installed in a different directory tree.  In a typical
     installation, platform dependent files may be installed in the
     ‘/usr/local/plat’ subtree while platform independent may be
     installed in ‘/usr/local’.

     Generally speaking, a platform is a combination of hardware and
     software families, e.g.  Sparc machines running the Solaris 2.x
     operating system are considered the same platform, but Intel
     machines running Solaris 2.x are another platform, and Intel
     machines running Linux are yet another platform.  Different major
     revisions of the same operating system generally also form
     different platforms.  Non-Unix operating systems are a different
     story; the installation strategies on those systems are so
     different that the prefix and exec-prefix are meaningless, and set
     to the empty string.  Note that compiled Python bytecode files are
     platform independent (but not independent from the Python version
     by which they were compiled!).

     System administrators will know how to configure the ‘mount’ or
     ‘automount’ programs to share ‘/usr/local’ between platforms while
     having ‘/usr/local/plat’ be a different filesystem for each
     platform.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("base_exec_prefix"): 379. (*note
     sys.base_exec_prefix: 3e7.) instead.  Use *note
     PyConfig_Get("exec_prefix"): 379. (*note sys.exec_prefix: 3e8.) if
     *note virtual environments: 3e5. need to be handled.

 -- C Função: wchar_t *Py_GetProgramFullPath ()
     ' Parte da *note ABI Estável: 76a.'

     Return the full program name of the Python executable; this is
     computed as a side-effect of deriving the default module search
     path from the program name (set by *note PyConfig.program_name:
     3ef.).  The returned string points into static storage; the caller
     should not modify its value.  The value is available to Python code
     as ‘sys.executable’.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.)
     instead.

 -- C Função: wchar_t *Py_GetPath ()
     ' Parte da *note ABI Estável: 76a.'

     Return the default module search path; this is computed from the
     program name (set by *note PyConfig.program_name: 3ef.) and some
     environment variables.  The returned string consists of a series of
     directory names separated by a platform dependent delimiter
     character.  The delimiter character is ‘':'’ on Unix and macOS,
     ‘';'’ on Windows.  The returned string points into static storage;
     the caller should not modify its value.  The list *note sys.path:
     3e1. is initialized with this value on interpreter startup; it can
     be (and usually is) modified later to change the search path for
     loading modules.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("module_search_paths"): 379. (*note sys.path:
     3e1.) instead.

 -- C Função: const char *Py_GetVersion ()
     ' Parte da *note ABI Estável: 76a.'  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]"

     The first word (up to the first space character) is the current
     Python version; the first characters are the major and minor
     version separated by a period.  The returned string points into
     static storage; the caller should not modify its value.  The value
     is available to Python code as *note sys.version: 496.

     See also the *note Py_Version: 37e. constant.

 -- C Função: const char *Py_GetPlatform ()
     ' Parte da *note ABI Estável: 76a.'

     Return the platform identifier for the current platform.  On Unix,
     this is formed from the “official” name of the operating system,
     converted to lower case, followed by the major revision number;
     e.g., for Solaris 2.x, which is also known as SunOS 5.x, the value
     is ‘'sunos5'’.  On macOS, it is ‘'darwin'’.  On Windows, it is
     ‘'win'’.  The returned string points into static storage; the
     caller should not modify its value.  The value is available to
     Python code as ‘sys.platform’.

 -- C Função: const char *Py_GetCopyright ()
     ' Parte da *note ABI Estável: 76a.'  Retorna a string oficial de
     direitos autoriais para a versão atual do Python, por exemplo

     ‘'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'’

     The returned string points into static storage; the caller should
     not modify its value.  The value is available to Python code as
     ‘sys.copyright’.

 -- C Função: const char *Py_GetCompiler ()
     ' Parte da *note ABI Estável: 76a.'  Retorna uma indicação do
     compilador usado para construir a atual versão do Python, em
     colchetes, por exemplo:

          "[GCC 2.7.2.2]"

     The returned string points into static storage; the caller should
     not modify its value.  The value is available to Python code as
     part of the variable ‘sys.version’.

 -- C Função: const char *Py_GetBuildInfo ()
     ' Parte da *note ABI Estável: 76a.'  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"

     The returned string points into static storage; the caller should
     not modify its value.  The value is available to Python code as
     part of the variable ‘sys.version’.

 -- C Função: void PySys_SetArgvEx (int argc, wchar_t **argv, int
          updatepath)
     ' Parte da *note ABI Estável: 76a.'

     This API is kept for backward compatibility: setting *note
     PyConfig.argv: 3ee, *note PyConfig.parse_argv: 1bcb. and *note
     PyConfig.safe_path: 96c. should be used instead, see *note Python
     Initialization Configuration: 63a.

     Set *note sys.argv: 1460. based on 'argc' and 'argv'.  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 'argv' can be an empty string.  If this function
     fails to initialize *note sys.argv: 1460, a fatal condition is
     signalled using *note Py_FatalError(): b70.

     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:
     3e1. de acordo com o seguinte algoritmo:

        - If the name of an existing script is passed in ‘argv[0]’, the
          absolute path of the directory where the script is located is
          prepended to *note sys.path: 3e1.

        - Otherwise (that is, if 'argc' is ‘0’ or ‘argv[0]’ doesn’t
          point to an existing file name), an empty string is prepended
          to *note sys.path: 3e1, which is the same as prepending the
          current working directory (‘"."’).

     Use *note Py_DecodeLocale(): db4. to decode a bytes string to get a
     wchar_t* string.

     See also *note PyConfig.orig_argv: a8a. and *note PyConfig.argv:
     3ee. members of the *note Python Initialization Configuration: 63a.

          Nota: It is recommended that applications embedding the Python
          interpreter for purposes other than executing a single script
          pass ‘0’ as 'updatepath', and update *note sys.path: 3e1.
          themselves if desired.  See CVE 2008-5983(1).

          On versions before 3.1.3, you can achieve the same effect by
          manually popping the first *note sys.path: 3e1. element after
          having called *note PySys_SetArgv(): 18fa, for example using:

               PyRun_SimpleString("import sys; sys.path.pop(0)\n");

     Adicionado na versão 3.1.3.

     Deprecated since version 3.11, will be removed in version 3.15.

 -- C Função: void PySys_SetArgv (int argc, wchar_t **argv)
     ' Parte da *note ABI Estável: 76a.'  This API is kept for backward
     compatibility: setting *note PyConfig.argv: 3ee. and *note
     PyConfig.parse_argv: 1bcb. should be used instead, see *note Python
     Initialization Configuration: 63a.

     This function works like *note PySys_SetArgvEx(): 18f9. with
     'updatepath' set to ‘1’ unless the ‘python’ interpreter was started
     with the *note -I: b4d.

     Use *note Py_DecodeLocale(): db4. to decode a bytes string to get a
     wchar_t* string.

     See also *note PyConfig.orig_argv: a8a. and *note PyConfig.argv:
     3ee. members of the *note Python Initialization Configuration: 63a.

     Alterado na versão 3.4: The 'updatepath' value depends on *note -I:
     b4d.

     Deprecated since version 3.11, will be removed in version 3.15.

 -- C Função: void Py_SetPythonHome (const wchar_t *home)
     ' Parte da *note ABI Estável: 76a.'  This API is kept for backward
     compatibility: setting *note PyConfig.home: 3f0. should be used
     instead, see *note Python Initialization Configuration: 63a.

     Set the default “home” directory, that is, the location of the
     standard Python libraries.  See *note PYTHONHOME: 3ed. for the
     meaning of the argument string.

     The argument should point to a zero-terminated character string in
     static storage whose contents will not change for the duration of
     the program’s execution.  No code in the Python interpreter will
     change the contents of this storage.

     Use *note Py_DecodeLocale(): db4. to decode a bytes string to get a
     wchar_t* string.

     Deprecated since version 3.11, will be removed in version 3.15.

 -- C Função: wchar_t *Py_GetPythonHome ()
     ' Parte da *note ABI Estável: 76a.'  Return the default “home”,
     that is, the value set by *note PyConfig.home: 3f0, or the value of
     the *note PYTHONHOME: 3ed. environment variable if it is set.

     This function should not be called before *note Py_Initialize():
     45d, otherwise it returns ‘NULL’.

     Alterado na versão 3.10: It now returns ‘NULL’ if called before
     *note Py_Initialize(): 45d.

     Deprecated since version 3.13, will be removed in version 3.15: Use
     *note PyConfig_Get("home"): 379. or the *note PYTHONHOME: 3ed.
     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: Process-wide parameters,  Up: Inicialização finalização e threads

7.10.5 Estado de thread e a trava global do interpretador
---------------------------------------------------------

A menos que seja uma construção com *note threads livres: 1f3. do *note
CPython: 8fa, o interpretador Python não é totalmente seguro para
thread.  Para oferecer suporte a programas Python multithread, existe
uma trava global, chamada de *note trava global do interpretador: 46d.
ou *note GIL: 164, que deve ser mantida pela thread atual antes que ela
possa acessar objetos Python com segurança.  Sem a trava, mesmo as
operações mais simples podem causar problemas em um programa
multithread: por exemplo, quando duas threads incrementam
simultaneamente a contagem de referências do mesmo objeto, a contagem de
referências pode acabar sendo incrementada apenas uma vez, no lugar de
duas.

Portanto, existe a regra de que somente a thread que adquiriu a *note
GIL: 164. 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(): b3a.).  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.

O interpretador Python mantém algumas informações contábeis específicas
da thread dentro de uma estrutura de dados chamada *note PyThreadState:
985, conhecida como *note estado de thread: 17af.  Cada thread do SO
possui um ponteiro local da thread para um *note PyThreadState: 985.; um
estado de thread referenciado por este ponteiro é considerado *note
anexado: 4d72.

Uma thread só pode ter um *note estado de thread anexado: 4d72. por vez.
Um estado de thread anexado é tipicamente análogo a manter a *note GIL:
164, exceto em construções com *note threads livres: 1f3.  Em
construções com a *note GIL: 164. habilitada, *note anexar: 4d72. um
estado de thread vai bloquear até que a *note GIL: 164. possa ser
adquirida.  No entanto, mesmo em construções com a *note GIL: 164.
desabilitada, ainda é necessário ter um estado de thread anexado para
chamar a maior parte da API C.

Em geral, sempre haverá um *note estado de thread anexado: 4d72. ao usar
a API C do Python.  Somente em alguns casos específicos (como em um
bloco *note Py_BEGIN_ALLOW_THREADS: 4d5e.) a thread não terá um estado
de thread anexado.  Em caso de dúvida, verifique se *note
PyThreadState_GetUnchecked(): 420. retorna ‘NULL’.

* Menu:

* Desvinculação do estado de thread do código de extensão::
* Non-Python created threads::
* Supporting subinterpreters in non-Python threads::
* 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: Desvinculação do estado de thread do código de extensão,  Next: Non-Python created threads,  Up: Estado de thread e a trava global do interpretador

7.10.5.1 Desvinculação do estado de thread do código de extensão
................................................................

A maior parte do código de extensão que manipula o *note estado de
thread: 17af. tem a seguinte estrutura simples:

     Salve o estado de thread em uma variável local.
     ... Faça alguma operação de E/S com bloqueio...
     Restaure o estado de thread da variável local.

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: 4d5e. abre um novo bloco e declara
uma variável local oculta; a macro *note Py_END_ALLOW_THREADS: c73.
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);

Veja como essas funções atuam:

O *note estado de thread anexado: 4d72. mantém a *note GIL: 164. para
todo o interpretador.  Ao desanexar o *note estado de thread anexado:
4d72, a *note GIL: 164. é liberada, permitindo que outras threads anexem
um estado de thread a sua própria thread, assim obtendo a *note GIL:
164. e podendo iniciar a execução.  O ponteiro para o *note estado de
thread anexado: 4d72. anterior é armazenado como uma variável local.  Ao
chegar a *note Py_END_ALLOW_THREADS: c73, o estado de thread que foi
anteriormente *note anexado: 4d72. é passado para *note
PyEval_RestoreThread(): 63c.  Esse função será bloqueada até que outro
libere seu *note estado de thread: 4d72, permitindo assim que o antigo
*note estado de thread: 4d72. seja re-anexado e a API C possa ser
novamente chamada.

Para construções com *note threads livres: 1f3, a *note GIL: 164.
normalmente está fora de questão, mas a separação do *note estado de
thread: 4d72. ainda é necessário para E/S com bloqueio e operações
longas.  A diferença é que threads não precisam esperar que a *note GIL:
164. seja liberada para anexar seu estado de thread, permitindo
verdadeiro paralelismo de vários núcleos.

     Nota: Chamar funções de E/S do sistema é o caso de uso mais comum
     para desanexar o *note estado de thread: 4d72, mas também pode ser
     útil antes de chamar cálculos de longa duração que não precisam de
     acesso a Python objeto, como funções de compressão ou criptografia
     operando em buffers de memória.  Por exemplo, os módulos dos
     padrões *note zlib: 139. e *note hashlib: 6c. desanexam o *note
     estado de thread: 4d72. ao compactar ou fazer hashing de dados.


File: python.info,  Node: Non-Python created threads,  Next: Supporting subinterpreters in non-Python threads,  Prev: Desvinculação do estado de thread do código de extensão,  Up: Estado de thread e a trava global do interpretador

7.10.5.2 Non-Python created threads
...................................

When threads are created using the dedicated Python APIs (such as the
*note threading: f3. 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 *note GIL: 164, because
they don’t have an *note attached thread state: 4d72.

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 an *note attached thread state: 4d72. before you can start
using the Python/C API. When you are done, you should detach the *note
thread state: 4d72, and finally free it.

The *note PyGILState_Ensure(): 63e. and *note PyGILState_Release(): 63f.
functions do all of the above automatically.  The typical idiom for
calling into Python from a C thread is:

     PyGILState_STATE gstate;
     gstate = PyGILState_Ensure();

     /* Perform Python actions here. */
     result = CallSomeFunction();
     /* evaluate result or handle exception */

     /* Release the thread. No Python API allowed beyond this point. */
     PyGILState_Release(gstate);

Note that the ‘PyGILState_*’ functions assume there is only one global
interpreter (created automatically by *note Py_Initialize(): 45d.).
Python supports the creation of additional interpreters (using *note
Py_NewInterpreter(): 1a5f.), but mixing multiple interpreters and the
‘PyGILState_*’ API is unsupported.  This is because *note
PyGILState_Ensure(): 63e. and similar functions default to *note
attaching: 4d72. a *note thread state: 17af. for the main interpreter,
meaning that the thread can’t safely interact with the calling
subinterpreter.


File: python.info,  Node: Supporting subinterpreters in non-Python threads,  Next: Cuidados com o uso de fork,  Prev: Non-Python created threads,  Up: Estado de thread e a trava global do interpretador

7.10.5.3 Supporting subinterpreters in non-Python threads
.........................................................

If you would like to support subinterpreters with non-Python created
threads, you must use the ‘PyThreadState_*’ API instead of the
traditional ‘PyGILState_*’ API.

In particular, you must store the interpreter state from the calling
function and pass it to *note PyThreadState_New(): 4f1c, which will
ensure that the *note thread state: 17af. is targeting the correct
interpreter:

     /* The return value of PyInterpreterState_Get() from the
        function that created this thread. */
     PyInterpreterState *interp = ThreadData->interp;
     PyThreadState *tstate = PyThreadState_New(interp);
     PyThreadState_Swap(tstate);

     /* GIL of the subinterpreter is now held.
        Perform Python actions here. */
     result = CallSomeFunction();
     /* evaluate result or handle exception */

     /* Destroy the thread state. No Python API allowed beyond this point. */
     PyThreadState_Clear(tstate);
     PyThreadState_DeleteCurrent();


File: python.info,  Node: Cuidados com o uso de fork,  Next: Cautions regarding runtime finalization,  Prev: Supporting subinterpreters in non-Python threads,  Up: Estado de thread e a trava global do interpretador

7.10.5.4 Cuidados com o uso de fork()
.....................................

Another important thing to note about threads is their behaviour in the
face of the C ‘fork()’ call.  On most systems with ‘fork()’, after a
process forks only the thread that issued the fork will exist.  This has
a concrete impact both on how locks must be handled and on all stored
state in CPython’s runtime.

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(): 4af. by acquiring the locks it uses internally before the
fork, and releasing them afterwards.  In addition, it resets any *note
Lock objects: 34ba. 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(): 4af. (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(): 42d. 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():
4af. does.  This means finalizing all other *note PyThreadState: 985.
objects belonging to the current interpreter and all other *note
PyInterpreterState: ab0. objects.  Due to this and the special nature of
the *note “main” interpreter: 163, ‘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.10.5.5 Cautions regarding runtime finalization
................................................

In the late stage of *note interpreter shutdown: 473, after attempting
to wait for non-daemon threads to exit (though this can be interrupted
by *note KeyboardInterrupt: bbb.) and running the *note atexit: d.
functions, the runtime is marked as 'finalizing': *note
Py_IsFinalizing(): 5f1. and *note sys.is_finalizing(): c74. return true.
At this point, only the 'finalization thread' that initiated
finalization (typically the main thread) is allowed to acquire the *note
GIL: 164.

If any thread, other than the finalization thread, attempts to attach a
*note thread state: 17af. during finalization, either explicitly or
implicitly, 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 and earlier.  The CPython runtime
*note thread state: 17af. C APIs have never had any error reporting or
handling expectations at *note thread state: 17af. attachment 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.10.5.6 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: 76a. (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: 5294.  See *note
     Py_NewInterpreterFromConfig(): 67e.

 -- C Tipo: type PyThreadState
     ' Parte da *note API Limitada: 76a. (como uma estrutura opaca).'
     This data structure represents the state of a single thread.  The
     only public data member is:

      -- C Membro: *note PyInterpreterState: ab0. *interp

          This thread’s interpreter state.

 -- C Função: void PyEval_InitThreads ()
     ' Parte da *note ABI Estável: 76a.'

     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(): 45d, 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(): 45d.

     Descontinuado desde a versão 3.9.

 -- C Função: *note PyThreadState: 985. *PyEval_SaveThread ()
     ' Parte da *note ABI Estável: 76a.'  Detach the *note attached
     thread state: 4d72. and return it.  The thread will have no *note
     thread state: 17af. upon returning.

 -- C Função: void PyEval_RestoreThread (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a.'  Set the *note attached thread
     state: 4d72. to 'tstate'.  The passed *note thread state: 17af.
     'should not' be *note attached: 4d72, otherwise deadlock ensues.
     'tstate' will be attached upon returning.

          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: 5291. for more
          details.

     Alterado na versão 3.14: Hangs the current thread, rather than
     terminating it, if called while the interpreter is finalizing.

 -- C Função: *note PyThreadState: 985. *PyThreadState_Get ()
     ' Parte da *note ABI Estável: 76a.'  Return the *note attached
     thread state: 4d72.  If the thread has no attached thread state,
     (such as when inside of *note Py_BEGIN_ALLOW_THREADS: 4d5e. block),
     then this issues a fatal error (so that the caller needn’t check
     for ‘NULL’).

     See also *note PyThreadState_GetUnchecked(): 420.

 -- C Função: *note PyThreadState: 985. *PyThreadState_GetUnchecked ()

     Similar to *note PyThreadState_Get(): 609, 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: 985. *PyThreadState_Swap
          (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a.'  Set the *note attached thread
     state: 4d72. to 'tstate', and return the *note thread state: 17af.
     that was attached prior to calling.

     This function is safe to call without an *note attached thread
     state: 4d72.; it will simply return ‘NULL’ indicating that there
     was no prior thread state.

     Ver também
     ..........

     *note PyEval_ReleaseThread(): 4e45.

          Nota: Similar to *note PyGILState_Ensure(): 63e, this function
          will hang the thread if the runtime is finalizing.

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: 76a.'  The type of the value returned
     by *note PyGILState_Ensure(): 63e. and passed to *note
     PyGILState_Release(): 63f.

      -- C Enumerador: enumerator PyGILState_LOCKED

          The GIL was already held when *note PyGILState_Ensure(): 63e.
          was called.

      -- C Enumerador: enumerator PyGILState_UNLOCKED

          The GIL was not held when *note PyGILState_Ensure(): 63e. was
          called.

 -- C Função: *note PyGILState_STATE: 4e94. PyGILState_Ensure ()
     ' Parte da *note ABI Estável: 76a.'  Ensure that the current thread
     is ready to call the Python C API regardless of the current state
     of Python, or of the *note attached thread state: 4d72.  This may
     be called as many times as desired by a thread as long as each call
     is matched with a call to *note PyGILState_Release(): 63f.  In
     general, other thread-related APIs may be used between *note
     PyGILState_Ensure(): 63e. and *note PyGILState_Release(): 63f.
     calls as long as the thread state is restored to its previous state
     before the Release().  For example, normal usage of the *note
     Py_BEGIN_ALLOW_THREADS: 4d5e. and *note Py_END_ALLOW_THREADS: c73.
     macros is acceptable.

     The return value is an opaque “handle” to the *note attached thread
     state: 4d72. when *note PyGILState_Ensure(): 63e. was called, and
     must be passed to *note PyGILState_Release(): 63f. 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(): 63e. must save the handle for its call
     to *note PyGILState_Release(): 63f.

     When the function returns, there will be an *note attached thread
     state: 4d72. and the thread will be able to call arbitrary Python
     code.  Failure is a fatal error.

          Aviso: Calling this function when the runtime is finalizing is
          unsafe.  Doing so will either hang the thread until the
          program ends, or fully crash the interpreter in rare cases.
          Refer to *note Cautions regarding runtime finalization: 5291.
          for more details.

     Alterado na versão 3.14: 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: 76a.'  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(): 63e. call (but generally this state will be
     unknown to the caller, hence the use of the GILState API).

     Every call to *note PyGILState_Ensure(): 63e. must be matched by a
     call to *note PyGILState_Release(): 63f. on the same thread.

 -- C Função: *note PyThreadState: 985. *PyGILState_GetThisThreadState
          ()
     ' Parte da *note ABI Estável: 76a.'  Get the *note attached thread
     state: 4d72. 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.

          Nota: This function may return non-‘NULL’ even when the *note
          thread state: 17af. is detached.  Prefer *note
          PyThreadState_Get(): 609. or *note
          PyThreadState_GetUnchecked(): 420. for most cases.

     Ver também
     ..........

     *note PyThreadState_Get(): 609.

 -- C Função: int PyGILState_Check ()

     Return ‘1’ if the current thread is holding the *note GIL: 164. and
     ‘0’ otherwise.  This function can be called from any thread at any
     time.  Only if it has had its *note thread state: 4d72. initialized
     via *note PyGILState_Ensure(): 63e. 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 *note GIL: 164. is locked can allow the caller to perform
     sensitive actions or otherwise behave differently.

          Nota: If the current Python process has ever created a
          subinterpreter, this function will 'always' return ‘1’.
          Prefer *note PyThreadState_GetUnchecked(): 420. for most
          cases.

     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: 76a.'  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: c73.  Veja acima para
     uma discussão mais aprofundada desta macro.

 -- C Macro: Py_END_ALLOW_THREADS
     ' Parte da *note ABI Estável: 76a.'  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: 4d5e. anterior.  Veja acima para uma
     discussão mais aprofundada desta macro.

 -- C Macro: Py_BLOCK_THREADS
     ' Parte da *note ABI Estável: 76a.'  Esta macro se expande para
     ‘PyEval_RestoreThread(_save);’: é equivalente a *note
     Py_END_ALLOW_THREADS: c73. sem a chave de fechamento.

 -- C Macro: Py_UNBLOCK_THREADS
     ' Parte da *note ABI Estável: 76a.'  Esta macro se expande para
     ‘_save = PyEval_SaveThread();’: é equivalente a *note
     Py_BEGIN_ALLOW_THREADS: 4d5e. 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.10.5.7 Low-level API
......................

All of the following functions must be called after *note
Py_Initialize(): 45d.

Alterado na versão 3.7: *note Py_Initialize(): 45d. now initializes the
*note GIL: 164. and sets an *note attached thread state: 4d72.

 -- C Função: *note PyInterpreterState: ab0. *PyInterpreterState_New ()
     ' Parte da *note ABI Estável: 76a.'  Create a new interpreter state
     object.  An *note attached thread state: 4d72. is not needed, but
     may optionally exist if it is necessary to serialize calls to this
     function.

     Levanta um *note evento de auditoria: 1b5d.
     ‘cpython.PyInterpreterState_New’ sem argumentos.

 -- C Função: void PyInterpreterState_Clear (PyInterpreterState *interp)
     ' Parte da *note ABI Estável: 76a.'  Reset all information in an
     interpreter state object.  There must be an *note attached thread
     state: 4d72. for the interpreter.

     Levanta um *note evento de auditoria: 1b5d.
     ‘cpython.PyInterpreterState_Clear’ sem argumentos.

 -- C Função: void PyInterpreterState_Delete (PyInterpreterState
          *interp)
     ' Parte da *note ABI Estável: 76a.'  Destroy an interpreter state
     object.  There 'should not' be an *note attached thread state:
     4d72. for the target interpreter.  The interpreter state must have
     been reset with a previous call to *note
     PyInterpreterState_Clear(): 45e3.

 -- C Função: *note PyThreadState: 985. *PyThreadState_New
          (PyInterpreterState *interp)
     ' Parte da *note ABI Estável: 76a.'  Create a new thread state
     object belonging to the given interpreter object.  An *note
     attached thread state: 4d72. is not needed.

 -- C Função: void PyThreadState_Clear (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a.'  Reset all information in a
     *note thread state: 17af. object.  'tstate' must be *note attached:
     4d72.

     Alterado na versão 3.9: This function now calls the
     ‘PyThreadState.on_delete’ callback.  Previously, that happened in
     *note PyThreadState_Delete(): 1c40.

     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: 76a.'  Destroy a *note thread state:
     17af. object.  'tstate' should not be *note attached: 4d72. to any
     thread.  'tstate' must have been reset with a previous call to
     *note PyThreadState_Clear(): 18d7.

 -- C Função: void PyThreadState_DeleteCurrent (void)

     Detach the *note attached thread state: 4d72. (which must have been
     reset with a previous call to *note PyThreadState_Clear(): 18d7.)
     and then destroy it.

     No *note thread state: 17af. will be *note attached: 4d72. upon
     returning.

 -- C Função: *note PyFrameObject: 981. *PyThreadState_GetFrame
          (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Get the
     current frame of the Python thread state 'tstate'.

     Return a *note strong reference: 5d8.  Return ‘NULL’ if no frame is
     currently executing.

     See also *note PyEval_GetFrame(): 1a65.

     'tstate' must not be ‘NULL’, and must be *note attached: 4d72.

     Adicionado na versão 3.9.

 -- C Função: uint64_t PyThreadState_GetID (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Get the
     unique *note thread state: 17af. identifier of the Python thread
     state 'tstate'.

     'tstate' must not be ‘NULL’, and must be *note attached: 4d72.

     Adicionado na versão 3.9.

 -- C Função: *note PyInterpreterState: ab0.
          *PyThreadState_GetInterpreter (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Get the
     interpreter of the Python thread state 'tstate'.

     'tstate' must not be ‘NULL’, and must be *note attached: 4d72.

     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(): 950.
     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(): 94f. function.

     See also *note PyEval_SetTrace(): 657. and *note
     PyEval_SetProfile(): 16eb. functions.

     Adicionado na versão 3.11.

 -- C Função: *note PyInterpreterState: ab0. *PyInterpreterState_Get
          (void)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.9.'  Get the
     current interpreter.

     Issue a fatal error if there no *note attached thread state: 4d72.
     It cannot return NULL.

     Adicionado na versão 3.9.

 -- C Função: int64_t PyInterpreterState_GetID (PyInterpreterState
          *interp)
     ' Parte da *note ABI Estável: 76a. 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 have an *note attached thread state: 4d72.

     Adicionado na versão 3.7.

 -- C Função: *note PyObject: 5d5. *PyInterpreterState_GetDict
          (PyInterpreterState *interp)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a. 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(): b6d, 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 Tipo: typedef *note PyObject: 5d5. *(*_PyFrameEvalFunction)(*note
          PyThreadState: 985. *tstate, *note _PyInterpreterFrame: 18c0.
          *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: 96f.
          _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: 5d5. *PyThreadState_GetDict ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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 *note thread state: 17af. is *note
     attached: 4d72.  If this function returns ‘NULL’, no exception has
     been raised and the caller should assume no thread state is
     attached.

 -- C Função: int PyThreadState_SetAsyncExc (unsigned long id, PyObject
          *exc)
     ' Parte da *note ABI Estável: 76a.'  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 an *note attached thread state: 4d72.  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: 76a.'  *note Attach: 4d72. 'tstate'
     to the current thread, which must not be ‘NULL’ or already *note
     attached: 4d72.

     The calling thread must not already have an *note attached thread
     state: 4d72.

          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: 5291. for more
          details.

     Alterado na versão 3.8: Updated to be consistent with *note
     PyEval_RestoreThread(): 63c, *note Py_END_ALLOW_THREADS(): c73, and
     *note PyGILState_Ensure(): 63e, and terminate the current thread if
     called while the interpreter is finalizing.

     Alterado na versão 3.14: Hangs the current thread, rather than
     terminating it, if called while the interpreter is finalizing.

     *note PyEval_RestoreThread(): 63c. 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: 76a.'  Detach the *note attached
     thread state: 4d72.  The 'tstate' argument, which must not be
     ‘NULL’, is only used to check that it represents the *note attached
     thread state: 4d72. — if it isn’t, a fatal error is reported.

     *note PyEval_SaveThread(): 63b. 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.10.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(): 529b. function returns a pointer to its
state.

You can switch between sub-interpreters using the *note
PyThreadState_Swap(): 4f1d. 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(): 67e. 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: 529c.
          must be ‘1’ (non-zero).  If this is ‘1’ then *note gil: 529d.
          must not be *note PyInterpreterConfig_OWN_GIL: 529e.

      -- 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: dc. 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(): 2ea7.) in
          any thread where the sub-interpreter is currently active.
          Otherwise exec is unrestricted.

          Note that the *note subprocess: dc. module still works when
          exec is disallowed.

      -- C Membro: int allow_threads

          If this is ‘0’ then the sub-interpreter’s *note threading: f3.
          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: f3.
          module won’t create daemon threads.  Otherwise daemon threads
          are allowed (as long as *note allow_threads: 52a1. 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:
          4fdc.)

          This must be ‘1’ (non-zero) if *note use_main_obmalloc: 47a7.
          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: 52a4.).

           -- 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: 529e. then *note
          PyInterpreterConfig.use_main_obmalloc: 47a7. must be ‘0’.

 -- C Função: *note PyStatus: b9a. 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: 13,
     *note __main__: 1. and *note sys: df.  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 *note thread
     state: 17af. created in the new sub-interpreter.  This thread state
     is *note attached: 4d72.  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 *note
     attached thread state: 4d72, which might not exist.

     Like all other Python/C API functions, an *note attached thread
     state: 4d72. must be present before calling this function, but it
     might be detached upon returning.  On success, the returned thread
     state will be *note attached: 4d72.  If the sub-interpreter is
     created with its own *note GIL: 164. then the *note attached thread
     state: 4d72. of the calling interpreter will be detached.  When the
     function returns, the new interpreter’s *note thread state: 17af.
     will be *note attached: 4d72. to the current thread and the
     previous interpreter’s *note attached thread state: 4d72. will
     remain detached.

     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: ab0. values.  A read-only
     copy of the config may be stored internally on the *note
     PyInterpreterState: ab0.

     Extension modules are shared between (sub-)interpreters as follows:

        * For modules using multi-phase initialization, e.g.  *note
          PyModule_FromDefAndSpec(): 10a9, 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(): 4fe3, 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: 52a5. 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():
          f05. and *note Py_Initialize(): 45d.; 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: 985. *Py_NewInterpreter (void)
     ' Parte da *note ABI Estável: 76a.'

     Create a new sub-interpreter.  This is essentially just a wrapper
     around *note Py_NewInterpreterFromConfig(): 67e. 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: 76a.'

     Destroy the (sub-)interpreter represented by the given *note thread
     state: 17af.  The given thread state must be *note attached: 4d72.
     When the call returns, there will be no *note attached thread
     state: 4d72.  All thread states associated with this interpreter
     are destroyed.

     *note Py_FinalizeEx(): f05. 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.10.6.1 A Per-Interpreter GIL
..............................

Using *note Py_NewInterpreterFromConfig(): 67e. 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: 28f.  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.10.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(): d5f. 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():
63e. and *note PyGILState_Release(): 63f. calls.  Furthermore,
extensions (such as *note ctypes: 2e.) 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.10.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: 76a.'  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: 4a4. boundary;

        * with the main thread holding an *note attached thread state:
          4d72. ('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 *note thread state: 4d72. is
     detached.

     This function doesn’t need an *note attached thread state: 4d72.
     However, to call this function in a subinterpreter, the caller must
     have an *note attached thread state: 4d72.  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: 528d.

     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.


File: python.info,  Node: Profiling and Tracing,  Next: Reference tracing,  Prev: Notificações assíncronas,  Up: Inicialização finalização e threads

7.10.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: 5d5. *obj, *note
          PyFrameObject: 981. *frame, int what, *note PyObject: 5d5.
          *arg)

     The type of the trace function registered using *note
     PyEval_SetProfile(): 16eb. and *note PyEval_SetTrace(): 657.  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: 52ab, *note
     PyTrace_EXCEPTION: 52ac, *note PyTrace_LINE: 52ad, *note
     PyTrace_RETURN: 52ae, *note PyTrace_C_CALL: 52af, *note
     PyTrace_C_EXCEPTION: 52b0, *note PyTrace_C_RETURN: 52b1, or *note
     PyTrace_OPCODE: 52b2, and 'arg' depends on the value of 'what':

     Value of 'what'                     Meaning of 'arg'
                                         
     ---------------------------------------------------------------------------------
                                         
     *note PyTrace_CALL: 52ab.           Always *note Py_None: 4d40.
                                         
                                         
     *note PyTrace_EXCEPTION: 52ac.      Exception information as returned by
                                         *note sys.exc_info(): 88f.
                                         
                                         
     *note PyTrace_LINE: 52ad.           Always *note Py_None: 4d40.
                                         
                                         
     *note PyTrace_RETURN: 52ae.         Value being returned to the caller, or
                                         ‘NULL’ if caused by an exception.
                                         
                                         
     *note PyTrace_C_CALL: 52af.         Function object being called.
                                         
                                         
     *note PyTrace_C_EXCEPTION: 52b0.    Function object being called.
                                         
                                         
     *note PyTrace_C_RETURN: 52b1.       Function object being called.
                                         
                                         
     *note PyTrace_OPCODE: 52b2.         Always *note Py_None: 4d40.
                                         

 -- C Variável: int PyTrace_CALL

     The value of the 'what' parameter to a *note Py_tracefunc: 52aa.
     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: 52aa.
     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:
     52aa. 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: dca. to '0' on that frame.

 -- C Variável: int PyTrace_RETURN

     The value for the 'what' parameter to *note Py_tracefunc: 52aa.
     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: 52aa.
     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: 52aa.
     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: 52aa.
     functions when a C function has returned.

 -- C Variável: int PyTrace_OPCODE

     The value for the 'what' parameter to *note Py_tracefunc: 52aa.
     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: dcb. 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: 52ad.
     *note PyTrace_OPCODE: 52b2. and *note PyTrace_EXCEPTION: 52ac.

     See also the *note sys.setprofile(): 16ec. function.

     The caller must have an *note attached thread state: 4d72.

 -- C Função: void PyEval_SetProfileAllThreads (Py_tracefunc func,
          PyObject *obj)

     Like *note PyEval_SetProfile(): 16eb. 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 have an *note attached thread state: 4d72.

     As *note PyEval_SetProfile(): 16eb, 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(): 16eb, 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(): 657. will not
     receive *note PyTrace_C_CALL: 52af, *note PyTrace_C_EXCEPTION:
     52b0. or *note PyTrace_C_RETURN: 52b1. as a value for the 'what'
     parameter.

     See also the *note sys.settrace(): 2e0. function.

     The caller must have an *note attached thread state: 4d72.

 -- C Função: void PyEval_SetTraceAllThreads (Py_tracefunc func,
          PyObject *obj)

     Like *note PyEval_SetTrace(): 657. 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 have an *note attached thread state: 4d72.

     As *note PyEval_SetTrace(): 657, 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.10.9 Reference tracing
------------------------

Adicionado na versão 3.13.

 -- C Tipo: typedef int (*PyRefTracer)(*note PyObject: 5d5.*, int event,
          void *data)

     The type of the trace function registered using *note
     PyRefTracer_SetTracer(): 604.  The first parameter is a Python
     object that has been just created (when 'event' is set to *note
     PyRefTracer_CREATE: 52b5.) or about to be destroyed (when 'event'
     is set to *note PyRefTracer_DESTROY: 52b6.).  The 'data' argument
     is the opaque pointer that was provided when *note
     PyRefTracer_SetTracer(): 604. was called.

Adicionado na versão 3.13.

 -- C Variável: int PyRefTracer_CREATE

     The value for the 'event' parameter to *note PyRefTracer: 52b4.
     functions when a Python object has been created.

 -- C Variável: int PyRefTracer_DESTROY

     The value for the 'event' parameter to *note PyRefTracer: 52b4.
     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.  A *note
     thread state: 17af. will be active every time the tracer function
     is called.

     There must be an *note attached thread state: 4d72. when calling
     this function.

Adicionado na versão 3.13.

 -- C Função: *note PyRefTracer: 52b4. 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(): 604. was called.  If no tracer was
     registered this function will return NULL and will set the 'data'
     pointer to NULL.

     There must be an *note attached thread state: 4d72. 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.10.10 Advanced Debugger Support
---------------------------------

These functions are only intended to be used by advanced debugging
tools.

 -- C Função: *note PyInterpreterState: ab0. *PyInterpreterState_Head ()

     Return the interpreter state object at the head of the list of all
     such objects.

 -- C Função: *note PyInterpreterState: ab0. *PyInterpreterState_Main ()

     Return the main interpreter state object.

 -- C Função: *note PyInterpreterState: ab0. *PyInterpreterState_Next
          (PyInterpreterState *interp)

     Return the next interpreter state object after 'interp' from the
     list of all such objects.

 -- C Função: *note PyThreadState: 985. *PyInterpreterState_ThreadHead
          (PyInterpreterState *interp)

     Return the pointer to the first *note PyThreadState: 985. object in
     the list of threads associated with the interpreter 'interp'.

 -- C Função: *note PyThreadState: 985. *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:
     ab0. 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.10.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: 17ca.).  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.

A *note thread state: 17af. does 'not' need to be *note attached: 4d72.
when calling these functions; they suppl 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:
     5d5.*, 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.10.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: cc9. 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: 76a. não é definido, a alocação
     estática deste tipo por *note Py_tss_NEEDS_INIT: 52bc. é permitida.

 -- C Macro: Py_tss_NEEDS_INIT

     This macro expands to the initializer for *note Py_tss_t: cc9.
     variables.  Note that this macro won’t be defined with *note
     Py_LIMITED_API: 76a.

* 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.10.11.2 Alocação dinâmica
...........................

Dynamic allocation of the *note Py_tss_t: cc9, required in extension
modules built with *note Py_LIMITED_API: 76a, 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: cc9. *PyThread_tss_alloc ()
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Retorna um
     valor que é o mesmo estado de um valor inicializado com *note
     Py_tss_NEEDS_INIT: 52bc, 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: 76a. desde a versão 3.7.'  Free the
     given 'key' allocated by *note PyThread_tss_alloc(): 435, after
     first calling *note PyThread_tss_delete(): 43d. 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.10.11.3 Métodos
.................

The parameter 'key' of these functions must not be ‘NULL’.  Moreover,
the behaviors of *note PyThread_tss_set(): 439. and *note
PyThread_tss_get(): 43b. are undefined if the given *note Py_tss_t: cc9.
has not been initialized by *note PyThread_tss_create(): 4f1e.

 -- C Função: int PyThread_tss_is_created (Py_tss_t *key)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.7.'  Return a
     non-zero value if the given *note Py_tss_t: cc9. has been
     initialized by *note PyThread_tss_create(): 4f1e.

 -- C Função: int PyThread_tss_create (Py_tss_t *key)
     ' Parte da *note ABI Estável: 76a. 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: 52bc.  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: 76a. 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(): 4f1e.  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: 76a. 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: 76a. 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.10.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: cc8.

     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(): 434. 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: 76a.'

 -- C Função: void PyThread_delete_key (int key)
     ' Parte da *note ABI Estável: 76a.'

 -- C Função: int PyThread_set_key_value (int key, void *value)
     ' Parte da *note ABI Estável: 76a.'

 -- C Função: void *PyThread_get_key_value (int key)
     ' Parte da *note ABI Estável: 76a.'

 -- C Função: void PyThread_delete_key_value (int key)
     ' Parte da *note ABI Estável: 76a.'

 -- C Função: void PyThread_ReInitTLS ()
     ' Parte da *note ABI Estável: 76a.'


File: python.info,  Node: Synchronization Primitives<2>,  Prev: Thread Local Storage Support,  Up: Inicialização finalização e threads

7.10.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 detach the *note thread state:
     4d72. if one exists.

     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.

 -- C Função: int PyMutex_IsLocked (PyMutex *m)

     Returns non-zero if the mutex 'm' is currently locked, zero
     otherwise.

          Nota: This function is intended for use in assertions and
          debugging only and should not be used to make concurrency
          control decisions, as the lock state may change immediately
          after the check.

     Adicionado na versão 3.14.

* Menu:

* Python Critical Section API::


File: python.info,  Node: Python Critical Section API,  Up: Synchronization Primitives<2>

7.10.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: 1f3. CPython.  They are
intended to replace reliance on the *note global interpreter lock: 46d,
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: 24c. and *note dict: 183. because their public
C-APIs already use critical sections internally, with the notable
exception of *note PyDict_Next(): 18d6, 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: 47e.  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.

Variants that accept *note PyMutex: 47e. pointers rather than Python
objects are also available.  Use these variants to start a critical
section in a situation where there is no *note PyObject: 5d5. – for
example, when working with a C type that does not extend or wrap *note
PyObject: 5d5. but still needs to call into the C API in a manner that
might lead to deadlocks.

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: 52c3.  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: 78e. calls *note Py_DECREF: 785,
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(): 63b.

 -- 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_BEGIN_CRITICAL_SECTION_MUTEX (m)

     Locks the mutex 'm' and begins a critical section.

     In the free-threaded build, this macro expands to:

          {
               PyCriticalSection _py_cs;
               PyCriticalSection_BeginMutex(&_py_cs, m)

     Note that unlike *note Py_BEGIN_CRITICAL_SECTION: 5168, there is no
     cast for the argument of the macro - it must be a *note PyMutex:
     47e. pointer.

     On the default build, this macro expands to ‘{’.

     Adicionado na versão 3.14.

 -- 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_BEGIN_CRITICAL_SECTION2_MUTEX (m1, m2)

     Locks the mutexes 'm1' and 'm2' and begins a critical section.

     In the free-threaded build, this macro expands to:

          {
               PyCriticalSection2 _py_cs2;
               PyCriticalSection2_BeginMutex(&_py_cs2, m1, m2)

     Note that unlike *note Py_BEGIN_CRITICAL_SECTION2: 52c3, there is
     no cast for the arguments of the macro - they must be *note
     PyMutex: 47e. pointers.

     On the default build, this macro expands to ‘{’.

     Adicionado na versão 3.14.

 -- 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: 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.11 Configuração de Inicialização do Python
============================================

* Menu:

* PyInitConfig C API::
* Configuration Options::
* Runtime Python configuration API::
* PyConfig C API::
* Py_GetArgcArgv(): Py_GetArgcArgv.
* Delaying main module execution::


File: python.info,  Node: PyInitConfig C API,  Next: Configuration Options,  Up: Configuração de Inicialização do Python

7.11.1 PyInitConfig C API
-------------------------

Adicionado na versão 3.14.

Python can be initialized with *note Py_InitializeFromInitConfig(): 383.

A função *note Py_RunMain(): bb2. pode ser usada para escrever um
programa Python personalizado.

Veja também *note Inicialização, Finalização e Threads: 527a.

Ver também
..........

PEP 741(1) “Python Configuration C API”.

* Menu:

* Exemplo: Exemplo<17>.
* Create Config::
* Tratamento de erros: Tratamento de erros<2>.
* Get Options::
* Set Options::
* Module::
* Initialize Python::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0741/


File: python.info,  Node: Exemplo<17>,  Next: Create Config,  Up: PyInitConfig C API

7.11.1.1 Exemplo
................

Example of customized Python always running with the *note Python
Development Mode: 502. enabled; return ‘-1’ on error:

     int init_python(void)
     {
         PyInitConfig *config = PyInitConfig_Create();
         if (config == NULL) {
             printf("PYTHON INIT ERROR: memory allocation failed\n");
             return -1;
         }

         // Enable the Python Development Mode
         if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
             goto error;
         }

         // Initialize Python with the configuration
         if (Py_InitializeFromInitConfig(config) < 0) {
             goto error;
         }
         PyInitConfig_Free(config);
         return 0;

     error:
         {
             // Display the error message.
             //
             // This uncommon braces style is used, because you cannot make
             // goto targets point to variable declarations.
             const char *err_msg;
             (void)PyInitConfig_GetError(config, &err_msg);
             printf("PYTHON INIT ERROR: %s\n", err_msg);
             PyInitConfig_Free(config);
             return -1;
         }
     }


File: python.info,  Node: Create Config,  Next: Tratamento de erros<2>,  Prev: Exemplo<17>,  Up: PyInitConfig C API

7.11.1.2 Create Config
......................

 -- C Struct: struct PyInitConfig

     Opaque structure to configure the Python initialization.

 -- C Função: *note PyInitConfig: 52ce. *PyInitConfig_Create (void)

     Create a new initialization configuration using *note Isolated
     Configuration: 52cf. default values.

     It must be freed by *note PyInitConfig_Free(): 385.

     Return ‘NULL’ on memory allocation failure.

 -- C Função: void PyInitConfig_Free (PyInitConfig *config)

     Free memory of the initialization configuration 'config'.

     If 'config' is ‘NULL’, no operation is performed.


File: python.info,  Node: Tratamento de erros<2>,  Next: Get Options,  Prev: Create Config,  Up: PyInitConfig C API

7.11.1.3 Tratamento de erros
............................

 -- C Função: int PyInitConfig_GetError (PyInitConfig *config, const
          char **err_msg)

     Get the 'config' error message.

        * Set '*err_msg' and return ‘1’ if an error is set.

        * Set '*err_msg' to ‘NULL’ and return ‘0’ otherwise.

     An error message is an UTF-8 encoded string.

     If 'config' has an exit code, format the exit code as an error
     message.

     The error message remains valid until another ‘PyInitConfig’
     function is called with 'config'.  The caller doesn’t have to free
     the error message.

 -- C Função: int PyInitConfig_GetExitCode (PyInitConfig *config, int
          *exitcode)

     Get the 'config' exit code.

        * Set '*exitcode' and return ‘1’ if 'config' has an exit code
          set.

        * Return ‘0’ if 'config' has no exit code set.

     Only the ‘Py_InitializeFromInitConfig()’ function can set an exit
     code if the ‘parse_argv’ option is non-zero.

     An exit code can be set when parsing the command line failed (exit
     code ‘2’) or when a command line option asks to display the command
     line help (exit code ‘0’).


File: python.info,  Node: Get Options,  Next: Set Options,  Prev: Tratamento de erros<2>,  Up: PyInitConfig C API

7.11.1.4 Get Options
....................

The configuration option 'name' parameter must be a non-NULL
null-terminated UTF-8 encoded string.  See *note Configuration Options:
52d2.

 -- C Função: int PyInitConfig_HasOption (PyInitConfig *config, const
          char *name)

     Test if the configuration has an option called 'name'.

     Return ‘1’ if the option exists, or return ‘0’ otherwise.

 -- C Função: int PyInitConfig_GetInt (PyInitConfig *config, const char
          *name, int64_t *value)

     Get an integer configuration option.

        * Set '*value', and return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

 -- C Função: int PyInitConfig_GetStr (PyInitConfig *config, const char
          *name, char **value)

     Get a string configuration option as a null-terminated UTF-8
     encoded string.

        * Set '*value', and return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

     '*value' can be set to ‘NULL’ if the option is an optional string
     and the option is unset.

     On success, the string must be released with ‘free(value)’ if it’s
     not ‘NULL’.

 -- C Função: int PyInitConfig_GetStrList (PyInitConfig *config, const
          char *name, size_t *length, char ***items)

     Get a string list configuration option as an array of
     null-terminated UTF-8 encoded strings.

        * Set '*length' and '*value', and return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

     On success, the string list must be released with
     ‘PyInitConfig_FreeStrList(length, items)’.

 -- C Função: void PyInitConfig_FreeStrList (size_t length, char
          **items)

     Free memory of a string list created by
     ‘PyInitConfig_GetStrList()’.


File: python.info,  Node: Set Options,  Next: Module,  Prev: Get Options,  Up: PyInitConfig C API

7.11.1.5 Set Options
....................

The configuration option 'name' parameter must be a non-NULL
null-terminated UTF-8 encoded string.  See *note Configuration Options:
52d2.

Some configuration options have side effects on other options.  This
logic is only implemented when ‘Py_InitializeFromInitConfig()’ is
called, not by the “Set” functions below.  For example, setting
‘dev_mode’ to ‘1’ does not set ‘faulthandler’ to ‘1’.

 -- C Função: int PyInitConfig_SetInt (PyInitConfig *config, const char
          *name, int64_t value)

     Set an integer configuration option.

        * Return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

 -- C Função: int PyInitConfig_SetStr (PyInitConfig *config, const char
          *name, const char *value)

     Set a string configuration option from a null-terminated UTF-8
     encoded string.  The string is copied.

        * Return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

 -- C Função: int PyInitConfig_SetStrList (PyInitConfig *config, const
          char *name, size_t length, char *const *items)

     Set a string list configuration option from an array of
     null-terminated UTF-8 encoded strings.  The string list is copied.

        * Return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.


File: python.info,  Node: Module,  Next: Initialize Python,  Prev: Set Options,  Up: PyInitConfig C API

7.11.1.6 Module
...............

 -- C Função: int PyInitConfig_AddModule (PyInitConfig *config, const
          char *name, PyObject *(*initfunc)(void))

     Add a built-in extension module to the table of built-in modules.

     The new module can be imported by the name 'name', and uses the
     function 'initfunc' as the initialization function called on the
     first attempted import.

        * Return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

     If Python is initialized multiple times, ‘PyInitConfig_AddModule()’
     must be called at each Python initialization.

     Similar to the *note PyImport_AppendInittab(): 1a4c. function.


File: python.info,  Node: Initialize Python,  Prev: Module,  Up: PyInitConfig C API

7.11.1.7 Initialize Python
..........................

 -- C Função: int Py_InitializeFromInitConfig (PyInitConfig *config)

     Initialize Python from the initialization configuration.

        * Return ‘0’ on success.

        * Set an error in 'config' and return ‘-1’ on error.

        * Set an exit code in 'config' and return ‘-1’ if Python wants
          to exit.

     See ‘PyInitConfig_GetExitcode()’ for the exit code case.


File: python.info,  Node: Configuration Options,  Next: Runtime Python configuration API,  Prev: PyInitConfig C API,  Up: Configuração de Inicialização do Python

7.11.2 Configuration Options
----------------------------

Opção                         PyConfig/PyPreConfig member   Tipo                          Visibilidade
                                                                                          
------------------------------------------------------------------------------------------------------------------------
                                                                                          
‘"allocator"’                 *note allocator: 52d7.        ‘int’                         Somente leitura
                                                                                          
                                                                                          
‘"argv"’                      *note argv: 3ee.              ‘list[str]’                   Public
                                                                                          
                                                                                          
‘"base_exec_prefix"’          *note base_exec_prefix: 52d8. ‘str’                         Public
                                                                                          
                                                                                          
‘"base_executable"’           *note base_executable: 52d9.  ‘str’                         Public
                                                                                          
                                                                                          
‘"base_prefix"’               *note base_prefix: 52da.      ‘str’                         Public
                                                                                          
                                                                                          
‘"buffered_stdio"’            *note buffered_stdio: 40e.    ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"bytes_warning"’             *note bytes_warning: 404.     ‘int’                         Public
                                                                                          
                                                                                          
‘"check_hash_pycs_mode"’      *note check_hash_pycs_mode: 52db.‘str’                      Somente leitura
                                                                                          
                                                                                          
‘"code_debug_ranges"’         *note code_debug_ranges: 52dc.‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"coerce_c_locale"’           *note coerce_c_locale: 52dd.  ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"coerce_c_locale_warn"’      *note coerce_c_locale_warn: 52de.‘bool’                     Somente leitura
                                                                                          
                                                                                          
‘"configure_c_stdio"’         *note configure_c_stdio: 52df.‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"configure_locale"’          *note configure_locale: 52e0. ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"cpu_count"’                 *note cpu_count: 52e1.        ‘int’                         Public
                                                                                          
                                                                                          
‘"dev_mode"’                  *note dev_mode: 52e2.         ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"dump_refs"’                 *note dump_refs: 52e3.        ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"dump_refs_file"’            *note dump_refs_file: 52e4.   ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"exec_prefix"’               *note exec_prefix: 52e5.      ‘str’                         Public
                                                                                          
                                                                                          
‘"executable"’                *note executable: 639.        ‘str’                         Public
                                                                                          
                                                                                          
‘"faulthandler"’              *note faulthandler: 52e6.     ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"filesystem_encoding"’       *note filesystem_encoding: 418.‘str’                        Somente leitura
                                                                                          
                                                                                          
‘"filesystem_errors"’         *note filesystem_errors: 419. ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"hash_seed"’                 *note hash_seed: 411.         ‘int’                         Somente leitura
                                                                                          
                                                                                          
‘"home"’                      *note home: 3f0.              ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"import_time"’               *note import_time: 52e7.      ‘int’                         Somente leitura
                                                                                          
                                                                                          
‘"inspect"’                   *note inspect: 3fe.           ‘bool’                        Public
                                                                                          
                                                                                          
‘"install_signal_handlers"’   *note install_signal_handlers: ab1.‘bool’                   Somente leitura
                                                                                          
                                                                                          
‘"int_max_str_digits"’        *note int_max_str_digits: 52e8.‘int’                        Public
                                                                                          
                                                                                          
‘"interactive"’               *note interactive: 3fc.       ‘bool’                        Public
                                                                                          
                                                                                          
‘"isolated"’                  *note isolated: 413.          ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"legacy_windows_fs_encoding"’*note legacy_windows_fs_encoding: 415.‘bool’                Somente leitura
                                                                                          
                                                                                          
‘"legacy_windows_stdio"’      *note legacy_windows_stdio: 417.‘bool’                      Somente leitura
                                                                                          
                                                                                          
‘"malloc_stats"’              *note malloc_stats: 52e9.     ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"module_search_paths"’       *note module_search_paths: 637.‘list[str]’                  Public
                                                                                          
                                                                                          
‘"optimization_level"’        *note optimization_level: 400.‘int’                         Public
                                                                                          
                                                                                          
‘"orig_argv"’                 *note orig_argv: a8a.         ‘list[str]’                   Somente leitura
                                                                                          
                                                                                          
‘"parse_argv"’                *note parse_argv: 1bcb.       ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"parser_debug"’              *note parser_debug: 3f6.      ‘bool’                        Public
                                                                                          
                                                                                          
‘"pathconfig_warnings"’       *note pathconfig_warnings: 406.‘bool’                       Somente leitura
                                                                                          
                                                                                          
‘"perf_profiling"’            *note perf_profiling: 52ea.   ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"platlibdir"’                *note platlibdir: 1be1.       ‘str’                         Public
                                                                                          
                                                                                          
‘"prefix"’                    *note prefix: 52eb.           ‘str’                         Public
                                                                                          
                                                                                          
‘"program_name"’              *note program_name: 3ef.      ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"pycache_prefix"’            *note pycache_prefix: 52ec.   ‘str’                         Public
                                                                                          
                                                                                          
‘"quiet"’                     *note quiet: 3fa.             ‘bool’                        Public
                                                                                          
                                                                                          
‘"run_command"’               *note run_command: 5285.      ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"run_filename"’              *note run_filename: 5286.     ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"run_module"’                *note run_module: 5287.       ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"run_presite"’               *note run_presite: 52ed.      ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"safe_path"’                 *note safe_path: 96c.         ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"show_ref_count"’            *note show_ref_count: 52ee.   ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"site_import"’               *note site_import: 402.       ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"skip_source_first_line"’    *note skip_source_first_line: 52ef.‘bool’                   Somente leitura
                                                                                          
                                                                                          
‘"stdio_encoding"’            *note stdio_encoding: 638.    ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"stdio_errors"’              *note stdio_errors: 47b6.     ‘str’                         Somente leitura
                                                                                          
                                                                                          
‘"stdlib_dir"’                *note stdlib_dir: 52f0.       ‘str’                         Public
                                                                                          
                                                                                          
‘"tracemalloc"’               *note tracemalloc: 52f1.      ‘int’                         Somente leitura
                                                                                          
                                                                                          
‘"use_environment"’           *note use_environment: 408.   ‘bool’                        Public
                                                                                          
                                                                                          
‘"use_frozen_modules"’        *note use_frozen_modules: 52f2.‘bool’                       Somente leitura
                                                                                          
                                                                                          
‘"use_hash_seed"’             *note use_hash_seed: 410.     ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"use_system_logger"’         *note use_system_logger: 211c.‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"user_site_directory"’       *note user_site_directory: 40c.‘bool’                       Somente leitura
                                                                                          
                                                                                          
‘"utf8_mode"’                 *note utf8_mode: 41a.         ‘bool’                        Somente leitura
                                                                                          
                                                                                          
‘"verbose"’                   *note verbose: 3f8.           ‘int’                         Public
                                                                                          
                                                                                          
‘"warn_default_encoding"’     *note warn_default_encoding: 52f3.‘bool’                    Somente leitura
                                                                                          
                                                                                          
‘"warnoptions"’               *note warnoptions: 635.       ‘list[str]’                   Public
                                                                                          
                                                                                          
‘"write_bytecode"’            *note write_bytecode: 40a.    ‘bool’                        Public
                                                                                          
                                                                                          
‘"xoptions"’                  *note xoptions: 636.          ‘dict[str, str]’              Public
                                                                                          
                                                                                          
‘"_pystats"’                  *note _pystats: 52f4.         ‘bool’                        Somente leitura
                                                                                          

Visibility:

   * Public: Can by get by *note PyConfig_Get(): 379. and set by *note
     PyConfig_Set(): 37a.

   * Read-only: Can by get by *note PyConfig_Get(): 379, but cannot be
     set by *note PyConfig_Set(): 37a.


File: python.info,  Node: Runtime Python configuration API,  Next: PyConfig C API,  Prev: Configuration Options,  Up: Configuração de Inicialização do Python

7.11.3 Runtime Python configuration API
---------------------------------------

At runtime, it’s possible to get and set configuration options using
*note PyConfig_Get(): 379. and *note PyConfig_Set(): 37a. functions.

The configuration option 'name' parameter must be a non-NULL
null-terminated UTF-8 encoded string.  See *note Configuration Options:
52d2.

Some options are read from the *note sys: df. attributes.  For example,
the option ‘"argv"’ is read from *note sys.argv: 1460.

 -- C Função: *note PyObject: 5d5. *PyConfig_Get (const char *name)

     Get the current runtime value of a configuration option as a Python
     object.

        * Return a new reference on success.

        * Set an exception and return ‘NULL’ on error.

     The object type depends on the configuration option.  It can be:

        * ‘bool’

        * ‘int’

        * ‘str’

        * ‘list[str]’

        * ‘dict[str, str]’

     The caller must have an *note attached thread state: 4d72.  The
     function cannot be called before Python initialization nor after
     Python finalization.

     Adicionado na versão 3.14.

 -- C Função: int PyConfig_GetInt (const char *name, int *value)

     Similar to *note PyConfig_Get(): 379, but get the value as a C int.

        * Return ‘0’ on success.

        * Set an exception and return ‘-1’ on error.

     Adicionado na versão 3.14.

 -- C Função: *note PyObject: 5d5. *PyConfig_Names (void)

     Get all configuration option names as a ‘frozenset’.

        * Return a new reference on success.

        * Set an exception and return ‘NULL’ on error.

     The caller must have an *note attached thread state: 4d72.  The
     function cannot be called before Python initialization nor after
     Python finalization.

     Adicionado na versão 3.14.

 -- C Função: int PyConfig_Set (const char *name, PyObject *value)

     Set the current runtime value of a configuration option.

        * Raise a *note ValueError: 2ea. if there is no option 'name'.

        * Raise a *note ValueError: 2ea. if 'value' is an invalid value.

        * Raise a *note ValueError: 2ea. if the option is read-only
          (cannot be set).

        * Raise a *note TypeError: 198. if 'value' has not the proper
          type.

     The caller must have an *note attached thread state: 4d72.  The
     function cannot be called before Python initialization nor after
     Python finalization.

     Raises an *note auditing event: 1b5d. ‘cpython.PyConfig_Set’ with
     arguments ‘name’, ‘value’.

     Adicionado na versão 3.14.


File: python.info,  Node: PyConfig C API,  Next: Py_GetArgcArgv,  Prev: Runtime Python configuration API,  Up: Configuração de Inicialização do Python

7.11.4 PyConfig C API
---------------------

Adicionado na versão 3.8.

Python pode ser inicializado com *note Py_InitializeFromConfig(): 3f3. e
a estrutura *note PyConfig: 3f4.  Pode ser pré-inicializado com *note
Py_PreInitialize(): 41b. e a estrutura *note PyPreConfig: b99.

Existem dois tipos de configuração:

   * A *note Python Configuration: 5288. 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: 52cf. 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(): bb2. pode ser usada para escrever um
programa Python personalizado.

Veja também *note Inicialização, Finalização e Threads: 527a.

Ver também
..........

PEP 587(1) “Configuração da inicialização do Python”.

* Menu:

* Exemplo: Exemplo<18>.
* PyWideStringList::
* PyStatus::
* PyPreConfig::
* Pré-inicializar Python com PyPreConfig::
* PyConfig::
* Initialization with PyConfig::
* Isolated Configuration::
* Configuração do Python::
* Python Path Configuration::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0587/


File: python.info,  Node: Exemplo<18>,  Next: PyWideStringList,  Up: PyConfig C API

7.11.4.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<18>,  Up: PyConfig C API

7.11.4.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: b9a. 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: b9a. 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: c49. length

          Comprimento da lista.

      -- C Membro: wchar_t **items

          Itens da lista.


File: python.info,  Node: PyStatus,  Next: PyPreConfig,  Prev: PyWideStringList,  Up: PyConfig C API

7.11.4.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: b9a. PyStatus_Ok (void)

          Sucesso.

      -- C Função: *note PyStatus: b9a. 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: b9a. PyStatus_NoMemory (void)

          Falha de alocação de memória (sem memória).

      -- C Função: *note PyStatus: b9a. 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():
          baf, 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: PyConfig C API

7.11.4.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: 5288.

      -- C Função: void PyPreConfig_InitIsolatedConfig (PyPreConfig
               *preconfig)

          Inicializa a pré-configuração com *note Configuração isolada:
          52cf.

     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: 1fe9.

             * ‘PYMEM_ALLOCATOR_DEBUG’ (‘2’): *note alocadores de
               memória padrão: 1fe9. com *note ganchos de depuração:
               1fec.

             * ‘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: 1fec.

             * ‘PYMEM_ALLOCATOR_PYMALLOC’ (‘5’): *note alocador de
               memória do Python pymalloc: eff.

             * ‘PYMEM_ALLOCATOR_PYMALLOC_DEBUG’ (‘6’): *note alocador de
               memória deo Python pymalloc: eff. com *note ganchos de
               depuração: 1fec.

             * ‘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: 1fec.

          ‘PYMEM_ALLOCATOR_PYMALLOC’ e ‘PYMEM_ALLOCATOR_PYMALLOC_DEBUG’
          não são suportados se o Python estiver *note configurado
          usando -without-pymalloc: 204b.

          ‘PYMEM_ALLOCATOR_MIMALLOC’ e ‘PYMEM_ALLOCATOR_MIMALLOC_DEBUG’
          não são suportados se o Python estiver *note configurado
          usando -without-mimalloc: 204a. ou se suporte atômico
          subjacente não estiver disponível.

          Veja *note Gerenciamento de memória: 5300.

          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: 52dd.
          e *note coerce_c_locale_warn: 52de. para ‘0’.

          Veja a *note codificação da localidade: 544.

          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: 544.

          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: 502.: veja *note
          PyConfig.dev_mode: 52e2.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: int isolated

          Modo isolado: veja *note PyConfig.isolated: 413.

          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: 41a. para ‘0’,

             * Define *note PyConfig.filesystem_encoding: 418. para
               ‘"mbcs"’,

             * Define *note PyConfig.filesystem_errors: 419. para
               ‘"replace"’.

          Initialized from the *note PYTHONLEGACYWINDOWSFSENCODING: 33d.
          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(): bb0. e
          *note Py_PreInitializeFromBytesArgs(): bb1. analisam seu
          argumento ‘argv’ da mesma forma que o Python regular analisa
          argumentos de linha de comando: veja *note Argumentos de linha
          de comando: 11fd.

          Padrão: ‘1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int use_environment

          Usar *note variáveis de ambiente: 7fc.?  Veja *note
          PyConfig.use_environment: 408.

          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: 85b.

          Define para ‘0’ ou ‘1’ pela opção de linha de comando *note -X
          utf8: 16f. e a variável de ambiente *note PYTHONUTF8: cc2.

          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: PyConfig C API

7.11.4.5 Pré-inicializar Python com PyPreConfig
...............................................

A pré-inicialização do Python:

   * Define os alocadores de memória Python (*note
     PyPreConfig.allocator: 52d7.)

   * Configura a localidade LC_CTYPE (*note codificação da localidade:
     544.)

   * Define o *note Modo UTF-8 do Python: 85b. (*note
     PyPreConfig.utf8_mode: 41a.)

A pré-configuração atual (tipo ‘PyPreConfig’) é armazenada em
‘_PyRuntime.preconfig’.

Funções para pré-inicializar Python:

 -- C Função: *note PyStatus: b9a. 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: b9a. 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: 5303. de 'preconfig' for diferente de zero.

     'preconfig' não pode ser ‘NULL’..

 -- C Função: *note PyStatus: b9a. 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: 5303. 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(): ba6. e *note Py_ExitStatusException(): baf.

Para *note configuração do Python: 5288. (*note
PyPreConfig_InitPythonConfig(): ba4.), 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: 16f. habilita o *note Modo UTF-8 do
Python: 85b.

‘PyMem_SetAllocator()’ pode ser chamado depois de *note
Py_PreInitialize(): 41b. e antes de *note Py_InitializeFromConfig():
3f3. para instalar um alocador de memória personalizado.  Ele pode ser
chamado antes de *note Py_PreInitialize(): 41b. se *note
PyPreConfig.allocator: 52d7. estiver definido como
‘PYMEM_ALLOCATOR_NOT_SET’.

Funções de alocação de memória do Python como *note PyMem_RawMalloc():
625. não devem ser usadas antes da pré-inicialização do Python, enquanto
chamar diretamente ‘malloc()’ e ‘free()’ é sempre seguro.  *note
Py_DecodeLocale(): db4. 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: 85b.

     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: PyConfig C API

7.11.4.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(): b9c. 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:
          5288.

      -- C Função: void PyConfig_InitIsolatedConfig (PyConfig *config)

          Initialize configuration with the *note Isolated
          Configuration: 52cf.

      -- C Função: *note PyStatus: b9a. 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: 415a. if needed.

      -- C Função: *note PyStatus: b9a. PyConfig_SetBytesString
               (PyConfig *config, wchar_t *const *config_str, const char
               *str)

          Decode 'str' using *note Py_DecodeLocale(): db4. and set the
          result into ‘*config_str’.

          *note Preinitialize Python: 415a. if needed.

      -- C Função: *note PyStatus: b9a. PyConfig_SetArgv (PyConfig
               *config, int argc, wchar_t *const *argv)

          Set command line arguments (*note argv: 3ee. member of
          'config') from the 'argv' list of wide character strings.

          *note Preinitialize Python: 415a. if needed.

      -- C Função: *note PyStatus: b9a. PyConfig_SetBytesArgv (PyConfig
               *config, int argc, char *const *argv)

          Set command line arguments (*note argv: 3ee. member of
          'config') from the 'argv' list of bytes strings.  Decode bytes
          using *note Py_DecodeLocale(): db4.

          *note Preinitialize Python: 415a. if needed.

      -- C Função: *note PyStatus: b9a. 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: 415a. if needed.

      -- C Função: *note PyStatus: b9a. PyConfig_Read (PyConfig *config)

          Read all Python configuration.

          Fields which are already initialized are left unchanged.

          Fields for *note path configuration: aa0. are no longer
          calculated or modified when calling this function, as of
          Python 3.11.

          The *note PyConfig_Read(): 988. function only parses *note
          PyConfig.argv: 3ee. arguments once: *note PyConfig.parse_argv:
          1bcb. is set to ‘2’ after arguments are parsed.  Since Python
          arguments are stripped from *note PyConfig.argv: 3ee, parsing
          arguments twice would parse the application options as Python
          options.

          *note Preinitialize Python: 415a. if needed.

          Alterado na versão 3.10: The *note PyConfig.argv: 3ee.
          arguments are now only parsed once, *note PyConfig.parse_argv:
          1bcb. is set to ‘2’ after arguments are parsed, and arguments
          are only parsed if *note PyConfig.parse_argv: 1bcb. equals
          ‘1’.

          Alterado na versão 3.11: *note PyConfig_Read(): 988. no longer
          calculates all paths, and so fields listed under *note Python
          Path Configuration: aa0. may no longer be updated until *note
          Py_InitializeFromConfig(): 3f3. is called.

      -- C Função: void PyConfig_Clear (PyConfig *config)

          Release configuration memory.

     Most ‘PyConfig’ methods *note preinitialize Python: 415a. if
     needed.  In that case, the Python preinitialization configuration
     (*note PyPreConfig: b99.) in based on the *note PyConfig: 3f4.  If
     configuration fields which are in common with *note PyPreConfig:
     b99. are tuned, they must be set before calling a *note PyConfig:
     3f4. method:

        * *note PyConfig.dev_mode: 52e2.

        * *note PyConfig.isolated: 413.

        * *note PyConfig.parse_argv: 1bcb.

        * *note PyConfig.use_environment: 408.

     Moreover, if *note PyConfig_SetArgv(): b9f. or *note
     PyConfig_SetBytesArgv(): ba0. is used, this method must be called
     before other methods, since the preinitialization configuration
     depends on command line arguments (if *note parse_argv: 1bcb. 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: b9b. argv

          Set *note sys.argv: 1460. command line arguments based on
          *note argv: 3ee.  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: 3ee. can be an empty string.

          Set *note parse_argv: 1bcb. to ‘1’ to parse *note argv: 3ee.
          the same way the regular Python parses Python command line
          arguments and then to strip Python arguments from *note argv:
          3ee.

          If *note argv: 3ee. is empty, an empty string is added to
          ensure that *note sys.argv: 1460. always exists and is never
          empty.

          Padrão: ‘NULL’.

          See also the *note orig_argv: a8a. member.

      -- C Membro: int safe_path

          If equals to zero, ‘Py_RunMain()’ prepends a potentially
          unsafe path to *note sys.path: 3e1. at startup:

             * If *note argv[0]: 3ee. 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: 7b6. command line option and the
          *note PYTHONSAFEPATH: 7b7. 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: 3e7.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.exec_prefix: 52e5.

      -- C Membro: wchar_t *base_executable

          Python base executable: ‘sys._base_executable’.

          Set by the ‘__PYVENV_LAUNCHER__’ environment variable.

          Set from *note PyConfig.executable: 639. if ‘NULL’.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.executable: 639.

      -- C Membro: wchar_t *base_prefix

          *note sys.base_prefix: 3e3.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.prefix: 52eb.

      -- C Membro: int buffered_stdio

          If equals to ‘0’ and *note configure_c_stdio: 52df. is
          non-zero, disable buffering on the C streams stdout and
          stderr.

          Set to ‘0’ by the *note -u: 1c44. command line option and the
          *note PYTHONUNBUFFERED: 1c45. 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:
          192. or *note bytearray: 342. with *note str: 169, or
          comparing *note bytes: 192. with *note int: 19b.

          If equal or greater to ‘2’, raise a *note BytesWarning: e10.
          exception in these cases.

          Incremented by the *note -b: 7ee. command line option.

          Padrão: ‘0’.

      -- C Membro: int warn_default_encoding

          If non-zero, emit a *note EncodingWarning: 1fdb. warning when
          *note io.TextIOWrapper: 9b4. uses its default encoding.  See
          *note Ativar EncodingWarning: 1fee. 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: 7c8. environment
          variable and by the *note -X no_debug_ranges: 16f. 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: 1fcf. 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: 40e. equals zero, disable
               buffering of stdin, stdout and stderr streams.

             * If *note interactive: 3fc. 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: 502.

          Set to ‘1’ by the *note -X dev: 16f. option and the *note
          PYTHONDEVMODE: cda. 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: b94. environment
          variable.

          Needs a special build of Python with the ‘Py_TRACE_REFS’ macro
          defined: see the *note configure -with-trace-refs option: 62a.

          Padrão: ‘0’.

      -- C Membro: wchar_t *dump_refs_file

          Filename where to dump Python references.

          Set by the *note PYTHONDUMPREFSFILE: 1b36. environment
          variable.

          Padrão: ‘NULL’.

          Adicionado na versão 3.11.

      -- C Membro: wchar_t *exec_prefix

          The site-specific directory prefix where the
          platform-dependent Python files are installed: *note
          sys.exec_prefix: 3e8.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.base_exec_prefix: 52d8.

      -- C Membro: wchar_t *executable

          The absolute path of the executable binary for the Python
          interpreter: *note sys.executable: 3ea.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.base_executable: 52d9.

      -- C Membro: int faulthandler

          Enable faulthandler?

          If non-zero, call *note faulthandler.enable(): 20e. at
          startup.

          Set to ‘1’ by *note -X faulthandler: 16f. and the *note
          PYTHONFAULTHANDLER: 127b. environment variable.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: wchar_t *filesystem_encoding

          *note Filesystem encoding: 752.: *note
          sys.getfilesystemencoding(): e47.

          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: 415. of *note PyPreConfig: b99. is
          non-zero.

          Default encoding on other platforms:

             * ‘"utf-8"’ if *note PyPreConfig.utf8_mode: 41a. 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: 544.:
               ‘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: 419. member.

      -- C Membro: wchar_t *filesystem_errors

          *note Filesystem error handler: 752.: *note
          sys.getfilesystemencodeerrors(): ed6.

          On Windows: use ‘"surrogatepass"’ by default, or ‘"replace"’
          if *note legacy_windows_fs_encoding: 415. of *note
          PyPreConfig: b99. 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: 418. member.

      -- C Membro: int use_frozen_modules

          If non-zero, use frozen modules.

          Set by the *note PYTHON_FROZEN_MODULES: 4a7. environment
          variable.

          Default: ‘1’ in a release build, or ‘0’ in a *note debug
          build: 503.

      -- C Membro: unsigned long hash_seed

      -- C Membro: int use_hash_seed

          Randomized hash function seed.

          If *note use_hash_seed: 410. is zero, a seed is chosen
          randomly at Python startup, and *note hash_seed: 411. is
          ignored.

          Set by the *note PYTHONHASHSEED: 1273. 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: 3ed.).

          Set by the *note PYTHONHOME: 3ed. environment variable.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. input.

      -- C Membro: int import_time

               If ‘1’, profile import time.  If ‘2’, include additional
               output that indicates when an imported module has already
               been loaded.

               Set by the *note -X importtime: 16f. option and the *note
               PYTHONPROFILEIMPORTTIME: ce0. environment variable.

               Padrão: ‘0’.

          Alterado na versão 3.14: Added support for ‘import_time = 2’

      -- 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: 754. does not appear to be a terminal.

          Incremented by the *note -i: 16c9. command line option.  Set
          to ‘1’ if the *note PYTHONINSPECT: 16c8. 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: 16c9. command line option.

          Padrão: ‘0’.

      -- C Membro: int int_max_str_digits

          Configures the *note integer string conversion length
          limitation: 800.  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: 256d.).  A value of ‘0’
          disables the limitation.  Values greater than zero but less
          than 640 (*note sys.int_info.str_digits_check_threshold:
          47b4.) are unsupported and will produce an error.

          Configured by the *note -X int_max_str_digits: 16f. command
          line flag or the *note PYTHONINTMAXSTRDIGITS: 1a66.
          environment variable.

          Default: ‘-1’ in Python mode.  4300 (*note
          sys.int_info.default_max_str_digits: 256d.) in isolated mode.

          Adicionado na versão 3.12.

      -- C Membro: int cpu_count

          If the value of *note cpu_count: 52e1. is not ‘-1’ then it
          will override the return values of *note os.cpu_count(): 4d5,
          *note os.process_cpu_count(): 4d4, and *note
          multiprocessing.cpu_count(): 1165.

          Configured by the ‘-X cpu_count=N|DEFAULT’ command line flag
          or the *note PYTHON_CPU_COUNT: 518. 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: 96c. to ‘1’: don’t prepend a
               potentially unsafe path to *note sys.path: 3e1. at Python
               startup, such as the current directory, the script’s
               directory or an empty string.

             * Set *note use_environment: 408. to ‘0’: ignore ‘PYTHON’
               environment variables.

             * Set *note user_site_directory: 40c. to ‘0’: don’t add the
               user site directory to *note sys.path: 3e1.

             * Python REPL doesn’t import *note readline: bf. nor enable
               default readline configuration on interactive prompts.

          Set to ‘1’ by the *note -I: b4d. command line option.

          Padrão: ‘0’ no modo do Python, ‘1’ no modo isolado.

          See also the *note Isolated Configuration: 52cf. and *note
          PyPreConfig.isolated: 5302.

      -- C Membro: int legacy_windows_stdio

          If non-zero, use *note io.FileIO: 150b. instead of
          ‘io._WindowsConsoleIO’ for *note sys.stdin: 754, *note
          sys.stdout: cc0. and *note sys.stderr: b29.

          Definida como ‘1’ se a variável de ambiente *note
          PYTHONLEGACYWINDOWSSTDIO: e49. 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: eff. at exit.

          Set to ‘1’ by the *note PYTHONMALLOCSTATS: 1dec. environment
          variable.

          The option is ignored if Python is *note configured using the
          -without-pymalloc option: 204b.

          Padrão: ‘0’.

      -- C Membro: wchar_t *platlibdir

          Platform library directory name: *note sys.platlibdir: b28.

          Set by the *note PYTHONPLATLIBDIR: 1be3. environment variable.

          Default: value of the ‘PLATLIBDIR’ macro which is set by the
          *note configure -with-platlibdir option: 2014. (default:
          ‘"lib"’, or ‘"DLLs"’ on Windows).

          Part of the *note Python Path Configuration: aa0. 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: 3e1.) as a string
          separated by ‘DELIM’ (*note os.pathsep: 1fe1.).

          Set by the *note PYTHONPATH: 1213. environment variable.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. input.

      -- C Membro: *note PyWideStringList: b9b. module_search_paths

      -- C Membro: int module_search_paths_set

          Module search paths: *note sys.path: 3e1.

          If *note module_search_paths_set: 7fa. is equal to ‘0’, *note
          Py_InitializeFromConfig(): 3f3. will replace *note
          module_search_paths: 637. and sets *note
          module_search_paths_set: 7fa. to ‘1’.

          Default: empty list (‘module_search_paths’) and ‘0’
          (‘module_search_paths_set’).

          Part of the *note Python Path Configuration: aa0. 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: 18c. command line option.  Set to
          the *note PYTHONOPTIMIZE: 1fd2. environment variable value.

          Padrão: ‘0’.

      -- C Membro: *note PyWideStringList: b9b. orig_argv

          The list of the original command line arguments passed to the
          Python executable: *note sys.orig_argv: a37.

          If *note orig_argv: a8a. list is empty and *note argv: 3ee. is
          not a list only containing an empty string, *note
          PyConfig_Read(): 988. copies *note argv: 3ee. into *note
          orig_argv: a8a. before modifying *note argv: 3ee. (if *note
          parse_argv: 1bcb. is non-zero).

          See also the *note argv: 3ee. member and the *note
          Py_GetArgcArgv(): 1bf9. 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: 3ee. the same way the
          regular Python parses *note command line arguments: 11fd, and
          strip Python arguments from *note argv: 3ee.

          The *note PyConfig_Read(): 988. function only parses *note
          PyConfig.argv: 3ee. arguments once: *note PyConfig.parse_argv:
          1bcb. is set to ‘2’ after arguments are parsed.  Since Python
          arguments are stripped from *note PyConfig.argv: 3ee, 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: 3ee.
          arguments are now only parsed if *note PyConfig.parse_argv:
          1bcb. 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: 1fd0. command line option.  Set
          to the *note PYTHONDEBUG: 1fd1. environment variable value.

          Needs a *note debug build of Python: 503. (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: aa0. 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: 3e4.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: aa0. output.

          See also *note PyConfig.base_prefix: 52da.

      -- C Membro: wchar_t *program_name

          Program name used to initialize *note executable: 639. and in
          early error messages during Python initialization.

             * On macOS, use *note PYTHONEXECUTABLE: 1fe6. 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: 3ee. 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: aa0. input.

      -- C Membro: wchar_t *pycache_prefix

          Directory where cached ‘.pyc’ files are written: *note
          sys.pycache_prefix: b92.

          Set by the *note -X pycache_prefix=PATH: 16f. command line
          option and the *note PYTHONPYCACHEPREFIX: b91. environment
          variable.  The command-line option takes precedence.

          If ‘NULL’, *note sys.pycache_prefix: b92. 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: 1fd3. command line option.

          Padrão: ‘0’.

      -- C Membro: wchar_t *run_command

          Value of the *note -c: 1a8. command line option.

          Used by *note Py_RunMain(): bb2.

          Padrão: ‘NULL’.

      -- C Membro: wchar_t *run_filename

          Filename passed on the command line: trailing command line
          argument without *note -c: 1a8. or *note -m: 23b.  It is used
          by the *note Py_RunMain(): bb2. 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: 52ef.
          option.

          Padrão: ‘NULL’.

      -- C Membro: wchar_t *run_module

          Value of the *note -m: 23b. command line option.

          Used by *note Py_RunMain(): bb2.

          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: 16f. command-line
          option and the *note PYTHON_PRESITE: 1fdc. environment
          variable.  The command-line option takes precedence.

          Needs a *note debug build of Python: 503. (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:
          28f. objects)?

          Set to ‘1’ by *note -X showrefcount: 16f. command line option.

          Needs a *note debug build of Python: 503. (the ‘Py_REF_DEBUG’
          macro must be defined).

          Padrão: ‘0’.

      -- C Membro: int site_import

          Import the *note site: cc. module at startup?

          If equal to zero, disable the import of the module site and
          the site-dependent manipulations of *note sys.path: 3e1. that
          it entails.

          Also disable these manipulations if the *note site: cc. module
          is explicitly imported later (call *note site.main(): 1fd4. if
          you want them to be triggered).

          Set to ‘0’ by the *note -S: 13a4. command line option.

          *note sys.flags.no_site: 891. is set to the inverted value of
          *note site_import: 402.

          Padrão: ‘1’.

      -- C Membro: int skip_source_first_line

          If non-zero, skip the first line of the *note
          PyConfig.run_filename: 5286. 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: 1fd8. 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: 754, *note
          sys.stdout: cc0. and *note sys.stderr: b29. (but *note
          sys.stderr: b29. always uses ‘"backslashreplace"’ error
          handler).

          Use the *note PYTHONIOENCODING: 1200. environment variable if
          it is non-empty.

          Codificação padrão:

             * ‘"UTF-8"’ if *note PyPreConfig.utf8_mode: 41a. is
               non-zero.

             * Otherwise, use the *note locale encoding: 544.

          Tratador de erros padrão:

             * On Windows: use ‘"surrogateescape"’.

             * ‘"surrogateescape"’ if *note PyPreConfig.utf8_mode: 41a.
               is non-zero, or if the LC_CTYPE locale is “C” or “POSIX”.

             * ‘"strict"’ otherwise.

          See also *note PyConfig.legacy_windows_stdio: 417.

      -- C Membro: int tracemalloc

          Enable tracemalloc?

          If non-zero, call *note tracemalloc.start(): 1fd9. at startup.

          Set by *note -X tracemalloc=N: 16f. command line option and by
          the *note PYTHONTRACEMALLOC: 1fda. environment variable.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: int perf_profiling

          Enable the Linux ‘perf’ profiler support?

          If equals to ‘1’, enable support for the Linux ‘perf’
          profiler.

          If equals to ‘2’, enable support for the Linux ‘perf’ profiler
          with DWARF JIT support.

          Set to ‘1’ by *note -X perf: 16f. command-line option and the
          *note PYTHONPERFSUPPORT: 68e. environment variable.

          Set to ‘2’ by the *note -X perf_jit: 16f. command-line option
          and the *note PYTHON_PERF_JIT_SUPPORT: 4a9. environment
          variable.

          Default: ‘-1’.

          Ver também
          ..........

          See *note Suporte do Python ao perfilador perf do Linux: 4a8.
          for more information.

          Adicionado na versão 3.12.

      -- C Membro: wchar_t *stdlib_dir

          Directory of the Python standard library.

          Padrão: ‘NULL’.

          Adicionado na versão 3.11.

      -- C Membro: int use_environment

          Use *note environment variables: 7fc.?

          If equals to zero, ignore the *note environment variables:
          7fc.

          Set to ‘0’ by the *note -E: b4c. environment variable.

          Padrão: ‘1’ na configuração do Python e ‘0’ na configuração
          isolada.

      -- C Membro: int use_system_logger

          If non-zero, ‘stdout’ and ‘stderr’ will be redirected to the
          system log.

          Only available on macOS 10.12 and later, and on iOS.

          Default: ‘0’ (don’t use the system log) on macOS; ‘1’ on iOS
          (use the system log).

          Adicionado na versão 3.14.

      -- C Membro: int user_site_directory

          If non-zero, add the user site directory to *note sys.path:
          3e1.

          Set to ‘0’ by the *note -s: 1580. and *note -I: b4d. command
          line options.

          Set to ‘0’ by the *note PYTHONNOUSERSITE: 1581. 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: 1616. command line option.

          Set by the *note PYTHONVERBOSE: 1fd5. environment variable
          value.

          Padrão: ‘0’.

      -- C Membro: *note PyWideStringList: b9b. warnoptions

          Options of the *note warnings: 118. module to build warnings
          filters, lowest to highest priority: *note sys.warnoptions:
          3f2.

          The *note warnings: 118. module adds *note sys.warnoptions:
          3f2. in the reverse order: the last *note
          PyConfig.warnoptions: 635. item becomes the first item of
          ‘warnings.filters’ which is checked first (highest priority).

          The *note -W: abb. command line options adds its value to
          *note warnoptions: 635, it can be used multiple times.

          The *note PYTHONWARNINGS: d97. 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: 15be. command line option and the
          *note PYTHONDONTWRITEBYTECODE: 15bf. environment variable.

          *note sys.dont_write_bytecode: 4780. is initialized to the
          inverted value of *note write_bytecode: 40a.

          Padrão: ‘1’.

      -- C Membro: *note PyWideStringList: b9b. xoptions

          Values of the *note -X: 16f. command line options: *note
          sys._xoptions: 1fde.

          Padrão: lista vazia.

      -- C Membro: int _pystats

          If non-zero, write performance statistics at Python exit.

          Need a special build with the ‘Py_STATS’ macro: see *note
          -enable-pystats: 1a64.

          Padrão: ‘0’.

If *note parse_argv: 1bcb. is non-zero, *note argv: 3ee. arguments are
parsed the same way the regular Python parses *note command line
arguments: 11fd, and Python arguments are stripped from *note argv: 3ee.

The *note xoptions: 636. options are parsed to set other options: see
the *note -X: 16f. 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: PyConfig C API

7.11.4.7 Initialization with PyConfig
.....................................

Initializing the interpreter from a populated configuration struct is
handled by calling *note Py_InitializeFromConfig(): 3f3.

O chamador é responsável por manipular exceções (erro ou saída) usando
*note PyStatus_Exception(): ba6. e *note Py_ExitStatusException(): baf.

If *note PyImport_FrozenModules(): 31ae, *note PyImport_AppendInittab():
1a4c. or *note PyImport_ExtendInittab(): 1a4d. 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(): 1a4c. or *note PyImport_ExtendInittab(): 1a4d.
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: PyConfig C API

7.11.4.8 Isolated Configuration
...............................

*note PyPreConfig_InitIsolatedConfig(): ba3. and *note
PyConfig_InitIsolatedConfig(): b9d. 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: 3ee. 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: 3f0. 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: PyConfig C API

7.11.4.9 Configuração do Python
...............................

*note PyPreConfig_InitPythonConfig(): ba4. and *note
PyConfig_InitPythonConfig(): b9e. 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: 85b. ( PEP 540(2)) depending on the LC_CTYPE locale, *note
PYTHONUTF8: cc2. and *note PYTHONCOERCECLOCALE: cbf. environment
variables.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0538/

   (2) https://peps.python.org/pep-0540/


File: python.info,  Node: Python Path Configuration,  Prev: Configuração do Python,  Up: PyConfig C API

7.11.4.10 Python Path Configuration
...................................

*note PyConfig: 3f4. contains multiple fields for the path
configuration:

   * Path configuration inputs:

        * *note PyConfig.home: 3f0.

        * *note PyConfig.platlibdir: 1be1.

        * *note PyConfig.pathconfig_warnings: 406.

        * *note PyConfig.program_name: 3ef.

        * *note PyConfig.pythonpath_env: 5307.

        * current working directory: to get absolute paths

        * ‘PATH’ environment variable to get the program full path (from
          *note PyConfig.program_name: 3ef.)

        * ‘__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: 52d8.

        * *note PyConfig.base_executable: 52d9.

        * *note PyConfig.base_prefix: 52da.

        * *note PyConfig.exec_prefix: 52e5.

        * *note PyConfig.executable: 639.

        * *note PyConfig.module_search_paths_set: 7fa, *note
          PyConfig.module_search_paths: 637.

        * *note PyConfig.prefix: 52eb.

If at least one “output field” is not set, Python calculates the path
configuration to fill unset fields.  If *note module_search_paths_set:
7fa. is equal to ‘0’, *note module_search_paths: 637. is overridden and
*note module_search_paths_set: 7fa. 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: 406. to ‘0’ to suppress warnings when
calculating the path configuration (Unix only, Windows does not log any
warning).

If *note base_prefix: 52da. or *note base_exec_prefix: 52d8. fields are
not set, they inherit their value from *note prefix: 52eb. and *note
exec_prefix: 52e5. respectively.

*note Py_RunMain(): bb2. and *note Py_Main(): e12. modify *note
sys.path: 3e1.:

   * If *note run_filename: 5286. is set and is a directory which
     contains a ‘__main__.py’ script, prepend *note run_filename: 5286.
     to *note sys.path: 3e1.

   * If *note isolated: 413. is zero:

        * If *note run_module: 5287. is set, prepend the current
          directory to *note sys.path: 3e1.  Do nothing if the current
          directory cannot be read.

        * If *note run_filename: 5286. is set, prepend the directory of
          the filename to *note sys.path: 3e1.

        * Otherwise, prepend an empty string to *note sys.path: 3e1.

If *note site_import: 402. is non-zero, *note sys.path: 3e1. can be
modified by the *note site: cc. module.  If *note user_site_directory:
40c. is non-zero and the user’s site-package directory exists, the *note
site: cc. module appends the user’s site-package directory to *note
sys.path: 3e1.

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: 413. to ‘1’.

   * Set *note use_environment: 408. to ‘0’.

   * Set *note site_import: 402. to ‘0’.

   * Set *note safe_path: 96c. to ‘1’.

If *note home: 3f0. is not set and a ‘pyvenv.cfg’ file is present in the
same directory as *note executable: 639, or its parent, *note prefix:
52eb. and *note exec_prefix: 52e5. are set that location.  When this
happens, *note base_prefix: 52da. and *note base_exec_prefix: 52d8.
still keep their value, pointing to the base installation.  See *note
Ambientes virtuais: 4742. for more information.

The ‘__PYVENV_LAUNCHER__’ environment variable is used to set *note
PyConfig.base_executable: 52d9.

Alterado na versão 3.14: *note prefix: 52eb, and *note exec_prefix:
52e5, are now set to the ‘pyvenv.cfg’ directory.  This was previously
done by *note site: cc, therefore affected by *note -S: 13a4.


File: python.info,  Node: Py_GetArgcArgv,  Next: Delaying main module execution,  Prev: PyConfig C API,  Up: Configuração de Inicialização do Python

7.11.5 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: a8a. member.


File: python.info,  Node: Delaying main module execution,  Prev: Py_GetArgcArgv,  Up: Configuração de Inicialização do Python

7.11.6 Delaying main module execution
-------------------------------------

In some embedding use cases, it may be desirable to separate interpreter
initialization from the execution of the main module.

This separation can be achieved by setting ‘PyConfig.run_command’ to the
empty string during initialization (to prevent the interpreter from
dropping into the interactive prompt), and then subsequently executing
the desired main module code using ‘__main__.__dict__’ as the global
namespace.


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.12 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<38>.


File: python.info,  Node: Visão Geral<4>,  Next: Allocator Domains,  Up: Gerenciamento de Memória

7.12.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: e52. environment variable can be used to
configure the memory allocators used by Python.

The *note PYTHONMALLOCSTATS: 1dec. environment variable can be used to
print statistics of the *note pymalloc memory allocator: eff. 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.12.2 Allocator Domains
------------------------

All allocating functions belong to one of three different “domains” (see
also *note PyMemAllocatorDomain: 5315.).  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 here: 1fe9.  The APIs used to allocate and free a
block of memory must be from the same domain.  For example, *note
PyMem_Free(): 1633. must be used to free memory allocated using *note
PyMem_Malloc(): e54.

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 an *note
     attached thread state: 4d72.  The memory is requested directly from
     the system.  See *note Raw Memory Interface: 5316.

   * “Mem” domain: intended for allocating memory for Python buffers and
     general-purpose memory buffers where the allocation must be
     performed with an *note attached thread state: 4d72.  The memory is
     taken from the Python private heap.  See *note Memory Interface:
     5317.

   * Object domain: intended for allocating memory for Python objects.
     The memory is taken from the Python private heap.  See *note Object
     allocators: 5318.

     Nota: The *note free-threaded: 1f3. 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(): e54, *note PyMem_RawMalloc(): 625, or
     ‘malloc()’, but not *note PyObject_Malloc(): e56.

     See *note Memory Allocation APIs: 5319.


File: python.info,  Node: Raw Memory Interface,  Next: Interface da Memória,  Prev: Allocator Domains,  Up: Gerenciamento de Memória

7.12.3 Raw Memory Interface
---------------------------

The following function sets are wrappers to the system allocator.  These
functions are thread-safe, so a *note thread state: 17af. does not need
to be *note attached: 4d72.

The *note default raw memory allocator: 1fe9. 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: 76a. 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: 76a. 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: 76a. 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(): 625, *note PyMem_RawRealloc(): 627. or
     *note PyMem_RawCalloc(): 626.

     If the request fails, *note PyMem_RawRealloc(): 627. 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: 76a. 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(): 625, *note
     PyMem_RawRealloc(): 627. or *note PyMem_RawCalloc(): 626.
     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.12.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: 1fe9. uses the *note pymalloc memory
allocator: eff.

     Aviso: There must be an *note attached thread state: 4d72. 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: 76a.'  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: 76a. 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: 76a.'  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(): e54, *note PyMem_Realloc(): 1228. or *note
     PyMem_Calloc(): 10a3.

     If the request fails, *note PyMem_Realloc(): 1228. 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: 76a.'  Frees the memory block pointed
     to by 'p', which must have been returned by a previous call to
     *note PyMem_Malloc(): e54, *note PyMem_Realloc(): 1228. or *note
     PyMem_Calloc(): 10a3.  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(): e54, 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(): 1228, 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(): 1633.

Além disso, os seguintes conjuntos de macros são fornecidos para chamar
o alocador de memória do Python diretamente, sem envolver as funções da
API C listadas acima.  No entanto, observe que seu uso não preserva a
compatibilidade binária entre as versões do Python e, portanto, está
descontinuado em módulos de extensão.

   * ‘PyMem_MALLOC(size)’

   * ‘PyMem_NEW(type, size)’

   * ‘PyMem_REALLOC(ptr, size)’

   * ‘PyMem_RESIZE(ptr, type, size)’

   * ‘PyMem_FREE(ptr)’

   * ‘PyMem_DEL(ptr)’


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.12.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: 531e. section.

The *note default object allocator: 1fe9. uses the *note pymalloc memory
allocator: eff.

     Aviso: There must be an *note attached thread state: 4d72. when
     using these functions.

 -- C Função: void *PyObject_Malloc (size_t n)
     ' Parte da *note ABI Estável: 76a.'  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: 76a. 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: 76a.'  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(): e56, *note PyObject_Realloc(): 1634. or
     *note PyObject_Calloc(): 10a4.

     If the request fails, *note PyObject_Realloc(): 1634. 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: 76a.'  Frees the memory block pointed
     to by 'p', which must have been returned by a previous call to
     *note PyObject_Malloc(): e56, *note PyObject_Realloc(): 1634. or
     *note PyObject_Calloc(): 10a4.  Otherwise, or if ‘PyObject_Free(p)’
     has been called before, undefined behavior occurs.

     If 'p' is ‘NULL’, no operation is performed.

     Do not call this directly to free an object’s memory; call the
     type’s *note tp_free: 4d70. slot instead.

     Do not use this for memory allocated by *note PyObject_GC_New: c8c.
     or *note PyObject_GC_NewVar: c8d.; use *note PyObject_GC_Del():
     16f1. instead.

     Ver também
     ..........

        * *note PyObject_GC_Del(): 16f1. is the equivalent of this
          function for memory allocated by types that support garbage
          collection.

        * *note PyObject_Malloc(): e56.

        * *note PyObject_Realloc(): 1634.

        * *note PyObject_Calloc(): 10a4.

        * *note PyObject_New: b72.

        * *note PyObject_NewVar: b73.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_free: 4d70.


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.12.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: e52. environment variable.

   * ‘malloc’: system allocators from the standard C library, C
     functions: ‘malloc()’, ‘calloc()’, ‘realloc()’ and ‘free()’.

   * ‘pymalloc’: *note pymalloc memory allocator: eff.

   * ‘mimalloc’: *note mimalloc memory allocator: 1feb.  The pymalloc
     allocator will be used if mimalloc support isn’t available.

   * “+ debug”: with *note debug hooks on the Python memory allocators:
     1fec.

   * “Debug build”: *note Python build in debug mode: 503.


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.12.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: 10c4. 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(): 625.

             * *note PyMem_RawRealloc(): 627.

             * *note PyMem_RawCalloc(): 626.

             * *note PyMem_RawFree(): 628.

      -- C Macro: PYMEM_DOMAIN_MEM

          Funções:

             * *note PyMem_Malloc(): e54,

             * *note PyMem_Realloc(): 1228.

             * *note PyMem_Calloc(): 10a3.

             * *note PyMem_Free(): 1633.

      -- C Macro: PYMEM_DOMAIN_OBJ

          Funções:

             * *note PyObject_Malloc(): e56.

             * *note PyObject_Realloc(): 1634.

             * *note PyObject_Calloc(): 10a4.

             * *note PyObject_Free(): e53.

 -- 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: 1fea. domain, the allocator must be
     thread-safe: a *note thread state: 17af. is not *note attached:
     4d72. 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 *note GIL: 164.

     If the new allocator is not a hook (does not call the previous
     allocator), the *note PyMem_SetupDebugHooks(): e58. function must
     be called to reinstall the debug hooks on top on the new allocator.

     See also *note PyPreConfig.allocator: 52d7. and *note Preinitialize
     Python with PyPreConfig: 415a.

          Aviso: *note PyMem_SetAllocator(): 79d. does have the
          following contract:

             * It can be called after *note Py_PreInitialize(): 41b. and
               before *note Py_InitializeFromConfig(): 3f3. 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 an *note attached thread
               state: 4d72.).  See *note the section on allocator
               domains: 5314. for more information.

             * If called after Python has finish initializing (after
               *note Py_InitializeFromConfig(): 3f3. 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: 1fec. 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.12.8 Debug hooks on the Python memory allocators
--------------------------------------------------

When *note Python is built in debug mode: 503, the *note
PyMem_SetupDebugHooks(): e58. function is called at the *note Python
preinitialization: 415a. to setup debug hooks on Python memory
allocators to detect memory errors.

The *note PYTHONMALLOC: e52. environment variable can be used to install
debug hooks on a Python compiled in release mode (ex:
‘PYTHONMALLOC=debug’).

The *note PyMem_SetupDebugHooks(): e58. function can be used to set
debug hooks after calling *note PyMem_SetAllocator(): 79d.

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(): e53. is called on a memory block allocated by
     *note PyMem_Malloc(): e54.

   - Detect write before the start of the buffer (buffer underflow).

   - Detect write after the end of the buffer (buffer overflow).

   - Check that there is an *note attached thread state: 4d72. when
     allocator functions of *note PYMEM_DOMAIN_OBJ: e55. (ex: *note
     PyObject_Malloc(): e56.) and *note PYMEM_DOMAIN_MEM: e57. (ex:
     *note PyMem_Malloc(): e54.) domains are called.

On error, the debug hooks use the *note tracemalloc: 105. module to get
the traceback where a memory block was allocated.  The traceback is only
displayed if *note tracemalloc: 105. 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: 1fea.

        * ‘'m'’ for *note PYMEM_DOMAIN_MEM: e57.

        * ‘'o'’ for *note PYMEM_DOMAIN_OBJ: e55.

‘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(): e58. function
now also works on Python compiled in release mode.  On error, the debug
hooks now use *note tracemalloc: 105. to get the traceback where a
memory block was allocated.  The debug hooks now also check if there is
an *note attached thread state: 4d72. when functions of *note
PYMEM_DOMAIN_OBJ: e55. and *note PYMEM_DOMAIN_MEM: e57. 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.12.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():
625. and *note PyMem_RawRealloc(): 627. for allocations larger than 512
bytes.

'pymalloc' is the *note default allocator: 1fe9. of the *note
PYMEM_DOMAIN_MEM: e57. (ex: *note PyMem_Malloc(): e54.) and *note
PYMEM_DOMAIN_OBJ: e55. (ex: *note PyObject_Malloc(): e56.) 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: 204b. option.  It can also be disabled at runtime
using the *note PYTHONMALLOC: e52. environment variable (ex:
‘PYTHONMALLOC=malloc’).

Typically, it makes sense to disable the pymalloc allocator when
building Python with AddressSanitizer (*note -with-address-sanitizer:
2054.) 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.12.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.12.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<38>,  Prev: The mimalloc allocator,  Up: Gerenciamento de Memória

7.12.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: 105.
     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: 105.
     module.  Do nothing if the block was not tracked.

     Return ‘-2’ if tracemalloc is disabled, otherwise return ‘0’.


File: python.info,  Node: Exemplos<38>,  Prev: tracemalloc C API,  Up: Gerenciamento de Memória

7.12.12 Exemplos
----------------

Here is the example from section *note Visão Geral: 5311, 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_Free(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_Free()  */

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: b72, *note PyObject_NewVar: b73. and *note
PyObject_Free(): e53.

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.13 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::
* Ciclo de vida do objeto::
* Estruturas comuns de objetos::
* Type Object Structures::
* Suporte a Coleta Cíclica de Lixo::


File: python.info,  Node: Alocando objetos na heap,  Next: Ciclo de vida do objeto,  Up: Suporte a implementação de Objetos

7.13.1 Alocando objetos na heap
-------------------------------

 -- C Função: *note PyObject: 5d5. *_PyObject_New (PyTypeObject *type)
     'Retorna valor: Nova referência.'

 -- C Função: *note PyVarObject: 4566. *_PyObject_NewVar (PyTypeObject
          *type, Py_ssize_t size)
     'Retorna valor: Nova referência.'

 -- C Função: *note PyObject: 5d5. *PyObject_Init (PyObject *op,
          PyTypeObject *type)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  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 inicializados.  Apesar do nome, esta
     função não tem relação com o método *note __init__(): 8b4. do
     objeto (slot *note tp_init: 796.).  Especificamente, esta função
     'não' chama o método ‘__init__()’ do objeto.

     Em geral, considere esta função como uma rotina de baixo nível.
     Use *note tp_alloc: 4d71. sempre que possível.  Para implementar
     ‘tp_alloc’ para o seu tipo, prefira *note PyType_GenericAlloc():
     c55. ou *note PyObject_New(): b72.

          Nota: Esta função inicializa apenas a memória do objeto
          correspondente à estrutura inicial *note PyObject: 5d5.  Não
          zera o restante.

 -- C Função: *note PyVarObject: 4566. *PyObject_InitVar (PyVarObject
          *op, PyTypeObject *type, Py_ssize_t size)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a.'  Isto faz tudo que o *note PyObject_Init(): c54. faz
     e também inicializa a informação de comprimento para um objeto de
     tamanho variável.

          Nota: Esta função inicializa apenas parte da memória do
          objeto.  Não zera o restante.

 -- C Macro: PyObject_New (TYPE, typeobj)

     Aloca um novo objeto Python usando o tipo de estrutura C 'TYPE' e o
     objeto de tipo Python 'typeobj' (‘PyTypeObject*’) chamando *note
     PyObject_Malloc(): e56. para alocar memória e inicializando-o como
     *note PyObject_Init(): c54.  O chamador possuirá a única referência
     ao objeto (ou seja, sua contagem de referências será um).

     Evite chamar isso diretamente para alocar memória para um objeto;
     em vez disso, chame o slot *note tp_alloc: 4d71. do tipo.

     Ao preencher o slot *note tp_alloc: 4d71. de um tipo, *note
     PyType_GenericAlloc(): c55. é preferível a uma função personalizada
     que simplesmente chama esta macro.

     Esta macro não chama *note tp_alloc: 4d71, *note tp_new: 794.
     (*note __new__(): 795.) ou *note tp_init: 796. (*note __init__():
     8b4.).

     Isso não pode ser usado para objetos com *note Py_TPFLAGS_HAVE_GC:
     976. definido em *note tp_flags: 1b60.; use *note PyObject_GC_New:
     c8c. em vez disso.

     A memória alocada por esta macro deve ser liberada com *note
     PyObject_Free(): e53. (geralmente chamado por meio do slot *note
     tp_free: 4d70. do objeto).

          Nota: Não há garantia de que a memória retornada tenha sido
          completamente zerada antes de ser inicializada.

          Nota: Esta macro não constrói um objeto totalmente
          inicializado do tipo fornecido; ela apenas aloca memória e a
          prepara para inicialização posterior por *note tp_init: 796.
          Para construir um objeto totalmente inicializado, chame
          'typeobj'.  Por exemplo:

               PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);

     Ver também
     ..........

        * *note PyObject_Free(): e53.

        * *note PyObject_GC_New: c8c.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_alloc: 4d71.

 -- C Macro: PyObject_NewVar (TYPE, typeobj, size)

     Como *note PyObject_New: b72, exceto que:

        * Ela aloca memória suficiente para a estrutura 'TYPE' mais os
          'size' (‘Py_ssize_t’) campos do tamanho fornecido pelo campo
          *note tp_itemsize: 2252. de 'typeobj'.

        * A memória é inicializada como *note PyObject_InitVar(): 1bf8.

     Isso é útil para implementar objetos como tuplas, que conseguem
     determinar seu tamanho em tempo de construção.  Incorporar o vetor
     de campos na mesma alocação diminui o número de alocações,
     melhorando a eficiência do gerenciamento de memória.

     Evite chamar isso diretamente para alocar memória para um objeto;
     em vez disso, chame o slot *note tp_alloc: 4d71. do tipo.

     Ao preencher o slot *note tp_alloc: 4d71. de um tipo, *note
     PyType_GenericAlloc(): c55. é preferível a uma função personalizada
     que simplesmente chama esta macro.

     Isso não pode ser usado para objetos com *note Py_TPFLAGS_HAVE_GC:
     976. definido em *note tp_flags: 1b60.; use *note
     PyObject_GC_NewVar: c8d. em vez disso.

     A memória alocada por esta função deve ser liberada com *note
     PyObject_Free(): e53. (geralmente chamado por meio do slot *note
     tp_free: 4d70. do objeto).

          Nota: Não há garantia de que a memória retornada tenha sido
          completamente zerada antes de ser inicializada.

          Nota: Esta macro não constrói um objeto totalmente
          inicializado do tipo fornecido; ela apenas aloca memória e a
          prepara para inicialização posterior por *note tp_init: 796.
          Para construir um objeto totalmente inicializado, chame
          'typeobj'.  Por exemplo:

               PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);

     Ver também
     ..........

        * *note PyObject_Free(): e53.

        * *note PyObject_GC_NewVar: c8d.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_alloc: 4d71.

 -- C Função: void PyObject_Del (void *op)

     Mesmo que *note PyObject_Free(): e53.

 -- C Variável: *note PyObject: 5d5. _Py_NoneStruct

     Objeto o qual é visível no Python como ‘None’.  Isto só deve ser
     acessado usando a macro *note Py_None: 4d40, o qual avalia como um
     ponteiro para este objeto.

Ver também
..........

*note Objetos do Módulo: 51d8.

     Para alocar e criar módulos de extensão.


File: python.info,  Node: Ciclo de vida do objeto,  Next: Estruturas comuns de objetos,  Prev: Alocando objetos na heap,  Up: Suporte a implementação de Objetos

7.13.2 Ciclo de vida do objeto
------------------------------

Esta seção explica como os slots de um tipo se relacionam entre si ao
longo da vida de um objeto.  Não se destina a ser uma referência
canônica completa para os slots; em vez disso, consulte a documentação
específica do slot em *note Type Object Structures: b7a. para obter
detalhes sobre um slot específico.

* Menu:

* Eventos de vida::
* Destruição de isolado cíclico::
* Funções: Funções<15>.


File: python.info,  Node: Eventos de vida,  Next: Destruição de isolado cíclico,  Up: Ciclo de vida do objeto

7.13.2.1 Eventos de vida
........................

A figura abaixo ilustra a ordem dos eventos que podem ocorrer ao longo
da vida de um objeto.  Uma seta de 'A' para 'B' indica que o evento 'B'
pode ocorrer após a ocorrência do evento 'A', com o rótulo da seta
indicando a condição que deve ser verdadeira para que 'B' ocorra após
'A'.

[image src="python-figures/lifecycle.dot.svg" alt="Diagrama mostrando eventos na vida de um objeto. Explicado em detalhes abaixo."]


Explicação:

   * Quando um novo objeto é construído chamando seu tipo:

       1. *note tp_new: 794. é chamado para criar um novo objeto.

       2. *note tp_alloc: 4d71. é chamado diretamente por *note tp_new:
          794. para alocar a memória para o novo objeto.

       3. *note tp_init: 796. inicializa o objeto recém-criado.
          ‘tp_init’ pode ser chamado novamente para reinicializar um
          objeto, se desejado.  A chamada DE ‘tp_init’ também pode ser
          completamente ignorada, por exemplo, com código Python
          chamando *note __new__(): 795.

   * Após a conclusão de ‘tp_init’, o objeto estará pronto para uso.

   * Algum tempo após a última referência a um objeto ser removida:

       1. Se um objeto não estiver marcado como 'finalizado', ele poderá
          ser finalizado marcando-o como 'finalizado' e chamando sua
          função *note tp_finalize: c90.  O Python 'não' finaliza um
          objeto quando a última referência a ele é excluída; use *note
          PyObject_CallFinalizerFromDealloc(): 5338. para garantir que
          *note tp_finalize: c90. seja sempre chamado.

       2. Se o objeto estiver marcado como finalizado, *note tp_clear:
          4d84. poderá ser chamado pelo coletor de lixo para limpar as
          referências mantidas pelo objeto.  Ele 'não' é chamado quando
          a contagem de referências do objeto chega a zero.

       3. *note tp_dealloc: 4d5d. é chamado para destruir o objeto.
          Para evitar duplicação de código, *note tp_dealloc: 4d5d.
          normalmente chama *note tp_clear: 4d84. para liberar as
          referências do objeto.

       4. Quando *note tp_dealloc: 4d5d. termina a destruição do objeto,
          ele chama diretamente *note tp_free: 4d70. (geralmente
          definido como *note PyObject_Free(): e53. ou *note
          PyObject_GC_Del(): 16f1. automaticamente, conforme apropriado
          para o tipo) para desalocar a memória.

   * A função *note tp_finalize: c90. tem permissão para adicionar uma
     referência ao objeto, se desejado.  Se isso acontecer, o objeto
     será 'ressuscitado', impedindo sua destruição pendente.  (Somente
     ‘tp_finalize’ tem permissão para ressuscitar um objeto; *note
     tp_clear: 4d84. e *note tp_dealloc: 4d5d. não podem sem chamar
     ‘tp_finalize’.)  Ressuscitar um objeto pode ou não causar a remoção
     da marca 'finalizado' do objeto.  Atualmente, o Python não remove a
     marca 'finalizado' de um objeto ressuscitado se ele suportar coleta
     de lixo (ou seja, o sinalizador *note Py_TPFLAGS_HAVE_GC: 976.
     estiver definido), mas remove a marca se o objeto não suportar
     coleta de lixo; qualquer um ou ambos os comportamentos podem mudar
     no futuro.

   * *note tp_dealloc: 4d5d. pode opcionalmente chamar *note
     tp_finalize: c90. via *note PyObject_CallFinalizerFromDealloc():
     5338. se desejar reutilizar esse código para auxiliar na destruição
     de objetos.  Isso é recomendado porque garante que ‘tp_finalize’
     seja sempre chamado antes da destruição.  Consulte a documentação
     de *note tp_dealloc: 4d5d. para obter um exemplo de código.

   * Se o objeto for membro de um *note isolado cíclico: 5339. e *note
     tp_clear: 4d84. não conseguir interromper o ciclo de referência ou
     o isolado cíclico não for detectado (talvez *note gc.disable():
     489d. tenha sido chamado ou o sinalizador *note Py_TPFLAGS_HAVE_GC:
     976. tenha sido omitido erroneamente em um dos tipos envolvidos),
     os objetos permanecerão indefinidamente não coletáveis (eles
     “vazam”).  Veja *note gc.garbage: 13bd.

Se o objeto for marcado como compatível com coleta de lixo (o
sinalizador *note Py_TPFLAGS_HAVE_GC: 976. estiver definido em *note
tp_flags: 1b60.), os seguintes eventos também serão possíveis:

   * O coletor de lixo ocasionalmente chama *note tp_traverse: 977. para
     identificar *note isolados cíclicos: 5339.

   * Quando o coletor de lixo descobre um *note isolado cíclico: 5339,
     ele finaliza um dos objetos do grupo marcando-o como 'finalizado' e
     chamando sua função *note tp_finalize: c90, se houver.  Isso se
     repete até que o isolado cíclico não exista mais ou todos os
     objetos tenham sido finalizados.

   * *note tp_finalize: c90. tem permissão para ressuscitar o objeto
     adicionando uma referência externa ao *note isolado cíclico: 5339.
     A nova referência faz com que o grupo de objetos não forme mais um
     isolado cíclico (o ciclo de referência ainda pode existir, mas se
     existir, os objetos não estarão mais isolados).

   * Quando o coletor de lixo descobre um *note isolado cíclico: 5339. e
     todos os objetos do grupo já foram marcados como 'finalizados', o
     coletor de lixo limpa um ou mais objetos não limpos no grupo
     (possivelmente simultaneamente) chamando a função *note tp_clear:
     4d84. de cada um.  Isso se repete enquanto o isolado cíclico ainda
     existir e nem todos os objetos tiverem sido limpos.


File: python.info,  Node: Destruição de isolado cíclico,  Next: Funções<15>,  Prev: Eventos de vida,  Up: Ciclo de vida do objeto

7.13.2.2 Destruição de isolado cíclico
......................................

Abaixo estão listados os estágios de vida de um *note isolado cíclico:
5339. hipotético que continua a existir após cada objeto membro ser
finalizado ou limpo.  É um vazamento de memória se um isolado cíclico
passar por todos esses estágios; ele deve desaparecer assim que todos os
objetos forem limpos, ou até mesmo antes.  Um isolado cíclico pode
desaparecer porque o ciclo de referência foi quebrado ou porque os
objetos não estão mais isolados devido à ressurreição do finalizador
(veja *note tp_finalize: c90.).

  0. 'Alcançável' (ainda não é um isolado cíclico): todos os objetos
     estão em seu estado normal e acessível.  Um ciclo de referência
     pode existir, mas uma referência externa significa que os objetos
     ainda não estão isolados.

  1. 'Inalcançável, mas consistente:' a referência final de fora do
     grupo cíclico de objetos foi removida, causando o isolado dos
     objetos (criando assim um isolado cíclico).  Nenhum dos objetos do
     grupo foi finalizado ou limpo ainda.  O isolado cíclico permanece
     neste estágio até alguma execução futura do coletor de lixo (não
     necessariamente a próxima execução, pois a próxima execução pode
     não varrer todos os objetos).

  2. 'Mistura de finalizados e não finalizados:' objetos em um isolado
     cíclico são finalizados um de cada vez, o que significa que há um
     período em que o isolado cíclico é composto por uma mistura de
     objetos finalizados e não finalizados.  A ordem de finalização não
     é especificada, portanto, pode parecer aleatória.  Um objeto
     finalizado deve se comportar de maneira sensata quando objetos não
     finalizados interagem com ele, e um objeto não finalizado deve ser
     capaz de tolerar a finalização de um subconjunto arbitrário de seus
     referentes.

  3. 'Todos finalizados:' todos os objetos em um isolado cíclico são
     finalizados antes que qualquer um deles seja limpo.

  4. 'Combinação de finalizado e limpo:' os objetos podem ser limpos em
     série ou simultaneamente (mas com a *note GIL: 164. mantida); de
     qualquer forma, alguns serão concluídos antes de outros.  Um objeto
     finalizado deve ser capaz de tolerar a limpeza de um subconjunto de
     seus referentes.  PEP 442(1) chama essa etapa de “lixo cíclico”.

  5. 'Vazamento:' se um isolado cíclico ainda existir após todos os
     objetos do grupo terem sido finalizados e limpos, os objetos
     permanecerão indefinidamente não coletáveis (consulte *note
     gc.garbage: 13bd.).  É um bug se um isolado cíclico atingir esse
     estágio — significa que os métodos *note tp_clear: 4d84. dos
     objetos participantes falharam em interromper o ciclo de referência
     conforme necessário.

Se *note tp_clear: 4d84. não existisse, o Python não teria como
interromper com segurança um ciclo de referência.  A simples destruição
de um objeto em um isolado cíclico resultaria em um ponteiro pendente,
desencadeando um comportamento indefinido quando um objeto que
referencia o objeto destruído é destruído.  A etapa de limpeza torna a
destruição de objetos um processo de duas fases: primeiro, *note
tp_clear: 4d84. é chamado para destruir parcialmente os objetos o
suficiente para desvinculá-los uns dos outros; em seguida, *note
tp_dealloc: 4d5d. é chamado para completar a destruição.

Ao contrário da limpeza, a finalização não é uma fase da destruição.  Um
objeto finalizado ainda deve se comportar corretamente, continuando a
cumprir seus contratos de design.  O finalizador de um objeto pode
executar código Python arbitrário e até mesmo impedir a destruição
iminente adicionando uma referência.  O finalizador está relacionado à
destruição apenas pela ordem de chamada — se for executado, será
executado antes da destruição, que começa com *note tp_clear: 4d84. (se
chamado) e termina com *note tp_dealloc: 4d5d.

A etapa de finalização não é necessária para recuperar com segurança os
objetos em um isolado cíclico, mas sua existência facilita o design de
tipos que se comportam de maneira sensata quando os objetos são limpos.
Limpar um objeto pode necessariamente deixá-lo em um estado quebrado,
parcialmente destruído — pode ser inseguro chamar qualquer um dos
métodos do objeto limpo ou acessar qualquer um de seus atributos.  Com a
finalização, apenas objetos finalizados podem interagir com objetos
limpos; objetos não finalizados têm a garantia de interagir apenas com
objetos não limpos (mas potencialmente finalizados).

Para resumir as interações possíveis:

   * Um objeto não finalizado pode ter referências a ou de objetos não
     finalizados e finalizados, mas não a ou de objetos limpos.

   * Um objeto finalizado pode ter referências a ou de objetos não
     finalizados, finalizados e limpos.

   * Um objeto limpo pode ter referências a ou de objetos finalizados e
     limpos, mas não a ou de objetos não finalizados.

Sem ciclos de referência, um objeto pode ser simplesmente destruído após
a exclusão de sua última referência; as etapas de finalização e limpeza
não são necessárias para recuperar objetos não utilizados com segurança.
No entanto, pode ser útil chamar automaticamente *note tp_finalize: c90.
e *note tp_clear: 4d84. antes da destruição, pois o design de tipos é
simplificado quando todos os objetos sempre experimentam a mesma série
de eventos, independentemente de terem participado ou não de um isolado
cíclico.  Atualmente, o Python chama *note tp_finalize: c90. e *note
tp_clear: 4d84. apenas conforme necessário para destruir um isolado
cíclico; isso pode mudar em uma versão futura.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0442/


File: python.info,  Node: Funções<15>,  Prev: Destruição de isolado cíclico,  Up: Ciclo de vida do objeto

7.13.2.3 Funções
................

Para alocar e liberar memória, consulte *note Alocando objetos na heap:
532e.

 -- C Função: void PyObject_CallFinalizer (PyObject *op)

     Finaliza o objeto conforme descrito em *note tp_finalize: c90.
     Chame esta função (ou *note PyObject_CallFinalizerFromDealloc():
     5338.) em vez de chamar *note tp_finalize: c90. diretamente, pois
     esta função pode desduplicar várias chamadas para ‘tp_finalize’.
     Atualmente, as chamadas são desduplicadas somente se o tipo
     oferecer suporte a coleta de lixo (ou seja, se o sinalizador *note
     Py_TPFLAGS_HAVE_GC: 976. estiver definido); isso pode mudar no
     futuro.

 -- C Função: int PyObject_CallFinalizerFromDealloc (PyObject *op)

     O mesmo que *note PyObject_CallFinalizer(): 533c, mas deve ser
     chamado no início do destrutor do objeto (*note tp_dealloc: 4d5d.).
     Não deve haver nenhuma referência ao objeto.  Se o finalizador do
     objeto ressuscitar o objeto, esta função retornará -1; nenhuma
     outra destruição deverá ocorrer.  Caso contrário, esta função
     retornará 0 e a destruição pode continuar normalmente.

     Ver também
     ..........

     *note tp_dealloc: 4d5d. para código de exemplo.


File: python.info,  Node: Estruturas comuns de objetos,  Next: Type Object Structures,  Prev: Ciclo de vida do objeto,  Up: Suporte a implementação de Objetos

7.13.3 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:

* Base object types and macros::
* Implementing functions and methods::
* Accessing attributes of extension types::


File: python.info,  Node: Base object types and macros,  Next: Implementing functions and methods,  Up: Estruturas comuns de objetos

7.13.3.1 Base object types and macros
.....................................

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: 5d5. e *note PyVarObject: 4566, 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: 4fb9.

 -- C Tipo: type PyObject
     ' Parte da *note API Limitada: 76a.  (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: 5d5, but every pointer to a Python
     object can be cast to a *note PyObject: 5d5.*.

     The members must not be accessed directly; instead use macros such
     as *note Py_REFCNT: 2ce. and *note Py_TYPE: 3c6.

      -- C Membro: *note Py_ssize_t: c49. ob_refcnt
          ' Parte da *note ABI Estável: 76a.'  The object’s reference
          count, as returned by *note Py_REFCNT: 2ce.  Do not use this
          field directly; instead use functions and macros such as
          ‘Py_REFCNT’, *note Py_INCREF(): 784. and *note Py_DecRef():
          4f6b.

          The field type may be different from ‘Py_ssize_t’, depending
          on build configuration and platform.

      -- C Membro: *note PyTypeObject: c8f. *ob_type
          ' Parte da *note ABI Estável: 76a.'  The object’s type.  Do
          not use this field directly; use *note Py_TYPE: 3c6. and *note
          Py_SET_TYPE(): 979. instead.

 -- C Tipo: type PyVarObject
     ' Parte da *note API Limitada: 76a.  (Somente alguns membros são
     parte da ABI estável.)'  An extension of *note PyObject: 5d5. that
     adds the *note ob_size: 4f66. field.  This is intended for objects
     that have some notion of 'length'.

     As with ‘PyObject’, the members must not be accessed directly;
     instead use macros such as *note Py_SIZE: 97a, *note Py_REFCNT:
     2ce. and *note Py_TYPE: 3c6.

      -- C Membro: *note Py_ssize_t: c49. ob_size
          ' Parte da *note ABI Estável: 76a.'  A size field, whose
          contents should be considered an object’s internal
          implementation detail.

          Do not use this field directly; use *note Py_SIZE: 97a.
          instead.

          Object creation functions such as *note PyObject_NewVar():
          b73. will generally set this field to the requested size
          (number of items).  After creation, arbitrary values can be
          stored in ‘ob_size’ using *note Py_SET_SIZE: 97b.

          To get an object’s publicly exposed length, as returned by the
          Python function *note len(): 835, use *note PyObject_Length():
          4ef2. instead.

 -- 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: 5d5. acima.

 -- C Macro: PyObject_VAR_HEAD

     This is a macro used when declaring new types which represent
     objects with a length that varies from instance to instance.  The
     PyObject_VAR_HEAD macro expands to:

          PyVarObject ob_base;

     Veja documentação de *note PyVarObject: 4566. acima.

 -- C Variável: *note PyTypeObject: c8f. PyBaseObject_Type
     ' Parte da *note ABI Estável: 76a.'  The base class of all other
     objects, the same as *note object: c72. in Python.

 -- C Função: int Py_Is (PyObject *x, PyObject *y)
     ' Parte da *note ABI Estável: 76a. 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: 76a. 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: 76a. 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: 76a. 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: c8f. *Py_TYPE (PyObject *o)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 76a. desde a versão 3.14.'  Get the type of the Python
     object 'o'.

     The returned reference is *note borrowed: 3d4. from 'o'.  Do not
     release it with *note Py_DECREF(): 785. or similar.

     Alterado na versão 3.11: *note Py_TYPE(): 3c6. is changed to an
     inline static function.  The parameter type is no longer const
     *note PyObject: 5d5.*.

 -- 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 type of object 'o' to 'type', without any checking or
     reference counting.

     This is a very low-level operation.  Consider instead setting the
     Python attribute *note __class__: 169b. using *note
     PyObject_SetAttrString(): 18d5. or similar.

     Note that assigning an incompatible type can lead to undefined
     behavior.

     If 'type' is a *note heap type: b54, the caller must create a new
     reference to it.  Similarly, if the old type of 'o' is a heap type,
     the caller must release a reference to that type.

     Adicionado na versão 3.9.

 -- C Função: *note Py_ssize_t: c49. Py_SIZE (PyVarObject *o)

     Get the *note ob_size: 4f66. field of 'o'.

     Alterado na versão 3.11: *note Py_SIZE(): 97a. is changed to an
     inline static function.  The parameter type is no longer const
     *note PyVarObject: 4566.*.

 -- C Função: void Py_SET_SIZE (PyVarObject *o, Py_ssize_t size)

     Set the *note ob_size: 4f66. field of 'o' 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: 5d5. 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: 4566. type, including the *note ob_size: 4f66.
     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: Base object types and macros,  Up: Estruturas comuns de objetos

7.13.3.2 Implementing functions and methods
...........................................

 -- C Tipo: type PyCFunction
     ' Parte da *note ABI Estável: 76a.'  Type of the functions used to
     implement most Python callables in C. Functions of this type take
     two *note PyObject: 5d5.* 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: 76a.'  Type of the functions used to
     implement Python callables in C with signature *note METH_VARARGS |
     METH_KEYWORDS: 5346.  The function signature is:

          PyObject *PyCFunctionWithKeywords(PyObject *self,
                                            PyObject *args,
                                            PyObject *kwargs);

 -- C Tipo: type PyCFunctionFast
     ' Parte da *note ABI Estável: 76a. desde a versão 3.13.'  Type of
     the functions used to implement Python callables in C with
     signature *note METH_FASTCALL: 18e2.  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: 76a. desde a versão 3.13.'  Type of
     the functions used to implement Python callables in C with
     signature *note METH_FASTCALL | METH_KEYWORDS: 5347.  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: 1945.
     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: 76a. (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: 1666. 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: 5348. is a C function pointer.  The functions may be
of different types, but they always return *note PyObject: 5d5.*.  If
the function is not of the *note PyCFunction: 1666, the compiler will
require a cast in the method table.  Even though *note PyCFunction:
1666. defines the first parameter as *note PyObject: 5d5.*, it is common
that the method implementation uses the specific C type of the 'self'
object.

The *note ml_flags: 5349. 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

     This is the typical calling convention, where the methods have the
     type *note PyCFunction: 1666.  The function expects two *note
     PyObject: 5d5.* 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(): 3be. or *note PyArg_UnpackTuple(): 16f4.

 -- C Macro: METH_KEYWORDS

     Can only be used in certain combinations with other flags: *note
     METH_VARARGS | METH_KEYWORDS: 5346, *note METH_FASTCALL |
     METH_KEYWORDS: 5347. and *note METH_METHOD | METH_FASTCALL |
     METH_KEYWORDS: 1945.

*note METH_VARARGS: 16f6. | *note METH_KEYWORDS: 4d43.

     Methods with these flags must be of type *note
     PyCFunctionWithKeywords: 4e04.  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(): 618.

 -- C Macro: METH_FASTCALL

     Fast calling convention supporting only positional arguments.  The
     methods have the type *note PyCFunctionFast: 4e02.  The first
     parameter is 'self', the second parameter is a C array of *note
     PyObject: 5d5.* 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: 4de9.

*note METH_FASTCALL: 18e2. | *note METH_KEYWORDS: 4d43.

     Extension of *note METH_FASTCALL: 18e2. supporting also keyword
     arguments, with methods of type *note PyCFunctionFastWithKeywords:
     4e03.  Keyword arguments are passed the same way as in the *note
     vectorcall protocol: 769.: there is an additional fourth *note
     PyObject: 5d5.* 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

     Can only be used in the combination with other flags: *note
     METH_METHOD | METH_FASTCALL | METH_KEYWORDS: 1945.

*note METH_METHOD: b5e. | *note METH_FASTCALL: 18e2. | *note METH_KEYWORDS: 4d43.

     Extension of *note METH_FASTCALL | METH_KEYWORDS: 5347. 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: 95d, 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

     Methods without parameters don’t need to check whether arguments
     are given if they are listed with the *note METH_NOARGS: 16c2.
     flag.  They need to be of type *note PyCFunction: 1666.  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: 19c9. can be used to prevent a compiler
     warning.

 -- C Macro: METH_O

     Methods with a single object argument can be listed with the *note
     METH_O: 16f5. flag, instead of invoking *note PyArg_ParseTuple():
     3be. with a ‘"O"’ argument.  They have the type *note PyCFunction:
     1666, with the 'self' parameter, and a *note PyObject: 5d5.*
     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

     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(): 488. built-in function.

 -- C Macro: METH_STATIC

     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():
     450. 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

     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__(): 15ab. 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 Função: *note PyObject: 5d5. *PyCMethod_New (PyMethodDef *ml,
          PyObject *self, PyObject *module, PyTypeObject *cls)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.9.'  Turn 'ml' into a Python *note callable:
     2c1e. object.  The caller must ensure that 'ml' outlives the *note
     callable: 2c1e.  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: 2c1e. 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: 87a. or
     ‘NULL’.

     Ver também
     ..........

     *note function.__module__: 21e3.

     The 'cls' parameter will be passed as the 'defining_class' argument
     to the C function.  Must be set if *note METH_METHOD: b5e. is set
     on ‘ml->ml_flags’.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 5d5. *PyCFunction_NewEx (PyMethodDef *ml,
          PyObject *self, PyObject *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a.'  Equivalente a ‘PyCMethod_New(ml, self, module, NULL)’.

 -- C Função: *note PyObject: 5d5. *PyCFunction_New (PyMethodDef *ml,
          PyObject *self)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     76a. desde a versão 3.4.'  Equivalente a ‘PyCMethod_New(ml, self,
     NULL, NULL)’.


File: python.info,  Node: Accessing attributes of extension types,  Prev: Implementing functions and methods,  Up: Estruturas comuns de objetos

7.13.3.3 Accessing attributes of extension types
................................................

 -- C Tipo: type PyMemberDef
     ' Parte da *note ABI Estável: 76a. (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: 4d73. 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: 192c. for the possible values.

      -- C Membro: *note Py_ssize_t: c49. 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: 534e, 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: 1aad.

     By default (when *note flags: 4d8d. is ‘0’), members allow both
     read and write access.  Use the *note Py_READONLY: 7a3. flag for
     read-only access.  Certain types, like *note Py_T_STRING: 5350,
     imply *note Py_READONLY: 7a3.  Only *note Py_T_OBJECT_EX: 7a6. (and
     legacy *note T_OBJECT: 7a5.) members can be deleted.  For
     heap-allocated types (created using *note PyType_FromSpec(): 792.
     or similar), ‘PyMemberDef’ may contain a definition for the special
     member ‘"__vectorcalloffset__"’, corresponding to *note
     tp_vectorcall_offset: 5055. in type objects.  This member must be
     defined with ‘Py_T_PYSSIZET’, and either ‘Py_READONLY’ or
     ‘Py_READONLY | Py_RELATIVE_OFFSET’.  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: 50b6. and *note
     tp_weaklistoffset: b75. can be defined similarly using
     ‘"__dictoffset__"’ and ‘"__weaklistoffset__"’ members, but
     extensions are strongly encouraged to use *note
     Py_TPFLAGS_MANAGED_DICT: 603. and *note Py_TPFLAGS_MANAGED_WEAKREF:
     771. instead.

     Alterado na versão 3.12: ‘PyMemberDef’ is always available.
     Previously, it required including ‘"structmember.h"’.

     Alterado na versão 3.14: *note Py_RELATIVE_OFFSET: 765. is now
     allowed for ‘"__vectorcalloffset__"’, ‘"__dictoffset__"’ and
     ‘"__weaklistoffset__"’.

 -- C Função: *note PyObject: 5d5. *PyMember_GetOne (const char
          *obj_addr, struct PyMemberDef *m)
     ' Parte da *note ABI Estável: 76a.'  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: 76a.'  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.13.3.4 Member flags
.....................

The following flags can be used with *note PyMemberDef.flags: 4d8d.:

 -- C Macro: Py_READONLY

     Not writable.

 -- C Macro: Py_AUDIT_READ

     Emit an ‘object.__getattr__’ *note audit event: 1b14. before
     reading.

 -- C Macro: Py_RELATIVE_OFFSET

     Indicates that the *note offset: 534d. 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: 4d73. *note slot:
     4f26. when creating a class using negative *note basicsize: 75f.
     It is mandatory in that case.

     This flag is only used in *note PyType_Slot: 4f26.  When setting
     *note tp_members: 4d73. during class creation, Python clears it and
     sets *note PyMemberDef.offset: 534d. 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: 7a4.; ‘WRITE_RESTRICTED’ does nothing.

Alterado na versão 3.12: The ‘READONLY’ macro was renamed to *note
Py_READONLY: 7a3.  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.13.3.5 Member types
.....................

*note PyMemberDef.type: 4d8c. 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: 198. or *note
ValueError: 2ea. is raised.

Unless marked (D), attributes defined this way cannot be deleted using
e.g.  *note del: 1a4f. or *note delattr(): 2445.

Macro name                           Tipo em C                         Tipo em Python
                                                                       
--------------------------------------------------------------------------------------------------
                                                                       
 -- C Macro: Py_T_BYTE               char                              *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_SHORT              short                             *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_INT                int                               *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_LONG               long                              *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_LONGLONG           long long                         *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_UBYTE              unsigned char                     *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_UINT               unsigned int                      *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_USHORT             unsigned short                    *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_ULONG              unsigned long                     *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_ULONGLONG          unsigned long long                *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_PYSSIZET           *note Py_ssize_t: c49.            *note int: 19b.
                                                                       
                                                                       
 -- C Macro: Py_T_FLOAT              float                             *note float: 196.
                                                                       
                                                                       
 -- C Macro: Py_T_DOUBLE             double                            *note float: 196.
                                                                       
                                                                       
 -- C Macro: Py_T_BOOL               char (escrito como 0 ou 1)        *note bool: 3c0.
                                                                       
                                                                       
 -- C Macro: Py_T_STRING             const char* (*)                   *note str: 169. (RO)
                                                                       
                                                                       
 -- C Macro: Py_T_STRING_INPLACE     const char[] (*)                  *note str: 169. (RO)
                                                                       
                                                                       
 -- C Macro: Py_T_CHAR               char (0-127)                      *note str: 169. (**)
                                                                       
                                                                       
 -- C Macro: Py_T_OBJECT_EX          *note PyObject: 5d5.*             *note object: c72. (D)
                                                                       

     (*): 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: 7a3.

     (D): pode ser deletado, neste caso o ponteiro é definido para
     ‘NULL’.  Ler um ponteiro ‘NULL’ levanta uma exceção *note
     AttributeError: 5e4.

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: 7a3.


File: python.info,  Node: Defining Getters and Setters,  Prev: Member types,  Up: Accessing attributes of extension types

7.13.3.6 Defining Getters and Setters
.....................................

 -- C Tipo: type PyGetSetDef
     ' Parte da *note ABI Estável: 76a. (incluindo todos os membros).'
     Structure to define property-like access for a type.  See also
     description of the *note PyTypeObject.tp_getset: 4d78. slot.

      -- C Membro: const char *name

          attribute name

      -- C Membro: *note getter: 4f81. get

          C function to get the attribute.

      -- C Membro: *note setter: 4f8f. 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: 5d5. *(*getter)(*note PyObject:
          5d5.*, void*)
     ' Parte da *note ABI Estável: 76a.'  The ‘get’ function takes one
     *note PyObject: 5d5.* 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: 5d5.*, *note PyObject:
          5d5.*, void*)
     ' Parte da *note ABI Estável: 76a.'  ‘set’ functions take two *note
     PyObject: 5d5.* 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: Type Object Structures,  Next: Suporte a Coleta Cíclica de Lixo,  Prev: Estruturas comuns de objetos,  Up: Suporte a implementação de Objetos

7.13.4 Type Object Structures
-----------------------------

Perhaps one of the most important structures of the Python object system
is the structure that defines a new type: the *note PyTypeObject: c8f.
structure.  Type objects can be handled using any of the ‘PyObject_*’ or
‘PyType_*’ functions, but do not offer much that’s interesting to most
Python applications.  These objects are fundamental to how objects
behave, so they are very important to the interpreter itself and to any
extension module that implements new types.

Os objetos de 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: 536a.
fornece uma visão geral do significado e uso de *note PyTypeObject: c8f.

* 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<39>.


File: python.info,  Node: Referências rápidas,  Next: PyTypeObject Definition,  Up: Type Object Structures

7.13.4.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.13.4.2 “slots tp”
...................

Slot de PyTypeObject   *note Tipo: 536e.      métodos/atributos      Info
(1)                                           especiais              (2)
                                                                     
---------------------------------------------------------------------------------------------
                                                                     
O                      T                      D                      I
                                                                     
                                                                                       
<R>                    const char *           __name__               X     X
*note tp_name: 1b95.                                                       

*note tp_basicsize: b74.*note Py_ssize_t: c49.                       X     X           X
                                                                                       
                                                                                       
*note tp_itemsize: 2252.*note Py_ssize_t: c49.                             X           X
                                                                                       
                                                                                       
*note tp_dealloc: 4d5d.*note destructor: 4f7c.                       X     X           X
                                                                                       
                                                                                       
*note tp_vectorcall_offset: 5055.*note Py_ssize_t: c49.                    X           X
                                                                                       
                                                                                       
(*note tp_getattr: 4d8f.)*note getattrfunc: 4f7d.__getattribute__,                     G
                                              __getattr__                              
                                              
                                                                                       
(*note tp_setattr: 4d90.)*note setattrfunc: 4f8d.__setattr__,                          G
                                              __delattr__                              
                                              
                                                                                       
*note tp_as_async: 10c5.*note PyAsyncMethods: 50b4.*note sub-slots: 536f.              %
                       *                                                               
                       
                                                                                       
*note tp_repr: 4d86.   *note reprfunc: 4f8b.  __repr__               X     X           X
                                                                                       
                                                                                       
*note tp_as_number: b78.*note PyNumberMethods: 160f.*note sub-slots: 536f.             %
                       *                                                               
                       
                                                                                       
*note tp_as_sequence: 5370.*note PySequenceMethods: 4d96.*note sub-slots: 536f.        %
                       *                                                               
                       
                                                                                       
*note tp_as_mapping: 5371.*note PyMappingMethods: 4d97.*note sub-slots: 536f.          %
                       *                                                               
                       
                                                                                       
*note tp_hash: 4d98.   *note hashfunc: 4f82.  __hash__               X                 G
                                                                                       
                                                                                       
*note tp_call: 770.    *note ternaryfunc: 4f92.__call__                    X           X
                                                                                       
                                                                                       
*note tp_str: 4d87.    *note reprfunc: 4f8b.  __str__                X                 X
                                                                                       
                                                                                       
*note tp_getattro: 19a2.*note getattrofunc: 4f7e.__getattribute__,   X     X           G
                                              __getattr__                              
                                              
                                                                                       
*note tp_setattro: 4d8a.*note setattrofunc: 4f8e.__setattr__,        X     X           G
                                              __delattr__                              
                                              
                                                                                       
*note tp_as_buffer: b76.*note PyBufferProcs: 50bb.*note sub-slots: 536f.               %
                       *                                                               
                       
                                                                                       
*note tp_flags: 1b60.  unsigned long                                 X     X           ?
                                                                                       
                                                                                       
*note tp_doc: 4d6c.    const char *           __doc__                X     X
                                                                           
                                                                                       
*note tp_traverse: 977.*note traverseproc: 4f93.                           X           G
                                                                                       
                                                                                       
*note tp_clear: 4d84.  *note inquiry: 4f84.                                X           G
                                                                                       
                                                                                       
*note tp_richcompare: 4d92.*note richcmpfunc: 4f8c.__lt__, __le__,   X                 G
                                              __eq__, __ne__,                          
                                              __gt__, __ge__
                                              
                                                                                       
(*note tp_weaklistoffset: b75.)*note Py_ssize_t: c49.                      X           ?
                                                                                       
                                                                                       
*note tp_iter: 16dd.   *note getiterfunc: 4f80.__iter__                                X
                                                                                       
                                                                                       
*note tp_iternext: 16de.*note iternextfunc: 4f85.__next__                              X
                                                                                       
                                                                                       
*note tp_methods: 4d75.*note PyMethodDef: 16c5.                      X     X
                       []                                                  
                       
                                                                                       
*note tp_members: 4d73.*note PyMemberDef: 766.                             X
                       []                                                  
                       
                                                                                       
*note tp_getset: 4d78. *note PyGetSetDef: da6.                       X     X
                       []                                                  
                       
                                                                                       
*note tp_base: 4d7c.   *note PyTypeObject: c8f.__base__                          X
                       *                                                         
                       
                                                                                       
*note tp_dict: 19cb.   *note PyObject: 5d5.   __dict__                           ?
                       *                                                         
                       
                                                                                       
*note tp_descr_get: 5372.*note descrgetfunc: 4f7a.__get__                              X
                                                                                       
                                                                                       
*note tp_descr_set: 1b99.*note descrsetfunc: 4f7b.__set__, __delete__                  X
                                                                                       
                                                                                       
(*note tp_dictoffset: 50b6.)*note Py_ssize_t: c49.                         X           ?
                                                                                       
                                                                                       
*note tp_init: 796.    *note initproc: 4f83.  __init__               X     X           X
                                                                                       
                                                                                       
*note tp_alloc: 4d71.  *note allocfunc: 4f78.                        X           ?     ?
                                                                                       
                                                                                       
*note tp_new: 794.     *note newfunc: 4f87.   __new__                X     X     ?     ?
                                                                                       
                                                                                       
*note tp_free: 4d70.   *note freefunc: 51e5.                         X     X     ?     ?
                                                                                       
                                                                                       
*note tp_is_gc: 5373.  *note inquiry: 4f84.                                X           X
                                                                                       
                                                                                       
<*note tp_bases: 5374.>*note PyObject: 5d5.   __bases__                          ~
                       *                                                         
                       
                                                                                       
<*note tp_mro: 50b8.>  *note PyObject: 5d5.   __mro__                            ~
                       *                                                         
                       
                                                                                       
[*note tp_cache: 50b9.]*note PyObject: 5d5.
                       *
                       
                                                                                       
[*note tp_subclasses: 787.]void *             __subclasses__
                                              
                                                                                       
[*note tp_weaklist: 50ba.]*note PyObject: 5d5.
                       *
                       
                                                                                       
(*note tp_del: 5375.)  *note destructor: 4f7c.
                       
                                                                                       
[*note tp_version_tag: 5376.]unsigned int
                       
                                                                                       
*note tp_finalize: c90.*note destructor: 4f7c.__del__                                  X
                                                                                       
                                                                                       
*note tp_vectorcall: 18d1.*note vectorcallfunc: 76e.
                       
                                                                                       
[*note tp_watched: 5377.]unsigned char
                       

   ---------- Footnotes ----------

   (1) '()': A slot name in parentheses indicates it is (effectively)
deprecated.

'<>': 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: 4df2.

'“T”': set on *note PyType_Type: 764.

'“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.13.4.3 sub-slots
..................

Slot                           *note Tipo: 536e.     special
                                                     methods
                                                     
----------------------------------------------------------------------
                                                     
*note am_await: 5379.          *note unaryfunc: 4f94.__await__
                                                     
                                                     
*note am_aiter: 537a.          *note unaryfunc: 4f94.__aiter__
                                                     
                                                     
*note am_anext: 537b.          *note unaryfunc: 4f94.__anext__
                                                     
                                                     
*note am_send: 537c.           *note sendfunc: 537d.
                               
                                                     
                                                     
*note nb_add: 50ad.            *note binaryfunc: 4f79.__add__
                                                     __radd__
                                                     
                                                     
*note nb_inplace_add: 537e.    *note binaryfunc: 4f79.__iadd__
                                                     
                                                     
*note nb_subtract: 537f.       *note binaryfunc: 4f79.__sub__
                                                     __rsub__
                                                     
                                                     
*note nb_inplace_subtract: 5380.*note binaryfunc: 4f79.__isub__
                                                     
                                                     
*note nb_multiply: 5381.       *note binaryfunc: 4f79.__mul__
                                                     __rmul__
                                                     
                                                     
*note nb_inplace_multiply: 5382.*note binaryfunc: 4f79.__imul__
                                                     
                                                     
*note nb_remainder: 5383.      *note binaryfunc: 4f79.__mod__
                                                     __rmod__
                                                     
                                                     
*note nb_inplace_remainder: 5384.*note binaryfunc: 4f79.__imod__
                                                     
                                                     
*note nb_divmod: 5385.         *note binaryfunc: 4f79.__divmod__
                                                     __rdivmod__
                                                     
                                                     
*note nb_power: 5386.          *note ternaryfunc: 4f92.__pow__
                                                     __rpow__
                                                     
                                                     
*note nb_inplace_power: 5387.  *note ternaryfunc: 4f92.__ipow__
                                                     
                                                     
*note nb_negative: 5388.       *note unaryfunc: 4f94.__neg__
                                                     
                                                     
*note nb_positive: 5389.       *note unaryfunc: 4f94.__pos__
                                                     
                                                     
*note nb_absolute: 538a.       *note unaryfunc: 4f94.__abs__
                                                     
                                                     
*note nb_bool: 538b.           *note inquiry: 4f84.  __bool__
                                                     
                                                     
*note nb_invert: 538c.         *note unaryfunc: 4f94.__invert__
                                                     
                                                     
*note nb_lshift: 538d.         *note binaryfunc: 4f79.__lshift__
                                                     __rlshift__
                                                     
                                                     
*note nb_inplace_lshift: 538e. *note binaryfunc: 4f79.__ilshift__
                                                     
                                                     
*note nb_rshift: 538f.         *note binaryfunc: 4f79.__rshift__
                                                     __rrshift__
                                                     
                                                     
*note nb_inplace_rshift: 5390. *note binaryfunc: 4f79.__irshift__
                                                     
                                                     
*note nb_and: 5391.            *note binaryfunc: 4f79.__and__
                                                     __rand__
                                                     
                                                     
*note nb_inplace_and: 5392.    *note binaryfunc: 4f79.__iand__
                                                     
                                                     
*note nb_xor: 5393.            *note binaryfunc: 4f79.__xor__
                                                     __rxor__
                                                     
                                                     
*note nb_inplace_xor: 5394.    *note binaryfunc: 4f79.__ixor__
                                                     
                                                     
*note nb_or: 5395.             *note binaryfunc: 4f79.__or__ __ror__
                                                     
                                                     
*note nb_inplace_or: 5396.     *note binaryfunc: 4f79.__ior__
                                                     
                                                     
*note nb_int: 5397.            *note unaryfunc: 4f94.__int__
                                                     
                                                     
*note nb_reserved: 5398.       void *
                               
                                                     
*note nb_float: 5399.          *note unaryfunc: 4f94.__float__
                                                     
                                                     
*note nb_floor_divide: 539a.   *note binaryfunc: 4f79.__floordiv__
                                                     
                                                     
*note nb_inplace_floor_divide: 539b.*note binaryfunc: 4f79.__ifloordiv__
                                                     
                                                     
*note nb_true_divide: 539c.    *note binaryfunc: 4f79.__truediv__
                                                     
                                                     
*note nb_inplace_true_divide: 539d.*note binaryfunc: 4f79.__itruediv__
                                                     
                                                     
*note nb_index: 160e.          *note unaryfunc: 4f94.__index__
                                                     
                                                     
*note nb_matrix_multiply: 539e.*note binaryfunc: 4f79.__matmul__
                                                     __rmatmul__
                                                     
                                                     
*note nb_inplace_matrix_multiply: 539f.*note binaryfunc: 4f79.__imatmul__
                                                     
                                                     
                                                     
*note mp_length: 53a0.         *note lenfunc: 4f86.  __len__
                                                     
                                                     
*note mp_subscript: 1bd0.      *note binaryfunc: 4f79.__getitem__
                                                     
                                                     
*note mp_ass_subscript: 53a1.  *note objobjargproc: 4f88.__setitem__,
                                                     __delitem__
                                                     
                                                     
                                                     
*note sq_length: 50b5.         *note lenfunc: 4f86.  __len__
                                                     
                                                     
*note sq_concat: 53a2.         *note binaryfunc: 4f79.__add__
                                                     
                                                     
*note sq_repeat: 53a3.         *note ssizeargfunc: 4f90.__mul__
                                                     
                                                     
*note sq_item: 1bcf.           *note ssizeargfunc: 4f90.__getitem__
                                                     
                                                     
*note sq_ass_item: 53a4.       *note ssizeobjargproc: 4f91.__setitem__
                                                     __delitem__
                                                     
                                                     
*note sq_contains: 53a5.       *note objobjproc: 4f89.__contains__
                                                     
                                                     
*note sq_inplace_concat: 53a6. *note binaryfunc: 4f79.__iadd__
                                                     
                                                     
*note sq_inplace_repeat: 53a7. *note ssizeargfunc: 4f90.__imul__
                                                     
                                                     
                                                     
*note bf_getbuffer: 95b.       *note getbufferproc(): 4f7f.__buffer__
                                                     
                                                     
*note bf_releasebuffer: 95c.   *note releasebufferproc(): 4f8a.__release_buffer__
                                                     


File: python.info,  Node: slot typedefs,  Prev: sub-slots,  Up: Referências rápidas

7.13.4.4 slot typedefs
......................

typedef                           Parameter Types                   Return Type
                                                                    
-----------------------------------------------------------------------------------------------
                                                                    
*note allocfunc: 4f78.                 *note PyTypeObject: c8f. *   *note PyObject: 5d5. *
                                       *note Py_ssize_t: c49.       
                                  
                                                                    
*note destructor: 4f7c.           *note PyObject: 5d5. *            void
                                                                    
                                                                    
*note freefunc: 51e5.             void *                            void
                                                                    
                                                                    
*note traverseproc: 4f93.              *note PyObject: 5d5. *       int
                                       *note visitproc: 4f95.       
                                       void *
                                  
                                                                    
*note newfunc: 4f87.                   *note PyTypeObject: c8f. *   *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note initproc: 4f83.                  *note PyObject: 5d5. *       int
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note reprfunc: 4f8b.             *note PyObject: 5d5. *            *note PyObject: 5d5. *
                                                                    
                                                                    
*note getattrfunc: 4f7d.               *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       const char *                 
                                  
                                                                    
*note setattrfunc: 4f8d.               *note PyObject: 5d5. *       int
                                       const char *                 
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note getattrofunc: 4f7e.              *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                  
                                                                    
*note setattrofunc: 4f8e.              *note PyObject: 5d5. *       int
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note descrgetfunc: 4f7a.              *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note descrsetfunc: 4f7b.              *note PyObject: 5d5. *       int
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note hashfunc: 4f82.             *note PyObject: 5d5. *            Py_hash_t
                                                                    
                                                                    
*note richcmpfunc: 4f8c.               *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                       int
                                  
                                                                    
*note getiterfunc: 4f80.          *note PyObject: 5d5. *            *note PyObject: 5d5. *
                                                                    
                                                                    
*note iternextfunc: 4f85.         *note PyObject: 5d5. *            *note PyObject: 5d5. *
                                                                    
                                                                    
*note lenfunc: 4f86.              *note PyObject: 5d5. *            *note Py_ssize_t: c49.
                                                                    
                                                                    
*note getbufferproc: 4f7f.             *note PyObject: 5d5. *       int
                                       *note Py_buffer: 951. *      
                                       int
                                  
                                                                    
*note releasebufferproc: 4f8a.         *note PyObject: 5d5. *       void
                                       *note Py_buffer: 951. *      
                                  
                                                                    
*note inquiry: 4f84.              *note PyObject: 5d5. *            int
                                                                    
                                                                    
*note unaryfunc: 4f94.                 *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                                                    
                                                                    
*note binaryfunc: 4f79.                *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                  
                                                                    
*note ternaryfunc: 4f92.               *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note ssizeargfunc: 4f90.              *note PyObject: 5d5. *       *note PyObject: 5d5. *
                                       *note Py_ssize_t: c49.       
                                  
                                                                    
*note ssizeobjargproc: 4f91.           *note PyObject: 5d5. *       int
                                       *note Py_ssize_t: c49.       
                                       *note PyObject: 5d5. *
                                  
                                                                    
*note objobjproc: 4f89.                *note PyObject: 5d5. *       int
                                       *note PyObject: 5d5. *       
                                  
                                                                    
*note objobjargproc: 4f88.             *note PyObject: 5d5. *       int
                                       *note PyObject: 5d5. *       
                                       *note PyObject: 5d5. *
                                  

See *note Slot Type typedefs: 53a9. below for more detail.


File: python.info,  Node: PyTypeObject Definition,  Next: PyObject Slots,  Prev: Referências rápidas,  Up: Type Object Structures

7.13.4.5 PyTypeObject Definition
................................

The structure definition for *note PyTypeObject: c8f. 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 */
         PyMethodDef *tp_methods;
         PyMemberDef *tp_members;
         PyGetSetDef *tp_getset;
         // Strong reference on a heap type, borrowed reference on a static type
         PyTypeObject *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; /* no longer used */
         void *tp_subclasses;  /* for static builtin types this is an index */
         PyObject *tp_weaklist; /* not used for static builtin types */
         destructor tp_del;

         /* Type attribute cache version tag. Added in version 2.6.
          * If zero, the cache is invalid and must be initialized.
          */
         unsigned int tp_version_tag;

         destructor tp_finalize;
         vectorcallfunc tp_vectorcall;

         /* bitset of which type-watchers care about this type */
         unsigned char tp_watched;

         /* Number of tp_version_tag values used.
          * Set to _Py_ATTR_CACHE_UNUSED if the attribute cache is
          * disabled for this type (e.g. due to custom MRO entries).
          * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere).
          */
         uint16_t tp_versions_used;
     } PyTypeObject;


File: python.info,  Node: PyObject Slots,  Next: PyVarObject Slots,  Prev: PyTypeObject Definition,  Up: Type Object Structures

7.13.4.6 PyObject Slots
.......................

The type object structure extends the *note PyVarObject: 4566.
structure.  The *note ob_size: 4f66. field is used for dynamic types
(created by ‘type_new()’, usually called from a class statement).  Note
that *note PyType_Type: 764. (the metatype) initializes *note
tp_itemsize: 2252, which means that its instances (i.e.  type objects)
'must' have the *note ob_size: 4f66. field.

*note PyObject.ob_refcnt: a95.

     The type object’s reference count is initialized to ‘1’ by the
     ‘PyObject_HEAD_INIT’ macro.  Note that for *note statically
     allocated type objects: 978, the type’s instances (objects whose
     *note ob_type: 4d6e. points back to the type) do 'not' count as
     references.  But for *note dynamically allocated type objects: b54,
     the instances 'do' count as references.

     'Inheritance:'

     This field is not inherited by subtypes.

*note PyObject.ob_type: 4d6e.

     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(): 975. checks if *note ob_type: 4d6e. is
     ‘NULL’, and if so, initializes it to the *note ob_type: 4d6e. field
     of the base class.  *note PyType_Ready(): 975. 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: Type Object Structures

7.13.4.7 PyVarObject Slots
..........................

*note PyVarObject.ob_size: 4f66.

     For *note statically allocated type objects: 978, this should be
     initialized to zero.  For *note dynamically allocated type objects:
     b54, this field has a special internal meaning.

     This field should be accessed using the *note Py_SIZE(): 97a.
     macro.

     'Inheritance:'

     This field is not inherited by subtypes.


File: python.info,  Node: PyTypeObject Slots,  Next: Static Types,  Prev: PyVarObject Slots,  Up: Type Object Structures

7.13.4.8 PyTypeObject Slots
...........................

Each slot has a section describing inheritance.  If *note
PyType_Ready(): 975. 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: 4df2. and *note PyType_Type: 764.
effectively act as defaults.)

 -- C Membro: const char **note PyTypeObject: c8f.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: 1b95. initializer ‘"P.Q.M.T"’.

     For *note dynamically allocated type objects: b54, 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: 978, the 'tp_name'
     field should contain a dot.  Everything before the last dot is made
     accessible as the *note __module__: 60b. attribute, and everything
     after the last dot is made accessible as the *note __name__: 1699.
     attribute.

     If no dot is present, the entire *note tp_name: 1b95. field is made
     accessible as the *note __name__: 1699. attribute, and the *note
     __module__: 60b. 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(): c8f. (other than potentially *note
     tp_itemsize: 2252.).

     'Inheritance:'

     This field is not inherited by subtypes.

 -- C Membro: *note Py_ssize_t: c49. *note PyTypeObject:
          c8f.tp_basicsize
 -- C Membro: *note Py_ssize_t: c49. *note PyTypeObject: c8f.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(): 19e4.)

     For a type with variable-length instances, the instances must have
     an *note ob_size: 4f66. 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(): b73. will take the value of
     N as an argument, and store in the instance’s *note ob_size: 4f66.
     field.  Note that the *note ob_size: 4f66. field may later be used
     for other purposes.  For example, *note int: 19b. instances use the
     bits of *note ob_size: 4f66. in an implementation-defined way; the
     underlying storage and its size should be accessed using *note
     PyLong_Export(): 3a5.

          Nota: The *note ob_size: 4f66. field should be accessed using
          the *note Py_SIZE(): 97a. and *note Py_SET_SIZE(): 97b.
          macros.

     Also, the presence of an *note ob_size: 4f66. field in the instance
     layout doesn’t mean that the instance structure is variable-length.
     For example, the *note list: 24c. type has fixed-length instances,
     yet those instances have a *note ob_size: 4f66. field.  (As with
     *note int: 19b, avoid reading lists’ ‘ob_size’ directly.  Call
     *note PyList_Size(): 160b. instead.)

     The ‘tp_basicsize’ includes size needed for data of the type’s
     *note tp_base: 4d7c, 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: c72, this struct
     must include *note PyObject: 5d5. or *note PyVarObject: 4566.
     (depending on whether *note ob_size: 4f66. should be included).
     These are usually defined by the macro *note PyObject_HEAD: 14d9.
     or *note PyObject_VAR_HEAD: 5342, respectively.

     The basic size does not include the GC header size, as that header
     is not part of *note PyObject_HEAD: 14d9.

     For cases where struct used to declare the base type is unknown,
     see *note PyType_Spec.basicsize: 75f. and *note
     PyType_FromMetaclass(): 767.

     Notes about alignment:

        - ‘tp_basicsize’ must be a multiple of ‘_Alignof(PyObject)’.
          When using ‘sizeof’ on a ‘struct’ that includes *note
          PyObject_HEAD: 14d9, 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(): 975. 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: 2252, it is
     generally not safe to set *note tp_itemsize: 2252. to a different
     non-zero value in a subtype (though this depends on the
     implementation of the base type).

 -- C Membro: *note destructor: 4f7c. *note PyTypeObject: c8f.tp_dealloc

     A pointer to the instance destructor function.  The function
     signature is:

          void tp_dealloc(PyObject *self);

     The destructor function should remove all references which the
     instance owns (e.g., call *note Py_CLEAR(): 78d.), free all memory
     buffers owned by the instance, and call the type’s *note tp_free:
     4d70. function to free the object itself.

     If you may call functions that may set the error indicator, you
     must use *note PyErr_GetRaisedException(): 426. and *note
     PyErr_SetRaisedException(): 429. to ensure you don’t clobber a
     preexisting error indicator (the deallocation could have occurred
     while processing a different error):

          static void
          foo_dealloc(foo_object *self)
          {
              PyObject *et, *ev, *etb;
              PyObject *exc = PyErr_GetRaisedException();
              ...
              PyErr_SetRaisedException(exc);
          }

     The dealloc handler itself must not raise an exception; if it hits
     an error case it should call *note PyErr_FormatUnraisable(): 5e5.
     to log (and clear) an unraisable exception.

     No guarantees are made about when an object is destroyed, except:

        * Python will destroy an object immediately or some time after
          the final reference to the object is deleted, unless its
          finalizer (*note tp_finalize: c90.) subsequently resurrects
          the object.

        * An object will not be destroyed while it is being
          automatically finalized (*note tp_finalize: c90.) or
          automatically cleared (*note tp_clear: 4d84.).

     CPython currently destroys an object immediately from *note
     Py_DECREF(): 785. when the new reference count is zero, but this
     may change in a future version.

     It is recommended to call *note
     PyObject_CallFinalizerFromDealloc(): 5338. at the beginning of
     ‘tp_dealloc’ to guarantee that the object is always finalized
     before destruction.

     If the type supports garbage collection (the *note
     Py_TPFLAGS_HAVE_GC: 976. flag is set), the destructor should call
     *note PyObject_GC_UnTrack(): 16f3. before clearing any member
     fields.

     It is permissible to call *note tp_clear: 4d84. from ‘tp_dealloc’
     to reduce code duplication and to guarantee that the object is
     always cleared before destruction.  Beware that ‘tp_clear’ might
     have already been called.

     If the type is heap allocated (*note Py_TPFLAGS_HEAPTYPE: aa2.),
     the deallocator should release the owned reference to its type
     object (via *note Py_DECREF(): 785.) after calling the type
     deallocator.  See the example code below.:

          static void
          foo_dealloc(PyObject *op)
          {
             foo_object *self = (foo_object *) op;
             PyObject_GC_UnTrack(self);
             Py_CLEAR(self->ref);
             Py_TYPE(self)->tp_free(self);
          }

     ‘tp_dealloc’ must leave the exception status unchanged.  If it
     needs to call something that might raise an exception, the
     exception state must be backed up first and restored later (after
     logging any exceptions with *note PyErr_WriteUnraisable(): 5e6.).

     Exemplo:

          static void
          foo_dealloc(PyObject *self)
          {
              PyObject *exc = PyErr_GetRaisedException();

              if (PyObject_CallFinalizerFromDealloc(self) < 0) {
                  // self was resurrected.
                  goto done;
              }

              PyTypeObject *tp = Py_TYPE(self);

              if (tp->tp_flags & Py_TPFLAGS_HAVE_GC) {
                  PyObject_GC_UnTrack(self);
              }

              // Optional, but convenient to avoid code duplication.
              if (tp->tp_clear && tp->tp_clear(self) < 0) {
                  PyErr_WriteUnraisable(self);
              }

              // Any additional destruction goes here.

              tp->tp_free(self);
              self = NULL;  // In case PyErr_WriteUnraisable() is called below.

              if (tp->tp_flags & Py_TPFLAGS_HEAPTYPE) {
                  Py_CLEAR(tp);
              }

          done:
              // Optional, if something was called that might have raised an
              // exception.
              if (PyErr_Occurred()) {
                  PyErr_WriteUnraisable(self);
              }
              PyErr_SetRaisedException(exc);
          }

     ‘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 with an
     *note attached thread state: 4d72.  However, if the object being
     destroyed in turn destroys objects from some other 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.

     Ver também
     ..........

     *note Ciclo de vida do objeto: 5334. for details about how this
     slot relates to other slots.

 -- C Membro: *note Py_ssize_t: c49. *note PyTypeObject:
          c8f.tp_vectorcall_offset

     An optional offset to a per-instance function that implements
     calling the object using the *note vectorcall protocol: 769, a more
     efficient alternative of the simpler *note tp_call: 770.

     This field is only used if the flag *note
     Py_TPFLAGS_HAVE_VECTORCALL: 76b. is set.  If so, this must be a
     positive integer containing the offset in the instance of a *note
     vectorcallfunc: 76e. pointer.

     The 'vectorcallfunc' pointer may be ‘NULL’, in which case the
     instance behaves as if *note Py_TPFLAGS_HAVE_VECTORCALL: 76b. was
     not set: calling the instance falls back to *note tp_call: 770.

     Any class that sets ‘Py_TPFLAGS_HAVE_VECTORCALL’ must also set
     *note tp_call: 770. and make sure its behaviour is consistent with
     the 'vectorcallfunc' function.  This can be done by setting
     'tp_call' to *note PyVectorcall_Call(): 76d.

     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: b54. to implement the
     vectorcall protocol.  When a user sets *note __call__: 76f. 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: 76b. flag.

     'Inheritance:'

     This field is always inherited.  However, the *note
     Py_TPFLAGS_HAVE_VECTORCALL: 76b. flag is not always inherited.  If
     it’s not set, then the subclass won’t use *note vectorcall: 769,
     except when *note PyVectorcall_Call(): 76d. is explicitly called.

 -- C Membro: *note getattrfunc: 4f7d. *note PyTypeObject:
          c8f.tp_getattr

     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: 19a2.
     function, but taking a C string instead of a Python string object
     to give the attribute name.

     'Inheritance:'

     Group: *note tp_getattr: 4d8f, *note tp_getattro: 19a2.

     This field is inherited by subtypes together with *note
     tp_getattro: 19a2.: a subtype inherits both *note tp_getattr: 4d8f.
     and *note tp_getattro: 19a2. from its base type when the subtype’s
     *note tp_getattr: 4d8f. and *note tp_getattro: 19a2. are both
     ‘NULL’.

 -- C Membro: *note setattrfunc: 4f8d. *note PyTypeObject:
          c8f.tp_setattr

     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: 4d8a.
     function, but taking a C string instead of a Python string object
     to give the attribute name.

     'Inheritance:'

     Group: *note tp_setattr: 4d90, *note tp_setattro: 4d8a.

     This field is inherited by subtypes together with *note
     tp_setattro: 4d8a.: a subtype inherits both *note tp_setattr: 4d90.
     and *note tp_setattro: 4d8a. from its base type when the subtype’s
     *note tp_setattr: 4d90. and *note tp_setattro: 4d8a. are both
     ‘NULL’.

 -- C Membro: *note PyAsyncMethods: 50b4. **note PyTypeObject:
          c8f.tp_as_async

     Pointer to an additional structure that contains fields relevant
     only to objects which implement *note awaitable: 4c3. and *note
     asynchronous iterator: 4c1. protocols at the C-level.  See *note
     Async Object Structures: 53ae. for details.

     Adicionado na versão 3.5: Formerly known as ‘tp_compare’ and
     ‘tp_reserved’.

     'Inheritance:'

     The *note tp_as_async: 10c5. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note reprfunc: 4f8b. *note PyTypeObject: c8f.tp_repr

     An optional pointer to a function that implements the built-in
     function *note repr(): 1c1.

     The signature is the same as for *note PyObject_Repr(): 1225.:

          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(): 49d, 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: 160f. **note PyTypeObject:
          c8f.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: 53af.

     'Inheritance:'

     The *note tp_as_number: b78. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note PySequenceMethods: 4d96. **note PyTypeObject:
          c8f.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: 53b0.

     'Inheritance:'

     The *note tp_as_sequence: 5370. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note PyMappingMethods: 4d97. **note PyTypeObject:
          c8f.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: 53b1.

     'Inheritance:'

     The *note tp_as_mapping: 5371. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note hashfunc: 4f82. *note PyTypeObject: c8f.tp_hash

     An optional pointer to a function that implements the built-in
     function *note hash(): 7f6.

     The signature is the same as for *note PyObject_Hash(): 433.:

          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: 4d92. is
     not set), an attempt to take the hash of the object raises *note
     TypeError: 198.  This is the same as setting it to *note
     PyObject_HashNotImplemented(): 15b8.

     This field can be set explicitly to *note
     PyObject_HashNotImplemented(): 15b8. 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(): 15b8.

     'Inheritance:'

     Group: *note tp_hash: 4d98, *note tp_richcompare: 4d92.

     This field is inherited by subtypes together with *note
     tp_richcompare: 4d92.: a subtype inherits both of *note
     tp_richcompare: 4d92. and *note tp_hash: 4d98, when the subtype’s
     *note tp_richcompare: 4d92. and *note tp_hash: 4d98. are both
     ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4df2. uses *note PyObject_GenericHash():
     600.

 -- C Membro: *note ternaryfunc: 4f92. *note PyTypeObject: c8f.tp_call

     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(): 631.:

          PyObject *tp_call(PyObject *self, PyObject *args, PyObject *kwargs);

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note reprfunc: 4f8b. *note PyTypeObject: c8f.tp_str

     An optional pointer to a function that implements the built-in
     operation *note str(): 169.  (Note that *note str: 169. is a type
     now, and *note str(): 169. calls the constructor for that type.
     This constructor calls *note PyObject_Str(): 1226. to do the actual
     work, and *note PyObject_Str(): 1226. will call this handler.)

     The signature is the same as for *note PyObject_Str(): 1226.:

          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(): 116b. function.

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     When this field is not set, *note PyObject_Repr(): 1225. is called
     to return a string representation.

 -- C Membro: *note getattrofunc: 4f7e. *note PyTypeObject:
          c8f.tp_getattro

     An optional pointer to the get-attribute function.

     The signature is the same as for *note PyObject_GetAttr(): 5e0.:

          PyObject *tp_getattro(PyObject *self, PyObject *attr);

     It is usually convenient to set this field to *note
     PyObject_GenericGetAttr(): 4eec, which implements the normal way of
     looking for object attributes.

     'Inheritance:'

     Group: *note tp_getattr: 4d8f, *note tp_getattro: 19a2.

     This field is inherited by subtypes together with *note tp_getattr:
     4d8f.: a subtype inherits both *note tp_getattr: 4d8f. and *note
     tp_getattro: 19a2. from its base type when the subtype’s *note
     tp_getattr: 4d8f. and *note tp_getattro: 19a2. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4df2. uses *note
     PyObject_GenericGetAttr(): 4eec.

 -- C Membro: *note setattrofunc: 4f8e. *note PyTypeObject:
          c8f.tp_setattro

     An optional pointer to the function for setting and deleting
     attributes.

     The signature is the same as for *note PyObject_SetAttr(): 4ef5.:

          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(): 4eed, which implements the normal way of
     setting object attributes.

     'Inheritance:'

     Group: *note tp_setattr: 4d90, *note tp_setattro: 4d8a.

     This field is inherited by subtypes together with *note tp_setattr:
     4d90.: a subtype inherits both *note tp_setattr: 4d90. and *note
     tp_setattro: 4d8a. from its base type when the subtype’s *note
     tp_setattr: 4d90. and *note tp_setattro: 4d8a. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4df2. uses *note
     PyObject_GenericSetAttr(): 4eed.

 -- C Membro: *note PyBufferProcs: 50bb. **note PyTypeObject:
          c8f.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: 5077.

     'Inheritance:'

     The *note tp_as_buffer: b76. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: unsigned long *note PyTypeObject: c8f.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: b78, *note
     tp_as_sequence: 5370, *note tp_as_mapping: 5371, and *note
     tp_as_buffer: b76.) 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: 976. flag bit is
     inherited together with the *note tp_traverse: 977. and *note
     tp_clear: 4d84. fields, i.e.  if the *note Py_TPFLAGS_HAVE_GC: 976.
     flag bit is clear in the subtype and the *note tp_traverse: 977.
     and *note tp_clear: 4d84. fields in the subtype exist and have
     ‘NULL’ values.

     'Padrão:'

     *note PyBaseObject_Type: 4df2. 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: 1b60. field.  The macro *note PyType_HasFeature(): 1bf6.
     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(): 792.  In this case, the *note ob_type:
          4d6e. 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: 53b2. as they can form a reference cycle with
          their own module object.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_BASETYPE

          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(): 975.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_READYING

          This bit is set while *note PyType_Ready(): 975. is in the
          process of initializing the type object.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_HAVE_GC

          This bit is set when the object supports garbage collection.
          If this bit is set, memory for new instances (see *note
          tp_alloc: 4d71.) must be allocated using *note
          PyObject_GC_New: c8c. or *note PyType_GenericAlloc(): c55. and
          deallocated (see *note tp_free: 4d70.) using *note
          PyObject_GC_Del(): 16f1.  More information in section *note
          Suporte a Coleta Cíclica de Lixo: 53b2.

          'Inheritance:'

          Group: *note Py_TPFLAGS_HAVE_GC: 976, *note tp_traverse: 977,
          *note tp_clear: 4d84.

          The *note Py_TPFLAGS_HAVE_GC: 976. flag bit is inherited
          together with the *note tp_traverse: 977. and *note tp_clear:
          4d84. fields, i.e.  if the *note Py_TPFLAGS_HAVE_GC: 976. flag
          bit is clear in the subtype and the *note tp_traverse: 977.
          and *note tp_clear: 4d84. fields in the subtype exist and have
          ‘NULL’ values.

      -- C Macro: Py_TPFLAGS_DEFAULT

          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

          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: 3cc. flag set.  For extension types,
          it is inherited whenever *note tp_descr_get: 5372. is
          inherited.

      -- C Macro: Py_TPFLAGS_MANAGED_DICT

          This bit indicates that instances of the class have a *note
          __dict__: 772. attribute, and that the space for the
          dictionary is managed by the VM.

          If this flag is set, *note Py_TPFLAGS_HAVE_GC: 976. should
          also be set.

          The type traverse function must call *note
          PyObject_VisitManagedDict(): 601. and its clear function must
          call *note PyObject_ClearManagedDict(): 602.

          Adicionado na versão 3.12.

          'Inheritance:'

          This flag is inherited unless the *note tp_dictoffset: 50b6.
          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:
          b75. field is set in a superclass.

      -- C Macro: Py_TPFLAGS_ITEMS_AT_END

          Only usable with variable-size types, i.e.  ones with non-zero
          *note tp_itemsize: 2252.

          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

          These flags are used by functions such as *note
          PyLong_Check(): 50c7. 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(): 109c.
          Custom types that inherit from built-ins should have their
          *note tp_flags: 1b60. 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: c90. 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:
          c90. slot is always present in the type structure.

      -- C Macro: Py_TPFLAGS_HAVE_VECTORCALL

          This bit is set when the class implements the *note vectorcall
          protocol: 769.  See *note tp_vectorcall_offset: 5055. for
          details.

          'Inheritance:'

          This bit is inherited if *note tp_call: 770. is also
          inherited.

          Adicionado na versão 3.9.

          Alterado na versão 3.12: This flag is now removed from a class
          when the class’s *note __call__(): 76f. 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(): 975. automatically applies this flag to
          *note static types: 978.

          '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:
          794. 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(): 975. is
          called on the type.

          The flag is set automatically on *note static types: 978. if
          *note tp_base: 4d7c. is NULL or ‘&PyBaseObject_Type’ and *note
          tp_new: 794. is NULL.

          'Inheritance:'

          This flag is not inherited.  However, subclasses will not be
          instantiable unless they provide a non-NULL *note tp_new: 794.
          (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: 13b2.), do not use this flag.
               Instead, make *note tp_new: 794. 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:
          a04. block.  It is automatically set when registering or
          subclassing *note collections.abc.Mapping: abd, and unset when
          registering *note collections.abc.Sequence: 13c0.

               Nota: *note Py_TPFLAGS_MAPPING: 1b47. and *note
               Py_TPFLAGS_SEQUENCE: 1b48. 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: 1b48.

          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:
          a04. block.  It is automatically set when registering or
          subclassing *note collections.abc.Sequence: 13c0, and unset
          when registering *note collections.abc.Mapping: abd.

               Nota: *note Py_TPFLAGS_MAPPING: 1b47. and *note
               Py_TPFLAGS_SEQUENCE: 1b48. 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: 1b47.

          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(): 1a97.

               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: c8f.tp_doc

     An optional pointer to a NUL-terminated C string giving the
     docstring for this type object.  This is exposed as the *note
     __doc__: 1f4a. attribute on the type and instances of the type.

     'Inheritance:'

     This field is 'not' inherited by subtypes.

 -- C Membro: *note traverseproc: 4f93. *note PyTypeObject:
          c8f.tp_traverse

     An optional pointer to a traversal function for the garbage
     collector.  This is only used if the *note Py_TPFLAGS_HAVE_GC: 976.
     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: 53b2.

     The *note tp_traverse: 977. pointer is used by the garbage
     collector to detect reference cycles.  A typical implementation of
     a *note tp_traverse: 977. function simply calls *note Py_VISIT():
     4d7a. 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(PyObject *op, visitproc visit, void *arg)
          {
              localobject *self = (localobject *) op;
              Py_VISIT(self->args);
              Py_VISIT(self->kw);
              Py_VISIT(self->dict);
              return 0;
          }

     Note that *note Py_VISIT(): 4d7a. 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: 64. module’s *note get_referents(): 9fc. function
     will include it.

     Heap types (*note Py_TPFLAGS_HEAPTYPE: aa2.) 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: 603. bit is set in the *note
     tp_flags: 1b60. field, the traverse function must call *note
     PyObject_VisitManagedDict(): 601. like this:

          PyObject_VisitManagedDict((PyObject*)self, visit, arg);

          Aviso: When implementing *note tp_traverse: 977, only the
          members that the instance 'owns' (by having *note strong
          references: 5d8. to them) must be visited.  For instance, if
          an object supports weak references via the *note tp_weaklist:
          50ba. 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).

     Note that *note Py_VISIT(): 4d7a. 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: b54. hold a reference to
     their type.  Their traversal function must therefore either visit
     *note Py_TYPE(self): 3c6, 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.

          Nota: The *note tp_traverse: 977. function can be called from
          any thread.

     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: 976, *note tp_traverse: 977, *note
     tp_clear: 4d84.

     This field is inherited by subtypes together with *note tp_clear:
     4d84. and the *note Py_TPFLAGS_HAVE_GC: 976. flag bit: the flag
     bit, *note tp_traverse: 977, and *note tp_clear: 4d84. are all
     inherited from the base type if they are all zero in the subtype.

 -- C Membro: *note inquiry: 4f84. *note PyTypeObject: c8f.tp_clear

     An optional pointer to a clear function.  The signature is:

          int tp_clear(PyObject *);

     O objetivo desta função é interromper os ciclos de referência que
     estão causando um *note isolado cíclico: 5339. para que os objetos
     possam ser destruídos com segurança.  Um objeto limpo é um objeto
     parcialmente destruído; o objeto não é obrigado a satisfazer as
     invariantes de projeto mantidas durante o uso normal.

     ‘tp_clear’ does not need to delete references to objects that can’t
     participate in reference cycles, such as Python strings or Python
     integers.  However, it may be convenient to clear all references,
     and write the type’s *note tp_dealloc: 4d5d. function to invoke
     ‘tp_clear’ to avoid code duplication.  (Beware that ‘tp_clear’
     might have already been called.  Prefer calling idempotent
     functions like *note Py_CLEAR(): 78d.)

     Any non-trivial cleanup should be performed in *note tp_finalize:
     c90. instead of ‘tp_clear’.

          Nota: Se ‘tp_clear’ não conseguir quebrar um ciclo de
          referência, os objetos no *note isolado cíclico: 5339. poderão
          permanecer indefinidamente não coletáveis (“vazamento”).  Veja
          *note gc.garbage: 13bd.

          Nota: Referents (direct and indirect) might have already been
          cleared; they are not guaranteed to be in a consistent state.

          Nota: The *note tp_clear: 4d84. function can be called from
          any thread.

          Nota: An object is not guaranteed to be automatically cleared
          before its destructor (*note tp_dealloc: 4d5d.) is called.

     This function differs from the destructor (*note tp_dealloc: 4d5d.)
     in the following ways:

        * The purpose of clearing an object is to remove references to
          other objects that might participate in a reference cycle.
          The purpose of the destructor, on the other hand, is a
          superset: it must release 'all' resources it owns, including
          references to objects that cannot participate in a reference
          cycle (e.g., integers) as well as the object’s own memory (by
          calling *note tp_free: 4d70.).

        * When ‘tp_clear’ is called, other objects might still hold
          references to the object being cleared.  Because of this,
          ‘tp_clear’ must not deallocate the object’s own memory (*note
          tp_free: 4d70.).  The destructor, on the other hand, is only
          called when no (strong) references exist, and as such, must
          safely destroy the object itself by deallocating it.

        * ‘tp_clear’ pode nunca ser chamado automaticamente.  O
          destrutor de um objeto, por outro lado, será chamado
          automaticamente algum tempo depois que o objeto se tornar
          inacessível (ou seja, ou não há referências ao objeto ou o
          objeto é membro de um *note isolado cíclico: 5339.).

     No guarantees are made about when, if, or how often Python
     automatically clears an object, except:

        * O Python não limpará automaticamente um objeto se ele for
          acessível, ou seja, se houver uma referência a ele e ele não
          for membro de um *note isolado cíclico: 5339.

        * Python will not automatically clear an object if it has not
          been automatically finalized (see *note tp_finalize: c90.).
          (If the finalizer resurrected the object, the object may or
          may not be automatically finalized again before it is
          cleared.)

        * Se um objeto for membro de um *note isolado cíclico: 5339, o
          Python não o limpará automaticamente se qualquer membro do
          isolado cíclico ainda não tiver sido finalizado
          automaticamente (*note tp_finalize: c90.).

        * Python will not destroy an object until after any automatic
          calls to its ‘tp_clear’ function have returned.  This ensures
          that the act of breaking a reference cycle does not invalidate
          the ‘self’ pointer while ‘tp_clear’ is still executing.

        * Python will not automatically call ‘tp_clear’ multiple times
          concurrently.

     Atualmente, o CPython limpa objetos automaticamente apenas quando
     necessário para quebrar ciclos de referência em um *note isolado
     cíclico: 5339, mas versões futuras podem limpar objetos
     regularmente antes de sua destruição.

     Taken together, all *note tp_clear: 4d84. functions in the system
     must combine to break all reference cycles.  This is subtle, and if
     in any doubt supply a *note tp_clear: 4d84. function.  For example,
     the tuple type does not implement a *note tp_clear: 4d84. function,
     because it’s possible to prove that no reference cycle can be
     composed entirely of tuples.  Therefore the *note tp_clear: 4d84.
     functions of other types are responsible for breaking any cycle
     containing a tuple.  This isn’t immediately obvious, and there’s
     rarely a good reason to avoid implementing *note tp_clear: 4d84.

     Implementations of *note tp_clear: 4d84. 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(PyObject *op)
          {
              localobject *self = (localobject *) op;
              Py_CLEAR(self->key);
              Py_CLEAR(self->args);
              Py_CLEAR(self->kw);
              Py_CLEAR(self->dict);
              return 0;
          }

     The *note Py_CLEAR(): 78d. macro should be used, because clearing
     references is delicate: the reference to the contained object must
     not be released (via *note Py_DECREF(): 785.) 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(): 78d. macro performs the operations in a safe order.

     If the *note Py_TPFLAGS_MANAGED_DICT: 603. bit is set in the *note
     tp_flags: 1b60. field, the traverse function must call *note
     PyObject_ClearManagedDict(): 602. like this:

          PyObject_ClearManagedDict((PyObject*)self);

     More information about Python’s garbage collection scheme can be
     found in section *note Suporte a Coleta Cíclica de Lixo: 53b2.

     'Inheritance:'

     Group: *note Py_TPFLAGS_HAVE_GC: 976, *note tp_traverse: 977, *note
     tp_clear: 4d84.

     This field is inherited by subtypes together with *note
     tp_traverse: 977. and the *note Py_TPFLAGS_HAVE_GC: 976. flag bit:
     the flag bit, *note tp_traverse: 977, and *note tp_clear: 4d84. are
     all inherited from the base type if they are all zero in the
     subtype.

     Ver também
     ..........

     *note Ciclo de vida do objeto: 5334. for details about how this
     slot relates to other slots.

 -- C Membro: *note richcmpfunc: 4f8c. *note PyTypeObject:
          c8f.tp_richcompare

     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: c8f.

     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: 4d92. and for *note
     PyObject_RichCompare(): 4d93.:

     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(): 4d93.

          The returned value is a new *note strong reference: 5d8.

          On error, sets an exception and returns ‘NULL’ from the
          function.

          Adicionado na versão 3.7.

     'Inheritance:'

     Group: *note tp_hash: 4d98, *note tp_richcompare: 4d92.

     This field is inherited by subtypes together with *note tp_hash:
     4d98.: a subtype inherits *note tp_richcompare: 4d92. and *note
     tp_hash: 4d98. when the subtype’s *note tp_richcompare: 4d92. and
     *note tp_hash: 4d98. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4df2. provides a *note tp_richcompare:
     4d92. implementation, which may be inherited.  However, if only
     *note tp_hash: 4d98. 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: c49. *note PyTypeObject:
          c8f.tp_weaklistoffset

     While this field is still supported, *note
     Py_TPFLAGS_MANAGED_WEAKREF: 771. 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():
     78b. and the ‘PyWeakref_*’ functions.  The instance structure needs
     to include a field of type *note PyObject: 5d5.* which is
     initialized to ‘NULL’.

     Do not confuse this field with *note tp_weaklist: 50ba.; 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:
     771. bit and *note tp_weaklistoffset: b75.

     '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: b75, this should not be a problem.

     'Padrão:'

     If the *note Py_TPFLAGS_MANAGED_WEAKREF: 771. bit is set in the
     *note tp_flags: 1b60. field, then *note tp_weaklistoffset: b75.
     will be set to a negative value, to indicate that it is unsafe to
     use this field.

 -- C Membro: *note getiterfunc: 4f80. *note PyTypeObject: c8f.tp_iter

     An optional pointer to a function that returns an *note iterator:
     4c2. for the object.  Its presence normally signals that the
     instances of this type are *note iterable: 1423. (although
     sequences may be iterable without this function).

     This function has the same signature as *note PyObject_GetIter():
     4ef0.:

          PyObject *tp_iter(PyObject *self);

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note iternextfunc: 4f85. *note PyTypeObject:
          c8f.tp_iternext

     An optional pointer to a function that returns the next item in an
     *note iterator: 4c2.  The signature is:

          PyObject *tp_iternext(PyObject *self);

     When the iterator is exhausted, it must return ‘NULL’; a *note
     StopIteration: de9. 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: 16dd.
     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(): 396.

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: struct *note PyMethodDef: 16c5. **note PyTypeObject:
          c8f.tp_methods

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyMethodDef: 16c5. 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: 19cb. 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: 766. **note PyTypeObject:
          c8f.tp_members

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyMemberDef: 766. 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: 19cb. 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: da6. **note PyTypeObject:
          c8f.tp_getset

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyGetSetDef: da6. 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: 19cb. 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: c8f. **note PyTypeObject: c8f.tp_base

     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(): 4d6d, 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: 4df2. 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: 4d7c. 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: c72.).

 -- C Membro: *note PyObject: 5d5. **note PyTypeObject: c8f.tp_dict

     The type’s dictionary is stored here by *note PyType_Ready(): 975.

     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(): 975. 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__(): 2274.).
     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(): 19ca. 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(): 19ca.
     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(): 975. will assign a
     new dictionary to it.

          Aviso: It is not safe to use *note PyDict_SetItem(): 4d5a. on
          or otherwise modify *note tp_dict: 19cb. with the dictionary
          C-API.

 -- C Membro: *note descrgetfunc: 4f7a. *note PyTypeObject:
          c8f.tp_descr_get

     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: 4f7b. *note PyTypeObject:
          c8f.tp_descr_set

     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: c49. *note PyTypeObject:
          c8f.tp_dictoffset

     While this field is still supported, *note Py_TPFLAGS_MANAGED_DICT:
     603. 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(): 4eec.

     Do not confuse this field with *note tp_dict: 19cb.; 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: 50b6. should be regarded as write-only.
     To get the pointer to the dictionary call *note
     PyObject_GenericGetDict(): 1bdd.  Calling *note
     PyObject_GenericGetDict(): 1bdd. may need to allocate memory for
     the dictionary, so it is may be more efficient to call *note
     PyObject_GetAttr(): 5e0. when accessing an attribute on the object.

     It is an error to set both the *note Py_TPFLAGS_MANAGED_DICT: 603.
     bit and *note tp_dictoffset: 50b6.

     '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: 603.

     'Padrão:'

     This slot has no default.  For *note static types: 978, if the
     field is ‘NULL’ then no *note __dict__: 772. gets created for
     instances.

     If the *note Py_TPFLAGS_MANAGED_DICT: 603. bit is set in the *note
     tp_flags: 1b60. field, then *note tp_dictoffset: 50b6. will be set
     to ‘-1’, to indicate that it is unsafe to use this field.

 -- C Membro: *note initproc: 4f83. *note PyTypeObject: c8f.tp_init

     An optional pointer to an instance initialization function.

     This function corresponds to the *note __init__(): 8b4. 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__(): 8b4.

     The *note tp_init: 796. function, if not ‘NULL’, is called when an
     instance is created normally by calling its type, after the type’s
     *note tp_new: 794. function has returned an instance of the type.
     If the *note tp_new: 794. function returns an instance of some
     other type that is not a subtype of the original type, no *note
     tp_init: 796. function is called; if *note tp_new: 794. returns an
     instance of a subtype of the original type, the subtype’s *note
     tp_init: 796. 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: 978. this field does not have a default.

 -- C Membro: *note allocfunc: 4f78. *note PyTypeObject: c8f.tp_alloc

     An optional pointer to an instance allocation function.

     A assinatura da função é:

          PyObject *tp_alloc(PyTypeObject *self, Py_ssize_t nitems);

     'Inheritance:'

     Static subtypes inherit this slot, which will be *note
     PyType_GenericAlloc(): c55. if inherited from *note object: c72.

     *note Heap subtypes: b54. do not inherit this slot.

     'Padrão:'

     For heap subtypes, this field is always set to *note
     PyType_GenericAlloc(): c55.

     For static subtypes, this slot is inherited (see above).

 -- C Membro: *note newfunc: 4f87. *note PyTypeObject: c8f.tp_new

     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: 794. function is called;
     it may be a subtype of that type (but not an unrelated type).

     The *note tp_new: 794. 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: 796. handler.  A
     good rule of thumb is that for immutable types, all initialization
     should take place in *note tp_new: 794, while for mutable types,
     most initialization should be deferred to *note tp_init: 796.

     Set the *note Py_TPFLAGS_DISALLOW_INSTANTIATION: 797. 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: 978. whose *note tp_base: 4d7c. is ‘NULL’ or
     ‘&PyBaseObject_Type’.

     'Padrão:'

     For *note static types: 978. 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: 51e5. *note PyTypeObject: c8f.tp_free

     An optional pointer to an instance deallocation function.  Its
     signature is:

          void tp_free(void *self);

     This function must free the memory allocated by *note tp_alloc:
     4d71.

     'Inheritance:'

     Static subtypes inherit this slot, which will be *note
     PyObject_Free(): e53. if inherited from *note object: c72.
     Exception: If the type supports garbage collection (i.e., the *note
     Py_TPFLAGS_HAVE_GC: 976. flag is set in *note tp_flags: 1b60.) and
     it would inherit *note PyObject_Free(): e53, then this slot is not
     inherited but instead defaults to *note PyObject_GC_Del(): 16f1.

     *note Heap subtypes: b54. do not inherit this slot.

     'Padrão:'

     For *note heap subtypes: b54, this slot defaults to a deallocator
     suitable to match *note PyType_GenericAlloc(): c55. and the value
     of the *note Py_TPFLAGS_HAVE_GC: 976. flag.

     For static subtypes, this slot is inherited (see above).

 -- C Membro: *note inquiry: 4f84. *note PyTypeObject: c8f.tp_is_gc

     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: 1b60. field, and check the *note
     Py_TPFLAGS_HAVE_GC: 976. 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: 764, defines this function to distinguish
     between statically and *note dynamically allocated types: b54.)

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     This slot has no default.  If this field is ‘NULL’, *note
     Py_TPFLAGS_HAVE_GC: 976. is used as the functional equivalent.

 -- C Membro: *note PyObject: 5d5. **note PyTypeObject: c8f.tp_bases

     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: 975.

     For dynamically created classes, the ‘Py_tp_bases’ *note slot:
     4f26. can be used instead of the 'bases' argument of *note
     PyType_FromSpecWithBases(): 793.  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: 5d5. **note PyTypeObject: c8f.tp_mro

     Tuple containing the expanded set of base types, starting with the
     type itself and ending with *note object: c72, 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: 975.

     'Inheritance:'

     This field is not inherited; it is calculated fresh by *note
     PyType_Ready(): 975.

 -- C Membro: *note PyObject: 5d5. **note PyTypeObject: c8f.tp_cache

     Unused.  Internal use only.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: void **note PyTypeObject: c8f.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__(): 788.

     Alterado na versão 3.12: For some types, this field does not hold a
     valid *note PyObject: 5d5.*.  The type was changed to void* to
     indicate this.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note PyObject: 5d5. **note PyTypeObject: c8f.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: 4f7c. *note PyTypeObject: c8f.tp_del

     This field is deprecated.  Use *note tp_finalize: c90. instead.

 -- C Membro: unsigned int *note PyTypeObject: c8f.tp_version_tag

     Used to index into the method cache.  Internal use only.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note destructor: 4f7c. *note PyTypeObject:
          c8f.tp_finalize

     An optional pointer to an instance finalization function.  This is
     the C implementation of the *note __del__(): 11f3. special method.
     Its signature is:

          void tp_finalize(PyObject *self);

     The primary purpose of finalization is to perform any non-trivial
     cleanup that must be performed before the object is destroyed,
     while the object and any other objects it directly or indirectly
     references are still in a consistent state.  The finalizer is
     allowed to execute arbitrary Python code.

     Before Python automatically finalizes an object, some of the
     object’s direct or indirect referents might have themselves been
     automatically finalized.  However, none of the referents will have
     been automatically cleared (*note tp_clear: 4d84.) yet.

     Other non-finalized objects might still be using a finalized
     object, so the finalizer must leave the object in a sane state
     (e.g., invariants are still met).

          Nota: After Python automatically finalizes an object, Python
          might start automatically clearing (*note tp_clear: 4d84.) the
          object and its referents (direct and indirect).  Cleared
          objects are not guaranteed to be in a consistent state; a
          finalized object must be able to tolerate cleared referents.

          Nota: An object is not guaranteed to be automatically
          finalized before its destructor (*note tp_dealloc: 4d5d.) is
          called.  It is recommended to call *note
          PyObject_CallFinalizerFromDealloc(): 5338. at the beginning of
          ‘tp_dealloc’ to guarantee that the object is always finalized
          before destruction.

          Nota: The *note tp_finalize: c90. function can be called from
          any thread, although the *note GIL: 164. will be held.

          Nota: The ‘tp_finalize’ function can be called during
          shutdown, after some global variables have been deleted.  See
          the documentation of the *note __del__(): 11f3. method for
          details.

     When Python finalizes an object, it behaves like the following
     algorithm:

       1. Python might mark the object as 'finalized'.  Currently,
          Python always marks objects whose type supports garbage
          collection (i.e., the *note Py_TPFLAGS_HAVE_GC: 976. flag is
          set in *note tp_flags: 1b60.) and never marks other types of
          objects; this might change in a future version.

       2. If the object is not marked as 'finalized' and its
          ‘tp_finalize’ finalizer function is non-‘NULL’, the finalizer
          function is called.

       3. Se a função finalizadora foi chamada e o finalizador tornou o
          objeto acessível (ou seja, há uma referência ao objeto e ele
          não é membro de um *note isolado cíclico: 5339.), então o
          finalizador 'ressuscitou' o objeto.  Não é especificado se o
          finalizador também pode ressuscitar o objeto adicionando uma
          nova referência ao objeto que não o torne acessível, ou seja,
          o objeto (ainda) é membro de um isolado cíclico.

       4. If the finalizer resurrected the object, the object’s pending
          destruction is canceled and the object’s 'finalized' mark
          might be removed if present.  Currently, Python never removes
          the 'finalized' mark; this might change in a future version.

     'Automatic finalization' refers to any finalization performed by
     Python except via calls to *note PyObject_CallFinalizer(): 533c. or
     *note PyObject_CallFinalizerFromDealloc(): 5338.  No guarantees are
     made about when, if, or how often an object is automatically
     finalized, except:

        * O Python não finalizará automaticamente um objeto se ele for
          acessível, ou seja, se houver uma referência a ele e ele não
          for membro de um *note isolado cíclico: 5339.

        * Python will not automatically finalize an object if finalizing
          it would not mark the object as 'finalized'.  Currently, this
          applies to objects whose type does not support garbage
          collection, i.e., the *note Py_TPFLAGS_HAVE_GC: 976. flag is
          not set.  Such objects can still be manually finalized by
          calling *note PyObject_CallFinalizer(): 533c. or *note
          PyObject_CallFinalizerFromDealloc(): 5338.

        * O Python não finalizará automaticamente quaisquer dois membros
          de um *note isolado cíclico: 5339. simultaneamente.

        * Python will not automatically finalize an object after it has
          automatically cleared (*note tp_clear: 4d84.) the object.

        * Se um objeto for membro de um *note isolado cíclico: 5339, o
          Python não o finalizará automaticamente após limpar
          automaticamente (veja *note tp_clear: 4d84.) qualquer outro
          membro.

        * O Python finalizará automaticamente cada membro de um *note
          isolado cíclico: 5339. antes de limpar automaticamente (veja
          *note tp_clear: 4d84.) qualquer um deles.

        * If Python is going to automatically clear an object (*note
          tp_clear: 4d84.), it will automatically finalize the object
          first.

     Atualmente, o Python finaliza automaticamente apenas objetos que
     são membros de um *note isolado cíclico: 5339, mas versões futuras
     podem finalizar objetos regularmente antes de sua destruição.

     To manually finalize an object, do not call this function directly;
     call *note PyObject_CallFinalizer(): 533c. or *note
     PyObject_CallFinalizerFromDealloc(): 5338. instead.

     *note tp_finalize: c90. should leave the current exception status
     unchanged.  The recommended way to write a non-trivial finalizer is
     to back up the exception at the beginning by calling *note
     PyErr_GetRaisedException(): 426. and restore the exception at the
     end by calling *note PyErr_SetRaisedException(): 429.  If an
     exception is encountered in the middle of the finalizer, log and
     clear it with *note PyErr_WriteUnraisable(): 5e6. or *note
     PyErr_FormatUnraisable(): 5e5.  For example:

          static void
          foo_finalize(PyObject *self)
          {
              // Save the current exception, if any.
              PyObject *exc = PyErr_GetRaisedException();

              // ...

              if (do_something_that_might_raise() != success_indicator) {
                  PyErr_WriteUnraisable(self);
                  goto done;
              }

          done:
              // Restore the saved exception.  This silently discards any exception
              // raised above, so be sure to call PyErr_WriteUnraisable first if
              // necessary.
              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: 424. flags bit in order for
     this field to be used.  This is no longer required.

     Ver também
     ..........

        * PEP 442(4): “Safe object finalization”

        * *note Ciclo de vida do objeto: 5334. for details about how
          this slot relates to other slots.

        * *note PyObject_CallFinalizer(): 533c.

        * *note PyObject_CallFinalizerFromDealloc(): 5338.

 -- C Membro: *note vectorcallfunc: 76e. *note PyTypeObject:
          c8f.tp_vectorcall

     A *note vectorcall function: 769. to use for calls of this type
     object (rather than instances).  In other words, ‘tp_vectorcall’
     can be used to optimize ‘type.__call__’, which typically returns a
     new instance of 'type'.

     As with any vectorcall function, if ‘tp_vectorcall’ is ‘NULL’, the
     'tp_call' protocol (‘Py_TYPE(type)->tp_call’) is used instead.

          Nota: The *note vectorcall protocol: 769. requires that the
          vectorcall function has the same behavior as the corresponding
          ‘tp_call’.  This means that ‘type->tp_vectorcall’ must match
          the behavior of ‘Py_TYPE(type)->tp_call’.

          Specifically, if 'type' uses the default metaclass,
          ‘type->tp_vectorcall’ must behave the same as *note
          PyType_Type: 764.->tp_call, which:

             - calls ‘type->tp_new’,

             - if the result is a subclass of 'type', calls
               ‘type->tp_init’ on the result of ‘tp_new’, and

             - returns the result of ‘tp_new’.

          Typically, ‘tp_vectorcall’ is overridden to optimize this
          process for specific *note tp_new: 794. and *note tp_init:
          796.  When doing this for user-subclassable types, note that
          both can be overridden (using *note __new__(): 795. and *note
          __init__(): 8b4, respectively).

     '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: c8f.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: Type Object Structures

7.13.4.9 Static Types
.....................

Traditionally, types defined in C code are 'static', that is, a static
*note PyTypeObject: c8f. structure is defined directly in code and
initialized using *note PyType_Ready(): 975.

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: 163,
     so they should not include any subinterpreter-specific state.

Also, since *note PyTypeObject: c8f. is only part of the *note Limited
API: 62b. 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: Type Object Structures

7.13.4.10 Tipos no heap
.......................

An alternative to *note static types: 978. 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: aa2. flag set.

This is done by filling a *note PyType_Spec: 19c8. structure and calling
*note PyType_FromSpec(): 792, *note PyType_FromSpecWithBases(): 793,
*note PyType_FromModuleAndSpec(): 768, or *note PyType_FromMetaclass():
767.


File: python.info,  Node: Number Object Structures,  Next: Mapping Object Structures,  Prev: Tipos no heap,  Up: Type Object Structures

7.13.4.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: 5061. 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: 5398. field should always be
          ‘NULL’.  It was previously called ‘nb_long’, and was renamed
          in Python 3.0.1.

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods: 160f.nb_add

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_subtract

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_multiply

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_remainder

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_divmod

 -- C Membro: *note ternaryfunc: 4f92. *note PyNumberMethods:
          160f.nb_power

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_negative

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_positive

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_absolute

 -- C Membro: *note inquiry: 4f84. *note PyNumberMethods: 160f.nb_bool

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_invert

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_lshift

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_rshift

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods: 160f.nb_and

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods: 160f.nb_xor

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods: 160f.nb_or

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods: 160f.nb_int

 -- C Membro: void **note PyNumberMethods: 160f.nb_reserved

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_float

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_add

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_subtract

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_multiply

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_remainder

 -- C Membro: *note ternaryfunc: 4f92. *note PyNumberMethods:
          160f.nb_inplace_power

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_lshift

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_rshift

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_and

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_xor

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_or

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_floor_divide

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_true_divide

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_floor_divide

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_true_divide

 -- C Membro: *note unaryfunc: 4f94. *note PyNumberMethods:
          160f.nb_index

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_matrix_multiply

 -- C Membro: *note binaryfunc: 4f79. *note PyNumberMethods:
          160f.nb_inplace_matrix_multiply


File: python.info,  Node: Mapping Object Structures,  Next: Sequence Object Structures,  Prev: Number Object Structures,  Up: Type Object Structures

7.13.4.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: 4f86. *note PyMappingMethods:
          4d97.mp_length

     This function is used by *note PyMapping_Size(): 1cec. and *note
     PyObject_Size(): 4ef6, and has the same signature.  This slot may
     be set to ‘NULL’ if the object has no defined length.

 -- C Membro: *note binaryfunc: 4f79. *note PyMappingMethods:
          4d97.mp_subscript

     This function is used by *note PyObject_GetItem(): 4dd5. and *note
     PySequence_GetSlice(): 4eff, and has the same signature as
     ‘PyObject_GetItem()’.  This slot must be filled for the *note
     PyMapping_Check(): 4eb2. function to return ‘1’, it can be ‘NULL’
     otherwise.

 -- C Membro: *note objobjargproc: 4f88. *note PyMappingMethods:
          4d97.mp_ass_subscript

     This function is used by *note PyObject_SetItem(): 4dd3, *note
     PyObject_DelItem(): 4ee8, *note PySequence_SetSlice(): 4f06. and
     *note PySequence_DelSlice(): 4efe.  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: Type Object Structures

7.13.4.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: 4f86. *note PySequenceMethods:
          4d96.sq_length

     This function is used by *note PySequence_Size(): 1ce8. and *note
     PyObject_Size(): 4ef6, and has the same signature.  It is also used
     for handling negative indices via the *note sq_item: 1bcf. and the
     *note sq_ass_item: 53a4. slots.

 -- C Membro: *note binaryfunc: 4f79. *note PySequenceMethods:
          4d96.sq_concat

     This function is used by *note PySequence_Concat(): 4efc. and has
     the same signature.  It is also used by the ‘+’ operator, after
     trying the numeric addition via the *note nb_add: 50ad. slot.

 -- C Membro: *note ssizeargfunc: 4f90. *note PySequenceMethods:
          4d96.sq_repeat

     This function is used by *note PySequence_Repeat(): 4f05. and has
     the same signature.  It is also used by the ‘*’ operator, after
     trying numeric multiplication via the *note nb_multiply: 5381.
     slot.

 -- C Membro: *note ssizeargfunc: 4f90. *note PySequenceMethods:
          4d96.sq_item

     This function is used by *note PySequence_GetItem(): 1ce9. and has
     the same signature.  It is also used by *note PyObject_GetItem():
     4dd5, after trying the subscription via the *note mp_subscript:
     1bd0. slot.  This slot must be filled for the *note
     PySequence_Check(): 4efb. function to return ‘1’, it can be ‘NULL’
     otherwise.

     Negative indexes are handled as follows: if the *note sq_length:
     50b5. slot is filled, it is called and the sequence length is used
     to compute a positive index which is passed to *note sq_item: 1bcf.
     If ‘sq_length’ is ‘NULL’, the index is passed as is to the
     function.

 -- C Membro: *note ssizeobjargproc: 4f91. *note PySequenceMethods:
          4d96.sq_ass_item

     This function is used by *note PySequence_SetItem(): 1cea. and has
     the same signature.  It is also used by *note PyObject_SetItem():
     4dd3. and *note PyObject_DelItem(): 4ee8, after trying the item
     assignment and deletion via the *note mp_ass_subscript: 53a1. slot.
     This slot may be left to ‘NULL’ if the object does not support item
     assignment and deletion.

 -- C Membro: *note objobjproc: 4f89. *note PySequenceMethods:
          4d96.sq_contains

     This function may be used by *note PySequence_Contains(): 3d6. 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: 4f79. *note PySequenceMethods:
          4d96.sq_inplace_concat

     This function is used by *note PySequence_InPlaceConcat(): 4f00.
     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(): 4efc.  It is also used by the augmented
     assignment ‘+=’, after trying numeric in-place addition via the
     *note nb_inplace_add: 537e. slot.

 -- C Membro: *note ssizeargfunc: 4f90. *note PySequenceMethods:
          4d96.sq_inplace_repeat

     This function is used by *note PySequence_InPlaceRepeat(): 4f01.
     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(): 4f05.  It is also used by the augmented
     assignment ‘*=’, after trying numeric in-place multiplication via
     the *note nb_inplace_multiply: 5382. slot.


File: python.info,  Node: Buffer Object Structures,  Next: Async Object Structures,  Prev: Sequence Object Structures,  Up: Type Object Structures

7.13.4.14 Buffer Object Structures
..................................

 -- C Tipo: type PyBufferProcs

     This structure holds pointers to the functions required by the
     *note Buffer protocol: 25f.  The protocol defines how an exporter
     object can expose its internal data to consumer objects.

 -- C Membro: *note getbufferproc: 4f7f. *note PyBufferProcs:
          50bb.bf_getbuffer

     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: 1ac8, 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: 5078, the rules how an exporter must react to
     specific requests are in section *note Buffer request types: 48ec.

     All memory pointed to in the *note Py_buffer: 951. structure
     belongs to the exporter and must remain valid until there are no
     consumers left.  *note format: 5082, *note shape: 5084, *note
     strides: 507c, *note suboffsets: 5086. and *note internal: 5089.
     are read-only for the consumer.

     *note PyBuffer_FillInfo(): 959. provides an easy way of exposing a
     simple bytes buffer while dealing correctly with all request types.

     *note PyObject_GetBuffer(): 62e. is the interface for the consumer
     that wraps this function.

 -- C Membro: *note releasebufferproc: 4f8a. *note PyBufferProcs:
          50bb.bf_releasebuffer

     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: 95c. 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: 5089. 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(): 62f. (this scheme is
     useful for breaking reference cycles).

     *note PyBuffer_Release(): 62f. 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: Type Object Structures

7.13.4.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: 4c3. and *note asynchronous iterator:
     4c1. 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: 4f94. *note PyAsyncMethods: 50b4.am_await

     The signature of this function is:

          PyObject *am_await(PyObject *self);

     The returned object must be an *note iterator: 4c2, i.e.  *note
     PyIter_Check(): 1b97. must return ‘1’ for it.

     This slot may be set to ‘NULL’ if an object is not an *note
     awaitable: 4c3.

 -- C Membro: *note unaryfunc: 4f94. *note PyAsyncMethods: 50b4.am_aiter

     The signature of this function is:

          PyObject *am_aiter(PyObject *self);

     Must return an *note asynchronous iterator: 4c1. object.  See *note
     __anext__(): 17e8. for details.

     This slot may be set to ‘NULL’ if an object does not implement
     asynchronous iteration protocol.

 -- C Membro: *note unaryfunc: 4f94. *note PyAsyncMethods: 50b4.am_anext

     The signature of this function is:

          PyObject *am_anext(PyObject *self);

     Must return an *note awaitable: 4c3. object.  See *note
     __anext__(): 17e8. for details.  This slot may be set to ‘NULL’.

 -- C Membro: *note sendfunc: 537d. *note PyAsyncMethods: 50b4.am_send

     The signature of this function is:

          PySendResult am_send(PyObject *self, PyObject *arg, PyObject **result);

     See *note PyIter_Send(): a8e. for details.  This slot may be set to
     ‘NULL’.

     Adicionado na versão 3.10.


File: python.info,  Node: Slot Type typedefs,  Next: Exemplos<39>,  Prev: Async Object Structures,  Up: Type Object Structures

7.13.4.16 Slot Type typedefs
............................

 -- C Tipo: typedef *note PyObject: 5d5. *(*allocfunc)(*note
          PyTypeObject: c8f. *cls, *note Py_ssize_t: c49. nitems)
     ' Parte da *note ABI Estável: 76a.'  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: a95. set to ‘1’ and *note ob_type: 4d6e. set to
     the type argument.  If the type’s *note tp_itemsize: 2252. is
     non-zero, the object’s *note ob_size: 4f66. 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: b74.

     This function should not do any other instance initialization, not
     even to allocate additional memory; that should be done by *note
     tp_new: 794.

 -- C Tipo: typedef void (*destructor)(*note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef void (*freefunc)(void*)

     See *note tp_free: 4d70.

 -- C Tipo: typedef *note PyObject: 5d5. *(*newfunc)(*note PyTypeObject:
          c8f.*, *note PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_new: 794.

 -- C Tipo: typedef int (*initproc)(*note PyObject: 5d5.*, *note
          PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_init: 796.

 -- C Tipo: typedef *note PyObject: 5d5. *(*reprfunc)(*note PyObject:
          5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_repr: 4d86.

 -- C Tipo: typedef *note PyObject: 5d5. *(*getattrfunc)(*note PyObject:
          5d5. *self, char *attr)
     ' Parte da *note ABI Estável: 76a.'  Return the value of the named
     attribute for the object.

 -- C Tipo: typedef int (*setattrfunc)(*note PyObject: 5d5. *self, char
          *attr, *note PyObject: 5d5. *value)
     ' Parte da *note ABI Estável: 76a.'  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: 5d5. *(*getattrofunc)(*note
          PyObject: 5d5. *self, *note PyObject: 5d5. *attr)
     ' Parte da *note ABI Estável: 76a.'  Return the value of the named
     attribute for the object.

     See *note tp_getattro: 19a2.

 -- C Tipo: typedef int (*setattrofunc)(*note PyObject: 5d5. *self,
          *note PyObject: 5d5. *attr, *note PyObject: 5d5. *value)
     ' Parte da *note ABI Estável: 76a.'  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: 4d8a.

 -- C Tipo: typedef *note PyObject: 5d5. *(*descrgetfunc)(*note
          PyObject: 5d5.*, *note PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_descr_get: 5372.

 -- C Tipo: typedef int (*descrsetfunc)(*note PyObject: 5d5.*, *note
          PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_descr_set: 1b99.

 -- C Tipo: typedef *note Py_hash_t: 145f. (*hashfunc)(*note PyObject:
          5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_hash: 4d98.

 -- C Tipo: typedef *note PyObject: 5d5. *(*richcmpfunc)(*note PyObject:
          5d5.*, *note PyObject: 5d5.*, int)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_richcompare:
     4d92.

 -- C Tipo: typedef *note PyObject: 5d5. *(*getiterfunc)(*note PyObject:
          5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_iter: 16dd.

 -- C Tipo: typedef *note PyObject: 5d5. *(*iternextfunc)(*note
          PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'  See *note tp_iternext: 16de.

 -- C Tipo: typedef *note Py_ssize_t: c49. (*lenfunc)(*note PyObject:
          5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef int (*getbufferproc)(*note PyObject: 5d5.*, *note
          Py_buffer: 951.*, int)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'

 -- C Tipo: typedef void (*releasebufferproc)(*note PyObject: 5d5.*,
          *note Py_buffer: 951.*)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.12.'

 -- C Tipo: typedef *note PyObject: 5d5. *(*unaryfunc)(*note PyObject:
          5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef *note PyObject: 5d5. *(*binaryfunc)(*note PyObject:
          5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef *note PySendResult: 5073. (*sendfunc)(*note
          PyObject: 5d5.*, *note PyObject: 5d5.*, *note PyObject:
          5d5.**)

     See *note am_send: 537c.

 -- C Tipo: typedef *note PyObject: 5d5. *(*ternaryfunc)(*note PyObject:
          5d5.*, *note PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef *note PyObject: 5d5. *(*ssizeargfunc)(*note
          PyObject: 5d5.*, *note Py_ssize_t: c49.)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef int (*ssizeobjargproc)(*note PyObject: 5d5.*, *note
          Py_ssize_t: c49, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef int (*objobjproc)(*note PyObject: 5d5.*, *note
          PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'

 -- C Tipo: typedef int (*objobjargproc)(*note PyObject: 5d5.*, *note
          PyObject: 5d5.*, *note PyObject: 5d5.*)
     ' Parte da *note ABI Estável: 76a.'


File: python.info,  Node: Exemplos<39>,  Prev: Slot Type typedefs,  Up: Type Object Structures

7.13.4.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: 4d66. and *note Defining
Extension Types; Assorted Topics: 4d80.

A basic *note static type: 978.:

     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: 797. 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: 978. 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: 978. 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: Type Object Structures,  Up: Suporte a implementação de Objetos

7.13.5 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: 1b60. field of the type
object must include the *note Py_TPFLAGS_HAVE_GC: 976. and provide an
implementation of the *note tp_traverse: 977. handler.  If instances of
the type are mutable, a *note tp_clear: 4d84. implementation must also
be provided.

*note Py_TPFLAGS_HAVE_GC: 976.

     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: c8c. or *note PyObject_GC_NewVar: c8d.

  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(): 16f2.

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(): 16f3. deve ser chamado.

  2. A memória destinada ao objeto deve ser desalocada usando *note
     PyObject_GC_Del(): 16f1.

          Aviso: If a type adds the Py_TPFLAGS_HAVE_GC, then it 'must'
          implement at least a *note tp_traverse: 977. handler or
          explicitly use one from its subclass or subclasses.

          When calling *note PyType_Ready(): 975. or some of the APIs
          that indirectly call it like *note PyType_FromSpecWithBases():
          793. or *note PyType_FromSpec(): 792. the interpreter will
          automatically populate the *note tp_flags: 1b60, *note
          tp_traverse: 977. and *note tp_clear: 4d84. 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: 976. flag.

 -- C Macro: PyObject_GC_New (TYPE, typeobj)

     Analogous to *note PyObject_New: b72. but for container objects
     with the *note Py_TPFLAGS_HAVE_GC: 976. flag set.

     Do not call this directly to allocate memory for an object; call
     the type’s *note tp_alloc: 4d71. slot instead.

     Ao preencher o slot *note tp_alloc: 4d71. de um tipo, *note
     PyType_GenericAlloc(): c55. é preferível a uma função personalizada
     que simplesmente chama esta macro.

     Memory allocated by this macro must be freed with *note
     PyObject_GC_Del(): 16f1. (usually called via the object’s *note
     tp_free: 4d70. slot).

     Ver também
     ..........

        * *note PyObject_GC_Del(): 16f1.

        * *note PyObject_New: b72.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_alloc: 4d71.

 -- C Macro: PyObject_GC_NewVar (TYPE, typeobj, size)

     Analogous to *note PyObject_NewVar: b73. but for container objects
     with the *note Py_TPFLAGS_HAVE_GC: 976. flag set.

     Do not call this directly to allocate memory for an object; call
     the type’s *note tp_alloc: 4d71. slot instead.

     Ao preencher o slot *note tp_alloc: 4d71. de um tipo, *note
     PyType_GenericAlloc(): c55. é preferível a uma função personalizada
     que simplesmente chama esta macro.

     Memory allocated by this macro must be freed with *note
     PyObject_GC_Del(): 16f1. (usually called via the object’s *note
     tp_free: 4d70. slot).

     Ver também
     ..........

        * *note PyObject_GC_Del(): 16f1.

        * *note PyObject_NewVar: b73.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_alloc: 4d71.

 -- C Função: *note PyObject: 5d5.
          *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: 75e. Isso pode se alterado sem aviso em lançamentos menores.': 
     Analogous to *note PyObject_GC_New: c8c. but allocates 'extra_size'
     bytes at the end of the object (at offset *note tp_basicsize:
     b74.).  The allocated memory is initialized to zeros, except for
     the *note Python object header: 5d5.

     The extra data will be deallocated with the object, but otherwise
     it is not managed by Python.

     Memory allocated by this function must be freed with *note
     PyObject_GC_Del(): 16f1. (usually called via the object’s *note
     tp_free: 4d70. slot).

          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: 4566. and *note tp_itemsize:
          2252. instead.

     Adicionado na versão 3.12.

 -- C Macro: PyObject_GC_Resize (TYPE, op, newsize)

     Resize an object allocated by *note PyObject_NewVar: b73.  Returns
     the resized object of type ‘TYPE*’ (refers to any C type) or ‘NULL’
     on failure.

     'op' must be of type *note PyVarObject: 4566.* and must not be
     tracked by the collector yet.  'newsize' must be of type *note
     Py_ssize_t: c49.

 -- C Função: void PyObject_GC_Track (PyObject *op)
     ' Parte da *note ABI Estável: 76a.'  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: 977. 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: 76a. 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():
     1509.

     Adicionado na versão 3.9.

 -- C Função: int PyObject_GC_IsFinalized (PyObject *op)
     ' Parte da *note ABI Estável: 76a. 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():
     aef.

     Adicionado na versão 3.9.

 -- C Função: void PyObject_GC_Del (void *op)
     ' Parte da *note ABI Estável: 76a.'  Releases memory allocated to
     an object using *note PyObject_GC_New: c8c. or *note
     PyObject_GC_NewVar: c8d.

     Do not call this directly to free an object’s memory; call the
     type’s *note tp_free: 4d70. slot instead.

     Do not use this for memory allocated by *note PyObject_New: b72,
     *note PyObject_NewVar: b73, or related allocation functions; use
     *note PyObject_Free(): e53. instead.

     Ver também
     ..........

        * *note PyObject_Free(): e53. is the non-GC equivalent of this
          function.

        * *note PyObject_GC_New: c8c.

        * *note PyObject_GC_NewVar: c8d.

        * *note PyType_GenericAlloc(): c55.

        * *note tp_free: 4d70.

 -- C Função: void PyObject_GC_UnTrack (void *op)
     ' Parte da *note ABI Estável: 76a.'  Remove the object 'op' from
     the set of container objects tracked by the collector.  Note that
     *note PyObject_GC_Track(): 16f2. can be called again on this object
     to add it back to the set of tracked objects.  The deallocator
     (*note tp_dealloc: 4d5d. handler) should call this for the object
     before any of the fields used by the *note tp_traverse: 977.
     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: 977. handler accepts a function parameter of this
type:

 -- C Tipo: typedef int (*visitproc)(*note PyObject: 5d5. *object, void
          *arg)
     ' Parte da *note ABI Estável: 76a.'  Type of the visitor function
     passed to the *note tp_traverse: 977. handler.  The function should
     be called with an object to traverse as 'object' and the third
     parameter to the *note tp_traverse: 977. 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: 977. handler must have the following type:

 -- C Tipo: typedef int (*traverseproc)(*note PyObject: 5d5. *self,
          *note visitproc: 4f95. visit, void *arg)
     ' Parte da *note ABI Estável: 76a.'  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.

To simplify writing *note tp_traverse: 977. handlers, a *note
Py_VISIT(): 4d7a. macro is provided.  In order to use this macro, the
*note tp_traverse: 977. implementation must name its arguments exactly
'visit' and 'arg':

 -- C Macro: Py_VISIT (o)

     If the *note PyObject: 5d5.* '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: 977. 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: 4d84. handler must be of the *note inquiry: 4f84.
type, or ‘NULL’ if the object is immutable.

 -- C Tipo: typedef int (*inquiry)(*note PyObject: 5d5. *self)
     ' Parte da *note ABI Estável: 76a.'  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(): 785. 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.13.5.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: c49. PyGC_Collect (void)
     ' Parte da *note ABI Estável: 76a.'  Perform a full garbage
     collection, if the garbage collector is enabled.  (Note that *note
     gc.collect(): 1b3. 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: 501.  This
     function does not raise exceptions.

 -- C Função: int PyGC_Enable (void)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.10.'  Enable
     the garbage collector: similar to *note gc.enable(): 489c.  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: 76a. desde a versão 3.10.'  Disable
     the garbage collector: similar to *note gc.disable(): 489d.
     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: 76a. desde a versão 3.10.'  Query the
     state of the garbage collector: similar to *note gc.isenabled():
     489e.  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.13.5.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: 75e. 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: 5d5.
          *object, void *arg)

     Type of the visitor function to be passed to *note
     PyUnstable_GC_VisitObjects(): 53cc.  '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.14 API e Versionamento de ABI
===============================

* Menu:

* Constantes de versão de tempo de construção::
* Versão de tempo de execução::
* Macros de empacotamento de bits::


File: python.info,  Node: Constantes de versão de tempo de construção,  Next: Versão de tempo de execução,  Up: API e Versionamento de ABI

7.14.1 Constantes de versão de tempo de construção
--------------------------------------------------

O CPython expõe seu número de versão nas seguintes macros.  Note que
estes correspondem ao código da versão com a qual está 'construída'.
Veja *note Py_Version: 37e. para a versão usada em 'tempo de execução'.

Veja *note Estabilidade da API C: 76a. 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.
     Consulte *note Py_PACK_FULL_VERSION(): 37d. para obter detalhes
     sobre a codificação.

     Use isso para comparações numéricas como, por exemplo, ‘#if
     PY_VERSION_HEX >= ...’.


File: python.info,  Node: Versão de tempo de execução,  Next: Macros de empacotamento de bits,  Prev: Constantes de versão de tempo de construção,  Up: API e Versionamento de ABI

7.14.2 Versão de tempo de execução
----------------------------------

 -- C Variável: const unsigned long Py_Version
     ' Parte da *note ABI Estável: 76a. desde a versão 3.11.'  O número
     da versão do tempo de execução do Python codificado em um único
     inteiro constante.  Consulte *note Py_PACK_FULL_VERSION(): 37d.
     para obter detalhes sobre a codificação.  Contém a versão do Python
     usada em tempo de execução.

     Use isso para comparações numéricas como, por exemplo, ‘if
     (Py_Version >= ...)’.

     Adicionado na versão 3.11.


File: python.info,  Node: Macros de empacotamento de bits,  Prev: Versão de tempo de execução,  Up: API e Versionamento de ABI

7.14.3 Macros de empacotamento de bits
--------------------------------------

 -- C Função: uint32_t Py_PACK_FULL_VERSION (int major, int minor, int
          micro, int release_level, int release_serial)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'  Retorna a
     versão fornecida, codificada como um único inteiro de 32 bits com a
     seguinte estrutura:

     Argumento              Nº de       Máscara de bits      Deslocamento    Exemplo de
                            bits                             de bits         valores
                                                                             
     -----------------------------------------------------------------------------------------------------------
                            
     ‘3.4.1a2’              ‘3.10.0’
                            
                                                                                               
     'major'                8           ‘0xFF000000’         24              ‘0x03’            ‘0x03’
                                                                                               
                                                                                               
     'minor'                8           ‘0x00FF0000’         16              ‘0x04’            ‘0x0A’
                                                                                               
                                                                                               
     'micro'                8           ‘0x0000FF00’         8               ‘0x01’            ‘0x00’
                                                                                               
                                                                                               
     'release_level'        4           ‘0x000000F0’         4               ‘0xA’             ‘0xF’
                                                                                               
                                                                                               
     'release_serial'       4           ‘0x0000000F’         0               ‘0x2’             ‘0x0’
                                                                                               

     Por exemplo:

     Versão            Argumentos de ‘Py_PACK_FULL_VERSION’     Versão codificada
                                                                
     ---------------------------------------------------------------------------------
                                                                
     ‘3.4.1a2’         ‘(3, 4, 1, 0xA, 2)’                      ‘0x030401a2’
                                                                
                                                                
     ‘3.10.0’          ‘(3, 10, 0, 0xF, 0)’                     ‘0x030a00f0’
                                                                

     Bits fora do intervalo nos argumentos são ignorados.  Ou seja, a
     macro pode ser definida como:

          #ifndef Py_PACK_FULL_VERSION
          #define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
             (((X) & 0xff) << 24) |                              \
             (((Y) & 0xff) << 16) |                              \
             (((Z) & 0xff) << 8) |                               \
             (((LEVEL) & 0xf) << 4) |                            \
             (((SERIAL) & 0xf) << 0))
          #endif

     ‘Py_PACK_FULL_VERSION’ é principalmente uma macro, destinada ao uso
     em diretivas ‘#if’, mas também está disponível como uma função
     exportada.

     Adicionado na versão 3.14.

 -- C Função: uint32_t Py_PACK_VERSION (int major, int minor)
     ' Parte da *note ABI Estável: 76a. desde a versão 3.14.'
     Equivalente a ‘Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)’.  O
     resultado não corresponde a nenhuma versão do Python, mas é útil em
     comparações numéricas.

     Adicionado na versão 3.14.


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.15 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:
e0.


File: python.info,  Node: Gerando eventos de execução,  Prev: API C de monitoramento,  Up: Manual de referência da API Python/C

7.16 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: e0. 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: 32d. 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: e0. 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_FireBranchLeftEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject
          *target_offset)

     Dispara um evento ‘BRANCH_LEFT’.

 -- C Função: int PyMonitoring_FireBranchRightEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject
          *target_offset)

     Dispara um evento ‘BRANCH_RIGHT’.

 -- 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(): 426.).

 -- 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(): 426.).

 -- 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(): 426.).

 -- 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(): 426.).

 -- 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(): 426.).

 -- 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(): 426.).

 -- 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: de9, ele é usado.  Caso contrário, uma nova
     instância de *note StopIteration: de9. é 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.16.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_LEFT           *note BRANCH_LEFT: 294.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_BRANCH_RIGHT          *note BRANCH_RIGHT: 295.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_CALL                  *note CALL: 18ff.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_C_RAISE               *note C_RAISE: 47c8.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_C_RETURN              *note C_RETURN: 47c9.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_EXCEPTION_HANDLED     *note EXCEPTION_HANDLED: 47ca.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_INSTRUCTION           *note INSTRUCTION: 47cb.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_JUMP                  *note JUMP: 47cc.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_LINE                  *note LINE: 47cd.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_RESUME             *note PY_RESUME: 47ce.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_RETURN             *note PY_RETURN: 47cf.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_START              *note PY_START: 47d0.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_THROW              *note PY_THROW: 17bf.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_UNWIND             *note PY_UNWIND: 47d1.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_YIELD              *note PY_YIELD: 47d2.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_RAISE                 *note RAISE: 18c4.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_RERAISE               *note RERAISE: 47d4.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_STOP_ITERATION        *note STOP_ITERATION: 47d3.
                                                            

 -- 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: 47d8.

     Adicionado na versão 3.13.

     Descontinuado desde a versão 3.14: Esta função está *note
     suavemente descontinuada: 23c.


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<5>.
* 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<5>,  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<5>,  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:
     1f9b.

     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:
117.  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<5>,  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 do Python para threads livres::
* Suporte a extensões da API C para threads livres::
* Protocolo de anexação de depuração remota::
* Requisitos de permissão::
* Localizando a estrutura de PyRuntime::
* Lendo _Py_DebugOffsets::
* Localizando o estado de thread e do interpretador::
* Escrevendo informações de controle::
* Resumo: Resumo<2>.


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: 5400. tem como objetivo ajudá-lo a
construir um modelo mental sólido de como *note asyncio: b. 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’.  Você
conseguirá responder a essas perguntas com tranquilidade ao final deste
artigo:

   - 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::
* Funções assíncronas e corrotinas::
* Tarefas: Tarefas<2>.
* await::


File: python.info,  Node: Laço de eventos,  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,  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: 7e2, 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: 364e.

     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: 107f.
(corrotina nativa).  Observe que corrotinas também podem existir como
instâncias de *note collections.abc.Coroutine: fd1. — 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: dcd. e *note funções geradoras: 1257.
Lembre-se: uma função geradora é uma função que executa *note yield:
bb8, 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(): 9ce.  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: 3680. 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: 18d.  A maneira recomendada de
criar tarefas é via *note asyncio.create_task(): 1c9.

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).

Como há apenas um laço de eventos (em cada thread), ‘asyncio’ se
encarrega de associar a tarefa ao laço de eventos para você.  Portanto,
não há necessidade de especificar o laço de eventos.

     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(): 2f1, 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: 18d. é 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(): 2f1.
pode ajudar a detectar tais ocorrências por meio do sinalizador
‘debug=True’, que habilita o *note modo de depuração: 1fe8.  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 muitos ‘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): 22ae. é 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 value: {returned_value}.")

*note yield: 2324, 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__(): f69. 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: de9. com
o valor de retorno anexado ao atributo *note value: 22ab.

Esse trecho de código produz esta saída:

     Beginning coroutine main().
     Awaiting rock...
     Coroutine paused and returned intermediate value: 7.
     Resuming coroutine and sending in value: 42.
     Rock.__await__ resuming with value: 42.
     Coroutine received value: 42 from rock.
     Coroutine main() finished and provided value: 23.

It’s worth pausing for a moment here and making sure you followed the
various ways that control flow and values were passed.  A lot of
important ideas were covered and it’s worth ensuring your understanding
is firm.

The only way to yield (or effectively cede control) from a coroutine is
to ‘await’ an object that ‘yield’s in its ‘__await__’ method.  That
might sound odd to you.  You might be thinking:

     1.  What about a ‘yield’ directly within the coroutine function?
     The coroutine function becomes an *note async generator function:
     2328, a different beast entirely.

     2.  What about a *note yield from: 2324. 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
...............

A *note future: 375c. is an object meant to represent a computation’s
status and result.  The term is a nod to the idea of something still to
come or not yet happened, and the object is a way to keep an eye on that
something.

A future has a few important attributes.  One is its state which can be
either “pending”, “cancelled” or “done”.  Another is its result, which
is set when the state transitions to done.  Unlike a coroutine, a future
does not represent the actual computation to be done; instead, it
represents the status and result of that computation, kind of like a
status light (red, yellow or green) or indicator.

*note asyncio.Task: 1c7. subclasses *note asyncio.Future: dba. in order
to gain these various capabilities.  The prior section said tasks store
a list of callbacks, which wasn’t entirely accurate.  It’s actually the
‘Future’ class that implements this logic, which ‘Task’ inherits.

Futures may also be used directly (not via tasks).  Tasks mark
themselves as done when their coroutine is complete.  Futures are much
more versatile and will be marked as done when you say so.  In this way,
they’re the flexible interface for you to make your own conditions for
waiting and resuming.


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
................................

We’ll go through an example of how you could leverage a future to create
your own variant of asynchronous sleep (‘async_sleep’) which mimics
*note asyncio.sleep(): c58.

This snippet registers a few tasks with the event loop and then awaits a
coroutine wrapped in a task: ‘async_sleep(3)’.  We want that task to
finish only after three seconds have elapsed, but without preventing
other tasks from running.

     async def other_work():
         print("I like work. Work work.")

     async def main():
         # Add a few other tasks to the event loop, so there's something
         # to do while asynchronously sleeping.
         work_tasks = [
             asyncio.create_task(other_work()),
             asyncio.create_task(other_work()),
             asyncio.create_task(other_work())
         ]
         print(
             "Beginning asynchronous sleep at time: "
             f"{datetime.datetime.now().strftime("%H:%M:%S")}."
         )
         await asyncio.create_task(async_sleep(3))
         print(
             "Done asynchronous sleep at time: "
             f"{datetime.datetime.now().strftime("%H:%M:%S")}."
         )
         # asyncio.gather effectively awaits each task in the collection.
         await asyncio.gather(*work_tasks)

Below, we use a future to enable custom control over when that task will
be marked as done.  If *note future.set_result(): 3683. (the method
responsible for marking that future as done) is never called, then this
task will never finish.  We’ve also enlisted the help of another task,
which we’ll see in a moment, that will monitor how much time has elapsed
and, accordingly, call ‘future.set_result()’.

     async def async_sleep(seconds: float):
         future = asyncio.Future()
         time_to_wake = time.time() + seconds
         # Add the watcher-task to the event loop.
         watcher_task = asyncio.create_task(_sleep_watcher(future, time_to_wake))
         # Block until the future is marked as done.
         await future

Below, we’ll use a rather bare object, ‘YieldToEventLoop()’, to ‘yield’
from ‘__await__’ in order to cede control to the event loop.  This is
effectively the same as calling ‘asyncio.sleep(0)’, but this approach
offers more clarity, not to mention it’s somewhat cheating to use
‘asyncio.sleep’ when showcasing how to implement it!

As usual, the event loop cycles through its tasks, giving them control
and receiving control back when they pause or finish.  The
‘watcher_task’, which runs the coroutine ‘_sleep_watcher(...)’, will be
invoked once per full cycle of the event loop.  On each resumption,
it’ll check the time and if not enough has elapsed, then it’ll pause
once again and hand control back to the event loop.  Eventually, enough
time will have elapsed, and ‘_sleep_watcher(...)’ will mark the future
as done, and then itself finish too by breaking out of the infinite
‘while’ loop.  Given this helper task is only invoked once per cycle of
the event loop, you’d be correct to note that this asynchronous sleep
will sleep 'at least' three seconds, rather than exactly three seconds.
Note this is also of true of ‘asyncio.sleep’.

     class YieldToEventLoop:
         def __await__(self):
             yield

     async def _sleep_watcher(future, time_to_wake):
         while True:
             if time.time() >= time_to_wake:
                 # This marks the future as done.
                 future.set_result(None)
                 break
             else:
                 await YieldToEventLoop()

Aqui está a saída completa do programa:

     $ python custom-async-sleep.py
     Beginning asynchronous sleep at time: 14:52:22.
     I like work. Work work.
     I like work. Work work.
     I like work. Work work.
     Done asynchronous sleep at time: 14:52:25.

You might feel this implementation of asynchronous sleep was
unnecessarily convoluted.  And, well, it was.  The example was meant to
showcase the versatility of futures with a simple example that could be
mimicked for more complex needs.  For reference, you could implement it
without futures, like so:

     async def simpler_async_sleep(seconds):
         time_to_wake = time.time() + seconds
         while True:
             if time.time() >= time_to_wake:
                 return
             else:
                 await YieldToEventLoop()

But, that’s all for now.  Hopefully you’re ready to more confidently
dive into some async programming or check out advanced topics in the
*note rest of the documentation: b.


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: 4d2f. 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: 2f.
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: 2f.
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(): 330b.  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(): 1865, 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(): 3332.

     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: 33aa.
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(): 330e. 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(): c67. 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(): c67. 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: 8ed.…*note except: 1ab.
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(): 1865. é 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(): 3330. 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: fe1. e *note curses.COLS: fe2. 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(): 330c. 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(): 330a. de cada janela para
     atualizar uma estrutura de dados subjacente representando o estado
     desejado da tela.

  2. Chama a função *note doupdate(): 3309. 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(): 330b. 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(): 330b. 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: 1292. da janela; o valor padrão usado
é a codificação padrão do sistema como retornado por *note
locale.getencoding(): 327.

Os métodos *note addch(): 334b. 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: 3417. é
um símbolo de +/-, e *note ACS_ULCORNER: 3355. é 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(): 3303.  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: 3396.       Texto piscante
                           
                           
*note A_BOLD: 3397.        Texto em negrito ou brilho extra
                           
                           
*note A_DIM: 3398.         Texto em brilho médio
                           
                           
*note A_REVERSE: 3301.     Texto em vídeo reverso
                           
                           
*note A_STANDOUT: 3300.    O modo mais destacado disponível
                           
                           
*note A_UNDERLINE: 339c.   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(): 333c.
logo depois de chamar *note initscr(): 1865, para inicializar a paleta
de cores padrão (a função *note curses.wrapper(): c67. faz isso
automaticamente.)  Uma vez feito isso, a função *note has_colors():
3321. 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(): 32ff.; esse valor pode ser combinado com OU
(OR) bit a bit com outros atributos como *note A_REVERSE: 3301, 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(): 333c. 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: 2f. define constantes nomeadas para cada uma dessas cores:
*note curses.COLOR_BLACK: 3429, *note curses.COLOR_RED: 342e, 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(): 32fc, 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: 2f. 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(): 1793. atualiza a tela e então espera o usuário
     apertar alguma tecla, exibindo o valor dela caso *note echo():
     330d. tenha sido chamada anteriormente.  Opcionalmente, você pode
     especificar a coordenada onde o cursor deve ser posicionado antes
     de pausar.

   * O *note getkey(): 3369. 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():
337d. 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(): 3325, 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: 33bb, *note curses.KEY_HOME: 33ac. ou *note
curses.KEY_LEFT: 33aa.  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: 30. 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(): 3471.
retorna o caractere de controle correspondente ao argumento.

Também há um método para pegar uma string inteira, *note getstr(): 17a6.
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: 32. fornece uma caixa de texto que provê
um conjunto de atalhos de teclado estilo Emacs.  Vários métodos da
classe *note Textbox: 3432. 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: 32. 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: 2f. 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_*: 3403.
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: 17e7. 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(): 488,
     *note staticmethod(): 450, *note property(): 4ad. e *note
     __slots__: 7ec.

* Menu:

* Introdução: Introdução<15>.
* Exemplo completamente prático::
* Tutorial técnico::
* Equivalentes de Python puro::


File: python.info,  Node: Introdução<15>,  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<15>

9.4.1.1 Exemplo simples: um descritor que retorna uma constante
...............................................................

A classe ‘Ten’ é um descritor cujo método *note __get__(): 16d6. 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<15>

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__():
16d6.  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__(): 16d6. 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<15>

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__(): 16d6. e
*note __set__(): 224c. 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<15>

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__(): e3c. 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__(): e3c. para que os nomes dos campos fossem registrados.
Aqui chamamos *note vars(): 1cd9. 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<15>

9.4.1.5 Pensamentos finais
..........................

Um *note descritor: 17e7. é o que chamamos de qualquer objeto que define
*note __get__(): 16d6, *note __set__(): 224c. ou *note __delete__():
18a2.

Opcionalmente, os descritores podem ter um método *note __set_name__():
e3c.  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(): 488, *note staticmethod(): 450, *note property(): 4ad. e
*note functools.cached_property(): 758. são todas implementadas como
descritores.


File: python.info,  Node: Exemplo completamente prático,  Next: Tutorial técnico,  Prev: Introdução<15>,  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: 13b2. 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: 19b. ou *note float:
     196.  Opcionalmente, ele verifica se um valor está entre um mínimo
     ou máximo dado.

  3. ‘String’ verifica se um valor é um *note str: 169.  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__(): 16d6, *note
__set__(): 224c. e *note __delete__(): 18a2.  Se qualquer um desses
métodos for definido para um atributo, ele é dito ser um *note
descritor: 17e7.

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(): 1a6.  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__(): 224c. ou *note __delete__(): 18a2,
ele é considerado um descritor de dados.  Descritores que definem apenas
*note __get__(): 16d6. 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__(): 16d6. e *note __set__(): 224c. com o *note __set__(): 224c.
levantando *note AttributeError: 5e4. quando chamado.  Definir o método
*note __set__(): 224c. 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__: 772, seu método *note __get__(): 16d6. é 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__(): 6ef, 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__(): dbf.  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__(): 6ef. no código *note
__getattribute__(): dbf.  É por isso que chamar *note
__getattribute__(): dbf. diretamente ou com ‘super().__getattribute__’
ignorará *note __getattr__(): 6ef. completamente.

Em vez disso, é o operador ponto e a função *note getattr(): dbe. que
são responsáveis por invocar *note __getattr__(): 6ef. sempre que *note
__getattribute__(): dbf. levanta um *note AttributeError: 5e4.  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: 2471. 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.14/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__(): dbf. para o objeto retornado por *note super(): 1a6.

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.14/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__(): dbf. para *note object: c72, *note type: f38. e
*note super(): 1a6.

Os pontos importantes para lembrar são:

   * Descritores são invocados pelo método *note __getattribute__():
     dbf.

   * As classes herdam esse maquinário de *note object: c72, *note type:
     f38. ou *note super(): 1a6.

   * Substituir *note __getattribute__(): dbf. 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__(): 16d6.  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: f38. varre o dicionário da nova classe.  Se qualquer uma das
entradas for descritor e se eles definirem *note __set_name__(): e3c,
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__(): e3c.
precisará ser chamado manualmente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.14/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(): 4ad. é 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(): 4ad. é 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(): 4ad. 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(): 4ad. 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:
1a9e, 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__(): 16d6. 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: 1be4. 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__(): 16d6.  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__(): 16d6. 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__(): 16d6. 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__(): 16d6. 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(): 450. 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)

         @property
         def __annotations__(self):
             return self.f.__annotations__

The *note functools.update_wrapper(): 1218. 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, including *note __name__: 14d0, *note __qualname__:
21e2, and *note __doc__: 13d5.


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(): 24d. 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(): 488. 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(): 1218. 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__: 14d0, *note __qualname__: 21e2,
*note __doc__: 13d5, and *note __annotations__: 13d4.


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(): 758. 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__(): 795. 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: 2267. 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: 5d5.*, 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: 503. 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: 502. 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: 39b.*) 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: 39b.*:

     (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: 98c.*::.

     (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: 837. é um conjunto de nomes simbólicos vinculados a
valores únicos.  São similares a variáveis globais, mas eles oferecem
uma *note repr(): 1c1. 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: 837. é tão simples quanto
escrever uma classe que herda do próprio *note Enum: 837.

     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: 1f9. tem dois métodos para retornar o
dia da semana: *note weekday(): 275a. e *note isoweekday(): 275b.  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: 1f9. 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: 24c. – poderíamos ao invés disso usar um
tipo diferente de *note Enum: 837.:

     >>> 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: 82a.
(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: 82a. 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: 82a.:

     >>> 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(): e8f. 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::
* Restricted Enum subclassing::
* 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(): 28c8.:

     >>> 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: e8f.:

     >>> 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_(): 28dc, 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_(): 28dc. 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

Ordered comparisons between enumeration values are 'not' supported.
Enum members are not integers (but see *note IntEnum: 5455. below):

     >>> Color.RED < Color.BLUE
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: '<' not supported between instances of 'Color' and 'Color'

Equality comparisons are defined though:

     >>> Color.BLUE == Color.RED
     False
     >>> Color.BLUE != Color.RED
     True
     >>> Color.BLUE == Color.BLUE
     True

Comparisons against non-enumeration values will always compare not equal
(again, *note IntEnum: ecf. was explicitly designed to behave
differently, see below):

     >>> Color.BLUE == 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: Restricted Enum subclassing,  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: 5457.), 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'

The rules for what is allowed are as follows: names that start and end
with a single underscore are reserved by enum and cannot be used; all
other attributes defined within an enumeration will become members of
this enumeration, with the exception of special methods (*note
__str__(): 825, *note __add__(): 2274, etc.), descriptors (methods are
also descriptors), and variable names listed in *note _ignore_: 28da.

Note: if your enumeration defines *note __new__(): 795. and/or *note
__init__(): 8b4, any value(s) given to the enum member will be passed
into those methods.  See *note Planet: 5458. for an example.

     Nota: The *note __new__(): 795. method, if defined, is used during
     creation of the Enum members; it is then replaced by Enum’s *note
     __new__(): 795. which is used after class creation for lookup of
     existing members.  See *note When to use __new__() vs.  __init__():
     5459. for more details.


File: python.info,  Node: Restricted Enum subclassing,  Next: Suporte a dataclass,  Prev: Membros e atributos permitidos em enumerações,  Up: Enum

9.6.8 Restricted Enum subclassing
---------------------------------

A new *note Enum: 837. class must have one base enum class, up to one
concrete data type, and as many *note object: c72.-based mixin classes
as needed.  The order of these base classes is:

     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
     ...

Allowing subclassing of enums that define members would lead to a
violation of some important invariants of types and instances.  On the
other hand, it makes sense to allow sharing some common behavior between
a group of enumerations.  (See *note OrderedEnum: 545b. for an example.)


File: python.info,  Node: Suporte a dataclass,  Next: Pickling,  Prev: Restricted Enum subclassing,  Up: Enum

9.6.9 Suporte a dataclass
-------------------------

When inheriting from a *note dataclass: 4db, the *note __repr__(): 1a2d.
omits the inherited class’ name.  For example:

     >>> 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 the *note dataclass(): 4db. argument ‘repr=False’ to use the
standard *note repr(): 1c1.

Alterado na versão 3.12: Only the dataclass fields are shown in the
value area, not the dataclass’ name.

     Nota: Adding *note dataclass(): 4db. decorator to *note Enum: 837.
     and its subclasses is not supported.  It will not raise any errors,
     but it will produce very strange results at runtime, such as
     members being equal to each other:

          >>> @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
---------------

Enumerations can be pickled and unpickled:

     >>> from test.test_enum import Fruit
     >>> from pickle import dumps, loads
     >>> Fruit.TOMATO is loads(dumps(Fruit.TOMATO))
     True

The usual restrictions for pickling apply: picklable enums must be
defined in the top level of a module, since unpickling requires them to
be importable from that module.

     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__(): 18bf. 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: 837. é 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: 4da.  The first
argument of the call to *note Enum: 837. 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: 837. 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__: 220c. 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: 837. that is provided is also a
subclass of *note int: 19b.  Members of an *note IntEnum: ecf. 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: 837.
enumerations:

     >>> class Shape(IntEnum):
     ...     CIRCLE = 1
     ...     SQUARE = 2
     ...
     >>> class Color(Enum):
     ...     RED = 1
     ...     GREEN = 2
     ...
     >>> Shape.CIRCLE == Color.RED
     False

*note IntEnum: ecf. 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: 837. that is provided is also a
subclass of *note str: 169.  Members of a *note StrEnum: 822. 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: 837. provided, *note IntFlag: e8e, is
also based on *note int: 19b.  The difference being *note IntFlag: e8e.
members can be combined using the bitwise operators (&, |, ^, ~) and the
result is still an *note IntFlag: e8e. member, if possible.  Like *note
IntEnum: ecf, *note IntFlag: e8e. members are also integers and can be
used wherever an *note int: 19b. is used.

     Nota: Any operation on an *note IntFlag: e8e. member besides the
     bit-wise operations will lose the *note IntFlag: e8e. membership.

     Bit-wise operations that result in invalid *note IntFlag: e8e.
     values will lose the *note IntFlag: e8e. membership.  See *note
     FlagBoundary: 82b. for details.

Adicionado na versão 3.6.

Alterado na versão 3.11.

Sample *note IntFlag: e8e. 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: e8e. and *note Enum:
837. is that if no flags are set (the value is 0), its boolean
evaluation is *note False: d1f.:

     >>> Perm.R & Perm.X
     <Perm: 0>
     >>> bool(Perm.R & Perm.X)
     False

Because *note IntFlag: e8e. members are also subclasses of *note int:
19b. they can be combined with them (but may lose *note IntFlag: e8e.
membership:

     >>> Perm.X | 4
     <Perm.R|X: 5>

     >>> Perm.X + 8
     9

     Nota: The negation operator, ‘~’, always returns an *note IntFlag:
     e8e. member with a positive value:

          >>> (~Perm.X).value == (Perm.R|Perm.W).value == 6
          True

*note IntFlag: e8e. 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: 82a.  Like *note IntFlag: e8e, *note
Flag: 82a. members can be combined using the bitwise operators (&, |, ^,
~).  Unlike *note IntFlag: e8e, they cannot be combined with, nor
compared against, any other *note Flag: 82a. enumeration, nor *note int:
19b.  While it is possible to specify the values directly it is
recommended to use *note auto: e8f. as the value and let *note Flag:
82a. select an appropriate value.

Adicionado na versão 3.6.

Like *note IntFlag: e8e, if a combination of *note Flag: 82a. members
results in no flags being set, the boolean evaluation is *note False:
d1f.:

     >>> 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: 82a. 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: 837. and *note
     Flag: 82a. are strongly recommended, since *note IntEnum: ecf. and
     *note IntFlag: e8e. break some semantic promises of an enumeration
     (by being comparable to integers, and thus by transitivity to other
     unrelated enumerations).  *note IntEnum: ecf. and *note IntFlag:
     e8e. should be used only in cases where *note Enum: 837. and *note
     Flag: 82a. 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: ecf. is part of the *note enum: 5a. 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: 196. instead of *note
int: 19b.

Algumas regras:

  1. When subclassing *note Enum: 837, mix-in types must appear before
     the *note Enum: 837. class itself in the sequence of bases, as in
     the *note IntEnum: ecf. example above.

  2. Mix-in types must be subclassable.  For example, *note bool: 3c0.
     and *note range: b33. are not subclassable and will throw an error
     during Enum creation if used as the mix-in type.

  3. While *note Enum: 837. 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: 19b. 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: 28d5.
     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__(): 795, or a
     *note dataclass: 4db.

  6. %-style formatting: ‘%s’ and ‘%r’ call the *note Enum: 837. class’s
     *note __str__(): 825. and *note __repr__(): 824. respectively;
     other codes (such as ‘%i’ or ‘%h’ for IntEnum) treat the enum
     member as its mixed-in type.

  7. *note Formatted string literals: 19a, *note str.format(): 828, and
     *note format(): 199. will use the enum’s *note __str__(): 825.
     method.

     Nota: Because *note IntEnum: ecf, *note IntFlag: e8e, and *note
     StrEnum: 822. are designed to be drop-in replacements for existing
     constants, their *note __str__(): 825. method has been reset to
     their data types’ *note __str__(): 825. 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__(): 795. must be used whenever you want to customize the
actual value of the *note Enum: 837. member.  Any other modifications
may go in either *note __new__(): 795. or *note __init__(): 8b4, with
*note __init__(): 8b4. 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__: 28d2. is a read-only ordered mapping of
‘member_name’:‘member’ items.  It is only available on the class.

*note __new__(): 795, if specified, must create and return the enum
members; it is also a very good idea to set the member’s *note _value_:
28d8. 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_: 28d7. – name of the member

   - *note _value_: 28d8. – value of the member; can be set in ‘__new__’

   - *note _missing_(): 28df. – a lookup function used when a value is
     not found; may be overridden

   - *note _ignore_: 28da. – a list of names, either as a *note list:
     24c. or a *note str: 169, that will not be transformed into
     members, and will be removed from the final class

   - *note _generate_next_value_(): 28dc. – used to get an appropriate
     value for an enum member; may be overridden

   - *note _add_alias_(): 28e0. – adds a new name as an alias to an
     existing member.

   - *note _add_value_alias_(): 28e1. – adds a new value as an alias to
     an existing member.  See *note MultiValueEnum: 5467. for an
     example.

          Nota: For standard *note Enum: 837. classes the next value
          chosen is the highest value seen incremented by one.

          For *note Flag: 82a. 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_: 28d9.
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_: 28d9. 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: 1f58. 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: 19b. or *note str:
169, with an *note Enum: 837, 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: 837. types (such as
*note int: 19b, *note str: 169, etc.)  are evaluated according to the
mixed-in type’s rules; otherwise, all members evaluate as *note True:
dfb.  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: 837. classes always evaluate as *note True: dfb.


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:
5458. class below, those methods will show up in a *note dir(): 839. 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: 82a. 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: 837. 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: 4f1. metaclass is responsible for providing the
*note __contains__(): 15ab, *note __dir__(): 1758, *note __iter__():
e5d. and other methods that allow one to do things with an *note Enum:
837. class that fail on a typical class, such as ‘list(Color)’ or
‘some_enum_var in Color’.  *note EnumType: 4f1. is responsible for
ensuring that various other methods on the final *note Enum: 837. class
are correct (such as *note __new__(): 795, *note __getnewargs__(): fc8,
*note __str__(): 825. and *note __repr__(): 824.).


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: 837. 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: 4f1. creates them all while it is creating
the enum class itself, and then puts a custom *note __new__(): 795. 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: 82a. 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: 837, *note IntEnum: ecf, *note StrEnum: 822, *note
Flag: 82a, and *note IntFlag: e8e. 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: e8f. for the value

   - use instances of *note object: c72. as the value

   - use a descriptive string as the value

   - use a tuple as the value and a custom *note __new__(): 795. to
     replace the tuple with an *note int: 19b. 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: e8f. 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: c72. 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__(): 824.:

     >>> 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__(): 795. 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__(): 795. method, if defined, is used during
     creation of the Enum members; it is then replaced by Enum’s *note
     __new__(): 795. 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: ecf. and so
maintains the normal *note Enum: 837. 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(): 28c8.
     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__(): 795. or *note __init__(): 8b4. 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_: 28da. 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: 837.
subclasses, either with class decorators or custom functions, *note
EnumType: 4f1. 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: 4c2. e *note geradores: 1257. e
bibliotecas de módulos relevantes como um *note itertools: 85. e *note
functools: 63.

* Menu:

* Introdução: Introdução<16>.
* 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<16>,  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: 5482.

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(): 116b. ou da função *note time.sleep(): 8a1,
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<16>

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<16>

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<16>

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<16>

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<16>,  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__(): 14c9. 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__(): 14c9. deve aumentar
a exceção *note StopIteration: de9.  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(): 9cd. 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: 198. 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: 1423. 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: 347.  Na declaração ‘for X in Y’,
Y deve ser um iterador ou algum objeto para o qual *note iter(): 9cd.
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(): 24c. ou *note tuple():
608.:

     >>> 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(): 1102. e *note min(): 1101.
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(): 1102, *note min(): 1101. 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__(): 14c9.  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(): 9cd. 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(): 9cd. 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(): 9c7. ou *note items():
9c8. para obter um iterador apropriado.

O construtor *note dict(): 183. 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(): 1f5b. 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:
         # faz algo em cada linha
         ...

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: bb8. é uma
função de gerador; isso é detectado pelo compilador de *note bytecode:
4a4. 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__(): 1f63, 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__():
1f63.  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__(): 14c9. 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.14/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: bb8. 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): 22ae.  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__(): 1f63. 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(): 22ae. será o único método
usado para retomar a função do gerador.

Além de *note send(): 22ae, há dois outros métodos em geradores:

   * *note throw(value): 711. é 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(): 19a4. envia uma exceção *note GeneratorExit: 15b9.
     ao gerador para encerrar a iteração.  Ao receber essa exceção, o
     código do gerador deve levantar *note GeneratorExit: 15b9. ou *note
     StopIteration: de9.; capturar a exceção e fazer qualquer outra
     coisa é ilegal e disparará um *note RuntimeError: 243.  *note
     close(): 19a4. 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: 15b9, sugiro usar um conjunto ‘try: ...
     finally:’ em vez de capturar *note GeneratorExit: 15b9.

O efeito cumulativo destas mudanças é transformar os geradores de
produtores unilaterais de informação em produtores e consumidores.

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(): 19f. e *note
filter(): a5a. duplicam os recursos das expressões geradoras:

*note map(f, iterA, iterB, ...): 19f. 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): a5a. returns an iterator over all the
sequence elements that meet a certain condition, and is similarly
duplicated by list comprehensions.  A 'predicate' is a function that
returns the truth value of some condition; for use with *note filter():
a5a, the predicate must take a single value.

     >>> 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): 166f. 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(): 166f. 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): dbb. 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(): dbc. 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: 246f.)

The *note any(iter): 1612. and *note all(iter): 1613. built-ins look at
the truth values of an iterable’s contents.  *note any(): 1612. returns
‘True’ if any element in the iterable is a true value, and *note all():
1613. 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, ...): 1a0. 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: 85. 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): 147f. 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): 2a43. 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]): 17c4. 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, ...): 2470. 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]): d37. 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]): 2a48. 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: a3. module contains a set of functions corresponding
to Python’s operators.  Some examples are *note operator.add(a, b):
2a6f. (adds two values), *note operator.ne(a, b): 2a5f. (same as ‘a !=
b’), and *note operator.attrgetter('id'): 1028. (returns a callable that
fetches the ‘.id’ attribute).

*note itertools.starmap(func, iter): 12e0. 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): 245c. is the opposite of
*note filter(): a5a, 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): 2a47. 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): 2a45. 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): 147e. 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): 150d. 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): 1bbd, 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): 147d.
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): 2a46, 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(): 2a46. 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(): 2a46. 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: 63. 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(): 216. 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(): 216. 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]): 219. 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(): 219. 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:
198. 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(): 2a6f. with *note functools.reduce():
219, 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(): 68a. 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(): 219, though, it can be
clearer to just write the obvious *note for: 347. 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): be6.  It performs the same calculation, but instead
of returning only the final result, *note accumulate(): be6. 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: a3. 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: 1499. 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(): 68a. embutida e uma expressão do gerador:

     total = sum(b for a, b in items)

Muitas utilizações de *note functools.reduce(): 219. 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: 85.

Documentation for the *note functools: 63. module.

Documentação para o módulo *note operator: a3.

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: 549f.

* 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(): 1020, *note info(): 2ff0,
*note warning(): 19b3, *note error(): 2ff2. e *note critical(): 101f.
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(): 116b.
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(): 2ff0. de
durante a operação normal de um           um logger (ou o método
programa (por exemplo, para monitorar o   *note debug(): 1020, no caso de
estado atual de execução ou poder         mensagens mais detalhadas para
investigar falhas)                        diagnóstico e 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(): 1707. 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(): 19b3.
                                          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(): 2ff2,
levantar uma exceção (por exemplo, ao     *note exception(): 101e. ou
utilizar um tratador de erro em um        *note critical(): 101f. 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, utilizamos funções diretamente do módulo
‘logging’, como ‘logging.debug’, em vez de criar uma instância de Logger
e chamar funções dela.  Estas funções operam no logger raiz, mas pode
ser útil chamar *note basicConfig(): be9. caso ainda não tenha sido
chamado, como neste exemplo.  No entanto, para programas maiores, você
normalmente precisará controlar explicitamente a configuração de
logging.  Portanto, no geral, é melhor instanciar 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(): 314.  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():
314.

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(): be9.
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(): be9. deve vir 'antes' de qualquer
chamada para métodos de um logger, como *note debug(): 1020, *note
info(): 2ff0, 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(): 828. e *note string.Template: 88c.  Mas explorar estes
métodos está fora do escopo deste tutorial.  Veja *note Using particular
formatting styles throughout your application: 3011. 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: 2fef, 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(): 13e5.

   ---------- 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: 13f3.

   ---------- 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.

   * Os loggers oferecem uma interface para que o código da aplicação
     possa registrar eventos.

   * Manipuladores enviam os registros do evento (criados por loggers)
     aos destinos apropriados.

   * Filtros facilitam granularmente a determinação de quais registros
     de eventos devem ser exibidos na saída.

   * Formatadores especificam a composição visual do log de eventos ao
     ser exibido.

Um evento, quando registrado, passa por loggers, manipuladores, filtros
e formatadores através de uma instância de *note LogRecord: 11dc.

Para executar uma ação de logging, é necessário criar instâncias da
classe *note Logger: d3a. (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(): 2ff1, *note info(): 301c, *note
warning(): 351, *note error(): 3030. e *note critical(): 3031, 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(): be9, como nos exemplos do tutorial.  Se você chamar
as funções *note debug(): 2ff1. , *note info(): 301c, *note warning():
351, *note error(): 3030. e *note critical(): 3031, 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(): be9. para mensagens
é:

     severity:logger name:message

Você pode alterar isso passando uma string de formato para *note
basicConfig(): be9, através do argumento nomeado 'format'.  Para sobre
como uma string de formato é construída, consulte *note Formatter
Objects: 300e.

* 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: d3a. 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(): 1681. 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(): 2fe7. e *note Logger.removeHandler():
     2fe8. adicionam e removem objetos manipuladores do objeto logger.
     Manipuladores serão aprofundados em *note Manipuladores: 54ac.

   * *note Logger.addFilter(): 2ff5. e *note Logger.removeFilter():
     2ff6. adicionam e removem objetos filtros do objeto logger.
     Filtros serão aprofundados em *note Filter Objects: 3019.

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(): 1020, *note Logger.info(): 2ff0, *note
     Logger.warning(): 19b3, *note Logger.error(): 2ff2. e *note
     Logger.critical(): 101f. 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(): 101e. cria uma mensagem de log parecida
     com *note Logger.error(): 2ff2.  A diferença é que, além da
     mensagem, *note Logger.exception(): 101e. 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(): 101d. 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(): b4f. 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(): b4f. 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: 1684. 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: d3a. podem adicionar
um ou mais manipuladores a si mesmos usando o método *note addHandler():
2fe7.  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: 54ae.); os tutoriais usam principalmente *note
StreamHandler: 13f4. e *note FileHandler: 1b42. 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(): 3003, 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(): 3003.?  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(): 3004. define um objeto Formatador para que o
     manipulador utilize.

   * *note addFilter(): 3005. e *note removeFilter(): 3006,
     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: 1684.  Na verdade, *note Handler: 1684. é 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:
1684, 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: 2fef.
Se o estilo for ‘'{'’, a string de formato é presumida como compatível
com *note str.format(): 828. (usando argumentos nomeados).  Já se o
estilo for ‘'$'’, a string de formato deverá seguir o que é esperado por
*note string.Template.substitute(): 25df.

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(): 16e7.; 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(): 16e7. ou *note time.gmtime():
13bc.  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(): d3c.

  3. Criando um dicionário com as informações de configuração e
     passando-o para a função *note dictConfig(): 13ac.

Para a documentação de referência sobre as duas últimas opções, consulte
*note Funções de configuração: 14ed.  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(): d3c. 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():
     d3c. 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(): 13ac. 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: 3070. (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: 14ed.


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: 13f6.  Esse manipulador interno não está
associado a nenhum logger e funciona como um *note StreamHandler: 13f4,
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: 13f5. for ‘False’ (modo em produção), o
     evento será silenciosamente descartado.

   * Se *note raiseExceptions: 13f5. 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: 13f6. 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: 1480. (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: 1480. '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: 11dc.  Quando um logger decide registrar um evento, uma
instância de *note LogRecord: 11dc. é 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: 1684.  Manipuladores são responsáveis por assegurar que uma
mensagem registrada em log (na forma de *note LogRecord: 11dc.) 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: 11dc. para destinos
específicos.  Cada logger pode ter zero, um ou mais manipuladores
associados à ele (através do método *note addHandler(): 2fe7. de *note
Logger: d3a.).  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(): 300c. para enviar a
mensagem ao seu destino.  Na maioria dos casos, subclasses
personalizadas de *note Handler: 1684. precisarão substituir esse método
*note emit(): 300c.

* 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: 1684, muitas subclasses úteis são
fornecidas:

  1. *note StreamHandler: 13f4, quando instanciadas, enviam mensagens
     para streams (objeto arquivo ou similar).

  2. *note FileHandler: 1b42, quando instanciadas, enviam mensagens para
     arquivos locais de disco.

  3. *note BaseRotatingHandler: 3074. é 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: 1894. ou *note
     TimedRotatingFileHandler: 1157.

  4. *note RotatingFileHandler: 1894, 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: 1157, quando instanciadas, enviam
     mensagens para arquivos locais de disco, rotacionando o arquivo de
     log em certos intervalos de tempo.

  6. *note SocketHandler: 1158, 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: 1159, 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: 1813, quando instanciadas, enviam mensagens para
     endereços de e-mail pré-definidos.

  9. *note SysLogHandler: 861, quando instanciadas, enviam mensagens
     para um daemon syslog Unix, normalmente em um computador remoto.

  10. *note NTEventLogHandler: 309a, quando instanciadas, enviam
     mensagens para um registro de log do Windows NT/2000/XP.

  11. *note MemoryHandler: 3053, 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: 1021, quando instanciadas, enviam mensagens
     para um servidor HTTP, utilizando os métodos ‘GET’ ou ‘POST’.

  13. *note WatchedFileHandler: 3070, 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: 1a7d, quando instanciadas, enviam mensagem
     para uma fila, que pode ser implementada com o módulo *note queue:
     bb. ou com o módulo *note multiprocessing: 98.

  15. *note NullHandler: 1480, 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: 306d. para mais informações.

Adicionado na versão 3.1: A classe *note NullHandler: 1480.

Adicionado na versão 3.2: A classe *note QueueHandler: 1a7d.

As subclasses *note NullHandler: 1480, *note StreamHandler: 13f4. e
*note FileHandler: 1b42. são definidas no pacote base de logging.  Os
outros manipuladores são definidos no submódulo *note logging.handlers:
8d.  (Existe também outro submódulo, *note logging.config: 8c, para
configurar as funcionalidades).

As mensagens de log são formatadas por meio de instâncias da classe
*note Formatter: 1685.  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: 3015.  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: 13f7. poderão
ser adicionadas às instâncias de *note Logger: d3a. e *note Handler:
1684. (por meio do método *note addFilter(): 3005.).  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: 13f7. 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: f30. e *note KeyboardInterrupt: bbb. nunca
são inibidas.  Outras exceções que possam ocorrem durante o método *note
emit(): 300c. de uma subclasse de *note Handler: 1684. são passadas para
seus respectivos métodos *note handleError(): 300b.

A implementação padrão de *note handleError(): 300b. em *note Handler:
1684. verifica se uma variável de módulo, *note raiseExceptions: 13f5,
está definida.  Caso esteja, um traceback (situação da pilha de
execução) é exibido em *note sys.stderr: b29.  Se não, a exceção é
inibida.

     Nota: O valor padrão de *note raiseExceptions: 13f5. é
     ‘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:
     13f5. 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__(): 825. 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: 1158. 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(): 14f2, 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(): 14f2. 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(): 14f2. 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(): 8e5, o que pode
                                                          acelerar seu código em ambientes como o PyPy (que não
                                                          consegue acelerar códigos que usam
                                                          *note sys._getframe(): 8e5.).
                                                          
                                                          
Informações sobre threading.                              Defina ‘logging.logThreads’ como ‘False’.
                                                          
                                                          
ID do processo atual (*note os.getpid(): 2e8f.)           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: 1c7. 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: 8d. e *note
logging.config: 8c, 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: 8b.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 8c.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 8d.

     Manipuladores úteis incluídos no módulo logging.

*note Um livro de receitas do logging: 13f3.


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: 54bf.

* 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(): 2fe7. 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: 1813.: 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: 1158.
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: 1a7d. 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: 3502. 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: 241, which has
been designed as the counterpart to *note QueueHandler: 1a7d.  A *note
QueueListener: 241. 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: 241. 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: b. 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:
241. 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.

Alterado na versão 3.14: The *note QueueListener: 241. can be started
(and stopped) via the *note with: 186. statement.  For example:

     with QueueListener(que, handler) as listener:
         # The queue listener automatically starts
         # when the 'with' block is entered.
         pass
     # The queue listener automatically stops once
     # the 'with' block is exited.


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: 1158. 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: d2. 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(): 308b. 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: d3a. 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: d3a. 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: d3a. 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:
14f1. class.  This class is designed to look like a *note Logger: d3a,
so that you can call *note debug(): 2ff1, *note info(): 301c, *note
warning(): 351, *note error(): 3030, *note exception(): 1682, *note
critical(): 3031. and *note log(): 3032.  These methods have the same
signatures as their counterparts in *note Logger: d3a, so you can use
the two types of instances interchangeably.

When you create an instance of *note LoggerAdapter: 14f1, you pass it a
*note Logger: d3a. 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: 14f1, it delegates the call to the
underlying instance of *note Logger: d3a. 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: 14f1.:

     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(): 3029. method of *note LoggerAdapter: 14f1. 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: 11dc. instance’s __dict__,
allowing you to use customized strings with your *note Formatter: 1685.
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: 14f1. and override *note process(): 3029. 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: 14f1. -
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: 13f7.  ‘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: 1685.

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: 17ca.) 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: 28. module has provided
context-local storage which works for both *note threading: f3. and
*note asyncio: b. 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: 1684. has its own chain of filters.  If you want to
add contextual information to a *note LogRecord: 11dc. without leaking
it to other handlers, you can use a filter that returns a new *note
LogRecord: 11dc. 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: 1158, 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: 54c9. 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: 17bd.
class from the *note multiprocessing: 98. module to serialize access to
the file from your processes.  The stdlib *note FileHandler: 1b42. and
subclasses do not make use of *note multiprocessing: 98.

Alternatively, you can use a ‘Queue’ and a *note QueueHandler: 1a7d. 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: 1d6. 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: 24.):

     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:
1158. 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:
54cb. 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: 1894.:

     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: 88c. (added in Python 2.4) and *note
str.format(): 828. (added in Python 2.6).

Logging (as of 3.2) provides improved support for these two additional
formatting styles.  The *note Formatter: 1685. 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(): 828. or *note
string.Template: 88c.  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(): 828. or *note string.Template: 88c. 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(): 1658. 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: 14f1. 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: 11dc. instance.
When an event is logged and not filtered out by a logger’s level, a
*note LogRecord: 11dc. 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(): 2ffa, which is called in the normal
     process of logging an event.  This invoked *note LogRecord: 11dc.
     directly to create an instance.

   * *note makeLogRecord(): 3020, 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: 1158,
     or in JSON form via an *note HTTPHandler: 1021.).

This has usually meant that if you need to do anything special with a
*note LogRecord: 11dc, you’ve had to do one of the following.

   * Create your own *note Logger: d3a. subclass, which overrides *note
     Logger.makeRecord(): 2ffa, and set it using *note setLoggerClass():
     302f. before any loggers that you care about are instantiated.

   * Add a *note Filter: 13f7. to a logger or handler, which does the
     necessary special manipulation you need when its *note filter():
     301b. 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: d3a. 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: 11dc.
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: 1480.
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: 11dc. creation is done through
a factory, which you can specify.  The factory is just a callable you
can set with *note setLogRecordFactory(): 3024, and interrogate with
*note getLogRecordFactory(): 3023.  The factory is invoked with the same
signature as the *note LogRecord: 11dc. constructor, as *note LogRecord:
11dc. 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: 13f7.
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: 1a7d. 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: 241. 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(): 13ac. 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: 861. 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: 1685. instance to your *note
     SysLogHandler: 861. 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(): 13ac. 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(): 542, 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(): 13ac, 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(): 542. makes an appearance.  This approach should work
with any Python version that supports *note dictConfig(): 13ac. -
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():
12ea.

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(): 13ac. 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(): 523.

Of course, the approach could also be extended to types of handler other
than a *note FileHandler: 1b42. - 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: 1685. 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(): 828. and *note
string.Template: 88c.  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(): 1020, *note info(): 2ff0. 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(): 828. or *note string.Template: 88c. 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: 1685. changes mentioned
above, the logging package gained the ability to allow users to set
their own *note LogRecord: 11dc. subclasses, using the *note
setLogRecordFactory(): 3024. function.  You can use this to set your own
subclass of *note LogRecord: 11dc, which does the Right Thing by
overriding the *note getMessage(): 3022. 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():
3024. and *note LogRecord: 11dc. 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: 3021.) that when
logging you can use an arbitrary object as a message format string, and
that the logging package will call *note str(): 169. 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(): 828.:

     >>> __ = 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: 88c.:

     >>> __ = 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(): 13ac, though it
might not be obvious at first glance how to do it (hence this recipe).
Since *note Filter: 13f7. 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: 13f7. subclass with an overridden *note filter(): 301b.
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: 13f7. 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 Access to external objects:
     3050.  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 User-defined
     objects: 3044. 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(): 54e8.
     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: division by zero|'Traceback (most recent call last):\n  File "logtest7.py", line 30, in main\n    x = 1 / 0\nZeroDivisionError: division 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: 104. 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: dc.  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: 3053, 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: 13f4. 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: 30a6.  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: 1685.  If you want to do that via configuration, you can use
the *note dictConfig(): 13ac. 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: f3. 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: 861. 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(): be9. 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(): be9, 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: 98. 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: 54d3. 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: 1480. 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: 3028. 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: 8b.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 8c.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 8d.

     Manipuladores úteis incluídos no módulo logging.

*note Tutorial básico: 13f1.

*note Tutorial avançado: 13f2.


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: be.  Ele provê uma introdução mais
tranquila que a seção correspondente à documentação do módulo.

* Menu:

* Introdução: Introdução<17>.
* 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<17>,  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: be.
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<17>,  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 consultar a 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: 10b.  Você pode usar a definição mais
restrita de ‘\w’ em um padrão de string, fornecendo o sinalizador *note
re.ASCII: 833. 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: 923. 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:
25f8.), 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: be. 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<2>.
* 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(): dc2. 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(): dc2. 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: be. é simplesmente um
módulo de extensão C incluído no Python, assim como os módulos de *note
socket: d1. ou *note zlib: 139.

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(): dc2. 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(): dc2.
                        
                        
‘"\\\\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: 1a3. e eventualmente se
tornarão uma *note SyntaxError: 18e, 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<2>,  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: be. 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: 4c2.
                       

*note match(): 2609. e *note search(): 260a. retornam ‘None’ se não
existir nenhuma correspondência encontrada.  Se tiveram sucesso, uma
instância de *note objeto correspondência: 117e. é 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: be.

Este documento usa o interpretador Python padrão para seus exemplos.
Primeiro, execute o interpretador Python, importe o módulo *note re: be,
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(): 2609. 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(): 2609. irá retornar um *note
objeto correspondência: 117e, 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: 117e. 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(): 1221. retorna a substring que correspondeu com a RE.
*note start(): 261c. e *note end(): 261d. retornam os índices inicial e
o final da substring correspondente.  *note span(): 261e. retorna tanto
os índices inicial e final em uma única tupla.  Como o método *note
match(): 2609. somente verifica se a RE corresponde ao início de uma
string, ‘start()’ será sempre zero.  No entanto, o método *note
search(): 260a. 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: 117e. 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(): 2610. 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: 1a3. e eventualmente se tornarão uma *note
SyntaxError: 18e.  Veja *note A praga da contrabarra: 5512.

*note findall(): 2610. tem que criar a lista inteira antes de poder
devolvê-la como resultado.  O método *note finditer(): 2611. retorna uma
sequência de instâncias *note objeto correspondência: 117e. como um
*note iterator: 4c2.:

     >>> 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<2>,  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: be. também fornece funções de nível superior chamadas *note
match(): 1429, *note search(): 1428, *note findall(): 1220, *note sub():
59c, 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: 117e.

     >>> 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<2>,  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: be. sob dois nomes, um nome longo, tal como *note
IGNORECASE: 19d2. e um curto, na forma de uma letra, como *note I: 25fb.
(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:
2607. é *note re.X: 2600, por exemplo).  Vários sinalizadores podem ser
especificados aplicando um ‘OU’ bit a bit nelas; ‘re.I | re.M’ define os
sinalizadores *note I: 25fb. e *note M: 25fd, por exemplo.

Aqui está uma tabela dos sinalizadores disponíveis, seguida por uma
explicação mais detalhada de cada um:

Sinalizador                           Significado
                                      
---------------------------------------------------------------------------------------
                                      
*note ASCII: 833, *note A: 25fa.      Faz com que vários escapes como ‘\w’, ‘\b’,
                                      ‘\s’ e ‘\d’ correspondam apenas a caracteres
                                      ASCII com a respectiva propriedade.
                                      
                                      
*note DOTALL: 25f8, *note S: 25fe.    Faz o ‘.’ corresponder a qualquer caractere,
                                      incluindo novas linhas.
                                      
                                      
*note IGNORECASE: 19d2,               Faz combinações sem diferenciar maiúsculo de
*note I: 25fb.                        minúsculo.
                                      
                                      
*note LOCALE: d57, *note L: 25fc.     Faz uma correspondência considerando a
                                      localidade.
                                      
                                      
*note MULTILINE: 25f9,                Correspondência multilinha, afetando ‘^’ e
*note M: 25fd.                        ‘$’.
                                      
                                      
*note VERBOSE: 2607, *note X: 2600.   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: 833. 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: 19d2, 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: d57.

 -- 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: d57. 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: 5516.)

     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: 2607.;
     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:
     2607.


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: 25f9. tenha sido definido, isso só irá corresponder ao
     início da string.  No modo *note MULTILINE: 25f9, 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: 25f9, ‘\A’ e ‘^’ são efetivamente a mesma
     coisa.  No modo *note MULTILINE: 25f9, 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.

‘\Z’

     O mesmo que ‘\z’.  Para compatibilidade com versões mais antigas de
     Python.

‘\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(): 1221, *note start(): 261c,
*note end(): 261d. e *note span(): 261e.  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: 117e. 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(): 1221. 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(): 1222. 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: 117e. 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(): 261b.:

     >>> 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: 78.:

     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::


File: python.info,  Node: Dividindo as strings,  Next: Busca e substituição,  Up: Modificando strings

9.10.5.1 Dividindo as strings
.............................

O método *note split(): 260f. 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(): 10a0. 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(): 59b.

 -- 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(): 59b. 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,  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(): 2612.
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(): 2612.  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(): 2613. 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: 117e. 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(): 59c, 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: be. é 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: be. como o
sinalizador *note IGNORECASE: 19d2, 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():
59c. parece ser a função a ser usada para isso, mas considere o método
*note replace(): 4b2.  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():
24dc. é 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: be, 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(): 1429. somente verifica se a RE corresponde ao
início da string, enquanto *note search(): 1428. 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(): 1428. 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():
1429, e apenas adicionar ‘.*’ ao início de sua RE. Resista a essa
tentação e use *note re.search(): 1428. 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(): 1428. 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: 2607. 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 = make_client_thread(clientsocket)
         ct.start()

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: 98. 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(): dbc.
que modifica a lista em si.  Há também a função embutida *note sorted():
dbb. 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::
* Strategies For Unorderable Types and Values::
* 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(): dbb.  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(): dbc.  Ele
modificará a lista localmente (e retornará ‘None’ para evitar confusão).
Usualmente este método é menos conveniente que a função *note sorted():
dbb. - 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(): dbc. é aplicável
apenas às listas.  Em contrapartida, a função *note sorted(): dbb.
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(): dbc. quando as funções *note sorted():
dbb, *note min(): 1101, *note max(): 1102, *note heapq.nsmallest():
2842. e *note heapq.nlargest(): 2841. possuem o parâmetro 'key', que
especifica uma função (ou outro chamável) a ser invocado para cada
elemento da lista antes de ser realizada a comparação.

Por exemplo, temos abaixo uma comparação de strings, sem distinção entre
caractéres maiúsculos e minúsculos, utilizando *note str.casefold():
fca.:

     >>> 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: 4db. ou
mesmo uma *note named tuple: 853.


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: ffb. 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: a3. tem as funções
*note itemgetter(): c4b, *note attrgetter(): 1028. e *note
methodcaller(): 1029.

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: 63. module provides another helpful tool for making
key-functions.  The *note partial(): 216. 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(): dbc. quanto a função *note sorted():
dbb. 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: Strategies For Unorderable Types and Values,  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(): 415c. is a comparison function.

To accommodate those situations, Python provides *note
functools.cmp_to_key: 13d6. 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: Strategies For Unorderable Types and Values,  Next: Curiosidades e conclusões<2>,  Prev: Funções de comparação,  Up: Técnicas de ordenação

9.12.8 Strategies For Unorderable Types and Values
--------------------------------------------------

A number of type and value issues can arise when sorting.  Here are some
strategies that can help:

   * Convert non-comparable input types to strings prior to sorting:

     >>> data = ['twelve', '11', 10]
     >>> sorted(map(str, data))
     ['10', '11', 'twelve']

This is needed because most cross-type comparisons raise a *note
TypeError: 198.

   * Remove special values prior to sorting:

     >>> from math import isnan
     >>> from itertools import filterfalse
     >>> data = [3.3, float('nan'), 1.1, 2.2]
     >>> sorted(filterfalse(isnan, data))
     [1.1, 2.2, 3.3]

This is needed because the IEEE-754 standard(1) specifies that, “Every
NaN shall compare unordered with everything, including itself.”

Likewise, ‘None’ can be stripped from datasets as well:

     >>> data = [3.3, None, 1.1, 2.2]
     >>> sorted(x for x in data if x is not None)
     [1.1, 2.2, 3.3]

This is needed because ‘None’ is not comparable to other types.

   * Convert mapping types into sorted item lists before sorting:

     >>> data = [{'a': 1}, {'b': 2}]
     >>> sorted(data, key=lambda d: sorted(d.items()))
     [{'a': 1}, {'b': 2}]

This is needed because dict-to-dict comparisons raise a *note TypeError:
198.

   * Convert set types into sorted lists before sorting:

     >>> data = [{'a', 'b', 'c'}, {'b', 'c', 'd'}]
     >>> sorted(map(sorted, data))
     [['a', 'b', 'c'], ['b', 'c', 'd']]

This is needed because the elements contained in set types do not have a
deterministic order.  For example, ‘list({'a', 'b'})’ may produce either
‘['a', 'b']’ or ‘['b', 'a']’.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/IEEE_754


File: python.info,  Node: Curiosidades e conclusões<2>,  Next: Ordenações parciais,  Prev: Strategies For Unorderable Types and Values,  Up: Técnicas de ordenação

9.12.9 Curiosidades e conclusões
--------------------------------

   * For locale aware sorting, use *note locale.strxfrm(): 1747. for a
     key function or *note locale.strcoll(): 415c. 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(): a5b. 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__(): 149c.:

          >>> 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__(): 1507.
     if *note __lt__(): 149c. is not implemented (see *note
     object.__lt__(): 149c. for details on the mechanics).  To avoid
     surprises, PEP 8(1) recommends that all six comparison methods be
     implemented.  The *note total_ordering(): 1138. 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.10 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(): 1101. and *note max(): 1102. 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(): 2842. and *note heapq.nlargest(): 2841.
     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(): 16aa. and *note heapq.heappop(): 16ab.
     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: 169. 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(): ac9.
method of *note bytes: 192.  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: bfe.
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: fac. 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():
192b. 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(): 21d6. 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(): ac9. is *note str.encode():
ac8, which returns a *note bytes: 192. representation of the Unicode
string, encoded in the requested 'encoding'.

The 'errors' parameter is the same as the parameter of the *note
decode(): ac9. 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: 1c. module.  Implementing new
encodings also requires understanding the *note codecs: 1c. 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(): 192b. 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(): fca.
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: 10b. module’s *note normalize():
8d9. function that converts strings to one of several normal forms,
where letters followed by a combining character are replaced with single
characters.  *note normalize(): 8d9. 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(): 8d9. 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(): fca. 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: be. 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: 833. flag to *note compile(): dc2,
‘\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: 833. 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: 169. type is described in the Python library reference at
*note Tipo sequência de texto — str: 1e96.

The documentation for the *note unicodedata: 10b. module.

The documentation for the *note codecs: 1c. 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(): 314. 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(): 1f21. and *note write(): 1f10.  This works through *note
open(): 314.'s 'encoding' and 'errors' parameters which are interpreted
just like those in *note str.encode(): ac8. and *note bytes.decode():
ac9.

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: 752.  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(): e47. 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: a5. module such as *note os.stat(): 26c. will
also accept Unicode filenames.

The *note os.listdir(): 12f6. 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():
12f6. 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: 752. 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:
198. 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: 1c8b. 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: 1c8b. 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<18>.
* Acessando URLs::
* Tratamento de exceções: Tratamento de exceções<2>.
* 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<18>,  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: 111, 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<2>,  Prev: Introdução<18>,  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():
c46. e *note tempfile.NamedTemporaryFile(): 6e2.:

     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:
110.

     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: 555c, 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: 555b.


File: python.info,  Node: Tratamento de exceções<2>,  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: 2bd. quando não consegue tratar uma
resposta (embora, como de costume com APIs Python, exceções embutidas
como *note ValueError: 2ea, *note TypeError: 198. etc.  também possam
ser levantadas).

*note HTTPError: 11d4. é a subclasse de *note URLError: 2bd. levantada
no caso específico de URLs HTTP.

As classes de exceção são exportadas do módulo *note urllib.error: 10f.

* Menu:

* URLError::
* HTTPError::
* Resumindo::


File: python.info,  Node: URLError,  Next: HTTPError,  Up: Tratamento de exceções<2>

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<2>

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: 11d4.  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: 11d4. 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: 3e46. é 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: 11d4. 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<2>

9.14.3.4 Resumindo
..................

Então, se você quiser se preparar para *note HTTPError: 11d4. 'ou' *note
URLError: 2bd, 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: 11d4.


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<2>,  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: 11d4.)
tem dois métodos úteis ‘info()’ e ‘geturl()’ e é definida no módulo
*note urllib.response: 112.

   * '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: 3e5f.

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: 3daf.).  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 autenticação básica(2):

     >>> 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
     (3).

     Nota: ‘HTTP_PROXY’ será ignorado se uma variável ‘REQUEST_METHOD’
     estiver definida; veja a documentação em *note getproxies(): 3dac.

   ---------- 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) 
https://web.archive.org/web/20201215133350/http://www.voidspace.org.uk/python/articles/authentication.shtml

   (3) 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: 73, 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: 84.  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: 84. 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: 84. é 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: 84. 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(): 405a, 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: 84. 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: 2ea. 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: 84. 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: 84. 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: 84. 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: 198. é 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: d1.) 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: 2ea. 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: 2ea. *note ipaddress.AddressValueError:
405f. e *note ipaddress.NetmaskValueError: 4080. 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: 2ea. 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<40>.


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:
2053.:

     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: a59.), 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: a59. 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: 503. 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(): 1b3.

 -- 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: 7b. 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: 7b. 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(): 186e. ou *note PySys_Audit():
     607. é chamada.  ‘arg0’ é o nome do evento como string C, ‘arg1’ é
     um ponteiro *note PyObject: 5d5. para um objeto tupla.

     Adicionado na versão 3.8.


File: python.info,  Node: Tapsets de SystemTap,  Next: Exemplos<40>,  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<40>,  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: 5030.

     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: 68e. ou a opção
*note -X perf: 16f, ou dinamicamente usando *note
sys.activate_stack_trampoline(): 68f. e *note
sys.deactivate_stack_trampoline(): 690.

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: df. 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: 4a9. ou a opção *note -X perf_jit: 16f, 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: 10a.

* 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(): a0a.  A partir do Python 3.10 até 3.13,
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ê.

No Python 3.14, há um novo módulo *note annotationlib: 6. com
funcionalidade para trabalhar com anotações.  Isso inclui uma função
*note annotationlib.get_annotations(): 456, que substitui *note
inspect.get_annotations(): a0a.

Se por alguma razão *note inspect.get_annotations(): a0a. 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(): 216. – 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(): dbe. 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(): a0a.: você deve usar a função *note
getattr(): dbe. 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__: e4b. da classe.  Como a classe
pode ou não ter anotações definidas, a melhor prática é chamar o método
*note get(): 1ee9. 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(): 2ac. 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__: e4b, portanto, para maior segurança,
talvez você também queira usar *note getattr(): dbe. 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(): a0a. 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(): a0a, será necessário replicar sua
lógica.  Considere examinar a implementação de *note
inspect.get_annotations(): a0a. 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(): 49d.

   * Se ‘o’ for uma classe, use ‘sys.modules[o.__module__].__dict__’
     como ‘globals’, e ‘dict(vars(o))’ como ‘locals’, quando chamar
     *note eval(): 49d.

   * Se ‘o’ for um chamável envolto em um invólucro usando *note
     functools.update_wrapper(): 1218, *note functools.wraps(): 1153. ou
     *note functools.partial(): 216, 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__: 14cf. como globals quando chamar *note eval(): 49d.

Contudo, nem todas strings usadas como anotações podem ser convertidas
em valores de Python utilizando *note eval(): 49d.  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: ee4. é verdadeiro.

Caso *note eval(): 49d. 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’.

   * Evita acessar ‘__annotations__’ diretamente em qualquer objeto.  Em
     vez disso, use *note annotationlib.get_annotations(): 456. (Python
     3.14+) ou *note inspect.get_annotations(): a0a. (Python 3.10+).

   * 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.

Se você usar uma classe com uma metaclasse personalizada e acessar
‘__annotations__’ na classe, poderá observar um comportamento
inesperado; consulte a 749(1) para obter alguns exemplos.  Você pode
evitar essas peculiaridades usando *note
annotationlib.get_annotations(): 456. no Python 3.14+ ou *note
inspect.get_annotations(): a0a. no Python 3.10+.  Em versões anteriores
do Python, você pode evitar esses bugs acessando as anotações do *note
__dict__: e4b. da classe (por exemplo,
‘cls.__dict__.get('__annotations__', None)’).

Em algumas versões do Python, instâncias de classes podem ter um
atributo ‘__annotations__’.  No entanto, essa funcionalidade não é
suportada.  Se precisar das anotações de uma instância, você pode usar
*note type(): f38. para acessar sua classe (por exemplo,
‘annotationlib.get_annotations(type(myinstance))’ no Python 3.14+).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0749/#pep749-metaclasses


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::
* Informações preliminares::
* 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: Informações preliminares,  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: 1e73. 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: Informações preliminares,  Next: Fazendo módulos seguros com múltiplos interpretadores,  Prev: Quem deveria ler isto,  Up: Isolando módulos de extensão

9.19.2 Informações preliminares
-------------------------------

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():
     4f73./*note Py_FinalizeEx(): f05, e

   - em paralelo, gerenciando “sub-interpretadores” usando *note
     Py_NewInterpreter(): 1a5f./*note Py_EndInterpreter(): 17ae.

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: Informações preliminares

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: 5d5.*;
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: Informações preliminares

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: 5593.), 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: Informações preliminares

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: 5592, 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: Informações preliminares,  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: 4fdb.


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: 4fdf.  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:
1aa8. 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: b68. 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(): f05.) e a reinicialização (*note Py_Initialize():
45d.).


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: 3cc.
     para impedir a mutabilidade.

   * Tipos no heap herdam *note tp_new: 794. 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: 797.


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: 19c8, uma descrição ou “diagrama” de uma classe, e chamando
*note PyType_FromModuleAndSpec(): 768. para construir um novo objeto
classe.

     Nota: Outras funções, como *note PyType_FromSpec(): 792, também
     podem criar tipos no heap, mas *note PyType_FromModuleAndSpec():
     768. 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: 976.

   - 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: 976. e de
*note tp_traverse: 977. 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: 37e. foi adicionado somente no
Python 3.11.  Para substituí-lo, use:

   * *note PY_VERSION_HEX: 37f, caso não esteja usando a ABI estável, ou

   * *note sys.version_info: 8a4. (via *note PySys_GetObject(): 61e. e
     *note PyArg_ParseTuple(): 3be.).


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: 977. 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: 794. e *note tp_clear: 4d84.


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: 4d5d. customizada, ele
precisa:

   - chamar *note PyObject_GC_UnTrack(): 16f3. 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: 4d70. de um tipo no heap deve ser *note
PyObject_GC_Del(): 16f1.  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(): b72. ou *note PyObject_NewVar(): b73.:

   - Se possível, chame o slot *note tp_alloc: 4d71. 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(): c8c. or *note
     PyObject_GC_NewVar(): c8d.:

          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():
768, você pode chamar *note PyType_GetModule(): b5c. para acessar o
módulo associado, e então *note PyModule_GetState(): b6d. 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(): b5d.
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: 16c5. *note METH_METHOD | METH_FASTCALL |
METH_KEYWORDS: 1945. e a assinatura *note PyCMethod: 95d.
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(): b5d. 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: 50ad. para *note __add__: 2274. ou *note tp_new: 794.
para inicialização—têm uma API muito simples que não permite passar a
classe definidora, ao contrário do *note PyCMethod: 95d.  O mesmo vale
para getters e setters definidos com *note PyGetSetDef: da6.

Para acessar o estado do módulo nesses casos, use a função *note
PyType_GetModuleByDef(): 629, e passe a definição do módulo.  Uma vez
encontrado o módulo, chame *note PyModule_GetState(): b6d. 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: 2471. (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(): 768, 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<41>.


File: python.info,  Node: Exemplos<41>,  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: 196, 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(): 118a. 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(): f94. 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 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<42>.
* 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<42>,  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<42>,  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(): 2210. 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<42>,  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 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 do Python para threads livres
==========================================

A partir da versão 3.13, o CPython tem suporte para uma compilação do
Python chamada *note threads livres: 1f3. (em inglês, free threading),
onde a *note trava global do interpretador: 46d. (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 com threads livres está funcionando e continua sendo aprimorado,
mas há alguma sobrecarga adicional em cargas de trabalho de thread única
em comparação com a construção regular.  Além disso, pacotes de
terceiros, em particular aqueles com um *note módulo de extensão: 20fc,
podem não estar prontos para uso em uma construção com threads livres e
reativarão a *note GIL: 164.

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:
55bb. 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: Instalação<2>.
* Identificando um Python com threads livres::
* A trava global do interpretador no Python com threads livres::
* Segurança nas threads::
* Limitações conhecidas::
* Mudanças comportamentais::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: Instalação<2>,  Next: Identificando um Python com threads livres,  Up: Suporte 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: 493. 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<2>,  Up: Suporte 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: 495. e *note sys.version: 496. contêm
“free-threading build”.  A nova função *note sys._is_gil_enabled():
47b5. 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 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: 494. ou a opção de linha de
comando *note -X gil: 16f.

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 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: 183, *note
list: 24c. e *note set: 184. 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: 1930. 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,  Next: Mudanças comportamentais,  Prev: Segurança nas threads,  Up: Suporte 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: 28f.  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: 595. declarados no nível de módulo

   * descritores de *note métodos: 1f5c.

   * objetos *note código: 4e0.

   * objetos *note módulo: 191a. e seus dicionários

   * *note classes: 21f4. (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(): 14d7. 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: 8e4. de outros threads e
fazer isso pode fazer com que seu programa trave.  Isso significa que
*note sys._current_frames(): 1624. geralmente não é seguro para uso em
uma construção com threads livres.  Funções como *note
inspect.currentframe(): 8e6. e *note sys._getframe(): 8e5. 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: Mudanças comportamentais,  Prev: Limitações conhecidas,  Up: Suporte do Python para threads livres

9.22.6 Mudanças comportamentais
-------------------------------

Esta seção descreve as mudanças comportamentais do CPython com a
construção com threads livres.

* Menu:

* Variáveis de contexto: Variáveis de contexto<2>.
* Filtros de aviso::


File: python.info,  Node: Variáveis de contexto<2>,  Next: Filtros de aviso,  Up: Mudanças comportamentais

9.22.6.1 Variáveis de contexto
..............................

Na construção com threads livres, o sinalizador *note
thread_inherit_context: 175. é definido como true por padrão, o que faz
com que threads criadas com *note threading.Thread: 176. iniciem com uma
cópia de *note Context(): 177. do chamador de *note start(): 178.  Na
construção padrão com GIL habilitada, o sinalizador é definido como
false por padrão, então as threads iniciam com um *note Context(): 177.
vazio.


File: python.info,  Node: Filtros de aviso,  Prev: Variáveis de contexto<2>,  Up: Mudanças comportamentais

9.22.6.2 Filtros de aviso
.........................

Na construção com threads livres, o sinalizador *note
context_aware_warnings: 18a. é definido como verdadeiro por padrão.  Na
construção com GIL habilitada, o sinalizador é definido como falso por
padrão.  Se o sinalizador for verdadeiro, o gerenciador de contexto
*note warnings.catch_warnings: 179. usa uma variável de contexto para
filtros de aviso.  Se o sinalizador for falso, *note catch_warnings:
179. modifica a lista de filtros globais, o que não é seguro para
thread.  Consulte o módulo *note warnings: 118. para obter mais
detalhes.


File: python.info,  Node: Suporte a extensões da API C para threads livres,  Next: Protocolo de anexação de depuração remota,  Prev: Suporte 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 para execução com a *note
trava global do interpretador: 46d. (GIL) desabilitada em uma
configuração chamada *note threads livres: 1f3.  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::
* Seções críticas::
* 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(): 174. 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(): 4d44.) devem adicionar um slot *note Py_mod_gil:
47c. 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: 37f.

     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(): 4fe3.) devem chamar *note PyUnstable_Module_SetGIL():
497. 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: 4deb, *note
     PyList_SET_ITEM: 623. e macros como *note PySequence_Fast_GET_SIZE:
     3c7. que usam o objeto retornado por *note PySequence_Fast(): 1802.
     não realizam nenhuma verificação de erro ou trava.  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: 3d4. 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: 55d0. 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: 5067, *note PyDictObject: 643. e
*note PySetObject: 5171. executam uma trava interna na construção com
threads livres.  Por exemplo, *note PyList_Append(): 4ea2. 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(): 18d6, que não trava o
dicionário.  Você deve usar *note Py_BEGIN_CRITICAL_SECTION: 5168. 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: 3d4.
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(): 5f3. 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: 5d8.

API de referências emprestadas          API de referências fortes
                                        
--------------------------------------------------------------------------------
                                        
*note PyList_GetItem(): 5f3.            *note PyList_GetItemRef(): 5f2.
                                        
                                        
*note PyList_GET_ITEM(): 4deb.          *note PyList_GetItemRef(): 5f2.
                                        
                                        
*note PyDict_GetItem(): 61c.            *note PyDict_GetItemRef(): 5d6.
                                        
                                        
*note PyDict_GetItemWithError(): 5d7.   *note PyDict_GetItemRef(): 5d6.
                                        
                                        
*note PyDict_GetItemString(): 61d.      *note PyDict_GetItemStringRef(): 41e.
                                        
                                        
*note PyDict_SetDefault(): 5da.         *note PyDict_SetDefaultRef(): 5d9.
                                        
                                        
*note PyDict_Next(): 18d6.              nenhuma (veja
                                        *note PyDict_Next: 55d3.)
                                        
                                        
*note PyWeakref_GetObject(): 3da.       *note PyWeakref_GetRef(): 3dc.
                                        
                                        
*note PyWeakref_GET_OBJECT(): 3db.      *note PyWeakref_GetRef(): 3dc.
                                        
                                        
*note PyImport_AddModule(): 5f0.        *note PyImport_AddModuleRef(): 5ef.
                                        
                                        
*note PyCell_GET(): 51af.               *note PyCell_Get(): 51ae.
                                        

Nem todas as APIs que retornam referências emprestadas são
problemáticas.  Por exemplo, *note PyTuple_GetItem(): 4d58. é 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(): 61c.
é 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: 5314. 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(): e56. em sua extensão
     e verifique se a memória alocada é usada para objetos Python.  Use
     *note PyMem_Malloc(): e54. para alocar buffers em vez de *note
     PyObject_Malloc(): e56.


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(): 63e. e *note PyGILState_Release(): 63f.

   * *note PyEval_SaveThread(): 63b. e *note PyEval_RestoreThread():
     63c.

   * *note Py_BEGIN_ALLOW_THREADS: 4d5e. e *note Py_END_ALLOW_THREADS:
     c73.

Estas funções ainda devem ser usadas na construção com threads livres
para gerenciar o estado de threads mesmo quando a *note GIL: 164. está
desabilitada.  Por exemplo, se você criar uma thread fora do Python,
você deve chamar *note PyGILState_Ensure(): 63e. 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(): 63b. ou *note
Py_BEGIN_ALLOW_THREADS: 4d5e. 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: 1bbc.


File: python.info,  Node: Protegendo o estado interno das extensões,  Next: Seções críticas,  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: Seções críticas,  Next: 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 Seções críticas
----------------------

Na construção com threads livres, o CPython fornece um mecanismo chamado
“critical sections” (em português, “seções críticas”) para proteger
dados que, de outra forma, seriam protegidos pela GIL. Embora os autores
da extensão possam não interagir diretamente com a implementação da
seção crítica interna, entender seu comportamento é crucial ao usar
determinadas funções da API C ou gerenciar o estado compartilhado na
construção com threads livres.

* Menu:

* O que são seções críticas?::
* Usando seções críticas::
* Como seções críticas funcionam::
* Prevenção de impasses::
* Considerações importantes::


File: python.info,  Node: O que são seções críticas?,  Next: Usando seções críticas,  Up: Seções críticas

9.23.8.1 O que são seções críticas?
...................................

Conceitualmente, seções críticas atuam como uma camada de prevenção de
impasse construída sobre mutexes simples.  Cada thread mantém uma pilha
de seções críticas ativas.  Quando uma thread precisa adquirir uma trava
associada a uma seção crítica (por exemplo, implicitamente ao chamar uma
função de API C segura para thread como *note PyDict_SetItem(): 4d5a, ou
explicitamente usando macros), ela tenta adquirir o mutex subjacente.


File: python.info,  Node: Usando seções críticas,  Next: Como seções críticas funcionam,  Prev: O que são seções críticas?,  Up: Seções críticas

9.23.8.2 Usando seções críticas
...............................

As principais APIs para usar seções críticas são:

   * *note Py_BEGIN_CRITICAL_SECTION: 5168. e *note
     Py_END_CRITICAL_SECTION: 52c5. - Para travar um único objeto

   * *note Py_BEGIN_CRITICAL_SECTION2: 52c3. e *note
     Py_END_CRITICAL_SECTION2: 52c7. - Para travar dois objetos
     simultaneamente

Essas macros devem ser usadas em pares correspondentes e devem aparecer
no mesmo escopo C, pois estabelecem um novo escopo local.  Essas macros
são inoperantes em construções com threads livres, portanto, podem ser
adicionadas com segurança a códigos que precisam suportar ambos os tipos
de construção.

Um uso comum de uma seção crítica seria travar um objeto ao acessar um
atributo interno dele.  Por exemplo, se um tipo de extensão tiver um
campo de contagem interno, você pode usar uma seção crítica ao ler ou
escrever nesse campo:

     // lê a contagem, retorna uma nova referência ao valor da contagem interna
     PyObject *result;
     Py_BEGIN_CRITICAL_SECTION(obj);
     result = Py_NewRef(obj->count);
     Py_END_CRITICAL_SECTION();
     return result;

     // escreve a contagem, consome referência de new_count
     Py_BEGIN_CRITICAL_SECTION(obj);
     obj->count = new_count;
     Py_END_CRITICAL_SECTION();


File: python.info,  Node: Como seções críticas funcionam,  Next: Prevenção de impasses,  Prev: Usando seções críticas,  Up: Seções críticas

9.23.8.3 Como seções críticas funcionam
.......................................

Ao contrário das travas tradicionais, as seções críticas não garantem
acesso exclusivo durante toda a sua duração.  Se uma thread travar
enquanto mantém uma seção crítica (por exemplo, ao adquirir outro
bloqueio ou executar E/S), a seção crítica é temporariamente suspensa —
todas as travas são liberadas — e então retomada quando a operação de
bloqueio é concluída.

Esse comportamento é semelhante ao que ocorre com a GIL quando uma
thread faz uma chamada de bloqueio.  As principais diferenças são:

   * As seções críticas operam por objeto e não globalmente

   * As seções críticas seguem uma disciplina de pilha dentro de cada
     thread (as macros “begin” e “end” impõem isso, pois devem ser
     pareadas e estar dentro do mesmo escopo)

   * As seções críticas liberam e readquirem automaticamente travas em
     torno de potenciais operações de bloqueio


File: python.info,  Node: Prevenção de impasses,  Next: Considerações importantes,  Prev: Como seções críticas funcionam,  Up: Seções críticas

9.23.8.4 Prevenção de impasses
..............................

Seções críticas ajudam a evitar impasses de duas maneiras:

  1. Se uma thread tenta adquirir uma trava que já está sendo mantida
     por outra thread, ela primeiro suspende todas as suas seções
     críticas ativas, liberando temporariamente suas travas

  2. Quando a operação de bloqueio for concluída, apenas a seção mais
     crítica será readquirida primeiro

Isso significa que você não pode depender de seções críticas aninhadas
para travar vários objetos simultaneamente, pois a seção crítica interna
pode suspender as externas.  Em vez disso, use *note
Py_BEGIN_CRITICAL_SECTION2: 52c3. para travar dois objetos
simultaneamente.

Observe que as travas descritas acima são apenas travas baseadas em
‘PyMutex’.  A implementação da seção crítica não conhece ou afeta outros
mecanismos de trava que possam estar em uso, como mutexes POSIX. Observe
também que, embora o bloqueio em qualquer ‘PyMutex’ cause a suspensão
das seções críticas, apenas os mutexes que fazem parte delas são
liberados.  Se ‘PyMutex’ for usado sem uma seção crítica, ele não será
liberado e, portanto, não terá a mesma capacidade de evitar impasses.


File: python.info,  Node: Considerações importantes,  Prev: Prevenção de impasses,  Up: Seções críticas

9.23.8.5 Considerações importantes
..................................

   * Seções críticas podem liberar temporariamente suas travas,
     permitindo que outras threads modifiquem os dados protegidos.
     Tenha cuidado ao fazer suposições sobre o estado dos dados após
     operações que possam causar bloqueios.

   * Como as travas podem ser temporariamente liberadas (suspensas),
     entrar em uma seção crítica não garante acesso exclusivo ao recurso
     protegido durante toda a duração da seção.  Se o código dentro de
     uma seção crítica chamar outra função que bloqueie (por exemplo,
     adquirir outra trava, executar E/S de bloqueio), todas as travas
     mantidas pela thread por meio de seções críticas serão liberadas.
     Isso é semelhante à forma como a GIL pode ser liberada durante
     chamadas de bloqueio.

   * Somente a(s) trava(s) associada(s) à seção crítica mais
     recentemente inserida (superior) tem garantia de ser(em) mantida(s)
     em um determinado momento.  As travas para seções críticas externas
     e aninhadas podem ter sido suspensas.

   * Você pode travar no máximo dois objetos simultaneamente com essas
     APIs.  Se precisar travar mais objetos, será necessário
     reestruturar seu código.

   * Embora seções críticas não entrem em impasse se você tentar travar
     o mesmo objeto duas vezes, elas são menos eficientes do que travas
     reentrantes desenvolvidas especificamente para esse caso de uso.

   * Ao usar *note Py_BEGIN_CRITICAL_SECTION2: 52c3, a ordem dos objetos
     não afeta a correção (a implementação lida com a prevenção de
     impasse), mas é uma boa prática sempre travar os objetos em uma
     ordem consistente.

   * Lembre-se de que as macros de seção crítica servem principalmente
     para proteger o acesso a 'objetos Python' que podem estar
     envolvidos em operações internas do CPython suscetíveis aos
     cenários de impasses descritos acima.  Para proteger o estado de
     extensão puramente interno, mutexes padrão ou outras primitivas de
     sincronização podem ser mais apropriados.


File: python.info,  Node: Construindo extensões para a construção com threads livres,  Prev: Seções críticas,  Up: Suporte a extensões da API C para threads livres

9.23.9 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.9.1 API C limitada e ABI estável
.....................................

A construção com threads livres não tem suporte atualmente à *note API C
limitada: 62b. 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.9.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)
(em inglês): Um guia de portabilidade mantido pela comunidade para
autores de extensões.

   ---------- Footnotes ----------

   (1) https://py-free-threading.github.io/porting/


File: python.info,  Node: Protocolo de anexação de depuração remota,  Next: Requisitos de permissão,  Prev: Suporte a extensões da API C para threads livres,  Up: Python HOWTOs

9.24 Protocolo de anexação de depuração remota
==============================================

Este protocolo permite que ferramentas externas se conectem a um
processo CPython em execução e executem código Python remotamente.

A maioria das plataformas exige privilégios elevados para se conectar a
outro processo Python.


File: python.info,  Node: Requisitos de permissão,  Next: Localizando a estrutura de PyRuntime,  Prev: Protocolo de anexação de depuração remota,  Up: Python HOWTOs

9.25 Requisitos de permissão
============================

Anexar a um processo Python em execução para depuração remota requer
privilégios elevados na maioria das plataformas.  Os requisitos
específicos e as etapas de solução de problemas dependem do seu sistema
operacional:

Linux
.....

O processo rastreador deve ter a capacidade ‘CAP_SYS_PTRACE’ ou
privilégios equivalentes.  Você só pode rastrear processos que possui e
que pode sinalizar.  O rastreamento pode falhar se o processo já estiver
sendo rastreado ou se estiver sendo executado com set-user-ID ou
set-group-ID. Módulos de segurança como o Yama podem restringir ainda
mais o rastreamento.

Para relaxar temporariamente as restrições do ptrace (até a
reinicialização), execute:

     ‘echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope’

     Nota: Desabilitar ‘ptrace_scope’ reduz o reforço do sistema e deve
     ser feito somente em ambientes confiáveis.

Se estiver executando dentro de um contêiner, use ‘--cap-add=SYS_PTRACE’
ou ‘--privileged’ e execute como root, se necessário.

Tente executar novamente o comando com privilégios elevados:

     ‘sudo -E !!’

macOS
.....

Para se conectar a outro processo, normalmente é necessário executar a
ferramenta de depuração com privilégios elevados.  Isso pode ser feito
usando ‘sudo’ ou executando como root.

Mesmo ao anexar a seus próprios processos, o macOS pode bloquear a
depuração, a menos que o depurador seja executado com privilégios de
root devido a restrições de segurança do sistema.

Windows
.......

Para se conectar a outro processo, geralmente é necessário executar a
ferramenta de depuração com privilégios administrativos.  Inicie o
prompt de comando ou o terminal como administrador.

Alguns processos ainda podem estar inacessíveis mesmo com direitos de
administrador, a menos que você tenha o privilégio ‘SeDebugPrivilege’
ativado.

Para resolver problemas de acesso a arquivos ou pastas, ajuste as
permissões de segurança:

       1. Clique com o botão direito do mouse no arquivo ou pasta e
          selecione 'Propriedades'.

       2. Acesse a aba 'Segurança' para visualizar usuários e grupos com
          acesso.

       3. Clique em 'Editar' para modificar as permissões.

       4. Selecione sua conta de usuário.

       5. Em 'Permissões', marque 'Leitura' ou 'Controle total' conforme
          necessário.

       6. Clique em 'Aplicar' e depois em 'OK' para confirmar.

     Nota: Certifique-se de ter atendido a todos os *note Requisitos de
     permissão: 55e7. antes de prosseguir.

Esta seção descreve o protocolo de baixo nível que permite que
ferramentas externas injetem e executem um script Python dentro de um
processo CPython em execução.

Este mecanismo forma a base da função *note sys.remote_exec(): 16d, que
instrui um processo Python remoto a executar um arquivo ‘.py’.  No
entanto, esta seção não documenta o uso dessa função.  Em vez disso,
fornece uma explicação detalhada do protocolo subjacente, que recebe
como entrada o ‘pid’ de um processo Python de destino e o caminho para
um arquivo-fonte Python a ser executado.  Essas informações permitem a
reimplementação independente do protocolo, independentemente da
linguagem de programação.

     Aviso: A execução do script injetado depende de o interpretador
     atingir um ponto de avaliação seguro.  Como resultado, a execução
     pode ser atrasada dependendo do estado de execução do processo de
     destino.

Uma vez injetado, o script é executado pelo interpretador dentro do
processo de destino na próxima vez que um ponto de avaliação seguro for
atingido.  Essa abordagem permite recursos de execução remota sem
modificar o comportamento ou a estrutura da aplicação Python em
execução.

As seções subsequentes fornecem uma descrição passo a passo do
protocolo, incluindo técnicas para localizar estruturas do interpretador
na memória, acessar campos internos com segurança e disparar a execução
de código.  Variações específicas da plataforma são indicadas quando
aplicável, e exemplos de implementação são incluídos para esclarecer
cada operação.


File: python.info,  Node: Localizando a estrutura de PyRuntime,  Next: Lendo _Py_DebugOffsets,  Prev: Requisitos de permissão,  Up: Python HOWTOs

9.26 Localizando a estrutura de PyRuntime
=========================================

O CPython coloca a estrutura ‘PyRuntime’ em uma seção binária dedicada
para ajudar ferramentas externas a encontrá-la em tempo de execução.  O
nome e o formato desta seção variam de acordo com a plataforma.  Por
exemplo, ‘.PyRuntime’ é usado em sistemas ELF, e ‘__DATA,__PyRuntime’ é
usado no macOS. As ferramentas podem encontrar o deslocamento desta
estrutura examinando o binário no disco.

A estrutura ‘PyRuntime’ contém o estado global do interpretador do
CPython e fornece acesso a outros dados internos, incluindo a lista de
interpretadores, estados de thread e campos de suporte do depurador.

Para trabalhar com um processo Python remoto, um depurador precisa
primeiro encontrar o endereço de memória da estrutura ‘PyRuntime’ no
processo de destino.  Este endereço não pode ser codificado ou calculado
a partir de um nome de símbolo, pois depende de onde o sistema
operacional carregou o binário.

O método para encontrar ‘PyRuntime’ depende da plataforma, mas os passos
são os mesmos em geral:

  1. Encontrar o endereço base onde o binário Python ou a biblioteca
     compartilhada foi carregada no processo de destino.

  2. Usar o binário no disco para localizar o deslocamento da seção
     ‘.PyRuntime’.

  3. Adicionar o deslocamento da seção ao endereço base para calcular o
     endereço na memória.

As seções abaixo explicam como fazer isso em cada plataforma suportada e
incluem código de exemplo.

Linux (ELF)
...........

Para encontrar a estrutura de ‘PyRuntime’ no Linux:

  1. Lê o mapa de memória do processo (por exemplo, ‘/proc/<pid>/maps’)
     para encontrar o endereço onde o executável Python ou ‘libpython’
     foi carregado.

  2. Analise os cabeçalhos da seção ELF no binário para obter o
     deslocamento da seção ‘.PyRuntime’.

  3. Adicione esse deslocamento ao endereço base da etapa 1 para obter o
     endereço de memória de ‘PyRuntime’.

A seguir está um exemplo de implementação:

     def find_py_runtime_linux(pid: int) -> int:
         # Etapa 1: tenta encontrar o executável Python na memória
         binary_path, base_address = find_mapped_binary(
             pid, name_contains="python"
         )

         # Etapa 2: recorre à biblioteca compartilhada se não encontrar o executável
         if binary_path is None:
             binary_path, base_address = find_mapped_binary(
                 pid, name_contains="libpython"
             )

         # Etapa 3: analisa os cabeçalhos ELF para obter o deslocamento da seção .PyRuntime
         section_offset = parse_elf_section_offset(
             binary_path, ".PyRuntime"
         )

         # Etapa 4: calcula o endereço de PyRuntime na memória
         return base_address + section_offset

Em sistemas Linux, existem duas abordagens principais para ler memória
de outro processo.  A primeira é através do sistema de arquivos ‘/proc’,
especificamente lendo de ‘/proc/[pid]/mem’, que fornece acesso direto à
memória do processo.  Isso requer permissões apropriadas – seja o mesmo
usuário do processo alvo ou ter acesso root.  A segunda abordagem é usar
a chamada de sistema ‘process_vm_readv()’, que fornece uma maneira mais
eficiente de copiar memória entre processos.  Embora a operação
‘PTRACE_PEEKTEXT’ do ptrace também possa ser usada para ler memória, ela
é significativamente mais lenta, pois lê apenas uma palavra por vez e
requer múltiplas trocas de contexto entre os processos rastreador e
rastreado.

Para analisar seções ELF, o processo envolve a leitura e a interpretação
das estruturas do formato de arquivo ELF do arquivo binário em disco.  O
cabeçalho ELF contém um ponteiro para a tabela de cabeçalhos de seção.
Cada cabeçalho de seção contém metadados sobre uma seção, incluindo seu
nome (armazenado em uma tabela de strings separada), deslocamento e
tamanho.  Para encontrar uma seção específica, como .PyRuntime, você
precisa percorrer esses cabeçalhos e encontrar o nome da seção.  O
cabeçalho de seção então fornece o deslocamento onde essa seção existe
no arquivo, que pode ser usado para calcular seu endereço de tempo de
execução quando o binário é carregado na memória.

Você pode ler mais sobre o formato de arquivo ELF na especificação do
ELF(1).

macOS (Mach-O)
..............

Para encontrar a estrutura de ‘PyRuntime’ no macOS:

  1. Chame ‘task_for_pid()’ para obter a porta da tarefa ‘mach_port_t’
     para o processo de destino.  Este identificador é necessário para
     ler memória usando APIs como ‘mach_vm_read_overwrite’ e
     ‘mach_vm_region’.

  2. Examine as regiões da memória para encontrar aquela que contém o
     executável Python ou ‘libpython’.

  3. Carregue o arquivo binário do disco e analise os cabeçalhos do
     Mach-O para encontrar a seção chamada ‘PyRuntime’ no segmento
     ‘__DATA’.  No macOS, os nomes dos símbolos são prefixados
     automaticamente com um sublinhado, de modo que o símbolo
     ‘PyRuntime’ aparece como ‘_PyRuntime’ na tabela de símbolos, mas o
     nome da seção não é afetado.

A seguir está um exemplo de implementação:

     def find_py_runtime_macos(pid: int) -> int:
         # Etapa 1: obtém acesso à memória do processo
         handle = get_memory_access_handle(pid)

         # Etapa 2: tenta encontrar o executável Python na memória
         binary_path, base_address = find_mapped_binary(
             handle, name_contains="python"
         )

         # Etapa 2: recorre à biblioteca compartilhada se não encontrar o executável
         if binary_path is None:
             binary_path, base_address = find_mapped_binary(
                 handle, name_contains="libpython"
             )

         # Etapa 4: analisa os cabeçalhos Mach-O para obter o deslocamento da seção __DATA,__PyRuntime
         section_offset = parse_macho_section_offset(
             binary_path, "__DATA", "__PyRuntime"
         )

         # Etapa 5: calcula o endereço de PyRuntime na memória
         return base_address + section_offset

No macOS, acessar a memória de outro processo requer o uso de APIs e
formatos de arquivo específicos do Mach-O. O primeiro passo é obter um
identificador ‘task_port’ via ‘task_for_pid()’, que fornece acesso ao
espaço de memória do processo de destino.  Esse identificador permite
operações de memória por meio de APIs como ‘mach_vm_read_overwrite()’.

A memória do processo pode ser examinada usando ‘mach_vm_region()’ para
varrer o espaço da memória virtual, enquanto ‘proc_regionfilename()’
ajuda a identificar quais arquivos binários são carregados em cada
região da memória.  Quando o binário ou biblioteca Python é encontrado,
seus cabeçalhos Mach-O precisam ser analisados para localizar a
estrutura ‘PyRuntime’.

O formato Mach-O organiza código e dados em segmentos e seções.  A
estrutura ‘PyRuntime’ reside em uma seção chamada ‘__PyRuntime’ dentro
do segmento ‘__DATA’.  O cálculo do endereço de tempo de execução
envolve encontrar o segmento ‘__TEXT’, que serve como endereço base do
binário, e então localizar o segmento ‘__DATA’ que contém nossa seção de
destino.  O endereço final é calculado combinando o endereço base com os
deslocamentos de seção apropriados dos cabeçalhos do Mach-O.

Observe que acessar a memória de outro processo no macOS normalmente
requer privilégios elevados — acesso root ou direitos de segurança
especiais concedidos ao processo de depuração.

Windows (PE)
............

Para encontrar a estrutura de ‘PyRuntime’ no Windows:

  1. Use a API ToolHelp para enumerar todos os módulos carregados no
     processo de destino.  Isso é feito usando funções como
     CreateToolhelp32Snapshot(2), Module32First(3) e Module32Next(4).

  2. Identifique o módulo correspondente a ‘python.exe’ ou
     ‘python`XY'.dll’, onde ‘X’ e ‘Y’ são os números de versão principal
     e secundária do Python, e registre seu endereço base.

  3. Localize a seção ‘PyRuntim’.  Devido ao limite de 8 caracteres do
     formato PE para nomes de seção (definido como
     ‘IMAGE_SIZEOF_SHORT_NAME’), o nome original ‘PyRuntime’ está
     truncado.  Esta seção contém a estrutura ‘PyRuntime’.

  4. Recupere o endereço virtual relativo (RVA) da seção e adicione-o ao
     endereço base do módulo.

A seguir está um exemplo de implementação:

     def find_py_runtime_windows(pid: int) -> int:
         # Etapa 1: tenta encontrar o executável Python na memória
         binary_path, base_address = find_loaded_module(
             pid, name_contains="python"
         )

         # Etapa 2: recorre à pythonXY.dll compartilhada se não encontrar
         # o executável
         if binary_path is None:
             binary_path, base_address = find_loaded_module(
                 pid, name_contains="python3"
             )

         # Etapa 3: analisa os cabeçalhos da seção PE para obter o RVA
         # da seção .PyRuntime. O nome da seção aparece como "PyRuntim"
         # devido ao limite de 8 caracteres definido pelo formato PE
         # (IMAGE_SIZEOF_SHORT_NAME).
         section_rva = parse_pe_section_offset(binary_path, "PyRuntim")

         # Etapa 4: calcula o endereço de PyRuntime na memória
         return base_address + section_rva

No Windows, acessar a memória de outro processo requer o uso de funções
da API do Windows, como ‘CreateToolhelp32Snapshot()’ e
‘Module32First()/Module32Next()’, para enumerar os módulos carregados.
A função ‘OpenProcess()’ fornece um identificador para acessar o espaço
de memória do processo de destino, permitindo operações de memória por
meio de ‘ReadProcessMemory()’.

A memória do processo pode ser examinada enumerando os módulos
carregados para encontrar o binário ou DLL Python.  Quando encontrados,
seus cabeçalhos PE precisam ser analisados para localizar a estrutura
‘PyRuntime’.

O formato PE organiza código e dados em seções.  A estrutura de
‘PyRuntime’ reside em uma seção chamada “PyRuntim” (truncado de
“PyRuntime” devido ao limite de 8 caracteres para nomes do PE). O
cálculo do endereço de tempo de execução envolve encontrar o endereço
base do módulo a partir da entrada do módulo e, em seguida, localizar
nossa seção de destino nos cabeçalhos do PE. O endereço final é
calculado combinando o endereço base com o endereço virtual da seção, a
partir dos cabeçalhos da seção do PE.

Observe que acessar a memória de outro processo no Windows normalmente
requer privilégios apropriados — acesso administrativo ou o privilégio
de ‘SeDebugPrivilege’ concedidos ao processo de depuração.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Executable_and_Linkable_Format

   (2) 
https://learn.microsoft.com/pt-br/windows/win32/api/tlhelp32/nf-tlhelp32-createtoolhelp32snapshot

   (3) 
https://learn.microsoft.com/pt-br/windows/win32/api/tlhelp32/nf-tlhelp32-module32first

   (4) 
https://learn.microsoft.com/pt-br/windows/win32/api/tlhelp32/nf-tlhelp32-module32next


File: python.info,  Node: Lendo _Py_DebugOffsets,  Next: Localizando o estado de thread e do interpretador,  Prev: Localizando a estrutura de PyRuntime,  Up: Python HOWTOs

9.27 Lendo _Py_DebugOffsets
===========================

Depois que o endereço da estrutura ‘PyRuntime’ for determinado, o
próximo passo é ler a estrutura ‘_Py_DebugOffsets’ localizada no início
do bloco ‘PyRuntime’.

Esta estrutura fornece deslocamentos de campo específicos da versão,
necessários para ler com segurança a memória de estado de thread e do
interpretador.  Esses deslocamentos variam entre as versões do CPython e
devem ser verificados antes do uso para garantir sua compatibilidade.

Para ler e verificar os deslocamentos de depuração, siga estas etapas:

  1. Lê a memória do processo de destino, começando no endereço
     ‘PyRuntime’, cobrindo o mesmo número de bytes que a estrutura
     ‘_Py_DebugOffsets’.  Essa estrutura está localizada no início do
     bloco de memória ‘PyRuntime’.  Seu layout é definido nos cabeçalhos
     internos do CPython e permanece o mesmo em uma determinada versão
     secundária, mas pode mudar em versões principais.

  2. Verifica se a estrutura contém dados válidos:

        - O campo ‘cookie’ deve corresponder ao marcador de depuração
          esperado.

        - O campo ‘version’ deve corresponder à versão do interpretador
          Python usado pelo depurador.

        - Se o depurador ou o processo de destino estiver usando uma
          versão de pré-lançamento (por exemplo, uma versão alfa, beta
          ou candidata a lançamento), as versões deverão corresponder
          exatamente.

        - O campo ‘free_threaded’ deve ter o mesmo valor no depurador e
          no processo de destino.

  3. Se a estrutura for válida, os deslocamentos que ela contém podem
     ser usados para localizar campos na memória.  Se alguma verificação
     falhar, o depurador deve interromper a operação para evitar a
     leitura da memória no formato errado.

A seguir está um exemplo de implementação que lê e verifica
‘_Py_DebugOffsets’:

     def read_debug_offsets(pid: int, py_runtime_addr: int) -> DebugOffsets:
         # Etapa 1: lê a memória do processo de destino no endereço PyRuntime
         data = read_process_memory(
             pid, address=py_runtime_addr, size=DEBUG_OFFSETS_SIZE
         )

         # Etapa 2: desserializa os bytes brutos em uma estrutura _Py_DebugOffsets
         debug_offsets = parse_debug_offsets(data)

         # Etapa 3: valida o conteúdo da estrutura
         if debug_offsets.cookie != EXPECTED_COOKIE:
             raise RuntimeError("Invalid or missing debug cookie")
         if debug_offsets.version != LOCAL_PYTHON_VERSION:
             raise RuntimeError(
                 "Mismatch between caller and target Python versions"
             )
         if debug_offsets.free_threaded != LOCAL_FREE_THREADED:
             raise RuntimeError("Mismatch in free-threaded configuration")

         return debug_offsets

     Aviso: 'Suspensão de processo recomendada'

     Para evitar condições de corrida e garantir a consistência da
     memória, é altamente recomendável suspender o processo de destino
     antes de executar qualquer operação que leia ou grave o estado
     interno do interpretador.  O tempo de execução do Python pode,
     simultaneamente, alterar as estruturas de dados do interpretador —
     como criar ou destruir threads — durante a execução normal.  Isso
     pode resultar em leituras ou gravações de memória inválidas.

     Um depurador pode suspender a execução anexando-se ao processo com
     ‘ptrace’ ou enviando um sinal ‘SIGSTOP’.  A execução só deve ser
     retomada após a conclusão das operações de memória do lado do
     depurador.

          Nota: Algumas ferramentas, como perfiladores ou depuradores
          baseados em amostragem, podem operar em um processo em
          execução sem suspensão.  Nesses casos, as ferramentas devem
          ser explicitamente projetadas para lidar com memória
          parcialmente atualizada ou inconsistente.  Para a maioria das
          implementações de depuradores, suspender o processo continua
          sendo a abordagem mais segura e robusta.


File: python.info,  Node: Localizando o estado de thread e do interpretador,  Next: Escrevendo informações de controle,  Prev: Lendo _Py_DebugOffsets,  Up: Python HOWTOs

9.28 Localizando o estado de thread e do interpretador
======================================================

Antes que o código possa ser injetado e executado em um processo Python
remoto, o depurador deve escolher uma thread para agendar a execução.
Isso é necessário porque os campos de controle usados para realizar a
injeção remota de código estão localizados na estrutura
‘_PyRemoteDebuggerSupport’, que está incorporada em um objeto
‘PyThreadState’.  Esses campos são modificados pelo depurador para
solicitar a execução dos scripts injetados.

A estrutura ‘PyThreadState’ representa uma thread em execução dentro de
um interpretador Python.  Ela mantém o contexto de avaliação da thread e
contém os campos necessários para a coordenação do depurador.  Localizar
um ‘PyThreadState’ válido é, portanto, um pré-requisito essencial para
acionar a execução remotamente.

Uma thread é normalmente selecionada com base em sua função ou ID. Na
maioria dos casos, a thread principal é usada, mas algumas ferramentas
podem direcionar uma thread específica por seu ID nativo.  Uma vez
escolhida a thread de destino, o depurador deve localizar o
interpretador e as estruturas de estado de thread associadas na memória.

As estruturas internas relevantes são definidas da seguinte forma:

   - ‘PyInterpreterState’ representa uma instância isolada de um
     interpretador Python.  Cada interpretador mantém seu próprio
     conjunto de módulos importados, estado embutido e lista de estados
     de thread.  Embora a maioria das aplicações Python use um único
     interpretador, o CPython oferece suporte a múltiplos
     interpretadores no mesmo processo.

   - ‘PyThreadState’ representa uma thread em execução dentro de um
     interpretador.  Ele contém o estado de execução e os campos de
     controle usados pelo depurador.

Para localizar uma thread:

  1. Use o offset ‘runtime_state.interpreters_head’ para obter o
     endereço do primeiro interpretador na estrutura ‘PyRuntime’.  Este
     é o ponto de entrada para a lista vinculada de interpretadores
     ativos.

  2. Use o deslocamento ‘interpreter_state.threads_main’ para acessar o
     estado da thread principal associada ao interpretador selecionado.
     Normalmente, esta é a thread mais confiável para ser alvo.

  3. Opcionalmente, use o deslocamento ‘interpreter_state.threads_head’
     para iterar pela lista encadeada de todos os estados de thread.
     Cada estrutura ‘PyThreadState’ contém um campo ‘native_thread_id’,
     que pode ser comparado a um ID da thread de destino para encontrar
     uma thread específica.

  4. Depois que um ‘PyThreadState’ válido for encontrado, seu endereço
     poderá ser usado em etapas posteriores do protocolo, como escrever
     campos de controle do depurador e agendar a execução.

A seguir está um exemplo de implementação que localiza o estado da
thread principal:

     def find_main_thread_state(
         pid: int, py_runtime_addr: int, debug_offsets: DebugOffsets,
     ) -> int:
         # Etapa 1: lê interpreters_head do PyRuntime
         interp_head_ptr = (
             py_runtime_addr + debug_offsets.runtime_state.interpreters_head
         )
         interp_addr = read_pointer(pid, interp_head_ptr)
         if interp_addr == 0:
             raise RuntimeError("No interpreter found in the target process")

         # Etapa 2: lê o ponteiro threads_main do interpretador
         threads_main_ptr = (
             interp_addr + debug_offsets.interpreter_state.threads_main
         )
         thread_state_addr = read_pointer(pid, threads_main_ptr)
         if thread_state_addr == 0:
             raise RuntimeError("Main thread state is not available")

         return thread_state_addr

O exemplo a seguir demonstra como localizar uma thread pelo seu ID de
thread nativo:

     def find_thread_by_id(
         pid: int,
         interp_addr: int,
         debug_offsets: DebugOffsets,
         target_tid: int,
     ) -> int:
         # Começa em threads_head e percorre a lista vinculada
         thread_ptr = read_pointer(
             pid,
             interp_addr + debug_offsets.interpreter_state.threads_head
         )

         while thread_ptr:
             native_tid_ptr = (
                 thread_ptr + debug_offsets.thread_state.native_thread_id
             )
             native_tid = read_int(pid, native_tid_ptr)
             if native_tid == target_tid:
                 return thread_ptr
             thread_ptr = read_pointer(
                 pid,
                 thread_ptr + debug_offsets.thread_state.next
             )

         raise RuntimeError("Thread with the given ID was not found")

Depois que um estado de thread válido for localizado, o depurador pode
prosseguir com a modificação de seus campos de controle e agendar a
execução, conforme descrito na próxima seção.


File: python.info,  Node: Escrevendo informações de controle,  Next: Resumo<2>,  Prev: Localizando o estado de thread e do interpretador,  Up: Python HOWTOs

9.29 Escrevendo informações de controle
=======================================

Uma vez identificada uma estrutura ‘PyThreadState’ válida, o depurador
pode modificar campos de controle dentro dela para agendar a execução de
um script Python especificado.  Esses campos de controle são verificados
periodicamente pelo interpretador e, quando definidos corretamente,
acionam a execução do código remoto em um ponto seguro no laço de
avaliação.

Cada ‘PyThreadState’ contém uma estrutura ‘_PyRemoteDebuggerSupport’
usada para comunicação entre o depurador e o interpretador.  As
localizações de seus campos são definidas pela estrutura
‘_Py_DebugOffsets’ e incluem o seguinte:

   - ‘debugger_script_path’: Um buffer de tamanho fixo que detém o
     caminho completo para um arquivo-fonte Python (‘.py’).  Este
     arquivo deve estar acessível e legível pelo processo de destino
     quando a execução for acionada.

   - ‘debugger_pending_call’: Um sinalizador inteiro.  Definir como ‘1’
     informa ao interpretador que um script está pronto para ser
     executado.

   - ‘eval_breaker’: Um campo verificado pelo interpretador durante a
     execução.  Definir o bit 5 (‘_PY_EVAL_PLEASE_STOP_BIT’, valor ‘1U
     << 5’) neste campo faz com que o interpretador pause e verifique a
     atividade do depurador.

Para concluir a injeção, o depurador deve executar as seguintes etapas:

  1. Escreve o caminho completo do script no buffer
     ‘debugger_script_path’.

  2. Define ‘debugger_pending_call’ com ‘1’.

  3. Lê o valor atual de ‘eval_breaker’, define o bit 5
     (‘_PY_EVAL_PLEASE_STOP_BIT’) e grava o valor atualizado de volta.
     Isso sinaliza ao interpretador para verificar a atividade do
     depurador.

A seguir está um exemplo de implementação:

     def inject_script(
         pid: int,
         thread_state_addr: int,
         debug_offsets: DebugOffsets,
         script_path: str
     ) -> None:
         # Calcula o deslocamento base de _PyRemoteDebuggerSupport
         support_base = (
             thread_state_addr +
             debug_offsets.debugger_support.remote_debugger_support
         )

         # Etapa 1: Escreve o caminho do script em debugger_script_path
         script_path_ptr = (
             support_base +
             debug_offsets.debugger_support.debugger_script_path
         )
         write_string(pid, script_path_ptr, script_path)

         # Etapa 2: Define debugger_pending_call com 1
         pending_ptr = (
             support_base +
             debug_offsets.debugger_support.debugger_pending_call
         )
         write_int(pid, pending_ptr, 1)

         # Etapa 3: Define _PY_EVAL_PLEASE_STOP_BIT (bit 5, valor 1 << 5)
         # em eval_breaker
         eval_breaker_ptr = (
             thread_state_addr +
             debug_offsets.debugger_support.eval_breaker
         )
         breaker = read_int(pid, eval_breaker_ptr)
         breaker |= (1 << 5)
         write_int(pid, eval_breaker_ptr, breaker)

Após a configuração desses campos, o depurador pode retomar o processo
(caso tenha sido suspenso).  O interpretador processará a solicitação no
próximo ponto de avaliação seguro, carregará o script do disco e o
executará.

É responsabilidade do depurador garantir que o arquivo de script
permaneça presente e acessível ao processo de destino durante a
execução.

     Nota: A execução do script é assíncrona.  O arquivo de script não
     pode ser excluído imediatamente após a injeção.  O depurador deve
     aguardar até que o script injetado produza um efeito observável
     antes de remover o arquivo.  Esse efeito depende do objetivo do
     script.  Por exemplo, um depurador pode aguardar até que o processo
     remoto se conecte novamente a um soquete antes de remover o script.
     Uma vez observado esse efeito, é seguro presumir que o arquivo não
     é mais necessário.


File: python.info,  Node: Resumo<2>,  Prev: Escrevendo informações de controle,  Up: Python HOWTOs

9.30 Resumo
===========

Para injetar e executar um script Python em um processo remoto:

  1. Localize a estrutura ‘PyRuntime’ na memória do processo de destino.

  2. Lê e valida a estrutura ‘_Py_DebugOffsets’ no início de
     ‘PyRuntime’.

  3. Usa os deslocamentos para localizar um ‘PyThreadState’ válido.

  4. Escreve o caminho para um script Python em ‘debugger_script_path’.

  5. Define o sinalizador ‘debugger_pending_call’ com ‘1’.

  6. Define ‘_PY_EVAL_PLEASE_STOP_BIT’ no campo ‘eval_breaker’.

  7. Retoma o processo (se suspenso).  O script será executado no
     próximo ponto de avaliação seguro.

Geral:

   * *note Uma visão geral conceitual de asyncio: 364d.

   * *note Boas práticas para anotações: 9cf.

   * *note Tutorial de Argparse: 3202.

   * *note Guia de descritores: 16db.

   * *note Enum: 544c.

   * *note Programação Funcional: 547e.

   * *note Uma introdução ao módulo ipaddress: 4058.

   * *note Logging: 549d.

   * *note Livro de receitas do logging: 13f3.

   * *note Expressões Regulares: 25f7.

   * *note Técnicas de ordenação: 246f.

   * *note Unicode: 14a0.

   * *note Como buscar recursos da Internet usando o pacote urllib:
     3e21.

Desenvolvimento avançado:

   * *note Programação em Curses com Python: 32f5.

   * *note Suporte do Python para threads livres: 55b8.

   * *note Suporte a extensões da API C para threads livres: 55bb.

   * *note Isolando módulos de extensão: 166.

   * *note A Ordem de Resolução de Métodos do Python 2.3: 1698.

   * *note Programação de Soquetes: 3838.

   * *note Descritor de arquivo de temporizador: 55ac.

   * *note Portando módulos de extensão para o Python 3: 14dc.

Depuração e perfilação:

   * *note Depurando extensões de API C e internos do CPython com GDB:
     543d.

   * *note Instrumentando o CPython com DTrace e SystemTap: e5a.

   * *note Suporte do Python ao perfilador perf do Linux: 4a8.

   * *note Protocolo de anexação de depuração remota: 55e4.


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:
1e71.  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: 149.
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: 496, *note sys.hexversion: 47b0, e
*note sys.version_info: 8a4.

   ---------- 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 PDF, 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: 1e71.

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(): 270. 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: aa.  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: 1724. 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: 14a3.:

     >>> 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: 4a6. 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: df, *note
     os: a5, *note argparse: 7. e *note re: be.

  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: 17ab.


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: 21e4. são definidos pelos nomes que aparecem na
definição da função, enquanto *note argumentos: 66f. 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: 21e4. 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: 1e9a, o que significa que você
     pode alterar o seu conteúdo.

Após a chamada para *note append(): 226d, 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: 1e95, 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): dbb.) 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: 24c, *note dict: 183,
     *note set: 184, 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: 169, *note int: 19b,
     *note tuple: 608, 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: 349. ou a função embutida *note
id(): 1614.


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(): 74c. ou a função
*note copy.deepcopy(): d59. 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(): dbd.:

     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): 839. 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: 1499. 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(): b8f. é 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(): b8f.
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: 18e. 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(): 19b, por
exemplo, ‘int('144') == 144’.  Da mesma forma, *note float(): 196.
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: 2ea.  ‘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(): 49d. se tudo que você precisa é
converter strings em números.  *note eval(): 49d. 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(): 49d. 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(): 169.  Caso queira uma
representação hexadecimal ou octal, use as funções embutidas *note
hex(): 14cb. ou *note oct(): 14ca.  Para a formatação sofisticada, veja
as seções *note Literais de strings formatadas: 19a. e *note Sintaxe das
strings de formato: 158d, 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: 111f. ou o módulo
*note array: 8.:

     >>> 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(): dbe.:

          import foo
          getattr(foo, 'bar')()

     Observe que a função *note getattr(): dbe. 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(): 468. 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(): 10a0. de objetos strings e, em seguida, converter
as strings decimais para valores numéricos usando a função *note int():
19b. ou a função *note float(): 196.  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: 14a0.


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(): 18ed. 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: 214a.


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:
     8fa.

   * 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: b4.).

   * Escrever scripts de benchmark permitirá iterar rapidamente buscando
     melhorias (veja o módulo *note timeit: f5.).

   * É 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: 247f. e o módulo *note collections: 1e.

   * 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(): dbc. ou a função relacionada
     *note sorted(): dbb. para fazer a ordenação (e veja *note Técnicas
     de ordenação: 246f. 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: 1e72.

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: 169. e *note bytes: 192. 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: 169, a linguagem recomendada
colocá-los numa lista e invocar o método *note str.join(): 249f.:

     chunks = []
     for s in my_strings:
         chunks.append(s)
     result = ''.join(chunks)

(outra forma razoavelmente eficiente é usar a classe *note io.StringIO:
111f.)

Para juntar vários objetos *note bytes: 192, a forma recomendada é
estender uma classe *note bytearray: 342. 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?::
* Como remover múltiplos itens de uma lista?::
* 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(): 608. 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(): a5b.:

     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: Como remover múltiplos itens de uma lista?,  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: 819.) 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: Como remover múltiplos itens de uma lista?,  Next: Como fazer um vetor em Python?,  Prev: Como que removo itens duplicados de uma lista?,  Up: Sequencias Tuplas/Listas

10.2.5.5 Como remover múltiplos itens de uma lista?
...................................................

Assim como para remover valores duplicados, explicitamente iterar em uma
lista reversa com uma condição de remoção é uma possibilidade.  Contudo,
é mais fácil e rápido usar substituição de fatias com um iteração
reversa implícita ou explícita.  Aqui estão três variações.:

     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: Como remover múltiplos itens de uma lista?,  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: 8d2. é 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: 347. 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__(): 2276, 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(): 2270. na lista e
retornar a lista.  É por isso que dizemos que, para listas, ‘+=’ é uma
“abreviação” para *note list.extend(): 5f6.:

     >>> 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(): dbc.:

     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?: 5649.


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): 2ac.  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(): 2ac. também verifica se há herança
virtual de uma *note classe base abstrata: 13b2.  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: 1835. 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(): 2ac. 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__(): 6ef.; consulte *note a
referência da linguagem: 2246. 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__(): 2212. 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__(): 2212. 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__: 772. 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(): 1a6.:

     class Derived(Base):
         def meth(self):
             super().meth()  # chama Base.meth

No exemplo, *note super(): 1a6. determinará automaticamente a instância
da qual foi chamado (o valor de ‘self’), procura a *note ordem de
resolução de métodos: 2471. (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
..........

As *note especificações de desfiguração de nome privado: 1f58. 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: 1a4f. não necessariamente chama o método *note
__del__(): 11f3. - 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(): 1b3. 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: 11a, 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: b29.


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(): 1614. 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: 19b. e *note str: 169, 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(): 5dc.:

          _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__():
795. em vez do método *note __init__(): 8b4.  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(): 758. e *note
functools.lru_cache(): bd8.  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: 819.  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__(): ce5. e
*note __hash__(): ce6. 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: 15bf.
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: b8. e *note compileall: 21.

O módulo *note py_compile: b8. 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: 21.  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():
731. de *note importlib: 7b.:

     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: 196. no CPython usa um ‘double’ do C para
armazenamento.  O valor de um objeto *note float: 196. é 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: 1fae. 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__(): 8b4. 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) Para algumas operações, a notação de prefixo é melhor lida do
     que as operações de prefixo (e infixo!)  têm uma longa tradição em
     matemática que gosta de notações onde os recursos visuais ajudam o
     matemático a pensar sobre um problema.  Compare a facilidade com
     que reescrevemos uma fórmula como x*(a+b) em x*a + x*b com a falta
     de jeito de fazer a mesma coisa usando uma notação OO bruta.

     (b) Quando leio o código que diz len(x) eu 'sei' que ele está
     perguntando o comprimento de alguma coisa.  Isso me diz duas
     coisas: o resultado é um número inteiro e o argumento é algum tipo
     de contêiner.  Pelo contrário, quando leio x.len(), já devo saber
     que x é algum tipo de contêiner implementando uma interface ou
     herdando de uma classe que possui um len() padrão.  Veja a confusão
     que ocasionalmente temos quando uma classe que não está
     implementando um mapeamento tem um método get() ou keys(), ou algo
     que não é um arquivo tem um método write().

-- ‘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(): 10a0. 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(): 249f. é 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: 8ed./*note except: 1ab. é 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(): dbe. 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: 8fa,
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: 64. 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: 186.; 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: d. 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('.'):
12f6. 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(): 7f6.  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: 5dd. 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: 349.

   - 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__(): ce5. e um
método *note __hash__(): ce6.  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(): dbb. 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(): 2ac. e
*note issubclass(): 9ba. para verificar se uma instância ou classe
implementa um ABC específico.  O módulo *note collections.abc: 1f.
define um conjunto de ABCs úteis como *note Iterable: 253f, *note
Container: 2541. e *note MutableMapping: 12a8.

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: 3e. e *note unittest: 10c. 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(): 8d1. 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(): 8d1.
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: 181.
e *note or: 34a, *note and: 346. e expressões *note if: 181./*note else:
17c.) e iterar (com instruções *note while: 18c3. e *note for: 347,
possivelmente contendo *note continue: 180. e *note break: 17f.).

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: 186. 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:
186.?  Como você pode ver, a natureza dinâmica do Python torna essas
escolhas muito mais difíceis.

O principal benefício de *note with: 186. 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): 157b. na instrução *note with: 186.


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: 149. 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: 2f. 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.14/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: d. 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: 3e.
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: 10c. é 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: ba. 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: f3. e não o módulo *note
_thread: 2.  O módulo *note threading: f3. 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(): 8a1, é melhor usar algum tipo de mecanismo de semáforo.
Uma ideia é usar o módulo *note queue: bb. 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: 24,
especialmente a classe *note ThreadPoolExecutor: 93e.

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:
bb. para criar uma fila contendo uma lista de tarefas.  A classe *note
Queue: 1586. 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: 1586. 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: 46d. (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(): b3a.  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__(): 11f3. 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: 46d. (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: 1d6. no
novo módulo *note concurrent.futures: 24. fornece uma maneira fácil de
fazer isso; o módulo *note multiprocessing: 98. 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: 139. e *note hashlib: 6c. 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: 664. 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: a5.  As duas funções são idênticas; *note
unlink(): 12f1. é simplesmente o nome da chamada do sistema para esta
função no Unix.

Para remover um diretório, use *note os.rmdir(): 12ef.; use *note
os.mkdir(): 525. 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(): 353.

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(): f86, onde 'fd' é o descritor de arquivo (um pequeno
inteiro).

O módulo *note shutil: ca. também contém uma série de funções para
trabalhar em arquivos, incluindo *note copyfile(): c43, *note
copytree(): c14. e *note rmtree(): 353.


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: ca. contém uma função *note copyfile(): c43.
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():
c45. 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: db.  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: 8.

     Nota: Para ler e escrever dados binários, é obrigatório abrir o
     arquivo no modo binário (aqui, passando ‘"rb"’ para *note open():
     314.).  Se você usar ‘"r"’ em vez disso (o padrão), o arquivo será
     aberto no modo texto e ‘f.read()’ retornará objetos *note str: 169.
     em vez de objetos *note bytes: 192.


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(): f89. é uma função de baixo nível que pega um descritor
de arquivo, um pequeno inteiro representando o arquivo aberto.  *note
os.popen(): 318. cria um objeto arquivo de alto nível, o mesmo tipo
retornado pela função embutida *note open(): 314.  Assim, para ler 'n'
bytes de um pipe 'p' criado com *note os.popen(): 318, 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: 13bf. 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(): 314, ‘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(): d5f.:

     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:
3d56. e *note Manuseio de Dados na Internet: 3944. 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: cf.

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: c6. é 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(): f97,
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(): 1727. para evitar criar uma
exceção.  Ele retornará apenas o valor de errno.  Para pesquisar, você
pode chamar *note connect_ex(): 1727. novamente mais tarde – ‘0’ ou
‘errno.EISCONN’ indicam que você está conectado – ou você pode passar
este soquete para *note select.select(): f94. para verificar se ele é
gravável.

     Nota: O módulo *note asyncio: b. 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: 38. e *note
GDBM: 37. também estão incluídas no Python padrão.  Há também o módulo
*note sqlite3: d4, 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: ab. 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:
c8. 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: bd. 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: 1e72.

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: 4d2f. 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(): 4dad,
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: 18e.).  Se quiser mais
controle, use *note PyRun_String(): 1c77.; veja o código-fonte de *note
PyRun_SimpleString(): 4dad. 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(): 1c77. da pergunta anterior passando
*note Py_eval_input: 4f9a. 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():
4f22. retorna o seu comprimento e a *note PyTuple_GetItem(): 4d58.
retorna o item em um determinado índice.  Listas têm funções similares,
*note PyList_Size(): 160b. e *note PyList_GetItem(): 5f3.

Para bytes, a *note PyBytes_Size(): 4e00. retorna o comprimento e a
*note PyBytes_AsStringAndSize(): 4dfa. 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(): 1591, *note
PyTuple_Check(): 514e, *note PyList_Check(): 515f, 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(): 4f03, *note
PySequence_GetItem(): 1ce9, etc, além de vários outros protocolos úteis
tais como números (*note PyNumber_Index(): a89. 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(): 4f21. 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(): 634. 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(): 3bf, 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(): 785. 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(): 4d4d. '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: cc0. e *note sys.stderr: b29.
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:
111f.:

     >>> 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: 17ab.), 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: 17ab.

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(): 18d5. 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”: 1e72.  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?: 56a6.


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: 1d, 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(): 4fa1. (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(): 79a. 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: 19b, *note
list: 24c, *note dict: 183. 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(): 247a. 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(): 247a. 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?: 5612. 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: 9a1. ou *note TabError: 75a. 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: e3. 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: 97.  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: 4174.  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: 4191.


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: 418c. 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.15: Remoção pendente no Python 3 15<7>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<7>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<4>.
* Remoção pendente no Python 3.19: Remoção pendente no Python 3 19<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<7>.
* Descontinuações na API C::


File: python.info,  Node: Remoção pendente no Python 3 15<7>,  Next: Remoção pendente no Python 3 16<7>,  Up: Descontinuações

11.1 Remoção pendente no Python 3.15
====================================

   * O sistema de importação:

        * A definição de *note __cached__: 31f. em um módulo enquanto
          falha na definição de *note __spec__.loader: 320. 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__: 321. em um módulo enquanto
          falha na definição de *note __spec__.parent: 322. 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: 2e.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 76.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 323. 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: 7b.:

        * Método ‘load_module()’: use ‘exec_module()’ em vez disso.

   * *note locale: 8a.:

        * A função *note getdefaultlocale(): 324. 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(): 325, *note
          setlocale(): 326. e *note getencoding(): 327.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a8.:

        * *note PurePath.is_reserved(): 328. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 329. para
          detectar caminhos reservados no Windows.

   * *note platform: af.:

        * *note java_ver(): 32a. 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: e1.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          32b. foi descontinuado desde o Python 3.12.

   * *note threading: f3.:

        * *note RLock(): 32c. 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: 109.:

        * *note types.CodeType: 32d.: o acesso a *note co_lnotab: 32e.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a3. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 10a.:

        * A não-documentada sintaxe de argumento nomeado para criar
          classes *note NamedTuple: 32f. (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: 330.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():
          331. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 10a, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 119.:

        * Os métodos *note getmark(): 332, ‘setmark()’ e *note
          getmarkers(): 333. das classes *note Wave_read: 334. e *note
          Wave_write: 335. foram descontinuados desde o Python 3.13.

   * *note zipimport: 138.:

        * *note load_module(): 336. está descontinuado desde o Python
          3.10.  Em vez disso, use *note exec_module(): 337.
          (Contribuição de Jiahao Li em gh-125746(7).)

   ---------- 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

   (7) https://github.com/python/cpython/issues/125746


File: python.info,  Node: Remoção pendente no Python 3 16<7>,  Next: Remoção pendente no Python 3 17<4>,  Prev: Remoção pendente no Python 3 15<7>,  Up: Descontinuações

11.2 Remoção pendente no Python 3.16
====================================

   * O sistema de importação:

        * A definição de *note __loader__: 339. em um módulo enquanto
          falha na definição de *note __spec__.loader: 33a. 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: 8.:

        * O código de formato ‘'u'’ (‘wchar_t’) foi descontinuado na
          documentação desde o Python 3.3 e em tempo de execução desde o
          Python 3.13.  Use o código de formato ‘'w'’ (*note Py_UCS4:
          33b.) para caracteres Unicode.

   * *note asyncio: b.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 30b. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

        * O sistema de políticas *note asyncio: b. está descontinuado e
          será removido no Python 3.16.  Em particular, as seguintes
          classes e funções estão descontinuadas:

             * *note asyncio.AbstractEventLoopPolicy: 30c.

             * *note asyncio.DefaultEventLoopPolicy: 30d.

             * *note asyncio.WindowsSelectorEventLoopPolicy: 30e.

             * *note asyncio.WindowsProactorEventLoopPolicy: 30f.

             * *note asyncio.get_event_loop_policy(): 310.

             * *note asyncio.set_event_loop_policy(): 311.

          Os usuários devem usar *note asyncio.run(): 2f1. ou *note
          asyncio.Runner: 2f3. com 'loop_factory' para usar a
          implementação de loop de eventos desejada.

          por exemplo, para usar *note asyncio.SelectorEventLoop: 312.
          no Windows:

               import asyncio

               async def main():
                   ...

               asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

          (Contribuição de Kumar Aditya em gh-127949(2).)

   * *note builtins: 13.:

        * 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’).  Use ‘not x’ em
          vez disso 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 functools: 63.:

        * A chamada da implementação Python de *note functools.reduce():
          219. com 'function' ou 'sequence' como argumentos nomeados foi
          descontinuada desde o Python 3.14.

   * *note logging: 8b.:

     O suporte para manipuladores de registro personalizados com o
     argumento 'strm' foi descontinuado e está programado para ser
     removido no Python 3.16.  Em vez disso, defina manipuladores com o
     argumento 'stream'.  (Contribuição de Mariusz Felisiak em
     gh-115032(3).)

   * *note mimetypes: 93.:

        * Extensões válidas começam com um ‘.’ ou estão vazias para
          *note mimetypes.MimeTypes.add_type(): 317.  Extensões sem
          ponto estão descontinuadas e levantarão uma exceção *note
          ValueError: 2ea. no Python 3.16.  (Contribuição de Hugo van
          Kemenade em gh-75223(4).)

   * *note shutil: ca.:

        * 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: 243.

   * *note symtable: de.:

        * O método *note Class.get_methods: 31b. foi descontinuado desde
          o Python 3.14.

   * *note sys: df.:

        * A função *note _enablelegacywindowsfsencoding(): 33c. foi
          descontinuada desde o Python 3.13.  Use a variável de ambiente
          *note PYTHONLEGACYWINDOWSFSENCODING: 33d.

   * *note sysconfig: e1.:

        * A função ‘sysconfig.expand_makefile_vars()’ está descontinuada
          desde o Python 3.14.  Em vez disso, use o argumento ‘vars’ de
          *note sysconfig.get_paths(): 33e.

   * *note tarfile: e4.:

        * 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

   (2) https://github.com/python/cpython/issues/127949

   (3) https://github.com/python/cpython/issues/115032

   (4) https://github.com/python/cpython/issues/75223


File: python.info,  Node: Remoção pendente no Python 3 17<4>,  Next: Remoção pendente no Python 3 19<2>,  Prev: Remoção pendente no Python 3 16<7>,  Up: Descontinuações

11.3 Remoção pendente no Python 3.17
====================================

   * *note collections.abc: 1f.:

        - *note collections.abc.ByteString: 340. 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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: 10a.:

        - 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(): 2aa. e *note typing.get_args(): 2ab, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 343, 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: 25f. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          341. 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: 192. e
          *note bytearray: 342.  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: 165, 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 19<2>,  Next: Remoção pendente em versões futuras<7>,  Prev: Remoção pendente no Python 3 17<4>,  Up: Descontinuações

11.4 Remoção pendente no Python 3.19
====================================

   * *note ctypes: 2e.:

        * Troca implícita para o layout de estrutura compatível com MSVC
          definindo *note _pack_: 315, mas não *note _layout_: 1e6. em
          plataformas não Windows.


File: python.info,  Node: Remoção pendente em versões futuras<7>,  Next: Descontinuações na API C,  Prev: Remoção pendente no Python 3 19<2>,  Up: Descontinuações

11.5 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: 7.:

        * O aninhamento de grupos de argumentos e o aninhamento de
          grupos mutuamente exclusivos estão descontinuado.

        * A passagem do argumento nomeado não documentado 'prefix_chars'
          para *note add_argument_group(): 2e9. agora está
          descontinuado.

        * O conversor de tipo *note argparse.FileType: 30a. está
          descontinuado.

   * *note builtins: 13.:

        * 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: 346, *note
          else: 17c, *note for: 347, *note if: 181, *note in: 348. ,
          *note is: 349. e *note or: 34a.  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: 19b.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 196.: esses métodos serão necessários
          para retornar uma instância de *note float: 196.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 197.: esses métodos serão
          necessários para retornar uma instância de *note complex: 197.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 197. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 15.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 34b. e *note calendar.FEBRUARY: 34c.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codecs: 1c.: use *note open(): 314. em vez de *note
     codecs.open(): 313.  (gh-133038(4))

   * *note codeobject.co_lnotab: 32e.: use o método *note
     codeobject.co_lines(): 34d.

   * *note datetime: 34.:

        * *note utcnow(): 34e.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 34f.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 67.: o valor de plural deve ser um número inteiro.

   * *note importlib: 7b.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          350. foi descontinuado: em vez disso, use o parâmetro
          'optimization'.

   * *note importlib.metadata: 7e.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 8b.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 351.

   * *note mailbox: 8f.: o uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a5.: chame *note os.register_at_fork(): 352. 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: be.: 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(5).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: ca.: o parâmetro 'onerror' de *note rmtree(): 353.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d5.

        * *note ssl.SSLContext: 354. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 354.: *note set_npn_protocols(): 355. 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: f3.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          356.

        * ‘threading.Event.isSet()’: use *note is_set(): 357.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 358.: use o atributo *note
          threading.Thread.daemon: 359.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 35a.: use o atributo *note
          threading.Thread.name: 29f.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 35b.

        * ‘threading.activeCount()’: use *note threading.active_count():
          35c.

   * *note typing.Text: 35d. (gh-92332(6)).

   * A classe interna ‘typing._UnionGenericAlias’ não é mais usada para
     implementar *note typing.Union: 2a7.  Para preservar a
     compatibilidade com usuários que utilizam esta classe privada, uma
     correção de compatibilidade será fornecida pelo menos até a versão
     3.17 do Python.  (Contribuição de Jelle Zijlstra em gh-105499(7).)

   * *note unittest.IsolatedAsyncioTestCase: 35e.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 110.: use *note
     urlparse(): 35f.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note wsgiref: 11e.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 12b.: testar o valor verdade de um
     *note Element: 360. 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 sys._clear_type_cache(): 291. está descontinuada: use *note
     sys._clear_internal_caches(): 361.

   ---------- 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/133038

   (5) https://github.com/python/cpython/issues/91760

   (6) https://github.com/python/cpython/issues/92332

   (7) https://github.com/python/cpython/issues/105499


File: python.info,  Node: Descontinuações na API C,  Prev: Remoção pendente em versões futuras<7>,  Up: Descontinuações

11.6 Descontinuações na API C
=============================

* Menu:

* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<8>.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18<3>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<8>.


File: python.info,  Node: Remoção pendente no Python 3 15<8>,  Next: Remoção pendente no Python 3 18<3>,  Up: Descontinuações na API C

11.6.1 Remoção pendente no Python 3.15
--------------------------------------

   * The *note PyImport_ImportModuleNoBlock(): 3d8.: use *note
     PyImport_ImportModule(): 3d9.

   * *note PyWeakref_GetObject(): 3da. e *note PyWeakref_GET_OBJECT():
     3db.: Use *note PyWeakref_GetRef(): 3dc.  O projeto
     pythoncapi-compat(1) pode ser usado para usar *note
     PyWeakref_GetRef(): 3dc. no Python 3.12 e versões anteriores.

   * O tipo *note Py_UNICODE: 3dd. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3de.

   * ‘PyUnicode_AsDecodedUnicode()’: Use *note PyCodec_Decode(): 3de.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note str: 169, tal como *note bytes: 192.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 3df.

   * ‘PyUnicode_AsEncodedUnicode()’: Use *note PyCodec_Encode(): 3df.;
     Note que alguns codecs (por exemplo, “base64”) podem retornar um
     tipo diferente de *note bytes: 192, tal com *note str: 169.

   * Funções de inicialização do Python, descontinuadas no Python 3.13:

        * *note Py_GetPath(): 3e0.: Use *note
          PyConfig_Get("module_search_paths"): 379. (*note sys.path:
          3e1.).

        * *note Py_GetPrefix(): 3e2.: Use *note
          PyConfig_Get("base_prefix"): 379. (*note sys.base_prefix:
          3e3.).  Use *note PyConfig_Get("prefix"): 379. (*note
          sys.prefix: 3e4.) se *note ambientes virtuais: 3e5. precisam
          ser tratados.

        * *note Py_GetExecPrefix(): 3e6.: Use *note
          PyConfig_Get("base_exec_prefix"): 379. (*note
          sys.base_exec_prefix: 3e7.).  Use *note
          PyConfig_Get("exec_prefix"): 379. (*note sys.exec_prefix:
          3e8.) se *note ambientes virtuais: 3e5. precisam ser tratados.

        * *note Py_GetProgramFullPath(): 3e9.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetProgramName(): 3eb.: Use *note
          PyConfig_Get("executable"): 379. (*note sys.executable: 3ea.).

        * *note Py_GetPythonHome(): 3ec.: Use *note
          PyConfig_Get("home"): 379. ou a variável de ambiente *note
          PYTHONHOME: 3ed.

     O projeto pythoncapi-compat(2) pode ser usado para obter *note
     PyConfig_Get(): 379. no Python 3.13 e versões anteriores.

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3ee.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3ee.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3ef.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3f0.

        * *note PySys_ResetWarnOptions(): 3f1.: apague *note
          sys.warnoptions: 3f2. e ‘warnings.filters’.

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3f5.: Use *note PyConfig.parser_debug:
          3f6. ou *note PyConfig_Get("parser_debug"): 379.

        * *note Py_VerboseFlag: 3f7.: Use *note PyConfig.verbose: 3f8.
          ou *note PyConfig_Get("verbose"): 379.

        * *note Py_QuietFlag: 3f9.: Use *note PyConfig.quiet: 3fa. ou
          *note PyConfig_Get("quiet"): 379.

        * *note Py_InteractiveFlag: 3fb.: Use *note
          PyConfig.interactive: 3fc. ou *note
          PyConfig_Get("interactive"): 379.

        * *note Py_InspectFlag: 3fd.: Use *note PyConfig.inspect: 3fe.
          ou *note PyConfig_Get("inspect"): 379.

        * *note Py_OptimizeFlag: 3ff.: Use *note
          PyConfig.optimization_level: 400. ou *note
          PyConfig_Get("optimization_level"): 379.

        * *note Py_NoSiteFlag: 401.: Use *note PyConfig.site_import:
          402. ou *note PyConfig_Get("site_import"): 379.

        * *note Py_BytesWarningFlag: 403.: Use *note
          PyConfig.bytes_warning: 404. ou *note
          PyConfig_Get("bytes_warning"): 379.

        * *note Py_FrozenFlag: 405.: Use *note
          PyConfig.pathconfig_warnings: 406. ou *note
          PyConfig_Get("pathconfig_warnings"): 379.

        * *note Py_IgnoreEnvironmentFlag: 407.: Use *note
          PyConfig.use_environment: 408. ou *note
          PyConfig_Get("use_environment"): 379.

        * *note Py_DontWriteBytecodeFlag: 409.: Use *note
          PyConfig.write_bytecode: 40a. ou *note
          PyConfig_Get("write_bytecode"): 379.

        * *note Py_NoUserSiteDirectory: 40b.: Use *note
          PyConfig.user_site_directory: 40c. ou *note
          PyConfig_Get("user_site_directory"): 379.

        * *note Py_UnbufferedStdioFlag: 40d.: Use *note
          PyConfig.buffered_stdio: 40e. ou *note
          PyConfig_Get("buffered_stdio"): 379.

        * *note Py_HashRandomizationFlag: 40f.: Use *note
          PyConfig.use_hash_seed: 410. e *note PyConfig.hash_seed: 411.
          ou *note PyConfig_Get("hash_seed"): 379.

        * *note Py_IsolatedFlag: 412.: Use *note PyConfig.isolated: 413.
          ou *note PyConfig_Get("isolated"): 379.

        * *note Py_LegacyWindowsFSEncodingFlag: 414.: Use *note
          PyPreConfig.legacy_windows_fs_encoding: 415. ou *note
          PyConfig_Get("legacy_windows_fs_encoding"): 379.

        * *note Py_LegacyWindowsStdioFlag: 416.: Use *note
          PyConfig.legacy_windows_stdio: 417. ou *note
          PyConfig_Get("legacy_windows_stdio"): 379.

        * ‘Py_FileSystemDefaultEncoding’,
          ‘Py_HasFileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 418. ou *note
          PyConfig_Get("filesystem_encoding"): 379.

        * ‘Py_FileSystemDefaultEncodeErrors’: Use *note
          PyConfig.filesystem_errors: 419. ou *note
          PyConfig_Get("filesystem_errors"): 379.

        * ‘Py_UTF8Mode’: Use *note PyPreConfig.utf8_mode: 41a. ou *note
          PyConfig_Get("utf8_mode"): 379.  (veja *note
          Py_PreInitialize(): 41b.)

     A API *note Py_InitializeFromConfig(): 3f3. deve ser usada com
     *note PyConfig: 3f4. para definir essas opções.  Ou *note
     PyConfig_Get(): 379. pode ser usado para obter essas opções em
     tempo de execução.

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: Remoção pendente no Python 3 18<3>,  Next: Remoção pendente em versões futuras<8>,  Prev: Remoção pendente no Python 3 15<8>,  Up: Descontinuações na API C

11.6.2 Remoção pendente no Python 3.18
--------------------------------------

   * As seguintes funções privadas estão descontinuado e planejadas para
     remoção no Python 3.18:

        * ‘_PyBytes_Join()’: use *note PyBytes_Join(): 380.

        * ‘_PyDict_GetItemStringWithError()’: use *note
          PyDict_GetItemStringRef(): 41e.

        * ‘_PyDict_Pop()’: use *note PyDict_Pop(): 41f.

        * ‘_PyLong_Sign()’: use *note PyLong_GetSign(): 397.

        * ‘_PyLong_FromDigits()’ e ‘_PyLong_New()’: use *note
          PyLongWriter_Create(): 3a7.

        * ‘_PyThreadState_UncheckedGet()’: use *note
          PyThreadState_GetUnchecked(): 420.

        * ‘_PyUnicode_AsString()’: use *note PyUnicode_AsUTF8(): 421.

        * ‘_PyUnicodeWriter_Init()’: substitua
          ‘_PyUnicodeWriter_Init(&writer)’ com *note writer =
          PyUnicodeWriter_Create(0): 3b1.

        * ‘_PyUnicodeWriter_Finish()’: substitua
          ‘_PyUnicodeWriter_Finish(&writer)’ por *note
          PyUnicodeWriter_Finish(writer): 3b4.

        * ‘_PyUnicodeWriter_Dealloc()’: substitua
          ‘_PyUnicodeWriter_Dealloc(&writer)’ por *note
          PyUnicodeWriter_Discard(writer): 3b3.

        * ‘_PyUnicodeWriter_WriteChar()’: substituta
          ‘_PyUnicodeWriter_WriteChar(&writer, ch)’ com *note
          PyUnicodeWriter_WriteChar(writer, ch): 3b7.

        * ‘_PyUnicodeWriter_WriteStr()’: substitua
          ‘_PyUnicodeWriter_WriteStr(&writer, str)’ por *note
          PyUnicodeWriter_WriteStr(writer, str): 3b9.

        * ‘_PyUnicodeWriter_WriteSubstring()’: substitua
          ‘_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)’
          por *note PyUnicodeWriter_WriteSubstring(writer, str, start,
          end): 3ba.

        * ‘_PyUnicodeWriter_WriteASCIIString()’: substitua
          ‘_PyUnicodeWriter_WriteASCIIString(&writer, str)’ por *note
          PyUnicodeWriter_WriteASCII(writer, str): 3b6.

        * ‘_PyUnicodeWriter_WriteLatin1String()’: substitua
          ‘_PyUnicodeWriter_WriteLatin1String(&writer, str)’ por *note
          PyUnicodeWriter_WriteUTF8(writer, str): 3bc.

        * ‘_PyUnicodeWriter_Prepare()’: (sem substituto).

        * ‘_PyUnicodeWriter_PrepareKind()’: (sem substituto).

        * ‘_Py_HashPointer()’: use *note Py_HashPointer(): 422.

        * ‘_Py_fopen_obj()’: use *note Py_fopen(): 390.

     O projeto pythoncapi-compat(1) pode ser usado para obter essas
     novas funções públicas no Python 3.13 e versões anteriores.
     (Contribuição de Victor Stinner em gh-128863(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat/

   (2) https://github.com/python/cpython/issues/128863


File: python.info,  Node: Remoção pendente em versões futuras<8>,  Prev: Remoção pendente no Python 3 18<3>,  Up: Descontinuações na API C

11.6.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: 424.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 425.: use *note PyErr_GetRaisedException():
     426.

   * *note PyErr_NormalizeException(): 427.: use *note
     PyErr_GetRaisedException(): 426.

   * *note PyErr_Restore(): 428.: use *note PyErr_SetRaisedException():
     429.

   * *note PyModule_GetFilename(): 42a.: use *note
     PyModule_GetFilenameObject(): 42b.

   * *note PyOS_AfterFork(): 42c.: use *note PyOS_AfterFork_Child():
     42d.

   * *note PySlice_GetIndicesEx(): 42e.: use *note PySlice_Unpack():
     42f. e *note PySlice_AdjustIndices(): 430.

   * *note PyUnicode_READY(): 431.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 432.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     433.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 434.: use *note
          PyThread_tss_alloc(): 435.

        * *note PyThread_delete_key(): 436.: use *note
          PyThread_tss_free(): 437.

        * *note PyThread_set_key_value(): 438.: use *note
          PyThread_tss_set(): 439.

        * *note PyThread_get_key_value(): 43a.: use *note
          PyThread_tss_get(): 43b.

        * *note PyThread_delete_key_value(): 43c.: use *note
          PyThread_tss_delete(): 43d.

        * *note PyThread_ReInitTLS(): 43e.: 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: 1b5. 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: 1b5. 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: 1eb3.
          (reticências).

classe base abstrata

     Classes bases abstratas (ABCs, do inglês 'abstract base class')
     complementam a *note tipagem pato: 56e2, fornecendo uma maneira de
     definir interfaces quando outras técnicas, como *note hasattr():
     6ee, seriam desajeitadas ou sutilmente erradas (por exemplo, com
     *note métodos mágicos: 2248.).  ABCs introduzem subclasses
     virtuais, classes que não herdam de uma classe mas ainda são
     reconhecidas por *note isinstance(): 2ac. e *note issubclass():
     9ba.; 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: 1f.), números (no módulo *note numbers: a2.),
     fluxos (no módulo *note io: 83.), localizadores e carregadores de
     importação (no módulo *note importlib.abc: 7c.).  Você pode criar
     suas próprias ABCs com o módulo *note abc: 4.

função de anotação

     Uma função que pode ser chamada para recuperar as *note anotações:
     15c. de um objeto.  Esta função é acessível como o atributo *note
     __annotate__: 18cc. de funções, classes e módulos.  Funções de
     anotação são um subconjunto de *note funções de avaliação: 437e.

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: 2262.

     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 podem ser recuperadas chamando *note
     annotationlib.get_annotations(): 456. em módulos, classes e
     funções, respectivamente.

     Consulte *note anotação de variável: f45, *note anotação de função:
     1ed0, PEP 484(1), PEP 526(2) e PEP 649(3), que descrevem essa
     funcionalidade.  Consulte também *note Boas práticas para
     anotações: 9cf. para obter as melhores práticas sobre como
     trabalhar com anotações.

argumento

     Um valor passado para uma *note função: 2342. (ou *note método:
     17cd.) 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(): 197. 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: 1423. 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: f71. 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: 21e4. no glossário, a pergunta
     no FAQ sobre *note a diferença entre argumentos e parâmetros: 561d.
     e PEP 362(4).

gerenciador de contexto assíncrono

     Um objeto que controla o ambiente envolto numa instrução *note
     async with: 185. por meio da definição dos métodos *note
     __aenter__(): 22b2. e *note __aexit__(): 18e5.  Introduzido pela
     PEP 492(5).

gerador assíncrono

     Uma função que retorna um *note iterador gerador assíncrono: 47a8.
     É parecida com uma função de corrotina definida com *note async
     def: 7e2. exceto pelo fato de conter instruções *note yield: bb8.
     para produzir uma série de valores que podem ser usados em um laço
     *note async for: c94.

     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:
     18d. e também as instruções *note async for: c94. e *note async
     with: 185.

iterador gerador assíncrono

     Um objeto criado por uma função *note geradora assíncrona: 2327.

     Este é um *note iterador assíncrono: 4c1. que, quando chamado
     usando o método *note __anext__(): 17e8, retorna um objeto
     aguardável que executará o corpo da função geradora assíncrona até
     a próxima expressão *note yield: bb8.

     Cada *note yield: bb8. 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__(): 17e8, ele inicia de onde parou.  Veja PEP
     492(6) e PEP 525(7).

iterável assíncrono

     Um objeto que pode ser usado em uma instrução *note async for: c94.
     Deve retornar um *note iterador assíncrono: 4c1. do seu método
     *note __aiter__(): dea.  Introduzido por PEP 492(8).

iterador assíncrono

     Um objeto que implementa os métodos *note __aiter__(): dea. e *note
     __anext__(): 17e8.  *note __anext__(): 17e8. deve retornar um
     objeto *note aguardável: 4c3.  *note async for: c94. resolve os
     aguardáveis retornados por um método *note __anext__(): 17e8. do
     iterador assíncrono até que ele levante uma exceção *note
     StopAsyncIteration: 1cc5.  Introduzido pela PEP 492(9).

estado de thread anexado

     Um *note estado de thread: 17af. que está ativo para a thread atual
     do sistema operacional.

     Quando um *note estado de thread: 17af. é anexado, a thread do
     sistema operacional tem acesso à API C completa do Python e pode
     invocar com segurança o interpretador de bytecode.

     A menos que uma função indique explicitamente o contrário, tentar
     chamar a API C sem um estado de thread anexado resultará em um erro
     fatal ou comportamento indefinido.  Um estado de thread pode ser
     anexado e desanexado explicitamente pelo usuário por meio da API C,
     ou implicitamente pelo ambiente de execução, inclusive durante o
     bloqueio de chamadas C e pelo interpretador de bytecode entre as
     chamadas.

     Na maioria das construções do Python, ter um estado de thread
     anexado implica que o chamador mantém a *note GIL: 164. para o
     interpretador atual, portanto, apenas uma thread do SO pode ter um
     estado de thread anexado em um determinado momento.  Em construções
     do Python com *note threads livres: 1f3, as threads podem manter
     simultaneamente um estado de thread anexado, permitindo um
     verdadeiro paralelismo do interpretador de bytecode.

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 Nomes (identificadores e
     palavras reservadas): 214b, por exemplo usando *note setattr():
     244c, 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(): dbe.

aguardável

     Um objeto que pode ser usado em uma expressão *note await: 18d.
     Pode ser uma *note corrotina: 6ae. ou um objeto com um método *note
     __await__(): f69.  Veja também a PEP 492(10).

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(11), criador do Python.

arquivo binário

     Um *note objeto arquivo: 13bf. capaz de ler e gravar em *note
     objetos bytes ou similares: 193.  Exemplos de arquivos binários são
     arquivos abertos no modo binário (‘'rb'’, ‘'wb'’ ou ‘'rb+'’), *note
     sys.stdin.buffer: 754, *note sys.stdout.buffer: cc0, e instâncias
     de *note io.BytesIO: 109a. e *note gzip.GzipFile: 650.

     Veja também *note arquivo texto: 1f22. para um objeto arquivo capaz
     de ler e gravar em objetos *note str: 169.

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: 5d8. para o objeto e
     assim destruí-lo.

     Chamar *note Py_INCREF(): 784. na *note referência emprestada: 3d4.
     é recomendado para convertê-lo, internamente, em uma *note
     referência forte: 5d8, exceto quando o objeto não pode ser
     destruído antes do último uso da referência emprestada.  A função
     *note Py_NewRef(): a90. pode ser usada para criar uma nova *note
     referência forte: 5d8.

objeto bytes ou similar

     Um objeto com suporte ao *note Protocolo de buffer: 25f. e que pode
     exportar um buffer C *note contíguo: 251b.  Isso inclui todos os
     objetos *note bytes: 192, *note bytearray: 342. e *note
     array.array: 4b8, além de muitos objetos *note memoryview: 165.
     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: 342. e um *note memoryview: 165.
     de um *note bytearray: 342.  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: 192. e a *note memoryview: 165. de um objeto *note bytes:
     192.

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: 38f2, 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: 7c4.

chamável

     Um chamável é um objeto que pode ser chamado, possivelmente com um
     conjunto de argumentos (veja *note argumento: 66f.), com a seguinte
     sintaxe:

          chamavel(argumento1, argumento2, argumentoN)

     Uma *note função: 2342, e por extensão um *note método: 17cd, é um
     chamável.  Uma instância de uma classe que implementa o método
     *note __call__(): 76f. 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: 22bd. referenciada de um *note escopo
     aninhado: 2223. 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: 14a3. 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: 22bd, 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: 21e0. (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: 22bd. à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: 92, utilize *note cmath: 19.  O uso de números complexos é
     uma funcionalidade matemática bastante avançada.  Se você não sabe
     se irá precisar deles, é quase certo que você pode ignorá-los sem
     problemas.

contexto

     Este termo tem diferentes significados dependendo de onde e como
     ele é usado.  Alguns significados comuns:

        * O estado ou ambiente temporário estabelecido por um *note
          gerenciador de contexto: 1e0. por meio de uma instrução *note
          with: 186.

        * A coleção de ligações de chave-valor associadas a um objeto
          *note contextvars.Context: 177. específico e acessadas por
          meio de objetos *note ContextVar: 17db.  Veja também *note
          variável de contexto: 56e6.

        * Um objeto *note contextvars.Context: 177.  Veja também *note
          contexto atual: 18b8.

protocolo de gerenciamento de contexto

     Os métodos *note __enter__(): 7d9. e *note __exit__(): 14fc.
     chamados pela instrução *note with: 186.  Veja PEP 343(12).

gerenciador de contexto

     Um objeto que implementa o *note protocolo de gerenciamento de
     contexto: 18b9. e controla o ambiente envolto em uma instrução
     *note with: 186.  Veja PEP 343(13).

variável de contexto

     Uma variável cujo valor depende de qual contexto é o *note contexto
     atual: 18b8.  Os valores são acessados por meio de objetos *note
     contextvars.ContextVar: 17db.  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: 7e2.  Veja também PEP 492(14).

função de corrotina

     Uma função que retorna um objeto do tipo *note corrotina: 6ae.  Uma
     função de corrotina pode ser definida com a instrução *note async
     def: 7e2, e pode conter as palavras chaves *note await: 18d, *note
     async for: c94, e *note async with: 185.  Isso foi introduzido pela
     PEP 492(15).

CPython

     A implementação canônica da linguagem de programação Python, como
     disponibilizada pelo python.org(16).  O termo “CPython” é usado
     quando necessário distinguir esta implementação de outras como
     Jython ou IronPython.

contexto atual

     O *note contexto: 18b7. (objeto *note contextvars.Context: 177.)
     que é usado atualmente pelos objetos *note ContextVar: 17db. para
     acessar (obter ou definir) os valores de *note variáveis de
     contexto: 56e6.  Cada thread tem seu próprio contexto atual.
     Frameworks para executar tarefas assíncronas (veja *note asyncio:
     b.) associam cada tarefa a um contexto que se torna o contexto
     atual sempre que a tarefa inicia ou retoma a execução.

isolado cíclico

     Um subgrupo de um ou mais objetos que se referenciam em um ciclo de
     referência, mas não são referenciados por objetos de fora do grupo.
     O objetivo do *note coletor de lixo cíclico: 1bbc. é identificar
     esses grupos e interromper os ciclos de referência para que a
     memória possa ser recuperada.

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(): 488. e *note
     staticmethod(): 450.

     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:
     1ecf. e *note definições de classe: 14d3. para obter mais
     informações sobre decoradores.

descritor

     Qualquer objeto que define os métodos *note __get__(): 16d6, *note
     __set__(): 224c. ou *note __delete__(): 18a2.  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: e3d. ou o *note Guia de
     Descritores: 16db.

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__(): ce6. e *note __eq__(): ce5.  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: 7e1.

visão de dicionário

     Os objetos retornados por *note dict.keys(): 9c6, *note
     dict.values(): 9c7. e *note dict.items(): 9c8. 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: 2535.

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__: b17. 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():
     f38. ou *note isinstance(): 2ac.  (Note, porém, que a tipagem pato
     pode ser complementada com o uso de *note classes base abstratas:
     13b2.)  Ao invés disso, são normalmente empregados testes *note
     hasattr(): 6ee. ou programação *note EAFP: 2f07.

dunder

     Uma abreviação informal para “double underscore” (em português,
     sublinhado duplo), usada ao se referir a um *note método especial:
     1b4f.  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: 8ed. e
     *note except: 1ab.  A técnica diverge do estilo *note LBYL: 56e9,
     comum em outras linguagens como C, por exemplo.

função de avaliação

     Uma função que pode ser chamada para avaliar um atributo com
     avaliação preguiçosa de um objeto, como o valor de apelidos de tipo
     criados com a instrução *note type: 661.

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: 2a9d,
     as quais não podem ser usadas como expressões, como, por exemplo,
     *note while: 18c3.  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

f-strings

     Literais de string prefixados com ‘f’ ou ‘F’ são comumente chamados
     de “f-strings”, abreviação em inglês de *note literais de strings
     formatadas: 19a.  Veja também PEP 498(17).

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: 1f23. brutos, *note arquivos binários: 1f23. em buffer e
     *note arquivos textos: 1f22.  Suas interfaces estão definidas no
     módulo *note io: 83.  A forma canônica para criar um objeto arquivo
     é usando a função *note open(): 314.

objeto arquivo ou similar

     Um sinônimo do termo *note objeto arquivo: 13bf.

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: 45f.

     As funções *note sys.getfilesystemencoding(): e47. e *note
     sys.getfilesystemencodeerrors(): ed6. 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:
     752. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 988.: veja os membros *note filesystem_encoding:
     418. e *note filesystem_errors: 419. do *note PyConfig: 3f4.

     Veja também *note codificação da localidade: 544.

localizador

     Um objeto que tenta encontrar o *note carregador: 1965. para um
     módulo que está sendo importado.

     Existem dois tipos de localizador: *note localizadores de
     metacaminho: 1266. para uso com *note sys.meta_path: f1b, e *note
     localizadores de entrada de caminho: 1267. para uso com *note
     sys.path_hooks: 121a.

     Veja *note Localizadores e carregadores: 22da. e *note importlib:
     7b. 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(18).

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: 46d. que
     permite apenas uma thread por vez executar bytecode Python.  Veja
     PEP 703(19).

variável livre

     Formalmente, conforme definido no *note modelo de execução de
     linguagem: 22ba, 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: 17f7. para um exemplo.
     Pragmaticamente, devido ao nome do atributo *note
     codeobject.co_freevars: 21e0, o termo também é usado algumas vezes
     como sinônimo de *note variável de clausura: 17f7.

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: 66f. que
     podem ser usados na execução do corpo.  Veja também *note
     parâmetro: 21e4, *note método: 17cd. e a seção *note Definições de
     função: 1ecf.

anotação de função

     Uma *note anotação: 15c. 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:
     2262.: por exemplo, essa função espera receber dois argumentos
     *note int: 19b. e também é esperado que devolva um valor *note int:
     19b.:

          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: 1ecf.

     Veja *note anotação de variável: f45. e PEP 484(20), que descrevem
     esta funcionalidade.  Veja também *note Boas práticas para
     anotações: 9cf. para as melhores práticas sobre como trabalhar com
     anotações.

__future__

     A *note instrução future: 45a, ‘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: 64.

gerador

     Uma função que retorna um *note iterador gerador: dcd.  É parecida
     com uma função normal, exceto pelo fato de conter expressões *note
     yield: bb8. 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(): 9ce.

     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: 1257.

     Cada *note yield: bb8. 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: 2266. que retorna um *note iterador: 4c2.
     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: bdb. no glossário, o
     decorador *note functools.singledispatch(): 840, e a PEP 443(21).

tipo genérico

     Um *note tipo: 1bd6. que pode ser parametrizado; tipicamente uma
     *note classe contêiner: 226b. tal como *note list: 24c. ou *note
     dict: 183.  Usado para *note dicas de tipo: 2262. e *note
     anotações: 15c.

     Para mais detalhes, veja *note tipo apelido genérico: 8b6, PEP
     483(22), PEP 484(23), PEP 585(24), e o módulo *note typing: 10a.

GIL

     Veja *note trava global do interpretador: 46d.

trava global do interpretador

     O mecanismo utilizado pelo interpretador *note CPython: 8fa. para
     garantir que apenas uma thread execute o *note bytecode: 4a4.
     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: 183.) 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: 493.  Depois de
     construir Python com essa opção, o código deve ser executado com a
     opção *note -X gil=0: 16f. ou a variável de ambiente *note
     PYTHON_GIL=0: 494. 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(25).

     Em versões anteriores da API C do Python, uma função podia declarar
     que precisava que a GIL fosse mantida para ser usada.  Isso se
     refere a ter um *note estado de thread anexado: 4d72.

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: 7f7.

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__():
     ce6.) e pode ser comparado com outros objetos (precisa ter um
     método *note __eq__(): ce5.).  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():
     1614.

IDLE

     Um ambiente de desenvolvimento e aprendizado integrado para Python.
     *note IDLE — editor e console Python: 120b. é 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(26).

     Se um objeto é imortal, sua *note contagem de referências: 4d6a.
     nunca é modificada e, portanto, nunca é desalocado enquanto o
     interpretador está em execução.  Por exemplo, *note True: dfb. e
     *note None: 87a. são imortais no CPython.

     Objetos imortais podem ser identificados via *note
     sys._is_immortal(): 28e. ou via *note PyUnstable_IsImmortal(): 3c1.
     na API C.

imutável

     Um objeto que possui um valor fixo.  Objetos imutáveis incluem
     números, strings e tuplas.  Estes objetos não podem ser alterados.
     Um novo objeto deve ser criado se um valor diferente tiver de ser
     armazenado.  Objetos imutáveis têm um papel importante em lugares
     onde um valor constante de hash seja necessário, como por exemplo
     uma chave em um dicionário.

caminho de importação

     Uma lista de localizações (ou *note entradas de caminho: 22eb.) que
     são buscadas pelo *note localizador baseado no caminho: 22e0. por
     módulos para importar.  Durante a importação, esta lista de
     localizações usualmente vem a partir de *note sys.path: 3e1, 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: 2203. e o objeto *note carregador: 1965.

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: 48e.

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: 1b5.

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:
     1bbc.  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: 24c, *note str: 169. e *note tuple: 608.) e alguns tipos de
     não-sequência, como o *note dict: 183. e *note objetos arquivo:
     13bf, além dos objetos de quaisquer classes que você definir com um
     método *note __iter__(): e5d. ou *note __getitem__(): 581. que
     implementam a semântica de *note sequência: 70b.

     Iteráveis podem ser usados em um laço *note for: 347. e em vários
     outros lugares em que uma sequência é necessária (*note zip(): 1a0,
     *note map(): 19f, …).  Quando um objeto iterável é passado como
     argumento para a função embutida *note iter(): 9cd, 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(): 9cd. ou lidar com os objetos
     iteradores em si.  A instrução *note for: 347. 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: 4c2, *note sequência: 70b, e *note gerador: 1257.

iterador

     Um objeto que representa um fluxo de dados.  Repetidas chamadas ao
     método *note __next__(): 14c9. de um iterador (ou passando o objeto
     para a função embutida *note next(): 9ce.) vão retornar itens
     sucessivos do fluxo.  Quando não houver mais dados disponíveis uma
     exceção *note StopIteration: de9. 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: de9. novamente.  Iteradores precisam ter um método
     *note __iter__(): 1f62. 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: 24c.) produz
     um novo iterador a cada vez que você passá-lo para a função *note
     iter(): 9cd. ou utilizá-lo em um laço *note for: 347.  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:
     2466.

     O CPython não aplica consistentemente o requisito de que um
     iterador defina *note __iter__(): 1f62.  E também observe que o
     CPython com threads livres não garante a segurança do thread das
     operações do iterador.

função chave

     Uma função chave ou função colação é um chamável que retorna um
     valor usado para ordenação ou classificação.  Por exemplo, *note
     locale.strxfrm(): 1747. é 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(): 1101, *note max(): 1102, *note sorted():
     dbb, *note list.sort(): dbc, *note heapq.merge(): ffa, *note
     heapq.nsmallest(): 2842, *note heapq.nlargest(): 2841. e *note
     itertools.groupby(): 2a46.

     Há várias maneiras de se criar funções chave.  Por exemplo, o
     método *note str.lower(): 1a92. pode servir como uma função chave
     para ordenações insensíveis à caixa.  Alternativamente, uma função
     chave ad-hoc pode ser construída a partir de uma expressão *note
     lambda: 1499, como ‘lambda r: (r[0], r[2])’.  Além disso, *note
     operator.attrgetter(): 1028, *note operator.itemgetter(): c4b. e
     *note operator.methodcaller(): 1029. são três construtores de
     função chave.  Consulte o guia de *note Ordenação: 246f. para ver
     exemplos de como criar e utilizar funções chave.

argumento nomeado

     Veja *note argumento: 66f.

lambda

     Uma função de linha anônima consistindo de uma única *note
     expressão: 2266, 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: 2f07. e é caracterizada pela presença de muitas instruções
     *note if: 181.

     Em um ambiente multithread, a abordagem LBYL pode arriscar a
     introdução de uma condição de corrida entre “o olhar” e “o pisar”.
     Por exemplo, o código ‘if key in mapping: return mapping[key]’ pode
     falhar se outra thread remover 'key' do 'mapping' após o teste, mas
     antes da olhada.  Esse problema pode ser resolvido com travas ou
     usando a abordagem EAFP.

analisador léxico

     Nome formal para o 'tokenizador'; veja *note token: 2133.

lista

     Uma *note sequência: 70b. 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: 181. é opcional.  Se omitida,
     todos os elementos no ‘range(256)’ serão processados.

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: 10bd.  Um carregador é normalmente retornado por um
     *note localizador: 2203.  Veja também:

        * *note Localizadores e carregadores: 22da.

        * *note importlib.abc.Loader: 10bd.

        * PEP 302(27)

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):
     326.

     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(): 327. pode ser usado para obter a
     codificação da localidade.

     Veja também *note tratador de erros e codificação do sistema de
     arquivos: 752.

método mágico

     Um sinônimo informal para um *note método especial: 1b4f.

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: a6e. *note collections.abc.Mapping: abd. ou *note
     collections.abc.MutableMapping: 12a8.  Exemplos incluem *note dict:
     183, *note collections.defaultdict: 13b8, *note
     collections.OrderedDict: 7e8. e *note collections.Counter: 128d.

localizador de metacaminho

     Um *note localizador: 2203. retornado por uma busca de *note
     sys.meta_path: f1b.  Localizadores de metacaminho são relacionados
     a, mas diferentes de, *note localizadores de entrada de caminho:
     1267.

     Veja *note importlib.abc.MetaPathFinder: a64. 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: 2255.

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:
     66f. (que comumente é chamado de ‘self’).  Veja *note função: 2342.
     e *note escopo aninhado: 2223.

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: 1698. 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: 22d0.

     Veja também *note pacote: 232.

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: 2117.

     Veja também *note Especificações de módulo: 21ff.

MRO

     Veja *note ordem de resolução de métodos: 2471.

mutável

     Objeto mutável é aquele que pode modificar seus valor mas manter
     seu *note id(): 1614.  Veja também *note imutável: 1e95.

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(): 16e7. e *note os.stat():
     26c.  Outro exemplo é *note sys.float_info: 1c86.:

          >>> 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: 608. e que defina campos nomeados.  Tal classe pode ser
     escrita a mão, ou ela pode ser criada herdando *note
     typing.NamedTuple: 32f. ou com uma função fábrica *note
     collections.namedtuple(): 4da.  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(): f86. 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(): 146f. ou ‘itertools.izip()’,
     por exemplo, deixa claro que estas funções são implementadas pelos
     módulos *note random: bd. e *note itertools: 85. respectivamente.

pacote de espaço de nomes

     Um *note pacote: 232. 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: 22d4. 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: 22d4.

     Para mais informações, veja PEP 420(28) e *note Pacotes de espaço
     de nomes: 22d6.

     Veja também *note módulo: 191a.

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: 14a3. 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__: 16d9, descritores, propriedades,
     *note __getattribute__(): dbf, métodos de classe e métodos
     estáticos.

objeto

     Qualquer dado que tenha estado (atributos ou valores) e
     comportamento definidos (métodos).  Também a última classe base de
     qualquer *note classe estilo novo: 2bad.

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: 191a. 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: 22d4. e *note pacote de espaço de
     nomes: 2b1.

parâmetro

     Uma entidade nomeada na definição de uma *note função: 2342. (ou
     método) que específica um *note argumento: 66f. (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: 66f. quanto *note nomeado: 66f.  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: 66f. no glossário, a pergunta
     do FAQ sobre *note a diferença entre argumentos e parâmetros: 561d,
     a classe *note inspect.Parameter: 4de, a seção *note Definições de
     função: 1ecf. e a PEP 362(29).

entrada de caminho

     Um local único no *note caminho de importação: 22dd. que o *note
     localizador baseado no caminho: 22e0. consulta para encontrar
     módulos a serem importados.

localizador de entrada de caminho

     Um *note localizador: 2203. retornado por um chamável em *note
     sys.path_hooks: 121a. (ou seja, um *note gancho de entrada de
     caminho: 22ed.) que sabe como localizar os módulos *note entrada de
     caminho: 22eb.

     Veja *note importlib.abc.PathEntryFinder: a65. 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: 121a. que retorna um
     *note localizador de entrada de caminho: 1267. caso saiba como
     localizar módulos em uma *note entrada de caminho: 22eb.
     específica.

localizador baseado no caminho

     Um dos *note localizadores de metacaminho: 1266. padrão que procura
     por um *note caminho de importação: 22dd. 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: 169. ou *note
     bytes: 192. representando um caminho, ou um objeto implementando o
     protocolo *note os.PathLike: e3f.  Um objeto que suporta o
     protocolo *note os.PathLike: e3f. pode ser convertido para um
     arquivo de caminho do sistema *note str: 169. ou *note bytes: 192,
     através da chamada da função *note os.fspath(): e41.; *note
     os.fsdecode(): e42. e *note os.fsencode(): e43. podem ser usadas
     para garantir um *note str: 169. ou *note bytes: 192. como
     resultado, respectivamente.  Introduzido na PEP 519(30).

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(31).

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(32).

argumento posicional

     Veja *note argumento: 66f.

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(33)
     para mais detalhes.

pacote provisório

     Veja *note API provisória: 3ce.

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: 347.  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(34).  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'

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: 28f. 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: 8fa.  Os programadores podem chamar a função *note
     sys.getrefcount(): 2cd. para retornar a contagem de referências
     para um objeto específico.

     Em *note CPython: 8fa, 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: 232. tradicional, como um diretório contendo um
     arquivo ‘__init__.py’.

     Veja também *note pacote de espaço de nomes: 2b1.

REPL

     Um acrônimo para “read–eval–print loop”, outro nome para o console
     *note interativo: 1b5. 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: 1423. com suporte para acesso eficiente a seus
     elementos através de índices inteiros via método especial *note
     __getitem__(): 581. e que define o método *note __len__(): 2245.
     que devolve o tamanho da sequência.  Alguns tipos de sequência
     embutidos são: *note list: 24c, *note str: 169, *note tuple: 608, e
     *note bytes: 192.  Note que *note dict: 183. também tem suporte
     para *note __getitem__(): 581. e ‘__len__()’, mas é considerado um
     mapeamento e não uma sequência porque a busca usa uma chave *note
     hasheável: 819. arbitrária em vez de inteiros.

     A classe base abstrata *note collections.abc.Sequence: 13c0. define
     uma interface mais rica que vai além de apenas *note __getitem__():
     581. e *note __len__(): 2245, adicionando *note count(): 226f,
     *note index(): 18c7, *note __contains__(): 15ab, e *note
     __reversed__(): e7a.  Tipos que implementam essa interface podem
     ser explicitamente registrados usando *note register(): 1284.  Para
     mais documentação sobre métodos de sequências em geral, veja *note
     Operações comuns de sequências: 249d.

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: 7e1.

despacho único

     Uma forma de despacho de *note função genérica: bda. 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:
     70b.  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: 689. 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(35).

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: e5c.

biblioteca padrão

     A coleção de *note pacotes: 232, *note módulos: 191a. e *note
     módulos de extensão: 20fc. 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: 149.

     Veja também *note sys.stdlib_module_names: a38. 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: 2266. ou uma de várias
     construções com uma palavra reservada, tal como *note if: 181,
     *note while: 18c3. ou *note for: 347.

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: 2262. e o módulo *note typing: 10a.

stdlib

     Uma abreviação para o termo *note biblioteca padrão: 56f5. 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(): 784. quando a
     referência é criada e liberada com *note Py_DECREF(): 785. quando a
     referência é excluída.

     A função *note Py_NewRef(): a90. pode ser usada para criar uma
     referência forte para um objeto.  Normalmente, a função *note
     Py_DECREF(): 785. 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: 3d4.

t-string

t-strings

     Literais de string prefixados com ‘t’ ou ‘T’ são comumente chamados
     de “t-strings”, que é uma abreviação de *note literais de strings
     templates: 176b.

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:
     fac, que são coletivamente chamadas de “codificações de texto”.

arquivo texto

     Um *note objeto arquivo: 13bf. apto a ler e escrever objetos *note
     str: 169.  Geralmente, um arquivo texto, na verdade, acessa um
     fluxo de dados de bytes e captura o *note codificador de texto:
     246b. automaticamente.  Exemplos de arquivos texto são: arquivos
     abertos em modo texto (‘'r'’ or ‘'w'’), *note sys.stdin: 754, *note
     sys.stdout: cc0, e instâncias de *note io.StringIO: 111f.

     Veja também *note arquivo binário: 1f23. para um objeto arquivo
     apto a ler e escrever *note objetos bytes ou similares: 193.

estado de thread

     As informações usadas pelo ambiente de execução do *note CPython:
     8fa. para executar em uma thread do sistema operacional.  Por
     exemplo, isso inclui a exceção atual, se houver, e o estado do
     interpretador de bytecode.

     Cada estado de thread está vinculado a uma única thread do SO, mas
     as threads podem ter muitos estados de thread disponíveis.  No
     máximo, um deles pode ser *note anexado: 4d72. por vez.

     Um *note estado de thread anexado: 4d72. é necessário para chamar a
     maioria da API C do Python, a menos que uma função documente
     explicitamente o contrário.  O interpretador de bytecode só é
     executado em um estado de thread anexado.

     Cada estado de thread pertence a um único interpretador, mas cada
     interpretador pode ter vários estados de thread, incluindo vários
     para a mesma thread do sistema operacional.  Estados de thread de
     vários interpretadores podem ser vinculados à mesma thread, mas
     apenas um pode ser *note anexado: 4d72. nessa thread a qualquer
     momento.

     Veja *note Estado de thread e a trava global do interpretador:
     528b. para mais informações.

token

     Uma pequena unidade de código-fonte, gerada pelo *note analisador
     léxico: 2140. (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: 101. expõe o analisador léxico do Python.
     O módulo *note token: 100. 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__: 169b. 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:
     2262.  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: 10a. e PEP 484(36), a qual descreve esta
     funcionalidade.

dica de tipo

     Uma *note anotação: 15c. 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: 56d.
     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(): 8b5.

     Veja *note typing: 10a. e PEP 484(37), 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(38) e PEP
     3116(39), bem como *note bytes.splitlines(): 24b8. para uso
     adicional.

anotação de variável

     Uma *note anotação: 15c. 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: 2262.: por exemplo, espera-se que esta variável receba
     valores do tipo *note int: 19b.:

          contagem: int = 0

     A sintaxe de anotação de variável é explicada na seção *note
     instruções de atribuição anotado: 2398.

     Veja *note anotação de função: 1ed0, PEP 484(40) e PEP 526(41), que
     descrevem esta funcionalidade.  Veja também *note Boas práticas
     para anotações: 9cf. 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: 117.

máquina virtual

     Um computador definido inteiramente em software.  A máquina virtual
     de Python executa o *note bytecode: 4a4. emitido pelo compilador de
     bytecode.

operador morsa

     Uma maneira bem-humorada de se referir ao operador da *note
     expressão de atribuição: 236a. ‘:=’ 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-0649/

   (4) https://peps.python.org/pep-0362/

   (5) https://peps.python.org/pep-0492/

   (6) https://peps.python.org/pep-0492/

   (7) https://peps.python.org/pep-0525/

   (8) https://peps.python.org/pep-0492/

   (9) https://peps.python.org/pep-0492/

   (10) https://peps.python.org/pep-0492/

   (11) https://gvanrossum.github.io/

   (12) https://peps.python.org/pep-0343/

   (13) https://peps.python.org/pep-0343/

   (14) https://peps.python.org/pep-0492/

   (15) https://peps.python.org/pep-0492/

   (16) https://www.python.org

   (17) https://peps.python.org/pep-0498/

   (18) https://peps.python.org/pep-0238/

   (19) https://peps.python.org/pep-0703/

   (20) https://peps.python.org/pep-0484/

   (21) https://peps.python.org/pep-0443/

   (22) https://peps.python.org/pep-0483/

   (23) https://peps.python.org/pep-0484/

   (24) https://peps.python.org/pep-0585/

   (25) https://peps.python.org/pep-0703/

   (26) https://peps.python.org/pep-0683/

   (27) https://peps.python.org/pep-0302/

   (28) https://peps.python.org/pep-0420/

   (29) https://peps.python.org/pep-0362/

   (30) https://peps.python.org/pep-0519/

   (31) https://peps.python.org/pep-0001/

   (32) https://peps.python.org/pep-0420/

   (33) https://peps.python.org/pep-0411/

   (34) https://peps.python.org/pep-3155/

   (35) https://peps.python.org/pep-0387/#soft-deprecation

   (36) https://peps.python.org/pep-0484/

   (37) https://peps.python.org/pep-0484/

   (38) https://peps.python.org/pep-0278/

   (39) https://peps.python.org/pep-3116/

   (40) https://peps.python.org/pep-0484/

   (41) 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: 4dbb. 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 tem 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.14/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: 5703.

* 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: 550.  Se você tiver uma sugestão sobre como consertá-lo
inclua isso também.

Você também pode abrir um item de discussão em nosso fórum Discourse de
documentação(1).

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(2).

Ver também
..........

*note Bugs na documentação: 5704.

     Uma lista de bugs na documentação que foram submetidos no
     rastreador de problemas do Python.

Rastreando problemas(3)

     Visão geral do processo envolvido em reportar uma melhoria no
     rastreador.

Ajudando com a documentação(4)

     Guia compreensivo para os indivíduos que estão interessados em
     contribuir com a documentação do Python.

Traduções da documentação(5)

     Uma lista de páginas no GitHub relacionadas à tradução da
     documentação e respectivos contatos iniciais.

   ---------- Footnotes ----------

   (1) https://discuss.python.org/c/documentation/26

   (2) https://github.com/python/python-docs-theme

   (3) https://devguide.python.org/tracker/

   (4) 
https://devguide.python.org/docquality/#helping-with-documentation

   (5) 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 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: 570a. 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: 5710.

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: 5711. 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 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<4>.
* cfuhash::
* libmpdec::
* Conjunto de testes C14N do W3C::
* mimalloc::
* asyncio: asyncio<15>.
* Global Unbounded Sequences (GUS): Global Unbounded Sequences GUS.
* Ligações Zstandard::


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: bd. 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: d1. 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: 75. 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: 103. 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: 134. 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: c6. 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: 6c, *note posix: b2. e *note ssl: d5. 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: 12c. é 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<4>,  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: 2e. é
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<4>,  Next: cfuhash,  Prev: libffi,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.15 zlib
------------

A extensão *note zlib: 139. é 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<4>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.16 cfuhash
---------------

A implementação da tabela de hash usada pelo *note tracemalloc: 105. é
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: 3a. é
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: e8.
(‘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<15>,  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<15>,  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: b. 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,  Next: Ligações Zstandard,  Prev: asyncio<15>,  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: Ligações Zstandard,  Prev: Global Unbounded Sequences GUS,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.22 Ligações Zstandard
--------------------------

As ligações de Zstandard em ‘Modules/_zstd’ e ‘Lib/compression/zstd’ são
baseadas no código da biblioteca pyzstd(1), com direitos autorais de Ma
Lin e colaboradores.  O código do pyzstd é distribuído sob a Licença BSD
de 3 Cláusulas:

     Copyright (c) 2020-present, Ma Lin and contributors.
     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 copyright holder 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 HOLDER 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.

   ---------- Footnotes ----------

   (1) https://github.com/Rogdham/pyzstd/


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.
* annotationlib: 6. Functionality for introspecting annotations
* argparse: 7. Command-line option and argument parsing library.
* array: 8. Space efficient arrays of uniformly typed numeric
                        values.
* ast: 9. Abstract Syntax Tree classes and manipulation.
* asynchat: a. Removed in 3.12.
* asyncio: b. Asynchronous I/O.
* asyncore: c. Removed in 3.12.
* atexit: d. Register and execute cleanup functions.
* audioop: e. Removed in 3.13.
* base64: f. RFC 4648: Base16, Base32, Base64 Data
                        Encodings; Base85 and Ascii85
* bdb: 10. Debugger framework.
* binascii: 11. Tools for converting between binary and various ASCII-
                        encoded binary representations.
* bisect: 12. Array bisection algorithms for binary searching.
* builtins: 13. The module that provides the built-in namespace.
* bz2: 14. Interfaces for bzip2 compression and decompression.
* calendar: 15. Functions for working with calendars, including
                        some emulation of the Unix cal program.
* cgi: 16. Removed in 3.13.
* cgitb: 17. Removed in 3.13.
* chunk: 18. Removed in 3.13.
* cmath: 19. Mathematical functions for complex numbers.
* cmd: 1a. Build line-oriented command interpreters.
* code: 1b. Facilities to implement read-eval-print loops.
* codecs: 1c. Encode and decode data and streams.
* codeop: 1d. Compile (possibly incomplete) Python code.
* collections: 1e. Container datatypes
* collections.abc: 1f. Abstract base classes for containers
* colorsys: 20. Conversion functions between RGB and other color
                        systems.
* compileall: 21. Tools for byte-compiling all Python source files in a
                        directory tree.
* compression: 22.
* compression.zstd: 23. Low-level interface to compression and decompression
                        routines in the zstd library.
* concurrent.futures: 24. Execute computations concurrently using threads or
                        processes.
* concurrent.interpreters: 25. Multiple interpreters in the same process
* configparser: 26. Configuration file parser.
* contextlib: 27. Utilities for with-statement contexts.
* contextvars: 28. Context Variables
* copy: 29. Shallow and deep copy operations.
* copyreg: 2a. Register pickle support functions.
* cProfile: 2b.
* crypt: 2c. Removed in 3.13.
* csv: 2d. Write and read tabular data to and from delimited
                        files.
* ctypes: 2e. A foreign function library for Python.
* curses: 2f. An interface to the curses library, providing
                        portable terminal handling.
* curses.ascii: 30. Constants and set-membership functions for ASCII
                        characters.
* curses.panel: 31. A panel stack extension that adds depth to curses
                        windows.
* curses.textpad: 32. Emacs-like input editing in a curses window.
* dataclasses: 33. Generate special methods on user-defined classes.
* datetime: 34. Basic date and time types.
* dbm: 35. Interfaces to various Unix "database" formats.
* dbm.dumb: 36. Portable implementation of the simple DBM interface.
* dbm.gnu: 37. GNU database manager
* dbm.ndbm: 38. The New Database Manager
* dbm.sqlite3: 39. SQLite backend for dbm
* decimal: 3a. Implementation of the General Decimal Arithmetic
                        Specification.
* difflib: 3b. Helpers for computing differences between objects.
* dis: 3c. Disassembler for Python bytecode.
* distutils: 3d. Removed in 3.12.
* doctest: 3e. Test pieces of code within docstrings.
* email: 3f. Package supporting the parsing,
                        manipulating, and generating email messages.
* email.charset: 40. Character Sets
* email.contentmanager: 41. Storing and Retrieving Content from MIME Parts
* email.encoders: 42. Encoders for email message payloads.
* email.errors: 43. The exception classes used by the email package.
* email.generator: 44. Generate flat text email messages from a message
                        structure.
* email.header: 45. Representing non-ASCII headers
* email.headerregistry: 46. Automatic Parsing of headers based on the field name
* email.iterators: 47. Iterate over a message object tree.
* email.message: 48. The base class representing email messages.
* email.mime: 49. Build MIME messages.
* email.mime.application: 4a.
* email.mime.audio: 4b.
* email.mime.base: 4c.
* email.mime.image: 4d.
* email.mime.message: 4e.
* email.mime.multipart: 4f.
* email.mime.nonmultipart: 50.
* email.mime.text: 51.
* email.parser: 52. Parse flat text email messages to produce a message
                        object structure.
* email.policy: 53. Controlling the parsing and generating of messages
* email.utils: 54. Miscellaneous email package utilities.
* encodings: 55. Encodings package
* encodings.idna: 56. Internationalized Domain Names implementation
* encodings.mbcs: 57. Windows ANSI codepage
* encodings.utf_8_sig: 58. UTF-8 codec with BOM signature
* ensurepip: 59. Bootstrapping the "pip" installer into an existing
                        Python installation or virtual environment.
* enum: 5a. Implementation of an enumeration class.
* errno: 5b. Standard errno system symbols.
* faulthandler: 5c. Dump the Python traceback.
* fcntl: 5d. The fcntl() and ioctl() system calls.
* filecmp: 5e. Compare files efficiently.
* fileinput: 5f. Loop over standard input or a list of files.
* fnmatch: 60. Unix shell style filename pattern matching.
* fractions: 61. Rational numbers.
* ftplib: 62. FTP protocol client (requires sockets).
* functools: 63. Higher-order functions and operations on callable
                        objects.
* gc: 64. Interface to the cycle-detecting garbage collector.
* getopt: 65. Portable parser for command line options; support both
                        short and long option names.
* getpass: 66. Portable reading of passwords and retrieval of the
                        userid.
* gettext: 67. Multilingual internationalization services.
* glob: 68. Unix shell style pathname pattern expansion.
* graphlib: 69. Functionality to operate with graph-like structures
* grp: 6a. The group database (getgrnam() and friends).
* gzip: 6b. Interfaces for gzip compression and decompression
                        using file objects.
* hashlib: 6c. Secure hash and message digest algorithms.
* heapq: 6d. Heap queue algorithm (a.k.a. priority queue).
* hmac: 6e. Keyed-Hashing for Message Authentication (HMAC)
                        implementation
* html: 6f. Helpers for manipulating HTML.
* html.entities: 70. Definitions of HTML general entities.
* html.parser: 71. A simple parser that can handle HTML and XHTML.
* http: 72. HTTP status codes and messages
* http.client: 73. HTTP and HTTPS protocol client (requires sockets).
* http.cookiejar: 74. Classes for automatic handling of HTTP cookies.
* http.cookies: 75. Support for HTTP state management (cookies).
* http.server: 76. HTTP server and request handlers.
* idlelib: 77. Implementation package for the IDLE shell/editor.
* imaplib: 78. IMAP4 protocol client (requires sockets).
* imghdr: 79. Removed in 3.13.
* imp: 7a. Removed in 3.12.
* importlib: 7b. The implementation of the import machinery.
* importlib.abc: 7c. Abstract base classes related to import
* importlib.machinery: 7d. Importers and path hooks
* importlib.metadata: 7e. Accessing package metadata
* importlib.resources: 7f. Package resource reading, opening, and
                        access
* importlib.resources.abc: 80. Abstract base classes for resources
* importlib.util: 81. Utility code for importers
* inspect: 82. Extract information and source code from live objects.
* io: 83. Core tools for working with streams.
* ipaddress: 84. IPv4/IPv6 manipulation library.
* itertools: 85. Functions creating iterators for efficient looping.
* json: 86. Encode and decode the JSON format.
* json.tool: 87. A command-line interface to validate and pretty-print
                        JSON.
* keyword: 88. Test whether a string is a keyword in Python.
* linecache: 89. Provides random access to individual lines from text
                        files.
* locale: 8a. Internationalization services.
* logging: 8b. Flexible event logging system for applications.
* logging.config: 8c. Configuration of the logging module.
* logging.handlers: 8d. Handlers for the logging module.
* lzma: 8e. A Python wrapper for the liblzma compression library.
* mailbox: 8f. Manipulate mailboxes in various formats
* mailcap: 90. Removed in 3.13.
* marshal: 91. Convert Python objects to streams of bytes and back
                        (with different constraints).
* math: 92. Mathematical functions (sin() etc.).
* mimetypes: 93. Mapping of filename extensions to MIME types.
* mmap: 94. Interface to memory-mapped files for Unix and Windows.
* modulefinder: 95. Find modules used by a script.
* msilib: 96. Removed in 3.13.
* msvcrt: 97. Miscellaneous useful routines from the MS VC++
                        runtime.
* multiprocessing: 98. Process-based parallelism.
* multiprocessing.connection: 99. API for dealing with sockets.
* multiprocessing.dummy: 9a. Dumb wrapper around threading.
* multiprocessing.managers: 9b. Share data between process with shared objects.
* multiprocessing.pool: 9c. Create pools of processes.
* multiprocessing.shared_memory: 9d. Provides shared memory for direct access
                                 across processes.
* multiprocessing.sharedctypes: 9e. Allocate ctypes objects from shared memory.
* netrc: 9f. Loading of .netrc files.
* nis: a0. Removed in 3.13.
* nntplib: a1. Removed in 3.13.
* numbers: a2. Numeric abstract base classes (Complex,
                        Real, Integral, etc.).
* operator: a3. Functions corresponding to the standard operators.
* optparse: a4. Command-line option parsing library.
* os: a5. Miscellaneous operating system interfaces.
* os.path: a6. Operations on pathnames.
* ossaudiodev: a7. Removed in 3.13.
* pathlib: a8. Object-oriented filesystem paths
* pathlib.types: a9. pathlib types for static type checking
* pdb: aa. The Python debugger for interactive interpreters.
* pickle: ab. Convert Python objects to streams of bytes and back.
* pickletools: ac. Contains extensive comments about the pickle protocols
                        and pickle-machine opcodes, as well as some
                        useful functions.
* pipes: ad. Removed in 3.13.
* pkgutil: ae. Utilities for the import system.
* platform: af. Retrieves as much platform identifying data as
                        possible.
* plistlib: b0. Generate and parse Apple plist files.
* poplib: b1. POP3 protocol client (requires sockets).
* posix: b2. The most common POSIX system calls (normally used via
                        module os).
* pprint: b3. Data pretty printer.
* profile: b4. Python source profiler.
* pstats: b5. Statistics object for use with the profiler.
* pty: b6. Pseudo-Terminal Handling for Unix.
* pwd: b7. The password database (getpwnam() and friends).
* py_compile: b8. Generate byte-code files from Python source files.
* pyclbr: b9. Supports information extraction for a Python module
                        browser.
* pydoc: ba. Documentation generator and online help system.
* queue: bb. A synchronized queue class.
* quopri: bc. Encode and decode files using the MIME quoted-
                        printable encoding.
* random: bd. Generate pseudo-random numbers with various common
                        distributions.
* re: be. Regular expression operations.
* readline: bf. GNU readline support for Python.
* reprlib: c0. Alternate repr() implementation with size limits.
* resource: c1. An interface to provide resource usage information on
                        the current process.
* rlcompleter: c2. Python identifier completion, suitable for the
                        GNU readline library.
* runpy: c3. Locate and run Python modules without importing them
                        first.
* sched: c4. General purpose event scheduler.
* secrets: c5. Generate secure random numbers for managing secrets.
* select: c6. Wait for I/O completion on multiple streams.
* selectors: c7. High-level I/O multiplexing.
* shelve: c8. Python object persistence.
* shlex: c9. Simple lexical analysis for Unix shell-like languages.
* shutil: ca. High-level file operations, including copying.
* signal: cb. Set handlers for asynchronous events.
* site: cc. Module responsible for site-specific configuration.
* sitecustomize: cd.
* smtpd: ce. Removed in 3.12.
* smtplib: cf. SMTP protocol client (requires sockets).
* sndhdr: d0. Removed in 3.13.
* socket: d1. Low-level networking interface.
* socketserver: d2. A framework for network servers.
* spwd: d3. Removed in 3.13.
* sqlite3: d4. A DB-API 2.0 implementation using SQLite 3.x.
* ssl: d5. TLS/SSL wrapper for socket objects
* stat: d6. Utilities for interpreting the results of
                        os.stat(), os.lstat() and os.fstat().
* statistics: d7. Mathematical statistics functions
* string: d8. Common string operations.
* string.templatelib: d9. Support for template string literals.
* stringprep: da. String preparation, as per RFC 3453
* struct: db. Interpret bytes as packed binary data.
* subprocess: dc. Subprocess management.
* sunau: dd. Removed in 3.13.
* symtable: de. Interface to the compiler's internal symbol tables.
* sys: df. Access system-specific parameters and functions.
* sys.monitoring: e0. Access and control event monitoring
* sysconfig: e1. Python's configuration information
* syslog: e2. An interface to the Unix syslog library routines.
* tabnanny: e3. Tool for detecting white space related problems in
                        Python source files in a directory tree.
* tarfile: e4. Read and write tar-format archive files.
* telnetlib: e5. Removed in 3.13.
* tempfile: e6. Generate temporary files and directories.
* termios: e7. POSIX style tty control.
* test: e8. Regression tests package containing the testing suite
                        for Python.
* test.regrtest: e9. Drives the regression test suite.
* test.support: ea. Support for Python's regression test suite.
* test.support.bytecode_helper: eb. Support tools for testing correct bytecode
                                generation.
* test.support.import_helper: ec. Support for import tests.
* test.support.os_helper: ed. Support for os tests.
* test.support.script_helper: ee. Support for Python's script execution tests.
* test.support.socket_helper: ef. Support for socket tests.
* test.support.threading_helper: f0. Support for threading tests.
* test.support.warnings_helper: f1. Support for warnings tests.
* textwrap: f2. Text wrapping and filling
* threading: f3. Thread-based parallelism.
* time: f4. Time access and conversions.
* timeit: f5. Measure the execution time of small code snippets.
* tkinter: f6. Interface to Tcl/Tk for graphical user interfaces
* tkinter.colorchooser: f7. Color choosing dialog
* tkinter.commondialog: f8. Tkinter base class for dialogs
* tkinter.dnd: f9. Tkinter drag-and-drop interface
* tkinter.filedialog: fa. Dialog classes for file selection
* tkinter.font: fb. Tkinter font-wrapping class
* tkinter.messagebox: fc. Various types of alert dialogs
* tkinter.scrolledtext: fd. Text widget with a vertical scroll bar.
* tkinter.simpledialog: fe. Simple dialog windows
* tkinter.ttk: ff. Tk themed widget set
* token: 100. Constants representing terminal nodes of the parse
                        tree.
* tokenize: 101. Lexical scanner for Python source code.
* tomllib: 102. Parse TOML files.
* trace: 103. Trace or track Python statement execution.
* traceback: 104. Print or retrieve a stack traceback.
* tracemalloc: 105. Trace memory allocations.
* tty: 106. Utility functions that perform common terminal control
                        operations.
* turtle: 107. An educational framework for simple graphics
                        applications
* turtledemo: 108. A viewer for example turtle scripts
* types: 109. Names for built-in types.
* typing: 10a. Support for type hints (see :pep:'484').
* unicodedata: 10b. Access the Unicode Database.
* unittest: 10c. Unit testing framework for Python.
* unittest.mock: 10d. Mock object library.
* urllib: 10e.
* urllib.error: 10f. Exception classes raised by urllib.request.
* urllib.parse: 110. Parse URLs into or assemble them from components.
* urllib.request: 111. Extensible library for opening URLs.
* urllib.response: 112. Response classes used by urllib.
* urllib.robotparser: 113. Load a robots.txt file and answer questions about
                        fetchability of other URLs.
* usercustomize: 114.
* uu: 115. Removed in 3.13.
* uuid: 116. UUID objects (universally unique identifiers)
                        according to RFC 9562
* venv: 117. Creation of virtual environments.
* warnings: 118. Issue warning messages and control their disposition.
* wave: 119. Provide an interface to the WAV sound format.
* weakref: 11a. Support for weak references and weak dictionaries.
* webbrowser: 11b. Easy-to-use controller for web browsers.
* winreg: 11c. Routines and objects for manipulating the Windows
                        registry.
* winsound: 11d. Access to the sound-playing machinery for Windows.
* wsgiref: 11e. WSGI Utilities and Reference Implementation.
* wsgiref.handlers: 11f. WSGI server/gateway base classes.
* wsgiref.headers: 120. WSGI response header tools.
* wsgiref.simple_server: 121. A simple WSGI HTTP server.
* wsgiref.types: 122. WSGI types for static type checking
* wsgiref.util: 123. WSGI environment utilities.
* wsgiref.validate: 124. WSGI conformance checker.
* xdrlib: 125. Removed in 3.13.
* xml: 126. Package containing XML processing modules
* xml.dom: 127. Document Object Model API for Python.
* xml.dom.minidom: 128. Minimal Document Object Model (DOM) implementation.
* xml.dom.pulldom: 129. Support for building partial DOM trees from SAX
                        events.
* xml.etree.ElementInclude: 12a.
* xml.etree.ElementTree: 12b. Implementation of the ElementTree API.
* xml.parsers.expat: 12c. An interface to the Expat non-validating XML parser.
* xml.parsers.expat.errors: 12d.
* xml.parsers.expat.model: 12e.
* xml.sax: 12f. Package containing SAX2 base classes and convenience
                        functions.
* xml.sax.handler: 130. Base classes for SAX event handlers.
* xml.sax.saxutils: 131. Convenience functions and classes for use with SAX.
* xml.sax.xmlreader: 132. Interface which SAX-compliant XML parsers must
                        implement.
* xmlrpc: 133. Server and client modules implementing XML-RPC.
* xmlrpc.client: 134. XML-RPC client access.
* xmlrpc.server: 135. Basic XML-RPC server implementations.
* zipapp: 136. Manage executable Python zip archives
* zipfile: 137. Read and write ZIP-format archive files.
* zipimport: 138. Support for importing Python modules from ZIP
                        archives.
* zlib: 139. Low-level interface to compression and decompression
                        routines compatible with gzip.
* zoneinfo: 13a. 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   22)
* _ (sublinhado);em literal númerico <1>: Inteiros literais. (line   66)
* _ (sublinhado);gettext:                API do GNU gettext. (line   32)
* _ (underscore);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line  141)
* __, identificadores:                   Palavras reservadas contextuais.
                                                             (line   25)
* __abs__() (método object):             Emulando tipos numéricos.
                                                             (line  116)
* __abs__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   89)
* __add__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __add__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   94)
* __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   99)
* __anext__() (método agen):             Métodos geradores-iteradores assíncronos.
                                                             (line    9)
* __anext__() (método object):           Iteradores assíncronos.
                                                             (line   18)
* __annotate__ (atributo de classe):     Atributos especiais.
                                                             (line    6)
* __annotate__ (atributo de função):     Atributos especiais graváveis.
                                                             (line    6)
* __annotate__ (atributo de módulo):     Módulos<3>.         (line   21)
* __annotate__ (atributo function):      Atributos especiais graváveis.
                                                             (line   56)
* __annotate__ (atributo module):        Outros atributos graváveis em objetos de módulo.
                                                             (line   24)
* __annotate__() (método object):        Anotações.          (line   21)
* __annotate__() (método type):          Atributos especiais.
                                                             (line   65)
* __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 object):     Anotações.          (line   10)
* __annotations__ (atributo type):       Atributos especiais.
                                                             (line   36)
* __args__ (atributo genericalias):      Atributos especiais de objetos GenericAlias.
                                                             (line   16)
* __await__() (método object):           Objetos aguardáveis.
                                                             (line   14)
* __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  437)
* __buffer__() (método object):          Emulando tipos buffer.
                                                             (line   15)
* __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  238)
* __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   31)
* __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  202)
* __ceil__() (método object):            Emulando tipos numéricos.
                                                             (line  146)
* __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   16)
* __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  124)
* __concat__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  193)
* __constraints__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  201)
* __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): Mailbox objects.  (line  203)
* __contains__() (método object):        Emulando tipos contêineres.
                                                             (line  159)
* __contains__() (no módulo operator):   operator — Operadores padrões como funções.
                                                             (line  198)
* __context__ (atributo BaseException):  Contexto da exceção.
                                                             (line    9)
* __context__ (atributo de exceção):     A instrução raise.  (line   31)
* __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   71)
* __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  491)
* __default__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  224)
* __default__ (atributo typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  374)
* __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): Mailbox objects.   (line   76)
* __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  208)
* __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  437)
* __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   32)
* __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   58)
* __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  121)
* __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  437)
* __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   58)
* __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   90)
* __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   86)
* __float__() (método object):           Emulando tipos numéricos.
                                                             (line  124)
* __floor__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  192)
* __floor__() (método object):           Emulando tipos numéricos.
                                                             (line  146)
* __floordiv__() (método object):        Emulando tipos numéricos.
                                                             (line   11)
* __floordiv__() (no módulo operator):   operator — Operadores padrões como funções.
                                                             (line  104)
* __format__:                            Funções embutidas<3>.
                                                             (line  813)
* __format__() (método datetime.date):   Objetos date.       (line  340)
* __format__() (método datetime.datetime): Objetos datetime. (line  784)
* __format__() (método datetime.time):   Objetos time.       (line  255)
* __format__() (método enum.Enum):       Tipos de Dados<2>.  (line  325)
* __format__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  218)
* __format__() (método ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  202)
* __format__() (método ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  337)
* __format__() (método object):          Personalização básica.
                                                             (line  163)
* __forward_arg__ (atributo annotationlib.ForwardRef): Classes<5>.
                                                             (line   60)
* __fspath__() (método os.PathLike):     Parâmetros de processo.
                                                             (line  154)
* __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  679)
* __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): Mailbox objects.   (line  148)
* __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  213)
* __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   10)
* __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   85)
* __iadd__() (no módulo operator):       Operadores in-place.
                                                             (line   39)
* __iand__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __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   85)
* __ifloordiv__() (no módulo operator):  Operadores in-place.
                                                             (line   55)
* __ilshift__() (método object):         Emulando tipos numéricos.
                                                             (line   85)
* __ilshift__() (no módulo operator):    Operadores in-place.
                                                             (line   60)
* __imatmul__() (método object):         Emulando tipos numéricos.
                                                             (line   85)
* __imatmul__() (no módulo operator):    Operadores in-place.
                                                             (line   75)
* __imod__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __imod__() (no módulo operator):       Operadores in-place.
                                                             (line   65)
* __import__() (no módulo importlib):    Funções<13>.        (line    6)
* __imul__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __imul__() (no módulo operator):       Operadores in-place.
                                                             (line   70)
* __index__() (método object):           Emulando tipos numéricos.
                                                             (line  132)
* __index__() (no módulo operator):      operator — Operadores padrões como funções.
                                                             (line  109)
* __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  124)
* __interactivehook__ (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1271)
* __inv__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  119)
* __invert__() (método object):          Emulando tipos numéricos.
                                                             (line  116)
* __invert__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  119)
* __ior__() (método object):             Emulando tipos numéricos.
                                                             (line   85)
* __ior__() (no módulo operator):        Operadores in-place.
                                                             (line   82)
* __ipow__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __ipow__() (no módulo operator):       Operadores in-place.
                                                             (line   87)
* __irshift__() (método object):         Emulando tipos numéricos.
                                                             (line   85)
* __irshift__() (no módulo operator):    Operadores in-place.
                                                             (line   92)
* __isub__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __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):   Mailbox objects.    (line  116)
* __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   85)
* __itruediv__() (no módulo operator):   Operadores in-place.
                                                             (line  102)
* __ixor__() (método object):            Emulando tipos numéricos.
                                                             (line   85)
* __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   63)
* __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):    Mailbox objects.    (line  208)
* __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  127)
* __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  142)
* __members__ (atributo enum.EnumType):  Tipos de Dados<2>.  (line  110)
* __missing__():                         Tipo mapeamento — dict.
                                                             (line  121)
* __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  132)
* __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  121)
* __module__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  590)
* __mro__ (atributo type):               Atributos especiais.
                                                             (line   94)
* __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  137)
* __mutable_keys__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  471)
* __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   63)
* __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 1755)
* __name__ (atributo type):              Atributos especiais.
                                                             (line   10)
* __name__ (atributo typing.NewType):    Outras diretivas especiais.
                                                             (line  125)
* __name__ (atributo typing.ParamSpec):  Criando tipos genéricos e apelidos de tipo.
                                                             (line  487)
* __name__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  582)
* __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  370)
* __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  116)
* __neg__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  149)
* __new__() (método enum.Enum):          Tipos de Dados<2>.  (line  273)
* __new__() (método object):             Personalização básica.
                                                             (line    6)
* __new__() (método string.templatelib.Interpolation): Tipos.
                                                             (line  281)
* __new__() (método string.templatelib.Template): Tipos.     (line  106)
* __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  421)
* __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  154)
* __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)
* __pointer_type__ (atributo ctypes._CData): Data types.     (line   73)
* __pos__() (método object):             Emulando tipos numéricos.
                                                             (line  116)
* __pos__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  159)
* __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  164)
* __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  732)
* __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  463)
* __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  417)
* __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  207)
* __round__() (método object):           Emulando tipos numéricos.
                                                             (line  146)
* __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  169)
* __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): Mailbox objects.   (line   90)
* __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  222)
* __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 1474)
* __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   79)
* __stderr__ (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 2125)
* __stdin__ (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 2125)
* __stdout__ (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 2125)
* __str__() (método datetime.date):      Objetos date.       (line  312)
* __str__() (método datetime.datetime):  Objetos datetime.   (line  754)
* __str__() (método datetime.time):      Objetos time.       (line  245)
* __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  174)
* __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  129)
* __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  392)
* __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  562)
* __truediv__() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  140)
* __truediv__() (método object):         Emulando tipos numéricos.
                                                             (line   11)
* __truediv__() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  179)
* __trunc__() (método object):           Emulando tipos numéricos.
                                                             (line  146)
* __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   67)
* __type_params__ (atributo type):       Atributos especiais.
                                                             (line   72)
* __type_params__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  598)
* __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  437)
* __value__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  610)
* __version__ (no módulo curses):        Constantes<6>.      (line   20)
* __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  185)
* _, identificadores:                    Palavras reservadas contextuais.
                                                             (line   26)
* _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):   Structured data types.
                                                             (line  111)
* _anonymous_ (atributo ctypes.Structure): Structured data types.
                                                             (line  163)
* _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   83)
* _b_needsfree_ (atributo ctypes._CData): Data types.        (line   90)
* _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  201)
* _clear_type_cache() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  188)
* _current_exceptions() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  230)
* _current_frames() (no módulo sys):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  209)
* _debugmallocstats() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  289)
* _emscripten_info (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  356)
* _enablelegacywindowsfsencoding() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 2028)
* _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   54)
* _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):  Structured data types.
                                                             (line   46)
* _flush() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  117)
* _for_archive() (método zipfile.ZipInfo): zipfile — Trabalha com arquivos ZIP.
                                                             (line   79)
* _frozen (C struct):                    Importando módulos<2>.
                                                             (line  276)
* _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  957)
* _getframemodulename() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  973)
* _getvalue() (método multiprocessing.managers.BaseProxy): Objetos proxies.
                                                             (line  140)
* _handle (atributo ctypes.PyDLL):       Loading shared libraries.
                                                             (line  157)
* _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  313)
* _inittab.initfunc (C member):          Importando módulos<2>.
                                                             (line  325)
* _inittab.name (C member):              Importando módulos<2>.
                                                             (line  321)
* _is_gil_enabled() (no módulo sys):     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1302)
* _is_immortal() (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1390)
* _is_interned() (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1405)
* _jit (no módulo sys):                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1321)
* _jit.is_active() (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line 1349)
* _jit.is_available() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1332)
* _jit.is_enabled() (no módulo sys):     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1340)
* _layout_ (atributo ctypes.Structure):  Structured data types.
                                                             (line  132)
* _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   34)
* _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  496)
* _missing_() (método enum.Enum):        Tipos de Dados<2>.  (line  250)
* _name (atributo ctypes.PyDLL):         Loading shared libraries.
                                                             (line  161)
* _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   95)
* _order_ (atributo enum.Enum):          Tipos de Dados<2>.  (line  164)
* _pack_ (atributo ctypes.Structure):    Structured data types.
                                                             (line   87)
* _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_NoneStruct (C var):                Alocando objetos na heap.
                                                             (line  147)
* _PyBytes_Resize (C function):          Objetos Bytes.      (line  203)
* _PyCode_GetExtra (função C):           Informação adicional.
                                                             (line   49)
* _PyCode_SetExtra (função C):           Informação adicional.
                                                             (line   63)
* _PyEval_RequestCodeExtraIndex (função C): Informação adicional.
                                                             (line   31)
* _PyFrameEvalFunction (C type):         Low-level API.      (line  158)
* _PyInterpreterFrame (C struct):        Internal Frames.    (line    8)
* _PyInterpreterState_GetEvalFrameFunc (C function): Low-level API.
                                                             (line  173)
* _PyInterpreterState_SetEvalFrameFunc (C function): Low-level API.
                                                             (line  183)
* _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)
* _PyTuple_Resize (C function):          Objeto tupla.       (line  106)
* _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 2316)
* - (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   72)
* - (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   79)
* - (menos);operador binário:            Operações binárias aritméticas.
                                                             (line   91)
* - (menos);operador binário <1>:        Tipos numéricos — int float complex.
                                                             (line   33)
* - (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   33)
* -=;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  141)
* , (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: Literais de string brutas.
                                                             (line   26)
* ; (dois pontos);em literal de string formatado <1>: Métodos de string.
                                                             (line  799)
* ; (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   14)
* ; (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: Literais de string brutas.
                                                             (line   26)
* ! (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   14)
* ! (exclamação);no módulo curses:       curses ascii — Utilitários para caracteres ASCII.
                                                             (line  241)
* ! (pdb command):                       Comandos de depuração.
                                                             (line  435)
* ! (ponto de exclamação);em literal de string formatado: Métodos de string.
                                                             (line  799)
* ! f-string:                            Métodos de string.  (line  799)
* ? (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   94)
* ? (interrogação);in struct format strings <1>: Caracteres Formatados.
                                                             (line  185)
* ? (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   32)
* . (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   67)
* . (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   14)
* . (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>:        Anotações de objetos chamáveis.
                                                             (line   28)
* ...;literal de reticências <3>:        Anotando tuplas.    (line   45)
* ...;literal de reticências <4>:        Formas especiais.   (line   88)
* ...;literal de reticências <5>:        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 1679)
* ...;reticências literais:              Constantes embutidas.
                                                             (line   63)
* ...;reticências literais <1>:          O objeto nulo.      (line   12)
* .ini;arquivo:                          configparser — Analisador sintático de arquivo de configuração.
                                                             (line    8)
* .pdbrc;arquivo:                        Comandos de depuração.
                                                             (line   69)
* ' (aspas simples);literal de string:   Literais.           (line   15)
* ''';literal de string:                 Literais de string e bytes.
                                                             (line   33)
* " (aspas duplas);literal de string:    Literais.           (line   14)
* """;literal de string:                 Literais de string e bytes.
                                                             (line   33)
* (?;;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   32)
* () (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   14)
* [] (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: Literais de string brutas.
                                                             (line   26)
* {} (chaves);em literal de string formatado <1>: Métodos de string.
                                                             (line  799)
* {} (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   14)
* @ (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   32)
* * (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   55)
* *?;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   53)
* **;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:   Gramática formal.   (line   28)
* \ (contrabarra);sequência de escape <1>: Error Handlers.   (line   15)
* \\;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \\;sequência de escape:                Gramática formal.   (line   28)
* \A;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  508)
* \a;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \a;sequência de escape:                Gramática formal.   (line   28)
* \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  643)
* \b;sequência de escape:                Gramática formal.   (line   28)
* \d;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  547)
* \D;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  564)
* \f;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \f;sequência de escape:                Gramática formal.   (line   28)
* \g;em expressões regulares:            Funções<2>.         (line  228)
* \n;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \N;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \n;sequência de escape:                Gramática formal.   (line   28)
* \N;sequência de escape:                Gramática formal.   (line   28)
* \N;sequência de escape <1>:            Error Handlers.     (line   54)
* \r;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \r;sequência de escape:                Gramática formal.   (line   28)
* \s;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  572)
* \S;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  591)
* \t;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \t;sequência de escape:                Gramática formal.   (line   28)
* \u;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \U;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \u;sequência de escape:                Gramática formal.   (line   28)
* \U;sequência de escape:                Gramática formal.   (line   27)
* \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  643)
* \v;sequência de escape:                Gramática formal.   (line   28)
* \w;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  599)
* \W;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  618)
* \x;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  643)
* \x;sequência de escape:                Gramática formal.   (line   28)
* \x;sequência de escape <1>:            Error Handlers.     (line   15)
* \z;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  632)
* \Z;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  632)
* &=;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   59)
* # (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   72)
* # (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  102)
* % (porcentagem);datetime, formato:     Objetos timezone.   (line   73)
* % (porcentagem);datetime, formato <1>: Funções<5>.         (line  329)
* % (porcentagem);datetime, formato <2>: Funções<5>.         (line  494)
* % (porcentagem);expansão de variáveis de ambiente (Windows): os path — Manipulações comuns de nomes de caminhos.
                                                             (line  170)
* % (porcentagem);expansão de variáveis de ambiente (Windows) <1>: Funções<14>.
                                                             (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.
                                                             (line   36)
* ^ (circunflexo);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line   48)
* ^ (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   72)
* + (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   79)
* + (mais);no módulo argparse:           nargs.              (line   67)
* + (mais);operador binário:             Operações binárias aritméticas.
                                                             (line   80)
* + (mais);operador binário <1>:         Tipos numéricos — int float complex.
                                                             (line   33)
* + (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   33)
* +?;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   48)
* <<=;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   48)
* = (igual);para ajudar na depuração usando literais de string: Literais de string brutas.
                                                             (line   26)
* = (igual);para ajudar na depuração usando literais de string <1>: Métodos de string.
                                                             (line  798)
* > (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   48)
* >>=;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 1679)
* | (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  144)
* $ (cifrão);em expressões regulares:    Sintaxe de expressão regular.
                                                             (line   64)
* $ (dólar);em strings template:         Template strings $-strings.
                                                             (line   24)
* $ (dólar);expansão de variáveis de ambiente: os path — Manipulações comuns de nomes de caminhos.
                                                             (line  170)
* $ (dólar);interpolação em arquivos de configuração: Interpolação de valores.
                                                             (line   41)
* 0b;literal de inteiro:                 Literais numéricos. (line   22)
* 0o;literal de inteiro:                 Literais numéricos. (line   22)
* 0x;literal de inteiro:                 Literais numéricos. (line   22)
* A (no módulo re):                      Sinalizadores.      (line   16)
* A_ALTCHARSET (no módulo curses):       Constantes<6>.      (line   67)
* A_ATTRIBUTES (no módulo curses):       Constantes<6>.      (line  128)
* A_BLINK (no módulo curses):            Constantes<6>.      (line   70)
* A_BOLD (no módulo curses):             Constantes<6>.      (line   73)
* A_CHARTEXT (no módulo curses):         Constantes<6>.      (line  131)
* A_COLOR (no módulo curses):            Constantes<6>.      (line  134)
* A_DIM (no módulo curses):              Constantes<6>.      (line   76)
* A_HORIZONTAL (no módulo curses):       Constantes<6>.      (line  101)
* A_INVIS (no módulo curses):            Constantes<6>.      (line   79)
* A_ITALIC (no módulo curses):           Constantes<6>.      (line   82)
* A_LEFT (no módulo curses):             Constantes<6>.      (line  104)
* A_LOW (no módulo curses):              Constantes<6>.      (line  107)
* A_NORMAL (no módulo curses):           Constantes<6>.      (line   85)
* A_PROTECT (no módulo curses):          Constantes<6>.      (line   88)
* A_REVERSE (no módulo curses):          Constantes<6>.      (line   91)
* A_RIGHT (no módulo curses):            Constantes<6>.      (line  110)
* A_STANDOUT (no módulo curses):         Constantes<6>.      (line   95)
* A_TOP (no módulo curses):              Constantes<6>.      (line  113)
* A_UNDERLINE (no módulo curses):        Constantes<6>.      (line   98)
* A_VERTICAL (no módulo curses):         Constantes<6>.      (line  116)
* 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  230)
* ABDAY_2 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* ABDAY_3 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* ABDAY_4 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* ABDAY_5 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* ABDAY_6 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* ABDAY_7 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  230)
* 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  255)
* ABMON_10 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_11 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_12 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_2 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_3 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_4 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_5 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_6 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_7 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_8 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* ABMON_9 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  255)
* abort (C function):                    Process Control.    (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  279)
* abs() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line   89)
* 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  305)
* AbsolutePathError:                     tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  290)
* 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  384)
* 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  423)
* AbstractEventLoop (classe em asyncio): Implementações do Laço de Eventos.
                                                             (line   53)
* 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   67)
* acquire() (método multiprocessing.RLock): Primitivas de sincronização.
                                                             (line  130)
* 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  472)
* ACS_BLOCK (no módulo curses):          Constantes<6>.      (line  475)
* ACS_BOARD (no módulo curses):          Constantes<6>.      (line  478)
* ACS_BSBS (no módulo curses):           Constantes<6>.      (line  481)
* ACS_BSSB (no módulo curses):           Constantes<6>.      (line  484)
* ACS_BSSS (no módulo curses):           Constantes<6>.      (line  487)
* ACS_BTEE (no módulo curses):           Constantes<6>.      (line  490)
* ACS_BULLET (no módulo curses):         Constantes<6>.      (line  493)
* ACS_CKBOARD (no módulo curses):        Constantes<6>.      (line  496)
* ACS_DARROW (no módulo curses):         Constantes<6>.      (line  499)
* ACS_DEGREE (no módulo curses):         Constantes<6>.      (line  502)
* ACS_DIAMOND (no módulo curses):        Constantes<6>.      (line  505)
* ACS_GEQUAL (no módulo curses):         Constantes<6>.      (line  508)
* ACS_HLINE (no módulo curses):          Constantes<6>.      (line  511)
* ACS_LANTERN (no módulo curses):        Constantes<6>.      (line  514)
* ACS_LARROW (no módulo curses):         Constantes<6>.      (line  517)
* ACS_LEQUAL (no módulo curses):         Constantes<6>.      (line  520)
* ACS_LLCORNER (no módulo curses):       Constantes<6>.      (line  523)
* ACS_LRCORNER (no módulo curses):       Constantes<6>.      (line  526)
* ACS_LTEE (no módulo curses):           Constantes<6>.      (line  529)
* ACS_NEQUAL (no módulo curses):         Constantes<6>.      (line  532)
* ACS_PI (no módulo curses):             Constantes<6>.      (line  535)
* ACS_PLMINUS (no módulo curses):        Constantes<6>.      (line  538)
* ACS_PLUS (no módulo curses):           Constantes<6>.      (line  541)
* ACS_RARROW (no módulo curses):         Constantes<6>.      (line  544)
* ACS_RTEE (no módulo curses):           Constantes<6>.      (line  547)
* ACS_S1 (no módulo curses):             Constantes<6>.      (line  550)
* ACS_S3 (no módulo curses):             Constantes<6>.      (line  553)
* ACS_S7 (no módulo curses):             Constantes<6>.      (line  556)
* ACS_S9 (no módulo curses):             Constantes<6>.      (line  559)
* ACS_SBBS (no módulo curses):           Constantes<6>.      (line  562)
* ACS_SBSB (no módulo curses):           Constantes<6>.      (line  565)
* ACS_SBSS (no módulo curses):           Constantes<6>.      (line  568)
* ACS_SSBB (no módulo curses):           Constantes<6>.      (line  571)
* ACS_SSBS (no módulo curses):           Constantes<6>.      (line  574)
* ACS_SSSB (no módulo curses):           Constantes<6>.      (line  577)
* ACS_SSSS (no módulo curses):           Constantes<6>.      (line  580)
* ACS_STERLING (no módulo curses):       Constantes<6>.      (line  583)
* ACS_TTEE (no módulo curses):           Constantes<6>.      (line  586)
* ACS_UARROW (no módulo curses):         Constantes<6>.      (line  589)
* ACS_ULCORNER (no módulo curses):       Constantes<6>.      (line  592)
* ACS_URCORNER (no módulo curses):       Constantes<6>.      (line  595)
* ACS_VLINE (no módulo curses):          Constantes<6>.      (line  598)
* 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 1956)
* active_children() (no módulo multiprocessing): Diversos<5>.
                                                             (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_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): Future Object.
                                                             (line   82)
* add_done_callback() (método asyncio.Task): Objeto Task.    (line  104)
* 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  106)
* add_type() (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  132)
* 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  283)
* add() (método frozenset):              Tipo conjuntos — set frozenset.
                                                             (line  205)
* add() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line   84)
* add() (método mailbox.Mailbox):        Mailbox objects.    (line   59)
* add() (método mailbox.Maildir):        Maildir objects.    (line  193)
* add() (método pstats.Stats):           A classe Stats.     (line   49)
* add() (método tarfile.TarFile):        TarFile Objects.    (line  275)
* add() (método tkinter.ttk.Notebook):   ttk Notebook.       (line    8)
* add() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line   94)
* addAsyncCleanup() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  978)
* 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  897)
* addCleanup() (método unittest.TestCase): Casos de teste.   (line  857)
* addcomponent() (método turtle.Shape):  Classes Públicas.   (line   68)
* addDuration() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  443)
* addError() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  373)
* addExpectedFailure() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  409)
* addFailure() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  384)
* addfile() (método tarfile.TarFile):    TarFile Objects.    (line  293)
* 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  138)
* Address (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  403)
* address_exclude() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  165)
* address_exclude() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  352)
* address_family (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line   69)
* address_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  380)
* 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  401)
* addstr() (método curses.window):       Window Objects.     (line   33)
* addSubTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  427)
* addSuccess() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  395)
* 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  674)
* addUnexpectedSuccess() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  419)
* adição:                                Operações binárias aritméticas.
                                                             (line   80)
* adjust_int_max_str_digits() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  780)
* 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  269)
* AF_BLUETOOTH (no módulo socket):       Constantes<8>.      (line  304)
* AF_CAN (no módulo socket):             Constantes<8>.      (line  132)
* AF_DIVERT (no módulo socket):          Constantes<8>.      (line  208)
* AF_HYPERV (no módulo socket):          Constantes<8>.      (line  442)
* 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  293)
* AF_PACKET (no módulo socket):          Constantes<8>.      (line  218)
* AF_QIPCRTR (no módulo socket):         Constantes<8>.      (line  403)
* AF_RDS (no módulo socket):             Constantes<8>.      (line  240)
* 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  280)
* 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  190)
* alarm() (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  280)
* ALERT_DESCRIPTION_HANDSHAKE_FAILURE (no módulo ssl): Constantes<9>.
                                                             (line  517)
* ALERT_DESCRIPTION_INTERNAL_ERROR (no módulo ssl): Constantes<9>.
                                                             (line  517)
* AlertDescription (classe em ssl):      Constantes<9>.      (line  531)
* algorithm (atributo sys.hash_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1139)
* 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  407)
* 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 — Base classes for SAX handlers.
                                                             (line   95)
* all_frames (atributo tracemalloc.Filter): Filter.          (line   58)
* all_properties (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line  127)
* 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  440)
* 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  339)
* 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  201)
* ALWAYS_TYPED_ACTIONS (atributo optparse.Option): Adicionando novas ações.
                                                             (line   43)
* ambiente:                              Resolução de nomes. (line   12)
* ambiente virtual:                      Glossário.          (line 1751)
* Ambientes;virtual:                     venv — Criação de ambientes virtuais.
                                                             (line   10)
* AmbiguousOptionError:                  Exceções<12>.       (line   25)
* AMPER (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  248)
* AMPEREQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  314)
* analisador léxico:                     Glossário.          (line 1009)
* 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   99)
* 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  305)
* annotation (atributo inspect.Parameter): Introspecting callables with the Signature object.
                                                             (line  242)
* ANNOTATION (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   26)
* annotations (no módulo __future__):    Conteúdo do módulo<9>.
                                                             (line   47)
* annotations_to_string() (no módulo annotationlib): Funções<12>.
                                                             (line    6)
* 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   46)
* anotação de função:                    Glossário.          (line  658)
* anotação de variável:                  Glossário.          (line 1727)
* 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  479)
* 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 1679)
* API provisória:                        Glossário.          (line 1366)
* api_version (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line 2270)
* 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   29)
* 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   75)
* apply_defaults() (método inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  388)
* apply() (método multiprocessing.pool.Pool): Process Pools. (line   67)
* 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  333)
* 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  373)
* args (atributo subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  108)
* args (atributo subprocess.Popen):      Objetos Popen.      (line  101)
* args (atributo typing.ParamSpec):      Criando tipos genéricos e apelidos de tipo.
                                                             (line  471)
* args (pdb command):                    Comandos de depuração.
                                                             (line  297)
* args_from_interpreter_flags() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  345)
* argtypes (atributo ctypes._CFuncPtr):  Foreign functions.  (line   46)
* ArgumentDefaultsHelpFormatter (classe em argparse): formatter_class.
                                                             (line   10)
* ArgumentError:                         Exceções<10>.       (line    6)
* ArgumentError <1>:                     Exceções<11>.       (line    6)
* argumento:                             Glossário.          (line   64)
* argumento nomeado:                     Glossário.          (line  982)
* argumento posicional:                  Glossário.          (line 1362)
* 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  354)
* arguments (classe em ast):             Definições de função e classe.
                                                             (line   49)
* ArgumentTypeError:                     Exceções<11>.       (line   13)
* argv (in module sys):                  Process-wide parameters.
                                                             (line  225)
* 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   33)
* aritmética;conversão:                  Conversões aritméticas.
                                                             (line    6)
* arquivo binário:                       Glossário.          (line  202)
* 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 1612)
* 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  150)
* arquivo;modos:                         Funções embutidas<3>.
                                                             (line 1354)
* 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  214)
* 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  174)
* 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_digested_dict (atributo compression.zstd.ZstdDict): Dicionários de Zstandard.
                                                             (line  141)
* as_file() (no módulo importlib.resources): importlib resources – Leitura abertura e acesso a recursos de pacotes.
                                                             (line   77)
* as_integer_ratio():                    fractions — Números racionais.
                                                             (line   16)
* 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   28)
* as_integer_ratio() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  127)
* 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  181)
* 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_undigested_dict (atributo compression.zstd.ZstdDict): Dicionários de Zstandard.
                                                             (line  145)
* as_uri() (método pathlib.Path):        Analisando e gerando URIs.
                                                             (line   50)
* as;cláusula except:                    Cláusula except.    (line   33)
* 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:                                 Literais.           (line   15)
* 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  347)
* 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:                         Glossário.          (line 1661)
* 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  564)
* assertCountEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  624)
* assertDictEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  762)
* assertEndsWith() (método unittest.TestCase): Casos de teste.
                                                             (line  649)
* assertEqual() (método unittest.TestCase): Casos de teste.  (line  192)
* assertFalse() (método unittest.TestCase): Casos de teste.  (line  217)
* assertGreater() (método unittest.TestCase): Casos de teste.
                                                             (line  591)
* assertGreaterEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  591)
* assertHasAttr() (método unittest.TestCase): Casos de teste.
                                                             (line  659)
* assertIn() (método unittest.TestCase): Casos de teste.     (line  243)
* 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  229)
* assertIsInstance() (método unittest.TestCase): Casos de teste.
                                                             (line  250)
* assertIsNone() (método unittest.TestCase): Casos de teste. (line  236)
* assertIsNot() (método unittest.TestCase): Casos de teste.  (line  229)
* assertIsNotNone() (método unittest.TestCase): Casos de teste.
                                                             (line  236)
* assertIsSubclass() (método unittest.TestCase): Casos de teste.
                                                             (line  260)
* assertLess() (método unittest.TestCase): Casos de teste.   (line  591)
* assertLessEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  591)
* assertListEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  739)
* assertLogs() (método unittest.TestCase): Casos de teste.   (line  442)
* assertMultiLineEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  714)
* assertNoLogs() (método unittest.TestCase): Casos de teste. (line  489)
* assertNotAlmostEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  564)
* assertNotEndsWith() (método unittest.TestCase): Casos de teste.
                                                             (line  651)
* assertNotEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  212)
* assertNotHasAttr() (método unittest.TestCase): Casos de teste.
                                                             (line  661)
* assertNotIn() (método unittest.TestCase): Casos de teste.  (line  243)
* 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  250)
* assertNotIsSubclass() (método unittest.TestCase): Casos de teste.
                                                             (line  260)
* assertNotRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  605)
* assertNotStartsWith() (método unittest.TestCase): Casos de teste.
                                                             (line  641)
* assertRaises() (método unittest.TestCase): Casos de teste. (line  303)
* assertRaisesRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  345)
* assertRegex() (método unittest.TestCase): Casos de teste.  (line  605)
* assertSequenceEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  724)
* assertSetEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  750)
* assertStartsWith() (método unittest.TestCase): Casos de teste.
                                                             (line  639)
* assertTrue() (método unittest.TestCase): Casos de teste.   (line  217)
* assertTupleEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  739)
* assertWarns() (método unittest.TestCase): Casos de teste.  (line  373)
* assertWarnsRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  417)
* Assign (classe em ast):                Instruções.         (line    6)
* assume_default_colors() (no módulo curses): Funções<6>.    (line   18)
* AST (classe em ast):                   Classes de nós.     (line    6)
* ast opção de linha de comando; -a:     Uso na linha de comando<10>.
                                                             (line   29)
* ast opção de linha de comando; -feature-version: Uso na linha de comando<10>.
                                                             (line   38)
* ast opção de linha de comando; -h:     Uso na linha de comando<10>.
                                                             (line   15)
* ast opção de linha de comando; -help:  Uso na linha de comando<10>.
                                                             (line   15)
* ast opção de linha de comando; -i:     Uso na linha de comando<10>.
                                                             (line   33)
* ast opção de linha de comando; -include-attributes: Uso na linha de comando<10>.
                                                             (line   29)
* ast opção de linha de comando; -indent: Uso na linha de comando<10>.
                                                             (line   33)
* ast opção de linha de comando; -m:     Uso na linha de comando<10>.
                                                             (line   19)
* ast opção de linha de comando; -mode:  Uso na linha de comando<10>.
                                                             (line   19)
* ast opção de linha de comando; -no-type-comments: Uso na linha de comando<10>.
                                                             (line   25)
* ast opção de linha de comando; -O:     Uso na linha de comando<10>.
                                                             (line   45)
* ast opção de linha de comando; -optimize: Uso na linha de comando<10>.
                                                             (line   45)
* ast opção de linha de comando; -show-empty: Uso na linha de comando<10>.
                                                             (line   52)
* astimezone() (método datetime.datetime): Objetos datetime. (line  494)
* astuple() (no módulo dataclasses):     Conteúdo do módulo<8>.
                                                             (line  380)
* 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  195)
* asyncSetUp() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  954)
* asyncTearDown() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  963)
* 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  338)
* 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  341)
* 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  523)
* atoi() (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  529)
* á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  177)
* 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_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  246)
* attrgetter() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  251)
* 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  300)
* 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)
* avoids_symlink_attacks (atributo shutil.rmtree): Operações de diretório e arquivos.
                                                             (line  358)
* 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:                   Sequências de espace não reconhecidas.
                                                             (line   26)
* b";literal de bytes:                   Sequências de espace não reconhecidas.
                                                             (line   25)
* 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<12>.       (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  161)
* 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  142)
* 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  324)
* 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   98)
* BaseManager (classe em multiprocessing.managers): Gerenciadores.
                                                             (line   24)
* basename() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line   62)
* 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   12)
* 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   74)
* 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   33)
* bbox() (método tkinter.ttk.Treeview):  ttk Treeview.       (line    8)
* BDADDR_ANY (no módulo socket):         Constantes<8>.      (line  312)
* BDADDR_BREDR (no módulo socket):       Constantes<8>.      (line  320)
* BDADDR_LE_PUBLIC (no módulo socket):   Constantes<8>.      (line  320)
* BDADDR_LE_RANDOM (no módulo socket):   Constantes<8>.      (line  320)
* BDADDR_LOCAL (no módulo socket):       Constantes<8>.      (line  312)
* Bdb (classe em bdb):                   bdb — Framework do depurador.
                                                             (line  130)
* BdbQuit:                               bdb — Framework do depurador.
                                                             (line   16)
* BDFL:                                  Glossário.          (line  196)
* beep() (no módulo curses):             Funções<6>.         (line   41)
* Beep() (no módulo winsound):           winsound — Interface de reprodução de som para o Windows.
                                                             (line   12)
* begin_fill() (no módulo turtle):       Preenchimento.      (line   36)
* begin_poly() (no módulo turtle):       Métodos Especiais da Tartaruga.
                                                             (line   18)
* 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  224)
* benchmarking <1>:                      Funções<5>.         (line  255)
* benchmarking <2>:                      Funções<5>.         (line  636)
* 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   21)
* biblioteca padrão:                     Glossário.          (line 1544)
* bidirectional() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line   91)
* bigaddrspacetest() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  599)
* BigEndianStructure (classe em ctypes): Structured data types.
                                                             (line   25)
* BigEndianUnion (classe em ctypes):     Structured data types.
                                                             (line   13)
* bigmemtest() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  583)
* 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  262)
* BINARY_SLICE (opcode):                 Instruções em bytecode do Python.
                                                             (line  293)
* binaryfunc (C type):                   Slot Type typedefs. (line  110)
* BinaryIO (classe em typing):           ABCs e protocolos para trabalhar com E/S.
                                                             (line    6)
* bind_partial() (método inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  138)
* 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  131)
* 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)
* bit_offset (atributo ctypes.CField):   Structured data types.
                                                             (line  285)
* bit_size (atributo ctypes.CField):     Structured data types.
                                                             (line  285)
* 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 1244)
* 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  350)
* 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>:                   High-level Module Interface.
                                                             (line   67)
* blocksize (atributo http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  157)
* 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  275)
* BOM_BE (no módulo codecs):             codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_LE (no módulo codecs):             codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF16 (no módulo codecs):          codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF16_BE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF16_LE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF32 (no módulo codecs):          codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF32_BE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF32_LE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  275)
* BOM_UTF8 (no módulo codecs):           codecs — Codec registry and base classes.
                                                             (line  275)
* 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  348)
* 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   19)
* BoundedSemaphore (classe em threading): Semaphore objects. (line   73)
* BoundedSemaphore() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  168)
* bounds() (método compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   28)
* bounds() (método compression.zstd.DecompressionParameter): Advanced parameter control.
                                                             (line  298)
* box() (método curses.window):          Window Objects.     (line  132)
* bpbynumber (atributo bdb.Breakpoint):  bdb — Framework do depurador.
                                                             (line  111)
* bpformat() (método bdb.Breakpoint):    bdb — Framework do depurador.
                                                             (line   57)
* bplist (atributo bdb.Breakpoint):      bdb — Framework do depurador.
                                                             (line  116)
* bpprint() (método bdb.Breakpoint):     bdb — Framework do depurador.
                                                             (line   76)
* BRANCH_LEFT (monitoring event):        Eventos.            (line    8)
* BRANCH_RIGHT (monitoring event):       Eventos.            (line   17)
* Break (classe em ast):                 Fluxo de controle.  (line   99)
* break (pdb command):                   Comandos de depuração.
                                                             (line  114)
* break_anywhere() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  290)
* break_here() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  281)
* 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  250)
* breakpoints:                           Help menu Shell and Editor.
                                                             (line   29)
* broadcast_address (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   96)
* broadcast_address (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  320)
* 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)
* BrokenInterpreterPool:                 Exception classes.  (line   41)
* BrokenPipeError:                       Exceções de sistema operacional.
                                                             (line   38)
* BrokenProcessPool:                     Exception classes.  (line   57)
* BrokenThreadPool:                      Exception classes.  (line   33)
* BROWSER:                               webbrowser.         (line    6)
* BROWSER <1>:                           webbrowser.         (line   10)
* BROWSER <2>:                           Biblioteca<9>.      (line  439)
* BROWSER <3>:                           Biblioteca<9>.      (line  442)
* BROWSER <4>:                           webbrowser — Controlador de navegador web conveniente.
                                                             (line   21)
* BROWSER <5>:                           webbrowser — Controlador de navegador web conveniente.
                                                             (line   31)
* BROWSER <6>:                           webbrowser — Controlador de navegador web conveniente.
                                                             (line   43)
* BROWSER <7>:                           webbrowser — Controlador de navegador web conveniente.
                                                             (line  135)
* BS (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   44)
* BsdDbShelf (classe em shelve):         Restrições.         (line   61)
* btlazy2 (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  338)
* btopt (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  340)
* BTPROTO_HCI (no módulo socket):        Constantes<8>.      (line  304)
* BTPROTO_L2CAP (no módulo socket):      Constantes<8>.      (line  304)
* BTPROTO_RFCOMM (no módulo socket):     Constantes<8>.      (line  304)
* BTPROTO_SCO (no módulo socket):        Constantes<8>.      (line  304)
* btultra (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  342)
* btultra2 (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  344)
* 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  297)
* 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  120)
* buffer_text (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  127)
* buffer_updated() (método asyncio.BufferedProtocol): Protocolos de Streaming Bufferizados.
                                                             (line   33)
* buffer_used (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  138)
* buffer, tamanho, E/S:                  Funções embutidas<3>.
                                                             (line 1535)
* 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  138)
* BufferedReader (classe em io):         Buffered Streams.   (line   58)
* BufferedRWPair (classe em io):         Buffered Streams.   (line  153)
* BufferedWriter (classe em io):         Buffered Streams.   (line   96)
* 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  292)
* BUILD_INTERPOLATION (opcode):          Instruções em bytecode do Python.
                                                             (line  678)
* BUILD_LIST (opcode):                   Instruções em bytecode do Python.
                                                             (line  719)
* BUILD_MAP (opcode):                    Instruções em bytecode do Python.
                                                             (line  727)
* build_opener() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  121)
* BUILD_SET (opcode):                    Instruções em bytecode do Python.
                                                             (line  723)
* BUILD_SLICE (opcode):                  Instruções em bytecode do Python.
                                                             (line 1191)
* BUILD_STRING (opcode):                 Instruções em bytecode do Python.
                                                             (line  737)
* BUILD_TEMPLATE (opcode):               Instruções em bytecode do Python.
                                                             (line  666)
* BUILD_TUPLE (opcode):                  Instruções em bytecode do Python.
                                                             (line  706)
* built-in function; __import__():       Funções embutidas<3>.
                                                             (line 2276)
* 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  453)
* built-in function; dir():              Funções embutidas<3>.
                                                             (line  476)
* built-in function; divmod():           Funções embutidas<3>.
                                                             (line  537)
* built-in function; enumerate():        Funções embutidas<3>.
                                                             (line  550)
* built-in function; eval():             Funções embutidas<3>.
                                                             (line  573)
* built-in function; exec():             Funções embutidas<3>.
                                                             (line  652)
* built-in function; filter():           Funções embutidas<3>.
                                                             (line  725)
* built-in function; format():           Funções embutidas<3>.
                                                             (line  813)
* built-in function; getattr():          Funções embutidas<3>.
                                                             (line  846)
* built-in function; globals():          Funções embutidas<3>.
                                                             (line  863)
* built-in function; hasattr():          Funções embutidas<3>.
                                                             (line  870)
* built-in function; hash():             Funções embutidas<3>.
                                                             (line  877)
* built-in function; help():             Funções embutidas<3>.
                                                             (line  891)
* built-in function; hex():              Funções embutidas<3>.
                                                             (line  917)
* built-in function; id():               Funções embutidas<3>.
                                                             (line  948)
* built-in function; input():            Funções embutidas<3>.
                                                             (line  960)
* built-in function; isinstance():       Funções embutidas<3>.
                                                             (line 1063)
* built-in function; issubclass():       Funções embutidas<3>.
                                                             (line 1079)
* built-in function; iter():             Funções embutidas<3>.
                                                             (line 1092)
* built-in function; len():              Funções embutidas<3>.
                                                             (line 1123)
* built-in function; locals():           Funções embutidas<3>.
                                                             (line 1139)
* built-in function; map():              Funções embutidas<3>.
                                                             (line 1195)
* built-in function; max():              Funções embutidas<3>.
                                                             (line 1210)
* built-in function; min():              Funções embutidas<3>.
                                                             (line 1248)
* built-in function; multiprocessing.Manager(): Gerenciadores.
                                                             (line   12)
* built-in function; next():             Funções embutidas<3>.
                                                             (line 1280)
* built-in function; oct():              Funções embutidas<3>.
                                                             (line 1300)
* built-in function; open():             Funções embutidas<3>.
                                                             (line 1326)
* built-in function; ord():              Funções embutidas<3>.
                                                             (line 1583)
* built-in function; pow():              Funções embutidas<3>.
                                                             (line 1596)
* built-in function; print():            Funções embutidas<3>.
                                                             (line 1641)
* built-in function; property.deleter(): Funções embutidas<3>.
                                                             (line 1720)
* built-in function; property.getter():  Funções embutidas<3>.
                                                             (line 1716)
* built-in function; property.setter():  Funções embutidas<3>.
                                                             (line 1718)
* built-in function; repr():             Funções embutidas<3>.
                                                             (line 1770)
* built-in function; reversed():         Funções embutidas<3>.
                                                             (line 1794)
* built-in function; round():            Funções embutidas<3>.
                                                             (line 1802)
* built-in function; setattr():          Funções embutidas<3>.
                                                             (line 1840)
* built-in function; sorted():           Funções embutidas<3>.
                                                             (line 1890)
* built-in function; staticmethod():     Funções embutidas<3>.
                                                             (line 1928)
* built-in function; sum():              Funções embutidas<3>.
                                                             (line 1988)
* built-in function; vars():             Funções embutidas<3>.
                                                             (line 2153)
* built-in function; zip():              Funções embutidas<3>.
                                                             (line 2177)
* builtin_module_names (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  162)
* 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)
* burst() (método imaplib.IMAP4.Idler):  Objetos IMAP4.      (line  161)
* busy_retry() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  223)
* BUTTON_ALT (no módulo curses):         Constantes<6>.      (line  629)
* BUTTON_CTRL (no módulo curses):        Constantes<6>.      (line  626)
* BUTTON_SHIFT (no módulo curses):       Constantes<6>.      (line  623)
* 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  614)
* BUTTONn_DOUBLE_CLICKED (no módulo curses): Constantes<6>.  (line  617)
* BUTTONn_PRESSED (no módulo curses):    Constantes<6>.      (line  608)
* BUTTONn_RELEASED (no módulo curses):   Constantes<6>.      (line  611)
* BUTTONn_TRIPLE_CLICKED (no módulo curses): Constantes<6>.  (line  620)
* 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)
* byte_offset (atributo ctypes.CField):  Structured data types.
                                                             (line  256)
* byte_size (atributo ctypes.CField):    Structured data types.
                                                             (line  264)
* 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  249)
* 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   57)
* Bytecode.first_line (no módulo dis):   Análise de bytecode.
                                                             (line   61)
* 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  155)
* bytes:                                 Sequências imutáveis.
                                                             (line   42)
* bytes (atributo uuid.UUID):            uuid — Objetos UUID conforme RFC 9562.
                                                             (line   90)
* bytes (classe interna):                Objetos bytes.      (line   12)
* bytes_le (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 9562.
                                                             (line   95)
* bytes_warning (atributo sys.flags):    sys — Parâmetros e funções específicas do sistema.
                                                             (line  591)
* 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   82)
* 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:                                     Gramática formal.   (line   28)
* c_bool (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  228)
* 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  511)
* c_double (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line   65)
* c_double_complex (classe em ctypes):   Tipos de dados fundamentais<2>.
                                                             (line   81)
* c_float (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line   76)
* c_float_complex (classe em ctypes):    Tipos de dados fundamentais<2>.
                                                             (line   88)
* c_int (classe em ctypes):              Tipos de dados fundamentais<2>.
                                                             (line  102)
* c_int16 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  114)
* c_int32 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  119)
* c_int64 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  124)
* c_int8 (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  109)
* c_long (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  129)
* c_longdouble (classe em ctypes):       Tipos de dados fundamentais<2>.
                                                             (line   70)
* c_longdouble_complex (classe em ctypes): Tipos de dados fundamentais<2>.
                                                             (line   95)
* c_longlong (classe em ctypes):         Tipos de dados fundamentais<2>.
                                                             (line  134)
* C_RAISE (monitoring event):            Eventos.            (line   25)
* C_RETURN (monitoring event):           Eventos.            (line   30)
* c_short (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  140)
* c_size_t (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  145)
* c_ssize_t (classe em ctypes):          Tipos de dados fundamentais<2>.
                                                             (line  149)
* c_time_t (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  155)
* c_ubyte (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  161)
* c_uint (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  167)
* c_uint16 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  179)
* c_uint32 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  184)
* c_uint64 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  189)
* c_uint8 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  174)
* c_ulong (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  194)
* c_ulonglong (classe em ctypes):        Tipos de dados fundamentais<2>.
                                                             (line  199)
* c_ushort (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  205)
* c_void_p (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  210)
* c_wchar (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  215)
* c_wchar_p (classe em ctypes):          Tipos de dados fundamentais<2>.
                                                             (line  222)
* 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  195)
* cache_clear() (método functools.lru_cache): functools — Higher-order functions and operations on callable objects.
                                                             (line  205)
* cache_from_source() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   21)
* cache_info() (método functools.lru_cache): functools — Higher-order functions and operations on callable objects.
                                                             (line  200)
* cache() (no módulo functools):         functools — Higher-order functions and operations on callable objects.
                                                             (line   17)
* cached (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  433)
* cached_property() (no módulo functools): functools — Higher-order functions and operations on callable objects.
                                                             (line   50)
* CacheFTPHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  485)
* calcobjsize() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  462)
* 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  468)
* 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  121)
* calendar opção de linha de comando; -css: Uso na linha de comando.
                                                             (line  121)
* calendar opção de linha de comando; -e: Uso na linha de comando.
                                                             (line   66)
* calendar opção de linha de comando; -encoding: Uso na linha de comando.
                                                             (line   66)
* calendar opção de linha de comando; -f: Uso na linha de comando.
                                                             (line   76)
* calendar opção de linha de comando; -first-weekday: Uso na linha de comando.
                                                             (line   76)
* calendar opção de linha de comando; -h: Uso na linha de comando.
                                                             (line   57)
* calendar opção de linha de comando; -help: Uso na linha de comando.
                                                             (line   57)
* calendar opção de linha de comando; -L: Uso na linha de comando.
                                                             (line   61)
* calendar opção de linha de comando; -l: Uso na linha de comando.
                                                             (line  101)
* calendar opção de linha de comando; -lines: Uso na linha de comando.
                                                             (line  101)
* calendar opção de linha de comando; -locale: Uso na linha de comando.
                                                             (line   61)
* calendar opção de linha de comando; -m: Uso na linha de comando.
                                                             (line  112)
* calendar opção de linha de comando; -months: Uso na linha de comando.
                                                             (line  112)
* calendar opção de linha de comando; -s: Uso na linha de comando.
                                                             (line  107)
* calendar opção de linha de comando; -spacing: Uso na linha de comando.
                                                             (line  107)
* calendar opção de linha de comando; -t: Uso na linha de comando.
                                                             (line   71)
* calendar opção de linha de comando; -type: Uso na linha de comando.
                                                             (line   71)
* calendar opção de linha de comando; -w: Uso na linha de comando.
                                                             (line   95)
* calendar opção de linha de comando; -width: Uso na linha de comando.
                                                             (line   95)
* calendar opção de linha de comando; month: Uso na linha de comando.
                                                             (line   87)
* calendar opção de linha de comando; year: Uso na linha de comando.
                                                             (line   83)
* 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   21)
* CALL (opcode):                         Instruções em bytecode do Python.
                                                             (line 1085)
* call_annotate_function() (no módulo annotationlib): Funções<12>.
                                                             (line   27)
* 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_evaluate_function() (no módulo annotationlib): Funções<12>.
                                                             (line   56)
* call_exception_handler() (método asyncio.loop): Tratando erros da API.
                                                             (line   47)
* CALL_FUNCTION_EX (opcode):             Instruções em bytecode do Python.
                                                             (line 1137)
* call_in_thread() (método concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   53)
* CALL_INTRINSIC_1 (opcode):             Instruções em bytecode do Python.
                                                             (line 1342)
* CALL_INTRINSIC_2 (opcode):             Instruções em bytecode do Python.
                                                             (line 1402)
* CALL_KW (opcode):                      Instruções em bytecode do Python.
                                                             (line 1110)
* 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  171)
* call() (método concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   48)
* call() (no módulo operator):           operator — Operadores padrões como funções.
                                                             (line  238)
* 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  293)
* 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  848)
* caminho;configuração;arquivo:          site — Gancho de configuração específico do site.
                                                             (line   83)
* 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  572)
* CAN (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line  102)
* CAN_BCM (no módulo socket):            Constantes<8>.      (line  151)
* can_change_color() (no módulo curses): Funções<6>.         (line   45)
* 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  190)
* CAN_J1939 (no módulo socket):          Constantes<8>.      (line  199)
* CAN_RAW_FD_FRAMES (no módulo socket):  Constantes<8>.      (line  166)
* CAN_RAW_JOIN_FILTERS (no módulo socket): Constantes<8>.    (line  179)
* can_symlink() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   78)
* 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   82)
* 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  206)
* cancel() (método asyncio.Future):      Future Object.      (line  114)
* 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):   Future Object.      (line   72)
* cancelled() (método asyncio.Handle):   Tratadores de função de retorno.
                                                             (line   23)
* cancelled() (método asyncio.Task):     Objeto Task.        (line  271)
* cancelled() (método concurrent.futures.Future): Future Objects.
                                                             (line   23)
* CancelledError:                        Exception classes.  (line    6)
* CancelledError <1>:                    Exceções<16>.       (line   18)
* cancelling() (método asyncio.Task):    Objeto Task.        (line  328)
* 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  162)
* canonical() (método decimal.Context):  Objetos de contexto.
                                                             (line  287)
* 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):             Métodos de string.  (line   23)
* capitals (atributo decimal.Context):   Objetos de contexto.
                                                             (line  159)
* CapsuleType (classe em types):         Tipos padrão do interpretador.
                                                             (line  301)
* capture_call_graph() (no módulo asyncio): Call Graph Introspection.
                                                             (line   77)
* captured_stderr() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  355)
* captured_stdin() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  355)
* captured_stdout() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  355)
* 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 1028)
* casefold() (método str):               Métodos de string.  (line   33)
* cast() (método memoryview):            Memory Views.       (line  291)
* cast() (no módulo ctypes):             Funções utilitárias.
                                                             (line   50)
* 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  638)
* catch_warnings (classe em warnings):   Gerenciadores de contexto disponíveis.
                                                             (line    6)
* category() (no módulo unicodedata):    unicodedata — Banco de dados de Unicode.
                                                             (line   81)
* cbreak() (no módulo curses):           Funções<6>.         (line   50)
* 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  117)
* 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):                 Métodos de string.  (line   52)
* 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<19>.       (line   94)
* CField (classe em ctypes):             Structured data types.
                                                             (line  214)
* 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  513)
* CGIHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   11)
* CGIHTTPRequestHandler (classe em http.server): http server — HTTP servers.
                                                             (line  487)
* CGIXMLRPCRequestHandler (classe em xmlrpc.server): xmlrpc server — Servidores XML-RPC básicos.
                                                             (line   54)
* chain_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   75)
* 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  266)
* change_cwd() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   86)
* CHANNEL_BINDING_TYPES (no módulo ssl): Constantes<9>.      (line  478)
* CHAR_MAX (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  598)
* CharacterDataHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  278)
* 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<2>.
                                                             (line  164)
* check__all__() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  718)
* 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  772)
* CHECK_EG_MATCH (opcode):               Instruções em bytecode do Python.
                                                             (line  478)
* CHECK_EXC_MATCH (opcode):              Instruções em bytecode do Python.
                                                             (line  469)
* check_free_after_iterating() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  706)
* 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  318)
* 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  612)
* 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   96)
* 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   51)
* 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  505)
* checksizeof() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  474)
* checksum_flag (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  217)
* 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 Class.      (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  434)
* 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  346)
* 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  287)
* CIRCUMFLEXEQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  320)
* clamp (atributo decimal.Context):      Objetos de contexto.
                                                             (line  165)
* Clamped (classe em decimal):           Sinais.             (line   21)
* CLASS (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   19)
* Class (classe em pyclbr):              Objetos Class.      (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  284)
* classe base abstrata:                  Glossário.          (line   24)
* classe estilo novo:                    Glossário.          (line 1208)
* 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  204)
* cláusula:                              Instruções compostas.
                                                             (line   20)
* CLD_CONTINUED (no módulo os):          Gerenciamento de processo.
                                                             (line 1107)
* CLD_DUMPED (no módulo os):             Gerenciamento de processo.
                                                             (line 1107)
* CLD_EXITED (no módulo os):             Gerenciamento de processo.
                                                             (line 1107)
* CLD_KILLED (no módulo os):             Gerenciamento de processo.
                                                             (line 1107)
* CLD_STOPPED (no módulo os):            Gerenciamento de processo.
                                                             (line 1107)
* CLD_TRAPPED (no módulo os):            Gerenciamento de processo.
                                                             (line 1107)
* 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 functions:                     Process Control.    (line   33)
* CLEANUP_THROW (opcode):                Instruções em bytecode do Python.
                                                             (line  366)
* cleanup() (método tempfile.TemporaryDirectory): tempfile — Generate temporary files and directories.
                                                             (line  202)
* clear (pdb command):                   Comandos de depuração.
                                                             (line  147)
* Clear Breakpoint:                      Help menu Shell and Editor.
                                                             (line   30)
* clear_all_breaks() (método bdb.Bdb):   bdb — Framework do depurador.
                                                             (line  396)
* clear_all_file_breaks() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  391)
* clear_bpbynumber() (método bdb.Bdb):   bdb — Framework do depurador.
                                                             (line  385)
* clear_break() (método bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  380)
* clear_cache() (método de classe zoneinfo.ZoneInfo): A classe ZoneInfo.
                                                             (line   60)
* 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  199)
* clear_frames() (no módulo traceback):  Funções de nível de módulo.
                                                             (line  177)
* clear_history() (no módulo readline):  Lista de histórico. (line    8)
* clear_memo() (método pickle.Pickler):  Interface do módulo.
                                                             (line  245)
* 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_tool_id() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line   13)
* clear_traces() (no módulo tracemalloc): Funções<11>.       (line    6)
* clear_traps() (método decimal.Context): Objetos de contexto.
                                                             (line  203)
* 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  169)
* 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 frozenset):            Tipo conjuntos — set frozenset.
                                                             (line  223)
* clear() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   78)
* clear() (método mailbox.Mailbox):      Mailbox objects.    (line  212)
* clear() (método sequence):             Tipos sequências mutáveis.
                                                             (line   76)
* 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   46)
* clearok() (método curses.window):      Window Objects.     (line  159)
* clearscreen() (no módulo turtle):      Controle da Janela. (line   46)
* clearstamp() (no módulo turtle):       Movimentos de Turtle.
                                                             (line  287)
* clearstamps() (no módulo turtle):      Movimentos de Turtle.
                                                             (line  306)
* client_address (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  118)
* 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 9562.
                                                             (line  141)
* clock_seq_hi_variant (atributo uuid.UUID): uuid — Objetos UUID conforme RFC 9562.
                                                             (line  121)
* clock_seq_low (atributo uuid.UUID):    uuid — Objetos UUID conforme RFC 9562.
                                                             (line  125)
* 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  666)
* CLONE_FS (no módulo os):               Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWCGROUP (no módulo os):        Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWIPC (no módulo os):           Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWNET (no módulo os):           Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWNS (no módulo os):            Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWPID (no módulo os):           Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWTIME (no módulo os):          Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWUSER (no módulo os):          Parâmetros de processo.
                                                             (line  666)
* CLONE_NEWUTS (no módulo os):           Parâmetros de processo.
                                                             (line  666)
* CLONE_SIGHAND (no módulo os):          Parâmetros de processo.
                                                             (line  666)
* CLONE_SYSVSEM (no módulo os):          Parâmetros de processo.
                                                             (line  666)
* CLONE_THREAD (no módulo os):           Parâmetros de processo.
                                                             (line  666)
* CLONE_VM (no módulo os):               Parâmetros de processo.
                                                             (line  666)
* 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   44)
* cloneNode() (método xml.dom.Node):     Objetos Node.       (line  147)
* close (in module os):                  Sub-interpreter support.
                                                             (line  198)
* close_clients() (método asyncio.Server): Objetos Server.   (line   44)
* close_connection (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  127)
* 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   56)
* 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 concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   31)
* 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   79)
* close() (método dbm.gnu.gdbm):         dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line   95)
* close() (método dbm.ndbm.ndbm):        dbm ndbm — New Database Manager.
                                                             (line   81)
* close() (método dbm.sqlite3.sqlite3):  dbm sqlite3 — Backend de SQLite para dbm.
                                                             (line   56)
* 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): HTMLParser Methods.
                                                             (line   15)
* close() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  153)
* 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   52)
* close() (método mailbox.Mailbox):      Mailbox objects.    (line  269)
* 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  172)
* close() (método multiprocessing.Process): Process e exceções.
                                                             (line  255)
* close() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  182)
* 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  234)
* close() (método os.scandir):           Arquivos e diretórios.
                                                             (line  920)
* close() (método select.devpoll):       /dev/poll Polling Objects.
                                                             (line   12)
* close() (método select.epoll):         Edge and Level Trigger Polling epoll Objects.
                                                             (line   71)
* 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  157)
* close() (método tarfile.TarFile):      TarFile Objects.    (line  327)
* 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   36)
* 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  118)
* 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   75)
* closed (atributo select.kqueue):       Kqueue Objects.     (line   10)
* CloseKey() (no módulo winreg):         Funções<14>.        (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 — Higher-order functions and operations on callable objects.
                                                             (line  120)
* 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   61)
* CO_FUTURE_ANNOTATIONS (C macro):       Sinalizadores de objetos código.
                                                             (line   77)
* CO_FUTURE_DIVISION (C macro):          Sinalizadores de objetos código.
                                                             (line   58)
* CO_FUTURE_GENERATOR_STOP (C macro):    Sinalizadores de objetos código.
                                                             (line   74)
* CO_FUTURE_PRINT_FUNCTION (C macro):    Sinalizadores de objetos código.
                                                             (line   67)
* CO_FUTURE_UNICODE_LITERALS (C macro):  Sinalizadores de objetos código.
                                                             (line   70)
* CO_FUTURE_WITH_STATEMENT (C macro):    Sinalizadores de objetos código.
                                                             (line   64)
* CO_GENERATOR (C macro):                Sinalizadores de objetos código.
                                                             (line   40)
* CO_GENERATOR (no módulo inspect):      Code Objects Bit Flags.
                                                             (line   30)
* CO_HAS_DOCSTRING (C macro):            Sinalizadores de objetos código.
                                                             (line   52)
* CO_HAS_DOCSTRING (no módulo inspect):  Code Objects Bit Flags.
                                                             (line   60)
* 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_METHOD (C macro):                   Sinalizadores de objetos código.
                                                             (line   55)
* CO_METHOD (no módulo inspect):         Code Objects Bit Flags.
                                                             (line   68)
* 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  420)
* 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<22>.
                                                             (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   53)
* 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   67)
* 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  188)
* CodeType (classe em types):            Tipos padrão do interpretador.
                                                             (line   56)
* codificação da localidade:             Glossário.          (line 1042)
* codificação;estilo:                    Intermezzo estilo de codificação.
                                                             (line    6)
* codificador de texto:                  Glossário.          (line 1598)
* 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   39)
* coleta de lixo <1>:                    Glossário.          (line  694)
* 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  281)
* 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<20>.       (line   27)
* colno (atributo re.PatternError):      Exceções<3>.        (line   33)
* colno (atributo tomllib.TOMLDecodeError): tomllib — Analisa arquivos TOML.
                                                             (line   82)
* 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  224)
* COLONEQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  350)
* COLOR_BLACK (no módulo curses):        Constantes<6>.      (line  641)
* COLOR_BLUE (no módulo curses):         Constantes<6>.      (line  644)
* color_content() (no módulo curses):    Funções<6>.         (line   60)
* COLOR_CYAN (no módulo curses):         Constantes<6>.      (line  647)
* COLOR_GREEN (no módulo curses):        Constantes<6>.      (line  650)
* COLOR_MAGENTA (no módulo curses):      Constantes<6>.      (line  653)
* color_pair() (no módulo curses):       Funções<6>.         (line   68)
* COLOR_PAIRS (no módulo curses):        Constantes<6>.      (line   41)
* COLOR_RED (no módulo curses):          Constantes<6>.      (line  656)
* COLOR_WHITE (no módulo curses):        Constantes<6>.      (line  659)
* COLOR_YELLOW (no módulo curses):       Constantes<6>.      (line  662)
* color() (no módulo turtle):            Controle da Cor.    (line  104)
* colormode() (no módulo turtle):        Configurações e métodos especiais.
                                                             (line   35)
* COLORS (no módulo curses):             Constantes<6>.      (line   36)
* COLS (no módulo curses):               Constantes<6>.      (line   46)
* column() (método tkinter.ttk.Treeview): ttk Treeview.      (line   35)
* columnize() (método cmd.Cmd):          Objetos Cmd.        (line   91)
* COLUMNS:                               Funções<6>.         (line  611)
* COLUMNS <1>:                           Funções<6>.         (line  614)
* 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  102)
* Combobox (classe em tkinter.ttk):      ttk Combobox.       (line    6)
* comentário:                            Comentários.        (line    6)
* COMError:                              Exceções<10>.       (line   11)
* COMMA (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  227)
* command (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  140)
* CommandCompiler (classe em codeop):    codeop — Compila código Python.
                                                             (line   69)
* commands (pdb command):                Comandos de depuração.
                                                             (line  186)
* 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  385)
* 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  336)
* 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>: Process-wide parameters.
                                                             (line  263)
* Common Vulnerabilities and Exposures; CVE 2012-0876: Segurança<47>.
                                                             (line   23)
* Common Vulnerabilities and Exposures; CVE 2012-0876 <1>: Segurança<50>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2012-0876 <2>: Segurança<56>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2013-0340: Segurança<27>.
                                                             (line   22)
* Common Vulnerabilities and Exposures; CVE 2013-1753: Biblioteca<104>.
                                                             (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<104>.
                                                             (line 1122)
* Common Vulnerabilities and Exposures; CVE 2015-1283: Segurança<53>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2015-1283 <1>: Segurança<58>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2016-0718: Segurança<47>.
                                                             (line   22)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <1>: Segurança<47>.
                                                             (line   23)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <2>: Segurança<47>.
                                                             (line   35)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <3>: Segurança<50>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <4>: Segurança<50>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <5>: Segurança<51>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <6>: Segurança<56>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <7>: Segurança<56>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <8>: Segurança<56>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2016-0772: Segurança<53>.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2016-0772 <1>: Segurança<58>.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2016-1000110: Biblioteca<83>.
                                                             (line   82)
* Common Vulnerabilities and Exposures; CVE 2016-1000110 <1>: Biblioteca<90>.
                                                             (line  267)
* Common Vulnerabilities and Exposures; CVE 2016-2183: Biblioteca<82>.
                                                             (line  178)
* Common Vulnerabilities and Exposures; CVE 2016-2183 <1>: Biblioteca<90>.
                                                             (line  205)
* Common Vulnerabilities and Exposures; CVE 2016-3189: Windows<28>.
                                                             (line   25)
* Common Vulnerabilities and Exposures; CVE 2016-4472: Segurança<47>.
                                                             (line   35)
* Common Vulnerabilities and Exposures; CVE 2016-4472 <1>: Segurança<51>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2016-4472 <2>: Segurança<56>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2016-5300: Segurança<47>.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2016-5300 <1>: Segurança<50>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2016-5300 <2>: Segurança<56>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2016-9063: Segurança<47>.
                                                             (line   21)
* Common Vulnerabilities and Exposures; CVE 2016-9063 <1>: Segurança<50>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2016-9063 <2>: Segurança<56>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2017-1000158: Segurança<55>.
                                                             (line   21)
* Common Vulnerabilities and Exposures; CVE 2017-9233: Segurança<47>.
                                                             (line   20)
* Common Vulnerabilities and Exposures; CVE 2017-9233 <1>: Segurança<50>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2017-9233 <2>: Segurança<56>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2018-1060: Segurança<44>.
                                                             (line   48)
* Common Vulnerabilities and Exposures; CVE 2018-1060 <1>: Segurança<45>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2018-1060 <2>: Segurança<48>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2018-1061: Segurança<44>.
                                                             (line   49)
* Common Vulnerabilities and Exposures; CVE 2018-1061 <1>: Segurança<45>.
                                                             (line   16)
* Common Vulnerabilities and Exposures; CVE 2018-1061 <2>: Segurança<48>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2018-14647: Segurança<44>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2018-25032: Windows<28>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2018-8970: Segurança<44>.
                                                             (line   38)
* Common Vulnerabilities and Exposures; CVE 2018-8970 <1>: Segurança<45>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2019-12900: Windows<28>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2019-15903: Segurança<40>.
                                                             (line   20)
* Common Vulnerabilities and Exposures; CVE 2019-18348: Segurança<37>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2019-20907: Biblioteca<47>.
                                                             (line  186)
* Common Vulnerabilities and Exposures; CVE 2019-5010: Segurança<44>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2019-9740: Segurança<42>.
                                                             (line    9)
* Common Vulnerabilities and Exposures; CVE 2019-9948: Segurança<41>.
                                                             (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<34>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2020-15801: Segurança<34>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2020-8492: Segurança<36>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2021-3426: Segurança<29>.
                                                             (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<25>.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2022-4303: Segurança<21>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2022-4303 <1>: Segurança<21>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2023-0286: Segurança<21>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2023-24329: Segurança<20>.
                                                             (line   19)
* Common Vulnerabilities and Exposures; CVE 2023-27043: email<2>.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2023-27043 <1>: Biblioteca<21>.
                                                             (line  457)
* Common Vulnerabilities and Exposures; CVE 2023-40217: Segurança<19>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2023-52425: xml. (line    6)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <1>: Segurança<16>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <2>: Documentação<14>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <3>: Segurança no XML.
                                                             (line   51)
* 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   16)
* Common Vulnerabilities and Exposures; CVE 2024-4030: os<2>.
                                                             (line   39)
* Common Vulnerabilities and Exposures; CVE 2024-4030 <1>: tempfile.
                                                             (line    9)
* Common Vulnerabilities and Exposures; CVE 2024-4030 <2>: Segurança<14>.
                                                             (line   55)
* Common Vulnerabilities and Exposures; CVE 2025-4138: tarfile.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2025-4138 <1>: Segurança<6>.
                                                             (line   16)
* Common Vulnerabilities and Exposures; CVE 2025-4330: tarfile.
                                                             (line   19)
* Common Vulnerabilities and Exposures; CVE 2025-4330 <1>: Segurança<6>.
                                                             (line   16)
* Common Vulnerabilities and Exposures; CVE 2025-4435: tarfile.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2025-4517: os path.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2025-4517 <1>: Segurança<6>.
                                                             (line   16)
* Common Weakness Enumeration; CWE 257:  Receitas e melhores práticas.
                                                             (line   16)
* Common Weakness Enumeration; CWE 295:  ssl<3>.             (line   21)
* Common Weakness Enumeration; CWE 295 <1>: Biblioteca<31>.  (line  514)
* 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  172)
* commonpath() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line   74)
* commonprefix() (no módulo os.path):    os path — Manipulações comuns de nomes de caminhos.
                                                             (line   91)
* 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  243)
* compare_networks() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  362)
* COMPARE_OP (opcode):                   Instruções em bytecode do Python.
                                                             (line  832)
* compare_signal() (método decimal.Context): Objetos de contexto.
                                                             (line  295)
* 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  303)
* compare_total_mag() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  196)
* compare_total() (método decimal.Context): Objetos de contexto.
                                                             (line  299)
* compare_total() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  170)
* compare() (método decimal.Context):    Objetos de contexto.
                                                             (line  291)
* compare() (método decimal.Decimal):    Objetos de Decimal. (line  152)
* compare() (método difflib.Differ):     Differ Objects.     (line   38)
* compare() (no módulo ast):             Sinalizadores do compilador<2>.
                                                             (line   35)
* 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<13>.
                                                             (line   68)
* compileall opção de linha de comando; -d: Uso na linha de comando<13>.
                                                             (line   34)
* compileall opção de linha de comando; -e: Uso na linha de comando<13>.
                                                             (line  110)
* compileall opção de linha de comando; -f: Uso na linha de comando<13>.
                                                             (line   23)
* compileall opção de linha de comando; -hardlink-dupes: Uso na linha de comando<13>.
                                                             (line  115)
* compileall opção de linha de comando; -i: Uso na linha de comando<13>.
                                                             (line   62)
* compileall opção de linha de comando; -invalidation-mode: Uso na linha de comando<13>.
                                                             (line   89)
* compileall opção de linha de comando; -j: Uso na linha de comando<13>.
                                                             (line   83)
* compileall opção de linha de comando; -l: Uso na linha de comando<13>.
                                                             (line   17)
* compileall opção de linha de comando; -o: Uso na linha de comando<13>.
                                                             (line  104)
* compileall opção de linha de comando; -p: Uso na linha de comando<13>.
                                                             (line   49)
* compileall opção de linha de comando; -q: Uso na linha de comando<13>.
                                                             (line   28)
* compileall opção de linha de comando; -r: Uso na linha de comando<13>.
                                                             (line   76)
* compileall opção de linha de comando; -s: Uso na linha de comando<13>.
                                                             (line   42)
* compileall opção de linha de comando; -x: Uso na linha de comando<13>.
                                                             (line   56)
* compileall opção de linha de comando; directory: Uso na linha de comando<13>.
                                                             (line    9)
* compileall opção de linha de comando; file: Uso na linha de comando<13>.
                                                             (line    9)
* compiler_flag (atributo __future__._Feature): Conteúdo do módulo<9>.
                                                             (line   92)
* 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  370)
* complexo;número:                       numbers Complex complex.
                                                             (line    6)
* compound;instrução:                    Instruções compostas.
                                                             (line    6)
* compreensão de conjunto:               Glossário.          (line 1504)
* compreensão de dicionário:             Glossário.          (line  475)
* compreensão de lista:                  Glossário.          (line 1019)
* 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 compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line   78)
* compress() (método lzma.LZMACompressor): Comprimindo e descomprimindo dados na memória<2>.
                                                             (line   84)
* compress() (método zlib.Compress):     zlib — Compactação compatível com gzip.
                                                             (line  212)
* compress() (no módulo bz2):            De compressão de uma só vez one-shot.
                                                             (line    6)
* compress() (no módulo compression.zstd): Comprimindo e descomprimindo dados na memória.
                                                             (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<2>.
                                                             (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   64)
* compressed (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  112)
* compressed (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  259)
* compressed (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  328)
* compression_level (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   39)
* COMPRESSION_LEVEL_DEFAULT (no módulo compression.zstd): Diversos<3>.
                                                             (line   28)
* compression() (método ssl.SSLSocket):  SSL Sockets.        (line  251)
* CompressionError:                      tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  260)
* CompressionParameter (classe em compression.zstd): Advanced parameter control.
                                                             (line    6)
* compressobj() (no módulo zlib):        zlib — Compactação compatível com gzip.
                                                             (line   85)
* COMSPEC:                               Gerenciamento de processo.
                                                             (line  822)
* COMSPEC <1>:                           Construtor Popen.   (line  117)
* concat() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  193)
* concatenação;operação:                 Operações comuns de sequências.
                                                             (line   20)
* Concatenate (no módulo typing):        Formas especiais.   (line   84)
* cond (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   97)
* 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   32)
* Condition (classe em threading):       Condition objects.  (line   72)
* condition (pdb command):               Comandos de depuração.
                                                             (line  178)
* Condition() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  173)
* 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  104)
* 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  144)
* connect() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   77)
* 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  183)
* 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<14>.        (line   17)
* considerações de segurança:            xdrlib — Codifica e decodifica dados XDR.
                                                             (line   15)
* 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<16>.
                                                             (line   67)
* contagem de referências:               Objetos valores e tipos.
                                                             (line   39)
* contagem de referências <1>:           Glossário.          (line 1446)
* 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  847)
* contains() (no módulo operator):       operator — Operadores padrões como funções.
                                                             (line  198)
* contêiner:                             Objetos valores e tipos.
                                                             (line   70)
* 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_size_flag (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  191)
* 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 — Base classes for SAX handlers.
                                                             (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  509)
* contents() (método importlib.resources.abc.ResourceReader): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   71)
* contents() (no módulo importlib.resources): API funcional. (line  157)
* ContentTooShortError:                  urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   70)
* ContentTransferEncoding (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  126)
* context_aware_warnings (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  624)
* 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  339)
* contexto atual:                        Glossário.          (line  409)
* 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   26)
* contíguo <1>:                          Glossário.          (line  375)
* contíguo C:                            forma avanços suboffsets.
                                                             (line   26)
* contíguo C <1>:                        Glossário.          (line  379)
* contíguo Fortran:                      forma avanços suboffsets.
                                                             (line   25)
* contíguo Fortran <1>:                  Glossário.          (line  379)
* contiguous (atributo memoryview):      Memory Views.       (line  525)
* continuação de linha:                  Junção de linha explícita.
                                                             (line    6)
* CONTINUE (atributo compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  135)
* Continue (classe em ast):              Fluxo de controle.  (line   99)
* continue (pdb command):                Comandos de depuração.
                                                             (line  258)
* 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 1535)
* controle de E/S;buffering <1>:         Socket Objects.     (line  211)
* 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  362)
* conversion (atributo string.templatelib.Interpolation): Tipos.
                                                             (line  240)
* 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  114)
* CONVERT_VALUE (opcode):                Instruções em bytecode do Python.
                                                             (line 1217)
* convert() (no módulo string.templatelib): Funções auxiliares<2>.
                                                             (line    6)
* 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  177)
* copy_abs() (método decimal.Context):   Objetos de contexto.
                                                             (line  308)
* 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  213)
* 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 1064)
* copy_into() (método pathlib.Path):     Copiando movendo e excluindo.
                                                             (line   34)
* copy_location() (no módulo ast):       Auxiliares de ast.  (line  165)
* copy_negate() (método decimal.Context): Objetos de contexto.
                                                             (line  312)
* copy_negate() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  220)
* copy_sign() (método decimal.Context):  Objetos de contexto.
                                                             (line  316)
* 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  209)
* copy() (método dict):                  Tipo mapeamento — dict.
                                                             (line  173)
* copy() (método frozenset):             Tipo conjuntos — set frozenset.
                                                             (line  128)
* 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  113)
* copy() (método imaplib.IMAP4):         Objetos IMAP4.      (line   68)
* copy() (método pathlib.Path):          Copiando movendo e excluindo.
                                                             (line    6)
* copy() (método sequence):              Tipos sequências mutáveis.
                                                             (line   83)
* 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  264)
* 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   85)
* copy() (no módulo shutil):             Operações de diretório e arquivos.
                                                             (line  143)
* copy2() (no módulo shutil):            Operações de diretório e arquivos.
                                                             (line  177)
* CopyComPointer() (no módulo ctypes):   Funções utilitárias.
                                                             (line   33)
* copyfile() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line   26)
* 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   78)
* copyright (in module sys):             Process-wide parameters.
                                                             (line  197)
* copyright (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line  183)
* 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   97)
* copytree() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line  220)
* 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)
* corrotina:                             Pesquisa de método especial.
                                                             (line   76)
* corrotina <1>:                         Expressões yield.   (line   54)
* corrotina <2>:                         Glossário.          (line  386)
* 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 memoryview):           Memory Views.       (line  388)
* 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  168)
* count() (método str):                  Métodos de string.  (line   66)
* 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  204)
* countTestCases() (método unittest.TestCase): Casos de teste.
                                                             (line  823)
* 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<5>.      (line   13)
* cpu_count() (no módulo os):            Diversas informações de sistema.
                                                             (line   38)
* CPython:                               Glossário.          (line  402)
* cpython_only() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  556)
* 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  127)
* 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  242)
* create_decimal() (método decimal.Context): Objetos de contexto.
                                                             (line  217)
* 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): Eager Task Factory.
                                                             (line   32)
* create_empty_file() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   95)
* 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_queue() (no módulo concurrent.interpreters): Referência<4>.
                                                             (line   30)
* 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   57)
* create_subprocess_exec() (no módulo asyncio): Criando subprocessos.
                                                             (line    6)
* create_subprocess_shell() (no módulo asyncio): Criando subprocessos.
                                                             (line   23)
* 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): Task Groups.     (line   17)
* create_task() (no módulo asyncio):     Criando Tarefas.    (line   10)
* create_unicode_buffer() (no módulo ctypes): Funções utilitárias.
                                                             (line   98)
* 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 concurrent.interpreters): Referência<4>.
                                                             (line   25)
* 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<14>.        (line   35)
* CreateKeyEx() (no módulo winreg):      Funções<14>.        (line   63)
* createLock() (método logging.Handler): Objetos Handler.    (line   20)
* createLock() (método logging.NullHandler): NullHandler.    (line   24)
* createProcessingInstruction() (método xml.dom.Document): Document Objects.
                                                             (line   40)
* createSocket() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   72)
* createSocket() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line   56)
* 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  297)
* CRT_ASSEMBLY_VERSION (no módulo msvcrt): Outras funções<4>.
                                                             (line   89)
* CRT_ASSERT (no módulo msvcrt):         Outras funções<4>.  (line   66)
* CRT_ERROR (no módulo msvcrt):          Outras funções<4>.  (line   61)
* CRT_WARN (no módulo msvcrt):           Outras funções<4>.  (line   56)
* CRTDBG_MODE_DEBUG (no módulo msvcrt):  Outras funções<4>.  (line   70)
* CRTDBG_MODE_FILE (no módulo msvcrt):   Outras funções<4>.  (line   74)
* CRTDBG_MODE_WNDW (no módulo msvcrt):   Outras funções<4>.  (line   80)
* CRTDBG_REPORT_MODE (no módulo msvcrt): Outras funções<4>.  (line   85)
* CrtSetReportFile() (no módulo msvcrt): Outras funções<4>.  (line   48)
* 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.ContentTransferEncoding): 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  316)
* 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  207)
* CTRL_C_EVENT (no módulo signal):       Conteúdo do módulo<5>.
                                                             (line  197)
* 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  487)
* current_process() (no módulo multiprocessing): Diversos<5>.
                                                             (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  195)
* CurrentColumnNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  199)
* currentframe() (no módulo inspect):    A pilha to interpretador.
                                                             (line  161)
* CurrentLineNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  203)
* curs_set() (no módulo curses):         Funções<6>.         (line   76)
* 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)
* 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  199)
* D_T_FMT (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  193)
* 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  239)
* daemon_threads (atributo socketserver.ThreadingMixIn): Notas sobre criação do servidor.
                                                             (line   62)
* 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  475)
* 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  367)
* 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  157)
* 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  216)
* DAY_2 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* DAY_3 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* DAY_4 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* DAY_5 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* DAY_6 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* DAY_7 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* 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 1975)
* deallocation, object:                  Finalization and De-allocation.
                                                             (line    6)
* debug (atributo imaplib.IMAP4):        Objetos IMAP4.      (line  479)
* debug (atributo shlex.shlex):          shlex Objects.      (line  162)
* debug (atributo sys.flags):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  561)
* debug (atributo zipfile.ZipFile):      Objetos ZipFile.    (line  379)
* 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  479)
* 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  338)
* DEBUG_LEAK (no módulo gc):             gc — Interface para o coletor de lixo.
                                                             (line  358)
* DEBUG_SAVEALL (no módulo gc):          gc — Interface para o coletor de lixo.
                                                             (line  352)
* debug_src() (no módulo doctest):       Depuração.          (line  147)
* DEBUG_STATS (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line  333)
* DEBUG_UNCOLLECTABLE (no módulo gc):    gc — Interface para o coletor de lixo.
                                                             (line  342)
* 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   52)
* 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  125)
* decompress() (método bz2.BZ2Decompressor): Des compressão incremental.
                                                             (line   45)
* decompress() (método compression.zstd.ZstdDecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  190)
* decompress() (método lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória<2>.
                                                             (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 compression.zstd): Comprimindo e descomprimindo dados na memória.
                                                             (line   31)
* decompress() (no módulo gzip):         gzip — Suporte para arquivos gzip.
                                                             (line  225)
* decompress() (no módulo lzma):         Comprimindo e descomprimindo dados na memória<2>.
                                                             (line  198)
* decompress() (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  142)
* decompressed_size (atributo compression.zstd.FrameInfo): Diversos<3>.
                                                             (line   16)
* DecompressionParameter (classe em compression.zstd): Advanced parameter control.
                                                             (line  278)
* decompressobj() (no módulo zlib):      zlib — Compactação compatível com gzip.
                                                             (line  189)
* decorador:                             Glossário.          (line  427)
* 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_prog_mode() (no módulo curses):    Funções<6>.         (line   85)
* def_shell_mode() (no módulo curses):   Funções<6>.         (line   92)
* default (atributo inspect.Parameter):  Introspecting callables with the Signature object.
                                                             (line  236)
* 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):    High-level Module Interface.
                                                             (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   35)
* default_factory (atributo collections.defaultdict): Objetos defaultdict.
                                                             (line   50)
* DEFAULT_FORMAT (no módulo tarfile):    tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  394)
* 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 1254)
* 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;value:               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  207)
* DefaultContext (no módulo decimal):    Objetos de contexto.
                                                             (line  101)
* 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   39)
* DefaultHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  351)
* DefaultHandlerExpand() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  358)
* 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  462)
* defaultTestResult() (método unittest.TestCase): Casos de teste.
                                                             (line  828)
* 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)
* 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  100)
* delay() (no módulo turtle):            Controle da animação.
                                                             (line   19)
* 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  612)
* DELETE_DEREF (opcode):                 Instruções em bytecode do Python.
                                                             (line 1054)
* DELETE_FAST (opcode):                  Instruções em bytecode do Python.
                                                             (line 1015)
* DELETE_GLOBAL (opcode):                Instruções em bytecode do Python.
                                                             (line  627)
* DELETE_NAME (opcode):                  Instruções em bytecode do Python.
                                                             (line  566)
* DELETE_SUBSCR (opcode):                Instruções em bytecode do Python.
                                                             (line  285)
* 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<14>.        (line  102)
* DeleteKeyEx() (no módulo winreg):      Funções<14>.        (line  124)
* deleteln() (método curses.window):     Window Objects.     (line  183)
* deleteMe() (método bdb.Breakpoint):    bdb — Framework do depurador.
                                                             (line   43)
* DeleteValue() (no módulo winreg):      Funções<14>.        (line  161)
* delimitadores:                         Operators and delimiters.
                                                             (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  208)
* deliver_challenge() (no módulo multiprocessing.connection): Listeners and Clients.
                                                             (line   15)
* delocalize() (no módulo locale):       locale — Serviços de internacionalização.
                                                             (line  509)
* 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  122)
* denominator (atributo numbers.Rational): A torre numérica. (line   55)
* deprecated() (no módulo warnings):     Funções disponíveis.
                                                             (line  135)
* 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 1023)
* depurador <3>:                         sys — Parâmetros e funções específicas do sistema.
                                                             (line 1802)
* depurador;configuração;arquivo:        Comandos de depuração.
                                                             (line   69)
* 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   56)
* DER_cert_to_PEM_cert() (no módulo ssl): Manipulação de certificados.
                                                             (line   52)
* derive() (método BaseExceptionGroup):  Grupos de exceções. (line   78)
* 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  302)
* description (atributo sqlite3.Cursor): Cursor objects.     (line  196)
* descritor:                             Glossário.          (line  450)
* 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  891)
* 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 1512)
* 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   42)
* DETACHED_PROCESS (no módulo subprocess): Constantes do Windows.
                                                             (line  122)
* details (atributo ctypes.COMError):    Exceções<10>.       (line   23)
* detect_api_mismatch() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  680)
* 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  600)
* 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)
* dfast (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  330)
* 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 1701)
* dicionário:                            Glossário.          (line  468)
* 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  163)
* Dict (classe em typing):               Apelidos de tipos embutidos.
                                                             (line    6)
* dict (classe interna):                 Tipo mapeamento — dict.
                                                             (line   19)
* dict_content (atributo compression.zstd.ZstdDict): Dicionários de Zstandard.
                                                             (line  119)
* dict_id (atributo compression.zstd.ZstdDict): Dicionários de Zstandard.
                                                             (line  126)
* dict_id_flag (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  228)
* DICT_MERGE (opcode):                   Instruções em bytecode do Python.
                                                             (line  777)
* DICT_UPDATE (opcode):                  Instruções em bytecode do Python.
                                                             (line  766)
* dict() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  223)
* DictComp (classe em ast):              Compreensões.       (line    6)
* dictConfig() (no módulo logging.config): Funções de configuração.
                                                             (line   13)
* dictionary_id (atributo compression.zstd.FrameInfo): Diversos<3>.
                                                             (line   20)
* 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 frozenset): Tipo conjuntos — set frozenset.
                                                             (line  191)
* difference() (método frozenset):       Tipo conjuntos — set frozenset.
                                                             (line  114)
* dig (atributo sys.float_info):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  683)
* 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   63)
* 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  959)
* diretório;alteração:                   Arquivos e diretórios.
                                                             (line  123)
* diretório;criação:                     Arquivos e diretórios.
                                                             (line  572)
* diretório;exclusão:                    Operações de diretório e arquivos.
                                                             (line  295)
* diretório;exclusão <1>:                Arquivos e diretórios.
                                                             (line  772)
* diretório;percorrer:                   Arquivos e diretórios.
                                                             (line 1732)
* diretório;percorrer <1>:               Arquivos e diretórios.
                                                             (line 1837)
* diretório;traversal:                   Arquivos e diretórios.
                                                             (line 1732)
* diretório;traversal <1>:               Arquivos e diretórios.
                                                             (line 1837)
* dirname() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  110)
* 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  354)
* dis opção de linha de comando; -C:     Interface de linha de comando<10>.
                                                             (line   17)
* dis opção de linha de comando; -h:     Interface de linha de comando<10>.
                                                             (line   13)
* dis opção de linha de comando; -help:  Interface de linha de comando<10>.
                                                             (line   13)
* dis opção de linha de comando; -O:     Interface de linha de comando<10>.
                                                             (line   23)
* dis opção de linha de comando; -P:     Interface de linha de comando<10>.
                                                             (line   29)
* dis opção de linha de comando; -S:     Interface de linha de comando<10>.
                                                             (line   35)
* dis opção de linha de comando; -show-caches: Interface de linha de comando<10>.
                                                             (line   17)
* dis opção de linha de comando; -show-offsets: Interface de linha de comando<10>.
                                                             (line   23)
* dis opção de linha de comando; -show-positions: Interface de linha de comando<10>.
                                                             (line   29)
* dis opção de linha de comando; -specialized: Interface de linha de comando<10>.
                                                             (line   35)
* dis() (método dis.Bytecode):           Análise de bytecode.
                                                             (line   66)
* 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  155)
* disable_current_event() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  433)
* disable_faulthandler() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  379)
* disable_gc() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  392)
* 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   53)
* disable() (método profile.Profile):    profile and cProfile Module Reference.
                                                             (line   84)
* disable() (no módulo faulthandler):    Fault handler state.
                                                             (line   37)
* 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<14>.    (line  492)
* disassemble() (no módulo dis):         Funções de análise. (line  108)
* discard (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   58)
* discard() (método frozenset):          Tipo conjuntos — set frozenset.
                                                             (line  214)
* discard() (método mailbox.Mailbox):    Mailbox objects.    (line   76)
* discard() (método mailbox.MH):         MH objects.         (line   79)
* disco() (no módulo dis):               Funções de análise. (line  108)
* 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  414)
* dispatch_call() (método bdb.Bdb):      bdb — Framework do depurador.
                                                             (line  238)
* dispatch_exception() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  258)
* dispatch_line() (método bdb.Bdb):      bdb — Framework do depurador.
                                                             (line  228)
* dispatch_return() (método bdb.Bdb):    bdb — Framework do depurador.
                                                             (line  248)
* dispatch_table (atributo pickle.Pickler): Interface do módulo.
                                                             (line  192)
* DISPLAY:                               Módulos Tkinter.    (line   29)
* display (pdb command):                 Comandos de depuração.
                                                             (line  323)
* 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  309)
* 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   88)
* 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  324)
* divide() (método decimal.Context):     Objetos de contexto.
                                                             (line  320)
* divisão:                               Operações binárias aritméticas.
                                                             (line   38)
* divisão pelo piso:                     Glossário.          (line  623)
* 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  328)
* 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  112)
* DllGetClassObject() (no módulo ctypes): Funções utilitárias.
                                                             (line  120)
* dllhandle (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line  303)
* dllist() (no módulo ctypes.util):      Funções utilitárias.
                                                             (line  149)
* 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  129)
* do_clear() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  321)
* do_command() (método curses.textpad.Textbox): Textbox objects.
                                                             (line   30)
* do_GET() (método http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  432)
* do_handshake() (método ssl.SSLSocket): SSL Sockets.        (line  126)
* do_HEAD() (método http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  425)
* do_help() (método cmd.Cmd):            Objetos Cmd.        (line   50)
* do_POST() (método http.server.CGIHTTPRequestHandler): http server — HTTP servers.
                                                             (line  520)
* doc (atributo json.JSONDecodeError):   Exceções<20>.       (line   15)
* doc (atributo tomllib.TOMLDecodeError): tomllib — Analisa arquivos TOML.
                                                             (line   70)
* 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  922)
* doCleanups() (método unittest.TestCase): Casos de teste.   (line  880)
* docmd() (método smtplib.SMTP):         Objetos SMTP.       (line   17)
* docstring:                             Definições de classe.
                                                             (line    6)
* docstring <1>:                         Glossário.          (line  493)
* 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<7>.
                                                             (line   36)
* doctest opção de linha de comando; -fail-fast: Uso na linha de comando<7>.
                                                             (line   36)
* doctest opção de linha de comando; -o: Uso na linha de comando<7>.
                                                             (line   28)
* doctest opção de linha de comando; -option: Uso na linha de comando<7>.
                                                             (line   28)
* doctest opção de linha de comando; -v: Uso na linha de comando<7>.
                                                             (line   11)
* doctest opção de linha de comando; -verbose: Uso na linha de comando<7>.
                                                             (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)
* 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<23>.       (line   18)
* doModuleCleanups() (no módulo unittest): setUpModule and tearDownModule.
                                                             (line   45)
* DomstringSizeErr:                      Exceções<23>.       (line   23)
* done() (método asyncio.Future):        Future Object.      (line   64)
* done() (método asyncio.Task):          Objeto Task.        (line   68)
* 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  146)
* 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  576)
* dont_write_bytecode (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  347)
* doRollover() (método logging.handlers.RotatingFileHandler): RotatingFileHandler.
                                                             (line   43)
* doRollover() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  106)
* DOT (no módulo token):                 token — Constantes usadas com árvores de análises do Python.
                                                             (line  260)
* 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  332)
* DOUBLESLASHEQUAL (no módulo token):    token — Constantes usadas com árvores de análises do Python.
                                                             (line  335)
* DOUBLESTAR (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  296)
* DOUBLESTAREQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  329)
* doupdate() (no módulo curses):         Funções<6>.         (line  104)
* down (pdb command):                    Comandos de depuração.
                                                             (line  104)
* 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  273)
* 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 — Base classes for SAX handlers.
                                                             (line   24)
* dump_c_stack() (no módulo faulthandler): Dumping the C stack.
                                                             (line    8)
* 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  167)
* 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<4>.      (line    6)
* dump() (no módulo marshal):            marshal — Serialização interna de objetos Python.
                                                             (line   74)
* dump() (no módulo pickle):             Interface do módulo.
                                                             (line   40)
* 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<4>.      (line   94)
* dumps() (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  119)
* dumps() (no módulo pickle):            Interface do módulo.
                                                             (line   53)
* 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  518)
* 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<9>.        (line   25)
* DuplicateSectionError:                 Exceções<9>.        (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   67)
* E/S com buffer de linha:               Funções embutidas<3>.
                                                             (line 1535)
* E/S sem buffer:                        Funções embutidas<3>.
                                                             (line 1535)
* 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  525)
* EAGAIN (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   71)
* eager_task_factory() (no módulo asyncio): Eager Task Factory.
                                                             (line    6)
* EALREADY (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  507)
* east_asian_width() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  109)
* EAUTH (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  587)
* EBADARCH (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  593)
* 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  599)
* 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  605)
* 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  671)
* 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  698)
* ECHILD (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   66)
* echo() (no módulo curses):             Funções<6>.         (line  120)
* 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  611)
* 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  541)
* 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 2018)
* EFD_NONBLOCK (no módulo os):           Arquivos e diretórios.
                                                             (line 2027)
* EFD_SEMAPHORE (no módulo os):          Arquivos e diretórios.
                                                             (line 2036)
* effective() (no módulo bdb):           bdb — Framework do depurador.
                                                             (line  516)
* EFTYPE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  617)
* ehlo_or_helo_if_needed() (método smtplib.SMTP): Objetos SMTP.
                                                             (line   75)
* 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)
* EHWPOISON (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  501)
* 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  512)
* 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  533)
* EJECT (atributo enum.FlagBoundary):    Tipos de Dados<2>.  (line  713)
* EKEYEXPIRED (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  563)
* EKEYREJECTED (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  571)
* EKEYREVOKED (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  567)
* 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  240)
* 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  347)
* Ellipsis (variável interna):           Constantes embutidas.
                                                             (line   63)
* 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  579)
* 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  151)
* embutido;método:                       Métodos embutidos.  (line    6)
* embutido;tipos:                        Tipos embutidos.    (line    9)
* EMEDIUMTYPE (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  555)
* EMFILE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  128)
* Emin (atributo decimal.Context):       Objetos de contexto.
                                                             (line  151)
* 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   47)
* 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   67)
* emit() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  110)
* emit() (método logging.handlers.WatchedFileHandler): WatchedFileHandler.
                                                             (line   50)
* emit() (método logging.NullHandler):   NullHandler.        (line   16)
* emit() (método logging.StreamHandler): StreamHandler.      (line   17)
* 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  219)
* empty (atributo inspect.Signature):    Introspecting callables with the Signature object.
                                                             (line  109)
* 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  122)
* empty() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  244)
* 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  362)
* 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  164)
* 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_long_distance_matching (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  138)
* 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   49)
* 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<37>.     (line   47)
* enabled (atributo bdb.Breakpoint):     bdb — Framework do depurador.
                                                             (line  107)
* EnableReflectionKey() (no módulo winreg): Funções<14>.     (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  529)
* 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  226)
* encode() (método str):                 Métodos de string.  (line   86)
* 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  215)
* encodePriority() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line  101)
* 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  459)
* ENCODING (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  327)
* ENCODING (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  160)
* encodings_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   33)
* encodings_map (no módulo mimetypes):   mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  163)
* EncodingWarning:                       Avisos.             (line   74)
* end (atributo UnicodeError):           Exceções concretas. (line  479)
* END_ASYNC_FOR (opcode):                Instruções em bytecode do Python.
                                                             (line  353)
* 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   40)
* END_FOR (opcode):                      Instruções em bytecode do Python.
                                                             (line  163)
* end_headers() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  322)
* end_lineno (atributo ast.AST):         Classes de nós.     (line   51)
* end_lineno (atributo SyntaxError):     Exceções concretas. (line  348)
* 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  354)
* end_offset (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line  115)
* end_poly() (no módulo turtle):         Métodos Especiais da Tartaruga.
                                                             (line   23)
* END_SEND (opcode):                     Instruções em bytecode do Python.
                                                             (line  170)
* 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  347)
* EndDoctypeDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  235)
* 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  270)
* endElementNS() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  119)
* endheaders() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  185)
* ENDMARKER (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  155)
* EndNamespaceDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  326)
* 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):               Métodos de string.  (line  119)
* endwin() (no módulo curses):           Funções<6>.         (line  125)
* ENEEDAUTH (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  623)
* 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  629)
* 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  559)
* 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  551)
* 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  635)
* 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  583)
* 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  689)
* 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  525)
* ENOTRECOVERABLE (no módulo errno):     errno — Símbolos padrão do sistema errno.
                                                             (line  710)
* 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  100)
* 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):   Future Functions.   (line   19)
* ensurepip opção de linha de comando; -altinstall: Interface de linha de comando<6>.
                                                             (line   42)
* ensurepip opção de linha de comando; -default-pip: Interface de linha de comando<6>.
                                                             (line   47)
* ensurepip opção de linha de comando; -root: Interface de linha de comando<6>.
                                                             (line   25)
* ensurepip opção de linha de comando; -user: Interface de linha de comando<6>.
                                                             (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  983)
* enterClassContext() (método de classe unittest.TestCase): Casos de teste.
                                                             (line  913)
* enterContext() (método unittest.TestCase): Casos de teste. (line  871)
* 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  299)
* 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 — Base classes for SAX handlers.
                                                             (line   31)
* entrada:                               Entrada de expressão.
                                                             (line    6)
* entrada de caminho:                    Glossário.          (line 1298)
* 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<14>.        (line  173)
* EnumType (classe em enum):             Tipos de Dados<2>.  (line    6)
* EnumValue() (no módulo winreg):        Funções<14>.        (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   64)
* EnvironmentError:                      Exceções concretas. (line  518)
* 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 compression.zstd.ZstdDecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  216)
* eof (atributo lzma.LZMADecompressor):  Comprimindo e descomprimindo dados na memória<2>.
                                                             (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  704)
* 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  641)
* EPROCUNAVAIL (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  647)
* EPROGMISMATCH (no módulo errno):       errno — Símbolos padrão do sistema errno.
                                                             (line  653)
* EPROGUNAVAIL (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  659)
* 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  676)
* EPWROFF (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  665)
* 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  272)
* EQFULL (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  545)
* EQUAL (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  257)
* era:                                   time — Acesso ao horário e conversões.
                                                             (line   20)
* ERA (no módulo locale):                locale — Serviços de internacionalização.
                                                             (line  304)
* ERA_D_FMT (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  327)
* ERA_D_T_FMT (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  321)
* ERA_T_FMT (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  333)
* 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  129)
* 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  537)
* 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  575)
* 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  677)
* 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  511)
* 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<9>.        (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<18>.       (line    6)
* error <10>:                            select — Waiting for I/O completion.
                                                             (line   30)
* Error <5>:                             Exceções<21>.       (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>:                             webbrowser — Controlador de navegador web conveniente.
                                                             (line   71)
* 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  111)
* 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  204)
* 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  196)
* 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  170)
* ErrorCode (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  174)
* 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  180)
* ErrorHandler (classe em xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   38)
* errorlevel (atributo tarfile.TarFile): TarFile Objects.    (line  227)
* ErrorLineNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  184)
* 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  250)
* 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  195)
* 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  105)
* 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 1197)
* escopo otimizado:                      Glossário.          (line 1223)
* 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  683)
* ESHUTDOWN (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  474)
* 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 1167)
* 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   72)
* 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   79)
* especial;atributo:                     A hierarquia de tipos padrão.
                                                             (line   14)
* especial;método:                       Glossário.          (line 1540)
* 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 de thread:                      Glossário.          (line 1624)
* estado de thread anexado:              Glossário.          (line  152)
* ESTALE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  517)
* 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  228)
* ETHERTYPE_ARP (no módulo socket):      Constantes<8>.      (line  462)
* ETHERTYPE_IP (no módulo socket):       Constantes<8>.      (line  462)
* ETHERTYPE_IPV6 (no módulo socket):     Constantes<8>.      (line  462)
* ETHERTYPE_VLAN (no módulo socket):     Constantes<8>.      (line  462)
* 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  261)
* ETOOMANYREFS (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  479)
* Etop() (método decimal.Context):       Objetos de contexto.
                                                             (line  268)
* 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  521)
* 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)
* evaluate_bound() (método typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  189)
* evaluate_constraints() (método typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  211)
* evaluate_default() (método typing.ParamSpec): Criando tipos genéricos e apelidos de tipo.
                                                             (line  498)
* evaluate_default() (método typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  231)
* evaluate_default() (método typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  381)
* evaluate_forward_ref() (no módulo typing): Auxiliares de introspecção.
                                                             (line  180)
* evaluate_value() (método typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  628)
* evaluate() (método annotationlib.ForwardRef): Classes<5>.  (line   66)
* Event (classe em asyncio):             Evento.             (line    6)
* Event (classe em multiprocessing):     Primitivas de sincronização.
                                                             (line   43)
* 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  184)
* eventfd_read() (no módulo os):         Arquivos e diretórios.
                                                             (line 1998)
* eventfd_write() (no módulo os):        Arquivos e diretórios.
                                                             (line 2008)
* eventfd() (no módulo os):              Arquivos e diretórios.
                                                             (line 1944)
* EventLoop (classe em asyncio):         Implementações do Laço de Eventos.
                                                             (line   43)
* 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  362)
* 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<24>.       (line   48)
* exc_info() (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  465)
* 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   31)
* 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   38)
* 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  408)
* 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   35)
* exception() (método asyncio.Future):   Future Object.      (line  124)
* exception() (método asyncio.Task):     Objeto Task.        (line   90)
* 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  452)
* ExceptionGroup:                        Grupos de exceções. (line   12)
* exceptions (atributo BaseExceptionGroup): Grupos de exceções.
                                                             (line   38)
* exceptions (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   53)
* exceptions (pdb command):              Comandos de depuração.
                                                             (line  489)
* excinfo (atributo concurrent.interpreters.ExecutionFailed): Exceções<13>.
                                                             (line   22)
* EXCLAMATION (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  353)
* 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  272)
* 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  421)
* 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  486)
* exec() (método concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   43)
* 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):            Process-wide parameters.
                                                             (line  122)
* executable (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  513)
* 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  101)
* ExecutionFailed:                       Exception classes.  (line   49)
* ExecutionFailed <1>:                   Exceções<13>.       (line   16)
* ExecutionLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  285)
* 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   46)
* exists() (método pathlib.types.PathInfo): Protocolos.      (line   17)
* 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  119)
* exit (C function):                     Process Control.    (line   23)
* 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  521)
* 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  332)
* 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<14>.
                                                             (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):             Métodos de string.  (line  140)
* 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  144)
* expandvars() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  170)
* 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<16>.
                                                             (line   52)
* expectedFailure() (no módulo unittest): Ignorando testes e falhas esperadas.
                                                             (line   99)
* expectedFailures (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  270)
* 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   66)
* exploded (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  114)
* exploded (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  268)
* exploded (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  330)
* 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  542)
* expressão de atribuição:               Operações booleanas.
                                                             (line   39)
* expressão geradora:                    Glossário.          (line  728)
* expressão geradora <1>:                Glossário.          (line  728)
* 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 (atributo string.templatelib.Interpolation): Tipos.
                                                             (line  222)
* 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 1209)
* ExtendedContext (no módulo decimal):   Objetos de contexto.
                                                             (line   86)
* 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  412)
* External Data Representation:          Formato de fluxo de dados.
                                                             (line    6)
* external_attr (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  148)
* ExternalClashError:                    Exceções<21>.       (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  374)
* 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.
                                                             (line   94)
* extract_tb() (no módulo traceback):    Funções de nível de módulo.
                                                             (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):    TarFile Objects.    (line  180)
* extract() (método zipfile.ZipFile):    Objetos ZipFile.    (line  202)
* extractall() (método tarfile.TarFile): TarFile Objects.    (line  139)
* extractall() (método zipfile.ZipFile): Objetos ZipFile.    (line  231)
* ExtractError:                          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  270)
* extractfile() (método tarfile.TarFile): TarFile Objects.   (line  211)
* extraction_filter (atributo tarfile.TarFile): TarFile Objects.
                                                             (line  247)
* 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  518)
* f_generator (atributo de frame):       Objetos quadro.     (line   10)
* f_generator (atributo frame):          Atributos especiais de somente leitura<3>.
                                                             (line   40)
* 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   46)
* 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   47)
* f_trace (atributo frame):              Atributos especiais graváveis<2>.
                                                             (line    6)
* f_trace_lines (atributo de frame):     Atributos especiais de somente leitura<3>.
                                                             (line   47)
* 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   47)
* 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   96)
* f-string <1>:                          Literais de string brutas.
                                                             (line   26)
* f-string <2>:                          Glossário.          (line  559)
* f-strings:                             Glossário.          (line  562)
* f';literal de string formatado:        Literais de string brutas.
                                                             (line   26)
* f";literal de string formatado:        Literais de string brutas.
                                                             (line   26)
* 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  774)
* failed (atributo doctest.TestResults): TestResults objects.
                                                             (line    8)
* failfast (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  308)
* failureException (atributo unittest.TestCase): Casos de teste.
                                                             (line  779)
* failures (atributo doctest.DocTestRunner): DocTestRunner objects.
                                                             (line  139)
* failures (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  256)
* 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  614)
* fast (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  328)
* fast (atributo pickle.Pickler):        Interface do módulo.
                                                             (line  233)
* fatalError() (método xml.sax.handler.ErrorHandler): ErrorHandler Objects.
                                                             (line   24)
* fatia:                                 Fatiamentos.        (line    6)
* fatia <1>:                             Glossário.          (line 1517)
* 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   72)
* 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  100)
* 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 — Base classes for SAX handlers.
                                                             (line   81)
* feature_external_pes (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   88)
* feature_namespace_prefixes (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   60)
* feature_namespaces (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   53)
* feature_string_interning (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   67)
* feature_validation (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (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): HTMLParser Methods.
                                                             (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  150)
* fetchmany() (método sqlite3.Cursor):   Cursor objects.     (line  130)
* fetchone() (método sqlite3.Cursor):    Cursor objects.     (line  123)
* 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  311)
* 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  209)
* fieldnames (atributo csv.DictReader):  Objetos Reader.     (line   33)
* fields (atributo uuid.UUID):           uuid — Objetos UUID conforme RFC 9562.
                                                             (line  100)
* fields() (no módulo dataclasses):      Conteúdo do módulo<8>.
                                                             (line  339)
* FIFOTYPE (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  358)
* file (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   83)
* file (atributo pyclbr.Class):          Objetos Class.      (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   61)
* 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  471)
* 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  306)
* 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  329)
* 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  375)
* 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   79)
* 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  601)
* files() (método importlib.resources.abc.TraversableResources): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  174)
* 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)
* fill() (no módulo turtle):             Preenchimento.      (line   17)
* fillcolor() (no módulo turtle):        Controle da Cor.    (line   58)
* 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  136)
* 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  281)
* filterfalse() (no módulo fnmatch):     fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   88)
* filterfalse() (no módulo itertools):   Funções do intertools.
                                                             (line  293)
* filterwarnings() (no módulo warnings): Funções disponíveis.
                                                             (line  106)
* Final (no módulo typing):              Formas especiais.   (line  236)
* 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)
* finalize_dict() (no módulo compression.zstd): Dicionários de Zstandard.
                                                             (line   27)
* find_class() (método pickle.Unpickler): Interface do módulo.
                                                             (line  320)
* find_class() (protocolo pickle):       Restringindo globais.
                                                             (line    6)
* find_library() (no módulo ctypes.util): Funções utilitárias.
                                                             (line  128)
* find_longest_match() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line   64)
* find_msvcrt() (no módulo ctypes.util): Funções utilitárias.
                                                             (line  137)
* 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):                   Métodos de string.  (line  166)
* 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  297)
* 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  198)
* findlinestarts() (no módulo dis):      Funções de análise. (line  181)
* 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   99)
* 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  144)
* 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  554)
* flash() (no módulo curses):            Funções<6>.         (line  147)
* 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  742)
* float_info (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  661)
* float_repr_style (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  778)
* 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  178)
* floor() (no módulo math):              Tipos numéricos — int float complex.
                                                             (line  117)
* 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  104)
* FLUSH_BLOCK (atributo compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  141)
* FLUSH_FRAME (atributo compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  149)
* flush_headers() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  331)
* flush_std_streams() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  431)
* flush() (método bz2.BZ2Compressor):    Des compressão incremental.
                                                             (line   25)
* flush() (método compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  100)
* flush() (método io.BufferedWriter):    Buffered Streams.   (line  124)
* 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   25)
* flush() (método lzma.LZMACompressor):  Comprimindo e descomprimindo dados na memória<2>.
                                                             (line   94)
* flush() (método mailbox.Mailbox):      Mailbox objects.    (line  249)
* 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  220)
* flush() (método zlib.Decompress):      zlib — Compactação compatível com gzip.
                                                             (line  295)
* flushinp() (no módulo curses):         Funções<6>.         (line  154)
* FlushKey() (no módulo winreg):         Funções<14>.        (line  243)
* fma() (método decimal.Context):        Objetos de contexto.
                                                             (line  336)
* fma() (método decimal.Decimal):        Objetos de Decimal. (line  294)
* 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  933)
* 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   75)
* ForkingUDPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* ForkingUnixDatagramServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* ForkingUnixStreamServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* 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  458)
* 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 (classe em annotationlib):      Classes<5>.         (line    6)
* format_call_graph() (no módulo asyncio): Call Graph Introspection.
                                                             (line   70)
* 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.
                                                             (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.
                                                             (line  118)
* format_exception() (no módulo traceback): Funções de nível de módulo.
                                                             (line  148)
* format_field() (método string.Formatter): Formatação personalizada de strings.
                                                             (line  108)
* 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.
                                                             (line  108)
* format_map() (método str):             Métodos de string.  (line  219)
* FORMAT_SIMPLE (opcode):                Instruções em bytecode do Python.
                                                             (line 1235)
* format_spec (atributo string.templatelib.Interpolation): Tipos.
                                                             (line  258)
* format_stack_entry() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  463)
* format_stack() (no módulo traceback):  Funções de nível de módulo.
                                                             (line  173)
* format_string() (no módulo locale):    locale — Serviços de internacionalização.
                                                             (line  469)
* format_tb() (no módulo traceback):     Funções de nível de módulo.
                                                             (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 1247)
* 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  166)
* 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):                 Métodos de string.  (line  188)
* 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<21>.       (line   31)
* FormatError() (no módulo ctypes):      Funções utilitárias.
                                                             (line  165)
* 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   97)
* 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 (atributo annotationlib.Format): Classes<5>.    (line   30)
* ForwardRef (classe em annotationlib):  Classes<5>.         (line   50)
* ForwardRef (classe em typing):         Auxiliares de introspecção.
                                                             (line  157)
* 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 compression.zstd): Diversos<3>.       (line   12)
* 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  202)
* free (C function):                     Visão Geral<4>.     (line   36)
* free_tool_id() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line   18)
* 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  278)
* freeze_support() (no módulo multiprocessing): Diversos<5>. (line   49)
* freeze() (no módulo gc):               gc — Interface para o coletor de lixo.
                                                             (line  238)
* 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  188)
* from_decimal() (método de classe fractions.Fraction): fractions — Números racionais.
                                                             (line  152)
* 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  141)
* 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_number() (método de classe complex): Métodos adicionais em números complexos.
                                                             (line   10)
* from_number() (método de classe decimal.Decimal): Objetos de Decimal.
                                                             (line  279)
* from_number() (método de classe float): Métodos adicionais em ponto flutuante.
                                                             (line   10)
* from_number() (método de classe fractions.Fraction): fractions — Números racionais.
                                                             (line  161)
* 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   51)
* 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   83)
* 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   60)
* 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  177)
* 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  525)
* FrozenSet (classe em typing):          Apelidos de tipos embutidos.
                                                             (line   42)
* frozenset (classe interna):            Tipo conjuntos — set frozenset.
                                                             (line   35)
* 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  104)
* 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  120)
* fsencode() (no módulo os):             Parâmetros de processo.
                                                             (line  107)
* fspath() (no módulo os):               Parâmetros de processo.
                                                             (line  133)
* 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   96)
* fstring <1>:                           Literais de string brutas.
                                                             (line   26)
* fstring <2>:                           Métodos de string.  (line  799)
* 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  481)
* 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  263)
* 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  131)
* 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  650)
* função chave:                          Glossário.          (line  958)
* função de anotação:                    Glossário.          (line   39)
* função de avaliação:                   Glossário.          (line  536)
* função de corrotina:                   Glossário.          (line  394)
* 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 1018)
* função de perfilação <3>:              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1711)
* 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 1023)
* função de rastreamento <3>:            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1802)
* função de retorno:                     Glossário.          (line  278)
* função embutida;__import__:            Importando módulos<2>.
                                                             (line   32)
* função embutida;abs:                   Emulando tipos numéricos.
                                                             (line  121)
* 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  197)
* 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  134)
* função embutida;complexo:              Emulando tipos numéricos.
                                                             (line  128)
* função embutida;complexo <1>:          Tipos numéricos — int float complex.
                                                             (line   33)
* 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  652)
* 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 1193)
* função embutida;float:                 Protocolo de número.
                                                             (line  266)
* 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  437)
* função embutida;help:                  Interface com o sistema operacional.
                                                             (line   20)
* função embutida;id:                    Objetos valores e tipos.
                                                             (line   12)
* função embutida;int:                   Emulando tipos numéricos.
                                                             (line  128)
* função embutida;int <1>:               Tipos numéricos — int float complex.
                                                             (line   33)
* 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  234)
* 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  128)
* função embutida;ponto flutuante <1>:   Tipos numéricos — int float complex.
                                                             (line   33)
* 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>:               Protocolo de número.
                                                             (line   80)
* função embutida;pow <4>:               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   94)
* função embutida;repr <2>:              Protocolo de objeto.
                                                             (line  331)
* função embutida;repr <3>:              PyTypeObject Slots. (line  375)
* função embutida;round:                 Emulando tipos numéricos.
                                                             (line  151)
* função embutida;staticmethod:          Implementing functions and methods.
                                                             (line  204)
* função embutida;tipo:                  Objetos valores e tipos.
                                                             (line   12)
* 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  124)
* função embutida;tupla <1>:             Objeto List.        (line  164)
* função genérica:                       Glossário.          (line  738)
* 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  102)
* 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 1042)
* 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):            Future Object.      (line    6)
* Future (classe em concurrent.futures): Future Objects.     (line   10)
* future_add_to_awaited_by() (no módulo asyncio): Low level utility functions.
                                                             (line   14)
* future_discard_from_awaited_by() (no módulo asyncio): Low level utility functions.
                                                             (line   26)
* future;instrução:                      Instruções future.  (line    6)
* FutureWarning:                         Avisos.             (line   56)
* fwalk() (no módulo os):                Arquivos e diretórios.
                                                             (line 1834)
* gaierror:                              Exceções<18>.       (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 1314)
* 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;importação:                    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  272)
* 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  384)
* 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  704)
* gerador <1>:                           Glossário.          (line  704)
* gerador assíncrono:                    Glossário.          (line  104)
* 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  361)
* gerenciador de contexto assíncrono:    Glossário.          (line   97)
* gerenciador de janela (widgets):       O Gerenciador de Janela.
                                                             (line    6)
* GET_AITER (opcode):                    Instruções em bytecode do Python.
                                                             (line  337)
* get_all_breaks() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  425)
* get_all_start_methods() (no módulo multiprocessing): Diversos<5>.
                                                             (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  346)
* get_annotate_from_class_namespace() (no módulo annotationlib): Funções<12>.
                                                             (line  106)
* get_annotations() (no módulo annotationlib): Funções<12>.  (line  118)
* 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   69)
* get_args() (no módulo typing):         Auxiliares de introspecção.
                                                             (line   87)
* get_asyncgen_hooks() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1086)
* get_attribute() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  633)
* GET_AWAITABLE (opcode):                Instruções em bytecode do Python.
                                                             (line  318)
* 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  401)
* get_break() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  410)
* get_breaks() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  415)
* get_buffer() (método asyncio.BufferedProtocol): Protocolos de Streaming Bufferizados.
                                                             (line   21)
* get_bytes() (método mailbox.Mailbox):  Mailbox objects.    (line  167)
* 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_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  216)
* get_code() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  416)
* 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<5>.    (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 1100)
* get_count() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line  146)
* get_current_history_length() (no módulo readline): Lista de histórico.
                                                             (line   14)
* get_current() (no módulo concurrent.interpreters): Referência<4>.
                                                             (line   13)
* get_data() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  338)
* get_data() (método importlib.abc.ResourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  194)
* 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  154)
* 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   70)
* get_default_backend() (no módulo pdb): pdb — O depurador do Python.
                                                             (line  240)
* 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   34)
* 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  181)
* get_escdelay() (no módulo curses):     Funções<6>.         (line  464)
* 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   28)
* get_exec_path() (no módulo os):        Parâmetros de processo.
                                                             (line  194)
* 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   58)
* get_file_breaks() (método bdb.Bdb):    bdb — Framework do depurador.
                                                             (line  420)
* get_file() (método mailbox.Babyl):     Babyl objects.      (line   49)
* get_file() (método mailbox.Mailbox):   Mailbox objects.    (line  183)
* 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  291)
* get_filename() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  334)
* 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_frame_info() (no módulo compression.zstd): Diversos<3>.
                                                             (line    6)
* 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  263)
* 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   39)
* 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   43)
* 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): Template strings $-strings.
                                                             (line   88)
* 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   57)
* 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   29)
* get_instructions() (no módulo dis):    Funções de análise. (line  152)
* get_int_max_str_digits() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  891)
* get_interpreter() (no módulo zipapp):  API do Python.      (line   85)
* GET_ITER (opcode):                     Instruções em bytecode do Python.
                                                             (line  234)
* 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  189)
* GET_LEN (opcode):                      Instruções em bytecode do Python.
                                                             (line  518)
* get_line_buffer() (no módulo readline): Buffer de linha.   (line    8)
* get_lineno() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   85)
* 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):    Future Object.      (line  137)
* get_loop() (método asyncio.Runner):    Runner context manager.
                                                             (line   64)
* get_loop() (método asyncio.Server):    Objetos Server.     (line   69)
* get_main() (no módulo concurrent.interpreters): Referência<4>.
                                                             (line   18)
* 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): Mailbox objects.   (line  160)
* 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  199)
* get_name() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   73)
* get_namespace() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  310)
* get_namespaces() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  306)
* 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  174)
* 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   74)
* 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   64)
* 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  339)
* 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  306)
* 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   92)
* 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   29)
* 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  107)
* get_protocol() (método asyncio.BaseTransport): Base Transport.
                                                             (line   88)
* get_proxy_response_headers() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  135)
* 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  161)
* get_referents() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  178)
* get_referrers() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  156)
* get_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  142)
* 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   64)
* 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  231)
* get_source() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  434)
* 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  125)
* get_stack() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  454)
* get_start_method() (no módulo multiprocessing): Diversos<5>.
                                                             (line  100)
* get_starttag_text() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   32)
* 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   93)
* 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): Mailbox objects.    (line  175)
* 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  479)
* get_task_factory() (método asyncio.loop): Criando Futures e Tasks.
                                                             (line   81)
* 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  151)
* get_token() (método shlex.shlex):      shlex Objects.      (line    8)
* get_tool() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line   24)
* 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  204)
* 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   70)
* 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  238)
* 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  189)
* 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):        Mailbox objects.    (line  148)
* get() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  200)
* get() (método multiprocessing.Queue):  Encadeamentos e filas.
                                                             (line  158)
* get() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  252)
* 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  268)
* get() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   64)
* get() (no módulo webbrowser):          webbrowser — Controlador de navegador web conveniente.
                                                             (line  116)
* 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  790)
* getandroidapilevel() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  812)
* 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  184)
* 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   22)
* 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  201)
* 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  824)
* getdefaultlocale() (no módulo locale): locale — Serviços de internacionalização.
                                                             (line  355)
* 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  829)
* 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  204)
* 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  420)
* getEntityResolver() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   39)
* getenv() (no módulo os):               Parâmetros de processo.
                                                             (line  162)
* getenvb() (no módulo os):              Parâmetros de processo.
                                                             (line  178)
* getErrorHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   50)
* geteuid() (no módulo os):              Parâmetros de processo.
                                                             (line  212)
* 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  115)
* getfilesystemencodeerrors() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  872)
* getfilesystemencoding() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  838)
* 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  218)
* 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  227)
* getgroups() (no módulo os):            Parâmetros de processo.
                                                             (line  239)
* 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  586)
* 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  586)
* 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  123)
* 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  213)
* getiterfunc (C type):                  Slot Type typedefs. (line   86)
* getitimer() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  451)
* getkey() (método curses.window):       Window Objects.     (line  251)
* GetLastError() (no módulo ctypes):     Funções utilitárias.
                                                             (line  173)
* 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  382)
* 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  264)
* 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   77)
* 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):  TarFile Objects.    (line  104)
* getmembers_static() (no módulo inspect): Tipos e membros.  (line  370)
* getmembers() (método tarfile.TarFile): TarFile Objects.    (line  112)
* getmembers() (no módulo inspect):      Tipos e membros.    (line  357)
* 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  386)
* getmouse() (no módulo curses):         Funções<6>.         (line  160)
* 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  191)
* getName() (método threading.Thread):   Thread objects.     (line  196)
* 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):   TarFile Objects.    (line  118)
* 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 9562.
                                                             (line  179)
* getobjects() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  991)
* 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  100)
* getOptionalRelease() (método __future__._Feature): Conteúdo do módulo<9>.
                                                             (line   72)
* 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   52)
* 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   52)
* getpgid() (no módulo os):              Parâmetros de processo.
                                                             (line  275)
* getpgrp() (no módulo os):              Parâmetros de processo.
                                                             (line  282)
* getpid() (no módulo os):               Parâmetros de processo.
                                                             (line  288)
* getpos() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   28)
* getppid() (no módulo os):              Parâmetros de processo.
                                                             (line  295)
* getpreferredencoding() (no módulo locale): locale — Serviços de internacionalização.
                                                             (line  394)
* getpriority() (no módulo os):          Parâmetros de processo.
                                                             (line  306)
* getprofile() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1016)
* 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  211)
* 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  920)
* getrefcount() (no módulo sys):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  899)
* GetReparseDeferralEnabled() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  111)
* getresgid() (no módulo os):            Parâmetros de processo.
                                                             (line  354)
* getresponse() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line   76)
* getresuid() (no módulo os):            Parâmetros de processo.
                                                             (line  345)
* 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   63)
* 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  207)
* getshapes() (no módulo turtle):        Configurações e métodos especiais.
                                                             (line   65)
* getsid() (no módulo os):               Parâmetros de processo.
                                                             (line  543)
* getsignal() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  295)
* 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  213)
* getsizeof() (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  927)
* 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  950)
* 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  178)
* gettarinfo() (método tarfile.TarFile): TarFile Objects.    (line  305)
* gettempdir() (no módulo tempfile):     tempfile — Generate temporary files and directories.
                                                             (line  318)
* gettempdirb() (no módulo tempfile):    tempfile — Generate temporary files and directories.
                                                             (line  350)
* gettempprefix() (no módulo tempfile):  tempfile — Generate temporary files and directories.
                                                             (line  356)
* gettempprefixb() (no módulo tempfile): tempfile — Generate temporary files and directories.
                                                             (line  361)
* 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 1021)
* gettrace() (no módulo threading):      Referência<2>.      (line  133)
* getturtle() (no módulo turtle):        Métodos Especiais da Tartaruga.
                                                             (line   52)
* getType() (método xml.sax.xmlreader.Attributes): The Attributes Interface.
                                                             (line   19)
* getuid() (no módulo os):               Parâmetros de processo.
                                                             (line  363)
* getunicodeinternedsize() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  806)
* 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   57)
* 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   39)
* getvalue() (método io.StringIO):       E/S de texto<2>.    (line  269)
* 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  184)
* getwindowsversion() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1031)
* 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  282)
* gid (atributo tarfile.TarInfo):        Objetos TarInfo.    (line  113)
* GIL:                                   Glossário.          (line  756)
* gil (atributo sys.flags):              sys — Parâmetros e funções específicas do sistema.
                                                             (line  617)
* 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   30)
* 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  143)
* 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  386)
* gnu_getopt() (no módulo getopt):       getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line   77)
* GNUTranslations (classe em gettext):   A classe GNUTranslations.
                                                             (line   34)
* GNUTYPE_LONGLINK (no módulo tarfile):  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  370)
* GNUTYPE_LONGNAME (no módulo tarfile):  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  366)
* GNUTYPE_SPARSE (no módulo tarfile):    tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  374)
* 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  254)
* GREATEREQUAL (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  281)
* greedy (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  332)
* 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   72)
* guess_all_extensions() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   70)
* guess_extension() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   55)
* guess_extension() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   83)
* guess_file_type() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   65)
* guess_file_type() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   61)
* guess_scheme() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   14)
* guess_type() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   60)
* 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 da linha de comando.
                                                             (line   14)
* gzip opção de linha de comando; -d:    Opções da linha de comando.
                                                             (line   18)
* gzip opção de linha de comando; -decompress: Opções da linha de comando.
                                                             (line   18)
* gzip opção de linha de comando; -fast: Opções da linha de comando.
                                                             (line   10)
* gzip opção de linha de comando; -h:    Opções da linha de comando.
                                                             (line   22)
* gzip opção de linha de comando; -help: Opções da linha de comando.
                                                             (line   22)
* gzip opção de linha de comando; file:  Opções da 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  226)
* Handle (classe em asyncio):            Tratadores de função de retorno.
                                                             (line    6)
* handle_charref() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   93)
* handle_comment() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line  102)
* handle_data() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   80)
* handle_decl() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line  115)
* handle_defect() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  235)
* handle_endtag() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   64)
* handle_entityref() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   86)
* handle_error() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  148)
* handle_expect_100() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  252)
* handle_one_request() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  246)
* handle_pi() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line  123)
* 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): HTMLParser Methods.
                                                             (line   71)
* handle_starttag() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line   45)
* handle_timeout() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  158)
* handle() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  239)
* handle() (método logging.Handler):     Objetos Handler.    (line   83)
* handle() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   73)
* handle() (método logging.Logger):      Objetos Logger.     (line  375)
* handle() (método logging.NullHandler): NullHandler.        (line   20)
* 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   33)
* 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  191)
* has_default() (método typing.ParamSpec): Criando tipos genéricos e apelidos de tipo.
                                                             (line  510)
* has_default() (método typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  243)
* has_default() (método typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  393)
* 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  196)
* 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  207)
* has_il() (no módulo curses):           Funções<6>.         (line  214)
* has_ipv6 (no módulo socket):           Constantes<8>.      (line  299)
* has_key() (no módulo curses):          Funções<6>.         (line  221)
* 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_PHA (no módulo ssl):               Constantes<9>.      (line  472)
* 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 1143)
* hash_info (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1112)
* hash_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   65)
* hash_randomization (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  597)
* 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  797)
* 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 1322)
* HAVE_CONTEXTVAR (no módulo decimal):   Constantes<4>.      (line   35)
* HAVE_DOCSTRINGS (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  189)
* HAVE_THREADS (no módulo decimal):      Constantes<4>.      (line   28)
* HCI_CHANNEL_CONTROL (no módulo socket): Constantes<8>.     (line  390)
* HCI_CHANNEL_LOGGING (no módulo socket): Constantes<8>.     (line  390)
* HCI_CHANNEL_MONITOR (no módulo socket): Constantes<8>.     (line  390)
* HCI_CHANNEL_RAW (no módulo socket):    Constantes<8>.      (line  390)
* HCI_CHANNEL_USER (no módulo socket):   Constantes<8>.      (line  390)
* HCI_DATA_DIR (no módulo socket):       Constantes<8>.      (line  368)
* HCI_DEV_NONE (no módulo socket):       Constantes<8>.      (line  381)
* HCI_FILTER (no módulo socket):         Constantes<8>.      (line  368)
* HCI_TIME_STAMP (no módulo socket):     Constantes<8>.      (line  368)
* 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  276)
* HeaderParseError:                      email errors Classes de Exceção e Defeito.
                                                             (line   26)
* HeaderParser (classe em email.parser): Parser API.         (line  108)
* 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  156)
* 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_max() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line   97)
* heapify() (no módulo heapq):           heapq — Algoritmo de fila heap.
                                                             (line   74)
* heapmin() (no módulo msvcrt):          Outras funções<4>.  (line    6)
* heappop_max() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line  110)
* heappop() (no módulo heapq):           heapq — Algoritmo de fila heap.
                                                             (line   60)
* heappush_max() (no módulo heapq):      heapq — Algoritmo de fila heap.
                                                             (line  103)
* heappush() (no módulo heapq):          heapq — Algoritmo de fila heap.
                                                             (line   55)
* heappushpop_max() (no módulo heapq):   heapq — Algoritmo de fila heap.
                                                             (line  119)
* heappushpop() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line   67)
* heapreplace_max() (no módulo heapq):   heapq — Algoritmo de fila heap.
                                                             (line  128)
* heapreplace() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line   78)
* 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   85)
* 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<18>.       (line   13)
* hex (atributo uuid.UUID):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  145)
* hex() (método bytearray):              Objetos Bytearray.  (line   61)
* hex() (método bytes):                  Objetos bytes.      (line   90)
* hex() (método float):                  Métodos adicionais em ponto flutuante.
                                                             (line   53)
* hex() (método memoryview):             Memory Views.       (line  201)
* 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 1156)
* 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<23>.       (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  125)
* 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  287)
* 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<6>.
                                                             (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  150)
* HOME <5>:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  168)
* 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  157)
* HOMEPATH:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  157)
* 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  102)
* hostmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  322)
* 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  141)
* hosts() (método ipaddress.IPv6Network): Objetos de rede.   (line  340)
* hour (atributo datetime.datetime):     Objetos datetime.   (line  328)
* hour (atributo datetime.time):         Objetos time.       (line   51)
* hresult (atributo ctypes.COMError):    Exceções<10>.       (line   15)
* HRESULT (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  234)
* 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 — Simple HTML and XHTML parser.
                                                             (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 — Simple HTML and XHTML parser.
                                                             (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 — HTTP modules.
                                                             (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 — HTTP modules.
                                                             (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<5>.
                                                             (line   21)
* http.server opção de linha de comando; -bind: Interface de linha de comando<5>.
                                                             (line   21)
* http.server opção de linha de comando; -cgi: Interface de linha de comando<5>.
                                                             (line   54)
* http.server opção de linha de comando; -d: Interface de linha de comando<5>.
                                                             (line   34)
* http.server opção de linha de comando; -directory: Interface de linha de comando<5>.
                                                             (line   34)
* http.server opção de linha de comando; -p: Interface de linha de comando<5>.
                                                             (line   44)
* http.server opção de linha de comando; -protocol: Interface de linha de comando<5>.
                                                             (line   44)
* http.server opção de linha de comando; -tls-cert: Interface de linha de comando<5>.
                                                             (line   70)
* http.server opção de linha de comando; -tls-key: Interface de linha de comando<5>.
                                                             (line   78)
* http.server opção de linha de comando; -tls-password-file: Interface de linha de comando<5>.
                                                             (line   86)
* http.server opção de linha de comando; port: Interface de linha de comando<5>.
                                                             (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  407)
* 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  338)
* httpd:                                 http server — HTTP servers.
                                                             (line    8)
* HTTPDefaultErrorHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  329)
* HTTPDigestAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  434)
* 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  494)
* 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  458)
* 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  364)
* HTTPPasswordMgrWithDefaultRealm (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  368)
* HTTPPasswordMgrWithPriorAuth (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  374)
* HTTPRedirectHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  334)
* 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  462)
* HTTPSServer (classe em http.server):   http server — HTTP servers.
                                                             (line   47)
* HTTPStatus (classe em http):           http — HTTP modules.
                                                             (line   28)
* HV_GUID_BROADCAST (no módulo socket):  Constantes<8>.      (line  442)
* HV_GUID_CHILDREN (no módulo socket):   Constantes<8>.      (line  442)
* HV_GUID_LOOPBACK (no módulo socket):   Constantes<8>.      (line  442)
* HV_GUID_PARENT (no módulo socket):     Constantes<8>.      (line  442)
* HV_GUID_WILDCARD (no módulo socket):   Constantes<8>.      (line  442)
* HV_GUID_ZERO (no módulo socket):       Constantes<8>.      (line  442)
* HV_PROTOCOL_RAW (no módulo socket):    Constantes<8>.      (line  442)
* HVSOCKET_ADDRESS_FLAG_PASSTHRU (no módulo socket): Constantes<8>.
                                                             (line  442)
* HVSOCKET_CONNECT_TIMEOUT (no módulo socket): Constantes<8>.
                                                             (line  442)
* HVSOCKET_CONNECT_TIMEOUT_MAX (no módulo socket): Constantes<8>.
                                                             (line  442)
* HVSOCKET_CONNECTED_SUSPEND (no módulo socket): Constantes<8>.
                                                             (line  442)
* 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 concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   14)
* id (atributo concurrent.interpreters.Queue): Communicating Between Interpreters.
                                                             (line   16)
* id (atributo ssl.SSLSession):          SSL session.        (line   12)
* id() (método unittest.TestCase):       Casos de teste.     (line  838)
* idcok() (método curses.window):        Window Objects.     (line  294)
* ident (atributo select.kevent):        Kevent Objects.     (line    8)
* ident (atributo threading.Thread):     Thread objects.     (line  204)
* identchars (atributo cmd.Cmd):         Objetos Cmd.        (line  138)
* identidade de um objeto:               Objetos valores e tipos.
                                                             (line   12)
* identidade;teste:                      Operações de teste de pertinência.
                                                             (line   41)
* identificador:                         Nomes identificadores e palavras reservadas.
                                                             (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  818)
* idle opção de linha de comando; -:     Uso na linha de comando<6>.
                                                             (line   49)
* idle opção de linha de comando; -c:    Uso na linha de comando<6>.
                                                             (line   13)
* idle opção de linha de comando; -d:    Uso na linha de comando<6>.
                                                             (line   19)
* idle opção de linha de comando; -e:    Uso na linha de comando<6>.
                                                             (line   23)
* idle opção de linha de comando; -h:    Uso na linha de comando<6>.
                                                             (line   27)
* idle opção de linha de comando; -i:    Uso na linha de comando<6>.
                                                             (line   31)
* idle opção de linha de comando; -r:    Uso na linha de comando<6>.
                                                             (line   35)
* idle opção de linha de comando; -s:    Uso na linha de comando<6>.
                                                             (line   39)
* idle opção de linha de comando; -t:    Uso na linha de comando<6>.
                                                             (line   45)
* IDLE_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   89)
* idle() (método imaplib.IMAP4):         Objetos IMAP4.      (line  126)
* IDLESTARTUP:                           IDLE<36>.           (line  176)
* IDLESTARTUP <1>:                       IDLE<40>.           (line    9)
* IDLESTARTUP <2>:                       IDLE<46>.           (line    9)
* IDLESTARTUP <3>:                       Startup and Code Execution.
                                                             (line    7)
* IDLESTARTUP <4>:                       Uso na linha de comando<6>.
                                                             (line   41)
* idlok() (método curses.window):        Window Objects.     (line  302)
* IEEE_CONTEXT_MAX_BITS (no módulo decimal): Constantes<4>.  (line   25)
* IEEEContext() (no módulo decimal):     Objetos de contexto.
                                                             (line   61)
* 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   82)
* ignorableWhitespace() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  148)
* ignore (atributo bdb.Breakpoint):      bdb — Framework do depurador.
                                                             (line  121)
* IGNORE (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  153)
* ignore (pdb command):                  Comandos de depuração.
                                                             (line  168)
* ignore_environment (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  585)
* 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  213)
* 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 1134)
* imap_unordered() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  145)
* imap() (método multiprocessing.pool.Pool): Process Pools.  (line  130)
* 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  308)
* imod() (no módulo operator):           Operadores in-place.
                                                             (line   65)
* imortal:                               Glossário.          (line  825)
* impl_detail() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  560)
* implementation (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1179)
* Import (classe em ast):                Importações.        (line    6)
* 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  862)
* import_module() (no módulo importlib): Funções<13>.        (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  853)
* importação:                            Glossário.          (line  857)
* importador:                            Glossário.          (line  862)
* ImportError:                           Exceções concretas. (line   52)
* ImportFrom (classe em ast):            Importações.        (line   20)
* ImportWarning:                         Avisos.             (line   62)
* 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  839)
* 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;tipos:              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  316)
* 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<16>.       (line   44)
* incr_item():                           Exceções<24>.       (line   82)
* incr_item() <1>:                       Exceções<24>.       (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  291)
* 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  369)
* 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 memoryview):           Memory Views.       (line  394)
* 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  172)
* index() (método str):                  Métodos de string.  (line  235)
* 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  109)
* IndexError:                            Exceções concretas. (line   80)
* indexOf() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  218)
* IndexSizeErr:                          Exceções<23>.       (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 1126)
* 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  746)
* infj (no módulo cmath):                Constantes<3>.      (line   26)
* info (atributo pathlib.Path):          Consultando tipo de arquivo e status.
                                                             (line  177)
* 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   72)
* 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  129)
* informações de configuração:           sysconfig — Fornece acesso às informações de configuração do Python.
                                                             (line   10)
* início (atributo de objeto fatia):     Objetos slice.      (line   10)
* init_color() (no módulo curses):       Funções<6>.         (line  235)
* init_pair() (no módulo curses):        Funções<6>.         (line  247)
* init() (no módulo mimetypes):          mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  100)
* inited (no módulo mimetypes):          mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  142)
* initgroups() (no módulo os):           Parâmetros de processo.
                                                             (line  372)
* 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  261)
* InitVar (classe em dataclasses):       Conteúdo do módulo<8>.
                                                             (line  330)
* inode() (método os.DirEntry):          Arquivos e diretórios.
                                                             (line 1013)
* 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  267)
* insch() (método curses.window):        Window Objects.     (line  322)
* insdelln() (método curses.window):     Window Objects.     (line  329)
* 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  337)
* insnstr() (método curses.window):      Window Objects.     (line  342)
* 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  564)
* inspect opção de linha de comando; -details: Interface de linha de comando<8>.
                                                             (line   13)
* InspectLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  210)
* insstr() (método curses.window):       Window Objects.     (line  353)
* install_opener() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  112)
* 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  363)
* instream (atributo shlex.shlex):       shlex Objects.      (line  146)
* instrução:                             Glossário.          (line 1557)
* 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   66)
* instrução;break <4>:                   Cláusula finally.   (line   27)
* 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   65)
* instrução;continue <4>:                Cláusula finally.   (line   27)
* 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:                      A instrução import. (line    6)
* instrução;importação:                  Módulos<3>.         (line    6)
* instrução;importação <1>:              Funções embutidas<3>.
                                                             (line 2279)
* instrução;importação <2>:              site — Gancho de configuração específico do site.
                                                             (line   59)
* 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   66)
* instrução;return <2>:                  Cláusula finally.   (line   27)
* 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   39)
* 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 9562.
                                                             (line  149)
* int (classe interna):                  Funções embutidas<3>.
                                                             (line  986)
* int_info (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1238)
* int_max_str_digits (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  610)
* 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  385)
* 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  567)
* 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  867)
* interface de buffer;(veja o protocolo de buffer): Protocolo Iterador.
                                                             (line   67)
* 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 1285)
* 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   84)
* 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)
* Interpolation (classe em ast):         Literais<3>.        (line   93)
* Interpolation (classe em string.templatelib): Tipos.       (line  192)
* InterpolationDepthError:               Exceções<9>.        (line   45)
* InterpolationError:                    Exceções<9>.        (line   40)
* InterpolationMissingOptionError:       Exceções<9>.        (line   52)
* interpolations (atributo string.templatelib.Template): Tipos.
                                                             (line   74)
* InterpolationSyntaxError:              Exceções<9>.        (line   57)
* interpretado:                          Glossário.          (line  879)
* interpretador:                         Componentes de Alto Nível.
                                                             (line    6)
* interpretador, prompts:                sys — Parâmetros e funções específicas do sistema.
                                                             (line 1679)
* Interpreter (classe em concurrent.interpreters): Objetos interpretador.
                                                             (line    6)
* 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)
* InterpreterError:                      Exceções<13>.       (line    6)
* InterpreterNotFoundError:              Exceções<13>.       (line   11)
* InterpreterPoolExecutor (classe em concurrent.futures): InterpreterPoolExecutor.
                                                             (line   52)
* interrupt_main() (no módulo _thread):  _thread— API de segmentação de baixo nível.
                                                             (line   58)
* interrupt() (método multiprocessing.Process): Process e exceções.
                                                             (line  209)
* interrupt() (método sqlite3.Connection): Connection objects.
                                                             (line  339)
* InterruptedError:                      Exceções de sistema operacional.
                                                             (line   74)
* intersection_update() (método frozenset): Tipo conjuntos — set frozenset.
                                                             (line  184)
* intersection() (método frozenset):     Tipo conjuntos — set frozenset.
                                                             (line  107)
* IntFlag (classe em enum):              Tipos de Dados<2>.  (line  553)
* intro (atributo cmd.Cmd):              Objetos Cmd.        (line  153)
* InuseAttributeErr:                     Exceções<23>.       (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  119)
* InvalidAccessErr:                      Exceções<23>.       (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<13>.    (line   41)
* invalidate_caches() (no módulo platform): Multiplataforma. (line  178)
* 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<23>.       (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<23>.       (line   57)
* InvalidOperation (classe em decimal):  Sinais.             (line   53)
* InvalidStateErr:                       Exceções<23>.       (line   61)
* InvalidStateError:                     Exception classes.  (line   26)
* InvalidStateError <1>:                 Exceções<16>.       (line   30)
* InvalidTZPathWarning:                  Exceptions and warnings.
                                                             (line   12)
* InvalidURL:                            http client — HTTP protocol client.
                                                             (line  141)
* InvalidWriteError:                     Exceções<9>.        (line   91)
* 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  119)
* invocação:                             Tipos chamáveis.    (line    6)
* IO (classe em typing):                 ABCs e protocolos 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  280)
* ioctl() (método socket.socket):        Socket Objects.     (line  179)
* ioctl() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  115)
* IOError:                               Exceções concretas. (line  520)
* 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  308)
* 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  195)
* IPv6Address (classe em ipaddress):     Objetos de endereço.
                                                             (line  227)
* IPv6Interface (classe em ipaddress):   Objetos de interface.
                                                             (line   63)
* IPv6Network (classe em ipaddress):     Objetos de rede.    (line  259)
* 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  191)
* is_active() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  122)
* is_alive() (método multiprocessing.Process): Process e exceções.
                                                             (line  127)
* is_alive() (método threading.Thread):  Thread objects.     (line  230)
* 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  239)
* is_anonymous (atributo ctypes.CField): Structured data types.
                                                             (line  299)
* is_apple (no módulo test.support):     test support — Utilitários para o conjunto de teste do Python.
                                                             (line   57)
* is_apple_mobile (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   53)
* is_assigned() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  270)
* 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_bitfield (atributo ctypes.CField):  Structured data types.
                                                             (line  281)
* 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  340)
* is_canonical() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  302)
* is_char_device() (método pathlib.Path): Consultando tipo de arquivo e status.
                                                             (line  150)
* IS_CHARACTER_JUNK() (no módulo difflib): difflib — Helpers for computing deltas.
                                                             (line  362)
* is_check_supported() (no módulo lzma): Diversos<4>.        (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_comp_cell() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  281)
* is_comp_iter() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  274)
* is_dataclass() (no módulo dataclasses): Conteúdo do módulo<8>.
                                                             (line  482)
* is_declared_global() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  230)
* is_dir() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  550)
* is_dir() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  107)
* is_dir() (método os.DirEntry):         Arquivos e diretórios.
                                                             (line 1024)
* is_dir() (método pathlib.Path):        Consultando tipo de arquivo e status.
                                                             (line   82)
* is_dir() (método pathlib.types.PathInfo): Protocolos.      (line   26)
* is_dir() (método zipfile.Path):        Objetos Path.       (line   59)
* is_dir() (método zipfile.ZipInfo):     Objetos ZipInfo.    (line   45)
* is_emscripten (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   45)
* is_enabled() (no módulo faulthandler): Fault handler state.
                                                             (line   42)
* 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  136)
* is_file() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  554)
* is_file() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  111)
* is_file() (método os.DirEntry):        Arquivos e diretórios.
                                                             (line 1054)
* is_file() (método pathlib.Path):       Consultando tipo de arquivo e status.
                                                             (line   69)
* is_file() (método pathlib.types.PathInfo): Protocolos.     (line   38)
* is_file() (método zipfile.Path):       Objetos Path.       (line   63)
* is_finalized() (no módulo gc):         gc — Interface para o coletor de lixo.
                                                             (line  218)
* is_finalizing() (no módulo sys):       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1311)
* is_finite() (método decimal.Context):  Objetos de contexto.
                                                             (line  345)
* is_finite() (método decimal.Decimal):  Objetos de Decimal. (line  309)
* is_free_class() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  250)
* is_free() (método symtable.Symbol):    Examining Symbol Tables.
                                                             (line  245)
* is_global (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  141)
* is_global (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  288)
* is_global() (método symtable.Symbol):  Examining Symbol Tables.
                                                             (line  222)
* 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  207)
* is_infinite() (método decimal.Context): Objetos de contexto.
                                                             (line  350)
* is_infinite() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  314)
* is_integer() (método float):           Métodos adicionais em ponto flutuante.
                                                             (line   35)
* is_integer() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  135)
* is_integer() (método int):             Métodos adicionais em tipos inteiros.
                                                             (line  172)
* is_junction() (método os.DirEntry):    Arquivos e diretórios.
                                                             (line 1091)
* is_junction() (método pathlib.Path):   Consultando tipo de arquivo e status.
                                                             (line  104)
* 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  377)
* is_link_local (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  190)
* is_link_local (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   85)
* is_link_local (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  298)
* is_link_local (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  316)
* is_local() (método symtable.Symbol):   Examining Symbol Tables.
                                                             (line  235)
* is_loopback (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  185)
* is_loopback (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   83)
* is_loopback (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  296)
* is_loopback (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  314)
* is_mount() (método pathlib.Path):      Consultando tipo de arquivo e status.
                                                             (line  112)
* is_multicast (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   98)
* is_multicast (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   75)
* is_multicast (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  284)
* is_multicast (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  306)
* 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  288)
* is_nan() (método decimal.Context):     Objetos de contexto.
                                                             (line  355)
* is_nan() (método decimal.Decimal):     Objetos de Decimal. (line  319)
* is_nested() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   94)
* is_none() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   75)
* is_nonlocal() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  226)
* is_normal() (método decimal.Context):  Objetos de contexto.
                                                             (line  360)
* is_normal() (método decimal.Decimal):  Objetos de Decimal. (line  324)
* is_normalized() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  170)
* is_not_allowed() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   74)
* is_not_none() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line   81)
* 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  841)
* 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  245)
* is_package() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  439)
* 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  212)
* is_private (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  103)
* is_private (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   77)
* is_private (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  286)
* is_private (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  308)
* is_protocol() (no módulo typing):      Auxiliares de introspecção.
                                                             (line  123)
* is_python_build() (no módulo sysconfig): Outras funções<3>.
                                                             (line   48)
* is_qnan() (método decimal.Context):    Objetos de contexto.
                                                             (line  365)
* is_qnan() (método decimal.Decimal):    Objetos de Decimal. (line  330)
* is_reading() (método asyncio.ReadTransport): Read-only Transports.
                                                             (line    6)
* is_referenced() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  203)
* is_relative_to() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  210)
* is_reserved (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  169)
* is_reserved (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   81)
* is_reserved (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  294)
* is_reserved (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  312)
* is_reserved() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  235)
* is_resource_enabled() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  271)
* is_resource() (método importlib.abc.ResourceReader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  503)
* 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_running() (método concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   26)
* is_safe (atributo uuid.UUID):          uuid — Objetos UUID conforme RFC 9562.
                                                             (line  170)
* 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  370)
* is_signed() (método decimal.Decimal):  Objetos de Decimal. (line  335)
* is_site_local (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  300)
* is_site_local (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  367)
* is_skipped_line() (método bdb.Bdb):    bdb — Framework do depurador.
                                                             (line  272)
* is_snan() (método decimal.Context):    Objetos de contexto.
                                                             (line  375)
* is_snan() (método decimal.Decimal):    Objetos de Decimal. (line  341)
* is_socket() (método pathlib.Path):     Consultando tipo de arquivo e status.
                                                             (line  129)
* is_stack_trampoline_active() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1986)
* is_subnormal() (método decimal.Context): Objetos de contexto.
                                                             (line  380)
* is_subnormal() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  346)
* is_symlink() (método os.DirEntry):     Arquivos e diretórios.
                                                             (line 1070)
* is_symlink() (método pathlib.Path):    Consultando tipo de arquivo e status.
                                                             (line   96)
* is_symlink() (método pathlib.types.PathInfo): Protocolos.  (line   50)
* 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  239)
* is_term_resized() (no módulo curses):  Funções<6>.         (line  269)
* 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  194)
* is_type_parameter() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  216)
* is_typeddict() (no módulo typing):     Auxiliares de introspecção.
                                                             (line  138)
* is_unspecified (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  164)
* is_unspecified (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   79)
* is_unspecified (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  292)
* is_unspecified (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  310)
* is_valid() (método string.Template):   Template strings $-strings.
                                                             (line   80)
* is_wasi (no módulo test.support):      test support — Utilitários para o conjunto de teste do Python.
                                                             (line   49)
* is_wintouched() (método curses.window): Window Objects.    (line  384)
* is_zero() (método decimal.Context):    Objetos de contexto.
                                                             (line  385)
* is_zero() (método decimal.Decimal):    Objetos de Decimal. (line  351)
* is_zipfile() (no módulo zipfile):      zipfile — Trabalha com arquivos ZIP.
                                                             (line   89)
* isabs() (no módulo os.path):           os path — Manipulações comuns de nomes de caminhos.
                                                             (line  221)
* isabstract() (no módulo inspect):      Tipos e membros.    (line  567)
* 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):                Métodos de string.  (line  240)
* 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):                Métodos de string.  (line  247)
* 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):                Métodos de string.  (line  258)
* isascii() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  149)
* isasyncgen() (no módulo inspect):      Tipos e membros.    (line  527)
* isasyncgenfunction() (no módulo inspect): Tipos e membros. (line  506)
* 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  485)
* 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  547)
* ischr() (método tarfile.TarInfo):      Objetos TarInfo.    (line  206)
* isclass() (no módulo inspect):         Tipos e membros.    (line  406)
* 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  543)
* iscoroutine() (no módulo asyncio):     Introspecção.       (line   26)
* iscoroutine() (no módulo inspect):     Tipos e membros.    (line  478)
* iscoroutinefunction() (no módulo inspect): Tipos e membros.
                                                             (line  442)
* isctrl() (no módulo curses.ascii):     curses ascii — Utilitários para caracteres ASCII.
                                                             (line  201)
* isDaemon() (método threading.Thread):  Thread objects.     (line  252)
* isdatadescriptor() (no módulo inspect): Tipos e membros.   (line  594)
* isdecimal() (método str):              Métodos de string.  (line  266)
* 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  292)
* 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):                Métodos de string.  (line  275)
* 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  243)
* isdisjoint() (método frozenset):       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  274)
* 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  234)
* 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  539)
* isfunction() (no módulo inspect):      Tipos e membros.    (line  421)
* isfuture() (no módulo asyncio):        Future Functions.   (line    6)
* isgenerator() (no módulo inspect):     Tipos e membros.    (line  438)
* isgeneratorfunction() (no módulo inspect): Tipos e membros.
                                                             (line  426)
* isgetsetdescriptor() (no módulo inspect): Tipos e membros. (line  607)
* isgraph() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  169)
* isidentifier() (método str):           Métodos de string.  (line  286)
* 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  252)
* 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  260)
* 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):                Métodos de string.  (line  305)
* islower() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  173)
* ismemberdescriptor() (no módulo inspect): Tipos e membros. (line  616)
* ismeta() (no módulo curses.ascii):     curses ascii — Utilitários para caracteres ASCII.
                                                             (line  206)
* ismethod() (no módulo inspect):        Tipos e membros.    (line  411)
* ismethoddescriptor() (no módulo inspect): Tipos e membros. (line  571)
* ismethodwrapper() (no módulo inspect): Tipos e membros.    (line  552)
* ismodule() (no módulo inspect):        Tipos e membros.    (line  402)
* ismount() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  270)
* 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):              Métodos de string.  (line  311)
* isocalendar() (método datetime.date):  Objetos date.       (line  276)
* isocalendar() (método datetime.datetime): Objetos datetime.
                                                             (line  669)
* isoformat() (método datetime.date):    Objetos date.       (line  303)
* isoformat() (método datetime.datetime): Objetos datetime.  (line  674)
* isoformat() (método datetime.time):    Objetos time.       (line  188)
* isolado cíclico:                       Glossário.          (line  419)
* isolated (atributo sys.flags):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  570)
* IsolatedAsyncioTestCase (classe em unittest): Casos de teste.
                                                             (line  939)
* isolation_level (atributo sqlite3.Connection): Connection objects.
                                                             (line  776)
* isoweekday() (método datetime.date):   Objetos date.       (line  269)
* isoweekday() (método datetime.datetime): Objetos datetime. (line  663)
* ispackage() (no módulo inspect):       Tipos e membros.    (line  415)
* isprint() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  177)
* isprintable() (método str):            Métodos de string.  (line  321)
* 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  313)
* isReservedKey() (método http.cookies.Morsel): Objetos Morsel.
                                                             (line   79)
* isroutine() (no módulo inspect):       Tipos e membros.    (line  562)
* 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):                Métodos de string.  (line  339)
* 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   78)
* issuperset() (método frozenset):       Tipo conjuntos — set frozenset.
                                                             (line   89)
* 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):                Métodos de string.  (line  349)
* istraceback() (no módulo inspect):     Tipos e membros.    (line  535)
* 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):                Métodos de string.  (line  357)
* 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  288)
* 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  196)
* 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):      Mailbox objects.    (line  142)
* items() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  275)
* 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  471)
* 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   72)
* iter_modules() (no módulo pkgutil):    pkgutil — Utilitário de extensão de pacote.
                                                             (line   92)
* 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  929)
* iterador assíncrono:                   Glossário.          (line  143)
* iterador gerador:                      Glossário.          (line  715)
* iterador gerador assíncrono:           Glossário.          (line  121)
* 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  907)
* iterável assíncrono:                   Glossário.          (line  137)
* iterável;desempacotamento:             Listas de expressões.
                                                             (line   18)
* iterdecode() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  247)
* iterdir() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  546)
* iterdir() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  103)
* 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  234)
* iterencode() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  234)
* 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):  Mailbox objects.    (line  133)
* iterkeys() (método mailbox.Mailbox):   Mailbox objects.    (line  107)
* 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): Mailbox objects.    (line  116)
* 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  232)
* ITIMER_REAL (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  222)
* ITIMER_VIRTUAL (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  227)
* ItimerError:                           Conteúdo do módulo<5>.
                                                             (line  267)
* 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   59)
* 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)
* job_size (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  247)
* join_thread() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  194)
* 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  282)
* join() (método multiprocessing.pool.Pool): Process Pools.  (line  184)
* join() (método multiprocessing.Process): Process e exceções.
                                                             (line  100)
* join() (método queue.Queue):           Objetos Queue.      (line   88)
* join() (método str):                   Métodos de string.  (line  372)
* join() (método threading.Thread):      Thread objects.     (line  146)
* join() (no módulo os.path):            os path — Manipulações comuns de nomes de caminhos.
                                                             (line  334)
* join() (no módulo shlex):              shlex — Simple lexical analysis.
                                                             (line   29)
* JoinableQueue (classe em multiprocessing): Encadeamentos e filas.
                                                             (line  260)
* JoinedStr (classe em ast):             Literais<3>.        (line   43)
* joinpath() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  558)
* joinpath() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  115)
* joinpath() (método pathlib.PurePath):  Métodos e propriedades.
                                                             (line  249)
* 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   90)
* json opção de linha de comando; -compact: Opções de linha de comando<3>.
                                                             (line   48)
* json opção de linha de comando; -h:    Opções de linha de comando<3>.
                                                             (line   54)
* json opção de linha de comando; -help: Opções de linha de comando<3>.
                                                             (line   54)
* json opção de linha de comando; -indent: Opções de linha de comando<3>.
                                                             (line   48)
* json opção de linha de comando; -json-lines: Opções de linha de comando<3>.
                                                             (line   42)
* json opção de linha de comando; -no-ensure-ascii: Opções de linha de comando<3>.
                                                             (line   35)
* json opção de linha de comando; -no-indent: Opções de linha de comando<3>.
                                                             (line   48)
* json opção de linha de comando; -sort-keys: Opções de linha de comando<3>.
                                                             (line   29)
* json opção de linha de comando; -tab:  Opções de linha de comando<3>.
                                                             (line   48)
* json opção de linha de comando; infile: Opções de linha de comando<3>.
                                                             (line    6)
* json opção de linha de comando; outfile: Opções de linha de comando<3>.
                                                             (line   24)
* JSONDecodeError:                       Exceções<20>.       (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   43)
* JUMP (opcode):                         Instruções em bytecode do Python.
                                                             (line 1491)
* jump (pdb command):                    Comandos de depuração.
                                                             (line  263)
* JUMP_BACKWARD (opcode):                Instruções em bytecode do Python.
                                                             (line  872)
* JUMP_BACKWARD_NO_INTERRUPT (opcode):   Instruções em bytecode do Python.
                                                             (line  878)
* JUMP_FORWARD (opcode):                 Instruções em bytecode do Python.
                                                             (line  868)
* JUMP_IF_FALSE (opcode):                Instruções em bytecode do Python.
                                                             (line 1497)
* JUMP_IF_TRUE (opcode):                 Instruções em bytecode do Python.
                                                             (line 1497)
* JUMP_NO_INTERRUPT (opcode):            Instruções em bytecode do Python.
                                                             (line 1491)
* 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  111)
* key (atributo http.cookies.Morsel):    Objetos Morsel.     (line   71)
* key (atributo zoneinfo.ZoneInfo):      A classe ZoneInfo.  (line   77)
* KEY_A1 (no módulo curses):             Constantes<6>.      (line  236)
* KEY_A3 (no módulo curses):             Constantes<6>.      (line  239)
* KEY_ALL_ACCESS (no módulo winreg):     Direitos de acesso. (line    9)
* KEY_B2 (no módulo curses):             Constantes<6>.      (line  242)
* KEY_BACKSPACE (no módulo curses):      Constantes<6>.      (line  166)
* KEY_BEG (no módulo curses):            Constantes<6>.      (line  254)
* KEY_BREAK (no módulo curses):          Constantes<6>.      (line  148)
* KEY_BTAB (no módulo curses):           Constantes<6>.      (line  251)
* KEY_C1 (no módulo curses):             Constantes<6>.      (line  245)
* KEY_C3 (no módulo curses):             Constantes<6>.      (line  248)
* KEY_CANCEL (no módulo curses):         Constantes<6>.      (line  257)
* KEY_CATAB (no módulo curses):          Constantes<6>.      (line  218)
* KEY_CLEAR (no módulo curses):          Constantes<6>.      (line  191)
* KEY_CLOSE (no módulo curses):          Constantes<6>.      (line  260)
* KEY_COMMAND (no módulo curses):        Constantes<6>.      (line  263)
* KEY_COPY (no módulo curses):           Constantes<6>.      (line  266)
* KEY_CREATE (no módulo curses):         Constantes<6>.      (line  269)
* 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  215)
* KEY_DC (no módulo curses):             Constantes<6>.      (line  182)
* KEY_DL (no módulo curses):             Constantes<6>.      (line  176)
* KEY_DOWN (no módulo curses):           Constantes<6>.      (line  151)
* KEY_EIC (no módulo curses):            Constantes<6>.      (line  188)
* KEY_END (no módulo curses):            Constantes<6>.      (line  272)
* KEY_ENTER (no módulo curses):          Constantes<6>.      (line  221)
* KEY_ENUMERATE_SUB_KEYS (no módulo winreg): Direitos de acesso.
                                                             (line   42)
* KEY_EOL (no módulo curses):            Constantes<6>.      (line  197)
* KEY_EOS (no módulo curses):            Constantes<6>.      (line  194)
* KEY_EXECUTE (no módulo winreg):        Direitos de acesso. (line   26)
* KEY_EXIT (no módulo curses):           Constantes<6>.      (line  275)
* KEY_F0 (no módulo curses):             Constantes<6>.      (line  169)
* KEY_FIND (no módulo curses):           Constantes<6>.      (line  278)
* KEY_Fn (no módulo curses):             Constantes<6>.      (line  173)
* KEY_HELP (no módulo curses):           Constantes<6>.      (line  281)
* KEY_HOME (no módulo curses):           Constantes<6>.      (line  163)
* KEY_IC (no módulo curses):             Constantes<6>.      (line  185)
* KEY_IL (no módulo curses):             Constantes<6>.      (line  179)
* KEY_LEFT (no módulo curses):           Constantes<6>.      (line  157)
* KEY_LL (no módulo curses):             Constantes<6>.      (line  233)
* KEY_MARK (no módulo curses):           Constantes<6>.      (line  284)
* KEY_MAX (no módulo curses):            Constantes<6>.      (line  425)
* KEY_MESSAGE (no módulo curses):        Constantes<6>.      (line  287)
* KEY_MIN (no módulo curses):            Constantes<6>.      (line  145)
* KEY_MOUSE (no módulo curses):          Constantes<6>.      (line  419)
* KEY_MOVE (no módulo curses):           Constantes<6>.      (line  290)
* KEY_NEXT (no módulo curses):           Constantes<6>.      (line  293)
* KEY_NOTIFY (no módulo winreg):         Direitos de acesso. (line   46)
* KEY_NPAGE (no módulo curses):          Constantes<6>.      (line  206)
* KEY_OPEN (no módulo curses):           Constantes<6>.      (line  296)
* KEY_OPTIONS (no módulo curses):        Constantes<6>.      (line  299)
* KEY_PPAGE (no módulo curses):          Constantes<6>.      (line  209)
* KEY_PREVIOUS (no módulo curses):       Constantes<6>.      (line  302)
* KEY_PRINT (no módulo curses):          Constantes<6>.      (line  230)
* 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  305)
* KEY_REFERENCE (no módulo curses):      Constantes<6>.      (line  308)
* KEY_REFRESH (no módulo curses):        Constantes<6>.      (line  311)
* KEY_REPLACE (no módulo curses):        Constantes<6>.      (line  314)
* KEY_RESET (no módulo curses):          Constantes<6>.      (line  227)
* KEY_RESIZE (no módulo curses):         Constantes<6>.      (line  422)
* KEY_RESTART (no módulo curses):        Constantes<6>.      (line  317)
* KEY_RESUME (no módulo curses):         Constantes<6>.      (line  320)
* KEY_RIGHT (no módulo curses):          Constantes<6>.      (line  160)
* KEY_SAVE (no módulo curses):           Constantes<6>.      (line  323)
* KEY_SBEG (no módulo curses):           Constantes<6>.      (line  326)
* KEY_SCANCEL (no módulo curses):        Constantes<6>.      (line  329)
* KEY_SCOMMAND (no módulo curses):       Constantes<6>.      (line  332)
* KEY_SCOPY (no módulo curses):          Constantes<6>.      (line  335)
* KEY_SCREATE (no módulo curses):        Constantes<6>.      (line  338)
* KEY_SDC (no módulo curses):            Constantes<6>.      (line  341)
* KEY_SDL (no módulo curses):            Constantes<6>.      (line  344)
* KEY_SELECT (no módulo curses):         Constantes<6>.      (line  347)
* KEY_SEND (no módulo curses):           Constantes<6>.      (line  350)
* KEY_SEOL (no módulo curses):           Constantes<6>.      (line  353)
* KEY_SET_VALUE (no módulo winreg):      Direitos de acesso. (line   34)
* KEY_SEXIT (no módulo curses):          Constantes<6>.      (line  356)
* KEY_SF (no módulo curses):             Constantes<6>.      (line  200)
* KEY_SFIND (no módulo curses):          Constantes<6>.      (line  359)
* KEY_SHELP (no módulo curses):          Constantes<6>.      (line  362)
* KEY_SHOME (no módulo curses):          Constantes<6>.      (line  365)
* KEY_SIC (no módulo curses):            Constantes<6>.      (line  368)
* KEY_SLEFT (no módulo curses):          Constantes<6>.      (line  371)
* KEY_SMESSAGE (no módulo curses):       Constantes<6>.      (line  374)
* KEY_SMOVE (no módulo curses):          Constantes<6>.      (line  377)
* KEY_SNEXT (no módulo curses):          Constantes<6>.      (line  380)
* KEY_SOPTIONS (no módulo curses):       Constantes<6>.      (line  383)
* KEY_SPREVIOUS (no módulo curses):      Constantes<6>.      (line  386)
* KEY_SPRINT (no módulo curses):         Constantes<6>.      (line  389)
* KEY_SR (no módulo curses):             Constantes<6>.      (line  203)
* KEY_SREDO (no módulo curses):          Constantes<6>.      (line  392)
* KEY_SREPLACE (no módulo curses):       Constantes<6>.      (line  395)
* KEY_SRESET (no módulo curses):         Constantes<6>.      (line  224)
* KEY_SRIGHT (no módulo curses):         Constantes<6>.      (line  398)
* KEY_SRSUME (no módulo curses):         Constantes<6>.      (line  401)
* KEY_SSAVE (no módulo curses):          Constantes<6>.      (line  404)
* KEY_SSUSPEND (no módulo curses):       Constantes<6>.      (line  407)
* KEY_STAB (no módulo curses):           Constantes<6>.      (line  212)
* KEY_SUNDO (no módulo curses):          Constantes<6>.      (line  410)
* KEY_SUSPEND (no módulo curses):        Constantes<6>.      (line  413)
* KEY_UNDO (no módulo curses):           Constantes<6>.      (line  416)
* KEY_UP (no módulo curses):             Constantes<6>.      (line  154)
* 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   44)
* KeyError:                              Exceções concretas. (line   87)
* keylog_filename (atributo ssl.SSLContext): SSL Contexts.   (line  528)
* keyname() (no módulo curses):          Funções<6>.         (line  279)
* keypad() (método curses.window):       Window Objects.     (line  389)
* 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  202)
* 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):       Mailbox objects.    (line  111)
* keys() (método sqlite3.Row):           Row objects.        (line   19)
* keys() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  280)
* 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_workers() (método concurrent.futures.ProcessPoolExecutor): `ProcessPoolExecutor`.
                                                             (line  106)
* 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  248)
* kill() (método subprocess.Popen):      Objetos Popen.      (line   92)
* kill() (no módulo os):                 Gerenciamento de processo.
                                                             (line  344)
* killchar() (no módulo curses):         Funções<6>.         (line  289)
* killpg() (no módulo os):               Gerenciamento de processo.
                                                             (line  367)
* kind (atributo inspect.Parameter):     Introspecting callables with the Signature object.
                                                             (line  248)
* knownfiles (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  148)
* kqueue() (no módulo select):           select — Waiting for I/O completion.
                                                             (line  100)
* KqueueSelector (classe em selectors):  Classes<4>.         (line  195)
* KW_ONLY (no módulo dataclasses):       Conteúdo do módulo<8>.
                                                             (line  498)
* kwargs (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  378)
* kwargs (atributo typing.ParamSpec):    Criando tipos genéricos e apelidos de tipo.
                                                             (line  473)
* kwlist (no módulo keyword):            keyword — Testando palavras reservadas do Python.
                                                             (line   19)
* L (no módulo re):                      Sinalizadores.      (line   61)
* L2CAP_LM (no módulo socket):           Constantes<8>.      (line  343)
* 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  986)
* 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  127)
* 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   54)
* LANG <3>:                              locale — Serviços de internacionalização.
                                                             (line  363)
* LANG <4>:                              locale — Serviços de internacionalização.
                                                             (line  368)
* 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  211)
* 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 1377)
* last_mode (atributo compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  155)
* 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 1414)
* last_type (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1414)
* last_value (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1414)
* 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  206)
* layout() (método tkinter.ttk.Style):   Ttk Styling.        (line   96)
* lazy (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  334)
* lazy2 (atributo compression.zstd.Strategy): Advanced parameter control.
                                                             (line  336)
* lazycache() (no módulo linecache):     linecache — Acesso aleatório a linhas de texto.
                                                             (line   58)
* 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  266)
* LBYL:                                  Glossário.          (line  993)
* 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  587)
* LC_COLLATE (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  550)
* LC_CTYPE (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  534)
* 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  567)
* LC_MONETARY (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  561)
* LC_NUMERIC (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  579)
* LC_TIME (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  556)
* 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)
* ldm_bucket_size_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  172)
* ldm_hash_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  155)
* ldm_hash_rate_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  181)
* ldm_min_match (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  164)
* 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  396)
* 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  290)
* LEFTSHIFTEQUAL (no módulo token):      token — Constantes usadas com árvores de análises do Python.
                                                             (line  323)
* 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  227)
* LESS (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  251)
* LESSEQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  278)
* 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 — Base classes for SAX handlers.
                                                             (line   45)
* léxicas, definições:                   Notação.            (line  110)
* lexists() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  135)
* 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   98)
* library (atributo ssl.SSLError):       Exceções<19>.       (line   19)
* library (no módulo dbm.ndbm):          dbm ndbm — New Database Manager.
                                                             (line   35)
* LibraryLoader (classe em ctypes):      Loading shared libraries.
                                                             (line  170)
* 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  170)
* LimitOverrunError:                     Exceções<16>.       (line   61)
* line (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   87)
* line (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   43)
* LINE (monitoring event):               Eventos.            (line   47)
* line_buffering (atributo io.TextIOWrapper): E/S de texto<2>.
                                                             (line  175)
* 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<20>.      (line   23)
* lineno (atributo netrc.NetrcParseError): netrc — Arquivo de processamento netrc.
                                                             (line   64)
* lineno (atributo pyclbr.Class):        Objetos Class.      (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  333)
* lineno (atributo tomllib.TOMLDecodeError): tomllib — Analisa arquivos TOML.
                                                             (line   78)
* 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  140)
* LINES <1>:                             Funções<6>.         (line  611)
* LINES <2>:                             Funções<6>.         (line  613)
* lines (atributo os.terminal_size):     Consultando o tamanho de um terminal.
                                                             (line   34)
* LINES (no módulo curses):              Constantes<6>.      (line   53)
* 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>:                      Gramática formal.   (line   28)
* linha lógica:                          Linhas lógicas.     (line    6)
* link() (no módulo os):                 Arquivos e diretórios.
                                                             (line  370)
* linked_to_musl() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  603)
* LinkFallbackError:                     tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  315)
* linkname (atributo tarfile.TarInfo):   Objetos TarInfo.    (line   95)
* LinkOutsideDestinationError:           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  310)
* List (classe em ast):                  Literais<3>.        (line  125)
* 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  274)
* list_all() (no módulo concurrent.interpreters): Referência<4>.
                                                             (line    8)
* LIST_APPEND (opcode):                  Instruções em bytecode do Python.
                                                             (line  387)
* list_dialects() (no módulo csv):       Conteúdo do módulo<3>.
                                                             (line   96)
* LIST_EXTEND (opcode):                  Instruções em bytecode do Python.
                                                             (line  744)
* 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  205)
* list() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  232)
* list() (método poplib.POP3):           Objetos POP3.       (line   57)
* list() (método tarfile.TarFile):       TarFile Objects.    (line  123)
* lista:                                 Glossário.          (line 1013)
* 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  393)
* listdrives() (no módulo os):           Arquivos e diretórios.
                                                             (line  433)
* listen() (método socket.socket):       Socket Objects.     (line  196)
* listen() (no módulo logging.config):   Funções de configuração.
                                                             (line  118)
* 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  454)
* listvolumes() (no módulo os):          Arquivos e diretórios.
                                                             (line  478)
* listxattr() (no módulo os):            Atributos estendidos do Linux.
                                                             (line   26)
* literais de string formatadas:         Métodos de string.  (line  799)
* Literais de strings formatadas:        Métodos de string.  (line  799)
* literal:                               Literais.           (line    6)
* literal <1>:                           Literais<2>.        (line    6)
* Literal (no módulo typing):            Formas especiais.   (line  142)
* literal de binário:                    Literais numéricos. (line    6)
* literal de bytes:                      Literais.           (line   15)
* 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   15)
* literal de string formatada com !:     Métodos de string.  (line  799)
* literal de string formatado:           Refinando a formatação de saída.
                                                             (line   96)
* literal de string formatado <1>:       Literais de string brutas.
                                                             (line   26)
* literal de string interpolada:         Refinando a formatação de saída.
                                                             (line   96)
* literal de string interpolada <1>:     Literais de string brutas.
                                                             (line   26)
* literal de string interpolada <2>:     Métodos de string.  (line  799)
* 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): Structured data types.
                                                             (line   29)
* LittleEndianUnion (classe em ctypes):  Structured data types.
                                                             (line   19)
* 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):                  Métodos de string.  (line  380)
* 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  290)
* LMTP (classe em smtplib):              smtplib — SMTP protocol client.
                                                             (line  107)
* ln() (método decimal.Context):         Objetos de contexto.
                                                             (line  390)
* ln() (método decimal.Decimal):         Objetos de Decimal. (line  356)
* LNKTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  338)
* Load (classe em ast):                  Variáveis.          (line   11)
* LOAD_ATTR (opcode):                    Instruções em bytecode do Python.
                                                             (line  784)
* LOAD_BUILD_CLASS (opcode):             Instruções em bytecode do Python.
                                                             (line  513)
* load_cert_chain() (método ssl.SSLContext): SSL Contexts.   (line  101)
* LOAD_CLOSURE (opcode):                 Instruções em bytecode do Python.
                                                             (line 1503)
* LOAD_COMMON_CONSTANT (opcode):         Instruções em bytecode do Python.
                                                             (line  504)
* LOAD_CONST (opcode):                   Instruções em bytecode do Python.
                                                             (line  631)
* LOAD_CONST_IMMORTAL (opcode):          Instruções em bytecode do Python.
                                                             (line 1486)
* load_default_certs() (método ssl.SSLContext): SSL Contexts.
                                                             (line  132)
* LOAD_DEREF (opcode):                   Instruções em bytecode do Python.
                                                             (line 1026)
* 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  950)
* LOAD_FAST_AND_CLEAR (opcode):          Instruções em bytecode do Python.
                                                             (line  988)
* LOAD_FAST_BORROW (opcode):             Instruções em bytecode do Python.
                                                             (line  959)
* LOAD_FAST_BORROW_LOAD_FAST_BORROW (opcode): Instruções em bytecode do Python.
                                                             (line  973)
* LOAD_FAST_CHECK (opcode):              Instruções em bytecode do Python.
                                                             (line  980)
* LOAD_FAST_LOAD_FAST (opcode):          Instruções em bytecode do Python.
                                                             (line  966)
* LOAD_FROM_DICT_OR_DEREF (opcode):      Instruções em bytecode do Python.
                                                             (line 1034)
* LOAD_FROM_DICT_OR_GLOBALS (opcode):    Instruções em bytecode do Python.
                                                             (line  655)
* LOAD_GLOBAL (opcode):                  Instruções em bytecode do Python.
                                                             (line  943)
* LOAD_LOCALS (opcode):                  Instruções em bytecode do Python.
                                                             (line  646)
* load_module() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  327)
* load_module() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  278)
* 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  427)
* 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  641)
* load_package_tests() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  665)
* LOAD_SMALL_INT (opcode):               Instruções em bytecode do Python.
                                                             (line  635)
* LOAD_SPECIAL (opcode):                 Instruções em bytecode do Python.
                                                             (line 1440)
* LOAD_SUPER_ATTR (opcode):              Instruções em bytecode do Python.
                                                             (line  802)
* 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  297)
* load() (no módulo json):               Uso básico<4>.      (line  110)
* load() (no módulo marshal):            marshal — Serialização interna de objetos Python.
                                                             (line   95)
* load() (no módulo pickle):             Interface do módulo.
                                                             (line   66)
* 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<14>.        (line  263)
* LoadLibrary() (método ctypes.LibraryLoader): Loading shared libraries.
                                                             (line  181)
* loads() (no módulo json):              Uso básico<4>.      (line  197)
* loads() (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  136)
* loads() (no módulo pickle):            Interface do módulo.
                                                             (line   84)
* 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  410)
* LOCAL_CREDS_PERSISTENT (no módulo socket): Constantes<8>.  (line  410)
* 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   57)
* 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  610)
* localizador baseado no caminho:        O localizador baseado no caminho.
                                                             (line    6)
* localizador baseado no caminho <1>:    Glossário.          (line 1321)
* localizador de entrada de caminho:     Glossário.          (line 1304)
* localizador de metacaminho:            Glossário.          (line 1071)
* localizador;find_spec:                 O metacaminho.      (line    6)
* localize() (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  516)
* 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  153)
* 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 2184)
* Lock (classe em asyncio):              Lock.               (line    6)
* Lock (classe em multiprocessing):      Primitivas de sincronização.
                                                             (line   47)
* Lock (classe em threading):            Lock objects.       (line   33)
* LOCK_EX (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  208)
* LOCK_NB (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  212)
* LOCK_SH (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  204)
* LOCK_UN (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  200)
* lock, interpreter:                     Estado de thread e a trava global do interpretador.
                                                             (line    6)
* lock() (método mailbox.Babyl):         Babyl objects.      (line   60)
* lock() (método mailbox.Mailbox):       Mailbox objects.    (line  256)
* 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  189)
* locked() (método _thread.lock):        _thread— API de segmentação de baixo nível.
                                                             (line  185)
* 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 multiprocessing.Lock): Primitivas de sincronização.
                                                             (line  106)
* locked() (método multiprocessing.RLock): Primitivas de sincronização.
                                                             (line  180)
* locked() (método threading.Condition): Condition objects.  (line   97)
* locked() (método threading.Lock):      Lock objects.       (line   90)
* locked() (método threading.RLock):     RLock objects.      (line  110)
* lockf() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  192)
* 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  376)
* 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  345)
* 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  351)
* 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  338)
* 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  394)
* log10() (método decimal.Decimal):      Objetos de Decimal. (line  362)
* 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  398)
* logb() (método decimal.Decimal):       Objetos de Decimal. (line  368)
* 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  402)
* logical_and() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  377)
* logical_invert() (método decimal.Context): Objetos de contexto.
                                                             (line  406)
* logical_invert() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  383)
* logical_or() (método decimal.Context): Objetos de contexto.
                                                             (line  410)
* logical_or() (método decimal.Decimal): Objetos de Decimal. (line  388)
* logical_xor() (método decimal.Context): Objetos de contexto.
                                                             (line  414)
* logical_xor() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  394)
* login_cram_md5() (método imaplib.IMAP4): Objetos IMAP4.    (line  216)
* 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  211)
* login() (método smtplib.SMTP):         Objetos SMTP.       (line  102)
* LOGNAME:                               Parâmetros de processo.
                                                             (line  269)
* LOGNAME <1>:                           getpass — Entrada de senha portátil.
                                                             (line   61)
* lognormvariate() (no módulo random):   Distribuições com valor real.
                                                             (line   79)
* logout() (método imaplib.IMAP4):       Objetos IMAP4.      (line  225)
* LogRecord (classe em logging):         LogRecord Objects.  (line   11)
* LONG_MAX (C macro):                    Objetos Inteiros.   (line  159)
* LONG_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  114)
* longMessage (atributo unittest.TestCase): Casos de teste.  (line  788)
* longname() (no módulo curses):         Funções<6>.         (line  296)
* 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   23)
* LookupError:                           Classes base.       (line   85)
* loop_factory (atributo unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  946)
* LOOPBACK_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   67)
* 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):                  Métodos de string.  (line  387)
* LPAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  212)
* lpAttributeList (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   60)
* lru_cache() (no módulo functools):     functools — Higher-order functions and operations on callable objects.
                                                             (line  146)
* 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  127)
* LSQB (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  218)
* lstat() (método pathlib.Path):         Consultando tipo de arquivo e status.
                                                             (line   40)
* lstat() (no módulo os):                Arquivos e diretórios.
                                                             (line  500)
* 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):                 Métodos de string.  (line  395)
* lsub() (método imaplib.IMAP4):         Objetos IMAP4.      (line  232)
* 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<2>.
                                                             (line    6)
* LZMADecompressor (classe em lzma):     Comprimindo e descomprimindo dados na memória<2>.
                                                             (line  102)
* LZMAError:                             lzma — Compressão usando o algoritmo LZMA.
                                                             (line   24)
* LZMAFile (classe em lzma):             Lendo e escrevendo arquivos comprimidos<2>.
                                                             (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 1062)
* Mailbox (classe em mailbox):           Mailbox objects.    (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():                                Process-wide parameters.
                                                             (line    7)
* main() <1>:                            Process-wide parameters.
                                                             (line  225)
* 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  519)
* 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  657)
* 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  109)
* MAKE_CELL (opcode):                    Instruções em bytecode do Python.
                                                             (line 1019)
* 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  401)
* make_file() (método difflib.HtmlDiff): difflib — Helpers for computing deltas.
                                                             (line  112)
* MAKE_FUNCTION (opcode):                Instruções em bytecode do Python.
                                                             (line 1158)
* 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  667)
* makedirs() (no módulo os):             Arquivos e diretórios.
                                                             (line  570)
* 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  208)
* makeLogRecord() (no módulo logging):   Funções de Nível de Módulo.
                                                             (line  196)
* makePickle() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   45)
* makeRecord() (método logging.Logger):  Objetos Logger.     (line  384)
* makeSocket() (método logging.handlers.DatagramHandler): DatagramHandler.
                                                             (line   37)
* makeSocket() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   39)
* 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):     Métodos de string.  (line  418)
* 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   30)
* 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  689)
* MAP_32BIT (no módulo mmap):            Constantes MAP_*.   (line    6)
* MAP_ADD (opcode):                      Instruções em bytecode do Python.
                                                             (line  396)
* 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  111)
* 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   94)
* map() (método tkinter.ttk.Style):      Ttk Styling.        (line   48)
* mapeamento:                            Glossário.          (line 1062)
* 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  232)
* 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  207)
* maps (atributo collections.ChainMap):  Objetos ChainMap.   (line   40)
* máquina virtual:                       Glossário.          (line 1760)
* 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  462)
* 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 1260)
* MATCH_KEYS (opcode):                   Instruções em bytecode do Python.
                                                             (line  546)
* MATCH_MAPPING (opcode):                Instruções em bytecode do Python.
                                                             (line  526)
* MATCH_SEQUENCE (opcode):               Instruções em bytecode do Python.
                                                             (line  535)
* match_value() (método test.support.Matcher): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  830)
* match;case:                            A instrução match.  (line    6)
* match() (método pathlib.PurePath):     Métodos e propriedades.
                                                             (line  296)
* 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  823)
* matches() (método test.support.Matcher): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  825)
* 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  142)
* MatMult (classe em ast):               Expressões<2>.      (line   54)
* max (atributo datetime.date):          Objetos date.       (line  137)
* 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  695)
* MAX (no módulo uuid):                  uuid — Objetos UUID conforme RFC 9562.
                                                             (line  333)
* max_10_exp (atributo sys.float_info):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  704)
* max_children (atributo socketserver.ThreadingMixIn): Notas sobre criação do servidor.
                                                             (line   55)
* 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  699)
* MAX_INTERPOLATION_DEPTH (no módulo configparser): Objetos ConfigParser.
                                                             (line  371)
* 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  423)
* max_mag() (método decimal.Decimal):    Objetos de Decimal. (line  408)
* max_memuse (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line  171)
* MAX_PREC (no módulo decimal):          Constantes<4>.      (line   13)
* max_prefixlen (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   53)
* max_prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   70)
* max_prefixlen (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  282)
* max_prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  304)
* MAX_Py_ssize_t (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  167)
* max() (método decimal.Context):        Objetos de contexto.
                                                             (line  419)
* max() (método decimal.Decimal):        Objetos de Decimal. (line  401)
* 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  805)
* maxfrozenset (atributo reprlib.Repr):  Objetos Repr.       (line   23)
* MAXIMUM_SUPPORTED (atributo ssl.TLSVersion): Constantes<9>.
                                                             (line  572)
* 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 1422)
* 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 1429)
* 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  162)
* MB_ICONERROR (no módulo winsound):     winsound — Interface de reprodução de som para o Windows.
                                                             (line  182)
* MB_ICONEXCLAMATION (no módulo winsound): winsound — Interface de reprodução de som para o Windows.
                                                             (line  166)
* MB_ICONHAND (no módulo winsound):      winsound — Interface de reprodução de som para o Windows.
                                                             (line  170)
* MB_ICONINFORMATION (no módulo winsound): winsound — Interface de reprodução de som para o Windows.
                                                             (line  188)
* MB_ICONQUESTION (no módulo winsound):  winsound — Interface de reprodução de som para o Windows.
                                                             (line  174)
* MB_ICONSTOP (no módulo winsound):      winsound — Interface de reprodução de som para o Windows.
                                                             (line  194)
* MB_ICONWARNING (no módulo winsound):   winsound — Interface de reprodução de som para o Windows.
                                                             (line  200)
* MB_OK (no módulo winsound):            winsound — Interface de reprodução de som para o Windows.
                                                             (line  178)
* 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  215)
* memfd_create() (no módulo os):         Arquivos e diretórios.
                                                             (line 1898)
* memmove() (no módulo ctypes):          Funções utilitárias.
                                                             (line  199)
* 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)
* memoryview_at() (no módulo ctypes):    Funções utilitárias.
                                                             (line  296)
* memset() (no módulo ctypes):           Funções utilitárias.
                                                             (line  205)
* menos:                                 Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* merge() (no módulo heapq):             heapq — Algoritmo de fila heap.
                                                             (line  143)
* message (atributo BaseExceptionGroup): Grupos de exceções. (line   33)
* 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  131)
* message_from_bytes() (no módulo email): Parser API.        (line  118)
* message_from_file() (no módulo email): Parser API.         (line  154)
* message_from_string() (no módulo email): Parser API.       (line  144)
* MessageBeep() (no módulo winsound):    winsound — Interface de reprodução de som para o Windows.
                                                             (line   32)
* MessageClass (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  220)
* 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 1439)
* meta() (no módulo curses):             Funções<6>.         (line  303)
* metaclasse:                            Metaclasses.        (line    6)
* metaclasse <1>:                        Glossário.          (line 1081)
* 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  195)
* METH_COEXIST (C macro):                Implementing functions and methods.
                                                             (line  212)
* 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  182)
* 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  340)
* 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 Class.      (line   50)
* methodSignature() (método xmlrpc.client.ServerProxy.system): Objetos ServerProxy.
                                                             (line   22)
* MethodType (em tipos de módulos):      Objetos Função<2>.  (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 1099)
* método embutido;chamada:               Chamadas.           (line  149)
* método especial:                       Glossário.          (line 1536)
* método mágico:                         Glossário.          (line 1058)
* 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 1916)
* MFD_CLOEXEC (no módulo os):            Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_16GB (no módulo os):          Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_16MB (no módulo os):          Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_1GB (no módulo os):           Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_1MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_256MB (no módulo os):         Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_2GB (no módulo os):           Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_2MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_32MB (no módulo os):          Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_512KB (no módulo os):         Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_512MB (no módulo os):         Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_64KB (no módulo os):          Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_8MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_MASK (no módulo os):          Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGE_SHIFT (no módulo os):         Arquivos e diretórios.
                                                             (line 1916)
* MFD_HUGETLB (no módulo os):            Arquivos e diretórios.
                                                             (line 1916)
* 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;codificação de imprimíveis entre aspas: quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line    8)
* MIME;content type:                     mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line    8)
* MIME;headers:                          mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   26)
* MIME;headers <1>:                      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   63)
* 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)
* mimetypes opção de linha de comando; -e: Uso na linha de comando<4>.
                                                             (line   18)
* mimetypes opção de linha de comando; -extension: Uso na linha de comando<4>.
                                                             (line   18)
* mimetypes opção de linha de comando; -h: Uso na linha de comando<4>.
                                                             (line   13)
* mimetypes opção de linha de comando; -help: Uso na linha de comando<4>.
                                                             (line   13)
* mimetypes opção de linha de comando; -l: Uso na linha de comando<4>.
                                                             (line   23)
* mimetypes opção de linha de comando; -lenient: Uso na linha de comando<4>.
                                                             (line   23)
* MIMEVersionHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  234)
* min (atributo datetime.date):          Objetos date.       (line  133)
* 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  710)
* min_10_exp (atributo sys.float_info):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  724)
* 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  719)
* min_mag() (método decimal.Context):    Objetos de contexto.
                                                             (line  431)
* min_mag() (método decimal.Decimal):    Objetos de Decimal. (line  420)
* min_match (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   96)
* min() (método decimal.Context):        Objetos de contexto.
                                                             (line  427)
* min() (método decimal.Decimal):        Objetos de Decimal. (line  413)
* MINEQUAL (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  302)
* MINIMUM_SUPPORTED (atributo ssl.TLSVersion): Constantes<9>.
                                                             (line  570)
* 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  662)
* MINUS (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  236)
* minus() (método decimal.Context):      Objetos de contexto.
                                                             (line  435)
* 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  115)
* 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  111)
* MISSING (no módulo dataclasses):       Conteúdo do módulo<8>.
                                                             (line  494)
* 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  181)
* missing_compiler_executable() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  711)
* MissingHeaderBodySeparatorDefect:      email errors Classes de Exceção e Defeito.
                                                             (line  100)
* MissingSectionHeaderError:             Exceções<9>.        (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  361)
* mkdir() (no módulo os):                Arquivos e diretórios.
                                                             (line  534)
* mkdtemp() (no módulo tempfile):        tempfile — Generate temporary files and directories.
                                                             (line  287)
* mkfifo() (no módulo os):               Arquivos e diretórios.
                                                             (line  611)
* mknod() (no módulo os):                Arquivos e diretórios.
                                                             (line  635)
* 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  167)
* 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  132)
* mode (atributo bz2.BZ2File):           Des compressão de arquivos.
                                                             (line  134)
* mode (atributo compression.zstd.ZstdFile): Lendo e escrevendo arquivos comprimidos.
                                                             (line  109)
* 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<2>.
                                                             (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)
* 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   91)
* 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 1535)
* modo interativo:                       Programas Python completos.
                                                             (line   19)
* module (atributo pyclbr.Class):        Objetos Class.      (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 Arquivo 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; annotationlib:                 annotationlib — Funcionalidade para introspecção de anotações.
                                                             (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; compression:                   O pacote compression.
                                                             (line    6)
* module; compression.zstd:              compression zstd — Compactação compatível com o formato Zstandard.
                                                             (line    6)
* module; concurrent.futures:            concurrent futures — Launching parallel tasks.
                                                             (line    6)
* module; concurrent.interpreters:       concurrent interpreters — Múltiplos interpretadores no mesmo processo.
                                                             (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 — Higher-order functions and operations on callable objects.
                                                             (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 — Simple HTML and XHTML parser.
                                                             (line    6)
* module; http:                          http — HTTP modules.
                                                             (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<4>.
                                                             (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 — Tratadores de registro de eventos.
                                                             (line    6)
* module; lzma:                          lzma — Compressão usando o algoritmo LZMA.
                                                             (line    6)
* module; mailbox:                       mailbox — Manipulate mailboxes in various formats.
                                                             (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; pathlib.types:                 Protocolos.         (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 — SMTP protocol client.
                                                             (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; string.templatelib:            string templatelib — Suporte para literais de string template.
                                                             (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 — Unit testing framework.
                                                             (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 9562.
                                                             (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 — Base classes for SAX handlers.
                                                             (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 1472)
* 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   51)
* módulo <1>:                            Glossário.          (line 1113)
* módulo de extensão:                    Glossário.          (line  554)
* módulo spec:                           Localizadores e carregadores.
                                                             (line    6)
* 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  199)
* módulo;_locale:                        locale — Serviços de internacionalização.
                                                             (line   16)
* módulo;_thread:                        High-level API.     (line   53)
* módulo;array:                          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 2279)
* módulo;builtins <3>:                   Incorporando Python<2>.
                                                             (line   12)
* 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;embutidos:                      Inicializando e encerrando o interpretador.
                                                             (line    7)
* módulo;embutidos <1>:                  Sub-interpreter support.
                                                             (line  112)
* módulo;embutidos <2>:                  Sub-interpreter support.
                                                             (line  199)
* 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  117)
* 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 1499)
* 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>:           Process-wide parameters.
                                                             (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  150)
* módulo;pyexpat:                        xml parsers expat — Fast XML parsing using Expat.
                                                             (line   19)
* módulo;re:                             Métodos de string.  (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  202)
* 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   44)
* módulo;socket:                         Protocolos de Internet e Suporte.
                                                             (line    6)
* módulo;stat:                           Arquivos e diretórios.
                                                             (line 1173)
* módulo;struct:                         Socket Objects.     (line  566)
* módulo;sys:                            Módulos padrões.    (line    6)
* módulo;sys <1>:                        Cláusula except.    (line   63)
* módulo;sys <2>:                        Programas Python completos.
                                                             (line    6)
* módulo;sys <3>:                        Funções embutidas<3>.
                                                             (line 1535)
* 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  199)
* módulo;tipos:                          Objetos tipo.       (line    6)
* módulo;urllib.request:                 http client — HTTP protocol client.
                                                             (line    8)
* módulo;vetor:                          Sequências mutáveis.
                                                             (line   10)
* modulus (atributo sys.hash_info):      sys — Parâmetros e funções específicas do sistema.
                                                             (line 1122)
* MON_1 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_10 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  240)
* MON_11 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  240)
* MON_12 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  240)
* MON_2 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_3 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_4 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_5 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_6 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_7 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_8 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* MON_9 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  240)
* 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  215)
* monotonic() (no módulo time):          Funções<5>.         (line  182)
* month (atributo calendar.IllegalMonthError): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  540)
* month (atributo datetime.date):        Objetos date.       (line  153)
* 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  308)
* mousemask() (no módulo curses):        Funções<6>.         (line  315)
* move_into() (método pathlib.Path):     Copiando movendo e excluindo.
                                                             (line  104)
* 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  405)
* move() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  242)
* move() (método pathlib.Path):          Copiando movendo e excluindo.
                                                             (line   86)
* move() (método tkinter.ttk.Treeview):  ttk Treeview.       (line  211)
* move() (no módulo shutil):             Operações de diretório e arquivos.
                                                             (line  368)
* MozillaCookieJar (classe em http.cookiejar): FileCookieJar subclasses and co-operation with web browsers.
                                                             (line    9)
* MRO:                                   Glossário.          (line 1130)
* mro() (método type):                   Métodos especiais.  (line    9)
* msg (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   40)
* msg (atributo json.JSONDecodeError):   Exceções<20>.       (line   11)
* msg (atributo netrc.NetrcParseError):  netrc — Arquivo de processamento netrc.
                                                             (line   56)
* msg (atributo re.PatternError):        Exceções<3>.        (line   16)
* msg (atributo tomllib.TOMLDecodeError): tomllib — Analisa arquivos TOML.
                                                             (line   66)
* 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  137)
* 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<9>.        (line   77)
* 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   30)
* multiply() (método decimal.Context):   Objetos de contexto.
                                                             (line  440)
* 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 1134)
* mutável;sequência;tipos:               Tipos sequências mutáveis.
                                                             (line    6)
* mvderwin() (método curses.window):     Window Objects.     (line  409)
* mvwin() (método curses.window):        Window Objects.     (line  416)
* myrights() (método imaplib.IMAP4):     Objetos IMAP4.      (line  239)
* N_TOKENS (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  358)
* 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 compression.zstd.ZstdFile): Lendo e escrevendo arquivos comprimidos.
                                                             (line  113)
* name (atributo contextvars.ContextVar): Variáveis de contexto.
                                                             (line   26)
* name (atributo ctypes.CField):         Structured data types.
                                                             (line  248)
* 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  319)
* name (atributo importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  541)
* name (atributo importlib.machinery.AppleFrameworkLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  512)
* 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   98)
* name (atributo inspect.Parameter):     Introspecting callables with the Signature object.
                                                             (line  224)
* 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<2>.
                                                             (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  988)
* name (atributo pathlib.PurePath):      Métodos e propriedades.
                                                             (line  124)
* name (atributo pyclbr.Class):          Objetos Class.      (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 2171)
* 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  179)
* 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   41)
* 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  135)
* nameprep() (no módulo encodings.idna): encodings idna — Internationalized Domain Names in Applications.
                                                             (line   50)
* namer (atributo logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   17)
* 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  256)
* NAMESPACE_DNS (no módulo uuid):        uuid — Objetos UUID conforme RFC 9562.
                                                             (line  283)
* NAMESPACE_OID (no módulo uuid):        uuid — Objetos UUID conforme RFC 9562.
                                                             (line  293)
* NAMESPACE_URL (no módulo uuid):        uuid — Objetos UUID conforme RFC 9562.
                                                             (line  288)
* NAMESPACE_X500 (no módulo uuid):       uuid — Objetos UUID conforme RFC 9562.
                                                             (line  298)
* namespace() (método imaplib.IMAP4):    Objetos IMAP4.      (line  244)
* Namespace() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  194)
* NamespaceErr:                          Exceções<23>.       (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  746)
* nan (atributo sys.hash_info):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1130)
* 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)
* napms() (no módulo curses):            Funções<6>.         (line  324)
* nargs (atributo optparse.Option):      Atributos da classe Option.
                                                             (line   51)
* native_id (atributo threading.Thread): Thread objects.     (line  212)
* nb_workers (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  236)
* nbytes (atributo memoryview):          Memory Views.       (line  417)
* ncurses_version (no módulo curses):    Constantes<6>.      (line   24)
* 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  484)
* 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 compression.zstd.ZstdDecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  226)
* needs_input (atributo lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória<2>.
                                                             (line  181)
* neg() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  149)
* 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  106)
* netmask (atributo ipaddress.IPv6Network): Objetos de rede. (line  324)
* 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   91)
* network_address (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  318)
* 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  206)
* 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   78)
* 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  328)
* NewType (classe em typing):            Outras diretivas especiais.
                                                             (line  107)
* newwin() (no módulo curses):           Funções<6>.         (line  348)
* next (pdb command):                    Comandos de depuração.
                                                             (line  233)
* next_minus() (método decimal.Context): Objetos de contexto.
                                                             (line  444)
* next_minus() (método decimal.Decimal): Objetos de Decimal. (line  425)
* next_plus() (método decimal.Context):  Objetos de contexto.
                                                             (line  448)
* next_plus() (método decimal.Decimal):  Objetos de Decimal. (line  431)
* next_toward() (método decimal.Context): Objetos de contexto.
                                                             (line  452)
* next_toward() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  437)
* next() (método tarfile.TarFile):       TarFile Objects.    (line  133)
* 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  107)
* 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)
* NIL (no módulo uuid):                  uuid — Objetos UUID conforme RFC 9562.
                                                             (line  326)
* 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  175)
* nl() (no módulo curses):               Funções<6>.         (line  358)
* nlargest() (no módulo heapq):          heapq — Algoritmo de fila heap.
                                                             (line  172)
* 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_animation() (no módulo turtle):     Controle da animação.
                                                             (line    6)
* no_cache() (método de classe zoneinfo.ZoneInfo): A classe ZoneInfo.
                                                             (line   43)
* NO_EVENTS (monitoring event):          Eventos.            (line  106)
* no_proxy:                              urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  355)
* no_site (atributo sys.flags):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  582)
* no_tracing() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  571)
* 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  579)
* NoBoundaryInMultipartDefect:           email errors Classes de Exceção e Defeito.
                                                             (line   75)
* nocbreak() (no módulo curses):         Funções<6>.         (line  364)
* NoDataAllowedErr:                      Exceções<23>.       (line   83)
* node (atributo uuid.UUID):             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  129)
* node() (no módulo platform):           Multiplataforma.    (line   46)
* NoDefault (no módulo typing):          Auxiliares de introspecção.
                                                             (line  203)
* nodelay() (método curses.window):      Window Objects.     (line  420)
* 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  369)
* NOEXPR (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  286)
* NOFLAG (no módulo re):                 Sinalizadores.      (line   99)
* nome:                                  Nomes identificadores e palavras reservadas.
                                                             (line    6)
* nome <1>:                              Ligação de nomes.   (line    6)
* nome <2>:                              Identificadores Nomes.
                                                             (line    6)
* nome qualificado:                      Glossário.          (line 1418)
* nome;desfiguração:                     Variáveis privadas. (line   14)
* nome;desfiguração <1>:                 Identificadores Nomes.
                                                             (line   15)
* nome;vinculação:                       Definições de função.
                                                             (line    6)
* nome;vinculação <1>:                   Definições de função.
                                                             (line    6)
* nome;vinculação <2>:                   Definições de classe.
                                                             (line    6)
* nome;vinculação; ligação:              A instrução import. (line    6)
* nome;vinculação; ligação <1>:          A instrução import. (line   54)
* 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<23>.       (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  373)
* 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  248)
* noop() (método poplib.POP3):           Objetos POP3.       (line   79)
* NoOptionError:                         Exceções<9>.        (line   35)
* NOP (opcode):                          Instruções em bytecode do Python.
                                                             (line  137)
* noqiflush() (no módulo curses):        Funções<6>.         (line  383)
* noraw() (no módulo curses):            Funções<6>.         (line  391)
* 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  456)
* normalize() (método decimal.Decimal):  Objetos de Decimal. (line  445)
* normalize() (método xml.dom.Node):     Objetos Node.       (line  141)
* normalize() (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  443)
* normalize() (no módulo unicodedata):   unicodedata — Banco de dados de Unicode.
                                                             (line  134)
* 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  357)
* normpath() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  368)
* NoSectionError:                        Exceções<9>.        (line   11)
* NoSuchMailboxError:                    Exceções<21>.       (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)
* NOT_TAKEN (opcode):                    Instruções em bytecode do Python.
                                                             (line  143)
* 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  313)
* 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<21>.       (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  275)
* NotFoundErr:                           Exceções<23>.       (line   72)
* notify_all() (método asyncio.Condition): Condição.         (line   67)
* notify_all() (método threading.Condition): Condition objects.
                                                             (line  179)
* notify() (método asyncio.Condition):   Condição.           (line   54)
* notify() (método threading.Condition): Condition objects.  (line  159)
* notimeout() (método curses.window):    Window Objects.     (line  424)
* 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  274)
* NOTSET (no módulo logging):            Níveis de Logging.  (line   17)
* NotShareableError:                     Exceções<13>.       (line   27)
* NotStandaloneHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  364)
* NotSupportedErr:                       Exceções<23>.       (line   78)
* NotSupportedError:                     Exceções<7>.        (line   85)
* noutrefresh() (método curses.window):  Window Objects.     (line  432)
* nova vinculação; nova ligação;nome:    Instruções de atribuição.
                                                             (line    6)
* novas linhas universais:               Glossário.          (line 1718)
* 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 1470)
* novas linhas universais;io.IncrementalNewlineDecoder class: E/S de texto<2>.
                                                             (line  291)
* 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  228)
* novas linhas universais;método str.splitlines: Métodos de string.
                                                             (line  601)
* 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  217)
* nsmallest() (no módulo heapq):         heapq — Algoritmo de fila heap.
                                                             (line  181)
* 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   12)
* NullTranslations (classe em gettext):  A classe NullTranslations.
                                                             (line   13)
* num_addresses (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  133)
* num_addresses (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  336)
* 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  460)
* number_class() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  468)
* numerator (atributo fractions.Fraction): fractions — Números racionais.
                                                             (line  118)
* numerator (atributo numbers.Rational): A torre numérica.   (line   51)
* numeric() (no módulo unicodedata):     unicodedata — Banco de dados de Unicode.
                                                             (line   72)
* numérico;conversões:                   Tipos numéricos — int float complex.
                                                             (line  117)
* numérico;literais:                     Tipos numéricos — int float complex.
                                                             (line   20)
* número:                                Literais numéricos. (line    6)
* número complexo:                       Glossário.          (line  324)
* 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  406)
* object (atributo UnicodeError):        Exceções concretas. (line  467)
* object (classe interna):               Funções embutidas<3>.
                                                             (line 1289)
* 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 1217)
* objeto arquivo:                        Glossário.          (line  567)
* objeto arquivo ou similar:             Glossário.          (line  584)
* objeto arquivo;função embutida open(): Funções embutidas<3>.
                                                             (line 1326)
* objeto arquivo;io module:              Visão Geral<2>.     (line    6)
* objeto buffer;(veja o protocolo de buffer): Protocolo Iterador.
                                                             (line   66)
* objeto bytes ou similar:               Glossário.          (line  228)
* objeto caminho ou similar:             Glossário.          (line 1326)
* 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   39)
* objeto código <3>:                     Objeto célula.      (line   59)
* objeto imutável:                       Objetos valores e tipos.
                                                             (line   12)
* objeto inalcançável:                   Objetos valores e tipos.
                                                             (line   39)
* objeto mutável:                        Objetos valores e tipos.
                                                             (line   12)
* 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.      (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   39)
* 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 Função<2>.  (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;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 2112)
* 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   22)
* objeto;traceback <2>:                  Cláusula except.    (line   63)
* objeto;traceback <3>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  476)
* 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 ctypes.CField):       Structured data types.
                                                             (line  256)
* offset (atributo SyntaxError):         Exceções concretas. (line  339)
* 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  103)
* 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  222)
* opção de linha de comando; -disable-ipv6: Opções gerais.   (line   16)
* opção de linha de comando; -disable-safety: Opções de segurança.
                                                             (line   57)
* 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  234)
* 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  145)
* opção de linha de comando; -enable-pystats: Opções gerais. (line  127)
* opção de linha de comando; -enable-shared: Opções da ligação<2>.
                                                             (line    6)
* opção de linha de comando; -enable-slower-safety: Opções de segurança.
                                                             (line   77)
* 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    6)
* opção de linha de comando; -enable-wasm-pthreads: Opções de WebAssembly.
                                                             (line   16)
* 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; -m:         Opções de interface.
                                                             (line   56)
* 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-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  114)
* opção de linha de comando; -with-platlibdir: Opções gerais.
                                                             (line   91)
* 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  150)
* 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-tail-call-interp: Opções de desempenho.
                                                             (line  110)
* 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  101)
* 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  135)
* opção de linha de comando; -without-mimalloc: Opções de desempenho.
                                                             (line  121)
* opção de linha de comando; -without-pymalloc: Opções de desempenho.
                                                             (line  128)
* opção de linha de comando; -without-readline: Opções da biblioteca.
                                                             (line   45)
* opção de linha de comando; -without-remote-debug: Opções de desempenho.
                                                             (line  155)
* 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; LIBZSTD_CFLAGS: Opções para dependências de terceiros.
                                                             (line   90)
* opção de linha de comando; LIBZSTD_LIBS: Opções para dependências de terceiros.
                                                             (line   92)
* 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   99)
* opção de linha de comando; PANEL_LIBS: Opções para dependências de terceiros.
                                                             (line  101)
* opção de linha de comando; PKG_CONFIG: Opções gerais.      (line  266)
* opção de linha de comando; PKG_CONFIG_LIBDIR: Opções gerais.
                                                             (line  270)
* opção de linha de comando; PKG_CONFIG_PATH: Opções gerais. (line  272)
* opção de linha de comando; TCLTK_CFLAGS: Opções para dependências de terceiros.
                                                             (line  110)
* opção de linha de comando; TCLTK_LIBS: Opções para dependências de terceiros.
                                                             (line  112)
* opção de linha de comando; ZLIB_CFLAGS: Opções para dependências de terceiros.
                                                             (line  117)
* opção de linha de comando; ZLIB_LIBS:  Opções para dependências de terceiros.
                                                             (line  119)
* 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):            High-level Module Interface.
                                                             (line   22)
* 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): webbrowser — Controlador de navegador web conveniente.
                                                             (line  107)
* open_new() (método webbrowser.controller): Objetos controladores de navegador.
                                                             (line   21)
* open_new() (no módulo webbrowser):     webbrowser — Controlador de navegador web conveniente.
                                                             (line   99)
* 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  488)
* 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_urlresource() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  622)
* open() (método de classe tarfile.TarFile): TarFile Objects.
                                                             (line   99)
* open() (método imaplib.IMAP4):         Objetos IMAP4.      (line  252)
* open() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  566)
* open() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  145)
* open() (método pathlib.Path):          Lendo e escrevendo arquivos.
                                                             (line    6)
* open() (método urllib.request.OpenerDirector): OpenerDirector Objects.
                                                             (line   46)
* 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  139)
* 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 compression.zstd):   Lendo e escrevendo arquivos comprimidos.
                                                             (line    6)
* 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):                 High-level Module Interface.
                                                             (line   12)
* open() (no módulo lzma):               Lendo e escrevendo arquivos comprimidos<2>.
                                                             (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   51)
* 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):         webbrowser — Controlador de navegador web conveniente.
                                                             (line   77)
* OpenerDirector (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  318)
* OpenKey() (no módulo winreg):          Funções<14>.        (line  291)
* OpenKeyEx() (no módulo winreg):        Funções<14>.        (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  486)
* OPENSSL_VERSION_INFO (no módulo ssl):  Constantes<9>.      (line  496)
* OPENSSL_VERSION_NUMBER (no módulo ssl): Constantes<9>.     (line  506)
* 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 com índice:                   Sequências.         (line    6)
* operações em;dicionário;tipo:          Tipo mapeamento — dict.
                                                             (line    6)
* operações em;inteiro;tipos:            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;tipos:         Tipo mapeamento — dict.
                                                             (line    6)
* operações em;numérico;tipos:           Tipos numéricos — int float complex.
                                                             (line  104)
* operações em;sequência;tipos:          Operações comuns de sequências.
                                                             (line   20)
* operações em;sequência;tipos <1>:      Tipos sequências mutáveis.
                                                             (line   17)
* operador morsa:                        Operações booleanas.
                                                             (line   39)
* operador morsa <1>:                    Glossário.          (line 1766)
* operador;- (menos):                    Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* operador;- (menos) <1>:                Operações binárias aritméticas.
                                                             (line   91)
* operador;- (menos) <2>:                Tipos numéricos — int float complex.
                                                             (line   33)
* operador;!=:                           Comparações.        (line    6)
* operador;!= <1>:                       Comparações<2>.     (line    6)
* operador;@ (arroba):                   Operações binárias aritméticas.
                                                             (line   30)
* operador;* (asterisco):                Operações binárias aritméticas.
                                                             (line   17)
* operador;* (asterisco) <1>:            Tipos numéricos — int float complex.
                                                             (line   33)
* operador;**:                           O operador de potência.
                                                             (line    6)
* operador;** <1>:                       Tipos numéricos — int float complex.
                                                             (line   33)
* operador;/ (barra):                    Operações binárias aritméticas.
                                                             (line   38)
* operador;/ (barra) <1>:                Tipos numéricos — int float complex.
                                                             (line   33)
* operador;//:                           Operações binárias aritméticas.
                                                             (line   38)
* operador;// <1>:                       Tipos numéricos — int float complex.
                                                             (line   33)
* 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   51)
* operador;% (porcentagem) <1>:          Tipos numéricos — int float complex.
                                                             (line   33)
* 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   80)
* operador;+ (mais) <2>:                 Tipos numéricos — int float complex.
                                                             (line   33)
* 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 que):                Comparações<2>.     (line    6)
* operador;> (maior):                    Comparações.        (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:                            Operators and delimiters.
                                                             (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  350)
* optimize (atributo sys.flags):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  573)
* 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   62)
* OptionConflictError:                   Exceções<12>.       (line   11)
* OptionError:                           Exceções<12>.       (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<12>.       (line   16)
* optionxform() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  341)
* Or (classe em ast):                    Expressões<2>.      (line   87)
* or_() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  154)
* ordem de resolução de métodos:         Glossário.          (line 1106)
* ordered_attributes (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  145)
* 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 1484)
* 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  473)
* 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   83)
* OutputChecker (classe em doctest):     OutputChecker objects.
                                                             (line    6)
* OutputString() (método http.cookies.Morsel): Objetos Morsel.
                                                             (line   98)
* OutsideDestinationError:               tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  295)
* Overflow (classe em decimal):          Sinais.             (line   70)
* OverflowError:                         Exceções concretas. (line  220)
* OverflowError (built-in exception):    Objetos Inteiros.   (line  159)
* OverflowError (built-in exception) <1>: Objetos Inteiros.  (line  214)
* OverflowError (built-in exception) <2>: Objetos Inteiros.  (line  255)
* OverflowError (built-in exception) <3>: Objetos Inteiros.  (line  267)
* OverflowError (built-in exception) <4>: Objetos Inteiros.  (line  279)
* OverflowError (built-in exception) <5>: Objetos Inteiros.  (line  292)
* overlap_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  257)
* overlap() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line  109)
* overlaps() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  160)
* overlaps() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  350)
* overlay() (método curses.window):      Window Objects.     (line  439)
* 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  452)
* owner() (método pathlib.Path):         Permissões e propriedade.
                                                             (line    6)
* p (pdb command):                       Comandos de depuração.
                                                             (line  301)
* P_ALL (no módulo os):                  Gerenciamento de processo.
                                                             (line 1015)
* P_DETACH (no módulo os):               Gerenciamento de processo.
                                                             (line  738)
* P_NOWAIT (no módulo os):               Gerenciamento de processo.
                                                             (line  717)
* P_NOWAITO (no módulo os):              Gerenciamento de processo.
                                                             (line  717)
* P_OVERLAY (no módulo os):              Gerenciamento de processo.
                                                             (line  738)
* P_PGID (no módulo os):                 Gerenciamento de processo.
                                                             (line 1015)
* P_PID (no módulo os):                  Gerenciamento de processo.
                                                             (line 1015)
* P_PIDFD (no módulo os):                Gerenciamento de processo.
                                                             (line 1015)
* P_WAIT (no módulo os):                 Gerenciamento de processo.
                                                             (line  727)
* 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   77)
* packed (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  276)
* 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   83)
* pacote <2>:                            Glossário.          (line 1235)
* pacote de espaço de nomes:             Glossário.          (line 1181)
* pacote provisório:                     Glossário.          (line 1388)
* pacote regular:                        Glossário.          (line 1462)
* 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  396)
* pair_number() (no módulo curses):      Funções<6>.         (line  402)
* 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   66)
* palavra reservada;except:              A instrução try.    (line    6)
* palavra reservada;except_star:         Cláusula except.    (line   86)
* 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)
* Parameter (classe em inspect):         Introspecting callables with the Signature object.
                                                             (line  209)
* ParameterizedMIMEHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  255)
* parameters (atributo inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  114)
* parâmetro:                             Glossário.          (line 1244)
* 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  411)
* ParamSpecArgs (no módulo typing):      Criando tipos genéricos e apelidos de tipo.
                                                             (line  548)
* ParamSpecKwargs (no módulo typing):    Criando tipos genéricos e apelidos de tipo.
                                                             (line  548)
* 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 Class.      (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<5>. (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  214)
* 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<22>.
                                                             (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<9>.        (line   68)
* partial (atributo asyncio.IncompleteReadError): Exceções<16>.
                                                             (line   56)
* partial() (método imaplib.IMAP4):      Objetos IMAP4.      (line  271)
* partial() (no módulo functools):       functools — Higher-order functions and operations on callable objects.
                                                             (line  331)
* partialmethod (classe em functools):   functools — Higher-order functions and operations on callable objects.
                                                             (line  401)
* 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):              Métodos de string.  (line  437)
* partitioned (atributo http.cookies.Morsel): Objetos Morsel.
                                                             (line   13)
* 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  693)
* patch() (no módulo unittest.mock):     patch.              (line    9)
* PATH:                                  Alterações na API Python<6>.
                                                             (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<42>.      (line   16)
* PATH <8>:                              Segurança<42>.      (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>:                             Instalação.         (line   19)
* PATH <14>:                             Instalação.         (line   24)
* PATH <15>:                             Instalação.         (line   33)
* PATH <16>:                             Shebang lines.      (line   41)
* PATH <17>:                             Shebang lines.      (line   42)
* PATH <18>:                             Shebang lines.      (line   51)
* PATH <19>:                             Advanced Installation.
                                                             (line   10)
* PATH <20>:                             Advanced Installation.
                                                             (line   29)
* PATH <21>:                             Advanced Installation.
                                                             (line   32)
* PATH <22>:                             Instalando binários com threads livres.
                                                             (line   21)
* PATH <23>:                             Troubleshooting.    (line   55)
* PATH <24>:                             Troubleshooting.    (line   98)
* PATH <25>:                             Etapas de instalação.
                                                             (line   35)
* PATH <26>:                             Etapas de instalação.
                                                             (line   61)
* PATH <27>:                             Instalando sem UI.  (line   80)
* PATH <28>:                             Instalando sem UI.  (line   85)
* PATH <29>:                             Python Launcher for Windows Deprecated.
                                                             (line   17)
* PATH <30>:                             Pela linha de comando.
                                                             (line    9)
* PATH <31>:                             Linhas Shebang.     (line   56)
* PATH <32>:                             Linhas Shebang.     (line   62)
* PATH <33>:                             Linhas Shebang.     (line   64)
* PATH <34>:                             Linhas Shebang.     (line   69)
* PATH <35>:                             Comparação com os módulos os e os path.
                                                             (line   43)
* PATH <36>:                             Operações de diretório e arquivos.
                                                             (line  465)
* PATH <37>:                             Operações de diretório e arquivos.
                                                             (line  471)
* PATH <38>:                             Gerenciamento de processo.
                                                             (line   46)
* PATH <39>:                             Gerenciamento de processo.
                                                             (line   88)
* PATH <40>:                             Gerenciamento de processo.
                                                             (line   92)
* PATH <41>:                             Gerenciamento de processo.
                                                             (line   94)
* PATH <42>:                             Gerenciamento de processo.
                                                             (line  574)
* PATH <43>:                             Gerenciamento de processo.
                                                             (line  667)
* PATH <44>:                             Gerenciamento de processo.
                                                             (line  671)
* PATH <45>:                             Gerenciamento de processo.
                                                             (line  673)
* PATH <46>:                             Diversas informações de sistema.
                                                             (line  145)
* PATH <47>:                             Construtor Popen.   (line   37)
* PATH <48>:                             webbrowser — Controlador de navegador web conveniente.
                                                             (line  256)
* PATH <49>:                             webbrowser — Controlador de navegador web conveniente.
                                                             (line   34)
* PATH <50>:                             Como funcionam os venvs.
                                                             (line   17)
* PATH <51>:                             Como funcionam os venvs.
                                                             (line   62)
* PATH <52>:                             Como funcionam os venvs.
                                                             (line   67)
* PATH <53>:                             site — Gancho de configuração específico do site.
                                                             (line   73)
* PATH <54>:                             Incorporando Python<2>.
                                                             (line   31)
* PATH <55>:                             Incorporando Python<2>.
                                                             (line   37)
* PATH <56>:                             Como tornar um script Python executável no Unix?.
                                                             (line   24)
* PATH <57>:                             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  144)
* path (atributo ImportError):           Exceções concretas. (line   65)
* path (atributo importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  323)
* path (atributo importlib.machinery.AppleFrameworkLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  516)
* 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  998)
* 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 1497)
* 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>:              Process-wide parameters.
                                                             (line  142)
* Path browser:                          Menu Arquivo 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 1533)
* path_importer_cache (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1542)
* path_mtime() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  389)
* 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  368)
* 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  698)
* pathconf() (no módulo os):             Arquivos e diretórios.
                                                             (line  672)
* 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<46>.     (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  481)
* PathFinder (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  110)
* PathInfo (classe em pathlib.types):    Protocolos.         (line   11)
* PathLike (classe em os):               Parâmetros de processo.
                                                             (line  146)
* pathname2url() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  143)
* 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  323)
* PAX_FORMAT (no módulo tarfile):        tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  390)
* pax_headers (atributo tarfile.TarFile): TarFile Objects.   (line  332)
* 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):                   pdb — O depurador do Python.
                                                             (line  250)
* Pdb (classe no pdb):                   pdb — O depurador do Python.
                                                             (line   18)
* pdb opção de linha de comando; -c:     pdb — O depurador do Python.
                                                             (line   87)
* pdb opção de linha de comando; -command: pdb — O depurador do Python.
                                                             (line   87)
* pdb opção de linha de comando; -m:     pdb — O depurador do Python.
                                                             (line   94)
* pdb opção de linha de comando; -p:     pdb — O depurador do Python.
                                                             (line  102)
* pdb opção de linha de comando; -pid:   pdb — O depurador do Python.
                                                             (line  102)
* pdf() (método statistics.NormalDist):  Objetos NormalDist. (line   77)
* peek() (método bz2.BZ2File):           Des compressão de arquivos.
                                                             (line   76)
* peek() (método compression.zstd.ZstdFile): Lendo e escrevendo arquivos comprimidos.
                                                             (line   96)
* peek() (método gzip.GzipFile):         gzip — Suporte para arquivos gzip.
                                                             (line  135)
* peek() (método io.BufferedReader):     Buffered Streams.   (line   77)
* peek() (método lzma.LZMAFile):         Lendo e escrevendo arquivos comprimidos<2>.
                                                             (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 1339)
* PERCENT (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line  263)
* PERCENTEQUAL (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  311)
* perf_counter_ns() (no módulo time):    Funções<5>.         (line  246)
* perf_counter() (no módulo time):       Funções<5>.         (line  222)
* perfilador:                            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1018)
* perfilador <1>:                        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1711)
* 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  172)
* persistent_load (protocolo pickle):    Persistência de objetos externos.
                                                             (line    6)
* persistent_load() (método pickle.Unpickler): Interface do módulo.
                                                             (line  305)
* 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  132)
* PF_DIVERT (no módulo socket):          Constantes<8>.      (line  208)
* PF_PACKET (no módulo socket):          Constantes<8>.      (line  218)
* PF_RDS (no módulo socket):             Constantes<8>.      (line  240)
* 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  129)
* 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 opção de linha de comando; pickle_file: Interface de linha de comando.
                                                             (line   17)
* pickle() (no módulo copyreg):          copyreg — Registra funções de suporte pickle.
                                                             (line   23)
* PickleBuffer (classe em pickle):       Interface do módulo.
                                                             (line  336)
* PickleError:                           Interface do módulo.
                                                             (line  103)
* Pickler (classe em pickle):            Interface do módulo.
                                                             (line  131)
* pickletools opção de linha de comando; -a: Opções de linha de comando<5>.
                                                             (line    6)
* pickletools opção de linha de comando; -annotate: Opções de linha de comando<5>.
                                                             (line    6)
* pickletools opção de linha de comando; -indentlevel: Opções de linha de comando<5>.
                                                             (line   14)
* pickletools opção de linha de comando; -l: Opções de linha de comando<5>.
                                                             (line   14)
* pickletools opção de linha de comando; -m: Opções de linha de comando<5>.
                                                             (line   18)
* pickletools opção de linha de comando; -memo: Opções de linha de comando<5>.
                                                             (line   18)
* pickletools opção de linha de comando; -o: Opções de linha de comando<5>.
                                                             (line   10)
* pickletools opção de linha de comando; -output: Opções de linha de comando<5>.
                                                             (line   10)
* pickletools opção de linha de comando; -p: Opções de linha de comando<5>.
                                                             (line   23)
* pickletools opção de linha de comando; -preamble: Opções de linha de comando<5>.
                                                             (line   23)
* pickletools opção de linha de comando; pickle_file: Opções de linha de comando<5>.
                                                             (line   28)
* pickling;objetos:                      pickle — Serialização de objetos Python.
                                                             (line    8)
* PicklingError:                         Interface do módulo.
                                                             (line  108)
* 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  142)
* 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  341)
* 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  165)
* 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  134)
* 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)
* Placeholder (no módulo functools):     functools — Higher-order functions and operations on callable objects.
                                                             (line  323)
* platform (in module sys):              Process-wide parameters.
                                                             (line  180)
* platform (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1553)
* 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 1627)
* PlaySound() (no módulo winsound):      winsound — Interface de reprodução de som para o Windows.
                                                             (line   21)
* 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  233)
* plus() (método decimal.Context):       Objetos de contexto.
                                                             (line  464)
* PLUSEQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  299)
* pm() (no módulo pdb):                  pdb — O depurador do Python.
                                                             (line  221)
* POINTER() (no módulo ctypes):          Funções utilitárias.
                                                             (line  211)
* pointer() (no módulo ctypes):          Funções utilitárias.
                                                             (line  225)
* 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  102)
* 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   92)
* PollSelector (classe em selectors):    Classes<4>.         (line  171)
* poly() (no módulo turtle):             Métodos Especiais da Tartaruga.
                                                             (line    6)
* 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 1481)
* POP_EXCEPT (opcode):                   Instruções em bytecode do Python.
                                                             (line  442)
* POP_ITER (opcode):                     Instruções em bytecode do Python.
                                                             (line  151)
* POP_JUMP_IF_FALSE (opcode):            Instruções em bytecode do Python.
                                                             (line  900)
* POP_JUMP_IF_NONE (opcode):             Instruções em bytecode do Python.
                                                             (line  924)
* POP_JUMP_IF_NOT_NONE (opcode):         Instruções em bytecode do Python.
                                                             (line  915)
* POP_JUMP_IF_TRUE (opcode):             Instruções em bytecode do Python.
                                                             (line  885)
* pop_source() (método shlex.shlex):     shlex Objects.      (line   63)
* POP_TOP (opcode):                      Instruções em bytecode do Python.
                                                             (line  157)
* 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  207)
* pop() (método frozenset):              Tipo conjuntos — set frozenset.
                                                             (line  218)
* pop() (método mailbox.Mailbox):        Mailbox objects.    (line  216)
* pop() (método sequence):               Tipos sequências mutáveis.
                                                             (line  104)
* 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  146)
* popitem() (método collections.OrderedDict): Objetos OrderedDict.
                                                             (line   67)
* popitem() (método dict):               Tipo mapeamento — dict.
                                                             (line  216)
* popitem() (método mailbox.Mailbox):    Mailbox objects.    (line  225)
* popleft() (método collections.deque):  Objetos deque.      (line   98)
* porção:                                Glossário.          (line 1356)
* 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<20>.       (line   19)
* pos (atributo re.Match):               Objetos correspondência.
                                                             (line  183)
* pos (atributo re.PatternError):        Exceções<3>.        (line   24)
* pos (atributo tomllib.TOMLDecodeError): tomllib — Analisa arquivos TOML.
                                                             (line   74)
* pos() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  159)
* pos() (no módulo turtle):              Fala o estado de Turtle.
                                                             (line    6)
* position (atributo xml.etree.ElementTree.ParseError): Exceções<22>.
                                                             (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  492)
* POSIX_SPAWN_CLOSEFROM (no módulo os):  Gerenciamento de processo.
                                                             (line  504)
* POSIX_SPAWN_DUP2 (no módulo os):       Gerenciamento de processo.
                                                             (line  498)
* POSIX_SPAWN_OPEN (no módulo os):       Gerenciamento de processo.
                                                             (line  486)
* posix_spawn() (no módulo os):          Gerenciamento de processo.
                                                             (line  462)
* posix_spawnp() (no módulo os):         Gerenciamento de processo.
                                                             (line  566)
* 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):         pdb — O depurador do Python.
                                                             (line  212)
* 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  164)
* power() (método decimal.Context):      Objetos de contexto.
                                                             (line  470)
* pp (pdb command):                      Comandos de depuração.
                                                             (line  308)
* 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  134)
* 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 1653)
* PREFIXES (no módulo site):             Conteúdo do módulo<10>.
                                                             (line    6)
* prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  137)
* prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  338)
* 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_main() (método concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   35)
* 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   64)
* 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_call_graph() (no módulo asyncio): Call Graph Introspection.
                                                             (line   17)
* 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.
                                                             (line   58)
* print_exception() (no módulo traceback): Funções de nível de módulo.
                                                             (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.
                                                             (line   63)
* print_list() (no módulo traceback):    Funções de nível de módulo.
                                                             (line  101)
* print_stack() (método asyncio.Task):   Objeto Task.        (line  150)
* print_stack() (no módulo traceback):   Funções de nível de módulo.
                                                             (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.
                                                             (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  439)
* 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  253)
* 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  333)
* PRIO_DARWIN_NONUI (no módulo os):      Parâmetros de processo.
                                                             (line  333)
* PRIO_DARWIN_PROCESS (no módulo os):    Parâmetros de processo.
                                                             (line  333)
* PRIO_DARWIN_THREAD (no módulo os):     Parâmetros de processo.
                                                             (line  333)
* PRIO_PGRP (no módulo os):              Parâmetros de processo.
                                                             (line  322)
* PRIO_PROCESS (no módulo os):           Parâmetros de processo.
                                                             (line  322)
* PRIO_USER (no módulo os):              Parâmetros de processo.
                                                             (line  322)
* 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   31)
* 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  266)
* process_time() (no módulo time):       Funções<5>.         (line  253)
* process_tokens() (no módulo tabnanny): tabnanny — Detecção de indentação ambígua.
                                                             (line   45)
* process() (método logging.LoggerAdapter): LoggerAdapter Objects.
                                                             (line   21)
* ProcessError:                          Process e exceções. (line  288)
* 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  274)
* ProcessLookupError:                    Exceções de sistema operacional.
                                                             (line  109)
* processo;grupo:                        Parâmetros de processo.
                                                             (line  220)
* processo;grupo <1>:                    Parâmetros de processo.
                                                             (line  284)
* processo;id:                           Parâmetros de processo.
                                                             (line  290)
* processo;id do pai:                    Parâmetros de processo.
                                                             (line  297)
* 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  308)
* processo;prioridade de agendamento <1>: Parâmetros de processo.
                                                             (line  499)
* 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<21>.     (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)
* prompts do interpretador:              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1679)
* propagate (atributo logging.Logger):   Objetos Logger.     (line   51)
* property (classe interna):             Funções embutidas<3>.
                                                             (line 1667)
* property_declaration_handler (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line  106)
* property_dom_node (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line  113)
* property_lexical_handler (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line   99)
* property_xml_string (no módulo xml.sax.handler): xml sax handler — Base classes for SAX handlers.
                                                             (line  120)
* 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<26>.
                                                             (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: Inicializando pip por padrão.
                                                             (line   30)
* 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<3>.
                                                             (line  116)
* Propostas de Melhorias do Python; PEP 0683: Contagem de referências.
                                                             (line   71)
* 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 1356)
* Propostas de Melhorias do Python; PEP 100: Unicode<2>.     (line   15)
* Propostas de Melhorias do Python; PEP 11: Build changes.   (line   20)
* Propostas de Melhorias do Python; PEP 11 <1>: Suporte para plataformas móveis.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <2>: Suporte para plataformas móveis.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 11 <3>: Mudanças na construção.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 11 <4>: Mudanças na construção.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 11 <5>: Mudanças na construção.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 11 <6>: Mudanças na construção.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 11 <7>: Mudanças na construção<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <8>: PEP 538 Coerção de localidade C legada.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 11 <9>: Unsupported Operating Systems.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <10>: Mudanças na biblioteca.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 11 <11>: Construção<29>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 11 <12>: Construção<29>.
                                                             (line  107)
* Propostas de Melhorias do Python; PEP 11 <13>: Construção<65>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 11 <14>: Requisitos de construção.
                                                             (line   84)
* Propostas de Melhorias do Python; PEP 11 <15>: Supported Windows versions.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11#tier-2: Resumo – Destaques da versão<2>.
                                                             (line  145)
* Propostas de Melhorias do Python; PEP 11#tier-3: Resumo – Destaques da versão.
                                                             (line   74)
* Propostas de Melhorias do Python; PEP 11#tier-3 <1>: Build changes.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11#tier-3 <2>: Resumo – Destaques da versão<2>.
                                                             (line  140)
* Propostas de Melhorias do Python; PEP 11#tier-3 <3>: Resumo – Destaques da versão<2>.
                                                             (line  143)
* Propostas de Melhorias do Python; PEP 11#tier-3 <4>: 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<13>. (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  107)
* 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  191)
* 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  632)
* 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<25>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 246 <1>: PrepareProtocol objects.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 247: hmac<4>.        (line   20)
* Propostas de Melhorias do Python; PEP 249: sqlite3<3>.     (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<30>.
                                                             (line  121)
* Propostas de Melhorias do Python; PEP 249 <4>: Biblioteca<33>.
                                                             (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<36>.
                                                             (line   84)
* Propostas de Melhorias do Python; PEP 263 <3>: Introdução<13>.
                                                             (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 1725)
* 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   47)
* 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>: Template strings $-strings.
                                                             (line   17)
* 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 2287)
* Propostas de Melhorias do Python; PEP 302 <12>: linecache — Acesso aleatório a linhas de texto.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 302 <13>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1540)
* Propostas de Melhorias do Python; PEP 302 <14>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1551)
* 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   70)
* Propostas de Melhorias do Python; PEP 302 <17>: pkgutil — Utilitário de extensão de pacote.
                                                             (line   90)
* Propostas de Melhorias do Python; PEP 302 <18>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  112)
* Propostas de Melhorias do Python; PEP 302 <19>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  152)
* Propostas de Melhorias do Python; PEP 302 <20>: runpy — Localizando e executando módulos Python.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 302 <21>: Introdução<13>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 302 <22>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 302 <23>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  185)
* Propostas de Melhorias do Python; PEP 302 <24>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  213)
* Propostas de Melhorias do Python; PEP 302 <25>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  289)
* Propostas de Melhorias do Python; PEP 302 <26>: Glossário. (line 1041)
* 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   16)
* 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   64)
* 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  146)
* Propostas de Melhorias do Python; PEP 3107 <5>: Semânticas de anotação.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 3107 <6>: Semânticas de anotação.
                                                             (line   45)
* 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<13>.
                                                             (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 1725)
* 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<70>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 3118 <7>: Biblioteca<75>.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 3118 <8>: Biblioteca<104>.
                                                             (line  958)
* Propostas de Melhorias do Python; PEP 3118 <9>: Memory Views.
                                                             (line  123)
* Propostas de Melhorias do Python; PEP 3118 <10>: Interface do módulo.
                                                             (line   28)
* 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>: Introdução<13>.
                                                             (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>: Núcleo e embutidos<46>.
                                                             (line  230)
* Propostas de Melhorias do Python; PEP 3121 <2>: Module definitions.
                                                             (line   65)
* 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  168)
* 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<59>.
                                                             (line  600)
* Propostas de Melhorias do Python; PEP 3131 <2>: Nomes identificadores e palavras reservadas.
                                                             (line   65)
* 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<33>.
                                                             (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<13>.
                                                             (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<13>.
                                                             (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  223)
* 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<100>.
                                                             (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   85)
* 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<18>.
                                                             (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>: Exception types.
                                                             (line  252)
* Propostas de Melhorias do Python; PEP 3154: Resumo – Destaques da versão<11>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 3154 <1>: pickle<5>. (line   16)
* Propostas de Melhorias do Python; PEP 3154 <2>: Biblioteca<59>.
                                                             (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 1424)
* Propostas de Melhorias do Python; PEP 3156: Resumo – Destaques da versão<11>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3156 <1>: Resumo – Destaques da versão<11>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 3156 <2>: asyncio<14>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3156 <3>: asyncio<14>.
                                                             (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  165)
* 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 2305)
* 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<13>.
                                                             (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<4>.
                                                             (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  109)
* 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  114)
* 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  361)
* Propostas de Melhorias do Python; PEP 343 <8>: Glossário.  (line  367)
* 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<43>.  (line   78)
* Propostas de Melhorias do Python; PEP 353 <5>: Tipos<2>.   (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  419)
* Propostas de Melhorias do Python; PEP 362 <2>: Glossário.  (line   97)
* Propostas de Melhorias do Python; PEP 362 <3>: Glossário.  (line 1298)
* 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<13>.
                                                             (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<31>.
                                                             (line  603)
* 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  211)
* Propostas de Melhorias do Python; PEP 370 <4>: Variáveis de ambiente.
                                                             (line  223)
* Propostas de Melhorias do Python; PEP 370 <5>: Interface de linha de comando<9>.
                                                             (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  162)
* 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<26>.
                                                             (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<7>.   (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<37>.  (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   42)
* 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<7>.   (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<9>.
                                                             (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<11>.
                                                             (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<35>. (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 1434)
* 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>: Python Launcher for Windows Deprecated.
                                                             (line   23)
* 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   46)
* 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 1097)
* Propostas de Melhorias do Python; PEP 411 <1>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1108)
* Propostas de Melhorias do Python; PEP 411 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1932)
* Propostas de Melhorias do Python; PEP 411 <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1952)
* Propostas de Melhorias do Python; PEP 411 <4>: Glossário.  (line 1387)
* Propostas de Melhorias do Python; PEP 412: PEP 412 Key-Sharing Dictionary.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 412 <1>: functools — Higher-order functions and operations on callable objects.
                                                             (line   92)
* Propostas de Melhorias do Python; PEP 414: PEP 414 Explicit Unicode literals.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 414 <1>: Prefixos de string.
                                                             (line   36)
* 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<85>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 420 <3>: Núcleo e embutidos<90>.
                                                             (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<13>.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 420 <12>: Glossário. (line 1194)
* Propostas de Melhorias do Python; PEP 420 <13>: Glossário. (line 1362)
* 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 1227)
* Propostas de Melhorias do Python; PEP 421 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1235)
* 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<11>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 428 <1>: pathlib<14>.
                                                             (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<68>.
                                                             (line  312)
* 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<11>.
                                                             (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<11>.
                                                             (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<8>.   (line   67)
* Propostas de Melhorias do Python; PEP 442 <1>: Resumo – Destaques da versão<11>.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 442 <2>: Resumo – Destaques da versão<11>.
                                                             (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<50>.  (line   55)
* Propostas de Melhorias do Python; PEP 442 <6>: gc — Interface para o coletor de lixo.
                                                             (line  289)
* 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   93)
* Propostas de Melhorias do Python; PEP 442 <9>: Destruição de isolado cíclico.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 442 <10>: PyTypeObject Slots.
                                                             (line 1935)
* Propostas de Melhorias do Python; PEP 443: Resumo – Destaques da versão<11>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 443 <1>: functools<6>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 443 <2>: Glossário.  (line  746)
* Propostas de Melhorias do Python; PEP 445: Resumo – Destaques da versão<11>.
                                                             (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<11>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 446 <1>: Resumo – Destaques da versão<11>.
                                                             (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<20>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 446 <5>: Utilitários do sistema operacional.
                                                             (line  232)
* 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<73>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 448 <3>: Documentação<77>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 448 <4>: Núcleo e embutidos<93>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 448 <5>: Núcleo e embutidos<96>.
                                                             (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<11>.
                                                             (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<11>.
                                                             (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<31>.
                                                             (line  455)
* Propostas de Melhorias do Python; PEP 451 <6>: Núcleo e embutidos<85>.
                                                             (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 1466)
* Propostas de Melhorias do Python; PEP 451 <9>: runpy — Localizando e executando módulos Python.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 451 <10>: runpy — Localizando e executando módulos Python.
                                                             (line  180)
* Propostas de Melhorias do Python; PEP 451 <11>: runpy — Localizando e executando módulos Python.
                                                             (line  199)
* Propostas de Melhorias do Python; PEP 451 <12>: Introdução<13>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 451 <13>: Module slots.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 453: Resumo – Destaques da versão<11>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 453 <1>: Resumo – Destaques da versão<11>.
                                                             (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>: Inicializando pip por padrão.
                                                             (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<11>.
                                                             (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<11>.
                                                             (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   84)
* 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<60>.
                                                             (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<77>.
                                                             (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<103>.
                                                             (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<10>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 475 <3>: Biblioteca<68>.
                                                             (line  228)
* Propostas de Melhorias do Python; PEP 475 <4>: Biblioteca<101>.
                                                             (line  143)
* Propostas de Melhorias do Python; PEP 475 <5>: Funções embutidas<3>.
                                                             (line 1567)
* 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 1021)
* Propostas de Melhorias do Python; PEP 475 <10>: Gerenciamento de processo.
                                                             (line  983)
* 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  321)
* 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  244)
* Propostas de Melhorias do Python; PEP 475 <17>: Socket Objects.
                                                             (line  258)
* Propostas de Melhorias do Python; PEP 475 <18>: Socket Objects.
                                                             (line  334)
* Propostas de Melhorias do Python; PEP 475 <19>: Socket Objects.
                                                             (line  408)
* Propostas de Melhorias do Python; PEP 475 <20>: Socket Objects.
                                                             (line  427)
* Propostas de Melhorias do Python; PEP 475 <21>: Socket Objects.
                                                             (line  446)
* Propostas de Melhorias do Python; PEP 475 <22>: Socket Objects.
                                                             (line  490)
* Propostas de Melhorias do Python; PEP 475 <23>: select — Waiting for I/O completion.
                                                             (line  162)
* 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  108)
* 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  610)
* Propostas de Melhorias do Python; PEP 475 <30>: Conteúdo do módulo<5>.
                                                             (line  631)
* 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<59>.
                                                             (line 1268)
* Propostas de Melhorias do Python; PEP 479 <4>: Biblioteca<63>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 479 <5>: Núcleo e embutidos<64>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 479 <6>: Biblioteca<71>.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 479 <7>: Biblioteca<84>.
                                                             (line   80)
* Propostas de Melhorias do Python; PEP 479 <8>: Biblioteca<90>.
                                                             (line  326)
* Propostas de Melhorias do Python; PEP 479 <9>: Exceções concretas.
                                                             (line  304)
* Propostas de Melhorias do Python; PEP 479 <10>: Exceções concretas.
                                                             (line  306)
* 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  755)
* 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<5>.     (line   18)
* Propostas de Melhorias do Python; PEP 484 <9>: ast<5>.     (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   46)
* Propostas de Melhorias do Python; PEP 484 <17>: Definições de função.
                                                             (line  150)
* 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>: Glossário. (line   61)
* Propostas de Melhorias do Python; PEP 484 <29>: Glossário. (line  676)
* Propostas de Melhorias do Python; PEP 484 <30>: Glossário. (line  756)
* Propostas de Melhorias do Python; PEP 484 <31>: Glossário. (line 1700)
* Propostas de Melhorias do Python; PEP 484 <32>: Glossário. (line 1717)
* Propostas de Melhorias do Python; PEP 484 <33>: Glossário. (line 1748)
* 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<99>.
                                                             (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<9>.
                                                             (line  103)
* Propostas de Melhorias do Python; PEP 487 <4>: Documentação<63>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 487 <5>: Documentação<70>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 487 <6>: Núcleo e embutidos<82>.
                                                             (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<10>.
                                                             (line   80)
* Propostas de Melhorias do Python; PEP 488 <3>: Núcleo e embutidos<100>.
                                                             (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  101)
* 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<13>.
                                                             (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<16>.
                                                             (line   85)
* Propostas de Melhorias do Python; PEP 489 <4>: API C<13>.  (line   23)
* Propostas de Melhorias do Python; PEP 489 <5>: Biblioteca<17>.
                                                             (line  270)
* Propostas de Melhorias do Python; PEP 489 <6>: Biblioteca<27>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 489 <7>: Biblioteca<43>.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 489 <8>: Biblioteca<43>.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 489 <9>: Núcleo e embutidos<43>.
                                                             (line   70)
* Propostas de Melhorias do Python; PEP 489 <10>: Biblioteca<44>.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 489 <11>: Biblioteca<44>.
                                                             (line  177)
* Propostas de Melhorias do Python; PEP 489 <12>: Núcleo e embutidos<44>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 489 <13>: Biblioteca<45>.
                                                             (line  103)
* Propostas de Melhorias do Python; PEP 489 <14>: API C<41>. (line   11)
* Propostas de Melhorias do Python; PEP 489 <15>: API C<41>. (line   14)
* Propostas de Melhorias do Python; PEP 489 <16>: API C<41>. (line   17)
* Propostas de Melhorias do Python; PEP 489 <17>: API C<41>. (line   20)
* Propostas de Melhorias do Python; PEP 489 <18>: API C<41>. (line   23)
* Propostas de Melhorias do Python; PEP 489 <19>: API C<41>. (line   26)
* Propostas de Melhorias do Python; PEP 489 <20>: API C<41>. (line   29)
* Propostas de Melhorias do Python; PEP 489 <21>: API C<41>. (line   38)
* Propostas de Melhorias do Python; PEP 489 <22>: API C<41>. (line   41)
* Propostas de Melhorias do Python; PEP 489 <23>: API C<41>. (line   44)
* Propostas de Melhorias do Python; PEP 489 <24>: API C<41>. (line   47)
* Propostas de Melhorias do Python; PEP 489 <25>: Biblioteca<46>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 489 <26>: Núcleo e embutidos<46>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 489 <27>: Núcleo e embutidos<46>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 489 <28>: Núcleo e embutidos<46>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 489 <29>: Núcleo e embutidos<46>.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 489 <30>: Núcleo e embutidos<46>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 489 <31>: Núcleo e embutidos<46>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 489 <32>: Núcleo e embutidos<46>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 489 <33>: Núcleo e embutidos<46>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 489 <34>: Núcleo e embutidos<46>.
                                                             (line   74)
* Propostas de Melhorias do Python; PEP 489 <35>: Núcleo e embutidos<46>.
                                                             (line   90)
* Propostas de Melhorias do Python; PEP 489 <36>: Núcleo e embutidos<46>.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 489 <37>: Biblioteca<47>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 489 <38>: Biblioteca<47>.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 489 <39>: Biblioteca<47>.
                                                             (line  423)
* Propostas de Melhorias do Python; PEP 489 <40>: Núcleo e embutidos<47>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 489 <41>: Núcleo e embutidos<47>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 489 <42>: Núcleo e embutidos<47>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 489 <43>: Núcleo e embutidos<48>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 489 <44>: Núcleo e embutidos<48>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 489 <45>: Núcleo e embutidos<48>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 489 <46>: Núcleo e embutidos<48>.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 489 <47>: Núcleo e embutidos<48>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 489 <48>: Núcleo e embutidos<49>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 489 <49>: Núcleo e embutidos<49>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 489 <50>: Núcleo e embutidos<49>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 489 <51>: Núcleo e embutidos<49>.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 489 <52>: Núcleo e embutidos<49>.
                                                             (line  110)
* Propostas de Melhorias do Python; PEP 489 <53>: Núcleo e embutidos<49>.
                                                             (line  119)
* Propostas de Melhorias do Python; PEP 489 <54>: Núcleo e embutidos<50>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 489 <55>: Núcleo e embutidos<50>.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 489 <56>: Núcleo e embutidos<50>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 489 <57>: Núcleo e embutidos<50>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 489 <58>: Núcleo e embutidos<50>.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 489 <59>: Núcleo e embutidos<51>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 489 <60>: Introdução<13>.
                                                             (line   83)
* Propostas de Melhorias do Python; PEP 489 <61>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 489 <62>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  307)
* Propostas de Melhorias do Python; PEP 489 <63>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  326)
* Propostas de Melhorias do Python; PEP 489 <64>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  332)
* Propostas de Melhorias do Python; PEP 489 <65>: importlib util – Utility code for importers.
                                                             (line  187)
* Propostas de Melhorias do Python; PEP 489 <66>: Criando extensões sem ferramentas de terceiros.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 489 <67>: Definindo módulos de extensão.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 489 <68>: Função de inicialização.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 489 <69>: 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<16>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 492 <6>: Núcleo e embutidos<67>.
                                                             (line   98)
* Propostas de Melhorias do Python; PEP 492 <7>: Biblioteca<85>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 492 <8>: Biblioteca<91>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 492 <9>: Núcleo e embutidos<97>.
                                                             (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  103)
* Propostas de Melhorias do Python; PEP 492 <17>: Glossário. (line  136)
* Propostas de Melhorias do Python; PEP 492 <18>: Glossário. (line  143)
* Propostas de Melhorias do Python; PEP 492 <19>: Glossário. (line  152)
* Propostas de Melhorias do Python; PEP 492 <20>: Glossário. (line  196)
* Propostas de Melhorias do Python; PEP 492 <21>: Glossário. (line  394)
* Propostas de Melhorias do Python; PEP 492 <22>: Glossário. (line  402)
* 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<83>.
                                                             (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<85>.
                                                             (line  283)
* Propostas de Melhorias do Python; PEP 498 <3>: Literais de strings formatadas.
                                                             (line  157)
* Propostas de Melhorias do Python; PEP 498 <4>: Glossário.  (line  567)
* 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<86>.
                                                             (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 509: API C<13>.      (line   16)
* Propostas de Melhorias do Python; PEP 511: Alterações na API Python<9>.
                                                             (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<4>.   (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<81>.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 515 <4>: Núcleo e embutidos<81>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 515 <5>: Minilinguagem de especificação de formato.
                                                             (line  165)
* Propostas de Melhorias do Python; PEP 515 <6>: fractions — Números racionais.
                                                             (line   97)
* 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<83>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 519 <2>: Núcleo e embutidos<84>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 519 <3>: Biblioteca<85>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 519 <4>: Biblioteca<85>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 519 <5>: Biblioteca<85>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 519 <6>: API C<71>.  (line    6)
* Propostas de Melhorias do Python; PEP 519 <7>: Glossário.  (line 1339)
* 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<5>.
                                                             (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<23>.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 523 <6>: Ferramentas/Demos<42>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 523 <7>: Ferramentas/Demos<46>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 523 <8>: Núcleo e embutidos<81>.
                                                             (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  179)
* Propostas de Melhorias do Python; PEP 523 <11>: Low-level API.
                                                             (line  188)
* Propostas de Melhorias do Python; PEP 524: Resumo – Destaques da versão<9>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 524 <1>: os<9>.      (line   20)
* Propostas de Melhorias do Python; PEP 524 <2>: os<9>.      (line   25)
* Propostas de Melhorias do Python; PEP 524 <3>: Biblioteca<82>.
                                                             (line  150)
* Propostas de Melhorias do Python; PEP 524 <4>: Biblioteca<82>.
                                                             (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<81>.
                                                             (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 1095)
* Propostas de Melhorias do Python; PEP 525 <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1927)
* Propostas de Melhorias do Python; PEP 525 <6>: Code Objects Bit Flags.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 525 <7>: Glossário.  (line  137)
* Propostas de Melhorias do Python; PEP 526: Outras mudanças na linguagem<4>.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 526 <1>: ast<5>.     (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<10>. (line   23)
* Propostas de Melhorias do Python; PEP 526 <5>: Núcleo e embutidos<81>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 526 <6>: instruções de atribuição anotado.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 526 <7>: Definições de função.
                                                             (line  154)
* Propostas de Melhorias do Python; PEP 526 <8>: Formas especiais.
                                                             (line  208)
* 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>: Semânticas de anotação.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 526 <13>: Semânticas de anotação.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 526 <14>: Auxiliares de ast.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 526 <15>: Sinalizadores do compilador<2>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 526 <16>: Glossário. (line   61)
* Propostas de Melhorias do Python; PEP 526 <17>: Glossário. (line 1748)
* 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  569)
* Propostas de Melhorias do Python; PEP 529: Alterações na API Python<6>.
                                                             (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<26>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 529 <3>: Biblioteca<54>.
                                                             (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  368)
* 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  866)
* Propostas de Melhorias do Python; PEP 529 <9>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2048)
* 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<81>.
                                                             (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<53>.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 538 <5>: Documentação<54>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 538 <6>: Núcleo e embutidos<68>.
                                                             (line  134)
* Propostas de Melhorias do Python; PEP 538 <7>: Variáveis de ambiente.
                                                             (line  442)
* 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  539)
* 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<60>.  (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<65>.
                                                             (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  539)
* Propostas de Melhorias do Python; PEP 540 <5>: Configuração do Python.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 544: typing<9>.      (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  161)
* 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<59>.
                                                             (line  795)
* Propostas de Melhorias do Python; PEP 552 <4>: Núcleo e embutidos<65>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 552 <5>: Introdução<13>.
                                                             (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<67>.
                                                             (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>: concurrent interpreters — Múltiplos interpretadores no mesmo processo.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 554 <2>: 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<65>.
                                                             (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<66>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 562 <2>: Núcleo e embutidos<65>.
                                                             (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: from __future__ import annotations.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 563 <1>: PEP 563 pode não ser o futuro.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 563 <2>: PEP 563 Avaliação Postergada de Anotações.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 563 <3>: Biblioteca<40>.
                                                             (line  300)
* Propostas de Melhorias do Python; PEP 563 <4>: Núcleo e embutidos<45>.
                                                             (line   83)
* Propostas de Melhorias do Python; PEP 563 <5>: Instruções future.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 563 <6>: Definições de função.
                                                             (line  159)
* Propostas de Melhorias do Python; PEP 563 <7>: Conteúdo do módulo<9>.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 563 <8>: Semânticas de anotação.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 563 <9>: Semânticas de anotação.
                                                             (line   53)
* 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<68>.
                                                             (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<2>. (line   21)
* Propostas de Melhorias do Python; PEP 567 <1>: asyncio<10>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 567 <2>: Documentação<53>.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 567 <3>: Documentação<55>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 567 <4>: Núcleo e embutidos<64>.
                                                             (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>: Future Object.
                                                             (line  105)
* 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<55>.
                                                             (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<7>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 572 <3>: Núcleo e embutidos<27>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 572 <4>: Documentação<44>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 572 <5>: Núcleo e embutidos<53>.
                                                             (line  184)
* Propostas de Melhorias do Python; PEP 572 <6>: Núcleo e embutidos<58>.
                                                             (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<6>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 573 <1>: Novas funcionalidades<11>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 573 <2>: Núcleo e embutidos<47>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 573 <3>: API C<44>.  (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   51)
* 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>: System Functions.
                                                             (line  138)
* Propostas de Melhorias do Python; PEP 584: Resumo – Destaques da versão<6>.
                                                             (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<49>.
                                                             (line  193)
* Propostas de Melhorias do Python; PEP 584 <3>: Biblioteca<49>.
                                                             (line  196)
* Propostas de Melhorias do Python; PEP 584 <4>: Biblioteca<49>.
                                                             (line  210)
* Propostas de Melhorias do Python; PEP 584 <5>: Biblioteca<50>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 584 <6>: Biblioteca<50>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 584 <7>: Biblioteca<50>.
                                                             (line  120)
* Propostas de Melhorias do Python; PEP 584 <8>: Biblioteca<50>.
                                                             (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  241)
* Propostas de Melhorias do Python; PEP 584 <15>: Parâmetros de processo.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 584 <16>: Parâmetros de processo.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 585: Resumo – Destaques da versão<6>.
                                                             (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<28>.
                                                             (line  158)
* Propostas de Melhorias do Python; PEP 585 <3>: Biblioteca<37>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 585 <4>: Documentação<32>.
                                                             (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  167)
* 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  756)
* Propostas de Melhorias do Python; PEP 586: typing<6>.      (line   10)
* Propostas de Melhorias do Python; PEP 586 <1>: typing<8>.  (line    7)
* Propostas de Melhorias do Python; PEP 586 <2>: typing<9>.  (line   19)
* Propostas de Melhorias do Python; PEP 586 <3>: Formas especiais.
                                                             (line  164)
* Propostas de Melhorias do Python; PEP 587: Python configuration C API.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 587 <1>: Python configuration C API.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 587 <2>: Python configuration C API.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 587 <3>: APIs C removidas.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 587 <4>: APIs C removidas<2>.
                                                             (line  100)
* Propostas de Melhorias do Python; PEP 587 <5>: Descontinuados<5>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 587 <6>: PEP 587 Configuração de Inicialização do Python.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 587 <7>: PEP 587 Configuração de Inicialização do Python.
                                                             (line   84)
* Propostas de Melhorias do Python; PEP 587 <8>: API C<9>.   (line   32)
* Propostas de Melhorias do Python; PEP 587 <9>: API C<35>.  (line  125)
* Propostas de Melhorias do Python; PEP 587 <10>: Núcleo e embutidos<53>.
                                                             (line   76)
* Propostas de Melhorias do Python; PEP 587 <11>: API C<51>. (line    6)
* Propostas de Melhorias do Python; PEP 587 <12>: PyConfig C API.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 589: typing<9>.      (line    8)
* Propostas de Melhorias do Python; PEP 590: APIs C removidas<2>.
                                                             (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<5>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 590 <3>: Resumo – Destaques da versão<6>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 590 <4>: Otimizações<6>.
                                                             (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<16>.
                                                             (line  175)
* Propostas de Melhorias do Python; PEP 590 <7>: Biblioteca<23>.
                                                             (line 1129)
* Propostas de Melhorias do Python; PEP 590 <8>: API C<20>.  (line  146)
* Propostas de Melhorias do Python; PEP 590 <9>: Núcleo e embutidos<29>.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 590 <10>: Biblioteca<33>.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 590 <11>: Núcleo e embutidos<34>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 590 <12>: Núcleo e embutidos<37>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 590 <13>: Núcleo e embutidos<38>.
                                                             (line  348)
* Propostas de Melhorias do Python; PEP 590 <14>: Núcleo e embutidos<40>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 590 <15>: Núcleo e embutidos<40>.
                                                             (line   74)
* Propostas de Melhorias do Python; PEP 590 <16>: Núcleo e embutidos<46>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 590 <17>: Núcleo e embutidos<46>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 590 <18>: Núcleo e embutidos<48>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 590 <19>: Núcleo e embutidos<48>.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 590 <20>: Núcleo e embutidos<49>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 590 <21>: Núcleo e embutidos<49>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 590 <22>: Núcleo e embutidos<49>.
                                                             (line   67)
* Propostas de Melhorias do Python; PEP 590 <23>: API C<51>. (line   17)
* Propostas de Melhorias do Python; PEP 590 <24>: O protocolo vectorcall.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 591: typing<9>.      (line   26)
* Propostas de Melhorias do Python; PEP 591 <1>: Formas especiais.
                                                             (line  256)
* 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<6>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 593 <1>: typing<7>.  (line    6)
* Propostas de Melhorias do Python; PEP 593 <2>: Biblioteca<51>.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 593 <3>: Formas especiais.
                                                             (line  450)
* Propostas de Melhorias do Python; PEP 593 <4>: Auxiliares de introspecção.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 594: Resumo – Destaques da versão<2>.
                                                             (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<4>.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 594 <6>: Módulos.    (line    6)
* Propostas de Melhorias do Python; PEP 594 <7>: Biblioteca<23>.
                                                             (line  894)
* Propostas de Melhorias do Python; PEP 594 <8>: Biblioteca<23>.
                                                             (line  897)
* Propostas de Melhorias do Python; PEP 594 <9>: Biblioteca<23>.
                                                             (line  900)
* Propostas de Melhorias do Python; PEP 594 <10>: Biblioteca<23>.
                                                             (line  908)
* Propostas de Melhorias do Python; PEP 594 <11>: Biblioteca<23>.
                                                             (line  912)
* Propostas de Melhorias do Python; PEP 594 <12>: Biblioteca<23>.
                                                             (line  918)
* Propostas de Melhorias do Python; PEP 594 <13>: Biblioteca<23>.
                                                             (line  921)
* Propostas de Melhorias do Python; PEP 594 <14>: Biblioteca<23>.
                                                             (line  936)
* Propostas de Melhorias do Python; PEP 594 <15>: Biblioteca<23>.
                                                             (line  939)
* Propostas de Melhorias do Python; PEP 594 <16>: Biblioteca<23>.
                                                             (line  946)
* Propostas de Melhorias do Python; PEP 594 <17>: Biblioteca<23>.
                                                             (line  949)
* Propostas de Melhorias do Python; PEP 594 <18>: Biblioteca<23>.
                                                             (line  952)
* Propostas de Melhorias do Python; PEP 594 <19>: Biblioteca<23>.
                                                             (line  955)
* Propostas de Melhorias do Python; PEP 594 <20>: Biblioteca<23>.
                                                             (line  958)
* Propostas de Melhorias do Python; PEP 594 <21>: Biblioteca<23>.
                                                             (line 1014)
* Propostas de Melhorias do Python; PEP 594 <22>: Biblioteca<23>.
                                                             (line 1017)
* Propostas de Melhorias do Python; PEP 594 <23>: Biblioteca<23>.
                                                             (line 1020)
* Propostas de Melhorias do Python; PEP 594 <24>: Biblioteca<23>.
                                                             (line 1023)
* Propostas de Melhorias do Python; PEP 594 <25>: Biblioteca<30>.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 594 <26>: Biblioteca<31>.
                                                             (line  681)
* Propostas de Melhorias do Python; PEP 594 <27>: Biblioteca<32>.
                                                             (line   94)
* Propostas de Melhorias do Python; PEP 594 <28>: Biblioteca<33>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 594 <29>: Biblioteca<33>.
                                                             (line  150)
* Propostas de Melhorias do Python; PEP 594 <30>: Testes<28>.
                                                             (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<5>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 597 <1>: Biblioteca<41>.
                                                             (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<2>.
                                                             (line  172)
* Propostas de Melhorias do Python; PEP 602 <1>: Resumo – Destaques da versão<6>.
                                                             (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<5>.
                                                             (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<44>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 604 <3>: Documentação<41>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 604 <4>: Tipo União. (line  107)
* 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<5>.
                                                             (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<39>.
                                                             (line  691)
* Propostas de Melhorias do Python; PEP 612 <3>: Biblioteca<40>.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 612 <4>: Núcleo e embutidos<43>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 612 <5>: Biblioteca<44>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 612 <6>: Biblioteca<44>.
                                                             (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  135)
* Propostas de Melhorias do Python; PEP 612 <10>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  541)
* 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<5>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 613 <1>: PEP 613 TypeAlias.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 613 <2>: Biblioteca<46>.
                                                             (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<6>.
                                                             (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<49>.
                                                             (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<6>.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 615 <1>: zoneinfo.   (line   38)
* Propostas de Melhorias do Python; PEP 615 <2>: Biblioteca<48>.
                                                             (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<6>.
                                                             (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<48>.
                                                             (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<6>.
                                                             (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<8>.
                                                             (line   97)
* Propostas de Melhorias do Python; PEP 617 <6>: Biblioteca<39>.
                                                             (line  178)
* Propostas de Melhorias do Python; PEP 617 <7>: Biblioteca<49>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 617 <8>: Notação.    (line   50)
* Propostas de Melhorias do Python; PEP 618: Resumo – Destaques da versão<5>.
                                                             (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<46>.
                                                             (line  209)
* Propostas de Melhorias do Python; PEP 623: Resumo – Destaques da versão<3>.
                                                             (line  112)
* Propostas de Melhorias do Python; PEP 623 <1>: Otimizações<3>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 623 <2>: Removidos<3>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 623 <3>: Resumo – Destaques da versão<5>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 623 <4>: API C<28>.  (line   21)
* Propostas de Melhorias do Python; PEP 623 <5>: Núcleo e embutidos<41>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 623 <6>: Documentação<36>.
                                                             (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<4>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 624 <1>: Removidos<5>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 624 <2>: Resumo – Destaques da versão<5>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 624 <3>: API C<35>.  (line  143)
* Propostas de Melhorias do Python; PEP 624#alternative-apis: Removidos<5>.
                                                             (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>: Remoção pendente no Python 3 15<3>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 626 <2>: Descontinuados<2>.
                                                             (line  234)
* Propostas de Melhorias do Python; PEP 626 <3>: Remoção pendente no Python 3 15<5>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 626 <4>: Resumo – Destaques da versão<5>.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 626 <5>: Núcleo e embutidos<30>.
                                                             (line  422)
* Propostas de Melhorias do Python; PEP 626 <6>: Métodos de objetos código.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 626 <7>: Funções de análise.
                                                             (line  191)
* Propostas de Melhorias do Python; PEP 626 <8>: Remoção pendente no Python 3 15<7>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 628: cmath.          (line    7)
* Propostas de Melhorias do Python; PEP 628 <1>: math<8>.    (line    7)
* Propostas de Melhorias do Python; PEP 628 <2>: Biblioteca<83>.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 630: API C<13>.      (line   24)
* Propostas de Melhorias do Python; PEP 630#type-checking: Novos recursos na API C.
                                                             (line  142)
* Propostas de Melhorias do Python; PEP 632: Resumo – Destaques da versão<3>.
                                                             (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<5>.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 632 <3>: distutils<2>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 632 <4>: Biblioteca<30>.
                                                             (line   38)
* 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<5>.
                                                             (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<31>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 634 <3>: Núcleo e embutidos<39>.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 634 <4>: Núcleo e embutidos<41>.
                                                             (line   57)
* 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  895)
* Propostas de Melhorias do Python; PEP 634 <9>: PyTypeObject Slots.
                                                             (line  919)
* Propostas de Melhorias do Python; PEP 635: Resumo – Destaques da versão<5>.
                                                             (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<5>.
                                                             (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  186)
* 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<5>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 644 <2>: hashlib<3>. (line    7)
* Propostas de Melhorias do Python; PEP 644 <3>: ssl<4>.     (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<20>.
                                                             (line  177)
* Propostas de Melhorias do Python; PEP 644 <6>: Biblioteca<31>.
                                                             (line  523)
* Propostas de Melhorias do Python; PEP 644 <7>: Construção<38>.
                                                             (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  125)
* Propostas de Melhorias do Python; PEP 646 <5>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  367)
* Propostas de Melhorias do Python; PEP 647: Resumo – Destaques da versão<5>.
                                                             (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<40>.
                                                             (line  182)
* Propostas de Melhorias do Python; PEP 647 <3>: Formas especiais.
                                                             (line  570)
* Propostas de Melhorias do Python; PEP 649: Resumo – Destaques da versão.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 649 <1>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 649 <2>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 649 <3>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 649 <4>: typing.     (line   28)
* Propostas de Melhorias do Python; PEP 649 <5>: Changes in annotations PEP 649 and PEP 749.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 649 <6>: Biblioteca<16>.
                                                             (line  812)
* Propostas de Melhorias do Python; PEP 649 <7>: Núcleo e embutidos<15>.
                                                             (line  515)
* Propostas de Melhorias do Python; PEP 649 <8>: Núcleo e embutidos<15>.
                                                             (line  570)
* Propostas de Melhorias do Python; PEP 649 <9>: Núcleo e embutidos<15>.
                                                             (line  590)
* Propostas de Melhorias do Python; PEP 649 <10>: Atributos especiais graváveis.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 649 <11>: Outros atributos graváveis em objetos de módulo.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 649 <12>: Atributos especiais.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 649 <13>: Anotações. (line   52)
* Propostas de Melhorias do Python; PEP 649 <14>: Escopos de anotação.
                                                             (line   70)
* Propostas de Melhorias do Python; PEP 649 <15>: Constante. (line   15)
* Propostas de Melhorias do Python; PEP 649 <16>: Conteúdo do módulo<9>.
                                                             (line  132)
* Propostas de Melhorias do Python; PEP 649 <17>: Conteúdo do módulo<9>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 649 <18>: annotationlib — Funcionalidade para introspecção de anotações.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 649 <19>: annotationlib — Funcionalidade para introspecção de anotações.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 649 <20>: Semânticas de anotação.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 649 <21>: Semânticas de anotação.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 649 <22>: Glossário. (line   61)
* Propostas de Melhorias do Python; PEP 649#the-stringizer-and-the-fake-globals-environment: Funções<12>.
                                                             (line   51)
* 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<36>.  (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<30>.
                                                             (line  174)
* Propostas de Melhorias do Python; PEP 654 <4>: Núcleo e embutidos<35>.
                                                             (line  146)
* Propostas de Melhorias do Python; PEP 654 <5>: Núcleo e embutidos<37>.
                                                             (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<32>.
                                                             (line  266)
* Propostas de Melhorias do Python; PEP 655 <2>: Formas especiais.
                                                             (line  270)
* Propostas de Melhorias do Python; PEP 655 <3>: Formas especiais.
                                                             (line  279)
* Propostas de Melhorias do Python; PEP 655 <4>: Outras diretivas especiais.
                                                             (line  486)
* 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<3>. (line   18)
* Propostas de Melhorias do Python; PEP 657 <2>: Biblioteca<32>.
                                                             (line  223)
* Propostas de Melhorias do Python; PEP 657 <3>: Núcleo e embutidos<38>.
                                                             (line  337)
* Propostas de Melhorias do Python; PEP 659: Melhorias no modo com threads livres.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 659 <1>: PEP 659 Interpretador adaptativo especializado.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 659 <2>: PEP 659 Interpretador adaptativo especializado.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 659 <3>: Desempenho com thread única.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 667: Novas descontinuações.
                                                             (line  122)
* Propostas de Melhorias do Python; PEP 667 <1>: Resumo – Destaques da versão<2>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 667 <2>: Definidas semânticas de mutação para locals.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 667 <3>: Definidas semânticas de mutação para locals.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 667 <4>: APIs C descontinuadas<2>.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 667 <5>: Alterações na API Python<2>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 667 <6>: Alterações na API Python<2>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 667 <7>: Alterações na API Python<2>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 667 <8>: Funções embutidas<3>.
                                                             (line 1188)
* Propostas de Melhorias do Python; PEP 667 <9>: pdb — O depurador do Python.
                                                             (line  145)
* Propostas de Melhorias do Python; PEP 667 <10>: Reflexão.  (line   44)
* Propostas de Melhorias do Python; PEP 667 <11>: Objetos Frame.
                                                             (line  136)
* Propostas de Melhorias do Python; PEP 667 <12>: Frame Locals Proxies.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 669: Resumo – Destaques da versão<2>.
                                                             (line  117)
* Propostas de Melhorias do Python; PEP 669 <1>: Novas funcionalidades<3>.
                                                             (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<23>.
                                                             (line  203)
* Propostas de Melhorias do Python; PEP 670: Resumo – Destaques da versão<4>.
                                                             (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<34>.
                                                             (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<33>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 675 <2>: Tipos especiais.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 676: Documentação<27>.
                                                             (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<23>.
                                                             (line  183)
* Propostas de Melhorias do Python; PEP 678 <3>: Núcleo e embutidos<24>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 678 <4>: Núcleo e embutidos<31>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 680: Resumo – Destaques da versão<4>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 680 <1>: Novos módulos<4>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 680 <2>: Biblioteca<33>.
                                                             (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<32>.
                                                             (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   99)
* Propostas de Melhorias do Python; PEP 683: Novas funcionalidades<5>.
                                                             (line  155)
* Propostas de Melhorias do Python; PEP 683 <1>: Núcleo e embutidos<23>.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 683 <2>: Contagem de referências.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 683 <3>: Glossário.  (line  830)
* Propostas de Melhorias do Python; PEP 684: PEP 734 Múltiplos interpretadores na biblioteca padrão.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 684 <1>: PEP 684 Uma GIL por interpretador.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 684 <2>: Novas funcionalidades<5>.
                                                             (line  190)
* Propostas de Melhorias do Python; PEP 684 <3>: concurrent interpreters — Múltiplos interpretadores no mesmo processo.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 684 <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1219)
* Propostas de Melhorias do Python; PEP 684 <5>: High-level API.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 684 <6>: 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<19>. (line  148)
* Propostas de Melhorias do Python; PEP 687 <1>: Núcleo e embutidos<22>.
                                                             (line  342)
* Propostas de Melhorias do Python; PEP 687 <2>: Biblioteca<24>.
                                                             (line  290)
* Propostas de Melhorias do Python; PEP 687 <3>: Biblioteca<24>.
                                                             (line  297)
* Propostas de Melhorias do Python; PEP 687 <4>: Biblioteca<24>.
                                                             (line  330)
* Propostas de Melhorias do Python; PEP 687 <5>: Biblioteca<24>.
                                                             (line  333)
* Propostas de Melhorias do Python; PEP 687 <6>: Biblioteca<24>.
                                                             (line  343)
* Propostas de Melhorias do Python; PEP 687 <7>: Biblioteca<24>.
                                                             (line  400)
* Propostas de Melhorias do Python; PEP 687 <8>: Núcleo e embutidos<24>.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 687 <9>: Biblioteca<26>.
                                                             (line  111)
* Propostas de Melhorias do Python; PEP 687 <10>: Biblioteca<26>.
                                                             (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<23>.
                                                             (line  211)
* 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>: Remoção pendente no Python 3 17<2>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <3>: Remoção pendente no Python 3 17<2>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 688#current-options <4>: Descontinuados<2>.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 688#current-options <5>: Remoção pendente no Python 3 17<3>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <6>: Remoção pendente no Python 3 17<3>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 688#current-options <7>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 688#current-options <8>: Apelidos de contêineres ABC em collections abc.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 688#current-options <9>: Remoção pendente no Python 3 17<4>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <10>: Remoção pendente no Python 3 17<4>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 689: API C<23>.      (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<24>.
                                                             (line  117)
* Propostas de Melhorias do Python; PEP 692 <3>: Documentação<18>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 692 <4>: Formas especiais.
                                                             (line  652)
* 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<3>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 695 <3>: Biblioteca<16>.
                                                             (line  836)
* Propostas de Melhorias do Python; PEP 695 <4>: Biblioteca<17>.
                                                             (line  130)
* Propostas de Melhorias do Python; PEP 695 <5>: Biblioteca<23>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 695 <6>: Biblioteca<23>.
                                                             (line  702)
* Propostas de Melhorias do Python; PEP 695 <7>: Biblioteca<23>.
                                                             (line  905)
* Propostas de Melhorias do Python; PEP 695 <8>: Biblioteca<23>.
                                                             (line  999)
* Propostas de Melhorias do Python; PEP 695 <9>: Núcleo e embutidos<23>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 695 <10>: Núcleo e embutidos<23>.
                                                             (line  108)
* Propostas de Melhorias do Python; PEP 695 <11>: Biblioteca<24>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 695 <12>: Escopos de anotação.
                                                             (line   64)
* 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  254)
* Propostas de Melhorias do Python; PEP 695 <17>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  407)
* Propostas de Melhorias do Python; PEP 695 <18>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  531)
* 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<2>.
                                                             (line  121)
* Propostas de Melhorias do Python; PEP 696 <1>: Núcleo e embutidos<16>.
                                                             (line  196)
* Propostas de Melhorias do Python; PEP 696 <2>: Escopos de anotação.
                                                             (line   67)
* 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<5>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 697 <1>: Novas funcionalidades<5>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 697 <2>: API C<21>.  (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<26>.
                                                             (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<3>.
                                                             (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>: API C<13>.  (line   15)
* Propostas de Melhorias do Python; PEP 699 <4>: Construção<25>.
                                                             (line   15)
* 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   84)
* 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  144)
* Propostas de Melhorias do Python; PEP 7 <4>: Macros úteis. (line  164)
* 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<3>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 701 <4>: Alterações na API Python<3>.
                                                             (line   80)
* Propostas de Melhorias do Python; PEP 701 <5>: Alterações na API Python<3>.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 701 <6>: Alterações na API Python<3>.
                                                             (line  104)
* Propostas de Melhorias do Python; PEP 702: Resumo – Destaques da versão<2>.
                                                             (line  125)
* Propostas de Melhorias do Python; PEP 702 <1>: warnings.   (line    6)
* Propostas de Melhorias do Python; PEP 702 <2>: Biblioteca<21>.
                                                             (line  500)
* Propostas de Melhorias do Python; PEP 702 <3>: Funções disponíveis.
                                                             (line  181)
* Propostas de Melhorias do Python; PEP 703: Melhorias no modo com threads livres.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 703 <1>: Novos recursos na API C.
                                                             (line  194)
* Propostas de Melhorias do Python; PEP 703 <2>: Resumo – Destaques da versão<2>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 703 <3>: Resumo – Destaques da versão<2>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 703 <4>: CPython com threads livres.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 703 <5>: API C<12>.  (line   22)
* Propostas de Melhorias do Python; PEP 703 <6>: Núcleo e embutidos<15>.
                                                             (line  626)
* Propostas de Melhorias do Python; PEP 703 <7>: Núcleo e embutidos<18>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 703 <8>: API C<19>.  (line  136)
* Propostas de Melhorias do Python; PEP 703 <9>: Instalando binários com threads livres<2>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 703 <10>: Instalando binários com threads livres<3>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 703 <11>: GIL and performance considerations.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 703 <12>: Suporte do Python para threads livres.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 703 <13>: Não podemos remover a Trava Global do interpretador?.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 703 <14>: Glossário. (line  639)
* Propostas de Melhorias do Python; PEP 703 <15>: Glossário. (line  786)
* Propostas de Melhorias do Python; PEP 705: Resumo – Destaques da versão<2>.
                                                             (line  129)
* Propostas de Melhorias do Python; PEP 705 <1>: typing<2>.  (line    6)
* Propostas de Melhorias do Python; PEP 705 <2>: Biblioteca<19>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 705 <3>: Formas especiais.
                                                             (line  300)
* 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   27)
* Propostas de Melhorias do Python; PEP 709: Alterações na API Python<2>.
                                                             (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<3>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 709 <4>: Núcleo e embutidos<23>.
                                                             (line  213)
* Propostas de Melhorias do Python; PEP 709 <5>: Funções embutidas<3>.
                                                             (line 1186)
* 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<2>.
                                                             (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: Resumo – Destaques da versão.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 734 <1>: PEP 734 Múltiplos interpretadores na biblioteca padrão.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 734 <2>: PEP 734 Múltiplos interpretadores na biblioteca padrão.
                                                             (line  105)
* Propostas de Melhorias do Python; PEP 734 <3>: Biblioteca<7>.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 734 <4>: Biblioteca<15>.
                                                             (line  354)
* Propostas de Melhorias do Python; PEP 734 <5>: Biblioteca<17>.
                                                             (line  172)
* Propostas de Melhorias do Python; PEP 734 <6>: InterpreterPoolExecutor.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 734 <7>: concurrent interpreters — Múltiplos interpretadores no mesmo processo.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 734 <8>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1219)
* Propostas de Melhorias do Python; PEP 737: Alterações na API C<4>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 737 <1>: API C<15>.  (line    6)
* Propostas de Melhorias do Python; PEP 737 <2>: API C<15>.  (line   51)
* Propostas de Melhorias do Python; PEP 738: Resumo – Destaques da versão<2>.
                                                             (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<17>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 739: build-details json.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 739 <1>: Construção<5>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 739 <2>: Construção<6>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 739 <3>: Núcleo e embutidos<10>.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 741: Resumo – Destaques da versão.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 741 <1>: Python configuration C API.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 741 <2>: API C<9>.   (line   28)
* Propostas de Melhorias do Python; PEP 741 <3>: API C<13>.  (line   39)
* Propostas de Melhorias do Python; PEP 741 <4>: PyInitConfig C API.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 742: Resumo – Destaques da versão<2>.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 742 <1>: typing<2>.  (line   10)
* Propostas de Melhorias do Python; PEP 742 <2>: Biblioteca<17>.
                                                             (line  255)
* Propostas de Melhorias do Python; PEP 742 <3>: Formas especiais.
                                                             (line  546)
* Propostas de Melhorias do Python; PEP 744: Versões binárias para o compilador experimental just-in-time.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 744 <1>: Resumo – Destaques da versão<2>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 744 <2>: Resumo – Destaques da versão<2>.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 744 <3>: Um compilador just-in-time JIT experimental.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 745: O que há de novo no Python 3 14.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 749: Resumo – Destaques da versão.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 749 <1>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 749 <2>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 749 <3>: PEP 649 e PEP 749 Avaliação adiada de anotações.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 749 <4>: Changes in annotations PEP 649 and PEP 749.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 749 <5>: Biblioteca<16>.
                                                             (line  540)
* Propostas de Melhorias do Python; PEP 749 <6>: Biblioteca<16>.
                                                             (line  812)
* Propostas de Melhorias do Python; PEP 749 <7>: Escopos de anotação.
                                                             (line   70)
* Propostas de Melhorias do Python; PEP 749 <8>: Anotações<2>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 749 <9>: Conteúdo do módulo<9>.
                                                             (line  132)
* Propostas de Melhorias do Python; PEP 749 <10>: annotationlib — Funcionalidade para introspecção de anotações.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 749 <11>: Semânticas de anotação.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 749#pep749-metaclasses: Atributos especiais.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 749#pep749-metaclasses <1>: Peculiaridades de __annotations__.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 750: Resumo – Destaques da versão.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 750 <1>: PEP 750 literal de string template.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 750 <2>: PEP 750 literal de string template.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 750 <3>: Núcleo e embutidos<4>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 750 <4>: Biblioteca<8>.
                                                             (line  148)
* Propostas de Melhorias do Python; PEP 750 <5>: Núcleo e embutidos<8>.
                                                             (line   85)
* Propostas de Melhorias do Python; PEP 750 <6>: string templatelib — Suporte para literais de string template.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 757: Novos recursos na API C.
                                                             (line  114)
* Propostas de Melhorias do Python; PEP 757 <1>: API C<9>.   (line   79)
* Propostas de Melhorias do Python; PEP 757 <2>: API C<11>.  (line   41)
* Propostas de Melhorias do Python; PEP 758: Resumo – Destaques da versão.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 758 <1>: PEP 758 permite expressões except e except* sem parênteses.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 758 <2>: Núcleo e embutidos<8>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 758 <3>: Núcleo e embutidos<9>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 758 <4>: A instrução try.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 761: Resumo – Destaques da versão.
                                                             (line   81)
* Propostas de Melhorias do Python; PEP 761 <1>: Descontinuação de assinaturas PGP.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 765: Resumo – Destaques da versão.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 765 <1>: PEP 765 Fluxo de controle em blocos finally.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 765 <2>: Definindo ações de limpeza.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 765 <3>: Definindo ações de limpeza.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 765 <4>: Cláusula finally.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 768: Resumo – Destaques da versão.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 768 <1>: PEP 768 Interface segura para depurador externo.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 768 <2>: PEP 768 Interface segura para depurador externo.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 768 <3>: Núcleo e embutidos<6>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 768 <4>: Núcleo e embutidos<8>.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 768 <5>: Núcleo e embutidos<9>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 768 <6>: Opções diversas.
                                                             (line  403)
* Propostas de Melhorias do Python; PEP 768 <7>: Opções diversas.
                                                             (line  410)
* Propostas de Melhorias do Python; PEP 768 <8>: Variáveis de ambiente.
                                                             (line  519)
* Propostas de Melhorias do Python; PEP 768 <9>: Opções de desempenho.
                                                             (line  157)
* Propostas de Melhorias do Python; PEP 768 <10>: Opções de desempenho.
                                                             (line  160)
* Propostas de Melhorias do Python; PEP 776: Resumo – Destaques da versão.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 776 <1>: Build changes.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 779: Resumo – Destaques da versão.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 779 <1>: Free-threaded Python is officially supported.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 784: Resumo – Destaques da versão.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 784 <1>: Suporte ao Zstandard na biblioteca padrão.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 8: Mudanças na biblioteca.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 8 <1>: Biblioteca<68>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 8 <2>: IDLE<62>.     (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 1917)
* 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  622)
* 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  138)
* 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  209)
* PROTOCOL_VERSION (atributo imaplib.IMAP4): Objetos IMAP4.  (line  474)
* ProtocolError (classe em xmlrpc.client): Objetos ProtocolError.
                                                             (line    6)
* protocolo de buffer:                   Protocolo Iterador. (line   67)
* 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  199)
* protocolo de gerenciamento de contexto: Tipos de Gerenciador de Contexto.
                                                             (line    6)
* protocolo de gerenciamento de contexto <1>: Glossário.     (line  357)
* 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  276)
* ProxyBasicAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  416)
* ProxyDigestAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  451)
* ProxyHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  342)
* 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 1676)
* ps2 (no módulo sys):                   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1676)
* 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  356)
* pthread_sigmask() (no módulo signal):  Conteúdo do módulo<5>.
                                                             (line  387)
* 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  372)
* 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  547)
* Purpose.SERVER_AUTH (no módulo ssl):   Constantes<9>.      (line  538)
* 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  461)
* PUSH_NULL (opcode):                    Instruções em bytecode do Python.
                                                             (line 1151)
* 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  154)
* 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  137)
* put() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  256)
* 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  382)
* putheader() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  178)
* putp() (no módulo curses):             Funções<6>.         (line  408)
* putrequest() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  167)
* putwch() (no módulo msvcrt):           E/S de console.     (line   41)
* putwin() (método curses.window):       Window Objects.     (line  465)
* 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   12)
* Py_AddPendingCall (C function):        Notificações assíncronas.
                                                             (line   10)
* Py_ALWAYS_INLINE (C macro):            Macros úteis.       (line   18)
* Py_ASNATIVEBYTES_ALLOW_INDEX (C macro): Objetos Inteiros.  (line  518)
* Py_ASNATIVEBYTES_BIG_ENDIAN (C macro): Objetos Inteiros.   (line  503)
* Py_ASNATIVEBYTES_DEFAULTS (C macro):   Objetos Inteiros.   (line  500)
* Py_ASNATIVEBYTES_LITTLE_ENDIAN (C macro): Objetos Inteiros.
                                                             (line  506)
* Py_ASNATIVEBYTES_NATIVE_ENDIAN (C macro): Objetos Inteiros.
                                                             (line  509)
* Py_ASNATIVEBYTES_REJECT_NEGATIVE (C macro): Objetos Inteiros.
                                                             (line  515)
* Py_ASNATIVEBYTES_UNSIGNED_BUFFER (C macro): Objetos Inteiros.
                                                             (line  512)
* Py_AtExit (C function):                Process Control.    (line   32)
* Py_AUDIT_READ (C macro):               Member flags.       (line   12)
* Py_AuditHookFunction (C type):         System Functions.   (line  150)
* Py_BEGIN_ALLOW_THREADS (C macro):      Desvinculação do estado de thread do código de extensão.
                                                             (line   19)
* Py_BEGIN_ALLOW_THREADS (C macro) <1>:  High-level API.     (line  211)
* Py_BEGIN_CRITICAL_SECTION (C macro):   Python Critical Section API.
                                                             (line   64)
* Py_BEGIN_CRITICAL_SECTION_MUTEX (C macro): Python Critical Section API.
                                                             (line   79)
* Py_BEGIN_CRITICAL_SECTION2 (C macro):  Python Critical Section API.
                                                             (line  110)
* Py_BEGIN_CRITICAL_SECTION2_MUTEX (C macro): Python Critical Section API.
                                                             (line  126)
* Py_BLOCK_THREADS (C macro):            High-level API.     (line  225)
* 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_BuildValue (C function):            Construindo valores.
                                                             (line    6)
* Py_BytesMain (C function):             Inicializando e encerrando o interpretador.
                                                             (line  133)
* Py_BytesWarningFlag (C var):           Variáveis de configuração global.
                                                             (line   15)
* Py_CHARMASK (C macro):                 Macros úteis.       (line   44)
* Py_CLEANUP_SUPPORTED (C macro):        Outros objetos.     (line   40)
* Py_CLEAR (C function):                 Contagem de referências.
                                                             (line  155)
* Py_CompileString (C function):         A camada de nível muito alto.
                                                             (line  231)
* Py_CompileString (função C):           A camada de nível muito alto.
                                                             (line  325)
* Py_CompileString (função C) <1>:       A camada de nível muito alto.
                                                             (line  330)
* Py_CompileString (função C) <2>:       A camada de nível muito alto.
                                                             (line  337)
* Py_CompileStringExFlags (C function):  A camada de nível muito alto.
                                                             (line  267)
* Py_CompileStringFlags (C function):    A camada de nível muito alto.
                                                             (line  238)
* Py_CompileStringObject (C function):   A camada de nível muito alto.
                                                             (line  244)
* 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  140)
* Py_DebugFlag (C var):                  Variáveis de configuração global.
                                                             (line   30)
* Py_DecodeLocale (C function):          Utilitários do sistema operacional.
                                                             (line  118)
* Py_DECREF (C function):                Contagem de referências.
                                                             (line  115)
* Py_DecRef (C function):                Contagem de referências.
                                                             (line  178)
* Py_DECREF (função C):                  Contagens de referências<2>.
                                                             (line   19)
* Py_DEPRECATED (C macro):               Macros úteis.       (line   50)
* Py_DontWriteBytecodeFlag (C var):      Variáveis de configuração global.
                                                             (line   45)
* Py_Ellipsis (C var):                   Objeto Ellipsis.    (line   11)
* Py_EncodeLocale (C function):          Utilitários do sistema operacional.
                                                             (line  174)
* Py_END_ALLOW_THREADS (C macro):        Desvinculação do estado de thread do código de extensão.
                                                             (line   19)
* Py_END_ALLOW_THREADS (C macro) <1>:    High-level API.     (line  218)
* Py_END_CRITICAL_SECTION (C macro):     Python Critical Section API.
                                                             (line   97)
* Py_END_CRITICAL_SECTION2 (C macro):    Python Critical Section API.
                                                             (line  144)
* Py_EndInterpreter (C function):        Sub-interpreter support.
                                                             (line  208)
* Py_EnterRecursiveCall (C function):    Controle de recursão.
                                                             (line   13)
* Py_EQ (C macro):                       PyTypeObject Slots. (line 1226)
* Py_eval_input (C var):                 A camada de nível muito alto.
                                                             (line  323)
* Py_Exit (C function):                  Process Control.    (line   22)
* Py_ExitStatusException (C function):   PyStatus.           (line   65)
* Py_False (C var):                      Objetos Booleanos.  (line   21)
* Py_FatalError (C function):            Process Control.    (line    6)
* Py_FatalError():                       Process-wide parameters.
                                                             (line  225)
* Py_fclose (C function):                Utilitários do sistema operacional.
                                                             (line  238)
* Py_FdIsInteractive (C function):       Utilitários do sistema operacional.
                                                             (line   18)
* Py_file_input (C var):                 A camada de nível muito alto.
                                                             (line  328)
* Py_Finalize (C function):              Inicializando e encerrando o interpretador.
                                                             (line  128)
* Py_FinalizeEx (C function):            Process Control.    (line   23)
* Py_FinalizeEx (C function) <1>:        Process Control.    (line   33)
* Py_FinalizeEx (C function) <2>:        Inicializando e encerrando o interpretador.
                                                             (line    7)
* Py_FinalizeEx (C function) <3>:        Inicializando e encerrando o interpretador.
                                                             (line   65)
* Py_FinalizeEx (C function) <4>:        Sub-interpreter support.
                                                             (line  171)
* Py_FinalizeEx (C function) <5>:        Sub-interpreter support.
                                                             (line  209)
* Py_fopen (C function):                 Utilitários do sistema operacional.
                                                             (line  218)
* Py_FrozenFlag (C var):                 Variáveis de configuração global.
                                                             (line   60)
* Py_GE (C macro):                       PyTypeObject Slots. (line 1235)
* 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):          Process-wide parameters.
                                                             (line  212)
* Py_GetCompiler (C function):           Process-wide parameters.
                                                             (line  201)
* Py_GetConstant (C function):           Protocolo de objeto.
                                                             (line    6)
* Py_GetConstantBorrowed (C function):   Protocolo de objeto.
                                                             (line   56)
* Py_GetCopyright (C function):          Process-wide parameters.
                                                             (line  191)
* Py_GETENV (C macro):                   Macros úteis.       (line   61)
* Py_GetExecPrefix (C function):         Process-wide parameters.
                                                             (line   71)
* Py_GetExecPrefix (função C):           Incorporando Python<2>.
                                                             (line   42)
* Py_GetPath (C function):               Process-wide parameters.
                                                             (line  141)
* Py_GetPath (função C):                 Incorporando Python<2>.
                                                             (line   42)
* Py_GetPath():                          Process-wide parameters.
                                                             (line    7)
* Py_GetPlatform (C function):           Process-wide parameters.
                                                             (line  179)
* Py_GetPrefix (C function):             Process-wide parameters.
                                                             (line   46)
* Py_GetPrefix (função C):               Incorporando Python<2>.
                                                             (line   42)
* Py_GetProgramFullPath (C function):    Process-wide parameters.
                                                             (line  121)
* Py_GetProgramFullPath (função C):      Incorporando Python<2>.
                                                             (line   42)
* Py_GetProgramName (C function):        Process-wide parameters.
                                                             (line   30)
* Py_GetPythonHome (C function):         Process-wide parameters.
                                                             (line  315)
* Py_GetVersion (C function):            Process-wide parameters.
                                                             (line  165)
* Py_GT (C macro):                       PyTypeObject Slots. (line 1232)
* Py_hash_t (C type):                    API do PyHash.      (line    9)
* Py_HashBuffer (C function):            API do PyHash.      (line   98)
* Py_HashPointer (C function):           API do PyHash.      (line   88)
* Py_HashRandomizationFlag (C var):      Variáveis de configuração global.
                                                             (line   75)
* Py_IgnoreEnvironmentFlag (C var):      Variáveis de configuração global.
                                                             (line   91)
* Py_INCREF (C function):                Contagem de referências.
                                                             (line   52)
* Py_IncRef (C function):                Contagem de referências.
                                                             (line  172)
* Py_INCREF (função C):                  Contagens de referências<2>.
                                                             (line   19)
* 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  171)
* Py_Initialize():                       Process-wide parameters.
                                                             (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_InitializeFromInitConfig (C function): Initialize Python.
                                                             (line    6)
* 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_Is (C function):                    Base object types and macros.
                                                             (line   93)
* Py_IS_TYPE (C function):               Base object types and macros.
                                                             (line  132)
* Py_IsFalse (C function):               Base object types and macros.
                                                             (line  113)
* Py_IsFinalizing (C function):          Inicializando e encerrando o interpretador.
                                                             (line   57)
* Py_IsInitialized (C function):         Inicializando e encerrando o interpretador.
                                                             (line   51)
* Py_IsInitialized (função C):           Incorporando Python<2>.
                                                             (line   51)
* Py_IsNone (C function):                Base object types and macros.
                                                             (line   99)
* Py_IsolatedFlag (C var):               Variáveis de configuração global.
                                                             (line  132)
* Py_IsTrue (C function):                Base object types and macros.
                                                             (line  106)
* Py_LE (C macro):                       PyTypeObject Slots. (line 1223)
* Py_LeaveRecursiveCall (C function):    Controle de recursão.
                                                             (line   29)
* 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_LT (C macro):                       PyTypeObject Slots. (line 1220)
* Py_Main (C function):                  Inicializando e encerrando o interpretador.
                                                             (line  141)
* PY_MAJOR_VERSION (C macro):            Constantes de versão de tempo de construção.
                                                             (line   13)
* Py_MARSHAL_VERSION (C macro):          Suporte a marshalling de dados.
                                                             (line   19)
* Py_MAX (C macro):                      Macros úteis.       (line   67)
* Py_MEMBER_SIZE (C macro):              Macros úteis.       (line   73)
* PY_MICRO_VERSION (C macro):            Constantes de versão de tempo de construção.
                                                             (line   21)
* Py_MIN (C macro):                      Macros úteis.       (line   79)
* PY_MINOR_VERSION (C macro):            Constantes de versão de tempo de construção.
                                                             (line   17)
* Py_mod_create (C macro):               Module slots.       (line   21)
* Py_mod_exec (C macro):                 Module slots.       (line   55)
* Py_mod_gil (C macro):                  Module slots.       (line   98)
* Py_MOD_GIL_NOT_USED (C macro):         Module slots.       (line  108)
* Py_MOD_GIL_USED (C macro):             Module slots.       (line  102)
* Py_mod_multiple_interpreters (C macro): Module slots.      (line   67)
* Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED (C macro): Module slots.
                                                             (line   71)
* Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED (C macro): Module slots.
                                                             (line   75)
* Py_MOD_PER_INTERPRETER_GIL_SUPPORTED (C macro): Module slots.
                                                             (line   81)
* PY_MONITORING_EVENT_BRANCH_LEFT (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   45)
* PY_MONITORING_EVENT_BRANCH_RIGHT (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   48)
* PY_MONITORING_EVENT_C_RAISE (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   54)
* PY_MONITORING_EVENT_C_RETURN (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   57)
* PY_MONITORING_EVENT_CALL (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   51)
* PY_MONITORING_EVENT_EXCEPTION_HANDLED (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   60)
* PY_MONITORING_EVENT_INSTRUCTION (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   63)
* PY_MONITORING_EVENT_JUMP (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   66)
* PY_MONITORING_EVENT_LINE (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   69)
* PY_MONITORING_EVENT_PY_RESUME (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   72)
* PY_MONITORING_EVENT_PY_RETURN (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   75)
* PY_MONITORING_EVENT_PY_START (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   78)
* PY_MONITORING_EVENT_PY_THROW (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   81)
* PY_MONITORING_EVENT_PY_UNWIND (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   84)
* PY_MONITORING_EVENT_PY_YIELD (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   87)
* PY_MONITORING_EVENT_RAISE (C macro):   Gerenciando o Estado de um Monitoramento.
                                                             (line   90)
* PY_MONITORING_EVENT_RERAISE (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   93)
* PY_MONITORING_EVENT_STOP_ITERATION (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   96)
* PY_MONITORING_IS_INSTRUMENTED_EVENT (C function): Gerenciando o Estado de um Monitoramento.
                                                             (line  104)
* Py_NE (C macro):                       PyTypeObject Slots. (line 1229)
* Py_NewInterpreter (C function):        Sub-interpreter support.
                                                             (line  198)
* Py_NewInterpreterFromConfig (C function): Sub-interpreter support.
                                                             (line  109)
* Py_NewRef (C function):                Contagem de referências.
                                                             (line   82)
* Py_NO_INLINE (C macro):                Macros úteis.       (line   85)
* Py_NO_LINK_LIB (C macro):              Diferenças entre o Unix e o Windows.
                                                             (line   61)
* 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  241)
* Py_OpenCodeHookFunction (C type):      Objetos arquivos.   (line   67)
* Py_OptimizeFlag (C var):               Variáveis de configuração global.
                                                             (line  222)
* Py_PACK_FULL_VERSION (C function):     Macros de empacotamento de bits.
                                                             (line    6)
* Py_PACK_VERSION (C function):          Macros de empacotamento de bits.
                                                             (line   65)
* 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   98)
* 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   17)
* PY_RELEASE_LEVEL (C macro):            Constantes de versão de tempo de construção.
                                                             (line   25)
* PY_RELEASE_SERIAL (C macro):           Constantes de versão de tempo de construção.
                                                             (line   30)
* Py_REMOTE_DEBUG (C macro):             Opções de desempenho.
                                                             (line  165)
* Py_ReprEnter (C function):             Controle de recursão.
                                                             (line   43)
* Py_ReprLeave (C function):             Controle de recursão.
                                                             (line   60)
* PY_RESUME (monitoring event):          Eventos.            (line   52)
* PY_RETURN (monitoring event):          Eventos.            (line   57)
* Py_RETURN_FALSE (C macro):             Objetos Booleanos.  (line   36)
* Py_RETURN_NONE (C macro):              O Objeto None.      (line   18)
* Py_RETURN_NOTIMPLEMENTED (C macro):    Protocolo de objeto.
                                                             (line   76)
* Py_RETURN_RICHCOMPARE (C macro):       PyTypeObject Slots. (line 1241)
* Py_RETURN_TRUE (C macro):              Objetos Booleanos.  (line   40)
* Py_RunMain (C function):               Inicializando e encerrando o interpretador.
                                                             (line  190)
* Py_SET_REFCNT (C function):            Contagem de referências.
                                                             (line   38)
* Py_SET_SIZE (C function):              Base object types and macros.
                                                             (line  165)
* Py_SET_TYPE (C function):              Base object types and macros.
                                                             (line  139)
* Py_SetProgramName (C function):        Process-wide parameters.
                                                             (line    6)
* Py_SetPythonHome (C function):         Process-wide parameters.
                                                             (line  296)
* Py_SETREF (C macro):                   Contagem de referências.
                                                             (line  184)
* Py_single_input (C var):               A camada de nível muito alto.
                                                             (line  335)
* Py_SIZE (C function):                  Base object types and macros.
                                                             (line  157)
* Py_ssize_t (C type):                   Tipos<2>.           (line   14)
* PY_SSIZE_T_MAX (C macro):              Objetos Inteiros.   (line  255)
* PY_START (monitoring event):           Eventos.            (line   62)
* Py_STRINGIFY (C macro):                Macros úteis.       (line   97)
* Py_T_BOOL (C macro):                   Member types.       (line   59)
* Py_T_BYTE (C macro):                   Member types.       (line   20)
* Py_T_CHAR (C macro):                   Member types.       (line   68)
* Py_T_DOUBLE (C macro):                 Member types.       (line   56)
* Py_T_FLOAT (C macro):                  Member types.       (line   53)
* Py_T_INT (C macro):                    Member types.       (line   26)
* Py_T_LONG (C macro):                   Member types.       (line   29)
* Py_T_LONGLONG (C macro):               Member types.       (line   32)
* Py_T_OBJECT_EX (C macro):              Member types.       (line   71)
* Py_T_PYSSIZET (C macro):               Member types.       (line   50)
* Py_T_SHORT (C macro):                  Member types.       (line   23)
* Py_T_STRING (C macro):                 Member types.       (line   62)
* Py_T_STRING_INPLACE (C macro):         Member types.       (line   65)
* Py_T_UBYTE (C macro):                  Member types.       (line   35)
* Py_T_UINT (C macro):                   Member types.       (line   38)
* Py_T_ULONG (C macro):                  Member types.       (line   44)
* Py_T_ULONGLONG (C macro):              Member types.       (line   47)
* Py_T_USHORT (C macro):                 Member types.       (line   41)
* PY_THROW (monitoring event):           Eventos.            (line   67)
* Py_tp_token (C macro):                 Creating Heap-Allocated Types.
                                                             (line  275)
* Py_TP_USE_SPEC (C macro):              Creating Heap-Allocated Types.
                                                             (line  305)
* Py_TPFLAGS_BASE_EXC_SUBCLASS (C macro): PyTypeObject Slots.
                                                             (line  791)
* Py_TPFLAGS_BASETYPE (C macro):         PyTypeObject Slots. (line  641)
* Py_TPFLAGS_BYTES_SUBCLASS (C macro):   PyTypeObject Slots. (line  785)
* Py_TPFLAGS_DEFAULT (C macro):          PyTypeObject Slots. (line  691)
* Py_TPFLAGS_DICT_SUBCLASS (C macro):    PyTypeObject Slots. (line  789)
* Py_TPFLAGS_DISALLOW_INSTANTIATION (C macro): PyTypeObject Slots.
                                                             (line  847)
* Py_TPFLAGS_HAVE_FINALIZE (C macro):    PyTypeObject Slots. (line  804)
* Py_TPFLAGS_HAVE_GC (C macro):          PyTypeObject Slots. (line  669)
* Py_TPFLAGS_HAVE_VECTORCALL (C macro):  PyTypeObject Slots. (line  815)
* Py_TPFLAGS_HEAPTYPE (C macro):         PyTypeObject Slots. (line  623)
* Py_TPFLAGS_IMMUTABLETYPE (C macro):    PyTypeObject Slots. (line  833)
* Py_TPFLAGS_ITEMS_AT_END (C macro):     PyTypeObject Slots. (line  759)
* Py_TPFLAGS_LIST_SUBCLASS (C macro):    PyTypeObject Slots. (line  781)
* Py_TPFLAGS_LONG_SUBCLASS (C macro):    PyTypeObject Slots. (line  779)
* Py_TPFLAGS_MANAGED_DICT (C macro):     PyTypeObject Slots. (line  727)
* Py_TPFLAGS_MANAGED_WEAKREF (C macro):  PyTypeObject Slots. (line  747)
* Py_TPFLAGS_MAPPING (C macro):          PyTypeObject Slots. (line  875)
* Py_TPFLAGS_METHOD_DESCRIPTOR (C macro): PyTypeObject Slots.
                                                             (line  702)
* Py_TPFLAGS_READY (C macro):            PyTypeObject Slots. (line  651)
* Py_TPFLAGS_READYING (C macro):         PyTypeObject Slots. (line  660)
* Py_TPFLAGS_SEQUENCE (C macro):         PyTypeObject Slots. (line  899)
* Py_TPFLAGS_TUPLE_SUBCLASS (C macro):   PyTypeObject Slots. (line  783)
* Py_TPFLAGS_TYPE_SUBCLASS (C macro):    PyTypeObject Slots. (line  793)
* Py_TPFLAGS_UNICODE_SUBCLASS (C macro): PyTypeObject Slots. (line  787)
* Py_TPFLAGS_VALID_VERSION_TAG (C macro): PyTypeObject Slots.
                                                             (line  923)
* 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):                  Base object types and macros.
                                                             (line  120)
* Py_UCS1 (C type):                      Tipo Unicode.       (line   19)
* Py_UCS2 (C type):                      Tipo Unicode.       (line   19)
* Py_UCS4 (C type):                      Tipo Unicode.       (line   19)
* Py_uhash_t (C type):                   API do PyHash.      (line   15)
* Py_UNBLOCK_THREADS (C macro):          High-level API.     (line  230)
* Py_UnbufferedStdioFlag (C var):        Variáveis de configuração global.
                                                             (line  249)
* Py_UNICODE (C type):                   Deprecated API.     (line    8)
* 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  102)
* Py_UNICODE_REPLACEMENT_CHARACTER (C macro): Generic Codecs.
                                                             (line    8)
* 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  104)
* Py_UNUSED (C macro):                   Macros úteis.       (line  129)
* PY_UNWIND (monitoring event):          Eventos.            (line   71)
* Py_VaBuildValue (C function):          Construindo valores.
                                                             (line  229)
* 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):                    Versão de tempo de execução.
                                                             (line    6)
* PY_VERSION_HEX (C macro):              Constantes de versão de tempo de construção.
                                                             (line   34)
* Py_VISIT (C macro):                    Suporte a Coleta Cíclica de Lixo.
                                                             (line  249)
* Py_XDECREF (C function):               Contagem de referências.
                                                             (line  149)
* Py_XDECREF (função C):                 Exceções<24>.       (line  127)
* Py_XINCREF (C function):               Contagem de referências.
                                                             (line   75)
* Py_XNewRef (C function):               Contagem de referências.
                                                             (line  106)
* Py_XSETREF (C macro):                  Contagem de referências.
                                                             (line  210)
* PY_YIELD (monitoring event):           Eventos.            (line   77)
* PyAIter_Check (C function):            Protocolo Iterador. (line   14)
* PyAnySet_Check (C function):           Objeto Set.         (line   54)
* PyAnySet_CheckExact (C function):      Objeto Set.         (line   67)
* 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   29)
* PyAsyncMethods (C type):               Async Object Structures.
                                                             (line    8)
* PyAsyncMethods.am_aiter (C member):    Async Object Structures.
                                                             (line   35)
* PyAsyncMethods.am_anext (C member):    Async Object Structures.
                                                             (line   47)
* PyAsyncMethods.am_await (C member):    Async Object Structures.
                                                             (line   23)
* PyAsyncMethods.am_send (C member):     Async Object Structures.
                                                             (line   56)
* PyBaseObject_Type (C var):             Base object types and macros.
                                                             (line   89)
* PyBool_Check (C function):             Objetos Booleanos.  (line   16)
* PyBool_FromLong (C function):          Objetos Booleanos.  (line   44)
* PyBool_Type (C var):                   Objetos Booleanos.  (line   11)
* PyBUF_ANY_CONTIGUOUS (C macro):        requisições contíguas.
                                                             (line   20)
* PyBUF_C_CONTIGUOUS (C macro):          requisições contíguas.
                                                             (line   14)
* PyBUF_CONTIG (C macro):                requisições compostas.
                                                             (line   37)
* PyBUF_CONTIG_RO (C macro):             requisições compostas.
                                                             (line   40)
* PyBUF_F_CONTIGUOUS (C macro):          requisições contíguas.
                                                             (line   17)
* PyBUF_FORMAT (C macro):                apenas em formato.  (line   16)
* PyBUF_FULL (C macro):                  requisições compostas.
                                                             (line   19)
* PyBUF_FULL_RO (C macro):               requisições compostas.
                                                             (line   22)
* 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   20)
* PyBUF_READ (C macro):                  Objetos MemoryView. (line   19)
* PyBUF_RECORDS (C macro):               requisições compostas.
                                                             (line   25)
* PyBUF_RECORDS_RO (C macro):            requisições compostas.
                                                             (line   28)
* PyBUF_SIMPLE (C macro):                forma avanços suboffsets.
                                                             (line   23)
* PyBUF_STRIDED (C macro):               requisições compostas.
                                                             (line   31)
* PyBUF_STRIDED_RO (C macro):            requisições compostas.
                                                             (line   34)
* PyBUF_STRIDES (C macro):               forma avanços suboffsets.
                                                             (line   17)
* PyBUF_WRITABLE (C macro):              apenas em formato.  (line    6)
* PyBUF_WRITE (C macro):                 Objetos MemoryView. (line   23)
* 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   60)
* 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)
* PyByteArrayObject (C type):            Objetos byte array. (line    6)
* PyBytes_AS_STRING (C function):        Objetos Bytes.      (line  141)
* PyBytes_AsString (C function):         Objetos Bytes.      (line  130)
* PyBytes_AsStringAndSize (C function):  Objetos Bytes.      (line  146)
* PyBytes_Check (C function):            Objetos Bytes.      (line   19)
* PyBytes_CheckExact (C function):       Objetos Bytes.      (line   25)
* PyBytes_Concat (C function):           Objetos Bytes.      (line  168)
* PyBytes_ConcatAndDel (C function):     Objetos Bytes.      (line  177)
* PyBytes_FromFormat (C function):       Objetos Bytes.      (line   45)
* PyBytes_FromFormatV (C function):      Objetos Bytes.      (line  111)
* PyBytes_FromObject (C function):       Objetos Bytes.      (line  117)
* PyBytes_FromString (C function):       Objetos Bytes.      (line   31)
* PyBytes_FromStringAndSize (C function): Objetos Bytes.     (line   37)
* PyBytes_GET_SIZE (C function):         Objetos Bytes.      (line  126)
* PyBytes_Join (C function):             Objetos Bytes.      (line  185)
* PyBytes_Size (C function):             Objetos Bytes.      (line  122)
* PyBytes_Type (C var):                  Objetos Bytes.      (line   14)
* PyBytesObject (C type):                Objetos Bytes.      (line    9)
* pyc baseado em hash:                   Glossário.          (line  790)
* pycache_prefix (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  386)
* 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   30)
* PyCapsule_Destructor (C type):         Capsules<2>.        (line   21)
* PyCapsule_GetContext (C function):     Capsules<2>.        (line   77)
* PyCapsule_GetDestructor (C function):  Capsules<2>.        (line   66)
* PyCapsule_GetName (C function):        Capsules<2>.        (line   87)
* PyCapsule_GetPointer (C function):     Capsules<2>.        (line   55)
* PyCapsule_Import (C function):         Capsules<2>.        (line   96)
* PyCapsule_IsValid (C function):        Capsules<2>.        (line  118)
* PyCapsule_New (C function):            Capsules<2>.        (line   35)
* PyCapsule_SetContext (C function):     Capsules<2>.        (line  137)
* PyCapsule_SetDestructor (C function):  Capsules<2>.        (line  145)
* PyCapsule_SetName (C function):        Capsules<2>.        (line  153)
* PyCapsule_SetPointer (C function):     Capsules<2>.        (line  163)
* 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  371)
* 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  371)
* 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  371)
* 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  371)
* PyCF_TYPE_COMMENTS (no módulo ast):    Sinalizadores do compilador<2>.
                                                             (line   28)
* PyCFunction (C type):                  Implementing functions and methods.
                                                             (line    6)
* PyCFunction_New (C function):          Implementing functions and methods.
                                                             (line  257)
* PyCFunction_NewEx (C function):        Implementing functions and methods.
                                                             (line  252)
* 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)
* PyCMethod (C type):                    Implementing functions and methods.
                                                             (line   49)
* PyCMethod_New (C function):            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 (função C):  Objetos código<3>.  (line   84)
* 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   29)
* PyCompileError:                        py_compile — Compila arquivos fonte do Python.
                                                             (line   19)
* PyCompilerFlags (C struct):            A camada de nível muito alto.
                                                             (line  341)
* PyCompilerFlags.cf_feature_version (C member): A camada de nível muito alto.
                                                             (line  357)
* PyCompilerFlags.cf_flags (C member):   A camada de nível muito alto.
                                                             (line  353)
* 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_Get (C function):             Runtime Python configuration API.
                                                             (line   16)
* PyConfig_GetInt (C function):          Runtime Python configuration API.
                                                             (line   43)
* PyConfig_InitIsolatedConfig (C function): PyConfig.        (line   21)
* PyConfig_InitPythonConfig (C function): PyConfig.          (line   16)
* PyConfig_Names (C function):           Runtime Python configuration API.
                                                             (line   53)
* PyConfig_Read (C function):            PyConfig.           (line   67)
* PyConfig_Set (C function):             Runtime Python configuration API.
                                                             (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._pystats (C member):          PyConfig.           (line 1024)
* 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  515)
* PyConfig.dev_mode (C member):          PyConfig.           (line  293)
* PyConfig.dump_refs (C member):         PyConfig.           (line  302)
* PyConfig.dump_refs_file (C member):    PyConfig.           (line  316)
* PyConfig.exec_prefix (C member):       PyConfig.           (line  327)
* PyConfig.executable (C member):        PyConfig.           (line  339)
* PyConfig.faulthandler (C member):      PyConfig.           (line  350)
* PyConfig.filesystem_encoding (C member): PyConfig.         (line  362)
* PyConfig.filesystem_errors (C member): PyConfig.           (line  395)
* PyConfig.hash_seed (C member):         PyConfig.           (line  427)
* PyConfig.home (C member):              PyConfig.           (line  442)
* PyConfig.import_time (C member):       PyConfig.           (line  453)
* PyConfig.inspect (C member):           PyConfig.           (line  466)
* PyConfig.install_signal_handlers (C member): PyConfig.     (line  481)
* PyConfig.int_max_str_digits (C member): PyConfig.          (line  495)
* PyConfig.interactive (C member):       PyConfig.           (line  487)
* PyConfig.isolated (C member):          PyConfig.           (line  529)
* PyConfig.legacy_windows_stdio (C member): PyConfig.        (line  554)
* PyConfig.malloc_stats (C member):      PyConfig.           (line  572)
* PyConfig.module_search_paths (C member): PyConfig.         (line  616)
* PyConfig.module_search_paths_set (C member): PyConfig.     (line  618)
* PyConfig.optimization_level (C member): PyConfig.          (line  632)
* PyConfig.orig_argv (C member):         PyConfig.           (line  648)
* PyConfig.parse_argv (C member):        PyConfig.           (line  666)
* PyConfig.parser_debug (C member):      PyConfig.           (line  687)
* PyConfig.pathconfig_warnings (C member): PyConfig.         (line  701)
* PyConfig.perf_profiling (C member):    PyConfig.           (line  895)
* PyConfig.platlibdir (C member):        PyConfig.           (line  585)
* PyConfig.prefix (C member):            PyConfig.           (line  713)
* PyConfig.program_name (C member):      PyConfig.           (line  724)
* PyConfig.pycache_prefix (C member):    PyConfig.           (line  745)
* PyConfig.pythonpath_env (C member):    PyConfig.           (line  605)
* PyConfig.quiet (C member):             PyConfig.           (line  758)
* PyConfig.run_command (C member):       PyConfig.           (line  767)
* PyConfig.run_filename (C member):      PyConfig.           (line  775)
* PyConfig.run_module (C member):        PyConfig.           (line  789)
* PyConfig.run_presite (C member):       PyConfig.           (line  797)
* PyConfig.safe_path (C member):         PyConfig.           (line  151)
* PyConfig.show_ref_count (C member):    PyConfig.           (line  811)
* PyConfig.site_import (C member):       PyConfig.           (line  823)
* PyConfig.skip_source_first_line (C member): PyConfig.      (line  842)
* PyConfig.stdio_encoding (C member):    PyConfig.           (line  854)
* PyConfig.stdio_errors (C member):      PyConfig.           (line  856)
* PyConfig.stdlib_dir (C member):        PyConfig.           (line  922)
* PyConfig.tracemalloc (C member):       PyConfig.           (line  884)
* PyConfig.use_environment (C member):   PyConfig.           (line  930)
* PyConfig.use_frozen_modules (C member): PyConfig.          (line  417)
* PyConfig.use_hash_seed (C member):     PyConfig.           (line  429)
* PyConfig.use_system_logger (C member): PyConfig.           (line  942)
* PyConfig.user_site_directory (C member): PyConfig.         (line  954)
* PyConfig.verbose (C member):           PyConfig.           (line  967)
* PyConfig.warn_default_encoding (C member): PyConfig.       (line  233)
* PyConfig.warnoptions (C member):       PyConfig.           (line  984)
* PyConfig.write_bytecode (C member):    PyConfig.           (line 1004)
* PyConfig.xoptions (C member):          PyConfig.           (line 1017)
* PyContext (C type):                    Objetos de variáveis de contexto.
                                                             (line   25)
* PyContext_AddWatcher (C function):     Objetos de variáveis de contexto.
                                                             (line   95)
* PyContext_CheckExact (C function):     Objetos de variáveis de contexto.
                                                             (line   55)
* PyContext_ClearWatcher (C function):   Objetos de variáveis de contexto.
                                                             (line  106)
* 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)
* PyContext_WatchCallback (C type):      Objetos de variáveis de contexto.
                                                             (line  128)
* PyContextEvent (C type):               Objetos de variáveis de contexto.
                                                             (line  116)
* 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  159)
* PyContextVar_New (C function):         Objetos de variáveis de contexto.
                                                             (line  151)
* PyContextVar_Reset (C function):       Objetos de variáveis de contexto.
                                                             (line  184)
* PyContextVar_Set (C function):         Objetos de variáveis de contexto.
                                                             (line  178)
* 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)
* PyDate_Check (C function):             Objetos DateTime<2>.
                                                             (line   75)
* PyDate_CheckExact (C function):        Objetos DateTime<2>.
                                                             (line   81)
* PyDate_FromDate (C function):          Objetos DateTime<2>.
                                                             (line  133)
* PyDate_FromTimestamp (C function):     Objetos DateTime<2>.
                                                             (line  310)
* PyDateTime_Check (C function):         Objetos DateTime<2>.
                                                             (line   86)
* PyDateTime_CheckExact (C function):    Objetos DateTime<2>.
                                                             (line   92)
* PyDateTime_Date (C type):              Objetos DateTime<2>.
                                                             (line   14)
* PyDateTime_DATE_GET_FOLD (C function): Objetos DateTime<2>.
                                                             (line  231)
* PyDateTime_DATE_GET_HOUR (C function): Objetos DateTime<2>.
                                                             (line  214)
* PyDateTime_DATE_GET_MICROSECOND (C function): Objetos DateTime<2>.
                                                             (line  226)
* PyDateTime_DATE_GET_MINUTE (C function): Objetos DateTime<2>.
                                                             (line  218)
* PyDateTime_DATE_GET_SECOND (C function): Objetos DateTime<2>.
                                                             (line  222)
* PyDateTime_DATE_GET_TZINFO (C function): Objetos DateTime<2>.
                                                             (line  237)
* PyDateTime_DateTime (C type):          Objetos DateTime<2>.
                                                             (line   19)
* PyDateTime_DateTimeType (C var):       Objetos DateTime<2>.
                                                             (line   40)
* PyDateTime_DateType (C var):           Objetos DateTime<2>.
                                                             (line   34)
* PyDateTime_Delta (C type):             Objetos DateTime<2>.
                                                             (line   29)
* PyDateTime_DELTA_GET_DAYS (C function): Objetos DateTime<2>.
                                                             (line  281)
* PyDateTime_DELTA_GET_MICROSECONDS (C function): Objetos DateTime<2>.
                                                             (line  294)
* PyDateTime_DELTA_GET_SECONDS (C function): Objetos DateTime<2>.
                                                             (line  288)
* PyDateTime_DeltaType (C var):          Objetos DateTime<2>.
                                                             (line   52)
* PyDateTime_FromDateAndTime (C function): Objetos DateTime<2>.
                                                             (line  138)
* PyDateTime_FromDateAndTimeAndFold (C function): Objetos DateTime<2>.
                                                             (line  145)
* PyDateTime_FromTimestamp (C function): Objetos DateTime<2>.
                                                             (line  303)
* PyDateTime_GET_DAY (C function):       Objetos DateTime<2>.
                                                             (line  206)
* PyDateTime_GET_MONTH (C function):     Objetos DateTime<2>.
                                                             (line  202)
* PyDateTime_GET_YEAR (C function):      Objetos DateTime<2>.
                                                             (line  198)
* PyDateTime_Time (C type):              Objetos DateTime<2>.
                                                             (line   24)
* PyDateTime_TIME_GET_FOLD (C function): Objetos DateTime<2>.
                                                             (line  264)
* PyDateTime_TIME_GET_HOUR (C function): Objetos DateTime<2>.
                                                             (line  248)
* PyDateTime_TIME_GET_MICROSECOND (C function): Objetos DateTime<2>.
                                                             (line  260)
* PyDateTime_TIME_GET_MINUTE (C function): Objetos DateTime<2>.
                                                             (line  252)
* PyDateTime_TIME_GET_SECOND (C function): Objetos DateTime<2>.
                                                             (line  256)
* PyDateTime_TIME_GET_TZINFO (C function): Objetos DateTime<2>.
                                                             (line  270)
* PyDateTime_TimeType (C var):           Objetos DateTime<2>.
                                                             (line   46)
* PyDateTime_TimeZone_UTC (C var):       Objetos DateTime<2>.
                                                             (line   66)
* PyDateTime_TZInfoType (C var):         Objetos DateTime<2>.
                                                             (line   58)
* PyDelta_Check (C function):            Objetos DateTime<2>.
                                                             (line  109)
* PyDelta_CheckExact (C function):       Objetos DateTime<2>.
                                                             (line  115)
* PyDelta_FromDSU (C function):          Objetos DateTime<2>.
                                                             (line  168)
* PyDescr_IsData (C function):           Objetos Descritores.
                                                             (line   37)
* PyDescr_NewClassMethod (C function):   Objetos Descritores.
                                                             (line   32)
* PyDescr_NewGetSet (C function):        Objetos Descritores.
                                                             (line   13)
* PyDescr_NewMember (C function):        Objetos Descritores.
                                                             (line   18)
* PyDescr_NewMethod (C function):        Objetos Descritores.
                                                             (line   23)
* PyDescr_NewWrapper (C function):       Objetos Descritores.
                                                             (line   28)
* PyDict_AddWatcher (C function):        Objetos dicionários.
                                                             (line  342)
* 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   38)
* PyDict_ClearWatcher (C function):      Objetos dicionários.
                                                             (line  352)
* PyDict_Contains (C function):          Objetos dicionários.
                                                             (line   42)
* PyDict_ContainsString (C function):    Objetos dicionários.
                                                             (line   48)
* PyDict_Copy (C function):              Objetos dicionários.
                                                             (line   56)
* PyDict_DelItem (C function):           Objetos dicionários.
                                                             (line   76)
* PyDict_DelItemString (C function):     Objetos dicionários.
                                                             (line   83)
* PyDict_GetItem (C function):           Objetos dicionários.
                                                             (line  107)
* PyDict_GetItemRef (C function):        Objetos dicionários.
                                                             (line   89)
* PyDict_GetItemString (C function):     Objetos dicionários.
                                                             (line  132)
* PyDict_GetItemStringRef (C function):  Objetos dicionários.
                                                             (line  146)
* PyDict_GetItemWithError (C function):  Objetos dicionários.
                                                             (line  124)
* PyDict_Items (C function):             Objetos dicionários.
                                                             (line  218)
* PyDict_Keys (C function):              Objetos dicionários.
                                                             (line  223)
* PyDict_Merge (C function):             Objetos dicionários.
                                                             (line  307)
* PyDict_MergeFromSeq2 (C function):     Objetos dicionários.
                                                             (line  326)
* PyDict_New (C function):               Objetos dicionários.
                                                             (line   27)
* PyDict_Next (C function):              Objetos dicionários.
                                                             (line  239)
* PyDict_Pop (C function):               Objetos dicionários.
                                                             (line  188)
* PyDict_PopString (C function):         Objetos dicionários.
                                                             (line  209)
* PyDict_SetDefault (C function):        Objetos dicionários.
                                                             (line  155)
* PyDict_SetDefaultRef (C function):     Objetos dicionários.
                                                             (line  167)
* PyDict_SetItem (C function):           Objetos dicionários.
                                                             (line   61)
* PyDict_SetItemString (C function):     Objetos dicionários.
                                                             (line   69)
* PyDict_Size (C function):              Objetos dicionários.
                                                             (line  233)
* PyDict_Type (C var):                   Objetos dicionários.
                                                             (line   11)
* PyDict_Unwatch (C function):           Objetos dicionários.
                                                             (line  370)
* PyDict_Update (C function):            Objetos dicionários.
                                                             (line  318)
* PyDict_Values (C function):            Objetos dicionários.
                                                             (line  228)
* PyDict_Watch (C function):             Objetos dicionários.
                                                             (line  361)
* PyDict_WatchCallback (C type):         Objetos dicionários.
                                                             (line  390)
* PyDict_WatchEvent (C type):            Objetos dicionários.
                                                             (line  381)
* PyDictObject (C type):                 Objetos dicionários.
                                                             (line    6)
* PyDictProxy_New (C function):          Objetos dicionários.
                                                             (line   31)
* PyDLL (classe em ctypes):              Loading shared libraries.
                                                             (line   70)
* PyDoc_STR (C macro):                   Macros úteis.       (line  157)
* PyDoc_STRVAR (C macro):                Macros úteis.       (line  137)
* PyEllipsis_Type (C var):               Objeto Ellipsis.    (line    6)
* PyErr_BadArgument (C function):        Lançando exceções.  (line   46)
* PyErr_BadInternalCall (C function):    Lançando exceções.  (line  215)
* 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<24>.       (line   27)
* PyErr_Clear (função C) <1>:            Exceções<24>.       (line  127)
* PyErr_DisplayException (C function):   Impressão e limpeza.
                                                             (line   67)
* PyErr_ExceptionMatches (C function):   Consultando o indicador de erro.
                                                             (line   22)
* PyErr_ExceptionMatches (função C):     Exceções<24>.       (line  127)
* PyErr_Fetch (C function):              Finalization and De-allocation.
                                                             (line   35)
* PyErr_Fetch (C function) <1>:          Consultando o indicador de erro.
                                                             (line   74)
* PyErr_Format (C function):             Lançando exceções.  (line   24)
* PyErr_FormatUnraisable (C function):   Impressão e limpeza.
                                                             (line   56)
* PyErr_FormatV (C function):            Lançando exceções.  (line   33)
* 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):           Lançando exceções.  (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<24>.       (line   13)
* PyErr_Print (C function):              Impressão e limpeza.
                                                             (line   30)
* PyErr_PrintEx (C function):            Impressão e limpeza.
                                                             (line   10)
* PyErr_ResourceWarning (C function):    Emitindo advertências.
                                                             (line   69)
* PyErr_Restore (C function):            Finalization and De-allocation.
                                                             (line   35)
* PyErr_Restore (C function) <1>:        Consultando o indicador de erro.
                                                             (line  102)
* PyErr_SetExcFromWindowsErr (C function): Lançando exceções.
                                                             (line  115)
* PyErr_SetExcFromWindowsErrWithFilename (C function): Lançando exceções.
                                                             (line  160)
* PyErr_SetExcFromWindowsErrWithFilenameObject (C function): Lançando exceções.
                                                             (line  136)
* PyErr_SetExcFromWindowsErrWithFilenameObjects (C function): Lançando exceções.
                                                             (line  148)
* PyErr_SetExcInfo (C function):         Consultando o indicador de erro.
                                                             (line  197)
* PyErr_SetFromErrno (C function):       Lançando exceções.  (line   58)
* PyErr_SetFromErrnoWithFilename (C function): Lançando exceções.
                                                             (line   93)
* PyErr_SetFromErrnoWithFilenameObject (C function): Lançando exceções.
                                                             (line   73)
* PyErr_SetFromErrnoWithFilenameObjects (C function): Lançando exceções.
                                                             (line   82)
* PyErr_SetFromWindowsErr (C function):  Lançando exceções.  (line  100)
* PyErr_SetFromWindowsErrWithFilename (C function): Lançando exceções.
                                                             (line  124)
* PyErr_SetHandledException (C function): Consultando o indicador de erro.
                                                             (line  165)
* PyErr_SetImportError (C function):     Lançando exceções.  (line  170)
* PyErr_SetImportErrorSubclass (C function): Lançando exceções.
                                                             (line  181)
* PyErr_SetInterrupt (C function):       Tratamento de sinal<2>.
                                                             (line   33)
* PyErr_SetInterruptEx (C function):     Tratamento de sinal<2>.
                                                             (line   43)
* PyErr_SetNone (C function):            Lançando exceções.  (line   42)
* PyErr_SetObject (C function):          Lançando exceções.  (line   19)
* PyErr_SetRaisedException (C function): Consultando o indicador de erro.
                                                             (line   64)
* PyErr_SetString (C function):          Lançando exceções.  (line   10)
* PyErr_SetString (função C):            Exceções<24>.       (line   27)
* PyErr_SyntaxLocation (C function):     Lançando exceções.  (line  209)
* PyErr_SyntaxLocationEx (C function):   Lançando exceções.  (line  201)
* PyErr_SyntaxLocationObject (C function): Lançando exceções.
                                                             (line  191)
* PyErr_WarnEx (C function):             Emitindo advertências.
                                                             (line   19)
* PyErr_WarnExplicit (C function):       Emitindo advertências.
                                                             (line   53)
* PyErr_WarnExplicitObject (C function): Emitindo advertências.
                                                             (line   41)
* PyErr_WarnFormat (C function):         Emitindo advertências.
                                                             (line   61)
* PyErr_WriteUnraisable (C function):    Impressão e limpeza.
                                                             (line   34)
* PyEval_AcquireThread (C function):     Low-level API.      (line  218)
* PyEval_AcquireThread():                High-level API.     (line   35)
* PyEval_EvalCode (C function):          A camada de nível muito alto.
                                                             (line  277)
* PyEval_EvalCodeEx (C function):        A camada de nível muito alto.
                                                             (line  284)
* PyEval_EvalFrame (C function):         A camada de nível muito alto.
                                                             (line  297)
* PyEval_EvalFrameEx (C function):       A camada de nível muito alto.
                                                             (line  303)
* 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  318)
* PyEval_ReleaseThread (C function):     Low-level API.      (line  243)
* PyEval_ReleaseThread():                High-level API.     (line   35)
* PyEval_RestoreThread (C function):     Desvinculação do estado de thread do código de extensão.
                                                             (line   31)
* PyEval_RestoreThread (C function) <1>: High-level API.     (line   58)
* PyEval_RestoreThread():                High-level API.     (line   35)
* PyEval_SaveThread (C function):        Desvinculação do estado de thread do código de extensão.
                                                             (line   31)
* 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):         Exception types.    (line   23)
* PyExc_AssertionError (C var):          Exception types.    (line   27)
* PyExc_AttributeError (C var):          Exception types.    (line   31)
* PyExc_BaseException (C var):           Exception types.    (line   10)
* PyExc_BaseExceptionGroup (C var):      Exception types.    (line   14)
* PyExc_BlockingIOError (C var):         Exception types.    (line   35)
* PyExc_BrokenPipeError (C var):         Exception types.    (line   40)
* PyExc_BufferError (C var):             Exception types.    (line   45)
* PyExc_BytesWarning (C var):            Warning types.      (line   13)
* PyExc_ChildProcessError (C var):       Exception types.    (line   49)
* PyExc_ConnectionAbortedError (C var):  Exception types.    (line   54)
* PyExc_ConnectionError (C var):         Exception types.    (line   59)
* PyExc_ConnectionRefusedError (C var):  Exception types.    (line   64)
* PyExc_ConnectionResetError (C var):    Exception types.    (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):                Exception types.    (line   74)
* PyExc_Exception (C var):               Exception types.    (line   19)
* PyExc_FileExistsError (C var):         Exception types.    (line   77)
* PyExc_FileNotFoundError (C var):       Exception types.    (line   82)
* PyExc_FloatingPointError (C var):      Exception types.    (line   87)
* PyExc_FutureWarning (C var):           Warning types.      (line   26)
* PyExc_GeneratorExit (C var):           Exception types.    (line   91)
* PyExc_ImportError (C var):             Exception types.    (line   95)
* PyExc_ImportWarning (C var):           Warning types.      (line   30)
* PyExc_IndentationError (C var):        Exception types.    (line   99)
* PyExc_IndexError (C var):              Exception types.    (line  103)
* PyExc_InterruptedError (C var):        Exception types.    (line  107)
* PyExc_IOError (C var):                 OSError aliases.    (line   21)
* PyExc_IsADirectoryError (C var):       Exception types.    (line  112)
* PyExc_KeyboardInterrupt (C var):       Exception types.    (line  120)
* PyExc_KeyError (C var):                Exception types.    (line  117)
* PyExc_LookupError (C var):             Exception types.    (line  124)
* PyExc_MemoryError (C var):             Exception types.    (line  128)
* PyExc_ModuleNotFoundError (C var):     Exception types.    (line  132)
* PyExc_NameError (C var):               Exception types.    (line  137)
* PyExc_NotADirectoryError (C var):      Exception types.    (line  141)
* PyExc_NotImplementedError (C var):     Exception types.    (line  146)
* PyExc_OSError (C var):                 Exception types.    (line  150)
* PyExc_OverflowError (C var):           Exception types.    (line  153)
* PyExc_PendingDeprecationWarning (C var): Warning types.    (line   34)
* PyExc_PermissionError (C var):         Exception types.    (line  157)
* PyExc_ProcessLookupError (C var):      Exception types.    (line  162)
* PyExc_PythonFinalizationError (C var): Exception types.    (line  167)
* PyExc_RecursionError (C var):          Exception types.    (line  170)
* PyExc_ReferenceError (C var):          Exception types.    (line  175)
* PyExc_ResourceWarning (C var):         Warning types.      (line   38)
* PyExc_RuntimeError (C var):            Exception types.    (line  179)
* PyExc_RuntimeWarning (C var):          Warning types.      (line   43)
* PyExc_StopAsyncIteration (C var):      Exception types.    (line  183)
* PyExc_StopIteration (C var):           Exception types.    (line  188)
* PyExc_SyntaxError (C var):             Exception types.    (line  192)
* PyExc_SyntaxWarning (C var):           Warning types.      (line   47)
* PyExc_SystemError (C var):             Exception types.    (line  196)
* PyExc_SystemExit (C var):              Exception types.    (line  200)
* PyExc_TabError (C var):                Exception types.    (line  204)
* PyExc_TimeoutError (C var):            Exception types.    (line  207)
* PyExc_TypeError (C var):               Exception types.    (line  212)
* PyExc_UnboundLocalError (C var):       Exception types.    (line  216)
* PyExc_UnicodeDecodeError (C var):      Exception types.    (line  220)
* PyExc_UnicodeEncodeError (C var):      Exception types.    (line  224)
* PyExc_UnicodeError (C var):            Exception types.    (line  228)
* PyExc_UnicodeTranslateError (C var):   Exception types.    (line  232)
* PyExc_UnicodeWarning (C var):          Warning types.      (line   51)
* PyExc_UserWarning (C var):             Warning types.      (line   55)
* PyExc_ValueError (C var):              Exception types.    (line  236)
* PyExc_Warning (C var):                 Warning types.      (line   10)
* PyExc_WindowsError (C var):            OSError aliases.    (line   27)
* PyExc_ZeroDivisionError (C var):       Exception types.    (line  240)
* PyException_GetArgs (C function):      Objeto Exceção.     (line   50)
* PyException_GetCause (C function):     Objeto Exceção.     (line   34)
* PyException_GetContext (C function):   Objeto Exceção.     (line   19)
* PyException_GetTraceback (C function): Objeto Exceção.     (line    6)
* PyException_SetArgs (C function):      Objeto Exceção.     (line   55)
* PyException_SetCause (C function):     Objeto Exceção.     (line   41)
* PyException_SetContext (C function):   Objeto Exceção.     (line   28)
* PyException_SetTraceback (C function): Objeto Exceção.     (line   14)
* PyExceptionClass_Check (C function):   Classes de exceção. (line   34)
* PyExceptionClass_Name (C function):    Classes de exceção. (line   39)
* PyFile_FromFd (C function):            Objetos arquivos.   (line   16)
* PyFile_GetLine (C function):           Objetos arquivos.   (line   44)
* PyFile_SetOpenCodeHook (C function):   Objetos arquivos.   (line   59)
* PyFile_WriteObject (C function):       Objetos arquivos.   (line   96)
* PyFile_WriteString (C function):       Objetos arquivos.   (line  106)
* 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   30)
* PyFrame_GetBack (C function):          Objetos Frame.      (line   37)
* PyFrame_GetBuiltins (C function):      Objetos Frame.      (line   47)
* PyFrame_GetCode (C function):          Objetos Frame.      (line   57)
* PyFrame_GetGenerator (C function):     Objetos Frame.      (line   68)
* PyFrame_GetGlobals (C function):       Objetos Frame.      (line   79)
* PyFrame_GetLasti (C function):         Objetos Frame.      (line   89)
* PyFrame_GetLineNumber (C function):    Objetos Frame.      (line  139)
* PyFrame_GetLocals (C function):        Objetos Frame.      (line  122)
* PyFrame_GetVar (C function):           Objetos Frame.      (line   97)
* PyFrame_GetVarString (C function):     Objetos Frame.      (line  114)
* PyFrame_Type (C var):                  Objetos Frame.      (line   22)
* PyFrameLocalsProxy_Check (C function): Frame Locals Proxies.
                                                             (line   20)
* PyFrameLocalsProxy_Type (C var):       Frame Locals Proxies.
                                                             (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 Função<2>.  (line  139)
* PyFunction_Check (C function):         Objetos Função<2>.  (line   18)
* PyFunction_ClearWatcher (C function):  Objetos Função<2>.  (line  150)
* PyFunction_GET_ANNOTATIONS (C function): Objetos Função<2>.
                                                             (line  121)
* PyFunction_GET_CLOSURE (C function):   Objetos Função<2>.  (line  121)
* PyFunction_GET_CODE (C function):      Objetos Função<2>.  (line  121)
* PyFunction_GET_DEFAULTS (C function):  Objetos Função<2>.  (line  121)
* PyFunction_GET_GLOBALS (C function):   Objetos Função<2>.  (line  121)
* PyFunction_GET_KW_DEFAULTS (C function): Objetos Função<2>.
                                                             (line  121)
* PyFunction_GET_MODULE (C function):    Objetos Função<2>.  (line  121)
* PyFunction_GetAnnotations (C function): Objetos Função<2>. (line  108)
* PyFunction_GetClosure (C function):    Objetos Função<2>.  (line   95)
* PyFunction_GetCode (C function):       Objetos Função<2>.  (line   48)
* PyFunction_GetDefaults (C function):   Objetos Função<2>.  (line   65)
* PyFunction_GetGlobals (C function):    Objetos Função<2>.  (line   52)
* PyFunction_GetKwDefaults (C function): Objetos Função<2>.  (line   89)
* PyFunction_GetModule (C function):     Objetos Função<2>.  (line   56)
* PyFunction_New (C function):           Objetos Função<2>.  (line   24)
* PyFunction_NewWithQualName (C function): Objetos Função<2>.
                                                             (line   37)
* PyFunction_SetAnnotations (C function): Objetos Função<2>. (line  113)
* PyFunction_SetClosure (C function):    Objetos Função<2>.  (line  100)
* PyFunction_SetDefaults (C function):   Objetos Função<2>.  (line   71)
* PyFunction_SetVectorcall (C function): Objetos Função<2>.  (line   79)
* PyFunction_Type (C var):               Objetos Função<2>.  (line   12)
* PyFunction_WatchCallback (C type):     Objetos Função<2>.  (line  176)
* PyFunction_WatchEvent (C type):        Objetos Função<2>.  (line  160)
* PyFunctionObject (C type):             Objetos Função<2>.  (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_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)
* PyGILState_Check (C function):         High-level API.     (line  190)
* PyGILState_Ensure (C function):        High-level API.     (line  127)
* PyGILState_GetThisThreadState (C function): High-level API.
                                                             (line  171)
* PyGILState_Release (C function):       High-level API.     (line  161)
* PyGILState_STATE (C type):             High-level API.     (line  112)
* PyGILState_STATE.PyGILState_LOCKED (C enumerator): High-level API.
                                                             (line  117)
* PyGILState_STATE.PyGILState_UNLOCKED (C enumerator): High-level API.
                                                             (line  122)
* PyHASH_BITS (C macro):                 API do PyHash.      (line   28)
* PyHash_FuncDef (C type):               API do PyHash.      (line   53)
* PyHash_FuncDef.hash (C member):        API do PyHash.      (line   58)
* PyHash_FuncDef.hash_bits (C member):   API do PyHash.      (line   67)
* PyHash_FuncDef.name (C member):        API do PyHash.      (line   63)
* PyHash_FuncDef.seed_bits (C member):   API do PyHash.      (line   71)
* PyHash_GetFuncDef (C function):        API do PyHash.      (line   77)
* PyHASH_IMAG (C macro):                 API do PyHash.      (line   46)
* PyHASH_INF (C macro):                  API do PyHash.      (line   40)
* PyHASH_MODULUS (C macro):              API do PyHash.      (line   21)
* PyHASH_MULTIPLIER (C macro):           API do PyHash.      (line   34)
* PyImport_AddModule (C function):       Importando módulos<2>.
                                                             (line  125)
* PyImport_AddModuleObject (C function): Importando módulos<2>.
                                                             (line  116)
* PyImport_AddModuleRef (C function):    Importando módulos<2>.
                                                             (line   93)
* PyImport_AppendInittab (C function):   Importando módulos<2>.
                                                             (line  303)
* PyImport_ExecCodeModule (C function):  Importando módulos<2>.
                                                             (line  131)
* PyImport_ExecCodeModuleEx (C function): Importando módulos<2>.
                                                             (line  172)
* PyImport_ExecCodeModuleObject (C function): Importando módulos<2>.
                                                             (line  181)
* PyImport_ExecCodeModuleWithPathnames (C function): Importando módulos<2>.
                                                             (line  195)
* PyImport_ExtendInittab (C function):   Importando módulos<2>.
                                                             (line  330)
* PyImport_FrozenModules (C var):        Importando módulos<2>.
                                                             (line  294)
* PyImport_GetImporter (C function):     Importando módulos<2>.
                                                             (line  244)
* PyImport_GetMagicNumber (C function):  Importando módulos<2>.
                                                             (line  212)
* PyImport_GetMagicTag (C function):     Importando módulos<2>.
                                                             (line  221)
* PyImport_GetModule (C function):       Importando módulos<2>.
                                                             (line  235)
* PyImport_GetModuleDict (C function):   Importando módulos<2>.
                                                             (line  229)
* PyImport_Import (C function):          Importando módulos<2>.
                                                             (line   76)
* PyImport_ImportFrozenModule (C function): Importando módulos<2>.
                                                             (line  271)
* PyImport_ImportFrozenModuleObject (C function): Importando módulos<2>.
                                                             (line  257)
* PyImport_ImportModule (C function):    Importando módulos<2>.
                                                             (line    6)
* PyImport_ImportModuleAttr (C function): Importando módulos<2>.
                                                             (line  345)
* PyImport_ImportModuleAttrString (C function): Importando módulos<2>.
                                                             (line  359)
* PyImport_ImportModuleEx (C function):  Importando módulos<2>.
                                                             (line   29)
* PyImport_ImportModuleLevel (C function): Importando módulos<2>.
                                                             (line   65)
* PyImport_ImportModuleLevelObject (C function): Importando módulos<2>.
                                                             (line   47)
* PyImport_ImportModuleNoBlock (C function): Importando módulos<2>.
                                                             (line   14)
* PyImport_ReloadModule (C function):    Importando módulos<2>.
                                                             (line   87)
* PyIndex_Check (C function):            Protocolo de número.
                                                             (line  306)
* PyInit_modulename (C function):        Função de inicialização.
                                                             (line    9)
* PyInitConfig (C struct):               Create Config.      (line    6)
* PyInitConfig_AddModule (C function):   Module.             (line    6)
* PyInitConfig_Create (C function):      Create Config.      (line   10)
* PyInitConfig_Free (C function):        Create Config.      (line   19)
* PyInitConfig_FreeStrList (C function): Get Options.        (line   55)
* PyInitConfig_GetError (C function):    Tratamento de erros<2>.
                                                             (line    6)
* PyInitConfig_GetExitCode (C function): Tratamento de erros<2>.
                                                             (line   24)
* PyInitConfig_GetInt (C function):      Get Options.        (line   17)
* PyInitConfig_GetStr (C function):      Get Options.        (line   26)
* PyInitConfig_GetStrList (C function):  Get Options.        (line   42)
* PyInitConfig_HasOption (C function):   Get Options.        (line   10)
* PyInitConfig_SetInt (C function):      Set Options.        (line   15)
* PyInitConfig_SetStr (C function):      Set Options.        (line   24)
* PyInitConfig_SetStrList (C function):  Set Options.        (line   34)
* 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   21)
* PyInterpreterState_Delete (C function): Low-level API.     (line   29)
* PyInterpreterState_Get (C function):   Low-level API.      (line  121)
* PyInterpreterState_GetDict (C function): Low-level API.    (line  141)
* PyInterpreterState_GetID (C function): Low-level API.      (line  131)
* 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   32)
* PyIter_NextItem (C function):          Protocolo Iterador. (line   22)
* PyIter_Send (C function):              Protocolo Iterador. (line   51)
* 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)
* PyListObject (C type):                 Objeto List.        (line    6)
* PyLong_AS_LONG (C function):           Objetos Inteiros.   (line  177)
* PyLong_AsDouble (C function):          Objetos Inteiros.   (line  382)
* PyLong_AsInt (C function):             Objetos Inteiros.   (line  186)
* PyLong_AsInt32 (C function):           Objetos Inteiros.   (line  341)
* PyLong_AsInt64 (C function):           Objetos Inteiros.   (line  341)
* PyLong_AsLong (C function):            Objetos Inteiros.   (line  158)
* PyLong_AsLongAndOverflow (C function): Objetos Inteiros.   (line  193)
* PyLong_AsLongLong (C function):        Objetos Inteiros.   (line  213)
* PyLong_AsLongLongAndOverflow (C function): Objetos Inteiros.
                                                             (line  232)
* PyLong_AsNativeBytes (C function):     Objetos Inteiros.   (line  403)
* PyLong_AsSize_t (C function):          Objetos Inteiros.   (line  278)
* PyLong_AsSsize_t (C function):         Objetos Inteiros.   (line  254)
* PyLong_AsUInt32 (C function):          Objetos Inteiros.   (line  360)
* PyLong_AsUInt64 (C function):          Objetos Inteiros.   (line  360)
* PyLong_AsUnsignedLong (C function):    Objetos Inteiros.   (line  266)
* PyLong_AsUnsignedLongLong (C function): Objetos Inteiros.  (line  290)
* PyLong_AsUnsignedLongLongMask (C function): Objetos Inteiros.
                                                             (line  323)
* PyLong_AsUnsignedLongMask (C function): Objetos Inteiros.  (line  306)
* PyLong_AsVoidPtr (C function):         Objetos Inteiros.   (line  393)
* PyLong_Check (C function):             Objetos Inteiros.   (line   23)
* PyLong_CheckExact (C function):        Objetos Inteiros.   (line   29)
* PyLong_Export (C function):            Export API.         (line   89)
* PyLong_FreeExport (C function):        Export API.         (line  107)
* PyLong_FromDouble (C function):        Objetos Inteiros.   (line   88)
* PyLong_FromInt32 (C function):         Objetos Inteiros.   (line   66)
* PyLong_FromInt64 (C function):         Objetos Inteiros.   (line   66)
* PyLong_FromLong (C function):          Objetos Inteiros.   (line   35)
* PyLong_FromLongLong (C function):      Objetos Inteiros.   (line   61)
* PyLong_FromNativeBytes (C function):   Objetos Inteiros.   (line  130)
* 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   93)
* PyLong_FromUInt32 (C function):        Objetos Inteiros.   (line   80)
* PyLong_FromUInt64 (C function):        Objetos Inteiros.   (line   80)
* PyLong_FromUnicodeObject (C function): Objetos Inteiros.   (line  117)
* PyLong_FromUnsignedLong (C function):  Objetos Inteiros.   (line   45)
* PyLong_FromUnsignedLongLong (C function): Objetos Inteiros.
                                                             (line   74)
* PyLong_FromUnsignedNativeBytes (C function): Objetos Inteiros.
                                                             (line  145)
* PyLong_FromVoidPtr (C function):       Objetos Inteiros.   (line  124)
* PyLong_GetInfo (C function):           Objetos Inteiros.   (line  598)
* PyLong_GetNativeLayout (C function):   Export API.         (line   46)
* PyLong_GetSign (C function):           Objetos Inteiros.   (line  556)
* PyLong_IsNegative (C function):        Objetos Inteiros.   (line  578)
* PyLong_IsPositive (C function):        Objetos Inteiros.   (line  568)
* PyLong_IsZero (C function):            Objetos Inteiros.   (line  588)
* PyLong_Type (C var):                   Objetos Inteiros.   (line   18)
* PyLongExport (C struct):               Export API.         (line   58)
* PyLongExport.digits (C member):        Export API.         (line   85)
* PyLongExport.ndigits (C member):       Export API.         (line   80)
* PyLongExport.negative (C member):      Export API.         (line   75)
* PyLongExport.value (C member):         Export API.         (line   70)
* PyLongLayout (C struct):               Export API.         (line    8)
* PyLongLayout.bits_per_digit (C member): Export API.        (line   20)
* PyLongLayout.digit_endianness (C member): Export API.      (line   38)
* PyLongLayout.digit_size (C member):    Export API.         (line   25)
* PyLongLayout.digits_order (C member):  Export API.         (line   30)
* PyLongObject (C type):                 Objetos Inteiros.   (line   13)
* PyLongWriter (C struct):               PyLongWriter API.   (line   10)
* PyLongWriter_Create (C function):      PyLongWriter API.   (line   17)
* PyLongWriter_Discard (C function):     PyLongWriter API.   (line   59)
* PyLongWriter_Finish (C function):      PyLongWriter API.   (line   45)
* 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   27)
* PyMappingMethods.mp_length (C member): Mapping Object Structures.
                                                             (line   11)
* PyMappingMethods.mp_subscript (C member): Mapping Object Structures.
                                                             (line   18)
* PyMarshal_ReadLastObjectFromFile (C function): Suporte a marshalling de dados.
                                                             (line   78)
* PyMarshal_ReadLongFromFile (C function): Suporte a marshalling de dados.
                                                             (line   52)
* PyMarshal_ReadObjectFromFile (C function): Suporte a marshalling de dados.
                                                             (line   70)
* PyMarshal_ReadObjectFromString (C function): Suporte a marshalling de dados.
                                                             (line   92)
* PyMarshal_ReadShortFromFile (C function): Suporte a marshalling de dados.
                                                             (line   61)
* PyMarshal_WriteLongToFile (C function): Suporte a marshalling de dados.
                                                             (line   23)
* PyMarshal_WriteObjectToFile (C function): Suporte a marshalling de dados.
                                                             (line   34)
* PyMarshal_WriteObjectToString (C function): Suporte a marshalling de dados.
                                                             (line   43)
* PyMem_Calloc (C function):             Interface da Memória.
                                                             (line   28)
* PyMem_Del (C function):                Interface da Memória.
                                                             (line   84)
* PYMEM_DOMAIN_MEM (C macro):            Alocadores de memória.
                                                             (line   53)
* PYMEM_DOMAIN_OBJ (C macro):            Alocadores de memória.
                                                             (line   65)
* PYMEM_DOMAIN_RAW (C macro):            Alocadores de memória.
                                                             (line   41)
* PyMem_Free (C function):               Interface da Memória.
                                                             (line   56)
* PyMem_GetAllocator (C function):       Alocadores de memória.
                                                             (line   77)
* PyMem_Malloc (C function):             Interface da Memória.
                                                             (line   19)
* PyMem_New (C macro):                   Interface da Memória.
                                                             (line   68)
* PyMem_RawCalloc (C function):          Raw Memory Interface.
                                                             (line   25)
* PyMem_RawFree (C function):            Raw Memory Interface.
                                                             (line   53)
* PyMem_RawMalloc (C function):          Raw Memory Interface.
                                                             (line   16)
* PyMem_RawRealloc (C function):         Raw Memory Interface.
                                                             (line   37)
* PyMem_Realloc (C function):            Interface da Memória.
                                                             (line   40)
* PyMem_Resize (C macro):                Interface da Memória.
                                                             (line   74)
* PyMem_SetAllocator (C function):       Alocadores de memória.
                                                             (line   82)
* PyMem_SetupDebugHooks (C function):    Alocadores de memória.
                                                             (line  125)
* PyMemAllocatorDomain (C type):         Alocadores de memória.
                                                             (line   37)
* PyMemAllocatorEx (C type):             Alocadores de memória.
                                                             (line    8)
* PyMember_GetOne (C function):          Accessing attributes of extension types.
                                                             (line   76)
* PyMember_SetOne (C function):          Accessing attributes of extension types.
                                                             (line   85)
* 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)
* PyMemoryView_Check (C function):       Objetos MemoryView. (line   57)
* PyMemoryView_FromBuffer (C function):  Objetos MemoryView. (line   36)
* PyMemoryView_FromMemory (C function):  Objetos MemoryView. (line   27)
* PyMemoryView_FromObject (C function):  Objetos MemoryView. (line   10)
* PyMemoryView_GET_BASE (C function):    Objetos MemoryView. (line   71)
* PyMemoryView_GET_BUFFER (C function):  Objetos MemoryView. (line   63)
* PyMemoryView_GetContiguous (C function): Objetos MemoryView.
                                                             (line   44)
* 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)
* PyMODINIT_FUNC (C macro):              Função de inicialização.
                                                             (line   32)
* PyModule_Add (C function):             Support functions.  (line   63)
* PyModule_AddFunctions (C function):    Support functions.  (line  158)
* 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):          Creating extension modules dynamically.
                                                             (line   10)
* PyModule_Create2 (C function):         Creating extension modules dynamically.
                                                             (line   17)
* PyModule_ExecDef (C function):         Creating extension modules dynamically.
                                                             (line   64)
* PyModule_FromDefAndSpec (C function):  Creating extension modules dynamically.
                                                             (line   34)
* PyModule_FromDefAndSpec2 (C function): Creating extension modules dynamically.
                                                             (line   43)
* PyModule_GetDef (C function):          Objetos do Módulo.  (line   81)
* PyModule_GetDict (C function):         Objetos do Módulo.  (line   46)
* PyModule_GetFilename (C function):     Objetos do Módulo.  (line  100)
* PyModule_GetFilenameObject (C function): Objetos do Módulo.
                                                             (line   87)
* PyModule_GetName (C function):         Objetos do Módulo.  (line   71)
* PyModule_GetNameObject (C function):   Objetos do Módulo.  (line   60)
* PyModule_GetState (C function):        Objetos do Módulo.  (line   76)
* PyModule_New (C function):             Objetos do Módulo.  (line   41)
* PyModule_NewObject (C function):       Objetos do Módulo.  (line   23)
* PyModule_SetDocString (C function):    Support functions.  (line  177)
* PyModule_Type (C var):                 Objetos do Módulo.  (line    6)
* PyModuleDef (C type):                  Module definitions. (line   22)
* PyModuleDef_Init (C function):         Inicialização multifásica.
                                                             (line   11)
* PyModuleDef_Slot (C type):             Module slots.       (line    6)
* PyModuleDef_Slot.slot (C member):      Module slots.       (line    8)
* PyModuleDef_Slot.value (C member):     Module slots.       (line   13)
* PyModuleDef.m_base (C member):         Module definitions. (line   30)
* PyModuleDef.m_clear (C member):        Module definitions. (line  100)
* PyModuleDef.m_doc (C member):          Module definitions. (line   38)
* PyModuleDef.m_free (C member):         Module definitions. (line  123)
* PyModuleDef.m_methods (C member):      Module definitions. (line   67)
* PyModuleDef.m_name (C member):         Module definitions. (line   34)
* PyModuleDef.m_size (C member):         Module definitions. (line   43)
* PyModuleDef.m_slots (C member):        Module definitions. (line   73)
* PyModuleDef.m_slots.m_reload (C member): Module definitions.
                                                             (line   82)
* PyModuleDef.m_traverse (C member):     Module definitions. (line   84)
* PyMonitoring_EnterScope (C function):  Gerenciando o Estado de um Monitoramento.
                                                             (line    9)
* PyMonitoring_ExitScope (C function):   Gerenciando o Estado de um Monitoramento.
                                                             (line   99)
* PyMonitoring_FireBranchLeftEvent (C function): Gerando eventos de execução.
                                                             (line   72)
* PyMonitoring_FireBranchRightEvent (C function): Gerando eventos de execução.
                                                             (line   78)
* PyMonitoring_FireCallEvent (C function): Gerando eventos de execução.
                                                             (line   56)
* PyMonitoring_FireCRaiseEvent (C function): Gerando eventos de execução.
                                                             (line  101)
* PyMonitoring_FireCReturnEvent (C function): Gerando eventos de execução.
                                                             (line   84)
* PyMonitoring_FireExceptionHandledEvent (C function): Gerando eventos de execução.
                                                             (line  113)
* 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   89)
* PyMonitoring_FirePyUnwindEvent (C function): Gerando eventos de execução.
                                                             (line  119)
* PyMonitoring_FirePyYieldEvent (C function): Gerando eventos de execução.
                                                             (line   51)
* PyMonitoring_FireRaiseEvent (C function): Gerando eventos de execução.
                                                             (line   95)
* PyMonitoring_FireReraiseEvent (C function): Gerando eventos de execução.
                                                             (line  107)
* PyMonitoring_FireStopIterationEvent (C function): Gerando eventos de execução.
                                                             (line  125)
* PyMonitoringState (C type):            Gerando eventos de execução.
                                                             (line   25)
* PyMutex (C type):                      Synchronization Primitives<2>.
                                                             (line    8)
* PyMutex_IsLocked (C function):         Synchronization Primitives<2>.
                                                             (line   41)
* 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   93)
* PyNumberMethods.nb_add (C member):     Number Object Structures.
                                                             (line   70)
* PyNumberMethods.nb_and (C member):     Number Object Structures.
                                                             (line  107)
* PyNumberMethods.nb_bool (C member):    Number Object Structures.
                                                             (line   96)
* PyNumberMethods.nb_divmod (C member):  Number Object Structures.
                                                             (line   81)
* PyNumberMethods.nb_float (C member):   Number Object Structures.
                                                             (line  117)
* PyNumberMethods.nb_floor_divide (C member): Number Object Structures.
                                                             (line  150)
* PyNumberMethods.nb_index (C member):   Number Object Structures.
                                                             (line  162)
* PyNumberMethods.nb_inplace_add (C member): Number Object Structures.
                                                             (line  120)
* PyNumberMethods.nb_inplace_and (C member): Number Object Structures.
                                                             (line  141)
* PyNumberMethods.nb_inplace_floor_divide (C member): Number Object Structures.
                                                             (line  156)
* PyNumberMethods.nb_inplace_lshift (C member): Number Object Structures.
                                                             (line  135)
* PyNumberMethods.nb_inplace_matrix_multiply (C member): Number Object Structures.
                                                             (line  168)
* PyNumberMethods.nb_inplace_multiply (C member): Number Object Structures.
                                                             (line  126)
* PyNumberMethods.nb_inplace_or (C member): Number Object Structures.
                                                             (line  147)
* PyNumberMethods.nb_inplace_power (C member): Number Object Structures.
                                                             (line  132)
* PyNumberMethods.nb_inplace_remainder (C member): Number Object Structures.
                                                             (line  129)
* PyNumberMethods.nb_inplace_rshift (C member): Number Object Structures.
                                                             (line  138)
* PyNumberMethods.nb_inplace_subtract (C member): Number Object Structures.
                                                             (line  123)
* PyNumberMethods.nb_inplace_true_divide (C member): Number Object Structures.
                                                             (line  159)
* PyNumberMethods.nb_inplace_xor (C member): Number Object Structures.
                                                             (line  144)
* PyNumberMethods.nb_int (C member):     Number Object Structures.
                                                             (line  113)
* PyNumberMethods.nb_invert (C member):  Number Object Structures.
                                                             (line   98)
* PyNumberMethods.nb_lshift (C member):  Number Object Structures.
                                                             (line  101)
* PyNumberMethods.nb_matrix_multiply (C member): Number Object Structures.
                                                             (line  165)
* PyNumberMethods.nb_multiply (C member): Number Object Structures.
                                                             (line   75)
* PyNumberMethods.nb_negative (C member): Number Object Structures.
                                                             (line   87)
* PyNumberMethods.nb_or (C member):      Number Object Structures.
                                                             (line  111)
* PyNumberMethods.nb_positive (C member): Number Object Structures.
                                                             (line   90)
* PyNumberMethods.nb_power (C member):   Number Object Structures.
                                                             (line   84)
* PyNumberMethods.nb_remainder (C member): Number Object Structures.
                                                             (line   78)
* PyNumberMethods.nb_reserved (C member): Number Object Structures.
                                                             (line  115)
* PyNumberMethods.nb_rshift (C member):  Number Object Structures.
                                                             (line  104)
* PyNumberMethods.nb_subtract (C member): Number Object Structures.
                                                             (line   72)
* PyNumberMethods.nb_true_divide (C member): Number Object Structures.
                                                             (line  153)
* PyNumberMethods.nb_xor (C member):     Number Object Structures.
                                                             (line  109)
* PyObject (C type):                     Base object types and macros.
                                                             (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_CallFinalizer (C function):   Funções<15>.        (line    9)
* PyObject_CallFinalizerFromDealloc (C function): Funções<15>.
                                                             (line   20)
* 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   30)
* 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  100)
* PyObject_CopyData (C function):        Funções relacionadas ao Buffer.
                                                             (line   83)
* PyObject_Del (C function):             Alocando objetos na heap.
                                                             (line  143)
* 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   58)
* PyObject_GC_Del (C function):          Suporte a Coleta Cíclica de Lixo.
                                                             (line  181)
* PyObject_GC_IsFinalized (C function):  Suporte a Coleta Cíclica de Lixo.
                                                             (line  171)
* PyObject_GC_IsTracked (C function):    Suporte a Coleta Cíclica de Lixo.
                                                             (line  161)
* 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   83)
* PyObject_GC_Resize (C macro):          Suporte a Coleta Cíclica de Lixo.
                                                             (line  135)
* PyObject_GC_Track (C function):        Suporte a Coleta Cíclica de Lixo.
                                                             (line  145)
* PyObject_GC_UnTrack (C function):      Suporte a Coleta Cíclica de Lixo.
                                                             (line  207)
* 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  116)
* 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):               Base object types and macros.
                                                             (line   69)
* PyObject_HEAD_INIT (C macro):          Base object types and macros.
                                                             (line  171)
* PyObject_Init (C function):            Alocando objetos na heap.
                                                             (line   13)
* PyObject_InitVar (C function):         Alocando objetos na heap.
                                                             (line   32)
* PyObject_IS_GC (C function):           Suporte a Coleta Cíclica de Lixo.
                                                             (line  153)
* 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   21)
* PyObject_New (C macro):                Alocando objetos na heap.
                                                             (line   42)
* PyObject_NewVar (C macro):             Alocando objetos na heap.
                                                             (line   91)
* 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   42)
* 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):           Base object types and macros.
                                                             (line   79)
* PyObject_Vectorcall (C function):      API de chamada de objetos.
                                                             (line  202)
* PyObject_VectorcallDict (C function):  API de chamada de objetos.
                                                             (line  216)
* PyObject_VectorcallMethod (C function): API de chamada de objetos.
                                                             (line  233)
* PyObject_VisitManagedDict (C function): Protocolo de objeto.
                                                             (line  583)
* PyObject.ob_refcnt (C member):         Base object types and macros.
                                                             (line   27)
* PyObject.ob_type (C member):           Base object types and macros.
                                                             (line   37)
* PyObjectArenaAllocator (C type):       Customize pymalloc Arena Allocator.
                                                             (line    8)
* 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  141)
* PyOS_ReadlineFunctionPointer (C var):  A camada de nível muito alto.
                                                             (line  154)
* 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  158)
* 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  164)
* 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)
* 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)
* 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   50)
* PyRefTracer_SetTracer (C function):    Reference tracing.  (line   31)
* PyRun_AnyFile (C function):            A camada de nível muito alto.
                                                             (line   24)
* PyRun_AnyFileEx (C function):          A camada de nível muito alto.
                                                             (line   37)
* PyRun_AnyFileExFlags (C function):     A camada de nível muito alto.
                                                             (line   44)
* PyRun_AnyFileFlags (C function):       A camada de nível muito alto.
                                                             (line   30)
* PyRun_File (C function):               A camada de nível muito alto.
                                                             (line  200)
* PyRun_FileEx (C function):             A camada de nível muito alto.
                                                             (line  206)
* PyRun_FileExFlags (C function):        A camada de nível muito alto.
                                                             (line  220)
* PyRun_FileFlags (C function):          A camada de nível muito alto.
                                                             (line  213)
* PyRun_InteractiveLoop (C function):    A camada de nível muito alto.
                                                             (line  126)
* PyRun_InteractiveLoopFlags (C function): A camada de nível muito alto.
                                                             (line  132)
* PyRun_InteractiveOne (C function):     A camada de nível muito alto.
                                                             (line  105)
* PyRun_InteractiveOneFlags (C function): A camada de nível muito alto.
                                                             (line  111)
* PyRun_SimpleFile (C function):         A camada de nível muito alto.
                                                             (line   77)
* PyRun_SimpleFileEx (C function):       A camada de nível muito alto.
                                                             (line   83)
* PyRun_SimpleFileExFlags (C function):  A camada de nível muito alto.
                                                             (line   90)
* PyRun_SimpleString (C function):       A camada de nível muito alto.
                                                             (line   57)
* PyRun_SimpleStringFlags (C function):  A camada de nível muito alto.
                                                             (line   63)
* PyRun_String (C function):             A camada de nível muito alto.
                                                             (line  179)
* PyRun_StringFlags (C function):        A camada de nível muito alto.
                                                             (line  185)
* PySendResult (C type):                 Protocolo Iterador. (line   44)
* 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  131)
* PySequence_Fast_GET_ITEM (C function): Protocolo de sequência.
                                                             (line  155)
* PySequence_Fast_GET_SIZE (C function): Protocolo de sequência.
                                                             (line  146)
* PySequence_Fast_ITEMS (C function):    Protocolo de sequência.
                                                             (line  161)
* 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_In (C function):            Protocolo de sequência.
                                                             (line  102)
* PySequence_Index (C function):         Protocolo de sequência.
                                                             (line  110)
* 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  171)
* PySequence_Length (C function):        Protocolo de sequência.
                                                             (line   14)
* PySequence_List (C function):          Protocolo de sequência.
                                                             (line  116)
* 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  122)
* PySequenceMethods (C type):            Sequence Object Structures.
                                                             (line    6)
* PySequenceMethods.sq_ass_item (C member): Sequence Object Structures.
                                                             (line   50)
* PySequenceMethods.sq_concat (C member): Sequence Object Structures.
                                                             (line   19)
* PySequenceMethods.sq_contains (C member): Sequence Object Structures.
                                                             (line   60)
* PySequenceMethods.sq_inplace_concat (C member): Sequence Object Structures.
                                                             (line   68)
* PySequenceMethods.sq_inplace_repeat (C member): Sequence Object Structures.
                                                             (line   79)
* PySequenceMethods.sq_item (C member):  Sequence Object Structures.
                                                             (line   34)
* PySequenceMethods.sq_length (C member): Sequence Object Structures.
                                                             (line   11)
* PySequenceMethods.sq_repeat (C member): Sequence Object Structures.
                                                             (line   26)
* 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)
* PySetObject (C type):                  Objeto Set.         (line   18)
* PySignal_SetWakeupFd (C function):     Tratamento de sinal<2>.
                                                             (line   69)
* 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):        Module lookup single-phase initialization.
                                                             (line   25)
* PyState_FindModule (C function):       Module lookup single-phase initialization.
                                                             (line   15)
* PyState_RemoveModule (C function):     Module lookup single-phase initialization.
                                                             (line   53)
* 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)
* PySys_AddAuditHook (C function):       System Functions.   (line  115)
* PySys_Audit (C function):              System Functions.   (line   74)
* PySys_AuditTuple (C function):         System Functions.   (line  107)
* PySys_FormatStderr (C function):       System Functions.   (line   60)
* PySys_FormatStdout (C function):       System Functions.   (line   52)
* PySys_GetObject (C function):          System Functions.   (line   11)
* PySys_GetXOptions (C function):        System Functions.   (line   66)
* PySys_ResetWarnOptions (C function):   System Functions.   (line   23)
* PySys_SetArgv (C function):            Process-wide parameters.
                                                             (line  275)
* PySys_SetArgvEx (C function):          Process-wide parameters.
                                                             (line  223)
* PySys_SetObject (C function):          System Functions.   (line   17)
* PySys_WriteStderr (C function):        System Functions.   (line   48)
* PySys_WriteStdout (C function):        System Functions.   (line   31)
* Python 3000:                           Glossário.          (line 1392)
* Python Editor:                         IDLE — editor e console Python<2>.
                                                             (line    8)
* PYTHON_ABI_VERSION (C macro):          Creating extension modules dynamically.
                                                             (line   78)
* PYTHON_API_VERSION (C macro):          Creating extension modules dynamically.
                                                             (line   70)
* PYTHON_BASIC_REPL:                     Console interativo padrão.
                                                             (line    7)
* PYTHON_BASIC_REPL <1>:                 Um melhor interpretador interativo.
                                                             (line   28)
* PYTHON_BASIC_REPL <2>:                 Biblioteca<16>.     (line   52)
* PYTHON_BASIC_REPL <3>:                 Biblioteca<16>.     (line   56)
* PYTHON_BASIC_REPL <4>:                 Núcleo e embutidos<15>.
                                                             (line  464)
* PYTHON_BASIC_REPL <5>:                 Modo interativo<2>. (line   26)
* 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<2>.
                                                             (line   60)
* PYTHON_COLORS <1>:                     Mensagens de erro melhoradas<2>.
                                                             (line    8)
* PYTHON_COLORS <2>:                     doctest.            (line    7)
* PYTHON_COLORS <3>:                     Controlando cores.  (line   24)
* python_compiler() (no módulo platform): Multiplataforma.   (line   88)
* PYTHON_CONTEXT_AWARE_WARNINGS:         Biblioteca<9>.      (line  384)
* PYTHON_CONTEXT_AWARE_WARNINGS <1>:     Opções diversas.    (line  457)
* PYTHON_CONTEXT_AWARE_WARNINGS <2>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line  624)
* PYTHON_CONTEXT_AWARE_WARNINGS <3>:     Concurrent safety of Context Managers.
                                                             (line   41)
* PYTHON_CPU_COUNT:                      os<2>.              (line   12)
* PYTHON_CPU_COUNT <1>:                  Opções diversas.    (line  419)
* PYTHON_CPU_COUNT <2>:                  Diversas informações de sistema.
                                                             (line   50)
* PYTHON_CPU_COUNT <3>:                  Diversas informações de sistema.
                                                             (line   70)
* PYTHON_CPU_COUNT <4>:                  Diversos<5>.        (line   30)
* PYTHON_CPU_COUNT <5>:                  PyConfig.           (line  523)
* PYTHON_DISABLE_REMOTE_DEBUG:           PEP 768 Interface segura para depurador externo.
                                                             (line   41)
* PYTHON_DISABLE_REMOTE_DEBUG <1>:       Opções diversas.    (line  410)
* 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<21>.
                                                             (line  109)
* PYTHON_FROZEN_MODULES <2>:             Opções diversas.    (line  376)
* PYTHON_FROZEN_MODULES <3>:             PyConfig.           (line  421)
* PYTHON_GIL:                            CPython com threads livres.
                                                             (line   25)
* PYTHON_GIL <1>:                        CPython com threads livres.
                                                             (line   41)
* PYTHON_GIL <2>:                        Núcleo e embutidos<15>.
                                                             (line  167)
* PYTHON_GIL <3>:                        Opções diversas.    (line  438)
* PYTHON_GIL <4>:                        sys — Parâmetros e funções específicas do sistema.
                                                             (line  617)
* PYTHON_GIL <5>:                        A trava global do interpretador no Python com threads livres.
                                                             (line    8)
* PYTHON_GIL <6>:                        Glossário.          (line  782)
* PYTHON_HISTORY:                        Outras mudanças na linguagem.
                                                             (line   59)
* PYTHON_HISTORY <1>:                    Biblioteca<21>.     (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  277)
* PYTHON_JIT:                            Versões binárias para o compilador experimental just-in-time.
                                                             (line    8)
* PYTHON_JIT <1>:                        Opções gerais.      (line  242)
* PYTHON_JIT <2>:                        Opções gerais.      (line  247)
* PYTHON_JIT <3>:                        Opções gerais.      (line  251)
* PYTHON_JIT <4>:                        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1346)
* PYTHON_MANAGER_DEFAULT:                Uso básico.         (line   47)
* PYTHON_MANAGER_DEFAULT <1>:            Troubleshooting.    (line   63)
* PYTHON_PERF_JIT_SUPPORT:               Outras mudanças na linguagem.
                                                             (line   54)
* PYTHON_PERF_JIT_SUPPORT <1>:           Opções diversas.    (line  396)
* PYTHON_PERF_JIT_SUPPORT <2>:           PyConfig.           (line  909)
* PYTHON_PERF_JIT_SUPPORT <3>:           Como trabalhar sem ponteiros de quadro.
                                                             (line   14)
* PYTHON_PRESITE:                        Opções diversas.    (line  430)
* PYTHON_PRESITE <1>:                    PyConfig.           (line  803)
* PYTHON_PRESITE=package.module:         Núcleo e embutidos<21>.
                                                             (line  160)
* python_revision() (no módulo platform): Multiplataforma.   (line  104)
* PYTHON_THREAD_INHERIT_CONTEXT:         Núcleo e embutidos<8>.
                                                             (line  240)
* PYTHON_THREAD_INHERIT_CONTEXT <1>:     Opções diversas.    (line  448)
* PYTHON_THREAD_INHERIT_CONTEXT <2>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line  620)
* PYTHON_TLBC:                           Opções diversas.    (line  465)
* 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<5>.
                                                             (line   14)
* python-m-py_compile opção de linha de comando; -q: Interface de Linha de Comando<5>.
                                                             (line   20)
* python-m-py_compile opção de linha de comando; -quiet: Interface de Linha de Comando<5>.
                                                             (line   20)
* python-m-py_compile opção de linha de comando; <file>: Interface de Linha de Comando<5>.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -h: Interface de linha de comando<2>.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -help: Interface de linha de comando<2>.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -v: Interface de linha de comando<2>.
                                                             (line   18)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -version: Interface de linha de comando<2>.
                                                             (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  265)
* PYTHONBREAKPOINT <3>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  279)
* PYTHONBREAKPOINT <4>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  284)
* PYTHONCASEOK:                          Alterações na API Python<5>.
                                                             (line   30)
* PYTHONCASEOK <1>:                      PEP 235 Importing Modules on Case-Insensitive Platforms.
                                                             (line   17)
* PYTHONCASEOK <2>:                      Biblioteca<50>.     (line  144)
* PYTHONCASEOK <3>:                      Funções embutidas<3>.
                                                             (line 2347)
* 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  694)
* PYTHONDEVMODE:                         Modo de Desenvolvimento do Python -X dev.
                                                             (line    7)
* PYTHONDEVMODE <1>:                     Opções diversas.    (line  332)
* 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.
                                                             (line  627)
* PYTHONDONTWRITEBYTECODE <2>:           Opções diversas.    (line   19)
* PYTHONDONTWRITEBYTECODE <3>:           sys — Parâmetros e funções específicas do sistema.
                                                             (line  352)
* PYTHONDONTWRITEBYTECODE <4>:           Variáveis de configuração global.
                                                             (line   55)
* PYTHONDONTWRITEBYTECODE <5>:           PyConfig.           (line 1009)
* 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<54>.     (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<38>.
                                                             (line  154)
* PYTHONDUMPREFSFILE <1>:                PyConfig.           (line  320)
* PYTHONEXECUTABLE:                      PyConfig.           (line  729)
* PYTHONFAULTHANDLER:                    faulthandler<5>.    (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  357)
* 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<65>.
                                                             (line   30)
* PYTHONHASHSEED <3>:                    Opções diversas.    (line  138)
* PYTHONHASHSEED <4>:                    Opções diversas.    (line  155)
* PYTHONHASHSEED <5>:                    Variáveis de ambiente.
                                                             (line  162)
* 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  437)
* PYTHONHOME:                            Remoção pendente no Python 3 15<2>.
                                                             (line   54)
* PYTHONHOME <1>:                        APIs C descontinuadas<2>.
                                                             (line   25)
* PYTHONHOME <2>:                        Remoção pendente no Python 3 15<4>.
                                                             (line   54)
* PYTHONHOME <3>:                        Remoção pendente no Python 3 15<6>.
                                                             (line   54)
* PYTHONHOME <4>:                        Resumo – Destaques da versão<9>.
                                                             (line  107)
* PYTHONHOME <5>:                        Opções diversas.    (line   48)
* PYTHONHOME <6>:                        Variáveis de ambiente.
                                                             (line   19)
* PYTHONHOME <7>:                        Variáveis de ambiente.
                                                             (line   21)
* PYTHONHOME <8>:                        Variáveis de ambiente.
                                                             (line   38)
* PYTHONHOME <9>:                        Encontrando módulos.
                                                             (line   31)
* PYTHONHOME <10>:                       Encontrando módulos.
                                                             (line   49)
* PYTHONHOME <11>:                       Encontrando módulos.
                                                             (line   85)
* PYTHONHOME <12>:                       Adicionando Python a um projeto iOS.
                                                             (line   92)
* PYTHONHOME <13>:                       test support script_helper — Utilities for the Python execution tests.
                                                             (line   25)
* PYTHONHOME <14>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   34)
* PYTHONHOME <15>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   62)
* PYTHONHOME <16>:                       Ambientes virtuais<2>.
                                                             (line   18)
* PYTHONHOME <17>:                       Incorporando Python<2>.
                                                             (line   38)
* PYTHONHOME <18>:                       Incorporando Python<2>.
                                                             (line   44)
* PYTHONHOME <19>:                       Variáveis de configuração global.
                                                             (line   99)
* PYTHONHOME <20>:                       Process-wide parameters.
                                                             (line  302)
* PYTHONHOME <21>:                       Process-wide parameters.
                                                             (line  318)
* PYTHONHOME <22>:                       Process-wide parameters.
                                                             (line  327)
* PYTHONHOME <23>:                       PyConfig.           (line  445)
* PYTHONHOME <24>:                       PyConfig.           (line  447)
* PYTHONHOME <25>:                       Remoção pendente no Python 3 15<8>.
                                                             (line   54)
* Pythônico:                             Glossário.          (line 1399)
* PYTHONINSPECT:                         Outras alterações e correções<2>.
                                                             (line   13)
* PYTHONINSPECT <1>:                     Opções diversas.    (line   71)
* PYTHONINSPECT <2>:                     Variáveis de configuração global.
                                                             (line  117)
* PYTHONINSPECT <3>:                     PyConfig.           (line  476)
* PYTHONINTMAXSTRDIGITS:                 Núcleo e embutidos<30>.
                                                             (line  106)
* 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 1262)
* PYTHONINTMAXSTRDIGITS <5>:             PyConfig.           (line  507)
* PYTHONIOENCODING:                      Other Improvements<2>.
                                                             (line   75)
* PYTHONIOENCODING <1>:                  Alterações no interpretador<2>.
                                                             (line   23)
* PYTHONIOENCODING <2>:                  Variáveis de ambiente.
                                                             (line  425)
* PYTHONIOENCODING <3>:                  Modo UTF-8 do Python.
                                                             (line   29)
* PYTHONIOENCODING <4>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 2096)
* PYTHONIOENCODING <5>:                  PyConfig.           (line  863)
* PYTHONLEGACYWINDOWSFSENCODING:         Remoção pendente no Python 3 16.
                                                             (line  106)
* PYTHONLEGACYWINDOWSFSENCODING <1>:     Novas descontinuações<2>.
                                                             (line  135)
* PYTHONLEGACYWINDOWSFSENCODING <2>:     Remoção pendente no Python 3 16<3>.
                                                             (line  106)
* PYTHONLEGACYWINDOWSFSENCODING <3>:     Remoção pendente no Python 3 16<5>.
                                                             (line  106)
* PYTHONLEGACYWINDOWSFSENCODING <4>:     PEP 529 Change Windows filesystem encoding to UTF-8.
                                                             (line   18)
* PYTHONLEGACYWINDOWSFSENCODING <5>:     Windows<16>.        (line   40)
* PYTHONLEGACYWINDOWSFSENCODING <6>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 2034)
* PYTHONLEGACYWINDOWSFSENCODING <7>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 2045)
* PYTHONLEGACYWINDOWSFSENCODING <8>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 2051)
* PYTHONLEGACYWINDOWSFSENCODING <9>:     Variáveis de configuração global.
                                                             (line  161)
* PYTHONLEGACYWINDOWSFSENCODING <10>:    PyPreConfig.        (line  131)
* PYTHONLEGACYWINDOWSFSENCODING <11>:    Remoção pendente no Python 3 16<7>.
                                                             (line  106)
* PYTHONLEGACYWINDOWSSTDIO:              PEP 528 Change Windows console encoding to UTF-8.
                                                             (line   12)
* PYTHONLEGACYWINDOWSSTDIO <1>:          Variáveis de ambiente.
                                                             (line  199)
* PYTHONLEGACYWINDOWSSTDIO <2>:          sys — Parâmetros e funções específicas do sistema.
                                                             (line 2100)
* PYTHONLEGACYWINDOWSSTDIO <3>:          Variáveis de configuração global.
                                                             (line  181)
* PYTHONLEGACYWINDOWSSTDIO <4>:          PyConfig.           (line  560)
* PYTHONMALLOC:                          PYTHONMALLOC environment variable.
                                                             (line    6)
* PYTHONMALLOC <1>:                      Alterações na API C<15>.
                                                             (line    9)
* PYTHONMALLOC <2>:                      Núcleo e embutidos<85>.
                                                             (line   90)
* PYTHONMALLOC <3>:                      Variáveis de ambiente.
                                                             (line  346)
* PYTHONMALLOC <4>:                      Opções de desempenho.
                                                             (line  126)
* PYTHONMALLOC <5>:                      Opções de desempenho.
                                                             (line  133)
* 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<85>.
                                                             (line   96)
* PYTHONMALLOCSTATS <1>:                 PyConfig.           (line  577)
* 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  364)
* 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  962)
* PYTHONOPTIMIZE:                        Opções diversas.    (line   91)
* PYTHONOPTIMIZE <1>:                    Variáveis de configuração global.
                                                             (line  229)
* PYTHONOPTIMIZE <2>:                    PyConfig.           (line  644)
* 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>:                        Encontrando módulos.
                                                             (line   15)
* PYTHONPATH <10>:                       Encontrando módulos.
                                                             (line   40)
* PYTHONPATH <11>:                       Encontrando módulos.
                                                             (line   85)
* PYTHONPATH <12>:                       Adicionando Python a um projeto iOS.
                                                             (line   96)
* PYTHONPATH <13>:                       Adicionando Python a um projeto iOS.
                                                             (line  125)
* PYTHONPATH <14>:                       Adicionando Python a um projeto iOS.
                                                             (line  130)
* PYTHONPATH <15>:                       Localizadores de entrada de caminho.
                                                             (line    6)
* PYTHONPATH <16>:                       Localizadores de entrada de caminho.
                                                             (line   26)
* PYTHONPATH <17>:                       test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* PYTHONPATH <18>:                       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1500)
* PYTHONPATH <19>:                       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1505)
* PYTHONPATH <20>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   16)
* PYTHONPATH <21>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   21)
* PYTHONPATH <22>:                       Incorporando Python<2>.
                                                             (line   40)
* PYTHONPATH <23>:                       Incorporando Python<2>.
                                                             (line   45)
* PYTHONPATH <24>:                       Variáveis de configuração global.
                                                             (line   98)
* PYTHONPATH <25>:                       PyConfig.           (line  610)
* PYTHONPERFSUPPORT:                     Outras mudanças na linguagem<2>.
                                                             (line   89)
* PYTHONPERFSUPPORT <1>:                 Opções diversas.    (line  386)
* PYTHONPERFSUPPORT <2>:                 PyConfig.           (line  905)
* PYTHONPERFSUPPORT <3>:                 Como habilitar o suporte a perfilação com perf.
                                                             (line    7)
* PYTHONPLATLIBDIR:                      Núcleo e embutidos<46>.
                                                             (line  274)
* PYTHONPLATLIBDIR <1>:                  A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   56)
* PYTHONPLATLIBDIR <2>:                  PyConfig.           (line  589)
* PYTHONPROFILEIMPORTTIME:               Outras mudanças na linguagem<7>.
                                                             (line   48)
* PYTHONPROFILEIMPORTTIME <1>:           Núcleo e embutidos<67>.
                                                             (line   66)
* PYTHONPROFILEIMPORTTIME <2>:           Opções diversas.    (line  321)
* PYTHONPROFILEIMPORTTIME <3>:           PyConfig.           (line  459)
* PYTHONPYCACHEPREFIX:                   Cache do sistema de arquivos paralelo para arquivos de bytecode compilados.
                                                             (line    6)
* PYTHONPYCACHEPREFIX <1>:               Núcleo e embutidos<58>.
                                                             (line  402)
* PYTHONPYCACHEPREFIX <2>:               Opções diversas.    (line  345)
* PYTHONPYCACHEPREFIX <3>:               sys — Parâmetros e funções específicas do sistema.
                                                             (line  403)
* PYTHONPYCACHEPREFIX <4>:               PyConfig.           (line  751)
* PYTHONREGRTEST_UNICODE_GUARD:          Testes<27>.         (line   13)
* PYTHONSAFEPATH:                        Resumo – Destaques da versão<4>.
                                                             (line   28)
* PYTHONSAFEPATH <1>:                    Outras mudanças na linguagem<3>.
                                                             (line   41)
* PYTHONSAFEPATH <2>:                    Segurança<26>.      (line    6)
* PYTHONSAFEPATH <3>:                    Opções diversas.    (line  123)
* PYTHONSAFEPATH <4>:                    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1519)
* PYTHONSAFEPATH <5>:                    Considerações de segurança<4>.
                                                             (line   47)
* PYTHONSAFEPATH <6>:                    PyConfig.           (line  166)
* PYTHONSTARTUP:                         Console interativo padrão.
                                                             (line   17)
* PYTHONSTARTUP <1>:                     sys<12>.            (line   17)
* PYTHONSTARTUP <2>:                     sys<12>.            (line   21)
* PYTHONSTARTUP <3>:                     Núcleo e embutidos<2>.
                                                             (line   42)
* PYTHONSTARTUP <4>:                     IDLE<36>.           (line  176)
* PYTHONSTARTUP <5>:                     IDLE<40>.           (line    9)
* PYTHONSTARTUP <6>:                     IDLE<46>.           (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  120)
* PYTHONSTARTUP <10>:                    Exemplo.            (line   10)
* PYTHONSTARTUP <11>:                    asyncio — E/S assíncrona.
                                                             (line   88)
* PYTHONSTARTUP <12>:                    Startup and Code Execution.
                                                             (line    7)
* PYTHONSTARTUP <13>:                    Uso na linha de comando<6>.
                                                             (line   42)
* PYTHONSTARTUP <14>:                    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1275)
* 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  891)
* PYTHONTZPATH:                          Exceptions and warnings.
                                                             (line   14)
* PYTHONUNBUFFERED:                      Núcleo e embutidos<51>.
                                                             (line  107)
* PYTHONUNBUFFERED <1>:                  Opções diversas.    (line  187)
* PYTHONUNBUFFERED <2>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 2108)
* PYTHONUNBUFFERED <3>:                  Variáveis de configuração global.
                                                             (line  258)
* PYTHONUNBUFFERED <4>:                  PyConfig.           (line  213)
* PYTHONUOPS:                            Núcleo e embutidos<22>.
                                                             (line   29)
* PYTHONUOPS <1>:                        Núcleo e embutidos<22>.
                                                             (line  188)
* PYTHONUOPS <2>:                        Núcleo e embutidos<22>.
                                                             (line  270)
* PYTHONUOPS <3>:                        Núcleo e embutidos<22>.
                                                             (line  333)
* PYTHONUOPS <4>:                        Núcleo e embutidos<22>.
                                                             (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  339)
* PYTHONUTF8 <2>:                        Variáveis de ambiente.
                                                             (line  435)
* 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 2099)
* 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  979)
* PYTHONWARNDEFAULTENCODING:             EncodingWarning opcional e opção encoding="locale".
                                                             (line   21)
* PYTHONWARNDEFAULTENCODING <1>:         Biblioteca<41>.     (line   45)
* PYTHONWARNDEFAULTENCODING <2>:         Opções diversas.    (line  352)
* PYTHONWARNDEFAULTENCODING <3>:         Ativar EncodingWarning.
                                                             (line   10)
* PYTHONWARNINGS:                        avisos.             (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<25>.   (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   51)
* PYTHONWARNINGS <8>:                    O filtro de avisos. (line   62)
* PYTHONWARNINGS <9>:                    Descrevendo filtros de aviso.
                                                             (line    7)
* PYTHONWARNINGS <10>:                   Descrevendo filtros de aviso.
                                                             (line   20)
* PYTHONWARNINGS <11>:                   Filtro de avisos padrão.
                                                             (line    7)
* PYTHONWARNINGS <12>:                   PyConfig.           (line  998)
* 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_get_key_value (C function):   Thread Local Storage TLS API.
                                                             (line   27)
* PyThread_ReInitTLS (C function):       Thread Local Storage TLS API.
                                                             (line   33)
* PyThread_set_key_value (C function):   Thread Local Storage TLS API.
                                                             (line   24)
* 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)
* PyThreadState (C type):                Estado de thread e a trava global do interpretador.
                                                             (line   26)
* PyThreadState (C type) <1>:            High-level API.     (line   25)
* PyThreadState_Clear (C function):      Low-level API.      (line   43)
* PyThreadState_Delete (C function):     Low-level API.      (line   55)
* PyThreadState_DeleteCurrent (C function): Low-level API.   (line   61)
* PyThreadState_EnterTracing (C function): Low-level API.    (line  102)
* PyThreadState_Get (C function):        High-level API.     (line   73)
* PyThreadState_GetDict (C function):    Low-level API.      (line  192)
* PyThreadState_GetFrame (C function):   Low-level API.      (line   70)
* PyThreadState_GetID (C function):      Low-level API.      (line   84)
* PyThreadState_GetInterpreter (C function): Low-level API.  (line   93)
* PyThreadState_GetUnchecked (C function): High-level API.   (line   82)
* PyThreadState_LeaveTracing (C function): Low-level API.    (line  111)
* PyThreadState_New (C function):        Low-level API.      (line   37)
* PyThreadState_Next (C function):       Advanced Debugger Support.
                                                             (line   30)
* PyThreadState_SetAsyncExc (C function): Low-level API.     (line  202)
* PyThreadState_Swap (C function):       High-level API.     (line   91)
* 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   98)
* PyTime_CheckExact (C function):        Objetos DateTime<2>.
                                                             (line  104)
* PyTime_FromTime (C function):          Objetos DateTime<2>.
                                                             (line  154)
* PyTime_FromTimeAndFold (C function):   Objetos DateTime<2>.
                                                             (line  160)
* PyTime_MAX (C var):                    Tipos<3>.           (line   24)
* PyTime_MIN (C var):                    Tipos<3>.           (line   20)
* PyTime_Monotonic (C function):         Funções de relógio. (line   23)
* PyTime_MonotonicRaw (C function):      Funções de relógio brutas.
                                                             (line   18)
* PyTime_PerfCounter (C function):       Funções de relógio. (line   28)
* PyTime_PerfCounterRaw (C function):    Funções de relógio brutas.
                                                             (line   24)
* PyTime_t (C type):                     Tipos<3>.           (line    6)
* PyTime_Time (C function):              Funções de relógio. (line   33)
* PyTime_TimeRaw (C function):           Funções de relógio brutas.
                                                             (line   30)
* PyTimeZone_FromOffset (C function):    Objetos DateTime<2>.
                                                             (line  177)
* PyTimeZone_FromOffsetAndName (C function): Objetos DateTime<2>.
                                                             (line  185)
* 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)
* 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)
* 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_Freeze (C function):            Creating Heap-Allocated Types.
                                                             (line  113)
* PyType_FromMetaclass (C function):     Creating Heap-Allocated Types.
                                                             (line    9)
* PyType_FromModuleAndSpec (C function): Creating Heap-Allocated Types.
                                                             (line   55)
* PyType_FromSpec (C function):          Creating Heap-Allocated Types.
                                                             (line   96)
* PyType_FromSpecWithBases (C function): Creating Heap-Allocated Types.
                                                             (line   77)
* PyType_GenericAlloc (C function):      Objetos tipo<2>.    (line  139)
* PyType_GenericNew (C function):        Objetos tipo<2>.    (line  161)
* PyType_GetBaseByToken (C function):    Objetos tipo<2>.    (line  290)
* 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  200)
* PyType_GetModule (C function):         Objetos tipo<2>.    (line  234)
* PyType_GetModuleByDef (C function):    Objetos tipo<2>.    (line  268)
* PyType_GetModuleName (C function):     Objetos tipo<2>.    (line  210)
* PyType_GetModuleState (C function):    Objetos tipo<2>.    (line  254)
* PyType_GetName (C function):           Objetos tipo<2>.    (line  184)
* PyType_GetQualName (C function):       Objetos tipo<2>.    (line  191)
* PyType_GetSlot (C function):           Objetos tipo<2>.    (line  218)
* PyType_GetTypeDataSize (C function):   Protocolo de objeto.
                                                             (line  555)
* PyType_HasFeature (C function):        Objetos tipo<2>.    (line  119)
* PyType_IS_GC (C function):             Objetos tipo<2>.    (line  125)
* PyType_IsSubtype (C function):         Objetos tipo<2>.    (line  130)
* PyType_Modified (C function):          Objetos tipo<2>.    (line   61)
* PyType_Ready (C function):             Objetos tipo<2>.    (line  168)
* PyType_Slot (C type):                  Creating Heap-Allocated Types.
                                                             (line  195)
* PyType_Slot.pfunc (C member):          Creating Heap-Allocated Types.
                                                             (line  262)
* PyType_Slot.slot (C member):           Creating Heap-Allocated Types.
                                                             (line  200)
* PyType_Spec (C type):                  Creating Heap-Allocated Types.
                                                             (line  128)
* PyType_Spec.basicsize (C member):      Creating Heap-Allocated Types.
                                                             (line  137)
* PyType_Spec.flags (C member):          Creating Heap-Allocated Types.
                                                             (line  181)
* PyType_Spec.itemsize (C member):       Creating Heap-Allocated Types.
                                                             (line  155)
* PyType_Spec.name (C member):           Creating Heap-Allocated Types.
                                                             (line  132)
* PyType_Spec.slots (C member):          Creating Heap-Allocated Types.
                                                             (line  188)
* PyType_Type (C var):                   Objetos tipo<2>.    (line   10)
* PyType_Watch (C function):             Objetos tipo<2>.    (line   92)
* PyType_WatchCallback (C type):         Objetos tipo<2>.    (line  108)
* PyTypeObject (C type):                 Objetos tipo<2>.    (line    6)
* PyTypeObject.tp_alloc (C member):      PyTypeObject Slots. (line 1573)
* PyTypeObject.tp_as_async (C member):   PyTypeObject Slots. (line  357)
* PyTypeObject.tp_as_buffer (C member):  PyTypeObject Slots. (line  571)
* PyTypeObject.tp_as_mapping (C member): PyTypeObject Slots. (line  423)
* PyTypeObject.tp_as_number (C member):  PyTypeObject Slots. (line  399)
* PyTypeObject.tp_as_sequence (C member): PyTypeObject Slots.
                                                             (line  411)
* PyTypeObject.tp_base (C member):       PyTypeObject Slots. (line 1396)
* PyTypeObject.tp_bases (C member):      PyTypeObject Slots. (line 1692)
* PyTypeObject.tp_basicsize (C member):  PyTypeObject Slots. (line   48)
* PyTypeObject.tp_cache (C member):      PyTypeObject Slots. (line 1726)
* PyTypeObject.tp_call (C member):       PyTypeObject Slots. (line  477)
* PyTypeObject.tp_clear (C member):      PyTypeObject Slots. (line 1039)
* PyTypeObject.tp_dealloc (C member):    PyTypeObject Slots. (line  134)
* PyTypeObject.tp_del (C member):        PyTypeObject Slots. (line 1765)
* PyTypeObject.tp_descr_get (C member):  PyTypeObject Slots. (line 1464)
* PyTypeObject.tp_descr_set (C member):  PyTypeObject Slots. (line 1477)
* PyTypeObject.tp_dict (C member):       PyTypeObject Slots. (line 1428)
* PyTypeObject.tp_dictoffset (C member): PyTypeObject Slots. (line 1493)
* PyTypeObject.tp_doc (C member):        PyTypeObject Slots. (line  932)
* PyTypeObject.tp_finalize (C member):   PyTypeObject Slots. (line 1777)
* PyTypeObject.tp_flags (C member):      PyTypeObject Slots. (line  583)
* PyTypeObject.tp_free (C member):       PyTypeObject Slots. (line 1634)
* PyTypeObject.tp_getattr (C member):    PyTypeObject Slots. (line  316)
* PyTypeObject.tp_getattro (C member):   PyTypeObject Slots. (line  515)
* PyTypeObject.tp_getset (C member):     PyTypeObject Slots. (line 1380)
* PyTypeObject.tp_hash (C member):       PyTypeObject Slots. (line  435)
* PyTypeObject.tp_init (C member):       PyTypeObject Slots. (line 1537)
* PyTypeObject.tp_is_gc (C member):      PyTypeObject Slots. (line 1663)
* PyTypeObject.tp_itemsize (C member):   PyTypeObject Slots. (line   48)
* PyTypeObject.tp_iter (C member):       PyTypeObject Slots. (line 1309)
* PyTypeObject.tp_iternext (C member):   PyTypeObject Slots. (line 1325)
* PyTypeObject.tp_members (C member):    PyTypeObject Slots. (line 1364)
* PyTypeObject.tp_methods (C member):    PyTypeObject Slots. (line 1348)
* PyTypeObject.tp_mro (C member):        PyTypeObject Slots. (line 1712)
* PyTypeObject.tp_name (C member):       PyTypeObject Slots. (line   12)
* PyTypeObject.tp_new (C member):        PyTypeObject Slots. (line 1595)
* PyTypeObject.tp_repr (C member):       PyTypeObject Slots. (line  373)
* PyTypeObject.tp_richcompare (C member): PyTypeObject Slots.
                                                             (line 1196)
* PyTypeObject.tp_setattr (C member):    PyTypeObject Slots. (line  336)
* PyTypeObject.tp_setattro (C member):   PyTypeObject Slots. (line  542)
* PyTypeObject.tp_str (C member):        PyTypeObject Slots. (line  489)
* PyTypeObject.tp_subclasses (C member): PyTypeObject Slots. (line 1734)
* PyTypeObject.tp_traverse (C member):   PyTypeObject Slots. (line  942)
* PyTypeObject.tp_vectorcall (C member): PyTypeObject Slots. (line 1944)
* PyTypeObject.tp_vectorcall_offset (C member): PyTypeObject Slots.
                                                             (line  276)
* PyTypeObject.tp_version_tag (C member): PyTypeObject Slots.
                                                             (line 1769)
* PyTypeObject.tp_watched (C member):    PyTypeObject Slots. (line 1984)
* PyTypeObject.tp_weaklist (C member):   PyTypeObject Slots. (line 1750)
* PyTypeObject.tp_weaklistoffset (C member): PyTypeObject Slots.
                                                             (line 1273)
* PyTZInfo_Check (C function):           Objetos DateTime<2>.
                                                             (line  120)
* PyTZInfo_CheckExact (C function):      Objetos DateTime<2>.
                                                             (line  126)
* PyUnicode_1BYTE_DATA (C function):     Tipo Unicode.       (line   63)
* PyUnicode_1BYTE_KIND (C macro):        Tipo Unicode.       (line   78)
* PyUnicode_2BYTE_DATA (C function):     Tipo Unicode.       (line   63)
* PyUnicode_2BYTE_KIND (C macro):        Tipo Unicode.       (line   78)
* PyUnicode_4BYTE_DATA (C function):     Tipo Unicode.       (line   63)
* PyUnicode_4BYTE_KIND (C macro):        Tipo Unicode.       (line   78)
* PyUnicode_Append (C function):         Creating and accessing Unicode strings.
                                                             (line  317)
* PyUnicode_AppendAndDel (C function):   Creating and accessing Unicode strings.
                                                             (line  327)
* PyUnicode_AsASCIIString (C function):  ASCII Codecs.       (line   16)
* PyUnicode_AsCharmapString (C function): Character Map Codecs.
                                                             (line   31)
* PyUnicode_AsEncodedString (C function): Generic Codecs.    (line   27)
* 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  447)
* PyUnicode_AsUCS4Copy (C function):     Creating and accessing Unicode strings.
                                                             (line  457)
* 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  333)
* PyUnicode_Check (C function):          Tipo Unicode.       (line   44)
* PyUnicode_CHECK_INTERNED (C function): Methods and Slot Functions.
                                                             (line  277)
* PyUnicode_CheckExact (C function):     Tipo Unicode.       (line   49)
* PyUnicode_Compare (C function):        Methods and Slot Functions.
                                                             (line  132)
* PyUnicode_CompareWithASCIIString (C function): Methods and Slot Functions.
                                                             (line  191)
* PyUnicode_Concat (C function):         Methods and Slot Functions.
                                                             (line   12)
* PyUnicode_Contains (C function):       Methods and Slot Functions.
                                                             (line  225)
* PyUnicode_CopyCharacters (C function): Creating and accessing Unicode strings.
                                                             (line  362)
* PyUnicode_Count (C function):          Methods and Slot Functions.
                                                             (line  118)
* PyUnicode_DATA (C function):           Tipo Unicode.       (line   97)
* PyUnicode_Decode (C function):         Generic Codecs.     (line   17)
* 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_Equal (C function):          Methods and Slot Functions.
                                                             (line  145)
* PyUnicode_EqualToUTF8 (C function):    Methods and Slot Functions.
                                                             (line  182)
* PyUnicode_EqualToUTF8AndSize (C function): Methods and Slot Functions.
                                                             (line  169)
* PyUnicode_Fill (C function):           Creating and accessing Unicode strings.
                                                             (line  392)
* 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  219)
* PyUnicode_FromEncodedObject (C function): Creating and accessing Unicode strings.
                                                             (line  300)
* PyUnicode_FromFormat (C function):     Creating and accessing Unicode strings.
                                                             (line   83)
* PyUnicode_FromFormatV (C function):    Creating and accessing Unicode strings.
                                                             (line  276)
* PyUnicode_FromKindAndData (C function): Creating and accessing Unicode strings.
                                                             (line   43)
* PyUnicode_FromObject (C function):     Creating and accessing Unicode strings.
                                                             (line  282)
* PyUnicode_FromOrdinal (C function):    Creating and accessing Unicode strings.
                                                             (line  292)
* PyUnicode_FromString (C function):     Creating and accessing Unicode strings.
                                                             (line   77)
* PyUnicode_FromStringAndSize (C function): Creating and accessing Unicode strings.
                                                             (line   60)
* 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   54)
* PyUnicode_GetDefaultEncoding (C function): Creating and accessing Unicode strings.
                                                             (line  345)
* PyUnicode_GetLength (C function):      Creating and accessing Unicode strings.
                                                             (line  353)
* PyUnicode_InternFromString (C function): Methods and Slot Functions.
                                                             (line  259)
* PyUnicode_InternInPlace (C function):  Methods and Slot Functions.
                                                             (line  233)
* PyUnicode_IS_ASCII (C function):       Tipo Unicode.       (line  159)
* PyUnicode_IS_READY (C function):       Deprecated API.     (line   31)
* PyUnicode_IsIdentifier (C function):   Tipo Unicode.       (line  150)
* PyUnicode_Join (C function):           Methods and Slot Functions.
                                                             (line   77)
* PyUnicode_KIND (C function):           Tipo Unicode.       (line   88)
* PyUnicode_MAX_CHAR_VALUE (C function): Tipo Unicode.       (line  140)
* 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  122)
* PyUnicode_READ_CHAR (C function):      Tipo Unicode.       (line  131)
* PyUnicode_ReadChar (C function):       Creating and accessing Unicode strings.
                                                             (line  425)
* PyUnicode_READY (C function):          Deprecated API.     (line   20)
* PyUnicode_Replace (C function):        Methods and Slot Functions.
                                                             (line  124)
* PyUnicode_Resize (C function):         Creating and accessing Unicode strings.
                                                             (line  376)
* PyUnicode_RichCompare (C function):    Methods and Slot Functions.
                                                             (line  201)
* 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  437)
* 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    9)
* PyUnicode_WRITE (C function):          Tipo Unicode.       (line  105)
* PyUnicode_WriteChar (C function):      Creating and accessing Unicode strings.
                                                             (line  409)
* 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   66)
* PyUnicodeDecodeError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeDecodeError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   96)
* PyUnicodeDecodeError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeDecodeError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   81)
* PyUnicodeDecodeError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line  105)
* PyUnicodeDecodeError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   52)
* PyUnicodeEncodeError_GetEncoding (C function): Objetos de exceção Unicode.
                                                             (line   17)
* PyUnicodeEncodeError_GetEnd (C function): Objetos de exceção Unicode.
                                                             (line   66)
* PyUnicodeEncodeError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeEncodeError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   96)
* PyUnicodeEncodeError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeEncodeError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   81)
* PyUnicodeEncodeError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line  105)
* PyUnicodeEncodeError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   52)
* PyUnicodeIter_Type (C var):            Tipo Unicode.       (line   14)
* PyUnicodeObject (C type):              Tipo Unicode.       (line   29)
* PyUnicodeTranslateError_GetEnd (C function): Objetos de exceção Unicode.
                                                             (line   66)
* PyUnicodeTranslateError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeTranslateError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   96)
* PyUnicodeTranslateError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeTranslateError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   81)
* PyUnicodeTranslateError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line  105)
* PyUnicodeTranslateError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   52)
* PyUnicodeWriter (C type):              PyUnicodeWriter.    (line   11)
* PyUnicodeWriter_Create (C function):   PyUnicodeWriter.    (line   18)
* PyUnicodeWriter_DecodeUTF8Stateful (C function): PyUnicodeWriter.
                                                             (line  147)
* PyUnicodeWriter_Discard (C function):  PyUnicodeWriter.    (line   40)
* PyUnicodeWriter_Finish (C function):   PyUnicodeWriter.    (line   30)
* PyUnicodeWriter_Format (C function):   PyUnicodeWriter.    (line  138)
* PyUnicodeWriter_WriteASCII (C function): PyUnicodeWriter.  (line   71)
* PyUnicodeWriter_WriteChar (C function): PyUnicodeWriter.   (line   49)
* PyUnicodeWriter_WriteRepr (C function): PyUnicodeWriter.   (line  117)
* PyUnicodeWriter_WriteStr (C function): PyUnicodeWriter.    (line  108)
* PyUnicodeWriter_WriteSubstring (C function): PyUnicodeWriter.
                                                             (line  126)
* PyUnicodeWriter_WriteUCS4 (C function): PyUnicodeWriter.   (line   98)
* PyUnicodeWriter_WriteUTF8 (C function): PyUnicodeWriter.   (line   57)
* PyUnicodeWriter_WriteWideChar (C function): PyUnicodeWriter.
                                                             (line   87)
* PyUnstable:                            API C Instável.     (line    6)
* PyUnstable_AtExit (C function):        Inicializando e encerrando o interpretador.
                                                             (line  222)
* 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_EnableTryIncRef (C function): Protocolo de objeto.
                                                             (line  748)
* PyUnstable_Eval_RequestCodeExtraIndex (C function): Informação adicional.
                                                             (line   14)
* PyUnstable_Exc_PrepReraiseStar (C function): Objeto Exceção.
                                                             (line   59)
* 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_IsImmortal (C function):    Protocolo de objeto.
                                                             (line  664)
* PyUnstable_Long_CompactValue (C function): Objetos Inteiros.
                                                             (line  626)
* PyUnstable_Long_IsCompact (C function): Objetos Inteiros.  (line  608)
* PyUnstable_Module_SetGIL (C function): Support functions.  (line  187)
* PyUnstable_Object_ClearWeakRefsNoCallbacks (C function): Objetos referência fraca<2>.
                                                             (line  108)
* PyUnstable_Object_EnableDeferredRefcount (C function): Protocolo de objeto.
                                                             (line  602)
* PyUnstable_Object_GC_NewWithExtraData (C function): Suporte a Coleta Cíclica de Lixo.
                                                             (line  110)
* PyUnstable_Object_IsUniquelyReferenced (C function): Protocolo de objeto.
                                                             (line  757)
* PyUnstable_Object_IsUniqueReferencedTemporary (C function): Protocolo de objeto.
                                                             (line  631)
* 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_TryIncRef (C function):     Protocolo de objeto.
                                                             (line  675)
* PyUnstable_Type_AssignVersionTag (C function): Objetos tipo<2>.
                                                             (line  311)
* PyUnstable_WritePerfMapEntry (C function): Suporte a Mapas do Perf.
                                                             (line   36)
* PyVarObject (C type):                  Base object types and macros.
                                                             (line   42)
* PyVarObject_HEAD_INIT (C macro):       Base object types and macros.
                                                             (line  179)
* PyVarObject.ob_size (C member):        Base object types and macros.
                                                             (line   52)
* 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   22)
* PyWeakref_CheckRef (C function):       Objetos referência fraca<2>.
                                                             (line   17)
* PyWeakref_GET_OBJECT (C function):     Objetos referência fraca<2>.
                                                             (line   85)
* PyWeakref_GetObject (C function):      Objetos referência fraca<2>.
                                                             (line   70)
* PyWeakref_GetRef (C function):         Objetos referência fraca<2>.
                                                             (line   55)
* PyWeakref_IsDead (C function):         Objetos referência fraca<2>.
                                                             (line   92)
* PyWeakref_NewProxy (C function):       Objetos referência fraca<2>.
                                                             (line   41)
* PyWeakref_NewRef (C function):         Objetos referência fraca<2>.
                                                             (line   27)
* 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   43)
* PyZipFile (classe em zipfile):         Objetos PyZipFile.  (line    9)
* qiflush() (no módulo curses):          Funções<6>.         (line  414)
* 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  112)
* 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  510)
* quantize() (método decimal.Decimal):   Objetos de Decimal. (line  500)
* QueryInfoKey() (no módulo winreg):     Funções<14>.        (line  324)
* QueryReflectionKey() (no módulo winreg): Funções<14>.      (line  527)
* QueryValue() (no módulo winreg):       Funções<14>.        (line  354)
* QueryValueEx() (no módulo winreg):     Funções<14>.        (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 concurrent.interpreters): Communicating Between Interpreters.
                                                             (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  199)
* QueueEmpty:                            Exceções<15>.       (line    6)
* QueueEmptyError:                       Communicating Between Interpreters.
                                                             (line   22)
* QueueFull:                             Exceções<15>.       (line   11)
* QueueFullError:                        Communicating Between Interpreters.
                                                             (line   28)
* QueueHandler (classe em logging.handlers): QueueHandler.   (line   21)
* QueueListener (classe em logging.handlers): QueueListener. (line   25)
* QueueShutDown:                         Exceções<15>.       (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  594)
* quit (pdb command):                    Comandos de depuração.
                                                             (line  465)
* 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 (bdb.Bdb attribute):          bdb — Framework do depurador.
                                                             (line  364)
* 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 bytes.  (line   21)
* r";literal de string bruta:            Literais de bytes.  (line   20)
* 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  729)
* radix() (método decimal.Context):      Objetos de contexto.
                                                             (line  515)
* radix() (método decimal.Decimal):      Objetos de Decimal. (line  529)
* RADIXCHAR (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  270)
* Raise (classe em ast):                 Instruções.         (line  112)
* RAISE (monitoring event):              Eventos.            (line   82)
* 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  335)
* RAISE_VARARGS (opcode):                Instruções em bytecode do Python.
                                                             (line 1072)
* 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  344)
* 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  353)
* raw() (no módulo curses):              Funções<6>.         (line  421)
* 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  269)
* 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  575)
* read_bytes() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  154)
* 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  123)
* READ_RESTRICTED (macro C):             Member flags.       (line   32)
* 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  579)
* read_text() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  158)
* 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   94)
* 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  281)
* read() (método io.BufferedIOBase):     I/O Base Classes.   (line  273)
* read() (método io.BufferedReader):     Buffered Streams.   (line   84)
* read() (método io.RawIOBase):          I/O Base Classes.   (line  184)
* read() (método io.Reader):             Static Typing.      (line   18)
* read() (método io.TextIOBase):         E/S de texto<2>.    (line   52)
* read() (método mimetypes.MimeTypes):   Objetos MimeTypes.  (line   77)
* 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  262)
* 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   89)
* read1() (método io.BytesIO):           Buffered Streams.   (line   44)
* 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  261)
* Reader (classe em io):                 Static Typing.      (line   10)
* reader() (no módulo csv):              Conteúdo do módulo<3>.
                                                             (line    8)
* ReadError:                             tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  254)
* readexactly() (método asyncio.StreamReader): StreamReader. (line   46)
* readfp() (método mimetypes.MimeTypes): Objetos MimeTypes.  (line   85)
* 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)
* readinto() (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  776)
* readinto1() (método io.BufferedIOBase): I/O Base Classes.  (line  322)
* readinto1() (método io.BytesIO):       Buffered Streams.   (line   51)
* 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  286)
* 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  707)
* 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  454)
* READONLY (macro C):                    Member flags.       (line   37)
* ReadOnly (no módulo typing):           Formas especiais.   (line  283)
* 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  949)
* ready() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  213)
* 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  176)
* 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  388)
* 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  626)
* 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<19>.       (line   27)
* reason (atributo UnicodeError):        Exceções concretas. (line  463)
* 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  291)
* reconfigure() (método io.TextIOWrapper): E/S de texto<2>.  (line  186)
* record_original_stdout() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  334)
* RECORDS (atributo inspect.BufferFlags): Buffer flags.      (line   41)
* records (atributo unittest.TestCase):  Casos de teste.     (line  467)
* 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  255)
* 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  385)
* recv() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   25)
* recv() (método socket.socket):         Socket Objects.     (line  232)
* recvfrom_into() (método socket.socket): Socket Objects.    (line  375)
* recvfrom() (método socket.socket):     Socket Objects.     (line  246)
* recvmsg_into() (método socket.socket): Socket Objects.     (line  336)
* recvmsg() (método socket.socket):      Socket Objects.     (line  264)
* 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  471)
* redrawwin() (método curses.window):    Window Objects.     (line  477)
* reduce() (no módulo functools):        functools — Higher-order functions and operations on callable objects.
                                                             (line  446)
* reducer_override() (método pickle.Pickler): Interface do módulo.
                                                             (line  218)
* 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  576)
* ReferenceError:                        Exceções concretas. (line  264)
* ReferenceType (no módulo weakref):     weakref — Referências fracas.
                                                             (line  344)
* referência emprestada:                 Glossário.          (line  213)
* referência forte:                      Glossário.          (line 1574)
* refold_source (atributo email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  388)
* refresh() (método curses.window):      Window Objects.     (line  482)
* 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   98)
* register_at_fork() (no módulo os):     Gerenciamento de processo.
                                                             (line  586)
* register_callback() (no módulo sys.monitoring): Registro de funções de retorno de chamada.
                                                             (line    6)
* 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  175)
* 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 — Higher-order functions and operations on callable objects.
                                                             (line  496)
* register() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   93)
* register() (método select.devpoll):    /dev/poll Polling Objects.
                                                             (line   30)
* register() (método select.epoll):      Edge and Level Trigger Polling epoll Objects.
                                                             (line   87)
* 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):     webbrowser — Controlador de navegador web conveniente.
                                                             (line  122)
* 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  333)
* 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  321)
* release() (método _thread.lock):       _thread— API de segmentação de baixo nível.
                                                             (line  180)
* 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  255)
* release() (método multiprocessing.Lock): Primitivas de sincronização.
                                                             (line   96)
* release() (método multiprocessing.RLock): Primitivas de sincronização.
                                                             (line  161)
* release() (método pickle.PickleBuffer): Interface do módulo.
                                                             (line  361)
* release() (método threading.Condition): Condition objects. (line   91)
* release() (método threading.Lock):     Lock objects.       (line   76)
* 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_environ() (no módulo os):       Parâmetros de processo.
                                                             (line   80)
* reload() (no módulo importlib):        Funções<13>.        (line   57)
* relpath() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  447)
* remainder_near() (método decimal.Context): Objetos de contexto.
                                                             (line  526)
* remainder_near() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  535)
* remainder() (método decimal.Context):  Objetos de contexto.
                                                             (line  519)
* remainder() (no módulo math):          Arimética de ponto flutuante.
                                                             (line   68)
* remote_exec() (no módulo sys):         sys — Parâmetros e funções específicas do sistema.
                                                             (line 1995)
* RemoteDisconnected:                    http client — HTTP protocol client.
                                                             (line  188)
* remove_done_callback() (método asyncio.Future): Future Object.
                                                             (line  107)
* remove_done_callback() (método asyncio.Task): Objeto Task. (line  115)
* 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  328)
* 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  335)
* 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 frozenset):           Tipo conjuntos — set frozenset.
                                                             (line  209)
* remove() (método mailbox.Mailbox):     Mailbox objects.    (line   76)
* remove() (método mailbox.MH):          MH objects.         (line   79)
* remove() (método sequence):            Tipos sequências mutáveis.
                                                             (line  109)
* remove() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  171)
* remove() (no módulo os):               Arquivos e diretórios.
                                                             (line  745)
* 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  770)
* 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):           Métodos de string.  (line  445)
* 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):           Métodos de string.  (line  458)
* 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  296)
* rename() (método pathlib.Path):        Copiando movendo e excluindo.
                                                             (line   44)
* rename() (no módulo os):               Arquivos e diretórios.
                                                             (line  788)
* renames() (no módulo os):              Arquivos e diretórios.
                                                             (line  826)
* reopenIfNeeded() (método logging.handlers.WatchedFileHandler): WatchedFileHandler.
                                                             (line   41)
* reorganize() (método dbm.gnu.gdbm):    dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  118)
* 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 1469)
* 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  226)
* replace() (método datetime.datetime):  Objetos datetime.   (line  478)
* replace() (método datetime.time):      Objetos time.       (line  173)
* replace() (método inspect.Parameter):  Introspecting callables with the Signature object.
                                                             (line  321)
* replace() (método inspect.Signature):  Introspecting callables with the Signature object.
                                                             (line  146)
* replace() (método pathlib.Path):       Copiando movendo e excluindo.
                                                             (line   72)
* replace() (método str):                Métodos de string.  (line  471)
* 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  451)
* replace() (no módulo os):              Arquivos e diretórios.
                                                             (line  845)
* 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  232)
* 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  151)
* 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  133)
* Required (no módulo typing):           Formas especiais.   (line  264)
* requires_bz2() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  535)
* requires_docstrings() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  547)
* requires_freebsd_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  503)
* requires_gil_enabled() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  518)
* requires_gzip() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  531)
* requires_IEEE_754() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  523)
* requires_limited_api() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  551)
* requires_linux_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  508)
* requires_lzma() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  539)
* requires_mac_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  513)
* requires_resource() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  543)
* requires_zlib() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  527)
* 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  285)
* RERAISE (monitoring event):            Eventos.            (line   87)
* RERAISE (opcode):                      Instruções em bytecode do Python.
                                                             (line  450)
* 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 9562.
                                                             (line  320)
* RESERVED_MICROSOFT (no módulo uuid):   uuid — Objetos UUID conforme RFC 9562.
                                                             (line  316)
* RESERVED_NCS (no módulo uuid):         uuid — Objetos UUID conforme RFC 9562.
                                                             (line  306)
* 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  427)
* reset_shell_mode() (no módulo curses): Funções<6>.         (line  432)
* 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  186)
* 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): HTMLParser Methods.
                                                             (line   23)
* 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   59)
* resetty() (no módulo curses):          Funções<6>.         (line  437)
* resetwarnings() (no módulo warnings):  Funções disponíveis.
                                                             (line  128)
* resize_term() (no módulo curses):      Funções<6>.         (line  442)
* resize() (método bytearray):           Objetos Bytearray.  (line   78)
* resize() (método curses.window):       Window Objects.     (line  501)
* 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  233)
* resizemode() (no módulo turtle):       Aparência.          (line   26)
* resizeterm() (no módulo curses):       Funções<6>.         (line  452)
* resolution (atributo datetime.date):   Objetos date.       (line  141)
* 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  180)
* 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  496)
* 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  448)
* ResourceReader (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   12)
* ResourceWarning:                       Avisos.             (line   87)
* response() (método imaplib.IMAP4):     Objetos IMAP4.      (line  300)
* ResponseNotReady:                      http client — HTTP protocol client.
                                                             (line  174)
* responses (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  226)
* responses (no módulo http.client):     http client — HTTP protocol client.
                                                             (line  209)
* restart (pdb command):                 Comandos de depuração.
                                                             (line  452)
* restart_events() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  441)
* restart_events() (no módulo sys.monitoring): Desativação de eventos.
                                                             (line   21)
* restore() (método test.support.SaveSignals): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  818)
* restore() (no módulo difflib):         difflib — Helpers for computing deltas.
                                                             (line  271)
* RESTRICTED (macro C):                  Member flags.       (line   32)
* restrita;execução:                     Builtins e execução restrita.
                                                             (line    6)
* restype (atributo ctypes._CFuncPtr):   Foreign functions.  (line   32)
* result() (método asyncio.Future):      Future Object.      (line   33)
* result() (método asyncio.Task):        Objeto Task.        (line   76)
* 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 1277)
* 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)
* 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  254)
* return_annotation (atributo inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  125)
* RETURN_GENERATOR (opcode):             Instruções em bytecode do Python.
                                                             (line 1302)
* 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  416)
* 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  149)
* retval (pdb command):                  Comandos de depuração.
                                                             (line  485)
* 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   83)
* reverse_pointer (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  278)
* 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 9562.
                                                             (line  310)
* RFC; RFC 1123:                         Funções<5>.         (line  774)
* RFC; RFC 1123 <1>:                     Funções<5>.         (line  787)
* RFC; RFC 1123 <2>:                     Funções<5>.         (line  804)
* 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 1494:                         mimetypes.          (line   39)
* 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  191)
* RFC; RFC 1750:                         Random generation.  (line   34)
* RFC; RFC 1808:                         urllib<4>.          (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  185)
* RFC; RFC 1869:                         smtplib — SMTP protocol client.
                                                             (line   13)
* RFC; RFC 1869 <1>:                     smtplib — SMTP protocol client.
                                                             (line  193)
* 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.
                                                             (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<7>.           (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  398)
* RFC; RFC 2068:                         http cookies — HTTP state management.
                                                             (line   16)
* RFC; RFC 2104:                         hmac.               (line    6)
* RFC; RFC 2104 <1>:                     Módulos novos ou aprimorados<2>.
                                                             (line   35)
* RFC; RFC 2104 <2>:                     Núcleo e embutidos<9>.
                                                             (line   88)
* RFC; RFC 2104 <3>:                     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  109)
* RFC; RFC 2109 <6>:                     Objetos Morsel.     (line  121)
* 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 2177:                         imaplib.            (line    7)
* RFC; RFC 2177 <1>:                     Objetos IMAP4.      (line  129)
* 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<7>.      (line   71)
* RFC; RFC 2231 <1>:                     Biblioteca<17>.     (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<2>.
                                                             (line   94)
* RFC; RFC 2342 <1>:                     Objetos IMAP4.      (line  246)
* RFC; RFC 2361:                         mimetypes.          (line   57)
* RFC; RFC 2368:                         URL Quoting.        (line  181)
* RFC; RFC 2373:                         Objetos de endereço.
                                                             (line  101)
* RFC; RFC 2373 <1>:                     Objetos de endereço.
                                                             (line  167)
* RFC; RFC 2373 <2>:                     Objetos de endereço.
                                                             (line  188)
* RFC; RFC 2396:                         urllib parse<5>.    (line    6)
* RFC; RFC 2396 <1>:                     urllib<4>.          (line   24)
* RFC; RFC 2396 <2>:                     Análise de URL.     (line  276)
* RFC; RFC 2396 <3>:                     URL Quoting.        (line   25)
* RFC; RFC 2396 <4>:                     URL Quoting.        (line  176)
* RFC; RFC 2397:                         DataHandler Objects.
                                                             (line    9)
* RFC; RFC 2449:                         Objetos POP3.       (line   26)
* RFC; RFC 2487:                         Módulos novos ou aprimorados<2>.
                                                             (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>:                     urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   47)
* RFC; RFC 2616 <6>:                     Introdução<18>.     (line   34)
* RFC; RFC 2616 <7>:                     HTTPError.          (line   16)
* RFC; RFC 2616 <8>:                     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<5>.
                                                             (line   37)
* RFC; RFC 2640 <1>:                     Testes<44>.         (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  172)
* RFC; RFC 2774:                         códigos de status HTTP.
                                                             (line  194)
* RFC; RFC 2818:                         ssl<13>.            (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<2>.
                                                             (line   98)
* RFC; RFC 2822 <1>:                     Baterias incluídas. (line   17)
* RFC; RFC 2822 <2>:                     Funções<5>.         (line  776)
* RFC; RFC 2822 <3>:                     Funções<5>.         (line  789)
* RFC; RFC 2822 <4>:                     Funções<5>.         (line  478)
* RFC; RFC 2822 <5>:                     Funções<5>.         (line  806)
* RFC; RFC 2822 <6>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  277)
* RFC; RFC 2822 <7>:                     email header Internationalized headers.
                                                             (line   19)
* RFC; RFC 2822 <8>:                     email header Internationalized headers.
                                                             (line   22)
* RFC; RFC 2822 <9>:                     email header Internationalized headers.
                                                             (line   30)
* RFC; RFC 2822 <10>:                    email header Internationalized headers.
                                                             (line   87)
* RFC; RFC 2822 <11>:                    email header Internationalized headers.
                                                             (line  115)
* RFC; RFC 2822 <12>:                    email header Internationalized headers.
                                                             (line  133)
* RFC; RFC 2822 <13>:                    email utils Utilitários diversos.
                                                             (line   31)
* RFC; RFC 2822 <14>:                    email utils Utilitários diversos.
                                                             (line  114)
* RFC; RFC 2822 <15>:                    email utils Utilitários diversos.
                                                             (line  117)
* RFC; RFC 2822 <16>:                    email utils Utilitários diversos.
                                                             (line  246)
* RFC; RFC 2822 <17>:                    email utils Utilitários diversos.
                                                             (line  162)
* RFC; RFC 2822 <18>:                    Message objects.    (line   17)
* RFC; RFC 2822 <19>:                    http client — HTTP protocol client.
                                                             (line  114)
* RFC; RFC 2822 <20>:                    http server — HTTP servers.
                                                             (line  163)
* RFC; RFC 2964:                         http cookiejar — Cookie handling for HTTP clients.
                                                             (line  155)
* RFC; RFC 2965:                         urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  277)
* RFC; RFC 2965 <1>:                     urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  285)
* 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<30>.       (line   25)
* RFC; RFC 3056:                         Objetos de endereço.
                                                             (line  325)
* RFC; RFC 3164:                         Logging to syslog with RFC5424 support.
                                                             (line    7)
* RFC; RFC 3171:                         Objetos de endereço.
                                                             (line  101)
* RFC; RFC 3207:                         Módulos novos ou aprimorados.
                                                             (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  187)
* RFC; RFC 3339:                         Exibindo data/hora em mensagens.
                                                             (line   17)
* RFC; RFC 3362:                         mimetypes.          (line   41)
* RFC; RFC 3454:                         Segurança<24>.      (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<24>.      (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  409)
* RFC; RFC 3542:                         Biblioteca<59>.     (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<16>.     (line  348)
* RFC; RFC 3659:                         FTP objects.        (line  289)
* RFC; RFC 3745:                         mimetypes.          (line   43)
* RFC; RFC 3879:                         Objetos de endereço.
                                                             (line  182)
* RFC; RFC 3879 <1>:                     Objetos de endereço.
                                                             (line  304)
* RFC; RFC 3927:                         Objetos de endereço.
                                                             (line  193)
* RFC; RFC 3950:                         mimetypes.          (line   46)
* 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<4>.          (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>:                     Biblioteca<15>.     (line  201)
* RFC; RFC 3986 <8>:                     urllib parse — Analisa URLs para componentes.
                                                             (line   35)
* RFC; RFC 3986 <9>:                     Análise de URL.     (line  151)
* RFC; RFC 3986 <10>:                    Análise de URL.     (line  399)
* RFC; RFC 3986 <11>:                    Segurança ao analisar URLs.
                                                             (line   27)
* RFC; RFC 3986 <12>:                    URL Quoting.        (line   25)
* RFC; RFC 3986 <13>:                    URL Quoting.        (line  164)
* RFC; RFC 3986 <14>:                    http server — HTTP servers.
                                                             (line  148)
* RFC; RFC 4007:                         Objetos de endereço.
                                                             (line  245)
* RFC; RFC 4007 <1>:                     Objetos de endereço.
                                                             (line  317)
* RFC; RFC 4047:                         mimetypes.          (line   49)
* 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 9562.
                                                             (line   15)
* RFC; RFC 4122 <3>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line  187)
* RFC; RFC 4122 <4>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line  312)
* RFC; RFC 4122 <5>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line  313)
* RFC; RFC 4180:                         csv — Leitura e escrita de arquivos CSV.
                                                             (line   13)
* RFC; RFC 4193:                         Objetos de endereço.
                                                             (line  306)
* RFC; RFC 4217:                         FTP_TLS objects.    (line   11)
* RFC; RFC 4291:                         Biblioteca<23>.     (line 1125)
* RFC; RFC 4291 <1>:                     Biblioteca<39>.     (line  653)
* RFC; RFC 4291 <2>:                     Objetos de endereço.
                                                             (line  198)
* RFC; RFC 4291 <3>:                     Objetos de endereço.
                                                             (line  238)
* RFC; RFC 4337:                         mimetypes.          (line   60)
* RFC; RFC 4380:                         Objetos de endereço.
                                                             (line  332)
* 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<33>.   (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<4>.
                                                             (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<3>.         (line   11)
* RFC; RFC 5161 <1>:                     Objetos IMAP4.      (line   86)
* RFC; RFC 5246:                         Constantes<9>.      (line  522)
* RFC; RFC 5246 <1>:                     TLS 1 3.            (line   53)
* RFC; RFC 5280:                         ssl<2>.             (line   11)
* RFC; RFC 5280 <1>:                     Other Changes.      (line   20)
* RFC; RFC 5280 <2>:                     Alterações na API Python<10>.
                                                             (line   96)
* 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:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line   14)
* RFC; RFC 5322 <1>:                     email message Representing an email message.
                                                             (line   20)
* RFC; RFC 5322 <2>:                     email message Representing an email message.
                                                             (line   31)
* RFC; RFC 5322 <3>:                     Parser API.         (line   42)
* RFC; RFC 5322 <4>:                     email generator Geração de documentos MIME.
                                                             (line  107)
* RFC; RFC 5322 <5>:                     email generator Geração de documentos MIME.
                                                             (line  202)
* RFC; RFC 5322 <6>:                     email policy Policy Objects.
                                                             (line  149)
* RFC; RFC 5322 <7>:                     email policy Policy Objects.
                                                             (line  343)
* RFC; RFC 5322 <8>:                     email policy Policy Objects.
                                                             (line  364)
* RFC; RFC 5322 <9>:                     email policy Policy Objects.
                                                             (line  370)
* RFC; RFC 5322 <10>:                    email policy Policy Objects.
                                                             (line  382)
* RFC; RFC 5322 <11>:                    email policy Policy Objects.
                                                             (line  415)
* RFC; RFC 5322 <12>:                    email errors Classes de Exceção e Defeito.
                                                             (line   28)
* RFC; RFC 5322 <13>:                    email headerregistry Custom Header Objects.
                                                             (line   16)
* RFC; RFC 5322 <14>:                    email headerregistry Custom Header Objects.
                                                             (line  117)
* RFC; RFC 5322 <15>:                    email headerregistry Custom Header Objects.
                                                             (line  122)
* RFC; RFC 5322 <16>:                    email headerregistry Custom Header Objects.
                                                             (line  123)
* RFC; RFC 5322 <17>:                    email headerregistry Custom Header Objects.
                                                             (line  138)
* RFC; RFC 5322 <18>:                    email headerregistry Custom Header Objects.
                                                             (line  159)
* RFC; RFC 5322 <19>:                    email headerregistry Custom Header Objects.
                                                             (line  416)
* RFC; RFC 5322 <20>:                    email headerregistry Custom Header Objects.
                                                             (line  450)
* RFC; RFC 5322 <21>:                    email headerregistry Custom Header Objects.
                                                             (line  484)
* RFC; RFC 5322 <22>:                    email message Message Representing an email message using the compat32 API.
                                                             (line   21)
* RFC; RFC 5322 <23>:                    Objetos SMTP.       (line  314)
* RFC; RFC 5322 Section 2.2:             Biblioteca<10>.     (line  180)
* RFC; RFC 5334:                         mimetypes.          (line   62)
* RFC; RFC 5424:                         SysLogHandler.      (line   77)
* 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  166)
* 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<24>.      (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<4>.           (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 — SMTP protocol client.
                                                             (line   68)
* RFC; RFC 6532:                         email<4>.           (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 6713:                         mimetypes.          (line   64)
* RFC; RFC 6855:                         imaplib<3>.         (line   12)
* RFC; RFC 6855 <1>:                     imaplib<3>.         (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  247)
* RFC; RFC 7230 <1>:                     Objetos de HTTPConnection.
                                                             (line  193)
* 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<38>.     (line  171)
* RFC; RFC 7616:                         urllib.             (line    8)
* RFC; RFC 7616 <1>:                     Núcleo e embutidos<12>.
                                                             (line   27)
* RFC; RFC 7693:                         BLAKE2.             (line    6)
* RFC; RFC 7725:                         códigos de status HTTP.
                                                             (line  163)
* RFC; RFC 7903:                         mimetypes.          (line   51)
* RFC; RFC 7914:                         Derivação de chave. (line   54)
* RFC; RFC 8081:                         mimetypes.          (line   15)
* RFC; RFC 8089:                         Analisando e gerando URIs.
                                                             (line    7)
* RFC; RFC 8089 Section 3:               urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  184)
* RFC; RFC 821:                          smtplib — SMTP protocol client.
                                                             (line   12)
* RFC; RFC 821 <1>:                      smtplib — SMTP protocol client.
                                                             (line  188)
* RFC; RFC 822:                          Módulos novos ou aprimorados<2>.
                                                             (line   98)
* RFC; RFC 822 <1>:                      Funções<5>.         (line  768)
* RFC; RFC 822 <2>:                      Funções<5>.         (line  772)
* RFC; RFC 822 <3>:                      Funções<5>.         (line  781)
* RFC; RFC 822 <4>:                      Funções<5>.         (line  785)
* RFC; RFC 822 <5>:                      Funções<5>.         (line  798)
* RFC; RFC 822 <6>:                      Funções<5>.         (line  802)
* 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  180)
* 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  218)
* RFC; RFC 9110:                         Biblioteca<14>.     (line  219)
* 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<31>.     (line   74)
* RFC; RFC 9512:                         mimetypes.          (line   68)
* RFC; RFC 9512 <1>:                     Biblioteca<9>.      (line  283)
* RFC; RFC 9559:                         mimetypes.          (line   27)
* RFC; RFC 9559 <1>:                     Biblioteca<15>.     (line  108)
* RFC; RFC 9562:                         uuid.               (line    8)
* RFC; RFC 9562 <1>:                     uuid.               (line   12)
* RFC; RFC 9562 <2>:                     Biblioteca<11>.     (line  268)
* RFC; RFC 9562 <3>:                     Biblioteca<11>.     (line  272)
* RFC; RFC 9562 <4>:                     Biblioteca<12>.     (line  183)
* RFC; RFC 9562 <5>:                     Biblioteca<15>.     (line  379)
* RFC; RFC 9562 <6>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line    6)
* RFC; RFC 9562 <7>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line   14)
* RFC; RFC 9562 <8>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line   77)
* RFC; RFC 9562 <9>:                     uuid — Objetos UUID conforme RFC 9562.
                                                             (line  155)
* RFC; RFC 9562 <10>:                    uuid — Objetos UUID conforme RFC 9562.
                                                             (line  314)
* RFC; RFC 9562 <11>:                    uuid — Objetos UUID conforme RFC 9562.
                                                             (line  343)
* RFC; RFC 9562 Section 5.1:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  203)
* RFC; RFC 9562 Section 5.10:            uuid — Objetos UUID conforme RFC 9562.
                                                             (line  336)
* RFC; RFC 9562 Section 5.3:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  218)
* RFC; RFC 9562 Section 5.4:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  224)
* RFC; RFC 9562 Section 5.5:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  230)
* RFC; RFC 9562 Section 5.6:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  236)
* RFC; RFC 9562 Section 5.7:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  254)
* RFC; RFC 9562 Section 5.8:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  265)
* RFC; RFC 9562 Section 5.9:             uuid — Objetos UUID conforme RFC 9562.
                                                             (line  329)
* RFC; RFC 9562 Section 6.10-3:          Biblioteca<7>.      (line   34)
* RFC; RFC 959:                          ftplib — FTP protocol client.
                                                             (line   16)
* RFC; RFC 9639:                         mimetypes.          (line   66)
* 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  165)
* 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):                  Métodos de string.  (line  482)
* 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   82)
* 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  293)
* RIGHTSHIFTEQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  326)
* 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):                 Métodos de string.  (line  490)
* 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):                  Métodos de string.  (line  495)
* 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  113)
* RLock (classe em threading):           RLock objects.      (line   32)
* RLock() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  204)
* rmd() (método ftplib.FTP):             FTP objects.        (line  348)
* rmdir() (método pathlib.Path):         Copiando movendo e excluindo.
                                                             (line  126)
* rmdir() (no módulo os):                Arquivos e diretórios.
                                                             (line  865)
* rmdir() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  114)
* rmtree() (no módulo shutil):           Operações de diretório e arquivos.
                                                             (line  292)
* rmtree() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  121)
* 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  532)
* rotate() (método decimal.Decimal):     Objetos de Decimal. (line  554)
* rotate() (método logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   75)
* RotatingFileHandler (classe em logging.handlers): RotatingFileHandler.
                                                             (line    9)
* rotation_filename() (método logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   58)
* rotator (atributo logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   49)
* 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  139)
* rounds (atributo sys.float_info):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  733)
* 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  233)
* rowcount (atributo sqlite3.Cursor):    Cursor objects.     (line  222)
* RPAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  215)
* 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):             Métodos de string.  (line  502)
* 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  169)
* 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):                 Métodos de string.  (line  510)
* RSQB (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  221)
* 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):                 Métodos de string.  (line  520)
* 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  452)
* Run script:                            Format menu Editor window only.
                                                             (line   53)
* run_concurrently() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   82)
* 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  701)
* 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  490)
* run_with_tz() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  498)
* run() (método asyncio.Runner):         Runner context manager.
                                                             (line   36)
* run() (método bdb.Bdb):                bdb — Framework do depurador.
                                                             (line  482)
* 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):                pdb — O depurador do Python.
                                                             (line  315)
* 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  123)
* run() (método trace.Trace):            Interface programática.
                                                             (line   24)
* run() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  992)
* 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  511)
* 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):                 pdb — O depurador do Python.
                                                             (line  152)
* 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  499)
* runcall() (método pdb.Pdb):            pdb — O depurador do Python.
                                                             (line  315)
* runcall() (método profile.Profile):    profile and cProfile Module Reference.
                                                             (line  120)
* runcall() (no módulo pdb):             pdb — O depurador do Python.
                                                             (line  172)
* runcode() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line   33)
* runctx() (método bdb.Bdb):             bdb — Framework do depurador.
                                                             (line  494)
* 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  488)
* runeval() (método pdb.Pdb):            pdb — O depurador do Python.
                                                             (line  315)
* runeval() (no módulo pdb):             pdb — O depurador do Python.
                                                             (line  165)
* 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  367)
* runtime_checkable() (no módulo typing): Outras diretivas especiais.
                                                             (line  187)
* RuntimeError:                          Exceções concretas. (line  272)
* RuntimeWarning:                        Avisos.             (line   51)
* 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 9562.
                                                             (line   36)
* safe_path (atributo sys.flags):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  607)
* safe_substitute() (método string.Template): Template strings $-strings.
                                                             (line   61)
* saferepr() (no módulo pprint):         Funções<4>.         (line  103)
* SafeUUID (classe em uuid):             uuid — Objetos UUID conforme RFC 9562.
                                                             (line   32)
* 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  536)
* same_quantum() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  567)
* samefile() (método pathlib.Path):      Consultando tipo de arquivo e status.
                                                             (line  158)
* samefile() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  461)
* SameFileError:                         Operações de diretório e arquivos.
                                                             (line   71)
* sameopenfile() (no módulo os.path):    os path — Manipulações comuns de nomes de caminhos.
                                                             (line  476)
* 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  486)
* 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  813)
* save() (no módulo turtle):             Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line   21)
* 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<14>.        (line  402)
* SaveSignals (classe em test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  808)
* savetty() (no módulo curses):          Funções<6>.         (line  459)
* 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  540)
* scaleb() (método decimal.Decimal):     Objetos de Decimal. (line  578)
* scandir() (no módulo os):              Arquivos e diretórios.
                                                             (line  883)
* scanf (função C):                      Simulando scanf.    (line    6)
* SCHED_BATCH (no módulo os):            Interface do agendador.
                                                             (line   20)
* SCHED_DEADLINE (no módulo os):         Interface do agendador.
                                                             (line   25)
* SCHED_FIFO (no módulo os):             Interface do agendador.
                                                             (line   46)
* sched_get_priority_max() (no módulo os): Interface do agendador.
                                                             (line   79)
* sched_get_priority_min() (no módulo os): Interface do agendador.
                                                             (line   74)
* sched_getaffinity() (no módulo os):    Interface do agendador.
                                                             (line  126)
* sched_getparam() (no módulo os):       Interface do agendador.
                                                             (line  103)
* sched_getscheduler() (no módulo os):   Interface do agendador.
                                                             (line   91)
* SCHED_IDLE (no módulo os):             Interface do agendador.
                                                             (line   31)
* SCHED_NORMAL (no módulo os):           Interface do agendador.
                                                             (line   36)
* SCHED_OTHER (no módulo os):            Interface do agendador.
                                                             (line   16)
* sched_param (classe em os):            Interface do agendador.
                                                             (line   62)
* sched_priority (atributo os.sched_param): Interface do agendador.
                                                             (line   70)
* SCHED_RESET_ON_FORK (no módulo os):    Interface do agendador.
                                                             (line   55)
* SCHED_RR (no módulo os):               Interface do agendador.
                                                             (line   51)
* sched_rr_get_interval() (no módulo os): Interface do agendador.
                                                             (line  109)
* sched_setaffinity() (no módulo os):    Interface do agendador.
                                                             (line  119)
* sched_setparam() (no módulo os):       Interface do agendador.
                                                             (line   97)
* sched_setscheduler() (no módulo os):   Interface do agendador.
                                                             (line   84)
* SCHED_SPORADIC (no módulo os):         Interface do agendador.
                                                             (line   42)
* sched_yield() (no módulo os):          Interface do agendador.
                                                             (line  114)
* scheduler (classe em sched):           sched — Agendador de eventos.
                                                             (line   13)
* SCM_CREDS2 (no módulo socket):         Constantes<8>.      (line  410)
* scope_id (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  315)
* Screen (classe em turtle):             Classes Públicas.   (line   30)
* screensize() (no módulo turtle):       Controle da Janela. (line   63)
* script_from_examples() (no módulo doctest): Depuração.     (line   72)
* scroll() (método curses.window):       Window Objects.     (line  509)
* 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  513)
* 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_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   87)
* search() (método imaplib.IMAP4):       Objetos IMAP4.      (line  305)
* 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 1147)
* 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  209)
* 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)
* seleção item:                          Sequências.         (line    6)
* select() (método imaplib.IMAP4):       Objetos IMAP4.      (line  322)
* 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  118)
* 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  187)
* Semaphore (classe em threading):       Semaphore objects.  (line   19)
* Semaphore() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  209)
* SEMI (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  230)
* SEND (opcode):                         Instruções em bytecode do Python.
                                                             (line 1311)
* 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  263)
* send_fds() (no módulo socket):         Outras funções<2>.  (line  462)
* send_header() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  299)
* send_message() (método smtplib.SMTP):  Objetos SMTP.       (line  304)
* send_response_only() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  312)
* send_response() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  283)
* 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   75)
* 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  212)
* send() (método imaplib.IMAP4):         Objetos IMAP4.      (line  329)
* send() (método logging.handlers.DatagramHandler): DatagramHandler.
                                                             (line   43)
* send() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   63)
* send() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   15)
* send() (método socket.socket):         Socket Objects.     (line  394)
* sendall() (método socket.socket):      Socket Objects.     (line  410)
* 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  503)
* 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  803)
* SendfileNotAvailableError:             Exceções<16>.       (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  492)
* sendmsg() (método socket.socket):      Socket Objects.     (line  448)
* sendto() (método asyncio.DatagramTransport): Transportes de datagrama.
                                                             (line    6)
* sendto() (método socket.socket):       Socket Objects.     (line  429)
* 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 1483)
* sequência de escape:                   Gramática formal.   (line   28)
* sequência de escape não reconhecida:   Caracteres hexadecimais Unicode.
                                                             (line   17)
* 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  123)
* 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  182)
* server_version (atributo http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  407)
* 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  150)
* 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   35)
* Set Breakpoint:                        Help menu Shell and Editor.
                                                             (line   30)
* SET_ADD (opcode):                      Instruções em bytecode do Python.
                                                             (line  378)
* 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 1909)
* 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  865)
* 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  372)
* set_charset() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  237)
* 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  357)
* 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 1935)
* set_data() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  403)
* 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   63)
* set_debuglevel() (método ftplib.FTP):  FTP objects.        (line   74)
* set_debuglevel() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line   88)
* set_debuglevel() (método poplib.POP3): Objetos POP3.       (line   11)
* set_debuglevel() (método smtplib.SMTP): Objetos SMTP.      (line    8)
* set_default_backend() (no módulo pdb): pdb — O depurador do Python.
                                                             (line  226)
* set_default_executor() (método asyncio.loop): Executando código em conjuntos de threads ou processos.
                                                             (line   82)
* 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  241)
* set_error_mode() (no módulo msvcrt):   Outras funções<4>.  (line   12)
* set_escdelay() (no módulo curses):     Funções<6>.         (line  470)
* set_event_loop_policy() (no módulo asyncio): Getting and Setting the Policy.
                                                             (line   17)
* set_event_loop() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   23)
* set_event_loop() (no módulo asyncio):  Laço de Eventos.    (line   73)
* 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): Future Object.    (line   57)
* set_exception() (método concurrent.futures.Future): Future Objects.
                                                             (line  117)
* set_executable() (no módulo multiprocessing): Diversos<5>. (line  120)
* 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<5>.
                                                             (line  136)
* 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 1172)
* set_handle_inheritable() (no módulo os): Herança de descritores de arquivos.
                                                             (line   46)
* set_history_length() (no módulo readline): Arquivo de histórico.
                                                             (line   43)
* 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  520)
* set_inheritable() (no módulo os):      Herança de descritores de arquivos.
                                                             (line   34)
* set_int_max_str_digits() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1701)
* set_labels() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   51)
* set_last_error() (no módulo ctypes):   Funções utilitárias.
                                                             (line  250)
* 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  329)
* set_name() (método asyncio.Task):      Objeto Task.        (line  195)
* set_next() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  335)
* 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_pledged_input_size() (método compression.zstd.ZstdCompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  110)
* 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  362)
* set_result() (método asyncio.Future):  Future Object.      (line   50)
* set_result() (método concurrent.futures.Future): Future Objects.
                                                             (line  105)
* set_return() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  339)
* 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<5>.
                                                             (line  155)
* set_startup_hook() (no módulo readline): Ganchos de inicialização.
                                                             (line    6)
* set_step() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  331)
* set_subdir() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   58)
* set_tabsize() (no módulo curses):      Funções<6>.         (line  485)
* set_task_factory() (método asyncio.loop): Criando Futures e Tasks.
                                                             (line   59)
* set_threshold() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  112)
* set_trace_async() (no módulo pdb):     pdb — O depurador do Python.
                                                             (line  198)
* set_trace_callback() (método sqlite3.Connection): Connection objects.
                                                             (line  396)
* set_trace() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  348)
* set_trace() (método pdb.Pdb):          pdb — O depurador do Python.
                                                             (line  315)
* set_trace() (no módulo bdb):           bdb — Framework do depurador.
                                                             (line  532)
* set_trace() (no módulo pdb):           pdb — O depurador do Python.
                                                             (line  180)
* set_tunnel() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line   98)
* 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  343)
* SET_UPDATE (opcode):                   Instruções em bytecode do Python.
                                                             (line  755)
* 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  458)
* 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   56)
* set() (método contextvars.ContextVar): Variáveis de contexto.
                                                             (line   48)
* set() (método http.cookies.Morsel):    Objetos Morsel.     (line   75)
* set() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  239)
* 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  336)
* setannotation() (método imaplib.IMAP4): Objetos IMAP4.     (line  341)
* 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  527)
* 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  252)
* setdefault() (método dict):            Tipo mapeamento — dict.
                                                             (line  238)
* setdefault() (método http.cookies.Morsel): Objetos Morsel. (line  119)
* 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 1687)
* 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  408)
* 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  414)
* 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  420)
* setgroups() (no módulo os):            Parâmetros de processo.
                                                             (line  426)
* 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  166)
* setitem() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  222)
* setitimer() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  426)
* 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  196)
* 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  441)
* setoutputsize() (método sqlite3.Cursor): Cursor objects.   (line  170)
* 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  257)
* setpgid() (no módulo os):              Parâmetros de processo.
                                                             (line  489)
* setpgrp() (no módulo os):              Parâmetros de processo.
                                                             (line  481)
* 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  497)
* 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 1709)
* 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  346)
* 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 1768)
* setregid() (no módulo os):             Parâmetros de processo.
                                                             (line  515)
* SetReparseDeferralEnabled() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   82)
* setresgid() (no módulo os):            Parâmetros de processo.
                                                             (line  521)
* setresuid() (no módulo os):            Parâmetros de processo.
                                                             (line  529)
* setreuid() (no módulo os):             Parâmetros de processo.
                                                             (line  537)
* 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  523)
* setsid() (no módulo os):               Parâmetros de processo.
                                                             (line  550)
* setsockopt() (método socket.socket):   Socket Objects.     (line  560)
* 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   32)
* setswitchinterval (in module sys):     Estado de thread e a trava global do interpretador.
                                                             (line   18)
* setswitchinterval() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1787)
* setswitchinterval() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  312)
* setSystemId() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   14)
* setsyx() (no módulo curses):           Funções<6>.         (line  493)
* 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  544)
* 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 1800)
* settrace() (no módulo threading):      Referência<2>.      (line  117)
* setuid() (no módulo os):               Parâmetros de processo.
                                                             (line  557)
* setundobuffer() (no módulo turtle):    Métodos Especiais da Tartaruga.
                                                             (line   74)
* SETUP_ANNOTATIONS (opcode):            Instruções em bytecode do Python.
                                                             (line  433)
* SETUP_CLEANUP (opcode):                Instruções em bytecode do Python.
                                                             (line 1463)
* 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 1456)
* 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 1471)
* 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   40)
* 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  498)
* SetValue() (no módulo winreg):         Funções<14>.        (line  427)
* SetValueEx() (no módulo winreg):       Funções<14>.        (line  458)
* setworldcoordinates() (no módulo turtle): Controle da Janela.
                                                             (line   91)
* 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  844)
* SF_NOCACHE (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  855)
* SF_NODISKIO (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  844)
* 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  844)
* 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  489)
* 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  594)
* 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  377)
* 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  545)
* shift() (método decimal.Decimal):      Objetos de Decimal. (line  585)
* 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  101)
* shortDescription() (método unittest.TestCase): Casos de teste.
                                                             (line  844)
* 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   52)
* shouldRollover() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  120)
* shouldStop (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  288)
* 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   85)
* shuffle() (no módulo random):          Funções para sequências.
                                                             (line   54)
* SHUT_RD (no módulo socket):            Constantes<8>.      (line  473)
* SHUT_RDWR (no módulo socket):          Constantes<8>.      (line  473)
* SHUT_WR (no módulo socket):            Constantes<8>.      (line  473)
* 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   61)
* shutdown() (método imaplib.IMAP4):     Objetos IMAP4.      (line  351)
* shutdown() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   85)
* shutdown() (método queue.Queue):       Terminating queues. (line    9)
* shutdown() (método socket.socket):     Socket Objects.     (line  585)
* 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  241)
* 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  257)
* SIG_UNBLOCK (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  249)
* 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  505)
* 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  522)
* Signals (classe em signal):            Conteúdo do módulo<5>.
                                                             (line   17)
* signature (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  384)
* Signature (classe em inspect):         Introspecting callables with the Signature object.
                                                             (line   83)
* 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  552)
* SIGPIPE (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  133)
* SIGQUIT (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  141)
* SIGSEGV (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  147)
* SIGSTKFLT (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  151)
* SIGTERM (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  163)
* sigtimedwait() (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  613)
* SIGUSR1 (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  167)
* SIGUSR2 (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  173)
* sigwait() (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  567)
* sigwaitinfo() (no módulo signal):      Conteúdo do módulo<5>.
                                                             (line  584)
* SIGWINCH (no módulo signal):           Conteúdo do módulo<5>.
                                                             (line  179)
* SIMPLE (atributo inspect.BufferFlags): Buffer flags.       (line   15)
* Simple Mail Transfer Protocol:         smtplib — SMTP protocol client.
                                                             (line    8)
* SimpleCookie (classe em http.cookies): http cookies — HTTP state management.
                                                             (line   49)
* simplefilter() (no módulo warnings):   Funções disponíveis.
                                                             (line  119)
* SimpleHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   70)
* SimpleHTTPRequestHandler (classe em http.server): http server — HTTP servers.
                                                             (line  388)
* SimpleNamespace (classe em types):     Classes e funções de utilidades adicionais.
                                                             (line    6)
* SimpleQueue (classe em multiprocessing): Encadeamentos e filas.
                                                             (line  229)
* 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 — Higher-order functions and operations on callable objects.
                                                             (line  479)
* singledispatchmethod (classe em functools): functools — Higher-order functions and operations on callable objects.
                                                             (line  651)
* 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  253)
* SIO_LOOPBACK_FAST_PATH (no módulo socket): Constantes<8>.  (line  253)
* SIO_RCVALL (no módulo socket):         Constantes<8>.      (line  253)
* site opção de linha de comando; -user-base: Interface de linha de comando<9>.
                                                             (line   17)
* site opção de linha de comando; -user-site: Interface de linha de comando<9>.
                                                             (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   20)
* sixtofour (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  322)
* size (atributo ctypes.CField):         Structured data types.
                                                             (line  272)
* 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  279)
* 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 1250)
* sizeof() (no módulo ctypes):           Funções utilitárias.
                                                             (line  261)
* 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  764)
* 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  129)
* skip_unless_xattr() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  134)
* 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  263)
* 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  242)
* SLASHEQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  308)
* sleep() (no módulo asyncio):           Dormindo.           (line    6)
* sleep() (no módulo time):              Funções<5>.         (line  273)
* sleeping_retry() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  245)
* Slice (classe em ast):                 Subscrição.         (line   27)
* slice (classe interna):                Funções embutidas<3>.
                                                             (line 1861)
* 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  216)
* SMTP (classe em smtplib):              smtplib — SMTP protocol client.
                                                             (line   21)
* SMTP (no módulo email.policy):         email policy Policy Objects.
                                                             (line  510)
* SMTP_SSL (classe em smtplib):          smtplib — SMTP protocol client.
                                                             (line   75)
* SMTP;protocolo:                        smtplib — SMTP protocol client.
                                                             (line    8)
* SMTPAuthenticationError:               smtplib — SMTP protocol client.
                                                             (line  180)
* SMTPConnectError:                      smtplib — SMTP protocol client.
                                                             (line  166)
* SMTPDataError:                         smtplib — SMTP protocol client.
                                                             (line  162)
* SMTPException:                         smtplib — SMTP protocol client.
                                                             (line  127)
* SMTPHandler (classe em logging.handlers): SMTPHandler.     (line   10)
* SMTPHeloError:                         smtplib — SMTP protocol client.
                                                             (line  170)
* SMTPNotSupportedError:                 smtplib — SMTP protocol client.
                                                             (line  174)
* SMTPRecipientsRefused:                 smtplib — SMTP protocol client.
                                                             (line  155)
* SMTPResponseException:                 smtplib — SMTP protocol client.
                                                             (line  141)
* SMTPSenderRefused:                     smtplib — SMTP protocol client.
                                                             (line  149)
* SMTPServerDisconnected:                smtplib — SMTP protocol client.
                                                             (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   48)
* SND_APPLICATION (no módulo winsound):  winsound — Interface de reprodução de som para o Windows.
                                                             (line  135)
* SND_ASYNC (no módulo winsound):        winsound — Interface de reprodução de som para o Windows.
                                                             (line  114)
* SND_FILENAME (no módulo winsound):     winsound — Interface de reprodução de som para o Windows.
                                                             (line   43)
* SND_LOOP (no módulo winsound):         winsound — Interface de reprodução de som para o Windows.
                                                             (line   90)
* SND_MEMORY (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line   96)
* SND_NODEFAULT (no módulo winsound):    winsound — Interface de reprodução de som para o Windows.
                                                             (line  119)
* SND_NOSTOP (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  124)
* SND_NOWAIT (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  128)
* SND_PURGE (no módulo winsound):        winsound — Interface de reprodução de som para o Windows.
                                                             (line  107)
* SND_SENTRY (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  142)
* SND_SYNC (no módulo winsound):         winsound — Interface de reprodução de som para o Windows.
                                                             (line  148)
* SND_SYSTEM (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  155)
* 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_HCI_EVT_FILTER (no módulo socket):  Constantes<8>.      (line  368)
* SO_HCI_PKT_FILTER (no módulo socket):  Constantes<8>.      (line  368)
* SO_INCOMING_CPU (no módulo socket):    Constantes<8>.      (line  424)
* SO_REUSEPORT_LB (no módulo socket):    Constantes<8>.      (line  433)
* 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  148)
* 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  146)
* socket() (método imaplib.IMAP4):       Objetos IMAP4.      (line  356)
* 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  186)
* 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  269)
* SOL_BLUETOOTH (no módulo socket):      Constantes<8>.      (line  331)
* SOL_HCI (no módulo socket):            Constantes<8>.      (line  331)
* SOL_L2CAP (no módulo socket):          Constantes<8>.      (line  331)
* SOL_RDS (no módulo socket):            Constantes<8>.      (line  240)
* SOL_RFCOMM (no módulo socket):         Constantes<8>.      (line  331)
* SOL_SCO (no módulo socket):            Constantes<8>.      (line  331)
* soma de verificação;Do inglês; Cyclic Redundancy Check: zlib — Compactação compatível com gzip.
                                                             (line  129)
* 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  360)
* 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  293)
* sortTestMethodsUsing (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  199)
* source (atributo doctest.Example):     Example Objects.    (line   17)
* source (atributo shlex.shlex):         shlex Objects.      (line  151)
* source (pdb command):                  Comandos de depuração.
                                                             (line  317)
* SOURCE_DATE_EPOCH:                     zipfile.            (line   11)
* SOURCE_DATE_EPOCH <1>:                 py_compile<3>.      (line    7)
* SOURCE_DATE_EPOCH <2>:                 Biblioteca<59>.     (line  452)
* SOURCE_DATE_EPOCH <3>:                 Construção<62>.     (line   15)
* SOURCE_DATE_EPOCH <4>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   68)
* SOURCE_DATE_EPOCH <5>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   88)
* SOURCE_DATE_EPOCH <6>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   92)
* SOURCE_DATE_EPOCH <7>:                 Uso na linha de comando<13>.
                                                             (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  255)
* 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  342)
* 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  625)
* spawnle() (no módulo os):              Gerenciamento de processo.
                                                             (line  625)
* spawnlp() (no módulo os):              Gerenciamento de processo.
                                                             (line  625)
* spawnlpe() (no módulo os):             Gerenciamento de processo.
                                                             (line  625)
* spawnv() (no módulo os):               Gerenciamento de processo.
                                                             (line  625)
* spawnve() (no módulo os):              Gerenciamento de processo.
                                                             (line  625)
* spawnvp() (no módulo os):              Gerenciamento de processo.
                                                             (line  625)
* spawnvpe() (no módulo os):             Gerenciamento de processo.
                                                             (line  625)
* spec de módulo:                        Glossário.          (line 1122)
* 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   64)
* SpecialFileError <1>:                  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  300)
* specified_attributes (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  155)
* speed() (no módulo turtle):            Movimentos de Turtle.
                                                             (line  335)
* Spinbox (classe em tkinter.ttk):       ttk Spinbox.        (line    6)
* SPLICE_F_MORE (no módulo os):          Operações dos descritores de arquivos.
                                                             (line  943)
* SPLICE_F_MOVE (no módulo os):          Operações dos descritores de arquivos.
                                                             (line  943)
* SPLICE_F_NONBLOCK (no módulo os):      Operações dos descritores de arquivos.
                                                             (line  943)
* splice() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  886)
* split() (método BaseExceptionGroup):   Grupos de exceções. (line   72)
* 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):                  Métodos de string.  (line  543)
* split() (no módulo os.path):           os path — Manipulações comuns de nomes de caminhos.
                                                             (line  497)
* 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  513)
* splitext() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  573)
* 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):             Métodos de string.  (line  601)
* 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  539)
* 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  127)
* SQLITE_DBCONFIG_DQS_DDL (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_DQS_DML (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_FKEY (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_QPSG (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_TRIGGER (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_ENABLE_VIEW (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_LEGACY_ALTER_TABLE (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_LEGACY_FILE_FORMAT (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_RESET_DATABASE (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_TRIGGER_EQP (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_TRUSTED_SCHEMA (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* SQLITE_DBCONFIG_WRITABLE_SCHEMA (no módulo sqlite3): Constantes do módulo.
                                                             (line  127)
* 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  549)
* sqrt() (método decimal.Decimal):       Objetos de Decimal. (line  597)
* 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<19>.       (line   79)
* SSLContext (classe em ssl):            SSL Contexts.       (line   14)
* SSLEOFError:                           Exceções<19>.       (line   71)
* SSLError:                              Exceções<19>.       (line    6)
* SSLErrorNumber (classe em ssl):        Constantes<9>.      (line  556)
* 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<19>.       (line   62)
* SSLv3 (atributo ssl.TLSVersion):       Constantes<9>.      (line  578)
* SSLWantReadError:                      Exceções<19>.       (line   44)
* SSLWantWriteError:                     Exceções<19>.       (line   53)
* SSLZeroReturnError:                    Exceções<19>.       (line   35)
* st_atime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1253)
* 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 1272)
* st_birthtime (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1298)
* st_birthtime_ns (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1307)
* st_blksize (atributo os.stat_result):  Arquivos e diretórios.
                                                             (line 1346)
* st_blocks (atributo os.stat_result):   Arquivos e diretórios.
                                                             (line 1340)
* st_creator (atributo os.stat_result):  Arquivos e diretórios.
                                                             (line 1383)
* st_ctime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1262)
* 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 1286)
* st_dev (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1228)
* 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 1394)
* st_flags (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1356)
* st_fstype (atributo os.stat_result):   Arquivos e diretórios.
                                                             (line 1371)
* st_gen (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1364)
* st_gid (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1240)
* ST_GID (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  156)
* st_ino (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1218)
* ST_INO (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  140)
* st_mode (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1213)
* ST_MODE (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  136)
* st_mtime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1257)
* 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 1279)
* st_nlink (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1232)
* ST_NLINK (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  148)
* st_rdev (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1352)
* st_reparse_tag (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1404)
* st_rsize (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1379)
* st_size (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1244)
* ST_SIZE (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  160)
* st_type (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1387)
* st_uid (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1236)
* 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  203)
* 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  277)
* Standard C:                            Gramática formal.   (line   28)
* 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  528)
* standout() (método curses.window):     Window Objects.     (line  533)
* STAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  239)
* STAREQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  305)
* starmap_async() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  163)
* starmap() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  152)
* starmap() (no módulo itertools):       Funções do intertools.
                                                             (line  558)
* Starred (classe em ast):               Variáveis.          (line   41)
* start (atributo de objeto fatia):      Fatiamentos.        (line   27)
* start (atributo range):                Intervalos.         (line   61)
* start (atributo slice):                Funções embutidas<3>.
                                                             (line 1875)
* start (atributo UnicodeError):         Exceções concretas. (line  471)
* start_color() (no módulo curses):      Funções<6>.         (line  506)
* 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_trace() (método bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  172)
* start_unix_server() (no módulo asyncio): Streams.          (line  146)
* start() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   81)
* start() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   58)
* 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  106)
* 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  341)
* StartDoctypeDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  224)
* 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  262)
* 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  750)
* StartNamespaceDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  320)
* 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):             Métodos de string.  (line  677)
* startTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  352)
* startTestRun() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  361)
* starttls() (método imaplib.IMAP4):     Objetos IMAP4.      (line  378)
* 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 1205)
* stat() (método os.DirEntry):           Arquivos e diretórios.
                                                             (line 1104)
* stat() (método pathlib.Path):          Consultando tipo de arquivo e status.
                                                             (line   21)
* stat() (método poplib.POP3):           Objetos POP3.       (line   52)
* stat() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1144)
* 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  174)
* 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  391)
* statvfs() (no módulo os):              Arquivos e diretórios.
                                                             (line 1457)
* 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  127)
* 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 2053)
* stderr (no módulo sys) <2>:            Sub-interpreter support.
                                                             (line  112)
* stderr (no módulo sys) <3>:            Sub-interpreter support.
                                                             (line  199)
* 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  108)
* 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 2053)
* stdin (no módulo sys) <2>:             Sub-interpreter support.
                                                             (line  112)
* stdin (no módulo sys) <3>:             Sub-interpreter support.
                                                             (line  199)
* stdio:                                 Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* stdlib:                                Glossário.          (line 1569)
* stdlib_module_names (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 2146)
* 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  117)
* 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 2053)
* stdout (no módulo sys) <2>:            Sub-interpreter support.
                                                             (line  112)
* stdout (no módulo sys) <3>:            Sub-interpreter support.
                                                             (line  199)
* stem (atributo pathlib.PurePath):      Métodos e propriedades.
                                                             (line  170)
* 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 1879)
* step (pdb command):                    Comandos de depuração.
                                                             (line  228)
* 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 1877)
* stop_here() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  276)
* STOP_ITERATION (monitoring event):     Eventos.            (line   92)
* stop_trace() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  179)
* stop() (método asyncio.loop):          Executar e interromper o laço.
                                                             (line   34)
* stop() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   91)
* stop() (método tkinter.ttk.Progressbar): ttk Progressbar.  (line   21)
* stop() (método unittest.TestResult):   Carregando e executando testes.
                                                             (line  332)
* stop() (no módulo tracemalloc):        Funções<11>.        (line   98)
* StopAsyncIteration:                    Exceções concretas. (line  310)
* StopIteration:                         Exceções concretas. (line  278)
* stopListening() (no módulo logging.config): Funções de configuração.
                                                             (line  174)
* stopTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  356)
* stopTestRun() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  367)
* 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  601)
* STORE_DEREF (opcode):                  Instruções em bytecode do Python.
                                                             (line 1046)
* STORE_FAST (opcode):                   Instruções em bytecode do Python.
                                                             (line  996)
* STORE_FAST_LOAD_FAST (opcode):         Instruções em bytecode do Python.
                                                             (line 1007)
* STORE_FAST_STORE_FAST (opcode):        Instruções em bytecode do Python.
                                                             (line 1000)
* STORE_GLOBAL (opcode):                 Instruções em bytecode do Python.
                                                             (line  622)
* STORE_NAME (opcode):                   Instruções em bytecode do Python.
                                                             (line  559)
* STORE_SLICE (opcode):                  Instruções em bytecode do Python.
                                                             (line  304)
* STORE_SUBSCR (opcode):                 Instruções em bytecode do Python.
                                                             (line  276)
* store() (método imaplib.IMAP4):        Objetos IMAP4.      (line  395)
* 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 1259)
* str() (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  503)
* strategy (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  126)
* Strategy (classe em compression.zstd): Advanced parameter control.
                                                             (line  315)
* strcoll() (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  454)
* StreamError:                           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  265)
* StreamHandler (classe em logging):     StreamHandler.      (line   11)
* 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):                 Lançando exceções.  (line   59)
* strerror() (no módulo os):             Parâmetros de processo.
                                                             (line  563)
* strftime() (método datetime.date):     Objetos date.       (line  332)
* strftime() (método datetime.datetime): Objetos datetime.   (line  778)
* strftime() (método datetime.time):     Objetos time.       (line  249)
* strftime() (no módulo time):           Funções<5>.         (line  329)
* 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  497)
* STRING (atributo annotationlib.Format): Classes<5>.        (line   38)
* 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 de documentação:                Atributos especiais de somente leitura<2>.
                                                             (line  105)
* string entre aspas triplas:            Literais de string e bytes.
                                                             (line   33)
* string_at() (no módulo ctypes):        Funções utilitárias.
                                                             (line  266)
* 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  813)
* 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   96)
* string;literal formatado <1>:          Literais de string brutas.
                                                             (line   26)
* string;literal formatado <2>:          Métodos de string.  (line  799)
* string;literal interpolado:            Refinando a formatação de saída.
                                                             (line   96)
* string;literal interpolado <1>:        Literais de string brutas.
                                                             (line   26)
* string;literal interpolado <2>:        Métodos de string.  (line  799)
* string;métodos:                        Tipo sequência de texto — str.
                                                             (line   93)
* string;object representation:          Finalization and De-allocation.
                                                             (line   95)
* 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 1973)
* string;tipo sequência de texto:        Intervalos.         (line  128)
* StringIO (classe em io):               E/S de texto<2>.    (line  244)
* strings (atributo string.templatelib.Template): Tipos.     (line   45)
* 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):                  Métodos de string.  (line  685)
* stripspaces (atributo curses.textpad.Textbox): Textbox objects.
                                                             (line  115)
* strptime() (método de classe datetime.date): Objetos date. (line   99)
* strptime() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  264)
* strptime() (método de classe datetime.time): Objetos time. (line  153)
* strptime() (no módulo time):           Funções<5>.         (line  494)
* strsignal() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  306)
* Struct (classe em struct):             Classes<3>.         (line    8)
* struct_time (classe em time):          Funções<5>.         (line  529)
* structmember.h:                        Member types.       (line   86)
* Structure (classe em ctypes):          Structured data types.
                                                             (line   36)
* strxfrm() (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  461)
* 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 1525)
* 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  174)
* 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   43)
* 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  221)
* subnet_of() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  358)
* subnets() (método ipaddress.IPv4Network): Objetos de rede. (line  178)
* subnets() (método ipaddress.IPv6Network): Objetos de rede. (line  354)
* Subnormal (classe em decimal):         Sinais.             (line   91)
* suboffsets (atributo memoryview):      Memory Views.       (line  506)
* subpad() (método curses.window):       Window Objects.     (line  537)
* subprocess_exec() (método asyncio.loop): Executando Subprocessos.
                                                             (line   16)
* subprocess_shell() (método asyncio.loop): Executando Subprocessos.
                                                             (line  112)
* 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  419)
* 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): Template strings $-strings.
                                                             (line   51)
* substração:                            Operações binárias aritméticas.
                                                             (line   91)
* 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  554)
* subtype (atributo email.headerregistry.ContentTypeHeader): email headerregistry Custom Header Objects.
                                                             (line  278)
* subwin() (método curses.window):       Window Objects.     (line  544)
* successful() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  217)
* suffix (atributo pathlib.PurePath):    Métodos e propriedades.
                                                             (line  139)
* suffix_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   23)
* suffix_map (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  154)
* suffixes (atributo pathlib.PurePath):  Métodos e propriedades.
                                                             (line  155)
* suiteClass (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  205)
* 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<24>.       (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 Class.      (line   42)
* super (classe interna):                Funções embutidas<3>.
                                                             (line 2011)
* supernet_of() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  232)
* supernet_of() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  360)
* supernet() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  204)
* supernet() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  356)
* supports_bytes_environ (no módulo os): Parâmetros de processo.
                                                             (line  570)
* supports_dir_fd (no módulo os):        Arquivos e diretórios.
                                                             (line 1505)
* supports_effective_ids (no módulo os): Arquivos e diretórios.
                                                             (line 1531)
* supports_fd (no módulo os):            Arquivos e diretórios.
                                                             (line 1550)
* supports_follow_symlinks (no módulo os): Arquivos e diretórios.
                                                             (line 1570)
* supports_unicode_filenames (no módulo os.path): os path — Manipulações comuns de nomes de caminhos.
                                                             (line  604)
* SupportsAbs (classe em typing):        Protocolos<4>.      (line    9)
* SupportsBytes (classe em typing):      Protocolos<4>.      (line   14)
* SupportsComplex (classe em typing):    Protocolos<4>.      (line   18)
* SupportsFloat (classe em typing):      Protocolos<4>.      (line   22)
* SupportsIndex (classe em typing):      Protocolos<4>.      (line   26)
* SupportsInt (classe em typing):        Protocolos<4>.      (line   32)
* SupportsRound (classe em typing):      Protocolos<4>.      (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  792)
* 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  187)
* swap_attr() (no módulo test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  397)
* swap_item() (no módulo test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  414)
* 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):               Métodos de string.  (line  710)
* Symbol (classe em symtable):           Examining Symbol Tables.
                                                             (line  194)
* 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 1595)
* symmetric_difference_update() (método frozenset): Tipo conjuntos — set frozenset.
                                                             (line  198)
* symmetric_difference() (método frozenset): Tipo conjuntos — set frozenset.
                                                             (line  121)
* symtable() (no módulo symtable):       Generating Symbol Tables.
                                                             (line    6)
* SYMTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  342)
* 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   83)
* sync() (método dbm.gnu.gdbm):          dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  128)
* sync() (método shelve.Shelf):          shelve — Python object persistence.
                                                             (line   69)
* sync() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1641)
* syncdown() (método curses.window):     Window Objects.     (line  554)
* synchronized() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   90)
* SyncManager (classe em multiprocessing.managers): Gerenciadores.
                                                             (line  151)
* syncok() (método curses.window):       Window Objects.     (line  560)
* syncup() (método curses.window):       Window Objects.     (line  565)
* SyntaxErr:                             Exceções<23>.       (line   93)
* SyntaxError:                           Exceções concretas. (line  317)
* SyntaxWarning:                         Avisos.             (line   44)
* sys_version (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  189)
* 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  485)
* system() (no módulo os):               Gerenciamento de processo.
                                                             (line  807)
* system() (no módulo platform):         Multiplataforma.    (line  129)
* SystemError:                           Exceções concretas. (line  380)
* SystemError (built-in exception):      Objetos do Módulo.  (line   63)
* SystemError (built-in exception) <1>:  Objetos do Módulo.  (line   90)
* SystemExit:                            Exceções concretas. (line  397)
* 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   86)
* T_BYTE (macro C):                      Member types.       (line   86)
* T_CHAR (macro C):                      Member types.       (line   86)
* T_DOUBLE (macro C):                    Member types.       (line   86)
* T_FLOAT (macro C):                     Member types.       (line   86)
* T_FMT (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  205)
* T_FMT_AMPM (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  211)
* T_INT (macro C):                       Member types.       (line   86)
* T_LONG (macro C):                      Member types.       (line   86)
* T_LONGLONG (macro C):                  Member types.       (line   86)
* T_NONE (C macro):                      Member types.       (line   97)
* T_OBJECT (C macro):                    Member types.       (line   91)
* T_OBJECT_EX (macro C):                 Member types.       (line   86)
* T_PYSSIZET (macro C):                  Member types.       (line   86)
* T_SHORT (macro C):                     Member types.       (line   86)
* T_STRING (macro C):                    Member types.       (line   86)
* T_STRING_INPLACE (macro C):            Member types.       (line   86)
* T_UBYTE (macro C):                     Member types.       (line   86)
* T_UINT (macro C):                      Member types.       (line   86)
* T_ULONG (macro C):                     Member types.       (line   86)
* T_ULONGULONG (macro C):                Member types.       (line   86)
* T_USHORT (macro C):                    Member types.       (line   86)
* t-string:                              Glossário.          (line 1590)
* t-strings:                             Glossário.          (line 1593)
* 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  374)
* 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  250)
* TarFile (classe em tarfile):           TarFile Objects.    (line   23)
* tarfile opção de linha de comando; -c: Opções de linha de comando<2>.
                                                             (line   11)
* tarfile opção de linha de comando; -create: Opções de linha de comando<2>.
                                                             (line   11)
* tarfile opção de linha de comando; -e: Opções de linha de comando<2>.
                                                             (line   16)
* tarfile opção de linha de comando; -extract: Opções de linha de comando<2>.
                                                             (line   16)
* tarfile opção de linha de comando; -filter: Opções de linha de comando<2>.
                                                             (line   31)
* tarfile opção de linha de comando; -l: Opções de linha de comando<2>.
                                                             (line    6)
* tarfile opção de linha de comando; -list: Opções de linha de comando<2>.
                                                             (line    6)
* tarfile opção de linha de comando; -t: Opções de linha de comando<2>.
                                                             (line   22)
* tarfile opção de linha de comando; -test: Opções de linha de comando<2>.
                                                             (line   22)
* tarfile opção de linha de comando; -v: Opções de linha de comando<2>.
                                                             (line   27)
* tarfile opção de linha de comando; -verbose: Opções de linha de comando<2>.
                                                             (line   27)
* target (atributo xml.dom.ProcessingInstruction): Objetos ProcessingInstruction.
                                                             (line    9)
* target_length (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line  109)
* tarinfo (atributo tarfile.FilterError): tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  285)
* TarInfo (classe em tarfile):           Objetos TarInfo.    (line   33)
* Task (classe em asyncio):              Objeto Task.        (line    6)
* task_done() (método asyncio.Queue):    Queue.              (line  117)
* task_done() (método multiprocessing.JoinableQueue): Encadeamentos e filas.
                                                             (line  266)
* task_done() (método queue.Queue):      Objetos Queue.      (line   73)
* TaskGroup (classe em asyncio):         Task Groups.        (line    9)
* 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  316)
* 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  141)
* 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  967)
* 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  975)
* 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  238)
* 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:                                  tempfile — Generate temporary files and directories.
                                                             (line  329)
* temp_cwd() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  139)
* temp_dir() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  154)
* temp_umask() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  164)
* tempdir (no módulo tempfile):          tempfile — Generate temporary files and directories.
                                                             (line  376)
* template (atributo string.Template):   Template strings $-strings.
                                                             (line   99)
* Template (classe em string.templatelib): Tipos.            (line    6)
* Template (classe em string):           Template strings $-strings.
                                                             (line   47)
* TemplateStr (classe em ast):           Literais<3>.        (line   67)
* tempo da CPU:                          Funções<5>.         (line  255)
* tempo da CPU <1>:                      Funções<5>.         (line  636)
* tempo do processador:                  Funções<5>.         (line  255)
* tempo do processador <1>:              Funções<5>.         (line  636)
* 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   92)
* 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  329)
* TERM:                                  Funções<6>.         (line  501)
* TERM <1>:                              Funções<6>.         (line  528)
* termattrs() (no módulo curses):        Funções<6>.         (line  520)
* terminal_size (classe em os):          Consultando o tamanho de um terminal.
                                                             (line   25)
* terminate_workers() (método concurrent.futures.ProcessPoolExecutor): `ProcessPoolExecutor`.
                                                             (line   93)
* 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  178)
* terminate() (método multiprocessing.Process): Process e exceções.
                                                             (line  230)
* terminate() (método subprocess.Popen): Objetos Popen.      (line   86)
* terminator (atributo logging.StreamHandler): StreamHandler.
                                                             (line   47)
* termname() (no módulo curses):         Funções<6>.         (line  526)
* 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  163)
* TEST_HOME_DIR (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  159)
* TEST_HTTP_URL (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  197)
* TEST_SUPPORT_DIR (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  154)
* 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  191)
* testmod() (no módulo doctest):         Basic API.          (line   91)
* testNamePatterns (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  213)
* TestResult (classe em unittest):       Carregando e executando testes.
                                                             (line  230)
* 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  293)
* TestSuite (classe em unittest):        Grouping tests.     (line    6)
* testzip() (método zipfile.ZipFile):    Objetos ZipFile.    (line  281)
* text (atributo ctypes.COMError):       Exceções<10>.       (line   19)
* text (atributo SyntaxError):           Exceções concretas. (line  344)
* 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):        High-level Module Interface.
                                                             (line   38)
* 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 e protocolos 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 1535)
* TextTestResult (classe em unittest):   Carregando e executando testes.
                                                             (line  451)
* TextTestRunner (classe em unittest):   Carregando e executando testes.
                                                             (line  468)
* 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  275)
* 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 2166)
* thread_inherit_context (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  620)
* thread_time_ns() (no módulo time):     Funções<5>.         (line  651)
* thread_time() (no módulo time):        Funções<5>.         (line  634)
* thread_unsafe() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  566)
* thread() (método imaplib.IMAP4):       Objetos IMAP4.      (line  423)
* 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)
* ThreadingHTTPSServer (classe em http.server): http server — HTTP servers.
                                                             (line   82)
* 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   75)
* ThreadingUDPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* ThreadingUnixDatagramServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* ThreadingUnixStreamServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   75)
* ThreadPool (classe em multiprocessing.pool): The multiprocessing dummy module.
                                                             (line   16)
* ThreadPoolExecutor (classe em concurrent.futures): ThreadPoolExecutor.
                                                             (line   39)
* threads livres:                        Glossário.          (line  632)
* 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  531)
* tigetnum() (no módulo curses):         Funções<6>.         (line  538)
* tigetstr() (no módulo curses):         Funções<6>.         (line  545)
* TILDE (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  284)
* 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 9562.
                                                             (line  133)
* time (classe em datetime):             Objetos time.       (line   10)
* time_hi_version (atributo uuid.UUID):  uuid — Objetos UUID conforme RFC 9562.
                                                             (line  117)
* time_low (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 9562.
                                                             (line  109)
* time_mid (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 9562.
                                                             (line  113)
* time_ns() (no módulo time):            Funções<5>.         (line  627)
* 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  589)
* 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<4>.
                                                             (line   46)
* timeit opção de linha de comando; -help: Interface de Linha de Comando<4>.
                                                             (line   46)
* timeit opção de linha de comando; -n:  Interface de Linha de Comando<4>.
                                                             (line   13)
* timeit opção de linha de comando; -number: Interface de Linha de Comando<4>.
                                                             (line   13)
* timeit opção de linha de comando; -p:  Interface de Linha de Comando<4>.
                                                             (line   26)
* timeit opção de linha de comando; -process: Interface de Linha de Comando<4>.
                                                             (line   26)
* timeit opção de linha de comando; -r:  Interface de Linha de Comando<4>.
                                                             (line   17)
* timeit opção de linha de comando; -repeat: Interface de Linha de Comando<4>.
                                                             (line   17)
* timeit opção de linha de comando; -s:  Interface de Linha de Comando<4>.
                                                             (line   21)
* timeit opção de linha de comando; -setup: Interface de Linha de Comando<4>.
                                                             (line   21)
* timeit opção de linha de comando; -u:  Interface de Linha de Comando<4>.
                                                             (line   34)
* timeit opção de linha de comando; -unit: Interface de Linha de Comando<4>.
                                                             (line   34)
* timeit opção de linha de comando; -v:  Interface de Linha de Comando<4>.
                                                             (line   41)
* timeit opção de linha de comando; -verbose: Interface de Linha de Comando<4>.
                                                             (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<18>.       (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  570)
* timeout() (no módulo asyncio):         Tempo limite.       (line    6)
* TimeoutError:                          Exceções de sistema operacional.
                                                             (line  114)
* TimeoutError <1>:                      Process e exceções. (line  304)
* TimeoutError <2>:                      Exception classes.  (line   10)
* TimeoutError <3>:                      Exceções<16>.       (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  842)
* 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  242)
* 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  503)
* tipo:                                  A hierarquia de tipos padrão.
                                                             (line    6)
* tipo <1>:                              Glossário.          (line 1672)
* tipo de um objeto:                     Objetos valores e tipos.
                                                             (line   12)
* tipo genérico:                         Glossário.          (line  746)
* 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):                  Métodos de string.  (line  716)
* title() (no módulo turtle):            Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line   71)
* 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  580)
* TLSv1_1 (atributo ssl.TLSVersion):     Constantes<9>.      (line  582)
* TLSv1_2 (atributo ssl.TLSVersion):     Constantes<9>.      (line  584)
* TLSv1_3 (atributo ssl.TLSVersion):     Constantes<9>.      (line  586)
* TLSVersion (classe em ssl):            Constantes<9>.      (line  562)
* tm_gmtoff (atributo time.struct_time): Funções<5>.         (line  572)
* tm_hour (atributo time.struct_time):   Funções<5>.         (line  549)
* tm_isdst (atributo time.struct_time):  Funções<5>.         (line  566)
* tm_mday (atributo time.struct_time):   Funções<5>.         (line  546)
* tm_min (atributo time.struct_time):    Funções<5>.         (line  552)
* tm_mon (atributo time.struct_time):    Funções<5>.         (line  543)
* tm_sec (atributo time.struct_time):    Funções<5>.         (line  555)
* tm_wday (atributo time.struct_time):   Funções<5>.         (line  560)
* tm_yday (atributo time.struct_time):   Funções<5>.         (line  563)
* tm_year (atributo time.struct_time):   Funções<5>.         (line  540)
* tm_zone (atributo time.struct_time):   Funções<5>.         (line  569)
* TMP:                                   tempfile — Generate temporary files and directories.
                                                             (line  331)
* TMPDIR:                                Biblioteca<8>.      (line   83)
* TMPDIR <1>:                            Testes<26>.         (line   68)
* TMPDIR <2>:                            tempfile — Generate temporary files and directories.
                                                             (line  327)
* TO_BOOL (opcode):                      Instruções em bytecode do Python.
                                                             (line  246)
* to_bytes() (método int):               Métodos adicionais em tipos inteiros.
                                                             (line   57)
* to_eng_string() (método decimal.Context): Objetos de contexto.
                                                             (line  558)
* to_eng_string() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  601)
* to_integral_exact() (método decimal.Context): Objetos de contexto.
                                                             (line  567)
* to_integral_exact() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  619)
* to_integral_value() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  629)
* to_integral() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  613)
* to_sci_string() (método decimal.Context): Objetos de contexto.
                                                             (line  571)
* 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  174)
* 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 1650)
* token (atributo shlex.shlex):          shlex Objects.      (line  173)
* Token (classe em contextvars):         Variáveis de contexto.
                                                             (line   77)
* 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<12>.
                                                             (line   19)
* tokenize opção de linha de comando; -exact: Uso na linha de comando<12>.
                                                             (line   19)
* tokenize opção de linha de comando; -h: Uso na linha de comando<12>.
                                                             (line   15)
* tokenize opção de linha de comando; -help: Uso na linha de comando<12>.
                                                             (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  219)
* TOMLDecodeError:                       tomllib — Analisa arquivos TOML.
                                                             (line   61)
* toordinal() (método datetime.date):    Objetos date.       (line  257)
* 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  236)
* 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 — Higher-order functions and operations on callable objects.
                                                             (line  274)
* 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  580)
* touchwin() (método curses.window):     Window Objects.     (line  587)
* 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  552)
* 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<8>.
                                                             (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<8>.
                                                             (line   19)
* trace_dispatch() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  192)
* 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 2202)
* TracebackType (classe em types):       Tipos padrão do interpretador.
                                                             (line  193)
* tracer() (no módulo turtle):           Controle da animação.
                                                             (line   37)
* traces (atributo tracemalloc.Snapshot): Snapshot.          (line   89)
* train_dict() (no módulo compression.zstd): Dicionários de Zstandard.
                                                             (line    6)
* 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):              Métodos de string.  (line  751)
* translate() (no módulo fnmatch):       fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   97)
* translate() (no módulo glob):          glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line  116)
* 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  144)
* tratador de erros e codificação do sistema de arquivos: Glossário.
                                                             (line  588)
* tratador de exceção:                   Exceções<2>.        (line    6)
* tratamento de erros:                   Exceções<2>.        (line    6)
* trava global do interpretador:         Estado de thread e a trava global do interpretador.
                                                             (line    6)
* trava global do interpretador <1>:     Glossário.          (line  760)
* Traversable (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  528)
* Traversable (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   90)
* TraversableResources (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  583)
* TraversableResources (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  162)
* traverseproc (C type):                 Suporte a Coleta Cíclica de Lixo.
                                                             (line  234)
* 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  179)
* trunc() (no módulo math):              Tipos numéricos — int float complex.
                                                             (line  117)
* 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 1649)
* 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)
* TSTRING_END (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  146)
* TSTRING_MIDDLE (no módulo token):      token — Constantes usadas com árvores de análises do Python.
                                                             (line  134)
* TSTRING_START (no módulo token):       token — Constantes usadas com árvores de análises do Python.
                                                             (line  124)
* 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  983)
* TUESDAY (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* tupla nomeada:                         Glossário.          (line 1139)
* Tuple (classe em ast):                 Literais<3>.        (line  125)
* 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  112)
* TurtleScreen (classe em turtle):       Classes Públicas.   (line   22)
* turtlesize() (no módulo turtle):       Aparência.          (line   55)
* type (atributo ctypes.CField):         Structured data types.
                                                             (line  252)
* type (atributo optparse.Option):       Atributos da classe Option.
                                                             (line   28)
* type (atributo socket.socket):         Socket Objects.     (line  618)
* 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 2108)
* 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  180)
* TYPE_IGNORE (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  173)
* TYPE_PARAMETERS (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   35)
* type_repr() (no módulo annotationlib): Funções<12>.        (line  215)
* TYPE_VARIABLE (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   40)
* typeahead() (no módulo curses):        Funções<6>.         (line  560)
* 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  570)
* 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  251)
* TypeError:                             Exceções concretas. (line  425)
* TypeGuard (no módulo typing):          Formas especiais.   (line  551)
* TypeIgnore (classe em ast):            Anotações de tipos. (line    6)
* TypeIs (no módulo typing):             Formas especiais.   (line  456)
* TYPES (atributo optparse.Option):      Adicionando novos tipos.
                                                             (line   11)
* types_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   39)
* types_map (no módulo mimetypes):       mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  168)
* types_map_inv (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   47)
* 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  259)
* TZ:                                    Funções<5>.         (line  661)
* TZ <1>:                                Funções<5>.         (line  663)
* TZ <2>:                                Funções<5>.         (line  671)
* TZ <3>:                                Funções<5>.         (line  676)
* TZ <4>:                                Funções<5>.         (line  678)
* TZ <5>:                                Funções<5>.         (line  741)
* 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  283)
* 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  658)
* U (no módulo re):                      Sinalizadores.      (line  121)
* u';literal de string:                  Strings entre aspas triplas.
                                                             (line   23)
* u";literal de string:                  Strings entre aspas triplas.
                                                             (line   22)
* UAdd (classe em ast):                  Expressões<2>.      (line   28)
* ucd_3_2_0 (no módulo unicodedata):     unicodedata — Banco de dados de Unicode.
                                                             (line  184)
* 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  446)
* uidl() (método poplib.POP3):           Objetos POP3.       (line   99)
* ULONG_MAX (C macro):                   Objetos Inteiros.   (line  267)
* 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  577)
* unalias (pdb command):                 Comandos de depuração.
                                                             (line  431)
* uname (atributo tarfile.TarInfo):      Objetos TarInfo.    (line  121)
* uname() (no módulo os):                Parâmetros de processo.
                                                             (line  584)
* 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  230)
* UNARY_NEGATIVE (opcode):               Instruções em bytecode do Python.
                                                             (line  219)
* UNARY_NOT (opcode):                    Instruções em bytecode do Python.
                                                             (line  223)
* 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  443)
* uncancel() (método asyncio.Task):      Objeto Task.        (line  279)
* 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  572)
* Underflow (classe em decimal):         Sinais.             (line   99)
* undisplay (pdb command):               Comandos de depuração.
                                                             (line  378)
* undo() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  323)
* undobufferentries() (no módulo turtle): Métodos Especiais da Tartaruga.
                                                             (line   87)
* 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  276)
* unfreeze() (no módulo gc):             gc — Interface para o coletor de lixo.
                                                             (line  256)
* unget_wch() (no módulo curses):        Funções<6>.         (line  592)
* ungetch() (no módulo curses):          Funções<6>.         (line  579)
* ungetch() (no módulo msvcrt):          E/S de console.     (line   46)
* ungetmouse() (no módulo curses):       Funções<6>.         (line  601)
* 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  492)
* UnicodeEncodeError:                    Exceções concretas. (line  487)
* UnicodeError:                          Exceções concretas. (line  449)
* UnicodeTranslateError:                 Exceções concretas. (line  497)
* UnicodeWarning:                        Avisos.             (line   70)
* unidata_version (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  180)
* 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):              Structured data types.
                                                             (line    6)
* Union (classe em typing):              Formas especiais.   (line    9)
* union() (método frozenset):            Tipo conjuntos — set frozenset.
                                                             (line  100)
* 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   62)
* 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 9562.
                                                             (line   45)
* unknown_decl() (método html.parser.HTMLParser): HTMLParser Methods.
                                                             (line  137)
* 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  490)
* 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):        Copiando movendo e excluindo.
                                                             (line  112)
* unlink() (método xml.dom.minidom.Node): Objetos DOM.       (line   10)
* unlink() (no módulo os):               Arquivos e diretórios.
                                                             (line 1669)
* unlink() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  169)
* 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   60)
* unlock() (método mailbox.Mailbox):     Mailbox objects.    (line  265)
* 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  991)
* UNNAMED_SECTION (no módulo configparser): Objetos ConfigParser.
                                                             (line  365)
* UnnamedSectionDisabledError:           Exceções<9>.        (line   84)
* Unpack (no módulo typing):             Formas especiais.   (line  611)
* unpack_archive() (no módulo shutil):   Operações de arquivamento.
                                                             (line  131)
* UNPACK_EX (opcode):                    Instruções em bytecode do Python.
                                                             (line  580)
* 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  571)
* 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  290)
* Unpickler (classe em pickle):          Interface do módulo.
                                                             (line  254)
* UnpicklingError:                       Interface do módulo.
                                                             (line  118)
* 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 2211)
* unregister_archive_format() (no módulo shutil): Operações de arquivamento.
                                                             (line  127)
* 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  199)
* unregister() (método select.devpoll):  /dev/poll Polling Objects.
                                                             (line   55)
* unregister() (método select.epoll):    Edge and Level Trigger Polling epoll Objects.
                                                             (line   95)
* 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 9562.
                                                             (line   41)
* unselect() (método imaplib.IMAP4):     Objetos IMAP4.      (line  457)
* 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  620)
* unshare() (no módulo os):              Parâmetros de processo.
                                                             (line  641)
* UnstructuredHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  115)
* unsubscribe() (método imaplib.IMAP4):  Objetos IMAP4.      (line  453)
* UnsupportedOperation:                  Exceções<6>.        (line    6)
* UnsupportedOperation <1>:              High-level Module Interface.
                                                             (line   72)
* until (pdb command):                   Comandos de depuração.
                                                             (line  242)
* untokenize() (no módulo tokenize):     Tokenizando entradas.
                                                             (line   59)
* untouchwin() (método curses.window):   Window Objects.     (line  592)
* unused_data (atributo bz2.BZ2Decompressor): Des compressão incremental.
                                                             (line   79)
* unused_data (atributo compression.zstd.ZstdDecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  220)
* unused_data (atributo lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória<2>.
                                                             (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  428)
* up (pdb command):                      Comandos de depuração.
                                                             (line  109)
* 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  585)
* 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 — Higher-order functions and operations on callable objects.
                                                             (line  701)
* update() (método collections.Counter): Objetos Counter.    (line  129)
* update() (método dict):                Tipo mapeamento — dict.
                                                             (line  244)
* update() (método frozenset):           Tipo conjuntos — set frozenset.
                                                             (line  178)
* 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  105)
* update() (método mailbox.Mailbox):     Mailbox objects.    (line  235)
* update() (método mailbox.Maildir):     Maildir objects.    (line  193)
* update() (método trace.CoverageResults): Interface programática.
                                                             (line   57)
* update() (no módulo turtle):           Controle da animação.
                                                             (line   61)
* 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):                  Métodos de string.  (line  771)
* 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  170)
* urlcleanup() (no módulo urllib.request): Legacy interface. (line   62)
* urldefrag() (no módulo urllib.parse):  Análise de URL.     (line  401)
* 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  364)
* urlopen() (no módulo urllib.request):  urllib request — Biblioteca extensível para abrir URLs.
                                                             (line   33)
* 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  269)
* urlunparse() (no módulo urllib.parse): Análise de URL.     (line  260)
* urlunsplit() (no módulo urllib.parse): Análise de URL.     (line  354)
* urn (atributo uuid.UUID):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  153)
* 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  616)
* use_env() (no módulo curses):          Funções<6>.         (line  606)
* use_rawinput (atributo cmd.Cmd):       Objetos Cmd.        (line  181)
* USE_STACKCHECK (C macro):              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   61)
* 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  297)
* user_exception() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  316)
* user_line() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  305)
* user_return() (método bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  311)
* 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   22)
* 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  159)
* USERNAME <1>:                          Parâmetros de processo.
                                                             (line  269)
* USERNAME <2>:                          getpass — Entrada de senha portátil.
                                                             (line   62)
* 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<6>.
                                                             (line  121)
* USERPROFILE <2>:                       Windows<45>.        (line   15)
* USERPROFILE <3>:                       os path — Manipulações comuns de nomes de caminhos.
                                                             (line  156)
* 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  382)
* usuário;definição de id:               Parâmetros de processo.
                                                             (line  559)
* usuário;id:                            Parâmetros de processo.
                                                             (line  365)
* usuário;id efetivo:                    Parâmetros de processo.
                                                             (line  214)
* 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  263)
* 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  485)
* utf8_mode (atributo sys.flags):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  604)
* utf8() (método poplib.POP3):           Objetos POP3.       (line  106)
* utime() (no módulo os):                Arquivos e diretórios.
                                                             (line 1684)
* UUID (classe em uuid):                 uuid — Objetos UUID conforme RFC 9562.
                                                             (line   50)
* uuid opção de linha de comando; -C:    Uso na linha de comando<5>.
                                                             (line   41)
* uuid opção de linha de comando; -count: Uso na linha de comando<5>.
                                                             (line   41)
* uuid opção de linha de comando; -h:    Uso na linha de comando<5>.
                                                             (line   15)
* uuid opção de linha de comando; -help: Uso na linha de comando<5>.
                                                             (line   15)
* uuid opção de linha de comando; -n:    Uso na linha de comando<5>.
                                                             (line   27)
* uuid opção de linha de comando; -N:    Uso na linha de comando<5>.
                                                             (line   35)
* uuid opção de linha de comando; -name: Uso na linha de comando<5>.
                                                             (line   35)
* uuid opção de linha de comando; -namespace: Uso na linha de comando<5>.
                                                             (line   27)
* uuid opção de linha de comando; -u:    Uso na linha de comando<5>.
                                                             (line   19)
* uuid opção de linha de comando; -uuid: Uso na linha de comando<5>.
                                                             (line   19)
* uuid1() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  200)
* uuid3() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  214)
* uuid4() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  221)
* uuid5() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  226)
* uuid6() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  233)
* uuid7() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  252)
* uuid8() (no módulo uuid):              uuid — Objetos UUID conforme RFC 9562.
                                                             (line  263)
* 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  315)
* 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   12)
* VALUE (atributo annotationlib.Format): Classes<5>.         (line   14)
* 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   63)
* value (atributo StopIteration):        Exceções concretas. (line  284)
* value (atributo string.templatelib.Interpolation): Tipos.  (line  215)
* 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_WITH_FAKE_GLOBALS (atributo annotationlib.Format): Classes<5>.
                                                             (line   19)
* Value() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  218)
* Value() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   68)
* Value() (no módulo multiprocessing):   Objetos ctypes compartilhados.
                                                             (line    9)
* ValueError:                            Exceções concretas. (line  502)
* valuerefs() (método weakref.WeakValueDictionary): weakref — Referências fracas.
                                                             (line  236)
* values (atributo string.templatelib.Template): Tipos.      (line   90)
* 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  262)
* 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):     Mailbox objects.    (line  128)
* values() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  284)
* 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   98)
* 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 9562.
                                                             (line  157)
* variáveis de ambiente;definição:       Parâmetros de processo.
                                                             (line  384)
* variáveis de ambiente;exclusão:        Parâmetros de processo.
                                                             (line  622)
* variável de ambiente; __PYVENV_LAUNCHER__: PyConfig.       (line  187)
* variável de ambiente; __PYVENV_LAUNCHER__ <1>: PyConfig.   (line  732)
* 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.         (line    6)
* variável de ambiente; BROWSER <1>:     webbrowser.         (line   10)
* variável de ambiente; BROWSER <2>:     Biblioteca<9>.      (line  439)
* variável de ambiente; BROWSER <3>:     Biblioteca<9>.      (line  442)
* variável de ambiente; BROWSER <4>:     webbrowser — Controlador de navegador web conveniente.
                                                             (line   21)
* variável de ambiente; BROWSER <5>:     webbrowser — Controlador de navegador web conveniente.
                                                             (line   31)
* variável de ambiente; BROWSER <6>:     webbrowser — Controlador de navegador web conveniente.
                                                             (line   43)
* variável de ambiente; BROWSER <7>:     webbrowser — Controlador de navegador web conveniente.
                                                             (line  135)
* 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  611)
* variável de ambiente; COLUMNS <1>:     Funções<6>.         (line  614)
* variável de ambiente; COMPILEALL_OPTS: Sinalizadores do compilador.
                                                             (line   44)
* variável de ambiente; COMSPEC:         Gerenciamento de processo.
                                                             (line  822)
* 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<37>.
                                                             (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<6>.
                                                             (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  150)
* variável de ambiente; HOME <5>:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  168)
* 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  157)
* variável de ambiente; HOMEPATH:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  157)
* variável de ambiente; IDLESTARTUP:     IDLE<36>.           (line  176)
* variável de ambiente; IDLESTARTUP <1>: IDLE<40>.           (line    9)
* variável de ambiente; IDLESTARTUP <2>: IDLE<46>.           (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<6>.
                                                             (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   54)
* variável de ambiente; LANG <3>:        locale — Serviços de internacionalização.
                                                             (line  363)
* variável de ambiente; LANG <4>:        locale — Serviços de internacionalização.
                                                             (line  368)
* 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  140)
* variável de ambiente; LINES <1>:       Funções<6>.         (line  611)
* variável de ambiente; LINES <2>:       Funções<6>.         (line  613)
* variável de ambiente; LINKCC:          Sinalizadores do vinculador.
                                                             (line    6)
* variável de ambiente; LOGNAME:         Parâmetros de processo.
                                                             (line  269)
* variável de ambiente; LOGNAME <1>:     getpass — Entrada de senha portátil.
                                                             (line   61)
* 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  355)
* 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<6>.
                                                             (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<42>.      (line   16)
* variável de ambiente; PATH <8>:        Segurança<42>.      (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>:       Instalação.         (line   19)
* variável de ambiente; PATH <14>:       Instalação.         (line   24)
* variável de ambiente; PATH <15>:       Instalação.         (line   33)
* variável de ambiente; PATH <16>:       Shebang lines.      (line   41)
* variável de ambiente; PATH <17>:       Shebang lines.      (line   42)
* variável de ambiente; PATH <18>:       Shebang lines.      (line   51)
* variável de ambiente; PATH <19>:       Advanced Installation.
                                                             (line   10)
* variável de ambiente; PATH <20>:       Advanced Installation.
                                                             (line   29)
* variável de ambiente; PATH <21>:       Advanced Installation.
                                                             (line   32)
* variável de ambiente; PATH <22>:       Instalando binários com threads livres.
                                                             (line   21)
* variável de ambiente; PATH <23>:       Troubleshooting.    (line   55)
* variável de ambiente; PATH <24>:       Troubleshooting.    (line   98)
* variável de ambiente; PATH <25>:       Etapas de instalação.
                                                             (line   35)
* variável de ambiente; PATH <26>:       Etapas de instalação.
                                                             (line   61)
* variável de ambiente; PATH <27>:       Instalando sem UI.  (line   80)
* variável de ambiente; PATH <28>:       Instalando sem UI.  (line   85)
* variável de ambiente; PATH <29>:       Python Launcher for Windows Deprecated.
                                                             (line   17)
* variável de ambiente; PATH <30>:       Pela linha de comando.
                                                             (line    9)
* variável de ambiente; PATH <31>:       Linhas Shebang.     (line   56)
* variável de ambiente; PATH <32>:       Linhas Shebang.     (line   62)
* variável de ambiente; PATH <33>:       Linhas Shebang.     (line   64)
* variável de ambiente; PATH <34>:       Linhas Shebang.     (line   69)
* variável de ambiente; PATH <35>:       Comparação com os módulos os e os path.
                                                             (line   43)
* variável de ambiente; PATH <36>:       Operações de diretório e arquivos.
                                                             (line  465)
* variável de ambiente; PATH <37>:       Operações de diretório e arquivos.
                                                             (line  471)
* variável de ambiente; PATH <38>:       Gerenciamento de processo.
                                                             (line   46)
* variável de ambiente; PATH <39>:       Gerenciamento de processo.
                                                             (line   88)
* variável de ambiente; PATH <40>:       Gerenciamento de processo.
                                                             (line   92)
* variável de ambiente; PATH <41>:       Gerenciamento de processo.
                                                             (line   94)
* variável de ambiente; PATH <42>:       Gerenciamento de processo.
                                                             (line  574)
* variável de ambiente; PATH <43>:       Gerenciamento de processo.
                                                             (line  667)
* variável de ambiente; PATH <44>:       Gerenciamento de processo.
                                                             (line  671)
* variável de ambiente; PATH <45>:       Gerenciamento de processo.
                                                             (line  673)
* variável de ambiente; PATH <46>:       Diversas informações de sistema.
                                                             (line  145)
* variável de ambiente; PATH <47>:       Construtor Popen.   (line   37)
* variável de ambiente; PATH <48>:       webbrowser — Controlador de navegador web conveniente.
                                                             (line  256)
* variável de ambiente; PATH <49>:       webbrowser — Controlador de navegador web conveniente.
                                                             (line   34)
* variável de ambiente; PATH <50>:       Como funcionam os venvs.
                                                             (line   17)
* variável de ambiente; PATH <51>:       Como funcionam os venvs.
                                                             (line   62)
* variável de ambiente; PATH <52>:       Como funcionam os venvs.
                                                             (line   67)
* variável de ambiente; PATH <53>:       site — Gancho de configuração específico do site.
                                                             (line   73)
* variável de ambiente; PATH <54>:       Incorporando Python<2>.
                                                             (line   31)
* variável de ambiente; PATH <55>:       Incorporando Python<2>.
                                                             (line   37)
* variável de ambiente; PATH <56>:       Como tornar um script Python executável no Unix?.
                                                             (line   24)
* variável de ambiente; PATH <57>:       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<46>.     (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  481)
* variável de ambiente; PIP_USER:        Windows<47>.        (line  102)
* variável de ambiente; PROFILE_TASK:    Construção<21>.     (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: Console interativo padrão.
                                                             (line    7)
* variável de ambiente; PYTHON_BASIC_REPL <1>: Um melhor interpretador interativo.
                                                             (line   28)
* variável de ambiente; PYTHON_BASIC_REPL <2>: Biblioteca<16>.
                                                             (line   52)
* variável de ambiente; PYTHON_BASIC_REPL <3>: Biblioteca<16>.
                                                             (line   56)
* variável de ambiente; PYTHON_BASIC_REPL <4>: Núcleo e embutidos<15>.
                                                             (line  464)
* variável de ambiente; PYTHON_BASIC_REPL <5>: Modo interativo<2>.
                                                             (line   26)
* variável de ambiente; PYTHON_BASIC_REPL <6>: Variáveis de ambiente.
                                                             (line  563)
* variável de ambiente; PYTHON_COLORS:   Resumo – Destaques da versão<2>.
                                                             (line   60)
* variável de ambiente; PYTHON_COLORS <1>: Mensagens de erro melhoradas<2>.
                                                             (line    8)
* variável de ambiente; PYTHON_COLORS <2>: doctest.          (line    7)
* variável de ambiente; PYTHON_COLORS <3>: Controlando cores.
                                                             (line   24)
* variável de ambiente; PYTHON_COLORS <4>: Variáveis de ambiente.
                                                             (line  555)
* variável de ambiente; PYTHON_CONTEXT_AWARE_WARNINGS: Biblioteca<9>.
                                                             (line  384)
* variável de ambiente; PYTHON_CONTEXT_AWARE_WARNINGS <1>: Opções diversas.
                                                             (line  457)
* variável de ambiente; PYTHON_CONTEXT_AWARE_WARNINGS <2>: Variáveis de ambiente.
                                                             (line  604)
* variável de ambiente; PYTHON_CONTEXT_AWARE_WARNINGS <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  624)
* variável de ambiente; PYTHON_CONTEXT_AWARE_WARNINGS <4>: Concurrent safety of Context Managers.
                                                             (line   41)
* variável de ambiente; PYTHON_CPU_COUNT: os<2>.             (line   12)
* variável de ambiente; PYTHON_CPU_COUNT <1>: Opções diversas.
                                                             (line  419)
* variável de ambiente; PYTHON_CPU_COUNT <2>: Variáveis de ambiente.
                                                             (line  529)
* variável de ambiente; PYTHON_CPU_COUNT <3>: Diversas informações de sistema.
                                                             (line   50)
* variável de ambiente; PYTHON_CPU_COUNT <4>: Diversas informações de sistema.
                                                             (line   70)
* variável de ambiente; PYTHON_CPU_COUNT <5>: Diversos<5>.   (line   30)
* variável de ambiente; PYTHON_CPU_COUNT <6>: PyConfig.      (line  523)
* variável de ambiente; PYTHON_DISABLE_REMOTE_DEBUG: PEP 768 Interface segura para depurador externo.
                                                             (line   41)
* variável de ambiente; PYTHON_DISABLE_REMOTE_DEBUG <1>: Opções diversas.
                                                             (line  410)
* variável de ambiente; PYTHON_DISABLE_REMOTE_DEBUG <2>: Variáveis de ambiente.
                                                             (line  516)
* 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<21>.
                                                             (line  109)
* variável de ambiente; PYTHON_FROZEN_MODULES <2>: Opções diversas.
                                                             (line  376)
* variável de ambiente; PYTHON_FROZEN_MODULES <3>: Variáveis de ambiente.
                                                             (line  539)
* variável de ambiente; PYTHON_FROZEN_MODULES <4>: PyConfig. (line  421)
* 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<15>.
                                                             (line  167)
* variável de ambiente; PYTHON_GIL <3>:  Opções diversas.    (line  438)
* variável de ambiente; PYTHON_GIL <4>:  Variáveis de ambiente.
                                                             (line  580)
* variável de ambiente; PYTHON_GIL <5>:  sys — Parâmetros e funções específicas do sistema.
                                                             (line  617)
* variável de ambiente; PYTHON_GIL <6>:  A trava global do interpretador no Python com threads livres.
                                                             (line    8)
* variável de ambiente; PYTHON_GIL <7>:  Glossário.          (line  782)
* variável de ambiente; PYTHON_HISTORY:  Outras mudanças na linguagem.
                                                             (line   59)
* variável de ambiente; PYTHON_HISTORY <1>: Biblioteca<21>.  (line  578)
* variável de ambiente; PYTHON_HISTORY <2>: Variáveis de ambiente.
                                                             (line  572)
* variável de ambiente; PYTHON_JIT:      Versões binárias para o compilador experimental just-in-time.
                                                             (line    8)
* variável de ambiente; PYTHON_JIT <1>:  Variáveis de ambiente.
                                                             (line  614)
* variável de ambiente; PYTHON_JIT <2>:  Opções gerais.      (line  242)
* variável de ambiente; PYTHON_JIT <3>:  Opções gerais.      (line  247)
* variável de ambiente; PYTHON_JIT <4>:  Opções gerais.      (line  251)
* variável de ambiente; PYTHON_JIT <5>:  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1346)
* variável de ambiente; PYTHON_MANAGER_DEFAULT: Uso básico.  (line   47)
* variável de ambiente; PYTHON_MANAGER_DEFAULT <1>: Configuração.
                                                             (line   36)
* variável de ambiente; PYTHON_MANAGER_DEFAULT <2>: Troubleshooting.
                                                             (line   63)
* 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  396)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <2>: Variáveis de ambiente.
                                                             (line  501)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <3>: PyConfig.
                                                             (line  909)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <4>: Como trabalhar sem ponteiros de quadro.
                                                             (line   14)
* variável de ambiente; PYTHON_PRESITE:  Opções diversas.    (line  430)
* 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  803)
* variável de ambiente; PYTHON_PRESITE=package.module: Núcleo e embutidos<21>.
                                                             (line  160)
* variável de ambiente; PYTHON_THREAD_INHERIT_CONTEXT: Núcleo e embutidos<8>.
                                                             (line  240)
* variável de ambiente; PYTHON_THREAD_INHERIT_CONTEXT <1>: Opções diversas.
                                                             (line  448)
* variável de ambiente; PYTHON_THREAD_INHERIT_CONTEXT <2>: Variáveis de ambiente.
                                                             (line  593)
* variável de ambiente; PYTHON_THREAD_INHERIT_CONTEXT <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  620)
* variável de ambiente; PYTHON_TLBC:     Opções diversas.    (line  465)
* variável de ambiente; PYTHON_TLBC <1>: Variáveis de ambiente.
                                                             (line  622)
* variável de ambiente; PYTHONASYNCIODEBUG: Variáveis de ambiente.
                                                             (line  291)
* 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   82)
* 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  265)
* variável de ambiente; PYTHONBREAKPOINT <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  279)
* variável de ambiente; PYTHONBREAKPOINT <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  284)
* variável de ambiente; PYTHONCASEOK:    Alterações na API Python<5>.
                                                             (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<50>.    (line  144)
* variável de ambiente; PYTHONCASEOK <3>: Variáveis de ambiente.
                                                             (line  135)
* variável de ambiente; PYTHONCASEOK <4>: Funções embutidas<3>.
                                                             (line 2347)
* 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  385)
* 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   96)
* 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  694)
* variável de ambiente; PYTHONDEVMODE:   Modo de Desenvolvimento do Python -X dev.
                                                             (line    7)
* variável de ambiente; PYTHONDEVMODE <1>: Opções diversas.  (line  332)
* variável de ambiente; PYTHONDEVMODE <2>: Variáveis de ambiente.
                                                             (line  444)
* 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.
                                                             (line  627)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <2>: Opções diversas.
                                                             (line   19)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <3>: Variáveis de ambiente.
                                                             (line  141)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  352)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <5>: Variáveis de configuração global.
                                                             (line   55)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <6>: PyConfig.
                                                             (line 1009)
* 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<54>.  (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<38>.
                                                             (line  154)
* variável de ambiente; PYTHONDUMPREFSFILE <1>: Variáveis de modo de depuração.
                                                             (line   14)
* variável de ambiente; PYTHONDUMPREFSFILE <2>: PyConfig.    (line  320)
* variável de ambiente; PYTHONEXECUTABLE: Variáveis de ambiente.
                                                             (line  225)
* variável de ambiente; PYTHONEXECUTABLE <1>: PyConfig.      (line  729)
* variável de ambiente; PYTHONFAULTHANDLER: faulthandler<5>. (line   12)
* variável de ambiente; PYTHONFAULTHANDLER <1>: Opções diversas.
                                                             (line  282)
* variável de ambiente; PYTHONFAULTHANDLER <2>: Variáveis de ambiente.
                                                             (line  253)
* 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  357)
* 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<65>.
                                                             (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  156)
* variável de ambiente; PYTHONHASHSEED <6>: Variáveis de ambiente.
                                                             (line  162)
* 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  437)
* variável de ambiente; PYTHONHOME:      Remoção pendente no Python 3 15<2>.
                                                             (line   54)
* variável de ambiente; PYTHONHOME <1>:  APIs C descontinuadas<2>.
                                                             (line   25)
* variável de ambiente; PYTHONHOME <2>:  Remoção pendente no Python 3 15<4>.
                                                             (line   54)
* variável de ambiente; PYTHONHOME <3>:  Remoção pendente no Python 3 15<6>.
                                                             (line   54)
* variável de ambiente; PYTHONHOME <4>:  Resumo – Destaques da versão<9>.
                                                             (line  107)
* variável de ambiente; PYTHONHOME <5>:  Opções diversas.    (line   48)
* variável de ambiente; PYTHONHOME <6>:  Variáveis de ambiente.
                                                             (line   11)
* variável de ambiente; PYTHONHOME <7>:  Variáveis de ambiente.
                                                             (line   19)
* variável de ambiente; PYTHONHOME <8>:  Variáveis de ambiente.
                                                             (line   21)
* variável de ambiente; PYTHONHOME <9>:  Variáveis de ambiente.
                                                             (line   38)
* variável de ambiente; PYTHONHOME <10>: Encontrando módulos.
                                                             (line   31)
* variável de ambiente; PYTHONHOME <11>: Encontrando módulos.
                                                             (line   49)
* variável de ambiente; PYTHONHOME <12>: Encontrando módulos.
                                                             (line   85)
* variável de ambiente; PYTHONHOME <13>: Adicionando Python a um projeto iOS.
                                                             (line   92)
* variável de ambiente; PYTHONHOME <14>: test support script_helper — Utilities for the Python execution tests.
                                                             (line   25)
* variável de ambiente; PYTHONHOME <15>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   34)
* variável de ambiente; PYTHONHOME <16>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   62)
* variável de ambiente; PYTHONHOME <17>: Ambientes virtuais<2>.
                                                             (line   18)
* variável de ambiente; PYTHONHOME <18>: Incorporando Python<2>.
                                                             (line   38)
* variável de ambiente; PYTHONHOME <19>: Incorporando Python<2>.
                                                             (line   44)
* variável de ambiente; PYTHONHOME <20>: Variáveis de configuração global.
                                                             (line   99)
* variável de ambiente; PYTHONHOME <21>: Process-wide parameters.
                                                             (line  302)
* variável de ambiente; PYTHONHOME <22>: Process-wide parameters.
                                                             (line  318)
* variável de ambiente; PYTHONHOME <23>: Process-wide parameters.
                                                             (line  327)
* variável de ambiente; PYTHONHOME <24>: PyConfig.           (line  445)
* variável de ambiente; PYTHONHOME <25>: PyConfig.           (line  447)
* variável de ambiente; PYTHONHOME <26>: Remoção pendente no Python 3 15<8>.
                                                             (line   54)
* variável de ambiente; PYTHONINSPECT:   Outras alterações e correções<2>.
                                                             (line   13)
* variável de ambiente; PYTHONINSPECT <1>: Opções diversas.  (line   71)
* variável de ambiente; PYTHONINSPECT <2>: Variáveis de ambiente.
                                                             (line  105)
* variável de ambiente; PYTHONINSPECT <3>: Variáveis de configuração global.
                                                             (line  117)
* variável de ambiente; PYTHONINSPECT <4>: PyConfig.         (line  476)
* variável de ambiente; PYTHONINTMAXSTRDIGITS: Núcleo e embutidos<30>.
                                                             (line  106)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <1>: Opções diversas.
                                                             (line  306)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <2>: Variáveis de ambiente.
                                                             (line  176)
* 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 1262)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <6>: PyConfig. (line  507)
* 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  184)
* variável de ambiente; PYTHONIOENCODING <3>: Variáveis de ambiente.
                                                             (line  425)
* 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 2096)
* variável de ambiente; PYTHONIOENCODING <6>: PyConfig.      (line  863)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING: Remoção pendente no Python 3 16.
                                                             (line  106)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <1>: Novas descontinuações<2>.
                                                             (line  135)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <2>: Remoção pendente no Python 3 16<3>.
                                                             (line  106)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <3>: Remoção pendente no Python 3 16<5>.
                                                             (line  106)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <4>: PEP 529 Change Windows filesystem encoding to UTF-8.
                                                             (line   18)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <5>: Windows<16>.
                                                             (line   40)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <6>: Variáveis de ambiente.
                                                             (line  355)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <7>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2034)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <8>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2045)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <9>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2051)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <10>: Variáveis de configuração global.
                                                             (line  161)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <11>: PyPreConfig.
                                                             (line  131)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <12>: Remoção pendente no Python 3 16<7>.
                                                             (line  106)
* 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  199)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <2>: Variáveis de ambiente.
                                                             (line  370)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2100)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <4>: Variáveis de configuração global.
                                                             (line  181)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <5>: PyConfig.
                                                             (line  560)
* variável de ambiente; PYTHONMALLOC:    PYTHONMALLOC environment variable.
                                                             (line    6)
* variável de ambiente; PYTHONMALLOC <1>: Alterações na API C<15>.
                                                             (line    9)
* variável de ambiente; PYTHONMALLOC <2>: Núcleo e embutidos<85>.
                                                             (line   90)
* variável de ambiente; PYTHONMALLOC <3>: Variáveis de ambiente.
                                                             (line  299)
* variável de ambiente; PYTHONMALLOC <4>: Variáveis de ambiente.
                                                             (line  346)
* variável de ambiente; PYTHONMALLOC <5>: Opções de desempenho.
                                                             (line  126)
* variável de ambiente; PYTHONMALLOC <6>: Opções de desempenho.
                                                             (line  133)
* 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<85>.
                                                             (line   96)
* variável de ambiente; PYTHONMALLOCSTATS <1>: Variáveis de ambiente.
                                                             (line  340)
* variável de ambiente; PYTHONMALLOCSTATS <2>: PyConfig.     (line  577)
* 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  364)
* variável de ambiente; PYTHONNODEBUGRANGES <2>: Variáveis de ambiente.
                                                             (line  475)
* 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  203)
* 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  962)
* variável de ambiente; PYTHONOPTIMIZE:  Opções diversas.    (line   91)
* variável de ambiente; PYTHONOPTIMIZE <1>: Variáveis de ambiente.
                                                             (line   76)
* variável de ambiente; PYTHONOPTIMIZE <2>: Variáveis de configuração global.
                                                             (line  229)
* variável de ambiente; PYTHONOPTIMIZE <3>: PyConfig.        (line  644)
* 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>: Encontrando módulos.
                                                             (line   15)
* variável de ambiente; PYTHONPATH <11>: Encontrando módulos.
                                                             (line   40)
* variável de ambiente; PYTHONPATH <12>: Encontrando módulos.
                                                             (line   85)
* variável de ambiente; PYTHONPATH <13>: Adicionando Python a um projeto iOS.
                                                             (line   96)
* variável de ambiente; PYTHONPATH <14>: Adicionando Python a um projeto iOS.
                                                             (line  125)
* variável de ambiente; PYTHONPATH <15>: Adicionando Python a um projeto iOS.
                                                             (line  130)
* variável de ambiente; PYTHONPATH <16>: Localizadores de entrada de caminho.
                                                             (line   26)
* variável de ambiente; PYTHONPATH <17>: test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* variável de ambiente; PYTHONPATH <18>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1500)
* variável de ambiente; PYTHONPATH <19>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1505)
* variável de ambiente; PYTHONPATH <20>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   16)
* variável de ambiente; PYTHONPATH <21>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   21)
* variável de ambiente; PYTHONPATH <22>: Incorporando Python<2>.
                                                             (line   40)
* variável de ambiente; PYTHONPATH <23>: Incorporando Python<2>.
                                                             (line   45)
* variável de ambiente; PYTHONPATH <24>: Variáveis de configuração global.
                                                             (line   98)
* variável de ambiente; PYTHONPATH <25>: PyConfig.           (line  610)
* variável de ambiente; PYTHONPERFSUPPORT: Outras mudanças na linguagem<2>.
                                                             (line   89)
* variável de ambiente; PYTHONPERFSUPPORT <1>: Opções diversas.
                                                             (line  386)
* variável de ambiente; PYTHONPERFSUPPORT <2>: Variáveis de ambiente.
                                                             (line  487)
* variável de ambiente; PYTHONPERFSUPPORT <3>: PyConfig.     (line  905)
* variável de ambiente; PYTHONPERFSUPPORT <4>: Como habilitar o suporte a perfilação com perf.
                                                             (line    7)
* variável de ambiente; PYTHONPLATLIBDIR: Núcleo e embutidos<46>.
                                                             (line  274)
* variável de ambiente; PYTHONPLATLIBDIR <1>: Variáveis de ambiente.
                                                             (line   54)
* 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  589)
* variável de ambiente; PYTHONPROFILEIMPORTTIME: Outras mudanças na linguagem<7>.
                                                             (line   48)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <1>: Núcleo e embutidos<67>.
                                                             (line   66)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <2>: Opções diversas.
                                                             (line  321)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <3>: Variáveis de ambiente.
                                                             (line  278)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <4>: PyConfig.
                                                             (line  459)
* 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<58>.
                                                             (line  402)
* variável de ambiente; PYTHONPYCACHEPREFIX <2>: Opções diversas.
                                                             (line  345)
* variável de ambiente; PYTHONPYCACHEPREFIX <3>: Variáveis de ambiente.
                                                             (line  147)
* variável de ambiente; PYTHONPYCACHEPREFIX <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  403)
* variável de ambiente; PYTHONPYCACHEPREFIX <5>: PyConfig.   (line  751)
* variável de ambiente; PYTHONREGRTEST_UNICODE_GUARD: Testes<27>.
                                                             (line   13)
* variável de ambiente; PYTHONSAFEPATH:  Resumo – Destaques da versão<4>.
                                                             (line   28)
* variável de ambiente; PYTHONSAFEPATH <1>: Outras mudanças na linguagem<3>.
                                                             (line   41)
* variável de ambiente; PYTHONSAFEPATH <2>: Segurança<26>.   (line    6)
* variável de ambiente; PYTHONSAFEPATH <3>: Opções diversas. (line  123)
* variável de ambiente; PYTHONSAFEPATH <4>: Variáveis de ambiente.
                                                             (line   46)
* variável de ambiente; PYTHONSAFEPATH <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1519)
* variável de ambiente; PYTHONSAFEPATH <6>: Considerações de segurança<4>.
                                                             (line   47)
* variável de ambiente; PYTHONSAFEPATH <7>: PyConfig.        (line  166)
* variável de ambiente; PYTHONSTARTUP:   Console interativo padrão.
                                                             (line   17)
* variável de ambiente; PYTHONSTARTUP <1>: sys<12>.          (line   17)
* variável de ambiente; PYTHONSTARTUP <2>: sys<12>.          (line   21)
* variável de ambiente; PYTHONSTARTUP <3>: Núcleo e embutidos<2>.
                                                             (line   42)
* variável de ambiente; PYTHONSTARTUP <4>: IDLE<36>.         (line  176)
* variável de ambiente; PYTHONSTARTUP <5>: IDLE<40>.         (line    9)
* variável de ambiente; PYTHONSTARTUP <6>: IDLE<46>.         (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   61)
* variável de ambiente; PYTHONSTARTUP <10>: Variáveis de ambiente.
                                                             (line  120)
* variável de ambiente; PYTHONSTARTUP <11>: Exemplo.         (line   10)
* variável de ambiente; PYTHONSTARTUP <12>: asyncio — E/S assíncrona.
                                                             (line   88)
* variável de ambiente; PYTHONSTARTUP <13>: Startup and Code Execution.
                                                             (line    7)
* variável de ambiente; PYTHONSTARTUP <14>: Uso na linha de comando<6>.
                                                             (line   42)
* variável de ambiente; PYTHONSTARTUP <15>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1275)
* 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  265)
* 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  891)
* 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<51>.
                                                             (line  107)
* variável de ambiente; PYTHONUNBUFFERED <1>: Opções diversas.
                                                             (line  187)
* variável de ambiente; PYTHONUNBUFFERED <2>: Variáveis de ambiente.
                                                             (line  124)
* variável de ambiente; PYTHONUNBUFFERED <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 2108)
* 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<22>.
                                                             (line   29)
* variável de ambiente; PYTHONUOPS <1>:  Núcleo e embutidos<22>.
                                                             (line  188)
* variável de ambiente; PYTHONUOPS <2>:  Núcleo e embutidos<22>.
                                                             (line  270)
* variável de ambiente; PYTHONUOPS <3>:  Núcleo e embutidos<22>.
                                                             (line  333)
* variável de ambiente; PYTHONUOPS <4>:  Núcleo e embutidos<22>.
                                                             (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  213)
* 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  339)
* variável de ambiente; PYTHONUTF8 <2>:  Variáveis de ambiente.
                                                             (line  435)
* variável de ambiente; PYTHONUTF8 <3>:  Variáveis de ambiente.
                                                             (line  454)
* 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 2099)
* 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  129)
* variável de ambiente; PYTHONVERBOSE <2>: Variáveis de configuração global.
                                                             (line  275)
* variável de ambiente; PYTHONVERBOSE <3>: PyConfig.         (line  979)
* variável de ambiente; PYTHONWARNDEFAULTENCODING: EncodingWarning opcional e opção encoding="locale".
                                                             (line   21)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <1>: Biblioteca<41>.
                                                             (line   45)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <2>: Opções diversas.
                                                             (line  352)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <3>: Variáveis de ambiente.
                                                             (line  465)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <4>: Ativar EncodingWarning.
                                                             (line   10)
* variável de ambiente; PYTHONWARNINGS:  avisos.             (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<25>.
                                                             (line   67)
* variável de ambiente; PYTHONWARNINGS <5>: Opções diversas. (line  262)
* variável de ambiente; PYTHONWARNINGS <6>: Variáveis de ambiente.
                                                             (line  231)
* 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   51)
* variável de ambiente; PYTHONWARNINGS <9>: O filtro de avisos.
                                                             (line   62)
* variável de ambiente; PYTHONWARNINGS <10>: Descrevendo filtros de aviso.
                                                             (line    7)
* 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  998)
* variável de ambiente; SOURCE_DATE_EPOCH: zipfile.          (line   11)
* variável de ambiente; SOURCE_DATE_EPOCH <1>: py_compile<3>.
                                                             (line    7)
* variável de ambiente; SOURCE_DATE_EPOCH <2>: Biblioteca<59>.
                                                             (line  452)
* variável de ambiente; SOURCE_DATE_EPOCH <3>: Construção<62>.
                                                             (line   15)
* variável de ambiente; SOURCE_DATE_EPOCH <4>: py_compile — Compila arquivos fonte do Python.
                                                             (line   68)
* variável de ambiente; SOURCE_DATE_EPOCH <5>: py_compile — Compila arquivos fonte do Python.
                                                             (line   88)
* variável de ambiente; SOURCE_DATE_EPOCH <6>: py_compile — Compila arquivos fonte do Python.
                                                             (line   92)
* variável de ambiente; SOURCE_DATE_EPOCH <7>: Uso na linha de comando<13>.
                                                             (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:            tempfile — Generate temporary files and directories.
                                                             (line  329)
* variável de ambiente; TERM:            Funções<6>.         (line  501)
* variável de ambiente; TERM <1>:        Funções<6>.         (line  528)
* variável de ambiente; TMP:             tempfile — Generate temporary files and directories.
                                                             (line  331)
* variável de ambiente; TMPDIR:          Biblioteca<8>.      (line   83)
* variável de ambiente; TMPDIR <1>:      Testes<26>.         (line   68)
* variável de ambiente; TMPDIR <2>:      tempfile — Generate temporary files and directories.
                                                             (line  327)
* variável de ambiente; TZ:              Funções<5>.         (line  661)
* variável de ambiente; TZ <1>:          Funções<5>.         (line  663)
* variável de ambiente; TZ <2>:          Funções<5>.         (line  671)
* variável de ambiente; TZ <3>:          Funções<5>.         (line  676)
* variável de ambiente; TZ <4>:          Funções<5>.         (line  678)
* variável de ambiente; TZ <5>:          Funções<5>.         (line  741)
* variável de ambiente; USER:            getpass — Entrada de senha portátil.
                                                             (line   61)
* variável de ambiente; USERNAME:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  159)
* variável de ambiente; USERNAME <1>:    Parâmetros de processo.
                                                             (line  269)
* variável de ambiente; USERNAME <2>:    getpass — Entrada de senha portátil.
                                                             (line   62)
* variável de ambiente; USERPROFILE:     os path<5>.         (line   15)
* variável de ambiente; USERPROFILE <1>: Alterações na API Python<6>.
                                                             (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  156)
* variável de classe:                    Glossário.          (line  289)
* variável de clausura:                  Glossário.          (line  295)
* variável de contexto:                  Glossário.          (line  367)
* variável livre:                        Glossário.          (line  640)
* vazia;lista:                           Sintaxes de criação de lista.
                                                             (line    6)
* vazia;tupla:                           Formas de parênteses.
                                                             (line   16)
* vazio;tupla:                           Sequências imutáveis.
                                                             (line   32)
* 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  245)
* VBAREQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  317)
* VC_ASSEMBLY_PUBLICKEYTOKEN (no módulo msvcrt): Outras funções<4>.
                                                             (line   93)
* 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   63)
* venv opção de linha de comando; -copies: Criando ambientes virtuais<2>.
                                                             (line   58)
* venv opção de linha de comando; -prompt: Criando ambientes virtuais<2>.
                                                             (line   78)
* venv opção de linha de comando; -symlinks: Criando ambientes virtuais<2>.
                                                             (line   53)
* venv opção de linha de comando; -system-site-packages: Criando ambientes virtuais<2>.
                                                             (line   48)
* venv opção de linha de comando; -upgrade: Criando ambientes virtuais<2>.
                                                             (line   68)
* venv opção de linha de comando; -upgrade-deps: Criando ambientes virtuais<2>.
                                                             (line   82)
* venv opção de linha de comando; -without-pip: Criando ambientes virtuais<2>.
                                                             (line   73)
* venv opção de linha de comando; -without-scm-ignore-files: Criando ambientes virtuais<2>.
                                                             (line   87)
* venv opção de linha de comando; ENV_DIR: Criando ambientes virtuais<2>.
                                                             (line   43)
* verbose (atributo sys.flags):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  588)
* 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;value:                         Teste do valor verdade.
                                                             (line    6)
* verificador de tipo estático:          Glossário.          (line 1563)
* 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<19>.
                                                             (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<19>.
                                                             (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   68)
* version (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  280)
* version (atributo ipaddress.IPv6Network): Objetos de rede. (line  302)
* version (atributo sys.thread_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 2195)
* version (atributo uuid.UUID):          uuid — Objetos UUID conforme RFC 9562.
                                                             (line  163)
* version (in module sys):               Process-wide parameters.
                                                             (line  171)
* version (in module sys) <1>:           Process-wide parameters.
                                                             (line  208)
* version (in module sys) <2>:           Process-wide parameters.
                                                             (line  219)
* version (no módulo curses):            Constantes<6>.      (line   18)
* version (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  156)
* version (no módulo sys):               sys — Parâmetros e funções específicas do sistema.
                                                             (line 2261)
* version_info (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 2279)
* version_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  361)
* 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:              Instruções de atribuição.
                                                             (line    6)
* vinculação;nome:                       Ligação de nomes.   (line    6)
* vírgula:                               Formas de parênteses.
                                                             (line   20)
* visão de dicionário:                   Glossário.          (line  483)
* 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  222)
* vline() (método curses.window):        Window Objects.     (line  597)
* 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  135)
* 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  447)
* 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  208)
* 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  104)
* 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  873)
* wait3() (no módulo os):                Gerenciamento de processo.
                                                             (line  986)
* wait4() (no módulo os):                Gerenciamento de processo.
                                                             (line 1001)
* waitid() (no módulo os):               Gerenciamento de processo.
                                                             (line  898)
* waitpid() (no módulo os):              Gerenciamento de processo.
                                                             (line  938)
* waitstatus_to_exitcode() (no módulo os): Gerenciamento de processo.
                                                             (line 1124)
* walk_packages() (no módulo pkgutil):   pkgutil — Utilitário de extensão de pacote.
                                                             (line  114)
* walk_stack() (no módulo traceback):    Funções de nível de módulo.
                                                             (line  185)
* walk_tb() (no módulo traceback):       Funções de nível de módulo.
                                                             (line  199)
* 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  107)
* walk() (no módulo ast):                Auxiliares de ast.  (line  183)
* walk() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1730)
* 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  614)
* 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)
* warnings:                              warnings — Controle de avisos.
                                                             (line    8)
* 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 2293)
* wasSuccessful() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  323)
* WatchedFileHandler (classe em logging.handlers): WatchedFileHandler.
                                                             (line   24)
* 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 1042)
* WCOREDUMP() (no módulo os):            Gerenciamento de processo.
                                                             (line 1165)
* 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: webbrowser — Controlador de navegador web conveniente.
                                                             (line   55)
* webbrowser opção de linha de comando; -new-tab: webbrowser — Controlador de navegador web conveniente.
                                                             (line   59)
* webbrowser opção de linha de comando; -new-window: webbrowser — Controlador de navegador web conveniente.
                                                             (line   55)
* webbrowser opção de linha de comando; -t: webbrowser — Controlador de navegador web conveniente.
                                                             (line   59)
* 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  263)
* 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 1052)
* WEXITSTATUS() (no módulo os):          Gerenciamento de processo.
                                                             (line 1211)
* wfile (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  170)
* wfile (atributo socketserver.DatagramRequestHandler): Objetos manipulador de requisições.
                                                             (line   71)
* whatis (pdb command):                  Comandos de depuração.
                                                             (line  313)
* when() (método asyncio.Timeout):       Tempo limite.       (line   63)
* when() (método asyncio.TimerHandle):   Tratadores de função de retorno.
                                                             (line   36)
* whence (atributo concurrent.interpreters.Interpreter): Objetos interpretador.
                                                             (line   20)
* where (pdb command):                   Comandos de depuração.
                                                             (line   93)
* which() (no módulo shutil):            Operações de diretório e arquivos.
                                                             (line  454)
* 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 1118)
* 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 1175)
* WIFEXITED() (no módulo os):            Gerenciamento de processo.
                                                             (line 1203)
* WIFSIGNALED() (no módulo os):          Gerenciamento de processo.
                                                             (line 1196)
* WIFSTOPPED() (no módulo os):           Gerenciamento de processo.
                                                             (line 1185)
* win32_code_page_search_function() (no módulo encodings): encodings — Encodings package.
                                                             (line   39)
* 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   54)
* window (classe em curses):             Window Objects.     (line    6)
* window_height() (no módulo turtle):    Configurações e métodos especiais.
                                                             (line  119)
* window_log (atributo compression.zstd.CompressionParameter): Advanced parameter control.
                                                             (line   54)
* window_log_max (atributo compression.zstd.DecompressionParameter): Advanced parameter control.
                                                             (line  306)
* window_width() (no módulo turtle):     Configurações e métodos especiais.
                                                             (line  126)
* window() (método curses.panel.Panel):  Objetos painel.     (line   62)
* Windows:                               Programas Python completos.
                                                             (line   25)
* WindowsError:                          Exceções concretas. (line  522)
* WindowsPath (classe em pathlib):       Caminhos concretos. (line   39)
* WindowsProactorEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line   69)
* WindowsRegistryFinder (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   95)
* WindowsSelectorEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line   58)
* winerror (atributo OSError):           Exceções concretas. (line  181)
* WinError() (no módulo ctypes):         Funções utilitárias.
                                                             (line  275)
* WINFUNCTYPE() (no módulo ctypes):      Function prototypes.
                                                             (line   25)
* WinSock:                               select — Waiting for I/O completion.
                                                             (line  154)
* winver (no módulo sys):                sys — Parâmetros e funções específicas do sistema.
                                                             (line 2299)
* With (classe em ast):                  Fluxo de controle.  (line  230)
* WITH_EXCEPT_START (opcode):            Instruções em bytecode do Python.
                                                             (line  491)
* with_hostmask (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   54)
* with_hostmask (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  128)
* with_hostmask (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   81)
* with_hostmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  334)
* with_name() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  368)
* with_netmask (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   45)
* with_netmask (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  123)
* with_netmask (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   79)
* with_netmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  332)
* with_prefixlen (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   36)
* with_prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  110)
* with_prefixlen (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   77)
* with_prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  326)
* with_pymalloc() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  281)
* with_segments() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  428)
* 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  384)
* with_suffix() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  407)
* 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 1087)
* WNOWAIT (no módulo os):                Gerenciamento de processo.
                                                             (line 1096)
* 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):     Future Functions.   (line   53)
* 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  620)
* WrapperDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line   90)
* wraps() (no módulo functools):         functools — Higher-order functions and operations on callable objects.
                                                             (line  749)
* 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   18)
* WRITE_RESTRICTED (macro C):            Member flags.       (line   32)
* 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  179)
* 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  130)
* 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 io.Writer):            Static Typing.      (line   40)
* 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  291)
* write() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line 1004)
* 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 (classe em io):                 Static Typing.      (line   32)
* 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  329)
* WriteTransport (classe em asyncio):    Transports Hierarchy.
                                                             (line   11)
* writev() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line 1024)
* writexml() (método xml.dom.minidom.Node): Objetos DOM.     (line   27)
* WrongDocumentErr:                      Exceções<23>.       (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 1064)
* WSTOPSIG() (no módulo os):             Gerenciamento de processo.
                                                             (line 1220)
* wstring_at() (no módulo ctypes):       Funções utilitárias.
                                                             (line  287)
* WTERMSIG() (no módulo os):             Gerenciamento de processo.
                                                             (line 1229)
* WUNTRACED (no módulo os):              Gerenciamento de processo.
                                                             (line 1076)
* 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  467)
* 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 — Simple HTML and XHTML parser.
                                                             (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_STARTED (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  220)
* 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  213)
* 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  185)
* 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  148)
* 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  280)
* 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  420)
* 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   88)
* 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;na formatação de strings:            Minilinguagem de especificação de formato.
                                                             (line   95)
* z85decode() (no módulo base64):        Base85 Encodings.   (line  100)
* z85encode() (no módulo base64):        Base85 Encodings.   (line   92)
* Zen do Python:                         Glossário.          (line 1772)
* ZeroDivisionError:                     Exceções concretas. (line  508)
* 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):                  Métodos de string.  (line  783)
* ZIP_BZIP2 (no módulo zipfile):         zipfile — Trabalha com arquivos ZIP.
                                                             (line  107)
* ZIP_DEFLATED (no módulo zipfile):      zipfile — Trabalha com arquivos ZIP.
                                                             (line  102)
* zip_longest() (no módulo itertools):   Funções do intertools.
                                                             (line  666)
* ZIP_LZMA (no módulo zipfile):          zipfile — Trabalha com arquivos ZIP.
                                                             (line  114)
* ZIP_STORED (no módulo zipfile):        zipfile — Trabalha com arquivos ZIP.
                                                             (line   98)
* ZIP_ZSTANDARD (no módulo zipfile):     zipfile — Trabalha com arquivos ZIP.
                                                             (line  121)
* zipapp opção de linha de comando; -c:  Interface de linha de comando<7>.
                                                             (line   46)
* zipapp opção de linha de comando; -compress: Interface de linha de comando<7>.
                                                             (line   46)
* zipapp opção de linha de comando; -h:  Interface de linha de comando<7>.
                                                             (line   62)
* zipapp opção de linha de comando; -help: Interface de linha de comando<7>.
                                                             (line   62)
* zipapp opção de linha de comando; -info: Interface de linha de comando<7>.
                                                             (line   56)
* zipapp opção de linha de comando; -m:  Interface de linha de comando<7>.
                                                             (line   37)
* zipapp opção de linha de comando; -main: Interface de linha de comando<7>.
                                                             (line   37)
* zipapp opção de linha de comando; -o:  Interface de linha de comando<7>.
                                                             (line   18)
* zipapp opção de linha de comando; -output: Interface de linha de comando<7>.
                                                             (line   18)
* zipapp opção de linha de comando; -p:  Interface de linha de comando<7>.
                                                             (line   30)
* zipapp opção de linha de comando; -python: Interface de linha de comando<7>.
                                                             (line   30)
* ZipFile (classe em zipfile):           Objetos ZipFile.    (line    6)
* zipfile opção de linha de comando; -c: Opções de linha de comando.
                                                             (line   11)
* zipfile opção de linha de comando; -create: Opções de linha de comando.
                                                             (line   11)
* zipfile opção de linha de comando; -e: Opções de linha de comando.
                                                             (line   16)
* zipfile opção de linha de comando; -extract: Opções de linha de comando.
                                                             (line   16)
* zipfile opção de linha de comando; -l: Opções de linha de comando.
                                                             (line    6)
* zipfile opção de linha de comando; -list: Opções de linha de comando.
                                                             (line    6)
* zipfile opção de linha de comando; -metadata-encoding: Opções de linha de comando.
                                                             (line   26)
* zipfile opção de linha de comando; -t: Opções de linha de comando.
                                                             (line   21)
* zipfile opção de linha de comando; -test: Opções de linha de comando.
                                                             (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  326)
* ZLIB_VERSION (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  319)
* ZLIBNG_VERSION (no módulo zlib):       zlib — Compactação compatível com gzip.
                                                             (line  333)
* ZoneInfo (classe em zoneinfo):         A classe ZoneInfo.  (line    6)
* ZoneInfoNotFoundError:                 Exceptions and warnings.
                                                             (line    6)
* zscore() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line  127)
* zstd_version_info (no módulo compression.zstd): Diversos<3>.
                                                             (line   32)
* ZstdCompressor (classe em compression.zstd): Comprimindo e descomprimindo dados na memória.
                                                             (line   50)
* ZstdDecompressor (classe em compression.zstd): Comprimindo e descomprimindo dados na memória.
                                                             (line  163)
* ZstdDict (classe em compression.zstd): Dicionários de Zstandard.
                                                             (line   51)
* ZstdError:                             Exceções<8>.        (line    6)
* ZstdFile (classe em compression.zstd): Lendo e escrevendo arquivos comprimidos.
                                                             (line   50)
* сертифікати:                           SSL Contexts.       (line  762)

                                                                       
       



Tag Table:
Node: Top349
Ref: contents doc560
Ref: 13b560
Node: O que há de novo no Python263909
Ref: whatsnew/index doc264017
Ref: 13c264017
Ref: whatsnew/index python-documentation-contents264017
Ref: 13d264017
Ref: whatsnew/index what-s-new-in-python264017
Ref: 13e264017
Ref: whatsnew/index whatsnew-index264017
Ref: 13f264017
Node: O que há de novo no Python 3 14265863
Ref: whatsnew/3 14 doc266000
Ref: 140266000
Ref: whatsnew/3 14 what-s-new-in-python-3-14266000
Ref: 141266000
Ref: O que há de novo no Python 3 14-Footnote-1266777
Node: Resumo – Destaques da versão266819
Ref: whatsnew/3 14 summary-release-highlights266949
Ref: 143266949
Ref: Resumo – Destaques da versão-Footnote-1270144
Ref: Resumo – Destaques da versão-Footnote-2270186
Ref: Resumo – Destaques da versão-Footnote-3270228
Ref: Resumo – Destaques da versão-Footnote-4270270
Ref: Resumo – Destaques da versão-Footnote-5270312
Ref: Resumo – Destaques da versão-Footnote-6270354
Ref: Resumo – Destaques da versão-Footnote-7270396
Ref: Resumo – Destaques da versão-Footnote-8270438
Ref: Resumo – Destaques da versão-Footnote-9270480
Ref: Resumo – Destaques da versão-Footnote-10270522
Ref: Resumo – Destaques da versão-Footnote-11270565
Ref: Resumo – Destaques da versão-Footnote-12270615
Ref: Resumo – Destaques da versão-Footnote-13270658
Node: Novas funcionalidades270701
Ref: whatsnew/3 14 new-features270869
Ref: 15a270869
Node: PEP 649 e PEP 749 Avaliação adiada de anotações271585
Ref: whatsnew/3 14 pep-649-pep-749-deferred-evaluation-of-annotations271759
Ref: 15b271759
Ref: whatsnew/3 14 whatsnew314-deferred-annotations271759
Ref: 145271759
Ref: PEP 649 e PEP 749 Avaliação adiada de anotações-Footnote-1273947
Ref: PEP 649 e PEP 749 Avaliação adiada de anotações-Footnote-2273989
Ref: PEP 649 e PEP 749 Avaliação adiada de anotações-Footnote-3274045
Ref: PEP 649 e PEP 749 Avaliação adiada de anotações-Footnote-4274087
Ref: PEP 649 e PEP 749 Avaliação adiada de anotações-Footnote-5274129
Node: PEP 734 Múltiplos interpretadores na biblioteca padrão274171
Ref: whatsnew/3 14 pep-734-multiple-interpreters-in-the-standard-library274388
Ref: 162274388
Ref: whatsnew/3 14 whatsnew314-multiple-interpreters274388
Ref: 146274388
Ref: PEP 734 Múltiplos interpretadores na biblioteca padrão-Footnote-1279275
Ref: PEP 734 Múltiplos interpretadores na biblioteca padrão-Footnote-2279317
Ref: PEP 734 Múltiplos interpretadores na biblioteca padrão-Footnote-3279373
Node: PEP 750 literal de string template279415
Ref: whatsnew/3 14 pep-750-template-string-literals279628
Ref: 168279628
Ref: whatsnew/3 14 whatsnew314-template-string-literals279628
Ref: 144279628
Ref: PEP 750 literal de string template-Footnote-1282755
Ref: PEP 750 literal de string template-Footnote-2282811
Node: PEP 768 Interface segura para depurador externo282853
Ref: whatsnew/3 14 pep-768-safe-external-debugger-interface283039
Ref: 16c283039
Ref: whatsnew/3 14 whatsnew314-remote-debugging283039
Ref: 14e283039
Ref: PEP 768 Interface segura para depurador externo-Footnote-1285254
Ref: PEP 768 Interface segura para depurador externo-Footnote-2285310
Node: Um novo tipo de interpretador285352
Ref: whatsnew/3 14 a-new-type-of-interpreter285540
Ref: 171285540
Ref: whatsnew/3 14 whatsnew314-tail-call-interpreter285540
Ref: 14f285540
Ref: Um novo tipo de interpretador-Footnote-1287268
Ref: Um novo tipo de interpretador-Footnote-2287316
Node: Melhorias no modo com threads livres287372
Ref: whatsnew/3 14 free-threaded-mode-improvements287541
Ref: 173287541
Ref: whatsnew/3 14 whatsnew314-free-threaded-cpython287541
Ref: 150287541
Ref: Melhorias no modo com threads livres-Footnote-1290201
Ref: Melhorias no modo com threads livres-Footnote-2290243
Node: Mensagens de erro melhoradas290285
Ref: whatsnew/3 14 improved-error-messages290467
Ref: 17a290467
Ref: whatsnew/3 14 whatsnew314-improved-error-messages290467
Ref: 151290467
Ref: Mensagens de erro melhoradas-Footnote-1295284
Ref: Mensagens de erro melhoradas-Footnote-2295340
Ref: Mensagens de erro melhoradas-Footnote-3295396
Ref: Mensagens de erro melhoradas-Footnote-4295452
Ref: Mensagens de erro melhoradas-Footnote-5295507
Ref: Mensagens de erro melhoradas-Footnote-6295563
Ref: Mensagens de erro melhoradas-Footnote-7295619
Ref: Mensagens de erro melhoradas-Footnote-8295675
Ref: Mensagens de erro melhoradas-Footnote-9295731
Ref: Mensagens de erro melhoradas-Footnote-10295787
Node: Suporte ao Zstandard na biblioteca padrão295844
Ref: whatsnew/3 14 pep-784-zstandard-support-in-the-standard-library296031
Ref: 187296031
Ref: whatsnew/3 14 whatsnew314-zstandard296031
Ref: 148296031
Ref: Suporte ao Zstandard na biblioteca padrão-Footnote-1297823
Ref: Suporte ao Zstandard na biblioteca padrão-Footnote-2297864
Ref: Suporte ao Zstandard na biblioteca padrão-Footnote-3297920
Node: Capacidades de introspecção assíncrona297962
Ref: whatsnew/3 14 asyncio-introspection-capabilities298160
Ref: 188298160
Ref: whatsnew/3 14 whatsnew314-asyncio-introspection298160
Ref: 147298160
Ref: Capacidades de introspecção assíncrona-Footnote-1303983
Node: Controle de avisos seguros simultâneos304038
Ref: whatsnew/3 14 concurrent-safe-warnings-control304185
Ref: 189304185
Ref: whatsnew/3 14 whatsnew314-concurrent-warnings-control304185
Ref: 153304185
Ref: Controle de avisos seguros simultâneos-Footnote-1304944
Node: Outras mudanças de linguagem305000
Ref: whatsnew/3 14 other-language-changes305151
Ref: 18b305151
Ref: Outras mudanças de linguagem-Footnote-1306778
Ref: Outras mudanças de linguagem-Footnote-2306834
Ref: Outras mudanças de linguagem-Footnote-3306889
Ref: Outras mudanças de linguagem-Footnote-4306945
Ref: Outras mudanças de linguagem-Footnote-5307001
Node: Embutidos307057
Ref: whatsnew/3 14 built-ins307168
Ref: 18f307168
Ref: Embutidos-Footnote-1309534
Ref: Embutidos-Footnote-2309590
Ref: Embutidos-Footnote-3309645
Ref: Embutidos-Footnote-4309700
Ref: Embutidos-Footnote-5309756
Ref: Embutidos-Footnote-6309812
Ref: Embutidos-Footnote-7309868
Ref: Embutidos-Footnote-8309924
Ref: Embutidos-Footnote-9309980
Node: Linha de comando e ambiente310036
Ref: whatsnew/3 14 command-line-and-environment310216
Ref: 1a7310216
Ref: Linha de comando e ambiente-Footnote-1311258
Ref: Linha de comando e ambiente-Footnote-2311314
Ref: Linha de comando e ambiente-Footnote-3311370
Ref: Linha de comando e ambiente-Footnote-4311402
Node: PEP 758 permite expressões except e except* sem parênteses311458
Ref: whatsnew/3 14 pep-758-allow-except-and-except-expressions-without-brackets311672
Ref: 1aa311672
Ref: whatsnew/3 14 whatsnew314-bracketless-except311672
Ref: 14c311672
Ref: PEP 758 permite expressões except e except* sem parênteses-Footnote-1312261
Ref: PEP 758 permite expressões except e except* sem parênteses-Footnote-2312303
Node: PEP 765 Fluxo de controle em blocos finally312359
Ref: whatsnew/3 14 pep-765-control-flow-in-finally-blocks312572
Ref: 1ad312572
Ref: whatsnew/3 14 whatsnew314-finally-syntaxwarning312572
Ref: 14d312572
Ref: PEP 765 Fluxo de controle em blocos finally-Footnote-1313838
Ref: PEP 765 Fluxo de controle em blocos finally-Footnote-2313880
Node: Coleta de lixo incremental313936
Ref: whatsnew/3 14 incremental-garbage-collection314115
Ref: 1b2314115
Ref: whatsnew/3 14 whatsnew314-incremental-gc314115
Ref: 152314115
Ref: Coleta de lixo incremental-Footnote-1314979
Node: Console interativo padrão315035
Ref: whatsnew/3 14 default-interactive-shell315162
Ref: 1b4315162
Ref: whatsnew/3 14 whatsnew314-pyrepl-highlighting315232
Ref: 154315232
Ref: Console interativo padrão-Footnote-1316655
Ref: Console interativo padrão-Footnote-2316711
Node: Novos módulos316766
Ref: whatsnew/3 14 new-modules316915
Ref: 1b9316915
Ref: Novos módulos-Footnote-1318195
Ref: Novos módulos-Footnote-2318251
Ref: Novos módulos-Footnote-3318307
Ref: Novos módulos-Footnote-4318363
Node: Módulos melhorados318419
Ref: whatsnew/3 14 improved-modules318552
Ref: 1ba318552
Node: argparse319414
Ref: whatsnew/3 14 argparse319490
Ref: 1bb319490
Ref: argparse-Footnote-1320452
Ref: argparse-Footnote-2320507
Ref: argparse-Footnote-3320563
Node: ast320619
Ref: whatsnew/3 14 ast320711
Ref: 1be320711
Ref: ast-Footnote-1321724
Ref: ast-Footnote-2321779
Ref: ast-Footnote-3321835
Ref: ast-Footnote-4321891
Ref: ast-Footnote-5321947
Ref: ast-Footnote-6322003
Node: asyncio322059
Ref: whatsnew/3 14 asyncio322151
Ref: 1c6322151
Ref: asyncio-Footnote-1323379
Ref: asyncio-Footnote-2323435
Node: calendar323490
Ref: whatsnew/3 14 calendar323597
Ref: 1ce323597
Ref: whatsnew/3 14 whatsnew314-color-calendar323632
Ref: 1cf323632
Ref: calendar-Footnote-1323935
Node: concurrent futures323991
Ref: whatsnew/3 14 concurrent-futures324103
Ref: 1d1324103
Ref: whatsnew/3 14 whatsnew314-concurrent-futures-interp-pool324158
Ref: 167324158
Ref: whatsnew/3 14 whatsnew314-concurrent-futures-start-method324626
Ref: 1d3324626
Ref: concurrent futures-Footnote-1326355
Ref: concurrent futures-Footnote-2326411
Ref: concurrent futures-Footnote-3326466
Ref: concurrent futures-Footnote-4326522
Node: configparser326577
Ref: whatsnew/3 14 configparser326692
Ref: 1dc326692
Ref: configparser-Footnote-1327087
Node: contextvars327143
Ref: whatsnew/3 14 contextvars327246
Ref: 1df327246
Ref: contextvars-Footnote-1327464
Node: ctypes327520
Ref: whatsnew/3 14 ctypes327617
Ref: 1e2327617
Ref: ctypes-Footnote-1330181
Ref: ctypes-Footnote-2330236
Ref: ctypes-Footnote-3330291
Ref: ctypes-Footnote-4330347
Ref: ctypes-Footnote-5330403
Ref: ctypes-Footnote-6330459
Ref: ctypes-Footnote-7330515
Ref: ctypes-Footnote-8330570
Ref: ctypes-Footnote-9330626
Ref: ctypes-Footnote-10330682
Ref: ctypes-Footnote-11330739
Node: curses330796
Ref: whatsnew/3 14 curses330890
Ref: 1f4330890
Ref: curses-Footnote-1331192
Node: datetime331248
Ref: whatsnew/3 14 datetime331343
Ref: 1f7331343
Ref: datetime-Footnote-1331592
Node: decimal331647
Ref: whatsnew/3 14 decimal331743
Ref: 1fb331743
Ref: decimal-Footnote-1332173
Ref: decimal-Footnote-2332229
Node: difflib332284
Ref: whatsnew/3 14 difflib332375
Ref: 1ff332375
Ref: difflib-Footnote-1332622
Node: dis332678
Ref: whatsnew/3 14 dis332767
Ref: 201332767
Ref: dis-Footnote-1333551
Ref: dis-Footnote-2333607
Node: errno333663
Ref: whatsnew/3 14 errno333757
Ref: 209333757
Ref: errno-Footnote-1333931
Node: faulthandler333987
Ref: whatsnew/3 14 faulthandler334085
Ref: 20b334085
Ref: faulthandler-Footnote-1334431
Node: fnmatch334487
Ref: whatsnew/3 14 fnmatch334589
Ref: 20f334589
Ref: fnmatch-Footnote-1334804
Node: fractions334859
Ref: whatsnew/3 14 fractions334958
Ref: 211334958
Ref: fractions-Footnote-1335373
Ref: fractions-Footnote-2335428
Node: functools335484
Ref: whatsnew/3 14 functools335582
Ref: 214335582
Ref: functools-Footnote-1336112
Ref: functools-Footnote-2336168
Node: getopt336224
Ref: whatsnew/3 14 getopt336320
Ref: 21a336320
Ref: getopt-Footnote-1336670
Ref: getopt-Footnote-2336726
Node: getpass336782
Ref: whatsnew/3 14 getpass336877
Ref: 21b336877
Ref: getpass-Footnote-1337248
Node: graphlib337303
Ref: whatsnew/3 14 graphlib337397
Ref: 21d337397
Ref: graphlib-Footnote-1337643
Node: heapq337699
Ref: whatsnew/3 14 heapq337790
Ref: 21f337790
Node: hmac338131
Ref: whatsnew/3 14 hmac338218
Ref: 225338218
Ref: hmac-Footnote-1338594
Ref: hmac-Footnote-2338653
Ref: hmac-Footnote-3338701
Node: http338756
Ref: whatsnew/3 14 http338845
Ref: 226338845
Ref: http-Footnote-1339736
Ref: http-Footnote-2339792
Node: imaplib339847
Ref: whatsnew/3 14 imaplib339939
Ref: 22b339939
Ref: imaplib-Footnote-1340160
Ref: imaplib-Footnote-2340219
Node: inspect340274
Ref: whatsnew/3 14 inspect340364
Ref: 22d340364
Ref: inspect-Footnote-1341042
Ref: inspect-Footnote-2341098
Ref: inspect-Footnote-3341154
Node: io341210
Ref: whatsnew/3 14 io341297
Ref: 233341297
Ref: io-Footnote-1341862
Ref: io-Footnote-2341918
Node: json341974
Ref: whatsnew/3 14 json342063
Ref: 23a342063
Ref: json-Footnote-1342858
Ref: json-Footnote-2342914
Ref: json-Footnote-3342970
Node: linecache343026
Ref: whatsnew/3 14 linecache343129
Ref: 23e343129
Ref: linecache-Footnote-1343330
Node: logging handlers343386
Ref: whatsnew/3 14 logging-handlers343489
Ref: 240343489
Ref: logging handlers-Footnote-1343914
Ref: logging handlers-Footnote-2343970
Node: math344026
Ref: whatsnew/3 14 math344129
Ref: 244344129
Ref: math-Footnote-1344363
Node: mimetypes344419
Ref: whatsnew/3 14 mimetypes344521
Ref: 245344521
Ref: mimetypes-Footnote-1347931
Ref: mimetypes-Footnote-2347986
Ref: mimetypes-Footnote-3348045
Ref: mimetypes-Footnote-4348104
Ref: mimetypes-Footnote-5348163
Ref: mimetypes-Footnote-6348222
Ref: mimetypes-Footnote-7348281
Ref: mimetypes-Footnote-8348340
Ref: mimetypes-Footnote-9348399
Ref: mimetypes-Footnote-10348458
Ref: mimetypes-Footnote-11348518
Ref: mimetypes-Footnote-12348578
Ref: mimetypes-Footnote-13348638
Ref: mimetypes-Footnote-14348698
Ref: mimetypes-Footnote-15348758
Ref: mimetypes-Footnote-16348818
Ref: mimetypes-Footnote-17348906
Ref: mimetypes-Footnote-18349006
Ref: mimetypes-Footnote-19349061
Ref: mimetypes-Footnote-20349117
Ref: mimetypes-Footnote-21349174
Ref: mimetypes-Footnote-22349230
Ref: mimetypes-Footnote-23349286
Node: multiprocessing349343
Ref: whatsnew/3 14 multiprocessing349449
Ref: 247349449
Ref: whatsnew/3 14 whatsnew314-multiprocessing-start-method349500
Ref: 248349500
Ref: multiprocessing-Footnote-1351709
Ref: multiprocessing-Footnote-2351764
Ref: multiprocessing-Footnote-3351819
Ref: multiprocessing-Footnote-4351875
Ref: multiprocessing-Footnote-5351931
Node: operador351987
Ref: whatsnew/3 14 operator352086
Ref: 253352086
Ref: operador-Footnote-1352482
Node: os352538
Ref: whatsnew/3 14 os352629
Ref: 256352629
Ref: os-Footnote-1353338
Ref: os-Footnote-2353394
Ref: os-Footnote-3353450
Node: os path353506
Ref: whatsnew/3 14 os-path353596
Ref: 260353596
Ref: os path-Footnote-1353987
Node: pathlib354042
Ref: whatsnew/3 14 pathlib354133
Ref: 264354133
Ref: pathlib-Footnote-1355157
Ref: pathlib-Footnote-2355212
Node: pdb355268
Ref: whatsnew/3 14 pdb355358
Ref: 26e355358
Ref: pdb-Footnote-1358699
Ref: pdb-Footnote-2358755
Ref: pdb-Footnote-3358811
Ref: pdb-Footnote-4358867
Ref: pdb-Footnote-5358923
Ref: pdb-Footnote-6358979
Ref: pdb-Footnote-7359035
Ref: pdb-Footnote-8359091
Ref: pdb-Footnote-9359147
Ref: pdb-Footnote-10359203
Node: pickle359260
Ref: whatsnew/3 14 pickle359351
Ref: 279359351
Ref: pickle-Footnote-1359734
Node: platform359790
Ref: whatsnew/3 14 platform359883
Ref: 27b359883
Ref: platform-Footnote-1360129
Node: pydoc360185
Ref: whatsnew/3 14 pydoc360274
Ref: 27d360274
Ref: pydoc-Footnote-1360523
Node: re360579
Ref: whatsnew/3 14 re360666
Ref: 27e360666
Ref: re-Footnote-1361251
Ref: re-Footnote-2361307
Node: socket361363
Ref: whatsnew/3 14 socket361448
Ref: 27f361448
Ref: socket-Footnote-1362766
Ref: socket-Footnote-2362822
Ref: socket-Footnote-3362878
Ref: socket-Footnote-4362933
Ref: socket-Footnote-5362989
Ref: socket-Footnote-6363044
Ref: socket-Footnote-7363100
Ref: socket-Footnote-8363156
Node: ssl363212
Ref: whatsnew/3 14 ssl363301
Ref: 284363301
Ref: ssl-Footnote-1363571
Node: struct363627
Ref: whatsnew/3 14 struct363718
Ref: 286363718
Ref: struct-Footnote-1364012
Node: symtable364068
Ref: whatsnew/3 14 symtable364159
Ref: 287364159
Ref: symtable-Footnote-1364461
Node: sys364517
Ref: whatsnew/3 14 sys364616
Ref: 28c364616
Ref: sys-Footnote-1365940
Ref: sys-Footnote-2365996
Ref: sys-Footnote-3366052
Ref: sys-Footnote-4366108
Ref: sys-Footnote-5366164
Node: sys monitoring366220
Ref: whatsnew/3 14 sys-monitoring366320
Ref: 293366320
Ref: sys monitoring-Footnote-1366605
Node: sysconfig366661
Ref: whatsnew/3 14 sysconfig366765
Ref: 296366765
Ref: sysconfig-Footnote-1366964
Node: tarfile367020
Ref: whatsnew/3 14 tarfile367119
Ref: 298367119
Ref: tarfile-Footnote-1368267
Ref: tarfile-Footnote-2368323
Ref: tarfile-Footnote-3368378
Ref: tarfile-Footnote-4368434
Ref: tarfile-Footnote-5368490
Ref: tarfile-Footnote-6368545
Ref: tarfile-Footnote-7368601
Ref: tarfile-Footnote-8368657
Node: threading368712
Ref: whatsnew/3 14 threading368809
Ref: 29e368809
Ref: threading-Footnote-1369080
Node: tkinter369135
Ref: whatsnew/3 14 tkinter369231
Ref: 2a0369231
Ref: tkinter-Footnote-1369623
Ref: tkinter-Footnote-2369679
Node: turtle369735
Ref: whatsnew/3 14 turtle369827
Ref: 2a1369827
Ref: turtle-Footnote-1370094
Node: tipos370150
Ref: whatsnew/3 14 types370241
Ref: 2a5370241
Ref: tipos-Footnote-1370499
Node: typing370555
Ref: whatsnew/3 14 typing370651
Ref: 2a9370651
Ref: whatsnew/3 14 whatsnew314-typing-union370684
Ref: 2a8370684
Ref: typing-Footnote-1373757
Ref: typing-Footnote-2373799
Node: unicodedata373855
Ref: whatsnew/3 14 unicodedata373954
Ref: 2ae373954
Node: unittest374064
Ref: whatsnew/3 14 unittest374163
Ref: 2af374163
Ref: whatsnew/3 14 whatsnew314-color-unittest374200
Ref: 2b0374200
Ref: unittest-Footnote-1375449
Ref: unittest-Footnote-2375505
Ref: unittest-Footnote-3375560
Node: urllib375615
Ref: whatsnew/3 14 urllib375707
Ref: 2bb375707
Ref: urllib-Footnote-1377400
Ref: urllib-Footnote-2377459
Ref: urllib-Footnote-3377515
Node: uuid377571
Ref: whatsnew/3 14 uuid377665
Ref: 2c0377665
Ref: uuid-Footnote-1378306
Ref: uuid-Footnote-2378365
Ref: uuid-Footnote-3378420
Ref: uuid-Footnote-4378479
Ref: uuid-Footnote-5378535
Node: webbrowser378591
Ref: whatsnew/3 14 webbrowser378686
Ref: 2c7378686
Node: zipfile379045
Ref: whatsnew/3 14 zipfile379127
Ref: 2c8379127
Ref: zipfile-Footnote-1379621
Ref: zipfile-Footnote-2379677
Node: Otimizações379732
Ref: whatsnew/3 14 optimizations379860
Ref: 2cc379860
Ref: Otimizações-Footnote-1381119
Node: asyncio<2>381175
Ref: whatsnew/3 14 id2381250
Ref: 2d0381250
Ref: asyncio<2>-Footnote-1382046
Ref: asyncio<2>-Footnote-2382102
Node: base64382158
Ref: whatsnew/3 14 base64382245
Ref: 2d1382245
Ref: base64-Footnote-1382476
Node: bdb382532
Ref: whatsnew/3 14 bdb382619
Ref: 2d3382619
Ref: bdb-Footnote-1382944
Node: difflib<2>383000
Ref: whatsnew/3 14 id3383083
Ref: 2d5383083
Ref: difflib<2>-Footnote-1383310
Node: gc383366
Ref: whatsnew/3 14 gc383451
Ref: 2d7383451
Ref: gc-Footnote-1385135
Node: io<2>385191
Ref: whatsnew/3 14 id4385276
Ref: 2dc385276
Ref: io<2>-Footnote-1385594
Ref: io<2>-Footnote-2385650
Node: pathlib<2>385705
Ref: whatsnew/3 14 id5385794
Ref: 2dd385794
Ref: pathlib<2>-Footnote-1386066
Node: pdb<2>386122
Ref: whatsnew/3 14 id6386213
Ref: 2df386213
Ref: pdb<2>-Footnote-1386729
Node: uuid<2>386785
Ref: whatsnew/3 14 id7386870
Ref: 2e2386870
Ref: uuid<2>-Footnote-1387343
Ref: uuid<2>-Footnote-2387399
Node: zlib387455
Ref: whatsnew/3 14 zlib387525
Ref: 2e6387525
Ref: zlib-Footnote-1388206
Ref: zlib-Footnote-2388249
Node: Removidos388304
Ref: whatsnew/3 14 removed388427
Ref: 2e7388427
Node: argparse<2>388665
Ref: whatsnew/3 14 id8388737
Ref: 2e8388737
Ref: argparse<2>-Footnote-1389582
Ref: argparse<2>-Footnote-2389638
Node: ast<2>389694
Ref: whatsnew/3 14 id9389785
Ref: 2ec389785
Ref: ast<2>-Footnote-1390934
Ref: ast<2>-Footnote-2390990
Node: asyncio<3>391046
Ref: whatsnew/3 14 id10391131
Ref: 2ef391131
Ref: asyncio<3>-Footnote-1394014
Ref: asyncio<3>-Footnote-2394070
Node: email394126
Ref: whatsnew/3 14 email394218
Ref: 2f4394218
Ref: email-Footnote-1394478
Node: importlib abc394534
Ref: whatsnew/3 14 importlib-abc394625
Ref: 2f6394625
Ref: importlib abc-Footnote-1395058
Node: itertools395113
Ref: whatsnew/3 14 itertools395209
Ref: 2f9395209
Ref: itertools-Footnote-1395554
Node: pathlib<3>395610
Ref: whatsnew/3 14 id11395700
Ref: 2fa395700
Ref: pathlib<3>-Footnote-1396250
Ref: pathlib<3>-Footnote-2396305
Node: pkgutil396360
Ref: whatsnew/3 14 pkgutil396444
Ref: 2fd396444
Ref: pkgutil-Footnote-1396690
Node: pty396745
Ref: whatsnew/3 14 pty396826
Ref: 2fe396826
Ref: pty-Footnote-1397114
Node: sqlite3397170
Ref: whatsnew/3 14 sqlite3397253
Ref: 300397253
Ref: sqlite3-Footnote-1397867
Ref: sqlite3-Footnote-2397923
Ref: sqlite3-Footnote-3397979
Node: urllib<2>398035
Ref: whatsnew/3 14 id12398106
Ref: 304398106
Ref: urllib<2>-Footnote-1398842
Ref: urllib<2>-Footnote-2398898
Node: Descontinuados398953
Ref: whatsnew/3 14 deprecated399098
Ref: 308399098
Node: Novas descontinuações399510
Ref: whatsnew/3 14 new-deprecations399626
Ref: 309399626
Ref: Novas descontinuações-Footnote-1406300
Ref: Novas descontinuações-Footnote-2406356
Ref: Novas descontinuações-Footnote-3406412
Ref: Novas descontinuações-Footnote-4406467
Ref: Novas descontinuações-Footnote-5406523
Ref: Novas descontinuações-Footnote-6406579
Ref: Novas descontinuações-Footnote-7406635
Ref: Novas descontinuações-Footnote-8406691
Ref: Novas descontinuações-Footnote-9406747
Ref: Novas descontinuações-Footnote-10406803
Ref: Novas descontinuações-Footnote-11406860
Ref: Novas descontinuações-Footnote-12406916
Ref: Novas descontinuações-Footnote-13406973
Ref: Novas descontinuações-Footnote-14407030
Ref: Novas descontinuações-Footnote-15407087
Ref: Novas descontinuações-Footnote-16407130
Ref: Novas descontinuações-Footnote-17407187
Ref: Novas descontinuações-Footnote-18407244
Ref: Novas descontinuações-Footnote-19407301
Ref: Novas descontinuações-Footnote-20407358
Node: Remoção pendente no Python 3 15407415
Ref: whatsnew/3 14 pending-removal-in-python-3-15407573
Ref: 31e407573
Ref: Remoção pendente no Python 3 15-Footnote-1412383
Ref: Remoção pendente no Python 3 15-Footnote-2412438
Ref: Remoção pendente no Python 3 15-Footnote-3412493
Ref: Remoção pendente no Python 3 15-Footnote-4412548
Ref: Remoção pendente no Python 3 15-Footnote-5412604
Ref: Remoção pendente no Python 3 15-Footnote-6412646
Ref: Remoção pendente no Python 3 15-Footnote-7412702
Node: Remoção pendente no Python 3 16412758
Ref: whatsnew/3 14 pending-removal-in-python-3-16412926
Ref: 338412926
Ref: Remoção pendente no Python 3 16-Footnote-1417439
Ref: Remoção pendente no Python 3 16-Footnote-2417495
Ref: Remoção pendente no Python 3 16-Footnote-3417551
Ref: Remoção pendente no Python 3 16-Footnote-4417607
Node: Remoção pendente no Python 3 17417662
Ref: whatsnew/3 14 pending-removal-in-python-3-17417830
Ref: 33f417830
Ref: Remoção pendente no Python 3 17-Footnote-1420971
Ref: Remoção pendente no Python 3 17-Footnote-2421029
Ref: Remoção pendente no Python 3 17-Footnote-3421084
Ref: Remoção pendente no Python 3 17-Footnote-4421142
Node: Remoção pendente no Python 3 19421197
Ref: whatsnew/3 14 pending-removal-in-python-3-19421370
Ref: 344421370
Node: Remoção pendente em versões futuras421662
Ref: whatsnew/3 14 pending-removal-in-future-versions421793
Ref: 345421793
Ref: Remoção pendente em versões futuras-Footnote-1429443
Ref: Remoção pendente em versões futuras-Footnote-2429498
Ref: Remoção pendente em versões futuras-Footnote-3429554
Ref: Remoção pendente em versões futuras-Footnote-4429610
Ref: Remoção pendente em versões futuras-Footnote-5429666
Ref: Remoção pendente em versões futuras-Footnote-6429721
Ref: Remoção pendente em versões futuras-Footnote-7429776
Node: Alterações de bytecode do CPython429832
Ref: whatsnew/3 14 cpython-bytecode-changes429989
Ref: 362429989
Ref: Alterações de bytecode do CPython-Footnote-1431974
Ref: Alterações de bytecode do CPython-Footnote-2432030
Ref: Alterações de bytecode do CPython-Footnote-3432086
Ref: Alterações de bytecode do CPython-Footnote-4432142
Ref: Alterações de bytecode do CPython-Footnote-5432198
Ref: Alterações de bytecode do CPython-Footnote-6432254
Ref: Alterações de bytecode do CPython-Footnote-7432310
Node: Pseudoinstruções432366
Ref: whatsnew/3 14 pseudo-instructions432456
Ref: 36e432456
Ref: Pseudoinstruções-Footnote-1434160
Ref: Pseudoinstruções-Footnote-2434216
Ref: Pseudoinstruções-Footnote-3434272
Ref: Pseudoinstruções-Footnote-4434328
Ref: Pseudoinstruções-Footnote-5434384
Ref: Pseudoinstruções-Footnote-6434440
Ref: Pseudoinstruções-Footnote-7434496
Node: Alterações na API C434552
Ref: whatsnew/3 14 c-api-changes434708
Ref: 374434708
Node: Python configuration C API434913
Ref: whatsnew/3 14 python-configuration-c-api435029
Ref: 375435029
Ref: whatsnew/3 14 whatsnew314-capi-config435029
Ref: 155435029
Ref: Python configuration C API-Footnote-1436430
Ref: Python configuration C API-Footnote-2436472
Ref: Python configuration C API-Footnote-3436514
Ref: Python configuration C API-Footnote-4436570
Ref: Python configuration C API-Footnote-5436612
Node: Novos recursos na API C436654
Ref: whatsnew/3 14 new-features-in-the-c-api436806
Ref: 37b436806
Ref: Novos recursos na API C-Footnote-1444343
Ref: Novos recursos na API C-Footnote-2444399
Ref: Novos recursos na API C-Footnote-3444455
Ref: Novos recursos na API C-Footnote-4444511
Ref: Novos recursos na API C-Footnote-5444567
Ref: Novos recursos na API C-Footnote-6444623
Ref: Novos recursos na API C-Footnote-7444679
Ref: Novos recursos na API C-Footnote-8444735
Ref: Novos recursos na API C-Footnote-9444791
Ref: Novos recursos na API C-Footnote-10444847
Ref: Novos recursos na API C-Footnote-11444904
Ref: Novos recursos na API C-Footnote-12444961
Ref: Novos recursos na API C-Footnote-13445004
Ref: Novos recursos na API C-Footnote-14445061
Ref: Novos recursos na API C-Footnote-15445118
Ref: Novos recursos na API C-Footnote-16445175
Ref: Novos recursos na API C-Footnote-17445232
Ref: Novos recursos na API C-Footnote-18445289
Ref: Novos recursos na API C-Footnote-19445346
Ref: Novos recursos na API C-Footnote-20445403
Ref: Novos recursos na API C-Footnote-21445460
Ref: Novos recursos na API C-Footnote-22445526
Ref: Novos recursos na API C-Footnote-23445583
Ref: Novos recursos na API C-Footnote-24445626
Ref: Novos recursos na API C-Footnote-25445683
Node: Mudanças na API C limitada445740
Ref: whatsnew/3 14 limited-c-api-changes445882
Ref: 3c5445882
Ref: Mudanças na API C limitada-Footnote-1446561
Ref: Mudanças na API C limitada-Footnote-2446617
Ref: Mudanças na API C limitada-Footnote-3446673
Node: APIs C removidas446728
Ref: whatsnew/3 14 removed-c-apis446868
Ref: 3ca446868
Ref: whatsnew/3 14 whatsnew314-c-api-removed446868
Ref: 3cb446868
Ref: APIs C removidas-Footnote-1447962
Ref: APIs C removidas-Footnote-2448018
Ref: APIs C removidas-Footnote-3448074
Ref: APIs C removidas-Footnote-4448116
Ref: APIs C removidas-Footnote-5448172
Ref: APIs C removidas-Footnote-6448228
Node: APIs C descontinuadas448284
Ref: whatsnew/3 14 deprecated-c-apis448388
Ref: 3d0448388
Ref: whatsnew/3 14 whatsnew314-c-api-deprecated448388
Ref: 3d1448388
Ref: APIs C descontinuadas-Footnote-1450180
Ref: APIs C descontinuadas-Footnote-2450236
Ref: APIs C descontinuadas-Footnote-3450292
Ref: APIs C descontinuadas-Footnote-4450347
Node: Remoção pendente no Python 3 15<2>450403
Ref: whatsnew/3 14 id13450542
Ref: 3d7450542
Ref: Remoção pendente no Python 3 15<2>-Footnote-1456954
Ref: Remoção pendente no Python 3 15<2>-Footnote-2457007
Node: Remoção pendente no Python 3 16<2>457060
Ref: whatsnew/3 14 id14457241
Ref: 41c457241
Node: Remoção pendente no Python 3 18457371
Ref: whatsnew/3 14 pending-removal-in-python-3-18457557
Ref: 41d457557
Ref: Remoção pendente no Python 3 18-Footnote-1460277
Ref: Remoção pendente no Python 3 18-Footnote-2460330
Node: Remoção pendente em versões futuras<2>460386
Ref: whatsnew/3 14 id15460527
Ref: 423460527
Node: Build changes462283
Ref: whatsnew/3 14 build-changes462431
Ref: 43f462431
Ref: whatsnew/3 14 whatsnew314-build-changes462431
Ref: 156462431
Ref: Build changes-Footnote-1465144
Ref: Build changes-Footnote-2465186
Ref: Build changes-Footnote-3465235
Ref: Build changes-Footnote-4465316
Ref: Build changes-Footnote-5465372
Ref: Build changes-Footnote-6465428
Ref: Build changes-Footnote-7465484
Ref: Build changes-Footnote-8465534
Ref: Build changes-Footnote-9465590
Ref: Build changes-Footnote-10465632
Ref: Build changes-Footnote-11465689
Ref: Build changes-Footnote-12465746
Ref: Build changes-Footnote-13465803
Ref: Build changes-Footnote-14465859
Ref: Build changes-Footnote-15465916
Node: build-details json465973
Ref: whatsnew/3 14 build-details-json466085
Ref: 444466085
Ref: whatsnew/3 14 whatsnew314-build-details466085
Ref: 445466085
Ref: build-details json-Footnote-1466945
Node: Descontinuação de assinaturas PGP466987
Ref: whatsnew/3 14 discontinuation-of-pgp-signatures467152
Ref: 447467152
Ref: whatsnew/3 14 whatsnew314-no-more-pgp467152
Ref: 158467152
Ref: Descontinuação de assinaturas PGP-Footnote-1467638
Ref: Descontinuação de assinaturas PGP-Footnote-2467698
Ref: Descontinuação de assinaturas PGP-Footnote-3467732
Node: Free-threaded Python is officially supported467774
Ref: whatsnew/3 14 free-threaded-python-is-officially-supported467983
Ref: 448467983
Ref: whatsnew/3 14 whatsnew314-free-threaded-now-supported467983
Ref: 157467983
Ref: Free-threaded Python is officially supported-Footnote-1469094
Ref: Free-threaded Python is officially supported-Footnote-2469137
Ref: Free-threaded Python is officially supported-Footnote-3469180
Ref: Free-threaded Python is officially supported-Footnote-4469222
Node: Versões binárias para o compilador experimental just-in-time469269
Ref: whatsnew/3 14 binary-releases-for-the-experimental-just-in-time-compiler469434
Ref: 449469434
Ref: whatsnew/3 14 whatsnew314-jit-compiler469434
Ref: 159469434
Ref: Versões binárias para o compilador experimental just-in-time-Footnote-1471157
Node: Portando para o Python 3 14471199
Ref: whatsnew/3 14 porting-to-python-3-14471317
Ref: 14b471317
Node: Alterações na API Python471699
Ref: whatsnew/3 14 changes-in-the-python-api471840
Ref: 44e471840
Ref: Alterações na API Python-Footnote-1474357
Ref: Alterações na API Python-Footnote-2474413
Ref: Alterações na API Python-Footnote-3474468
Node: Changes in annotations PEP 649 and PEP 749474524
Ref: whatsnew/3 14 changes-in-annotations-pep-649-and-pep-749474698
Ref: 452474698
Ref: whatsnew/3 14 whatsnew314-porting-annotations474698
Ref: 161474698
Node: Implicações para o código anotado475278
Ref: whatsnew/3 14 implications-for-annotated-code475448
Ref: 453475448
Node: Implicações para leitores de __annotations__476361
Ref: whatsnew/3 14 implications-for-readers-of-annotations476562
Ref: 454476562
Ref: Implicações para leitores de __annotations__-Footnote-1477421
Node: Mudanças relacionadas477473
Ref: whatsnew/3 14 related-changes477672
Ref: 457477672
Node: from __future__ import annotations478772
Ref: whatsnew/3 14 from-future-import-annotations478916
Ref: 459478916
Ref: from __future__ import annotations-Footnote-1479585
Node: Alterações na API C<2>479627
Ref: whatsnew/3 14 changes-in-the-c-api479766
Ref: 45b479766
Ref: whatsnew/3 14 whatsnew314-refcount480862
Ref: 2cf480862
Ref: Alterações na API C<2>-Footnote-1483193
Ref: Alterações na API C<2>-Footnote-2483249
Ref: Alterações na API C<2>-Footnote-3483305
Node: O que há de novo no Python 3 13483358
Ref: whatsnew/3 13 doc483536
Ref: 461483536
Ref: whatsnew/3 13 no-color483536
Ref: 462483536
Ref: whatsnew/3 13 what-s-new-in-python-3-13483536
Ref: 463483536
Ref: O que há de novo no Python 3 13-Footnote-1484593
Node: Resumo – Destaques da versão<2>484635
Ref: whatsnew/3 13 summary-release-highlights484771
Ref: 464484771
Ref: Resumo – Destaques da versão<2>-Footnote-1492358
Ref: Resumo – Destaques da versão<2>-Footnote-2492400
Ref: Resumo – Destaques da versão<2>-Footnote-3492442
Ref: Resumo – Destaques da versão<2>-Footnote-4492484
Ref: Resumo – Destaques da versão<2>-Footnote-5492526
Ref: Resumo – Destaques da versão<2>-Footnote-6492568
Ref: Resumo – Destaques da versão<2>-Footnote-7492610
Ref: Resumo – Destaques da versão<2>-Footnote-8492640
Ref: Resumo – Destaques da versão<2>-Footnote-9492680
Ref: Resumo – Destaques da versão<2>-Footnote-10492722
Ref: Resumo – Destaques da versão<2>-Footnote-11492765
Ref: Resumo – Destaques da versão<2>-Footnote-12492808
Ref: Resumo – Destaques da versão<2>-Footnote-13492851
Ref: Resumo – Destaques da versão<2>-Footnote-14492894
Ref: Resumo – Destaques da versão<2>-Footnote-15492937
Ref: Resumo – Destaques da versão<2>-Footnote-16492987
Ref: Resumo – Destaques da versão<2>-Footnote-17493030
Ref: Resumo – Destaques da versão<2>-Footnote-18493080
Ref: Resumo – Destaques da versão<2>-Footnote-19493130
Node: Novas funcionalidades<2>493173
Ref: whatsnew/3 13 new-features493347
Ref: 489493347
Node: Um melhor interpretador interativo493780
Ref: whatsnew/3 13 a-better-interactive-interpreter493915
Ref: 48a493915
Ref: whatsnew/3 13 whatsnew313-better-interactive-interpreter493915
Ref: 465493915
Ref: Um melhor interpretador interativo-Footnote-1495334
Ref: Um melhor interpretador interativo-Footnote-2495360
Node: Mensagens de erro melhoradas<2>495416
Ref: whatsnew/3 13 improved-error-messages495586
Ref: 48f495586
Ref: whatsnew/3 13 whatsnew313-improved-error-messages495586
Ref: 46c495586
Ref: Mensagens de erro melhoradas<2>-Footnote-1498069
Ref: Mensagens de erro melhoradas<2>-Footnote-2498099
Ref: Mensagens de erro melhoradas<2>-Footnote-3498132
Ref: Mensagens de erro melhoradas<2>-Footnote-4498188
Ref: Mensagens de erro melhoradas<2>-Footnote-5498243
Node: CPython com threads livres498299
Ref: whatsnew/3 13 free-threaded-cpython498478
Ref: 490498478
Ref: whatsnew/3 13 whatsnew313-free-threaded-cpython498478
Ref: 466498478
Ref: CPython com threads livres-Footnote-1501878
Ref: CPython com threads livres-Footnote-2501920
Node: Um compilador just-in-time JIT experimental501973
Ref: whatsnew/3 13 an-experimental-just-in-time-jit-compiler502167
Ref: 498502167
Ref: whatsnew/3 13 whatsnew313-jit-compiler502167
Ref: 467502167
Ref: Um compilador just-in-time JIT experimental-Footnote-1505043
Ref: Um compilador just-in-time JIT experimental-Footnote-2505115
Node: Definidas semânticas de mutação para locals505157
Ref: whatsnew/3 13 defined-mutation-semantics-for-locals505357
Ref: 49a505357
Ref: whatsnew/3 13 whatsnew313-locals-semantics505357
Ref: 469505357
Ref: Definidas semânticas de mutação para locals-Footnote-1508395
Ref: Definidas semânticas de mutação para locals-Footnote-2508437
Ref: Definidas semânticas de mutação para locals-Footnote-3508479
Node: Suporte para plataformas móveis508534
Ref: whatsnew/3 13 support-for-mobile-platforms508682
Ref: 4a2508682
Ref: whatsnew/3 13 whatsnew313-platform-support508682
Ref: 487508682
Ref: Suporte para plataformas móveis-Footnote-1509835
Ref: Suporte para plataformas móveis-Footnote-2509877
Ref: Suporte para plataformas móveis-Footnote-3509919
Ref: Suporte para plataformas móveis-Footnote-4509975
Ref: Suporte para plataformas móveis-Footnote-5510017
Ref: Suporte para plataformas móveis-Footnote-6510059
Ref: Suporte para plataformas móveis-Footnote-7510115
Ref: Suporte para plataformas móveis-Footnote-8510157
Node: Outras mudanças na linguagem510199
Ref: whatsnew/3 13 other-language-changes510356
Ref: 4a3510356
Ref: Outras mudanças na linguagem-Footnote-1515570
Ref: Outras mudanças na linguagem-Footnote-2515625
Ref: Outras mudanças na linguagem-Footnote-3515681
Ref: Outras mudanças na linguagem-Footnote-4515737
Ref: Outras mudanças na linguagem-Footnote-5515793
Ref: Outras mudanças na linguagem-Footnote-6515849
Ref: Outras mudanças na linguagem-Footnote-7515905
Ref: Outras mudanças na linguagem-Footnote-8515960
Ref: Outras mudanças na linguagem-Footnote-9516016
Ref: Outras mudanças na linguagem-Footnote-10516071
Ref: Outras mudanças na linguagem-Footnote-11516128
Ref: Outras mudanças na linguagem-Footnote-12516185
Ref: Outras mudanças na linguagem-Footnote-13516242
Ref: Outras mudanças na linguagem-Footnote-14516299
Ref: Outras mudanças na linguagem-Footnote-15516356
Ref: Outras mudanças na linguagem-Footnote-16516413
Ref: Outras mudanças na linguagem-Footnote-17516470
Ref: Outras mudanças na linguagem-Footnote-18516526
Node: Novos módulos<2>516583
Ref: whatsnew/3 13 new-modules516738
Ref: 4b3516738
Ref: Novos módulos<2>-Footnote-1516969
Node: Módulos melhorados<2>517025
Ref: whatsnew/3 13 improved-modules517167
Ref: 4b4517167
Node: argparse<3>518093
Ref: whatsnew/3 13 argparse518177
Ref: 4b5518177
Ref: argparse<3>-Footnote-1518516
Node: array518571
Ref: whatsnew/3 13 array518670
Ref: 4b7518670
Ref: array-Footnote-1519126
Ref: array-Footnote-2519181
Node: ast<3>519237
Ref: whatsnew/3 13 ast519335
Ref: 4bb519335
Ref: ast<3>-Footnote-1520997
Ref: ast<3>-Footnote-2521053
Ref: ast<3>-Footnote-3521109
Ref: ast<3>-Footnote-4521165
Node: asyncio<4>521221
Ref: whatsnew/3 13 asyncio521323
Ref: 4bf521323
Ref: asyncio<4>-Footnote-1525467
Ref: asyncio<4>-Footnote-2525522
Ref: asyncio<4>-Footnote-3525578
Ref: asyncio<4>-Footnote-4525634
Ref: asyncio<4>-Footnote-5525690
Ref: asyncio<4>-Footnote-6525746
Ref: asyncio<4>-Footnote-7525801
Ref: asyncio<4>-Footnote-8525857
Ref: asyncio<4>-Footnote-9525913
Node: base64<2>525969
Ref: whatsnew/3 13 base64526075
Ref: 4d2526075
Ref: base64<2>-Footnote-1526395
Ref: base64<2>-Footnote-2526435
Node: compileall526490
Ref: whatsnew/3 13 compileall526607
Ref: 4d3526607
Ref: compileall-Footnote-1526909
Node: concurrent futures<2>526965
Ref: whatsnew/3 13 concurrent-futures527088
Ref: 4d6527088
Ref: concurrent futures<2>-Footnote-1527406
Node: configparser<2>527462
Ref: whatsnew/3 13 configparser527579
Ref: 4d7527579
Ref: configparser<2>-Footnote-1527930
Node: copy527985
Ref: whatsnew/3 13 copy528090
Ref: 4d9528090
Ref: copy-Footnote-1529053
Node: ctypes<2>529109
Ref: whatsnew/3 13 ctypes529202
Ref: 4e1529202
Ref: ctypes<2>-Footnote-1530220
Ref: ctypes<2>-Footnote-2530276
Node: dbm530332
Ref: whatsnew/3 13 dbm530427
Ref: 4e3530427
Ref: dbm-Footnote-1530908
Ref: dbm-Footnote-2530964
Node: dis<2>531020
Ref: whatsnew/3 13 dis531113
Ref: 4e4531113
Ref: dis<2>-Footnote-1531929
Ref: dis<2>-Footnote-2531985
Node: doctest532041
Ref: whatsnew/3 13 doctest532139
Ref: 4e7532139
Ref: whatsnew/3 13 whatsnew313-doctest532139
Ref: 46e532139
Ref: doctest-Footnote-1532813
Ref: doctest-Footnote-2532843
Ref: doctest-Footnote-3532876
Ref: doctest-Footnote-4532932
Node: email<2>532988
Ref: whatsnew/3 13 email533084
Ref: 4eb533084
Ref: email<2>-Footnote-1534346
Ref: email<2>-Footnote-2534402
Ref: email<2>-Footnote-3534458
Node: enum534514
Ref: whatsnew/3 13 enum534615
Ref: 4ef534615
Node: fractions<2>534756
Ref: whatsnew/3 13 fractions534853
Ref: 4f2534853
Ref: fractions<2>-Footnote-1535230
Node: glob535286
Ref: whatsnew/3 13 glob535388
Ref: 4f4535388
Ref: glob-Footnote-1535661
Node: importlib535716
Ref: whatsnew/3 13 importlib535811
Ref: 4f6535811
Ref: importlib-Footnote-1536770
Ref: importlib-Footnote-2536826
Node: io<3>536882
Ref: whatsnew/3 13 io536982
Ref: 4fe536982
Ref: io<3>-Footnote-1537477
Node: ipaddress537532
Ref: whatsnew/3 13 ipaddress537635
Ref: 504537635
Ref: ipaddress-Footnote-1538126
Ref: ipaddress-Footnote-2538182
Node: itertools<2>538238
Ref: whatsnew/3 13 itertools538343
Ref: 50a538343
Ref: itertools<2>-Footnote-1538651
Node: marshal538707
Ref: whatsnew/3 13 marshal538810
Ref: 50c538810
Ref: marshal-Footnote-1539163
Node: math<2>539219
Ref: whatsnew/3 13 math539322
Ref: 50d539322
Ref: math<2>-Footnote-1539856
Node: mimetypes<2>539911
Ref: whatsnew/3 13 mimetypes540011
Ref: 50f540011
Ref: mimetypes<2>-Footnote-1540370
Node: mmap540425
Ref: whatsnew/3 13 mmap540536
Ref: 512540536
Ref: mmap-Footnote-1541446
Ref: mmap-Footnote-2541502
Ref: mmap-Footnote-3541558
Node: multiprocessing<2>541613
Ref: whatsnew/3 13 multiprocessing541717
Ref: 516541717
Ref: multiprocessing<2>-Footnote-1542031
Node: os<2>542087
Ref: whatsnew/3 13 os542197
Ref: 517542197
Ref: os<2>-Footnote-1544821
Ref: os<2>-Footnote-2544877
Ref: os<2>-Footnote-3544933
Ref: os<2>-Footnote-4544987
Ref: os<2>-Footnote-5545043
Ref: os<2>-Footnote-6545098
Ref: os<2>-Footnote-7545154
Ref: os<2>-Footnote-8545209
Ref: os<2>-Footnote-9545265
Ref: os<2>-Footnote-10545321
Node: os path<2>545378
Ref: whatsnew/3 13 os-path545480
Ref: 52a545480
Ref: os path<2>-Footnote-1546161
Ref: os path<2>-Footnote-2546216
Ref: os path<2>-Footnote-3546271
Node: pathlib<4>546326
Ref: whatsnew/3 13 pathlib546429
Ref: 52c546429
Ref: pathlib<4>-Footnote-1548065
Ref: pathlib<4>-Footnote-2548120
Ref: pathlib<4>-Footnote-3548176
Ref: pathlib<4>-Footnote-4548231
Ref: pathlib<4>-Footnote-5548286
Ref: pathlib<4>-Footnote-6548341
Ref: pathlib<4>-Footnote-7548397
Node: pdb<3>548453
Ref: whatsnew/3 13 pdb548551
Ref: 537548551
Ref: pdb<3>-Footnote-1549751
Ref: pdb<3>-Footnote-2549807
Ref: pdb<3>-Footnote-3549863
Ref: pdb<3>-Footnote-4549919
Ref: pdb<3>-Footnote-5549975
Node: queue550031
Ref: whatsnew/3 13 queue550125
Ref: 53b550125
Ref: queue-Footnote-1550375
Node: random550431
Ref: whatsnew/3 13 random550524
Ref: 53e550524
Ref: random-Footnote-1550714
Node: re<2>550770
Ref: whatsnew/3 13 re550864
Ref: 53f550864
Node: shutil551052
Ref: whatsnew/3 13 shutil551144
Ref: 541551144
Ref: shutil-Footnote-1551373
Node: site551428
Ref: whatsnew/3 13 site551525
Ref: 543551525
Ref: site-Footnote-1551822
Node: sqlite3<2>551878
Ref: whatsnew/3 13 sqlite3551975
Ref: 545551975
Ref: sqlite3<2>-Footnote-1552452
Ref: sqlite3<2>-Footnote-2552508
Node: ssl<2>552563
Ref: whatsnew/3 13 ssl552666
Ref: 54a552666
Ref: ssl<2>-Footnote-1553372
Ref: ssl<2>-Footnote-2553431
Node: statistics553487
Ref: whatsnew/3 13 statistics553590
Ref: 54b553590
Ref: statistics-Footnote-1554150
Ref: statistics-Footnote-2554206
Node: subprocess554262
Ref: whatsnew/3 13 subprocess554365
Ref: 54e554365
Ref: whatsnew/3 13 whatsnew313-subprocess554365
Ref: 54f554365
Ref: subprocess-Footnote-1555389
Node: sys<2>555445
Ref: whatsnew/3 13 sys555546
Ref: 551555546
Ref: sys<2>-Footnote-1555859
Node: tempfile555914
Ref: whatsnew/3 13 tempfile556009
Ref: 553556009
Ref: tempfile-Footnote-1556375
Ref: tempfile-Footnote-2556430
Node: time556486
Ref: whatsnew/3 13 time556585
Ref: 554556585
Ref: time-Footnote-1557250
Ref: time-Footnote-2557305
Node: tkinter<2>557360
Ref: whatsnew/3 13 tkinter557460
Ref: 557557460
Ref: tkinter<2>-Footnote-1559901
Ref: tkinter<2>-Footnote-2559956
Ref: tkinter<2>-Footnote-3560011
Ref: tkinter<2>-Footnote-4560066
Ref: tkinter<2>-Footnote-5560121
Ref: tkinter<2>-Footnote-6560176
Ref: tkinter<2>-Footnote-7560231
Ref: tkinter<2>-Footnote-8560287
Ref: tkinter<2>-Footnote-9560343
Node: traceback560399
Ref: whatsnew/3 13 traceback560500
Ref: 55a560500
Ref: traceback-Footnote-1561272
Ref: traceback-Footnote-2561328
Node: types561384
Ref: whatsnew/3 13 types561484
Ref: 560561484
Ref: types-Footnote-1561834
Node: typing<2>561890
Ref: whatsnew/3 13 typing561995
Ref: 561561995
Ref: typing<2>-Footnote-1563125
Ref: typing<2>-Footnote-2563167
Ref: typing<2>-Footnote-3563209
Ref: typing<2>-Footnote-4563265
Ref: typing<2>-Footnote-5563321
Ref: typing<2>-Footnote-6563377
Node: unicodedata<2>563432
Ref: whatsnew/3 13 unicodedata563536
Ref: 568563536
Ref: unicodedata<2>-Footnote-1563736
Ref: unicodedata<2>-Footnote-2563792
Node: venv563848
Ref: whatsnew/3 13 venv563951
Ref: 569563951
Ref: venv-Footnote-1564532
Node: warnings564588
Ref: whatsnew/3 13 warnings564680
Ref: 56c564680
Ref: warnings-Footnote-1565188
Ref: warnings-Footnote-2565230
Node: xml565286
Ref: whatsnew/3 13 xml565383
Ref: 56e565383
Ref: xml-Footnote-1566184
Ref: xml-Footnote-2566240
Ref: xml-Footnote-3566296
Node: zipimport566351
Ref: whatsnew/3 13 zipimport566431
Ref: 574566431
Ref: zipimport-Footnote-1566661
Ref: zipimport-Footnote-2566723
Node: Otimizações<2>566778
Ref: whatsnew/3 13 optimizations566928
Ref: 575566928
Ref: Otimizações<2>-Footnote-1568208
Ref: Otimizações<2>-Footnote-2568264
Ref: Otimizações<2>-Footnote-3568320
Node: Módulos e APIs removidas568376
Ref: whatsnew/3 13 removed-modules-and-apis568530
Ref: 577568530
Node: PEP 594 remove “baterias descarregadas” da biblioteca padrão569055
Ref: whatsnew/3 13 pep-594-remove-dead-batteries-from-the-standard-library569195
Ref: 578569195
Ref: whatsnew/3 13 whatsnew313-pep594569195
Ref: 46a569195
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-1574578
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-2574620
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-3574668
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-4574714
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-5574763
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-6574807
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-7574851
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-8574898
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-9574947
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-10574988
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-11575035
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-12575082
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-13575125
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-14575173
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-15575223
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-16575287
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-17575331
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-18575376
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-19575424
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-20575475
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-21575527
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-22575569
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-23575621
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-24575663
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-25575713
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-26575757
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-27575802
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-28575850
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-29575901
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-30575947
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-31575997
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-32576043
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-33576087
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-34576141
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-35576188
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-36576239
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-37576296
Node: 2to3576353
Ref: whatsnew/3 13 to3576511
Ref: 57c576511
Ref: 2to3-Footnote-1576729
Node: embutidos576785
Ref: whatsnew/3 13 builtins576893
Ref: 57d576893
Ref: embutidos-Footnote-1577653
Ref: embutidos-Footnote-2577708
Ref: embutidos-Footnote-3577763
Node: configparser<3>577818
Ref: whatsnew/3 13 id3577940
Ref: 57f577940
Ref: configparser<3>-Footnote-1578244
Node: importlib metadata578300
Ref: whatsnew/3 13 importlib-metadata578419
Ref: 580578419
Ref: importlib metadata-Footnote-1578687
Node: locale578743
Ref: whatsnew/3 13 locale578853
Ref: 583578853
Ref: locale-Footnote-1579113
Node: opcode579169
Ref: whatsnew/3 13 opcode579269
Ref: 584579269
Ref: opcode-Footnote-1579926
Ref: opcode-Footnote-2579982
Node: optparse580038
Ref: whatsnew/3 13 optparse580142
Ref: 585580142
Ref: optparse-Footnote-1581038
Node: pathlib<5>581094
Ref: whatsnew/3 13 id4581197
Ref: 586581197
Ref: pathlib<5>-Footnote-1581500
Node: re<3>581555
Ref: whatsnew/3 13 id5581661
Ref: 587581661
Ref: re<3>-Footnote-1581939
Node: tkinter tix581995
Ref: whatsnew/3 13 tkinter-tix582100
Ref: 588582100
Ref: tkinter tix-Footnote-1582380
Node: turtle<2>582435
Ref: whatsnew/3 13 turtle582544
Ref: 589582544
Ref: turtle<2>-Footnote-1582831
Node: typing<3>582887
Ref: whatsnew/3 13 id6582996
Ref: 58a582996
Ref: typing<3>-Footnote-1583513
Ref: typing<3>-Footnote-2583568
Node: unittest<2>583624
Ref: whatsnew/3 13 unittest583733
Ref: 58b583733
Ref: unittest<2>-Footnote-1584464
Ref: unittest<2>-Footnote-2584520
Node: urllib<3>584576
Ref: whatsnew/3 13 urllib584689
Ref: 590584689
Ref: urllib<3>-Footnote-1585327
Node: webbrowser<2>585383
Ref: whatsnew/3 13 webbrowser585476
Ref: 592585476
Ref: webbrowser<2>-Footnote-1585966
Ref: webbrowser<2>-Footnote-2586022
Node: Novas descontinuações<2>586078
Ref: whatsnew/3 13 new-deprecations586254
Ref: 594586254
Ref: Novas descontinuações<2>-Footnote-1595293
Ref: Novas descontinuações<2>-Footnote-2595348
Ref: Novas descontinuações<2>-Footnote-3595403
Ref: Novas descontinuações<2>-Footnote-4595459
Ref: Novas descontinuações<2>-Footnote-5595515
Ref: Novas descontinuações<2>-Footnote-6595570
Ref: Novas descontinuações<2>-Footnote-7595626
Ref: Novas descontinuações<2>-Footnote-8595681
Ref: Novas descontinuações<2>-Footnote-9595737
Ref: Novas descontinuações<2>-Footnote-10595793
Ref: Novas descontinuações<2>-Footnote-11595850
Ref: Novas descontinuações<2>-Footnote-12595906
Ref: Novas descontinuações<2>-Footnote-13595962
Ref: Novas descontinuações<2>-Footnote-14596018
Ref: Novas descontinuações<2>-Footnote-15596075
Ref: Novas descontinuações<2>-Footnote-16596131
Ref: Novas descontinuações<2>-Footnote-17596188
Ref: Novas descontinuações<2>-Footnote-18596245
Ref: Novas descontinuações<2>-Footnote-19596302
Ref: Novas descontinuações<2>-Footnote-20596358
Ref: Novas descontinuações<2>-Footnote-21596415
Ref: Novas descontinuações<2>-Footnote-22596472
Ref: Novas descontinuações<2>-Footnote-23596529
Ref: Novas descontinuações<2>-Footnote-24596586
Ref: Novas descontinuações<2>-Footnote-25596643
Ref: Novas descontinuações<2>-Footnote-26596700
Ref: Novas descontinuações<2>-Footnote-27596757
Node: Remoção pendente no Python 3 14596814
Ref: whatsnew/3 13 pending-removal-in-python-3-14596955
Ref: 5a7596955
Ref: Remoção pendente no Python 3 14-Footnote-1601477
Ref: Remoção pendente no Python 3 14-Footnote-2601532
Ref: Remoção pendente no Python 3 14-Footnote-3601587
Ref: Remoção pendente no Python 3 14-Footnote-4601642
Ref: Remoção pendente no Python 3 14-Footnote-5601697
Ref: Remoção pendente no Python 3 14-Footnote-6601753
Ref: Remoção pendente no Python 3 14-Footnote-7601808
Ref: Remoção pendente no Python 3 14-Footnote-8601863
Ref: Remoção pendente no Python 3 14-Footnote-9601919
Ref: Remoção pendente no Python 3 14-Footnote-10601974
Ref: Remoção pendente no Python 3 14-Footnote-11602030
Node: Remoção pendente no Python 3 15<3>602086
Ref: whatsnew/3 13 pending-removal-in-python-3-15602272
Ref: 5ac602272
Ref: Remoção pendente no Python 3 15<3>-Footnote-1607082
Ref: Remoção pendente no Python 3 15<3>-Footnote-2607137
Ref: Remoção pendente no Python 3 15<3>-Footnote-3607192
Ref: Remoção pendente no Python 3 15<3>-Footnote-4607247
Ref: Remoção pendente no Python 3 15<3>-Footnote-5607303
Ref: Remoção pendente no Python 3 15<3>-Footnote-6607345
Ref: Remoção pendente no Python 3 15<3>-Footnote-7607401
Node: Remoção pendente no Python 3 16<3>607457
Ref: whatsnew/3 13 pending-removal-in-python-3-16607646
Ref: 5ad607646
Ref: Remoção pendente no Python 3 16<3>-Footnote-1612159
Ref: Remoção pendente no Python 3 16<3>-Footnote-2612215
Ref: Remoção pendente no Python 3 16<3>-Footnote-3612271
Ref: Remoção pendente no Python 3 16<3>-Footnote-4612327
Node: Remoção pendente no Python 3 17<2>612382
Ref: whatsnew/3 13 pending-removal-in-python-3-17612576
Ref: 5ae612576
Ref: Remoção pendente no Python 3 17<2>-Footnote-1615717
Ref: Remoção pendente no Python 3 17<2>-Footnote-2615775
Ref: Remoção pendente no Python 3 17<2>-Footnote-3615830
Ref: Remoção pendente no Python 3 17<2>-Footnote-4615888
Node: Remoção pendente em versões futuras<3>615943
Ref: whatsnew/3 13 pending-removal-in-future-versions616092
Ref: 5af616092
Ref: Remoção pendente em versões futuras<3>-Footnote-1623733
Ref: Remoção pendente em versões futuras<3>-Footnote-2623788
Ref: Remoção pendente em versões futuras<3>-Footnote-3623844
Ref: Remoção pendente em versões futuras<3>-Footnote-4623900
Ref: Remoção pendente em versões futuras<3>-Footnote-5623956
Ref: Remoção pendente em versões futuras<3>-Footnote-6624011
Ref: Remoção pendente em versões futuras<3>-Footnote-7624066
Node: Alterações de bytecode do CPython<2>624122
Ref: whatsnew/3 13 cpython-bytecode-changes624297
Ref: 5b0624297
Ref: Alterações de bytecode do CPython<2>-Footnote-1624806
Node: Alterações na API C<3>624862
Ref: whatsnew/3 13 c-api-changes625036
Ref: 5b3625036
Node: Novas funcionalidades<3>625329
Ref: whatsnew/3 13 id7625447
Ref: 5b4625447
Ref: Novas funcionalidades<3>-Footnote-1636751
Ref: Novas funcionalidades<3>-Footnote-2636793
Ref: Novas funcionalidades<3>-Footnote-3636849
Ref: Novas funcionalidades<3>-Footnote-4636905
Ref: Novas funcionalidades<3>-Footnote-5636961
Ref: Novas funcionalidades<3>-Footnote-6637017
Ref: Novas funcionalidades<3>-Footnote-7637073
Ref: Novas funcionalidades<3>-Footnote-8637129
Ref: Novas funcionalidades<3>-Footnote-9637185
Ref: Novas funcionalidades<3>-Footnote-10637241
Ref: Novas funcionalidades<3>-Footnote-11637298
Ref: Novas funcionalidades<3>-Footnote-12637355
Ref: Novas funcionalidades<3>-Footnote-13637411
Ref: Novas funcionalidades<3>-Footnote-14637468
Ref: Novas funcionalidades<3>-Footnote-15637525
Ref: Novas funcionalidades<3>-Footnote-16637582
Ref: Novas funcionalidades<3>-Footnote-17637639
Ref: Novas funcionalidades<3>-Footnote-18637696
Ref: Novas funcionalidades<3>-Footnote-19637753
Ref: Novas funcionalidades<3>-Footnote-20637810
Ref: Novas funcionalidades<3>-Footnote-21637866
Ref: Novas funcionalidades<3>-Footnote-22637923
Ref: Novas funcionalidades<3>-Footnote-23637980
Ref: Novas funcionalidades<3>-Footnote-24638034
Ref: Novas funcionalidades<3>-Footnote-25638091
Ref: Novas funcionalidades<3>-Footnote-26638147
Ref: Novas funcionalidades<3>-Footnote-27638203
Ref: Novas funcionalidades<3>-Footnote-28638260
Ref: Novas funcionalidades<3>-Footnote-29638317
Ref: Novas funcionalidades<3>-Footnote-30638374
Ref: Novas funcionalidades<3>-Footnote-31638431
Ref: Novas funcionalidades<3>-Footnote-32638488
Node: Alterações na API C<4>638545
Ref: whatsnew/3 13 changed-c-apis638699
Ref: 617638699
Ref: Alterações na API C<4>-Footnote-1641458
Ref: Alterações na API C<4>-Footnote-2641513
Ref: Alterações na API C<4>-Footnote-3641569
Ref: Alterações na API C<4>-Footnote-4641625
Ref: Alterações na API C<4>-Footnote-5641681
Ref: Alterações na API C<4>-Footnote-6641723
Ref: Alterações na API C<4>-Footnote-7641779
Ref: Alterações na API C<4>-Footnote-8641835
Node: Mudanças na API C Limitada641891
Ref: whatsnew/3 13 limited-c-api-changes642040
Ref: 624642040
Ref: Mudanças na API C Limitada-Footnote-1642802
Ref: Mudanças na API C Limitada-Footnote-2642857
Ref: Mudanças na API C Limitada-Footnote-3642912
Ref: Mudanças na API C Limitada-Footnote-4642968
Node: APIs C removidas<2>643024
Ref: whatsnew/3 13 removed-c-apis643173
Ref: 62c643173
Ref: APIs C removidas<2>-Footnote-1649591
Ref: APIs C removidas<2>-Footnote-2649647
Ref: APIs C removidas<2>-Footnote-3649702
Ref: APIs C removidas<2>-Footnote-4649758
Ref: APIs C removidas<2>-Footnote-5649800
Ref: APIs C removidas<2>-Footnote-6649856
Ref: APIs C removidas<2>-Footnote-7649912
Ref: APIs C removidas<2>-Footnote-8649968
Ref: APIs C removidas<2>-Footnote-9650021
Ref: APIs C removidas<2>-Footnote-10650077
Ref: APIs C removidas<2>-Footnote-11650120
Ref: APIs C removidas<2>-Footnote-12650177
Ref: APIs C removidas<2>-Footnote-13650234
Ref: APIs C removidas<2>-Footnote-14650291
Node: APIs C descontinuadas<2>650348
Ref: whatsnew/3 13 deprecated-c-apis650461
Ref: 641650461
Ref: APIs C descontinuadas<2>-Footnote-1653285
Ref: APIs C descontinuadas<2>-Footnote-2653341
Ref: APIs C descontinuadas<2>-Footnote-3653383
Ref: APIs C descontinuadas<2>-Footnote-4653439
Ref: APIs C descontinuadas<2>-Footnote-5653494
Ref: APIs C descontinuadas<2>-Footnote-6653550
Ref: APIs C descontinuadas<2>-Footnote-7653603
Node: Remoção pendente no Python 3 14<2>653659
Ref: whatsnew/3 13 id8653801
Ref: 642653801
Ref: Remoção pendente no Python 3 14<2>-Footnote-1654136
Ref: Remoção pendente no Python 3 14<2>-Footnote-2654178
Ref: Remoção pendente no Python 3 14<2>-Footnote-3654234
Node: Remoção pendente no Python 3 15<4>654289
Ref: whatsnew/3 13 id9654476
Ref: 644654476
Ref: Remoção pendente no Python 3 15<4>-Footnote-1660884
Ref: Remoção pendente no Python 3 15<4>-Footnote-2660937
Node: Remoção pendente no Python 3 16<4>660990
Ref: whatsnew/3 13 id10661177
Ref: 645661177
Node: Remoção pendente no Python 3 18<2>661307
Ref: whatsnew/3 13 pending-removal-in-python-3-18661499
Ref: 646661499
Ref: Remoção pendente no Python 3 18<2>-Footnote-1664219
Ref: Remoção pendente no Python 3 18<2>-Footnote-2664272
Node: Remoção pendente em versões futuras<4>664328
Ref: whatsnew/3 13 id11664475
Ref: 647664475
Node: Mudanças na construção666233
Ref: whatsnew/3 13 build-changes666396
Ref: 648666396
Ref: whatsnew/3 13 pythoncapi-compat-project666396
Ref: 649666396
Ref: Mudanças na construção-Footnote-1669265
Ref: Mudanças na construção-Footnote-2669307
Ref: Mudanças na construção-Footnote-3669363
Ref: Mudanças na construção-Footnote-4669405
Ref: Mudanças na construção-Footnote-5669461
Ref: Mudanças na construção-Footnote-6669503
Ref: Mudanças na construção-Footnote-7669559
Ref: Mudanças na construção-Footnote-8669601
Ref: Mudanças na construção-Footnote-9669657
Ref: Mudanças na construção-Footnote-10669712
Ref: Mudanças na construção-Footnote-11669769
Ref: Mudanças na construção-Footnote-12669826
Ref: Mudanças na construção-Footnote-13669874
Ref: Mudanças na construção-Footnote-14669931
Ref: Mudanças na construção-Footnote-15669988
Ref: Mudanças na construção-Footnote-16670045
Node: Portando para o Python 3 13670101
Ref: whatsnew/3 13 porting-to-python-3-13670272
Ref: 46b670272
Node: Alterações na API Python<2>670592
Ref: whatsnew/3 13 changes-in-the-python-api670718
Ref: 64c670718
Ref: whatsnew/3 13 pep667-porting-notes-py670789
Ref: 4a0670789
Ref: Alterações na API Python<2>-Footnote-1674688
Ref: Alterações na API Python<2>-Footnote-2674730
Ref: Alterações na API Python<2>-Footnote-3674772
Ref: Alterações na API Python<2>-Footnote-4674814
Ref: Alterações na API Python<2>-Footnote-5674856
Ref: Alterações na API Python<2>-Footnote-6674912
Ref: Alterações na API Python<2>-Footnote-7674968
Ref: Alterações na API Python<2>-Footnote-8675023
Node: Alterações na API C<5>675079
Ref: whatsnew/3 13 changes-in-the-c-api675205
Ref: 653675205
Ref: whatsnew/3 13 pep667-porting-notes-c677996
Ref: 4a1677996
Ref: Alterações na API C<5>-Footnote-1682019
Ref: Alterações na API C<5>-Footnote-2682075
Ref: Alterações na API C<5>-Footnote-3682131
Ref: Alterações na API C<5>-Footnote-4682187
Ref: Alterações na API C<5>-Footnote-5682242
Ref: Alterações na API C<5>-Footnote-6682298
Node: Mudanças em teste de regressão682351
Ref: whatsnew/3 13 regression-test-changes682488
Ref: 659682488
Ref: Mudanças em teste de regressão-Footnote-1682990
Node: O que há de novo no Python 3 12683046
Ref: whatsnew/3 12 doc683224
Ref: 65b683224
Ref: whatsnew/3 12 no-color683224
Ref: 65c683224
Ref: whatsnew/3 12 what-s-new-in-python-3-12683224
Ref: 65d683224
Ref: O que há de novo no Python 3 12-Footnote-1684337
Node: Resumo – Destaques da versão<3>684379
Ref: whatsnew/3 12 summary-release-highlights684515
Ref: 65e684515
Ref: Resumo – Destaques da versão<3>-Footnote-1689622
Ref: Resumo – Destaques da versão<3>-Footnote-2689670
Ref: Resumo – Destaques da versão<3>-Footnote-3689712
Ref: Resumo – Destaques da versão<3>-Footnote-4689754
Ref: Resumo – Destaques da versão<3>-Footnote-5689813
Ref: Resumo – Destaques da versão<3>-Footnote-6689892
Node: Novas funcionalidades<4>689947
Ref: whatsnew/3 12 new-features690135
Ref: 674690135
Node: PEP 695 Sintaxe do parâmetro de tipo690837
Ref: whatsnew/3 12 pep-695-type-parameter-syntax690990
Ref: 675690990
Ref: whatsnew/3 12 whatsnew312-pep695690990
Ref: 660690990
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-1693793
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-2693835
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-3693877
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-4693919
Node: PEP 701 Formalização sintática de f-strings693975
Ref: whatsnew/3 12 pep-701-syntactic-formalization-of-f-strings694170
Ref: 67b694170
Ref: whatsnew/3 12 whatsnew312-pep701694170
Ref: 663694170
Ref: PEP 701 Formalização sintática de f-strings-Footnote-1698693
Ref: PEP 701 Formalização sintática de f-strings-Footnote-2698735
Ref: PEP 701 Formalização sintática de f-strings-Footnote-3698777
Ref: PEP 701 Formalização sintática de f-strings-Footnote-4698819
Node: PEP 684 Uma GIL por interpretador698875
Ref: whatsnew/3 12 pep-684-a-per-interpreter-gil699084
Ref: 67d699084
Ref: whatsnew/3 12 whatsnew312-pep684699084
Ref: 664699084
Ref: PEP 684 Uma GIL por interpretador-Footnote-1700244
Ref: PEP 684 Uma GIL por interpretador-Footnote-2700286
Ref: PEP 684 Uma GIL por interpretador-Footnote-3700328
Node: PEP 669 Monitoramento de baixo impacto para CPython700384
Ref: whatsnew/3 12 pep-669-low-impact-monitoring-for-cpython700606
Ref: 67f700606
Ref: whatsnew/3 12 whatsnew312-pep669700606
Ref: 665700606
Ref: PEP 669 Monitoramento de baixo impacto para CPython-Footnote-1701235
Ref: PEP 669 Monitoramento de baixo impacto para CPython-Footnote-2701277
Node: PEP 688 Tornando o protocolo de buffer acessível no Python701333
Ref: whatsnew/3 12 pep-688-making-the-buffer-protocol-accessible-in-python701560
Ref: 680701560
Ref: whatsnew/3 12 whatsnew312-pep688701560
Ref: 667701560
Ref: PEP 688 Tornando o protocolo de buffer acessível no Python-Footnote-1702281
Ref: PEP 688 Tornando o protocolo de buffer acessível no Python-Footnote-2702323
Node: PEP 709 Fazendo inline de compreensão702379
Ref: whatsnew/3 12 pep-709-comprehension-inlining702586
Ref: 683702586
Ref: whatsnew/3 12 whatsnew312-pep709702586
Ref: 66d702586
Ref: PEP 709 Fazendo inline de compreensão-Footnote-1704449
Ref: PEP 709 Fazendo inline de compreensão-Footnote-2704491
Node: Mensagens de erro melhoradas<3>704533
Ref: whatsnew/3 12 improved-error-messages704672
Ref: 666704672
Ref: Mensagens de erro melhoradas<3>-Footnote-1707134
Ref: Mensagens de erro melhoradas<3>-Footnote-2707189
Ref: Mensagens de erro melhoradas<3>-Footnote-3707244
Ref: Mensagens de erro melhoradas<3>-Footnote-4707299
Node: Novos recursos relacionados a dicas de tipo707354
Ref: whatsnew/3 12 new-features-related-to-type-hints707540
Ref: 684707540
Ref: Novos recursos relacionados a dicas de tipo-Footnote-1708048
Node: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs708090
Ref: whatsnew/3 12 pep-692-using-typeddict-for-more-precise-kwargs-typing708291
Ref: 685708291
Ref: whatsnew/3 12 whatsnew312-pep692708291
Ref: 66e708291
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-1709042
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-2709084
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-3709126
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-4709168
Node: PEP 698 Substitui decorador para tipagem estática709224
Ref: whatsnew/3 12 pep-698-override-decorator-for-static-typing709425
Ref: 686709425
Ref: whatsnew/3 12 whatsnew312-pep698709425
Ref: 670709425
Ref: PEP 698 Substitui decorador para tipagem estática-Footnote-1710458
Ref: PEP 698 Substitui decorador para tipagem estática-Footnote-2710500
Node: Outras mudanças na linguagem<2>710556
Ref: whatsnew/3 12 other-language-changes710735
Ref: 687710735
Ref: Outras mudanças na linguagem<2>-Footnote-1715932
Ref: Outras mudanças na linguagem<2>-Footnote-2715987
Ref: Outras mudanças na linguagem<2>-Footnote-3716042
Ref: Outras mudanças na linguagem<2>-Footnote-4716097
Ref: Outras mudanças na linguagem<2>-Footnote-5716139
Ref: Outras mudanças na linguagem<2>-Footnote-6716195
Ref: Outras mudanças na linguagem<2>-Footnote-7716237
Ref: Outras mudanças na linguagem<2>-Footnote-8716292
Ref: Outras mudanças na linguagem<2>-Footnote-9716348
Ref: Outras mudanças na linguagem<2>-Footnote-10716403
Ref: Outras mudanças na linguagem<2>-Footnote-11716459
Ref: Outras mudanças na linguagem<2>-Footnote-12716515
Ref: Outras mudanças na linguagem<2>-Footnote-13716572
Ref: Outras mudanças na linguagem<2>-Footnote-14716629
Ref: Outras mudanças na linguagem<2>-Footnote-15716685
Ref: Outras mudanças na linguagem<2>-Footnote-16716728
Ref: Outras mudanças na linguagem<2>-Footnote-17716784
Node: Novos módulos<3>716840
Ref: whatsnew/3 12 new-modules716998
Ref: 692716998
Node: Módulos melhorados<3>717054
Ref: whatsnew/3 12 improved-modules717196
Ref: 693717196
Node: array<2>717895
Ref: whatsnew/3 12 array717981
Ref: 694717981
Ref: array<2>-Footnote-1718216
Node: asyncio<5>718271
Ref: whatsnew/3 12 asyncio718377
Ref: 695718377
Ref: asyncio<5>-Footnote-1720522
Ref: asyncio<5>-Footnote-2720577
Ref: asyncio<5>-Footnote-3720633
Ref: asyncio<5>-Footnote-4720689
Ref: asyncio<5>-Footnote-5720745
Ref: asyncio<5>-Footnote-6720800
Ref: asyncio<5>-Footnote-7720855
Ref: asyncio<5>-Footnote-8720910
Ref: asyncio<5>-Footnote-9720966
Ref: asyncio<5>-Footnote-10721022
Node: calendar<2>721078
Ref: whatsnew/3 12 calendar721179
Ref: 69d721179
Ref: calendar<2>-Footnote-1721428
Node: csv721484
Ref: whatsnew/3 12 csv721581
Ref: 6a0721581
Node: dis<3>721838
Ref: whatsnew/3 12 dis721936
Ref: 6a5721936
Ref: dis<3>-Footnote-1722565
Ref: dis<3>-Footnote-2722620
Node: fractions<3>722675
Ref: whatsnew/3 12 fractions722789
Ref: 6a8722789
Ref: fractions<3>-Footnote-1723026
Node: importlib resources723082
Ref: whatsnew/3 12 importlib-resources723200
Ref: 6a9723200
Ref: importlib resources-Footnote-1723608
Ref: importlib resources-Footnote-2723663
Node: inspect<2>723719
Ref: whatsnew/3 12 inspect723837
Ref: 6ac723837
Ref: inspect<2>-Footnote-1724649
Ref: inspect<2>-Footnote-2724704
Ref: inspect<2>-Footnote-3724759
Node: itertools<3>724815
Ref: whatsnew/3 12 itertools724921
Ref: 6b2724921
Ref: itertools<3>-Footnote-1725193
Node: math<3>725248
Ref: whatsnew/3 12 math725349
Ref: 6b3725349
Ref: math<3>-Footnote-1725787
Ref: math<3>-Footnote-2725843
Node: os<3>725898
Ref: whatsnew/3 12 os725997
Ref: 6b6725997
Ref: os<3>-Footnote-1727450
Ref: os<3>-Footnote-2727505
Ref: os<3>-Footnote-3727560
Ref: os<3>-Footnote-4727616
Node: os path<3>727671
Ref: whatsnew/3 12 os-path727773
Ref: 6be727773
Ref: os path<3>-Footnote-1728187
Ref: os path<3>-Footnote-2728242
Node: pathlib<6>728298
Ref: whatsnew/3 12 pathlib728406
Ref: 6c1728406
Ref: pathlib<6>-Footnote-1729879
Ref: pathlib<6>-Footnote-2729934
Ref: pathlib<6>-Footnote-3729989
Node: platform<2>730044
Ref: whatsnew/3 12 platform730148
Ref: 6c9730148
Ref: platform<2>-Footnote-1730532
Node: pdb<4>730587
Ref: whatsnew/3 12 pdb730690
Ref: 6ca730690
Ref: pdb<4>-Footnote-1731005
Node: random<2>731061
Ref: whatsnew/3 12 random731162
Ref: 6cb731162
Ref: random<2>-Footnote-1731484
Ref: random<2>-Footnote-2731539
Node: shutil<2>731595
Ref: whatsnew/3 12 shutil731700
Ref: 6ce731700
Ref: shutil<2>-Footnote-1733216
Ref: shutil<2>-Footnote-2733271
Ref: shutil<2>-Footnote-3733327
Ref: shutil<2>-Footnote-4733383
Ref: shutil<2>-Footnote-5733439
Node: sqlite3<3>733495
Ref: whatsnew/3 12 sqlite3733604
Ref: 6d1733604
Ref: sqlite3<3>-Footnote-1734631
Ref: sqlite3<3>-Footnote-2734686
Ref: sqlite3<3>-Footnote-3734728
Ref: sqlite3<3>-Footnote-4734783
Ref: sqlite3<3>-Footnote-5734839
Node: statistics<2>734895
Ref: whatsnew/3 12 statistics735001
Ref: 6d7735001
Ref: statistics<2>-Footnote-1735301
Node: sys<3>735356
Ref: whatsnew/3 12 sys735463
Ref: 6d9735463
Ref: sys<3>-Footnote-1737111
Ref: sys<3>-Footnote-2737167
Ref: sys<3>-Footnote-3737222
Ref: sys<3>-Footnote-4737278
Node: tempfile<2>737334
Ref: whatsnew/3 12 tempfile737440
Ref: 6e1737440
Ref: tempfile<2>-Footnote-1737848
Node: threading<2>737903
Ref: whatsnew/3 12 threading738013
Ref: 6e3738013
Ref: threading<2>-Footnote-1738400
Node: tkinter<3>738455
Ref: whatsnew/3 12 tkinter738562
Ref: 6e6738562
Ref: tkinter<3>-Footnote-1739081
Node: tokenize739136
Ref: whatsnew/3 12 tokenize739239
Ref: 6e7739239
Ref: tokenize-Footnote-1739606
Ref: tokenize-Footnote-2739648
Node: types<2>739704
Ref: whatsnew/3 12 types739806
Ref: 6e9739806
Ref: types<2>-Footnote-1740137
Node: typing<4>740193
Ref: whatsnew/3 12 typing740301
Ref: 6ec740301
Ref: whatsnew/3 12 whatsnew-typing-py312740301
Ref: 6ed740301
Ref: typing<4>-Footnote-1743282
Ref: typing<4>-Footnote-2743338
Ref: typing<4>-Footnote-3743393
Ref: typing<4>-Footnote-4743449
Ref: typing<4>-Footnote-5743505
Node: unicodedata<3>743560
Ref: whatsnew/3 12 unicodedata743671
Ref: 6f1743671
Ref: unicodedata<3>-Footnote-1743878
Node: unittest<3>743933
Ref: whatsnew/3 12 unittest744042
Ref: 6f2744042
Ref: unittest<3>-Footnote-1744853
Node: uuid<3>744908
Ref: whatsnew/3 12 uuid744994
Ref: 6f3744994
Ref: uuid<3>-Footnote-1745173
Node: Otimizações<3>745228
Ref: whatsnew/3 12 optimizations745391
Ref: 6f4745391
Ref: Otimizações<3>-Footnote-1746942
Ref: Otimizações<3>-Footnote-2746984
Ref: Otimizações<3>-Footnote-3747039
Ref: Otimizações<3>-Footnote-4747094
Ref: Otimizações<3>-Footnote-5747150
Ref: Otimizações<3>-Footnote-6747205
Ref: Otimizações<3>-Footnote-7747261
Ref: Otimizações<3>-Footnote-8747303
Ref: Otimizações<3>-Footnote-9747359
Node: Alterações de bytecode do CPython<3>747415
Ref: whatsnew/3 12 cpython-bytecode-changes747577
Ref: 6f8747577
Ref: Alterações de bytecode do CPython<3>-Footnote-1749707
Ref: Alterações de bytecode do CPython<3>-Footnote-2749762
Ref: Alterações de bytecode do CPython<3>-Footnote-3749818
Ref: Alterações de bytecode do CPython<3>-Footnote-4749873
Ref: Alterações de bytecode do CPython<3>-Footnote-5749928
Ref: Alterações de bytecode do CPython<3>-Footnote-6749983
Ref: Alterações de bytecode do CPython<3>-Footnote-7750039
Ref: Alterações de bytecode do CPython<3>-Footnote-8750094
Ref: Alterações de bytecode do CPython<3>-Footnote-9750150
Ref: Alterações de bytecode do CPython<3>-Footnote-10750192
Ref: Alterações de bytecode do CPython<3>-Footnote-11750249
Ref: Alterações de bytecode do CPython<3>-Footnote-12750305
Ref: Alterações de bytecode do CPython<3>-Footnote-13750348
Ref: Alterações de bytecode do CPython<3>-Footnote-14750405
Ref: Alterações de bytecode do CPython<3>-Footnote-15750462
Node: Ferramentas e daemons750519
Ref: whatsnew/3 12 demos-and-tools750682
Ref: 704750682
Ref: Ferramentas e daemons-Footnote-1751188
Ref: Ferramentas e daemons-Footnote-2751236
Ref: Ferramentas e daemons-Footnote-3751291
Ref: Ferramentas e daemons-Footnote-4751339
Node: Descontinuados<2>751394
Ref: whatsnew/3 12 deprecated751531
Ref: 705751531
Ref: Descontinuados<2>-Footnote-1763481
Ref: Descontinuados<2>-Footnote-2763536
Ref: Descontinuados<2>-Footnote-3763591
Ref: Descontinuados<2>-Footnote-4763646
Ref: Descontinuados<2>-Footnote-5763701
Ref: Descontinuados<2>-Footnote-6763757
Ref: Descontinuados<2>-Footnote-7763813
Ref: Descontinuados<2>-Footnote-8763871
Ref: Descontinuados<2>-Footnote-9763926
Ref: Descontinuados<2>-Footnote-10763982
Ref: Descontinuados<2>-Footnote-11764038
Ref: Descontinuados<2>-Footnote-12764094
Ref: Descontinuados<2>-Footnote-13764151
Ref: Descontinuados<2>-Footnote-14764207
Ref: Descontinuados<2>-Footnote-15764263
Ref: Descontinuados<2>-Footnote-16764319
Ref: Descontinuados<2>-Footnote-17764375
Ref: Descontinuados<2>-Footnote-18764478
Ref: Descontinuados<2>-Footnote-19764535
Ref: Descontinuados<2>-Footnote-20764591
Ref: Descontinuados<2>-Footnote-21764648
Ref: Descontinuados<2>-Footnote-22764705
Ref: Descontinuados<2>-Footnote-23764761
Ref: Descontinuados<2>-Footnote-24764817
Ref: Descontinuados<2>-Footnote-25764873
Ref: Descontinuados<2>-Footnote-26764929
Ref: Descontinuados<2>-Footnote-27764985
Ref: Descontinuados<2>-Footnote-28765041
Ref: Descontinuados<2>-Footnote-29765098
Ref: Descontinuados<2>-Footnote-30765141
Node: Remoção pendente no Python 3 13765198
Ref: whatsnew/3 12 pending-removal-in-python-3-13765330
Ref: 714765330
Ref: Remoção pendente no Python 3 13-Footnote-1766834
Ref: Remoção pendente no Python 3 13-Footnote-2766876
Ref: Remoção pendente no Python 3 13-Footnote-3766931
Ref: Remoção pendente no Python 3 13-Footnote-4766986
Ref: Remoção pendente no Python 3 13-Footnote-5767041
Ref: Remoção pendente no Python 3 13-Footnote-6767096
Ref: Remoção pendente no Python 3 13-Footnote-7767151
Ref: Remoção pendente no Python 3 13-Footnote-8767206
Ref: Remoção pendente no Python 3 13-Footnote-9767261
Ref: Remoção pendente no Python 3 13-Footnote-10767316
Ref: Remoção pendente no Python 3 13-Footnote-11767372
Ref: Remoção pendente no Python 3 13-Footnote-12767428
Ref: Remoção pendente no Python 3 13-Footnote-13767524
Node: Remoção pendente no Python 3 14<3>767581
Ref: whatsnew/3 12 pending-removal-in-python-3-14767758
Ref: 715767758
Ref: Remoção pendente no Python 3 14<3>-Footnote-1772279
Ref: Remoção pendente no Python 3 14<3>-Footnote-2772334
Ref: Remoção pendente no Python 3 14<3>-Footnote-3772389
Ref: Remoção pendente no Python 3 14<3>-Footnote-4772444
Ref: Remoção pendente no Python 3 14<3>-Footnote-5772499
Ref: Remoção pendente no Python 3 14<3>-Footnote-6772555
Ref: Remoção pendente no Python 3 14<3>-Footnote-7772610
Ref: Remoção pendente no Python 3 14<3>-Footnote-8772665
Ref: Remoção pendente no Python 3 14<3>-Footnote-9772721
Ref: Remoção pendente no Python 3 14<3>-Footnote-10772776
Ref: Remoção pendente no Python 3 14<3>-Footnote-11772832
Node: Remoção pendente no Python 3 15<5>772888
Ref: whatsnew/3 12 pending-removal-in-python-3-15773068
Ref: 716773068
Ref: Remoção pendente no Python 3 15<5>-Footnote-1777879
Ref: Remoção pendente no Python 3 15<5>-Footnote-2777934
Ref: Remoção pendente no Python 3 15<5>-Footnote-3777989
Ref: Remoção pendente no Python 3 15<5>-Footnote-4778044
Ref: Remoção pendente no Python 3 15<5>-Footnote-5778100
Ref: Remoção pendente no Python 3 15<5>-Footnote-6778142
Ref: Remoção pendente no Python 3 15<5>-Footnote-7778198
Node: Remoção pendente no Python 3 16<5>778254
Ref: whatsnew/3 12 pending-removal-in-python-3-16778434
Ref: 717778434
Ref: Remoção pendente no Python 3 16<5>-Footnote-1782917
Ref: Remoção pendente no Python 3 16<5>-Footnote-2782973
Ref: Remoção pendente no Python 3 16<5>-Footnote-3783029
Ref: Remoção pendente no Python 3 16<5>-Footnote-4783085
Node: Remoção pendente no Python 3 17<3>783140
Ref: whatsnew/3 12 pending-removal-in-python-3-17783325
Ref: 718783325
Ref: Remoção pendente no Python 3 17<3>-Footnote-1786468
Ref: Remoção pendente no Python 3 17<3>-Footnote-2786526
Ref: Remoção pendente no Python 3 17<3>-Footnote-3786581
Ref: Remoção pendente no Python 3 17<3>-Footnote-4786639
Node: Remoção pendente em versões futuras<5>786694
Ref: whatsnew/3 12 pending-removal-in-future-versions786834
Ref: 719786834
Ref: Remoção pendente em versões futuras<5>-Footnote-1794511
Ref: Remoção pendente em versões futuras<5>-Footnote-2794566
Ref: Remoção pendente em versões futuras<5>-Footnote-3794622
Ref: Remoção pendente em versões futuras<5>-Footnote-4794678
Ref: Remoção pendente em versões futuras<5>-Footnote-5794734
Ref: Remoção pendente em versões futuras<5>-Footnote-6794789
Ref: Remoção pendente em versões futuras<5>-Footnote-7794844
Node: Removidos<2>794900
Ref: whatsnew/3 12 removed795041
Ref: 71a795041
Ref: whatsnew/3 12 whatsnew312-removed795041
Ref: 71b795041
Node: asynchat e asyncore795477
Ref: whatsnew/3 12 asynchat-and-asyncore795569
Ref: 71c795569
Ref: asynchat e asyncore-Footnote-1795893
Ref: asynchat e asyncore-Footnote-2795935
Node: configparser<4>795990
Ref: whatsnew/3 12 configparser796100
Ref: 71d796100
Ref: configparser<4>-Footnote-1796767
Node: distutils796822
Ref: whatsnew/3 12 distutils796922
Ref: 720796922
Ref: whatsnew/3 12 whatsnew312-removed-distutils796922
Ref: 721796922
Ref: distutils-Footnote-1797372
Ref: distutils-Footnote-2797414
Node: ensurepip797469
Ref: whatsnew/3 12 ensurepip797561
Ref: 722797561
Ref: ensurepip-Footnote-1798621
Node: enum<2>798676
Ref: whatsnew/3 12 enum798765
Ref: 723798765
Ref: enum<2>-Footnote-1799012
Node: ftplib799067
Ref: whatsnew/3 12 ftplib799151
Ref: 724799151
Ref: ftplib-Footnote-1799405
Node: gzip799460
Ref: whatsnew/3 12 gzip799544
Ref: 725799544
Ref: gzip-Footnote-1799978
Node: hashlib800033
Ref: whatsnew/3 12 hashlib800123
Ref: 727800123
Ref: hashlib-Footnote-1800571
Ref: hashlib-Footnote-2800613
Node: importlib<2>800668
Ref: whatsnew/3 12 importlib800757
Ref: 729800757
Ref: importlib<2>-Footnote-1801664
Ref: importlib<2>-Footnote-2801719
Ref: importlib<2>-Footnote-3801774
Ref: importlib<2>-Footnote-4801829
Ref: importlib<2>-Footnote-5801884
Node: imp801939
Ref: whatsnew/3 12 imp802026
Ref: 72a802026
Ref: whatsnew/3 12 whatsnew312-removed-imp802026
Ref: 72b802026
Ref: imp-Footnote-1806187
Node: io<4>806242
Ref: whatsnew/3 12 io806326
Ref: 734806326
Ref: io<4>-Footnote-1806768
Node: locale<2>806823
Ref: whatsnew/3 12 locale806909
Ref: 736806909
Ref: locale<2>-Footnote-1807191
Node: smtpd807246
Ref: whatsnew/3 12 smtpd807337
Ref: 738807337
Ref: smtpd-Footnote-1807692
Ref: smtpd-Footnote-2807734
Ref: smtpd-Footnote-3807777
Node: sqlite3<4>807832
Ref: whatsnew/3 12 id2807920
Ref: 739807920
Ref: sqlite3<4>-Footnote-1808713
Node: ssl<3>808768
Ref: whatsnew/3 12 ssl808862
Ref: 73a808862
Ref: ssl<3>-Footnote-1809973
Ref: ssl<3>-Footnote-2810028
Ref: ssl<3>-Footnote-3810083
Ref: ssl<3>-Footnote-4810139
Node: unittest<4>810194
Ref: whatsnew/3 12 id3810291
Ref: 73e810291
Ref: whatsnew/3 12 unittest-testcase-removed-aliases810411
Ref: 673810411
Ref: unittest<4>-Footnote-1815124
Node: webbrowser<3>815179
Ref: whatsnew/3 12 webbrowser815291
Ref: 74a815291
Ref: webbrowser<3>-Footnote-1815613
Node: xml etree ElementTree815669
Ref: whatsnew/3 12 xml-etree-elementtree815782
Ref: 74b815782
Ref: xml etree ElementTree-Footnote-1816266
Node: zipimport<2>816321
Ref: whatsnew/3 12 zipimport816427
Ref: 74d816427
Ref: zipimport<2>-Footnote-1816776
Ref: zipimport<2>-Footnote-2816818
Node: Outros816873
Ref: whatsnew/3 12 others816949
Ref: 74e816949
Ref: Outros-Footnote-1817952
Ref: Outros-Footnote-2818006
Ref: Outros-Footnote-3818061
Ref: Outros-Footnote-4818116
Ref: Outros-Footnote-5818171
Node: Portando para Python 3 12818226
Ref: whatsnew/3 12 porting-to-python-3-12818378
Ref: 74f818378
Ref: whatsnew/3 12 whatsnew312-porting-to-python312818378
Ref: 6e8818378
Node: Alterações na API Python<3>818643
Ref: whatsnew/3 12 changes-in-the-python-api818734
Ref: 750818734
Ref: Alterações na API Python<3>-Footnote-1825536
Ref: Alterações na API Python<3>-Footnote-2825591
Ref: Alterações na API Python<3>-Footnote-3825646
Ref: Alterações na API Python<3>-Footnote-4825689
Ref: Alterações na API Python<3>-Footnote-5825744
Ref: Alterações na API Python<3>-Footnote-6825799
Ref: Alterações na API Python<3>-Footnote-7825854
Ref: Alterações na API Python<3>-Footnote-8825910
Ref: Alterações na API Python<3>-Footnote-9825952
Ref: Alterações na API Python<3>-Footnote-10825994
Ref: Alterações na API Python<3>-Footnote-11826037
Node: Mudanças na construção<2>826094
Ref: whatsnew/3 12 build-changes826258
Ref: 75b826258
Ref: Mudanças na construção<2>-Footnote-1828158
Ref: Mudanças na construção<2>-Footnote-2828213
Ref: Mudanças na construção<2>-Footnote-3828268
Ref: Mudanças na construção<2>-Footnote-4828323
Ref: Mudanças na construção<2>-Footnote-5828378
Ref: Mudanças na construção<2>-Footnote-6828433
Node: Alterações na API C<6>828488
Ref: whatsnew/3 12 c-api-changes828618
Ref: 75c828618
Node: Novas funcionalidades<5>828859
Ref: whatsnew/3 12 id4828981
Ref: 75d828981
Ref: whatsnew/3 12 whatsnew312-pep697829044
Ref: 66b829044
Ref: whatsnew/3 12 whatsnew312-pep683835711
Ref: 66c835711
Ref: Novas funcionalidades<5>-Footnote-1837582
Ref: Novas funcionalidades<5>-Footnote-2837624
Ref: Novas funcionalidades<5>-Footnote-3837666
Ref: Novas funcionalidades<5>-Footnote-4837722
Ref: Novas funcionalidades<5>-Footnote-5837764
Ref: Novas funcionalidades<5>-Footnote-6837820
Ref: Novas funcionalidades<5>-Footnote-7837875
Ref: Novas funcionalidades<5>-Footnote-8837930
Ref: Novas funcionalidades<5>-Footnote-9837985
Ref: Novas funcionalidades<5>-Footnote-10838040
Ref: Novas funcionalidades<5>-Footnote-11838096
Ref: Novas funcionalidades<5>-Footnote-12838152
Ref: Novas funcionalidades<5>-Footnote-13838208
Ref: Novas funcionalidades<5>-Footnote-14838264
Ref: Novas funcionalidades<5>-Footnote-15838320
Ref: Novas funcionalidades<5>-Footnote-16838377
Ref: Novas funcionalidades<5>-Footnote-17838434
Ref: Novas funcionalidades<5>-Footnote-18838491
Ref: Novas funcionalidades<5>-Footnote-19838548
Ref: Novas funcionalidades<5>-Footnote-20838591
Ref: Novas funcionalidades<5>-Footnote-21838647
Ref: Novas funcionalidades<5>-Footnote-22838690
Ref: Novas funcionalidades<5>-Footnote-23838747
Node: Portando para Python 3 12<2>838804
Ref: whatsnew/3 12 id5838952
Ref: 786838952
Ref: Portando para Python 3 12<2>-Footnote-1847053
Ref: Portando para Python 3 12<2>-Footnote-2847108
Ref: Portando para Python 3 12<2>-Footnote-3847163
Ref: Portando para Python 3 12<2>-Footnote-4847218
Ref: Portando para Python 3 12<2>-Footnote-5847273
Ref: Portando para Python 3 12<2>-Footnote-6847328
Ref: Portando para Python 3 12<2>-Footnote-7847383
Ref: Portando para Python 3 12<2>-Footnote-8847439
Node: Descontinuados<3>847495
Ref: whatsnew/3 12 id6847631
Ref: 79e847631
Ref: Descontinuados<3>-Footnote-1853219
Ref: Descontinuados<3>-Footnote-2853261
Ref: Descontinuados<3>-Footnote-3853317
Ref: Descontinuados<3>-Footnote-4853372
Ref: Descontinuados<3>-Footnote-5853427
Ref: Descontinuados<3>-Footnote-6853482
Ref: Descontinuados<3>-Footnote-7853538
Ref: Descontinuados<3>-Footnote-8853594
Node: Remoção pendente no Python 3 14<4>853650
Ref: whatsnew/3 12 id7853785
Ref: 7a8853785
Ref: Remoção pendente no Python 3 14<4>-Footnote-1854120
Ref: Remoção pendente no Python 3 14<4>-Footnote-2854162
Ref: Remoção pendente no Python 3 14<4>-Footnote-3854218
Node: Remoção pendente no Python 3 15<6>854273
Ref: whatsnew/3 12 id8854453
Ref: 7a9854453
Ref: Remoção pendente no Python 3 15<6>-Footnote-1860851
Ref: Remoção pendente no Python 3 15<6>-Footnote-2860904
Node: Remoção pendente no Python 3 16<6>860957
Ref: whatsnew/3 12 id9861142
Ref: 7aa861142
Node: Remoção pendente em versões futuras<6>861272
Ref: whatsnew/3 12 id10861412
Ref: 7ab861412
Node: Removidos<3>863167
Ref: whatsnew/3 12 id11863266
Ref: 7ac863266
Ref: Removidos<3>-Footnote-1864178
Ref: Removidos<3>-Footnote-2864233
Ref: Removidos<3>-Footnote-3864275
Node: O que há de novo no Python 3 11864330
Ref: whatsnew/3 11 doc864508
Ref: 7ad864508
Ref: whatsnew/3 11 no-color864508
Ref: 7ae864508
Ref: whatsnew/3 11 what-s-new-in-python-3-11864508
Ref: 7af864508
Node: Resumo – Destaques da versão<4>865823
Ref: whatsnew/3 11 summary-release-highlights865959
Ref: 7b0865959
Ref: whatsnew/3 11 whatsnew311-summary865959
Ref: 7b1865959
Ref: Resumo – Destaques da versão<4>-Footnote-1867677
Ref: Resumo – Destaques da versão<4>-Footnote-2867719
Ref: Resumo – Destaques da versão<4>-Footnote-3867744
Ref: Resumo – Destaques da versão<4>-Footnote-4867786
Ref: Resumo – Destaques da versão<4>-Footnote-5867828
Node: Novas funcionalidades<6>867870
Ref: whatsnew/3 11 new-features868061
Ref: 7c1868061
Ref: whatsnew/3 11 whatsnew311-features868061
Ref: 7c2868061
Node: PEP 657 Localizações de erros refinadas em tracebacks868529
Ref: whatsnew/3 11 pep-657-fine-grained-error-locations-in-tracebacks868691
Ref: 7c3868691
Ref: whatsnew/3 11 whatsnew311-pep657868691
Ref: 7b5868691
Ref: PEP 657 Localizações de erros refinadas em tracebacks-Footnote-1871754
Ref: PEP 657 Localizações de erros refinadas em tracebacks-Footnote-2871796
Node: PEP 654 Grupos de exceção e except*871861
Ref: whatsnew/3 11 pep-654-exception-groups-and-except872083
Ref: 7c9872083
Ref: whatsnew/3 11 whatsnew311-pep654872083
Ref: 7b3872083
Ref: PEP 654 Grupos de exceção e except*-Footnote-1872775
Ref: PEP 654 Grupos de exceção e except*-Footnote-2872817
Ref: PEP 654 Grupos de exceção e except*-Footnote-3872859
Node: PEP 678 Exceções podem ser enriquecidas com notas872924
Ref: whatsnew/3 11 pep-678-exceptions-can-be-enriched-with-notes873135
Ref: 7ca873135
Ref: whatsnew/3 11 whatsnew311-pep678873135
Ref: 7b4873135
Ref: PEP 678 Exceções podem ser enriquecidas com notas-Footnote-1873692
Ref: PEP 678 Exceções podem ser enriquecidas com notas-Footnote-2873734
Node: Melhorias no inicializador py exe do Windows873799
Ref: whatsnew/3 11 whatsnew311-windows-launcher873964
Ref: 7cd873964
Ref: whatsnew/3 11 windows-py-exe-launcher-improvements873964
Ref: 7ce873964
Ref: whatsnew/3 11 new-feat-related-type-hints-311875418
Ref: 7d0875418
Ref: Melhorias no inicializador py exe do Windows-Footnote-1875456
Ref: Melhorias no inicializador py exe do Windows-Footnote-2875498
Node: Novos recursos relacionados a dicas de tipo<2>875529
Ref: whatsnew/3 11 new-features-related-to-type-hints875718
Ref: 7d1875718
Ref: whatsnew/3 11 whatsnew311-typing-features875718
Ref: 7d2875718
Ref: Novos recursos relacionados a dicas de tipo<2>-Footnote-1876486
Node: PEP 646 Genéricos variádicos876528
Ref: whatsnew/3 11 pep-646-variadic-generics876735
Ref: 7d3876735
Ref: whatsnew/3 11 whatsnew311-pep646876735
Ref: 7b9876735
Ref: PEP 646 Genéricos variádicos-Footnote-1877810
Ref: PEP 646 Genéricos variádicos-Footnote-2877852
Ref: PEP 646 Genéricos variádicos-Footnote-3877894
Ref: PEP 646 Genéricos variádicos-Footnote-4877936
Node: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios878001
Ref: whatsnew/3 11 pep-655-marking-individual-typeddict-items-as-required-or-not-required878234
Ref: 7d4878234
Ref: whatsnew/3 11 whatsnew311-pep655878234
Ref: 7ba878234
Ref: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios-Footnote-1879550
Ref: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios-Footnote-2879592
Node: PEP 673 Tipo Self879657
Ref: whatsnew/3 11 pep-673-self-type879902
Ref: 7d7879902
Ref: whatsnew/3 11 whatsnew311-pep673879902
Ref: 7bb879902
Ref: PEP 673 Tipo Self-Footnote-1880995
Ref: PEP 673 Tipo Self-Footnote-2881076
Ref: PEP 673 Tipo Self-Footnote-3881118
Node: PEP 675 Tipo de string literal arbitrário881183
Ref: whatsnew/3 11 pep-675-arbitrary-literal-string-type881386
Ref: 7da881386
Ref: whatsnew/3 11 whatsnew311-pep675881386
Ref: 7bc881386
Ref: PEP 675 Tipo de string literal arbitrário-Footnote-1882923
Ref: PEP 675 Tipo de string literal arbitrário-Footnote-2882965
Node: PEP 681 Transformações de classe de dados883030
Ref: whatsnew/3 11 pep-681-data-class-transforms883246
Ref: 7dc883246
Ref: whatsnew/3 11 whatsnew311-pep681883246
Ref: 7bd883246
Ref: PEP 681 Transformações de classe de dados-Footnote-1884373
Ref: PEP 681 Transformações de classe de dados-Footnote-2884415
Node: PEP 563 pode não ser o futuro884470
Ref: whatsnew/3 11 pep-563-may-not-be-the-future884635
Ref: 7dd884635
Ref: whatsnew/3 11 whatsnew311-pep563-deferred884635
Ref: 7de884635
Ref: PEP 563 pode não ser o futuro-Footnote-1885043
Ref: PEP 563 pode não ser o futuro-Footnote-2885085
Node: Outras mudanças na linguagem<3>885196
Ref: whatsnew/3 11 other-language-changes885407
Ref: 7df885407
Ref: whatsnew/3 11 whatsnew311-other-lang-changes885407
Ref: 7e0885407
Ref: whatsnew/3 11 whatsnew311-pythonsafepath887440
Ref: 7b8887440
Ref: Outras mudanças na linguagem<3>-Footnote-1888881
Ref: Outras mudanças na linguagem<3>-Footnote-2888946
Ref: Outras mudanças na linguagem<3>-Footnote-3889011
Ref: Outras mudanças na linguagem<3>-Footnote-4889076
Ref: Outras mudanças na linguagem<3>-Footnote-5889141
Ref: Outras mudanças na linguagem<3>-Footnote-6889196
Ref: Outras mudanças na linguagem<3>-Footnote-7889261
Ref: Outras mudanças na linguagem<3>-Footnote-8889316
Ref: Outras mudanças na linguagem<3>-Footnote-9889358
Ref: Outras mudanças na linguagem<3>-Footnote-10889413
Node: Outras mudanças na implementação do CPython889469
Ref: whatsnew/3 11 other-cpython-implementation-changes889651
Ref: 7f0889651
Ref: whatsnew/3 11 whatsnew311-other-implementation-changes889651
Ref: 7f1889651
Ref: Outras mudanças na implementação do CPython-Footnote-1893227
Ref: Outras mudanças na implementação do CPython-Footnote-2893292
Ref: Outras mudanças na implementação do CPython-Footnote-3893334
Ref: Outras mudanças na implementação do CPython-Footnote-4893399
Ref: Outras mudanças na implementação do CPython-Footnote-5893464
Ref: Outras mudanças na implementação do CPython-Footnote-6893529
Ref: Outras mudanças na implementação do CPython-Footnote-7893594
Ref: Outras mudanças na implementação do CPython-Footnote-8893659
Node: Novos módulos<4>893715
Ref: whatsnew/3 11 new-modules893887
Ref: 801893887
Ref: whatsnew/3 11 whatsnew311-new-modules893887
Ref: 802893887
Ref: Novos módulos<4>-Footnote-1894276
Ref: Novos módulos<4>-Footnote-2894301
Ref: Novos módulos<4>-Footnote-3894343
Ref: Novos módulos<4>-Footnote-4894408
Ref: Novos módulos<4>-Footnote-5894450
Node: Módulos melhorados<4>894515
Ref: whatsnew/3 11 improved-modules894657
Ref: 803894657
Ref: whatsnew/3 11 whatsnew311-improved-modules894657
Ref: 804894657
Node: asyncio<6>895452
Ref: whatsnew/3 11 asyncio895540
Ref: 805895540
Ref: whatsnew/3 11 whatsnew311-asyncio895540
Ref: 806895540
Ref: asyncio<6>-Footnote-1897567
Ref: asyncio<6>-Footnote-2897622
Ref: asyncio<6>-Footnote-3897677
Ref: asyncio<6>-Footnote-4897732
Ref: asyncio<6>-Footnote-5897787
Ref: asyncio<6>-Footnote-6897852
Node: contextlib897917
Ref: whatsnew/3 11 contextlib898025
Ref: 813898025
Ref: whatsnew/3 11 whatsnew311-contextlib898025
Ref: 814898025
Ref: contextlib-Footnote-1898374
Node: dataclasses898439
Ref: whatsnew/3 11 dataclasses898548
Ref: 817898548
Ref: whatsnew/3 11 whatsnew311-dataclasses898548
Ref: 818898548
Ref: dataclasses-Footnote-1898932
Node: datetime<2>898997
Ref: whatsnew/3 11 datetime899103
Ref: 81a899103
Ref: whatsnew/3 11 whatsnew311-datetime899103
Ref: 81b899103
Ref: datetime<2>-Footnote-1899690
Ref: datetime<2>-Footnote-2899745
Node: enum<3>899800
Ref: whatsnew/3 11 enum899900
Ref: 820899900
Ref: whatsnew/3 11 whatsnew311-enum899900
Ref: 821899900
Node: fcntl902707
Ref: whatsnew/3 11 fcntl902808
Ref: 83a902808
Ref: whatsnew/3 11 whatsnew311-fcntl902808
Ref: 83b902808
Node: fractions<4>903069
Ref: whatsnew/3 11 fractions903175
Ref: 83c903175
Ref: whatsnew/3 11 whatsnew311-fractions903175
Ref: 83d903175
Ref: fractions<4>-Footnote-1903634
Ref: fractions<4>-Footnote-2903676
Ref: fractions<4>-Footnote-3903741
Node: functools<2>903806
Ref: whatsnew/3 11 functools903914
Ref: 83e903914
Ref: whatsnew/3 11 whatsnew311-functools903914
Ref: 83f903914
Ref: functools<2>-Footnote-1905013
Node: gzip<2>905078
Ref: whatsnew/3 11 gzip905184
Ref: 841905184
Ref: whatsnew/3 11 whatsnew311-gzip905184
Ref: 842905184
Ref: gzip<2>-Footnote-1905971
Node: hashlib<2>906027
Ref: whatsnew/3 11 hashlib906135
Ref: 845906135
Ref: whatsnew/3 11 whatsnew311-hashlib906135
Ref: 846906135
Ref: hashlib<2>-Footnote-1906977
Ref: hashlib<2>-Footnote-2907009
Ref: hashlib<2>-Footnote-3907074
Ref: hashlib<2>-Footnote-4907139
Node: IDLE e idlelib907194
Ref: whatsnew/3 11 idle-and-idlelib907305
Ref: 84a907305
Ref: whatsnew/3 11 whatsnew311-idle907305
Ref: 84b907305
Ref: IDLE e idlelib-Footnote-1907641
Ref: IDLE e idlelib-Footnote-2907706
Node: inspect<3>907761
Ref: whatsnew/3 11 inspect907871
Ref: 84c907871
Ref: whatsnew/3 11 whatsnew311-inspect907871
Ref: 84d907871
Ref: inspect<3>-Footnote-1909015
Ref: inspect<3>-Footnote-2909080
Ref: inspect<3>-Footnote-3909145
Ref: inspect<3>-Footnote-4909187
Node: locale<3>909242
Ref: whatsnew/3 11 locale909345
Ref: 859909345
Ref: whatsnew/3 11 whatsnew311-locale909345
Ref: 85a909345
Node: logging909581
Ref: whatsnew/3 11 logging909681
Ref: 85c909681
Ref: whatsnew/3 11 whatsnew311-logging909681
Ref: 85d909681
Ref: logging-Footnote-1910435
Ref: logging-Footnote-2910490
Node: math<4>910545
Ref: whatsnew/3 11 math910644
Ref: 863910644
Ref: whatsnew/3 11 whatsnew311-math910644
Ref: 864910644
Ref: math<4>-Footnote-1911470
Ref: math<4>-Footnote-2911535
Ref: math<4>-Footnote-3911600
Ref: math<4>-Footnote-4911665
Node: operator911730
Ref: whatsnew/3 11 operator911827
Ref: 869911827
Ref: whatsnew/3 11 whatsnew311-operator911827
Ref: 86a911827
Ref: operator-Footnote-1912092
Node: os<4>912157
Ref: whatsnew/3 11 os912257
Ref: 86b912257
Ref: whatsnew/3 11 whatsnew311-os912257
Ref: 86c912257
Ref: os<4>-Footnote-1912512
Node: pathlib<7>912577
Ref: whatsnew/3 11 pathlib912674
Ref: 86d912674
Ref: whatsnew/3 11 whatsnew311-pathlib912674
Ref: 86e912674
Ref: pathlib<7>-Footnote-1913016
Ref: pathlib<7>-Footnote-2913081
Node: re<4>913146
Ref: whatsnew/3 11 re913247
Ref: 871913247
Ref: whatsnew/3 11 whatsnew311-re913247
Ref: 872913247
Ref: re<4>-Footnote-1913566
Node: shutil<3>913632
Ref: whatsnew/3 11 shutil913732
Ref: 873913732
Ref: whatsnew/3 11 whatsnew311-shutil913732
Ref: 874913732
Ref: shutil<3>-Footnote-1913938
Node: socket<2>914003
Ref: whatsnew/3 11 socket914108
Ref: 875914108
Ref: whatsnew/3 11 whatsnew311-socket914108
Ref: 876914108
Ref: socket<2>-Footnote-1914547
Ref: socket<2>-Footnote-2914612
Node: sqlite3<5>914677
Ref: whatsnew/3 11 sqlite3914779
Ref: 878914779
Ref: whatsnew/3 11 whatsnew311-sqlite3914779
Ref: 879914779
Ref: sqlite3<5>-Footnote-1917331
Ref: sqlite3<5>-Footnote-2917396
Ref: sqlite3<5>-Footnote-3917461
Ref: sqlite3<5>-Footnote-4917526
Ref: sqlite3<5>-Footnote-5917591
Ref: sqlite3<5>-Footnote-6917656
Ref: sqlite3<5>-Footnote-7917721
Ref: sqlite3<5>-Footnote-8917786
Ref: sqlite3<5>-Footnote-9917851
Ref: sqlite3<5>-Footnote-10917916
Ref: sqlite3<5>-Footnote-11917982
Node: string918048
Ref: whatsnew/3 11 string918147
Ref: 888918147
Ref: whatsnew/3 11 whatsnew311-string918147
Ref: 889918147
Ref: string-Footnote-1918522
Node: sys<4>918577
Ref: whatsnew/3 11 sys918678
Ref: 88d918678
Ref: whatsnew/3 11 whatsnew311-sys918678
Ref: 88e918678
Ref: sys<4>-Footnote-1919403
Ref: sys<4>-Footnote-2919468
Ref: sys<4>-Footnote-3919533
Node: sysconfig<2>919588
Ref: whatsnew/3 11 sysconfig919694
Ref: 892919694
Ref: whatsnew/3 11 whatsnew311-sysconfig919694
Ref: 893919694
Ref: sysconfig<2>-Footnote-1920586
Node: tempfile<3>920651
Ref: whatsnew/3 11 tempfile920763
Ref: 895920763
Ref: whatsnew/3 11 whatsnew311-tempfile920763
Ref: 896920763
Ref: tempfile<3>-Footnote-1921225
Node: threading<3>921280
Ref: whatsnew/3 11 threading921387
Ref: 89a921387
Ref: whatsnew/3 11 whatsnew311-threading921387
Ref: 89b921387
Ref: threading<3>-Footnote-1921933
Node: time<2>921998
Ref: whatsnew/3 11 time922104
Ref: 89f922104
Ref: whatsnew/3 11 whatsnew311-time922104
Ref: 8a0922104
Ref: time<2>-Footnote-1922958
Ref: time<2>-Footnote-2923023
Ref: time<2>-Footnote-3923120
Ref: time<2>-Footnote-4923185
Node: tkinter<4>923250
Ref: whatsnew/3 11 tkinter923356
Ref: 8a2923356
Ref: whatsnew/3 11 whatsnew311-tkinter923356
Ref: 8a3923356
Ref: tkinter<4>-Footnote-1923658
Node: traceback<2>923713
Ref: whatsnew/3 11 traceback923821
Ref: 8a5923821
Ref: whatsnew/3 11 whatsnew311-traceback923821
Ref: 8a6923821
Ref: traceback<2>-Footnote-1924347
Ref: traceback<2>-Footnote-2924412
Node: typing<5>924477
Ref: whatsnew/3 11 typing924589
Ref: 8a9924589
Ref: whatsnew/3 11 whatsnew311-typing924589
Ref: 8aa924589
Ref: typing<5>-Footnote-1928270
Ref: typing<5>-Footnote-2928325
Ref: typing<5>-Footnote-3928380
Ref: typing<5>-Footnote-4928435
Ref: typing<5>-Footnote-5928490
Ref: typing<5>-Footnote-6928555
Ref: typing<5>-Footnote-7928610
Ref: typing<5>-Footnote-8928665
Ref: typing<5>-Footnote-9928720
Ref: typing<5>-Footnote-10928775
Ref: typing<5>-Footnote-11928831
Ref: typing<5>-Footnote-12928887
Ref: typing<5>-Footnote-13928943
Ref: typing<5>-Footnote-14928999
Ref: typing<5>-Footnote-15929055
Node: unicodedata<4>929111
Ref: whatsnew/3 11 unicodedata929222
Ref: 8b9929222
Ref: whatsnew/3 11 whatsnew311-unicodedata929222
Ref: 8ba929222
Ref: unicodedata<4>-Footnote-1929430
Node: unittest<5>929495
Ref: whatsnew/3 11 unittest929604
Ref: 8bb929604
Ref: whatsnew/3 11 whatsnew311-unittest929604
Ref: 8bc929604
Ref: unittest<5>-Footnote-1930020
Node: venv<2>930085
Ref: whatsnew/3 11 venv930191
Ref: 8c1930191
Ref: whatsnew/3 11 whatsnew311-venv930191
Ref: 8c2930191
Ref: venv<2>-Footnote-1930873
Node: warnings<2>930938
Ref: whatsnew/3 11 warnings931043
Ref: 8c3931043
Ref: whatsnew/3 11 whatsnew311-warnings931043
Ref: 8c4931043
Ref: warnings<2>-Footnote-1931388
Node: zipfile<2>931453
Ref: whatsnew/3 11 whatsnew311-zipfile931542
Ref: 8c6931542
Ref: whatsnew/3 11 zipfile931542
Ref: 8c7931542
Ref: zipfile<2>-Footnote-1932181
Ref: zipfile<2>-Footnote-2932246
Ref: zipfile<2>-Footnote-3932301
Node: Otimizações<4>932356
Ref: whatsnew/3 11 optimizations932501
Ref: 8ce932501
Ref: whatsnew/3 11 whatsnew311-optimizations932501
Ref: 8cf932501
Ref: Otimizações<4>-Footnote-1935113
Ref: Otimizações<4>-Footnote-2935178
Ref: Otimizações<4>-Footnote-3935233
Ref: Otimizações<4>-Footnote-4935288
Ref: Otimizações<4>-Footnote-5935343
Ref: Otimizações<4>-Footnote-6935408
Ref: Otimizações<4>-Footnote-7935463
Ref: Otimizações<4>-Footnote-8935528
Ref: Otimizações<4>-Footnote-9935583
Node: CPython mais rápido935648
Ref: whatsnew/3 11 faster-cpython935809
Ref: 8da935809
Ref: whatsnew/3 11 whatsnew311-faster-cpython935809
Ref: 7b2935809
Ref: CPython mais rápido-Footnote-1936520
Ref: CPython mais rápido-Footnote-2936586
Node: Inicialização mais rápida936634
Ref: whatsnew/3 11 faster-startup936760
Ref: 8dd936760
Ref: whatsnew/3 11 whatsnew311-faster-startup936760
Ref: 8db936760
Node: Importações congeladas/objetos de código estático936900
Ref: whatsnew/3 11 frozen-imports-static-code-objects937018
Ref: 8de937018
Ref: whatsnew/3 11 whatsnew311-faster-imports937018
Ref: 8df937018
Node: Tempo de execução mais rápido937996
Ref: whatsnew/3 11 faster-runtime938139
Ref: 8e1938139
Ref: whatsnew/3 11 whatsnew311-faster-runtime938139
Ref: 8dc938139
Node: Quadros Python menos custosos e mais preguiçosos938423
Ref: whatsnew/3 11 cheaper-lazy-python-frames938586
Ref: 8e2938586
Ref: whatsnew/3 11 whatsnew311-lazy-python-frames938586
Ref: 8e3938586
Ref: whatsnew/3 11 inline-calls939730
Ref: 8e7939730
Ref: Quadros Python menos custosos e mais preguiçosos-Footnote-1939768
Node: Chamadas de função Python em linha939833
Ref: whatsnew/3 11 inlined-python-function-calls940051
Ref: 8e8940051
Ref: whatsnew/3 11 whatsnew311-inline-calls940051
Ref: 8e9940051
Ref: Chamadas de função Python em linha-Footnote-1941147
Node: PEP 659 Interpretador adaptativo especializado941212
Ref: whatsnew/3 11 pep-659-specializing-adaptive-interpreter941372
Ref: 8ea941372
Ref: whatsnew/3 11 whatsnew311-pep659941372
Ref: 499941372
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-1948974
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-2949016
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-3949058
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-4949199
Node: Diversos949452
Ref: whatsnew/3 11 misc949570
Ref: 8eb949570
Ref: whatsnew/3 11 whatsnew311-faster-cpython-misc949570
Ref: 8ec949570
Ref: Diversos-Footnote-1950732
Ref: Diversos-Footnote-2950797
Ref: Diversos-Footnote-3950862
Ref: Diversos-Footnote-4950927
Ref: Diversos-Footnote-5950992
Ref: Diversos-Footnote-6951063
Node: FAQ951118
Ref: whatsnew/3 11 faq951209
Ref: 8ee951209
Ref: whatsnew/3 11 whatsnew311-faster-cpython-faq951209
Ref: 8ef951209
Node: Como devo escrever meu código para utilizar esses aceleradores?951560
Ref: whatsnew/3 11 faster-cpython-faq-my-code951709
Ref: 8f0951709
Ref: whatsnew/3 11 how-should-i-write-my-code-to-utilize-these-speedups951709
Ref: 8f1951709
Node: O CPython 3 11 usará mais memória?952046
Ref: whatsnew/3 11 faster-cpython-faq-memory952270
Ref: 8f2952270
Ref: whatsnew/3 11 will-cpython-3-11-use-more-memory952270
Ref: 8f3952270
Node: Não vejo nenhuma aceleração em minha carga de trabalho Por que?952564
Ref: whatsnew/3 11 faster-cpython-ymmv952749
Ref: 8f4952749
Ref: whatsnew/3 11 i-don-t-see-any-speedups-in-my-workload-why952749
Ref: 8f5952749
Node: Existe um compilador JIT?953439
Ref: whatsnew/3 11 faster-cpython-jit953579
Ref: 8f6953579
Ref: whatsnew/3 11 is-there-a-jit-compiler953579
Ref: 8f7953579
Node: Sobre953705
Ref: whatsnew/3 11 about953779
Ref: 8f8953779
Ref: whatsnew/3 11 whatsnew311-faster-cpython-about953779
Ref: 8f9953779
Node: Alterações de bytecode do CPython<4>954140
Ref: whatsnew/3 11 cpython-bytecode-changes954302
Ref: 8fb954302
Ref: whatsnew/3 11 whatsnew311-bytecode-changes954302
Ref: 8fc954302
Node: Novos opcodes954945
Ref: whatsnew/3 11 new-opcodes955063
Ref: 8fe955063
Ref: whatsnew/3 11 whatsnew311-added-opcodes955063
Ref: 8ff955063
Ref: Novos opcodes-Footnote-1955923
Node: Opcodes substituídos955965
Ref: whatsnew/3 11 replaced-opcodes956119
Ref: 908956119
Ref: whatsnew/3 11 whatsnew311-replaced-opcodes956119
Ref: 909956119
Ref: whatsnew/3 11 whatsnew311-changed-opcodes958952
Ref: 910958952
Ref: whatsnew/3 11 whatsnew311-removed-opcodes958952
Ref: 911958952
Ref: Opcodes substituídos-Footnote-1958988
Node: Opcodes alterados/removidos959212
Ref: whatsnew/3 11 changed-removed-opcodes959344
Ref: 912959344
Ref: whatsnew/3 11 whatsnew311-changed-removed-opcodes959344
Ref: 913959344
Ref: whatsnew/3 11 whatsnew311-deprecated959963
Ref: 916959963
Ref: Opcodes alterados/removidos-Footnote-1960000
Node: Descontinuados<4>960055
Ref: whatsnew/3 11 deprecated960230
Ref: 917960230
Ref: whatsnew/3 11 whatsnew311-python-api-deprecated960230
Ref: 918960230
Ref: whatsnew/3 11 whatsnew311-deprecated-language960418
Ref: 91a960418
Node: Linguagem/Embutidos960489
Ref: whatsnew/3 11 language-builtins960579
Ref: 91b960579
Ref: whatsnew/3 11 whatsnew311-deprecated-builtins960579
Ref: 91c960579
Ref: Linguagem/Embutidos-Footnote-1961879
Ref: Linguagem/Embutidos-Footnote-2961944
Ref: Linguagem/Embutidos-Footnote-3961999
Ref: Linguagem/Embutidos-Footnote-4962054
Node: Módulos962119
Ref: whatsnew/3 11 modules962236
Ref: 91d962236
Ref: whatsnew/3 11 whatsnew311-deprecated-modules962236
Ref: 91e962236
Ref: whatsnew/3 11 whatsnew311-pep594962272
Ref: 7be962272
Ref: Módulos-Footnote-1964559
Ref: Módulos-Footnote-2964601
Ref: Módulos-Footnote-3964666
Ref: Módulos-Footnote-4964721
Ref: Módulos-Footnote-5964786
Ref: Módulos-Footnote-6964828
Ref: Módulos-Footnote-7964893
Node: Biblioteca Padrão964958
Ref: whatsnew/3 11 standard-library965047
Ref: 91f965047
Ref: whatsnew/3 11 whatsnew311-deprecated-stdlib965047
Ref: 920965047
Ref: whatsnew/3 11 whatsnew311-pending-removal970195
Ref: 925970195
Ref: Biblioteca Padrão-Footnote-1970232
Ref: Biblioteca Padrão-Footnote-2970297
Ref: Biblioteca Padrão-Footnote-3970362
Ref: Biblioteca Padrão-Footnote-4970417
Ref: Biblioteca Padrão-Footnote-5970472
Ref: Biblioteca Padrão-Footnote-6970527
Ref: Biblioteca Padrão-Footnote-7970582
Ref: Biblioteca Padrão-Footnote-8970647
Ref: Biblioteca Padrão-Footnote-9970702
Ref: Biblioteca Padrão-Footnote-10970757
Ref: Biblioteca Padrão-Footnote-11970823
Ref: Biblioteca Padrão-Footnote-12970888
Node: Pendente remoção no Python 3 12970944
Ref: whatsnew/3 11 pending-removal-in-python-3-12971093
Ref: 926971093
Ref: whatsnew/3 11 whatsnew311-python-api-pending-removal971093
Ref: 927971093
Ref: whatsnew/3 11 whatsnew311-removed976773
Ref: 92b976773
Node: Removidos<4>976773
Ref: whatsnew/3 11 removed976930
Ref: 92c976930
Ref: whatsnew/3 11 whatsnew311-python-api-removed976930
Ref: 92d976930
Ref: whatsnew/3 11 whatsnew311-porting981844
Ref: 939981844
Ref: Removidos<4>-Footnote-1981881
Ref: Removidos<4>-Footnote-2981946
Ref: Removidos<4>-Footnote-3982011
Ref: Removidos<4>-Footnote-4982076
Ref: Removidos<4>-Footnote-5982141
Ref: Removidos<4>-Footnote-6982206
Ref: Removidos<4>-Footnote-7982271
Ref: Removidos<4>-Footnote-8982336
Ref: Removidos<4>-Footnote-9982401
Ref: Removidos<4>-Footnote-10982466
Ref: Removidos<4>-Footnote-11982532
Ref: Removidos<4>-Footnote-12982598
Ref: Removidos<4>-Footnote-13982664
Ref: Removidos<4>-Footnote-14982730
Ref: Removidos<4>-Footnote-15982772
Node: Portando para Python 3 11982826
Ref: whatsnew/3 11 porting-to-python-3-11982978
Ref: 93a982978
Ref: whatsnew/3 11 whatsnew311-python-api-porting982978
Ref: 93b982978
Ref: Portando para Python 3 11-Footnote-1986328
Ref: Portando para Python 3 11-Footnote-2986393
Ref: Portando para Python 3 11-Footnote-3986448
Ref: Portando para Python 3 11-Footnote-4986513
Ref: Portando para Python 3 11-Footnote-5986578
Ref: Portando para Python 3 11-Footnote-6986643
Ref: Portando para Python 3 11-Footnote-7986708
Ref: Portando para Python 3 11-Footnote-8986773
Node: Mudanças na construção<3>986838
Ref: whatsnew/3 11 build-changes987002
Ref: 945987002
Ref: whatsnew/3 11 whatsnew311-build-changes987002
Ref: 946987002
Ref: Mudanças na construção<3>-Footnote-1991630
Ref: Mudanças na construção<3>-Footnote-2991679
Ref: Mudanças na construção<3>-Footnote-3991721
Ref: Mudanças na construção<3>-Footnote-4991754
Ref: Mudanças na construção<3>-Footnote-5991786
Ref: Mudanças na construção<3>-Footnote-6991812
Ref: Mudanças na construção<3>-Footnote-7991841
Ref: Mudanças na construção<3>-Footnote-8991896
Ref: Mudanças na construção<3>-Footnote-9991951
Ref: Mudanças na construção<3>-Footnote-10992006
Ref: Mudanças na construção<3>-Footnote-11992050
Ref: Mudanças na construção<3>-Footnote-12992134
Ref: Mudanças na construção<3>-Footnote-13992200
Ref: Mudanças na construção<3>-Footnote-14992266
Ref: Mudanças na construção<3>-Footnote-15992332
Ref: Mudanças na construção<3>-Footnote-16992380
Ref: Mudanças na construção<3>-Footnote-17992446
Ref: Mudanças na construção<3>-Footnote-18992512
Ref: Mudanças na construção<3>-Footnote-19992540
Ref: Mudanças na construção<3>-Footnote-20992606
Ref: Mudanças na construção<3>-Footnote-21992669
Ref: Mudanças na construção<3>-Footnote-22992697
Ref: Mudanças na construção<3>-Footnote-23992763
Ref: Mudanças na construção<3>-Footnote-24992829
Ref: Mudanças na construção<3>-Footnote-25992895
Ref: Mudanças na construção<3>-Footnote-26992961
Ref: Mudanças na construção<3>-Footnote-27993011
Ref: Mudanças na construção<3>-Footnote-28993077
Ref: Mudanças na construção<3>-Footnote-29993143
Ref: Mudanças na construção<3>-Footnote-30993209
Ref: Mudanças na construção<3>-Footnote-31993275
Ref: Mudanças na construção<3>-Footnote-32993341
Ref: Mudanças na construção<3>-Footnote-33993407
Node: Alterações na API C<7>993473
Ref: whatsnew/3 11 c-api-changes993644
Ref: 949993644
Ref: whatsnew/3 11 whatsnew311-c-api993644
Ref: 94a993644
Node: Novas funcionalidades<7>993960
Ref: whatsnew/3 11 id5994082
Ref: 94b994082
Ref: whatsnew/3 11 whatsnew311-c-api-new-features994082
Ref: 94c994082
Ref: Novas funcionalidades<7>-Footnote-1997137
Ref: Novas funcionalidades<7>-Footnote-2997202
Ref: Novas funcionalidades<7>-Footnote-3997267
Ref: Novas funcionalidades<7>-Footnote-4997332
Ref: Novas funcionalidades<7>-Footnote-5997397
Ref: Novas funcionalidades<7>-Footnote-6997462
Ref: Novas funcionalidades<7>-Footnote-7997527
Ref: Novas funcionalidades<7>-Footnote-8997592
Ref: Novas funcionalidades<7>-Footnote-9997657
Node: Portando para Python 3 11<2>997712
Ref: whatsnew/3 11 id6997860
Ref: 96d997860
Ref: whatsnew/3 11 whatsnew311-c-api-porting997860
Ref: 93c997860
Ref: whatsnew/3 11 whatsnew311-pep670997931
Ref: 7c0997931
Ref: whatsnew/3 11 pyframeobject-3-11-hiding1005813
Ref: 9801005813
Ref: Portando para Python 3 11<2>-Footnote-11012080
Ref: Portando para Python 3 11<2>-Footnote-21012143
Ref: Portando para Python 3 11<2>-Footnote-31012185
Ref: Portando para Python 3 11<2>-Footnote-41012240
Ref: Portando para Python 3 11<2>-Footnote-51012305
Ref: Portando para Python 3 11<2>-Footnote-61012370
Ref: Portando para Python 3 11<2>-Footnote-71012435
Ref: Portando para Python 3 11<2>-Footnote-81012477
Ref: Portando para Python 3 11<2>-Footnote-91012542
Ref: Portando para Python 3 11<2>-Footnote-101012597
Ref: Portando para Python 3 11<2>-Footnote-111012653
Ref: Portando para Python 3 11<2>-Footnote-121012719
Ref: Portando para Python 3 11<2>-Footnote-131012762
Ref: Portando para Python 3 11<2>-Footnote-141012828
Ref: Portando para Python 3 11<2>-Footnote-151012894
Ref: Portando para Python 3 11<2>-Footnote-161012960
Ref: Portando para Python 3 11<2>-Footnote-171013026
Ref: Portando para Python 3 11<2>-Footnote-181013092
Ref: Portando para Python 3 11<2>-Footnote-191013158
Ref: Portando para Python 3 11<2>-Footnote-201013214
Ref: Portando para Python 3 11<2>-Footnote-211013267
Ref: Portando para Python 3 11<2>-Footnote-221013333
Ref: Portando para Python 3 11<2>-Footnote-231013399
Ref: Portando para Python 3 11<2>-Footnote-241013452
Node: Descontinuados<5>1013485
Ref: whatsnew/3 11 id71013645
Ref: 9891013645
Ref: whatsnew/3 11 whatsnew311-c-api-deprecated1013645
Ref: 9191013645
Ref: Descontinuados<5>-Footnote-11014645
Ref: Descontinuados<5>-Footnote-21014687
Ref: Descontinuados<5>-Footnote-31014742
Node: Pendente remoção no Python 3 12<2>1014807
Ref: whatsnew/3 11 id81014951
Ref: 98b1014951
Ref: whatsnew/3 11 whatsnew311-c-api-pending-removal1014951
Ref: 9281014951
Node: Removidos<5>1015708
Ref: whatsnew/3 11 id91015826
Ref: 98d1015826
Ref: whatsnew/3 11 whatsnew311-c-api-removed1015826
Ref: 92e1015826
Ref: whatsnew/3 11 whatsnew311-pep6241018137
Ref: 7bf1018137
Ref: Removidos<5>-Footnote-11019101
Ref: Removidos<5>-Footnote-21019166
Ref: Removidos<5>-Footnote-31019231
Ref: Removidos<5>-Footnote-41019296
Ref: Removidos<5>-Footnote-51019361
Ref: Removidos<5>-Footnote-61019426
Ref: Removidos<5>-Footnote-71019491
Ref: Removidos<5>-Footnote-81019556
Ref: Removidos<5>-Footnote-91019621
Ref: Removidos<5>-Footnote-101019686
Ref: Removidos<5>-Footnote-111019729
Ref: Removidos<5>-Footnote-121019789
Node: Alterações notáveis no 3 11 41019855
Ref: whatsnew/3 11 notable-changes-in-3-11-41020030
Ref: 9931020030
Node: tarfile<2>1020141
Ref: whatsnew/3 11 tarfile1020220
Ref: 9941020220
Ref: tarfile<2>-Footnote-11020830
Node: Alterações notáveis no 3 11 51020872
Ref: whatsnew/3 11 notable-changes-in-3-11-51021014
Ref: 9951021014
Node: OpenSSL1021114
Ref: whatsnew/3 11 openssl1021190
Ref: 9961021190
Node: O que há de novo no Python 3 101021323
Ref: whatsnew/3 10 doc1021500
Ref: 9971021500
Ref: whatsnew/3 10 no-color1021500
Ref: 9981021500
Ref: whatsnew/3 10 what-s-new-in-python-3-101021500
Ref: 9991021500
Node: Resumo – Destaques da versão<5>1022777
Ref: whatsnew/3 10 summary-release-highlights1022913
Ref: 99a1022913
Ref: Resumo – Destaques da versão<5>-Footnote-11024250
Ref: Resumo – Destaques da versão<5>-Footnote-21024292
Ref: Resumo – Destaques da versão<5>-Footnote-31024334
Ref: Resumo – Destaques da versão<5>-Footnote-41024376
Ref: Resumo – Destaques da versão<5>-Footnote-51024441
Ref: Resumo – Destaques da versão<5>-Footnote-61024483
Ref: Resumo – Destaques da versão<5>-Footnote-71024525
Ref: Resumo – Destaques da versão<5>-Footnote-81024567
Ref: Resumo – Destaques da versão<5>-Footnote-91024609
Ref: Resumo – Destaques da versão<5>-Footnote-101024651
Ref: Resumo – Destaques da versão<5>-Footnote-111024694
Ref: Resumo – Destaques da versão<5>-Footnote-121024737
Ref: Resumo – Destaques da versão<5>-Footnote-131024780
Ref: Resumo – Destaques da versão<5>-Footnote-141024823
Ref: Resumo – Destaques da versão<5>-Footnote-151024866
Node: Novas funcionalidades<8>1024909
Ref: whatsnew/3 10 new-features1025100
Ref: 99b1025100
Node: Gerenciadores de contexto entre parênteses1025553
Ref: whatsnew/3 10 parenthesized-context-managers1025692
Ref: 99c1025692
Ref: whatsnew/3 10 whatsnew310-pep5631025692
Ref: 99d1025692
Ref: Gerenciadores de contexto entre parênteses-Footnote-11027014
Ref: Gerenciadores de contexto entre parênteses-Footnote-21027056
Ref: Gerenciadores de contexto entre parênteses-Footnote-31027121
Node: Melhores mensagens de erro1027186
Ref: whatsnew/3 10 better-error-messages1027406
Ref: 99e1027406
Node: SyntaxErrors1027561
Ref: whatsnew/3 10 syntaxerrors1027662
Ref: 99f1027662
Ref: SyntaxErrors-Footnote-11033091
Ref: SyntaxErrors-Footnote-21033156
Ref: SyntaxErrors-Footnote-31033221
Ref: SyntaxErrors-Footnote-41033286
Ref: SyntaxErrors-Footnote-51033351
Ref: SyntaxErrors-Footnote-61033416
Ref: SyntaxErrors-Footnote-71033481
Ref: SyntaxErrors-Footnote-81033546
Ref: SyntaxErrors-Footnote-91033611
Ref: SyntaxErrors-Footnote-101033676
Ref: SyntaxErrors-Footnote-111033742
Node: IndentationErrors1033808
Ref: whatsnew/3 10 indentationerrors1033933
Ref: 9a01033933
Node: AttributeErrors1034355
Ref: whatsnew/3 10 attributeerrors1034478
Ref: 9a21034478
Ref: AttributeErrors-Footnote-11035319
Node: NameErrors1035384
Ref: whatsnew/3 10 nameerrors1035481
Ref: 9a31035481
Ref: NameErrors-Footnote-11036400
Node: PEP 626 Números de linha precisos para depuração e outras ferramentas1036465
Ref: whatsnew/3 10 pep-626-precise-line-numbers-for-debugging-and-other-tools1036688
Ref: 9a41036688
Node: PEP 634 Correspondência de padrão estrutural1037473
Ref: whatsnew/3 10 pep-634-structural-pattern-matching1037722
Ref: 9a61037722
Node: Sintaxe e operações1038635
Ref: whatsnew/3 10 syntax-and-operations1038769
Ref: 9a71038769
Node: Abordagem declarativa1039950
Ref: whatsnew/3 10 declarative-approach1040134
Ref: 9a81040134
Node: Padrão simples corresponder a um literal1041510
Ref: whatsnew/3 10 simple-pattern-match-to-a-literal1041709
Ref: 9a91041709
Node: Comportamento sem o curinga1043158
Ref: whatsnew/3 10 behavior-without-the-wildcard1043263
Ref: 9aa1043263
Node: Padrões com uma literal e variável1043880
Ref: whatsnew/3 10 patterns-with-a-literal-and-variable1044076
Ref: 9ab1044076
Node: Padrões e classes1045093
Ref: whatsnew/3 10 patterns-and-classes1045266
Ref: 9ac1045266
Node: Padrões com parâmetros posicionais1046211
Ref: whatsnew/3 10 patterns-with-positional-parameters1046302
Ref: 9ad1046302
Node: Padrões aninhados1046925
Ref: whatsnew/3 10 nested-patterns1047092
Ref: 9ae1047092
Node: Padrões complexos e o curinga1047763
Ref: whatsnew/3 10 complex-patterns-and-the-wildcard1047918
Ref: 9af1047918
Node: Guarda1048483
Ref: whatsnew/3 10 guard1048641
Ref: 9b01048641
Node: Outros recursos-chave1049111
Ref: whatsnew/3 10 other-key-features1049230
Ref: 9b11049230
Ref: Outros recursos-chave-Footnote-11051657
Ref: Outros recursos-chave-Footnote-21051699
Ref: Outros recursos-chave-Footnote-31051741
Node: EncodingWarning opcional e opção encoding="locale"1051783
Ref: whatsnew/3 10 optional-encodingwarning-and-encoding-locale-option1051951
Ref: 9b21051951
Ref: whatsnew/3 10 whatsnew310-pep5971051951
Ref: 9b31051951
Node: Novos recursos relacionados a dicas de tipo<3>1052926
Ref: whatsnew/3 10 new-feat-related-type-hints1053115
Ref: 9b71053115
Ref: whatsnew/3 10 new-features-related-to-type-hints1053115
Ref: 9b81053115
Ref: Novos recursos relacionados a dicas de tipo<3>-Footnote-11053717
Node: PEP 604 novo operador de união de tipo1053759
Ref: whatsnew/3 10 pep-604-new-type-union-operator1053942
Ref: 9b91053942
Ref: PEP 604 novo operador de união de tipo-Footnote-11055100
Ref: PEP 604 novo operador de união de tipo-Footnote-21055142
Ref: PEP 604 novo operador de união de tipo-Footnote-31055207
Node: PEP 612 variáveis de especificação de parâmetros1055272
Ref: whatsnew/3 10 pep-612-parameter-specification-variables1055481
Ref: 9bc1055481
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-11056899
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-21056941
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-31056983
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-41057048
Node: PEP 613 TypeAlias1057113
Ref: whatsnew/3 10 pep-613-typealias1057330
Ref: 9c11057330
Ref: PEP 613 TypeAlias-Footnote-11058242
Ref: PEP 613 TypeAlias-Footnote-21058284
Ref: PEP 613 TypeAlias-Footnote-31058326
Node: PEP 647 guardas de tipo definidas pelo usuário1058391
Ref: whatsnew/3 10 pep-647-user-defined-type-guards1058547
Ref: 9c31058547
Ref: PEP 647 guardas de tipo definidas pelo usuário-Footnote-11059092
Ref: PEP 647 guardas de tipo definidas pelo usuário-Footnote-21059134
Node: Outras mudanças na linguagem<4>1059199
Ref: whatsnew/3 10 other-language-changes1059381
Ref: 9c41059381
Ref: Outras mudanças na linguagem<4>-Footnote-11064448
Ref: Outras mudanças na linguagem<4>-Footnote-21064513
Ref: Outras mudanças na linguagem<4>-Footnote-31064578
Ref: Outras mudanças na linguagem<4>-Footnote-41064620
Ref: Outras mudanças na linguagem<4>-Footnote-51064685
Ref: Outras mudanças na linguagem<4>-Footnote-61064750
Ref: Outras mudanças na linguagem<4>-Footnote-71064815
Ref: Outras mudanças na linguagem<4>-Footnote-81064880
Ref: Outras mudanças na linguagem<4>-Footnote-91064945
Ref: Outras mudanças na linguagem<4>-Footnote-101064987
Ref: Outras mudanças na linguagem<4>-Footnote-111065053
Ref: Outras mudanças na linguagem<4>-Footnote-121065119
Ref: Outras mudanças na linguagem<4>-Footnote-131065185
Ref: Outras mudanças na linguagem<4>-Footnote-141065251
Ref: Outras mudanças na linguagem<4>-Footnote-151065317
Ref: Outras mudanças na linguagem<4>-Footnote-161065383
Node: Novos módulos<5>1065449
Ref: whatsnew/3 10 new-modules1065607
Ref: 9d11065607
Node: Módulos melhorados<5>1065663
Ref: whatsnew/3 10 improved-modules1065805
Ref: 9d21065805
Node: asyncio<7>1066975
Ref: whatsnew/3 10 asyncio1067064
Ref: 9d31067064
Ref: asyncio<7>-Footnote-11067266
Node: argparse<4>1067331
Ref: whatsnew/3 10 argparse1067437
Ref: 9d51067437
Ref: argparse<4>-Footnote-11067762
Node: array<3>1067826
Ref: whatsnew/3 10 array1067945
Ref: 9d61067945
Ref: array<3>-Footnote-11068185
Node: asynchat asyncore smtpd1068250
Ref: whatsnew/3 10 asynchat-asyncore-smtpd1068367
Ref: 9d81068367
Node: base64<3>1068662
Ref: whatsnew/3 10 base641068777
Ref: 9d91068777
Node: bdb<2>1068957
Ref: whatsnew/3 10 bdb1069055
Ref: 9dc1069055
Ref: bdb<2>-Footnote-11069261
Node: bisect1069326
Ref: whatsnew/3 10 bisect1069421
Ref: 9dd1069421
Ref: bisect-Footnote-11069644
Node: codecs1069708
Ref: whatsnew/3 10 codecs1069812
Ref: 9de1069812
Ref: codecs-Footnote-11070045
Node: collections abc1070110
Ref: whatsnew/3 10 collections-abc1070221
Ref: 9e01070221
Ref: collections abc-Footnote-11071222
Node: contextlib<2>1071287
Ref: whatsnew/3 10 contextlib1071401
Ref: 9e31071401
Ref: contextlib<2>-Footnote-11072005
Ref: contextlib<2>-Footnote-21072070
Node: curses<2>1072135
Ref: whatsnew/3 10 curses1072248
Ref: 9e71072248
Ref: curses<2>-Footnote-11072968
Ref: curses<2>-Footnote-21073033
Node: dataclasses<2>1073098
Ref: whatsnew/3 10 dataclasses1073210
Ref: 9ed1073210
Node: __slots__1073305
Ref: whatsnew/3 10 slots1073397
Ref: 9ee1073397
Ref: __slots__-Footnote-11073609
Node: Campos somente-nomeados1073674
Ref: whatsnew/3 10 keyword-only-fields1073766
Ref: 9ef1073766
Ref: Campos somente-nomeados-Footnote-11075361
Node: distutils<2>1075426
Ref: whatsnew/3 10 distutils1075539
Ref: 9f01075539
Ref: whatsnew/3 10 distutils-deprecated1075539
Ref: 9291075539
Ref: distutils<2>-Footnote-11076486
Ref: distutils<2>-Footnote-21076528
Node: doctest<2>1076593
Ref: whatsnew/3 10 doctest1076701
Ref: 9f11076701
Ref: doctest<2>-Footnote-11076904
Node: encodings1076969
Ref: whatsnew/3 10 encodings1077072
Ref: 9f21077072
Ref: encodings-Footnote-11077272
Node: enum<4>1077337
Ref: whatsnew/3 10 enum1077439
Ref: 9f41077439
Ref: enum<4>-Footnote-11077949
Ref: enum<4>-Footnote-21078014
Node: fileinput1078079
Ref: whatsnew/3 10 fileinput1078187
Ref: 9f51078187
Ref: fileinput-Footnote-11078650
Ref: fileinput-Footnote-21078715
Node: faulthandler<2>1078779
Ref: whatsnew/3 10 faulthandler1078885
Ref: 9f81078885
Ref: faulthandler<2>-Footnote-11079129
Node: gc<2>1079194
Ref: whatsnew/3 10 gc1079298
Ref: 9f91079298
Ref: gc<2>-Footnote-11079540
Node: glob<2>1079605
Ref: whatsnew/3 10 glob1079704
Ref: 9fd1079704
Ref: glob<2>-Footnote-11079976
Node: hashlib<3>1080041
Ref: whatsnew/3 10 hashlib1080142
Ref: 9ff1080142
Ref: hashlib<3>-Footnote-11080708
Ref: hashlib<3>-Footnote-21080750
Ref: hashlib<3>-Footnote-31080815
Ref: hashlib<3>-Footnote-41080880
Node: hmac<2>1080945
Ref: whatsnew/3 10 hmac1081056
Ref: a001081056
Ref: hmac<2>-Footnote-11081249
Node: IDLE e idlelib<2>1081314
Ref: whatsnew/3 10 idle-and-idlelib1081436
Ref: a011081436
Ref: IDLE e idlelib<2>-Footnote-11083812
Ref: IDLE e idlelib<2>-Footnote-21083877
Ref: IDLE e idlelib<2>-Footnote-31083942
Ref: IDLE e idlelib<2>-Footnote-41084007
Ref: IDLE e idlelib<2>-Footnote-51084072
Ref: IDLE e idlelib<2>-Footnote-61084137
Ref: IDLE e idlelib<2>-Footnote-71084202
Ref: IDLE e idlelib<2>-Footnote-81084267
Node: importlib metadata<2>1084322
Ref: whatsnew/3 10 importlib-metadata1084447
Ref: a061084447
Ref: importlib metadata<2>-Footnote-11085101
Node: inspect<4>1085174
Ref: whatsnew/3 10 inspect1085294
Ref: a091085294
Ref: inspect<4>-Footnote-11086577
Ref: inspect<4>-Footnote-21086642
Node: itertools<4>1086707
Ref: whatsnew/3 10 itertools1086818
Ref: a0b1086818
Ref: itertools<4>-Footnote-11086992
Node: linecache<2>1087057
Ref: whatsnew/3 10 linecache1087163
Ref: a0d1087163
Ref: linecache<2>-Footnote-11087370
Node: os<5>1087435
Ref: whatsnew/3 10 os1087539
Ref: a0e1087539
Ref: os<5>-Footnote-11088383
Ref: os<5>-Footnote-21088448
Ref: os<5>-Footnote-31088513
Ref: os<5>-Footnote-41088578
Node: os path<4>1088643
Ref: whatsnew/3 10 os-path1088745
Ref: a151088745
Ref: os path<4>-Footnote-11089100
Node: pathlib<8>1089165
Ref: whatsnew/3 10 pathlib1089273
Ref: a161089273
Ref: pathlib<8>-Footnote-11090034
Ref: pathlib<8>-Footnote-21090099
Ref: pathlib<8>-Footnote-31090164
Ref: pathlib<8>-Footnote-41090229
Node: platform<3>1090294
Ref: whatsnew/3 10 platform1090398
Ref: a1c1090398
Ref: platform<3>-Footnote-11090696
Ref: platform<3>-Footnote-21090769
Node: pprint1090834
Ref: whatsnew/3 10 pprint1090938
Ref: a1e1090938
Ref: pprint-Footnote-11091303
Ref: pprint-Footnote-21091368
Node: py_compile1091433
Ref: whatsnew/3 10 py-compile1091532
Ref: a201091532
Ref: py_compile-Footnote-11091759
Node: pyclbr1091824
Ref: whatsnew/3 10 pyclbr1091923
Ref: a211091923
Ref: pyclbr-Footnote-11092277
Node: shelve1092342
Ref: whatsnew/3 10 shelve1092444
Ref: a241092444
Ref: shelve-Footnote-11092725
Node: statistics<3>1092790
Ref: whatsnew/3 10 statistics1092893
Ref: a261092893
Ref: statistics<3>-Footnote-11093154
Node: site<2>1093219
Ref: whatsnew/3 10 site1093325
Ref: a291093325
Ref: site<2>-Footnote-11093522
Node: socket<3>1093587
Ref: whatsnew/3 10 socket1093686
Ref: a2a1093686
Ref: socket<3>-Footnote-11094159
Ref: socket<3>-Footnote-21094224
Ref: socket<3>-Footnote-31094289
Node: ssl<4>1094354
Ref: whatsnew/3 10 ssl1094456
Ref: a2d1094456
Ref: ssl<4>-Footnote-11096501
Ref: ssl<4>-Footnote-21096543
Ref: ssl<4>-Footnote-31096608
Ref: ssl<4>-Footnote-41096673
Ref: ssl<4>-Footnote-51096738
Ref: ssl<4>-Footnote-61096803
Ref: ssl<4>-Footnote-71096868
Ref: ssl<4>-Footnote-81096933
Ref: ssl<4>-Footnote-91096998
Ref: ssl<4>-Footnote-101097063
Ref: ssl<4>-Footnote-111097129
Ref: ssl<4>-Footnote-121097195
Ref: ssl<4>-Footnote-131097261
Ref: ssl<4>-Footnote-141097327
Ref: ssl<4>-Footnote-151097393
Node: sqlite3<6>1097459
Ref: whatsnew/3 10 sqlite31097558
Ref: a341097558
Ref: sqlite3<6>-Footnote-11097809
Node: sys<5>1097874
Ref: whatsnew/3 10 sys1097974
Ref: a361097974
Ref: sys<5>-Footnote-11098384
Ref: sys<5>-Footnote-21098449
Node: _thread1098514
Ref: whatsnew/3 10 thread1098616
Ref: a391098616
Ref: _thread-Footnote-11098880
Node: threading<4>1098945
Ref: whatsnew/3 10 threading1099053
Ref: a3b1099053
Ref: threading<4>-Footnote-11099631
Ref: threading<4>-Footnote-21099696
Node: traceback<3>1099761
Ref: whatsnew/3 10 traceback1099870
Ref: a421099870
Ref: traceback<3>-Footnote-11100210
Node: types<3>1100275
Ref: whatsnew/3 10 types1100381
Ref: a461100381
Ref: types<3>-Footnote-11100713
Node: typing<6>1100778
Ref: whatsnew/3 10 typing1100883
Ref: a4a1100883
Ref: typing<6>-Footnote-11103373
Ref: typing<6>-Footnote-21103415
Ref: typing<6>-Footnote-31103480
Ref: typing<6>-Footnote-41103545
Ref: typing<6>-Footnote-51103610
Node: unittest<6>1103675
Ref: whatsnew/3 10 unittest1103784
Ref: a4d1103784
Ref: unittest<6>-Footnote-11104017
Node: urllib parse1104082
Ref: whatsnew/3 10 urllib-parse1104188
Ref: a501104188
Ref: urllib parse-Footnote-11105440
Ref: urllib parse-Footnote-21105505
Ref: urllib parse-Footnote-31105564
Node: xml<2>1105619
Ref: whatsnew/3 10 xml1105726
Ref: a511105726
Ref: xml<2>-Footnote-11105947
Node: zipimport<3>1106012
Ref: whatsnew/3 10 zipimport1106098
Ref: a531106098
Ref: zipimport<3>-Footnote-11106500
Ref: zipimport<3>-Footnote-21106542
Ref: zipimport<3>-Footnote-31106607
Node: Otimizações<5>1106672
Ref: whatsnew/3 10 optimizations1106814
Ref: a571106814
Ref: Otimizações<5>-Footnote-11110624
Ref: Otimizações<5>-Footnote-21110689
Ref: Otimizações<5>-Footnote-31110754
Ref: Otimizações<5>-Footnote-41110819
Ref: Otimizações<5>-Footnote-51110884
Ref: Otimizações<5>-Footnote-61110949
Ref: Otimizações<5>-Footnote-71111070
Ref: Otimizações<5>-Footnote-81111135
Ref: Otimizações<5>-Footnote-91111200
Ref: Otimizações<5>-Footnote-101111265
Ref: Otimizações<5>-Footnote-111111331
Ref: Otimizações<5>-Footnote-121111397
Ref: Otimizações<5>-Footnote-131111440
Ref: Otimizações<5>-Footnote-141111506
Ref: Otimizações<5>-Footnote-151111572
Ref: Otimizações<5>-Footnote-161111638
Ref: Otimizações<5>-Footnote-171111704
Ref: Otimizações<5>-Footnote-181111770
Node: Descontinuados<6>1111836
Ref: whatsnew/3 10 deprecated1111968
Ref: a5d1111968
Ref: whatsnew/3 10 whatsnew310-deprecated1111968
Ref: a321111968
Ref: Descontinuados<6>-Footnote-11121960
Ref: Descontinuados<6>-Footnote-21122025
Ref: Descontinuados<6>-Footnote-31122090
Ref: Descontinuados<6>-Footnote-41122155
Ref: Descontinuados<6>-Footnote-51122220
Ref: Descontinuados<6>-Footnote-61122285
Ref: Descontinuados<6>-Footnote-71122350
Ref: Descontinuados<6>-Footnote-81122415
Ref: Descontinuados<6>-Footnote-91122480
Ref: Descontinuados<6>-Footnote-101122545
Ref: Descontinuados<6>-Footnote-111122611
Ref: Descontinuados<6>-Footnote-121122677
Ref: Descontinuados<6>-Footnote-131122743
Ref: Descontinuados<6>-Footnote-141122809
Ref: Descontinuados<6>-Footnote-151122868
Ref: Descontinuados<6>-Footnote-161122934
Ref: Descontinuados<6>-Footnote-171122990
Ref: Descontinuados<6>-Footnote-181123056
Ref: Descontinuados<6>-Footnote-191123122
Ref: Descontinuados<6>-Footnote-201123188
Node: Removidos<6>1123254
Ref: whatsnew/3 10 removed1123395
Ref: a6b1123395
Ref: whatsnew/3 10 whatsnew310-removed1123395
Ref: a6c1123395
Ref: Removidos<6>-Footnote-11126891
Ref: Removidos<6>-Footnote-21126956
Ref: Removidos<6>-Footnote-31127021
Ref: Removidos<6>-Footnote-41127086
Ref: Removidos<6>-Footnote-51127151
Ref: Removidos<6>-Footnote-61127216
Ref: Removidos<6>-Footnote-71127281
Node: Portando para Python 3 101127346
Ref: whatsnew/3 10 porting-to-python-3-101127508
Ref: a711127508
Node: Alterações na sintaxe Python1127859
Ref: whatsnew/3 10 changes-in-the-python-syntax1127989
Ref: a721127989
Ref: Alterações na sintaxe Python-Footnote-11128652
Node: Alterações na API Python<4>1128717
Ref: whatsnew/3 10 changes-in-the-python-api1128880
Ref: a731128880
Ref: whatsnew/3 10 changes-python-api1128880
Ref: a701128880
Ref: Alterações na API Python<4>-Footnote-11131961
Ref: Alterações na API Python<4>-Footnote-21132026
Ref: Alterações na API Python<4>-Footnote-31132091
Ref: Alterações na API Python<4>-Footnote-41132156
Ref: Alterações na API Python<4>-Footnote-51132221
Ref: Alterações na API Python<4>-Footnote-61132286
Node: Alterações na API C<8>1132351
Ref: whatsnew/3 10 changes-in-the-c-api1132475
Ref: a7a1132475
Node: Alterações de bytecode do CPython<5>1135103
Ref: whatsnew/3 10 cpython-bytecode-changes1135281
Ref: a801135281
Ref: Alterações de bytecode do CPython<5>-Footnote-11135603
Node: Mudanças na construção<4>1135668
Ref: whatsnew/3 10 build-changes1135845
Ref: a811135845
Ref: Mudanças na construção<4>-Footnote-11138524
Ref: Mudanças na construção<4>-Footnote-21138566
Ref: Mudanças na construção<4>-Footnote-31138631
Ref: Mudanças na construção<4>-Footnote-41138696
Ref: Mudanças na construção<4>-Footnote-51138761
Ref: Mudanças na construção<4>-Footnote-61138826
Ref: Mudanças na construção<4>-Footnote-71138891
Ref: Mudanças na construção<4>-Footnote-81138956
Ref: Mudanças na construção<4>-Footnote-91139021
Ref: Mudanças na construção<4>-Footnote-101139086
Ref: Mudanças na construção<4>-Footnote-111139152
Node: Alterações na API C<9>1139218
Ref: whatsnew/3 10 c-api-changes1139399
Ref: a861139399
Node: PEP 652 Mantendo a ABI estável1139709
Ref: whatsnew/3 10 pep-652-maintaining-the-stable-abi1139834
Ref: a871139834
Ref: PEP 652 Mantendo a ABI estável-Footnote-11140300
Ref: PEP 652 Mantendo a ABI estável-Footnote-21140342
Node: Novas funcionalidades<9>1140407
Ref: whatsnew/3 10 id11140569
Ref: a881140569
Ref: Novas funcionalidades<9>-Footnote-11145578
Ref: Novas funcionalidades<9>-Footnote-21145643
Ref: Novas funcionalidades<9>-Footnote-31145708
Ref: Novas funcionalidades<9>-Footnote-41145773
Ref: Novas funcionalidades<9>-Footnote-51145838
Ref: Novas funcionalidades<9>-Footnote-61145903
Ref: Novas funcionalidades<9>-Footnote-71145968
Ref: Novas funcionalidades<9>-Footnote-81146035
Ref: Novas funcionalidades<9>-Footnote-91146100
Ref: Novas funcionalidades<9>-Footnote-101146165
Ref: Novas funcionalidades<9>-Footnote-111146231
Ref: Novas funcionalidades<9>-Footnote-121146297
Ref: Novas funcionalidades<9>-Footnote-131146363
Ref: Novas funcionalidades<9>-Footnote-141146429
Ref: Novas funcionalidades<9>-Footnote-151146495
Ref: Novas funcionalidades<9>-Footnote-161146561
Ref: Novas funcionalidades<9>-Footnote-171146627
Ref: Novas funcionalidades<9>-Footnote-181146693
Node: Portando para Python 3 10<2>1146759
Ref: whatsnew/3 10 id21146907
Ref: a9d1146907
Ref: Portando para Python 3 10<2>-Footnote-11150809
Ref: Portando para Python 3 10<2>-Footnote-21150851
Ref: Portando para Python 3 10<2>-Footnote-31150916
Ref: Portando para Python 3 10<2>-Footnote-41150981
Ref: Portando para Python 3 10<2>-Footnote-51151046
Ref: Portando para Python 3 10<2>-Footnote-61151111
Ref: Portando para Python 3 10<2>-Footnote-71151176
Ref: Portando para Python 3 10<2>-Footnote-81151241
Ref: Portando para Python 3 10<2>-Footnote-91151306
Ref: Portando para Python 3 10<2>-Footnote-101151371
Ref: Portando para Python 3 10<2>-Footnote-111151437
Node: Descontinuados<7>1151503
Ref: whatsnew/3 10 id31151639
Ref: aa31151639
Ref: Descontinuados<7>-Footnote-11151955
Node: Removidos<7>1152020
Ref: whatsnew/3 10 id41152119
Ref: aa51152119
Ref: Removidos<7>-Footnote-11157283
Ref: Removidos<7>-Footnote-21157348
Ref: Removidos<7>-Footnote-31157390
Ref: Removidos<7>-Footnote-41157455
Ref: Removidos<7>-Footnote-51157520
Ref: Removidos<7>-Footnote-61157585
Ref: Removidos<7>-Footnote-71157650
Ref: Removidos<7>-Footnote-81157715
Ref: Removidos<7>-Footnote-91157780
Ref: Removidos<7>-Footnote-101157822
Ref: Removidos<7>-Footnote-111157888
Ref: Removidos<7>-Footnote-121157954
Ref: Removidos<7>-Footnote-131158020
Ref: Removidos<7>-Footnote-141158086
Ref: Removidos<7>-Footnote-151158152
Ref: Removidos<7>-Footnote-161158218
Node: Recursos de segurança notáveis no 3 10 71158284
Ref: whatsnew/3 10 notable-security-feature-in-3-10-71158479
Ref: ab21158479
Ref: Recursos de segurança notáveis no 3 10 7-Footnote-11159316
Node: Recursos de segurança notáveis no 3 10 81159372
Ref: whatsnew/3 10 notable-security-feature-in-3-10-81159576
Ref: ab31159576
Ref: Recursos de segurança notáveis no 3 10 8-Footnote-11160071
Node: Alterações notáveis no 3 10 121160126
Ref: whatsnew/3 10 notable-changes-in-3-10-121160279
Ref: ab41160279
Node: tarfile<3>1160392
Ref: whatsnew/3 10 tarfile1160472
Ref: ab51160472
Ref: tarfile<3>-Footnote-11161082
Node: O que há de novo no Python 3 91161124
Ref: whatsnew/3 9 doc1161300
Ref: ab61161300
Ref: whatsnew/3 9 no-color1161300
Ref: ab71161300
Ref: whatsnew/3 9 what-s-new-in-python-3-91161300
Ref: ab81161300
Ref: O que há de novo no Python 3 9-Footnote-11162792
Node: Resumo – Destaques da versão<6>1162834
Ref: whatsnew/3 9 summary-release-highlights1162999
Ref: ab91162999
Ref: Resumo – Destaques da versão<6>-Footnote-11165162
Ref: Resumo – Destaques da versão<6>-Footnote-21165204
Ref: Resumo – Destaques da versão<6>-Footnote-31165246
Ref: Resumo – Destaques da versão<6>-Footnote-41165288
Ref: Resumo – Destaques da versão<6>-Footnote-51165330
Ref: Resumo – Destaques da versão<6>-Footnote-61165372
Ref: Resumo – Destaques da versão<6>-Footnote-71165414
Ref: Resumo – Destaques da versão<6>-Footnote-81165456
Ref: Resumo – Destaques da versão<6>-Footnote-91165498
Ref: Resumo – Destaques da versão<6>-Footnote-101165540
Node: Você deve verificar DeprecationWarning no seu código1165583
Ref: whatsnew/3 9 you-should-check-for-deprecationwarning-in-your-code1165782
Ref: aba1165782
Node: Novas funcionalidades<10>1167642
Ref: whatsnew/3 9 new-features1167839
Ref: abf1167839
Node: Operadores de mesclagem & atualização de dicionário1168109
Ref: whatsnew/3 9 dictionary-merge-update-operators1168291
Ref: ac01168291
Ref: Operadores de mesclagem & atualização de dicionário-Footnote-11169128
Ref: Operadores de mesclagem & atualização de dicionário-Footnote-21169170
Node: Novos métodos de strings para remover prefixos e sufixos1169235
Ref: whatsnew/3 9 new-string-methods-to-remove-prefixes-and-suffixes1169472
Ref: ac11169472
Ref: Novos métodos de strings para remover prefixos e sufixos-Footnote-11170027
Ref: Novos métodos de strings para remover prefixos e sufixos-Footnote-21170069
Node: Type hinting genéricos nas coleções padrão1170134
Ref: whatsnew/3 9 type-hinting-generics-in-standard-collections1170343
Ref: ac41170343
Ref: Type hinting genéricos nas coleções padrão-Footnote-11171094
Ref: Type hinting genéricos nas coleções padrão-Footnote-21171136
Node: Novo analisador sintático1171201
Ref: whatsnew/3 9 new-parser1171344
Ref: ac51171344
Ref: Novo analisador sintático-Footnote-11172410
Ref: Novo analisador sintático-Footnote-21172497
Ref: Novo analisador sintático-Footnote-31172560
Ref: Novo analisador sintático-Footnote-41172602
Node: Outras mudanças na linguagem<5>1172667
Ref: whatsnew/3 9 other-language-changes1172827
Ref: ac61172827
Ref: Outras mudanças na linguagem<5>-Footnote-11176204
Ref: Outras mudanças na linguagem<5>-Footnote-21176269
Ref: Outras mudanças na linguagem<5>-Footnote-31176334
Ref: Outras mudanças na linguagem<5>-Footnote-41176399
Ref: Outras mudanças na linguagem<5>-Footnote-51176464
Ref: Outras mudanças na linguagem<5>-Footnote-61176506
Ref: Outras mudanças na linguagem<5>-Footnote-71176571
Ref: Outras mudanças na linguagem<5>-Footnote-81176636
Ref: Outras mudanças na linguagem<5>-Footnote-91176701
Ref: Outras mudanças na linguagem<5>-Footnote-101176766
Ref: Outras mudanças na linguagem<5>-Footnote-111176832
Node: Novos módulos<6>1176898
Ref: whatsnew/3 9 new-modules1177055
Ref: ad01177055
Node: zoneinfo1177145
Ref: whatsnew/3 9 zoneinfo1177227
Ref: ad11177227
Ref: zoneinfo-Footnote-11178416
Ref: zoneinfo-Footnote-21178457
Node: graphlib<2>1178499
Ref: whatsnew/3 9 graphlib1178581
Ref: ad31178581
Ref: graphlib<2>-Footnote-11178923
Node: Módulos melhorados<6>1178988
Ref: whatsnew/3 9 improved-modules1179129
Ref: ad51179129
Node: ast<4>1179973
Ref: whatsnew/3 9 ast1180057
Ref: ad61180057
Ref: ast<4>-Footnote-11180761
Ref: ast<4>-Footnote-21180826
Ref: ast<4>-Footnote-31180891
Node: asyncio<8>1180956
Ref: whatsnew/3 9 asyncio1181062
Ref: ad91181062
Ref: asyncio<8>-Footnote-11182956
Ref: asyncio<8>-Footnote-21183021
Ref: asyncio<8>-Footnote-31183086
Ref: asyncio<8>-Footnote-41183151
Ref: asyncio<8>-Footnote-51183216
Ref: asyncio<8>-Footnote-61183281
Node: compileall<2>1183346
Ref: whatsnew/3 9 compileall1183467
Ref: ade1183467
Ref: compileall<2>-Footnote-11184129
Ref: compileall<2>-Footnote-21184194
Node: concurrent futures<3>1184259
Ref: whatsnew/3 9 concurrent-futures1184379
Ref: adf1184379
Ref: concurrent futures<3>-Footnote-11185356
Ref: concurrent futures<3>-Footnote-21185421
Ref: concurrent futures<3>-Footnote-31185486
Node: curses<3>1185551
Ref: whatsnew/3 9 curses1185669
Ref: ae11185669
Ref: curses<3>-Footnote-11185952
Node: datetime<3>1186017
Ref: whatsnew/3 9 datetime1186126
Ref: ae61186126
Ref: datetime<3>-Footnote-11186450
Node: distutils<3>1186515
Ref: whatsnew/3 9 distutils1186623
Ref: ae91186623
Ref: distutils<3>-Footnote-11186884
Node: fcntl<2>1186949
Ref: whatsnew/3 9 fcntl1187055
Ref: aea1187055
Ref: fcntl<2>-Footnote-11187273
Node: ftplib<2>1187338
Ref: whatsnew/3 9 ftplib1187437
Ref: aeb1187437
Ref: ftplib<2>-Footnote-11187746
Node: gc<3>1187811
Ref: whatsnew/3 9 gc1187912
Ref: aee1187912
Ref: gc<3>-Footnote-11188456
Ref: gc<3>-Footnote-21188521
Node: hashlib<4>1188586
Ref: whatsnew/3 9 hashlib1188685
Ref: af01188685
Ref: hashlib<4>-Footnote-11189237
Ref: hashlib<4>-Footnote-21189302
Node: http<2>1189367
Ref: whatsnew/3 9 http1189478
Ref: af11189478
Ref: http<2>-Footnote-11189761
Ref: http<2>-Footnote-21189826
Node: IDLE e idlelib<3>1189891
Ref: whatsnew/3 9 idle-and-idlelib1190002
Ref: af31190002
Ref: IDLE e idlelib<3>-Footnote-11191375
Ref: IDLE e idlelib<3>-Footnote-21191439
Ref: IDLE e idlelib<3>-Footnote-31191504
Ref: IDLE e idlelib<3>-Footnote-41191569
Ref: IDLE e idlelib<3>-Footnote-51191634
Ref: IDLE e idlelib<3>-Footnote-61191699
Ref: IDLE e idlelib<3>-Footnote-71191764
Node: imaplib<2>1191829
Ref: whatsnew/3 9 imaplib1191945
Ref: af41191945
Ref: imaplib<2>-Footnote-11192837
Ref: imaplib<2>-Footnote-21192902
Node: importlib<3>1192967
Ref: whatsnew/3 9 importlib1193076
Ref: afb1193076
Ref: importlib<3>-Footnote-11193951
Ref: importlib<3>-Footnote-21194016
Ref: importlib<3>-Footnote-31194081
Node: inspect<5>1194146
Ref: whatsnew/3 9 inspect1194257
Ref: afd1194257
Ref: inspect<5>-Footnote-11194492
Ref: inspect<5>-Footnote-21194557
Node: ipaddress<2>1194622
Ref: whatsnew/3 9 ipaddress1194728
Ref: aff1194728
Ref: ipaddress<2>-Footnote-11195355
Ref: ipaddress<2>-Footnote-21195420
Node: math<5>1195485
Ref: whatsnew/3 9 math1195599
Ref: b011195599
Ref: math<5>-Footnote-11196383
Ref: math<5>-Footnote-21196448
Ref: math<5>-Footnote-31196513
Ref: math<5>-Footnote-41196578
Node: multiprocessing<3>1196643
Ref: whatsnew/3 9 multiprocessing1196752
Ref: b051196752
Ref: multiprocessing<3>-Footnote-11197017
Node: nntplib1197082
Ref: whatsnew/3 9 nntplib1197189
Ref: b081197189
Ref: nntplib-Footnote-11197497
Node: os<6>1197562
Ref: whatsnew/3 9 os1197661
Ref: b091197661
Ref: os<6>-Footnote-11198499
Ref: os<6>-Footnote-21198564
Ref: os<6>-Footnote-31198629
Ref: os<6>-Footnote-41198694
Ref: os<6>-Footnote-51198759
Ref: os<6>-Footnote-61198824
Node: pathlib<9>1198889
Ref: whatsnew/3 9 pathlib1198987
Ref: b0e1198987
Ref: pathlib<9>-Footnote-11199217
Node: pdb<5>1199282
Ref: whatsnew/3 9 pdb1199381
Ref: b111199381
Ref: pdb<5>-Footnote-11199577
Node: poplib1199642
Ref: whatsnew/3 9 poplib1199740
Ref: b121199740
Ref: poplib-Footnote-11200050
Node: pprint<2>1200115
Ref: whatsnew/3 9 pprint1200215
Ref: b151200215
Ref: pprint<2>-Footnote-11200413
Node: pydoc<2>1200478
Ref: whatsnew/3 9 pydoc1200581
Ref: b161200581
Ref: pydoc<2>-Footnote-11200874
Node: random<3>1200939
Ref: whatsnew/3 9 random1201039
Ref: b181201039
Ref: random<3>-Footnote-11201252
Node: signal1201317
Ref: whatsnew/3 9 signal1201416
Ref: b1a1201416
Ref: signal-Footnote-11201654
Node: smtplib1201719
Ref: whatsnew/3 9 smtplib1201818
Ref: b1c1201818
Ref: smtplib-Footnote-11202263
Ref: smtplib-Footnote-21202328
Node: socket<4>1202393
Ref: whatsnew/3 9 socket1202493
Ref: b201202493
Ref: socket<4>-Footnote-11203081
Ref: socket<4>-Footnote-21203146
Ref: socket<4>-Footnote-31203211
Node: time<3>1203276
Ref: whatsnew/3 9 time1203375
Ref: b251203375
Ref: time<3>-Footnote-11203719
Node: sys<6>1203784
Ref: whatsnew/3 9 sys1203885
Ref: b271203885
Ref: sys<6>-Footnote-11204610
Ref: sys<6>-Footnote-21204677
Node: tracemalloc1204742
Ref: whatsnew/3 9 tracemalloc1204845
Ref: b2a1204845
Ref: tracemalloc-Footnote-11205163
Node: typing<7>1205228
Ref: whatsnew/3 9 typing1205339
Ref: b2c1205339
Ref: typing<7>-Footnote-11205726
Node: unicodedata<5>1205768
Ref: whatsnew/3 9 unicodedata1205875
Ref: b2e1205875
Ref: unicodedata<5>-Footnote-11206034
Node: venv<3>1206099
Ref: whatsnew/3 9 venv1206203
Ref: b2f1206203
Ref: venv<3>-Footnote-11206678
Node: xml<3>1206743
Ref: whatsnew/3 9 xml1206824
Ref: b301206824
Ref: xml<3>-Footnote-11207223
Node: Otimizações<6>1207288
Ref: whatsnew/3 9 optimizations1207429
Ref: b311207429
Ref: Otimizações<6>-Footnote-11213551
Ref: Otimizações<6>-Footnote-21213616
Ref: Otimizações<6>-Footnote-31213681
Ref: Otimizações<6>-Footnote-41213746
Ref: Otimizações<6>-Footnote-51213811
Ref: Otimizações<6>-Footnote-61213853
Ref: Otimizações<6>-Footnote-71213918
Ref: Otimizações<6>-Footnote-81213982
Ref: Otimizações<6>-Footnote-91214047
Ref: Otimizações<6>-Footnote-101214112
Ref: Otimizações<6>-Footnote-111214178
Ref: Otimizações<6>-Footnote-121214307
Node: Descontinuados<8>1214356
Ref: whatsnew/3 9 deprecated1214487
Ref: b361214487
Ref: Descontinuados<8>-Footnote-11219880
Ref: Descontinuados<8>-Footnote-21219945
Ref: Descontinuados<8>-Footnote-31220010
Ref: Descontinuados<8>-Footnote-41220075
Ref: Descontinuados<8>-Footnote-51220140
Ref: Descontinuados<8>-Footnote-61220205
Ref: Descontinuados<8>-Footnote-71220270
Ref: Descontinuados<8>-Footnote-81220335
Ref: Descontinuados<8>-Footnote-91220400
Ref: Descontinuados<8>-Footnote-101220465
Ref: Descontinuados<8>-Footnote-111220531
Ref: Descontinuados<8>-Footnote-121220597
Ref: Descontinuados<8>-Footnote-131220663
Ref: Descontinuados<8>-Footnote-141220729
Ref: Descontinuados<8>-Footnote-151220795
Ref: Descontinuados<8>-Footnote-161220838
Ref: Descontinuados<8>-Footnote-171220878
Ref: Descontinuados<8>-Footnote-181220917
Ref: Descontinuados<8>-Footnote-191220983
Node: Removidos<8>1221049
Ref: whatsnew/3 9 removed1221188
Ref: b381221188
Ref: whatsnew/3 9 removed-in-python-391221188
Ref: abe1221188
Ref: Removidos<8>-Footnote-11227479
Ref: Removidos<8>-Footnote-21227544
Ref: Removidos<8>-Footnote-31227609
Ref: Removidos<8>-Footnote-41227674
Ref: Removidos<8>-Footnote-51227739
Ref: Removidos<8>-Footnote-61227804
Ref: Removidos<8>-Footnote-71227869
Ref: Removidos<8>-Footnote-81227934
Ref: Removidos<8>-Footnote-91227999
Ref: Removidos<8>-Footnote-101228064
Ref: Removidos<8>-Footnote-111228130
Ref: Removidos<8>-Footnote-121228173
Ref: Removidos<8>-Footnote-131228239
Ref: Removidos<8>-Footnote-141228305
Ref: Removidos<8>-Footnote-151228371
Ref: Removidos<8>-Footnote-161228437
Ref: Removidos<8>-Footnote-171228503
Ref: Removidos<8>-Footnote-181228569
Ref: Removidos<8>-Footnote-191228635
Ref: Removidos<8>-Footnote-201228701
Ref: Removidos<8>-Footnote-211228767
Ref: Removidos<8>-Footnote-221228833
Node: Portando para Python 3 91228899
Ref: whatsnew/3 9 porting-to-python-3-91229049
Ref: b471229049
Node: Alterações na API Python<5>1229443
Ref: whatsnew/3 9 changes-in-the-python-api1229567
Ref: b481229567
Ref: Alterações na API Python<5>-Footnote-11234046
Ref: Alterações na API Python<5>-Footnote-21234111
Ref: Alterações na API Python<5>-Footnote-31234176
Ref: Alterações na API Python<5>-Footnote-41234241
Ref: Alterações na API Python<5>-Footnote-51234300
Ref: Alterações na API Python<5>-Footnote-61234365
Ref: Alterações na API Python<5>-Footnote-71234430
Ref: Alterações na API Python<5>-Footnote-81234495
Ref: Alterações na API Python<5>-Footnote-91234560
Ref: Alterações na API Python<5>-Footnote-101234625
Ref: Alterações na API Python<5>-Footnote-111234691
Node: Alterações na API C<10>1234757
Ref: whatsnew/3 9 changes-in-the-c-api1234928
Ref: b531234928
Ref: Alterações na API C<10>-Footnote-11237167
Ref: Alterações na API C<10>-Footnote-21237232
Ref: Alterações na API C<10>-Footnote-31237297
Node: Alterações de bytecode do CPython<6>1237362
Ref: whatsnew/3 9 cpython-bytecode-changes1237495
Ref: b551237495
Ref: Alterações de bytecode do CPython<6>-Footnote-11238375
Ref: Alterações de bytecode do CPython<6>-Footnote-21238440
Node: Mudanças na construção<5>1238505
Ref: whatsnew/3 9 build-changes1238668
Ref: b581238668
Ref: Mudanças na construção<5>-Footnote-11241462
Ref: Mudanças na construção<5>-Footnote-21241529
Ref: Mudanças na construção<5>-Footnote-31241594
Ref: Mudanças na construção<5>-Footnote-41241659
Ref: Mudanças na construção<5>-Footnote-51241724
Ref: Mudanças na construção<5>-Footnote-61241789
Ref: Mudanças na construção<5>-Footnote-71241854
Ref: Mudanças na construção<5>-Footnote-81241919
Node: Alterações na API C<11>1241984
Ref: whatsnew/3 9 c-api-changes1242161
Ref: b5a1242161
Node: Novas funcionalidades<11>1242364
Ref: whatsnew/3 9 id11242487
Ref: b5b1242487
Ref: Novas funcionalidades<11>-Footnote-11245734
Ref: Novas funcionalidades<11>-Footnote-21245776
Ref: Novas funcionalidades<11>-Footnote-31245841
Ref: Novas funcionalidades<11>-Footnote-41245906
Ref: Novas funcionalidades<11>-Footnote-51245971
Ref: Novas funcionalidades<11>-Footnote-61246036
Ref: Novas funcionalidades<11>-Footnote-71246101
Ref: Novas funcionalidades<11>-Footnote-81246166
Ref: Novas funcionalidades<11>-Footnote-91246231
Ref: Novas funcionalidades<11>-Footnote-101246296
Ref: Novas funcionalidades<11>-Footnote-111246362
Ref: Novas funcionalidades<11>-Footnote-121246428
Node: Portando para Python 3 9<2>1246494
Ref: whatsnew/3 9 id21246638
Ref: b661246638
Ref: Portando para Python 3 9<2>-Footnote-11250674
Ref: Portando para Python 3 9<2>-Footnote-21250716
Ref: Portando para Python 3 9<2>-Footnote-31250781
Ref: Portando para Python 3 9<2>-Footnote-41250846
Ref: Portando para Python 3 9<2>-Footnote-51250910
Ref: Portando para Python 3 9<2>-Footnote-61250975
Ref: Portando para Python 3 9<2>-Footnote-71251040
Ref: Portando para Python 3 9<2>-Footnote-81251082
Ref: Portando para Python 3 9<2>-Footnote-91251147
Ref: Portando para Python 3 9<2>-Footnote-101251212
Ref: Portando para Python 3 9<2>-Footnote-111251278
Node: Removidos<9>1251344
Ref: whatsnew/3 9 id31251454
Ref: b791251454
Ref: Removidos<9>-Footnote-11255519
Ref: Removidos<9>-Footnote-21255584
Ref: Removidos<9>-Footnote-31255649
Ref: Removidos<9>-Footnote-41255714
Ref: Removidos<9>-Footnote-51255779
Ref: Removidos<9>-Footnote-61255844
Ref: Removidos<9>-Footnote-71255909
Ref: Removidos<9>-Footnote-81255974
Ref: Removidos<9>-Footnote-91256039
Ref: Removidos<9>-Footnote-101256104
Ref: Removidos<9>-Footnote-111256170
Ref: Removidos<9>-Footnote-121256213
Ref: Removidos<9>-Footnote-131256279
Node: Alterações notáveis no Python 3 9 11256345
Ref: whatsnew/3 9 notable-changes-in-python-3-9-11256532
Ref: b7c1256532
Node: typing<8>1256757
Ref: whatsnew/3 9 id41256898
Ref: b7d1256898
Ref: typing<8>-Footnote-11258238
Ref: typing<8>-Footnote-21258280
Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac1258345
Ref: whatsnew/3 9 macos-11-0-big-sur-and-apple-silicon-mac-support1258486
Ref: b7e1258486
Ref: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac-Footnote-11259447
Node: Alterações notáveis no Python 3 9 21259512
Ref: whatsnew/3 9 notable-changes-in-python-3-9-21259712
Ref: b7f1259712
Node: collections abc<2>1259884
Ref: whatsnew/3 9 collections-abc1260001
Ref: b801260001
Ref: collections abc<2>-Footnote-11261010
Node: urllib parse<2>1261075
Ref: whatsnew/3 9 urllib-parse1261192
Ref: b811261192
Ref: urllib parse<2>-Footnote-11261958
Node: Alterações notáveis no Python 3 9 31262023
Ref: whatsnew/3 9 notable-changes-in-python-3-9-31262223
Ref: b821262223
Ref: Alterações notáveis no Python 3 9 3-Footnote-11262767
Node: Alterações notáveis no Python 3 9 51262822
Ref: whatsnew/3 9 notable-changes-in-python-3-9-51263026
Ref: b831263026
Node: urllib parse<3>1263159
Ref: whatsnew/3 9 id51263249
Ref: b841263249
Ref: urllib parse<3>-Footnote-11263828
Ref: urllib parse<3>-Footnote-21263887
Node: Recursos de segurança notáveis no 3 9 141263942
Ref: whatsnew/3 9 notable-security-feature-in-3-9-141264140
Ref: b851264140
Ref: Recursos de segurança notáveis no 3 9 14-Footnote-11264977
Node: Alterações notáveis no 3 9 171265033
Ref: whatsnew/3 9 notable-changes-in-3-9-171265184
Ref: b861265184
Node: tarfile<4>1265295
Ref: whatsnew/3 9 tarfile1265374
Ref: b871265374
Ref: tarfile<4>-Footnote-11265984
Node: O que há de novo no Python 3 81266026
Ref: whatsnew/3 8 doc1266201
Ref: b881266201
Ref: whatsnew/3 8 no-color1266201
Ref: b891266201
Ref: whatsnew/3 8 what-s-new-in-python-3-81266201
Ref: b8a1266201
Node: Resumo – Destaques da versão<7>1267807
Ref: whatsnew/3 8 summary-release-highlights1267943
Ref: b8b1267943
Node: Novas funcionalidades<12>1268017
Ref: whatsnew/3 8 new-features1268194
Ref: b8c1268194
Node: Expressões de atribuição1268998
Ref: whatsnew/3 8 assignment-expressions1269127
Ref: b8d1269127
Ref: Expressões de atribuição-Footnote-11270834
Ref: Expressões de atribuição-Footnote-21270931
Ref: Expressões de atribuição-Footnote-31270973
Node: Parâmetros somente-posicionais1271038
Ref: whatsnew/3 8 positional-only-parameters1271250
Ref: b8e1271250
Ref: Parâmetros somente-posicionais-Footnote-11274119
Ref: Parâmetros somente-posicionais-Footnote-21274181
Ref: Parâmetros somente-posicionais-Footnote-31274223
Node: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados1274288
Ref: whatsnew/3 8 parallel-filesystem-cache-for-compiled-bytecode-files1274549
Ref: b901274549
Ref: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados-Footnote-11275250
Node: A compilação de depuração usa a mesma ABI da compilação de lançamento1275315
Ref: whatsnew/3 8 debug-build-uses-the-same-abi-as-release-build1275622
Ref: b931275622
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-11278306
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-21278371
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-31278436
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-41278501
Node: O suporte a f-strings = para expressões de auto-documentação e depuração1278566
Ref: whatsnew/3 8 bpo-36817-whatsnew1278857
Ref: b951278857
Ref: whatsnew/3 8 f-strings-support-for-self-documenting-expressions-and-debugging1278857
Ref: b961278857
Ref: O suporte a f-strings = para expressões de auto-documentação e depuração-Footnote-11279994
Node: PEP 578 Ganchos de auditoria em tempo de execução Python1280059
Ref: whatsnew/3 8 pep-578-python-runtime-audit-hooks1280325
Ref: b971280325
Ref: PEP 578 Ganchos de auditoria em tempo de execução Python-Footnote-11280907
Node: PEP 587 Configuração de Inicialização do Python1280949
Ref: whatsnew/3 8 pep-587-python-initialization-configuration1281201
Ref: b981281201
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-11283284
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-21283326
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-31283368
Node: PEP 590 Vectorcall um protocolo de chamada rápida para CPython1283433
Ref: whatsnew/3 8 pep-590-vectorcall-a-fast-calling-protocol-for-cpython1283683
Ref: bb31283683
Ref: PEP 590 Vectorcall um protocolo de chamada rápida para CPython-Footnote-11284347
Ref: PEP 590 Vectorcall um protocolo de chamada rápida para CPython-Footnote-21284389
Node: Protocolo de Pickle 5 com buffers de dados fora da banda1284454
Ref: whatsnew/3 8 pickle-protocol-5-with-out-of-band-data-buffers1284644
Ref: bb41284644
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-11285504
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-21285546
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-31285588
Node: Outras mudanças na linguagem<6>1285653
Ref: whatsnew/3 8 other-language-changes1285813
Ref: bb51285813
Ref: Outras mudanças na linguagem<6>-Footnote-11293551
Ref: Outras mudanças na linguagem<6>-Footnote-21293616
Ref: Outras mudanças na linguagem<6>-Footnote-31293681
Ref: Outras mudanças na linguagem<6>-Footnote-41293746
Ref: Outras mudanças na linguagem<6>-Footnote-51293811
Ref: Outras mudanças na linguagem<6>-Footnote-61293876
Ref: Outras mudanças na linguagem<6>-Footnote-71293941
Ref: Outras mudanças na linguagem<6>-Footnote-81294006
Ref: Outras mudanças na linguagem<6>-Footnote-91294071
Ref: Outras mudanças na linguagem<6>-Footnote-101294136
Ref: Outras mudanças na linguagem<6>-Footnote-111294202
Ref: Outras mudanças na linguagem<6>-Footnote-121294270
Ref: Outras mudanças na linguagem<6>-Footnote-131294336
Ref: Outras mudanças na linguagem<6>-Footnote-141294406
Ref: Outras mudanças na linguagem<6>-Footnote-151294466
Ref: Outras mudanças na linguagem<6>-Footnote-161294532
Ref: Outras mudanças na linguagem<6>-Footnote-171294598
Node: Novos módulos<7>1294664
Ref: whatsnew/3 8 new-modules1294821
Ref: bbe1294821
Ref: Novos módulos<7>-Footnote-11295922
Node: Módulos melhorados<7>1295987
Ref: whatsnew/3 8 improved-modules1296128
Ref: bbf1296128
Node: ast<5>1297143
Ref: whatsnew/3 8 ast1297227
Ref: bc01297227
Ref: ast<5>-Footnote-11298351
Ref: ast<5>-Footnote-21298416
Ref: ast<5>-Footnote-31298458
Ref: ast<5>-Footnote-41298500
Ref: ast<5>-Footnote-51298542
Node: asyncio<9>1298607
Ref: whatsnew/3 8 asyncio1298708
Ref: bc21298708
Ref: asyncio<9>-Footnote-11302002
Ref: asyncio<9>-Footnote-21302067
Ref: asyncio<9>-Footnote-31302132
Ref: asyncio<9>-Footnote-41302197
Ref: asyncio<9>-Footnote-51302262
Ref: asyncio<9>-Footnote-61302327
Ref: asyncio<9>-Footnote-71302392
Ref: asyncio<9>-Footnote-81302457
Ref: asyncio<9>-Footnote-91302522
Ref: asyncio<9>-Footnote-101302575
Node: builtins1302641
Ref: whatsnew/3 8 builtins1302747
Ref: bc81302747
Ref: builtins-Footnote-11303298
Node: collections1303363
Ref: whatsnew/3 8 collections1303467
Ref: bc91303467
Ref: collections-Footnote-11303995
Node: cProfile1304060
Ref: whatsnew/3 8 cprofile1304162
Ref: bcb1304162
Ref: cProfile-Footnote-11304552
Node: csv<2>1304617
Ref: whatsnew/3 8 csv1304717
Ref: bcd1304717
Ref: csv<2>-Footnote-11305055
Node: curses<4>1305120
Ref: whatsnew/3 8 curses1305221
Ref: bcf1305221
Ref: curses<4>-Footnote-11305485
Node: ctypes<3>1305550
Ref: whatsnew/3 8 ctypes1305656
Ref: bd11305656
Ref: ctypes<3>-Footnote-11306226
Node: datetime<4>1306291
Ref: whatsnew/3 8 datetime1306400
Ref: bd41306400
Ref: datetime<4>-Footnote-11306855
Node: functools<3>1306920
Ref: whatsnew/3 8 functools1307025
Ref: bd71307025
Ref: functools<3>-Footnote-11308632
Ref: functools<3>-Footnote-21308697
Ref: functools<3>-Footnote-31308762
Node: gc<4>1308827
Ref: whatsnew/3 8 gc1308928
Ref: bdc1308928
Ref: gc<4>-Footnote-11309170
Node: gettext1309235
Ref: whatsnew/3 8 gettext1309331
Ref: bdd1309331
Ref: gettext-Footnote-11309537
Node: gzip<3>1309601
Ref: whatsnew/3 8 gzip1309709
Ref: bdf1309709
Ref: gzip<3>-Footnote-11310150
Ref: gzip<3>-Footnote-21310215
Node: IDLE e idlelib<4>1310279
Ref: whatsnew/3 8 idle-and-idlelib1310390
Ref: be11310390
Ref: IDLE e idlelib<4>-Footnote-11312717
Ref: IDLE e idlelib<4>-Footnote-21312784
Ref: IDLE e idlelib<4>-Footnote-31312848
Ref: IDLE e idlelib<4>-Footnote-41312913
Ref: IDLE e idlelib<4>-Footnote-51312978
Ref: IDLE e idlelib<4>-Footnote-61313043
Ref: IDLE e idlelib<4>-Footnote-71313107
Ref: IDLE e idlelib<4>-Footnote-81313172
Node: inspect<6>1313237
Ref: whatsnew/3 8 inspect1313346
Ref: be21313346
Ref: inspect<6>-Footnote-11314121
Node: io<5>1314186
Ref: whatsnew/3 8 io1314290
Ref: be41314290
Ref: io<5>-Footnote-11314687
Node: itertools<5>1314752
Ref: whatsnew/3 8 itertools1314855
Ref: be51314855
Ref: itertools<5>-Footnote-11315249
Node: json tool1315314
Ref: whatsnew/3 8 json-tool1315422
Ref: be71315422
Ref: json tool-Footnote-11315653
Node: logging<2>1315718
Ref: whatsnew/3 8 logging1315821
Ref: be81315821
Ref: logging<2>-Footnote-11316601
Node: math<6>1316666
Ref: whatsnew/3 8 math1316767
Ref: bea1316767
Ref: math<6>-Footnote-11318586
Ref: math<6>-Footnote-21318651
Ref: math<6>-Footnote-31318716
Ref: math<6>-Footnote-41318781
Ref: math<6>-Footnote-51318846
Ref: math<6>-Footnote-61318911
Ref: math<6>-Footnote-71318976
Ref: math<6>-Footnote-81319041
Node: mmap<2>1319106
Ref: whatsnew/3 8 mmap1319215
Ref: bf01319215
Ref: mmap<2>-Footnote-11319460
Node: multiprocessing<4>1319525
Ref: whatsnew/3 8 multiprocessing1319632
Ref: bf21319632
Ref: multiprocessing<4>-Footnote-11319951
Ref: multiprocessing<4>-Footnote-21320016
Node: os<7>1320081
Ref: whatsnew/3 8 os1320191
Ref: bf31320191
Ref: os<7>-Footnote-11321907
Ref: os<7>-Footnote-21321972
Ref: os<7>-Footnote-31322037
Node: os path<5>1322102
Ref: whatsnew/3 8 os-path1322205
Ref: bf81322205
Ref: os path<5>-Footnote-11323288
Ref: os path<5>-Footnote-21323353
Ref: os path<5>-Footnote-31323418
Node: pathlib<10>1323483
Ref: whatsnew/3 8 pathlib1323590
Ref: c001323590
Ref: pathlib<10>-Footnote-11324591
Ref: pathlib<10>-Footnote-21324656
Node: pickle<2>1324721
Ref: whatsnew/3 8 pickle1324826
Ref: c081324826
Ref: pickle<2>-Footnote-11325203
Node: plistlib1325268
Ref: whatsnew/3 8 plistlib1325371
Ref: c0b1325371
Ref: plistlib-Footnote-11325630
Node: pprint<3>1325695
Ref: whatsnew/3 8 pprint1325802
Ref: c0d1325802
Ref: pprint<3>-Footnote-11326941
Node: py_compile<2>1327006
Ref: whatsnew/3 8 py-compile1327110
Ref: c0f1327110
Ref: py_compile<2>-Footnote-11327319
Node: shlex1327384
Ref: whatsnew/3 8 shlex1327488
Ref: c111327488
Ref: shlex-Footnote-11327694
Node: shutil<4>1327759
Ref: whatsnew/3 8 shutil1327859
Ref: c131327859
Ref: shutil<4>-Footnote-11328545
Ref: shutil<4>-Footnote-21328610
Ref: shutil<4>-Footnote-31328675
Node: socket<5>1328740
Ref: whatsnew/3 8 socket1328841
Ref: c151328841
Ref: socket<5>-Footnote-11329454
Ref: socket<5>-Footnote-21329519
Node: ssl<5>1329584
Ref: whatsnew/3 8 ssl1329689
Ref: c1b1329689
Ref: ssl<5>-Footnote-11329965
Node: statistics<4>1330030
Ref: whatsnew/3 8 statistics1330132
Ref: c1e1330132
Ref: statistics<4>-Footnote-11331924
Ref: statistics<4>-Footnote-21331989
Ref: statistics<4>-Footnote-31332054
Ref: statistics<4>-Footnote-41332119
Ref: statistics<4>-Footnote-51332184
Node: sys<7>1332249
Ref: whatsnew/3 8 sys1332355
Ref: c231332355
Ref: sys<7>-Footnote-11332836
Node: tarfile<5>1332901
Ref: whatsnew/3 8 tarfile1333006
Ref: c241333006
Ref: tarfile<5>-Footnote-11333452
Node: threading<5>1333517
Ref: whatsnew/3 8 threading1333627
Ref: c251333627
Ref: threading<5>-Footnote-11334418
Ref: threading<5>-Footnote-21334485
Node: tokenize<2>1334550
Ref: whatsnew/3 8 tokenize1334660
Ref: c291334660
Ref: tokenize<2>-Footnote-11335019
Node: tkinter<5>1335084
Ref: whatsnew/3 8 tkinter1335189
Ref: c2a1335189
Ref: tkinter<5>-Footnote-11335756
Ref: tkinter<5>-Footnote-21335821
Ref: tkinter<5>-Footnote-31335886
Node: time<4>1335951
Ref: whatsnew/3 8 time1336054
Ref: c2b1336054
Ref: time<4>-Footnote-11336244
Node: typing<9>1336309
Ref: whatsnew/3 8 typing1336416
Ref: c2d1336416
Ref: typing<9>-Footnote-11337993
Ref: typing<9>-Footnote-21338035
Ref: typing<9>-Footnote-31338077
Ref: typing<9>-Footnote-41338119
Node: unicodedata<6>1338161
Ref: whatsnew/3 8 unicodedata1338272
Ref: c301338272
Ref: unicodedata<6>-Footnote-11338718
Ref: unicodedata<6>-Footnote-21338780
Ref: unicodedata<6>-Footnote-31338845
Node: unittest<7>1338910
Ref: whatsnew/3 8 unittest1339019
Ref: c321339019
Ref: unittest<7>-Footnote-11340383
Ref: unittest<7>-Footnote-21340448
Ref: unittest<7>-Footnote-31340513
Ref: unittest<7>-Footnote-41340578
Node: venv<4>1340643
Ref: whatsnew/3 8 venv1340745
Ref: c391340745
Ref: venv<4>-Footnote-11340999
Node: weakref1341064
Ref: whatsnew/3 8 weakref1341161
Ref: c3a1341161
Ref: weakref-Footnote-11341473
Node: xml<4>1341538
Ref: whatsnew/3 8 xml1341634
Ref: c3c1341634
Ref: xml<4>-Footnote-11342875
Ref: xml<4>-Footnote-21342940
Ref: xml<4>-Footnote-31343005
Ref: xml<4>-Footnote-41343070
Ref: xml<4>-Footnote-51343135
Node: xmlrpc1343200
Ref: whatsnew/3 8 xmlrpc1343280
Ref: c401343280
Ref: xmlrpc-Footnote-11343720
Node: Otimizações<7>1343785
Ref: whatsnew/3 8 optimizations1343942
Ref: c421343942
Ref: Otimizações<7>-Footnote-11348796
Ref: Otimizações<7>-Footnote-21348861
Ref: Otimizações<7>-Footnote-31348926
Ref: Otimizações<7>-Footnote-41348991
Ref: Otimizações<7>-Footnote-51349056
Ref: Otimizações<7>-Footnote-61349121
Ref: Otimizações<7>-Footnote-71349186
Ref: Otimizações<7>-Footnote-81349251
Ref: Otimizações<7>-Footnote-91349316
Ref: Otimizações<7>-Footnote-101349381
Ref: Otimizações<7>-Footnote-111349447
Ref: Otimizações<7>-Footnote-121349513
Node: Mudanças a construções e API C1349579
Ref: whatsnew/3 8 build-and-c-api-changes1349731
Ref: c4c1349731
Ref: Mudanças a construções e API C-Footnote-11355740
Ref: Mudanças a construções e API C-Footnote-21355805
Ref: Mudanças a construções e API C-Footnote-31355870
Ref: Mudanças a construções e API C-Footnote-41355935
Ref: Mudanças a construções e API C-Footnote-51356000
Ref: Mudanças a construções e API C-Footnote-61356065
Ref: Mudanças a construções e API C-Footnote-71356130
Ref: Mudanças a construções e API C-Footnote-81356195
Ref: Mudanças a construções e API C-Footnote-91356260
Ref: Mudanças a construções e API C-Footnote-101356325
Ref: Mudanças a construções e API C-Footnote-111356391
Ref: Mudanças a construções e API C-Footnote-121356457
Node: Descontinuados<9>1356523
Ref: whatsnew/3 8 deprecated1356687
Ref: c561356687
Ref: Descontinuados<9>-Footnote-11362712
Ref: Descontinuados<9>-Footnote-21362777
Ref: Descontinuados<9>-Footnote-31362842
Ref: Descontinuados<9>-Footnote-41362907
Ref: Descontinuados<9>-Footnote-51362971
Ref: Descontinuados<9>-Footnote-61363036
Ref: Descontinuados<9>-Footnote-71363101
Ref: Descontinuados<9>-Footnote-81363166
Ref: Descontinuados<9>-Footnote-91363231
Ref: Descontinuados<9>-Footnote-101363296
Ref: Descontinuados<9>-Footnote-111363362
Ref: Descontinuados<9>-Footnote-121363428
Ref: Descontinuados<9>-Footnote-131363494
Node: Remoção de APIs e recursos1363560
Ref: whatsnew/3 8 api-and-feature-removals1363717
Ref: c6d1363717
Ref: Remoção de APIs e recursos-Footnote-11366596
Ref: Remoção de APIs e recursos-Footnote-21366651
Ref: Remoção de APIs e recursos-Footnote-31366716
Ref: Remoção de APIs e recursos-Footnote-41366781
Ref: Remoção de APIs e recursos-Footnote-51366846
Ref: Remoção de APIs e recursos-Footnote-61366911
Ref: Remoção de APIs e recursos-Footnote-71366976
Ref: Remoção de APIs e recursos-Footnote-81367041
Ref: Remoção de APIs e recursos-Footnote-91367106
Ref: Remoção de APIs e recursos-Footnote-101367171
Ref: Remoção de APIs e recursos-Footnote-111367237
Node: Portando para o Python 3 81367303
Ref: whatsnew/3 8 porting-to-python-3-81367481
Ref: c701367481
Node: Alterações no comportamento do Python1367974
Ref: whatsnew/3 8 changes-in-python-behavior1368114
Ref: c711368114
Ref: Alterações no comportamento do Python-Footnote-11370624
Ref: Alterações no comportamento do Python-Footnote-21370689
Ref: Alterações no comportamento do Python-Footnote-31370754
Ref: Alterações no comportamento do Python-Footnote-41370819
Ref: Alterações no comportamento do Python-Footnote-51370884
Ref: Alterações no comportamento do Python-Footnote-61370949
Node: Alterações na API Python<6>1371014
Ref: whatsnew/3 8 changes-in-the-python-api1371188
Ref: c751371188
Ref: whatsnew/3 8 bpo-36085-whatsnew1378673
Ref: c881378673
Ref: Alterações na API Python<6>-Footnote-11380476
Ref: Alterações na API Python<6>-Footnote-21380518
Ref: Alterações na API Python<6>-Footnote-31380583
Ref: Alterações na API Python<6>-Footnote-41380648
Ref: Alterações na API Python<6>-Footnote-51380713
Ref: Alterações na API Python<6>-Footnote-61380778
Ref: Alterações na API Python<6>-Footnote-71380843
Ref: Alterações na API Python<6>-Footnote-81380908
Ref: Alterações na API Python<6>-Footnote-91380973
Ref: Alterações na API Python<6>-Footnote-101381038
Ref: Alterações na API Python<6>-Footnote-111381104
Ref: Alterações na API Python<6>-Footnote-121381170
Ref: Alterações na API Python<6>-Footnote-131381236
Ref: Alterações na API Python<6>-Footnote-141381302
Ref: Alterações na API Python<6>-Footnote-151381368
Ref: Alterações na API Python<6>-Footnote-161381434
Ref: Alterações na API Python<6>-Footnote-171381500
Ref: Alterações na API Python<6>-Footnote-181381565
Ref: Alterações na API Python<6>-Footnote-191381631
Ref: Alterações na API Python<6>-Footnote-201381697
Ref: Alterações na API Python<6>-Footnote-211381763
Ref: Alterações na API Python<6>-Footnote-221381829
Ref: Alterações na API Python<6>-Footnote-231381895
Ref: Alterações na API Python<6>-Footnote-241381961
Ref: Alterações na API Python<6>-Footnote-251382027
Ref: Alterações na API Python<6>-Footnote-261382093
Node: Alterações na API C<12>1382159
Ref: whatsnew/3 8 changes-in-the-c-api1382332
Ref: c8a1382332
Ref: Alterações na API C<12>-Footnote-11388464
Ref: Alterações na API C<12>-Footnote-21388529
Ref: Alterações na API C<12>-Footnote-31388594
Ref: Alterações na API C<12>-Footnote-41388659
Ref: Alterações na API C<12>-Footnote-51388724
Ref: Alterações na API C<12>-Footnote-61388789
Ref: Alterações na API C<12>-Footnote-71388854
Ref: Alterações na API C<12>-Footnote-81388919
Node: Alterações de bytecode do CPython<7>1388984
Ref: whatsnew/3 8 cpython-bytecode-changes1389152
Ref: c921389152
Ref: Alterações de bytecode do CPython<7>-Footnote-11390580
Ref: Alterações de bytecode do CPython<7>-Footnote-21390645
Ref: Alterações de bytecode do CPython<7>-Footnote-31390710
Ref: Alterações de bytecode do CPython<7>-Footnote-41390752
Node: Ferramentas e daemons<2>1390817
Ref: whatsnew/3 8 demos-and-tools1390951
Ref: c961390951
Ref: Ferramentas e daemons<2>-Footnote-11394285
Ref: Ferramentas e daemons<2>-Footnote-21394350
Ref: Ferramentas e daemons<2>-Footnote-31394478
Node: Alterações notáveis no Python 3 8 11394526
Ref: whatsnew/3 8 notable-changes-in-python-3-8-11394714
Ref: c971394714
Ref: Alterações notáveis no Python 3 8 1-Footnote-11395261
Node: Alterações notáveis no Python 3 8 21395326
Ref: whatsnew/3 8 notable-changes-in-python-3-8-21395526
Ref: c981395526
Ref: Alterações notáveis no Python 3 8 2-Footnote-11395881
Node: Alterações notáveis no Python 3 8 31395936
Ref: whatsnew/3 8 notable-changes-in-python-3-8-31396136
Ref: c991396136
Ref: Alterações notáveis no Python 3 8 3-Footnote-11396565
Node: Alterações notáveis no Python 3 8 81396620
Ref: whatsnew/3 8 notable-changes-in-python-3-8-81396820
Ref: c9a1396820
Ref: Alterações notáveis no Python 3 8 8-Footnote-11397631
Node: Alterações notáveis no Python 3 8 91397696
Ref: whatsnew/3 8 notable-changes-in-python-3-8-91397897
Ref: c9b1397897
Ref: Alterações notáveis no Python 3 8 9-Footnote-11398441
Node: Alterações notáveis no Python 3 8 101398496
Ref: whatsnew/3 8 notable-changes-in-python-3-8-101398701
Ref: c9c1398701
Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>1398910
Ref: whatsnew/3 8 macos-11-0-big-sur-and-apple-silicon-mac-support1399037
Ref: c9d1399037
Ref: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>-Footnote-11400162
Node: Alterações notáveis no Python 3 8 10<2>1400217
Ref: whatsnew/3 8 id11400423
Ref: c9e1400423
Node: urllib parse<4>1400558
Ref: whatsnew/3 8 urllib-parse1400652
Ref: c9f1400652
Ref: urllib parse<4>-Footnote-11401232
Ref: urllib parse<4>-Footnote-21401291
Node: Alterações notáveis no Python 3 8 121401356
Ref: whatsnew/3 8 notable-changes-in-python-3-8-121401565
Ref: ca01401565
Node: Alterações na API Python<7>1401728
Ref: whatsnew/3 8 id21401833
Ref: ca11401833
Ref: Alterações na API Python<7>-Footnote-11402481
Node: Recursos de segurança notáveis no 3 8 141402546
Ref: whatsnew/3 8 notable-security-feature-in-3-8-141402745
Ref: ca21402745
Ref: Recursos de segurança notáveis no 3 8 14-Footnote-11403582
Node: Alterações notáveis no 3 8 171403638
Ref: whatsnew/3 8 notable-changes-in-3-8-171403789
Ref: ca31403789
Node: tarfile<6>1403900
Ref: whatsnew/3 8 id31403979
Ref: ca41403979
Ref: tarfile<6>-Footnote-11404589
Node: O que há de novo no Python 3 71404631
Ref: whatsnew/3 7 doc1404801
Ref: ca51404801
Ref: whatsnew/3 7 no-color1404801
Ref: ca61404801
Ref: whatsnew/3 7 what-s-new-in-python-3-71404801
Ref: ca71404801
Node: Resumo – Destaques da versão<8>1406444
Ref: whatsnew/3 7 summary-release-highlights1406580
Ref: ca81406580
Ref: Resumo – Destaques da versão<8>-Footnote-11408942
Ref: Resumo – Destaques da versão<8>-Footnote-21409022
Ref: Resumo – Destaques da versão<8>-Footnote-31409058
Ref: Resumo – Destaques da versão<8>-Footnote-41409094
Node: Novas funcionalidades<13>1409130
Ref: whatsnew/3 7 new-features1409307
Ref: cbc1409307
Node: PEP 563 Avaliação Postergada de Anotações1410602
Ref: whatsnew/3 7 pep-563-postponed-evaluation-of-annotations1410758
Ref: cbd1410758
Ref: whatsnew/3 7 whatsnew37-pep5631410758
Ref: ca91410758
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-11412680
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-21412722
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-31412764
Node: PEP 538 Coerção de localidade C legada1412806
Ref: whatsnew/3 7 pep-538-legacy-c-locale-coercion1413021
Ref: cbe1413021
Ref: whatsnew/3 7 whatsnew37-pep5381413021
Ref: cb31413021
Ref: PEP 538 Coerção de localidade C legada-Footnote-11415799
Ref: PEP 538 Coerção de localidade C legada-Footnote-21415841
Ref: PEP 538 Coerção de localidade C legada-Footnote-31415883
Ref: PEP 538 Coerção de localidade C legada-Footnote-41415925
Node: PEP 540 Modo de tempo de execução UTF-8 forçado1415967
Ref: whatsnew/3 7 pep-540-forced-utf-8-runtime-mode1416164
Ref: cc11416164
Ref: whatsnew/3 7 whatsnew37-pep5401416164
Ref: cb41416164
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-11417947
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-21417989
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-31418031
Node: PEP 553 breakpoint embutida1418073
Ref: whatsnew/3 7 pep-553-built-in-breakpoint1418283
Ref: cc31418283
Ref: whatsnew/3 7 whatsnew37-pep5531418283
Ref: cad1418283
Ref: PEP 553 breakpoint embutida-Footnote-11419160
Node: PEP 539 Nova API C para armazenamento local de thread1419202
Ref: whatsnew/3 7 pep-539-new-c-api-for-thread-local-storage1419421
Ref: cc61419421
Ref: whatsnew/3 7 whatsnew37-pep5391419421
Ref: cb81419421
Ref: PEP 539 Nova API C para armazenamento local de thread-Footnote-11421133
Ref: PEP 539 Nova API C para armazenamento local de thread-Footnote-21421175
Node: PEP 562 Personalização de acesso aos atributos do módulo1421217
Ref: whatsnew/3 7 pep-562-customization-of-access-to-module-attributes1421474
Ref: cca1421474
Ref: whatsnew/3 7 whatsnew37-pep5621421474
Ref: cae1421474
Ref: PEP 562 Personalização de acesso aos atributos do módulo-Footnote-11422112
Node: PEP 564 Novas funções de tempo com resolução de nanossegundos1422154
Ref: whatsnew/3 7 pep-564-new-time-functions-with-nanosecond-resolution1422403
Ref: ccd1422403
Ref: whatsnew/3 7 whatsnew37-pep5641422403
Ref: cb21422403
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-11423568
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-21423610
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-31423687
Node: PEP 565 Mostra DeprecationWarning em __main__1423729
Ref: whatsnew/3 7 pep-565-show-deprecationwarning-in-main1423981
Ref: cd41423981
Ref: whatsnew/3 7 whatsnew37-pep5651423981
Ref: cb71423981
Ref: PEP 565 Mostra DeprecationWarning em __main__-Footnote-11426151
Node: PEP 560 Suporte básico para módulo typing e tipos genéricos1426193
Ref: whatsnew/3 7 pep-560-core-support-for-typing-module-and-generic-types1426417
Ref: cd51426417
Ref: whatsnew/3 7 whatsnew37-pep5601426417
Ref: caf1426417
Ref: PEP 560 Suporte básico para módulo typing e tipos genéricos-Footnote-11427400
Ref: PEP 560 Suporte básico para módulo typing e tipos genéricos-Footnote-21427442
Node: PEP 552 Arquivos pyc baseados em hash1427484
Ref: whatsnew/3 7 pep-552-hash-based-pyc-files1427710
Ref: cd71427710
Ref: whatsnew/3 7 whatsnew37-pep5521427710
Ref: cb51427710
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-11429777
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-21429818
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-31429860
Node: PEP 545 Traduções da documentação do Python1429902
Ref: whatsnew/3 7 pep-545-python-documentation-translations1430106
Ref: cd81430106
Ref: whatsnew/3 7 whatsnew37-pep5451430106
Ref: cb91430106
Ref: PEP 545 Traduções da documentação do Python-Footnote-11430720
Ref: PEP 545 Traduções da documentação do Python-Footnote-21430762
Node: Modo de Desenvolvimento do Python -X dev1430804
Ref: whatsnew/3 7 python-development-mode-x-dev1430962
Ref: cd91430962
Ref: whatsnew/3 7 whatsnew37-devmode1430962
Ref: cb61430962
Node: Outras mudanças na linguagem<7>1431525
Ref: whatsnew/3 7 other-language-changes1431685
Ref: cdb1431685
Ref: Outras mudanças na linguagem<7>-Footnote-11434256
Ref: Outras mudanças na linguagem<7>-Footnote-21434321
Ref: Outras mudanças na linguagem<7>-Footnote-31434386
Ref: Outras mudanças na linguagem<7>-Footnote-41434451
Ref: Outras mudanças na linguagem<7>-Footnote-51434516
Ref: Outras mudanças na linguagem<7>-Footnote-61434581
Ref: Outras mudanças na linguagem<7>-Footnote-71434646
Ref: Outras mudanças na linguagem<7>-Footnote-81434711
Ref: Outras mudanças na linguagem<7>-Footnote-91434776
Ref: Outras mudanças na linguagem<7>-Footnote-101434841
Node: Novos módulos<8>1434907
Ref: whatsnew/3 7 new-modules1435064
Ref: ce11435064
Node: contextvars<2>1435225
Ref: whatsnew/3 7 contextvars1435316
Ref: ce21435316
Ref: whatsnew/3 7 whatsnew37-pep5671435316
Ref: caa1435316
Ref: contextvars<2>-Footnote-11436157
Node: dataclasses<3>1436199
Ref: whatsnew/3 7 dataclasses1436321
Ref: ce41436321
Ref: whatsnew/3 7 whatsnew37-pep5571436321
Ref: cab1436321
Ref: dataclasses<3>-Footnote-11437024
Node: importlib resources<2>1437066
Ref: whatsnew/3 7 importlib-resources1437165
Ref: ce71437165
Ref: whatsnew/3 7 whatsnew37-importlib-resources1437165
Ref: cac1437165
Ref: importlib resources<2>-Footnote-11437932
Ref: importlib resources<2>-Footnote-21437997
Node: Módulos melhorados<8>1438059
Ref: whatsnew/3 7 improved-modules1438209
Ref: ce91438209
Node: argparse<5>1439658
Ref: whatsnew/3 7 argparse1439748
Ref: cea1439748
Ref: argparse<5>-Footnote-11439984
Node: asyncio<10>1440049
Ref: whatsnew/3 7 asyncio1440156
Ref: cec1440156
Ref: whatsnew/3 7 whatsnew37-asyncio1440156
Ref: cb11440156
Ref: asyncio<10>-Footnote-11446794
Ref: asyncio<10>-Footnote-21446859
Ref: asyncio<10>-Footnote-31446901
Ref: asyncio<10>-Footnote-41446966
Ref: asyncio<10>-Footnote-51447031
Ref: asyncio<10>-Footnote-61447096
Ref: asyncio<10>-Footnote-71447161
Ref: asyncio<10>-Footnote-81447226
Ref: asyncio<10>-Footnote-91447291
Ref: asyncio<10>-Footnote-101447356
Ref: asyncio<10>-Footnote-111447422
Ref: asyncio<10>-Footnote-121447488
Ref: asyncio<10>-Footnote-131447554
Ref: asyncio<10>-Footnote-141447620
Ref: asyncio<10>-Footnote-151447686
Ref: asyncio<10>-Footnote-161447752
Ref: asyncio<10>-Footnote-171447818
Ref: asyncio<10>-Footnote-181447884
Ref: asyncio<10>-Footnote-191447950
Ref: asyncio<10>-Footnote-201448016
Ref: asyncio<10>-Footnote-211448082
Ref: asyncio<10>-Footnote-221448148
Ref: asyncio<10>-Footnote-231448214
Ref: asyncio<10>-Footnote-241448280
Node: binascii1448346
Ref: whatsnew/3 7 binascii1448453
Ref: d091448453
Ref: binascii-Footnote-11448732
Node: calendar<3>1448797
Ref: whatsnew/3 7 calendar1448907
Ref: d0b1448907
Ref: calendar<3>-Footnote-11449157
Node: collections<2>1449222
Ref: whatsnew/3 7 collections1449337
Ref: d0d1449337
Ref: collections<2>-Footnote-11449528
Node: compileall<3>1449593
Ref: whatsnew/3 7 compileall1449718
Ref: d0e1449718
Ref: compileall<3>-Footnote-11450115
Node: concurrent futures<4>1450180
Ref: whatsnew/3 7 concurrent-futures1450304
Ref: d101450304
Ref: concurrent futures<4>-Footnote-11450746
Ref: concurrent futures<4>-Footnote-21450811
Node: contextlib<3>1450876
Ref: whatsnew/3 7 contextlib1450998
Ref: d111450998
Ref: contextlib<3>-Footnote-11451528
Ref: contextlib<3>-Footnote-21451593
Ref: contextlib<3>-Footnote-31451658
Ref: contextlib<3>-Footnote-41451723
Node: cProfile<2>1451788
Ref: whatsnew/3 7 cprofile1451894
Ref: d161451894
Ref: cProfile<2>-Footnote-11452120
Node: crypt1452185
Ref: whatsnew/3 7 crypt1452289
Ref: d171452289
Ref: crypt-Footnote-11452610
Ref: crypt-Footnote-21452675
Node: datetime<5>1452740
Ref: whatsnew/3 7 datetime1452839
Ref: d181452839
Ref: datetime<5>-Footnote-11453250
Ref: datetime<5>-Footnote-21453315
Node: dbm<2>1453379
Ref: whatsnew/3 7 dbm1453483
Ref: d1a1453483
Node: decimal<2>1453628
Ref: whatsnew/3 7 decimal1453727
Ref: d1b1453727
Ref: decimal<2>-Footnote-11453948
Node: dis<4>1454013
Ref: whatsnew/3 7 dis1454118
Ref: d1c1454118
Ref: dis<4>-Footnote-11454521
Node: distutils<4>1454586
Ref: whatsnew/3 7 distutils1454688
Ref: d1d1454688
Ref: distutils<4>-Footnote-11454936
Node: enum<5>1455001
Ref: whatsnew/3 7 enum1455109
Ref: d1e1455109
Ref: enum<5>-Footnote-11455790
Ref: enum<5>-Footnote-21455855
Node: functools<4>1455920
Ref: whatsnew/3 7 functools1456021
Ref: d201456021
Ref: functools<4>-Footnote-11456250
Node: gc<5>1456315
Ref: whatsnew/3 7 gc1456416
Ref: d211456416
Ref: gc<5>-Footnote-11456955
Node: hmac<3>1457020
Ref: whatsnew/3 7 hmac1457120
Ref: d251457120
Ref: hmac<3>-Footnote-11457383
Node: http client1457448
Ref: whatsnew/3 7 http-client1457554
Ref: d281457554
Ref: http client-Footnote-11457811
Node: http server1457876
Ref: whatsnew/3 7 http-server1457989
Ref: d2b1457989
Ref: http server-Footnote-11458872
Ref: http server-Footnote-21458937
Ref: http server-Footnote-31459002
Node: idlelib e IDLE1459067
Ref: whatsnew/3 7 idlelib-and-idle1459181
Ref: d2f1459181
Ref: idlelib e IDLE-Footnote-11462264
Ref: idlelib e IDLE-Footnote-21462329
Ref: idlelib e IDLE-Footnote-31462396
Ref: idlelib e IDLE-Footnote-41462461
Ref: idlelib e IDLE-Footnote-51462526
Ref: idlelib e IDLE-Footnote-61462591
Ref: idlelib e IDLE-Footnote-71462656
Ref: idlelib e IDLE-Footnote-81462721
Ref: idlelib e IDLE-Footnote-91462786
Ref: idlelib e IDLE-Footnote-101462851
Ref: idlelib e IDLE-Footnote-111462919
Ref: idlelib e IDLE-Footnote-121462984
Ref: idlelib e IDLE-Footnote-131463050
Node: importlib<4>1463116
Ref: whatsnew/3 7 importlib1463224
Ref: d301463224
Ref: importlib<4>-Footnote-11464117
Ref: importlib<4>-Footnote-21464182
Ref: importlib<4>-Footnote-31464247
Node: io<6>1464312
Ref: whatsnew/3 7 io1464418
Ref: d331464418
Ref: io<6>-Footnote-11464683
Ref: io<6>-Footnote-21464748
Node: ipaddress<3>1464813
Ref: whatsnew/3 7 ipaddress1464919
Ref: d351464919
Ref: ipaddress<3>-Footnote-11465239
Node: itertools<6>1465304
Ref: whatsnew/3 7 itertools1465414
Ref: d361465414
Ref: itertools<6>-Footnote-11465651
Node: locale<4>1465716
Ref: whatsnew/3 7 locale1465824
Ref: d381465824
Ref: locale<4>-Footnote-11466238
Node: logging<3>1466303
Ref: whatsnew/3 7 logging1466406
Ref: d391466406
Ref: logging<3>-Footnote-11466930
Ref: logging<3>-Footnote-21466995
Ref: logging<3>-Footnote-31467060
Node: math<7>1467125
Ref: whatsnew/3 7 math1467231
Ref: d3d1467231
Ref: math<7>-Footnote-11467444
Node: mimetypes<3>1467509
Ref: whatsnew/3 7 mimetypes1467611
Ref: d3f1467611
Ref: mimetypes<3>-Footnote-11467826
Node: msilib1467891
Ref: whatsnew/3 7 msilib1468004
Ref: d401468004
Ref: msilib-Footnote-11468199
Node: multiprocessing<5>1468264
Ref: whatsnew/3 7 multiprocessing1468370
Ref: d411468370
Ref: multiprocessing<5>-Footnote-11469023
Ref: multiprocessing<5>-Footnote-21469088
Ref: multiprocessing<5>-Footnote-31469153
Node: os<8>1469218
Ref: whatsnew/3 7 os1469329
Ref: d451469329
Ref: os<8>-Footnote-11470627
Ref: os<8>-Footnote-21470692
Ref: os<8>-Footnote-31470757
Ref: os<8>-Footnote-41470822
Ref: os<8>-Footnote-51470887
Ref: os<8>-Footnote-61470952
Ref: os<8>-Footnote-71471017
Node: pathlib<11>1471082
Ref: whatsnew/3 7 pathlib1471181
Ref: d501471181
Ref: pathlib<11>-Footnote-11471441
Node: pdb<6>1471506
Ref: whatsnew/3 7 pdb1471613
Ref: d511471613
Ref: pdb<6>-Footnote-11472023
Ref: pdb<6>-Footnote-21472088
Node: py_compile<3>1472153
Ref: whatsnew/3 7 py-compile1472257
Ref: d521472257
Ref: py_compile<3>-Footnote-11472711
Ref: py_compile<3>-Footnote-21472752
Node: pydoc<3>1472817
Ref: whatsnew/3 7 pydoc1472923
Ref: d531472923
Ref: pydoc<3>-Footnote-11473147
Node: queue<2>1473212
Ref: whatsnew/3 7 queue1473310
Ref: d541473310
Ref: queue<2>-Footnote-11473493
Node: re<5>1473558
Ref: whatsnew/3 7 re1473657
Ref: d561473657
Ref: re<5>-Footnote-11474739
Ref: re<5>-Footnote-21474804
Ref: re<5>-Footnote-31474869
Ref: re<5>-Footnote-41474934
Ref: re<5>-Footnote-51474999
Node: signal<2>1475064
Ref: whatsnew/3 7 signal1475164
Ref: d5a1475164
Ref: signal<2>-Footnote-11475483
Node: socket<6>1475548
Ref: whatsnew/3 7 socket1475655
Ref: d5c1475655
Ref: socket<6>-Footnote-11476761
Ref: socket<6>-Footnote-21476826
Ref: socket<6>-Footnote-31476891
Ref: socket<6>-Footnote-41476956
Ref: socket<6>-Footnote-51477021
Ref: socket<6>-Footnote-61477086
Node: socketserver1477151
Ref: whatsnew/3 7 socketserver1477259
Ref: d621477259
Node: sqlite3<7>1477749
Ref: whatsnew/3 7 sqlite31477854
Ref: d661477854
Ref: sqlite3<7>-Footnote-11478296
Ref: sqlite3<7>-Footnote-21478361
Node: ssl<6>1478426
Ref: whatsnew/3 7 ssl1478528
Ref: d681478528
Ref: ssl<6>-Footnote-11481794
Ref: ssl<6>-Footnote-21481859
Ref: ssl<6>-Footnote-31481924
Ref: ssl<6>-Footnote-41481989
Ref: ssl<6>-Footnote-51482054
Ref: ssl<6>-Footnote-61482119
Ref: ssl<6>-Footnote-71482184
Ref: ssl<6>-Footnote-81482249
Ref: ssl<6>-Footnote-91482314
Ref: ssl<6>-Footnote-101482379
Ref: ssl<6>-Footnote-111482445
Ref: ssl<6>-Footnote-121482511
Ref: ssl<6>-Footnote-131482577
Ref: ssl<6>-Footnote-141482643
Node: string<2>1482699
Ref: whatsnew/3 7 string1482804
Ref: d711482804
Ref: string<2>-Footnote-11483081
Node: subprocess<2>1483148
Ref: whatsnew/3 7 subprocess1483253
Ref: d721483253
Ref: subprocess<2>-Footnote-11484575
Ref: subprocess<2>-Footnote-21484640
Ref: subprocess<2>-Footnote-31484705
Ref: subprocess<2>-Footnote-41484770
Node: sys<8>1484835
Ref: whatsnew/3 7 sys1484938
Ref: d761484938
Ref: sys<8>-Footnote-11485678
Ref: sys<8>-Footnote-21485743
Ref: sys<8>-Footnote-31485808
Node: time<5>1485873
Ref: whatsnew/3 7 time1485973
Ref: d7a1485973
Ref: time<5>-Footnote-11487182
Ref: time<5>-Footnote-21487224
Node: tkinter<6>1487289
Ref: whatsnew/3 7 tkinter1487397
Ref: d801487397
Ref: tkinter<6>-Footnote-11487578
Node: tracemalloc<2>1487643
Ref: whatsnew/3 7 tracemalloc1487752
Ref: d821487752
Ref: tracemalloc<2>-Footnote-11488218
Node: types<4>1488283
Ref: whatsnew/3 7 types1488396
Ref: d851488396
Ref: types<4>-Footnote-11488911
Ref: types<4>-Footnote-21488976
Ref: types<4>-Footnote-31489041
Ref: types<4>-Footnote-41489083
Node: unicodedata<7>1489148
Ref: whatsnew/3 7 unicodedata1489258
Ref: d8a1489258
Ref: unicodedata<7>-Footnote-11489461
Node: unittest<8>1489517
Ref: whatsnew/3 7 unittest1489632
Ref: d8b1489632
Ref: unittest<8>-Footnote-11490037
Node: unittest mock1490102
Ref: whatsnew/3 7 unittest-mock1490218
Ref: d8c1490218
Ref: unittest mock-Footnote-11490736
Ref: unittest mock-Footnote-21490801
Node: urllib parse<5>1490866
Ref: whatsnew/3 7 urllib-parse1490973
Ref: d8f1490973
Ref: urllib parse<5>-Footnote-11491286
Ref: urllib parse<5>-Footnote-21491345
Ref: urllib parse<5>-Footnote-31491404
Node: uu1491469
Ref: whatsnew/3 7 uu1491570
Ref: d911491570
Ref: uu-Footnote-11491836
Node: uuid<4>1491901
Ref: whatsnew/3 7 uuid1491993
Ref: d921491993
Ref: uuid<4>-Footnote-11492633
Ref: uuid<4>-Footnote-21492698
Node: avisos1492763
Ref: whatsnew/3 7 warnings1492859
Ref: d961492859
Ref: avisos-Footnote-11494282
Ref: avisos-Footnote-21494347
Ref: avisos-Footnote-31494412
Ref: avisos-Footnote-41494477
Node: xml<5>1494542
Ref: whatsnew/3 7 xml1494640
Ref: d981494640
Ref: xml<5>-Footnote-11494924
Node: xml etree1494979
Ref: whatsnew/3 7 xml-etree1495084
Ref: d991495084
Ref: xml etree-Footnote-11495425
Node: xmlrpc server1495490
Ref: whatsnew/3 7 xmlrpc-server1495595
Ref: d9b1495595
Ref: xmlrpc server-Footnote-11495806
Node: zipapp1495870
Ref: whatsnew/3 7 zipapp1495976
Ref: d9c1495976
Ref: zipapp-Footnote-11496500
Ref: zipapp-Footnote-21496565
Node: zipfile<3>1496630
Ref: whatsnew/3 7 zipfile1496714
Ref: d9e1496714
Ref: zipfile<3>-Footnote-11497079
Ref: zipfile<3>-Footnote-21497144
Node: Alterações na API C<13>1497209
Ref: whatsnew/3 7 c-api-changes1497370
Ref: d9f1497370
Ref: Alterações na API C<13>-Footnote-11501903
Ref: Alterações na API C<13>-Footnote-21501968
Ref: Alterações na API C<13>-Footnote-31502033
Ref: Alterações na API C<13>-Footnote-41502098
Ref: Alterações na API C<13>-Footnote-51502163
Ref: Alterações na API C<13>-Footnote-61502228
Ref: Alterações na API C<13>-Footnote-71502293
Ref: Alterações na API C<13>-Footnote-81502358
Ref: Alterações na API C<13>-Footnote-91502423
Ref: Alterações na API C<13>-Footnote-101502488
Ref: Alterações na API C<13>-Footnote-111502554
Ref: Alterações na API C<13>-Footnote-121502620
Ref: Alterações na API C<13>-Footnote-131502686
Ref: Alterações na API C<13>-Footnote-141502752
Ref: Alterações na API C<13>-Footnote-151502818
Ref: Alterações na API C<13>-Footnote-161502883
Ref: Alterações na API C<13>-Footnote-171502949
Ref: Alterações na API C<13>-Footnote-181503015
Ref: Alterações na API C<13>-Footnote-191503081
Ref: Alterações na API C<13>-Footnote-201503147
Node: Mudanças na construção<6>1503213
Ref: whatsnew/3 7 build-changes1503368
Ref: db81503368
Ref: Mudanças na construção<6>-Footnote-11504522
Ref: Mudanças na construção<6>-Footnote-21504587
Ref: Mudanças na construção<6>-Footnote-31504652
Node: Otimizações<8>1504717
Ref: whatsnew/3 7 optimizations1504896
Ref: db91504896
Ref: whatsnew/3 7 whatsnew37-perf1504896
Ref: cba1504896
Ref: whatsnew/3 7 whatsnew37-asyncio-perf1505588
Ref: ced1505588
Ref: Otimizações<8>-Footnote-11510172
Ref: Otimizações<8>-Footnote-21510237
Ref: Otimizações<8>-Footnote-31510302
Ref: Otimizações<8>-Footnote-41510367
Ref: Otimizações<8>-Footnote-51510432
Ref: Otimizações<8>-Footnote-61510497
Ref: Otimizações<8>-Footnote-71510562
Ref: Otimizações<8>-Footnote-81510627
Ref: Otimizações<8>-Footnote-91510692
Ref: Otimizações<8>-Footnote-101510757
Ref: Otimizações<8>-Footnote-111510823
Ref: Otimizações<8>-Footnote-121510889
Ref: Otimizações<8>-Footnote-131510955
Ref: Otimizações<8>-Footnote-141511021
Ref: Otimizações<8>-Footnote-151511087
Ref: Otimizações<8>-Footnote-161511153
Ref: Otimizações<8>-Footnote-171511219
Ref: Otimizações<8>-Footnote-181511285
Ref: Otimizações<8>-Footnote-191511351
Ref: Otimizações<8>-Footnote-201511417
Ref: Otimizações<8>-Footnote-211511483
Ref: Otimizações<8>-Footnote-221511549
Ref: Otimizações<8>-Footnote-231511615
Ref: Otimizações<8>-Footnote-241511681
Ref: Otimizações<8>-Footnote-251511747
Ref: Otimizações<8>-Footnote-261511813
Ref: Otimizações<8>-Footnote-271511879
Ref: Otimizações<8>-Footnote-281511945
Ref: Otimizações<8>-Footnote-291512011
Ref: Otimizações<8>-Footnote-301512077
Node: Outras mudanças na implementação do CPython<2>1512143
Ref: whatsnew/3 7 other-cpython-implementation-changes1512331
Ref: dc91512331
Ref: Outras mudanças na implementação do CPython<2>-Footnote-11513755
Ref: Outras mudanças na implementação do CPython<2>-Footnote-21513820
Ref: Outras mudanças na implementação do CPython<2>-Footnote-31513885
Ref: Outras mudanças na implementação do CPython<2>-Footnote-41513950
Ref: Outras mudanças na implementação do CPython<2>-Footnote-51514015
Node: Comportamento do Python descontinuado1514080
Ref: whatsnew/3 7 deprecated-python-behavior1514299
Ref: dcc1514299
Ref: Comportamento do Python descontinuado-Footnote-11515430
Ref: Comportamento do Python descontinuado-Footnote-21515495
Node: Deprecated Python modules functions and methods1515560
Ref: whatsnew/3 7 deprecated-python-modules-functions-and-methods1515773
Ref: dce1515773
Node: aifc1516172
Ref: whatsnew/3 7 aifc1516280
Ref: dcf1516280
Ref: aifc-Footnote-11516500
Node: asyncio<11>1516565
Ref: whatsnew/3 7 id21516696
Ref: dd01516696
Ref: whatsnew/3 7 whatsnew37-asyncio-deprecated1516696
Ref: d081516696
Ref: asyncio<11>-Footnote-11517221
Ref: asyncio<11>-Footnote-21517286
Node: collections<3>1517351
Ref: whatsnew/3 7 id31517484
Ref: dd11517484
Ref: collections<3>-Footnote-11517863
Node: dbm<3>1517928
Ref: whatsnew/3 7 id41518057
Ref: dd21518057
Ref: dbm<3>-Footnote-11518458
Node: enum<6>1518523
Ref: whatsnew/3 7 id51518648
Ref: dd31518648
Ref: enum<6>-Footnote-11519109
Node: gettext<2>1519174
Ref: whatsnew/3 7 gettext1519305
Ref: dd41519305
Ref: gettext<2>-Footnote-11519550
Node: importlib<5>1519615
Ref: whatsnew/3 7 id61519748
Ref: dd51519748
Ref: importlib<5>-Footnote-11520263
Node: locale<5>1520328
Ref: whatsnew/3 7 id71520458
Ref: dd71520458
Ref: locale<5>-Footnote-11520661
Node: macpath1520726
Ref: whatsnew/3 7 macpath1520856
Ref: dd81520856
Ref: macpath-Footnote-11521046
Node: threading<6>1521110
Ref: whatsnew/3 7 threading1521240
Ref: dd91521240
Ref: threading<6>-Footnote-11521538
Node: socket<7>1521603
Ref: whatsnew/3 7 id81521732
Ref: dda1521732
Ref: socket<7>-Footnote-11522077
Node: ssl<7>1522142
Ref: whatsnew/3 7 id91522264
Ref: ddb1522264
Ref: ssl<7>-Footnote-11522476
Node: sunau1522541
Ref: whatsnew/3 7 sunau1522660
Ref: ddc1522660
Ref: sunau-Footnote-11522886
Node: sys<9>1522951
Ref: whatsnew/3 7 id101523068
Ref: ddd1523068
Ref: sys<9>-Footnote-11523385
Node: wave1523450
Ref: whatsnew/3 7 wave1523553
Ref: dde1523553
Ref: wave-Footnote-11523781
Node: Deprecated functions and types of the C API1523846
Ref: whatsnew/3 7 deprecated-functions-and-types-of-the-c-api1524047
Ref: ddf1524047
Ref: Deprecated functions and types of the C API-Footnote-11524705
Ref: Deprecated functions and types of the C API-Footnote-21524770
Node: Platform Support Removals1524835
Ref: whatsnew/3 7 id111525020
Ref: de01525020
Ref: whatsnew/3 7 platform-support-removals1525020
Ref: d6b1525020
Ref: Platform Support Removals-Footnote-11526432
Ref: Platform Support Removals-Footnote-21526499
Node: Remoção de APIs e recursos<2>1526579
Ref: whatsnew/3 7 api-and-feature-removals1526736
Ref: de11526736
Ref: Remoção de APIs e recursos<2>-Footnote-11529649
Ref: Remoção de APIs e recursos<2>-Footnote-21529714
Ref: Remoção de APIs e recursos<2>-Footnote-31529779
Node: Module Removals1529844
Ref: whatsnew/3 7 module-removals1529996
Ref: de51529996
Ref: Module Removals-Footnote-11530331
Node: Windows-only Changes1530396
Ref: whatsnew/3 7 windows-only-changes1530538
Ref: de61530538
Ref: Windows-only Changes-Footnote-11531415
Ref: Windows-only Changes-Footnote-21531480
Node: Porting to Python 3 71531545
Ref: whatsnew/3 7 porting-to-python-3-71531703
Ref: de71531703
Ref: whatsnew/3 7 porting-to-python-371531703
Ref: cbb1531703
Node: Changes in Python Behavior1532212
Ref: whatsnew/3 7 changes-in-python-behavior1532334
Ref: de81532334
Ref: Changes in Python Behavior-Footnote-11534200
Ref: Changes in Python Behavior-Footnote-21534265
Ref: Changes in Python Behavior-Footnote-31534307
Ref: Changes in Python Behavior-Footnote-41534372
Ref: Changes in Python Behavior-Footnote-51534437
Ref: Changes in Python Behavior-Footnote-61534502
Node: Alterações na API Python<8>1534567
Ref: whatsnew/3 7 changes-in-the-python-api1534723
Ref: deb1534723
Ref: Alterações na API Python<8>-Footnote-11544292
Ref: Alterações na API Python<8>-Footnote-21544357
Ref: Alterações na API Python<8>-Footnote-31544422
Ref: Alterações na API Python<8>-Footnote-41544487
Ref: Alterações na API Python<8>-Footnote-51544552
Ref: Alterações na API Python<8>-Footnote-61544617
Ref: Alterações na API Python<8>-Footnote-71544682
Ref: Alterações na API Python<8>-Footnote-81544747
Ref: Alterações na API Python<8>-Footnote-91544812
Ref: Alterações na API Python<8>-Footnote-101544877
Ref: Alterações na API Python<8>-Footnote-111544943
Ref: Alterações na API Python<8>-Footnote-121545009
Ref: Alterações na API Python<8>-Footnote-131545075
Ref: Alterações na API Python<8>-Footnote-141545141
Ref: Alterações na API Python<8>-Footnote-151545184
Ref: Alterações na API Python<8>-Footnote-161545250
Ref: Alterações na API Python<8>-Footnote-171545316
Ref: Alterações na API Python<8>-Footnote-181545382
Ref: Alterações na API Python<8>-Footnote-191545448
Ref: Alterações na API Python<8>-Footnote-201545514
Ref: Alterações na API Python<8>-Footnote-211545580
Ref: Alterações na API Python<8>-Footnote-221545646
Ref: Alterações na API Python<8>-Footnote-231545712
Ref: Alterações na API Python<8>-Footnote-241545778
Ref: Alterações na API Python<8>-Footnote-251545844
Ref: Alterações na API Python<8>-Footnote-261545910
Ref: Alterações na API Python<8>-Footnote-271545976
Ref: Alterações na API Python<8>-Footnote-281546042
Ref: Alterações na API Python<8>-Footnote-291546108
Ref: Alterações na API Python<8>-Footnote-301546174
Node: Alterações na API C<14>1546240
Ref: whatsnew/3 7 changes-in-the-c-api1546408
Ref: e0b1546408
Ref: Alterações na API C<14>-Footnote-11547044
Node: Alterações de bytecode do CPython<8>1547109
Ref: whatsnew/3 7 cpython-bytecode-changes1547271
Ref: e0c1547271
Ref: Alterações de bytecode do CPython<8>-Footnote-11547631
Ref: Alterações de bytecode do CPython<8>-Footnote-21547696
Node: Windows-only Changes<2>1547761
Ref: whatsnew/3 7 id121547934
Ref: e0d1547934
Ref: Windows-only Changes<2>-Footnote-11548260
Node: Other CPython implementation changes1548325
Ref: whatsnew/3 7 id131548451
Ref: e0f1548451
Ref: Other CPython implementation changes-Footnote-11550781
Ref: Other CPython implementation changes-Footnote-21550823
Ref: Other CPython implementation changes-Footnote-31550888
Node: Notable changes in Python 3 7 11550953
Ref: whatsnew/3 7 notable-changes-in-python-3-7-11551122
Ref: e111551122
Ref: Notable changes in Python 3 7 1-Footnote-11552062
Ref: Notable changes in Python 3 7 1-Footnote-21552127
Ref: Notable changes in Python 3 7 1-Footnote-31552192
Node: Notable changes in Python 3 7 21552257
Ref: whatsnew/3 7 notable-changes-in-python-3-7-21552436
Ref: e141552436
Node: Notable changes in Python 3 7 61552931
Ref: whatsnew/3 7 notable-changes-in-python-3-7-61553111
Ref: e151553111
Ref: Notable changes in Python 3 7 6-Footnote-11553647
Node: Notable changes in Python 3 7 101553712
Ref: whatsnew/3 7 notable-changes-in-python-3-7-101553893
Ref: e161553893
Ref: Notable changes in Python 3 7 10-Footnote-11554695
Node: Notable changes in Python 3 7 111554760
Ref: whatsnew/3 7 notable-changes-in-python-3-7-111554944
Ref: e171554944
Ref: Notable changes in Python 3 7 11-Footnote-11555923
Ref: Notable changes in Python 3 7 11-Footnote-21555978
Node: Notable security feature in 3 7 141556033
Ref: whatsnew/3 7 notable-security-feature-in-3-7-141556176
Ref: e181556176
Ref: Notable security feature in 3 7 14-Footnote-11556999
Node: What’s New In Python 3 61557055
Ref: whatsnew/3 6 doc1557225
Ref: e191557225
Ref: whatsnew/3 6 no-color1557225
Ref: e1a1557225
Ref: whatsnew/3 6 what-s-new-in-python-3-61557225
Ref: e1b1557225
Ref: What’s New In Python 3 6-Footnote-11558654
Ref: What’s New In Python 3 6-Footnote-21558714
Node: Resumo – Destaques da versão<9>1558756
Ref: whatsnew/3 6 summary-release-highlights1558887
Ref: e1c1558887
Ref: Resumo – Destaques da versão<9>-Footnote-11563148
Ref: Resumo – Destaques da versão<9>-Footnote-21563228
Ref: Resumo – Destaques da versão<9>-Footnote-31563318
Node: Novas funcionalidades<14>1563360
Ref: whatsnew/3 6 new-features1563532
Ref: e301563532
Ref: whatsnew/3 6 pypy-dict-implementation1563532
Ref: e311563532
Node: PEP 498 Formatted string literals1564960
Ref: whatsnew/3 6 pep-498-formatted-string-literals1565103
Ref: e321565103
Ref: whatsnew/3 6 whatsnew36-pep4981565103
Ref: e1d1565103
Ref: PEP 498 Formatted string literals-Footnote-11566092
Ref: PEP 498 Formatted string literals-Footnote-21566134
Node: PEP 526 Syntax for variable annotations1566176
Ref: whatsnew/3 6 pep-526-syntax-for-variable-annotations1566367
Ref: e331566367
Ref: whatsnew/3 6 whatsnew36-pep5261566367
Ref: e1f1566367
Ref: PEP 526 Syntax for variable annotations-Footnote-11567616
Ref: PEP 526 Syntax for variable annotations-Footnote-21567658
Ref: PEP 526 Syntax for variable annotations-Footnote-31567700
Ref: PEP 526 Syntax for variable annotations-Footnote-41567735
Node: PEP 515 Underscores in Numeric Literals1567776
Ref: whatsnew/3 6 pep-515-underscores-in-numeric-literals1567965
Ref: e341567965
Ref: whatsnew/3 6 whatsnew36-pep5151567965
Ref: e1e1567965
Ref: PEP 515 Underscores in Numeric Literals-Footnote-11569039
Ref: PEP 515 Underscores in Numeric Literals-Footnote-21569081
Node: PEP 525 Asynchronous Generators1569123
Ref: whatsnew/3 6 pep-525-asynchronous-generators1569308
Ref: e351569308
Ref: whatsnew/3 6 whatsnew36-pep5251569308
Ref: e201569308
Ref: PEP 525 Asynchronous Generators-Footnote-11570148
Ref: PEP 525 Asynchronous Generators-Footnote-21570190
Node: PEP 530 Asynchronous Comprehensions1570232
Ref: whatsnew/3 6 pep-530-asynchronous-comprehensions1570425
Ref: e361570425
Ref: whatsnew/3 6 whatsnew36-pep5301570425
Ref: e211570425
Ref: PEP 530 Asynchronous Comprehensions-Footnote-11570988
Ref: PEP 530 Asynchronous Comprehensions-Footnote-21571030
Node: PEP 487 Simpler customization of class creation1571072
Ref: whatsnew/3 6 pep-487-simpler-customization-of-class-creation1571274
Ref: e371571274
Ref: whatsnew/3 6 whatsnew36-pep4871571274
Ref: e241571274
Ref: PEP 487 Simpler customization of class creation-Footnote-11572369
Node: PEP 487 Descriptor Protocol Enhancements1572411
Ref: whatsnew/3 6 pep-487-descriptor-protocol-enhancements1572620
Ref: e3a1572620
Ref: whatsnew/3 6 whatsnew36-pep487-descriptors1572620
Ref: e3b1572620
Ref: PEP 487 Descriptor Protocol Enhancements-Footnote-11573876
Ref: PEP 487 Descriptor Protocol Enhancements-Footnote-21573918
Node: PEP 519 Adding a file system path protocol1573960
Ref: whatsnew/3 6 pep-519-adding-a-file-system-path-protocol1574155
Ref: e3e1574155
Ref: whatsnew/3 6 whatsnew36-pep5191574155
Ref: e291574155
Ref: PEP 519 Adding a file system path protocol-Footnote-11576987
Node: PEP 495 Local Time Disambiguation1577029
Ref: whatsnew/3 6 pep-495-local-time-disambiguation1577235
Ref: e441577235
Ref: whatsnew/3 6 whatsnew36-pep4951577235
Ref: e2a1577235
Ref: PEP 495 Local Time Disambiguation-Footnote-11578653
Ref: PEP 495 Local Time Disambiguation-Footnote-21578695
Node: PEP 529 Change Windows filesystem encoding to UTF-81578737
Ref: whatsnew/3 6 pep-529-change-windows-filesystem-encoding-to-utf-81578949
Ref: e461578949
Ref: whatsnew/3 6 whatsnew36-pep5291578949
Ref: e2e1578949
Ref: PEP 529 Change Windows filesystem encoding to UTF-8-Footnote-11579979
Node: PEP 528 Change Windows console encoding to UTF-81580021
Ref: whatsnew/3 6 pep-528-change-windows-console-encoding-to-utf-81580251
Ref: e481580251
Ref: whatsnew/3 6 whatsnew36-pep5281580251
Ref: e2d1580251
Ref: PEP 528 Change Windows console encoding to UTF-8-Footnote-11580959
Node: PEP 520 Preserving Class Attribute Definition Order1581001
Ref: whatsnew/3 6 pep-520-preserving-class-attribute-definition-order1581221
Ref: e4a1581221
Ref: whatsnew/3 6 whatsnew36-pep5201581221
Ref: e251581221
Ref: PEP 520 Preserving Class Attribute Definition Order-Footnote-11581866
Node: PEP 468 Preserving Keyword Argument Order1581908
Ref: whatsnew/3 6 pep-468-preserving-keyword-argument-order1582103
Ref: e4d1582103
Ref: whatsnew/3 6 whatsnew36-pep4681582103
Ref: e261582103
Ref: PEP 468 Preserving Keyword Argument Order-Footnote-11582469
Node: New dict implementation1582511
Ref: whatsnew/3 6 new-dict-implementation1582703
Ref: e4e1582703
Ref: whatsnew/3 6 whatsnew36-compactdict1582703
Ref: e231582703
Ref: New dict implementation-Footnote-11583681
Ref: New dict implementation-Footnote-21583761
Ref: New dict implementation-Footnote-31583851
Ref: New dict implementation-Footnote-41583916
Node: PEP 523 Adding a frame evaluation API to CPython1583996
Ref: whatsnew/3 6 pep-523-adding-a-frame-evaluation-api-to-cpython1584180
Ref: e4f1584180
Ref: whatsnew/3 6 whatsnew36-pep5231584180
Ref: e501584180
Ref: PEP 523 Adding a frame evaluation API to CPython-Footnote-11585356
Ref: PEP 523 Adding a frame evaluation API to CPython-Footnote-21585398
Node: PYTHONMALLOC environment variable1585440
Ref: whatsnew/3 6 pythonmalloc-environment-variable1585637
Ref: e511585637
Ref: whatsnew/3 6 whatsnew36-pythonmalloc1585637
Ref: e281585637
Ref: PYTHONMALLOC environment variable-Footnote-11588820
Ref: PYTHONMALLOC environment variable-Footnote-21588885
Node: DTrace and SystemTap probing support1588950
Ref: whatsnew/3 6 dtrace-and-systemtap-probing-support1589090
Ref: e591589090
Ref: whatsnew/3 6 whatsnew36-tracing1589090
Ref: e271589090
Ref: DTrace and SystemTap probing support-Footnote-11589933
Node: Outras mudanças na linguagem<8>1589998
Ref: whatsnew/3 6 other-language-changes1590153
Ref: e5b1590153
Ref: Outras mudanças na linguagem<8>-Footnote-11591566
Ref: Outras mudanças na linguagem<8>-Footnote-21591631
Ref: Outras mudanças na linguagem<8>-Footnote-31591696
Ref: Outras mudanças na linguagem<8>-Footnote-41591761
Node: Novos módulos<9>1591826
Ref: whatsnew/3 6 new-modules1591978
Ref: e5f1591978
Node: segredos1592043
Ref: whatsnew/3 6 secrets1592105
Ref: e601592105
Ref: whatsnew/3 6 whatsnew36-pep5061592105
Ref: e221592105
Ref: segredos-Footnote-11592793
Node: Módulos melhorados<9>1592835
Ref: whatsnew/3 6 improved-modules1592971
Ref: e611592971
Node: array<4>1594481
Ref: whatsnew/3 6 array1594563
Ref: e621594563
Ref: array<4>-Footnote-11594856
Node: ast<6>1594921
Ref: whatsnew/3 6 ast1595023
Ref: e631595023
Ref: ast<6>-Footnote-11595272
Node: asyncio<12>1595337
Ref: whatsnew/3 6 asyncio1595442
Ref: e641595442
Ref: asyncio<12>-Footnote-11598789
Ref: asyncio<12>-Footnote-21598854
Ref: asyncio<12>-Footnote-31598899
Ref: asyncio<12>-Footnote-41598964
Ref: asyncio<12>-Footnote-51599029
Ref: asyncio<12>-Footnote-61599094
Ref: asyncio<12>-Footnote-71599159
Ref: asyncio<12>-Footnote-81599224
Ref: asyncio<12>-Footnote-91599289
Ref: asyncio<12>-Footnote-101599354
Ref: asyncio<12>-Footnote-111599420
Ref: asyncio<12>-Footnote-121599486
Node: binascii<2>1599552
Ref: whatsnew/3 6 binascii1599656
Ref: e6e1599656
Ref: binascii<2>-Footnote-11599941
Node: cmath1600006
Ref: whatsnew/3 6 cmath1600113
Ref: e701600113
Ref: cmath-Footnote-11600584
Ref: cmath-Footnote-21600649
Ref: cmath-Footnote-31600691
Node: collections<4>1600756
Ref: whatsnew/3 6 collections1600873
Ref: e771600873
Ref: collections<4>-Footnote-11601979
Ref: collections<4>-Footnote-21602044
Ref: collections<4>-Footnote-31602109
Ref: collections<4>-Footnote-41602174
Ref: collections<4>-Footnote-51602239
Ref: collections<4>-Footnote-61602304
Node: concurrent futures<5>1602369
Ref: whatsnew/3 6 concurrent-futures1602494
Ref: e7c1602494
Ref: concurrent futures<5>-Footnote-11602825
Node: contextlib<4>1602890
Ref: whatsnew/3 6 contextlib1603012
Ref: e7d1603012
Ref: contextlib<4>-Footnote-11603508
Node: datetime<6>1603573
Ref: whatsnew/3 6 datetime1603684
Ref: e801603684
Ref: datetime<6>-Footnote-11604706
Ref: datetime<6>-Footnote-21604771
Ref: datetime<6>-Footnote-31604836
Ref: datetime<6>-Footnote-41604901
Node: decimal<3>1604966
Ref: whatsnew/3 6 decimal1605076
Ref: e851605076
Ref: decimal<3>-Footnote-11605489
Node: distutils<5>1605554
Ref: whatsnew/3 6 distutils1605661
Ref: e871605661
Ref: distutils<5>-Footnote-11606035
Node: email<3>1606100
Ref: whatsnew/3 6 email1606209
Ref: e881606209
Ref: email<3>-Footnote-11607125
Ref: email<3>-Footnote-21607190
Ref: email<3>-Footnote-31607255
Node: encodings<2>1607320
Ref: whatsnew/3 6 encodings1607424
Ref: e8c1607424
Ref: encodings<2>-Footnote-11607719
Node: enum<7>1607784
Ref: whatsnew/3 6 enum1607895
Ref: e8d1607895
Ref: enum<7>-Footnote-11608652
Node: faulthandler<3>1608717
Ref: whatsnew/3 6 faulthandler1608828
Ref: e901608828
Ref: faulthandler<3>-Footnote-11609091
Node: fileinput<2>1609156
Ref: whatsnew/3 6 fileinput1609270
Ref: e911609270
Ref: fileinput<2>-Footnote-11609458
Node: hashlib<5>1609523
Ref: whatsnew/3 6 hashlib1609636
Ref: e931609636
Ref: hashlib<5>-Footnote-11610685
Ref: hashlib<5>-Footnote-21610750
Ref: hashlib<5>-Footnote-31610815
Ref: hashlib<5>-Footnote-41610880
Node: http client<2>1610945
Ref: whatsnew/3 6 http-client1611063
Ref: e9a1611063
Ref: http client<2>-Footnote-11611323
Node: idlelib e IDLE<2>1611388
Ref: whatsnew/3 6 idlelib-and-idle1611508
Ref: e9d1611508
Ref: idlelib e IDLE<2>-Footnote-11615056
Ref: idlelib e IDLE<2>-Footnote-21615121
Ref: idlelib e IDLE<2>-Footnote-31615186
Ref: idlelib e IDLE<2>-Footnote-41615253
Ref: idlelib e IDLE<2>-Footnote-51615318
Ref: idlelib e IDLE<2>-Footnote-61615383
Ref: idlelib e IDLE<2>-Footnote-71615448
Ref: idlelib e IDLE<2>-Footnote-81615513
Ref: idlelib e IDLE<2>-Footnote-91615578
Ref: idlelib e IDLE<2>-Footnote-101615643
Ref: idlelib e IDLE<2>-Footnote-111615709
Node: importlib<6>1615777
Ref: whatsnew/3 6 importlib1615893
Ref: e9e1615893
Ref: importlib<6>-Footnote-11616720
Node: inspect<7>1616785
Ref: whatsnew/3 6 inspect1616891
Ref: ea41616891
Ref: inspect<7>-Footnote-11617666
Ref: inspect<7>-Footnote-21617731
Node: json<2>1617796
Ref: whatsnew/3 6 json1617900
Ref: ea51617900
Ref: json<2>-Footnote-11618172
Node: logging<4>1618237
Ref: whatsnew/3 6 logging1618338
Ref: ea71618338
Ref: logging<4>-Footnote-11618602
Node: math<8>1618667
Ref: whatsnew/3 6 math1618779
Ref: ea91618779
Ref: math<8>-Footnote-11619011
Ref: math<8>-Footnote-21619076
Node: multiprocessing<6>1619118
Ref: whatsnew/3 6 multiprocessing1619225
Ref: eaa1619225
Ref: multiprocessing<6>-Footnote-11619454
Node: os<9>1619518
Ref: whatsnew/3 6 os1619629
Ref: eab1619629
Ref: os<9>-Footnote-11620629
Ref: os<9>-Footnote-21620694
Ref: os<9>-Footnote-31620736
Node: pathlib<12>1620778
Ref: whatsnew/3 6 pathlib1620877
Ref: eae1620877
Ref: pathlib<12>-Footnote-11621111
Node: pdb<7>1621176
Ref: whatsnew/3 6 pdb1621279
Ref: eaf1621279
Node: pickle<3>1621436
Ref: whatsnew/3 6 pickle1621539
Ref: eb01621539
Ref: pickle<3>-Footnote-11621856
Node: pickletools1621921
Ref: whatsnew/3 6 pickletools1622026
Ref: eb11622026
Ref: pickletools-Footnote-11622254
Node: pydoc<4>1622319
Ref: whatsnew/3 6 pydoc1622424
Ref: eb31622424
Ref: pydoc<4>-Footnote-11622818
Ref: pydoc<4>-Footnote-21622882
Node: random<4>1622947
Ref: whatsnew/3 6 random1623046
Ref: eb41623046
Ref: random<4>-Footnote-11623301
Node: re<6>1623366
Ref: whatsnew/3 6 re1623465
Ref: eb61623465
Ref: re<6>-Footnote-11624176
Ref: re<6>-Footnote-21624242
Ref: re<6>-Footnote-31624307
Node: readline1624372
Ref: whatsnew/3 6 readline1624473
Ref: eb81624473
Ref: readline-Footnote-11624704
Node: rlcompleter1624769
Ref: whatsnew/3 6 rlcompleter1624873
Ref: eba1624873
Ref: rlcompleter-Footnote-11625177
Ref: rlcompleter-Footnote-21625242
Node: shlex<2>1625307
Ref: whatsnew/3 6 shlex1625410
Ref: ebb1625410
Ref: shlex<2>-Footnote-11625700
Node: site<3>1625767
Ref: whatsnew/3 6 site1625869
Ref: ebe1625869
Ref: site<3>-Footnote-11626133
Node: sqlite3<8>1626198
Ref: whatsnew/3 6 sqlite31626301
Ref: ebf1626301
Ref: sqlite3<8>-Footnote-11626504
Node: socket<8>1626569
Ref: whatsnew/3 6 socket1626680
Ref: ec11626680
Ref: socket<8>-Footnote-11627637
Ref: socket<8>-Footnote-21627702
Ref: socket<8>-Footnote-31627767
Ref: socket<8>-Footnote-41627832
Ref: socket<8>-Footnote-51627897
Node: socketserver<2>1627962
Ref: whatsnew/3 6 socketserver1628069
Ref: ec81628069
Ref: socketserver<2>-Footnote-11628704
Ref: socketserver<2>-Footnote-21628769
Node: ssl<8>1628834
Ref: whatsnew/3 6 ssl1628945
Ref: ecc1628945
Ref: ssl<8>-Footnote-11630372
Ref: ssl<8>-Footnote-21630437
Ref: ssl<8>-Footnote-31630502
Ref: ssl<8>-Footnote-41630567
Ref: ssl<8>-Footnote-51630632
Ref: ssl<8>-Footnote-61630697
Ref: ssl<8>-Footnote-71630762
Ref: ssl<8>-Footnote-81630827
Node: statistics<5>1630882
Ref: whatsnew/3 6 statistics1630987
Ref: ed01630987
Ref: statistics<5>-Footnote-11631177
Node: struct<2>1631242
Ref: whatsnew/3 6 struct1631354
Ref: ed21631354
Ref: struct<2>-Footnote-11631585
Node: subprocess<3>1631650
Ref: whatsnew/3 6 subprocess1631756
Ref: ed31631756
Ref: subprocess<3>-Footnote-11632449
Ref: subprocess<3>-Footnote-21632514
Node: sys<10>1632578
Ref: whatsnew/3 6 sys1632684
Ref: ed51632684
Ref: sys<10>-Footnote-11633285
Ref: sys<10>-Footnote-21633350
Node: telnetlib1633415
Ref: whatsnew/3 6 telnetlib1633515
Ref: ed81633515
Ref: telnetlib-Footnote-11633690
Node: time<6>1633755
Ref: whatsnew/3 6 time1633854
Ref: ed91633854
Node: timeit1633993
Ref: whatsnew/3 6 timeit1634093
Ref: edb1634093
Ref: timeit-Footnote-11634552
Ref: timeit-Footnote-21634616
Node: tkinter<7>1634681
Ref: whatsnew/3 6 tkinter1634786
Ref: ede1634786
Ref: tkinter<7>-Footnote-11635230
Node: traceback<4>1635295
Ref: whatsnew/3 6 traceback1635408
Ref: edf1635408
Ref: whatsnew/3 6 whatsnew36-traceback1635408
Ref: e5e1635408
Ref: traceback<4>-Footnote-11636043
Node: tracemalloc<3>1636108
Ref: whatsnew/3 6 tracemalloc1636221
Ref: ee01636221
Ref: tracemalloc<3>-Footnote-11636582
Node: typing<10>1636647
Ref: whatsnew/3 6 typing1636762
Ref: ee21636762
Ref: whatsnew/3 6 whatsnew36-typing1636762
Ref: e2b1636762
Ref: typing<10>-Footnote-11638414
Ref: typing<10>-Footnote-21638464
Ref: typing<10>-Footnote-31638529
Ref: typing<10>-Footnote-41638594
Ref: typing<10>-Footnote-51638636
Ref: typing<10>-Footnote-61638686
Ref: typing<10>-Footnote-71638738
Node: unicodedata<8>1638790
Ref: whatsnew/3 6 unicodedata1638907
Ref: ee61638907
Ref: unicodedata<8>-Footnote-11639095
Node: unittest mock<2>1639146
Ref: whatsnew/3 6 unittest-mock1639267
Ref: ee71639267
Ref: unittest mock<2>-Footnote-11639784
Ref: unittest mock<2>-Footnote-21639849
Node: urllib request1639914
Ref: whatsnew/3 6 urllib-request1640039
Ref: eeb1640039
Ref: urllib request-Footnote-11640411
Node: urllib robotparser1640476
Ref: whatsnew/3 6 urllib-robotparser1640592
Ref: eed1640592
Ref: urllib robotparser-Footnote-11640837
Node: venv<5>1640902
Ref: whatsnew/3 6 venv1641013
Ref: eef1641013
Ref: venv<5>-Footnote-11641300
Node: avisos<2>1641365
Ref: whatsnew/3 6 warnings1641464
Ref: ef01641464
Ref: avisos<2>-Footnote-11642735
Ref: avisos<2>-Footnote-21642800
Node: winreg1642865
Ref: whatsnew/3 6 winreg1642965
Ref: ef21642965
Ref: winreg-Footnote-11643138
Node: winsound1643203
Ref: whatsnew/3 6 winsound1643307
Ref: ef41643307
Ref: winsound-Footnote-11643506
Node: xmlrpc client1643571
Ref: whatsnew/3 6 xmlrpc-client1643679
Ref: ef81643679
Ref: xmlrpc client-Footnote-11643972
Node: zipfile<4>1644037
Ref: whatsnew/3 6 zipfile1644144
Ref: ef91644144
Ref: zipfile<4>-Footnote-11644678
Ref: zipfile<4>-Footnote-21644743
Node: zlib<2>1644808
Ref: whatsnew/3 6 zlib1644893
Ref: efc1644893
Ref: zlib<2>-Footnote-11645149
Ref: zlib<2>-Footnote-21645214
Node: Otimizações<9>1645279
Ref: whatsnew/3 6 optimizations1645434
Ref: efe1645434
Ref: Otimizações<9>-Footnote-11649301
Ref: Otimizações<9>-Footnote-21649366
Ref: Otimizações<9>-Footnote-31649431
Ref: Otimizações<9>-Footnote-41649496
Ref: Otimizações<9>-Footnote-51649561
Ref: Otimizações<9>-Footnote-61649626
Ref: Otimizações<9>-Footnote-71649691
Ref: Otimizações<9>-Footnote-81649756
Ref: Otimizações<9>-Footnote-91649821
Ref: Otimizações<9>-Footnote-101649886
Ref: Otimizações<9>-Footnote-111649952
Ref: Otimizações<9>-Footnote-121650018
Ref: Otimizações<9>-Footnote-131650084
Ref: Otimizações<9>-Footnote-141650150
Ref: Otimizações<9>-Footnote-151650216
Ref: Otimizações<9>-Footnote-161650282
Ref: Otimizações<9>-Footnote-171650348
Ref: Otimizações<9>-Footnote-181650414
Ref: Otimizações<9>-Footnote-191650480
Ref: Otimizações<9>-Footnote-201650546
Ref: Otimizações<9>-Footnote-211650612
Node: Mudanças a construções e API C<2>1650678
Ref: whatsnew/3 6 build-and-c-api-changes1650829
Ref: f041650829
Ref: Mudanças a construções e API C<2>-Footnote-11653299
Ref: Mudanças a construções e API C<2>-Footnote-21653341
Ref: Mudanças a construções e API C<2>-Footnote-31653406
Ref: Mudanças a construções e API C<2>-Footnote-41653471
Ref: Mudanças a construções e API C<2>-Footnote-51653536
Ref: Mudanças a construções e API C<2>-Footnote-61653600
Ref: Mudanças a construções e API C<2>-Footnote-71653665
Ref: Mudanças a construções e API C<2>-Footnote-81653730
Ref: Mudanças a construções e API C<2>-Footnote-91653795
Ref: Mudanças a construções e API C<2>-Footnote-101653860
Node: Other Improvements1653926
Ref: whatsnew/3 6 other-improvements1654079
Ref: f0a1654079
Node: Descontinuados<10>1654448
Ref: whatsnew/3 6 deprecated1654578
Ref: f0c1654578
Node: New Keywords1654922
Ref: whatsnew/3 6 new-keywords1655024
Ref: f0d1655024
Ref: New Keywords-Footnote-11655417
Node: Deprecated Python behavior1655459
Ref: whatsnew/3 6 deprecated-python-behavior1655620
Ref: f0e1655620
Ref: Deprecated Python behavior-Footnote-11656827
Ref: Deprecated Python behavior-Footnote-21656892
Ref: Deprecated Python behavior-Footnote-31656957
Node: Deprecated Python modules functions and methods<2>1657022
Ref: whatsnew/3 6 deprecated-python-modules-functions-and-methods1657177
Ref: f101657177
Node: asynchat1657487
Ref: whatsnew/3 6 asynchat1657599
Ref: f111657599
Ref: asynchat-Footnote-11657783
Node: asyncore1657848
Ref: whatsnew/3 6 asyncore1657975
Ref: f121657975
Ref: asyncore-Footnote-11658159
Node: dbm<4>1658224
Ref: whatsnew/3 6 dbm1658355
Ref: f131658355
Ref: dbm<4>-Footnote-11658715
Node: distutils<6>1658780
Ref: whatsnew/3 6 id21658906
Ref: f141658906
Ref: distutils<6>-Footnote-11659236
Node: grp1659301
Ref: whatsnew/3 6 grp1659433
Ref: f151659433
Ref: grp-Footnote-11659631
Node: importlib<7>1659696
Ref: whatsnew/3 6 id31659822
Ref: f171659822
Node: os<10>1660476
Ref: whatsnew/3 6 id41660604
Ref: f1c1660604
Ref: os<10>-Footnote-11660898
Ref: os<10>-Footnote-21660963
Node: re<7>1661028
Ref: whatsnew/3 6 id51661150
Ref: f1d1661150
Ref: re<7>-Footnote-11661476
Node: ssl<9>1661541
Ref: whatsnew/3 6 id61661667
Ref: f1e1661667
Ref: ssl<9>-Footnote-11662462
Ref: ssl<9>-Footnote-21662527
Ref: ssl<9>-Footnote-31662592
Node: tkinter<8>1662657
Ref: whatsnew/3 6 id71662785
Ref: f1f1662785
Node: venv<6>1662938
Ref: whatsnew/3 6 id81663051
Ref: f201663051
Ref: whatsnew/3 6 whatsnew36-venv1663051
Ref: f211663051
Ref: venv<6>-Footnote-11663402
Node: xml<6>1663467
Ref: whatsnew/3 6 xml1663642
Ref: f221663642
Ref: xml<6>-Footnote-11663946
Node: Deprecated functions and types of the C API<2>1664001
Ref: whatsnew/3 6 deprecated-functions-and-types-of-the-c-api1664150
Ref: f231664150
Node: Deprecated Build Options1664499
Ref: whatsnew/3 6 deprecated-build-options1664633
Ref: f251664633
Node: Removidos<10>1665074
Ref: whatsnew/3 6 removed1665207
Ref: f261665207
Node: Remoção de APIs e recursos<3>1665317
Ref: whatsnew/3 6 api-and-feature-removals1665398
Ref: f271665398
Ref: Remoção de APIs e recursos<3>-Footnote-11667495
Ref: Remoção de APIs e recursos<3>-Footnote-21667560
Node: Porting to Python 3 61667638
Ref: whatsnew/3 6 porting-to-python-3-61667784
Ref: f2a1667784
Node: Changes in ‘python’ Command Behavior1668217
Ref: whatsnew/3 6 changes-in-python-command-behavior1668353
Ref: f2b1668353
Ref: Changes in ‘python’ Command Behavior-Footnote-11668833
Node: Alterações na API Python<9>1668898
Ref: whatsnew/3 6 changes-in-the-python-api1669068
Ref: f2c1669068
Ref: Alterações na API Python<9>-Footnote-11679195
Ref: Alterações na API Python<9>-Footnote-21679259
Ref: Alterações na API Python<9>-Footnote-31679301
Ref: Alterações na API Python<9>-Footnote-41679366
Ref: Alterações na API Python<9>-Footnote-51679431
Ref: Alterações na API Python<9>-Footnote-61679496
Ref: Alterações na API Python<9>-Footnote-71679561
Ref: Alterações na API Python<9>-Footnote-81679626
Ref: Alterações na API Python<9>-Footnote-91679691
Ref: Alterações na API Python<9>-Footnote-101679756
Ref: Alterações na API Python<9>-Footnote-111679822
Ref: Alterações na API Python<9>-Footnote-121679865
Ref: Alterações na API Python<9>-Footnote-131679931
Ref: Alterações na API Python<9>-Footnote-141679997
Ref: Alterações na API Python<9>-Footnote-151680063
Ref: Alterações na API Python<9>-Footnote-161680129
Ref: Alterações na API Python<9>-Footnote-171680194
Ref: Alterações na API Python<9>-Footnote-181680260
Ref: Alterações na API Python<9>-Footnote-191680326
Ref: Alterações na API Python<9>-Footnote-201680392
Node: Alterações na API C<15>1680458
Ref: whatsnew/3 6 changes-in-the-c-api1680626
Ref: f3e1680626
Ref: Alterações na API C<15>-Footnote-11681280
Ref: Alterações na API C<15>-Footnote-21681345
Node: Alterações de bytecode do CPython<9>1681409
Ref: whatsnew/3 6 cpython-bytecode-changes1681539
Ref: f401681539
Ref: Alterações de bytecode do CPython<9>-Footnote-11683179
Ref: Alterações de bytecode do CPython<9>-Footnote-21683244
Ref: Alterações de bytecode do CPython<9>-Footnote-31683309
Ref: Alterações de bytecode do CPython<9>-Footnote-41683374
Ref: Alterações de bytecode do CPython<9>-Footnote-51683439
Ref: Alterações de bytecode do CPython<9>-Footnote-61683504
Ref: Alterações de bytecode do CPython<9>-Footnote-71683569
Ref: Alterações de bytecode do CPython<9>-Footnote-81683634
Ref: Alterações de bytecode do CPython<9>-Footnote-91683699
Node: Notable changes in Python 3 6 21683764
Ref: whatsnew/3 6 notable-changes-in-python-3-6-21683928
Ref: f461683928
Node: Novo alvo de construção make regen-all1684111
Ref: whatsnew/3 6 new-make-regen-all-build-target1684272
Ref: f471684272
Ref: Novo alvo de construção make regen-all-Footnote-11685180
Ref: Novo alvo de construção make regen-all-Footnote-21685248
Node: Remoção do alvo de construção make touch1685313
Ref: whatsnew/3 6 removal-of-make-touch-build-target1685474
Ref: f481685474
Ref: Remoção do alvo de construção make touch-Footnote-11685939
Node: Notable changes in Python 3 6 41686004
Ref: whatsnew/3 6 notable-changes-in-python-3-6-41686178
Ref: f491686178
Ref: Notable changes in Python 3 6 4-Footnote-11686551
Ref: Notable changes in Python 3 6 4-Footnote-21686616
Node: Notable changes in Python 3 6 51686681
Ref: whatsnew/3 6 notable-changes-in-python-3-6-51686855
Ref: f4a1686855
Ref: Notable changes in Python 3 6 5-Footnote-11687158
Node: Notable changes in Python 3 6 71687223
Ref: whatsnew/3 6 notable-changes-in-python-3-6-71687398
Ref: f4b1687398
Ref: Notable changes in Python 3 6 7-Footnote-11687907
Ref: Notable changes in Python 3 6 7-Footnote-21687962
Node: Notable changes in Python 3 6 101688027
Ref: whatsnew/3 6 notable-changes-in-python-3-6-101688203
Ref: f4c1688203
Ref: Notable changes in Python 3 6 10-Footnote-11688741
Node: Notable changes in Python 3 6 131688806
Ref: whatsnew/3 6 notable-changes-in-python-3-6-131688983
Ref: f4d1688983
Ref: Notable changes in Python 3 6 13-Footnote-11689785
Node: Notable changes in Python 3 6 141689850
Ref: whatsnew/3 6 notable-changes-in-python-3-6-141689986
Ref: f4e1689986
Ref: Notable changes in Python 3 6 14-Footnote-11690965
Ref: Notable changes in Python 3 6 14-Footnote-21691020
Node: O que há de novo no Python 3 51691075
Ref: whatsnew/3 5 doc1691245
Ref: f4f1691245
Ref: whatsnew/3 5 no-color1691245
Ref: f501691245
Ref: whatsnew/3 5 what-s-new-in-python-3-51691245
Ref: f511691245
Ref: O que há de novo no Python 3 5-Footnote-11692286
Ref: O que há de novo no Python 3 5-Footnote-21692346
Node: Resumo – Destaques da versão<10>1692388
Ref: whatsnew/3 5 summary-release-highlights1692525
Ref: f521692525
Ref: Resumo – Destaques da versão<10>-Footnote-11696284
Ref: Resumo – Destaques da versão<10>-Footnote-21696348
Ref: Resumo – Destaques da versão<10>-Footnote-31696413
Ref: Resumo – Destaques da versão<10>-Footnote-41696478
Ref: Resumo – Destaques da versão<10>-Footnote-51696543
Ref: Resumo – Destaques da versão<10>-Footnote-61696608
Ref: Resumo – Destaques da versão<10>-Footnote-71696673
Node: Novas funcionalidades<15>1696738
Ref: whatsnew/3 5 new-features1696916
Ref: f651696916
Node: PEP 492 - Coroutines with async and await syntax1698032
Ref: whatsnew/3 5 pep-492-coroutines-with-async-and-await-syntax1698213
Ref: f661698213
Ref: whatsnew/3 5 whatsnew-pep-4921698213
Ref: f531698213
Ref: PEP 492 - Coroutines with async and await syntax-Footnote-11701301
Ref: PEP 492 - Coroutines with async and await syntax-Footnote-21701343
Node: PEP 465 - A dedicated infix operator for matrix multiplication1701385
Ref: whatsnew/3 5 pep-465-a-dedicated-infix-operator-for-matrix-multiplication1701621
Ref: f6c1701621
Ref: whatsnew/3 5 whatsnew-pep-4651701621
Ref: f541701621
Ref: PEP 465 - A dedicated infix operator for matrix multiplication-Footnote-11703031
Ref: PEP 465 - A dedicated infix operator for matrix multiplication-Footnote-21703073
Node: PEP 448 - Additional Unpacking Generalizations1703115
Ref: whatsnew/3 5 pep-448-additional-unpacking-generalizations1703363
Ref: f701703363
Ref: whatsnew/3 5 whatsnew-pep-4481703363
Ref: f551703363
Ref: PEP 448 - Additional Unpacking Generalizations-Footnote-11704485
Ref: PEP 448 - Additional Unpacking Generalizations-Footnote-21704527
Node: PEP 461 - percent formatting support for bytes and bytearray1704569
Ref: whatsnew/3 5 pep-461-percent-formatting-support-for-bytes-and-bytearray1704775
Ref: f741704775
Ref: whatsnew/3 5 whatsnew-pep-4611704775
Ref: f581704775
Ref: PEP 461 - percent formatting support for bytes and bytearray-Footnote-11706318
Ref: PEP 461 - percent formatting support for bytes and bytearray-Footnote-21706360
Node: PEP 484 - Type Hints1706402
Ref: whatsnew/3 5 pep-484-type-hints1706634
Ref: f761706634
Ref: whatsnew/3 5 whatsnew-pep-4841706634
Ref: f561706634
Ref: PEP 484 - Type Hints-Footnote-11708300
Ref: PEP 484 - Type Hints-Footnote-21708342
Ref: PEP 484 - Type Hints-Footnote-31708384
Ref: PEP 484 - Type Hints-Footnote-41708414
Ref: PEP 484 - Type Hints-Footnote-51708456
Node: PEP 471 - os scandir function – a better and faster directory iterator1708498
Ref: whatsnew/3 5 pep-471-os-scandir-function-a-better-and-faster-directory-iterator1708715
Ref: f771708715
Ref: whatsnew/3 5 whatsnew-pep-4711708715
Ref: f611708715
Ref: PEP 471 - os scandir function – a better and faster directory iterator-Footnote-11710078
Ref: PEP 471 - os scandir function – a better and faster directory iterator-Footnote-21710120
Node: PEP 475 Retry system calls failing with EINTR1710162
Ref: whatsnew/3 5 pep-475-retry-system-calls-failing-with-eintr1710414
Ref: f791710414
Ref: whatsnew/3 5 whatsnew-pep-4751710414
Ref: f7a1710414
Ref: PEP 475 Retry system calls failing with EINTR-Footnote-11713483
Ref: PEP 475 Retry system calls failing with EINTR-Footnote-21713525
Node: PEP 479 Change StopIteration handling inside generators1713567
Ref: whatsnew/3 5 pep-479-change-stopiteration-handling-inside-generators1713798
Ref: fa01713798
Ref: whatsnew/3 5 whatsnew-pep-4791713798
Ref: f0f1713798
Ref: PEP 479 Change StopIteration handling inside generators-Footnote-11715735
Ref: PEP 479 Change StopIteration handling inside generators-Footnote-21715777
Node: PEP 485 A function for testing approximate equality1715819
Ref: whatsnew/3 5 pep-485-a-function-for-testing-approximate-equality1716067
Ref: fa21716067
Ref: whatsnew/3 5 whatsnew-pep-4851716067
Ref: fa31716067
Ref: PEP 485 A function for testing approximate equality-Footnote-11717259
Ref: PEP 485 A function for testing approximate equality-Footnote-21717301
Node: PEP 486 Make the Python Launcher aware of virtual environments1717343
Ref: whatsnew/3 5 pep-486-make-the-python-launcher-aware-of-virtual-environments1717568
Ref: fa61717568
Ref: whatsnew/3 5 whatsnew-pep-4861717568
Ref: fa71717568
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-11718149
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-21718191
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-31718233
Node: PEP 488 Elimination of PYO files1718275
Ref: whatsnew/3 5 pep-488-elimination-of-pyo-files1718500
Ref: fa81718500
Ref: whatsnew/3 5 whatsnew-pep-4881718500
Ref: f5d1718500
Ref: PEP 488 Elimination of PYO files-Footnote-11719373
Ref: PEP 488 Elimination of PYO files-Footnote-21719415
Node: PEP 489 Multi-phase extension module initialization1719457
Ref: whatsnew/3 5 pep-489-multi-phase-extension-module-initialization1719611
Ref: faa1719611
Ref: whatsnew/3 5 whatsnew-pep-4891719611
Ref: f5e1719611
Ref: PEP 489 Multi-phase extension module initialization-Footnote-11720384
Ref: PEP 489 Multi-phase extension module initialization-Footnote-21720426
Ref: PEP 489 Multi-phase extension module initialization-Footnote-31720468
Node: Outras mudanças na linguagem<9>1720510
Ref: whatsnew/3 5 other-language-changes1720671
Ref: fab1720671
Ref: Outras mudanças na linguagem<9>-Footnote-11721699
Ref: Outras mudanças na linguagem<9>-Footnote-21721764
Ref: Outras mudanças na linguagem<9>-Footnote-31721829
Ref: Outras mudanças na linguagem<9>-Footnote-41721894
Ref: Outras mudanças na linguagem<9>-Footnote-51721959
Ref: Outras mudanças na linguagem<9>-Footnote-61722024
Ref: Outras mudanças na linguagem<9>-Footnote-71722089
Node: Novos módulos<10>1722154
Ref: whatsnew/3 5 new-modules1722313
Ref: fad1722313
Node: typing<11>1722410
Ref: whatsnew/3 5 typing1722493
Ref: fae1722493
Node: zipapp<2>1722706
Ref: whatsnew/3 5 whatsnew-zipapp1722789
Ref: f571722789
Ref: whatsnew/3 5 zipapp1722789
Ref: faf1722789
Ref: zipapp<2>-Footnote-11723506
Ref: zipapp<2>-Footnote-21723548
Ref: zipapp<2>-Footnote-31723615
Ref: zipapp<2>-Footnote-41723680
Node: Módulos melhorados<10>1723722
Ref: whatsnew/3 5 improved-modules1723875
Ref: fb01723875
Node: argparse<6>1725605
Ref: whatsnew/3 5 argparse1725696
Ref: fb11725696
Ref: argparse<6>-Footnote-11726021
Node: asyncio<13>1726086
Ref: whatsnew/3 5 asyncio1726189
Ref: fb41726189
Ref: asyncio<13>-Footnote-11729669
Ref: asyncio<13>-Footnote-21729734
Ref: asyncio<13>-Footnote-31729799
Node: bz21729844
Ref: whatsnew/3 5 bz21729939
Ref: fbd1729939
Ref: bz2-Footnote-11730196
Node: cgi1730261
Ref: whatsnew/3 5 cgi1730353
Ref: fbf1730353
Ref: cgi-Footnote-11730550
Node: cmath<2>1730615
Ref: whatsnew/3 5 cmath1730711
Ref: fc01730711
Ref: cmath<2>-Footnote-11730927
Node: código1730992
Ref: whatsnew/3 5 code1731099
Ref: fc11731099
Ref: código-Footnote-11731357
Node: collections<5>1731422
Ref: whatsnew/3 5 collections1731539
Ref: fc31731539
Ref: whatsnew/3 5 whatsnew-ordereddict1731582
Ref: f5f1731582
Ref: collections<5>-Footnote-11732866
Ref: collections<5>-Footnote-21732931
Ref: collections<5>-Footnote-31732996
Ref: collections<5>-Footnote-41733061
Ref: collections<5>-Footnote-51733126
Node: collections abc<3>1733191
Ref: whatsnew/3 5 collections-abc1733314
Ref: fce1733314
Ref: collections abc<3>-Footnote-11733986
Ref: collections abc<3>-Footnote-21734051
Ref: collections abc<3>-Footnote-31734116
Ref: collections abc<3>-Footnote-41734181
Node: compileall<4>1734229
Ref: whatsnew/3 5 compileall1734359
Ref: fd41734359
Ref: compileall<4>-Footnote-11735236
Ref: compileall<4>-Footnote-21735301
Ref: compileall<4>-Footnote-31735366
Node: concurrent futures<6>1735431
Ref: whatsnew/3 5 concurrent-futures1735558
Ref: fd71735558
Ref: concurrent futures<6>-Footnote-11736062
Ref: concurrent futures<6>-Footnote-21736127
Node: configparser<5>1736192
Ref: whatsnew/3 5 configparser1736319
Ref: fd91736319
Ref: configparser<5>-Footnote-11737272
Node: contextlib<5>1737337
Ref: whatsnew/3 5 contextlib1737449
Ref: fda1737449
Ref: contextlib<5>-Footnote-11738061
Node: csv<3>1738126
Ref: whatsnew/3 5 csv1738232
Ref: fdd1738232
Ref: csv<3>-Footnote-11738438
Node: curses<5>1738503
Ref: whatsnew/3 5 curses1738602
Ref: fdf1738602
Ref: curses<5>-Footnote-11738892
Node: dbm<5>1738956
Ref: whatsnew/3 5 dbm1739059
Ref: fe31739059
Ref: dbm<5>-Footnote-11739264
Node: difflib<3>1739329
Ref: whatsnew/3 5 difflib1739435
Ref: fe41739435
Ref: difflib<3>-Footnote-11739973
Ref: difflib<3>-Footnote-21740037
Node: distutils<7>1740102
Ref: whatsnew/3 5 distutils1740212
Ref: fe71740212
Ref: distutils<7>-Footnote-11740665
Ref: distutils<7>-Footnote-21740729
Node: doctest<3>1740794
Ref: whatsnew/3 5 doctest1740902
Ref: fe81740902
Ref: doctest<3>-Footnote-11741189
Node: email<4>1741254
Ref: whatsnew/3 5 email1741357
Ref: feb1741357
Ref: email<4>-Footnote-11742470
Ref: email<4>-Footnote-21742535
Ref: email<4>-Footnote-31742600
Ref: email<4>-Footnote-41742659
Ref: email<4>-Footnote-51742718
Ref: email<4>-Footnote-61742783
Node: enum<8>1742848
Ref: whatsnew/3 5 enum1742956
Ref: ff11742956
Ref: enum<8>-Footnote-11743349
Node: faulthandler<4>1743414
Ref: whatsnew/3 5 faulthandler1743526
Ref: ff21743526
Ref: faulthandler<4>-Footnote-11743840
Node: functools<5>1743905
Ref: whatsnew/3 5 functools1744017
Ref: ff61744017
Ref: whatsnew/3 5 whatsnew-lrucache1744058
Ref: f621744058
Ref: functools<5>-Footnote-11744284
Node: glob<3>1744349
Ref: whatsnew/3 5 glob1744453
Ref: ff71744453
Ref: glob<3>-Footnote-11744707
Node: gzip<4>1744772
Ref: whatsnew/3 5 gzip1744872
Ref: ff81744872
Ref: gzip<4>-Footnote-11745099
Node: heapq<2>1745164
Ref: whatsnew/3 5 heapq1745264
Ref: ff91745264
Ref: heapq<2>-Footnote-11745906
Node: http<3>1745971
Ref: whatsnew/3 5 http1746078
Ref: ffc1746078
Ref: http<3>-Footnote-11746326
Node: http client<3>1746391
Ref: whatsnew/3 5 http-client1746507
Ref: ffd1746507
Ref: http client<3>-Footnote-11747254
Node: idlelib e IDLE<3>1747318
Ref: whatsnew/3 5 idlelib-and-idle1747437
Ref: 10011747437
Node: imaplib<3>1747829
Ref: whatsnew/3 5 imaplib1747940
Ref: 10021747940
Ref: imaplib<3>-Footnote-11748823
Ref: imaplib<3>-Footnote-21748887
Ref: imaplib<3>-Footnote-31748946
Ref: imaplib<3>-Footnote-41749005
Ref: imaplib<3>-Footnote-51749064
Ref: imaplib<3>-Footnote-61749129
Node: imghdr1749194
Ref: whatsnew/3 5 imghdr1749300
Ref: 10051749300
Ref: imghdr-Footnote-11749590
Ref: imghdr-Footnote-21749622
Ref: imghdr-Footnote-31749687
Ref: imghdr-Footnote-41749730
Node: importlib<8>1749795
Ref: whatsnew/3 5 importlib1749901
Ref: 10061749901
Ref: importlib<8>-Footnote-11750742
Ref: importlib<8>-Footnote-21750807
Ref: importlib<8>-Footnote-31750872
Node: inspect<8>1750937
Ref: whatsnew/3 5 inspect1751042
Ref: 100a1751042
Ref: inspect<8>-Footnote-11752606
Ref: inspect<8>-Footnote-21752671
Ref: inspect<8>-Footnote-31752736
Ref: inspect<8>-Footnote-41752801
Ref: inspect<8>-Footnote-51752866
Ref: inspect<8>-Footnote-61752931
Ref: inspect<8>-Footnote-71752996
Ref: inspect<8>-Footnote-81753061
Node: io<7>1753126
Ref: whatsnew/3 5 io1753231
Ref: 10101753231
Ref: io<7>-Footnote-11753534
Node: ipaddress<4>1753599
Ref: whatsnew/3 5 ipaddress1753701
Ref: 10141753701
Ref: ipaddress<4>-Footnote-11754738
Ref: ipaddress<4>-Footnote-21754803
Node: json<3>1754868
Ref: whatsnew/3 5 json1754977
Ref: 10161754977
Ref: json<3>-Footnote-11755480
Ref: json<3>-Footnote-21755545
Node: linecache<3>1755610
Ref: whatsnew/3 5 linecache1755716
Ref: 10181755716
Ref: linecache<3>-Footnote-11756129
Node: locale<6>1756194
Ref: whatsnew/3 5 locale1756303
Ref: 101a1756303
Ref: locale<6>-Footnote-11756871
Node: logging<5>1756936
Ref: whatsnew/3 5 logging1757037
Ref: 101c1757037
Ref: logging<5>-Footnote-11758014
Ref: logging<5>-Footnote-21758079
Node: lzma1758144
Ref: whatsnew/3 5 lzma1758243
Ref: 10221758243
Ref: lzma-Footnote-11758508
Node: math<9>1758573
Ref: whatsnew/3 5 math1758680
Ref: 10241758680
Ref: math<9>-Footnote-11759224
Ref: math<9>-Footnote-21759289
Ref: math<9>-Footnote-31759354
Node: multiprocessing<7>1759419
Ref: whatsnew/3 5 multiprocessing1759533
Ref: 10251759533
Ref: multiprocessing<7>-Footnote-11759786
Node: operador<2>1759851
Ref: whatsnew/3 5 operator1759964
Ref: 10271759964
Ref: operador<2>-Footnote-11760375
Ref: operador<2>-Footnote-21760440
Node: os<11>1760505
Ref: whatsnew/3 5 os1760611
Ref: 102c1760611
Ref: os<11>-Footnote-11762468
Ref: os<11>-Footnote-21762533
Ref: os<11>-Footnote-31762598
Ref: os<11>-Footnote-41762663
Ref: os<11>-Footnote-51762728
Ref: os<11>-Footnote-61762793
Node: pathlib<13>1762858
Ref: whatsnew/3 5 pathlib1762962
Ref: 10341762962
Ref: pathlib<13>-Footnote-11764442
Ref: pathlib<13>-Footnote-21764507
Ref: pathlib<13>-Footnote-31764572
Ref: pathlib<13>-Footnote-41764637
Ref: pathlib<13>-Footnote-51764702
Node: pickle<4>1764767
Ref: whatsnew/3 5 pickle1764874
Ref: 103c1764874
Ref: pickle<4>-Footnote-11765192
Node: poplib<2>1765257
Ref: whatsnew/3 5 poplib1765358
Ref: 103d1765358
Ref: poplib<2>-Footnote-11765603
Ref: poplib<2>-Footnote-21765662
Node: re<8>1765727
Ref: whatsnew/3 5 re1765830
Ref: 103f1765830
Ref: re<8>-Footnote-11767073
Ref: re<8>-Footnote-21767137
Ref: re<8>-Footnote-31767202
Ref: re<8>-Footnote-41767269
Node: readline<2>1767334
Ref: whatsnew/3 5 readline1767437
Ref: 10451767437
Ref: readline<2>-Footnote-11767703
Node: selectors1767768
Ref: whatsnew/3 5 selectors1767875
Ref: 10471767875
Ref: selectors-Footnote-11768099
Node: shutil<5>1768164
Ref: whatsnew/3 5 shutil1768269
Ref: 10481768269
Ref: shutil<5>-Footnote-11768751
Ref: shutil<5>-Footnote-21768816
Node: signal<3>1768880
Ref: whatsnew/3 5 signal1768984
Ref: 104a1768984
Ref: signal<3>-Footnote-11769453
Ref: signal<3>-Footnote-21769518
Node: smtpd<2>1769583
Ref: whatsnew/3 5 smtpd1769688
Ref: 104b1769688
Ref: smtpd<2>-Footnote-11771326
Ref: smtpd<2>-Footnote-21771391
Ref: smtpd<2>-Footnote-31771450
Ref: smtpd<2>-Footnote-41771515
Ref: smtpd<2>-Footnote-51771574
Ref: smtpd<2>-Footnote-61771639
Node: smtplib<2>1771704
Ref: whatsnew/3 5 smtplib1771806
Ref: 104c1771806
Ref: smtplib<2>-Footnote-11772433
Ref: smtplib<2>-Footnote-21772498
Ref: smtplib<2>-Footnote-31772563
Ref: smtplib<2>-Footnote-41772622
Node: sndhdr1772687
Ref: whatsnew/3 5 sndhdr1772790
Ref: 10511772790
Ref: sndhdr-Footnote-11772995
Node: socket<9>1773060
Ref: whatsnew/3 5 socket1773160
Ref: 10521773160
Ref: socket<9>-Footnote-11774136
Ref: socket<9>-Footnote-21774201
Ref: socket<9>-Footnote-31774266
Ref: socket<9>-Footnote-41774331
Node: ssl<10>1774396
Ref: whatsnew/3 5 ssl1774500
Ref: 10561774500
Node: Підтримка BIO пам’яті1774651
Ref: whatsnew/3 5 memory-bio-support1774788
Ref: 10571774788
Ref: whatsnew/3 5 whatsnew-sslmemorybio1774788
Ref: f601774788
Ref: Підтримка BIO пам’яті-Footnote-11775697
Node: Application-Layer Protocol Negotiation Support1775762
Ref: whatsnew/3 5 application-layer-protocol-negotiation-support1775921
Ref: 10591775921
Ref: Application-Layer Protocol Negotiation Support-Footnote-11776631
Ref: Application-Layer Protocol Negotiation Support-Footnote-21776696
Node: Other Changes1776755
Ref: whatsnew/3 5 other-changes1776867
Ref: 105d1776867
Ref: Other Changes-Footnote-11778463
Ref: Other Changes-Footnote-21778528
Ref: Other Changes-Footnote-31778593
Ref: Other Changes-Footnote-41778658
Ref: Other Changes-Footnote-51778717
Ref: Other Changes-Footnote-61778782
Ref: Other Changes-Footnote-71778847
Ref: Other Changes-Footnote-81778912
Node: sqlite3<9>1778977
Ref: whatsnew/3 5 sqlite31779085
Ref: 10661779085
Ref: sqlite3<9>-Footnote-11779417
Ref: sqlite3<9>-Footnote-21779482
Node: subprocess<4>1779547
Ref: whatsnew/3 5 subprocess1779655
Ref: 10681779655
Ref: whatsnew/3 5 whatsnew-subprocess1779655
Ref: f631779655
Ref: subprocess<4>-Footnote-11780672
Node: sys<11>1780737
Ref: whatsnew/3 5 sys1780847
Ref: 106a1780847
Ref: sys<11>-Footnote-11781499
Ref: sys<11>-Footnote-21781564
Node: sysconfig<3>1781629
Ref: whatsnew/3 5 sysconfig1781736
Ref: 106b1781736
Ref: sysconfig<3>-Footnote-11781971
Node: tarfile<7>1782036
Ref: whatsnew/3 5 tarfile1782148
Ref: 106c1782148
Ref: tarfile<7>-Footnote-11783064
Ref: tarfile<7>-Footnote-21783129
Ref: tarfile<7>-Footnote-31783194
Node: threading<7>1783259
Ref: whatsnew/3 5 threading1783366
Ref: 10701783366
Ref: threading<7>-Footnote-11783621
Node: time<7>1783686
Ref: whatsnew/3 5 time1783792
Ref: 10721783792
Ref: time<7>-Footnote-11783971
Node: timeit<2>1784036
Ref: whatsnew/3 5 timeit1784140
Ref: 10731784140
Ref: timeit<2>-Footnote-11784608
Ref: timeit<2>-Footnote-21784673
Node: tkinter<9>1784737
Ref: whatsnew/3 5 tkinter1784846
Ref: 10751784846
Ref: tkinter<9>-Footnote-11785180
Node: traceback<5>1785245
Ref: whatsnew/3 5 traceback1785353
Ref: 10761785353
Ref: whatsnew/3 5 whatsnew-traceback1785353
Ref: f641785353
Ref: traceback<5>-Footnote-11785953
Ref: traceback<5>-Footnote-21786018
Ref: traceback<5>-Footnote-31786083
Node: types<5>1786148
Ref: whatsnew/3 5 types1786260
Ref: 107d1786260
Ref: types<5>-Footnote-11786708
Ref: types<5>-Footnote-21786773
Node: unicodedata<9>1786838
Ref: whatsnew/3 5 unicodedata1786949
Ref: 10801786949
Ref: unicodedata<9>-Footnote-11787103
Node: unittest<9>1787154
Ref: whatsnew/3 5 unittest1787273
Ref: 10811787273
Ref: unittest<9>-Footnote-11788070
Ref: unittest<9>-Footnote-21788135
Ref: unittest<9>-Footnote-31788200
Node: unittest mock<3>1788265
Ref: whatsnew/3 5 unittest-mock1788379
Ref: 10831788379
Ref: unittest mock<3>-Footnote-11789327
Ref: unittest mock<3>-Footnote-21789392
Ref: unittest mock<3>-Footnote-31789457
Ref: unittest mock<3>-Footnote-41789522
Ref: unittest mock<3>-Footnote-51789587
Ref: unittest mock<3>-Footnote-61789652
Node: urllib<4>1789717
Ref: whatsnew/3 5 urllib1789827
Ref: 10891789827
Ref: urllib<4>-Footnote-11790992
Ref: urllib<4>-Footnote-21791057
Ref: urllib<4>-Footnote-31791121
Ref: urllib<4>-Footnote-41791186
Ref: urllib<4>-Footnote-51791251
Ref: urllib<4>-Footnote-61791310
Ref: urllib<4>-Footnote-71791369
Ref: urllib<4>-Footnote-81791428
Node: wsgiref1791493
Ref: whatsnew/3 5 wsgiref1791596
Ref: 108d1791596
Ref: wsgiref-Footnote-11791837
Node: xmlrpc<2>1791901
Ref: whatsnew/3 5 xmlrpc1792002
Ref: 108f1792002
Ref: xmlrpc<2>-Footnote-11792374
Ref: xmlrpc<2>-Footnote-21792439
Node: xml sax1792504
Ref: whatsnew/3 5 xml-sax1792608
Ref: 10901792608
Ref: xml sax-Footnote-11792945
Ref: xml sax-Footnote-21793009
Node: zipfile<5>1793074
Ref: whatsnew/3 5 zipfile1793160
Ref: 10931793160
Ref: zipfile<5>-Footnote-11793502
Ref: zipfile<5>-Footnote-21793567
Node: Other module-level changes1793632
Ref: whatsnew/3 5 other-module-level-changes1793784
Ref: 10941793784
Ref: Other module-level changes-Footnote-11794113
Node: Otimizações<10>1794178
Ref: whatsnew/3 5 optimizations1794343
Ref: 10951794343
Ref: Otimizações<10>-Footnote-11797412
Ref: Otimizações<10>-Footnote-21797477
Ref: Otimizações<10>-Footnote-31797542
Ref: Otimizações<10>-Footnote-41797607
Ref: Otimizações<10>-Footnote-51797672
Ref: Otimizações<10>-Footnote-61797737
Ref: Otimizações<10>-Footnote-71797802
Ref: Otimizações<10>-Footnote-81797867
Ref: Otimizações<10>-Footnote-91797932
Ref: Otimizações<10>-Footnote-101797997
Ref: Otimizações<10>-Footnote-111798063
Ref: Otimizações<10>-Footnote-121798129
Ref: Otimizações<10>-Footnote-131798195
Ref: Otimizações<10>-Footnote-141798261
Ref: Otimizações<10>-Footnote-151798327
Ref: Otimizações<10>-Footnote-161798393
Ref: Otimizações<10>-Footnote-171798459
Ref: Otimizações<10>-Footnote-181798525
Ref: Otimizações<10>-Footnote-191798591
Ref: Otimizações<10>-Footnote-201798657
Node: Mudanças a construções e API C<3>1798723
Ref: whatsnew/3 5 build-and-c-api-changes1798880
Ref: 10a21798880
Ref: Mudanças a construções e API C<3>-Footnote-11802472
Ref: Mudanças a construções e API C<3>-Footnote-21802537
Ref: Mudanças a construções e API C<3>-Footnote-31802602
Ref: Mudanças a construções e API C<3>-Footnote-41802667
Ref: Mudanças a construções e API C<3>-Footnote-51802732
Ref: Mudanças a construções e API C<3>-Footnote-61802797
Ref: Mudanças a construções e API C<3>-Footnote-71802839
Ref: Mudanças a construções e API C<3>-Footnote-81802904
Ref: Mudanças a construções e API C<3>-Footnote-91802969
Ref: Mudanças a construções e API C<3>-Footnote-101803011
Node: Descontinuados<11>1803117
Ref: whatsnew/3 5 deprecated1803270
Ref: 10ae1803270
Node: New Keywords<2>1803579
Ref: whatsnew/3 5 new-keywords1803698
Ref: 10af1803698
Ref: New Keywords<2>-Footnote-11803974
Node: Comportamento do Python descontinuado<2>1804016
Ref: whatsnew/3 5 deprecated-python-behavior1804173
Ref: 10b01804173
Node: Unsupported Operating Systems1804612
Ref: whatsnew/3 5 unsupported-operating-systems1804804
Ref: 10b11804804
Ref: Unsupported Operating Systems-Footnote-11805047
Node: Deprecated Python modules functions and methods<3>1805089
Ref: whatsnew/3 5 deprecated-python-modules-functions-and-methods1805232
Ref: 10b21805232
Ref: Deprecated Python modules functions and methods<3>-Footnote-11808150
Ref: Deprecated Python modules functions and methods<3>-Footnote-21808215
Ref: Deprecated Python modules functions and methods<3>-Footnote-31808279
Ref: Deprecated Python modules functions and methods<3>-Footnote-41808344
Ref: Deprecated Python modules functions and methods<3>-Footnote-51808409
Ref: Deprecated Python modules functions and methods<3>-Footnote-61808474
Ref: Deprecated Python modules functions and methods<3>-Footnote-71808539
Ref: Deprecated Python modules functions and methods<3>-Footnote-81808604
Node: Removidos<11>1808669
Ref: whatsnew/3 5 removed1808807
Ref: 10b71808807
Node: Remoção de APIs e recursos<4>1808919
Ref: whatsnew/3 5 api-and-feature-removals1809000
Ref: 10b81809000
Ref: Remoção de APIs e recursos<4>-Footnote-11809865
Ref: Remoção de APIs e recursos<4>-Footnote-21809929
Node: Porting to Python 3 51809994
Ref: whatsnew/3 5 porting-to-python-3-51810145
Ref: 10b91810145
Node: Alterações no comportamento do Python<2>1810544
Ref: whatsnew/3 5 changes-in-python-behavior1810683
Ref: 10ba1810683
Node: Alterações na API Python<10>1811119
Ref: whatsnew/3 5 changes-in-the-python-api1811292
Ref: 10bb1811292
Ref: Alterações na API Python<10>-Footnote-11818227
Ref: Alterações na API Python<10>-Footnote-21818269
Ref: Alterações na API Python<10>-Footnote-31818334
Ref: Alterações na API Python<10>-Footnote-41818399
Ref: Alterações na API Python<10>-Footnote-51818464
Ref: Alterações na API Python<10>-Footnote-61818529
Ref: Alterações na API Python<10>-Footnote-71818594
Ref: Alterações na API Python<10>-Footnote-81818659
Ref: Alterações na API Python<10>-Footnote-91818724
Ref: Alterações na API Python<10>-Footnote-101818789
Ref: Alterações na API Python<10>-Footnote-111818855
Ref: Alterações na API Python<10>-Footnote-121818921
Ref: Alterações na API Python<10>-Footnote-131818986
Ref: Alterações na API Python<10>-Footnote-141819029
Ref: Alterações na API Python<10>-Footnote-151819089
Ref: Alterações na API Python<10>-Footnote-161819155
Ref: Alterações na API Python<10>-Footnote-171819221
Ref: Alterações na API Python<10>-Footnote-181819287
Node: Alterações na API C<16>1819352
Ref: whatsnew/3 5 changes-in-the-c-api1819474
Ref: 10c31819474
Ref: Alterações na API C<16>-Footnote-11820783
Ref: Alterações na API C<16>-Footnote-21820848
Ref: Alterações na API C<16>-Footnote-31820913
Node: Notable changes in Python 3 5 41820955
Ref: whatsnew/3 5 notable-changes-in-python-3-5-41821084
Ref: 10c71821084
Node: Novo alvo de construção make regen-all<2>1821361
Ref: whatsnew/3 5 new-make-regen-all-build-target1821528
Ref: 10c81821528
Ref: Novo alvo de construção make regen-all<2>-Footnote-11822438
Ref: Novo alvo de construção make regen-all<2>-Footnote-21822506
Node: Remoção do alvo de construção make touch<2>1822571
Ref: whatsnew/3 5 removal-of-make-touch-build-target1822738
Ref: 10c91822738
Ref: Remoção do alvo de construção make touch<2>-Footnote-11823205
Node: O que há de novo no Python 3 41823270
Ref: whatsnew/3 4 doc1823445
Ref: 10ca1823445
Ref: whatsnew/3 4 no-color1823445
Ref: 10cb1823445
Ref: whatsnew/3 4 what-s-new-in-python-3-41823445
Ref: 10cc1823445
Ref: O que há de novo no Python 3 4-Footnote-11824248
Ref: O que há de novo no Python 3 4-Footnote-21824308
Node: Resumo – Destaques da versão<11>1824350
Ref: whatsnew/3 4 summary-release-highlights1824487
Ref: 10cd1824487
Ref: Resumo – Destaques da versão<11>-Footnote-11828876
Ref: Resumo – Destaques da versão<11>-Footnote-21828918
Ref: Resumo – Destaques da versão<11>-Footnote-31828960
Ref: Resumo – Destaques da versão<11>-Footnote-41829025
Ref: Resumo – Destaques da versão<11>-Footnote-51829067
Ref: Resumo – Destaques da versão<11>-Footnote-61829132
Ref: Resumo – Destaques da versão<11>-Footnote-71829174
Ref: Resumo – Destaques da versão<11>-Footnote-81829216
Ref: Resumo – Destaques da versão<11>-Footnote-91829258
Ref: Resumo – Destaques da versão<11>-Footnote-101829300
Ref: Resumo – Destaques da versão<11>-Footnote-111829343
Ref: Resumo – Destaques da versão<11>-Footnote-121829386
Ref: Resumo – Destaques da versão<11>-Footnote-131829429
Ref: Resumo – Destaques da versão<11>-Footnote-141829472
Ref: Resumo – Destaques da versão<11>-Footnote-151829515
Ref: Resumo – Destaques da versão<11>-Footnote-161829580
Ref: Resumo – Destaques da versão<11>-Footnote-171829646
Ref: Resumo – Destaques da versão<11>-Footnote-181829689
Ref: Resumo – Destaques da versão<11>-Footnote-191829732
Ref: Resumo – Destaques da versão<11>-Footnote-201829798
Ref: Resumo – Destaques da versão<11>-Footnote-211829844
Ref: Resumo – Destaques da versão<11>-Footnote-221829887
Ref: Resumo – Destaques da versão<11>-Footnote-231829930
Ref: Resumo – Destaques da versão<11>-Footnote-241829996
Ref: Resumo – Destaques da versão<11>-Footnote-251830039
Node: Novas funcionalidades<16>1830082
Ref: whatsnew/3 4 new-features1830246
Ref: 10e81830246
Node: PEP 453 Explicit Bootstrapping of PIP in Python Installations1830772
Ref: whatsnew/3 4 pep-453-explicit-bootstrapping-of-pip-in-python-installations1830962
Ref: 10e91830962
Ref: whatsnew/3 4 whatsnew-pep-4531830962
Ref: 10ce1830962
Node: Bootstrapping pip By Default1831182
Ref: whatsnew/3 4 bootstrapping-pip-by-default1831344
Ref: 10ea1831344
Ref: Bootstrapping pip By Default-Footnote-11834247
Ref: Bootstrapping pip By Default-Footnote-21834289
Node: Mudanças na documentação1834376
Ref: whatsnew/3 4 documentation-changes1834538
Ref: 10ed1834538
Ref: Mudanças na documentação-Footnote-11835494
Ref: Mudanças na documentação-Footnote-21835531
Node: PEP 446 Newly Created File Descriptors Are Non-Inheritable1835573
Ref: whatsnew/3 4 pep-446-newly-created-file-descriptors-are-non-inheritable1835803
Ref: 10f11835803
Ref: whatsnew/3 4 whatsnew-pep-4461835803
Ref: 10cf1835803
Ref: PEP 446 Newly Created File Descriptors Are Non-Inheritable-Footnote-11836835
Ref: PEP 446 Newly Created File Descriptors Are Non-Inheritable-Footnote-21836877
Node: Melhorias no manuseio de Codecs1836919
Ref: whatsnew/3 4 codec-handling-improvements1837135
Ref: 10d11837135
Ref: whatsnew/3 4 improvements-to-codec-handling1837135
Ref: 10f91837135
Ref: Melhorias no manuseio de Codecs-Footnote-11841349
Ref: Melhorias no manuseio de Codecs-Footnote-21841413
Ref: Melhorias no manuseio de Codecs-Footnote-31841478
Ref: Melhorias no manuseio de Codecs-Footnote-41841543
Node: PEP 451 A ModuleSpec Type for the Import System1841608
Ref: whatsnew/3 4 pep-451-a-modulespec-type-for-the-import-system1841799
Ref: 10fe1841799
Ref: whatsnew/3 4 whatsnew-pep-4511841799
Ref: 10d21841799
Ref: PEP 451 A ModuleSpec Type for the Import System-Footnote-11842757
Ref: PEP 451 A ModuleSpec Type for the Import System-Footnote-21842799
Node: Outras mudanças na linguagem<10>1842879
Ref: whatsnew/3 4 other-language-changes1843030
Ref: 11001843030
Ref: Outras mudanças na linguagem<10>-Footnote-11845716
Ref: Outras mudanças na linguagem<10>-Footnote-21845781
Ref: Outras mudanças na linguagem<10>-Footnote-31845846
Ref: Outras mudanças na linguagem<10>-Footnote-41845911
Ref: Outras mudanças na linguagem<10>-Footnote-51845978
Ref: Outras mudanças na linguagem<10>-Footnote-61846043
Ref: Outras mudanças na linguagem<10>-Footnote-71846108
Ref: Outras mudanças na linguagem<10>-Footnote-81846173
Ref: Outras mudanças na linguagem<10>-Footnote-91846238
Ref: Outras mudanças na linguagem<10>-Footnote-101846303
Ref: Outras mudanças na linguagem<10>-Footnote-111846369
Ref: Outras mudanças na linguagem<10>-Footnote-121846412
Node: Novos módulos<11>1846478
Ref: whatsnew/3 4 new-modules1846630
Ref: 11051846630
Node: asyncio<14>1846863
Ref: whatsnew/3 4 asyncio1846950
Ref: 11061846950
Ref: whatsnew/3 4 whatsnew-asyncio1846950
Ref: 10d41846950
Ref: asyncio<14>-Footnote-11847555
Ref: asyncio<14>-Footnote-21847597
Node: ensurepip<2>1847639
Ref: whatsnew/3 4 ensurepip1847742
Ref: 11071847742
Ref: whatsnew/3 4 whatsnew-ensurepip1847742
Ref: 10d51847742
Ref: ensurepip<2>-Footnote-11849016
Node: enum<9>1849058
Ref: whatsnew/3 4 enum1849161
Ref: 11081849161
Ref: whatsnew/3 4 whatsnew-enum1849161
Ref: 10d61849161
Ref: enum<9>-Footnote-11849738
Ref: enum<9>-Footnote-21849780
Node: pathlib<14>1849822
Ref: whatsnew/3 4 pathlib1849925
Ref: 11091849925
Ref: whatsnew/3 4 whatsnew-pathlib1849925
Ref: 10d71849925
Ref: pathlib<14>-Footnote-11850550
Node: selectors<2>1850592
Ref: whatsnew/3 4 selectors1850701
Ref: 110a1850701
Ref: whatsnew/3 4 whatsnew-selectors1850701
Ref: 10d81850701
Ref: selectors<2>-Footnote-11850961
Node: statistics<6>1851003
Ref: whatsnew/3 4 statistics1851115
Ref: 110b1851115
Ref: whatsnew/3 4 whatsnew-statistics1851115
Ref: 10d91851115
Ref: statistics<6>-Footnote-11851587
Ref: statistics<6>-Footnote-21851629
Node: tracemalloc<4>1851671
Ref: whatsnew/3 4 tracemalloc1851762
Ref: 110c1851762
Ref: whatsnew/3 4 whatsnew-tracemalloc1851762
Ref: 10da1851762
Ref: tracemalloc<4>-Footnote-11852434
Ref: tracemalloc<4>-Footnote-21852476
Node: Módulos melhorados<11>1852518
Ref: whatsnew/3 4 improved-modules1852675
Ref: 110d1852675
Node: abc1854034
Ref: whatsnew/3 4 abc1854113
Ref: 110e1854113
Ref: abc-Footnote-11854639
Ref: abc-Footnote-21854704
Node: aifc<2>1854769
Ref: whatsnew/3 4 aifc1854868
Ref: 11121854868
Ref: aifc<2>-Footnote-11855478
Ref: aifc<2>-Footnote-21855543
Ref: aifc<2>-Footnote-31855608
Node: argparse<7>1855672
Ref: whatsnew/3 4 argparse1855775
Ref: 11131855775
Ref: argparse<7>-Footnote-11856023
Node: audioop1856088
Ref: whatsnew/3 4 audioop1856193
Ref: 11141856193
Ref: audioop-Footnote-11856719
Ref: audioop-Footnote-21856784
Ref: audioop-Footnote-31856849
Node: base64<4>1856914
Ref: whatsnew/3 4 base641857022
Ref: 11151857022
Ref: base64<4>-Footnote-11857859
Ref: base64<4>-Footnote-21857924
Node: collections<6>1857989
Ref: whatsnew/3 4 collections1858098
Ref: 111a1858098
Ref: collections<6>-Footnote-11858431
Node: colorsys1858496
Ref: whatsnew/3 4 colorsys1858609
Ref: 111c1858609
Ref: colorsys-Footnote-11858979
Node: contextlib<6>1859044
Ref: whatsnew/3 4 contextlib1859149
Ref: 111d1859149
Ref: contextlib<6>-Footnote-11860339
Ref: contextlib<6>-Footnote-21860404
Ref: contextlib<6>-Footnote-31860469
Node: dbm<6>1860534
Ref: whatsnew/3 4 dbm1860637
Ref: 11211860637
Ref: dbm<6>-Footnote-11860987
Node: dis<5>1861052
Ref: whatsnew/3 4 dis1861152
Ref: 11231861152
Ref: dis<5>-Footnote-11863764
Ref: dis<5>-Footnote-21863829
Ref: dis<5>-Footnote-31863894
Node: doctest<4>1863959
Ref: whatsnew/3 4 doctest1864061
Ref: 11281864061
Ref: doctest<4>-Footnote-11864834
Ref: doctest<4>-Footnote-21864899
Ref: doctest<4>-Footnote-31864964
Node: email<5>1865028
Ref: whatsnew/3 4 email1865131
Ref: 112b1865131
Ref: whatsnew/3 4 whatsnew-email-contentmanager1866385
Ref: 10de1866385
Ref: email<5>-Footnote-11867317
Ref: email<5>-Footnote-21867382
Ref: email<5>-Footnote-31867447
Ref: email<5>-Footnote-41867512
Node: filecmp1867577
Ref: whatsnew/3 4 filecmp1867682
Ref: 11331867682
Ref: filecmp-Footnote-11868433
Ref: filecmp-Footnote-21868498
Node: functools<6>1868563
Ref: whatsnew/3 4 functools1868665
Ref: 11371868665
Ref: whatsnew/3 4 whatsnew-singledispatch1869114
Ref: 10db1869114
Ref: functools<6>-Footnote-11870079
Ref: functools<6>-Footnote-21870143
Ref: functools<6>-Footnote-31870185
Ref: functools<6>-Footnote-41870250
Node: gc<6>1870315
Ref: whatsnew/3 4 gc1870417
Ref: 11391870417
Ref: gc<6>-Footnote-11870685
Node: glob<4>1870750
Ref: whatsnew/3 4 glob1870850
Ref: 113a1870850
Ref: glob<4>-Footnote-11871157
Node: hashlib<6>1871221
Ref: whatsnew/3 4 hashlib1871323
Ref: 113c1871323
Ref: hashlib<6>-Footnote-11871959
Ref: hashlib<6>-Footnote-21872004
Ref: hashlib<6>-Footnote-31872069
Node: hmac<4>1872134
Ref: whatsnew/3 4 hmac1872233
Ref: 113e1872233
Ref: hmac<4>-Footnote-11873265
Ref: hmac<4>-Footnote-21873330
Ref: hmac<4>-Footnote-31873395
Ref: hmac<4>-Footnote-41873437
Node: html1873502
Ref: whatsnew/3 4 html1873598
Ref: 11431873598
Ref: html-Footnote-11874357
Ref: html-Footnote-21874421
Ref: html-Footnote-31874486
Node: http<4>1874551
Ref: whatsnew/3 4 http1874657
Ref: 11441874657
Ref: http<4>-Footnote-11875308
Ref: http<4>-Footnote-21875373
Node: idlelib e IDLE<4>1875438
Ref: whatsnew/3 4 idlelib-and-idle1875552
Ref: 11481875552
Node: importlib<9>1875944
Ref: whatsnew/3 4 importlib1876061
Ref: 11491876061
Ref: importlib<9>-Footnote-11878053
Ref: importlib<9>-Footnote-21878118
Ref: importlib<9>-Footnote-31878183
Ref: importlib<9>-Footnote-41878248
Ref: importlib<9>-Footnote-51878313
Ref: importlib<9>-Footnote-61878378
Ref: importlib<9>-Footnote-71878443
Node: inspect<9>1878508
Ref: whatsnew/3 4 inspect1878620
Ref: 11501878620
Ref: inspect<9>-Footnote-11880333
Ref: inspect<9>-Footnote-21880398
Ref: inspect<9>-Footnote-31880463
Ref: inspect<9>-Footnote-41880528
Ref: inspect<9>-Footnote-51880593
Ref: inspect<9>-Footnote-61880658
Node: ipaddress<5>1880723
Ref: whatsnew/3 4 ipaddress1880833
Ref: 11541880833
Ref: ipaddress<5>-Footnote-11881362
Node: logging<6>1881427
Ref: whatsnew/3 4 logging1881537
Ref: 11561881537
Ref: logging<6>-Footnote-11882674
Ref: logging<6>-Footnote-21882738
Ref: logging<6>-Footnote-31882803
Node: marshal<2>1882868
Ref: whatsnew/3 4 marshal1882973
Ref: 115c1882973
Ref: whatsnew/3 4 whatsnew-marshal-31882973
Ref: 10d31882973
Ref: marshal<2>-Footnote-11883654
Ref: marshal<2>-Footnote-21883719
Node: mmap<3>1883784
Ref: whatsnew/3 4 mmap1883897
Ref: 115d1883897
Ref: mmap<3>-Footnote-11884070
Node: multiprocessing<8>1884134
Ref: whatsnew/3 4 multiprocessing1884248
Ref: 115e1884248
Ref: whatsnew/3 4 whatsnew-multiprocessing-no-fork1884301
Ref: 10dd1884301
Ref: multiprocessing<8>-Footnote-11886116
Ref: multiprocessing<8>-Footnote-21886180
Ref: multiprocessing<8>-Footnote-31886245
Ref: multiprocessing<8>-Footnote-41886309
Node: operador<3>1886374
Ref: whatsnew/3 4 operator1886487
Ref: 11621886487
Ref: operador<3>-Footnote-11887042
Ref: operador<3>-Footnote-21887084
Ref: operador<3>-Footnote-31887149
Node: os<12>1887214
Ref: whatsnew/3 4 os1887315
Ref: 11641887315
Ref: os<12>-Footnote-11888771
Ref: os<12>-Footnote-21888836
Ref: os<12>-Footnote-31888901
Ref: os<12>-Footnote-41888965
Node: pdb<8>1889030
Ref: whatsnew/3 4 pdb1889129
Ref: 116a1889129
Ref: pdb<8>-Footnote-11890127
Ref: pdb<8>-Footnote-21890192
Node: pickle<5>1890257
Ref: whatsnew/3 4 pickle1890361
Ref: 116d1890361
Ref: whatsnew/3 4 whatsnew-protocol-41890361
Ref: 10dc1890361
Ref: pickle<5>-Footnote-11890963
Node: plistlib<2>1891005
Ref: whatsnew/3 4 plistlib1891112
Ref: 116e1891112
Ref: plistlib<2>-Footnote-11891649
Node: poplib<3>1891714
Ref: whatsnew/3 4 poplib1891821
Ref: 11711891821
Ref: poplib<3>-Footnote-11892212
Node: pprint<4>1892276
Ref: whatsnew/3 4 pprint1892378
Ref: 11741892378
Ref: pprint<4>-Footnote-11893000
Ref: pprint<4>-Footnote-21893065
Node: pty<2>1893130
Ref: whatsnew/3 4 pty1893231
Ref: 11771893231
Node: pydoc<5>1893425
Ref: whatsnew/3 4 pydoc1893522
Ref: 11791893522
Ref: pydoc<5>-Footnote-11894579
Ref: pydoc<5>-Footnote-21894644
Node: re<9>1894709
Ref: whatsnew/3 4 re1894808
Ref: 117a1894808
Ref: re<9>-Footnote-11895563
Ref: re<9>-Footnote-21895628
Ref: re<9>-Footnote-31895693
Node: resource1895758
Ref: whatsnew/3 4 resource1895855
Ref: 117f1895855
Ref: resource-Footnote-11896717
Ref: resource-Footnote-21896782
Ref: resource-Footnote-31896847
Node: select1896912
Ref: whatsnew/3 4 select1897013
Ref: 11891897013
Ref: select-Footnote-11897528
Ref: select-Footnote-21897593
Node: shelve<2>1897658
Ref: whatsnew/3 4 shelve1897760
Ref: 11901897760
Ref: shelve<2>-Footnote-11898033
Node: shutil<6>1898098
Ref: whatsnew/3 4 shutil1898202
Ref: 11921898202
Ref: shutil<6>-Footnote-11898577
Node: smtpd<3>1898644
Ref: whatsnew/3 4 smtpd1898749
Ref: 11951898749
Ref: smtpd<3>-Footnote-11899109
Node: smtplib<3>1899174
Ref: whatsnew/3 4 smtplib1899280
Ref: 11961899280
Ref: smtplib<3>-Footnote-11899643
Node: socket<10>1899707
Ref: whatsnew/3 4 socket1899816
Ref: 11981899816
Ref: socket<10>-Footnote-11900605
Ref: socket<10>-Footnote-21900670
Node: sqlite3<10>1900734
Ref: whatsnew/3 4 sqlite31900840
Ref: 119c1900840
Ref: sqlite3<10>-Footnote-11901131
Ref: sqlite3<10>-Footnote-21901171
Node: ssl<11>1901236
Ref: whatsnew/3 4 ssl1901336
Ref: 119d1901336
Ref: whatsnew/3 4 whatsnew-tls-11-121901365
Ref: 10e01901365
Ref: whatsnew/3 4 whatsnew34-sslcontext1901637
Ref: 10e31901637
Ref: whatsnew/3 4 whatsnew34-win-cert-store1904323
Ref: 10e11904323
Ref: whatsnew/3 4 whatsnew34-sni1904579
Ref: 10e21904579
Ref: ssl<11>-Footnote-11905030
Ref: ssl<11>-Footnote-21905095
Ref: ssl<11>-Footnote-31905160
Ref: ssl<11>-Footnote-41905225
Ref: ssl<11>-Footnote-51905290
Ref: ssl<11>-Footnote-61905355
Ref: ssl<11>-Footnote-71905419
Ref: ssl<11>-Footnote-81905484
Ref: ssl<11>-Footnote-91905549
Ref: ssl<11>-Footnote-101905613
Node: stat1905679
Ref: whatsnew/3 4 stat1905777
Ref: 11af1905777
Ref: stat-Footnote-11906254
Ref: stat-Footnote-21906319
Node: struct<3>1906384
Ref: whatsnew/3 4 struct1906488
Ref: 11b41906488
Ref: struct<3>-Footnote-11906822
Node: subprocess<5>1906887
Ref: whatsnew/3 4 subprocess1906995
Ref: 11b71906995
Ref: subprocess<5>-Footnote-11907450
Ref: subprocess<5>-Footnote-21907515
Node: sunau<2>1907580
Ref: whatsnew/3 4 sunau1907686
Ref: 11bb1907686
Ref: sunau<2>-Footnote-11908470
Ref: sunau<2>-Footnote-21908535
Ref: sunau<2>-Footnote-31908600
Ref: sunau<2>-Footnote-41908665
Node: sys<12>1908729
Ref: whatsnew/3 4 sys1908832
Ref: 11bc1908832
Ref: sys<12>-Footnote-11910124
Ref: sys<12>-Footnote-21910189
Node: tarfile<8>1910253
Ref: whatsnew/3 4 tarfile1910356
Ref: 11c01910356
Ref: tarfile<8>-Footnote-11910681
Node: textwrap1910746
Ref: whatsnew/3 4 textwrap1910854
Ref: 11c21910854
Ref: textwrap-Footnote-11911559
Ref: textwrap-Footnote-21911624
Node: threading<8>1911689
Ref: whatsnew/3 4 threading1911799
Ref: 11c71911799
Ref: threading<8>-Footnote-11912145
Node: traceback<6>1912210
Ref: whatsnew/3 4 traceback1912320
Ref: 11c91912320
Ref: traceback<6>-Footnote-11912636
Node: types<6>1912703
Ref: whatsnew/3 4 types1912810
Ref: 11cb1912810
Ref: types<6>-Footnote-11913321
Node: urllib<5>1913386
Ref: whatsnew/3 4 urllib1913493
Ref: 11cc1913493
Ref: urllib<5>-Footnote-11914823
Ref: urllib<5>-Footnote-21914888
Ref: urllib<5>-Footnote-31914953
Ref: urllib<5>-Footnote-41915018
Ref: urllib<5>-Footnote-51915083
Ref: urllib<5>-Footnote-61915148
Node: unittest<10>1915213
Ref: whatsnew/3 4 unittest1915319
Ref: 11d61915319
Ref: unittest<10>-Footnote-11918498
Ref: unittest<10>-Footnote-21918563
Ref: unittest<10>-Footnote-31918628
Ref: unittest<10>-Footnote-41918693
Ref: unittest<10>-Footnote-51918758
Ref: unittest<10>-Footnote-61918823
Ref: unittest<10>-Footnote-71918888
Ref: unittest<10>-Footnote-81918953
Ref: unittest<10>-Footnote-91919018
Node: venv<7>1919083
Ref: whatsnew/3 4 venv1919187
Ref: 11de1919187
Ref: venv<7>-Footnote-11919745
Ref: venv<7>-Footnote-21919810
Ref: venv<7>-Footnote-31919875
Node: wave<2>1919917
Ref: whatsnew/3 4 wave1920019
Ref: 11df1920019
Ref: wave<2>-Footnote-11920666
Ref: wave<2>-Footnote-21920731
Ref: wave<2>-Footnote-31920796
Ref: wave<2>-Footnote-41920860
Node: weakref<2>1920924
Ref: whatsnew/3 4 weakref1921031
Ref: 11e41921031
Ref: weakref<2>-Footnote-11921655
Ref: weakref<2>-Footnote-21921720
Ref: weakref<2>-Footnote-31921785
Node: xml etree<2>1921850
Ref: whatsnew/3 4 xml-etree1921960
Ref: 11e81921960
Ref: xml etree<2>-Footnote-11922710
Ref: xml etree<2>-Footnote-21922775
Node: zipfile<6>1922840
Ref: whatsnew/3 4 zipfile1922931
Ref: 11ed1922931
Ref: zipfile<6>-Footnote-11923471
Ref: zipfile<6>-Footnote-21923536
Node: CPython Implementation Changes1923601
Ref: whatsnew/3 4 cpython-implementation-changes1923758
Ref: 11f01923758
Node: PEP 445 Customization of CPython Memory Allocators1924302
Ref: whatsnew/3 4 pep-445-customization-of-cpython-memory-allocators1924460
Ref: 11f11924460
Ref: whatsnew/3 4 whatsnew-pep-4451924460
Ref: 10e61924460
Ref: PEP 445 Customization of CPython Memory Allocators-Footnote-11924862
Ref: PEP 445 Customization of CPython Memory Allocators-Footnote-21924904
Node: PEP 442 Safe Object Finalization1924946
Ref: whatsnew/3 4 pep-442-safe-object-finalization1925162
Ref: 11f21925162
Ref: whatsnew/3 4 whatsnew-pep-4421925162
Ref: 10e51925162
Ref: PEP 442 Safe Object Finalization-Footnote-11926037
Ref: PEP 442 Safe Object Finalization-Footnote-21926079
Node: PEP 456 Secure and Interchangeable Hash Algorithm1926121
Ref: whatsnew/3 4 pep-456-secure-and-interchangeable-hash-algorithm1926310
Ref: 11f41926310
Ref: whatsnew/3 4 whatsnew-pep-4561926310
Ref: 10df1926310
Ref: PEP 456 Secure and Interchangeable Hash Algorithm-Footnote-11927259
Ref: PEP 456 Secure and Interchangeable Hash Algorithm-Footnote-21927301
Node: PEP 436 Argument Clinic1927366
Ref: whatsnew/3 4 pep-436-argument-clinic1927565
Ref: 11f61927565
Ref: whatsnew/3 4 whatsnew-pep-4361927565
Ref: 10e71927565
Ref: PEP 436 Argument Clinic-Footnote-11928678
Ref: PEP 436 Argument Clinic-Footnote-21928720
Node: Other Alterações a compilações e API C1928762
Ref: whatsnew/3 4 other-build-and-c-api-changes1928933
Ref: 11f71928933
Ref: Other Alterações a compilações e API C-Footnote-11931043
Ref: Other Alterações a compilações e API C-Footnote-21931108
Ref: Other Alterações a compilações e API C-Footnote-31931173
Ref: Other Alterações a compilações e API C-Footnote-41931240
Ref: Other Alterações a compilações e API C-Footnote-51931304
Ref: Other Alterações a compilações e API C-Footnote-61931369
Ref: Other Alterações a compilações e API C-Footnote-71931442
Ref: Other Alterações a compilações e API C-Footnote-81931506
Ref: Other Alterações a compilações e API C-Footnote-91931571
Node: Other Improvements<2>1931636
Ref: whatsnew/3 4 other-improvements1931808
Ref: 11fb1931808
Ref: whatsnew/3 4 other-improvements-3-41931808
Ref: 11fc1931808
Ref: whatsnew/3 4 whatsnew-isolated-mode1931865
Ref: 10d01931865
Ref: Other Improvements<2>-Footnote-11935990
Ref: Other Improvements<2>-Footnote-21936055
Ref: Other Improvements<2>-Footnote-31936119
Ref: Other Improvements<2>-Footnote-41936184
Ref: Other Improvements<2>-Footnote-51936249
Ref: Other Improvements<2>-Footnote-61936314
Ref: Other Improvements<2>-Footnote-71936379
Ref: Other Improvements<2>-Footnote-81936474
Ref: Other Improvements<2>-Footnote-91936525
Ref: Other Improvements<2>-Footnote-101936590
Ref: Other Improvements<2>-Footnote-111936656
Ref: Other Improvements<2>-Footnote-121936722
Ref: Other Improvements<2>-Footnote-131936765
Ref: Other Improvements<2>-Footnote-141936831
Ref: Other Improvements<2>-Footnote-151936897
Ref: Other Improvements<2>-Footnote-161936963
Ref: Other Improvements<2>-Footnote-171937029
Ref: Other Improvements<2>-Footnote-181937072
Ref: Other Improvements<2>-Footnote-191937138
Ref: Other Improvements<2>-Footnote-201937204
Ref: Other Improvements<2>-Footnote-211937270
Node: Otimizações Relevantes1937336
Ref: whatsnew/3 4 significant-optimizations1937457
Ref: 12011937457
Ref: Otimizações Relevantes-Footnote-11940261
Ref: Otimizações Relevantes-Footnote-21940326
Ref: Otimizações Relevantes-Footnote-31940391
Ref: Otimizações Relevantes-Footnote-41940456
Ref: Otimizações Relevantes-Footnote-51940521
Ref: Otimizações Relevantes-Footnote-61940586
Ref: Otimizações Relevantes-Footnote-71940651
Ref: Otimizações Relevantes-Footnote-81940715
Ref: Otimizações Relevantes-Footnote-91940780
Ref: Otimizações Relevantes-Footnote-101940845
Ref: Otimizações Relevantes-Footnote-111940911
Ref: Otimizações Relevantes-Footnote-121940977
Ref: Otimizações Relevantes-Footnote-131941043
Node: Descontinuados<12>1941109
Ref: whatsnew/3 4 deprecated1941256
Ref: 12051941256
Ref: whatsnew/3 4 deprecated-3-41941256
Ref: 10ff1941256
Node: Deprecations in the Python API1941706
Ref: whatsnew/3 4 deprecations-in-the-python-api1941819
Ref: 12061941819
Node: Deprecated Features1945468
Ref: whatsnew/3 4 deprecated-features1945581
Ref: 120a1945581
Ref: Deprecated Features-Footnote-11945995
Ref: Deprecated Features-Footnote-21946060
Node: Removidos<12>1946125
Ref: whatsnew/3 4 removed1946263
Ref: 120c1946263
Node: Operating Systems No Longer Supported1946433
Ref: whatsnew/3 4 operating-systems-no-longer-supported1946560
Ref: 120d1946560
Ref: Operating Systems No Longer Supported-Footnote-11946975
Ref: Operating Systems No Longer Supported-Footnote-21947040
Ref: Operating Systems No Longer Supported-Footnote-31947105
Node: Remoção de APIs e recursos<5>1947170
Ref: whatsnew/3 4 api-and-feature-removals1947319
Ref: 120e1947319
Ref: Remoção de APIs e recursos<5>-Footnote-11949783
Ref: Remoção de APIs e recursos<5>-Footnote-21949819
Ref: Remoção de APIs e recursos<5>-Footnote-31949884
Ref: Remoção de APIs e recursos<5>-Footnote-41949949
Ref: Remoção de APIs e recursos<5>-Footnote-51950014
Ref: Remoção de APIs e recursos<5>-Footnote-61950079
Ref: Remoção de APIs e recursos<5>-Footnote-71950143
Node: Code Cleanups1950208
Ref: whatsnew/3 4 code-cleanups1950311
Ref: 12101950311
Ref: Code Cleanups-Footnote-11950975
Node: Porting to Python 3 41951040
Ref: whatsnew/3 4 porting-to-python-3-41951177
Ref: 12111951177
Node: Changes in ‘python’ Command Behavior<2>1951576
Ref: whatsnew/3 4 changes-in-python-command-behavior1951716
Ref: 12121951716
Ref: Changes in ‘python’ Command Behavior<2>-Footnote-11952831
Node: Alterações na API Python<11>1952896
Ref: whatsnew/3 4 changes-in-the-python-api1953070
Ref: 12141953070
Ref: Alterações na API Python<11>-Footnote-11966561
Ref: Alterações na API Python<11>-Footnote-21966626
Ref: Alterações na API Python<11>-Footnote-31966691
Ref: Alterações na API Python<11>-Footnote-41966756
Ref: Alterações na API Python<11>-Footnote-51966821
Ref: Alterações na API Python<11>-Footnote-61966886
Ref: Alterações na API Python<11>-Footnote-71966951
Ref: Alterações na API Python<11>-Footnote-81967016
Ref: Alterações na API Python<11>-Footnote-91967080
Ref: Alterações na API Python<11>-Footnote-101967145
Ref: Alterações na API Python<11>-Footnote-111967211
Ref: Alterações na API Python<11>-Footnote-121967277
Ref: Alterações na API Python<11>-Footnote-131967343
Ref: Alterações na API Python<11>-Footnote-141967409
Ref: Alterações na API Python<11>-Footnote-151967475
Ref: Alterações na API Python<11>-Footnote-161967541
Ref: Alterações na API Python<11>-Footnote-171967607
Ref: Alterações na API Python<11>-Footnote-181967673
Ref: Alterações na API Python<11>-Footnote-191967739
Ref: Alterações na API Python<11>-Footnote-201967805
Ref: Alterações na API Python<11>-Footnote-211967871
Ref: Alterações na API Python<11>-Footnote-221967937
Ref: Alterações na API Python<11>-Footnote-231968003
Ref: Alterações na API Python<11>-Footnote-241968068
Node: Alterações na API C<17>1968134
Ref: whatsnew/3 4 changes-in-the-c-api1968256
Ref: 12231968256
Ref: Alterações na API C<17>-Footnote-11970023
Ref: Alterações na API C<17>-Footnote-21970088
Node: Alterado em 3 4 31970153
Ref: whatsnew/3 4 changed-in-3-4-31970268
Ref: 12291970268
Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib1970508
Ref: whatsnew/3 4 pep-4761970648
Ref: 122a1970648
Ref: whatsnew/3 4 pep-476-enabling-certificate-verification-by-default-for-stdlib-http-clients1970648
Ref: 122b1970648
Node: O que há de novo no Python 3 31971677
Ref: whatsnew/3 3 doc1971852
Ref: 122c1971852
Ref: whatsnew/3 3 no-color1971852
Ref: 122d1971852
Ref: whatsnew/3 3 what-s-new-in-python-3-31971852
Ref: 122e1971852
Ref: O que há de novo no Python 3 3-Footnote-11973868
Ref: O que há de novo no Python 3 3-Footnote-21973928
Node: Resumo – Destaques da versão<12>1973970
Ref: whatsnew/3 3 summary-release-highlights1974108
Ref: 122f1974108
Node: PEP 405 Ambientes Virtuais1975482
Ref: whatsnew/3 3 pep-4051975664
Ref: 12311975664
Ref: whatsnew/3 3 pep-405-virtual-environments1975664
Ref: 12391975664
Ref: PEP 405 Ambientes Virtuais-Footnote-11976653
Node: PEP 420 Implicit Namespace Packages1976695
Ref: whatsnew/3 3 pep-420-implicit-namespace-packages1976914
Ref: 123a1976914
Ref: PEP 420 Implicit Namespace Packages-Footnote-11977432
Ref: PEP 420 Implicit Namespace Packages-Footnote-21977474
Node: PEP 3118 New memoryview implementation and buffer protocol documentation1977516
Ref: whatsnew/3 3 pep-3118-new-memoryview-implementation-and-buffer-protocol-documentation1977747
Ref: 123b1977747
Ref: whatsnew/3 3 pep-3118-update1977747
Ref: 123c1977747
Ref: PEP 3118 New memoryview implementation and buffer protocol documentation-Footnote-11978884
Node: Recursos1978926
Ref: whatsnew/3 3 features1979068
Ref: 123d1979068
Ref: Recursos-Footnote-11979872
Node: Mudanças na API1979937
Ref: whatsnew/3 3 api-changes1980079
Ref: 123e1980079
Ref: Mudanças na API-Footnote-11981112
Ref: Mudanças na API-Footnote-21981177
Node: PEP 393 Flexible String Representation1981219
Ref: whatsnew/3 3 pep-3931981450
Ref: 12341981450
Ref: whatsnew/3 3 pep-393-flexible-string-representation1981450
Ref: 12411981450
Ref: PEP 393 Flexible String Representation-Footnote-11982519
Node: Funcionalidade1982561
Ref: whatsnew/3 3 functionality1982696
Ref: 12421982696
Ref: Funcionalidade-Footnote-11984148
Ref: Funcionalidade-Footnote-21984190
Node: Desempenho e utilização de recursos1984255
Ref: whatsnew/3 3 performance-and-resource-usage1984390
Ref: 12441984390
Ref: Desempenho e utilização de recursos-Footnote-11985640
Node: PEP 397 Python Launcher for Windows1985682
Ref: whatsnew/3 3 pep-3971985893
Ref: 12451985893
Ref: whatsnew/3 3 pep-397-python-launcher-for-windows1985893
Ref: 12461985893
Ref: PEP 397 Python Launcher for Windows-Footnote-11987461
Ref: PEP 397 Python Launcher for Windows-Footnote-21987525
Node: PEP 3151 Reworking the OS and IO exception hierarchy1987567
Ref: whatsnew/3 3 pep-31511987787
Ref: 12321987787
Ref: whatsnew/3 3 pep-3151-reworking-the-os-and-io-exception-hierarchy1987787
Ref: 12481987787
Ref: PEP 3151 Reworking the OS and IO exception hierarchy-Footnote-11990378
Node: PEP 380 Syntax for Delegating to a Subgenerator1990420
Ref: whatsnew/3 3 pep-3801990642
Ref: 12301990642
Ref: whatsnew/3 3 pep-380-syntax-for-delegating-to-a-subgenerator1990642
Ref: 12561990642
Ref: PEP 380 Syntax for Delegating to a Subgenerator-Footnote-11993090
Node: PEP 409 Suppressing exception context1993132
Ref: whatsnew/3 3 pep-409-suppressing-exception-context1993335
Ref: 12581993335
Ref: PEP 409 Suppressing exception context-Footnote-11995430
Node: PEP 414 Explicit Unicode literals1995472
Ref: whatsnew/3 3 pep-414-explicit-unicode-literals1995677
Ref: 12591995677
Ref: PEP 414 Explicit Unicode literals-Footnote-11996397
Node: PEP 3155 Qualified name for classes and functions1996439
Ref: whatsnew/3 3 pep-3155-qualified-name-for-classes-and-functions1996637
Ref: 125a1996637
Ref: PEP 3155 Qualified name for classes and functions-Footnote-11998259
Node: PEP 412 Key-Sharing Dictionary1998301
Ref: whatsnew/3 3 pep-4121998499
Ref: 12351998499
Ref: whatsnew/3 3 pep-412-key-sharing-dictionary1998499
Ref: 125d1998499
Ref: PEP 412 Key-Sharing Dictionary-Footnote-11999025
Node: PEP 362 Function Signature Object1999067
Ref: whatsnew/3 3 pep-362-function-signature-object1999249
Ref: 125e1999249
Ref: PEP 362 Function Signature Object-Footnote-12000151
Node: PEP 421 Adding sys implementation2000193
Ref: whatsnew/3 3 pep-421-adding-sys-implementation2000392
Ref: 12602000392
Ref: PEP 421 Adding sys implementation-Footnote-12001608
Node: SimpleNamespace2001650
Ref: whatsnew/3 3 simplenamespace2001735
Ref: 12612001735
Ref: SimpleNamespace-Footnote-12002360
Node: Using importlib as the Implementation of Import2002402
Ref: whatsnew/3 3 importlib2002601
Ref: 12332002601
Ref: whatsnew/3 3 using-importlib-as-the-implementation-of-import2002601
Ref: 12622002601
Ref: Using importlib as the Implementation of Import-Footnote-12003881
Ref: Using importlib as the Implementation of Import-Footnote-22003945
Ref: Using importlib as the Implementation of Import-Footnote-32004010
Ref: Using importlib as the Implementation of Import-Footnote-42004075
Ref: Using importlib as the Implementation of Import-Footnote-52004140
Node: New APIs2004182
Ref: whatsnew/3 3 new-apis2004298
Ref: 12652004298
Node: Visible Changes2006143
Ref: whatsnew/3 3 visible-changes2006259
Ref: 126c2006259
Ref: Visible Changes-Footnote-12008114
Ref: Visible Changes-Footnote-22008156
Node: Outras mudanças na linguagem<11>2008198
Ref: whatsnew/3 3 other-language-changes2008391
Ref: 126d2008391
Ref: Outras mudanças na linguagem<11>-Footnote-12010384
Ref: Outras mudanças na linguagem<11>-Footnote-22010449
Ref: Outras mudanças na linguagem<11>-Footnote-32010514
Ref: Outras mudanças na linguagem<11>-Footnote-42010579
Ref: Outras mudanças na linguagem<11>-Footnote-52010644
Ref: Outras mudanças na linguagem<11>-Footnote-62010709
Ref: Outras mudanças na linguagem<11>-Footnote-72010774
Ref: Outras mudanças na linguagem<11>-Footnote-82010839
Node: A Finer-Grained Import Lock2010904
Ref: whatsnew/3 3 a-finer-grained-import-lock2011077
Ref: 12702011077
Ref: A Finer-Grained Import Lock-Footnote-12011822
Node: Builtin functions and types2011886
Ref: whatsnew/3 3 builtin-functions-and-types2012044
Ref: 12712012044
Ref: Builtin functions and types-Footnote-12013282
Node: Novos módulos<12>2013346
Ref: whatsnew/3 3 new-modules2013500
Ref: 12742013500
Node: faulthandler<5>2013633
Ref: whatsnew/3 3 faulthandler2013724
Ref: 12752013724
Node: ipaddress<6>2014683
Ref: whatsnew/3 3 ipaddress2014790
Ref: 127c2014790
Ref: ipaddress<6>-Footnote-12015136
Node: lzma<2>2015178
Ref: whatsnew/3 3 lzma2015261
Ref: 127d2015261
Ref: lzma<2>-Footnote-12015575
Node: Módulos melhorados<12>2015639
Ref: whatsnew/3 3 improved-modules2015783
Ref: 127e2015783
Node: abc<2>2017126
Ref: whatsnew/3 3 abc2017209
Ref: 127f2017209
Ref: abc<2>-Footnote-12018195
Ref: abc<2>-Footnote-22018260
Node: array<5>2018325
Ref: whatsnew/3 3 array2018426
Ref: 12852018426
Ref: array<5>-Footnote-12018660
Node: base64<5>2018727
Ref: whatsnew/3 3 base642018833
Ref: 12862018833
Ref: base64<5>-Footnote-12019133
Node: binascii<3>2019198
Ref: whatsnew/3 3 binascii2019302
Ref: 12872019302
Ref: binascii<3>-Footnote-12019558
Node: bz2<2>2019623
Ref: whatsnew/3 3 bz22019727
Ref: 12882019727
Ref: bz2<2>-Footnote-12020702
Ref: bz2<2>-Footnote-22020766
Node: codecs<2>2020830
Ref: whatsnew/3 3 codecs2020937
Ref: 128b2020937
Ref: codecs<2>-Footnote-12022259
Ref: codecs<2>-Footnote-22022324
Ref: codecs<2>-Footnote-32022389
Node: collections<7>2022454
Ref: whatsnew/3 3 collections2022568
Ref: 128c2022568
Ref: collections<7>-Footnote-12023336
Ref: collections<7>-Footnote-22023401
Ref: collections<7>-Footnote-32023466
Ref: collections<7>-Footnote-42023531
Node: contextlib<7>2023596
Ref: whatsnew/3 3 contextlib2023709
Ref: 128e2023709
Ref: contextlib<7>-Footnote-12024304
Node: crypt<2>2024369
Ref: whatsnew/3 3 crypt2024477
Ref: 128f2024477
Ref: crypt<2>-Footnote-12024681
Node: curses<6>2024746
Ref: whatsnew/3 3 curses2024852
Ref: 12902024852
Ref: curses<6>-Footnote-12025664
Node: datetime<7>2025728
Ref: whatsnew/3 3 datetime2025836
Ref: 12952025836
Ref: datetime<7>-Footnote-12026497
Node: decimal<4>2026562
Ref: whatsnew/3 3 decimal2026669
Ref: 12972026669
Ref: whatsnew/3 3 new-decimal2026669
Ref: 12362026669
Ref: decimal<4>-Footnote-12028385
Node: Recursos<2>2028449
Ref: whatsnew/3 3 id12028535
Ref: 12982028535
Node: Mudanças na API<2>2028911
Ref: whatsnew/3 3 id22028997
Ref: 129b2028997
Node: email<6>2031882
Ref: whatsnew/3 3 email2031987
Ref: 12ad2031987
Ref: whatsnew/3 3 new-email2031987
Ref: 12372031987
Node: Policy Framework2032118
Ref: whatsnew/3 3 policy-framework2032226
Ref: 12ae2032226
Node: Provisional Policy with New Header API2035144
Ref: whatsnew/3 3 provisional-policy-with-new-header-api2035278
Ref: 12b22035278
Node: Other API Changes2039860
Ref: whatsnew/3 3 other-api-changes2039969
Ref: 12b62039969
Node: ftplib<3>2040818
Ref: whatsnew/3 3 ftplib2040925
Ref: 12bc2040925
Ref: ftplib<3>-Footnote-12041838
Ref: ftplib<3>-Footnote-22041902
Ref: ftplib<3>-Footnote-32041967
Node: functools<7>2042032
Ref: whatsnew/3 3 functools2042136
Ref: 12c12042136
Ref: functools<7>-Footnote-12042484
Node: gc<7>2042549
Ref: whatsnew/3 3 gc2042651
Ref: 12c22042651
Node: hmac<5>2042826
Ref: whatsnew/3 3 hmac2042923
Ref: 12c42042923
Ref: hmac<5>-Footnote-12043190
Node: http<5>2043255
Ref: whatsnew/3 3 http2043354
Ref: 12c62043354
Ref: http<5>-Footnote-12044040
Ref: http<5>-Footnote-22044104
Ref: http<5>-Footnote-32044169
Node: html<2>2044234
Ref: whatsnew/3 3 html2044336
Ref: 12cd2044336
Ref: html<2>-Footnote-12045337
Ref: html<2>-Footnote-22045402
Ref: html<2>-Footnote-32045467
Ref: html<2>-Footnote-42045532
Ref: html<2>-Footnote-52045597
Ref: html<2>-Footnote-62045662
Ref: html<2>-Footnote-72045729
Ref: html<2>-Footnote-82045795
Ref: html<2>-Footnote-92045860
Ref: html<2>-Footnote-102045925
Ref: html<2>-Footnote-112045993
Ref: html<2>-Footnote-122046060
Ref: html<2>-Footnote-132046126
Ref: html<2>-Footnote-142046192
Ref: html<2>-Footnote-152046257
Ref: html<2>-Footnote-162046323
Node: imaplib<4>2046389
Ref: whatsnew/3 3 imaplib2046495
Ref: 12cf2046495
Ref: imaplib<4>-Footnote-12046737
Node: inspect<10>2046801
Ref: whatsnew/3 3 inspect2046905
Ref: 12d02046905
Ref: inspect<10>-Footnote-12047619
Ref: inspect<10>-Footnote-22047684
Node: io<8>2047749
Ref: whatsnew/3 3 io2047855
Ref: 12d32047855
Ref: io<8>-Footnote-12048505
Node: itertools<7>2048570
Ref: whatsnew/3 3 itertools2048675
Ref: 12d42048675
Node: logging<7>2048833
Ref: whatsnew/3 3 logging2048941
Ref: 12d52048941
Node: math<10>2049394
Ref: whatsnew/3 3 math2049497
Ref: 12d62049497
Ref: math<10>-Footnote-12049723
Node: mmap<4>2049788
Ref: whatsnew/3 3 mmap2049899
Ref: 12d82049899
Ref: mmap<4>-Footnote-12050237
Node: multiprocessing<9>2050302
Ref: whatsnew/3 3 multiprocessing2050415
Ref: 12da2050415
Ref: multiprocessing<9>-Footnote-12051592
Ref: multiprocessing<9>-Footnote-22051657
Ref: multiprocessing<9>-Footnote-32051721
Ref: multiprocessing<9>-Footnote-42051785
Node: nntplib<2>2051850
Ref: whatsnew/3 3 nntplib2051962
Ref: 12e32051962
Ref: nntplib<2>-Footnote-12052522
Node: os<13>2052586
Ref: whatsnew/3 3 os2052686
Ref: 12e42052686
Ref: os<13>-Footnote-12060148
Ref: os<13>-Footnote-22060213
Ref: os<13>-Footnote-32060277
Ref: os<13>-Footnote-42060342
Ref: os<13>-Footnote-52060407
Ref: os<13>-Footnote-62060472
Ref: os<13>-Footnote-72060536
Ref: os<13>-Footnote-82060601
Ref: os<13>-Footnote-92060666
Ref: os<13>-Footnote-102060731
Ref: os<13>-Footnote-112060796
Node: pdb<9>2060862
Ref: whatsnew/3 3 pdb2060961
Ref: 131c2060961
Ref: pdb<9>-Footnote-12061244
Node: pickle<6>2061309
Ref: whatsnew/3 3 pickle2061410
Ref: 131d2061410
Ref: pickle<6>-Footnote-12061681
Node: pydoc<6>2061746
Ref: whatsnew/3 3 pydoc2061847
Ref: 131f2061847
Node: re<10>2062046
Ref: whatsnew/3 3 re2062143
Ref: 13202062143
Ref: re<10>-Footnote-12062339
Node: sched2062403
Ref: whatsnew/3 3 sched2062501
Ref: 13212062501
Ref: sched-Footnote-12063648
Ref: sched-Footnote-22063713
Ref: sched-Footnote-32063777
Ref: sched-Footnote-42063842
Ref: sched-Footnote-52063907
Node: select<2>2063972
Ref: whatsnew/3 3 select2064072
Ref: 13262064072
Ref: select<2>-Footnote-12064338
Node: shlex<3>2064402
Ref: whatsnew/3 3 shlex2064506
Ref: 13272064506
Node: shutil<7>2064813
Ref: whatsnew/3 3 shutil2064917
Ref: 13282064917
Ref: shutil<7>-Footnote-12066797
Ref: shutil<7>-Footnote-22066862
Ref: shutil<7>-Footnote-32066927
Ref: shutil<7>-Footnote-42066992
Ref: shutil<7>-Footnote-52067057
Ref: shutil<7>-Footnote-62067122
Ref: shutil<7>-Footnote-72067187
Ref: shutil<7>-Footnote-82067251
Node: signal<4>2067315
Ref: whatsnew/3 3 signal2067419
Ref: 132b2067419
Ref: signal<4>-Footnote-12068492
Node: smtpd<4>2068556
Ref: whatsnew/3 3 smtpd2068661
Ref: 13322068661
Ref: smtpd<4>-Footnote-12069144
Ref: smtpd<4>-Footnote-22069203
Ref: smtpd<4>-Footnote-32069262
Node: smtplib<4>2069326
Ref: whatsnew/3 3 smtplib2069432
Ref: 13332069432
Ref: smtplib<4>-Footnote-12070186
Ref: smtplib<4>-Footnote-22070251
Ref: smtplib<4>-Footnote-32070316
Node: socket<11>2070380
Ref: whatsnew/3 3 socket2070493
Ref: 13352070493
Ref: socket<11>-Footnote-12071735
Ref: socket<11>-Footnote-22071799
Ref: socket<11>-Footnote-32071864
Ref: socket<11>-Footnote-42071953
Ref: socket<11>-Footnote-52072018
Node: socketserver<3>2072083
Ref: whatsnew/3 3 socketserver2072197
Ref: 13382072197
Ref: socketserver<3>-Footnote-12072575
Node: sqlite3<11>2072640
Ref: whatsnew/3 3 sqlite32072751
Ref: 133c2072751
Ref: sqlite3<11>-Footnote-12073028
Node: ssl<12>2073093
Ref: whatsnew/3 3 ssl2073196
Ref: 133d2073196
Ref: ssl<12>-Footnote-12075417
Ref: ssl<12>-Footnote-22075482
Ref: ssl<12>-Footnote-32075547
Ref: ssl<12>-Footnote-42075612
Ref: ssl<12>-Footnote-52075677
Ref: ssl<12>-Footnote-62075742
Ref: ssl<12>-Footnote-72075807
Ref: ssl<12>-Footnote-82075872
Ref: ssl<12>-Footnote-92075937
Ref: ssl<12>-Footnote-102076002
Ref: ssl<12>-Footnote-112076068
Node: stat<2>2076134
Ref: whatsnew/3 3 stat2076235
Ref: 13462076235
Ref: stat<2>-Footnote-12076533
Node: struct<4>2076598
Ref: whatsnew/3 3 struct2076705
Ref: 13482076705
Ref: struct<4>-Footnote-12076954
Node: subprocess<6>2077018
Ref: whatsnew/3 3 subprocess2077125
Ref: 13492077125
Ref: subprocess<6>-Footnote-12077463
Ref: subprocess<6>-Footnote-22077527
Node: sys<13>2077591
Ref: whatsnew/3 3 sys2077699
Ref: 134b2077699
Ref: sys<13>-Footnote-12077920
Node: tarfile<9>2077985
Ref: whatsnew/3 3 tarfile2078091
Ref: 134d2078091
Ref: tarfile<9>-Footnote-12078300
Node: tempfile<4>2078364
Ref: whatsnew/3 3 tempfile2078474
Ref: 134e2078474
Ref: tempfile<4>-Footnote-12078701
Node: textwrap<2>2078765
Ref: whatsnew/3 3 textwrap2078877
Ref: 134f2078877
Ref: textwrap<2>-Footnote-12079123
Node: threading<9>2079188
Ref: whatsnew/3 3 threading2079296
Ref: 13502079296
Ref: threading<9>-Footnote-12080235
Ref: threading<9>-Footnote-22080300
Node: time<8>2080364
Ref: whatsnew/3 3 time2080469
Ref: 13572080469
Ref: time<8>-Footnote-12081441
Ref: time<8>-Footnote-22081483
Node: types<7>2081548
Ref: whatsnew/3 3 types2081653
Ref: 135c2081653
Ref: types<7>-Footnote-12081993
Ref: types<7>-Footnote-22082058
Ref: types<7>-Footnote-32082100
Node: unittest<11>2082165
Ref: whatsnew/3 3 unittest2082272
Ref: 135f2082272
Ref: unittest<11>-Footnote-12082691
Node: urllib<6>2082756
Ref: whatsnew/3 3 urllib2082868
Ref: 13642082868
Ref: urllib<6>-Footnote-12083224
Node: webbrowser<4>2083291
Ref: whatsnew/3 3 webbrowser2083415
Ref: 13662083415
Ref: webbrowser<4>-Footnote-12083959
Ref: webbrowser<4>-Footnote-22084024
Node: xml etree ElementTree<2>2084089
Ref: whatsnew/3 3 xml-etree-elementtree2084211
Ref: 13672084211
Node: zlib<3>2084732
Ref: whatsnew/3 3 zlib2084832
Ref: 13682084832
Ref: zlib<3>-Footnote-12085308
Ref: zlib<3>-Footnote-22085373
Node: Otimizações<11>2085438
Ref: whatsnew/3 3 optimizations2085600
Ref: 136b2085600
Ref: Otimizações<11>-Footnote-12086411
Ref: Otimizações<11>-Footnote-22086453
Ref: Otimizações<11>-Footnote-32086518
Ref: Otimizações<11>-Footnote-42086583
Node: Mudanças a construções e API C<4>2086648
Ref: whatsnew/3 3 build-and-c-api-changes2086805
Ref: 123f2086805
Ref: Mudanças a construções e API C<4>-Footnote-12088725
Ref: Mudanças a construções e API C<4>-Footnote-22088767
Ref: Mudanças a construções e API C<4>-Footnote-32088809
Node: Descontinuados<13>2088874
Ref: whatsnew/3 3 deprecated2089035
Ref: 13812089035
Node: Unsupported Operating Systems<2>2089382
Ref: whatsnew/3 3 unsupported-operating-systems2089528
Ref: 13822089528
Node: Deprecated Python modules functions and methods<4>2089884
Ref: whatsnew/3 3 deprecated-python-modules-functions-and-methods2090085
Ref: 13832090085
Ref: Deprecated Python modules functions and methods<4>-Footnote-12092437
Ref: Deprecated Python modules functions and methods<4>-Footnote-22092501
Ref: Deprecated Python modules functions and methods<4>-Footnote-32092543
Ref: Deprecated Python modules functions and methods<4>-Footnote-42092608
Ref: Deprecated Python modules functions and methods<4>-Footnote-52092673
Node: Deprecated functions and types of the C API<3>2092738
Ref: whatsnew/3 3 deprecated-functions-and-types-of-the-c-api2092926
Ref: 13872092926
Ref: Deprecated functions and types of the C API<3>-Footnote-12095952
Node: Deprecated features2095994
Ref: whatsnew/3 3 deprecated-features2096123
Ref: 13912096123
Node: Porting to Python 3 32096348
Ref: whatsnew/3 3 porting-to-python-3-32096464
Ref: 13922096464
Node: Porting Python code2096763
Ref: whatsnew/3 3 porting-python-code2096863
Ref: 12642096863
Ref: whatsnew/3 3 portingpythoncode2096863
Ref: 13932096863
Ref: Porting Python code-Footnote-12103908
Ref: Porting Python code-Footnote-22103973
Ref: Porting Python code-Footnote-32104038
Ref: Porting Python code-Footnote-42104103
Ref: Porting Python code-Footnote-52104145
Ref: Porting Python code-Footnote-62104187
Ref: Porting Python code-Footnote-72104251
Ref: Porting Python code-Footnote-82104318
Ref: Porting Python code-Footnote-92104383
Ref: Porting Python code-Footnote-102104447
Node: Porting C code2104513
Ref: whatsnew/3 3 porting-c-code2104643
Ref: 12402104643
Ref: Porting C code-Footnote-12106144
Node: Building C extensions2106186
Ref: whatsnew/3 3 building-c-extensions2106324
Ref: 13a22106324
Ref: Building C extensions-Footnote-12106924
Node: Command Line Switch Changes2106989
Ref: whatsnew/3 3 command-line-switch-changes2107104
Ref: 13a32107104
Ref: Command Line Switch Changes-Footnote-12107672
Ref: Command Line Switch Changes-Footnote-22107737
Node: O que há de novo no Python 3 22107802
Ref: whatsnew/3 2 doc2107977
Ref: 13a52107977
Ref: whatsnew/3 2 no-color2107977
Ref: 13a62107977
Ref: whatsnew/3 2 what-s-new-in-python-3-22107977
Ref: 13a72107977
Ref: O que há de novo no Python 3 2-Footnote-12109426
Ref: O que há de novo no Python 3 2-Footnote-22109525
Node: PEP 384 Defining a Stable ABI2109567
Ref: whatsnew/3 2 pep-384-defining-a-stable-abi2109717
Ref: 13a82109717
Ref: PEP 384 Defining a Stable ABI-Footnote-12110815
Node: PEP 389 Argparse Command Line Parsing Module2110857
Ref: whatsnew/3 2 pep-389-argparse-command-line-parsing-module2111066
Ref: 13a92111066
Ref: PEP 389 Argparse Command Line Parsing Module-Footnote-12115216
Node: PEP 391 Dictionary Based Configuration for Logging2115258
Ref: whatsnew/3 2 pep-391-dictionary-based-configuration-for-logging2115476
Ref: 13ab2115476
Ref: PEP 391 Dictionary Based Configuration for Logging-Footnote-12117780
Node: PEP 3148 The concurrent futures module2117822
Ref: whatsnew/3 2 pep-3148-the-concurrent-futures-module2118031
Ref: 13ad2118031
Ref: PEP 3148 The concurrent futures module-Footnote-12120740
Node: PEP 3147 PYC Repository Directories2120782
Ref: whatsnew/3 2 pep-3147-pyc-repository-directories2120977
Ref: 13b12120977
Ref: PEP 3147 PYC Repository Directories-Footnote-12124053
Node: PEP 3149 ABI Version Tagged so Files2124095
Ref: whatsnew/3 2 pep-3149-abi-version-tagged-so-files2124303
Ref: 13b32124303
Ref: PEP 3149 ABI Version Tagged so Files-Footnote-12125568
Node: PEP 3333 Python Web Server Gateway Interface v1 0 12125610
Ref: whatsnew/3 2 pep-3333-python-web-server-gateway-interface-v1-0-12125816
Ref: 13b42125816
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-12128186
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-22128245
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-32128304
Node: Outras mudanças na linguagem<12>2128346
Ref: whatsnew/3 2 other-language-changes2128551
Ref: 13b62128551
Ref: Outras mudanças na linguagem<12>-Footnote-12138119
Ref: Outras mudanças na linguagem<12>-Footnote-22138183
Ref: Outras mudanças na linguagem<12>-Footnote-32138247
Ref: Outras mudanças na linguagem<12>-Footnote-42138314
Ref: Outras mudanças na linguagem<12>-Footnote-52138378
Ref: Outras mudanças na linguagem<12>-Footnote-62138442
Ref: Outras mudanças na linguagem<12>-Footnote-72138506
Ref: Outras mudanças na linguagem<12>-Footnote-82138570
Ref: Outras mudanças na linguagem<12>-Footnote-92138634
Ref: Outras mudanças na linguagem<12>-Footnote-102138698
Ref: Outras mudanças na linguagem<12>-Footnote-112138764
Ref: Outras mudanças na linguagem<12>-Footnote-122138831
Ref: Outras mudanças na linguagem<12>-Footnote-132138896
Ref: Outras mudanças na linguagem<12>-Footnote-142138961
Ref: Outras mudanças na linguagem<12>-Footnote-152139027
Ref: Outras mudanças na linguagem<12>-Footnote-162139093
Node: New Improved and Deprecated Modules2139158
Ref: whatsnew/3 2 new-improved-and-deprecated-modules2139327
Ref: 13c32139327
Node: email<7>2141370
Ref: whatsnew/3 2 email2141470
Ref: 13c42141470
Ref: email<7>-Footnote-12143455
Ref: email<7>-Footnote-22143514
Ref: email<7>-Footnote-32143578
Node: elementtree2143643
Ref: whatsnew/3 2 elementtree2143764
Ref: 13cc2143764
Ref: elementtree-Footnote-12145251
Ref: elementtree-Footnote-22145351
Node: functools<8>2145415
Ref: whatsnew/3 2 functools2145540
Ref: 13d32145540
Ref: functools<8>-Footnote-12149015
Ref: functools<8>-Footnote-22149098
Ref: functools<8>-Footnote-32149177
Ref: functools<8>-Footnote-42149242
Ref: functools<8>-Footnote-52149307
Ref: functools<8>-Footnote-62149371
Ref: functools<8>-Footnote-72149435
Ref: functools<8>-Footnote-82149499
Node: itertools<8>2149551
Ref: whatsnew/3 2 itertools2149679
Ref: 13d72149679
Node: collections<8>2150372
Ref: whatsnew/3 2 collections2150501
Ref: 13d92150501
Ref: collections<8>-Footnote-12152750
Ref: collections<8>-Footnote-22152810
Node: threading<10>2152857
Ref: whatsnew/3 2 threading2152991
Ref: 13de2152991
Ref: threading<10>-Footnote-12155757
Ref: threading<10>-Footnote-22155818
Ref: threading<10>-Footnote-32155917
Ref: threading<10>-Footnote-42155989
Node: datetime and time2156053
Ref: whatsnew/3 2 datetime-and-time2156181
Ref: 13e22156181
Ref: datetime and time-Footnote-12158975
Ref: datetime and time-Footnote-22159042
Ref: datetime and time-Footnote-32159106
Ref: datetime and time-Footnote-42159170
Ref: datetime and time-Footnote-52159234
Ref: datetime and time-Footnote-62159301
Ref: datetime and time-Footnote-72159365
Node: math<11>2159430
Ref: whatsnew/3 2 math2159551
Ref: 13e62159551
Ref: math<11>-Footnote-12161434
Node: abc<3>2161487
Ref: whatsnew/3 2 abc2161596
Ref: 13eb2161596
Ref: abc<3>-Footnote-12162223
Node: io<9>2162287
Ref: whatsnew/3 2 io2162395
Ref: 13ec2162395
Ref: io<9>-Footnote-12163564
Node: reprlib2163628
Ref: whatsnew/3 2 reprlib2163740
Ref: 13ee2163740
Ref: reprlib-Footnote-12164725
Ref: reprlib-Footnote-22164789
Node: logging<8>2164853
Ref: whatsnew/3 2 logging2164966
Ref: 13f02164966
Node: csv<4>2166831
Ref: whatsnew/3 2 csv2166950
Ref: 13f82166950
Ref: csv<4>-Footnote-12167816
Ref: csv<4>-Footnote-22167880
Node: contextlib<8>2167947
Ref: whatsnew/3 2 contextlib2168077
Ref: 13fc2168077
Ref: contextlib<8>-Footnote-12170295
Node: decimal and fractions2170359
Ref: whatsnew/3 2 decimal-and-fractions2170486
Ref: 13ff2170486
Ref: decimal and fractions-Footnote-12172920
Ref: decimal and fractions-Footnote-22172984
Ref: decimal and fractions-Footnote-32173048
Ref: decimal and fractions-Footnote-42173112
Ref: decimal and fractions-Footnote-52173176
Ref: decimal and fractions-Footnote-62173240
Node: ftp2173304
Ref: whatsnew/3 2 ftp2173423
Ref: 14032173423
Ref: ftp-Footnote-12174768
Ref: ftp-Footnote-22174832
Ref: ftp-Footnote-32174896
Ref: ftp-Footnote-42174960
Node: popen2175024
Ref: whatsnew/3 2 popen2175131
Ref: 14042175131
Ref: popen-Footnote-12175438
Ref: popen-Footnote-22175502
Node: select<3>2175567
Ref: whatsnew/3 2 select2175687
Ref: 14052175687
Ref: select<3>-Footnote-12176121
Node: gzip and zipfile2176185
Ref: whatsnew/3 2 gzip-and-zipfile2176311
Ref: 14072176311
Ref: gzip and zipfile-Footnote-12177878
Ref: gzip and zipfile-Footnote-22177942
Ref: gzip and zipfile-Footnote-32178006
Ref: gzip and zipfile-Footnote-42178073
Ref: gzip and zipfile-Footnote-52178137
Ref: gzip and zipfile-Footnote-62178201
Node: tarfile<10>2178265
Ref: whatsnew/3 2 tarfile2178392
Ref: 140b2178392
Ref: tarfile<10>-Footnote-12179968
Node: hashlib<7>2180032
Ref: whatsnew/3 2 hashlib2180149
Ref: 140e2180149
Ref: hashlib<7>-Footnote-12180906
Node: ast<7>2180970
Ref: whatsnew/3 2 ast2181082
Ref: 140f2181082
Node: os<14>2182021
Ref: whatsnew/3 2 os2182132
Ref: 14102182132
Node: shutil<8>2182905
Ref: whatsnew/3 2 shutil2183021
Ref: 14132183021
Node: sqlite3<12>2185191
Ref: whatsnew/3 2 sqlite32185308
Ref: 14152185308
Ref: sqlite3<12>-Footnote-12185959
Node: html<3>2186023
Ref: whatsnew/3 2 html2186141
Ref: 14162186141
Node: socket<12>2186430
Ref: whatsnew/3 2 socket2186544
Ref: 14172186544
Ref: socket<12>-Footnote-12187190
Ref: socket<12>-Footnote-22187254
Node: ssl<13>2187318
Ref: whatsnew/3 2 ssl2187429
Ref: 14192187429
Ref: ssl<13>-Footnote-12189531
Ref: ssl<13>-Footnote-22189590
Ref: ssl<13>-Footnote-32189662
Ref: ssl<13>-Footnote-42189726
Ref: ssl<13>-Footnote-52189790
Ref: ssl<13>-Footnote-62189854
Ref: ssl<13>-Footnote-72189918
Ref: ssl<13>-Footnote-82189982
Ref: ssl<13>-Footnote-92190046
Node: nntp2190110
Ref: whatsnew/3 2 nntp2190233
Ref: 141d2190233
Ref: nntp-Footnote-12190788
Ref: nntp-Footnote-22190852
Node: сертифікати2190916
Ref: whatsnew/3 2 certificates2191042
Ref: 141e2191042
Ref: сертифікати-Footnote-12191449
Node: imaplib<5>2191513
Ref: whatsnew/3 2 imaplib2191649
Ref: 14202191649
Ref: imaplib<5>-Footnote-12191923
Node: http client<4>2191987
Ref: whatsnew/3 2 http-client2192113
Ref: 14222192113
Ref: http client<4>-Footnote-12193540
Node: unittest<12>2193605
Ref: whatsnew/3 2 unittest2193730
Ref: 14252193730
Ref: unittest<12>-Footnote-12198414
Ref: unittest<12>-Footnote-22198479
Ref: unittest<12>-Footnote-32198543
Node: random<5>2198607
Ref: whatsnew/3 2 random2198727
Ref: 142a2198727
Ref: random<5>-Footnote-12199393
Node: poplib<4>2199457
Ref: whatsnew/3 2 poplib2199576
Ref: 142d2199576
Ref: poplib<4>-Footnote-12199930
Node: asyncore<2>2199994
Ref: whatsnew/3 2 asyncore2200115
Ref: 142e2200115
Ref: asyncore<2>-Footnote-12200570
Node: tempfile<5>2200634
Ref: whatsnew/3 2 tempfile2200757
Ref: 142f2200757
Ref: tempfile<5>-Footnote-12201166
Node: inspect<11>2201230
Ref: whatsnew/3 2 inspect2201350
Ref: 14312201350
Ref: inspect<11>-Footnote-12202725
Node: pydoc<7>2202790
Ref: whatsnew/3 2 pydoc2202905
Ref: 14332202905
Ref: pydoc<7>-Footnote-12203224
Node: dis<6>2203288
Ref: whatsnew/3 2 dis2203398
Ref: 14342203398
Ref: dis<6>-Footnote-12205550
Node: dbm<7>2205614
Ref: whatsnew/3 2 dbm2205725
Ref: 14362205725
Ref: dbm<7>-Footnote-12205914
Node: ctypes<4>2205978
Ref: whatsnew/3 2 ctypes2206090
Ref: 14372206090
Node: site<4>2206209
Ref: whatsnew/3 2 site2206327
Ref: 14392206327
Ref: site<4>-Footnote-12207561
Node: sysconfig<4>2207625
Ref: whatsnew/3 2 sysconfig2207741
Ref: 143d2207741
Node: pdb<10>2209970
Ref: whatsnew/3 2 pdb2210094
Ref: 14402210094
Node: configparser<6>2211005
Ref: whatsnew/3 2 configparser2211132
Ref: 14412211132
Node: urllib parse<6>2213998
Ref: whatsnew/3 2 urllib-parse2214125
Ref: 14422214125
Ref: urllib parse<6>-Footnote-12216148
Ref: urllib parse<6>-Footnote-22216191
Ref: urllib parse<6>-Footnote-32216250
Ref: urllib parse<6>-Footnote-42216314
Ref: urllib parse<6>-Footnote-52216378
Node: mailbox2216442
Ref: whatsnew/3 2 mailbox2216564
Ref: 14462216564
Ref: mailbox-Footnote-12218145
Node: turtledemo2218209
Ref: whatsnew/3 2 turtledemo2218307
Ref: 144d2218307
Ref: turtledemo-Footnote-12218744
Node: Multi-threading2218809
Ref: whatsnew/3 2 multi-threading2218962
Ref: 144e2218962
Ref: Multi-threading-Footnote-12220611
Ref: Multi-threading-Footnote-22220690
Ref: Multi-threading-Footnote-32220754
Ref: Multi-threading-Footnote-42220820
Node: Otimizações<12>2220884
Ref: whatsnew/3 2 optimizations2221009
Ref: 14502221009
Ref: Otimizações<12>-Footnote-12224517
Ref: Otimizações<12>-Footnote-22224581
Ref: Otimizações<12>-Footnote-32224645
Ref: Otimizações<12>-Footnote-42224709
Ref: Otimizações<12>-Footnote-52224755
Ref: Otimizações<12>-Footnote-62224819
Ref: Otimizações<12>-Footnote-72224883
Ref: Otimizações<12>-Footnote-82224948
Ref: Otimizações<12>-Footnote-92225012
Ref: Otimizações<12>-Footnote-102225076
Ref: Otimizações<12>-Footnote-112225141
Ref: Otimizações<12>-Footnote-122225206
Ref: Otimizações<12>-Footnote-132225271
Ref: Otimizações<12>-Footnote-142225339
Ref: Otimizações<12>-Footnote-152225404
Ref: Otimizações<12>-Footnote-162225470
Node: Unicode2225535
Ref: whatsnew/3 2 unicode2225651
Ref: 14552225651
Ref: Unicode-Footnote-12226203
Ref: Unicode-Footnote-22226254
Ref: Unicode-Footnote-32226298
Node: Codecs2226370
Ref: whatsnew/3 2 codecs2226483
Ref: 14562226483
Ref: Codecs-Footnote-12227413
Node: Documentação2227480
Ref: whatsnew/3 2 documentation2227590
Ref: 14572227590
Ref: Documentação-Footnote-12229248
Ref: Documentação-Footnote-22229317
Ref: Documentação-Footnote-32229393
Ref: Documentação-Footnote-42229457
Node: IDLE2229521
Ref: whatsnew/3 2 idle2229640
Ref: 145b2229640
Ref: IDLE-Footnote-12230026
Ref: IDLE-Footnote-22230090
Node: Code Repository2230154
Ref: whatsnew/3 2 code-repository2230295
Ref: 145c2230295
Ref: Code Repository-Footnote-12230904
Ref: Code Repository-Footnote-22230943
Ref: Code Repository-Footnote-32230985
Ref: Code Repository-Footnote-42231039
Node: Mudanças a construções e API C<5>2231083
Ref: whatsnew/3 2 build-and-c-api-changes2231241
Ref: 145d2231241
Ref: Mudanças a construções e API C<5>-Footnote-12235418
Ref: Mudanças a construções e API C<5>-Footnote-22235483
Ref: Mudanças a construções e API C<5>-Footnote-32235547
Ref: Mudanças a construções e API C<5>-Footnote-42235611
Ref: Mudanças a construções e API C<5>-Footnote-52235675
Ref: Mudanças a construções e API C<5>-Footnote-62235739
Ref: Mudanças a construções e API C<5>-Footnote-72235803
Ref: Mudanças a construções e API C<5>-Footnote-82235867
Ref: Mudanças a construções e API C<5>-Footnote-92235931
Ref: Mudanças a construções e API C<5>-Footnote-102235995
Ref: Mudanças a construções e API C<5>-Footnote-112236060
Ref: Mudanças a construções e API C<5>-Footnote-122236125
Ref: Mudanças a construções e API C<5>-Footnote-132236190
Ref: Mudanças a construções e API C<5>-Footnote-142236255
Ref: Mudanças a construções e API C<5>-Footnote-152236338
Node: Porting to Python 3 22236439
Ref: whatsnew/3 2 porting-to-python-3-22236573
Ref: 14662236573
Ref: Porting to Python 3 2-Footnote-12243448
Ref: Porting to Python 3 2-Footnote-22243512
Ref: Porting to Python 3 2-Footnote-32243576
Ref: Porting to Python 3 2-Footnote-42243621
Ref: Porting to Python 3 2-Footnote-52243686
Ref: Porting to Python 3 2-Footnote-62243751
Ref: Porting to Python 3 2-Footnote-72243816
Node: O que há de novo no Python 3 12243880
Ref: whatsnew/3 1 doc2244055
Ref: 14762244055
Ref: whatsnew/3 1 no-color2244055
Ref: 14772244055
Ref: whatsnew/3 1 what-s-new-in-python-3-12244055
Ref: 14782244055
Node: PEP 372 Dicionários ordenados2244803
Ref: whatsnew/3 1 pep-372-ordered-dictionaries2244969
Ref: 14792244969
Ref: PEP 372 Dicionários ordenados-Footnote-12247634
Ref: PEP 372 Dicionários ordenados-Footnote-22247662
Node: PEP 378 Especificador de formato para separador de milhares2247704
Ref: whatsnew/3 1 pep-378-format-specifier-for-thousands-separator2247912
Ref: 147a2247912
Ref: PEP 378 Especificador de formato para separador de milhares-Footnote-12249190
Node: Outras mudanças na linguagem<13>2249232
Ref: whatsnew/3 1 other-language-changes2249448
Ref: 147b2249448
Ref: Outras mudanças na linguagem<13>-Footnote-12254277
Ref: Outras mudanças na linguagem<13>-Footnote-22254344
Ref: Outras mudanças na linguagem<13>-Footnote-32254408
Ref: Outras mudanças na linguagem<13>-Footnote-42254472
Ref: Outras mudanças na linguagem<13>-Footnote-52254536
Ref: Outras mudanças na linguagem<13>-Footnote-62254581
Ref: Outras mudanças na linguagem<13>-Footnote-72254645
Node: New Improved and Deprecated Modules<2>2254709
Ref: whatsnew/3 1 new-improved-and-deprecated-modules2254883
Ref: 147c2254883
Ref: New Improved and Deprecated Modules<2>-Footnote-12263493
Ref: New Improved and Deprecated Modules<2>-Footnote-22263560
Ref: New Improved and Deprecated Modules<2>-Footnote-32263624
Ref: New Improved and Deprecated Modules<2>-Footnote-42263688
Ref: New Improved and Deprecated Modules<2>-Footnote-52263752
Ref: New Improved and Deprecated Modules<2>-Footnote-62263816
Ref: New Improved and Deprecated Modules<2>-Footnote-72263858
Ref: New Improved and Deprecated Modules<2>-Footnote-82263922
Ref: New Improved and Deprecated Modules<2>-Footnote-92263986
Ref: New Improved and Deprecated Modules<2>-Footnote-102264050
Ref: New Improved and Deprecated Modules<2>-Footnote-112264115
Ref: New Improved and Deprecated Modules<2>-Footnote-122264180
Ref: New Improved and Deprecated Modules<2>-Footnote-132264245
Node: Otimizações<13>2264310
Ref: whatsnew/3 1 optimizations2264458
Ref: 148c2264458
Ref: Otimizações<13>-Footnote-12266635
Ref: Otimizações<13>-Footnote-22266677
Ref: Otimizações<13>-Footnote-32266741
Ref: Otimizações<13>-Footnote-42266805
Ref: Otimizações<13>-Footnote-52266869
Ref: Otimizações<13>-Footnote-62266895
Ref: Otimizações<13>-Footnote-72266959
Node: IDLE<2>2267023
Ref: whatsnew/3 1 idle2267169
Ref: 148d2267169
Ref: IDLE<2>-Footnote-12267386
Node: Mudanças a construções e API C<6>2267450
Ref: whatsnew/3 1 build-and-c-api-changes2267600
Ref: 148e2267600
Ref: Mudanças a construções e API C<6>-Footnote-12269970
Ref: Mudanças a construções e API C<6>-Footnote-22270034
Ref: Mudanças a construções e API C<6>-Footnote-32270098
Ref: Mudanças a construções e API C<6>-Footnote-42270162
Ref: Mudanças a construções e API C<6>-Footnote-52270226
Node: Porting to Python 3 12270290
Ref: whatsnew/3 1 porting-to-python-3-12270424
Ref: 14922270424
Node: O que há de novo no Python 3 02271584
Ref: whatsnew/3 0 doc2271759
Ref: 14932271759
Ref: whatsnew/3 0 no-color2271759
Ref: 14942271759
Ref: whatsnew/3 0 what-s-new-in-python-3-02271759
Ref: 14952271759
Node: Obstáculos comuns2273825
Ref: whatsnew/3 0 common-stumbling-blocks2273960
Ref: 14962273960
Node: print é uma função2274361
Ref: whatsnew/3 0 print-is-a-function2274491
Ref: 14972274491
Ref: print é uma função-Footnote-12276283
Node: Visualizações e iteradores em vez de listas2276325
Ref: whatsnew/3 0 views-and-iterators-instead-of-lists2276492
Ref: 14982276492
Node: Comparações de ordenação2278552
Ref: whatsnew/3 0 ordering-comparisons2278706
Ref: 149b2278706
Node: Inteiros2280276
Ref: whatsnew/3 0 integers2280427
Ref: 149d2280427
Ref: Inteiros-Footnote-12281737
Ref: Inteiros-Footnote-22281779
Node: Texto vs Dados em vez de Unicode vs 8 bits2281821
Ref: whatsnew/3 0 text-vs-data-instead-of-unicode-vs-8-bit2281935
Ref: 149e2281935
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-12289246
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-22289288
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-32289330
Node: Visão geral das alterações da sintaxe2289372
Ref: whatsnew/3 0 overview-of-syntax-changes2289553
Ref: 14a12289553
Node: Nova sintaxe2289806
Ref: whatsnew/3 0 new-syntax2289920
Ref: 14a22289920
Ref: Nova sintaxe-Footnote-12292749
Ref: Nova sintaxe-Footnote-22292791
Ref: Nova sintaxe-Footnote-32292833
Ref: Nova sintaxe-Footnote-42292875
Ref: Nova sintaxe-Footnote-52292917
Node: Sintaxe alterada2292959
Ref: whatsnew/3 0 changed-syntax2293098
Ref: 14a52293098
Ref: Sintaxe alterada-Footnote-12294963
Ref: Sintaxe alterada-Footnote-22295005
Ref: Sintaxe alterada-Footnote-32295047
Ref: Sintaxe alterada-Footnote-42295089
Node: Sintaxe removida2295131
Ref: whatsnew/3 0 removed-syntax2295249
Ref: 14a62295249
Ref: Sintaxe removida-Footnote-12296581
Ref: Sintaxe removida-Footnote-22296623
Node: Mudanças já presentes no Python 2 62296665
Ref: whatsnew/3 0 changes-already-present-in-python-2-62296851
Ref: 14a82296851
Node: Mudanças na biblioteca2300892
Ref: whatsnew/3 0 library-changes2301094
Ref: 14bb2301094
Ref: Mudanças na biblioteca-Footnote-12307538
Ref: Mudanças na biblioteca-Footnote-22307580
Ref: Mudanças na biblioteca-Footnote-32307622
Ref: Mudanças na biblioteca-Footnote-42307664
Ref: Mudanças na biblioteca-Footnote-52307706
Ref: Mudanças na biblioteca-Footnote-62307748
Node: PEP 3101 Uma nova abordagem para formatação de strings2307790
Ref: whatsnew/3 0 pep-3101-a-new-approach-to-string-formatting2307980
Ref: 14c02307980
Ref: PEP 3101 Uma nova abordagem para formatação de strings-Footnote-12308430
Node: Mudanças para exceções2308472
Ref: whatsnew/3 0 changes-to-exceptions2308664
Ref: 14c12308664
Ref: Mudanças para exceções-Footnote-12312537
Ref: Mudanças para exceções-Footnote-22312579
Ref: Mudanças para exceções-Footnote-32312621
Ref: Mudanças para exceções-Footnote-42312663
Ref: Mudanças para exceções-Footnote-52312705
Node: Outras mudanças diversas2312747
Ref: whatsnew/3 0 miscellaneous-other-changes2312919
Ref: 14c52312919
Node: Operadores e métodos especiais2313055
Ref: whatsnew/3 0 operators-and-special-methods2313176
Ref: 14c62313176
Ref: Operadores e métodos especiais-Footnote-12314915
Node: Funções embutidas2314957
Ref: whatsnew/3 0 builtins2315078
Ref: 14d22315078
Ref: Funções embutidas-Footnote-12317697
Ref: Funções embutidas-Footnote-22317739
Node: Mudanças a construções e API C<7>2317781
Ref: whatsnew/3 0 build-and-c-api-changes2317938
Ref: 14d82317938
Ref: Mudanças a construções e API C<7>-Footnote-12319051
Ref: Mudanças a construções e API C<7>-Footnote-22319093
Ref: Mudanças a construções e API C<7>-Footnote-32319135
Node: Desempenho2319177
Ref: whatsnew/3 0 performance2319335
Ref: 14da2319335
Node: Portando para o Python 3 02319712
Ref: whatsnew/3 0 porting-to-python-3-02319825
Ref: 14db2319825
Node: O que há de novo no Python 2 72321501
Ref: whatsnew/2 7 doc2321676
Ref: 14dd2321676
Ref: whatsnew/2 7 no-color2321676
Ref: 14de2321676
Ref: whatsnew/2 7 what-s-new-in-python-2-72321676
Ref: 14df2321676
Node: O futuro para o Python 2 x2324394
Ref: whatsnew/2 7 the-future-for-python-2-x2324550
Ref: 14e02324550
Ref: whatsnew/2 7 whatsnew27-python312324550
Ref: 14e12324550
Ref: O futuro para o Python 2 x-Footnote-12328305
Ref: O futuro para o Python 2 x-Footnote-22328347
Node: Mudanças no tratamento de avisos de descontinuação2328384
Ref: whatsnew/2 7 changes-to-the-handling-of-deprecation-warnings2328571
Ref: 14e32328571
Ref: Mudanças no tratamento de avisos de descontinuação-Footnote-12330309
Node: Recursos do Python 3 12330373
Ref: whatsnew/2 7 python-3-1-features2330590
Ref: 14e42330590
Node: PEP 372 Adicionando um dicionário ordenado a coleções2332708
Ref: whatsnew/2 7 pep-03722332934
Ref: 14e52332934
Ref: whatsnew/2 7 pep-372-adding-an-ordered-dictionary-to-collections2332934
Ref: 14e82332934
Ref: PEP 372 Adicionando um dicionário ordenado a coleções-Footnote-12336777
Ref: PEP 372 Adicionando um dicionário ordenado a coleções-Footnote-22336805
Node: PEP 378 Especificador de formato para separador de milhares<2>2336847
Ref: whatsnew/2 7 pep-03782337109
Ref: 14e62337109
Ref: whatsnew/2 7 pep-378-format-specifier-for-thousands-separator2337109
Ref: 14ea2337109
Ref: PEP 378 Especificador de formato para separador de milhares<2>-Footnote-12338751
Node: PEP 389 O módulo argparse para analisar linhas de comando2338793
Ref: whatsnew/2 7 pep-389-the-argparse-module-for-parsing-command-lines2339057
Ref: 14eb2339057
Ref: PEP 389 O módulo argparse para analisar linhas de comando-Footnote-12343363
Node: PEP 391 Configuração baseada em dicionário para logging2343405
Ref: whatsnew/2 7 pep-391-dictionary-based-configuration-for-logging2343636
Ref: 14ec2343636
Ref: PEP 391 Configuração baseada em dicionário para logging-Footnote-12347772
Node: PEP 3106 Views de dicionário2347814
Ref: whatsnew/2 7 pep-3106-dictionary-views2348015
Ref: 14f32348015
Ref: PEP 3106 Views de dicionário-Footnote-12350226
Ref: PEP 3106 Views de dicionário-Footnote-22350268
Node: PEP 3137 O objeto memoryview2350332
Ref: whatsnew/2 7 pep-3137-the-memoryview-object2350508
Ref: 14f42350508
Ref: PEP 3137 O objeto memoryview-Footnote-12352194
Ref: PEP 3137 O objeto memoryview-Footnote-22352236
Node: Outras mudanças na linguagem<14>2352300
Ref: whatsnew/2 7 other-language-changes2352476
Ref: 14f52352476
Ref: Outras mudanças na linguagem<14>-Footnote-12363352
Ref: Outras mudanças na linguagem<14>-Footnote-22363416
Ref: Outras mudanças na linguagem<14>-Footnote-32363480
Ref: Outras mudanças na linguagem<14>-Footnote-42363544
Ref: Outras mudanças na linguagem<14>-Footnote-52363608
Ref: Outras mudanças na linguagem<14>-Footnote-62363672
Ref: Outras mudanças na linguagem<14>-Footnote-72363736
Ref: Outras mudanças na linguagem<14>-Footnote-82363800
Ref: Outras mudanças na linguagem<14>-Footnote-92363864
Ref: Outras mudanças na linguagem<14>-Footnote-102363928
Ref: Outras mudanças na linguagem<14>-Footnote-112363993
Ref: Outras mudanças na linguagem<14>-Footnote-122364058
Ref: Outras mudanças na linguagem<14>-Footnote-132364123
Ref: Outras mudanças na linguagem<14>-Footnote-142364188
Ref: Outras mudanças na linguagem<14>-Footnote-152364256
Ref: Outras mudanças na linguagem<14>-Footnote-162364321
Ref: Outras mudanças na linguagem<14>-Footnote-172364386
Ref: Outras mudanças na linguagem<14>-Footnote-182364451
Ref: Outras mudanças na linguagem<14>-Footnote-192364519
Ref: Outras mudanças na linguagem<14>-Footnote-202364584
Ref: Outras mudanças na linguagem<14>-Footnote-212364649
Ref: Outras mudanças na linguagem<14>-Footnote-222364714
Ref: Outras mudanças na linguagem<14>-Footnote-232364779
Ref: Outras mudanças na linguagem<14>-Footnote-242364844
Node: Alterações no interpretador2364909
Ref: whatsnew/2 7 interpreter-changes2365034
Ref: 14f92365034
Ref: whatsnew/2 7 new-27-interpreter2365034
Ref: 14fa2365034
Ref: Alterações no interpretador-Footnote-12365741
Node: Otimizações<14>2365805
Ref: whatsnew/2 7 optimizations2365930
Ref: 14fb2365930
Ref: Otimizações<14>-Footnote-12371300
Ref: Otimizações<14>-Footnote-22371364
Ref: Otimizações<14>-Footnote-32371428
Ref: Otimizações<14>-Footnote-42371492
Ref: Otimizações<14>-Footnote-52371556
Ref: Otimizações<14>-Footnote-62371620
Ref: Otimizações<14>-Footnote-72371687
Ref: Otimizações<14>-Footnote-82371751
Ref: Otimizações<14>-Footnote-92371815
Ref: Otimizações<14>-Footnote-102371879
Ref: Otimizações<14>-Footnote-112371944
Ref: Otimizações<14>-Footnote-122372009
Ref: Otimizações<14>-Footnote-132372074
Node: Módulos Novos ou Aprimorados2372139
Ref: whatsnew/2 7 new-and-improved-modules2372323
Ref: 14fd2372323
Ref: Módulos Novos ou Aprimorados-Footnote-12410235
Ref: Módulos Novos ou Aprimorados-Footnote-22410299
Ref: Módulos Novos ou Aprimorados-Footnote-32410363
Ref: Módulos Novos ou Aprimorados-Footnote-42410416
Ref: Módulos Novos ou Aprimorados-Footnote-52410480
Ref: Módulos Novos ou Aprimorados-Footnote-62410544
Ref: Módulos Novos ou Aprimorados-Footnote-72410611
Ref: Módulos Novos ou Aprimorados-Footnote-82410675
Ref: Módulos Novos ou Aprimorados-Footnote-92410739
Ref: Módulos Novos ou Aprimorados-Footnote-102410803
Ref: Módulos Novos ou Aprimorados-Footnote-112410868
Ref: Módulos Novos ou Aprimorados-Footnote-122410933
Ref: Módulos Novos ou Aprimorados-Footnote-132410998
Ref: Módulos Novos ou Aprimorados-Footnote-142411038
Ref: Módulos Novos ou Aprimorados-Footnote-152411103
Ref: Módulos Novos ou Aprimorados-Footnote-162411168
Ref: Módulos Novos ou Aprimorados-Footnote-172411233
Ref: Módulos Novos ou Aprimorados-Footnote-182411298
Ref: Módulos Novos ou Aprimorados-Footnote-192411363
Ref: Módulos Novos ou Aprimorados-Footnote-202411428
Ref: Módulos Novos ou Aprimorados-Footnote-212411493
Ref: Módulos Novos ou Aprimorados-Footnote-222411558
Ref: Módulos Novos ou Aprimorados-Footnote-232411623
Ref: Módulos Novos ou Aprimorados-Footnote-242411688
Ref: Módulos Novos ou Aprimorados-Footnote-252411753
Ref: Módulos Novos ou Aprimorados-Footnote-262411818
Ref: Módulos Novos ou Aprimorados-Footnote-272411886
Ref: Módulos Novos ou Aprimorados-Footnote-282411951
Ref: Módulos Novos ou Aprimorados-Footnote-292412016
Ref: Módulos Novos ou Aprimorados-Footnote-302412081
Ref: Módulos Novos ou Aprimorados-Footnote-312412146
Ref: Módulos Novos ou Aprimorados-Footnote-322412211
Ref: Módulos Novos ou Aprimorados-Footnote-332412276
Ref: Módulos Novos ou Aprimorados-Footnote-342412341
Ref: Módulos Novos ou Aprimorados-Footnote-352412406
Ref: Módulos Novos ou Aprimorados-Footnote-362412471
Ref: Módulos Novos ou Aprimorados-Footnote-372412536
Ref: Módulos Novos ou Aprimorados-Footnote-382412601
Ref: Módulos Novos ou Aprimorados-Footnote-392412666
Ref: Módulos Novos ou Aprimorados-Footnote-402412731
Ref: Módulos Novos ou Aprimorados-Footnote-412412796
Ref: Módulos Novos ou Aprimorados-Footnote-422412861
Ref: Módulos Novos ou Aprimorados-Footnote-432412926
Ref: Módulos Novos ou Aprimorados-Footnote-442412991
Ref: Módulos Novos ou Aprimorados-Footnote-452413056
Ref: Módulos Novos ou Aprimorados-Footnote-462413121
Ref: Módulos Novos ou Aprimorados-Footnote-472413186
Ref: Módulos Novos ou Aprimorados-Footnote-482413251
Ref: Módulos Novos ou Aprimorados-Footnote-492413319
Ref: Módulos Novos ou Aprimorados-Footnote-502413384
Ref: Módulos Novos ou Aprimorados-Footnote-512413449
Ref: Módulos Novos ou Aprimorados-Footnote-522413514
Ref: Módulos Novos ou Aprimorados-Footnote-532413579
Ref: Módulos Novos ou Aprimorados-Footnote-542413644
Ref: Módulos Novos ou Aprimorados-Footnote-552413709
Ref: Módulos Novos ou Aprimorados-Footnote-562413774
Ref: Módulos Novos ou Aprimorados-Footnote-572413839
Ref: Módulos Novos ou Aprimorados-Footnote-582413904
Ref: Módulos Novos ou Aprimorados-Footnote-592413969
Ref: Módulos Novos ou Aprimorados-Footnote-602414034
Ref: Módulos Novos ou Aprimorados-Footnote-612414099
Ref: Módulos Novos ou Aprimorados-Footnote-622414164
Ref: Módulos Novos ou Aprimorados-Footnote-632414229
Ref: Módulos Novos ou Aprimorados-Footnote-642414294
Ref: Módulos Novos ou Aprimorados-Footnote-652414359
Ref: Módulos Novos ou Aprimorados-Footnote-662414424
Ref: Módulos Novos ou Aprimorados-Footnote-672414489
Ref: Módulos Novos ou Aprimorados-Footnote-682414554
Ref: Módulos Novos ou Aprimorados-Footnote-692414619
Ref: Módulos Novos ou Aprimorados-Footnote-702414665
Ref: Módulos Novos ou Aprimorados-Footnote-712414730
Ref: Módulos Novos ou Aprimorados-Footnote-722414795
Ref: Módulos Novos ou Aprimorados-Footnote-732414849
Ref: Módulos Novos ou Aprimorados-Footnote-742414914
Ref: Módulos Novos ou Aprimorados-Footnote-752414979
Ref: Módulos Novos ou Aprimorados-Footnote-762415044
Ref: Módulos Novos ou Aprimorados-Footnote-772415109
Ref: Módulos Novos ou Aprimorados-Footnote-782415174
Ref: Módulos Novos ou Aprimorados-Footnote-792415242
Ref: Módulos Novos ou Aprimorados-Footnote-802415307
Ref: Módulos Novos ou Aprimorados-Footnote-812415372
Ref: Módulos Novos ou Aprimorados-Footnote-822415437
Ref: Módulos Novos ou Aprimorados-Footnote-832415502
Ref: Módulos Novos ou Aprimorados-Footnote-842415567
Ref: Módulos Novos ou Aprimorados-Footnote-852415632
Ref: Módulos Novos ou Aprimorados-Footnote-862415700
Ref: Módulos Novos ou Aprimorados-Footnote-872415768
Ref: Módulos Novos ou Aprimorados-Footnote-882415833
Ref: Módulos Novos ou Aprimorados-Footnote-892415893
Ref: Módulos Novos ou Aprimorados-Footnote-902415953
Ref: Módulos Novos ou Aprimorados-Footnote-912416018
Ref: Módulos Novos ou Aprimorados-Footnote-922416083
Ref: Módulos Novos ou Aprimorados-Footnote-932416148
Ref: Módulos Novos ou Aprimorados-Footnote-942416213
Ref: Módulos Novos ou Aprimorados-Footnote-952416278
Ref: Módulos Novos ou Aprimorados-Footnote-962416343
Ref: Módulos Novos ou Aprimorados-Footnote-972416408
Node: Novo módulo importlib2416473
Ref: whatsnew/2 7 importlib-section2416592
Ref: 14e72416592
Ref: whatsnew/2 7 new-module-importlib2416592
Ref: 15262416592
Node: Novo módulo sysconfig2418171
Ref: whatsnew/2 7 new-module-sysconfig2418329
Ref: 15272418329
Node: ttk Widgets temáticos para Tk2419776
Ref: whatsnew/2 7 ttk-themed-widgets-for-tk2419939
Ref: 15292419939
Ref: ttk Widgets temáticos para Tk-Footnote-12421121
Ref: ttk Widgets temáticos para Tk-Footnote-22421185
Node: Módulo atualizado unittest2421249
Ref: whatsnew/2 7 unittest-section2421424
Ref: 152a2421424
Ref: whatsnew/2 7 updated-module-unittest2421424
Ref: 152b2421424
Ref: Módulo atualizado unittest-Footnote-12430979
Ref: Módulo atualizado unittest-Footnote-22431023
Ref: Módulo atualizado unittest-Footnote-32431050
Ref: Módulo atualizado unittest-Footnote-42431087
Ref: Módulo atualizado unittest-Footnote-52431151
Ref: Módulo atualizado unittest-Footnote-62431215
Ref: Módulo atualizado unittest-Footnote-72431282
Ref: Módulo atualizado unittest-Footnote-82431346
Ref: Módulo atualizado unittest-Footnote-92431410
Ref: Módulo atualizado unittest-Footnote-102431474
Ref: Módulo atualizado unittest-Footnote-112431539
Ref: Módulo atualizado unittest-Footnote-122431604
Ref: Módulo atualizado unittest-Footnote-132431669
Ref: Módulo atualizado unittest-Footnote-142431734
Ref: Módulo atualizado unittest-Footnote-152431799
Node: Módulo atualizado ElementTree 1 32431864
Ref: whatsnew/2 7 elementtree-section2432000
Ref: 15462432000
Ref: whatsnew/2 7 updated-module-elementtree-1-32432000
Ref: 15472432000
Ref: Módulo atualizado ElementTree 1 3-Footnote-12436243
Node: Mudanças a construções e API C<8>2436307
Ref: whatsnew/2 7 build-and-c-api-changes2436491
Ref: 154a2436491
Ref: Mudanças a construções e API C<8>-Footnote-12445912
Ref: Mudanças a construções e API C<8>-Footnote-22446025
Ref: Mudanças a construções e API C<8>-Footnote-32446089
Ref: Mudanças a construções e API C<8>-Footnote-42446153
Ref: Mudanças a construções e API C<8>-Footnote-52446217
Ref: Mudanças a construções e API C<8>-Footnote-62446281
Ref: Mudanças a construções e API C<8>-Footnote-72446345
Ref: Mudanças a construções e API C<8>-Footnote-82446409
Ref: Mudanças a construções e API C<8>-Footnote-92446464
Ref: Mudanças a construções e API C<8>-Footnote-102446528
Ref: Mudanças a construções e API C<8>-Footnote-112446593
Ref: Mudanças a construções e API C<8>-Footnote-122446658
Ref: Mudanças a construções e API C<8>-Footnote-132446723
Ref: Mudanças a construções e API C<8>-Footnote-142446791
Ref: Mudanças a construções e API C<8>-Footnote-152446859
Ref: Mudanças a construções e API C<8>-Footnote-162446924
Ref: Mudanças a construções e API C<8>-Footnote-172446989
Ref: Mudanças a construções e API C<8>-Footnote-182447054
Ref: Mudanças a construções e API C<8>-Footnote-192447119
Ref: Mudanças a construções e API C<8>-Footnote-202447184
Ref: Mudanças a construções e API C<8>-Footnote-212447252
Ref: Mudanças a construções e API C<8>-Footnote-222447317
Node: Capsules2447382
Ref: whatsnew/2 7 capsules2447514
Ref: 154c2447514
Ref: whatsnew/2 7 whatsnew27-capsules2447514
Ref: 154d2447514
Ref: Capsules-Footnote-12449653
Node: Alterações específicas da porta Windows2449717
Ref: whatsnew/2 7 port-specific-changes-windows2449901
Ref: 15502449901
Ref: Alterações específicas da porta Windows-Footnote-12451821
Ref: Alterações específicas da porta Windows-Footnote-22451885
Ref: Alterações específicas da porta Windows-Footnote-32451949
Ref: Alterações específicas da porta Windows-Footnote-42452013
Ref: Alterações específicas da porta Windows-Footnote-52452080
Ref: Alterações específicas da porta Windows-Footnote-62452144
Node: Alterações específicas da porta Mac OS X2452208
Ref: whatsnew/2 7 port-specific-changes-mac-os-x2452426
Ref: 155c2452426
Ref: Alterações específicas da porta Mac OS X-Footnote-12453536
Ref: Alterações específicas da porta Mac OS X-Footnote-22453600
Node: Alterações específicas da porta FreeBSD2453665
Ref: whatsnew/2 7 port-specific-changes-freebsd2453832
Ref: 155d2453832
Ref: Alterações específicas da porta FreeBSD-Footnote-12454292
Node: Outras alterações e correções2454356
Ref: whatsnew/2 7 other-changes-and-fixes2454535
Ref: 155e2454535
Ref: Outras alterações e correções-Footnote-12456970
Ref: Outras alterações e correções-Footnote-22457034
Ref: Outras alterações e correções-Footnote-32457101
Ref: Outras alterações e correções-Footnote-42457165
Ref: Outras alterações e correções-Footnote-52457229
Node: Portando para Python 2 72457293
Ref: whatsnew/2 7 porting-to-python-2-72457505
Ref: 15602457505
Ref: Portando para Python 2 7-Footnote-12463483
Ref: Portando para Python 2 7-Footnote-22463547
Ref: Portando para Python 2 7-Footnote-32463611
Ref: Portando para Python 2 7-Footnote-42463675
Ref: Portando para Python 2 7-Footnote-52463739
Ref: Portando para Python 2 7-Footnote-62463803
Ref: Portando para Python 2 7-Footnote-72463867
Ref: Portando para Python 2 7-Footnote-82463931
Ref: Portando para Python 2 7-Footnote-92463995
Ref: Portando para Python 2 7-Footnote-102464059
Ref: Portando para Python 2 7-Footnote-112464124
Ref: Portando para Python 2 7-Footnote-122464189
Ref: Portando para Python 2 7-Footnote-132464254
Ref: Portando para Python 2 7-Footnote-142464314
Node: Novos recursos adicionados às versões de manutenção do Python 2 72464379
Ref: whatsnew/2 7 new-features-added-to-python-2-7-maintenance-releases2464573
Ref: 15612464573
Ref: whatsnew/2 7 py27-maintenance-enhancements2464573
Ref: 14e22464573
Node: Duas novas variáveis de ambiente para modo de depuração2466310
Ref: whatsnew/2 7 two-new-environment-variables-for-debug-mode2466548
Ref: 15622466548
Ref: Duas novas variáveis de ambiente para modo de depuração-Footnote-12467322
Ref: Duas novas variáveis de ambiente para modo de depuração-Footnote-22467387
Node: PEP 434 Exceção de aprimoramento do IDLE para todos os branches2467452
Ref: whatsnew/2 7 pep-434-idle-enhancement-exception-for-all-branches2467757
Ref: 15632467757
Ref: PEP 434 Exceção de aprimoramento do IDLE para todos os branches-Footnote-12468343
Node: PEP 466 Aprimoramentos de segurança de rede do Python 2 72468385
Ref: whatsnew/2 7 pep-466-network-security-enhancements-for-python-2-72468687
Ref: 15642468687
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-12471158
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-22471200
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-32471242
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-42471307
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-52471372
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-62471414
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-72471479
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-82471544
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-92471599
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-102471641
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-112471707
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-122471773
Node: PEP 477 Backport do ensurepip PEP 453 para o Python 2 72471839
Ref: whatsnew/2 7 pep-477-backport-ensurepip-pep-453-to-python-2-72472165
Ref: 15672472165
Ref: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7-Footnote-12472662
Ref: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7-Footnote-22472704
Node: Inicializando pip por padrão2472746
Ref: whatsnew/2 7 bootstrapping-pip-by-default2472906
Ref: 15682472906
Ref: Inicializando pip por padrão-Footnote-12474724
Ref: Inicializando pip por padrão-Footnote-22474766
Node: Mudanças na documentação<2>2474856
Ref: whatsnew/2 7 documentation-changes2475016
Ref: 15692475016
Ref: Mudanças na documentação<2>-Footnote-12476010
Ref: Mudanças na documentação<2>-Footnote-22476047
Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>2476089
Ref: whatsnew/2 7 pep-476-enabling-certificate-verification-by-default-for-stdlib-http-clients2476429
Ref: 156a2476429
Ref: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>-Footnote-12477618
Node: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 72477660
Ref: whatsnew/2 7 pep-493-https-verification-migration-tools-for-python-2-72477988
Ref: 156b2477988
Ref: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7-Footnote-12479280
Node: Novo alvo de construção make regen-all<3>2479322
Ref: whatsnew/2 7 new-make-regen-all-build-target2479608
Ref: 156c2479608
Ref: Novo alvo de construção make regen-all<3>-Footnote-12480519
Ref: Novo alvo de construção make regen-all<3>-Footnote-22480587
Node: Remoção do alvo de construção make touch<3>2480652
Ref: whatsnew/2 7 removal-of-make-touch-build-target2480857
Ref: 156d2480857
Ref: Remoção do alvo de construção make touch<3>-Footnote-12481327
Node: Reconhecimentos2481392
Ref: whatsnew/2 7 acknowledgements2481553
Ref: 156e2481553
Ref: whatsnew/2 7 acks272481553
Ref: 156f2481553
Node: O que há de novo no Python 2 62481824
Ref: whatsnew/2 6 doc2481994
Ref: 15702481994
Ref: whatsnew/2 6 no-color2481994
Ref: 15712481994
Ref: whatsnew/2 6 what-s-new-in-python-2-62481994
Ref: 15722481994
Ref: whatsnew/2 6 whats-new-in-2-62481994
Ref: 14a92481994
Ref: O que há de novo no Python 2 6-Footnote-12485077
Node: Python 3 02485119
Ref: whatsnew/2 6 python-3-02485240
Ref: 15732485240
Ref: Python 3 0-Footnote-12487356
Ref: Python 3 0-Footnote-22487398
Node: Changes to the Development Process2487440
Ref: whatsnew/2 6 changes-to-the-development-process2487602
Ref: 15742487602
Node: New Issue Tracker Roundup2488120
Ref: whatsnew/2 6 new-issue-tracker-roundup2488279
Ref: 15752488279
Ref: New Issue Tracker Roundup-Footnote-12490334
Ref: New Issue Tracker Roundup-Footnote-22490383
Ref: New Issue Tracker Roundup-Footnote-32490414
Ref: New Issue Tracker Roundup-Footnote-42490454
Ref: New Issue Tracker Roundup-Footnote-52490489
Node: New Documentation Format reStructuredText Using Sphinx2490527
Ref: whatsnew/2 6 new-documentation-format-restructuredtext-using-sphinx2490686
Ref: 15762490686
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-12492807
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-22492866
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-32492915
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-42492951
Node: PEP 343 The ‘with’ statement2492991
Ref: whatsnew/2 6 pep-03432493195
Ref: 14aa2493195
Ref: whatsnew/2 6 pep-343-the-with-statement2493195
Ref: 15772493195
Node: Writing Context Managers2496480
Ref: whatsnew/2 6 new-26-context-managers2496603
Ref: 14ab2496603
Ref: whatsnew/2 6 writing-context-managers2496603
Ref: 15792496603
Node: The contextlib module2501148
Ref: whatsnew/2 6 new-module-contextlib2501271
Ref: 14ac2501271
Ref: whatsnew/2 6 the-contextlib-module2501271
Ref: 157a2501271
Ref: The contextlib module-Footnote-12503792
Node: PEP 366 Explicit Relative Imports From a Main Module2503834
Ref: whatsnew/2 6 pep-03662504044
Ref: 14ad2504044
Ref: whatsnew/2 6 pep-366-explicit-relative-imports-from-a-main-module2504044
Ref: 157c2504044
Node: PEP 370 Per-user site-packages Directory2504803
Ref: whatsnew/2 6 pep-03702505016
Ref: 14ae2505016
Ref: whatsnew/2 6 pep-370-per-user-site-packages-directory2505016
Ref: 157e2505016
Ref: PEP 370 Per-user site-packages Directory-Footnote-12506483
Node: PEP 371 The multiprocessing Package2506525
Ref: whatsnew/2 6 pep-03712506721
Ref: 14af2506721
Ref: whatsnew/2 6 pep-371-the-multiprocessing-package2506721
Ref: 15822506721
Ref: PEP 371 The multiprocessing Package-Footnote-12511973
Node: PEP 3101 Advanced String Formatting2512015
Ref: whatsnew/2 6 pep-31012512199
Ref: 14b02512199
Ref: whatsnew/2 6 pep-3101-advanced-string-formatting2512199
Ref: 158c2512199
Ref: PEP 3101 Advanced String Formatting-Footnote-12517937
Node: PEP 3105 print As a Function2517979
Ref: whatsnew/2 6 pep-31052518163
Ref: 14b12518163
Ref: whatsnew/2 6 pep-3105-print-as-a-function2518163
Ref: 158e2518163
Ref: PEP 3105 print As a Function-Footnote-12519299
Node: PEP 3110 Exception-Handling Changes2519341
Ref: whatsnew/2 6 pep-31102519512
Ref: 14b22519512
Ref: whatsnew/2 6 pep-3110-exception-handling-changes2519512
Ref: 158f2519512
Ref: PEP 3110 Exception-Handling Changes-Footnote-12521118
Node: PEP 3112 Byte Literals2521160
Ref: whatsnew/2 6 pep-31122521327
Ref: 14b32521327
Ref: whatsnew/2 6 pep-3112-byte-literals2521327
Ref: 15902521327
Ref: PEP 3112 Byte Literals-Footnote-12524394
Node: PEP 3116 New I/O Library2524436
Ref: whatsnew/2 6 pep-31162524600
Ref: 14b42524600
Ref: whatsnew/2 6 pep-3116-new-i-o-library2524600
Ref: 159c2524600
Ref: PEP 3116 New I/O Library-Footnote-12528414
Node: PEP 3118 Revised Buffer Protocol2528456
Ref: whatsnew/2 6 pep-31182528628
Ref: 14b52528628
Ref: whatsnew/2 6 pep-3118-revised-buffer-protocol2528628
Ref: 15a62528628
Ref: PEP 3118 Revised Buffer Protocol-Footnote-12530758
Node: PEP 3119 Abstract Base Classes2530800
Ref: whatsnew/2 6 pep-31192530991
Ref: 14b62530991
Ref: whatsnew/2 6 pep-3119-abstract-base-classes2530991
Ref: 15aa2530991
Ref: PEP 3119 Abstract Base Classes-Footnote-12536386
Node: PEP 3127 Integer Literal Support and Syntax2536428
Ref: whatsnew/2 6 pep-31272536612
Ref: 14b72536612
Ref: whatsnew/2 6 pep-3127-integer-literal-support-and-syntax2536612
Ref: 15ac2536612
Ref: PEP 3127 Integer Literal Support and Syntax-Footnote-12537984
Node: PEP 3129 Class Decorators2538026
Ref: whatsnew/2 6 pep-31292538217
Ref: 14b82538217
Ref: whatsnew/2 6 pep-3129-class-decorators2538217
Ref: 15ad2538217
Ref: PEP 3129 Class Decorators-Footnote-12538616
Node: PEP 3141 A Type Hierarchy for Numbers2538658
Ref: whatsnew/2 6 pep-31412538839
Ref: 14b92538839
Ref: whatsnew/2 6 pep-3141-a-type-hierarchy-for-numbers2538839
Ref: 15ae2538839
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-12541047
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-22541089
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-32541187
Node: The fractions Module2541293
Ref: whatsnew/2 6 the-fractions-module2541387
Ref: 15b22541387
Node: Outras mudanças na linguagem<15>2542994
Ref: whatsnew/2 6 other-language-changes2543179
Ref: 15b32543179
Ref: Outras mudanças na linguagem<15>-Footnote-12552109
Ref: Outras mudanças na linguagem<15>-Footnote-22552176
Ref: Outras mudanças na linguagem<15>-Footnote-32552240
Ref: Outras mudanças na linguagem<15>-Footnote-42552307
Ref: Outras mudanças na linguagem<15>-Footnote-52552371
Ref: Outras mudanças na linguagem<15>-Footnote-62552435
Ref: Outras mudanças na linguagem<15>-Footnote-72552499
Ref: Outras mudanças na linguagem<15>-Footnote-82552563
Ref: Outras mudanças na linguagem<15>-Footnote-92552627
Ref: Outras mudanças na linguagem<15>-Footnote-102552691
Ref: Outras mudanças na linguagem<15>-Footnote-112552756
Ref: Outras mudanças na linguagem<15>-Footnote-122552821
Ref: Outras mudanças na linguagem<15>-Footnote-132552889
Ref: Outras mudanças na linguagem<15>-Footnote-142552957
Ref: Outras mudanças na linguagem<15>-Footnote-152553025
Ref: Outras mudanças na linguagem<15>-Footnote-162553093
Node: Otimizações<15>2553161
Ref: whatsnew/2 6 optimizations2553289
Ref: 15bb2553289
Ref: Otimizações<15>-Footnote-12556144
Ref: Otimizações<15>-Footnote-22556211
Ref: Otimizações<15>-Footnote-32556278
Ref: Otimizações<15>-Footnote-42556342
Node: Alterações no interpretador<2>2556406
Ref: whatsnew/2 6 interpreter-changes2556534
Ref: 15bc2556534
Ref: whatsnew/2 6 new-26-interpreter2556534
Ref: 15bd2556534
Node: Módulos novos ou aprimorados2558135
Ref: whatsnew/2 6 new-and-improved-modules2558308
Ref: 15c02558308
Ref: Módulos novos ou aprimorados-Footnote-12600941
Ref: Módulos novos ou aprimorados-Footnote-22601008
Ref: Módulos novos ou aprimorados-Footnote-32601061
Ref: Módulos novos ou aprimorados-Footnote-42601125
Ref: Módulos novos ou aprimorados-Footnote-52601191
Ref: Módulos novos ou aprimorados-Footnote-62601255
Ref: Módulos novos ou aprimorados-Footnote-72601322
Ref: Módulos novos ou aprimorados-Footnote-82601386
Ref: Módulos novos ou aprimorados-Footnote-92601440
Ref: Módulos novos ou aprimorados-Footnote-102601507
Ref: Módulos novos ou aprimorados-Footnote-112601575
Ref: Módulos novos ou aprimorados-Footnote-122601643
Ref: Módulos novos ou aprimorados-Footnote-132601708
Ref: Módulos novos ou aprimorados-Footnote-142601773
Ref: Módulos novos ou aprimorados-Footnote-152601840
Ref: Módulos novos ou aprimorados-Footnote-162601905
Ref: Módulos novos ou aprimorados-Footnote-172601973
Ref: Módulos novos ou aprimorados-Footnote-182602038
Ref: Módulos novos ou aprimorados-Footnote-192602106
Ref: Módulos novos ou aprimorados-Footnote-202602174
Ref: Módulos novos ou aprimorados-Footnote-212602242
Ref: Módulos novos ou aprimorados-Footnote-222602309
Ref: Módulos novos ou aprimorados-Footnote-232602377
Ref: Módulos novos ou aprimorados-Footnote-242602445
Ref: Módulos novos ou aprimorados-Footnote-252602510
Ref: Módulos novos ou aprimorados-Footnote-262602575
Ref: Módulos novos ou aprimorados-Footnote-272602643
Ref: Módulos novos ou aprimorados-Footnote-282602711
Ref: Módulos novos ou aprimorados-Footnote-292602778
Ref: Módulos novos ou aprimorados-Footnote-302602843
Ref: Módulos novos ou aprimorados-Footnote-312602908
Ref: Módulos novos ou aprimorados-Footnote-322602973
Ref: Módulos novos ou aprimorados-Footnote-332603038
Ref: Módulos novos ou aprimorados-Footnote-342603103
Ref: Módulos novos ou aprimorados-Footnote-352603168
Ref: Módulos novos ou aprimorados-Footnote-362603233
Ref: Módulos novos ou aprimorados-Footnote-372603293
Ref: Módulos novos ou aprimorados-Footnote-382603360
Ref: Módulos novos ou aprimorados-Footnote-392603420
Ref: Módulos novos ou aprimorados-Footnote-402603487
Ref: Módulos novos ou aprimorados-Footnote-412603552
Ref: Módulos novos ou aprimorados-Footnote-422603619
Ref: Módulos novos ou aprimorados-Footnote-432603687
Ref: Módulos novos ou aprimorados-Footnote-442603752
Ref: Módulos novos ou aprimorados-Footnote-452603817
Ref: Módulos novos ou aprimorados-Footnote-462603882
Ref: Módulos novos ou aprimorados-Footnote-472603950
Ref: Módulos novos ou aprimorados-Footnote-482604015
Ref: Módulos novos ou aprimorados-Footnote-492604080
Ref: Módulos novos ou aprimorados-Footnote-502604148
Ref: Módulos novos ou aprimorados-Footnote-512604213
Ref: Módulos novos ou aprimorados-Footnote-522604281
Ref: Módulos novos ou aprimorados-Footnote-532604346
Ref: Módulos novos ou aprimorados-Footnote-542604414
Ref: Módulos novos ou aprimorados-Footnote-552604479
Ref: Módulos novos ou aprimorados-Footnote-562604547
Ref: Módulos novos ou aprimorados-Footnote-572604612
Ref: Módulos novos ou aprimorados-Footnote-582604680
Ref: Módulos novos ou aprimorados-Footnote-592604748
Ref: Módulos novos ou aprimorados-Footnote-602604813
Ref: Módulos novos ou aprimorados-Footnote-612604878
Ref: Módulos novos ou aprimorados-Footnote-622604945
Ref: Módulos novos ou aprimorados-Footnote-632605013
Node: The ast module2605081
Ref: whatsnew/2 6 the-ast-module2605196
Ref: 15d52605196
Node: The future_builtins module2607857
Ref: whatsnew/2 6 the-future-builtins-module2608023
Ref: 15d62608023
Node: The json module JavaScript Object Notation2609129
Ref: whatsnew/2 6 the-json-module-javascript-object-notation2609323
Ref: 15d82609323
Node: The plistlib module A Property-List Parser2610335
Ref: whatsnew/2 6 the-plistlib-module-a-property-list-parser2610522
Ref: 15d92610522
Node: ctypes Enhancements2611893
Ref: whatsnew/2 6 ctypes-enhancements2612058
Ref: 15da2612058
Ref: ctypes Enhancements-Footnote-12613825
Ref: ctypes Enhancements-Footnote-22613892
Node: Improved SSL Support2613956
Ref: whatsnew/2 6 improved-ssl-support2614070
Ref: 15db2614070
Ref: Improved SSL Support-Footnote-12615022
Node: Deprecations and Removals2615055
Ref: whatsnew/2 6 deprecations-and-removals2615231
Ref: 15dc2615231
Ref: Deprecations and Removals-Footnote-12617093
Node: Mudanças a construções e API C<9>2617135
Ref: whatsnew/2 6 build-and-c-api-changes2617303
Ref: 15de2617303
Ref: Mudanças a construções e API C<9>-Footnote-12624934
Ref: Mudanças a construções e API C<9>-Footnote-22624989
Ref: Mudanças a construções e API C<9>-Footnote-32625044
Ref: Mudanças a construções e API C<9>-Footnote-42625108
Ref: Mudanças a construções e API C<9>-Footnote-52625175
Ref: Mudanças a construções e API C<9>-Footnote-62625239
Ref: Mudanças a construções e API C<9>-Footnote-72625303
Node: Port-Specific Changes Windows2625370
Ref: whatsnew/2 6 port-specific-changes-windows2625511
Ref: 15e52625511
Ref: Port-Specific Changes Windows-Footnote-12627981
Ref: Port-Specific Changes Windows-Footnote-22628047
Ref: Port-Specific Changes Windows-Footnote-32628114
Node: Port-Specific Changes Mac OS X2628178
Ref: whatsnew/2 6 port-specific-changes-mac-os-x2628354
Ref: 15ea2628354
Ref: Port-Specific Changes Mac OS X-Footnote-12629625
Node: Port-Specific Changes IRIX2629692
Ref: whatsnew/2 6 port-specific-changes-irix2629830
Ref: 15eb2629830
Node: Porting to Python 2 62630349
Ref: whatsnew/2 6 porting-to-python-2-62630510
Ref: 15ec2630510
Ref: Porting to Python 2 6-Footnote-12634362
Ref: Porting to Python 2 6-Footnote-22634429
Ref: Porting to Python 2 6-Footnote-32634496
Node: Reconhecimentos<2>2634563
Ref: whatsnew/2 6 acknowledgements2634679
Ref: 15ee2634679
Ref: whatsnew/2 6 acks2634679
Ref: 15ef2634679
Node: What’s New in Python 2 52635019
Ref: whatsnew/2 5 doc2635184
Ref: 15f02635184
Ref: whatsnew/2 5 no-color2635184
Ref: 15f12635184
Ref: whatsnew/2 5 what-s-new-in-python-2-52635184
Ref: 15f22635184
Ref: What’s New in Python 2 5-Footnote-12638871
Node: PEP 308 Conditional Expressions2638913
Ref: whatsnew/2 5 pep-3082639052
Ref: 15f32639052
Ref: whatsnew/2 5 pep-308-conditional-expressions2639052
Ref: 15f82639052
Ref: PEP 308 Conditional Expressions-Footnote-12642541
Ref: PEP 308 Conditional Expressions-Footnote-22642583
Node: PEP 309 Partial Function Application2642625
Ref: whatsnew/2 5 pep-3092642823
Ref: 15f92642823
Ref: whatsnew/2 5 pep-309-partial-function-application2642823
Ref: 15fa2642823
Ref: PEP 309 Partial Function Application-Footnote-12645686
Node: PEP 314 Metadata for Python Software Packages v1 12645728
Ref: whatsnew/2 5 pep-3142645932
Ref: 15fb2645932
Ref: whatsnew/2 5 pep-314-metadata-for-python-software-packages-v1-12645932
Ref: 15fc2645932
Ref: PEP 314 Metadata for Python Software Packages v1 1-Footnote-12647771
Node: PEP 328 Absolute and Relative Imports2647813
Ref: whatsnew/2 5 pep-3282648017
Ref: 15f62648017
Ref: whatsnew/2 5 pep-328-absolute-and-relative-imports2648017
Ref: 15fd2648017
Ref: PEP 328 Absolute and Relative Imports-Footnote-12651838
Ref: PEP 328 Absolute and Relative Imports-Footnote-22651880
Node: PEP 338 Executing Modules as Scripts2651922
Ref: whatsnew/2 5 pep-3382652110
Ref: 15fe2652110
Ref: whatsnew/2 5 pep-338-executing-modules-as-scripts2652110
Ref: 15ff2652110
Ref: PEP 338 Executing Modules as Scripts-Footnote-12653010
Node: PEP 341 Unified try/except/finally2653052
Ref: whatsnew/2 5 pep-3412653233
Ref: 15f72653233
Ref: whatsnew/2 5 pep-341-unified-try-except-finally2653233
Ref: 16002653233
Ref: PEP 341 Unified try/except/finally-Footnote-12655005
Node: PEP 342 New Generator Features2655047
Ref: whatsnew/2 5 pep-3422655227
Ref: 15f52655227
Ref: whatsnew/2 5 pep-342-new-generator-features2655227
Ref: 16012655227
Ref: PEP 342 New Generator Features-Footnote-12661899
Ref: PEP 342 New Generator Features-Footnote-22661941
Ref: PEP 342 New Generator Features-Footnote-32661983
Ref: PEP 342 New Generator Features-Footnote-42662025
Ref: PEP 342 New Generator Features-Footnote-52662067
Node: PEP 343 The ‘with’ statement<2>2662109
Ref: whatsnew/2 5 pep-3432662294
Ref: 15f42662294
Ref: whatsnew/2 5 pep-343-the-with-statement2662294
Ref: 16022662294
Node: Writing Context Managers<2>2665332
Ref: whatsnew/2 5 new-25-context-managers2665464
Ref: 16032665464
Ref: whatsnew/2 5 writing-context-managers2665464
Ref: 16042665464
Node: The contextlib module<2>2669892
Ref: whatsnew/2 5 contextlibmod2670024
Ref: 16052670024
Ref: whatsnew/2 5 the-contextlib-module2670024
Ref: 16062670024
Ref: The contextlib module<2>-Footnote-12672523
Node: PEP 352 Exceptions as New-Style Classes2672565
Ref: whatsnew/2 5 pep-3522672759
Ref: 16072672759
Ref: whatsnew/2 5 pep-352-exceptions-as-new-style-classes2672759
Ref: 16082672759
Ref: PEP 352 Exceptions as New-Style Classes-Footnote-12675252
Node: PEP 353 Using ssize_t as the index type2675294
Ref: whatsnew/2 5 pep-3532675487
Ref: 16092675487
Ref: whatsnew/2 5 pep-353-using-ssize-t-as-the-index-type2675487
Ref: 160a2675487
Ref: PEP 353 Using ssize_t as the index type-Footnote-12678390
Ref: PEP 353 Using ssize_t as the index type-Footnote-22678432
Node: PEP 357 The ‘__index__’ method2678474
Ref: whatsnew/2 5 pep-3572678661
Ref: 160c2678661
Ref: whatsnew/2 5 pep-357-the-index-method2678661
Ref: 160d2678661
Ref: PEP 357 The ‘__index__’ method-Footnote-12680375
Node: Outras mudanças na linguagem<16>2680417
Ref: whatsnew/2 5 other-lang2680597
Ref: 16102680597
Ref: whatsnew/2 5 other-language-changes2680597
Ref: 16112680597
Ref: Outras mudanças na linguagem<16>-Footnote-12687571
Node: Interactive Interpreter Changes2687613
Ref: whatsnew/2 5 interactive2687740
Ref: 16172687740
Ref: whatsnew/2 5 interactive-interpreter-changes2687740
Ref: 16182687740
Node: Otimizações<16>2688517
Ref: whatsnew/2 5 optimizations2688644
Ref: 161a2688644
Ref: whatsnew/2 5 opts2688644
Ref: 161b2688644
Node: New Improved and Removed Modules2692460
Ref: whatsnew/2 5 modules2692643
Ref: 161c2692643
Ref: whatsnew/2 5 new-improved-and-removed-modules2692643
Ref: 161d2692643
Ref: New Improved and Removed Modules-Footnote-12717152
Ref: New Improved and Removed Modules-Footnote-22717194
Ref: New Improved and Removed Modules-Footnote-32717253
Node: The ctypes package2717312
Ref: whatsnew/2 5 module-ctypes2717431
Ref: 16272717431
Ref: whatsnew/2 5 the-ctypes-package2717431
Ref: 16282717431
Node: The ElementTree package2720714
Ref: whatsnew/2 5 module-etree2720861
Ref: 16292720861
Ref: whatsnew/2 5 the-elementtree-package2720861
Ref: 162a2720861
Node: The hashlib package2726169
Ref: whatsnew/2 5 module-hashlib2726317
Ref: 162b2726317
Ref: whatsnew/2 5 the-hashlib-package2726317
Ref: 162c2726317
Node: The sqlite3 package2727907
Ref: whatsnew/2 5 module-sqlite2728051
Ref: 162d2728051
Ref: whatsnew/2 5 the-sqlite3-package2728051
Ref: 162e2728051
Ref: The sqlite3 package-Footnote-12732132
Ref: The sqlite3 package-Footnote-22732174
Node: The wsgiref package2732216
Ref: whatsnew/2 5 module-wsgiref2732332
Ref: 162f2732332
Ref: whatsnew/2 5 the-wsgiref-package2732332
Ref: 16302732332
Ref: The wsgiref package-Footnote-12733320
Ref: The wsgiref package-Footnote-22733362
Node: Mudanças a construções e API C<10>2733404
Ref: whatsnew/2 5 build-and-c-api-changes2733575
Ref: 16312733575
Ref: whatsnew/2 5 build-api2733575
Ref: 16322733575
Ref: Mudanças a construções e API C<10>-Footnote-12740636
Ref: Mudanças a construções e API C<10>-Footnote-22740678
Ref: Mudanças a construções e API C<10>-Footnote-32740720
Node: Port-Specific Changes2740762
Ref: whatsnew/2 5 port-specific-changes2740857
Ref: 163c2740857
Ref: whatsnew/2 5 ports2740857
Ref: 163d2740857
Ref: Port-Specific Changes-Footnote-12741534
Node: Porting to Python 2 52741598
Ref: whatsnew/2 5 porting2741755
Ref: 163e2741755
Ref: whatsnew/2 5 porting-to-python-2-52741755
Ref: 163f2741755
Ref: Porting to Python 2 5-Footnote-12744584
Node: Reconhecimentos<3>2744626
Ref: whatsnew/2 5 acknowledgements2744737
Ref: 16402744737
Node: What’s New in Python 2 42745229
Ref: whatsnew/2 4 doc2745389
Ref: 16412745389
Ref: whatsnew/2 4 no-color2745389
Ref: 16422745389
Ref: whatsnew/2 4 what-s-new-in-python-2-42745389
Ref: 16432745389
Node: PEP 218 Built-In Set Objects2747525
Ref: whatsnew/2 4 pep-218-built-in-set-objects2747668
Ref: 16442747668
Ref: PEP 218 Built-In Set Objects-Footnote-12749909
Node: PEP 237 Unifying Long Integers and Integers2749951
Ref: whatsnew/2 4 pep-237-unifying-long-integers-and-integers2750132
Ref: 16452750132
Ref: PEP 237 Unifying Long Integers and Integers-Footnote-12751178
Node: PEP 289 Generator Expressions2751220
Ref: whatsnew/2 4 pep-289-generator-expressions2751409
Ref: 16462751409
Ref: PEP 289 Generator Expressions-Footnote-12753686
Node: PEP 292 Simpler String Substitutions2753728
Ref: whatsnew/2 4 pep-292-simpler-string-substitutions2753918
Ref: 16472753918
Ref: PEP 292 Simpler String Substitutions-Footnote-12755722
Node: PEP 318 Decorators for Functions and Methods2755764
Ref: whatsnew/2 4 pep-318-decorators-for-functions-and-methods2755950
Ref: 16482755950
Ref: PEP 318 Decorators for Functions and Methods-Footnote-12760484
Ref: PEP 318 Decorators for Functions and Methods-Footnote-22760526
Node: PEP 322 Reverse Iteration2760568
Ref: whatsnew/2 4 pep-322-reverse-iteration2760747
Ref: 164a2760747
Ref: PEP 322 Reverse Iteration-Footnote-12761714
Node: PEP 324 New subprocess Module2761756
Ref: whatsnew/2 4 pep-324-new-subprocess-module2761916
Ref: 164b2761916
Ref: PEP 324 New subprocess Module-Footnote-12765704
Node: PEP 327 Decimal Data Type2765746
Ref: whatsnew/2 4 pep-327-decimal-data-type2765907
Ref: 164d2765907
Node: Why is Decimal needed?2766479
Ref: whatsnew/2 4 why-is-decimal-needed2766588
Ref: 164e2766588
Node: The Decimal type2769172
Ref: whatsnew/2 4 the-decimal-type2769306
Ref: 164f2769306
Node: The Context type2772478
Ref: whatsnew/2 4 the-context-type2772581
Ref: 16502772581
Ref: The Context type-Footnote-12775193
Ref: The Context type-Footnote-22775235
Node: PEP 328 Multi-line Imports2775318
Ref: whatsnew/2 4 pep-328-multi-line-imports2775501
Ref: 16512775501
Ref: PEP 328 Multi-line Imports-Footnote-12777000
Node: PEP 331 Locale-Independent Float/String Conversions2777042
Ref: whatsnew/2 4 pep-331-locale-independent-float-string-conversions2777233
Ref: 16522777233
Ref: PEP 331 Locale-Independent Float/String Conversions-Footnote-12778965
Ref: PEP 331 Locale-Independent Float/String Conversions-Footnote-22779055
Node: Outras mudanças na linguagem<17>2779097
Ref: whatsnew/2 4 other-language-changes2779300
Ref: 16532779300
Ref: Outras mudanças na linguagem<17>-Footnote-12786297
Ref: Outras mudanças na linguagem<17>-Footnote-22786339
Ref: Outras mudanças na linguagem<17>-Footnote-32786381
Ref: Outras mudanças na linguagem<17>-Footnote-42786423
Ref: Outras mudanças na linguagem<17>-Footnote-52786465
Ref: Outras mudanças na linguagem<17>-Footnote-62786507
Node: Otimizações<17>2786549
Ref: whatsnew/2 4 optimizations2786636
Ref: 16552786636
Node: New Improved and Deprecated Modules<3>2789389
Ref: whatsnew/2 4 new-improved-and-deprecated-modules2789578
Ref: 16562789578
Ref: New Improved and Deprecated Modules<3>-Footnote-12806889
Node: cookielib2806948
Ref: whatsnew/2 4 cookielib2807051
Ref: 165a2807051
Node: doctest<5>2807991
Ref: whatsnew/2 4 doctest2808094
Ref: 165b2808094
Node: Mudanças a construções e API C<11>2810834
Ref: whatsnew/2 4 build-and-c-api-changes2811011
Ref: 16612811011
Node: Port-Specific Changes<2>2813650
Ref: whatsnew/2 4 port-specific-changes2813748
Ref: 16672813748
Node: Porting to Python 2 42813927
Ref: whatsnew/2 4 porting-to-python-2-42814084
Ref: 16682814084
Node: Reconhecimentos<4>2816052
Ref: whatsnew/2 4 acknowledgements2816163
Ref: 166a2816163
Ref: whatsnew/2 4 acks2816163
Ref: 166b2816163
Node: What’s New in Python 2 32816494
Ref: whatsnew/2 3 doc2816654
Ref: 166c2816654
Ref: whatsnew/2 3 no-color2816654
Ref: 166d2816654
Ref: whatsnew/2 3 what-s-new-in-python-2-32816654
Ref: 166e2816654
Node: PEP 218 A Standard Set Datatype2819724
Ref: whatsnew/2 3 pep-218-a-standard-set-datatype2819852
Ref: 16702819852
Ref: PEP 218 A Standard Set Datatype-Footnote-12822374
Node: PEP 255 Simple Generators2822416
Ref: whatsnew/2 3 pep-255-simple-generators2822582
Ref: 16752822582
Ref: whatsnew/2 3 section-generators2822582
Ref: 16762822582
Ref: PEP 255 Simple Generators-Footnote-12828771
Ref: PEP 255 Simple Generators-Footnote-22828813
Node: PEP 263 Source Code Encodings2828855
Ref: whatsnew/2 3 pep-263-source-code-encodings2829033
Ref: 16772829033
Ref: whatsnew/2 3 section-encodings2829033
Ref: 16782829033
Ref: PEP 263 Source Code Encodings-Footnote-12830250
Node: PEP 273 Importing Modules from ZIP Archives2830292
Ref: whatsnew/2 3 pep-273-importing-modules-from-zip-archives2830493
Ref: 16792830493
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-12832532
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-22832574
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-32832616
Node: PEP 277 Unicode file name support for Windows NT2832658
Ref: whatsnew/2 3 pep-277-unicode-file-name-support-for-windows-nt2832863
Ref: 167b2832863
Ref: PEP 277 Unicode file name support for Windows NT-Footnote-12834349
Node: PEP 278 Universal Newline Support2834391
Ref: whatsnew/2 3 pep-278-universal-newline-support2834570
Ref: 167d2834570
Ref: PEP 278 Universal Newline Support-Footnote-12836086
Node: PEP 279 enumerate2836128
Ref: whatsnew/2 3 pep-279-enumerate2836286
Ref: 167e2836286
Ref: whatsnew/2 3 section-enumerate2836286
Ref: 167f2836286
Ref: PEP 279 enumerate-Footnote-12837149
Node: PEP 282 The logging Package2837191
Ref: whatsnew/2 3 pep-282-the-logging-package2837338
Ref: 16802837338
Ref: PEP 282 The logging Package-Footnote-12842159
Ref: PEP 282 The logging Package-Footnote-22842201
Node: PEP 285 A Boolean Type2842243
Ref: whatsnew/2 3 pep-285-a-boolean-type2842411
Ref: 16862842411
Ref: whatsnew/2 3 section-bool2842411
Ref: 16872842411
Ref: PEP 285 A Boolean Type-Footnote-12844865
Ref: PEP 285 A Boolean Type-Footnote-22844907
Node: PEP 293 Codec Error Handling Callbacks2844949
Ref: whatsnew/2 3 pep-293-codec-error-handling-callbacks2845138
Ref: 16882845138
Ref: PEP 293 Codec Error Handling Callbacks-Footnote-12846694
Node: PEP 301 Package Index and Metadata for Distutils2846736
Ref: whatsnew/2 3 pep-301-package-index-and-metadata-for-distutils2846927
Ref: 168b2846927
Ref: whatsnew/2 3 section-pep3012846927
Ref: 168c2846927
Ref: PEP 301 Package Index and Metadata for Distutils-Footnote-12848576
Ref: PEP 301 Package Index and Metadata for Distutils-Footnote-22848612
Node: PEP 302 New Import Hooks2848654
Ref: whatsnew/2 3 pep-302-new-import-hooks2848836
Ref: 168d2848836
Ref: whatsnew/2 3 section-pep3022848836
Ref: 167a2848836
Ref: PEP 302 New Import Hooks-Footnote-12851448
Ref: PEP 302 New Import Hooks-Footnote-22851490
Ref: PEP 302 New Import Hooks-Footnote-32851532
Node: PEP 305 Comma-separated Files2851574
Ref: whatsnew/2 3 pep-305-comma-separated-files2851735
Ref: 168e2851735
Ref: whatsnew/2 3 section-pep3052851735
Ref: 168f2851735
Ref: PEP 305 Comma-separated Files-Footnote-12853221
Node: PEP 307 Pickle Enhancements2853263
Ref: whatsnew/2 3 pep-307-pickle-enhancements2853415
Ref: 16902853415
Ref: whatsnew/2 3 section-pep3072853415
Ref: 16912853415
Ref: PEP 307 Pickle Enhancements-Footnote-12855393
Ref: PEP 307 Pickle Enhancements-Footnote-22855435
Ref: PEP 307 Pickle Enhancements-Footnote-32855477
Node: Extended Slices2855519
Ref: whatsnew/2 3 extended-slices2855675
Ref: 16942855675
Ref: whatsnew/2 3 section-slices2855675
Ref: 16952855675
Node: Outras mudanças na linguagem<18>2859067
Ref: whatsnew/2 3 other-language-changes2859234
Ref: 16962859234
Ref: Outras mudanças na linguagem<18>-Footnote-12867054
Node: String Changes2867127
Ref: whatsnew/2 3 string-changes2867237
Ref: 169c2867237
Node: Otimizações<18>2869764
Ref: whatsnew/2 3 optimizations2869874
Ref: 16a12869874
Node: New Improved and Deprecated Modules<4>2871345
Ref: whatsnew/2 3 new-improved-and-deprecated-modules2871536
Ref: 16a32871536
Ref: New Improved and Deprecated Modules<4>-Footnote-12896329
Node: Date/Time Type2896369
Ref: whatsnew/2 3 date-time-type2896486
Ref: 16b72896486
Node: The optparse Module2898818
Ref: whatsnew/2 3 the-optparse-module2898935
Ref: 16ba2898935
Node: Pymalloc A Specialized Object Allocator2901009
Ref: whatsnew/2 3 pymalloc-a-specialized-object-allocator2901204
Ref: 16bd2901204
Ref: whatsnew/2 3 section-pymalloc2901204
Ref: 16be2901204
Node: Mudanças a construções e API C<12>2905111
Ref: whatsnew/2 3 build-and-c-api-changes2905304
Ref: 16c02905304
Node: Port-Specific Changes<3>2908759
Ref: whatsnew/2 3 port-specific-changes2908857
Ref: 16c62908857
Node: Outras alterações e correções<2>2910092
Ref: whatsnew/2 3 other-changes-and-fixes2910267
Ref: 16c72910267
Ref: whatsnew/2 3 section-other2910267
Ref: 16a22910267
Node: Porting to Python 2 32912788
Ref: whatsnew/2 3 porting-to-python-2-32912944
Ref: 16ca2912944
Node: Reconhecimentos<5>2915753
Ref: whatsnew/2 3 acknowledgements2915864
Ref: 16cb2915864
Ref: whatsnew/2 3 acks2915864
Ref: 16cc2915864
Node: What’s New in Python 2 22916483
Ref: whatsnew/2 2 doc2916643
Ref: 16cd2916643
Ref: whatsnew/2 2 no-color2916643
Ref: 16ce2916643
Ref: whatsnew/2 2 what-s-new-in-python-2-22916643
Ref: 16cf2916643
Node: Introdução2917405
Ref: whatsnew/2 2 introduction2917528
Ref: 16d02917528
Ref: Introdução-Footnote-12918498
Ref: Introdução-Footnote-22918547
Node: PEPs 252 and 253 Type and Class Changes2918596
Ref: whatsnew/2 2 peps-252-and-253-type-and-class-changes2918745
Ref: 16d12918745
Node: Old and New Classes2922185
Ref: whatsnew/2 2 old-and-new-classes2922300
Ref: 16d42922300
Ref: Old and New Classes-Footnote-12924706
Node: Descriptors2924748
Ref: whatsnew/2 2 descriptors2924909
Ref: 16d52924909
Node: Multiple Inheritance The Diamond Rule2928776
Ref: whatsnew/2 2 multiple-inheritance-the-diamond-rule2928934
Ref: 16d72928934
Ref: Multiple Inheritance The Diamond Rule-Footnote-12931819
Node: Attribute Access2931861
Ref: whatsnew/2 2 attribute-access2932021
Ref: 16d82932021
Node: Related Links2935823
Ref: whatsnew/2 2 related-links2935937
Ref: 16da2935937
Ref: whatsnew/2 2 sect-rellinks2935937
Ref: 16d32935937
Ref: Related Links-Footnote-12937419
Ref: Related Links-Footnote-22937461
Ref: Related Links-Footnote-32937503
Ref: Related Links-Footnote-42937545
Ref: Related Links-Footnote-52937587
Node: PEP 234 Iterators2937629
Ref: whatsnew/2 2 pep-234-iterators2937794
Ref: 16dc2937794
Ref: PEP 234 Iterators-Footnote-12942678
Node: PEP 255 Simple Generators<2>2942720
Ref: whatsnew/2 2 pep-255-simple-generators2942892
Ref: 16df2942892
Ref: PEP 255 Simple Generators<2>-Footnote-12948956
Ref: PEP 255 Simple Generators<2>-Footnote-22948998
Node: PEP 237 Unifying Long Integers and Integers<2>2949040
Ref: whatsnew/2 2 pep-237-unifying-long-integers-and-integers2949233
Ref: 16e02949233
Ref: PEP 237 Unifying Long Integers and Integers<2>-Footnote-12950963
Node: PEP 238 Changing the Division Operator2951005
Ref: whatsnew/2 2 pep-238-changing-the-division-operator2951185
Ref: 16e12951185
Ref: PEP 238 Changing the Division Operator-Footnote-12954845
Ref: PEP 238 Changing the Division Operator-Footnote-22954887
Ref: PEP 238 Changing the Division Operator-Footnote-32954929
Node: Unicode Changes2954971
Ref: whatsnew/2 2 unicode-changes2955126
Ref: 16e32955126
Ref: Unicode Changes-Footnote-12957763
Ref: Unicode Changes-Footnote-22957805
Node: PEP 227 Nested Scopes2957847
Ref: whatsnew/2 2 pep-227-nested-scopes2957996
Ref: 16e42957996
Ref: PEP 227 Nested Scopes-Footnote-12962347
Node: Módulos novos ou aprimorados<2>2962389
Ref: whatsnew/2 2 new-and-improved-modules2962552
Ref: 16e52962552
Ref: Módulos novos ou aprimorados<2>-Footnote-12969271
Ref: Módulos novos ou aprimorados<2>-Footnote-22969330
Ref: Módulos novos ou aprimorados<2>-Footnote-32969389
Ref: Módulos novos ou aprimorados<2>-Footnote-42969448
Ref: Módulos novos ou aprimorados<2>-Footnote-52969507
Node: Interpreter Changes and Fixes2969565
Ref: whatsnew/2 2 interpreter-changes-and-fixes2969743
Ref: 16ea2969743
Node: Outras alterações e correções<3>2974514
Ref: whatsnew/2 2 other-changes-and-fixes2974678
Ref: 16fa2974678
Ref: Outras alterações e correções<3>-Footnote-12981368
Node: Reconhecimentos<6>2981410
Ref: whatsnew/2 2 acknowledgements2981536
Ref: 16fd2981536
Node: What’s New in Python 2 12982135
Ref: whatsnew/2 1 doc2982295
Ref: 16fe2982295
Ref: whatsnew/2 1 no-color2982295
Ref: 16ff2982295
Ref: whatsnew/2 1 what-s-new-in-python-2-12982295
Ref: 17002982295
Node: Introdução<2>2983327
Ref: whatsnew/2 1 introduction2983438
Ref: 17012983438
Node: PEP 227 Nested Scopes<2>2984532
Ref: whatsnew/2 1 pep-227-nested-scopes2984681
Ref: 17022984681
Ref: PEP 227 Nested Scopes<2>-Footnote-12989052
Ref: PEP 227 Nested Scopes<2>-Footnote-22989094
Ref: PEP 227 Nested Scopes<2>-Footnote-32989136
Node: PEP 236 __future__ Directives2989178
Ref: whatsnew/2 1 pep-236-future-directives2989336
Ref: 17032989336
Ref: PEP 236 __future__ Directives-Footnote-12990578
Node: PEP 207 Rich Comparisons2990620
Ref: whatsnew/2 1 pep-207-rich-comparisons2990779
Ref: 17042990779
Ref: PEP 207 Rich Comparisons-Footnote-12994198
Ref: PEP 207 Rich Comparisons-Footnote-22994240
Node: PEP 230 Warning Framework2994282
Ref: whatsnew/2 1 pep-230-warning-framework2994436
Ref: 17062994436
Ref: PEP 230 Warning Framework-Footnote-12997722
Ref: PEP 230 Warning Framework-Footnote-22997764
Node: PEP 229 New Build System2997806
Ref: whatsnew/2 1 pep-229-new-build-system2997959
Ref: 17082997959
Ref: PEP 229 New Build System-Footnote-12999884
Node: PEP 205 Weak References2999926
Ref: whatsnew/2 1 pep-205-weak-references3000081
Ref: 17093000081
Ref: PEP 205 Weak References-Footnote-13003199
Node: PEP 232 Function Attributes3003241
Ref: whatsnew/2 1 pep-232-function-attributes3003427
Ref: 170a3003427
Ref: PEP 232 Function Attributes-Footnote-13004952
Node: PEP 235 Importing Modules on Case-Insensitive Platforms3004994
Ref: whatsnew/2 1 pep-235-importing-modules-on-case-insensitive-platforms3005189
Ref: 170b3005189
Node: PEP 217 Interactive Display Hook3006092
Ref: whatsnew/2 1 pep-217-interactive-display-hook3006286
Ref: 170c3006286
Ref: PEP 217 Interactive Display Hook-Footnote-13007220
Node: PEP 208 New Coercion Model3007262
Ref: whatsnew/2 1 pep-208-new-coercion-model3007436
Ref: 170e3007436
Ref: PEP 208 New Coercion Model-Footnote-13009063
Node: PEP 241 Metadata in Python Packages3009105
Ref: whatsnew/2 1 pep-241-metadata-in-python-packages3009279
Ref: 170f3009279
Ref: PEP 241 Metadata in Python Packages-Footnote-13011401
Ref: PEP 241 Metadata in Python Packages-Footnote-23011483
Ref: PEP 241 Metadata in Python Packages-Footnote-33011525
Ref: PEP 241 Metadata in Python Packages-Footnote-43011567
Ref: PEP 241 Metadata in Python Packages-Footnote-53011609
Node: Módulos novos ou aprimorados<3>3011651
Ref: whatsnew/2 1 new-and-improved-modules3011835
Ref: 17103011835
Node: Outras alterações e correções<4>3017701
Ref: whatsnew/2 1 other-changes-and-fixes3017868
Ref: 17113017868
Node: Reconhecimentos<7>3023839
Ref: whatsnew/2 1 acknowledgements3023965
Ref: 17153023965
Node: What’s New in Python 2 03024254
Ref: whatsnew/2 0 doc3024397
Ref: 17163024397
Ref: whatsnew/2 0 no-color3024397
Ref: 17173024397
Ref: whatsnew/2 0 what-s-new-in-python-2-03024397
Ref: 17183024397
Node: Introdução<3>3025092
Ref: whatsnew/2 0 introduction3025201
Ref: 17193025201
Node: What About Python 1 6?3026083
Ref: whatsnew/2 0 what-about-python-1-63026224
Ref: 171a3026224
Node: New Development Process3027465
Ref: whatsnew/2 0 new-development-process3027601
Ref: 171b3027601
Ref: New Development Process-Footnote-13032741
Ref: New Development Process-Footnote-23032783
Ref: New Development Process-Footnote-33032825
Node: Unicode<2>3032867
Ref: whatsnew/2 0 unicode3033003
Ref: 171c3033003
Ref: Unicode<2>-Footnote-13039173
Node: Compreensões de lista3039215
Ref: whatsnew/2 0 list-comprehensions3039348
Ref: 171d3039348
Node: Augmented Assignment3043085
Ref: whatsnew/2 0 augmented-assignment3043222
Ref: 171e3043222
Node: String Methods3044752
Ref: whatsnew/2 0 string-methods3044895
Ref: 171f3044895
Node: Garbage Collection of Cycles3046748
Ref: whatsnew/2 0 garbage-collection-of-cycles3046889
Ref: 17203046889
Node: Other Core Changes3050236
Ref: whatsnew/2 0 other-core-changes3050377
Ref: 17213050377
Node: Minor Language Changes3050662
Ref: whatsnew/2 0 minor-language-changes3050777
Ref: 17223050777
Node: Changes to Built-in Functions3055862
Ref: whatsnew/2 0 changes-to-built-in-functions3055977
Ref: 17253055977
Node: Porting to 2 03058267
Ref: whatsnew/2 0 porting-to-2-03058407
Ref: 17263058407
Node: Extending/Embedding Changes3063751
Ref: whatsnew/2 0 extending-embedding-changes3063913
Ref: 17293063913
Node: Distutils Making Modules Easy to Install3067765
Ref: whatsnew/2 0 distutils-making-modules-easy-to-install3067924
Ref: 172e3067924
Node: XML Modules3071284
Ref: whatsnew/2 0 xml-modules3071430
Ref: 172f3071430
Node: SAX2 Support3072329
Ref: whatsnew/2 0 sax2-support3072409
Ref: 17303072409
Node: DOM Support3074069
Ref: whatsnew/2 0 dom-support3074179
Ref: 17343074179
Node: Relationship to PyXML3077007
Ref: whatsnew/2 0 relationship-to-pyxml3077096
Ref: 17353077096
Node: Module changes3078386
Ref: whatsnew/2 0 module-changes3078510
Ref: 17363078510
Node: Novos módulos<13>3080996
Ref: whatsnew/2 0 new-modules3081126
Ref: 17373081126
Node: IDLE Improvements3085133
Ref: whatsnew/2 0 idle-improvements3085279
Ref: 17383085279
Node: Deleted and Deprecated Modules3086414
Ref: whatsnew/2 0 deleted-and-deprecated-modules3086560
Ref: 17393086560
Node: Reconhecimentos<8>3087312
Ref: whatsnew/2 0 acknowledgements3087432
Ref: 173a3087432
Ref: Reconhecimentos<8>-Footnote-13088036
Ref: Reconhecimentos<8>-Footnote-23088076
Node: Changelog3088140
Ref: whatsnew/changelog doc3088248
Ref: 173b3088248
Ref: whatsnew/changelog changelog3088248
Ref: 1423088248
Ref: whatsnew/changelog id13088248
Ref: 173c3088248
Ref: whatsnew/changelog no-color3088248
Ref: 173d3088248
Node: Python seguinte3094195
Ref: whatsnew/changelog python-next3094284
Ref: 173e3094284
Node: Ferramentas/Demos3094497
Ref: whatsnew/changelog tools-demos3094581
Ref: 173f3094581
Ref: Ferramentas/Demos-Footnote-13095069
Ref: Ferramentas/Demos-Footnote-23095125
Ref: Ferramentas/Demos-Footnote-33095181
Node: Testes3095237
Ref: whatsnew/changelog tests3095340
Ref: 17403095340
Ref: Testes-Footnote-13095551
Node: Segurança3095607
Ref: whatsnew/changelog security3095703
Ref: 17413095703
Ref: Segurança-Footnote-13096197
Ref: Segurança-Footnote-23096253
Node: Biblioteca3096309
Ref: whatsnew/changelog library3096406
Ref: 17443096406
Ref: Biblioteca-Footnote-13104618
Ref: Biblioteca-Footnote-23104674
Ref: Biblioteca-Footnote-33104730
Ref: Biblioteca-Footnote-43104786
Ref: Biblioteca-Footnote-53104842
Ref: Biblioteca-Footnote-63104897
Ref: Biblioteca-Footnote-73104953
Ref: Biblioteca-Footnote-83104992
Ref: Biblioteca-Footnote-93105033
Ref: Biblioteca-Footnote-103105089
Ref: Biblioteca-Footnote-113105146
Ref: Biblioteca-Footnote-123105203
Ref: Biblioteca-Footnote-133105260
Ref: Biblioteca-Footnote-143105317
Ref: Biblioteca-Footnote-153105374
Ref: Biblioteca-Footnote-163105431
Ref: Biblioteca-Footnote-173105488
Ref: Biblioteca-Footnote-183105544
Ref: Biblioteca-Footnote-193105601
Ref: Biblioteca-Footnote-203105658
Ref: Biblioteca-Footnote-213105715
Ref: Biblioteca-Footnote-223105771
Ref: Biblioteca-Footnote-233105828
Ref: Biblioteca-Footnote-243105885
Ref: Biblioteca-Footnote-253105942
Ref: Biblioteca-Footnote-263105999
Ref: Biblioteca-Footnote-273106056
Ref: Biblioteca-Footnote-283106113
Ref: Biblioteca-Footnote-293106170
Ref: Biblioteca-Footnote-303106227
Ref: Biblioteca-Footnote-313106283
Ref: Biblioteca-Footnote-323106339
Ref: Biblioteca-Footnote-333106396
Ref: Biblioteca-Footnote-343106453
Ref: Biblioteca-Footnote-353106510
Ref: Biblioteca-Footnote-363106566
Ref: Biblioteca-Footnote-373106622
Ref: Biblioteca-Footnote-383106679
Ref: Biblioteca-Footnote-393106736
Ref: Biblioteca-Footnote-403106793
Ref: Biblioteca-Footnote-413106849
Ref: Biblioteca-Footnote-423106906
Ref: Biblioteca-Footnote-433106963
Ref: Biblioteca-Footnote-443107020
Ref: Biblioteca-Footnote-453107077
Ref: Biblioteca-Footnote-463107134
Ref: Biblioteca-Footnote-473107191
Ref: Biblioteca-Footnote-483107248
Ref: Biblioteca-Footnote-493107305
Ref: Biblioteca-Footnote-503107361
Ref: Biblioteca-Footnote-513107427
Node: IDLE<3>3107493
Ref: whatsnew/changelog idle3107599
Ref: 17543107599
Ref: IDLE<3>-Footnote-13107777
Node: Núcleo e embutidos3107833
Ref: whatsnew/changelog core-and-builtins3107941
Ref: 17553107941
Ref: Núcleo e embutidos-Footnote-13110330
Ref: Núcleo e embutidos-Footnote-23110386
Ref: Núcleo e embutidos-Footnote-33110442
Ref: Núcleo e embutidos-Footnote-43110498
Ref: Núcleo e embutidos-Footnote-53110554
Ref: Núcleo e embutidos-Footnote-63110610
Ref: Núcleo e embutidos-Footnote-73110666
Ref: Núcleo e embutidos-Footnote-83110721
Ref: Núcleo e embutidos-Footnote-93110777
Ref: Núcleo e embutidos-Footnote-103110833
Ref: Núcleo e embutidos-Footnote-113110890
Ref: Núcleo e embutidos-Footnote-123110947
Ref: Núcleo e embutidos-Footnote-133111003
Ref: Núcleo e embutidos-Footnote-143111060
Node: Construção3111117
Ref: whatsnew/changelog build3111209
Ref: 17593111209
Ref: Construção-Footnote-13111806
Ref: Construção-Footnote-23111862
Node: Python 3 14 0 final3111918
Ref: whatsnew/changelog python-3-14-0-final3112055
Ref: 175a3112055
Node: macOS3112271
Ref: whatsnew/changelog macos3112348
Ref: 175b3112348
Ref: macOS-Footnote-13112579
Ref: macOS-Footnote-23112635
Node: Windows3112691
Ref: whatsnew/changelog windows3112797
Ref: 175c3112797
Ref: Windows-Footnote-13112949
Node: Ferramentas/Demos<2>3113005
Ref: whatsnew/changelog id23113119
Ref: 175d3113119
Ref: Ferramentas/Demos<2>-Footnote-13113827
Ref: Ferramentas/Demos<2>-Footnote-23113883
Ref: Ferramentas/Demos<2>-Footnote-33113939
Node: Segurança<2>3113995
Ref: whatsnew/changelog id33114115
Ref: 175e3114115
Ref: Segurança<2>-Footnote-13114471
Node: Biblioteca<2>3114527
Ref: whatsnew/changelog id43114618
Ref: 17603114618
Ref: Biblioteca<2>-Footnote-13114755
Node: Python 3 14 0 candidato a lançamento 33114811
Ref: whatsnew/changelog python-3-14-0-release-candidate-33114972
Ref: 17613114972
Node: Windows<2>3115282
Ref: whatsnew/changelog id53115397
Ref: 17623115397
Ref: Windows<2>-Footnote-13115571
Node: Ferramentas/Demos<3>3115627
Ref: whatsnew/changelog id63115764
Ref: 17633115764
Ref: Ferramentas/Demos<3>-Footnote-13116059
Node: Segurança<3>3116115
Ref: whatsnew/changelog id73116255
Ref: 17643116255
Ref: Segurança<3>-Footnote-13116780
Node: Biblioteca<3>3116836
Ref: whatsnew/changelog id83116978
Ref: 17653116978
Ref: Biblioteca<3>-Footnote-13119656
Ref: Biblioteca<3>-Footnote-23119712
Ref: Biblioteca<3>-Footnote-33119768
Ref: Biblioteca<3>-Footnote-43119824
Ref: Biblioteca<3>-Footnote-53119880
Ref: Biblioteca<3>-Footnote-63119936
Ref: Biblioteca<3>-Footnote-73119992
Ref: Biblioteca<3>-Footnote-83120048
Ref: Biblioteca<3>-Footnote-93120103
Ref: Biblioteca<3>-Footnote-103120159
Ref: Biblioteca<3>-Footnote-113120216
Ref: Biblioteca<3>-Footnote-123120273
Ref: Biblioteca<3>-Footnote-133120329
Ref: Biblioteca<3>-Footnote-143120386
Ref: Biblioteca<3>-Footnote-153120443
Node: Núcleo e embutidos<2>3120500
Ref: whatsnew/changelog id93120620
Ref: 17693120620
Ref: Núcleo e embutidos<2>-Footnote-13122497
Ref: Núcleo e embutidos<2>-Footnote-23122552
Ref: Núcleo e embutidos<2>-Footnote-33122608
Ref: Núcleo e embutidos<2>-Footnote-43122664
Ref: Núcleo e embutidos<2>-Footnote-53122720
Ref: Núcleo e embutidos<2>-Footnote-63122776
Ref: Núcleo e embutidos<2>-Footnote-73122832
Ref: Núcleo e embutidos<2>-Footnote-83122888
Ref: Núcleo e embutidos<2>-Footnote-93122944
Ref: Núcleo e embutidos<2>-Footnote-103123000
Ref: Núcleo e embutidos<2>-Footnote-113123057
Node: Python 3 14 0 candidato a lançamento 23123114
Ref: whatsnew/changelog python-3-14-0-release-candidate-23123295
Ref: 176c3123295
Node: macOS<2>3123632
Ref: whatsnew/changelog id103123735
Ref: 176d3123735
Ref: macOS<2>-Footnote-13124178
Ref: macOS<2>-Footnote-23124234
Node: Windows<3>3124290
Ref: whatsnew/changelog id113124415
Ref: 176e3124415
Ref: Windows<3>-Footnote-13124590
Node: Biblioteca<4>3124646
Ref: whatsnew/changelog id123124780
Ref: 176f3124780
Ref: Biblioteca<4>-Footnote-13126533
Ref: Biblioteca<4>-Footnote-23126589
Ref: Biblioteca<4>-Footnote-33126645
Ref: Biblioteca<4>-Footnote-43126701
Ref: Biblioteca<4>-Footnote-53126757
Ref: Biblioteca<4>-Footnote-63126813
Ref: Biblioteca<4>-Footnote-73126869
Ref: Biblioteca<4>-Footnote-83126925
Ref: Biblioteca<4>-Footnote-93126981
Node: Documentação<2>3127037
Ref: whatsnew/changelog documentation3127183
Ref: 17713127183
Ref: Documentação<2>-Footnote-13127362
Node: Núcleo e embutidos<3>3127418
Ref: whatsnew/changelog id133127556
Ref: 17723127556
Ref: Núcleo e embutidos<3>-Footnote-13129430
Ref: Núcleo e embutidos<3>-Footnote-23129486
Ref: Núcleo e embutidos<3>-Footnote-33129542
Ref: Núcleo e embutidos<3>-Footnote-43129598
Ref: Núcleo e embutidos<3>-Footnote-53129654
Ref: Núcleo e embutidos<3>-Footnote-63129710
Ref: Núcleo e embutidos<3>-Footnote-73129766
Node: API C3129822
Ref: whatsnew/changelog c-api3129958
Ref: 17733129958
Ref: API C-Footnote-13130174
Node: Construção<2>3130230
Ref: whatsnew/changelog id143130335
Ref: 17753130335
Ref: Construção<2>-Footnote-13130469
Node: Python 3 14 0 candidato a lançamento 13130525
Ref: whatsnew/changelog python-3-14-0-release-candidate-13130687
Ref: 17763130687
Node: Ferramentas/Demos<4>3131026
Ref: whatsnew/changelog id153131144
Ref: 17773131144
Ref: Ferramentas/Demos<4>-Footnote-13131344
Node: Segurança<4>3131400
Ref: whatsnew/changelog id163131540
Ref: 17783131540
Ref: Segurança<4>-Footnote-13131957
Ref: Segurança<4>-Footnote-23132013
Node: Biblioteca<5>3132069
Ref: whatsnew/changelog id173132211
Ref: 17793132211
Ref: Biblioteca<5>-Footnote-13134186
Ref: Biblioteca<5>-Footnote-23134242
Ref: Biblioteca<5>-Footnote-33134298
Ref: Biblioteca<5>-Footnote-43134354
Ref: Biblioteca<5>-Footnote-53134410
Ref: Biblioteca<5>-Footnote-63134466
Ref: Biblioteca<5>-Footnote-73134522
Ref: Biblioteca<5>-Footnote-83134577
Ref: Biblioteca<5>-Footnote-93134633
Ref: Biblioteca<5>-Footnote-103134689
Ref: Biblioteca<5>-Footnote-113134746
Ref: Biblioteca<5>-Footnote-123134803
Ref: Biblioteca<5>-Footnote-133134860
Node: Núcleo e embutidos<4>3134917
Ref: whatsnew/changelog id183135054
Ref: 177a3135054
Ref: Núcleo e embutidos<4>-Footnote-13137151
Ref: Núcleo e embutidos<4>-Footnote-23137207
Ref: Núcleo e embutidos<4>-Footnote-33137263
Ref: Núcleo e embutidos<4>-Footnote-43137319
Ref: Núcleo e embutidos<4>-Footnote-53137375
Ref: Núcleo e embutidos<4>-Footnote-63137431
Ref: Núcleo e embutidos<4>-Footnote-73137487
Ref: Núcleo e embutidos<4>-Footnote-83137543
Ref: Núcleo e embutidos<4>-Footnote-93137585
Ref: Núcleo e embutidos<4>-Footnote-103137641
Ref: Núcleo e embutidos<4>-Footnote-113137698
Ref: Núcleo e embutidos<4>-Footnote-123137755
Ref: Núcleo e embutidos<4>-Footnote-133137811
Node: API C<2>3137868
Ref: whatsnew/changelog id193138007
Ref: 177b3138007
Ref: API C<2>-Footnote-13138486
Ref: API C<2>-Footnote-23138542
Ref: API C<2>-Footnote-33138598
Node: Construção<3>3138654
Ref: whatsnew/changelog id203138762
Ref: 177d3138762
Ref: Construção<3>-Footnote-13138967
Node: Python 3 14 0 beta 43139023
Ref: whatsnew/changelog python-3-14-0-beta-43139166
Ref: 177e3139166
Node: Ferramentas/Demos<5>3139526
Ref: whatsnew/changelog id213139621
Ref: 177f3139621
Ref: Ferramentas/Demos<5>-Footnote-13140098
Ref: Ferramentas/Demos<5>-Footnote-23140154
Node: Testes<2>3140210
Ref: whatsnew/changelog id223140327
Ref: 17803140327
Ref: Testes<2>-Footnote-13140641
Ref: Testes<2>-Footnote-23140697
Node: Segurança<5>3140753
Ref: whatsnew/changelog id233140863
Ref: 17813140863
Ref: Segurança<5>-Footnote-13142954
Ref: Segurança<5>-Footnote-23143010
Ref: Segurança<5>-Footnote-33143066
Ref: Segurança<5>-Footnote-43143122
Node: Biblioteca<6>3143178
Ref: whatsnew/changelog id243143296
Ref: 17823143296
Ref: Biblioteca<6>-Footnote-13148443
Ref: Biblioteca<6>-Footnote-23148499
Ref: Biblioteca<6>-Footnote-33148555
Ref: Biblioteca<6>-Footnote-43148610
Ref: Biblioteca<6>-Footnote-53148666
Ref: Biblioteca<6>-Footnote-63148722
Ref: Biblioteca<6>-Footnote-73148777
Ref: Biblioteca<6>-Footnote-83148832
Ref: Biblioteca<6>-Footnote-93148888
Ref: Biblioteca<6>-Footnote-103148944
Ref: Biblioteca<6>-Footnote-113149001
Ref: Biblioteca<6>-Footnote-123149058
Ref: Biblioteca<6>-Footnote-133149115
Ref: Biblioteca<6>-Footnote-143149172
Ref: Biblioteca<6>-Footnote-153149229
Ref: Biblioteca<6>-Footnote-163149286
Ref: Biblioteca<6>-Footnote-173149343
Ref: Biblioteca<6>-Footnote-183149400
Ref: Biblioteca<6>-Footnote-193149457
Ref: Biblioteca<6>-Footnote-203149514
Ref: Biblioteca<6>-Footnote-213149571
Ref: Biblioteca<6>-Footnote-223149628
Ref: Biblioteca<6>-Footnote-233149685
Ref: Biblioteca<6>-Footnote-243149742
Ref: Biblioteca<6>-Footnote-253149798
Ref: Biblioteca<6>-Footnote-263149854
Node: Documentação<3>3149911
Ref: whatsnew/changelog id253150038
Ref: 17873150038
Ref: Documentação<3>-Footnote-13150239
Node: Núcleo e embutidos<5>3150295
Ref: whatsnew/changelog id263150417
Ref: 17883150417
Ref: Núcleo e embutidos<5>-Footnote-13152057
Ref: Núcleo e embutidos<5>-Footnote-23152113
Ref: Núcleo e embutidos<5>-Footnote-33152168
Ref: Núcleo e embutidos<5>-Footnote-43152224
Ref: Núcleo e embutidos<5>-Footnote-53152280
Ref: Núcleo e embutidos<5>-Footnote-63152336
Ref: Núcleo e embutidos<5>-Footnote-73152392
Ref: Núcleo e embutidos<5>-Footnote-83152448
Ref: Núcleo e embutidos<5>-Footnote-93152504
Node: API C<3>3152560
Ref: whatsnew/changelog id273152680
Ref: 17893152680
Ref: API C<3>-Footnote-13152861
Node: Construção<4>3152917
Ref: whatsnew/changelog id283153006
Ref: 178a3153006
Ref: Construção<4>-Footnote-13153203
Node: Python 3 14 0 beta 33153259
Ref: whatsnew/changelog python-3-14-0-beta-33153383
Ref: 178b3153383
Node: Windows<4>3153723
Ref: whatsnew/changelog id293153808
Ref: 178c3153808
Ref: Windows<4>-Footnote-13154086
Node: Testes<3>3154142
Ref: whatsnew/changelog id303154249
Ref: 178d3154249
Ref: Testes<3>-Footnote-13154638
Ref: Testes<3>-Footnote-23154694
Ref: Testes<3>-Footnote-33154750
Node: Segurança<6>3154806
Ref: whatsnew/changelog id313154916
Ref: 178e3154916
Ref: Segurança<6>-Footnote-13155651
Ref: Segurança<6>-Footnote-23155707
Ref: Segurança<6>-Footnote-33155763
Ref: Segurança<6>-Footnote-43155819
Ref: Segurança<6>-Footnote-53155874
Ref: Segurança<6>-Footnote-63155929
Node: Biblioteca<7>3155984
Ref: whatsnew/changelog id323156102
Ref: 178f3156102
Ref: Biblioteca<7>-Footnote-13160838
Ref: Biblioteca<7>-Footnote-23160893
Ref: Biblioteca<7>-Footnote-33160949
Ref: Biblioteca<7>-Footnote-43161005
Ref: Biblioteca<7>-Footnote-53161061
Ref: Biblioteca<7>-Footnote-63161117
Ref: Biblioteca<7>-Footnote-73161173
Ref: Biblioteca<7>-Footnote-83161229
Ref: Biblioteca<7>-Footnote-93161285
Ref: Biblioteca<7>-Footnote-103161341
Ref: Biblioteca<7>-Footnote-113161417
Ref: Biblioteca<7>-Footnote-123161474
Ref: Biblioteca<7>-Footnote-133161531
Ref: Biblioteca<7>-Footnote-143161588
Ref: Biblioteca<7>-Footnote-153161631
Ref: Biblioteca<7>-Footnote-163161688
Ref: Biblioteca<7>-Footnote-173161745
Ref: Biblioteca<7>-Footnote-183161802
Ref: Biblioteca<7>-Footnote-193161859
Ref: Biblioteca<7>-Footnote-203161916
Ref: Biblioteca<7>-Footnote-213161973
Ref: Biblioteca<7>-Footnote-223162033
Ref: Biblioteca<7>-Footnote-233162090
Ref: Biblioteca<7>-Footnote-243162147
Ref: Biblioteca<7>-Footnote-253162204
Ref: Biblioteca<7>-Footnote-263162261
Ref: Biblioteca<7>-Footnote-273162318
Ref: Biblioteca<7>-Footnote-283162375
Ref: Biblioteca<7>-Footnote-293162432
Node: Documentação<4>3162489
Ref: whatsnew/changelog id333162616
Ref: 17963162616
Ref: Documentação<4>-Footnote-13162976
Ref: Documentação<4>-Footnote-23163032
Node: Núcleo e embutidos<6>3163097
Ref: whatsnew/changelog id343163219
Ref: 17973163219
Ref: Núcleo e embutidos<6>-Footnote-13166332
Ref: Núcleo e embutidos<6>-Footnote-23166388
Ref: Núcleo e embutidos<6>-Footnote-33166444
Ref: Núcleo e embutidos<6>-Footnote-43166500
Ref: Núcleo e embutidos<6>-Footnote-53166556
Ref: Núcleo e embutidos<6>-Footnote-63166612
Ref: Núcleo e embutidos<6>-Footnote-73166668
Ref: Núcleo e embutidos<6>-Footnote-83166724
Ref: Núcleo e embutidos<6>-Footnote-93166780
Ref: Núcleo e embutidos<6>-Footnote-103166822
Ref: Núcleo e embutidos<6>-Footnote-113166879
Ref: Núcleo e embutidos<6>-Footnote-123166936
Ref: Núcleo e embutidos<6>-Footnote-133166993
Ref: Núcleo e embutidos<6>-Footnote-143167050
Ref: Núcleo e embutidos<6>-Footnote-153167107
Node: API C<4>3167164
Ref: whatsnew/changelog id353167284
Ref: 17983167284
Ref: API C<4>-Footnote-13168151
Ref: API C<4>-Footnote-23168207
Ref: API C<4>-Footnote-33168263
Node: Construção<5>3168319
Ref: whatsnew/changelog id363168408
Ref: 179b3168408
Ref: Construção<5>-Footnote-13169321
Ref: Construção<5>-Footnote-23169377
Ref: Construção<5>-Footnote-33169433
Ref: Construção<5>-Footnote-43169489
Ref: Construção<5>-Footnote-53169545
Ref: Construção<5>-Footnote-63169601
Node: Python 3 14 0 beta 23169643
Ref: whatsnew/changelog python-3-14-0-beta-23169767
Ref: 179d3169767
Node: Windows<5>3170113
Ref: whatsnew/changelog id373170209
Ref: 179e3170209
Ref: Windows<5>-Footnote-13171305
Ref: Windows<5>-Footnote-23171361
Ref: Windows<5>-Footnote-33171416
Ref: Windows<5>-Footnote-43171472
Node: Ferramentas/Demos<6>3171528
Ref: whatsnew/changelog id383171642
Ref: 179f3171642
Ref: Ferramentas/Demos<6>-Footnote-13171880
Node: Testes<4>3171936
Ref: whatsnew/changelog id393172053
Ref: 17a03172053
Ref: Testes<4>-Footnote-13172752
Ref: Testes<4>-Footnote-23172808
Ref: Testes<4>-Footnote-33172864
Node: Segurança<7>3172920
Ref: whatsnew/changelog id403173030
Ref: 17a13173030
Ref: Segurança<7>-Footnote-13173453
Ref: Segurança<7>-Footnote-23173509
Node: Biblioteca<8>3173565
Ref: whatsnew/changelog id413173688
Ref: 17a23173688
Ref: Biblioteca<8>-Footnote-13182267
Ref: Biblioteca<8>-Footnote-23182323
Ref: Biblioteca<8>-Footnote-33182378
Ref: Biblioteca<8>-Footnote-43182434
Ref: Biblioteca<8>-Footnote-53182490
Ref: Biblioteca<8>-Footnote-63182546
Ref: Biblioteca<8>-Footnote-73182602
Ref: Biblioteca<8>-Footnote-83182657
Ref: Biblioteca<8>-Footnote-93182713
Ref: Biblioteca<8>-Footnote-103182768
Ref: Biblioteca<8>-Footnote-113182825
Ref: Biblioteca<8>-Footnote-123182882
Ref: Biblioteca<8>-Footnote-133182939
Ref: Biblioteca<8>-Footnote-143182996
Ref: Biblioteca<8>-Footnote-153183052
Ref: Biblioteca<8>-Footnote-163183109
Ref: Biblioteca<8>-Footnote-173183166
Ref: Biblioteca<8>-Footnote-183183223
Ref: Biblioteca<8>-Footnote-193183280
Ref: Biblioteca<8>-Footnote-203183337
Ref: Biblioteca<8>-Footnote-213183394
Ref: Biblioteca<8>-Footnote-223183451
Ref: Biblioteca<8>-Footnote-233183508
Ref: Biblioteca<8>-Footnote-243183564
Ref: Biblioteca<8>-Footnote-253183621
Ref: Biblioteca<8>-Footnote-263183678
Ref: Biblioteca<8>-Footnote-273183735
Ref: Biblioteca<8>-Footnote-283183792
Ref: Biblioteca<8>-Footnote-293183849
Ref: Biblioteca<8>-Footnote-303183906
Ref: Biblioteca<8>-Footnote-313183962
Ref: Biblioteca<8>-Footnote-323184019
Ref: Biblioteca<8>-Footnote-333184076
Ref: Biblioteca<8>-Footnote-343184133
Ref: Biblioteca<8>-Footnote-353184190
Ref: Biblioteca<8>-Footnote-363184233
Ref: Biblioteca<8>-Footnote-373184290
Ref: Biblioteca<8>-Footnote-383184347
Ref: Biblioteca<8>-Footnote-393184404
Ref: Biblioteca<8>-Footnote-403184461
Ref: Biblioteca<8>-Footnote-413184517
Ref: Biblioteca<8>-Footnote-423184574
Ref: Biblioteca<8>-Footnote-433184630
Ref: Biblioteca<8>-Footnote-443184686
Ref: Biblioteca<8>-Footnote-453184742
Node: Núcleo e embutidos<7>3184808
Ref: whatsnew/changelog id423184926
Ref: 17aa3184926
Ref: Núcleo e embutidos<7>-Footnote-13187798
Ref: Núcleo e embutidos<7>-Footnote-23187854
Ref: Núcleo e embutidos<7>-Footnote-33187910
Ref: Núcleo e embutidos<7>-Footnote-43187966
Ref: Núcleo e embutidos<7>-Footnote-53188022
Ref: Núcleo e embutidos<7>-Footnote-63188077
Ref: Núcleo e embutidos<7>-Footnote-73188133
Ref: Núcleo e embutidos<7>-Footnote-83188189
Ref: Núcleo e embutidos<7>-Footnote-93188245
Ref: Núcleo e embutidos<7>-Footnote-103188301
Ref: Núcleo e embutidos<7>-Footnote-113188358
Ref: Núcleo e embutidos<7>-Footnote-123188415
Ref: Núcleo e embutidos<7>-Footnote-133188472
Ref: Núcleo e embutidos<7>-Footnote-143188529
Ref: Núcleo e embutidos<7>-Footnote-153188586
Ref: Núcleo e embutidos<7>-Footnote-163188643
Ref: Núcleo e embutidos<7>-Footnote-173188700
Ref: Núcleo e embutidos<7>-Footnote-183188757
Node: API C<5>3188802
Ref: whatsnew/changelog id433188922
Ref: 17ad3188922
Ref: API C<5>-Footnote-13189160
Node: Construção<6>3189216
Ref: whatsnew/changelog id443189305
Ref: 17b03189305
Ref: Construção<6>-Footnote-13189840
Ref: Construção<6>-Footnote-23189896
Ref: Construção<6>-Footnote-33189938
Ref: Construção<6>-Footnote-43189994
Node: Python 3 14 0 beta 13190050
Ref: whatsnew/changelog python-3-14-0-beta-13190175
Ref: 17b13190175
Node: Windows<6>3190575
Ref: whatsnew/changelog id453190671
Ref: 17b23190671
Ref: Windows<6>-Footnote-13191042
Ref: Windows<6>-Footnote-23191098
Node: Ferramentas/Demos<7>3191154
Ref: whatsnew/changelog id463191268
Ref: 17b33191268
Ref: Ferramentas/Demos<7>-Footnote-13191629
Ref: Ferramentas/Demos<7>-Footnote-23191685
Node: Testes<5>3191741
Ref: whatsnew/changelog id473191858
Ref: 17b43191858
Ref: Testes<5>-Footnote-13193020
Ref: Testes<5>-Footnote-23193076
Ref: Testes<5>-Footnote-33193131
Ref: Testes<5>-Footnote-43193187
Ref: Testes<5>-Footnote-53193243
Node: Segurança<8>3193299
Ref: whatsnew/changelog id483193409
Ref: 17b53193409
Ref: Segurança<8>-Footnote-13193981
Node: Biblioteca<9>3194037
Ref: whatsnew/changelog id493194145
Ref: 17b63194145
Ref: Biblioteca<9>-Footnote-13215030
Ref: Biblioteca<9>-Footnote-23215086
Ref: Biblioteca<9>-Footnote-33215142
Ref: Biblioteca<9>-Footnote-43215198
Ref: Biblioteca<9>-Footnote-53215254
Ref: Biblioteca<9>-Footnote-63215310
Ref: Biblioteca<9>-Footnote-73215366
Ref: Biblioteca<9>-Footnote-83215422
Ref: Biblioteca<9>-Footnote-93215478
Ref: Biblioteca<9>-Footnote-103215534
Ref: Biblioteca<9>-Footnote-113215591
Ref: Biblioteca<9>-Footnote-123215648
Ref: Biblioteca<9>-Footnote-133215705
Ref: Biblioteca<9>-Footnote-143215762
Ref: Biblioteca<9>-Footnote-153215819
Ref: Biblioteca<9>-Footnote-163215876
Ref: Biblioteca<9>-Footnote-173215933
Ref: Biblioteca<9>-Footnote-183215990
Ref: Biblioteca<9>-Footnote-193216047
Ref: Biblioteca<9>-Footnote-203216104
Ref: Biblioteca<9>-Footnote-213216161
Ref: Biblioteca<9>-Footnote-223216218
Ref: Biblioteca<9>-Footnote-233216275
Ref: Biblioteca<9>-Footnote-243216332
Ref: Biblioteca<9>-Footnote-253216389
Ref: Biblioteca<9>-Footnote-263216446
Ref: Biblioteca<9>-Footnote-273216503
Ref: Biblioteca<9>-Footnote-283216560
Ref: Biblioteca<9>-Footnote-293216617
Ref: Biblioteca<9>-Footnote-303216674
Ref: Biblioteca<9>-Footnote-313216731
Ref: Biblioteca<9>-Footnote-323216788
Ref: Biblioteca<9>-Footnote-333216844
Ref: Biblioteca<9>-Footnote-343216901
Ref: Biblioteca<9>-Footnote-353216958
Ref: Biblioteca<9>-Footnote-363217015
Ref: Biblioteca<9>-Footnote-373217072
Ref: Biblioteca<9>-Footnote-383217129
Ref: Biblioteca<9>-Footnote-393217186
Ref: Biblioteca<9>-Footnote-403217243
Ref: Biblioteca<9>-Footnote-413217300
Ref: Biblioteca<9>-Footnote-423217357
Ref: Biblioteca<9>-Footnote-433217414
Ref: Biblioteca<9>-Footnote-443217471
Ref: Biblioteca<9>-Footnote-453217528
Ref: Biblioteca<9>-Footnote-463217585
Ref: Biblioteca<9>-Footnote-473217642
Ref: Biblioteca<9>-Footnote-483217698
Ref: Biblioteca<9>-Footnote-493217755
Ref: Biblioteca<9>-Footnote-503217812
Ref: Biblioteca<9>-Footnote-513217869
Ref: Biblioteca<9>-Footnote-523217925
Ref: Biblioteca<9>-Footnote-533217982
Ref: Biblioteca<9>-Footnote-543218039
Ref: Biblioteca<9>-Footnote-553218096
Ref: Biblioteca<9>-Footnote-563218153
Ref: Biblioteca<9>-Footnote-573218210
Ref: Biblioteca<9>-Footnote-583218267
Ref: Biblioteca<9>-Footnote-593218324
Ref: Biblioteca<9>-Footnote-603218381
Ref: Biblioteca<9>-Footnote-613218438
Ref: Biblioteca<9>-Footnote-623218495
Ref: Biblioteca<9>-Footnote-633218552
Ref: Biblioteca<9>-Footnote-643218609
Ref: Biblioteca<9>-Footnote-653218666
Ref: Biblioteca<9>-Footnote-663218723
Ref: Biblioteca<9>-Footnote-673218780
Ref: Biblioteca<9>-Footnote-683218837
Ref: Biblioteca<9>-Footnote-693218894
Ref: Biblioteca<9>-Footnote-703218951
Ref: Biblioteca<9>-Footnote-713219011
Ref: Biblioteca<9>-Footnote-723219068
Ref: Biblioteca<9>-Footnote-733219125
Ref: Biblioteca<9>-Footnote-743219181
Ref: Biblioteca<9>-Footnote-753219238
Ref: Biblioteca<9>-Footnote-763219295
Ref: Biblioteca<9>-Footnote-773219352
Ref: Biblioteca<9>-Footnote-783219409
Ref: Biblioteca<9>-Footnote-793219466
Ref: Biblioteca<9>-Footnote-803219522
Ref: Biblioteca<9>-Footnote-813219579
Ref: Biblioteca<9>-Footnote-823219636
Ref: Biblioteca<9>-Footnote-833219692
Ref: Biblioteca<9>-Footnote-843219749
Ref: Biblioteca<9>-Footnote-853219806
Ref: Biblioteca<9>-Footnote-863219863
Ref: Biblioteca<9>-Footnote-873219920
Ref: Biblioteca<9>-Footnote-883219977
Ref: Biblioteca<9>-Footnote-893220033
Ref: Biblioteca<9>-Footnote-903220090
Ref: Biblioteca<9>-Footnote-913220147
Ref: Biblioteca<9>-Footnote-923220204
Ref: Biblioteca<9>-Footnote-933220261
Ref: Biblioteca<9>-Footnote-943220318
Ref: Biblioteca<9>-Footnote-953220375
Ref: Biblioteca<9>-Footnote-963220432
Ref: Biblioteca<9>-Footnote-973220489
Ref: Biblioteca<9>-Footnote-983220546
Ref: Biblioteca<9>-Footnote-993220603
Ref: Biblioteca<9>-Footnote-1003220660
Ref: Biblioteca<9>-Footnote-1013220717
Ref: Biblioteca<9>-Footnote-1023220775
Ref: Biblioteca<9>-Footnote-1033220833
Ref: Biblioteca<9>-Footnote-1043220890
Ref: Biblioteca<9>-Footnote-1053220948
Ref: Biblioteca<9>-Footnote-1063221006
Ref: Biblioteca<9>-Footnote-1073221073
Node: IDLE<4>3221130
Ref: whatsnew/changelog id503221242
Ref: 17c83221242
Ref: IDLE<4>-Footnote-13221400
Node: Documentação<5>3221456
Ref: whatsnew/changelog id513221577
Ref: 17c93221577
Ref: Documentação<5>-Footnote-13221967
Ref: Documentação<5>-Footnote-23222023
Node: Núcleo e embutidos<8>3222079
Ref: whatsnew/changelog id523222201
Ref: 17cb3222201
Ref: Núcleo e embutidos<8>-Footnote-13234651
Ref: Núcleo e embutidos<8>-Footnote-23234707
Ref: Núcleo e embutidos<8>-Footnote-33234763
Ref: Núcleo e embutidos<8>-Footnote-43234819
Ref: Núcleo e embutidos<8>-Footnote-53234875
Ref: Núcleo e embutidos<8>-Footnote-63234930
Ref: Núcleo e embutidos<8>-Footnote-73234986
Ref: Núcleo e embutidos<8>-Footnote-83235042
Ref: Núcleo e embutidos<8>-Footnote-93235098
Ref: Núcleo e embutidos<8>-Footnote-103235154
Ref: Núcleo e embutidos<8>-Footnote-113235197
Ref: Núcleo e embutidos<8>-Footnote-123235254
Ref: Núcleo e embutidos<8>-Footnote-133235311
Ref: Núcleo e embutidos<8>-Footnote-143235368
Ref: Núcleo e embutidos<8>-Footnote-153235425
Ref: Núcleo e embutidos<8>-Footnote-163235482
Ref: Núcleo e embutidos<8>-Footnote-173235539
Ref: Núcleo e embutidos<8>-Footnote-183235596
Ref: Núcleo e embutidos<8>-Footnote-193235653
Ref: Núcleo e embutidos<8>-Footnote-203235710
Ref: Núcleo e embutidos<8>-Footnote-213235767
Ref: Núcleo e embutidos<8>-Footnote-223235810
Ref: Núcleo e embutidos<8>-Footnote-233235867
Ref: Núcleo e embutidos<8>-Footnote-243235924
Ref: Núcleo e embutidos<8>-Footnote-253235967
Ref: Núcleo e embutidos<8>-Footnote-263236024
Ref: Núcleo e embutidos<8>-Footnote-273236081
Ref: Núcleo e embutidos<8>-Footnote-283236138
Ref: Núcleo e embutidos<8>-Footnote-293236195
Ref: Núcleo e embutidos<8>-Footnote-303236252
Ref: Núcleo e embutidos<8>-Footnote-313236309
Ref: Núcleo e embutidos<8>-Footnote-323236366
Ref: Núcleo e embutidos<8>-Footnote-333236423
Ref: Núcleo e embutidos<8>-Footnote-343236480
Ref: Núcleo e embutidos<8>-Footnote-353236537
Ref: Núcleo e embutidos<8>-Footnote-363236594
Ref: Núcleo e embutidos<8>-Footnote-373236651
Ref: Núcleo e embutidos<8>-Footnote-383236708
Ref: Núcleo e embutidos<8>-Footnote-393236765
Ref: Núcleo e embutidos<8>-Footnote-403236822
Ref: Núcleo e embutidos<8>-Footnote-413236879
Ref: Núcleo e embutidos<8>-Footnote-423236936
Ref: Núcleo e embutidos<8>-Footnote-433236993
Ref: Núcleo e embutidos<8>-Footnote-443237050
Ref: Núcleo e embutidos<8>-Footnote-453237107
Ref: Núcleo e embutidos<8>-Footnote-463237164
Ref: Núcleo e embutidos<8>-Footnote-473237221
Ref: Núcleo e embutidos<8>-Footnote-483237278
Ref: Núcleo e embutidos<8>-Footnote-493237335
Ref: Núcleo e embutidos<8>-Footnote-503237392
Ref: Núcleo e embutidos<8>-Footnote-513237449
Ref: Núcleo e embutidos<8>-Footnote-523237506
Ref: Núcleo e embutidos<8>-Footnote-533237563
Ref: Núcleo e embutidos<8>-Footnote-543237620
Ref: Núcleo e embutidos<8>-Footnote-553237677
Ref: Núcleo e embutidos<8>-Footnote-563237734
Ref: Núcleo e embutidos<8>-Footnote-573237791
Ref: Núcleo e embutidos<8>-Footnote-583237848
Ref: Núcleo e embutidos<8>-Footnote-593237905
Ref: Núcleo e embutidos<8>-Footnote-603237962
Ref: Núcleo e embutidos<8>-Footnote-613238018
Ref: Núcleo e embutidos<8>-Footnote-623238075
Ref: Núcleo e embutidos<8>-Footnote-633238132
Ref: Núcleo e embutidos<8>-Footnote-643238189
Ref: Núcleo e embutidos<8>-Footnote-653238246
Ref: Núcleo e embutidos<8>-Footnote-663238303
Node: API C<6>3238359
Ref: whatsnew/changelog id533238479
Ref: 17d03238479
Ref: API C<6>-Footnote-13241629
Ref: API C<6>-Footnote-23241685
Ref: API C<6>-Footnote-33241741
Ref: API C<6>-Footnote-43241797
Ref: API C<6>-Footnote-53241853
Ref: API C<6>-Footnote-63241909
Ref: API C<6>-Footnote-73241965
Ref: API C<6>-Footnote-83242021
Ref: API C<6>-Footnote-93242077
Ref: API C<6>-Footnote-103242133
Ref: API C<6>-Footnote-113242190
Ref: API C<6>-Footnote-123242247
Ref: API C<6>-Footnote-133242304
Node: Construção<7>3242360
Ref: whatsnew/changelog id543242449
Ref: 17d23242449
Ref: Construção<7>-Footnote-13243917
Ref: Construção<7>-Footnote-23243973
Ref: Construção<7>-Footnote-33244029
Ref: Construção<7>-Footnote-43244085
Ref: Construção<7>-Footnote-53244141
Ref: Construção<7>-Footnote-63244197
Ref: Construção<7>-Footnote-73244253
Ref: Construção<7>-Footnote-83244309
Node: Python 3 14 0 alpha 73244365
Ref: whatsnew/changelog python-3-14-0-alpha-73244491
Ref: 17d33244491
Node: macOS<3>3244898
Ref: whatsnew/changelog id553244983
Ref: 17d43244983
Ref: macOS<3>-Footnote-13245343
Ref: macOS<3>-Footnote-23245399
Ref: macOS<3>-Footnote-33245455
Node: Windows<7>3245511
Ref: whatsnew/changelog id563245625
Ref: 17d53245625
Ref: Windows<7>-Footnote-13246266
Ref: Windows<7>-Footnote-23246322
Ref: Windows<7>-Footnote-33246378
Ref: Windows<7>-Footnote-43246433
Node: Ferramentas/Demos<8>3246489
Ref: whatsnew/changelog id573246604
Ref: 17d63246604
Ref: Ferramentas/Demos<8>-Footnote-13246946
Ref: Ferramentas/Demos<8>-Footnote-23247002
Node: Testes<6>3247058
Ref: whatsnew/changelog id583247176
Ref: 17d73247176
Ref: Testes<6>-Footnote-13247605
Ref: Testes<6>-Footnote-23247661
Node: Segurança<9>3247717
Ref: whatsnew/changelog id593247829
Ref: 17d93247829
Ref: Segurança<9>-Footnote-13248675
Ref: Segurança<9>-Footnote-23248731
Ref: Segurança<9>-Footnote-33248787
Node: Biblioteca<10>3248843
Ref: whatsnew/changelog id603248963
Ref: 17da3248963
Ref: Biblioteca<10>-Footnote-13257928
Ref: Biblioteca<10>-Footnote-23257984
Ref: Biblioteca<10>-Footnote-33258040
Ref: Biblioteca<10>-Footnote-43258096
Ref: Biblioteca<10>-Footnote-53258152
Ref: Biblioteca<10>-Footnote-63258208
Ref: Biblioteca<10>-Footnote-73258263
Ref: Biblioteca<10>-Footnote-83258319
Ref: Biblioteca<10>-Footnote-93258375
Ref: Biblioteca<10>-Footnote-103258431
Ref: Biblioteca<10>-Footnote-113258488
Ref: Biblioteca<10>-Footnote-123258545
Ref: Biblioteca<10>-Footnote-133258602
Ref: Biblioteca<10>-Footnote-143258659
Ref: Biblioteca<10>-Footnote-153258716
Ref: Biblioteca<10>-Footnote-163258773
Ref: Biblioteca<10>-Footnote-173258830
Ref: Biblioteca<10>-Footnote-183258887
Ref: Biblioteca<10>-Footnote-193258943
Ref: Biblioteca<10>-Footnote-203259000
Ref: Biblioteca<10>-Footnote-213259057
Ref: Biblioteca<10>-Footnote-223259114
Ref: Biblioteca<10>-Footnote-233259171
Ref: Biblioteca<10>-Footnote-243259228
Ref: Biblioteca<10>-Footnote-253259285
Ref: Biblioteca<10>-Footnote-263259342
Ref: Biblioteca<10>-Footnote-273259399
Ref: Biblioteca<10>-Footnote-283259455
Ref: Biblioteca<10>-Footnote-293259512
Ref: Biblioteca<10>-Footnote-303259568
Ref: Biblioteca<10>-Footnote-313259625
Ref: Biblioteca<10>-Footnote-323259682
Ref: Biblioteca<10>-Footnote-333259739
Ref: Biblioteca<10>-Footnote-343259796
Ref: Biblioteca<10>-Footnote-353259853
Ref: Biblioteca<10>-Footnote-363259910
Ref: Biblioteca<10>-Footnote-373259966
Ref: Biblioteca<10>-Footnote-383260023
Ref: Biblioteca<10>-Footnote-393260080
Ref: Biblioteca<10>-Footnote-403260137
Ref: Biblioteca<10>-Footnote-413260194
Ref: Biblioteca<10>-Footnote-423260251
Ref: Biblioteca<10>-Footnote-433260308
Ref: Biblioteca<10>-Footnote-443260365
Ref: Biblioteca<10>-Footnote-453260437
Ref: Biblioteca<10>-Footnote-463260494
Ref: Biblioteca<10>-Footnote-473260551
Ref: Biblioteca<10>-Footnote-483260608
Ref: Biblioteca<10>-Footnote-493260664
Ref: Biblioteca<10>-Footnote-503260721
Node: Documentação<6>3260787
Ref: whatsnew/changelog id613260916
Ref: 17e53260916
Ref: Documentação<6>-Footnote-13261121
Node: Núcleo e embutidos<9>3261177
Ref: whatsnew/changelog id623261300
Ref: 17e63261300
Ref: Núcleo e embutidos<9>-Footnote-13265802
Ref: Núcleo e embutidos<9>-Footnote-23265858
Ref: Núcleo e embutidos<9>-Footnote-33265914
Ref: Núcleo e embutidos<9>-Footnote-43265970
Ref: Núcleo e embutidos<9>-Footnote-53266026
Ref: Núcleo e embutidos<9>-Footnote-63266068
Ref: Núcleo e embutidos<9>-Footnote-73266124
Ref: Núcleo e embutidos<9>-Footnote-83266180
Ref: Núcleo e embutidos<9>-Footnote-93266222
Ref: Núcleo e embutidos<9>-Footnote-103266278
Ref: Núcleo e embutidos<9>-Footnote-113266335
Ref: Núcleo e embutidos<9>-Footnote-123266392
Ref: Núcleo e embutidos<9>-Footnote-133266449
Ref: Núcleo e embutidos<9>-Footnote-143266506
Ref: Núcleo e embutidos<9>-Footnote-153266563
Ref: Núcleo e embutidos<9>-Footnote-163266620
Ref: Núcleo e embutidos<9>-Footnote-173266677
Ref: Núcleo e embutidos<9>-Footnote-183266734
Ref: Núcleo e embutidos<9>-Footnote-193266791
Ref: Núcleo e embutidos<9>-Footnote-203266848
Ref: Núcleo e embutidos<9>-Footnote-213266905
Ref: Núcleo e embutidos<9>-Footnote-223266962
Ref: Núcleo e embutidos<9>-Footnote-233267019
Ref: Núcleo e embutidos<9>-Footnote-243267075
Ref: Núcleo e embutidos<9>-Footnote-253267132
Ref: Núcleo e embutidos<9>-Footnote-263267188
Ref: Núcleo e embutidos<9>-Footnote-273267248
Ref: Núcleo e embutidos<9>-Footnote-283267305
Ref: Núcleo e embutidos<9>-Footnote-293267362
Ref: Núcleo e embutidos<9>-Footnote-303267419
Ref: Núcleo e embutidos<9>-Footnote-313267476
Node: API C<7>3267533
Ref: whatsnew/changelog id633267654
Ref: 17e93267654
Ref: API C<7>-Footnote-13267937
Ref: API C<7>-Footnote-23267993
Node: Construção<8>3268049
Ref: whatsnew/changelog id643268139
Ref: 17ea3268139
Ref: Construção<8>-Footnote-13269183
Ref: Construção<8>-Footnote-23269239
Ref: Construção<8>-Footnote-33269295
Ref: Construção<8>-Footnote-43269351
Ref: Construção<8>-Footnote-53269407
Ref: Construção<8>-Footnote-63269463
Node: Python 3 14 0 alpha 63269519
Ref: whatsnew/changelog python-3-14-0-alpha-63269646
Ref: 17eb3269646
Node: macOS<4>3270055
Ref: whatsnew/changelog id653270140
Ref: 17ec3270140
Ref: macOS<4>-Footnote-13270355
Node: Windows<8>3270411
Ref: whatsnew/changelog id663270525
Ref: 17ee3270525
Ref: Windows<8>-Footnote-13270719
Ref: Windows<8>-Footnote-23270775
Node: Ferramentas/Demos<9>3270842
Ref: whatsnew/changelog id673270957
Ref: 17ef3270957
Ref: Ferramentas/Demos<9>-Footnote-13271849
Ref: Ferramentas/Demos<9>-Footnote-23271905
Ref: Ferramentas/Demos<9>-Footnote-33271960
Ref: Ferramentas/Demos<9>-Footnote-43272016
Ref: Ferramentas/Demos<9>-Footnote-53272072
Ref: Ferramentas/Demos<9>-Footnote-63272128
Ref: Ferramentas/Demos<9>-Footnote-73272184
Node: Testes<7>3272240
Ref: whatsnew/changelog id683272359
Ref: 17f03272359
Ref: Testes<7>-Footnote-13273137
Ref: Testes<7>-Footnote-23273193
Ref: Testes<7>-Footnote-33273249
Ref: Testes<7>-Footnote-43273305
Ref: Testes<7>-Footnote-53273361
Node: Segurança<10>3273417
Ref: whatsnew/changelog id693273530
Ref: 17f13273530
Ref: Segurança<10>-Footnote-13273887
Node: Biblioteca<11>3273943
Ref: whatsnew/changelog id703274064
Ref: 17f23274064
Ref: Biblioteca<11>-Footnote-13287862
Ref: Biblioteca<11>-Footnote-23287918
Ref: Biblioteca<11>-Footnote-33287974
Ref: Biblioteca<11>-Footnote-43288030
Ref: Biblioteca<11>-Footnote-53288086
Ref: Biblioteca<11>-Footnote-63288141
Ref: Biblioteca<11>-Footnote-73288196
Ref: Biblioteca<11>-Footnote-83288251
Ref: Biblioteca<11>-Footnote-93288306
Ref: Biblioteca<11>-Footnote-103288362
Ref: Biblioteca<11>-Footnote-113288419
Ref: Biblioteca<11>-Footnote-123288476
Ref: Biblioteca<11>-Footnote-133288533
Ref: Biblioteca<11>-Footnote-143288590
Ref: Biblioteca<11>-Footnote-153288647
Ref: Biblioteca<11>-Footnote-163288704
Ref: Biblioteca<11>-Footnote-173288761
Ref: Biblioteca<11>-Footnote-183288818
Ref: Biblioteca<11>-Footnote-193288874
Ref: Biblioteca<11>-Footnote-203288931
Ref: Biblioteca<11>-Footnote-213288988
Ref: Biblioteca<11>-Footnote-223289044
Ref: Biblioteca<11>-Footnote-233289101
Ref: Biblioteca<11>-Footnote-243289158
Ref: Biblioteca<11>-Footnote-253289215
Ref: Biblioteca<11>-Footnote-263289272
Ref: Biblioteca<11>-Footnote-273289329
Ref: Biblioteca<11>-Footnote-283289386
Ref: Biblioteca<11>-Footnote-293289442
Ref: Biblioteca<11>-Footnote-303289499
Ref: Biblioteca<11>-Footnote-313289556
Ref: Biblioteca<11>-Footnote-323289613
Ref: Biblioteca<11>-Footnote-333289670
Ref: Biblioteca<11>-Footnote-343289727
Ref: Biblioteca<11>-Footnote-353289784
Ref: Biblioteca<11>-Footnote-363289841
Ref: Biblioteca<11>-Footnote-373289898
Ref: Biblioteca<11>-Footnote-383289955
Ref: Biblioteca<11>-Footnote-393290012
Ref: Biblioteca<11>-Footnote-403290068
Ref: Biblioteca<11>-Footnote-413290125
Ref: Biblioteca<11>-Footnote-423290182
Ref: Biblioteca<11>-Footnote-433290239
Ref: Biblioteca<11>-Footnote-443290296
Ref: Biblioteca<11>-Footnote-453290352
Ref: Biblioteca<11>-Footnote-463290409
Ref: Biblioteca<11>-Footnote-473290466
Ref: Biblioteca<11>-Footnote-483290523
Ref: Biblioteca<11>-Footnote-493290579
Ref: Biblioteca<11>-Footnote-503290636
Ref: Biblioteca<11>-Footnote-513290693
Ref: Biblioteca<11>-Footnote-523290750
Ref: Biblioteca<11>-Footnote-533290807
Ref: Biblioteca<11>-Footnote-543290863
Ref: Biblioteca<11>-Footnote-553290920
Ref: Biblioteca<11>-Footnote-563290977
Ref: Biblioteca<11>-Footnote-573291034
Ref: Biblioteca<11>-Footnote-583291091
Ref: Biblioteca<11>-Footnote-593291148
Ref: Biblioteca<11>-Footnote-603291205
Ref: Biblioteca<11>-Footnote-613291262
Ref: Biblioteca<11>-Footnote-623291319
Ref: Biblioteca<11>-Footnote-633291376
Ref: Biblioteca<11>-Footnote-643291432
Ref: Biblioteca<11>-Footnote-653291489
Ref: Biblioteca<11>-Footnote-663291546
Ref: Biblioteca<11>-Footnote-673291602
Ref: Biblioteca<11>-Footnote-683291662
Ref: Biblioteca<11>-Footnote-693291718
Ref: Biblioteca<11>-Footnote-703291778
Ref: Biblioteca<11>-Footnote-713291835
Ref: Biblioteca<11>-Footnote-723291892
Node: Documentação<7>3291948
Ref: whatsnew/changelog id713292078
Ref: 17fa3292078
Ref: Documentação<7>-Footnote-13292555
Ref: Documentação<7>-Footnote-23292611
Ref: Documentação<7>-Footnote-33292667
Node: Núcleo e embutidos<10>3292722
Ref: whatsnew/changelog id723292846
Ref: 17fe3292846
Ref: Núcleo e embutidos<10>-Footnote-13301239
Ref: Núcleo e embutidos<10>-Footnote-23301295
Ref: Núcleo e embutidos<10>-Footnote-33301351
Ref: Núcleo e embutidos<10>-Footnote-43301407
Ref: Núcleo e embutidos<10>-Footnote-53301463
Ref: Núcleo e embutidos<10>-Footnote-63301519
Ref: Núcleo e embutidos<10>-Footnote-73301575
Ref: Núcleo e embutidos<10>-Footnote-83301631
Ref: Núcleo e embutidos<10>-Footnote-93301687
Ref: Núcleo e embutidos<10>-Footnote-103301743
Ref: Núcleo e embutidos<10>-Footnote-113301800
Ref: Núcleo e embutidos<10>-Footnote-123301857
Ref: Núcleo e embutidos<10>-Footnote-133301914
Ref: Núcleo e embutidos<10>-Footnote-143301971
Ref: Núcleo e embutidos<10>-Footnote-153302028
Ref: Núcleo e embutidos<10>-Footnote-163302085
Ref: Núcleo e embutidos<10>-Footnote-173302142
Ref: Núcleo e embutidos<10>-Footnote-183302199
Ref: Núcleo e embutidos<10>-Footnote-193302256
Ref: Núcleo e embutidos<10>-Footnote-203302313
Ref: Núcleo e embutidos<10>-Footnote-213302370
Ref: Núcleo e embutidos<10>-Footnote-223302429
Ref: Núcleo e embutidos<10>-Footnote-233302486
Ref: Núcleo e embutidos<10>-Footnote-243302543
Ref: Núcleo e embutidos<10>-Footnote-253302600
Ref: Núcleo e embutidos<10>-Footnote-263302657
Ref: Núcleo e embutidos<10>-Footnote-273302714
Ref: Núcleo e embutidos<10>-Footnote-283302771
Ref: Núcleo e embutidos<10>-Footnote-293302828
Ref: Núcleo e embutidos<10>-Footnote-303302871
Ref: Núcleo e embutidos<10>-Footnote-313302928
Ref: Núcleo e embutidos<10>-Footnote-323302984
Ref: Núcleo e embutidos<10>-Footnote-333303041
Ref: Núcleo e embutidos<10>-Footnote-343303098
Ref: Núcleo e embutidos<10>-Footnote-353303155
Ref: Núcleo e embutidos<10>-Footnote-363303212
Ref: Núcleo e embutidos<10>-Footnote-373303269
Ref: Núcleo e embutidos<10>-Footnote-383303326
Ref: Núcleo e embutidos<10>-Footnote-393303383
Ref: Núcleo e embutidos<10>-Footnote-403303440
Ref: Núcleo e embutidos<10>-Footnote-413303497
Ref: Núcleo e embutidos<10>-Footnote-423303554
Ref: Núcleo e embutidos<10>-Footnote-433303611
Ref: Núcleo e embutidos<10>-Footnote-443303668
Ref: Núcleo e embutidos<10>-Footnote-453303725
Ref: Núcleo e embutidos<10>-Footnote-463303781
Ref: Núcleo e embutidos<10>-Footnote-473303838
Ref: Núcleo e embutidos<10>-Footnote-483303895
Ref: Núcleo e embutidos<10>-Footnote-493303952
Node: API C<8>3304018
Ref: whatsnew/changelog id733304140
Ref: 18013304140
Ref: API C<8>-Footnote-13306602
Ref: API C<8>-Footnote-23306658
Ref: API C<8>-Footnote-33306714
Ref: API C<8>-Footnote-43306770
Ref: API C<8>-Footnote-53306823
Node: Construção<9>3306878
Ref: whatsnew/changelog id743306968
Ref: 18033306968
Ref: Construção<9>-Footnote-13308224
Ref: Construção<9>-Footnote-23308280
Ref: Construção<9>-Footnote-33308336
Ref: Construção<9>-Footnote-43308392
Ref: Construção<9>-Footnote-53308448
Ref: Construção<9>-Footnote-63308504
Ref: Construção<9>-Footnote-73308560
Node: Python 3 14 0 alpha 53308615
Ref: whatsnew/changelog python-3-14-0-alpha-53308742
Ref: 18043308742
Node: macOS<5>3309147
Ref: whatsnew/changelog id753309243
Ref: 18053309243
Ref: macOS<5>-Footnote-13309392
Node: Ferramentas/Demos<10>3309447
Ref: whatsnew/changelog id763309561
Ref: 18063309561
Ref: Ferramentas/Demos<10>-Footnote-13309909
Ref: Ferramentas/Demos<10>-Footnote-23309965
Node: Testes<8>3310021
Ref: whatsnew/changelog id773310141
Ref: 18073310141
Ref: Testes<8>-Footnote-13311017
Ref: Testes<8>-Footnote-23311073
Ref: Testes<8>-Footnote-33311129
Node: Segurança<11>3311185
Ref: whatsnew/changelog id783311298
Ref: 18083311298
Ref: Segurança<11>-Footnote-13313061
Ref: Segurança<11>-Footnote-23313117
Ref: Segurança<11>-Footnote-33313178
Ref: Segurança<11>-Footnote-43313234
Ref: Segurança<11>-Footnote-53313289
Node: Biblioteca<12>3313345
Ref: whatsnew/changelog id793313456
Ref: 180a3313456
Ref: Biblioteca<12>-Footnote-13326424
Ref: Biblioteca<12>-Footnote-23326480
Ref: Biblioteca<12>-Footnote-33326536
Ref: Biblioteca<12>-Footnote-43326592
Ref: Biblioteca<12>-Footnote-53326648
Ref: Biblioteca<12>-Footnote-63326704
Ref: Biblioteca<12>-Footnote-73326760
Ref: Biblioteca<12>-Footnote-83326816
Ref: Biblioteca<12>-Footnote-93326872
Ref: Biblioteca<12>-Footnote-103326928
Ref: Biblioteca<12>-Footnote-113326985
Ref: Biblioteca<12>-Footnote-123327042
Ref: Biblioteca<12>-Footnote-133327099
Ref: Biblioteca<12>-Footnote-143327156
Ref: Biblioteca<12>-Footnote-153327213
Ref: Biblioteca<12>-Footnote-163327270
Ref: Biblioteca<12>-Footnote-173327327
Ref: Biblioteca<12>-Footnote-183327384
Ref: Biblioteca<12>-Footnote-193327441
Ref: Biblioteca<12>-Footnote-203327498
Ref: Biblioteca<12>-Footnote-213327555
Ref: Biblioteca<12>-Footnote-223327612
Ref: Biblioteca<12>-Footnote-233327668
Ref: Biblioteca<12>-Footnote-243327725
Ref: Biblioteca<12>-Footnote-253327782
Ref: Biblioteca<12>-Footnote-263327839
Ref: Biblioteca<12>-Footnote-273327896
Ref: Biblioteca<12>-Footnote-283327953
Ref: Biblioteca<12>-Footnote-293328010
Ref: Biblioteca<12>-Footnote-303328067
Ref: Biblioteca<12>-Footnote-313328124
Ref: Biblioteca<12>-Footnote-323328181
Ref: Biblioteca<12>-Footnote-333328238
Ref: Biblioteca<12>-Footnote-343328295
Ref: Biblioteca<12>-Footnote-353328352
Ref: Biblioteca<12>-Footnote-363328409
Ref: Biblioteca<12>-Footnote-373328466
Ref: Biblioteca<12>-Footnote-383328523
Ref: Biblioteca<12>-Footnote-393328580
Ref: Biblioteca<12>-Footnote-403328637
Ref: Biblioteca<12>-Footnote-413328694
Ref: Biblioteca<12>-Footnote-423328751
Ref: Biblioteca<12>-Footnote-433328808
Ref: Biblioteca<12>-Footnote-443328865
Ref: Biblioteca<12>-Footnote-453328922
Ref: Biblioteca<12>-Footnote-463328979
Ref: Biblioteca<12>-Footnote-473329036
Ref: Biblioteca<12>-Footnote-483329096
Ref: Biblioteca<12>-Footnote-493329152
Ref: Biblioteca<12>-Footnote-503329209
Ref: Biblioteca<12>-Footnote-513329265
Ref: Biblioteca<12>-Footnote-523329322
Ref: Biblioteca<12>-Footnote-533329379
Ref: Biblioteca<12>-Footnote-543329436
Ref: Biblioteca<12>-Footnote-553329493
Ref: Biblioteca<12>-Footnote-563329550
Ref: Biblioteca<12>-Footnote-573329607
Ref: Biblioteca<12>-Footnote-583329664
Ref: Biblioteca<12>-Footnote-593329721
Ref: Biblioteca<12>-Footnote-603329778
Ref: Biblioteca<12>-Footnote-613329835
Ref: Biblioteca<12>-Footnote-623329892
Ref: Biblioteca<12>-Footnote-633329948
Ref: Biblioteca<12>-Footnote-643330005
Ref: Biblioteca<12>-Footnote-653330062
Ref: Biblioteca<12>-Footnote-663330119
Ref: Biblioteca<12>-Footnote-673330175
Ref: Biblioteca<12>-Footnote-683330232
Ref: Biblioteca<12>-Footnote-693330289
Ref: Biblioteca<12>-Footnote-703330345
Node: IDLE<5>3330411
Ref: whatsnew/changelog id803330525
Ref: 18163330525
Ref: IDLE<5>-Footnote-13330769
Node: Documentação<8>3330825
Ref: whatsnew/changelog id813330948
Ref: 18173330948
Ref: Documentação<8>-Footnote-13331385
Ref: Documentação<8>-Footnote-23331441
Node: Núcleo e embutidos<11>3331496
Ref: whatsnew/changelog id823331620
Ref: 18193331620
Ref: Núcleo e embutidos<11>-Footnote-13338542
Ref: Núcleo e embutidos<11>-Footnote-23338598
Ref: Núcleo e embutidos<11>-Footnote-33338654
Ref: Núcleo e embutidos<11>-Footnote-43338710
Ref: Núcleo e embutidos<11>-Footnote-53338766
Ref: Núcleo e embutidos<11>-Footnote-63338822
Ref: Núcleo e embutidos<11>-Footnote-73338878
Ref: Núcleo e embutidos<11>-Footnote-83338934
Ref: Núcleo e embutidos<11>-Footnote-93338990
Ref: Núcleo e embutidos<11>-Footnote-103339046
Ref: Núcleo e embutidos<11>-Footnote-113339103
Ref: Núcleo e embutidos<11>-Footnote-123339160
Ref: Núcleo e embutidos<11>-Footnote-133339217
Ref: Núcleo e embutidos<11>-Footnote-143339274
Ref: Núcleo e embutidos<11>-Footnote-153339331
Ref: Núcleo e embutidos<11>-Footnote-163339388
Ref: Núcleo e embutidos<11>-Footnote-173339445
Ref: Núcleo e embutidos<11>-Footnote-183339502
Ref: Núcleo e embutidos<11>-Footnote-193339559
Ref: Núcleo e embutidos<11>-Footnote-203339616
Ref: Núcleo e embutidos<11>-Footnote-213339673
Ref: Núcleo e embutidos<11>-Footnote-223339730
Ref: Núcleo e embutidos<11>-Footnote-233339787
Ref: Núcleo e embutidos<11>-Footnote-243339844
Ref: Núcleo e embutidos<11>-Footnote-253339901
Ref: Núcleo e embutidos<11>-Footnote-263339958
Ref: Núcleo e embutidos<11>-Footnote-273340015
Ref: Núcleo e embutidos<11>-Footnote-283340072
Ref: Núcleo e embutidos<11>-Footnote-293340129
Ref: Núcleo e embutidos<11>-Footnote-303340186
Ref: Núcleo e embutidos<11>-Footnote-313340243
Ref: Núcleo e embutidos<11>-Footnote-323340300
Ref: Núcleo e embutidos<11>-Footnote-333340357
Ref: Núcleo e embutidos<11>-Footnote-343340414
Ref: Núcleo e embutidos<11>-Footnote-353340471
Ref: Núcleo e embutidos<11>-Footnote-363340528
Ref: Núcleo e embutidos<11>-Footnote-373340585
Node: API C<9>3340642
Ref: whatsnew/changelog id833340765
Ref: 18243340765
Ref: API C<9>-Footnote-13344133
Ref: API C<9>-Footnote-23344189
Ref: API C<9>-Footnote-33344244
Ref: API C<9>-Footnote-43344299
Ref: API C<9>-Footnote-53344355
Ref: API C<9>-Footnote-63344411
Ref: API C<9>-Footnote-73344453
Ref: API C<9>-Footnote-83344509
Ref: API C<9>-Footnote-93344551
Ref: API C<9>-Footnote-103344607
Ref: API C<9>-Footnote-113344664
Ref: API C<9>-Footnote-123344721
Ref: API C<9>-Footnote-133344775
Ref: API C<9>-Footnote-143344832
Ref: API C<9>-Footnote-153344889
Node: Construção<10>3344932
Ref: whatsnew/changelog id843345023
Ref: 18273345023
Ref: Construção<10>-Footnote-13345405
Ref: Construção<10>-Footnote-23345461
Node: Python 3 14 0 alpha 43345517
Ref: whatsnew/changelog python-3-14-0-alpha-43345644
Ref: 18283345644
Node: macOS<6>3345966
Ref: whatsnew/changelog id853346062
Ref: 18293346062
Ref: macOS<6>-Footnote-13346276
Node: Ferramentas/Demos<11>3346332
Ref: whatsnew/changelog id863346446
Ref: 182a3346446
Ref: Ferramentas/Demos<11>-Footnote-13346744
Node: Testes<9>3346800
Ref: whatsnew/changelog id873346920
Ref: 182b3346920
Ref: Testes<9>-Footnote-13347186
Node: Biblioteca<13>3347242
Ref: whatsnew/changelog id883347364
Ref: 182c3347364
Ref: Biblioteca<13>-Footnote-13356810
Ref: Biblioteca<13>-Footnote-23356866
Ref: Biblioteca<13>-Footnote-33356921
Ref: Biblioteca<13>-Footnote-43356977
Ref: Biblioteca<13>-Footnote-53357033
Ref: Biblioteca<13>-Footnote-63357089
Ref: Biblioteca<13>-Footnote-73357145
Ref: Biblioteca<13>-Footnote-83357201
Ref: Biblioteca<13>-Footnote-93357257
Ref: Biblioteca<13>-Footnote-103357313
Ref: Biblioteca<13>-Footnote-113357370
Ref: Biblioteca<13>-Footnote-123357427
Ref: Biblioteca<13>-Footnote-133357484
Ref: Biblioteca<13>-Footnote-143357540
Ref: Biblioteca<13>-Footnote-153357597
Ref: Biblioteca<13>-Footnote-163357654
Ref: Biblioteca<13>-Footnote-173357711
Ref: Biblioteca<13>-Footnote-183357768
Ref: Biblioteca<13>-Footnote-193357825
Ref: Biblioteca<13>-Footnote-203357882
Ref: Biblioteca<13>-Footnote-213357939
Ref: Biblioteca<13>-Footnote-223357996
Ref: Biblioteca<13>-Footnote-233358052
Ref: Biblioteca<13>-Footnote-243358109
Ref: Biblioteca<13>-Footnote-253358166
Ref: Biblioteca<13>-Footnote-263358214
Ref: Biblioteca<13>-Footnote-273358259
Ref: Biblioteca<13>-Footnote-283358316
Ref: Biblioteca<13>-Footnote-293358373
Ref: Biblioteca<13>-Footnote-303358430
Ref: Biblioteca<13>-Footnote-313358486
Ref: Biblioteca<13>-Footnote-323358543
Ref: Biblioteca<13>-Footnote-333358599
Ref: Biblioteca<13>-Footnote-343358656
Ref: Biblioteca<13>-Footnote-353358713
Ref: Biblioteca<13>-Footnote-363358770
Ref: Biblioteca<13>-Footnote-373358827
Ref: Biblioteca<13>-Footnote-383358884
Ref: Biblioteca<13>-Footnote-393358941
Ref: Biblioteca<13>-Footnote-403358998
Ref: Biblioteca<13>-Footnote-413359055
Ref: Biblioteca<13>-Footnote-423359112
Ref: Biblioteca<13>-Footnote-433359169
Ref: Biblioteca<13>-Footnote-443359226
Ref: Biblioteca<13>-Footnote-453359283
Node: Núcleo e embutidos<12>3359339
Ref: whatsnew/changelog id893359461
Ref: 18313359461
Ref: Núcleo e embutidos<12>-Footnote-13363360
Ref: Núcleo e embutidos<12>-Footnote-23363416
Ref: Núcleo e embutidos<12>-Footnote-33363472
Ref: Núcleo e embutidos<12>-Footnote-43363528
Ref: Núcleo e embutidos<12>-Footnote-53363584
Ref: Núcleo e embutidos<12>-Footnote-63363640
Ref: Núcleo e embutidos<12>-Footnote-73363696
Ref: Núcleo e embutidos<12>-Footnote-83363755
Ref: Núcleo e embutidos<12>-Footnote-93363811
Ref: Núcleo e embutidos<12>-Footnote-103363867
Ref: Núcleo e embutidos<12>-Footnote-113363924
Ref: Núcleo e embutidos<12>-Footnote-123363981
Ref: Núcleo e embutidos<12>-Footnote-133364038
Ref: Núcleo e embutidos<12>-Footnote-143364095
Ref: Núcleo e embutidos<12>-Footnote-153364152
Ref: Núcleo e embutidos<12>-Footnote-163364208
Ref: Núcleo e embutidos<12>-Footnote-173364265
Ref: Núcleo e embutidos<12>-Footnote-183364346
Ref: Núcleo e embutidos<12>-Footnote-193364403
Ref: Núcleo e embutidos<12>-Footnote-203364460
Ref: Núcleo e embutidos<12>-Footnote-213364517
Node: API C<10>3364574
Ref: whatsnew/changelog id903364698
Ref: 18363364698
Ref: API C<10>-Footnote-13365618
Ref: API C<10>-Footnote-23365674
Ref: API C<10>-Footnote-33365730
Ref: API C<10>-Footnote-43365786
Node: Construção<11>3365842
Ref: whatsnew/changelog id913365934
Ref: 18383365934
Ref: Construção<11>-Footnote-13367700
Ref: Construção<11>-Footnote-23367756
Ref: Construção<11>-Footnote-33367812
Ref: Construção<11>-Footnote-43367868
Ref: Construção<11>-Footnote-53367924
Ref: Construção<11>-Footnote-63367979
Ref: Construção<11>-Footnote-73368035
Ref: Construção<11>-Footnote-83368091
Ref: Construção<11>-Footnote-93368147
Ref: Construção<11>-Footnote-103368195
Node: Python 3 14 0 alpha 33368252
Ref: whatsnew/changelog python-3-14-0-alpha-33368379
Ref: 18393368379
Node: Windows<9>3368773
Ref: whatsnew/changelog id923368871
Ref: 183a3368871
Ref: Windows<9>-Footnote-13369280
Ref: Windows<9>-Footnote-23369336
Node: Ferramentas/Demos<12>3369392
Ref: whatsnew/changelog id933369509
Ref: 183b3369509
Ref: Ferramentas/Demos<12>-Footnote-13369718
Node: Testes<10>3369774
Ref: whatsnew/changelog id943369895
Ref: 183c3369895
Ref: Testes<10>-Footnote-13370670
Ref: Testes<10>-Footnote-23370726
Ref: Testes<10>-Footnote-33370782
Ref: Testes<10>-Footnote-43370838
Ref: Testes<10>-Footnote-53370894
Node: Segurança<12>3370950
Ref: whatsnew/changelog id953371064
Ref: 183d3371064
Ref: Segurança<12>-Footnote-13371401
Node: Biblioteca<14>3371457
Ref: whatsnew/changelog id963371578
Ref: 183e3371578
Ref: Biblioteca<14>-Footnote-13382721
Ref: Biblioteca<14>-Footnote-23382777
Ref: Biblioteca<14>-Footnote-33382833
Ref: Biblioteca<14>-Footnote-43382889
Ref: Biblioteca<14>-Footnote-53382945
Ref: Biblioteca<14>-Footnote-63383001
Ref: Biblioteca<14>-Footnote-73383057
Ref: Biblioteca<14>-Footnote-83383113
Ref: Biblioteca<14>-Footnote-93383169
Ref: Biblioteca<14>-Footnote-103383224
Ref: Biblioteca<14>-Footnote-113383281
Ref: Biblioteca<14>-Footnote-123383338
Ref: Biblioteca<14>-Footnote-133383395
Ref: Biblioteca<14>-Footnote-143383452
Ref: Biblioteca<14>-Footnote-153383509
Ref: Biblioteca<14>-Footnote-163383566
Ref: Biblioteca<14>-Footnote-173383623
Ref: Biblioteca<14>-Footnote-183383679
Ref: Biblioteca<14>-Footnote-193383736
Ref: Biblioteca<14>-Footnote-203383793
Ref: Biblioteca<14>-Footnote-213383850
Ref: Biblioteca<14>-Footnote-223383907
Ref: Biblioteca<14>-Footnote-233383964
Ref: Biblioteca<14>-Footnote-243384021
Ref: Biblioteca<14>-Footnote-253384078
Ref: Biblioteca<14>-Footnote-263384135
Ref: Biblioteca<14>-Footnote-273384192
Ref: Biblioteca<14>-Footnote-283384249
Ref: Biblioteca<14>-Footnote-293384306
Ref: Biblioteca<14>-Footnote-303384363
Ref: Biblioteca<14>-Footnote-313384420
Ref: Biblioteca<14>-Footnote-323384477
Ref: Biblioteca<14>-Footnote-333384534
Ref: Biblioteca<14>-Footnote-343384591
Ref: Biblioteca<14>-Footnote-353384648
Ref: Biblioteca<14>-Footnote-363384705
Ref: Biblioteca<14>-Footnote-373384762
Ref: Biblioteca<14>-Footnote-383384819
Ref: Biblioteca<14>-Footnote-393384876
Ref: Biblioteca<14>-Footnote-403384933
Ref: Biblioteca<14>-Footnote-413384990
Ref: Biblioteca<14>-Footnote-423385047
Ref: Biblioteca<14>-Footnote-433385104
Ref: Biblioteca<14>-Footnote-443385161
Ref: Biblioteca<14>-Footnote-453385218
Ref: Biblioteca<14>-Footnote-463385275
Ref: Biblioteca<14>-Footnote-473385331
Ref: Biblioteca<14>-Footnote-483385388
Ref: Biblioteca<14>-Footnote-493385445
Ref: Biblioteca<14>-Footnote-503385502
Ref: Biblioteca<14>-Footnote-513385559
Ref: Biblioteca<14>-Footnote-523385615
Ref: Biblioteca<14>-Footnote-533385672
Ref: Biblioteca<14>-Footnote-543385728
Ref: Biblioteca<14>-Footnote-553385785
Ref: Biblioteca<14>-Footnote-563385842
Ref: Biblioteca<14>-Footnote-573385901
Ref: Biblioteca<14>-Footnote-583385961
Ref: Biblioteca<14>-Footnote-593386018
Ref: Biblioteca<14>-Footnote-603386075
Ref: Biblioteca<14>-Footnote-613386132
Ref: Biblioteca<14>-Footnote-623386188
Ref: Biblioteca<14>-Footnote-633386244
Node: Documentação<9>3386300
Ref: whatsnew/changelog id973386430
Ref: 18463386430
Ref: Documentação<9>-Footnote-13386620
Node: Núcleo e embutidos<13>3386676
Ref: whatsnew/changelog id983386801
Ref: 18483386801
Ref: Núcleo e embutidos<13>-Footnote-13391760
Ref: Núcleo e embutidos<13>-Footnote-23391816
Ref: Núcleo e embutidos<13>-Footnote-33391872
Ref: Núcleo e embutidos<13>-Footnote-43391928
Ref: Núcleo e embutidos<13>-Footnote-53391984
Ref: Núcleo e embutidos<13>-Footnote-63392040
Ref: Núcleo e embutidos<13>-Footnote-73392096
Ref: Núcleo e embutidos<13>-Footnote-83392152
Ref: Núcleo e embutidos<13>-Footnote-93392208
Ref: Núcleo e embutidos<13>-Footnote-103392264
Ref: Núcleo e embutidos<13>-Footnote-113392321
Ref: Núcleo e embutidos<13>-Footnote-123392378
Ref: Núcleo e embutidos<13>-Footnote-133392435
Ref: Núcleo e embutidos<13>-Footnote-143392492
Ref: Núcleo e embutidos<13>-Footnote-153392549
Ref: Núcleo e embutidos<13>-Footnote-163392606
Ref: Núcleo e embutidos<13>-Footnote-173392663
Ref: Núcleo e embutidos<13>-Footnote-183392720
Ref: Núcleo e embutidos<13>-Footnote-193392777
Ref: Núcleo e embutidos<13>-Footnote-203392834
Ref: Núcleo e embutidos<13>-Footnote-213392891
Ref: Núcleo e embutidos<13>-Footnote-223392948
Ref: Núcleo e embutidos<13>-Footnote-233393005
Ref: Núcleo e embutidos<13>-Footnote-243393062
Ref: Núcleo e embutidos<13>-Footnote-253393119
Ref: Núcleo e embutidos<13>-Footnote-263393175
Ref: Núcleo e embutidos<13>-Footnote-273393232
Node: API C<11>3393289
Ref: whatsnew/changelog id993393413
Ref: 184f3393413
Ref: API C<11>-Footnote-13395776
Ref: API C<11>-Footnote-23395832
Ref: API C<11>-Footnote-33395888
Ref: API C<11>-Footnote-43395944
Ref: API C<11>-Footnote-53396000
Ref: API C<11>-Footnote-63396056
Ref: API C<11>-Footnote-73396112
Ref: API C<11>-Footnote-83396168
Ref: API C<11>-Footnote-93396224
Ref: API C<11>-Footnote-103396266
Node: Construção<12>3396323
Ref: whatsnew/changelog id1003396415
Ref: 18553396415
Ref: Construção<12>-Footnote-13396983
Ref: Construção<12>-Footnote-23397039
Ref: Construção<12>-Footnote-33397095
Ref: Construção<12>-Footnote-43397151
Ref: Construção<12>-Footnote-53397207
Node: Python 3 14 0 alpha 23397263
Ref: whatsnew/changelog python-3-14-0-alpha-23397390
Ref: 18563397390
Node: Windows<10>3397786
Ref: whatsnew/changelog id1013397885
Ref: 18573397885
Ref: Windows<10>-Footnote-13399125
Ref: Windows<10>-Footnote-23399181
Ref: Windows<10>-Footnote-33399237
Ref: Windows<10>-Footnote-43399293
Ref: Windows<10>-Footnote-53399349
Ref: Windows<10>-Footnote-63399405
Ref: Windows<10>-Footnote-73399461
Ref: Windows<10>-Footnote-83399517
Ref: Windows<10>-Footnote-93399573
Node: Ferramentas/Demos<13>3399629
Ref: whatsnew/changelog id1023399747
Ref: 18583399747
Ref: Ferramentas/Demos<13>-Footnote-13400132
Ref: Ferramentas/Demos<13>-Footnote-23400188
Node: Testes<11>3400244
Ref: whatsnew/changelog id1033400365
Ref: 18593400365
Ref: Testes<11>-Footnote-13400809
Ref: Testes<11>-Footnote-23400865
Ref: Testes<11>-Footnote-33400921
Node: Segurança<13>3400977
Ref: whatsnew/changelog id1043401091
Ref: 185a3401091
Ref: Segurança<13>-Footnote-13401218
Node: Biblioteca<15>3401274
Ref: whatsnew/changelog id1053401396
Ref: 185b3401396
Ref: Biblioteca<15>-Footnote-13420815
Ref: Biblioteca<15>-Footnote-23420870
Ref: Biblioteca<15>-Footnote-33420926
Ref: Biblioteca<15>-Footnote-43420981
Ref: Biblioteca<15>-Footnote-53421037
Ref: Biblioteca<15>-Footnote-63421093
Ref: Biblioteca<15>-Footnote-73421149
Ref: Biblioteca<15>-Footnote-83421205
Ref: Biblioteca<15>-Footnote-93421261
Ref: Biblioteca<15>-Footnote-103421317
Ref: Biblioteca<15>-Footnote-113421374
Ref: Biblioteca<15>-Footnote-123421431
Ref: Biblioteca<15>-Footnote-133421488
Ref: Biblioteca<15>-Footnote-143421545
Ref: Biblioteca<15>-Footnote-153421602
Ref: Biblioteca<15>-Footnote-163421659
Ref: Biblioteca<15>-Footnote-173421716
Ref: Biblioteca<15>-Footnote-183421773
Ref: Biblioteca<15>-Footnote-193421830
Ref: Biblioteca<15>-Footnote-203421887
Ref: Biblioteca<15>-Footnote-213421944
Ref: Biblioteca<15>-Footnote-223422001
Ref: Biblioteca<15>-Footnote-233422057
Ref: Biblioteca<15>-Footnote-243422117
Ref: Biblioteca<15>-Footnote-253422174
Ref: Biblioteca<15>-Footnote-263422231
Ref: Biblioteca<15>-Footnote-273422288
Ref: Biblioteca<15>-Footnote-283422345
Ref: Biblioteca<15>-Footnote-293422402
Ref: Biblioteca<15>-Footnote-303422459
Ref: Biblioteca<15>-Footnote-313422516
Ref: Biblioteca<15>-Footnote-323422573
Ref: Biblioteca<15>-Footnote-333422630
Ref: Biblioteca<15>-Footnote-343422687
Ref: Biblioteca<15>-Footnote-353422744
Ref: Biblioteca<15>-Footnote-363422801
Ref: Biblioteca<15>-Footnote-373422858
Ref: Biblioteca<15>-Footnote-383422915
Ref: Biblioteca<15>-Footnote-393422972
Ref: Biblioteca<15>-Footnote-403423029
Ref: Biblioteca<15>-Footnote-413423086
Ref: Biblioteca<15>-Footnote-423423143
Ref: Biblioteca<15>-Footnote-433423200
Ref: Biblioteca<15>-Footnote-443423257
Ref: Biblioteca<15>-Footnote-453423314
Ref: Biblioteca<15>-Footnote-463423371
Ref: Biblioteca<15>-Footnote-473423428
Ref: Biblioteca<15>-Footnote-483423488
Ref: Biblioteca<15>-Footnote-493423545
Ref: Biblioteca<15>-Footnote-503423602
Ref: Biblioteca<15>-Footnote-513423659
Ref: Biblioteca<15>-Footnote-523423716
Ref: Biblioteca<15>-Footnote-533423773
Ref: Biblioteca<15>-Footnote-543423830
Ref: Biblioteca<15>-Footnote-553423887
Ref: Biblioteca<15>-Footnote-563423944
Ref: Biblioteca<15>-Footnote-573424001
Ref: Biblioteca<15>-Footnote-583424058
Ref: Biblioteca<15>-Footnote-593424114
Ref: Biblioteca<15>-Footnote-603424171
Ref: Biblioteca<15>-Footnote-613424228
Ref: Biblioteca<15>-Footnote-623424285
Ref: Biblioteca<15>-Footnote-633424342
Ref: Biblioteca<15>-Footnote-643424399
Ref: Biblioteca<15>-Footnote-653424456
Ref: Biblioteca<15>-Footnote-663424512
Ref: Biblioteca<15>-Footnote-673424569
Ref: Biblioteca<15>-Footnote-683424626
Ref: Biblioteca<15>-Footnote-693424683
Ref: Biblioteca<15>-Footnote-703424740
Ref: Biblioteca<15>-Footnote-713424797
Ref: Biblioteca<15>-Footnote-723424854
Ref: Biblioteca<15>-Footnote-733424911
Ref: Biblioteca<15>-Footnote-743424968
Ref: Biblioteca<15>-Footnote-753425025
Ref: Biblioteca<15>-Footnote-763425082
Ref: Biblioteca<15>-Footnote-773425139
Ref: Biblioteca<15>-Footnote-783425196
Ref: Biblioteca<15>-Footnote-793425252
Ref: Biblioteca<15>-Footnote-803425309
Ref: Biblioteca<15>-Footnote-813425366
Ref: Biblioteca<15>-Footnote-823425423
Ref: Biblioteca<15>-Footnote-833425466
Ref: Biblioteca<15>-Footnote-843425522
Ref: Biblioteca<15>-Footnote-853425578
Ref: Biblioteca<15>-Footnote-863425634
Ref: Biblioteca<15>-Footnote-873425691
Ref: Biblioteca<15>-Footnote-883425747
Ref: Biblioteca<15>-Footnote-893425804
Ref: Biblioteca<15>-Footnote-903425860
Ref: Biblioteca<15>-Footnote-913425920
Ref: Biblioteca<15>-Footnote-923425977
Ref: Biblioteca<15>-Footnote-933426034
Ref: Biblioteca<15>-Footnote-943426091
Ref: Biblioteca<15>-Footnote-953426147
Ref: Biblioteca<15>-Footnote-963426204
Ref: Biblioteca<15>-Footnote-973426261
Ref: Biblioteca<15>-Footnote-983426317
Ref: Biblioteca<15>-Footnote-993426374
Ref: Biblioteca<15>-Footnote-1003426431
Ref: Biblioteca<15>-Footnote-1013426489
Ref: Biblioteca<15>-Footnote-1023426546
Ref: Biblioteca<15>-Footnote-1033426613
Node: Documentação<10>3426670
Ref: whatsnew/changelog id1063426801
Ref: 186c3426801
Ref: Documentação<10>-Footnote-13427390
Ref: Documentação<10>-Footnote-23427446
Ref: Documentação<10>-Footnote-33427502
Node: Núcleo e embutidos<14>3427557
Ref: whatsnew/changelog id1073427683
Ref: 186d3427683
Ref: Núcleo e embutidos<14>-Footnote-13434158
Ref: Núcleo e embutidos<14>-Footnote-23434214
Ref: Núcleo e embutidos<14>-Footnote-33434270
Ref: Núcleo e embutidos<14>-Footnote-43434326
Ref: Núcleo e embutidos<14>-Footnote-53434382
Ref: Núcleo e embutidos<14>-Footnote-63434438
Ref: Núcleo e embutidos<14>-Footnote-73434494
Ref: Núcleo e embutidos<14>-Footnote-83434550
Ref: Núcleo e embutidos<14>-Footnote-93434606
Ref: Núcleo e embutidos<14>-Footnote-103434662
Ref: Núcleo e embutidos<14>-Footnote-113434719
Ref: Núcleo e embutidos<14>-Footnote-123434776
Ref: Núcleo e embutidos<14>-Footnote-133434833
Ref: Núcleo e embutidos<14>-Footnote-143434890
Ref: Núcleo e embutidos<14>-Footnote-153434947
Ref: Núcleo e embutidos<14>-Footnote-163435004
Ref: Núcleo e embutidos<14>-Footnote-173435060
Ref: Núcleo e embutidos<14>-Footnote-183435117
Ref: Núcleo e embutidos<14>-Footnote-193435174
Ref: Núcleo e embutidos<14>-Footnote-203435231
Ref: Núcleo e embutidos<14>-Footnote-213435288
Ref: Núcleo e embutidos<14>-Footnote-223435345
Ref: Núcleo e embutidos<14>-Footnote-233435402
Ref: Núcleo e embutidos<14>-Footnote-243435459
Ref: Núcleo e embutidos<14>-Footnote-253435516
Ref: Núcleo e embutidos<14>-Footnote-263435573
Ref: Núcleo e embutidos<14>-Footnote-273435630
Ref: Núcleo e embutidos<14>-Footnote-283435687
Ref: Núcleo e embutidos<14>-Footnote-293435744
Ref: Núcleo e embutidos<14>-Footnote-303435801
Ref: Núcleo e embutidos<14>-Footnote-313435858
Ref: Núcleo e embutidos<14>-Footnote-323435915
Ref: Núcleo e embutidos<14>-Footnote-333435972
Ref: Núcleo e embutidos<14>-Footnote-343436029
Ref: Núcleo e embutidos<14>-Footnote-353436086
Ref: Núcleo e embutidos<14>-Footnote-363436143
Node: API C<12>3436200
Ref: whatsnew/changelog id1083436324
Ref: 186f3436324
Ref: API C<12>-Footnote-13437387
Ref: API C<12>-Footnote-23437443
Ref: API C<12>-Footnote-33437499
Ref: API C<12>-Footnote-43437555
Ref: API C<12>-Footnote-53437611
Ref: API C<12>-Footnote-63437653
Ref: API C<12>-Footnote-73437709
Node: Construção<13>3437765
Ref: whatsnew/changelog id1093437857
Ref: 18703437857
Ref: Construção<13>-Footnote-13439579
Ref: Construção<13>-Footnote-23439635
Ref: Construção<13>-Footnote-33439691
Ref: Construção<13>-Footnote-43439747
Ref: Construção<13>-Footnote-53439802
Ref: Construção<13>-Footnote-63439858
Ref: Construção<13>-Footnote-73439914
Ref: Construção<13>-Footnote-83439970
Ref: Construção<13>-Footnote-93440026
Ref: Construção<13>-Footnote-103440082
Ref: Construção<13>-Footnote-113440148
Ref: Construção<13>-Footnote-123440204
Ref: Construção<13>-Footnote-133440261
Node: Python 3 14 0 alpha 13440318
Ref: whatsnew/changelog python-3-14-0-alpha-13440444
Ref: 18713440444
Node: macOS<7>3440876
Ref: whatsnew/changelog id1103440962
Ref: 18723440962
Ref: macOS<7>-Footnote-13441334
Ref: macOS<7>-Footnote-23441390
Ref: macOS<7>-Footnote-33441446
Node: Windows<11>3441502
Ref: whatsnew/changelog id1113441618
Ref: 18733441618
Ref: Windows<11>-Footnote-13443679
Ref: Windows<11>-Footnote-23443735
Ref: Windows<11>-Footnote-33443791
Ref: Windows<11>-Footnote-43443847
Ref: Windows<11>-Footnote-53443903
Ref: Windows<11>-Footnote-63443959
Ref: Windows<11>-Footnote-73444015
Ref: Windows<11>-Footnote-83444071
Ref: Windows<11>-Footnote-93444127
Ref: Windows<11>-Footnote-103444183
Ref: Windows<11>-Footnote-113444240
Ref: Windows<11>-Footnote-123444297
Ref: Windows<11>-Footnote-133444354
Ref: Windows<11>-Footnote-143444411
Ref: Windows<11>-Footnote-153444468
Ref: Windows<11>-Footnote-163444525
Node: Ferramentas/Demos<14>3444581
Ref: whatsnew/changelog id1123444699
Ref: 18743444699
Ref: Ferramentas/Demos<14>-Footnote-13444937
Node: Testes<12>3444993
Ref: whatsnew/changelog id1133445114
Ref: 18753445114
Ref: Testes<12>-Footnote-13448354
Ref: Testes<12>-Footnote-23448410
Ref: Testes<12>-Footnote-33448466
Ref: Testes<12>-Footnote-43448522
Ref: Testes<12>-Footnote-53448578
Ref: Testes<12>-Footnote-63448634
Ref: Testes<12>-Footnote-73448690
Ref: Testes<12>-Footnote-83448745
Ref: Testes<12>-Footnote-93448800
Ref: Testes<12>-Footnote-103448856
Ref: Testes<12>-Footnote-113448913
Ref: Testes<12>-Footnote-123448970
Ref: Testes<12>-Footnote-133449027
Ref: Testes<12>-Footnote-143449084
Ref: Testes<12>-Footnote-153449141
Ref: Testes<12>-Footnote-163449198
Ref: Testes<12>-Footnote-173449255
Ref: Testes<12>-Footnote-183449312
Node: Segurança<14>3449369
Ref: whatsnew/changelog id1143449483
Ref: 18793449483
Ref: Segurança<14>-Footnote-13451909
Ref: Segurança<14>-Footnote-23451965
Ref: Segurança<14>-Footnote-33452021
Ref: Segurança<14>-Footnote-43452077
Ref: Segurança<14>-Footnote-53452133
Ref: Segurança<14>-Footnote-63452189
Ref: Segurança<14>-Footnote-73452245
Ref: Segurança<14>-Footnote-83452301
Ref: Segurança<14>-Footnote-93452357
Ref: Segurança<14>-Footnote-103452413
Ref: Segurança<14>-Footnote-113452470
Ref: Segurança<14>-Footnote-123452527
Ref: Segurança<14>-Footnote-133452584
Ref: Segurança<14>-Footnote-143452641
Node: Biblioteca<16>3452697
Ref: whatsnew/changelog id1153452808
Ref: 187a3452808
Ref: Biblioteca<16>-Footnote-13510861
Ref: Biblioteca<16>-Footnote-23510917
Ref: Biblioteca<16>-Footnote-33510973
Ref: Biblioteca<16>-Footnote-43511028
Ref: Biblioteca<16>-Footnote-53511084
Ref: Biblioteca<16>-Footnote-63511139
Ref: Biblioteca<16>-Footnote-73511195
Ref: Biblioteca<16>-Footnote-83511251
Ref: Biblioteca<16>-Footnote-93511307
Ref: Biblioteca<16>-Footnote-103511363
Ref: Biblioteca<16>-Footnote-113511419
Ref: Biblioteca<16>-Footnote-123511476
Ref: Biblioteca<16>-Footnote-133511533
Ref: Biblioteca<16>-Footnote-143511590
Ref: Biblioteca<16>-Footnote-153511647
Ref: Biblioteca<16>-Footnote-163511704
Ref: Biblioteca<16>-Footnote-173511760
Ref: Biblioteca<16>-Footnote-183511817
Ref: Biblioteca<16>-Footnote-193511873
Ref: Biblioteca<16>-Footnote-203511930
Ref: Biblioteca<16>-Footnote-213511973
Ref: Biblioteca<16>-Footnote-223512030
Ref: Biblioteca<16>-Footnote-233512087
Ref: Biblioteca<16>-Footnote-243512143
Ref: Biblioteca<16>-Footnote-253512200
Ref: Biblioteca<16>-Footnote-263512256
Ref: Biblioteca<16>-Footnote-273512313
Ref: Biblioteca<16>-Footnote-283512369
Ref: Biblioteca<16>-Footnote-293512426
Ref: Biblioteca<16>-Footnote-303512483
Ref: Biblioteca<16>-Footnote-313512539
Ref: Biblioteca<16>-Footnote-323512596
Ref: Biblioteca<16>-Footnote-333512653
Ref: Biblioteca<16>-Footnote-343512710
Ref: Biblioteca<16>-Footnote-353512766
Ref: Biblioteca<16>-Footnote-363512823
Ref: Biblioteca<16>-Footnote-373512880
Ref: Biblioteca<16>-Footnote-383512936
Ref: Biblioteca<16>-Footnote-393512993
Ref: Biblioteca<16>-Footnote-403513049
Ref: Biblioteca<16>-Footnote-413513106
Ref: Biblioteca<16>-Footnote-423513163
Ref: Biblioteca<16>-Footnote-433513220
Ref: Biblioteca<16>-Footnote-443513276
Ref: Biblioteca<16>-Footnote-453513333
Ref: Biblioteca<16>-Footnote-463513390
Ref: Biblioteca<16>-Footnote-473513446
Ref: Biblioteca<16>-Footnote-483513503
Ref: Biblioteca<16>-Footnote-493513560
Ref: Biblioteca<16>-Footnote-503513617
Ref: Biblioteca<16>-Footnote-513513674
Ref: Biblioteca<16>-Footnote-523513731
Ref: Biblioteca<16>-Footnote-533513788
Ref: Biblioteca<16>-Footnote-543513844
Ref: Biblioteca<16>-Footnote-553513901
Ref: Biblioteca<16>-Footnote-563513957
Ref: Biblioteca<16>-Footnote-573514013
Ref: Biblioteca<16>-Footnote-583514069
Ref: Biblioteca<16>-Footnote-593514126
Ref: Biblioteca<16>-Footnote-603514182
Ref: Biblioteca<16>-Footnote-613514239
Ref: Biblioteca<16>-Footnote-623514296
Ref: Biblioteca<16>-Footnote-633514353
Ref: Biblioteca<16>-Footnote-643514409
Ref: Biblioteca<16>-Footnote-653514465
Ref: Biblioteca<16>-Footnote-663514521
Ref: Biblioteca<16>-Footnote-673514578
Ref: Biblioteca<16>-Footnote-683514635
Ref: Biblioteca<16>-Footnote-693514692
Ref: Biblioteca<16>-Footnote-703514749
Ref: Biblioteca<16>-Footnote-713514806
Ref: Biblioteca<16>-Footnote-723514863
Ref: Biblioteca<16>-Footnote-733514920
Ref: Biblioteca<16>-Footnote-743514977
Ref: Biblioteca<16>-Footnote-753515034
Ref: Biblioteca<16>-Footnote-763515090
Ref: Biblioteca<16>-Footnote-773515147
Ref: Biblioteca<16>-Footnote-783515204
Ref: Biblioteca<16>-Footnote-793515261
Ref: Biblioteca<16>-Footnote-803515318
Ref: Biblioteca<16>-Footnote-813515375
Ref: Biblioteca<16>-Footnote-823515432
Ref: Biblioteca<16>-Footnote-833515489
Ref: Biblioteca<16>-Footnote-843515546
Ref: Biblioteca<16>-Footnote-853515603
Ref: Biblioteca<16>-Footnote-863515660
Ref: Biblioteca<16>-Footnote-873515732
Ref: Biblioteca<16>-Footnote-883515789
Ref: Biblioteca<16>-Footnote-893515846
Ref: Biblioteca<16>-Footnote-903515903
Ref: Biblioteca<16>-Footnote-913515960
Ref: Biblioteca<16>-Footnote-923516017
Ref: Biblioteca<16>-Footnote-933516074
Ref: Biblioteca<16>-Footnote-943516131
Ref: Biblioteca<16>-Footnote-953516187
Ref: Biblioteca<16>-Footnote-963516244
Ref: Biblioteca<16>-Footnote-973516301
Ref: Biblioteca<16>-Footnote-983516357
Ref: Biblioteca<16>-Footnote-993516414
Ref: Biblioteca<16>-Footnote-1003516471
Ref: Biblioteca<16>-Footnote-1013516529
Ref: Biblioteca<16>-Footnote-1023516587
Ref: Biblioteca<16>-Footnote-1033516644
Ref: Biblioteca<16>-Footnote-1043516702
Ref: Biblioteca<16>-Footnote-1053516760
Ref: Biblioteca<16>-Footnote-1063516818
Ref: Biblioteca<16>-Footnote-1073516876
Ref: Biblioteca<16>-Footnote-1083516934
Ref: Biblioteca<16>-Footnote-1093516992
Ref: Biblioteca<16>-Footnote-1103517050
Ref: Biblioteca<16>-Footnote-1113517108
Ref: Biblioteca<16>-Footnote-1123517166
Ref: Biblioteca<16>-Footnote-1133517224
Ref: Biblioteca<16>-Footnote-1143517282
Ref: Biblioteca<16>-Footnote-1153517340
Ref: Biblioteca<16>-Footnote-1163517398
Ref: Biblioteca<16>-Footnote-1173517456
Ref: Biblioteca<16>-Footnote-1183517514
Ref: Biblioteca<16>-Footnote-1193517572
Ref: Biblioteca<16>-Footnote-1203517630
Ref: Biblioteca<16>-Footnote-1213517688
Ref: Biblioteca<16>-Footnote-1223517746
Ref: Biblioteca<16>-Footnote-1233517804
Ref: Biblioteca<16>-Footnote-1243517862
Ref: Biblioteca<16>-Footnote-1253517920
Ref: Biblioteca<16>-Footnote-1263517977
Ref: Biblioteca<16>-Footnote-1273518035
Ref: Biblioteca<16>-Footnote-1283518093
Ref: Biblioteca<16>-Footnote-1293518150
Ref: Biblioteca<16>-Footnote-1303518208
Ref: Biblioteca<16>-Footnote-1313518266
Ref: Biblioteca<16>-Footnote-1323518324
Ref: Biblioteca<16>-Footnote-1333518382
Ref: Biblioteca<16>-Footnote-1343518440
Ref: Biblioteca<16>-Footnote-1353518498
Ref: Biblioteca<16>-Footnote-1363518556
Ref: Biblioteca<16>-Footnote-1373518614
Ref: Biblioteca<16>-Footnote-1383518672
Ref: Biblioteca<16>-Footnote-1393518716
Ref: Biblioteca<16>-Footnote-1403518774
Ref: Biblioteca<16>-Footnote-1413518832
Ref: Biblioteca<16>-Footnote-1423518890
Ref: Biblioteca<16>-Footnote-1433518948
Ref: Biblioteca<16>-Footnote-1443519006
Ref: Biblioteca<16>-Footnote-1453519064
Ref: Biblioteca<16>-Footnote-1463519121
Ref: Biblioteca<16>-Footnote-1473519179
Ref: Biblioteca<16>-Footnote-1483519237
Ref: Biblioteca<16>-Footnote-1493519295
Ref: Biblioteca<16>-Footnote-1503519353
Ref: Biblioteca<16>-Footnote-1513519410
Ref: Biblioteca<16>-Footnote-1523519468
Ref: Biblioteca<16>-Footnote-1533519526
Ref: Biblioteca<16>-Footnote-1543519584
Ref: Biblioteca<16>-Footnote-1553519642
Ref: Biblioteca<16>-Footnote-1563519700
Ref: Biblioteca<16>-Footnote-1573519758
Ref: Biblioteca<16>-Footnote-1583519816
Ref: Biblioteca<16>-Footnote-1593519873
Ref: Biblioteca<16>-Footnote-1603519930
Ref: Biblioteca<16>-Footnote-1613519988
Ref: Biblioteca<16>-Footnote-1623520046
Ref: Biblioteca<16>-Footnote-1633520104
Ref: Biblioteca<16>-Footnote-1643520162
Ref: Biblioteca<16>-Footnote-1653520220
Ref: Biblioteca<16>-Footnote-1663520278
Ref: Biblioteca<16>-Footnote-1673520336
Ref: Biblioteca<16>-Footnote-1683520393
Ref: Biblioteca<16>-Footnote-1693520451
Ref: Biblioteca<16>-Footnote-1703520509
Ref: Biblioteca<16>-Footnote-1713520567
Ref: Biblioteca<16>-Footnote-1723520625
Ref: Biblioteca<16>-Footnote-1733520683
Ref: Biblioteca<16>-Footnote-1743520741
Ref: Biblioteca<16>-Footnote-1753520799
Ref: Biblioteca<16>-Footnote-1763520857
Ref: Biblioteca<16>-Footnote-1773520914
Ref: Biblioteca<16>-Footnote-1783520972
Ref: Biblioteca<16>-Footnote-1793521030
Ref: Biblioteca<16>-Footnote-1803521088
Ref: Biblioteca<16>-Footnote-1813521146
Ref: Biblioteca<16>-Footnote-1823521204
Ref: Biblioteca<16>-Footnote-1833521262
Ref: Biblioteca<16>-Footnote-1843521320
Ref: Biblioteca<16>-Footnote-1853521377
Ref: Biblioteca<16>-Footnote-1863521435
Ref: Biblioteca<16>-Footnote-1873521493
Ref: Biblioteca<16>-Footnote-1883521551
Ref: Biblioteca<16>-Footnote-1893521609
Ref: Biblioteca<16>-Footnote-1903521667
Ref: Biblioteca<16>-Footnote-1913521725
Ref: Biblioteca<16>-Footnote-1923521783
Ref: Biblioteca<16>-Footnote-1933521841
Ref: Biblioteca<16>-Footnote-1943521898
Ref: Biblioteca<16>-Footnote-1953521956
Ref: Biblioteca<16>-Footnote-1963522014
Ref: Biblioteca<16>-Footnote-1973522072
Ref: Biblioteca<16>-Footnote-1983522130
Ref: Biblioteca<16>-Footnote-1993522188
Ref: Biblioteca<16>-Footnote-2003522246
Ref: Biblioteca<16>-Footnote-2013522304
Ref: Biblioteca<16>-Footnote-2023522362
Ref: Biblioteca<16>-Footnote-2033522420
Ref: Biblioteca<16>-Footnote-2043522478
Ref: Biblioteca<16>-Footnote-2053522536
Ref: Biblioteca<16>-Footnote-2063522594
Ref: Biblioteca<16>-Footnote-2073522651
Ref: Biblioteca<16>-Footnote-2083522709
Ref: Biblioteca<16>-Footnote-2093522767
Ref: Biblioteca<16>-Footnote-2103522811
Ref: Biblioteca<16>-Footnote-2113522855
Ref: Biblioteca<16>-Footnote-2123522913
Ref: Biblioteca<16>-Footnote-2133522971
Ref: Biblioteca<16>-Footnote-2143523028
Ref: Biblioteca<16>-Footnote-2153523086
Ref: Biblioteca<16>-Footnote-2163523144
Ref: Biblioteca<16>-Footnote-2173523188
Ref: Biblioteca<16>-Footnote-2183523246
Ref: Biblioteca<16>-Footnote-2193523304
Ref: Biblioteca<16>-Footnote-2203523362
Ref: Biblioteca<16>-Footnote-2213523420
Ref: Biblioteca<16>-Footnote-2223523477
Ref: Biblioteca<16>-Footnote-2233523535
Ref: Biblioteca<16>-Footnote-2243523593
Ref: Biblioteca<16>-Footnote-2253523651
Ref: Biblioteca<16>-Footnote-2263523709
Ref: Biblioteca<16>-Footnote-2273523767
Ref: Biblioteca<16>-Footnote-2283523825
Ref: Biblioteca<16>-Footnote-2293523883
Ref: Biblioteca<16>-Footnote-2303523941
Ref: Biblioteca<16>-Footnote-2313523999
Ref: Biblioteca<16>-Footnote-2323524057
Ref: Biblioteca<16>-Footnote-2333524115
Ref: Biblioteca<16>-Footnote-2343524173
Ref: Biblioteca<16>-Footnote-2353524231
Ref: Biblioteca<16>-Footnote-2363524288
Ref: Biblioteca<16>-Footnote-2373524346
Ref: Biblioteca<16>-Footnote-2383524404
Ref: Biblioteca<16>-Footnote-2393524461
Ref: Biblioteca<16>-Footnote-2403524519
Ref: Biblioteca<16>-Footnote-2413524577
Ref: Biblioteca<16>-Footnote-2423524635
Ref: Biblioteca<16>-Footnote-2433524693
Ref: Biblioteca<16>-Footnote-2443524750
Ref: Biblioteca<16>-Footnote-2453524808
Ref: Biblioteca<16>-Footnote-2463524865
Ref: Biblioteca<16>-Footnote-2473524922
Ref: Biblioteca<16>-Footnote-2483524980
Ref: Biblioteca<16>-Footnote-2493525037
Ref: Biblioteca<16>-Footnote-2503525095
Ref: Biblioteca<16>-Footnote-2513525153
Ref: Biblioteca<16>-Footnote-2523525211
Ref: Biblioteca<16>-Footnote-2533525269
Ref: Biblioteca<16>-Footnote-2543525327
Ref: Biblioteca<16>-Footnote-2553525385
Ref: Biblioteca<16>-Footnote-2563525443
Ref: Biblioteca<16>-Footnote-2573525501
Ref: Biblioteca<16>-Footnote-2583525559
Ref: Biblioteca<16>-Footnote-2593525616
Ref: Biblioteca<16>-Footnote-2603525674
Ref: Biblioteca<16>-Footnote-2613525732
Ref: Biblioteca<16>-Footnote-2623525790
Ref: Biblioteca<16>-Footnote-2633525848
Ref: Biblioteca<16>-Footnote-2643525906
Ref: Biblioteca<16>-Footnote-2653525964
Ref: Biblioteca<16>-Footnote-2663526022
Ref: Biblioteca<16>-Footnote-2673526080
Ref: Biblioteca<16>-Footnote-2683526138
Ref: Biblioteca<16>-Footnote-2693526196
Ref: Biblioteca<16>-Footnote-2703526254
Ref: Biblioteca<16>-Footnote-2713526312
Ref: Biblioteca<16>-Footnote-2723526370
Ref: Biblioteca<16>-Footnote-2733526428
Ref: Biblioteca<16>-Footnote-2743526486
Ref: Biblioteca<16>-Footnote-2753526543
Ref: Biblioteca<16>-Footnote-2763526600
Ref: Biblioteca<16>-Footnote-2773526657
Ref: Biblioteca<16>-Footnote-2783526715
Ref: Biblioteca<16>-Footnote-2793526773
Ref: Biblioteca<16>-Footnote-2803526831
Ref: Biblioteca<16>-Footnote-2813526889
Ref: Biblioteca<16>-Footnote-2823526947
Ref: Biblioteca<16>-Footnote-2833527005
Ref: Biblioteca<16>-Footnote-2843527063
Ref: Biblioteca<16>-Footnote-2853527121
Ref: Biblioteca<16>-Footnote-2863527179
Ref: Biblioteca<16>-Footnote-2873527237
Ref: Biblioteca<16>-Footnote-2883527295
Ref: Biblioteca<16>-Footnote-2893527353
Ref: Biblioteca<16>-Footnote-2903527411
Ref: Biblioteca<16>-Footnote-2913527468
Ref: Biblioteca<16>-Footnote-2923527526
Ref: Biblioteca<16>-Footnote-2933527583
Ref: Biblioteca<16>-Footnote-2943527641
Ref: Biblioteca<16>-Footnote-2953527699
Ref: Biblioteca<16>-Footnote-2963527757
Ref: Biblioteca<16>-Footnote-2973527815
Ref: Biblioteca<16>-Footnote-2983527873
Ref: Biblioteca<16>-Footnote-2993527931
Ref: Biblioteca<16>-Footnote-3003527989
Ref: Biblioteca<16>-Footnote-3013528047
Ref: Biblioteca<16>-Footnote-3023528105
Ref: Biblioteca<16>-Footnote-3033528163
Ref: Biblioteca<16>-Footnote-3043528247
Ref: Biblioteca<16>-Footnote-3053528305
Ref: Biblioteca<16>-Footnote-3063528363
Ref: Biblioteca<16>-Footnote-3073528421
Ref: Biblioteca<16>-Footnote-3083528479
Ref: Biblioteca<16>-Footnote-3093528537
Ref: Biblioteca<16>-Footnote-3103528595
Ref: Biblioteca<16>-Footnote-3113528653
Ref: Biblioteca<16>-Footnote-3123528711
Ref: Biblioteca<16>-Footnote-3133528769
Ref: Biblioteca<16>-Footnote-3143528827
Ref: Biblioteca<16>-Footnote-3153528885
Ref: Biblioteca<16>-Footnote-3163528942
Ref: Biblioteca<16>-Footnote-3173529000
Ref: Biblioteca<16>-Footnote-3183529057
Ref: Biblioteca<16>-Footnote-3193529115
Ref: Biblioteca<16>-Footnote-3203529182
Ref: Biblioteca<16>-Footnote-3213529249
Ref: Biblioteca<16>-Footnote-3223529316
Ref: Biblioteca<16>-Footnote-3233529383
Ref: Biblioteca<16>-Footnote-3243529440
Node: IDLE<6>3529507
Ref: whatsnew/changelog id1163529622
Ref: 18b53529622
Ref: IDLE<6>-Footnote-13530674
Ref: IDLE<6>-Footnote-23530730
Ref: IDLE<6>-Footnote-33530786
Ref: IDLE<6>-Footnote-43530842
Ref: IDLE<6>-Footnote-53530897
Ref: IDLE<6>-Footnote-63530953
Node: Documentação<11>3531009
Ref: whatsnew/changelog id1173531133
Ref: 18b63531133
Ref: Documentação<11>-Footnote-13533846
Ref: Documentação<11>-Footnote-23533902
Ref: Documentação<11>-Footnote-33533958
Ref: Documentação<11>-Footnote-43534014
Ref: Documentação<11>-Footnote-53534070
Ref: Documentação<11>-Footnote-63534126
Ref: Documentação<11>-Footnote-73534182
Ref: Documentação<11>-Footnote-83534237
Ref: Documentação<11>-Footnote-93534293
Ref: Documentação<11>-Footnote-103534349
Ref: Documentação<11>-Footnote-113534406
Ref: Documentação<11>-Footnote-123534463
Ref: Documentação<11>-Footnote-133534520
Node: Núcleo e embutidos<15>3534586
Ref: whatsnew/changelog id1183534712
Ref: 18be3534712
Ref: Núcleo e embutidos<15>-Footnote-13564291
Ref: Núcleo e embutidos<15>-Footnote-23564347
Ref: Núcleo e embutidos<15>-Footnote-33564403
Ref: Núcleo e embutidos<15>-Footnote-43564459
Ref: Núcleo e embutidos<15>-Footnote-53564515
Ref: Núcleo e embutidos<15>-Footnote-63564571
Ref: Núcleo e embutidos<15>-Footnote-73564627
Ref: Núcleo e embutidos<15>-Footnote-83564683
Ref: Núcleo e embutidos<15>-Footnote-93564739
Ref: Núcleo e embutidos<15>-Footnote-103564795
Ref: Núcleo e embutidos<15>-Footnote-113564852
Ref: Núcleo e embutidos<15>-Footnote-123564909
Ref: Núcleo e embutidos<15>-Footnote-133564966
Ref: Núcleo e embutidos<15>-Footnote-143565023
Ref: Núcleo e embutidos<15>-Footnote-153565080
Ref: Núcleo e embutidos<15>-Footnote-163565137
Ref: Núcleo e embutidos<15>-Footnote-173565194
Ref: Núcleo e embutidos<15>-Footnote-183565251
Ref: Núcleo e embutidos<15>-Footnote-193565307
Ref: Núcleo e embutidos<15>-Footnote-203565364
Ref: Núcleo e embutidos<15>-Footnote-213565421
Ref: Núcleo e embutidos<15>-Footnote-223565478
Ref: Núcleo e embutidos<15>-Footnote-233565535
Ref: Núcleo e embutidos<15>-Footnote-243565592
Ref: Núcleo e embutidos<15>-Footnote-253565649
Ref: Núcleo e embutidos<15>-Footnote-263565706
Ref: Núcleo e embutidos<15>-Footnote-273565762
Ref: Núcleo e embutidos<15>-Footnote-283565819
Ref: Núcleo e embutidos<15>-Footnote-293565876
Ref: Núcleo e embutidos<15>-Footnote-303565933
Ref: Núcleo e embutidos<15>-Footnote-313565990
Ref: Núcleo e embutidos<15>-Footnote-323566047
Ref: Núcleo e embutidos<15>-Footnote-333566104
Ref: Núcleo e embutidos<15>-Footnote-343566161
Ref: Núcleo e embutidos<15>-Footnote-353566218
Ref: Núcleo e embutidos<15>-Footnote-363566275
Ref: Núcleo e embutidos<15>-Footnote-373566332
Ref: Núcleo e embutidos<15>-Footnote-383566389
Ref: Núcleo e embutidos<15>-Footnote-393566446
Ref: Núcleo e embutidos<15>-Footnote-403566503
Ref: Núcleo e embutidos<15>-Footnote-413566560
Ref: Núcleo e embutidos<15>-Footnote-423566617
Ref: Núcleo e embutidos<15>-Footnote-433566674
Ref: Núcleo e embutidos<15>-Footnote-443566731
Ref: Núcleo e embutidos<15>-Footnote-453566788
Ref: Núcleo e embutidos<15>-Footnote-463566845
Ref: Núcleo e embutidos<15>-Footnote-473566902
Ref: Núcleo e embutidos<15>-Footnote-483566959
Ref: Núcleo e embutidos<15>-Footnote-493567016
Ref: Núcleo e embutidos<15>-Footnote-503567073
Ref: Núcleo e embutidos<15>-Footnote-513567130
Ref: Núcleo e embutidos<15>-Footnote-523567187
Ref: Núcleo e embutidos<15>-Footnote-533567244
Ref: Núcleo e embutidos<15>-Footnote-543567301
Ref: Núcleo e embutidos<15>-Footnote-553567358
Ref: Núcleo e embutidos<15>-Footnote-563567415
Ref: Núcleo e embutidos<15>-Footnote-573567472
Ref: Núcleo e embutidos<15>-Footnote-583567529
Ref: Núcleo e embutidos<15>-Footnote-593567586
Ref: Núcleo e embutidos<15>-Footnote-603567643
Ref: Núcleo e embutidos<15>-Footnote-613567700
Ref: Núcleo e embutidos<15>-Footnote-623567757
Ref: Núcleo e embutidos<15>-Footnote-633567814
Ref: Núcleo e embutidos<15>-Footnote-643567871
Ref: Núcleo e embutidos<15>-Footnote-653567928
Ref: Núcleo e embutidos<15>-Footnote-663567985
Ref: Núcleo e embutidos<15>-Footnote-673568042
Ref: Núcleo e embutidos<15>-Footnote-683568099
Ref: Núcleo e embutidos<15>-Footnote-693568156
Ref: Núcleo e embutidos<15>-Footnote-703568213
Ref: Núcleo e embutidos<15>-Footnote-713568270
Ref: Núcleo e embutidos<15>-Footnote-723568327
Ref: Núcleo e embutidos<15>-Footnote-733568384
Ref: Núcleo e embutidos<15>-Footnote-743568441
Ref: Núcleo e embutidos<15>-Footnote-753568498
Ref: Núcleo e embutidos<15>-Footnote-763568555
Ref: Núcleo e embutidos<15>-Footnote-773568611
Ref: Núcleo e embutidos<15>-Footnote-783568668
Ref: Núcleo e embutidos<15>-Footnote-793568725
Ref: Núcleo e embutidos<15>-Footnote-803568782
Ref: Núcleo e embutidos<15>-Footnote-813568839
Ref: Núcleo e embutidos<15>-Footnote-823568896
Ref: Núcleo e embutidos<15>-Footnote-833568953
Ref: Núcleo e embutidos<15>-Footnote-843569010
Ref: Núcleo e embutidos<15>-Footnote-853569067
Ref: Núcleo e embutidos<15>-Footnote-863569124
Ref: Núcleo e embutidos<15>-Footnote-873569181
Ref: Núcleo e embutidos<15>-Footnote-883569238
Ref: Núcleo e embutidos<15>-Footnote-893569295
Ref: Núcleo e embutidos<15>-Footnote-903569352
Ref: Núcleo e embutidos<15>-Footnote-913569409
Ref: Núcleo e embutidos<15>-Footnote-923569466
Ref: Núcleo e embutidos<15>-Footnote-933569523
Ref: Núcleo e embutidos<15>-Footnote-943569580
Ref: Núcleo e embutidos<15>-Footnote-953569637
Ref: Núcleo e embutidos<15>-Footnote-963569694
Ref: Núcleo e embutidos<15>-Footnote-973569751
Ref: Núcleo e embutidos<15>-Footnote-983569808
Ref: Núcleo e embutidos<15>-Footnote-993569865
Ref: Núcleo e embutidos<15>-Footnote-1003569922
Ref: Núcleo e embutidos<15>-Footnote-1013569980
Ref: Núcleo e embutidos<15>-Footnote-1023570038
Ref: Núcleo e embutidos<15>-Footnote-1033570096
Ref: Núcleo e embutidos<15>-Footnote-1043570153
Ref: Núcleo e embutidos<15>-Footnote-1053570211
Ref: Núcleo e embutidos<15>-Footnote-1063570269
Ref: Núcleo e embutidos<15>-Footnote-1073570327
Ref: Núcleo e embutidos<15>-Footnote-1083570385
Ref: Núcleo e embutidos<15>-Footnote-1093570443
Ref: Núcleo e embutidos<15>-Footnote-1103570501
Ref: Núcleo e embutidos<15>-Footnote-1113570559
Ref: Núcleo e embutidos<15>-Footnote-1123570617
Ref: Núcleo e embutidos<15>-Footnote-1133570675
Ref: Núcleo e embutidos<15>-Footnote-1143570733
Ref: Núcleo e embutidos<15>-Footnote-1153570791
Ref: Núcleo e embutidos<15>-Footnote-1163570849
Ref: Núcleo e embutidos<15>-Footnote-1173570907
Ref: Núcleo e embutidos<15>-Footnote-1183570965
Ref: Núcleo e embutidos<15>-Footnote-1193571023
Ref: Núcleo e embutidos<15>-Footnote-1203571080
Ref: Núcleo e embutidos<15>-Footnote-1213571138
Ref: Núcleo e embutidos<15>-Footnote-1223571196
Ref: Núcleo e embutidos<15>-Footnote-1233571254
Ref: Núcleo e embutidos<15>-Footnote-1243571312
Ref: Núcleo e embutidos<15>-Footnote-1253571370
Ref: Núcleo e embutidos<15>-Footnote-1263571427
Ref: Núcleo e embutidos<15>-Footnote-1273571485
Ref: Núcleo e embutidos<15>-Footnote-1283571543
Ref: Núcleo e embutidos<15>-Footnote-1293571601
Ref: Núcleo e embutidos<15>-Footnote-1303571659
Ref: Núcleo e embutidos<15>-Footnote-1313571717
Ref: Núcleo e embutidos<15>-Footnote-1323571775
Ref: Núcleo e embutidos<15>-Footnote-1333571833
Ref: Núcleo e embutidos<15>-Footnote-1343571877
Ref: Núcleo e embutidos<15>-Footnote-1353571935
Ref: Núcleo e embutidos<15>-Footnote-1363571993
Ref: Núcleo e embutidos<15>-Footnote-1373572051
Ref: Núcleo e embutidos<15>-Footnote-1383572109
Ref: Núcleo e embutidos<15>-Footnote-1393572167
Ref: Núcleo e embutidos<15>-Footnote-1403572225
Ref: Núcleo e embutidos<15>-Footnote-1413572283
Ref: Núcleo e embutidos<15>-Footnote-1423572341
Ref: Núcleo e embutidos<15>-Footnote-1433572399
Ref: Núcleo e embutidos<15>-Footnote-1443572457
Ref: Núcleo e embutidos<15>-Footnote-1453572515
Ref: Núcleo e embutidos<15>-Footnote-1463572573
Ref: Núcleo e embutidos<15>-Footnote-1473572631
Ref: Núcleo e embutidos<15>-Footnote-1483572689
Ref: Núcleo e embutidos<15>-Footnote-1493572747
Ref: Núcleo e embutidos<15>-Footnote-1503572791
Ref: Núcleo e embutidos<15>-Footnote-1513572849
Ref: Núcleo e embutidos<15>-Footnote-1523572907
Ref: Núcleo e embutidos<15>-Footnote-1533572965
Ref: Núcleo e embutidos<15>-Footnote-1543573023
Ref: Núcleo e embutidos<15>-Footnote-1553573081
Ref: Núcleo e embutidos<15>-Footnote-1563573125
Ref: Núcleo e embutidos<15>-Footnote-1573573183
Ref: Núcleo e embutidos<15>-Footnote-1583573241
Ref: Núcleo e embutidos<15>-Footnote-1593573299
Ref: Núcleo e embutidos<15>-Footnote-1603573357
Ref: Núcleo e embutidos<15>-Footnote-1613573415
Ref: Núcleo e embutidos<15>-Footnote-1623573473
Ref: Núcleo e embutidos<15>-Footnote-1633573531
Ref: Núcleo e embutidos<15>-Footnote-1643573589
Ref: Núcleo e embutidos<15>-Footnote-1653573647
Ref: Núcleo e embutidos<15>-Footnote-1663573691
Ref: Núcleo e embutidos<15>-Footnote-1673573749
Ref: Núcleo e embutidos<15>-Footnote-1683573807
Ref: Núcleo e embutidos<15>-Footnote-1693573865
Ref: Núcleo e embutidos<15>-Footnote-1703573923
Ref: Núcleo e embutidos<15>-Footnote-1713573981
Ref: Núcleo e embutidos<15>-Footnote-1723574039
Ref: Núcleo e embutidos<15>-Footnote-1733574096
Ref: Núcleo e embutidos<15>-Footnote-1743574153
Node: API C<13>3574220
Ref: whatsnew/changelog id1193574344
Ref: 18cf3574344
Ref: API C<13>-Footnote-13586365
Ref: API C<13>-Footnote-23586421
Ref: API C<13>-Footnote-33586477
Ref: API C<13>-Footnote-43586533
Ref: API C<13>-Footnote-53586575
Ref: API C<13>-Footnote-63586617
Ref: API C<13>-Footnote-73586673
Ref: API C<13>-Footnote-83586729
Ref: API C<13>-Footnote-93586771
Ref: API C<13>-Footnote-103586813
Ref: API C<13>-Footnote-113586870
Ref: API C<13>-Footnote-123586927
Ref: API C<13>-Footnote-133586984
Ref: API C<13>-Footnote-143587041
Ref: API C<13>-Footnote-153587084
Ref: API C<13>-Footnote-163587141
Ref: API C<13>-Footnote-173587198
Ref: API C<13>-Footnote-183587255
Ref: API C<13>-Footnote-193587312
Ref: API C<13>-Footnote-203587369
Ref: API C<13>-Footnote-213587426
Ref: API C<13>-Footnote-223587483
Ref: API C<13>-Footnote-233587540
Ref: API C<13>-Footnote-243587597
Ref: API C<13>-Footnote-253587653
Ref: API C<13>-Footnote-263587710
Ref: API C<13>-Footnote-273587767
Ref: API C<13>-Footnote-283587824
Ref: API C<13>-Footnote-293587881
Ref: API C<13>-Footnote-303587938
Ref: API C<13>-Footnote-313587995
Ref: API C<13>-Footnote-323588052
Ref: API C<13>-Footnote-333588109
Ref: API C<13>-Footnote-343588165
Ref: API C<13>-Footnote-353588222
Ref: API C<13>-Footnote-363588279
Ref: API C<13>-Footnote-373588336
Ref: API C<13>-Footnote-383588393
Ref: API C<13>-Footnote-393588450
Ref: API C<13>-Footnote-403588507
Ref: API C<13>-Footnote-413588564
Ref: API C<13>-Footnote-423588621
Ref: API C<13>-Footnote-433588678
Ref: API C<13>-Footnote-443588735
Ref: API C<13>-Footnote-453588792
Ref: API C<13>-Footnote-463588849
Ref: API C<13>-Footnote-473588906
Ref: API C<13>-Footnote-483588963
Ref: API C<13>-Footnote-493589020
Ref: API C<13>-Footnote-503589077
Ref: API C<13>-Footnote-513589134
Ref: API C<13>-Footnote-523589190
Ref: API C<13>-Footnote-533589246
Node: Construção<14>3589312
Ref: whatsnew/changelog id1203589404
Ref: 18dc3589404
Ref: Construção<14>-Footnote-13594460
Ref: Construção<14>-Footnote-23594516
Ref: Construção<14>-Footnote-33594572
Ref: Construção<14>-Footnote-43594628
Ref: Construção<14>-Footnote-53594684
Ref: Construção<14>-Footnote-63594740
Ref: Construção<14>-Footnote-73594796
Ref: Construção<14>-Footnote-83594852
Ref: Construção<14>-Footnote-93594908
Ref: Construção<14>-Footnote-103594964
Ref: Construção<14>-Footnote-113595021
Ref: Construção<14>-Footnote-123595078
Ref: Construção<14>-Footnote-133595135
Ref: Construção<14>-Footnote-143595192
Ref: Construção<14>-Footnote-153595249
Ref: Construção<14>-Footnote-163595306
Ref: Construção<14>-Footnote-173595363
Ref: Construção<14>-Footnote-183595420
Ref: Construção<14>-Footnote-193595477
Ref: Construção<14>-Footnote-203595534
Ref: Construção<14>-Footnote-213595591
Ref: Construção<14>-Footnote-223595648
Ref: Construção<14>-Footnote-233595705
Ref: Construção<14>-Footnote-243595762
Ref: Construção<14>-Footnote-253595819
Ref: Construção<14>-Footnote-263595876
Ref: Construção<14>-Footnote-273595933
Ref: Construção<14>-Footnote-283595990
Ref: Construção<14>-Footnote-293596047
Ref: Construção<14>-Footnote-303596104
Ref: Construção<14>-Footnote-313596161
Ref: Construção<14>-Footnote-323596218
Node: Python 3 13 0 beta 13596275
Ref: whatsnew/changelog python-3-13-0-beta-13596401
Ref: 18de3596401
Node: Segurança<15>3596765
Ref: whatsnew/changelog id1213596868
Ref: 18df3596868
Ref: Segurança<15>-Footnote-13597299
Ref: Segurança<15>-Footnote-23597355
Node: Núcleo e embutidos<16>3597411
Ref: whatsnew/changelog id1223597537
Ref: 18e03597537
Ref: Núcleo e embutidos<16>-Footnote-13607694
Ref: Núcleo e embutidos<16>-Footnote-23607750
Ref: Núcleo e embutidos<16>-Footnote-33607806
Ref: Núcleo e embutidos<16>-Footnote-43607862
Ref: Núcleo e embutidos<16>-Footnote-53607917
Ref: Núcleo e embutidos<16>-Footnote-63607973
Ref: Núcleo e embutidos<16>-Footnote-73608029
Ref: Núcleo e embutidos<16>-Footnote-83608085
Ref: Núcleo e embutidos<16>-Footnote-93608141
Ref: Núcleo e embutidos<16>-Footnote-103608197
Ref: Núcleo e embutidos<16>-Footnote-113608254
Ref: Núcleo e embutidos<16>-Footnote-123608311
Ref: Núcleo e embutidos<16>-Footnote-133608368
Ref: Núcleo e embutidos<16>-Footnote-143608425
Ref: Núcleo e embutidos<16>-Footnote-153608482
Ref: Núcleo e embutidos<16>-Footnote-163608538
Ref: Núcleo e embutidos<16>-Footnote-173608595
Ref: Núcleo e embutidos<16>-Footnote-183608652
Ref: Núcleo e embutidos<16>-Footnote-193608709
Ref: Núcleo e embutidos<16>-Footnote-203608766
Ref: Núcleo e embutidos<16>-Footnote-213608823
Ref: Núcleo e embutidos<16>-Footnote-223608880
Ref: Núcleo e embutidos<16>-Footnote-233608937
Ref: Núcleo e embutidos<16>-Footnote-243608994
Ref: Núcleo e embutidos<16>-Footnote-253609051
Ref: Núcleo e embutidos<16>-Footnote-263609108
Ref: Núcleo e embutidos<16>-Footnote-273609165
Ref: Núcleo e embutidos<16>-Footnote-283609222
Ref: Núcleo e embutidos<16>-Footnote-293609279
Ref: Núcleo e embutidos<16>-Footnote-303609336
Ref: Núcleo e embutidos<16>-Footnote-313609393
Ref: Núcleo e embutidos<16>-Footnote-323609450
Ref: Núcleo e embutidos<16>-Footnote-333609507
Ref: Núcleo e embutidos<16>-Footnote-343609564
Ref: Núcleo e embutidos<16>-Footnote-353609621
Ref: Núcleo e embutidos<16>-Footnote-363609678
Ref: Núcleo e embutidos<16>-Footnote-373609735
Ref: Núcleo e embutidos<16>-Footnote-383609778
Ref: Núcleo e embutidos<16>-Footnote-393609835
Ref: Núcleo e embutidos<16>-Footnote-403609892
Ref: Núcleo e embutidos<16>-Footnote-413609949
Ref: Núcleo e embutidos<16>-Footnote-423610006
Ref: Núcleo e embutidos<16>-Footnote-433610063
Ref: Núcleo e embutidos<16>-Footnote-443610106
Ref: Núcleo e embutidos<16>-Footnote-453610162
Ref: Núcleo e embutidos<16>-Footnote-463610219
Ref: Núcleo e embutidos<16>-Footnote-473610275
Ref: Núcleo e embutidos<16>-Footnote-483610331
Node: Biblioteca<17>3610388
Ref: whatsnew/changelog id1233610518
Ref: 18e33610518
Ref: Biblioteca<17>-Footnote-13628318
Ref: Biblioteca<17>-Footnote-23628374
Ref: Biblioteca<17>-Footnote-33628430
Ref: Biblioteca<17>-Footnote-43628486
Ref: Biblioteca<17>-Footnote-53628542
Ref: Biblioteca<17>-Footnote-63628598
Ref: Biblioteca<17>-Footnote-73628654
Ref: Biblioteca<17>-Footnote-83628710
Ref: Biblioteca<17>-Footnote-93628766
Ref: Biblioteca<17>-Footnote-103628822
Ref: Biblioteca<17>-Footnote-113628879
Ref: Biblioteca<17>-Footnote-123628936
Ref: Biblioteca<17>-Footnote-133628993
Ref: Biblioteca<17>-Footnote-143629050
Ref: Biblioteca<17>-Footnote-153629093
Ref: Biblioteca<17>-Footnote-163629150
Ref: Biblioteca<17>-Footnote-173629207
Ref: Biblioteca<17>-Footnote-183629264
Ref: Biblioteca<17>-Footnote-193629321
Ref: Biblioteca<17>-Footnote-203629378
Ref: Biblioteca<17>-Footnote-213629435
Ref: Biblioteca<17>-Footnote-223629492
Ref: Biblioteca<17>-Footnote-233629549
Ref: Biblioteca<17>-Footnote-243629606
Ref: Biblioteca<17>-Footnote-253629662
Ref: Biblioteca<17>-Footnote-263629719
Ref: Biblioteca<17>-Footnote-273629776
Ref: Biblioteca<17>-Footnote-283629833
Ref: Biblioteca<17>-Footnote-293629890
Ref: Biblioteca<17>-Footnote-303629947
Ref: Biblioteca<17>-Footnote-313630004
Ref: Biblioteca<17>-Footnote-323630047
Ref: Biblioteca<17>-Footnote-333630104
Ref: Biblioteca<17>-Footnote-343630161
Ref: Biblioteca<17>-Footnote-353630218
Ref: Biblioteca<17>-Footnote-363630274
Ref: Biblioteca<17>-Footnote-373630334
Ref: Biblioteca<17>-Footnote-383630390
Ref: Biblioteca<17>-Footnote-393630447
Ref: Biblioteca<17>-Footnote-403630504
Ref: Biblioteca<17>-Footnote-413630561
Ref: Biblioteca<17>-Footnote-423630617
Ref: Biblioteca<17>-Footnote-433630673
Ref: Biblioteca<17>-Footnote-443630716
Ref: Biblioteca<17>-Footnote-453630773
Ref: Biblioteca<17>-Footnote-463630830
Ref: Biblioteca<17>-Footnote-473630887
Ref: Biblioteca<17>-Footnote-483630944
Ref: Biblioteca<17>-Footnote-493631001
Ref: Biblioteca<17>-Footnote-503631058
Ref: Biblioteca<17>-Footnote-513631115
Ref: Biblioteca<17>-Footnote-523631172
Ref: Biblioteca<17>-Footnote-533631229
Ref: Biblioteca<17>-Footnote-543631286
Ref: Biblioteca<17>-Footnote-553631343
Ref: Biblioteca<17>-Footnote-563631400
Ref: Biblioteca<17>-Footnote-573631457
Ref: Biblioteca<17>-Footnote-583631514
Ref: Biblioteca<17>-Footnote-593631571
Ref: Biblioteca<17>-Footnote-603631628
Ref: Biblioteca<17>-Footnote-613631685
Ref: Biblioteca<17>-Footnote-623631742
Ref: Biblioteca<17>-Footnote-633631785
Ref: Biblioteca<17>-Footnote-643631842
Ref: Biblioteca<17>-Footnote-653631899
Ref: Biblioteca<17>-Footnote-663631956
Ref: Biblioteca<17>-Footnote-673632013
Ref: Biblioteca<17>-Footnote-683632056
Ref: Biblioteca<17>-Footnote-693632112
Ref: Biblioteca<17>-Footnote-703632168
Ref: Biblioteca<17>-Footnote-713632225
Ref: Biblioteca<17>-Footnote-723632282
Ref: Biblioteca<17>-Footnote-733632339
Ref: Biblioteca<17>-Footnote-743632395
Ref: Biblioteca<17>-Footnote-753632451
Ref: Biblioteca<17>-Footnote-763632508
Ref: Biblioteca<17>-Footnote-773632565
Ref: Biblioteca<17>-Footnote-783632622
Ref: Biblioteca<17>-Footnote-793632679
Ref: Biblioteca<17>-Footnote-803632735
Ref: Biblioteca<17>-Footnote-813632792
Ref: Biblioteca<17>-Footnote-823632849
Ref: Biblioteca<17>-Footnote-833632905
Ref: Biblioteca<17>-Footnote-843632962
Ref: Biblioteca<17>-Footnote-853633019
Ref: Biblioteca<17>-Footnote-863633075
Ref: Biblioteca<17>-Footnote-873633131
Ref: Biblioteca<17>-Footnote-883633197
Ref: Biblioteca<17>-Footnote-893633263
Ref: Biblioteca<17>-Footnote-903633329
Ref: Biblioteca<17>-Footnote-913633395
Node: Documentação<12>3633461
Ref: whatsnew/changelog id1243633584
Ref: 18f13633584
Ref: Documentação<12>-Footnote-13633772
Node: Construção<15>3633828
Ref: whatsnew/changelog id1253633948
Ref: 18f23633948
Ref: Construção<15>-Footnote-13634992
Ref: Construção<15>-Footnote-23635048
Ref: Construção<15>-Footnote-33635104
Ref: Construção<15>-Footnote-43635160
Ref: Construção<15>-Footnote-53635216
Ref: Construção<15>-Footnote-63635272
Node: Windows<12>3635328
Ref: whatsnew/changelog id1263635438
Ref: 18f33635438
Ref: Windows<12>-Footnote-13636595
Ref: Windows<12>-Footnote-23636651
Ref: Windows<12>-Footnote-33636707
Ref: Windows<12>-Footnote-43636763
Ref: Windows<12>-Footnote-53636819
Ref: Windows<12>-Footnote-63636875
Ref: Windows<12>-Footnote-73636930
Node: macOS<8>3636986
Ref: whatsnew/changelog id1273637087
Ref: 18f43637087
Ref: macOS<8>-Footnote-13637594
Ref: macOS<8>-Footnote-23637650
Ref: macOS<8>-Footnote-33637706
Ref: macOS<8>-Footnote-43637762
Node: IDLE<7>3637817
Ref: whatsnew/changelog id1283637916
Ref: 18f53637916
Ref: IDLE<7>-Footnote-13638077
Node: API C<14>3638142
Ref: whatsnew/changelog id1293638224
Ref: 18f63638224
Ref: API C<14>-Footnote-13639578
Ref: API C<14>-Footnote-23639634
Ref: API C<14>-Footnote-33639690
Ref: API C<14>-Footnote-43639746
Ref: API C<14>-Footnote-53639802
Ref: API C<14>-Footnote-63639858
Ref: API C<14>-Footnote-73639913
Node: Python 3 13 0 alpha 63639969
Ref: whatsnew/changelog python-3-13-0-alpha-63640095
Ref: 18fc3640095
Node: Núcleo e embutidos<17>3640417
Ref: whatsnew/changelog id1303640521
Ref: 18fd3640521
Ref: Núcleo e embutidos<17>-Footnote-13646047
Ref: Núcleo e embutidos<17>-Footnote-23646103
Ref: Núcleo e embutidos<17>-Footnote-33646159
Ref: Núcleo e embutidos<17>-Footnote-43646215
Ref: Núcleo e embutidos<17>-Footnote-53646271
Ref: Núcleo e embutidos<17>-Footnote-63646327
Ref: Núcleo e embutidos<17>-Footnote-73646383
Ref: Núcleo e embutidos<17>-Footnote-83646439
Ref: Núcleo e embutidos<17>-Footnote-93646494
Ref: Núcleo e embutidos<17>-Footnote-103646541
Ref: Núcleo e embutidos<17>-Footnote-113646598
Ref: Núcleo e embutidos<17>-Footnote-123646655
Ref: Núcleo e embutidos<17>-Footnote-133646712
Ref: Núcleo e embutidos<17>-Footnote-143646769
Ref: Núcleo e embutidos<17>-Footnote-153646826
Ref: Núcleo e embutidos<17>-Footnote-163646883
Ref: Núcleo e embutidos<17>-Footnote-173646940
Ref: Núcleo e embutidos<17>-Footnote-183646997
Ref: Núcleo e embutidos<17>-Footnote-193647054
Ref: Núcleo e embutidos<17>-Footnote-203647111
Ref: Núcleo e embutidos<17>-Footnote-213647168
Ref: Núcleo e embutidos<17>-Footnote-223647224
Node: Biblioteca<18>3647290
Ref: whatsnew/changelog id1313647421
Ref: 19003647421
Ref: Biblioteca<18>-Footnote-13658956
Ref: Biblioteca<18>-Footnote-23659012
Ref: Biblioteca<18>-Footnote-33659068
Ref: Biblioteca<18>-Footnote-43659124
Ref: Biblioteca<18>-Footnote-53659180
Ref: Biblioteca<18>-Footnote-63659236
Ref: Biblioteca<18>-Footnote-73659292
Ref: Biblioteca<18>-Footnote-83659348
Ref: Biblioteca<18>-Footnote-93659404
Ref: Biblioteca<18>-Footnote-103659460
Ref: Biblioteca<18>-Footnote-113659517
Ref: Biblioteca<18>-Footnote-123659573
Ref: Biblioteca<18>-Footnote-133659629
Ref: Biblioteca<18>-Footnote-143659686
Ref: Biblioteca<18>-Footnote-153659743
Ref: Biblioteca<18>-Footnote-163659799
Ref: Biblioteca<18>-Footnote-173659856
Ref: Biblioteca<18>-Footnote-183659913
Ref: Biblioteca<18>-Footnote-193659970
Ref: Biblioteca<18>-Footnote-203660027
Ref: Biblioteca<18>-Footnote-213660084
Ref: Biblioteca<18>-Footnote-223660141
Ref: Biblioteca<18>-Footnote-233660198
Ref: Biblioteca<18>-Footnote-243660255
Ref: Biblioteca<18>-Footnote-253660312
Ref: Biblioteca<18>-Footnote-263660369
Ref: Biblioteca<18>-Footnote-273660425
Ref: Biblioteca<18>-Footnote-283660482
Ref: Biblioteca<18>-Footnote-293660539
Ref: Biblioteca<18>-Footnote-303660595
Ref: Biblioteca<18>-Footnote-313660652
Ref: Biblioteca<18>-Footnote-323660709
Ref: Biblioteca<18>-Footnote-333660765
Ref: Biblioteca<18>-Footnote-343660822
Ref: Biblioteca<18>-Footnote-353660890
Ref: Biblioteca<18>-Footnote-363660946
Ref: Biblioteca<18>-Footnote-373661003
Ref: Biblioteca<18>-Footnote-383661060
Ref: Biblioteca<18>-Footnote-393661117
Ref: Biblioteca<18>-Footnote-403661174
Ref: Biblioteca<18>-Footnote-413661230
Ref: Biblioteca<18>-Footnote-423661286
Ref: Biblioteca<18>-Footnote-433661342
Ref: Biblioteca<18>-Footnote-443661399
Ref: Biblioteca<18>-Footnote-453661456
Ref: Biblioteca<18>-Footnote-463661513
Ref: Biblioteca<18>-Footnote-473661570
Ref: Biblioteca<18>-Footnote-483661626
Ref: Biblioteca<18>-Footnote-493661682
Ref: Biblioteca<18>-Footnote-503661739
Ref: Biblioteca<18>-Footnote-513661796
Ref: Biblioteca<18>-Footnote-523661853
Ref: Biblioteca<18>-Footnote-533661910
Ref: Biblioteca<18>-Footnote-543661967
Ref: Biblioteca<18>-Footnote-553662023
Ref: Biblioteca<18>-Footnote-563662080
Ref: Biblioteca<18>-Footnote-573662137
Ref: Biblioteca<18>-Footnote-583662194
Ref: Biblioteca<18>-Footnote-593662250
Ref: Biblioteca<18>-Footnote-603662306
Ref: Biblioteca<18>-Footnote-613662372
Ref: Biblioteca<18>-Footnote-623662438
Ref: Biblioteca<18>-Footnote-633662504
Ref: Biblioteca<18>-Footnote-643662560
Node: Documentação<13>3662626
Ref: whatsnew/changelog id1323662744
Ref: 19083662744
Ref: Documentação<13>-Footnote-13663207
Ref: Documentação<13>-Footnote-23663263
Ref: Documentação<13>-Footnote-33663319
Node: Testes<13>3663374
Ref: whatsnew/changelog id1333663494
Ref: 19093663494
Ref: Testes<13>-Footnote-13664724
Ref: Testes<13>-Footnote-23664779
Ref: Testes<13>-Footnote-33664835
Ref: Testes<13>-Footnote-43664891
Ref: Testes<13>-Footnote-53664947
Ref: Testes<13>-Footnote-63665003
Ref: Testes<13>-Footnote-73665059
Node: Construção<16>3665115
Ref: whatsnew/changelog id1343665228
Ref: 190a3665228
Ref: Construção<16>-Footnote-13665571
Ref: Construção<16>-Footnote-23665627
Ref: Construção<16>-Footnote-33665683
Node: Windows<13>3665738
Ref: whatsnew/changelog id1353665850
Ref: 190b3665850
Ref: Windows<13>-Footnote-13667391
Ref: Windows<13>-Footnote-23667447
Ref: Windows<13>-Footnote-33667503
Ref: Windows<13>-Footnote-43667558
Ref: Windows<13>-Footnote-53667614
Ref: Windows<13>-Footnote-63667669
Node: API C<15>3667725
Ref: whatsnew/changelog id1363667812
Ref: 190d3667812
Ref: API C<15>-Footnote-13671321
Ref: API C<15>-Footnote-23671377
Ref: API C<15>-Footnote-33671419
Ref: API C<15>-Footnote-43671474
Ref: API C<15>-Footnote-53671530
Ref: API C<15>-Footnote-63671586
Ref: API C<15>-Footnote-73671642
Ref: API C<15>-Footnote-83671698
Ref: API C<15>-Footnote-93671754
Ref: API C<15>-Footnote-103671810
Ref: API C<15>-Footnote-113671867
Ref: API C<15>-Footnote-123671924
Ref: API C<15>-Footnote-133671981
Ref: API C<15>-Footnote-143672038
Ref: API C<15>-Footnote-153672081
Ref: API C<15>-Footnote-163672138
Ref: API C<15>-Footnote-173672195
Ref: API C<15>-Footnote-183672251
Ref: API C<15>-Footnote-193672308
Node: Python 3 13 0 alpha 53672365
Ref: whatsnew/changelog python-3-13-0-alpha-53672492
Ref: 190f3672492
Node: Segurança<16>3672924
Ref: whatsnew/changelog id1373673028
Ref: 19103673028
Ref: Segurança<16>-Footnote-13673884
Ref: Segurança<16>-Footnote-23673940
Ref: Segurança<16>-Footnote-33673996
Node: Núcleo e embutidos<18>3674052
Ref: whatsnew/changelog id1383674179
Ref: 19113674179
Ref: Núcleo e embutidos<18>-Footnote-13677178
Ref: Núcleo e embutidos<18>-Footnote-23677234
Ref: Núcleo e embutidos<18>-Footnote-33677290
Ref: Núcleo e embutidos<18>-Footnote-43677332
Ref: Núcleo e embutidos<18>-Footnote-53677388
Ref: Núcleo e embutidos<18>-Footnote-63677444
Ref: Núcleo e embutidos<18>-Footnote-73677500
Ref: Núcleo e embutidos<18>-Footnote-83677556
Ref: Núcleo e embutidos<18>-Footnote-93677612
Ref: Núcleo e embutidos<18>-Footnote-103677668
Ref: Núcleo e embutidos<18>-Footnote-113677725
Ref: Núcleo e embutidos<18>-Footnote-123677782
Ref: Núcleo e embutidos<18>-Footnote-133677839
Ref: Núcleo e embutidos<18>-Footnote-143677896
Ref: Núcleo e embutidos<18>-Footnote-153677953
Ref: Núcleo e embutidos<18>-Footnote-163678010
Ref: Núcleo e embutidos<18>-Footnote-173678067
Ref: Núcleo e embutidos<18>-Footnote-183678124
Node: Biblioteca<19>3678180
Ref: whatsnew/changelog id1393678311
Ref: 19133678311
Ref: Biblioteca<19>-Footnote-13691287
Ref: Biblioteca<19>-Footnote-23691343
Ref: Biblioteca<19>-Footnote-33691399
Ref: Biblioteca<19>-Footnote-43691455
Ref: Biblioteca<19>-Footnote-53691511
Ref: Biblioteca<19>-Footnote-63691553
Ref: Biblioteca<19>-Footnote-73691609
Ref: Biblioteca<19>-Footnote-83691665
Ref: Biblioteca<19>-Footnote-93691721
Ref: Biblioteca<19>-Footnote-103691776
Ref: Biblioteca<19>-Footnote-113691832
Ref: Biblioteca<19>-Footnote-123691888
Ref: Biblioteca<19>-Footnote-133691944
Ref: Biblioteca<19>-Footnote-143692000
Ref: Biblioteca<19>-Footnote-153692057
Ref: Biblioteca<19>-Footnote-163692114
Ref: Biblioteca<19>-Footnote-173692170
Ref: Biblioteca<19>-Footnote-183692226
Ref: Biblioteca<19>-Footnote-193692283
Ref: Biblioteca<19>-Footnote-203692339
Ref: Biblioteca<19>-Footnote-213692396
Ref: Biblioteca<19>-Footnote-223692453
Ref: Biblioteca<19>-Footnote-233692510
Ref: Biblioteca<19>-Footnote-243692567
Ref: Biblioteca<19>-Footnote-253692623
Ref: Biblioteca<19>-Footnote-263692679
Ref: Biblioteca<19>-Footnote-273692736
Ref: Biblioteca<19>-Footnote-283692793
Ref: Biblioteca<19>-Footnote-293692850
Ref: Biblioteca<19>-Footnote-303692907
Ref: Biblioteca<19>-Footnote-313692964
Ref: Biblioteca<19>-Footnote-323693021
Ref: Biblioteca<19>-Footnote-333693078
Ref: Biblioteca<19>-Footnote-343693135
Ref: Biblioteca<19>-Footnote-353693192
Ref: Biblioteca<19>-Footnote-363693249
Ref: Biblioteca<19>-Footnote-373693292
Ref: Biblioteca<19>-Footnote-383693349
Ref: Biblioteca<19>-Footnote-393693406
Ref: Biblioteca<19>-Footnote-403693463
Ref: Biblioteca<19>-Footnote-413693520
Ref: Biblioteca<19>-Footnote-423693577
Ref: Biblioteca<19>-Footnote-433693634
Ref: Biblioteca<19>-Footnote-443693691
Ref: Biblioteca<19>-Footnote-453693748
Ref: Biblioteca<19>-Footnote-463693805
Ref: Biblioteca<19>-Footnote-473693862
Ref: Biblioteca<19>-Footnote-483693918
Ref: Biblioteca<19>-Footnote-493693975
Ref: Biblioteca<19>-Footnote-503694032
Ref: Biblioteca<19>-Footnote-513694088
Ref: Biblioteca<19>-Footnote-523694144
Ref: Biblioteca<19>-Footnote-533694201
Ref: Biblioteca<19>-Footnote-543694257
Ref: Biblioteca<19>-Footnote-553694314
Ref: Biblioteca<19>-Footnote-563694370
Ref: Biblioteca<19>-Footnote-573694427
Ref: Biblioteca<19>-Footnote-583694484
Ref: Biblioteca<19>-Footnote-593694540
Ref: Biblioteca<19>-Footnote-603694596
Ref: Biblioteca<19>-Footnote-613694652
Ref: Biblioteca<19>-Footnote-623694718
Ref: Biblioteca<19>-Footnote-633694784
Ref: Biblioteca<19>-Footnote-643694850
Ref: Biblioteca<19>-Footnote-653694916
Ref: Biblioteca<19>-Footnote-663694982
Ref: Biblioteca<19>-Footnote-673695048
Node: Documentação<14>3695114
Ref: whatsnew/changelog id1403695232
Ref: 191c3695232
Ref: Documentação<14>-Footnote-13695507
Ref: Documentação<14>-Footnote-23695563
Ref: Documentação<14>-Footnote-33695619
Node: Testes<14>3695675
Ref: whatsnew/changelog id1413695795
Ref: 191d3695795
Ref: Testes<14>-Footnote-13697180
Ref: Testes<14>-Footnote-23697235
Ref: Testes<14>-Footnote-33697290
Ref: Testes<14>-Footnote-43697346
Ref: Testes<14>-Footnote-53697402
Ref: Testes<14>-Footnote-63697458
Ref: Testes<14>-Footnote-73697514
Ref: Testes<14>-Footnote-83697570
Ref: Testes<14>-Footnote-93697626
Node: Construção<17>3697682
Ref: whatsnew/changelog id1423697795
Ref: 191e3697795
Ref: Construção<17>-Footnote-13698891
Ref: Construção<17>-Footnote-23698947
Ref: Construção<17>-Footnote-33699002
Ref: Construção<17>-Footnote-43699058
Ref: Construção<17>-Footnote-53699113
Ref: Construção<17>-Footnote-63699169
Ref: Construção<17>-Footnote-73699225
Ref: Construção<17>-Footnote-83699281
Ref: Construção<17>-Footnote-93699337
Node: Windows<14>3699393
Ref: whatsnew/changelog id1433699504
Ref: 191f3699504
Ref: Windows<14>-Footnote-13700720
Ref: Windows<14>-Footnote-23700776
Ref: Windows<14>-Footnote-33700832
Ref: Windows<14>-Footnote-43700888
Node: macOS<9>3700944
Ref: whatsnew/changelog id1443701046
Ref: 19203701046
Ref: macOS<9>-Footnote-13701184
Node: IDLE<8>3701240
Ref: whatsnew/changelog id1453701352
Ref: 19213701352
Ref: IDLE<8>-Footnote-13701576
Node: Ferramentas/Demos<15>3701631
Ref: whatsnew/changelog id1463701744
Ref: 19223701744
Ref: Ferramentas/Demos<15>-Footnote-13702015
Ref: Ferramentas/Demos<15>-Footnote-23702071
Node: API C<16>3702136
Ref: whatsnew/changelog id1473702233
Ref: 19233702233
Ref: API C<16>-Footnote-13702838
Ref: API C<16>-Footnote-23702894
Node: Python 3 13 0 alpha 43702950
Ref: whatsnew/changelog python-3-13-0-alpha-43703077
Ref: 19283703077
Node: Segurança<17>3703510
Ref: whatsnew/changelog id1483703614
Ref: 19293703614
Ref: Segurança<17>-Footnote-13703900
Ref: Segurança<17>-Footnote-23703956
Node: Núcleo e embutidos<19>3704012
Ref: whatsnew/changelog id1493704139
Ref: 192a3704139
Ref: Núcleo e embutidos<19>-Footnote-13709988
Ref: Núcleo e embutidos<19>-Footnote-23710044
Ref: Núcleo e embutidos<19>-Footnote-33710100
Ref: Núcleo e embutidos<19>-Footnote-43710156
Ref: Núcleo e embutidos<19>-Footnote-53710212
Ref: Núcleo e embutidos<19>-Footnote-63710268
Ref: Núcleo e embutidos<19>-Footnote-73710324
Ref: Núcleo e embutidos<19>-Footnote-83710380
Ref: Núcleo e embutidos<19>-Footnote-93710436
Ref: Núcleo e embutidos<19>-Footnote-103710492
Ref: Núcleo e embutidos<19>-Footnote-113710548
Ref: Núcleo e embutidos<19>-Footnote-123710605
Ref: Núcleo e embutidos<19>-Footnote-133710662
Ref: Núcleo e embutidos<19>-Footnote-143710719
Ref: Núcleo e embutidos<19>-Footnote-153710776
Ref: Núcleo e embutidos<19>-Footnote-163710833
Ref: Núcleo e embutidos<19>-Footnote-173710890
Ref: Núcleo e embutidos<19>-Footnote-183710947
Ref: Núcleo e embutidos<19>-Footnote-193711004
Ref: Núcleo e embutidos<19>-Footnote-203711061
Ref: Núcleo e embutidos<19>-Footnote-213711118
Ref: Núcleo e embutidos<19>-Footnote-223711175
Ref: Núcleo e embutidos<19>-Footnote-233711232
Ref: Núcleo e embutidos<19>-Footnote-243711289
Ref: Núcleo e embutidos<19>-Footnote-253711346
Ref: Núcleo e embutidos<19>-Footnote-263711403
Ref: Núcleo e embutidos<19>-Footnote-273711460
Ref: Núcleo e embutidos<19>-Footnote-283711523
Ref: Núcleo e embutidos<19>-Footnote-293711580
Ref: Núcleo e embutidos<19>-Footnote-303711636
Node: Biblioteca<20>3711693
Ref: whatsnew/changelog id1503711824
Ref: 192d3711824
Ref: Biblioteca<20>-Footnote-13727098
Ref: Biblioteca<20>-Footnote-23727154
Ref: Biblioteca<20>-Footnote-33727210
Ref: Biblioteca<20>-Footnote-43727266
Ref: Biblioteca<20>-Footnote-53727322
Ref: Biblioteca<20>-Footnote-63727378
Ref: Biblioteca<20>-Footnote-73727434
Ref: Biblioteca<20>-Footnote-83727490
Ref: Biblioteca<20>-Footnote-93727545
Ref: Biblioteca<20>-Footnote-103727600
Ref: Biblioteca<20>-Footnote-113727657
Ref: Biblioteca<20>-Footnote-123727713
Ref: Biblioteca<20>-Footnote-133727770
Ref: Biblioteca<20>-Footnote-143727826
Ref: Biblioteca<20>-Footnote-153727883
Ref: Biblioteca<20>-Footnote-163727940
Ref: Biblioteca<20>-Footnote-173727997
Ref: Biblioteca<20>-Footnote-183728054
Ref: Biblioteca<20>-Footnote-193728111
Ref: Biblioteca<20>-Footnote-203728167
Ref: Biblioteca<20>-Footnote-213728224
Ref: Biblioteca<20>-Footnote-223728281
Ref: Biblioteca<20>-Footnote-233728337
Ref: Biblioteca<20>-Footnote-243728394
Ref: Biblioteca<20>-Footnote-253728451
Ref: Biblioteca<20>-Footnote-263728507
Ref: Biblioteca<20>-Footnote-273728563
Ref: Biblioteca<20>-Footnote-283728619
Ref: Biblioteca<20>-Footnote-293728676
Ref: Biblioteca<20>-Footnote-303728732
Ref: Biblioteca<20>-Footnote-313728789
Ref: Biblioteca<20>-Footnote-323728846
Ref: Biblioteca<20>-Footnote-333728903
Ref: Biblioteca<20>-Footnote-343728960
Ref: Biblioteca<20>-Footnote-353729017
Ref: Biblioteca<20>-Footnote-363729074
Ref: Biblioteca<20>-Footnote-373729130
Ref: Biblioteca<20>-Footnote-383729187
Ref: Biblioteca<20>-Footnote-393729244
Ref: Biblioteca<20>-Footnote-403729301
Ref: Biblioteca<20>-Footnote-413729358
Ref: Biblioteca<20>-Footnote-423729415
Ref: Biblioteca<20>-Footnote-433729459
Ref: Biblioteca<20>-Footnote-443729516
Ref: Biblioteca<20>-Footnote-453729573
Ref: Biblioteca<20>-Footnote-463729630
Ref: Biblioteca<20>-Footnote-473729687
Ref: Biblioteca<20>-Footnote-483729743
Ref: Biblioteca<20>-Footnote-493729800
Ref: Biblioteca<20>-Footnote-503729857
Ref: Biblioteca<20>-Footnote-513729913
Ref: Biblioteca<20>-Footnote-523729970
Ref: Biblioteca<20>-Footnote-533730027
Ref: Biblioteca<20>-Footnote-543730083
Ref: Biblioteca<20>-Footnote-553730140
Ref: Biblioteca<20>-Footnote-563730197
Ref: Biblioteca<20>-Footnote-573730254
Ref: Biblioteca<20>-Footnote-583730310
Ref: Biblioteca<20>-Footnote-593730367
Ref: Biblioteca<20>-Footnote-603730423
Ref: Biblioteca<20>-Footnote-613730480
Ref: Biblioteca<20>-Footnote-623730537
Ref: Biblioteca<20>-Footnote-633730594
Ref: Biblioteca<20>-Footnote-643730650
Ref: Biblioteca<20>-Footnote-653730706
Ref: Biblioteca<20>-Footnote-663730763
Ref: Biblioteca<20>-Footnote-673730820
Ref: Biblioteca<20>-Footnote-683730876
Ref: Biblioteca<20>-Footnote-693730932
Ref: Biblioteca<20>-Footnote-703730989
Ref: Biblioteca<20>-Footnote-713731046
Ref: Biblioteca<20>-Footnote-723731103
Ref: Biblioteca<20>-Footnote-733731159
Ref: Biblioteca<20>-Footnote-743731216
Ref: Biblioteca<20>-Footnote-753731272
Ref: Biblioteca<20>-Footnote-763731329
Ref: Biblioteca<20>-Footnote-773731385
Node: Documentação<15>3731451
Ref: whatsnew/changelog id1513731569
Ref: 193d3731569
Ref: Documentação<15>-Footnote-13732114
Ref: Documentação<15>-Footnote-23732170
Node: Testes<15>3732226
Ref: whatsnew/changelog id1523732346
Ref: 193e3732346
Ref: Testes<15>-Footnote-13732780
Ref: Testes<15>-Footnote-23732836
Node: Construção<18>3732892
Ref: whatsnew/changelog id1533733005
Ref: 193f3733005
Ref: Construção<18>-Footnote-13733602
Ref: Construção<18>-Footnote-23733658
Ref: Construção<18>-Footnote-33733714
Ref: Construção<18>-Footnote-43733770
Node: Windows<15>3733826
Ref: whatsnew/changelog id1543733938
Ref: 19403733938
Ref: Windows<15>-Footnote-13734789
Ref: Windows<15>-Footnote-23734845
Ref: Windows<15>-Footnote-33734901
Ref: Windows<15>-Footnote-43734957
Ref: Windows<15>-Footnote-53735013
Ref: Windows<15>-Footnote-63735069
Ref: Windows<15>-Footnote-73735125
Node: macOS<10>3735180
Ref: whatsnew/changelog id1553735283
Ref: 19413735283
Ref: macOS<10>-Footnote-13735887
Ref: macOS<10>-Footnote-23735943
Ref: macOS<10>-Footnote-33735999
Ref: macOS<10>-Footnote-43736055
Node: IDLE<9>3736110
Ref: whatsnew/changelog id1563736223
Ref: 19433736223
Ref: IDLE<9>-Footnote-13736599
Ref: IDLE<9>-Footnote-23736654
Node: Ferramentas/Demos<16>3736710
Ref: whatsnew/changelog id1573736823
Ref: 19443736823
Ref: Ferramentas/Demos<16>-Footnote-13737492
Ref: Ferramentas/Demos<16>-Footnote-23737548
Ref: Ferramentas/Demos<16>-Footnote-33737604
Node: API C<17>3737660
Ref: whatsnew/changelog id1583737757
Ref: 19463737757
Ref: API C<17>-Footnote-13739801
Ref: API C<17>-Footnote-23739857
Ref: API C<17>-Footnote-33739913
Ref: API C<17>-Footnote-43739969
Ref: API C<17>-Footnote-53740025
Ref: API C<17>-Footnote-63740081
Ref: API C<17>-Footnote-73740137
Node: Python 3 13 0 alpha 33740193
Ref: whatsnew/changelog python-3-13-0-alpha-33740320
Ref: 19493740320
Node: Segurança<18>3740710
Ref: whatsnew/changelog id1593740814
Ref: 194a3740814
Ref: Segurança<18>-Footnote-13741129
Ref: Segurança<18>-Footnote-23741185
Node: Núcleo e embutidos<20>3741241
Ref: whatsnew/changelog id1603741368
Ref: 194b3741368
Ref: Núcleo e embutidos<20>-Footnote-13749650
Ref: Núcleo e embutidos<20>-Footnote-23749706
Ref: Núcleo e embutidos<20>-Footnote-33749762
Ref: Núcleo e embutidos<20>-Footnote-43749818
Ref: Núcleo e embutidos<20>-Footnote-53749874
Ref: Núcleo e embutidos<20>-Footnote-63749929
Ref: Núcleo e embutidos<20>-Footnote-73749971
Ref: Núcleo e embutidos<20>-Footnote-83750027
Ref: Núcleo e embutidos<20>-Footnote-93750083
Ref: Núcleo e embutidos<20>-Footnote-103750139
Ref: Núcleo e embutidos<20>-Footnote-113750196
Ref: Núcleo e embutidos<20>-Footnote-123750252
Ref: Núcleo e embutidos<20>-Footnote-133750309
Ref: Núcleo e embutidos<20>-Footnote-143750366
Ref: Núcleo e embutidos<20>-Footnote-153750423
Ref: Núcleo e embutidos<20>-Footnote-163750480
Ref: Núcleo e embutidos<20>-Footnote-173750537
Ref: Núcleo e embutidos<20>-Footnote-183750594
Ref: Núcleo e embutidos<20>-Footnote-193750651
Ref: Núcleo e embutidos<20>-Footnote-203750708
Ref: Núcleo e embutidos<20>-Footnote-213750765
Ref: Núcleo e embutidos<20>-Footnote-223750822
Ref: Núcleo e embutidos<20>-Footnote-233750879
Ref: Núcleo e embutidos<20>-Footnote-243750936
Ref: Núcleo e embutidos<20>-Footnote-253750992
Ref: Núcleo e embutidos<20>-Footnote-263751049
Ref: Núcleo e embutidos<20>-Footnote-273751106
Ref: Núcleo e embutidos<20>-Footnote-283751162
Ref: Núcleo e embutidos<20>-Footnote-293751219
Ref: Núcleo e embutidos<20>-Footnote-303751276
Ref: Núcleo e embutidos<20>-Footnote-313751333
Ref: Núcleo e embutidos<20>-Footnote-323751390
Ref: Núcleo e embutidos<20>-Footnote-333751447
Ref: Núcleo e embutidos<20>-Footnote-343751503
Ref: Núcleo e embutidos<20>-Footnote-353751560
Ref: Núcleo e embutidos<20>-Footnote-363751617
Ref: Núcleo e embutidos<20>-Footnote-373751674
Ref: Núcleo e embutidos<20>-Footnote-383751731
Ref: Núcleo e embutidos<20>-Footnote-393751787
Ref: Núcleo e embutidos<20>-Footnote-403751844
Ref: Núcleo e embutidos<20>-Footnote-413751901
Ref: Núcleo e embutidos<20>-Footnote-423751958
Ref: Núcleo e embutidos<20>-Footnote-433752014
Ref: Núcleo e embutidos<20>-Footnote-443752080
Ref: Núcleo e embutidos<20>-Footnote-453752146
Ref: Núcleo e embutidos<20>-Footnote-463752189
Node: Biblioteca<21>3752255
Ref: whatsnew/changelog id1613752386
Ref: 19503752386
Ref: Biblioteca<21>-Footnote-13780030
Ref: Biblioteca<21>-Footnote-23780086
Ref: Biblioteca<21>-Footnote-33780142
Ref: Biblioteca<21>-Footnote-43780198
Ref: Biblioteca<21>-Footnote-53780254
Ref: Biblioteca<21>-Footnote-63780310
Ref: Biblioteca<21>-Footnote-73780366
Ref: Biblioteca<21>-Footnote-83780422
Ref: Biblioteca<21>-Footnote-93780478
Ref: Biblioteca<21>-Footnote-103780534
Ref: Biblioteca<21>-Footnote-113780590
Ref: Biblioteca<21>-Footnote-123780647
Ref: Biblioteca<21>-Footnote-133780704
Ref: Biblioteca<21>-Footnote-143780761
Ref: Biblioteca<21>-Footnote-153780818
Ref: Biblioteca<21>-Footnote-163780875
Ref: Biblioteca<21>-Footnote-173780932
Ref: Biblioteca<21>-Footnote-183780989
Ref: Biblioteca<21>-Footnote-193781046
Ref: Biblioteca<21>-Footnote-203781103
Ref: Biblioteca<21>-Footnote-213781159
Ref: Biblioteca<21>-Footnote-223781216
Ref: Biblioteca<21>-Footnote-233781272
Ref: Biblioteca<21>-Footnote-243781329
Ref: Biblioteca<21>-Footnote-253781386
Ref: Biblioteca<21>-Footnote-263781443
Ref: Biblioteca<21>-Footnote-273781500
Ref: Biblioteca<21>-Footnote-283781557
Ref: Biblioteca<21>-Footnote-293781614
Ref: Biblioteca<21>-Footnote-303781671
Ref: Biblioteca<21>-Footnote-313781728
Ref: Biblioteca<21>-Footnote-323781785
Ref: Biblioteca<21>-Footnote-333781841
Ref: Biblioteca<21>-Footnote-343781898
Ref: Biblioteca<21>-Footnote-353781955
Ref: Biblioteca<21>-Footnote-363782012
Ref: Biblioteca<21>-Footnote-373782068
Ref: Biblioteca<21>-Footnote-383782125
Ref: Biblioteca<21>-Footnote-393782182
Ref: Biblioteca<21>-Footnote-403782239
Ref: Biblioteca<21>-Footnote-413782296
Ref: Biblioteca<21>-Footnote-423782353
Ref: Biblioteca<21>-Footnote-433782410
Ref: Biblioteca<21>-Footnote-443782467
Ref: Biblioteca<21>-Footnote-453782524
Ref: Biblioteca<21>-Footnote-463782581
Ref: Biblioteca<21>-Footnote-473782637
Ref: Biblioteca<21>-Footnote-483782694
Ref: Biblioteca<21>-Footnote-493782750
Ref: Biblioteca<21>-Footnote-503782807
Ref: Biblioteca<21>-Footnote-513782864
Ref: Biblioteca<21>-Footnote-523782921
Ref: Biblioteca<21>-Footnote-533782978
Ref: Biblioteca<21>-Footnote-543783035
Ref: Biblioteca<21>-Footnote-553783092
Ref: Biblioteca<21>-Footnote-563783148
Ref: Biblioteca<21>-Footnote-573783205
Ref: Biblioteca<21>-Footnote-583783261
Ref: Biblioteca<21>-Footnote-593783317
Ref: Biblioteca<21>-Footnote-603783373
Ref: Biblioteca<21>-Footnote-613783430
Ref: Biblioteca<21>-Footnote-623783487
Ref: Biblioteca<21>-Footnote-633783543
Ref: Biblioteca<21>-Footnote-643783599
Ref: Biblioteca<21>-Footnote-653783656
Ref: Biblioteca<21>-Footnote-663783713
Ref: Biblioteca<21>-Footnote-673783770
Ref: Biblioteca<21>-Footnote-683783827
Ref: Biblioteca<21>-Footnote-693783884
Ref: Biblioteca<21>-Footnote-703783941
Ref: Biblioteca<21>-Footnote-713783997
Ref: Biblioteca<21>-Footnote-723784054
Ref: Biblioteca<21>-Footnote-733784111
Ref: Biblioteca<21>-Footnote-743784168
Ref: Biblioteca<21>-Footnote-753784225
Ref: Biblioteca<21>-Footnote-763784282
Ref: Biblioteca<21>-Footnote-773784339
Ref: Biblioteca<21>-Footnote-783784395
Ref: Biblioteca<21>-Footnote-793784452
Ref: Biblioteca<21>-Footnote-803784509
Ref: Biblioteca<21>-Footnote-813784566
Ref: Biblioteca<21>-Footnote-823784622
Ref: Biblioteca<21>-Footnote-833784679
Ref: Biblioteca<21>-Footnote-843784736
Ref: Biblioteca<21>-Footnote-853784793
Ref: Biblioteca<21>-Footnote-863784850
Ref: Biblioteca<21>-Footnote-873784906
Ref: Biblioteca<21>-Footnote-883784963
Ref: Biblioteca<21>-Footnote-893785019
Ref: Biblioteca<21>-Footnote-903785076
Ref: Biblioteca<21>-Footnote-913785133
Ref: Biblioteca<21>-Footnote-923785190
Ref: Biblioteca<21>-Footnote-933785247
Ref: Biblioteca<21>-Footnote-943785304
Ref: Biblioteca<21>-Footnote-953785360
Ref: Biblioteca<21>-Footnote-963785417
Ref: Biblioteca<21>-Footnote-973785473
Ref: Biblioteca<21>-Footnote-983785530
Ref: Biblioteca<21>-Footnote-993785586
Ref: Biblioteca<21>-Footnote-1003785642
Ref: Biblioteca<21>-Footnote-1013785699
Ref: Biblioteca<21>-Footnote-1023785757
Ref: Biblioteca<21>-Footnote-1033785815
Ref: Biblioteca<21>-Footnote-1043785873
Ref: Biblioteca<21>-Footnote-1053785931
Ref: Biblioteca<21>-Footnote-1063785988
Ref: Biblioteca<21>-Footnote-1073786045
Ref: Biblioteca<21>-Footnote-1083786103
Ref: Biblioteca<21>-Footnote-1093786161
Ref: Biblioteca<21>-Footnote-1103786219
Ref: Biblioteca<21>-Footnote-1113786276
Ref: Biblioteca<21>-Footnote-1123786334
Ref: Biblioteca<21>-Footnote-1133786392
Ref: Biblioteca<21>-Footnote-1143786449
Ref: Biblioteca<21>-Footnote-1153786507
Ref: Biblioteca<21>-Footnote-1163786551
Ref: Biblioteca<21>-Footnote-1173786609
Ref: Biblioteca<21>-Footnote-1183786666
Ref: Biblioteca<21>-Footnote-1193786723
Ref: Biblioteca<21>-Footnote-1203786780
Ref: Biblioteca<21>-Footnote-1213786847
Ref: Biblioteca<21>-Footnote-1223786914
Ref: Biblioteca<21>-Footnote-1233786981
Ref: Biblioteca<21>-Footnote-1243787048
Ref: Biblioteca<21>-Footnote-1253787115
Ref: Biblioteca<21>-Footnote-1263787182
Ref: Biblioteca<21>-Footnote-1273787249
Ref: Biblioteca<21>-Footnote-1283787316
Ref: Biblioteca<21>-Footnote-1293787383
Ref: Biblioteca<21>-Footnote-1303787450
Ref: Biblioteca<21>-Footnote-1313787517
Ref: Biblioteca<21>-Footnote-1323787584
Ref: Biblioteca<21>-Footnote-1333787651
Ref: Biblioteca<21>-Footnote-1343787718
Node: Documentação<16>3787785
Ref: whatsnew/changelog id1623787903
Ref: 196c3787903
Ref: Documentação<16>-Footnote-13788519
Ref: Documentação<16>-Footnote-23788575
Ref: Documentação<16>-Footnote-33788631
Ref: Documentação<16>-Footnote-43788686
Node: Testes<16>3788744
Ref: whatsnew/changelog id1633788864
Ref: 196d3788864
Ref: Testes<16>-Footnote-13791026
Ref: Testes<16>-Footnote-23791082
Ref: Testes<16>-Footnote-33791138
Ref: Testes<16>-Footnote-43791194
Ref: Testes<16>-Footnote-53791249
Ref: Testes<16>-Footnote-63791305
Ref: Testes<16>-Footnote-73791361
Ref: Testes<16>-Footnote-83791417
Ref: Testes<16>-Footnote-93791473
Ref: Testes<16>-Footnote-103791529
Node: Construção<19>3791595
Ref: whatsnew/changelog id1643791708
Ref: 196e3791708
Ref: Construção<19>-Footnote-13793157
Ref: Construção<19>-Footnote-23793213
Ref: Construção<19>-Footnote-33793269
Ref: Construção<19>-Footnote-43793325
Ref: Construção<19>-Footnote-53793381
Ref: Construção<19>-Footnote-63793437
Ref: Construção<19>-Footnote-73793493
Ref: Construção<19>-Footnote-83793558
Node: Windows<16>3793623
Ref: whatsnew/changelog id1653793735
Ref: 196f3793735
Ref: Windows<16>-Footnote-13795778
Ref: Windows<16>-Footnote-23795834
Ref: Windows<16>-Footnote-33795890
Ref: Windows<16>-Footnote-43795946
Ref: Windows<16>-Footnote-53796002
Ref: Windows<16>-Footnote-63796057
Ref: Windows<16>-Footnote-73796112
Ref: Windows<16>-Footnote-83796168
Ref: Windows<16>-Footnote-93796224
Ref: Windows<16>-Footnote-103796279
Ref: Windows<16>-Footnote-113796335
Node: macOS<11>3796401
Ref: whatsnew/changelog id1663796505
Ref: 19703796505
Ref: macOS<11>-Footnote-13799181
Ref: macOS<11>-Footnote-23799237
Ref: macOS<11>-Footnote-33799293
Ref: macOS<11>-Footnote-43799349
Ref: macOS<11>-Footnote-53799404
Ref: macOS<11>-Footnote-63799459
Ref: macOS<11>-Footnote-73799514
Ref: macOS<11>-Footnote-83799570
Ref: macOS<11>-Footnote-93799626
Ref: macOS<11>-Footnote-103799682
Ref: macOS<11>-Footnote-113799739
Ref: macOS<11>-Footnote-123799796
Node: IDLE<10>3799853
Ref: whatsnew/changelog id1673799955
Ref: 19713799955
Ref: IDLE<10>-Footnote-13800610
Ref: IDLE<10>-Footnote-23800665
Ref: IDLE<10>-Footnote-33800721
Ref: IDLE<10>-Footnote-43800777
Ref: IDLE<10>-Footnote-53800833
Ref: IDLE<10>-Footnote-63800889
Node: API C<18>3800954
Ref: whatsnew/changelog id1683801038
Ref: 19723801038
Ref: API C<18>-Footnote-13801810
Ref: API C<18>-Footnote-23801866
Ref: API C<18>-Footnote-33801922
Ref: API C<18>-Footnote-43801978
Node: Python 3 13 0 alpha 23802033
Ref: whatsnew/changelog python-3-13-0-alpha-23802160
Ref: 19733802160
Node: Núcleo e embutidos<21>3802526
Ref: whatsnew/changelog id1693802630
Ref: 19743802630
Ref: Núcleo e embutidos<21>-Footnote-13811463
Ref: Núcleo e embutidos<21>-Footnote-23811519
Ref: Núcleo e embutidos<21>-Footnote-33811575
Ref: Núcleo e embutidos<21>-Footnote-43811631
Ref: Núcleo e embutidos<21>-Footnote-53811687
Ref: Núcleo e embutidos<21>-Footnote-63811743
Ref: Núcleo e embutidos<21>-Footnote-73811799
Ref: Núcleo e embutidos<21>-Footnote-83811855
Ref: Núcleo e embutidos<21>-Footnote-93811910
Ref: Núcleo e embutidos<21>-Footnote-103811965
Ref: Núcleo e embutidos<21>-Footnote-113812021
Ref: Núcleo e embutidos<21>-Footnote-123812078
Ref: Núcleo e embutidos<21>-Footnote-133812135
Ref: Núcleo e embutidos<21>-Footnote-143812192
Ref: Núcleo e embutidos<21>-Footnote-153812249
Ref: Núcleo e embutidos<21>-Footnote-163812306
Ref: Núcleo e embutidos<21>-Footnote-173812363
Ref: Núcleo e embutidos<21>-Footnote-183812420
Ref: Núcleo e embutidos<21>-Footnote-193812477
Ref: Núcleo e embutidos<21>-Footnote-203812534
Ref: Núcleo e embutidos<21>-Footnote-213812591
Ref: Núcleo e embutidos<21>-Footnote-223812648
Ref: Núcleo e embutidos<21>-Footnote-233812705
Ref: Núcleo e embutidos<21>-Footnote-243812762
Ref: Núcleo e embutidos<21>-Footnote-253812819
Ref: Núcleo e embutidos<21>-Footnote-263812876
Ref: Núcleo e embutidos<21>-Footnote-273812933
Ref: Núcleo e embutidos<21>-Footnote-283812990
Ref: Núcleo e embutidos<21>-Footnote-293813047
Ref: Núcleo e embutidos<21>-Footnote-303813103
Ref: Núcleo e embutidos<21>-Footnote-313813159
Ref: Núcleo e embutidos<21>-Footnote-323813216
Ref: Núcleo e embutidos<21>-Footnote-333813273
Ref: Núcleo e embutidos<21>-Footnote-343813330
Ref: Núcleo e embutidos<21>-Footnote-353813387
Ref: Núcleo e embutidos<21>-Footnote-363813444
Ref: Núcleo e embutidos<21>-Footnote-373813501
Ref: Núcleo e embutidos<21>-Footnote-383813558
Ref: Núcleo e embutidos<21>-Footnote-393813615
Ref: Núcleo e embutidos<21>-Footnote-403813672
Ref: Núcleo e embutidos<21>-Footnote-413813729
Ref: Núcleo e embutidos<21>-Footnote-423813786
Ref: Núcleo e embutidos<21>-Footnote-433813843
Ref: Núcleo e embutidos<21>-Footnote-443813899
Ref: Núcleo e embutidos<21>-Footnote-453813965
Ref: Núcleo e embutidos<21>-Footnote-463814022
Ref: Núcleo e embutidos<21>-Footnote-473814088
Ref: Núcleo e embutidos<21>-Footnote-483814145
Ref: Núcleo e embutidos<21>-Footnote-493814202
Ref: Núcleo e embutidos<21>-Footnote-503814259
Node: Biblioteca<22>3814325
Ref: whatsnew/changelog id1703814448
Ref: 19773814448
Ref: Biblioteca<22>-Footnote-13826087
Ref: Biblioteca<22>-Footnote-23826143
Ref: Biblioteca<22>-Footnote-33826199
Ref: Biblioteca<22>-Footnote-43826255
Ref: Biblioteca<22>-Footnote-53826311
Ref: Biblioteca<22>-Footnote-63826367
Ref: Biblioteca<22>-Footnote-73826423
Ref: Biblioteca<22>-Footnote-83826479
Ref: Biblioteca<22>-Footnote-93826535
Ref: Biblioteca<22>-Footnote-103826591
Ref: Biblioteca<22>-Footnote-113826648
Ref: Biblioteca<22>-Footnote-123826704
Ref: Biblioteca<22>-Footnote-133826761
Ref: Biblioteca<22>-Footnote-143826818
Ref: Biblioteca<22>-Footnote-153826875
Ref: Biblioteca<22>-Footnote-163826932
Ref: Biblioteca<22>-Footnote-173826989
Ref: Biblioteca<22>-Footnote-183827046
Ref: Biblioteca<22>-Footnote-193827103
Ref: Biblioteca<22>-Footnote-203827159
Ref: Biblioteca<22>-Footnote-213827216
Ref: Biblioteca<22>-Footnote-223827273
Ref: Biblioteca<22>-Footnote-233827329
Ref: Biblioteca<22>-Footnote-243827386
Ref: Biblioteca<22>-Footnote-253827442
Ref: Biblioteca<22>-Footnote-263827499
Ref: Biblioteca<22>-Footnote-273827556
Ref: Biblioteca<22>-Footnote-283827613
Ref: Biblioteca<22>-Footnote-293827670
Ref: Biblioteca<22>-Footnote-303827727
Ref: Biblioteca<22>-Footnote-313827784
Ref: Biblioteca<22>-Footnote-323827841
Ref: Biblioteca<22>-Footnote-333827898
Ref: Biblioteca<22>-Footnote-343827955
Ref: Biblioteca<22>-Footnote-353828012
Ref: Biblioteca<22>-Footnote-363828069
Ref: Biblioteca<22>-Footnote-373828126
Ref: Biblioteca<22>-Footnote-383828183
Ref: Biblioteca<22>-Footnote-393828239
Ref: Biblioteca<22>-Footnote-403828295
Ref: Biblioteca<22>-Footnote-413828352
Ref: Biblioteca<22>-Footnote-423828409
Ref: Biblioteca<22>-Footnote-433828466
Ref: Biblioteca<22>-Footnote-443828522
Ref: Biblioteca<22>-Footnote-453828578
Ref: Biblioteca<22>-Footnote-463828635
Ref: Biblioteca<22>-Footnote-473828692
Ref: Biblioteca<22>-Footnote-483828749
Ref: Biblioteca<22>-Footnote-493828806
Ref: Biblioteca<22>-Footnote-503828862
Ref: Biblioteca<22>-Footnote-513828919
Ref: Biblioteca<22>-Footnote-523828976
Ref: Biblioteca<22>-Footnote-533829033
Ref: Biblioteca<22>-Footnote-543829089
Ref: Biblioteca<22>-Footnote-553829145
Ref: Biblioteca<22>-Footnote-563829201
Ref: Biblioteca<22>-Footnote-573829258
Ref: Biblioteca<22>-Footnote-583829315
Ref: Biblioteca<22>-Footnote-593829371
Ref: Biblioteca<22>-Footnote-603829427
Ref: Biblioteca<22>-Footnote-613829514
Ref: Biblioteca<22>-Footnote-623829570
Node: Testes<17>3829626
Ref: whatsnew/changelog id1713829742
Ref: 19883829742
Ref: Testes<17>-Footnote-13831491
Ref: Testes<17>-Footnote-23831547
Ref: Testes<17>-Footnote-33831603
Ref: Testes<17>-Footnote-43831659
Ref: Testes<17>-Footnote-53831715
Ref: Testes<17>-Footnote-63831771
Ref: Testes<17>-Footnote-73831827
Ref: Testes<17>-Footnote-83831883
Node: Construção<20>3831939
Ref: whatsnew/changelog id1723832052
Ref: 19893832052
Ref: Construção<20>-Footnote-13833141
Ref: Construção<20>-Footnote-23833196
Ref: Construção<20>-Footnote-33833252
Ref: Construção<20>-Footnote-43833302
Ref: Construção<20>-Footnote-53833358
Ref: Construção<20>-Footnote-63833414
Node: Windows<17>3833469
Ref: whatsnew/changelog id1733833581
Ref: 198a3833581
Ref: Windows<17>-Footnote-13834105
Ref: Windows<17>-Footnote-23834161
Ref: Windows<17>-Footnote-33834217
Node: macOS<12>3834273
Ref: whatsnew/changelog id1743834377
Ref: 198c3834377
Ref: macOS<12>-Footnote-13835412
Ref: macOS<12>-Footnote-23835467
Ref: macOS<12>-Footnote-33835523
Ref: macOS<12>-Footnote-43835579
Ref: macOS<12>-Footnote-53835634
Node: IDLE<11>3835689
Ref: whatsnew/changelog id1753835803
Ref: 198d3835803
Ref: IDLE<11>-Footnote-13836155
Node: Ferramentas/Demos<17>3836220
Ref: whatsnew/changelog id1763836334
Ref: 198e3836334
Ref: Ferramentas/Demos<17>-Footnote-13836732
Node: API C<19>3836788
Ref: whatsnew/changelog id1773836885
Ref: 198f3836885
Ref: API C<19>-Footnote-13842456
Ref: API C<19>-Footnote-23842512
Ref: API C<19>-Footnote-33842568
Ref: API C<19>-Footnote-43842624
Ref: API C<19>-Footnote-53842680
Ref: API C<19>-Footnote-63842736
Ref: API C<19>-Footnote-73842792
Ref: API C<19>-Footnote-83842848
Ref: API C<19>-Footnote-93842904
Ref: API C<19>-Footnote-103842960
Ref: API C<19>-Footnote-113843017
Ref: API C<19>-Footnote-123843060
Ref: API C<19>-Footnote-133843117
Ref: API C<19>-Footnote-143843174
Ref: API C<19>-Footnote-153843231
Ref: API C<19>-Footnote-163843288
Ref: API C<19>-Footnote-173843345
Ref: API C<19>-Footnote-183843401
Ref: API C<19>-Footnote-193843457
Ref: API C<19>-Footnote-203843514
Node: Python 3 13 0 alpha 13843570
Ref: whatsnew/changelog python-3-13-0-alpha-13843696
Ref: 19903843696
Node: Segurança<19>3844130
Ref: whatsnew/changelog id1783844234
Ref: 19913844234
Ref: Segurança<19>-Footnote-13845633
Ref: Segurança<19>-Footnote-23845689
Ref: Segurança<19>-Footnote-33845745
Ref: Segurança<19>-Footnote-43845801
Ref: Segurança<19>-Footnote-53845857
Ref: Segurança<19>-Footnote-63845913
Ref: Segurança<19>-Footnote-73845968
Node: Núcleo e embutidos<22>3846024
Ref: whatsnew/changelog id1793846151
Ref: 19923846151
Ref: Núcleo e embutidos<22>-Footnote-13880255
Ref: Núcleo e embutidos<22>-Footnote-23880311
Ref: Núcleo e embutidos<22>-Footnote-33880367
Ref: Núcleo e embutidos<22>-Footnote-43880423
Ref: Núcleo e embutidos<22>-Footnote-53880479
Ref: Núcleo e embutidos<22>-Footnote-63880535
Ref: Núcleo e embutidos<22>-Footnote-73880591
Ref: Núcleo e embutidos<22>-Footnote-83880647
Ref: Núcleo e embutidos<22>-Footnote-93880703
Ref: Núcleo e embutidos<22>-Footnote-103880759
Ref: Núcleo e embutidos<22>-Footnote-113880816
Ref: Núcleo e embutidos<22>-Footnote-123880873
Ref: Núcleo e embutidos<22>-Footnote-133880930
Ref: Núcleo e embutidos<22>-Footnote-143880987
Ref: Núcleo e embutidos<22>-Footnote-153881044
Ref: Núcleo e embutidos<22>-Footnote-163881101
Ref: Núcleo e embutidos<22>-Footnote-173881158
Ref: Núcleo e embutidos<22>-Footnote-183881215
Ref: Núcleo e embutidos<22>-Footnote-193881272
Ref: Núcleo e embutidos<22>-Footnote-203881329
Ref: Núcleo e embutidos<22>-Footnote-213881386
Ref: Núcleo e embutidos<22>-Footnote-223881443
Ref: Núcleo e embutidos<22>-Footnote-233881500
Ref: Núcleo e embutidos<22>-Footnote-243881557
Ref: Núcleo e embutidos<22>-Footnote-253881614
Ref: Núcleo e embutidos<22>-Footnote-263881671
Ref: Núcleo e embutidos<22>-Footnote-273881728
Ref: Núcleo e embutidos<22>-Footnote-283881785
Ref: Núcleo e embutidos<22>-Footnote-293881842
Ref: Núcleo e embutidos<22>-Footnote-303881899
Ref: Núcleo e embutidos<22>-Footnote-313881956
Ref: Núcleo e embutidos<22>-Footnote-323882013
Ref: Núcleo e embutidos<22>-Footnote-333882070
Ref: Núcleo e embutidos<22>-Footnote-343882127
Ref: Núcleo e embutidos<22>-Footnote-353882184
Ref: Núcleo e embutidos<22>-Footnote-363882241
Ref: Núcleo e embutidos<22>-Footnote-373882298
Ref: Núcleo e embutidos<22>-Footnote-383882355
Ref: Núcleo e embutidos<22>-Footnote-393882412
Ref: Núcleo e embutidos<22>-Footnote-403882469
Ref: Núcleo e embutidos<22>-Footnote-413882526
Ref: Núcleo e embutidos<22>-Footnote-423882583
Ref: Núcleo e embutidos<22>-Footnote-433882640
Ref: Núcleo e embutidos<22>-Footnote-443882697
Ref: Núcleo e embutidos<22>-Footnote-453882753
Ref: Núcleo e embutidos<22>-Footnote-463882810
Ref: Núcleo e embutidos<22>-Footnote-473882867
Ref: Núcleo e embutidos<22>-Footnote-483882924
Ref: Núcleo e embutidos<22>-Footnote-493882981
Ref: Núcleo e embutidos<22>-Footnote-503883038
Ref: Núcleo e embutidos<22>-Footnote-513883095
Ref: Núcleo e embutidos<22>-Footnote-523883152
Ref: Núcleo e embutidos<22>-Footnote-533883209
Ref: Núcleo e embutidos<22>-Footnote-543883266
Ref: Núcleo e embutidos<22>-Footnote-553883323
Ref: Núcleo e embutidos<22>-Footnote-563883380
Ref: Núcleo e embutidos<22>-Footnote-573883437
Ref: Núcleo e embutidos<22>-Footnote-583883494
Ref: Núcleo e embutidos<22>-Footnote-593883551
Ref: Núcleo e embutidos<22>-Footnote-603883608
Ref: Núcleo e embutidos<22>-Footnote-613883665
Ref: Núcleo e embutidos<22>-Footnote-623883722
Ref: Núcleo e embutidos<22>-Footnote-633883779
Ref: Núcleo e embutidos<22>-Footnote-643883836
Ref: Núcleo e embutidos<22>-Footnote-653883892
Ref: Núcleo e embutidos<22>-Footnote-663883949
Ref: Núcleo e embutidos<22>-Footnote-673884006
Ref: Núcleo e embutidos<22>-Footnote-683884062
Ref: Núcleo e embutidos<22>-Footnote-693884119
Ref: Núcleo e embutidos<22>-Footnote-703884176
Ref: Núcleo e embutidos<22>-Footnote-713884233
Ref: Núcleo e embutidos<22>-Footnote-723884290
Ref: Núcleo e embutidos<22>-Footnote-733884347
Ref: Núcleo e embutidos<22>-Footnote-743884403
Ref: Núcleo e embutidos<22>-Footnote-753884460
Ref: Núcleo e embutidos<22>-Footnote-763884517
Ref: Núcleo e embutidos<22>-Footnote-773884574
Ref: Núcleo e embutidos<22>-Footnote-783884631
Ref: Núcleo e embutidos<22>-Footnote-793884688
Ref: Núcleo e embutidos<22>-Footnote-803884745
Ref: Núcleo e embutidos<22>-Footnote-813884802
Ref: Núcleo e embutidos<22>-Footnote-823884859
Ref: Núcleo e embutidos<22>-Footnote-833884916
Ref: Núcleo e embutidos<22>-Footnote-843884973
Ref: Núcleo e embutidos<22>-Footnote-853885016
Ref: Núcleo e embutidos<22>-Footnote-863885073
Ref: Núcleo e embutidos<22>-Footnote-873885130
Ref: Núcleo e embutidos<22>-Footnote-883885187
Ref: Núcleo e embutidos<22>-Footnote-893885243
Ref: Núcleo e embutidos<22>-Footnote-903885300
Ref: Núcleo e embutidos<22>-Footnote-913885357
Ref: Núcleo e embutidos<22>-Footnote-923885414
Ref: Núcleo e embutidos<22>-Footnote-933885471
Ref: Núcleo e embutidos<22>-Footnote-943885528
Ref: Núcleo e embutidos<22>-Footnote-953885585
Ref: Núcleo e embutidos<22>-Footnote-963885642
Ref: Núcleo e embutidos<22>-Footnote-973885699
Ref: Núcleo e embutidos<22>-Footnote-983885756
Ref: Núcleo e embutidos<22>-Footnote-993885813
Ref: Núcleo e embutidos<22>-Footnote-1003885870
Ref: Núcleo e embutidos<22>-Footnote-1013885928
Ref: Núcleo e embutidos<22>-Footnote-1023885986
Ref: Núcleo e embutidos<22>-Footnote-1033886044
Ref: Núcleo e embutidos<22>-Footnote-1043886102
Ref: Núcleo e embutidos<22>-Footnote-1053886160
Ref: Núcleo e embutidos<22>-Footnote-1063886218
Ref: Núcleo e embutidos<22>-Footnote-1073886275
Ref: Núcleo e embutidos<22>-Footnote-1083886332
Ref: Núcleo e embutidos<22>-Footnote-1093886390
Ref: Núcleo e embutidos<22>-Footnote-1103886448
Ref: Núcleo e embutidos<22>-Footnote-1113886506
Ref: Núcleo e embutidos<22>-Footnote-1123886564
Ref: Núcleo e embutidos<22>-Footnote-1133886622
Ref: Núcleo e embutidos<22>-Footnote-1143886680
Ref: Núcleo e embutidos<22>-Footnote-1153886738
Ref: Núcleo e embutidos<22>-Footnote-1163886796
Ref: Núcleo e embutidos<22>-Footnote-1173886854
Ref: Núcleo e embutidos<22>-Footnote-1183886912
Ref: Núcleo e embutidos<22>-Footnote-1193886970
Ref: Núcleo e embutidos<22>-Footnote-1203887028
Ref: Núcleo e embutidos<22>-Footnote-1213887085
Ref: Núcleo e embutidos<22>-Footnote-1223887143
Ref: Núcleo e embutidos<22>-Footnote-1233887201
Ref: Núcleo e embutidos<22>-Footnote-1243887258
Ref: Núcleo e embutidos<22>-Footnote-1253887316
Ref: Núcleo e embutidos<22>-Footnote-1263887374
Ref: Núcleo e embutidos<22>-Footnote-1273887432
Ref: Núcleo e embutidos<22>-Footnote-1283887490
Ref: Núcleo e embutidos<22>-Footnote-1293887548
Ref: Núcleo e embutidos<22>-Footnote-1303887606
Ref: Núcleo e embutidos<22>-Footnote-1313887664
Ref: Núcleo e embutidos<22>-Footnote-1323887722
Ref: Núcleo e embutidos<22>-Footnote-1333887780
Ref: Núcleo e embutidos<22>-Footnote-1343887838
Ref: Núcleo e embutidos<22>-Footnote-1353887896
Ref: Núcleo e embutidos<22>-Footnote-1363887954
Ref: Núcleo e embutidos<22>-Footnote-1373888012
Ref: Núcleo e embutidos<22>-Footnote-1383888070
Ref: Núcleo e embutidos<22>-Footnote-1393888128
Ref: Núcleo e embutidos<22>-Footnote-1403888186
Ref: Núcleo e embutidos<22>-Footnote-1413888244
Ref: Núcleo e embutidos<22>-Footnote-1423888302
Ref: Núcleo e embutidos<22>-Footnote-1433888360
Ref: Núcleo e embutidos<22>-Footnote-1443888418
Ref: Núcleo e embutidos<22>-Footnote-1453888475
Ref: Núcleo e embutidos<22>-Footnote-1463888533
Ref: Núcleo e embutidos<22>-Footnote-1473888591
Ref: Núcleo e embutidos<22>-Footnote-1483888648
Ref: Núcleo e embutidos<22>-Footnote-1493888706
Ref: Núcleo e embutidos<22>-Footnote-1503888764
Ref: Núcleo e embutidos<22>-Footnote-1513888822
Ref: Núcleo e embutidos<22>-Footnote-1523888880
Ref: Núcleo e embutidos<22>-Footnote-1533888938
Ref: Núcleo e embutidos<22>-Footnote-1543888996
Ref: Núcleo e embutidos<22>-Footnote-1553889054
Ref: Núcleo e embutidos<22>-Footnote-1563889112
Ref: Núcleo e embutidos<22>-Footnote-1573889170
Ref: Núcleo e embutidos<22>-Footnote-1583889228
Ref: Núcleo e embutidos<22>-Footnote-1593889286
Ref: Núcleo e embutidos<22>-Footnote-1603889344
Ref: Núcleo e embutidos<22>-Footnote-1613889402
Ref: Núcleo e embutidos<22>-Footnote-1623889460
Ref: Núcleo e embutidos<22>-Footnote-1633889518
Ref: Núcleo e embutidos<22>-Footnote-1643889576
Ref: Núcleo e embutidos<22>-Footnote-1653889634
Ref: Núcleo e embutidos<22>-Footnote-1663889692
Ref: Núcleo e embutidos<22>-Footnote-1673889750
Ref: Núcleo e embutidos<22>-Footnote-1683889807
Ref: Núcleo e embutidos<22>-Footnote-1693889864
Ref: Núcleo e embutidos<22>-Footnote-1703889921
Ref: Núcleo e embutidos<22>-Footnote-1713889979
Node: Biblioteca<23>3890036
Ref: whatsnew/changelog id1803890167
Ref: 19a53890167
Ref: Biblioteca<23>-Footnote-13942486
Ref: Biblioteca<23>-Footnote-23942542
Ref: Biblioteca<23>-Footnote-33942598
Ref: Biblioteca<23>-Footnote-43942654
Ref: Biblioteca<23>-Footnote-53942709
Ref: Biblioteca<23>-Footnote-63942765
Ref: Biblioteca<23>-Footnote-73942821
Ref: Biblioteca<23>-Footnote-83942877
Ref: Biblioteca<23>-Footnote-93942932
Ref: Biblioteca<23>-Footnote-103942988
Ref: Biblioteca<23>-Footnote-113943044
Ref: Biblioteca<23>-Footnote-123943101
Ref: Biblioteca<23>-Footnote-133943158
Ref: Biblioteca<23>-Footnote-143943215
Ref: Biblioteca<23>-Footnote-153943272
Ref: Biblioteca<23>-Footnote-163943329
Ref: Biblioteca<23>-Footnote-173943386
Ref: Biblioteca<23>-Footnote-183943443
Ref: Biblioteca<23>-Footnote-193943500
Ref: Biblioteca<23>-Footnote-203943557
Ref: Biblioteca<23>-Footnote-213943614
Ref: Biblioteca<23>-Footnote-223943671
Ref: Biblioteca<23>-Footnote-233943728
Ref: Biblioteca<23>-Footnote-243943785
Ref: Biblioteca<23>-Footnote-253943828
Ref: Biblioteca<23>-Footnote-263943884
Ref: Biblioteca<23>-Footnote-273943941
Ref: Biblioteca<23>-Footnote-283943998
Ref: Biblioteca<23>-Footnote-293944055
Ref: Biblioteca<23>-Footnote-303944112
Ref: Biblioteca<23>-Footnote-313944169
Ref: Biblioteca<23>-Footnote-323944226
Ref: Biblioteca<23>-Footnote-333944283
Ref: Biblioteca<23>-Footnote-343944340
Ref: Biblioteca<23>-Footnote-353944397
Ref: Biblioteca<23>-Footnote-363944454
Ref: Biblioteca<23>-Footnote-373944511
Ref: Biblioteca<23>-Footnote-383944567
Ref: Biblioteca<23>-Footnote-393944624
Ref: Biblioteca<23>-Footnote-403944681
Ref: Biblioteca<23>-Footnote-413944738
Ref: Biblioteca<23>-Footnote-423944795
Ref: Biblioteca<23>-Footnote-433944852
Ref: Biblioteca<23>-Footnote-443944909
Ref: Biblioteca<23>-Footnote-453944966
Ref: Biblioteca<23>-Footnote-463945023
Ref: Biblioteca<23>-Footnote-473945080
Ref: Biblioteca<23>-Footnote-483945137
Ref: Biblioteca<23>-Footnote-493945194
Ref: Biblioteca<23>-Footnote-503945251
Ref: Biblioteca<23>-Footnote-513945307
Ref: Biblioteca<23>-Footnote-523945364
Ref: Biblioteca<23>-Footnote-533945420
Ref: Biblioteca<23>-Footnote-543945477
Ref: Biblioteca<23>-Footnote-553945534
Ref: Biblioteca<23>-Footnote-563945591
Ref: Biblioteca<23>-Footnote-573945648
Ref: Biblioteca<23>-Footnote-583945705
Ref: Biblioteca<23>-Footnote-593945762
Ref: Biblioteca<23>-Footnote-603945819
Ref: Biblioteca<23>-Footnote-613945876
Ref: Biblioteca<23>-Footnote-623945933
Ref: Biblioteca<23>-Footnote-633945990
Ref: Biblioteca<23>-Footnote-643946047
Ref: Biblioteca<23>-Footnote-653946104
Ref: Biblioteca<23>-Footnote-663946161
Ref: Biblioteca<23>-Footnote-673946218
Ref: Biblioteca<23>-Footnote-683946275
Ref: Biblioteca<23>-Footnote-693946332
Ref: Biblioteca<23>-Footnote-703946388
Ref: Biblioteca<23>-Footnote-713946445
Ref: Biblioteca<23>-Footnote-723946502
Ref: Biblioteca<23>-Footnote-733946559
Ref: Biblioteca<23>-Footnote-743946616
Ref: Biblioteca<23>-Footnote-753946673
Ref: Biblioteca<23>-Footnote-763946729
Ref: Biblioteca<23>-Footnote-773946786
Ref: Biblioteca<23>-Footnote-783946843
Ref: Biblioteca<23>-Footnote-793946900
Ref: Biblioteca<23>-Footnote-803946957
Ref: Biblioteca<23>-Footnote-813947014
Ref: Biblioteca<23>-Footnote-823947071
Ref: Biblioteca<23>-Footnote-833947128
Ref: Biblioteca<23>-Footnote-843947184
Ref: Biblioteca<23>-Footnote-853947240
Ref: Biblioteca<23>-Footnote-863947296
Ref: Biblioteca<23>-Footnote-873947352
Ref: Biblioteca<23>-Footnote-883947409
Ref: Biblioteca<23>-Footnote-893947466
Ref: Biblioteca<23>-Footnote-903947523
Ref: Biblioteca<23>-Footnote-913947580
Ref: Biblioteca<23>-Footnote-923947637
Ref: Biblioteca<23>-Footnote-933947693
Ref: Biblioteca<23>-Footnote-943947750
Ref: Biblioteca<23>-Footnote-953947807
Ref: Biblioteca<23>-Footnote-963947864
Ref: Biblioteca<23>-Footnote-973947920
Ref: Biblioteca<23>-Footnote-983947977
Ref: Biblioteca<23>-Footnote-993948034
Ref: Biblioteca<23>-Footnote-1003948091
Ref: Biblioteca<23>-Footnote-1013948149
Ref: Biblioteca<23>-Footnote-1023948207
Ref: Biblioteca<23>-Footnote-1033948265
Ref: Biblioteca<23>-Footnote-1043948323
Ref: Biblioteca<23>-Footnote-1053948381
Ref: Biblioteca<23>-Footnote-1063948439
Ref: Biblioteca<23>-Footnote-1073948497
Ref: Biblioteca<23>-Footnote-1083948554
Ref: Biblioteca<23>-Footnote-1093948612
Ref: Biblioteca<23>-Footnote-1103948669
Ref: Biblioteca<23>-Footnote-1113948727
Ref: Biblioteca<23>-Footnote-1123948784
Ref: Biblioteca<23>-Footnote-1133948841
Ref: Biblioteca<23>-Footnote-1143948898
Ref: Biblioteca<23>-Footnote-1153948956
Ref: Biblioteca<23>-Footnote-1163949014
Ref: Biblioteca<23>-Footnote-1173949072
Ref: Biblioteca<23>-Footnote-1183949130
Ref: Biblioteca<23>-Footnote-1193949188
Ref: Biblioteca<23>-Footnote-1203949246
Ref: Biblioteca<23>-Footnote-1213949304
Ref: Biblioteca<23>-Footnote-1223949362
Ref: Biblioteca<23>-Footnote-1233949420
Ref: Biblioteca<23>-Footnote-1243949478
Ref: Biblioteca<23>-Footnote-1253949536
Ref: Biblioteca<23>-Footnote-1263949594
Ref: Biblioteca<23>-Footnote-1273949652
Ref: Biblioteca<23>-Footnote-1283949710
Ref: Biblioteca<23>-Footnote-1293949768
Ref: Biblioteca<23>-Footnote-1303949826
Ref: Biblioteca<23>-Footnote-1313949884
Ref: Biblioteca<23>-Footnote-1323949942
Ref: Biblioteca<23>-Footnote-1333950000
Ref: Biblioteca<23>-Footnote-1343950058
Ref: Biblioteca<23>-Footnote-1353950116
Ref: Biblioteca<23>-Footnote-1363950173
Ref: Biblioteca<23>-Footnote-1373950231
Ref: Biblioteca<23>-Footnote-1383950289
Ref: Biblioteca<23>-Footnote-1393950347
Ref: Biblioteca<23>-Footnote-1403950405
Ref: Biblioteca<23>-Footnote-1413950463
Ref: Biblioteca<23>-Footnote-1423950521
Ref: Biblioteca<23>-Footnote-1433950579
Ref: Biblioteca<23>-Footnote-1443950637
Ref: Biblioteca<23>-Footnote-1453950695
Ref: Biblioteca<23>-Footnote-1463950753
Ref: Biblioteca<23>-Footnote-1473950811
Ref: Biblioteca<23>-Footnote-1483950869
Ref: Biblioteca<23>-Footnote-1493950927
Ref: Biblioteca<23>-Footnote-1503950984
Ref: Biblioteca<23>-Footnote-1513951042
Ref: Biblioteca<23>-Footnote-1523951099
Ref: Biblioteca<23>-Footnote-1533951157
Ref: Biblioteca<23>-Footnote-1543951215
Ref: Biblioteca<23>-Footnote-1553951273
Ref: Biblioteca<23>-Footnote-1563951331
Ref: Biblioteca<23>-Footnote-1573951389
Ref: Biblioteca<23>-Footnote-1583951447
Ref: Biblioteca<23>-Footnote-1593951505
Ref: Biblioteca<23>-Footnote-1603951563
Ref: Biblioteca<23>-Footnote-1613951621
Ref: Biblioteca<23>-Footnote-1623951679
Ref: Biblioteca<23>-Footnote-1633951737
Ref: Biblioteca<23>-Footnote-1643951795
Ref: Biblioteca<23>-Footnote-1653951853
Ref: Biblioteca<23>-Footnote-1663951911
Ref: Biblioteca<23>-Footnote-1673951968
Ref: Biblioteca<23>-Footnote-1683952025
Ref: Biblioteca<23>-Footnote-1693952083
Ref: Biblioteca<23>-Footnote-1703952141
Ref: Biblioteca<23>-Footnote-1713952199
Ref: Biblioteca<23>-Footnote-1723952257
Ref: Biblioteca<23>-Footnote-1733952301
Ref: Biblioteca<23>-Footnote-1743952359
Ref: Biblioteca<23>-Footnote-1753952417
Ref: Biblioteca<23>-Footnote-1763952475
Ref: Biblioteca<23>-Footnote-1773952533
Ref: Biblioteca<23>-Footnote-1783952591
Ref: Biblioteca<23>-Footnote-1793952649
Ref: Biblioteca<23>-Footnote-1803952707
Ref: Biblioteca<23>-Footnote-1813952765
Ref: Biblioteca<23>-Footnote-1823952823
Ref: Biblioteca<23>-Footnote-1833952881
Ref: Biblioteca<23>-Footnote-1843952939
Ref: Biblioteca<23>-Footnote-1853952997
Ref: Biblioteca<23>-Footnote-1863953055
Ref: Biblioteca<23>-Footnote-1873953113
Ref: Biblioteca<23>-Footnote-1883953171
Ref: Biblioteca<23>-Footnote-1893953229
Ref: Biblioteca<23>-Footnote-1903953287
Ref: Biblioteca<23>-Footnote-1913953345
Ref: Biblioteca<23>-Footnote-1923953403
Ref: Biblioteca<23>-Footnote-1933953461
Ref: Biblioteca<23>-Footnote-1943953519
Ref: Biblioteca<23>-Footnote-1953953577
Ref: Biblioteca<23>-Footnote-1963953635
Ref: Biblioteca<23>-Footnote-1973953693
Ref: Biblioteca<23>-Footnote-1983953750
Ref: Biblioteca<23>-Footnote-1993953808
Ref: Biblioteca<23>-Footnote-2003953866
Ref: Biblioteca<23>-Footnote-2013953924
Ref: Biblioteca<23>-Footnote-2023953982
Ref: Biblioteca<23>-Footnote-2033954040
Ref: Biblioteca<23>-Footnote-2043954098
Ref: Biblioteca<23>-Footnote-2053954156
Ref: Biblioteca<23>-Footnote-2063954213
Ref: Biblioteca<23>-Footnote-2073954271
Ref: Biblioteca<23>-Footnote-2083954329
Ref: Biblioteca<23>-Footnote-2093954387
Ref: Biblioteca<23>-Footnote-2103954445
Ref: Biblioteca<23>-Footnote-2113954502
Ref: Biblioteca<23>-Footnote-2123954560
Ref: Biblioteca<23>-Footnote-2133954618
Ref: Biblioteca<23>-Footnote-2143954676
Ref: Biblioteca<23>-Footnote-2153954734
Ref: Biblioteca<23>-Footnote-2163954792
Ref: Biblioteca<23>-Footnote-2173954850
Ref: Biblioteca<23>-Footnote-2183954908
Ref: Biblioteca<23>-Footnote-2193954952
Ref: Biblioteca<23>-Footnote-2203955010
Ref: Biblioteca<23>-Footnote-2213955054
Ref: Biblioteca<23>-Footnote-2223955112
Ref: Biblioteca<23>-Footnote-2233955156
Ref: Biblioteca<23>-Footnote-2243955214
Ref: Biblioteca<23>-Footnote-2253955258
Ref: Biblioteca<23>-Footnote-2263955316
Ref: Biblioteca<23>-Footnote-2273955360
Ref: Biblioteca<23>-Footnote-2283955418
Ref: Biblioteca<23>-Footnote-2293955462
Ref: Biblioteca<23>-Footnote-2303955520
Ref: Biblioteca<23>-Footnote-2313955578
Ref: Biblioteca<23>-Footnote-2323955622
Ref: Biblioteca<23>-Footnote-2333955680
Ref: Biblioteca<23>-Footnote-2343955724
Ref: Biblioteca<23>-Footnote-2353955782
Ref: Biblioteca<23>-Footnote-2363955840
Ref: Biblioteca<23>-Footnote-2373955898
Ref: Biblioteca<23>-Footnote-2383955956
Ref: Biblioteca<23>-Footnote-2393956000
Ref: Biblioteca<23>-Footnote-2403956058
Ref: Biblioteca<23>-Footnote-2413956102
Ref: Biblioteca<23>-Footnote-2423956149
Ref: Biblioteca<23>-Footnote-2433956206
Ref: Biblioteca<23>-Footnote-2443956264
Ref: Biblioteca<23>-Footnote-2453956308
Ref: Biblioteca<23>-Footnote-2463956366
Ref: Biblioteca<23>-Footnote-2473956410
Ref: Biblioteca<23>-Footnote-2483956468
Ref: Biblioteca<23>-Footnote-2493956512
Ref: Biblioteca<23>-Footnote-2503956570
Ref: Biblioteca<23>-Footnote-2513956614
Ref: Biblioteca<23>-Footnote-2523956672
Ref: Biblioteca<23>-Footnote-2533956716
Ref: Biblioteca<23>-Footnote-2543956774
Ref: Biblioteca<23>-Footnote-2553956832
Ref: Biblioteca<23>-Footnote-2563956890
Ref: Biblioteca<23>-Footnote-2573956948
Ref: Biblioteca<23>-Footnote-2583957005
Ref: Biblioteca<23>-Footnote-2593957063
Ref: Biblioteca<23>-Footnote-2603957107
Ref: Biblioteca<23>-Footnote-2613957165
Ref: Biblioteca<23>-Footnote-2623957223
Ref: Biblioteca<23>-Footnote-2633957281
Ref: Biblioteca<23>-Footnote-2643957339
Ref: Biblioteca<23>-Footnote-2653957383
Ref: Biblioteca<23>-Footnote-2663957441
Ref: Biblioteca<23>-Footnote-2673957485
Ref: Biblioteca<23>-Footnote-2683957543
Ref: Biblioteca<23>-Footnote-2693957587
Ref: Biblioteca<23>-Footnote-2703957645
Ref: Biblioteca<23>-Footnote-2713957689
Ref: Biblioteca<23>-Footnote-2723957747
Ref: Biblioteca<23>-Footnote-2733957804
Ref: Biblioteca<23>-Footnote-2743957862
Ref: Biblioteca<23>-Footnote-2753957920
Ref: Biblioteca<23>-Footnote-2763957978
Ref: Biblioteca<23>-Footnote-2773958036
Ref: Biblioteca<23>-Footnote-2783958094
Ref: Biblioteca<23>-Footnote-2793958152
Ref: Biblioteca<23>-Footnote-2803958210
Ref: Biblioteca<23>-Footnote-2813958268
Ref: Biblioteca<23>-Footnote-2823958326
Ref: Biblioteca<23>-Footnote-2833958384
Ref: Biblioteca<23>-Footnote-2843958441
Ref: Biblioteca<23>-Footnote-2853958499
Ref: Biblioteca<23>-Footnote-2863958557
Ref: Biblioteca<23>-Footnote-2873958615
Ref: Biblioteca<23>-Footnote-2883958672
Ref: Biblioteca<23>-Footnote-2893958730
Ref: Biblioteca<23>-Footnote-2903958787
Ref: Biblioteca<23>-Footnote-2913958844
Ref: Biblioteca<23>-Footnote-2923958901
Ref: Biblioteca<23>-Footnote-2933958958
Ref: Biblioteca<23>-Footnote-2943959015
Ref: Biblioteca<23>-Footnote-2953959072
Ref: Biblioteca<23>-Footnote-2963959129
Ref: Biblioteca<23>-Footnote-2973959196
Ref: Biblioteca<23>-Footnote-2983959257
Ref: Biblioteca<23>-Footnote-2993959324
Ref: Biblioteca<23>-Footnote-3003959368
Ref: Biblioteca<23>-Footnote-3013959435
Ref: Biblioteca<23>-Footnote-3023959502
Ref: Biblioteca<23>-Footnote-3033959569
Ref: Biblioteca<23>-Footnote-3043959636
Node: Documentação<17>3959703
Ref: whatsnew/changelog id1813959821
Ref: 19b93959821
Ref: Documentação<17>-Footnote-13961773
Ref: Documentação<17>-Footnote-23961829
Ref: Documentação<17>-Footnote-33961885
Ref: Documentação<17>-Footnote-43961941
Ref: Documentação<17>-Footnote-53961997
Ref: Documentação<17>-Footnote-63962053
Ref: Documentação<17>-Footnote-73962109
Ref: Documentação<17>-Footnote-83962165
Ref: Documentação<17>-Footnote-93962221
Ref: Documentação<17>-Footnote-103962276
Ref: Documentação<17>-Footnote-113962332
Ref: Documentação<17>-Footnote-123962389
Ref: Documentação<17>-Footnote-133962445
Ref: Documentação<17>-Footnote-143962502
Node: Testes<18>3962559
Ref: whatsnew/changelog id1823962679
Ref: 19ba3962679
Ref: Testes<18>-Footnote-13975856
Ref: Testes<18>-Footnote-23975912
Ref: Testes<18>-Footnote-33975968
Ref: Testes<18>-Footnote-43976024
Ref: Testes<18>-Footnote-53976080
Ref: Testes<18>-Footnote-63976135
Ref: Testes<18>-Footnote-73976191
Ref: Testes<18>-Footnote-83976247
Ref: Testes<18>-Footnote-93976303
Ref: Testes<18>-Footnote-103976359
Ref: Testes<18>-Footnote-113976416
Ref: Testes<18>-Footnote-123976473
Ref: Testes<18>-Footnote-133976530
Ref: Testes<18>-Footnote-143976587
Ref: Testes<18>-Footnote-153976644
Ref: Testes<18>-Footnote-163976701
Ref: Testes<18>-Footnote-173976758
Ref: Testes<18>-Footnote-183976815
Ref: Testes<18>-Footnote-193976872
Ref: Testes<18>-Footnote-203976929
Ref: Testes<18>-Footnote-213976986
Ref: Testes<18>-Footnote-223977043
Ref: Testes<18>-Footnote-233977100
Ref: Testes<18>-Footnote-243977157
Ref: Testes<18>-Footnote-253977214
Ref: Testes<18>-Footnote-263977271
Ref: Testes<18>-Footnote-273977328
Ref: Testes<18>-Footnote-283977385
Ref: Testes<18>-Footnote-293977442
Ref: Testes<18>-Footnote-303977499
Ref: Testes<18>-Footnote-313977556
Ref: Testes<18>-Footnote-323977613
Ref: Testes<18>-Footnote-333977670
Ref: Testes<18>-Footnote-343977714
Ref: Testes<18>-Footnote-353977770
Ref: Testes<18>-Footnote-363977827
Ref: Testes<18>-Footnote-373977883
Ref: Testes<18>-Footnote-383977939
Ref: Testes<18>-Footnote-393977996
Ref: Testes<18>-Footnote-403978053
Ref: Testes<18>-Footnote-413978110
Ref: Testes<18>-Footnote-423978167
Ref: Testes<18>-Footnote-433978224
Ref: Testes<18>-Footnote-443978281
Ref: Testes<18>-Footnote-453978338
Ref: Testes<18>-Footnote-463978395
Ref: Testes<18>-Footnote-473978452
Ref: Testes<18>-Footnote-483978509
Ref: Testes<18>-Footnote-493978566
Ref: Testes<18>-Footnote-503978623
Ref: Testes<18>-Footnote-513978680
Ref: Testes<18>-Footnote-523978737
Ref: Testes<18>-Footnote-533978794
Ref: Testes<18>-Footnote-543978851
Ref: Testes<18>-Footnote-553978908
Ref: Testes<18>-Footnote-563978965
Ref: Testes<18>-Footnote-573979022
Ref: Testes<18>-Footnote-583979078
Ref: Testes<18>-Footnote-593979135
Node: Construção<21>3979191
Ref: whatsnew/changelog id1833979304
Ref: 19bc3979304
Ref: Construção<21>-Footnote-13983322
Ref: Construção<21>-Footnote-23983378
Ref: Construção<21>-Footnote-33983434
Ref: Construção<21>-Footnote-43983490
Ref: Construção<21>-Footnote-53983546
Ref: Construção<21>-Footnote-63983602
Ref: Construção<21>-Footnote-73983658
Ref: Construção<21>-Footnote-83983713
Ref: Construção<21>-Footnote-93983769
Ref: Construção<21>-Footnote-103983825
Ref: Construção<21>-Footnote-113983881
Ref: Construção<21>-Footnote-123983938
Ref: Construção<21>-Footnote-133983995
Ref: Construção<21>-Footnote-143984052
Ref: Construção<21>-Footnote-153984109
Ref: Construção<21>-Footnote-163984165
Ref: Construção<21>-Footnote-173984222
Ref: Construção<21>-Footnote-183984279
Ref: Construção<21>-Footnote-193984336
Ref: Construção<21>-Footnote-203984393
Ref: Construção<21>-Footnote-213984449
Ref: Construção<21>-Footnote-223984506
Ref: Construção<21>-Footnote-233984562
Ref: Construção<21>-Footnote-243984619
Node: Windows<18>3984676
Ref: whatsnew/changelog id1843984788
Ref: 19be3984788
Ref: Windows<18>-Footnote-13987310
Ref: Windows<18>-Footnote-23987366
Ref: Windows<18>-Footnote-33987422
Ref: Windows<18>-Footnote-43987477
Ref: Windows<18>-Footnote-53987533
Ref: Windows<18>-Footnote-63987589
Ref: Windows<18>-Footnote-73987644
Ref: Windows<18>-Footnote-83987700
Ref: Windows<18>-Footnote-93987756
Ref: Windows<18>-Footnote-103987812
Ref: Windows<18>-Footnote-113987869
Ref: Windows<18>-Footnote-123987925
Ref: Windows<18>-Footnote-133987982
Node: macOS<13>3988039
Ref: whatsnew/changelog id1853988143
Ref: 19bf3988143
Ref: macOS<13>-Footnote-13988407
Ref: macOS<13>-Footnote-23988463
Ref: macOS<13>-Footnote-33988519
Node: IDLE<12>3988574
Ref: whatsnew/changelog id1863988688
Ref: 19c03988688
Ref: IDLE<12>-Footnote-13988879
Node: Ferramentas/Demos<18>3988935
Ref: whatsnew/changelog id1873989049
Ref: 19c13989049
Ref: Ferramentas/Demos<18>-Footnote-13991588
Ref: Ferramentas/Demos<18>-Footnote-23991644
Ref: Ferramentas/Demos<18>-Footnote-33991700
Ref: Ferramentas/Demos<18>-Footnote-43991762
Ref: Ferramentas/Demos<18>-Footnote-53991851
Ref: Ferramentas/Demos<18>-Footnote-63991907
Ref: Ferramentas/Demos<18>-Footnote-73992001
Ref: Ferramentas/Demos<18>-Footnote-83992057
Ref: Ferramentas/Demos<18>-Footnote-93992113
Ref: Ferramentas/Demos<18>-Footnote-103992168
Ref: Ferramentas/Demos<18>-Footnote-113992264
Ref: Ferramentas/Demos<18>-Footnote-123992321
Ref: Ferramentas/Demos<18>-Footnote-133992378
Ref: Ferramentas/Demos<18>-Footnote-143992435
Ref: Ferramentas/Demos<18>-Footnote-153992492
Ref: Ferramentas/Demos<18>-Footnote-163992549
Ref: Ferramentas/Demos<18>-Footnote-173992606
Ref: Ferramentas/Demos<18>-Footnote-183992662
Node: API C<20>3992760
Ref: whatsnew/changelog id1883992857
Ref: 19c23992857
Ref: API C<20>-Footnote-14007762
Ref: API C<20>-Footnote-24007817
Ref: API C<20>-Footnote-34007873
Ref: API C<20>-Footnote-44007929
Ref: API C<20>-Footnote-54007985
Ref: API C<20>-Footnote-64008041
Ref: API C<20>-Footnote-74008097
Ref: API C<20>-Footnote-84008152
Ref: API C<20>-Footnote-94008208
Ref: API C<20>-Footnote-104008264
Ref: API C<20>-Footnote-114008321
Ref: API C<20>-Footnote-124008378
Ref: API C<20>-Footnote-134008435
Ref: API C<20>-Footnote-144008492
Ref: API C<20>-Footnote-154008549
Ref: API C<20>-Footnote-164008606
Ref: API C<20>-Footnote-174008663
Ref: API C<20>-Footnote-184008720
Ref: API C<20>-Footnote-194008777
Ref: API C<20>-Footnote-204008834
Ref: API C<20>-Footnote-214008891
Ref: API C<20>-Footnote-224008948
Ref: API C<20>-Footnote-234009005
Ref: API C<20>-Footnote-244009062
Ref: API C<20>-Footnote-254009119
Ref: API C<20>-Footnote-264009176
Ref: API C<20>-Footnote-274009233
Ref: API C<20>-Footnote-284009290
Ref: API C<20>-Footnote-294009347
Ref: API C<20>-Footnote-304009404
Ref: API C<20>-Footnote-314009461
Ref: API C<20>-Footnote-324009518
Ref: API C<20>-Footnote-334009561
Ref: API C<20>-Footnote-344009618
Ref: API C<20>-Footnote-354009675
Ref: API C<20>-Footnote-364009732
Ref: API C<20>-Footnote-374009789
Ref: API C<20>-Footnote-384009846
Ref: API C<20>-Footnote-394009903
Ref: API C<20>-Footnote-404009960
Ref: API C<20>-Footnote-414010017
Ref: API C<20>-Footnote-424010074
Ref: API C<20>-Footnote-434010131
Ref: API C<20>-Footnote-444010188
Ref: API C<20>-Footnote-454010245
Ref: API C<20>-Footnote-464010302
Ref: API C<20>-Footnote-474010359
Ref: API C<20>-Footnote-484010416
Ref: API C<20>-Footnote-494010473
Ref: API C<20>-Footnote-504010529
Ref: API C<20>-Footnote-514010586
Ref: API C<20>-Footnote-524010643
Ref: API C<20>-Footnote-534010700
Ref: API C<20>-Footnote-544010757
Ref: API C<20>-Footnote-554010814
Ref: API C<20>-Footnote-564010871
Ref: API C<20>-Footnote-574010928
Ref: API C<20>-Footnote-584010985
Ref: API C<20>-Footnote-594011051
Node: Python 3 12 0 beta 14011117
Ref: whatsnew/changelog python-3-12-0-beta-14011243
Ref: 19cd4011243
Node: Segurança<20>4011675
Ref: whatsnew/changelog id1894011778
Ref: 19ce4011778
Ref: Segurança<20>-Footnote-14012600
Ref: Segurança<20>-Footnote-24012655
Ref: Segurança<20>-Footnote-34012711
Ref: Segurança<20>-Footnote-44012766
Ref: Segurança<20>-Footnote-54012822
Node: Núcleo e embutidos<23>4012878
Ref: whatsnew/changelog id1904013004
Ref: 19cf4013004
Ref: Núcleo e embutidos<23>-Footnote-14024020
Ref: Núcleo e embutidos<23>-Footnote-24024076
Ref: Núcleo e embutidos<23>-Footnote-34024132
Ref: Núcleo e embutidos<23>-Footnote-44024188
Ref: Núcleo e embutidos<23>-Footnote-54024230
Ref: Núcleo e embutidos<23>-Footnote-64024286
Ref: Núcleo e embutidos<23>-Footnote-74024342
Ref: Núcleo e embutidos<23>-Footnote-84024398
Ref: Núcleo e embutidos<23>-Footnote-94024440
Ref: Núcleo e embutidos<23>-Footnote-104024496
Ref: Núcleo e embutidos<23>-Footnote-114024553
Ref: Núcleo e embutidos<23>-Footnote-124024609
Ref: Núcleo e embutidos<23>-Footnote-134024665
Ref: Núcleo e embutidos<23>-Footnote-144024722
Ref: Núcleo e embutidos<23>-Footnote-154024779
Ref: Núcleo e embutidos<23>-Footnote-164024822
Ref: Núcleo e embutidos<23>-Footnote-174024879
Ref: Núcleo e embutidos<23>-Footnote-184024936
Ref: Núcleo e embutidos<23>-Footnote-194024993
Ref: Núcleo e embutidos<23>-Footnote-204025050
Ref: Núcleo e embutidos<23>-Footnote-214025107
Ref: Núcleo e embutidos<23>-Footnote-224025164
Ref: Núcleo e embutidos<23>-Footnote-234025221
Ref: Núcleo e embutidos<23>-Footnote-244025278
Ref: Núcleo e embutidos<23>-Footnote-254025335
Ref: Núcleo e embutidos<23>-Footnote-264025392
Ref: Núcleo e embutidos<23>-Footnote-274025435
Ref: Núcleo e embutidos<23>-Footnote-284025492
Ref: Núcleo e embutidos<23>-Footnote-294025549
Ref: Núcleo e embutidos<23>-Footnote-304025606
Ref: Núcleo e embutidos<23>-Footnote-314025663
Ref: Núcleo e embutidos<23>-Footnote-324025720
Ref: Núcleo e embutidos<23>-Footnote-334025777
Ref: Núcleo e embutidos<23>-Footnote-344025834
Ref: Núcleo e embutidos<23>-Footnote-354025891
Ref: Núcleo e embutidos<23>-Footnote-364025948
Ref: Núcleo e embutidos<23>-Footnote-374026004
Ref: Núcleo e embutidos<23>-Footnote-384026061
Ref: Núcleo e embutidos<23>-Footnote-394026117
Ref: Núcleo e embutidos<23>-Footnote-404026173
Ref: Núcleo e embutidos<23>-Footnote-414026216
Ref: Núcleo e embutidos<23>-Footnote-424026273
Ref: Núcleo e embutidos<23>-Footnote-434026330
Ref: Núcleo e embutidos<23>-Footnote-444026387
Ref: Núcleo e embutidos<23>-Footnote-454026443
Ref: Núcleo e embutidos<23>-Footnote-464026500
Ref: Núcleo e embutidos<23>-Footnote-474026557
Ref: Núcleo e embutidos<23>-Footnote-484026600
Ref: Núcleo e embutidos<23>-Footnote-494026656
Ref: Núcleo e embutidos<23>-Footnote-504026713
Ref: Núcleo e embutidos<23>-Footnote-514026756
Ref: Núcleo e embutidos<23>-Footnote-524026812
Ref: Núcleo e embutidos<23>-Footnote-534026855
Ref: Núcleo e embutidos<23>-Footnote-544026911
Ref: Núcleo e embutidos<23>-Footnote-554026967
Ref: Núcleo e embutidos<23>-Footnote-564027033
Node: Biblioteca<24>4027099
Ref: whatsnew/changelog id1914027229
Ref: 19d04027229
Ref: Biblioteca<24>-Footnote-14050756
Ref: Biblioteca<24>-Footnote-24050812
Ref: Biblioteca<24>-Footnote-34050854
Ref: Biblioteca<24>-Footnote-44050910
Ref: Biblioteca<24>-Footnote-54050966
Ref: Biblioteca<24>-Footnote-64051022
Ref: Biblioteca<24>-Footnote-74051078
Ref: Biblioteca<24>-Footnote-84051133
Ref: Biblioteca<24>-Footnote-94051189
Ref: Biblioteca<24>-Footnote-104051245
Ref: Biblioteca<24>-Footnote-114051302
Ref: Biblioteca<24>-Footnote-124051359
Ref: Biblioteca<24>-Footnote-134051416
Ref: Biblioteca<24>-Footnote-144051473
Ref: Biblioteca<24>-Footnote-154051530
Ref: Biblioteca<24>-Footnote-164051587
Ref: Biblioteca<24>-Footnote-174051663
Ref: Biblioteca<24>-Footnote-184051720
Ref: Biblioteca<24>-Footnote-194051777
Ref: Biblioteca<24>-Footnote-204051833
Ref: Biblioteca<24>-Footnote-214051890
Ref: Biblioteca<24>-Footnote-224051956
Ref: Biblioteca<24>-Footnote-234052013
Ref: Biblioteca<24>-Footnote-244052069
Ref: Biblioteca<24>-Footnote-254052125
Ref: Biblioteca<24>-Footnote-264052182
Ref: Biblioteca<24>-Footnote-274052239
Ref: Biblioteca<24>-Footnote-284052296
Ref: Biblioteca<24>-Footnote-294052353
Ref: Biblioteca<24>-Footnote-304052410
Ref: Biblioteca<24>-Footnote-314052467
Ref: Biblioteca<24>-Footnote-324052524
Ref: Biblioteca<24>-Footnote-334052567
Ref: Biblioteca<24>-Footnote-344052624
Ref: Biblioteca<24>-Footnote-354052681
Ref: Biblioteca<24>-Footnote-364052738
Ref: Biblioteca<24>-Footnote-374052795
Ref: Biblioteca<24>-Footnote-384052851
Ref: Biblioteca<24>-Footnote-394052908
Ref: Biblioteca<24>-Footnote-404052964
Ref: Biblioteca<24>-Footnote-414053021
Ref: Biblioteca<24>-Footnote-424053078
Ref: Biblioteca<24>-Footnote-434053135
Ref: Biblioteca<24>-Footnote-444053192
Ref: Biblioteca<24>-Footnote-454053249
Ref: Biblioteca<24>-Footnote-464053306
Ref: Biblioteca<24>-Footnote-474053362
Ref: Biblioteca<24>-Footnote-484053418
Ref: Biblioteca<24>-Footnote-494053475
Ref: Biblioteca<24>-Footnote-504053532
Ref: Biblioteca<24>-Footnote-514053589
Ref: Biblioteca<24>-Footnote-524053646
Ref: Biblioteca<24>-Footnote-534053702
Ref: Biblioteca<24>-Footnote-544053759
Ref: Biblioteca<24>-Footnote-554053815
Ref: Biblioteca<24>-Footnote-564053872
Ref: Biblioteca<24>-Footnote-574053929
Ref: Biblioteca<24>-Footnote-584053985
Ref: Biblioteca<24>-Footnote-594054041
Ref: Biblioteca<24>-Footnote-604054098
Ref: Biblioteca<24>-Footnote-614054155
Ref: Biblioteca<24>-Footnote-624054211
Ref: Biblioteca<24>-Footnote-634054268
Ref: Biblioteca<24>-Footnote-644054325
Ref: Biblioteca<24>-Footnote-654054382
Ref: Biblioteca<24>-Footnote-664054439
Ref: Biblioteca<24>-Footnote-674054496
Ref: Biblioteca<24>-Footnote-684054553
Ref: Biblioteca<24>-Footnote-694054610
Ref: Biblioteca<24>-Footnote-704054667
Ref: Biblioteca<24>-Footnote-714054724
Ref: Biblioteca<24>-Footnote-724054781
Ref: Biblioteca<24>-Footnote-734054838
Ref: Biblioteca<24>-Footnote-744054895
Ref: Biblioteca<24>-Footnote-754054952
Ref: Biblioteca<24>-Footnote-764055009
Ref: Biblioteca<24>-Footnote-774055066
Ref: Biblioteca<24>-Footnote-784055109
Ref: Biblioteca<24>-Footnote-794055166
Ref: Biblioteca<24>-Footnote-804055223
Ref: Biblioteca<24>-Footnote-814055266
Ref: Biblioteca<24>-Footnote-824055322
Ref: Biblioteca<24>-Footnote-834055378
Ref: Biblioteca<24>-Footnote-844055435
Ref: Biblioteca<24>-Footnote-854055492
Ref: Biblioteca<24>-Footnote-864055549
Ref: Biblioteca<24>-Footnote-874055606
Ref: Biblioteca<24>-Footnote-884055663
Ref: Biblioteca<24>-Footnote-894055706
Ref: Biblioteca<24>-Footnote-904055763
Ref: Biblioteca<24>-Footnote-914055806
Ref: Biblioteca<24>-Footnote-924055862
Ref: Biblioteca<24>-Footnote-934055919
Ref: Biblioteca<24>-Footnote-944055976
Ref: Biblioteca<24>-Footnote-954056019
Ref: Biblioteca<24>-Footnote-964056076
Ref: Biblioteca<24>-Footnote-974056133
Ref: Biblioteca<24>-Footnote-984056190
Ref: Biblioteca<24>-Footnote-994056246
Ref: Biblioteca<24>-Footnote-1004056303
Ref: Biblioteca<24>-Footnote-1014056361
Ref: Biblioteca<24>-Footnote-1024056419
Ref: Biblioteca<24>-Footnote-1034056477
Ref: Biblioteca<24>-Footnote-1044056535
Ref: Biblioteca<24>-Footnote-1054056593
Ref: Biblioteca<24>-Footnote-1064056650
Ref: Biblioteca<24>-Footnote-1074056707
Ref: Biblioteca<24>-Footnote-1084056765
Ref: Biblioteca<24>-Footnote-1094056809
Ref: Biblioteca<24>-Footnote-1104056866
Ref: Biblioteca<24>-Footnote-1114056924
Ref: Biblioteca<24>-Footnote-1124056982
Ref: Biblioteca<24>-Footnote-1134057039
Ref: Biblioteca<24>-Footnote-1144057096
Ref: Biblioteca<24>-Footnote-1154057153
Ref: Biblioteca<24>-Footnote-1164057211
Ref: Biblioteca<24>-Footnote-1174057269
Ref: Biblioteca<24>-Footnote-1184057326
Ref: Biblioteca<24>-Footnote-1194057383
Ref: Biblioteca<24>-Footnote-1204057440
Ref: Biblioteca<24>-Footnote-1214057497
Ref: Biblioteca<24>-Footnote-1224057554
Ref: Biblioteca<24>-Footnote-1234057611
Ref: Biblioteca<24>-Footnote-1244057668
Ref: Biblioteca<24>-Footnote-1254057725
Ref: Biblioteca<24>-Footnote-1264057782
Ref: Biblioteca<24>-Footnote-1274057839
Ref: Biblioteca<24>-Footnote-1284057896
Ref: Biblioteca<24>-Footnote-1294057953
Ref: Biblioteca<24>-Footnote-1304058010
Ref: Biblioteca<24>-Footnote-1314058067
Ref: Biblioteca<24>-Footnote-1324058124
Ref: Biblioteca<24>-Footnote-1334058191
Ref: Biblioteca<24>-Footnote-1344058258
Ref: Biblioteca<24>-Footnote-1354058325
Ref: Biblioteca<24>-Footnote-1364058392
Ref: Biblioteca<24>-Footnote-1374058459
Ref: Biblioteca<24>-Footnote-1384058526
Ref: Biblioteca<24>-Footnote-1394058593
Node: Documentação<18>4058660
Ref: whatsnew/changelog id1924058777
Ref: 19dc4058777
Ref: Documentação<18>-Footnote-14059550
Ref: Documentação<18>-Footnote-24059605
Ref: Documentação<18>-Footnote-34059661
Ref: Documentação<18>-Footnote-44059703
Ref: Documentação<18>-Footnote-54059758
Ref: Documentação<18>-Footnote-64059813
Node: Testes<19>4059868
Ref: whatsnew/changelog id1934059987
Ref: 19dd4059987
Ref: Testes<19>-Footnote-14060898
Ref: Testes<19>-Footnote-24060954
Ref: Testes<19>-Footnote-34061010
Ref: Testes<19>-Footnote-44061065
Ref: Testes<19>-Footnote-54061121
Ref: Testes<19>-Footnote-64061177
Node: Construção<22>4061232
Ref: whatsnew/changelog id1944061344
Ref: 19de4061344
Ref: Construção<22>-Footnote-14062940
Ref: Construção<22>-Footnote-24062996
Ref: Construção<22>-Footnote-34063051
Ref: Construção<22>-Footnote-44063107
Ref: Construção<22>-Footnote-54063163
Ref: Construção<22>-Footnote-64063219
Ref: Construção<22>-Footnote-74063274
Ref: Construção<22>-Footnote-84063329
Ref: Construção<22>-Footnote-94063385
Node: Windows<19>4063440
Ref: whatsnew/changelog id1954063551
Ref: 19df4063551
Ref: Windows<19>-Footnote-14064404
Ref: Windows<19>-Footnote-24064460
Ref: Windows<19>-Footnote-34064515
Ref: Windows<19>-Footnote-44064571
Ref: Windows<19>-Footnote-54064627
Ref: Windows<19>-Footnote-64064683
Node: macOS<14>4064738
Ref: whatsnew/changelog id1964064841
Ref: 19e04064841
Ref: macOS<14>-Footnote-14065643
Ref: macOS<14>-Footnote-24065698
Ref: macOS<14>-Footnote-34065754
Ref: macOS<14>-Footnote-44065810
Ref: macOS<14>-Footnote-54065866
Ref: macOS<14>-Footnote-64065921
Node: IDLE<13>4065977
Ref: whatsnew/changelog id1974066090
Ref: 19e14066090
Ref: IDLE<13>-Footnote-14066372
Ref: IDLE<13>-Footnote-24066428
Ref: IDLE<13>-Footnote-34066484
Node: Ferramentas/Demos<19>4066539
Ref: whatsnew/changelog id1984066652
Ref: 19e24066652
Ref: Ferramentas/Demos<19>-Footnote-14066924
Node: API C<21>4066980
Ref: whatsnew/changelog id1994067076
Ref: 19e34067076
Ref: API C<21>-Footnote-14070063
Ref: API C<21>-Footnote-24070119
Ref: API C<21>-Footnote-34070175
Ref: API C<21>-Footnote-44070231
Ref: API C<21>-Footnote-54070287
Ref: API C<21>-Footnote-64070343
Ref: API C<21>-Footnote-74070399
Ref: API C<21>-Footnote-84070441
Ref: API C<21>-Footnote-94070497
Ref: API C<21>-Footnote-104070553
Ref: API C<21>-Footnote-114070609
Node: Python 3 12 0 alpha 74070665
Ref: whatsnew/changelog python-3-12-0-alpha-74070791
Ref: 19ea4070791
Node: Núcleo e embutidos<24>4071157
Ref: whatsnew/changelog id2004071261
Ref: 19eb4071261
Ref: Núcleo e embutidos<24>-Footnote-14074393
Ref: Núcleo e embutidos<24>-Footnote-24074449
Ref: Núcleo e embutidos<24>-Footnote-34074504
Ref: Núcleo e embutidos<24>-Footnote-44074560
Ref: Núcleo e embutidos<24>-Footnote-54074616
Ref: Núcleo e embutidos<24>-Footnote-64074672
Ref: Núcleo e embutidos<24>-Footnote-74074728
Ref: Núcleo e embutidos<24>-Footnote-84074784
Ref: Núcleo e embutidos<24>-Footnote-94074840
Ref: Núcleo e embutidos<24>-Footnote-104074896
Ref: Núcleo e embutidos<24>-Footnote-114074952
Ref: Núcleo e embutidos<24>-Footnote-124075009
Ref: Núcleo e embutidos<24>-Footnote-134075066
Ref: Núcleo e embutidos<24>-Footnote-144075123
Ref: Núcleo e embutidos<24>-Footnote-154075180
Ref: Núcleo e embutidos<24>-Footnote-164075223
Ref: Núcleo e embutidos<24>-Footnote-174075280
Ref: Núcleo e embutidos<24>-Footnote-184075337
Ref: Núcleo e embutidos<24>-Footnote-194075394
Ref: Núcleo e embutidos<24>-Footnote-204075451
Ref: Núcleo e embutidos<24>-Footnote-214075508
Ref: Núcleo e embutidos<24>-Footnote-224075565
Ref: Núcleo e embutidos<24>-Footnote-234075633
Node: Biblioteca<25>4075676
Ref: whatsnew/changelog id2014075807
Ref: 19ec4075807
Ref: Biblioteca<25>-Footnote-14083646
Ref: Biblioteca<25>-Footnote-24083702
Ref: Biblioteca<25>-Footnote-34083758
Ref: Biblioteca<25>-Footnote-44083814
Ref: Biblioteca<25>-Footnote-54083870
Ref: Biblioteca<25>-Footnote-64083926
Ref: Biblioteca<25>-Footnote-74083982
Ref: Biblioteca<25>-Footnote-84084038
Ref: Biblioteca<25>-Footnote-94084094
Ref: Biblioteca<25>-Footnote-104084150
Ref: Biblioteca<25>-Footnote-114084207
Ref: Biblioteca<25>-Footnote-124084264
Ref: Biblioteca<25>-Footnote-134084321
Ref: Biblioteca<25>-Footnote-144084377
Ref: Biblioteca<25>-Footnote-154084433
Ref: Biblioteca<25>-Footnote-164084489
Ref: Biblioteca<25>-Footnote-174084546
Ref: Biblioteca<25>-Footnote-184084603
Ref: Biblioteca<25>-Footnote-194084660
Ref: Biblioteca<25>-Footnote-204084717
Ref: Biblioteca<25>-Footnote-214084774
Ref: Biblioteca<25>-Footnote-224084831
Ref: Biblioteca<25>-Footnote-234084887
Ref: Biblioteca<25>-Footnote-244084944
Ref: Biblioteca<25>-Footnote-254085000
Ref: Biblioteca<25>-Footnote-264085057
Ref: Biblioteca<25>-Footnote-274085114
Ref: Biblioteca<25>-Footnote-284085171
Ref: Biblioteca<25>-Footnote-294085227
Ref: Biblioteca<25>-Footnote-304085284
Ref: Biblioteca<25>-Footnote-314085341
Ref: Biblioteca<25>-Footnote-324085398
Ref: Biblioteca<25>-Footnote-334085454
Ref: Biblioteca<25>-Footnote-344085511
Ref: Biblioteca<25>-Footnote-354085567
Ref: Biblioteca<25>-Footnote-364085623
Ref: Biblioteca<25>-Footnote-374085679
Ref: Biblioteca<25>-Footnote-384085735
Ref: Biblioteca<25>-Footnote-394085791
Ref: Biblioteca<25>-Footnote-404085847
Ref: Biblioteca<25>-Footnote-414085903
Node: Documentação<19>4085969
Ref: whatsnew/changelog id2024086087
Ref: 19f14086087
Ref: Documentação<19>-Footnote-14086286
Node: Testes<20>4086342
Ref: whatsnew/changelog id2034086462
Ref: 19f24086462
Ref: Testes<20>-Footnote-14086821
Ref: Testes<20>-Footnote-24086877
Ref: Testes<20>-Footnote-34086933
Node: Construção<23>4086989
Ref: whatsnew/changelog id2044087102
Ref: 19f34087102
Ref: Construção<23>-Footnote-14087360
Ref: Construção<23>-Footnote-24087416
Node: Windows<20>4087472
Ref: whatsnew/changelog id2054087596
Ref: 19f44087596
Ref: Windows<20>-Footnote-14087894
Ref: Windows<20>-Footnote-24087950
Node: Ferramentas/Demos<20>4088005
Ref: whatsnew/changelog id2064088122
Ref: 19f54088122
Ref: Ferramentas/Demos<20>-Footnote-14088267
Node: API C<22>4088323
Ref: whatsnew/changelog id2074088420
Ref: 19f64088420
Ref: API C<22>-Footnote-14088636
Node: Python 3 12 0 alpha 64088692
Ref: whatsnew/changelog python-3-12-0-alpha-64088819
Ref: 19f74088819
Node: Segurança<21>4089191
Ref: whatsnew/changelog id2084089295
Ref: 19f84089295
Ref: Segurança<21>-Footnote-14090236
Ref: Segurança<21>-Footnote-24090291
Ref: Segurança<21>-Footnote-34090347
Ref: Segurança<21>-Footnote-44090402
Ref: Segurança<21>-Footnote-54090457
Ref: Segurança<21>-Footnote-64090512
Ref: Segurança<21>-Footnote-74090573
Ref: Segurança<21>-Footnote-84090628
Ref: Segurança<21>-Footnote-94090676
Node: Núcleo e embutidos<25>4090732
Ref: whatsnew/changelog id2094090859
Ref: 19f94090859
Ref: Núcleo e embutidos<25>-Footnote-14094495
Ref: Núcleo e embutidos<25>-Footnote-24094551
Ref: Núcleo e embutidos<25>-Footnote-34094607
Ref: Núcleo e embutidos<25>-Footnote-44094663
Ref: Núcleo e embutidos<25>-Footnote-54094719
Ref: Núcleo e embutidos<25>-Footnote-64094775
Ref: Núcleo e embutidos<25>-Footnote-74094831
Ref: Núcleo e embutidos<25>-Footnote-84094887
Ref: Núcleo e embutidos<25>-Footnote-94094943
Ref: Núcleo e embutidos<25>-Footnote-104094999
Ref: Núcleo e embutidos<25>-Footnote-114095056
Ref: Núcleo e embutidos<25>-Footnote-124095113
Ref: Núcleo e embutidos<25>-Footnote-134095169
Ref: Núcleo e embutidos<25>-Footnote-144095226
Ref: Núcleo e embutidos<25>-Footnote-154095283
Ref: Núcleo e embutidos<25>-Footnote-164095339
Ref: Núcleo e embutidos<25>-Footnote-174095395
Ref: Núcleo e embutidos<25>-Footnote-184095452
Ref: Núcleo e embutidos<25>-Footnote-194095509
Ref: Núcleo e embutidos<25>-Footnote-204095566
Ref: Núcleo e embutidos<25>-Footnote-214095623
Ref: Núcleo e embutidos<25>-Footnote-224095680
Node: Biblioteca<26>4095736
Ref: whatsnew/changelog id2104095867
Ref: 19fd4095867
Ref: Biblioteca<26>-Footnote-14101718
Ref: Biblioteca<26>-Footnote-24101774
Ref: Biblioteca<26>-Footnote-34101830
Ref: Biblioteca<26>-Footnote-44101885
Ref: Biblioteca<26>-Footnote-54101940
Ref: Biblioteca<26>-Footnote-64101996
Ref: Biblioteca<26>-Footnote-74102052
Ref: Biblioteca<26>-Footnote-84102108
Ref: Biblioteca<26>-Footnote-94102164
Ref: Biblioteca<26>-Footnote-104102231
Ref: Biblioteca<26>-Footnote-114102287
Ref: Biblioteca<26>-Footnote-124102371
Ref: Biblioteca<26>-Footnote-134102428
Ref: Biblioteca<26>-Footnote-144102484
Ref: Biblioteca<26>-Footnote-154102541
Ref: Biblioteca<26>-Footnote-164102597
Ref: Biblioteca<26>-Footnote-174102653
Ref: Biblioteca<26>-Footnote-184102710
Ref: Biblioteca<26>-Footnote-194102767
Ref: Biblioteca<26>-Footnote-204102824
Ref: Biblioteca<26>-Footnote-214102881
Ref: Biblioteca<26>-Footnote-224102938
Ref: Biblioteca<26>-Footnote-234102995
Ref: Biblioteca<26>-Footnote-244103052
Ref: Biblioteca<26>-Footnote-254103108
Ref: Biblioteca<26>-Footnote-264103165
Ref: Biblioteca<26>-Footnote-274103208
Ref: Biblioteca<26>-Footnote-284103264
Ref: Biblioteca<26>-Footnote-294103321
Ref: Biblioteca<26>-Footnote-304103378
Ref: Biblioteca<26>-Footnote-314103421
Ref: Biblioteca<26>-Footnote-324103478
Ref: Biblioteca<26>-Footnote-334103534
Ref: Biblioteca<26>-Footnote-344103577
Ref: Biblioteca<26>-Footnote-354103633
Ref: Biblioteca<26>-Footnote-364103689
Node: Documentação<20>4103755
Ref: whatsnew/changelog id2114103873
Ref: 1a074103873
Ref: Documentação<20>-Footnote-14104182
Ref: Documentação<20>-Footnote-24104237
Node: Testes<21>4104292
Ref: whatsnew/changelog id2124104412
Ref: 1a094104412
Ref: Testes<21>-Footnote-14104990
Ref: Testes<21>-Footnote-24105046
Ref: Testes<21>-Footnote-34105101
Node: Construção<24>4105156
Ref: whatsnew/changelog id2134105269
Ref: 1a0a4105269
Ref: Construção<24>-Footnote-14105960
Ref: Construção<24>-Footnote-24106015
Ref: Construção<24>-Footnote-34106070
Ref: Construção<24>-Footnote-44106126
Node: Windows<21>4106181
Ref: whatsnew/changelog id2144106293
Ref: 1a0c4106293
Ref: Windows<21>-Footnote-14107312
Ref: Windows<21>-Footnote-24107368
Ref: Windows<21>-Footnote-34107424
Ref: Windows<21>-Footnote-44107480
Ref: Windows<21>-Footnote-54107536
Ref: Windows<21>-Footnote-64107592
Ref: Windows<21>-Footnote-74107648
Ref: Windows<21>-Footnote-84107704
Node: macOS<15>4107760
Ref: whatsnew/changelog id2154107865
Ref: 1a0d4107865
Ref: macOS<15>-Footnote-14107995
Node: API C<23>4108051
Ref: whatsnew/changelog id2164108136
Ref: 1a0e4108136
Ref: API C<23>-Footnote-14109233
Ref: API C<23>-Footnote-24109289
Ref: API C<23>-Footnote-34109344
Ref: API C<23>-Footnote-44109400
Ref: API C<23>-Footnote-54109455
Node: Python 3 12 0 alpha 54109497
Ref: whatsnew/changelog python-3-12-0-alpha-54109624
Ref: 1a0f4109624
Node: Segurança<22>4109956
Ref: whatsnew/changelog id2174110060
Ref: 1a104110060
Ref: Segurança<22>-Footnote-14110441
Ref: Segurança<22>-Footnote-24110496
Node: Núcleo e embutidos<26>4110544
Ref: whatsnew/changelog id2194110671
Ref: 1a114110671
Ref: Núcleo e embutidos<26>-Footnote-14113772
Ref: Núcleo e embutidos<26>-Footnote-24113827
Ref: Núcleo e embutidos<26>-Footnote-34113882
Ref: Núcleo e embutidos<26>-Footnote-44113938
Ref: Núcleo e embutidos<26>-Footnote-54113994
Ref: Núcleo e embutidos<26>-Footnote-64114050
Ref: Núcleo e embutidos<26>-Footnote-74114106
Ref: Núcleo e embutidos<26>-Footnote-84114162
Ref: Núcleo e embutidos<26>-Footnote-94114218
Ref: Núcleo e embutidos<26>-Footnote-104114274
Ref: Núcleo e embutidos<26>-Footnote-114114331
Ref: Núcleo e embutidos<26>-Footnote-124114388
Ref: Núcleo e embutidos<26>-Footnote-134114445
Ref: Núcleo e embutidos<26>-Footnote-144114502
Ref: Núcleo e embutidos<26>-Footnote-154114558
Ref: Núcleo e embutidos<26>-Footnote-164114615
Ref: Núcleo e embutidos<26>-Footnote-174114672
Node: Biblioteca<27>4114738
Ref: whatsnew/changelog id2204114869
Ref: 1a144114869
Ref: Biblioteca<27>-Footnote-14119936
Ref: Biblioteca<27>-Footnote-24119992
Ref: Biblioteca<27>-Footnote-34120048
Ref: Biblioteca<27>-Footnote-44120104
Ref: Biblioteca<27>-Footnote-54120160
Ref: Biblioteca<27>-Footnote-64120216
Ref: Biblioteca<27>-Footnote-74120271
Ref: Biblioteca<27>-Footnote-84120313
Ref: Biblioteca<27>-Footnote-94120369
Ref: Biblioteca<27>-Footnote-104120425
Ref: Biblioteca<27>-Footnote-114120482
Ref: Biblioteca<27>-Footnote-124120538
Ref: Biblioteca<27>-Footnote-134120595
Ref: Biblioteca<27>-Footnote-144120652
Ref: Biblioteca<27>-Footnote-154120709
Ref: Biblioteca<27>-Footnote-164120765
Ref: Biblioteca<27>-Footnote-174120822
Ref: Biblioteca<27>-Footnote-184120879
Ref: Biblioteca<27>-Footnote-194120935
Ref: Biblioteca<27>-Footnote-204120991
Ref: Biblioteca<27>-Footnote-214121047
Ref: Biblioteca<27>-Footnote-224121103
Ref: Biblioteca<27>-Footnote-234121159
Ref: Biblioteca<27>-Footnote-244121215
Ref: Biblioteca<27>-Footnote-254121271
Ref: Biblioteca<27>-Footnote-264121327
Ref: Biblioteca<27>-Footnote-274121393
Ref: Biblioteca<27>-Footnote-284121459
Ref: Biblioteca<27>-Footnote-294121525
Node: Documentação<21>4121581
Ref: whatsnew/changelog id2214121699
Ref: 1a1d4121699
Ref: Documentação<21>-Footnote-14121984
Node: Testes<22>4122039
Ref: whatsnew/changelog id2224122159
Ref: 1a1e4122159
Ref: Testes<22>-Footnote-14122323
Node: Construção<25>4122379
Ref: whatsnew/changelog id2234122492
Ref: 1a1f4122492
Ref: Construção<25>-Footnote-14123943
Ref: Construção<25>-Footnote-24123999
Ref: Construção<25>-Footnote-34124055
Ref: Construção<25>-Footnote-44124110
Ref: Construção<25>-Footnote-54124166
Ref: Construção<25>-Footnote-64124208
Ref: Construção<25>-Footnote-74124264
Ref: Construção<25>-Footnote-84124320
Ref: Construção<25>-Footnote-94124375
Ref: Construção<25>-Footnote-104124430
Node: Windows<22>4124486
Ref: whatsnew/changelog id2244124580
Ref: 1a204124580
Ref: Windows<22>-Footnote-14125832
Ref: Windows<22>-Footnote-24125888
Ref: Windows<22>-Footnote-34125944
Ref: Windows<22>-Footnote-44125999
Ref: Windows<22>-Footnote-54126055
Ref: Windows<22>-Footnote-64126110
Ref: Windows<22>-Footnote-74126166
Node: Python 3 12 0 alpha 44126222
Ref: whatsnew/changelog python-3-12-0-alpha-44126349
Ref: 1a214126349
Node: Núcleo e embutidos<27>4126735
Ref: whatsnew/changelog id2254126839
Ref: 1a224126839
Ref: Núcleo e embutidos<27>-Footnote-14131759
Ref: Núcleo e embutidos<27>-Footnote-24131815
Ref: Núcleo e embutidos<27>-Footnote-34131870
Ref: Núcleo e embutidos<27>-Footnote-44131925
Ref: Núcleo e embutidos<27>-Footnote-54131981
Ref: Núcleo e embutidos<27>-Footnote-64132037
Ref: Núcleo e embutidos<27>-Footnote-74132093
Ref: Núcleo e embutidos<27>-Footnote-84132149
Ref: Núcleo e embutidos<27>-Footnote-94132205
Ref: Núcleo e embutidos<27>-Footnote-104132261
Ref: Núcleo e embutidos<27>-Footnote-114132317
Ref: Núcleo e embutidos<27>-Footnote-124132360
Ref: Núcleo e embutidos<27>-Footnote-134132417
Ref: Núcleo e embutidos<27>-Footnote-144132474
Ref: Núcleo e embutidos<27>-Footnote-154132531
Ref: Núcleo e embutidos<27>-Footnote-164132588
Ref: Núcleo e embutidos<27>-Footnote-174132645
Ref: Núcleo e embutidos<27>-Footnote-184132701
Ref: Núcleo e embutidos<27>-Footnote-194132758
Ref: Núcleo e embutidos<27>-Footnote-204132814
Ref: Núcleo e embutidos<27>-Footnote-214132871
Ref: Núcleo e embutidos<27>-Footnote-224132927
Ref: Núcleo e embutidos<27>-Footnote-234132983
Ref: Núcleo e embutidos<27>-Footnote-244133039
Ref: Núcleo e embutidos<27>-Footnote-254133096
Ref: Núcleo e embutidos<27>-Footnote-264133153
Ref: Núcleo e embutidos<27>-Footnote-274133210
Ref: Núcleo e embutidos<27>-Footnote-284133267
Ref: Núcleo e embutidos<27>-Footnote-294133323
Ref: Núcleo e embutidos<27>-Footnote-304133379
Ref: Núcleo e embutidos<27>-Footnote-314133435
Ref: Núcleo e embutidos<27>-Footnote-324133491
Ref: Núcleo e embutidos<27>-Footnote-334133547
Ref: Núcleo e embutidos<27>-Footnote-344133603
Node: Biblioteca<28>4133669
Ref: whatsnew/changelog id2264133800
Ref: 1a264133800
Ref: Biblioteca<28>-Footnote-14144105
Ref: Biblioteca<28>-Footnote-24144161
Ref: Biblioteca<28>-Footnote-34144217
Ref: Biblioteca<28>-Footnote-44144273
Ref: Biblioteca<28>-Footnote-54144329
Ref: Biblioteca<28>-Footnote-64144384
Ref: Biblioteca<28>-Footnote-74144439
Ref: Biblioteca<28>-Footnote-84144495
Ref: Biblioteca<28>-Footnote-94144551
Ref: Biblioteca<28>-Footnote-104144606
Ref: Biblioteca<28>-Footnote-114144663
Ref: Biblioteca<28>-Footnote-124144719
Ref: Biblioteca<28>-Footnote-134144776
Ref: Biblioteca<28>-Footnote-144144832
Ref: Biblioteca<28>-Footnote-154144888
Ref: Biblioteca<28>-Footnote-164144945
Ref: Biblioteca<28>-Footnote-174145002
Ref: Biblioteca<28>-Footnote-184145059
Ref: Biblioteca<28>-Footnote-194145116
Ref: Biblioteca<28>-Footnote-204145173
Ref: Biblioteca<28>-Footnote-214145230
Ref: Biblioteca<28>-Footnote-224145287
Ref: Biblioteca<28>-Footnote-234145343
Ref: Biblioteca<28>-Footnote-244145400
Ref: Biblioteca<28>-Footnote-254145457
Ref: Biblioteca<28>-Footnote-264145514
Ref: Biblioteca<28>-Footnote-274145570
Ref: Biblioteca<28>-Footnote-284145627
Ref: Biblioteca<28>-Footnote-294145684
Ref: Biblioteca<28>-Footnote-304145741
Ref: Biblioteca<28>-Footnote-314145798
Ref: Biblioteca<28>-Footnote-324145864
Ref: Biblioteca<28>-Footnote-334145921
Ref: Biblioteca<28>-Footnote-344145977
Ref: Biblioteca<28>-Footnote-354146033
Ref: Biblioteca<28>-Footnote-364146089
Ref: Biblioteca<28>-Footnote-374146145
Ref: Biblioteca<28>-Footnote-384146201
Ref: Biblioteca<28>-Footnote-394146257
Ref: Biblioteca<28>-Footnote-404146313
Ref: Biblioteca<28>-Footnote-414146369
Ref: Biblioteca<28>-Footnote-424146425
Ref: Biblioteca<28>-Footnote-434146468
Ref: Biblioteca<28>-Footnote-444146524
Ref: Biblioteca<28>-Footnote-454146580
Ref: Biblioteca<28>-Footnote-464146636
Ref: Biblioteca<28>-Footnote-474146692
Ref: Biblioteca<28>-Footnote-484146748
Ref: Biblioteca<28>-Footnote-494146804
Ref: Biblioteca<28>-Footnote-504146860
Ref: Biblioteca<28>-Footnote-514146916
Ref: Biblioteca<28>-Footnote-524146972
Ref: Biblioteca<28>-Footnote-534147028
Ref: Biblioteca<28>-Footnote-544147084
Ref: Biblioteca<28>-Footnote-554147150
Ref: Biblioteca<28>-Footnote-564147216
Node: Documentação<22>4147282
Ref: whatsnew/changelog id2274147400
Ref: 1a304147400
Ref: Documentação<22>-Footnote-14147983
Ref: Documentação<22>-Footnote-24148039
Ref: Documentação<22>-Footnote-34148095
Node: Testes<23>4148160
Ref: whatsnew/changelog id2284148280
Ref: 1a324148280
Ref: Testes<23>-Footnote-14148737
Ref: Testes<23>-Footnote-24148793
Ref: Testes<23>-Footnote-34148849
Node: Construção<26>4148904
Ref: whatsnew/changelog id2294149017
Ref: 1a334149017
Ref: Construção<26>-Footnote-14149916
Ref: Construção<26>-Footnote-24149972
Ref: Construção<26>-Footnote-34150027
Node: Windows<23>4150092
Ref: whatsnew/changelog id2304150204
Ref: 1a344150204
Ref: Windows<23>-Footnote-14151129
Ref: Windows<23>-Footnote-24151185
Ref: Windows<23>-Footnote-34151240
Ref: Windows<23>-Footnote-44151295
Ref: Windows<23>-Footnote-54151350
Ref: Windows<23>-Footnote-64151415
Node: macOS<16>4151480
Ref: whatsnew/changelog id2314151597
Ref: 1a374151597
Ref: macOS<16>-Footnote-14151879
Ref: macOS<16>-Footnote-24151935
Node: Ferramentas/Demos<21>4151991
Ref: whatsnew/changelog id2324152106
Ref: 1a384152106
Ref: Ferramentas/Demos<21>-Footnote-14152492
Ref: Ferramentas/Demos<21>-Footnote-24152557
Node: API C<24>4152613
Ref: whatsnew/changelog id2334152710
Ref: 1a394152710
Ref: API C<24>-Footnote-14153277
Ref: API C<24>-Footnote-24153332
Ref: API C<24>-Footnote-34153387
Node: Python 3 12 0 alpha 34153442
Ref: whatsnew/changelog python-3-12-0-alpha-34153569
Ref: 1a3a4153569
Node: Segurança<23>4153985
Ref: whatsnew/changelog id2344154089
Ref: 1a3b4154089
Ref: Segurança<23>-Footnote-14154652
Ref: Segurança<23>-Footnote-24154708
Node: Núcleo e embutidos<28>4154763
Ref: whatsnew/changelog id2354154890
Ref: 1a3c4154890
Ref: Núcleo e embutidos<28>-Footnote-14158204
Ref: Núcleo e embutidos<28>-Footnote-24158259
Ref: Núcleo e embutidos<28>-Footnote-34158314
Ref: Núcleo e embutidos<28>-Footnote-44158369
Ref: Núcleo e embutidos<28>-Footnote-54158424
Ref: Núcleo e embutidos<28>-Footnote-64158479
Ref: Núcleo e embutidos<28>-Footnote-74158534
Ref: Núcleo e embutidos<28>-Footnote-84158589
Ref: Núcleo e embutidos<28>-Footnote-94158644
Ref: Núcleo e embutidos<28>-Footnote-104158699
Ref: Núcleo e embutidos<28>-Footnote-114158755
Ref: Núcleo e embutidos<28>-Footnote-124158811
Ref: Núcleo e embutidos<28>-Footnote-134158867
Ref: Núcleo e embutidos<28>-Footnote-144158923
Ref: Núcleo e embutidos<28>-Footnote-154158979
Ref: Núcleo e embutidos<28>-Footnote-164159035
Ref: Núcleo e embutidos<28>-Footnote-174159101
Ref: Núcleo e embutidos<28>-Footnote-184159167
Node: Biblioteca<29>4159233
Ref: whatsnew/changelog id2364159364
Ref: 1a3d4159364
Ref: Biblioteca<29>-Footnote-14165612
Ref: Biblioteca<29>-Footnote-24165668
Ref: Biblioteca<29>-Footnote-34165723
Ref: Biblioteca<29>-Footnote-44165778
Ref: Biblioteca<29>-Footnote-54165833
Ref: Biblioteca<29>-Footnote-64165888
Ref: Biblioteca<29>-Footnote-74165943
Ref: Biblioteca<29>-Footnote-84165998
Ref: Biblioteca<29>-Footnote-94166053
Ref: Biblioteca<29>-Footnote-104166108
Ref: Biblioteca<29>-Footnote-114166164
Ref: Biblioteca<29>-Footnote-124166220
Ref: Biblioteca<29>-Footnote-134166276
Ref: Biblioteca<29>-Footnote-144166332
Ref: Biblioteca<29>-Footnote-154166388
Ref: Biblioteca<29>-Footnote-164166444
Ref: Biblioteca<29>-Footnote-174166500
Ref: Biblioteca<29>-Footnote-184166556
Ref: Biblioteca<29>-Footnote-194166612
Ref: Biblioteca<29>-Footnote-204166668
Ref: Biblioteca<29>-Footnote-214166724
Ref: Biblioteca<29>-Footnote-224166780
Ref: Biblioteca<29>-Footnote-234166836
Ref: Biblioteca<29>-Footnote-244166892
Ref: Biblioteca<29>-Footnote-254166948
Ref: Biblioteca<29>-Footnote-264167004
Ref: Biblioteca<29>-Footnote-274167060
Ref: Biblioteca<29>-Footnote-284167116
Ref: Biblioteca<29>-Footnote-294167172
Ref: Biblioteca<29>-Footnote-304167228
Ref: Biblioteca<29>-Footnote-314167284
Ref: Biblioteca<29>-Footnote-324167350
Ref: Biblioteca<29>-Footnote-334167416
Ref: Biblioteca<29>-Footnote-344167482
Node: Documentação<23>4167548
Ref: whatsnew/changelog id2374167666
Ref: 1a414167666
Ref: Documentação<23>-Footnote-14168435
Ref: Documentação<23>-Footnote-24168490
Ref: Documentação<23>-Footnote-34168542
Ref: Documentação<23>-Footnote-44168566
Ref: Documentação<23>-Footnote-54168621
Ref: Documentação<23>-Footnote-64168676
Ref: Documentação<23>-Footnote-74168731
Node: Testes<24>4168796
Ref: whatsnew/changelog id2384168916
Ref: 1a424168916
Ref: Testes<24>-Footnote-14169695
Ref: Testes<24>-Footnote-24169750
Ref: Testes<24>-Footnote-34169805
Ref: Testes<24>-Footnote-44169860
Ref: Testes<24>-Footnote-54169915
Ref: Testes<24>-Footnote-64169970
Node: Construção<27>4170025
Ref: whatsnew/changelog id2394170138
Ref: 1a434170138
Ref: Construção<27>-Footnote-14171114
Ref: Construção<27>-Footnote-24171169
Ref: Construção<27>-Footnote-34171224
Ref: Construção<27>-Footnote-44171279
Ref: Construção<27>-Footnote-54171334
Node: Windows<24>4171389
Ref: whatsnew/changelog id2404171501
Ref: 1a444171501
Ref: Windows<24>-Footnote-14172045
Ref: Windows<24>-Footnote-24172100
Ref: Windows<24>-Footnote-34172155
Ref: Windows<24>-Footnote-44172210
Node: macOS<17>4172275
Ref: whatsnew/changelog id2414172392
Ref: 1a454172392
Ref: macOS<17>-Footnote-14172660
Ref: macOS<17>-Footnote-24172715
Node: Ferramentas/Demos<22>4172770
Ref: whatsnew/changelog id2424172885
Ref: 1a464172885
Ref: Ferramentas/Demos<22>-Footnote-14173387
Node: API C<25>4173442
Ref: whatsnew/changelog id2434173539
Ref: 1a474173539
Ref: API C<25>-Footnote-14174360
Ref: API C<25>-Footnote-24174415
Ref: API C<25>-Footnote-34174470
Node: Python 3 12 0 alpha 24174525
Ref: whatsnew/changelog python-3-12-0-alpha-24174652
Ref: 1a494174652
Node: Segurança<24>4175024
Ref: whatsnew/changelog id2444175128
Ref: 1a4a4175128
Ref: Segurança<24>-Footnote-14176264
Ref: Segurança<24>-Footnote-24176319
Ref: Segurança<24>-Footnote-34176378
Ref: Segurança<24>-Footnote-44176437
Ref: Segurança<24>-Footnote-54176496
Node: Núcleo e embutidos<29>4176551
Ref: whatsnew/changelog id2454176678
Ref: 1a4b4176678
Ref: Núcleo e embutidos<29>-Footnote-14184691
Ref: Núcleo e embutidos<29>-Footnote-24184746
Ref: Núcleo e embutidos<29>-Footnote-34184801
Ref: Núcleo e embutidos<29>-Footnote-44184856
Ref: Núcleo e embutidos<29>-Footnote-54184911
Ref: Núcleo e embutidos<29>-Footnote-64184966
Ref: Núcleo e embutidos<29>-Footnote-74185021
Ref: Núcleo e embutidos<29>-Footnote-84185076
Ref: Núcleo e embutidos<29>-Footnote-94185131
Ref: Núcleo e embutidos<29>-Footnote-104185186
Ref: Núcleo e embutidos<29>-Footnote-114185242
Ref: Núcleo e embutidos<29>-Footnote-124185298
Ref: Núcleo e embutidos<29>-Footnote-134185354
Ref: Núcleo e embutidos<29>-Footnote-144185410
Ref: Núcleo e embutidos<29>-Footnote-154185466
Ref: Núcleo e embutidos<29>-Footnote-164185522
Ref: Núcleo e embutidos<29>-Footnote-174185578
Ref: Núcleo e embutidos<29>-Footnote-184185634
Ref: Núcleo e embutidos<29>-Footnote-194185690
Ref: Núcleo e embutidos<29>-Footnote-204185746
Ref: Núcleo e embutidos<29>-Footnote-214185802
Ref: Núcleo e embutidos<29>-Footnote-224185858
Ref: Núcleo e embutidos<29>-Footnote-234185914
Ref: Núcleo e embutidos<29>-Footnote-244185970
Ref: Núcleo e embutidos<29>-Footnote-254186013
Ref: Núcleo e embutidos<29>-Footnote-264186069
Ref: Núcleo e embutidos<29>-Footnote-274186125
Ref: Núcleo e embutidos<29>-Footnote-284186181
Ref: Núcleo e embutidos<29>-Footnote-294186237
Ref: Núcleo e embutidos<29>-Footnote-304186293
Ref: Núcleo e embutidos<29>-Footnote-314186349
Ref: Núcleo e embutidos<29>-Footnote-324186405
Ref: Núcleo e embutidos<29>-Footnote-334186461
Ref: Núcleo e embutidos<29>-Footnote-344186517
Ref: Núcleo e embutidos<29>-Footnote-354186573
Node: Biblioteca<30>4186629
Ref: whatsnew/changelog id2464186760
Ref: 1a534186760
Ref: Biblioteca<30>-Footnote-14192572
Ref: Biblioteca<30>-Footnote-24192627
Ref: Biblioteca<30>-Footnote-34192682
Ref: Biblioteca<30>-Footnote-44192737
Ref: Biblioteca<30>-Footnote-54192792
Ref: Biblioteca<30>-Footnote-64192847
Ref: Biblioteca<30>-Footnote-74192902
Ref: Biblioteca<30>-Footnote-84192957
Ref: Biblioteca<30>-Footnote-94193012
Ref: Biblioteca<30>-Footnote-104193067
Ref: Biblioteca<30>-Footnote-114193123
Ref: Biblioteca<30>-Footnote-124193179
Ref: Biblioteca<30>-Footnote-134193222
Ref: Biblioteca<30>-Footnote-144193278
Ref: Biblioteca<30>-Footnote-154193334
Ref: Biblioteca<30>-Footnote-164193390
Ref: Biblioteca<30>-Footnote-174193446
Ref: Biblioteca<30>-Footnote-184193502
Ref: Biblioteca<30>-Footnote-194193558
Ref: Biblioteca<30>-Footnote-204193614
Ref: Biblioteca<30>-Footnote-214193670
Ref: Biblioteca<30>-Footnote-224193726
Ref: Biblioteca<30>-Footnote-234193782
Ref: Biblioteca<30>-Footnote-244193838
Ref: Biblioteca<30>-Footnote-254193894
Ref: Biblioteca<30>-Footnote-264193950
Ref: Biblioteca<30>-Footnote-274194006
Ref: Biblioteca<30>-Footnote-284194062
Ref: Biblioteca<30>-Footnote-294194118
Ref: Biblioteca<30>-Footnote-304194174
Ref: Biblioteca<30>-Footnote-314194230
Ref: Biblioteca<30>-Footnote-324194273
Ref: Biblioteca<30>-Footnote-334194329
Ref: Biblioteca<30>-Footnote-344194385
Ref: Biblioteca<30>-Footnote-354194441
Ref: Biblioteca<30>-Footnote-364194497
Ref: Biblioteca<30>-Footnote-374194540
Ref: Biblioteca<30>-Footnote-384194596
Ref: Biblioteca<30>-Footnote-394194652
Ref: Biblioteca<30>-Footnote-404194718
Ref: Biblioteca<30>-Footnote-414194784
Node: Documentação<24>4194850
Ref: whatsnew/changelog id2474194968
Ref: 1a584194968
Ref: Documentação<24>-Footnote-14195286
Ref: Documentação<24>-Footnote-24195341
Node: Testes<25>4195396
Ref: whatsnew/changelog id2484195516
Ref: 1a594195516
Ref: Testes<25>-Footnote-14196406
Ref: Testes<25>-Footnote-24196461
Ref: Testes<25>-Footnote-34196516
Ref: Testes<25>-Footnote-44196571
Ref: Testes<25>-Footnote-54196626
Node: Construção<28>4196691
Ref: whatsnew/changelog id2494196804
Ref: 1a5a4196804
Ref: Construção<28>-Footnote-14198509
Ref: Construção<28>-Footnote-24198564
Ref: Construção<28>-Footnote-34198619
Ref: Construção<28>-Footnote-44198674
Ref: Construção<28>-Footnote-54198729
Ref: Construção<28>-Footnote-64198784
Ref: Construção<28>-Footnote-74198839
Ref: Construção<28>-Footnote-84198929
Ref: Construção<28>-Footnote-94198984
Ref: Construção<28>-Footnote-104199039
Node: Windows<25>4199095
Ref: whatsnew/changelog id2504199207
Ref: 1a5c4199207
Ref: Windows<25>-Footnote-14199922
Ref: Windows<25>-Footnote-24199977
Ref: Windows<25>-Footnote-34200033
Ref: Windows<25>-Footnote-44200088
Ref: Windows<25>-Footnote-54200143
Ref: Windows<25>-Footnote-64200198
Node: macOS<18>4200253
Ref: whatsnew/changelog id2514200358
Ref: 1a5d4200358
Ref: macOS<18>-Footnote-14200487
Node: API C<26>4200542
Ref: whatsnew/changelog id2524200627
Ref: 1a5e4200627
Ref: API C<26>-Footnote-14202702
Ref: API C<26>-Footnote-24202757
Ref: API C<26>-Footnote-34202812
Ref: API C<26>-Footnote-44202867
Ref: API C<26>-Footnote-54202922
Ref: API C<26>-Footnote-64202977
Ref: API C<26>-Footnote-74203032
Node: Python 3 12 0 alpha 14203087
Ref: whatsnew/changelog python-3-12-0-alpha-14203213
Ref: 1a604203213
Node: Segurança<25>4203647
Ref: whatsnew/changelog id2534203751
Ref: 1a614203751
Ref: Segurança<25>-Footnote-14205591
Ref: Segurança<25>-Footnote-24205646
Ref: Segurança<25>-Footnote-34205701
Ref: Segurança<25>-Footnote-44205773
Ref: Segurança<25>-Footnote-54205829
Ref: Segurança<25>-Footnote-64205884
Ref: Segurança<25>-Footnote-74205939
Ref: Segurança<25>-Footnote-84205994
Node: Núcleo e embutidos<30>4206049
Ref: whatsnew/changelog id2544206176
Ref: 1a624206176
Ref: Núcleo e embutidos<30>-Footnote-14235572
Ref: Núcleo e embutidos<30>-Footnote-24235627
Ref: Núcleo e embutidos<30>-Footnote-34235682
Ref: Núcleo e embutidos<30>-Footnote-44235737
Ref: Núcleo e embutidos<30>-Footnote-54235792
Ref: Núcleo e embutidos<30>-Footnote-64235847
Ref: Núcleo e embutidos<30>-Footnote-74235902
Ref: Núcleo e embutidos<30>-Footnote-84235957
Ref: Núcleo e embutidos<30>-Footnote-94236012
Ref: Núcleo e embutidos<30>-Footnote-104236067
Ref: Núcleo e embutidos<30>-Footnote-114236123
Ref: Núcleo e embutidos<30>-Footnote-124236179
Ref: Núcleo e embutidos<30>-Footnote-134236235
Ref: Núcleo e embutidos<30>-Footnote-144236291
Ref: Núcleo e embutidos<30>-Footnote-154236347
Ref: Núcleo e embutidos<30>-Footnote-164236403
Ref: Núcleo e embutidos<30>-Footnote-174236459
Ref: Núcleo e embutidos<30>-Footnote-184236515
Ref: Núcleo e embutidos<30>-Footnote-194236571
Ref: Núcleo e embutidos<30>-Footnote-204236627
Ref: Núcleo e embutidos<30>-Footnote-214236683
Ref: Núcleo e embutidos<30>-Footnote-224236739
Ref: Núcleo e embutidos<30>-Footnote-234236795
Ref: Núcleo e embutidos<30>-Footnote-244236851
Ref: Núcleo e embutidos<30>-Footnote-254236907
Ref: Núcleo e embutidos<30>-Footnote-264236963
Ref: Núcleo e embutidos<30>-Footnote-274237019
Ref: Núcleo e embutidos<30>-Footnote-284237075
Ref: Núcleo e embutidos<30>-Footnote-294237131
Ref: Núcleo e embutidos<30>-Footnote-304237187
Ref: Núcleo e embutidos<30>-Footnote-314237243
Ref: Núcleo e embutidos<30>-Footnote-324237299
Ref: Núcleo e embutidos<30>-Footnote-334237355
Ref: Núcleo e embutidos<30>-Footnote-344237411
Ref: Núcleo e embutidos<30>-Footnote-354237467
Ref: Núcleo e embutidos<30>-Footnote-364237523
Ref: Núcleo e embutidos<30>-Footnote-374237579
Ref: Núcleo e embutidos<30>-Footnote-384237635
Ref: Núcleo e embutidos<30>-Footnote-394237691
Ref: Núcleo e embutidos<30>-Footnote-404237747
Ref: Núcleo e embutidos<30>-Footnote-414237803
Ref: Núcleo e embutidos<30>-Footnote-424237859
Ref: Núcleo e embutidos<30>-Footnote-434237915
Ref: Núcleo e embutidos<30>-Footnote-444237971
Ref: Núcleo e embutidos<30>-Footnote-454238027
Ref: Núcleo e embutidos<30>-Footnote-464238083
Ref: Núcleo e embutidos<30>-Footnote-474238139
Ref: Núcleo e embutidos<30>-Footnote-484238195
Ref: Núcleo e embutidos<30>-Footnote-494238238
Ref: Núcleo e embutidos<30>-Footnote-504238294
Ref: Núcleo e embutidos<30>-Footnote-514238350
Ref: Núcleo e embutidos<30>-Footnote-524238406
Ref: Núcleo e embutidos<30>-Footnote-534238462
Ref: Núcleo e embutidos<30>-Footnote-544238518
Ref: Núcleo e embutidos<30>-Footnote-554238574
Ref: Núcleo e embutidos<30>-Footnote-564238630
Ref: Núcleo e embutidos<30>-Footnote-574238686
Ref: Núcleo e embutidos<30>-Footnote-584238742
Ref: Núcleo e embutidos<30>-Footnote-594238798
Ref: Núcleo e embutidos<30>-Footnote-604238854
Ref: Núcleo e embutidos<30>-Footnote-614238910
Ref: Núcleo e embutidos<30>-Footnote-624238966
Ref: Núcleo e embutidos<30>-Footnote-634239022
Ref: Núcleo e embutidos<30>-Footnote-644239078
Ref: Núcleo e embutidos<30>-Footnote-654239134
Ref: Núcleo e embutidos<30>-Footnote-664239190
Ref: Núcleo e embutidos<30>-Footnote-674239246
Ref: Núcleo e embutidos<30>-Footnote-684239302
Ref: Núcleo e embutidos<30>-Footnote-694239358
Ref: Núcleo e embutidos<30>-Footnote-704239414
Ref: Núcleo e embutidos<30>-Footnote-714239470
Ref: Núcleo e embutidos<30>-Footnote-724239526
Ref: Núcleo e embutidos<30>-Footnote-734239582
Ref: Núcleo e embutidos<30>-Footnote-744239638
Ref: Núcleo e embutidos<30>-Footnote-754239694
Ref: Núcleo e embutidos<30>-Footnote-764239750
Ref: Núcleo e embutidos<30>-Footnote-774239806
Ref: Núcleo e embutidos<30>-Footnote-784239862
Ref: Núcleo e embutidos<30>-Footnote-794239918
Ref: Núcleo e embutidos<30>-Footnote-804239974
Ref: Núcleo e embutidos<30>-Footnote-814240030
Ref: Núcleo e embutidos<30>-Footnote-824240086
Ref: Núcleo e embutidos<30>-Footnote-834240142
Ref: Núcleo e embutidos<30>-Footnote-844240198
Ref: Núcleo e embutidos<30>-Footnote-854240254
Ref: Núcleo e embutidos<30>-Footnote-864240310
Ref: Núcleo e embutidos<30>-Footnote-874240366
Ref: Núcleo e embutidos<30>-Footnote-884240422
Ref: Núcleo e embutidos<30>-Footnote-894240478
Ref: Núcleo e embutidos<30>-Footnote-904240534
Ref: Núcleo e embutidos<30>-Footnote-914240590
Ref: Núcleo e embutidos<30>-Footnote-924240646
Ref: Núcleo e embutidos<30>-Footnote-934240702
Ref: Núcleo e embutidos<30>-Footnote-944240758
Ref: Núcleo e embutidos<30>-Footnote-954240814
Ref: Núcleo e embutidos<30>-Footnote-964240870
Ref: Núcleo e embutidos<30>-Footnote-974240926
Ref: Núcleo e embutidos<30>-Footnote-984240982
Ref: Núcleo e embutidos<30>-Footnote-994241038
Ref: Núcleo e embutidos<30>-Footnote-1004241094
Ref: Núcleo e embutidos<30>-Footnote-1014241151
Ref: Núcleo e embutidos<30>-Footnote-1024241208
Ref: Núcleo e embutidos<30>-Footnote-1034241265
Ref: Núcleo e embutidos<30>-Footnote-1044241322
Ref: Núcleo e embutidos<30>-Footnote-1054241379
Ref: Núcleo e embutidos<30>-Footnote-1064241436
Ref: Núcleo e embutidos<30>-Footnote-1074241480
Ref: Núcleo e embutidos<30>-Footnote-1084241537
Ref: Núcleo e embutidos<30>-Footnote-1094241594
Ref: Núcleo e embutidos<30>-Footnote-1104241651
Ref: Núcleo e embutidos<30>-Footnote-1114241708
Ref: Núcleo e embutidos<30>-Footnote-1124241765
Ref: Núcleo e embutidos<30>-Footnote-1134241822
Ref: Núcleo e embutidos<30>-Footnote-1144241879
Ref: Núcleo e embutidos<30>-Footnote-1154241936
Ref: Núcleo e embutidos<30>-Footnote-1164241993
Ref: Núcleo e embutidos<30>-Footnote-1174242050
Ref: Núcleo e embutidos<30>-Footnote-1184242107
Ref: Núcleo e embutidos<30>-Footnote-1194242164
Ref: Núcleo e embutidos<30>-Footnote-1204242221
Ref: Núcleo e embutidos<30>-Footnote-1214242278
Ref: Núcleo e embutidos<30>-Footnote-1224242335
Ref: Núcleo e embutidos<30>-Footnote-1234242392
Ref: Núcleo e embutidos<30>-Footnote-1244242449
Ref: Núcleo e embutidos<30>-Footnote-1254242506
Ref: Núcleo e embutidos<30>-Footnote-1264242563
Ref: Núcleo e embutidos<30>-Footnote-1274242620
Ref: Núcleo e embutidos<30>-Footnote-1284242677
Ref: Núcleo e embutidos<30>-Footnote-1294242734
Ref: Núcleo e embutidos<30>-Footnote-1304242791
Ref: Núcleo e embutidos<30>-Footnote-1314242848
Ref: Núcleo e embutidos<30>-Footnote-1324242905
Ref: Núcleo e embutidos<30>-Footnote-1334242962
Ref: Núcleo e embutidos<30>-Footnote-1344243019
Ref: Núcleo e embutidos<30>-Footnote-1354243076
Ref: Núcleo e embutidos<30>-Footnote-1364243133
Ref: Núcleo e embutidos<30>-Footnote-1374243190
Ref: Núcleo e embutidos<30>-Footnote-1384243247
Ref: Núcleo e embutidos<30>-Footnote-1394243304
Ref: Núcleo e embutidos<30>-Footnote-1404243361
Ref: Núcleo e embutidos<30>-Footnote-1414243418
Ref: Núcleo e embutidos<30>-Footnote-1424243475
Ref: Núcleo e embutidos<30>-Footnote-1434243532
Ref: Núcleo e embutidos<30>-Footnote-1444243589
Ref: Núcleo e embutidos<30>-Footnote-1454243646
Ref: Núcleo e embutidos<30>-Footnote-1464243703
Ref: Núcleo e embutidos<30>-Footnote-1474243760
Ref: Núcleo e embutidos<30>-Footnote-1484243817
Ref: Núcleo e embutidos<30>-Footnote-1494243878
Ref: Núcleo e embutidos<30>-Footnote-1504243935
Ref: Núcleo e embutidos<30>-Footnote-1514243992
Ref: Núcleo e embutidos<30>-Footnote-1524244049
Ref: Núcleo e embutidos<30>-Footnote-1534244106
Ref: Núcleo e embutidos<30>-Footnote-1544244163
Ref: Núcleo e embutidos<30>-Footnote-1554244220
Ref: Núcleo e embutidos<30>-Footnote-1564244277
Ref: Núcleo e embutidos<30>-Footnote-1574244334
Ref: Núcleo e embutidos<30>-Footnote-1584244391
Ref: Núcleo e embutidos<30>-Footnote-1594244448
Ref: Núcleo e embutidos<30>-Footnote-1604244505
Ref: Núcleo e embutidos<30>-Footnote-1614244562
Ref: Núcleo e embutidos<30>-Footnote-1624244619
Ref: Núcleo e embutidos<30>-Footnote-1634244676
Ref: Núcleo e embutidos<30>-Footnote-1644244733
Ref: Núcleo e embutidos<30>-Footnote-1654244790
Ref: Núcleo e embutidos<30>-Footnote-1664244847
Ref: Núcleo e embutidos<30>-Footnote-1674244904
Ref: Núcleo e embutidos<30>-Footnote-1684244961
Ref: Núcleo e embutidos<30>-Footnote-1694245018
Ref: Núcleo e embutidos<30>-Footnote-1704245085
Ref: Núcleo e embutidos<30>-Footnote-1714245152
Node: Biblioteca<31>4245219
Ref: whatsnew/changelog id2554245350
Ref: 1a6a4245350
Ref: Biblioteca<31>-Footnote-14288634
Ref: Biblioteca<31>-Footnote-24288689
Ref: Biblioteca<31>-Footnote-34288744
Ref: Biblioteca<31>-Footnote-44288799
Ref: Biblioteca<31>-Footnote-54288854
Ref: Biblioteca<31>-Footnote-64288909
Ref: Biblioteca<31>-Footnote-74288964
Ref: Biblioteca<31>-Footnote-84289019
Ref: Biblioteca<31>-Footnote-94289074
Ref: Biblioteca<31>-Footnote-104289129
Ref: Biblioteca<31>-Footnote-114289185
Ref: Biblioteca<31>-Footnote-124289241
Ref: Biblioteca<31>-Footnote-134289297
Ref: Biblioteca<31>-Footnote-144289353
Ref: Biblioteca<31>-Footnote-154289409
Ref: Biblioteca<31>-Footnote-164289465
Ref: Biblioteca<31>-Footnote-174289521
Ref: Biblioteca<31>-Footnote-184289577
Ref: Biblioteca<31>-Footnote-194289633
Ref: Biblioteca<31>-Footnote-204289693
Ref: Biblioteca<31>-Footnote-214289749
Ref: Biblioteca<31>-Footnote-224289805
Ref: Biblioteca<31>-Footnote-234289861
Ref: Biblioteca<31>-Footnote-244289917
Ref: Biblioteca<31>-Footnote-254289973
Ref: Biblioteca<31>-Footnote-264290029
Ref: Biblioteca<31>-Footnote-274290085
Ref: Biblioteca<31>-Footnote-284290141
Ref: Biblioteca<31>-Footnote-294290197
Ref: Biblioteca<31>-Footnote-304290253
Ref: Biblioteca<31>-Footnote-314290309
Ref: Biblioteca<31>-Footnote-324290365
Ref: Biblioteca<31>-Footnote-334290421
Ref: Biblioteca<31>-Footnote-344290477
Ref: Biblioteca<31>-Footnote-354290533
Ref: Biblioteca<31>-Footnote-364290589
Ref: Biblioteca<31>-Footnote-374290645
Ref: Biblioteca<31>-Footnote-384290701
Ref: Biblioteca<31>-Footnote-394290757
Ref: Biblioteca<31>-Footnote-404290813
Ref: Biblioteca<31>-Footnote-414290869
Ref: Biblioteca<31>-Footnote-424290925
Ref: Biblioteca<31>-Footnote-434290981
Ref: Biblioteca<31>-Footnote-444291037
Ref: Biblioteca<31>-Footnote-454291093
Ref: Biblioteca<31>-Footnote-464291149
Ref: Biblioteca<31>-Footnote-474291205
Ref: Biblioteca<31>-Footnote-484291261
Ref: Biblioteca<31>-Footnote-494291317
Ref: Biblioteca<31>-Footnote-504291373
Ref: Biblioteca<31>-Footnote-514291429
Ref: Biblioteca<31>-Footnote-524291485
Ref: Biblioteca<31>-Footnote-534291541
Ref: Biblioteca<31>-Footnote-544291597
Ref: Biblioteca<31>-Footnote-554291653
Ref: Biblioteca<31>-Footnote-564291709
Ref: Biblioteca<31>-Footnote-574291765
Ref: Biblioteca<31>-Footnote-584291821
Ref: Biblioteca<31>-Footnote-594291877
Ref: Biblioteca<31>-Footnote-604291933
Ref: Biblioteca<31>-Footnote-614291989
Ref: Biblioteca<31>-Footnote-624292045
Ref: Biblioteca<31>-Footnote-634292101
Ref: Biblioteca<31>-Footnote-644292157
Ref: Biblioteca<31>-Footnote-654292213
Ref: Biblioteca<31>-Footnote-664292269
Ref: Biblioteca<31>-Footnote-674292325
Ref: Biblioteca<31>-Footnote-684292391
Ref: Biblioteca<31>-Footnote-694292447
Ref: Biblioteca<31>-Footnote-704292503
Ref: Biblioteca<31>-Footnote-714292559
Ref: Biblioteca<31>-Footnote-724292615
Ref: Biblioteca<31>-Footnote-734292671
Ref: Biblioteca<31>-Footnote-744292727
Ref: Biblioteca<31>-Footnote-754292783
Ref: Biblioteca<31>-Footnote-764292839
Ref: Biblioteca<31>-Footnote-774292895
Ref: Biblioteca<31>-Footnote-784292951
Ref: Biblioteca<31>-Footnote-794293007
Ref: Biblioteca<31>-Footnote-804293063
Ref: Biblioteca<31>-Footnote-814293119
Ref: Biblioteca<31>-Footnote-824293175
Ref: Biblioteca<31>-Footnote-834293231
Ref: Biblioteca<31>-Footnote-844293287
Ref: Biblioteca<31>-Footnote-854293343
Ref: Biblioteca<31>-Footnote-864293399
Ref: Biblioteca<31>-Footnote-874293455
Ref: Biblioteca<31>-Footnote-884293511
Ref: Biblioteca<31>-Footnote-894293567
Ref: Biblioteca<31>-Footnote-904293623
Ref: Biblioteca<31>-Footnote-914293679
Ref: Biblioteca<31>-Footnote-924293735
Ref: Biblioteca<31>-Footnote-934293791
Ref: Biblioteca<31>-Footnote-944293847
Ref: Biblioteca<31>-Footnote-954293903
Ref: Biblioteca<31>-Footnote-964293959
Ref: Biblioteca<31>-Footnote-974294015
Ref: Biblioteca<31>-Footnote-984294071
Ref: Biblioteca<31>-Footnote-994294127
Ref: Biblioteca<31>-Footnote-1004294183
Ref: Biblioteca<31>-Footnote-1014294240
Ref: Biblioteca<31>-Footnote-1024294297
Ref: Biblioteca<31>-Footnote-1034294354
Ref: Biblioteca<31>-Footnote-1044294411
Ref: Biblioteca<31>-Footnote-1054294468
Ref: Biblioteca<31>-Footnote-1064294525
Ref: Biblioteca<31>-Footnote-1074294582
Ref: Biblioteca<31>-Footnote-1084294639
Ref: Biblioteca<31>-Footnote-1094294696
Ref: Biblioteca<31>-Footnote-1104294753
Ref: Biblioteca<31>-Footnote-1114294810
Ref: Biblioteca<31>-Footnote-1124294867
Ref: Biblioteca<31>-Footnote-1134294924
Ref: Biblioteca<31>-Footnote-1144294981
Ref: Biblioteca<31>-Footnote-1154295038
Ref: Biblioteca<31>-Footnote-1164295095
Ref: Biblioteca<31>-Footnote-1174295152
Ref: Biblioteca<31>-Footnote-1184295209
Ref: Biblioteca<31>-Footnote-1194295266
Ref: Biblioteca<31>-Footnote-1204295323
Ref: Biblioteca<31>-Footnote-1214295380
Ref: Biblioteca<31>-Footnote-1224295437
Ref: Biblioteca<31>-Footnote-1234295494
Ref: Biblioteca<31>-Footnote-1244295538
Ref: Biblioteca<31>-Footnote-1254295595
Ref: Biblioteca<31>-Footnote-1264295652
Ref: Biblioteca<31>-Footnote-1274295709
Ref: Biblioteca<31>-Footnote-1284295766
Ref: Biblioteca<31>-Footnote-1294295823
Ref: Biblioteca<31>-Footnote-1304295880
Ref: Biblioteca<31>-Footnote-1314295937
Ref: Biblioteca<31>-Footnote-1324295994
Ref: Biblioteca<31>-Footnote-1334296051
Ref: Biblioteca<31>-Footnote-1344296108
Ref: Biblioteca<31>-Footnote-1354296165
Ref: Biblioteca<31>-Footnote-1364296222
Ref: Biblioteca<31>-Footnote-1374296279
Ref: Biblioteca<31>-Footnote-1384296336
Ref: Biblioteca<31>-Footnote-1394296393
Ref: Biblioteca<31>-Footnote-1404296451
Ref: Biblioteca<31>-Footnote-1414296508
Ref: Biblioteca<31>-Footnote-1424296565
Ref: Biblioteca<31>-Footnote-1434296609
Ref: Biblioteca<31>-Footnote-1444296666
Ref: Biblioteca<31>-Footnote-1454296723
Ref: Biblioteca<31>-Footnote-1464296780
Ref: Biblioteca<31>-Footnote-1474296837
Ref: Biblioteca<31>-Footnote-1484296894
Ref: Biblioteca<31>-Footnote-1494296951
Ref: Biblioteca<31>-Footnote-1504297008
Ref: Biblioteca<31>-Footnote-1514297065
Ref: Biblioteca<31>-Footnote-1524297122
Ref: Biblioteca<31>-Footnote-1534297179
Ref: Biblioteca<31>-Footnote-1544297236
Ref: Biblioteca<31>-Footnote-1554297293
Ref: Biblioteca<31>-Footnote-1564297350
Ref: Biblioteca<31>-Footnote-1574297407
Ref: Biblioteca<31>-Footnote-1584297464
Ref: Biblioteca<31>-Footnote-1594297521
Ref: Biblioteca<31>-Footnote-1604297578
Ref: Biblioteca<31>-Footnote-1614297635
Ref: Biblioteca<31>-Footnote-1624297692
Ref: Biblioteca<31>-Footnote-1634297736
Ref: Biblioteca<31>-Footnote-1644297793
Ref: Biblioteca<31>-Footnote-1654297850
Ref: Biblioteca<31>-Footnote-1664297907
Ref: Biblioteca<31>-Footnote-1674297964
Ref: Biblioteca<31>-Footnote-1684298021
Ref: Biblioteca<31>-Footnote-1694298078
Ref: Biblioteca<31>-Footnote-1704298135
Ref: Biblioteca<31>-Footnote-1714298192
Ref: Biblioteca<31>-Footnote-1724298249
Ref: Biblioteca<31>-Footnote-1734298306
Ref: Biblioteca<31>-Footnote-1744298363
Ref: Biblioteca<31>-Footnote-1754298420
Ref: Biblioteca<31>-Footnote-1764298477
Ref: Biblioteca<31>-Footnote-1774298534
Ref: Biblioteca<31>-Footnote-1784298591
Ref: Biblioteca<31>-Footnote-1794298648
Ref: Biblioteca<31>-Footnote-1804298705
Ref: Biblioteca<31>-Footnote-1814298762
Ref: Biblioteca<31>-Footnote-1824298806
Ref: Biblioteca<31>-Footnote-1834298863
Ref: Biblioteca<31>-Footnote-1844298920
Ref: Biblioteca<31>-Footnote-1854298977
Ref: Biblioteca<31>-Footnote-1864299034
Ref: Biblioteca<31>-Footnote-1874299091
Ref: Biblioteca<31>-Footnote-1884299148
Ref: Biblioteca<31>-Footnote-1894299205
Ref: Biblioteca<31>-Footnote-1904299262
Ref: Biblioteca<31>-Footnote-1914299319
Ref: Biblioteca<31>-Footnote-1924299376
Ref: Biblioteca<31>-Footnote-1934299433
Ref: Biblioteca<31>-Footnote-1944299490
Ref: Biblioteca<31>-Footnote-1954299547
Ref: Biblioteca<31>-Footnote-1964299604
Ref: Biblioteca<31>-Footnote-1974299661
Ref: Biblioteca<31>-Footnote-1984299718
Ref: Biblioteca<31>-Footnote-1994299775
Ref: Biblioteca<31>-Footnote-2004299832
Ref: Biblioteca<31>-Footnote-2014299889
Ref: Biblioteca<31>-Footnote-2024299946
Ref: Biblioteca<31>-Footnote-2034300003
Ref: Biblioteca<31>-Footnote-2044300060
Ref: Biblioteca<31>-Footnote-2054300117
Ref: Biblioteca<31>-Footnote-2064300174
Ref: Biblioteca<31>-Footnote-2074300231
Ref: Biblioteca<31>-Footnote-2084300288
Ref: Biblioteca<31>-Footnote-2094300345
Ref: Biblioteca<31>-Footnote-2104300402
Ref: Biblioteca<31>-Footnote-2114300459
Ref: Biblioteca<31>-Footnote-2124300516
Ref: Biblioteca<31>-Footnote-2134300573
Ref: Biblioteca<31>-Footnote-2144300630
Ref: Biblioteca<31>-Footnote-2154300687
Ref: Biblioteca<31>-Footnote-2164300744
Ref: Biblioteca<31>-Footnote-2174300801
Ref: Biblioteca<31>-Footnote-2184300858
Ref: Biblioteca<31>-Footnote-2194300915
Ref: Biblioteca<31>-Footnote-2204300972
Ref: Biblioteca<31>-Footnote-2214301029
Ref: Biblioteca<31>-Footnote-2224301086
Ref: Biblioteca<31>-Footnote-2234301143
Ref: Biblioteca<31>-Footnote-2244301200
Ref: Biblioteca<31>-Footnote-2254301257
Ref: Biblioteca<31>-Footnote-2264301314
Ref: Biblioteca<31>-Footnote-2274301381
Ref: Biblioteca<31>-Footnote-2284301448
Ref: Biblioteca<31>-Footnote-2294301515
Ref: Biblioteca<31>-Footnote-2304301572
Ref: Biblioteca<31>-Footnote-2314301639
Ref: Biblioteca<31>-Footnote-2324301706
Ref: Biblioteca<31>-Footnote-2334301773
Ref: Biblioteca<31>-Footnote-2344301840
Ref: Biblioteca<31>-Footnote-2354301907
Ref: Biblioteca<31>-Footnote-2364301974
Ref: Biblioteca<31>-Footnote-2374302041
Ref: Biblioteca<31>-Footnote-2384302108
Ref: Biblioteca<31>-Footnote-2394302175
Ref: Biblioteca<31>-Footnote-2404302242
Ref: Biblioteca<31>-Footnote-2414302309
Ref: Biblioteca<31>-Footnote-2424302376
Ref: Biblioteca<31>-Footnote-2434302443
Ref: Biblioteca<31>-Footnote-2444302510
Ref: Biblioteca<31>-Footnote-2454302577
Ref: Biblioteca<31>-Footnote-2464302644
Ref: Biblioteca<31>-Footnote-2474302711
Ref: Biblioteca<31>-Footnote-2484302778
Ref: Biblioteca<31>-Footnote-2494302845
Ref: Biblioteca<31>-Footnote-2504302912
Ref: Biblioteca<31>-Footnote-2514302979
Ref: Biblioteca<31>-Footnote-2524303046
Ref: Biblioteca<31>-Footnote-2534303113
Ref: Biblioteca<31>-Footnote-2544303180
Node: Documentação<25>4303247
Ref: whatsnew/changelog id2564303365
Ref: 1a854303365
Ref: Documentação<25>-Footnote-14307130
Ref: Documentação<25>-Footnote-24307185
Ref: Documentação<25>-Footnote-34307240
Ref: Documentação<25>-Footnote-44307286
Ref: Documentação<25>-Footnote-54307341
Ref: Documentação<25>-Footnote-64307396
Ref: Documentação<25>-Footnote-74307451
Ref: Documentação<25>-Footnote-84307506
Ref: Documentação<25>-Footnote-94307561
Ref: Documentação<25>-Footnote-104307616
Ref: Documentação<25>-Footnote-114307672
Ref: Documentação<25>-Footnote-124307728
Ref: Documentação<25>-Footnote-134307784
Ref: Documentação<25>-Footnote-144307840
Ref: Documentação<25>-Footnote-154307883
Ref: Documentação<25>-Footnote-164307939
Ref: Documentação<25>-Footnote-174307995
Ref: Documentação<25>-Footnote-184308051
Ref: Documentação<25>-Footnote-194308107
Ref: Documentação<25>-Footnote-204308163
Ref: Documentação<25>-Footnote-214308219
Ref: Documentação<25>-Footnote-224308275
Ref: Documentação<25>-Footnote-234308331
Ref: Documentação<25>-Footnote-244308397
Ref: Documentação<25>-Footnote-254308463
Ref: Documentação<25>-Footnote-264308529
Ref: Documentação<25>-Footnote-274308595
Node: Testes<26>4308661
Ref: whatsnew/changelog id2574308781
Ref: 1a8c4308781
Ref: Testes<26>-Footnote-14314166
Ref: Testes<26>-Footnote-24314221
Ref: Testes<26>-Footnote-34314276
Ref: Testes<26>-Footnote-44314331
Ref: Testes<26>-Footnote-54314386
Ref: Testes<26>-Footnote-64314473
Ref: Testes<26>-Footnote-74314528
Ref: Testes<26>-Footnote-84314583
Ref: Testes<26>-Footnote-94314638
Ref: Testes<26>-Footnote-104314693
Ref: Testes<26>-Footnote-114314749
Ref: Testes<26>-Footnote-124314805
Ref: Testes<26>-Footnote-134314861
Ref: Testes<26>-Footnote-144314917
Ref: Testes<26>-Footnote-154314973
Ref: Testes<26>-Footnote-164315029
Ref: Testes<26>-Footnote-174315085
Ref: Testes<26>-Footnote-184315141
Ref: Testes<26>-Footnote-194315197
Ref: Testes<26>-Footnote-204315253
Ref: Testes<26>-Footnote-214315309
Ref: Testes<26>-Footnote-224315365
Ref: Testes<26>-Footnote-234315421
Ref: Testes<26>-Footnote-244315477
Ref: Testes<26>-Footnote-254315533
Ref: Testes<26>-Footnote-264315589
Ref: Testes<26>-Footnote-274315645
Ref: Testes<26>-Footnote-284315701
Ref: Testes<26>-Footnote-294315757
Ref: Testes<26>-Footnote-304315813
Ref: Testes<26>-Footnote-314315869
Ref: Testes<26>-Footnote-324315925
Ref: Testes<26>-Footnote-334315981
Ref: Testes<26>-Footnote-344316037
Ref: Testes<26>-Footnote-354316093
Ref: Testes<26>-Footnote-364316149
Node: Construção<29>4316215
Ref: whatsnew/changelog id2584316328
Ref: 1a904316328
Ref: Construção<29>-Footnote-14321823
Ref: Construção<29>-Footnote-24321878
Ref: Construção<29>-Footnote-34321933
Ref: Construção<29>-Footnote-44321988
Ref: Construção<29>-Footnote-54322043
Ref: Construção<29>-Footnote-64322098
Ref: Construção<29>-Footnote-74322153
Ref: Construção<29>-Footnote-84322208
Ref: Construção<29>-Footnote-94322263
Ref: Construção<29>-Footnote-104322318
Ref: Construção<29>-Footnote-114322374
Ref: Construção<29>-Footnote-124322430
Ref: Construção<29>-Footnote-134322486
Ref: Construção<29>-Footnote-144322542
Ref: Construção<29>-Footnote-154322598
Ref: Construção<29>-Footnote-164322654
Ref: Construção<29>-Footnote-174322697
Ref: Construção<29>-Footnote-184322753
Ref: Construção<29>-Footnote-194322809
Ref: Construção<29>-Footnote-204322865
Ref: Construção<29>-Footnote-214322921
Ref: Construção<29>-Footnote-224322977
Ref: Construção<29>-Footnote-234323033
Ref: Construção<29>-Footnote-244323089
Ref: Construção<29>-Footnote-254323145
Ref: Construção<29>-Footnote-264323201
Ref: Construção<29>-Footnote-274323257
Ref: Construção<29>-Footnote-284323313
Ref: Construção<29>-Footnote-294323369
Ref: Construção<29>-Footnote-304323425
Ref: Construção<29>-Footnote-314323481
Ref: Construção<29>-Footnote-324323524
Ref: Construção<29>-Footnote-334323580
Ref: Construção<29>-Footnote-344323636
Ref: Construção<29>-Footnote-354323692
Ref: Construção<29>-Footnote-364323748
Node: Windows<26>4323814
Ref: whatsnew/changelog id2594323926
Ref: 1a914323926
Ref: Windows<26>-Footnote-14328407
Ref: Windows<26>-Footnote-24328462
Ref: Windows<26>-Footnote-34328517
Ref: Windows<26>-Footnote-44328572
Ref: Windows<26>-Footnote-54328627
Ref: Windows<26>-Footnote-64328682
Ref: Windows<26>-Footnote-74328737
Ref: Windows<26>-Footnote-84328792
Ref: Windows<26>-Footnote-94328847
Ref: Windows<26>-Footnote-104328902
Ref: Windows<26>-Footnote-114328958
Ref: Windows<26>-Footnote-124329014
Ref: Windows<26>-Footnote-134329070
Ref: Windows<26>-Footnote-144329126
Ref: Windows<26>-Footnote-154329182
Ref: Windows<26>-Footnote-164329238
Ref: Windows<26>-Footnote-174329294
Ref: Windows<26>-Footnote-184329350
Ref: Windows<26>-Footnote-194329406
Ref: Windows<26>-Footnote-204329462
Ref: Windows<26>-Footnote-214329518
Ref: Windows<26>-Footnote-224329574
Ref: Windows<26>-Footnote-234329630
Ref: Windows<26>-Footnote-244329686
Ref: Windows<26>-Footnote-254329742
Ref: Windows<26>-Footnote-264329798
Ref: Windows<26>-Footnote-274329864
Ref: Windows<26>-Footnote-284329920
Ref: Windows<26>-Footnote-294329986
Node: macOS<19>4330052
Ref: whatsnew/changelog id2604330156
Ref: 1a934330156
Ref: macOS<19>-Footnote-14330706
Node: IDLE<14>4330761
Ref: whatsnew/changelog id2614330875
Ref: 1a944330875
Ref: IDLE<14>-Footnote-14331788
Ref: IDLE<14>-Footnote-24331843
Ref: IDLE<14>-Footnote-34331898
Ref: IDLE<14>-Footnote-44331953
Ref: IDLE<14>-Footnote-54332008
Ref: IDLE<14>-Footnote-64332063
Ref: IDLE<14>-Footnote-74332118
Node: Ferramentas/Demos<23>4332173
Ref: whatsnew/changelog id2624332287
Ref: 1a954332287
Ref: Ferramentas/Demos<23>-Footnote-14333843
Ref: Ferramentas/Demos<23>-Footnote-24333898
Ref: Ferramentas/Demos<23>-Footnote-34333953
Ref: Ferramentas/Demos<23>-Footnote-44334001
Ref: Ferramentas/Demos<23>-Footnote-54334056
Ref: Ferramentas/Demos<23>-Footnote-64334104
Ref: Ferramentas/Demos<23>-Footnote-74334159
Ref: Ferramentas/Demos<23>-Footnote-84334214
Ref: Ferramentas/Demos<23>-Footnote-94334269
Ref: Ferramentas/Demos<23>-Footnote-104334324
Ref: Ferramentas/Demos<23>-Footnote-114334380
Ref: Ferramentas/Demos<23>-Footnote-124334436
Node: API C<27>4334492
Ref: whatsnew/changelog id2644334589
Ref: 1a964334589
Ref: API C<27>-Footnote-14342136
Ref: API C<27>-Footnote-24342191
Ref: API C<27>-Footnote-34342246
Ref: API C<27>-Footnote-44342301
Ref: API C<27>-Footnote-54342356
Ref: API C<27>-Footnote-64342411
Ref: API C<27>-Footnote-74342466
Ref: API C<27>-Footnote-84342521
Ref: API C<27>-Footnote-94342576
Ref: API C<27>-Footnote-104342631
Ref: API C<27>-Footnote-114342687
Ref: API C<27>-Footnote-124342743
Ref: API C<27>-Footnote-134342799
Ref: API C<27>-Footnote-144342855
Ref: API C<27>-Footnote-154342911
Ref: API C<27>-Footnote-164342967
Ref: API C<27>-Footnote-174343023
Ref: API C<27>-Footnote-184343079
Ref: API C<27>-Footnote-194343135
Ref: API C<27>-Footnote-204343191
Ref: API C<27>-Footnote-214343247
Ref: API C<27>-Footnote-224343303
Ref: API C<27>-Footnote-234343359
Ref: API C<27>-Footnote-244343415
Ref: API C<27>-Footnote-254343471
Ref: API C<27>-Footnote-264343527
Ref: API C<27>-Footnote-274343583
Ref: API C<27>-Footnote-284343639
Ref: API C<27>-Footnote-294343695
Ref: API C<27>-Footnote-304343751
Ref: API C<27>-Footnote-314343807
Ref: API C<27>-Footnote-324343863
Ref: API C<27>-Footnote-334343919
Ref: API C<27>-Footnote-344343975
Node: Python 3 11 0 beta 14344041
Ref: whatsnew/changelog python-3-11-0-beta-14344167
Ref: 1a984344167
Node: Segurança<26>4344581
Ref: whatsnew/changelog id2654344684
Ref: 1a994344684
Ref: Segurança<26>-Footnote-14344986
Node: Núcleo e embutidos<31>4345041
Ref: whatsnew/changelog id2664345167
Ref: 1a9a4345167
Ref: Núcleo e embutidos<31>-Footnote-14354683
Ref: Núcleo e embutidos<31>-Footnote-24354738
Ref: Núcleo e embutidos<31>-Footnote-34354803
Ref: Núcleo e embutidos<31>-Footnote-44354858
Ref: Núcleo e embutidos<31>-Footnote-54354923
Ref: Núcleo e embutidos<31>-Footnote-64354978
Ref: Núcleo e embutidos<31>-Footnote-74355033
Ref: Núcleo e embutidos<31>-Footnote-84355088
Ref: Núcleo e embutidos<31>-Footnote-94355143
Ref: Núcleo e embutidos<31>-Footnote-104355198
Ref: Núcleo e embutidos<31>-Footnote-114355254
Ref: Núcleo e embutidos<31>-Footnote-124355310
Ref: Núcleo e embutidos<31>-Footnote-134355366
Ref: Núcleo e embutidos<31>-Footnote-144355422
Ref: Núcleo e embutidos<31>-Footnote-154355465
Ref: Núcleo e embutidos<31>-Footnote-164355521
Ref: Núcleo e embutidos<31>-Footnote-174355577
Ref: Núcleo e embutidos<31>-Footnote-184355633
Ref: Núcleo e embutidos<31>-Footnote-194355689
Ref: Núcleo e embutidos<31>-Footnote-204355745
Ref: Núcleo e embutidos<31>-Footnote-214355801
Ref: Núcleo e embutidos<31>-Footnote-224355867
Ref: Núcleo e embutidos<31>-Footnote-234355923
Ref: Núcleo e embutidos<31>-Footnote-244355979
Ref: Núcleo e embutidos<31>-Footnote-254356035
Ref: Núcleo e embutidos<31>-Footnote-264356091
Ref: Núcleo e embutidos<31>-Footnote-274356147
Ref: Núcleo e embutidos<31>-Footnote-284356203
Ref: Núcleo e embutidos<31>-Footnote-294356259
Ref: Núcleo e embutidos<31>-Footnote-304356315
Ref: Núcleo e embutidos<31>-Footnote-314356371
Ref: Núcleo e embutidos<31>-Footnote-324356427
Ref: Núcleo e embutidos<31>-Footnote-334356470
Ref: Núcleo e embutidos<31>-Footnote-344356526
Ref: Núcleo e embutidos<31>-Footnote-354356582
Ref: Núcleo e embutidos<31>-Footnote-364356638
Ref: Núcleo e embutidos<31>-Footnote-374356704
Ref: Núcleo e embutidos<31>-Footnote-384356760
Ref: Núcleo e embutidos<31>-Footnote-394356816
Ref: Núcleo e embutidos<31>-Footnote-404356882
Ref: Núcleo e embutidos<31>-Footnote-414356948
Ref: Núcleo e embutidos<31>-Footnote-424357014
Ref: Núcleo e embutidos<31>-Footnote-434357080
Ref: Núcleo e embutidos<31>-Footnote-444357146
Ref: Núcleo e embutidos<31>-Footnote-454357212
Ref: Núcleo e embutidos<31>-Footnote-464357278
Ref: Núcleo e embutidos<31>-Footnote-474357344
Ref: Núcleo e embutidos<31>-Footnote-484357410
Ref: Núcleo e embutidos<31>-Footnote-494357476
Ref: Núcleo e embutidos<31>-Footnote-504357542
Ref: Núcleo e embutidos<31>-Footnote-514357608
Ref: Núcleo e embutidos<31>-Footnote-524357674
Ref: Núcleo e embutidos<31>-Footnote-534357740
Ref: Núcleo e embutidos<31>-Footnote-544357806
Node: Biblioteca<32>4357872
Ref: whatsnew/changelog id2674358002
Ref: 1a9f4358002
Ref: Biblioteca<32>-Footnote-14375567
Ref: Biblioteca<32>-Footnote-24375622
Ref: Biblioteca<32>-Footnote-34375677
Ref: Biblioteca<32>-Footnote-44375732
Ref: Biblioteca<32>-Footnote-54375787
Ref: Biblioteca<32>-Footnote-64375842
Ref: Biblioteca<32>-Footnote-74375897
Ref: Biblioteca<32>-Footnote-84375952
Ref: Biblioteca<32>-Footnote-94376007
Ref: Biblioteca<32>-Footnote-104376062
Ref: Biblioteca<32>-Footnote-114376118
Ref: Biblioteca<32>-Footnote-124376174
Ref: Biblioteca<32>-Footnote-134376230
Ref: Biblioteca<32>-Footnote-144376286
Ref: Biblioteca<32>-Footnote-154376342
Ref: Biblioteca<32>-Footnote-164376398
Ref: Biblioteca<32>-Footnote-174376454
Ref: Biblioteca<32>-Footnote-184376510
Ref: Biblioteca<32>-Footnote-194376566
Ref: Biblioteca<32>-Footnote-204376622
Ref: Biblioteca<32>-Footnote-214376678
Ref: Biblioteca<32>-Footnote-224376734
Ref: Biblioteca<32>-Footnote-234376790
Ref: Biblioteca<32>-Footnote-244376846
Ref: Biblioteca<32>-Footnote-254376912
Ref: Biblioteca<32>-Footnote-264376968
Ref: Biblioteca<32>-Footnote-274377024
Ref: Biblioteca<32>-Footnote-284377067
Ref: Biblioteca<32>-Footnote-294377123
Ref: Biblioteca<32>-Footnote-304377179
Ref: Biblioteca<32>-Footnote-314377235
Ref: Biblioteca<32>-Footnote-324377291
Ref: Biblioteca<32>-Footnote-334377334
Ref: Biblioteca<32>-Footnote-344377390
Ref: Biblioteca<32>-Footnote-354377446
Ref: Biblioteca<32>-Footnote-364377502
Ref: Biblioteca<32>-Footnote-374377558
Ref: Biblioteca<32>-Footnote-384377614
Ref: Biblioteca<32>-Footnote-394377670
Ref: Biblioteca<32>-Footnote-404377726
Ref: Biblioteca<32>-Footnote-414377782
Ref: Biblioteca<32>-Footnote-424377838
Ref: Biblioteca<32>-Footnote-434377894
Ref: Biblioteca<32>-Footnote-444377950
Ref: Biblioteca<32>-Footnote-454378006
Ref: Biblioteca<32>-Footnote-464378062
Ref: Biblioteca<32>-Footnote-474378118
Ref: Biblioteca<32>-Footnote-484378174
Ref: Biblioteca<32>-Footnote-494378230
Ref: Biblioteca<32>-Footnote-504378286
Ref: Biblioteca<32>-Footnote-514378342
Ref: Biblioteca<32>-Footnote-524378398
Ref: Biblioteca<32>-Footnote-534378454
Ref: Biblioteca<32>-Footnote-544378510
Ref: Biblioteca<32>-Footnote-554378566
Ref: Biblioteca<32>-Footnote-564378622
Ref: Biblioteca<32>-Footnote-574378688
Ref: Biblioteca<32>-Footnote-584378744
Ref: Biblioteca<32>-Footnote-594378800
Ref: Biblioteca<32>-Footnote-604378856
Ref: Biblioteca<32>-Footnote-614378912
Ref: Biblioteca<32>-Footnote-624378968
Ref: Biblioteca<32>-Footnote-634379024
Ref: Biblioteca<32>-Footnote-644379080
Ref: Biblioteca<32>-Footnote-654379136
Ref: Biblioteca<32>-Footnote-664379192
Ref: Biblioteca<32>-Footnote-674379235
Ref: Biblioteca<32>-Footnote-684379291
Ref: Biblioteca<32>-Footnote-694379347
Ref: Biblioteca<32>-Footnote-704379403
Ref: Biblioteca<32>-Footnote-714379459
Ref: Biblioteca<32>-Footnote-724379515
Ref: Biblioteca<32>-Footnote-734379571
Ref: Biblioteca<32>-Footnote-744379627
Ref: Biblioteca<32>-Footnote-754379683
Ref: Biblioteca<32>-Footnote-764379749
Ref: Biblioteca<32>-Footnote-774379805
Ref: Biblioteca<32>-Footnote-784379861
Ref: Biblioteca<32>-Footnote-794379917
Ref: Biblioteca<32>-Footnote-804379983
Ref: Biblioteca<32>-Footnote-814380049
Ref: Biblioteca<32>-Footnote-824380092
Ref: Biblioteca<32>-Footnote-834380158
Ref: Biblioteca<32>-Footnote-844380224
Ref: Biblioteca<32>-Footnote-854380290
Ref: Biblioteca<32>-Footnote-864380356
Ref: Biblioteca<32>-Footnote-874380422
Ref: Biblioteca<32>-Footnote-884380488
Ref: Biblioteca<32>-Footnote-894380554
Ref: Biblioteca<32>-Footnote-904380620
Ref: Biblioteca<32>-Footnote-914380686
Ref: Biblioteca<32>-Footnote-924380752
Ref: Biblioteca<32>-Footnote-934380818
Ref: Biblioteca<32>-Footnote-944380884
Ref: Biblioteca<32>-Footnote-954380950
Ref: Biblioteca<32>-Footnote-964381016
Ref: Biblioteca<32>-Footnote-974381082
Ref: Biblioteca<32>-Footnote-984381148
Ref: Biblioteca<32>-Footnote-994381214
Ref: Biblioteca<32>-Footnote-1004381280
Ref: Biblioteca<32>-Footnote-1014381347
Ref: Biblioteca<32>-Footnote-1024381414
Ref: Biblioteca<32>-Footnote-1034381481
Ref: Biblioteca<32>-Footnote-1044381548
Ref: Biblioteca<32>-Footnote-1054381615
Ref: Biblioteca<32>-Footnote-1064381682
Ref: Biblioteca<32>-Footnote-1074381749
Ref: Biblioteca<32>-Footnote-1084381816
Ref: Biblioteca<32>-Footnote-1094381883
Ref: Biblioteca<32>-Footnote-1104381950
Ref: Biblioteca<32>-Footnote-1114382017
Ref: Biblioteca<32>-Footnote-1124382084
Ref: Biblioteca<32>-Footnote-1134382151
Ref: Biblioteca<32>-Footnote-1144382218
Ref: Biblioteca<32>-Footnote-1154382285
Ref: Biblioteca<32>-Footnote-1164382352
Ref: Biblioteca<32>-Footnote-1174382419
Ref: Biblioteca<32>-Footnote-1184382486
Ref: Biblioteca<32>-Footnote-1194382553
Ref: Biblioteca<32>-Footnote-1204382620
Node: Documentação<26>4382687
Ref: whatsnew/changelog id2684382804
Ref: 1aac4382804
Ref: Documentação<26>-Footnote-14384362
Ref: Documentação<26>-Footnote-24384417
Ref: Documentação<26>-Footnote-34384472
Ref: Documentação<26>-Footnote-44384527
Ref: Documentação<26>-Footnote-54384582
Ref: Documentação<26>-Footnote-64384647
Ref: Documentação<26>-Footnote-74384712
Ref: Documentação<26>-Footnote-84384777
Ref: Documentação<26>-Footnote-94384842
Ref: Documentação<26>-Footnote-104384884
Ref: Documentação<26>-Footnote-114384927
Ref: Documentação<26>-Footnote-124384993
Ref: Documentação<26>-Footnote-134385059
Ref: Documentação<26>-Footnote-144385124
Node: Testes<27>4385190
Ref: whatsnew/changelog id2694385309
Ref: 1aaf4385309
Ref: Testes<27>-Footnote-14386653
Ref: Testes<27>-Footnote-24386708
Ref: Testes<27>-Footnote-34386763
Ref: Testes<27>-Footnote-44386818
Ref: Testes<27>-Footnote-54386873
Ref: Testes<27>-Footnote-64386928
Ref: Testes<27>-Footnote-74386993
Ref: Testes<27>-Footnote-84387058
Node: Construção<30>4387123
Ref: whatsnew/changelog id2704387235
Ref: 1ab24387235
Ref: Construção<30>-Footnote-14387918
Ref: Construção<30>-Footnote-24387973
Ref: Construção<30>-Footnote-34388028
Ref: Construção<30>-Footnote-44388093
Node: Windows<27>4388158
Ref: whatsnew/changelog id2714388269
Ref: 1ab34388269
Ref: Windows<27>-Footnote-14388913
Ref: Windows<27>-Footnote-24388978
Ref: Windows<27>-Footnote-34389043
Ref: Windows<27>-Footnote-44389108
Ref: Windows<27>-Footnote-54389173
Node: macOS<20>4389238
Ref: whatsnew/changelog id2724389354
Ref: 1ab44389354
Ref: macOS<20>-Footnote-14389484
Node: Ferramentas/Demos<24>4389549
Ref: whatsnew/changelog id2734389663
Ref: 1ab54389663
Ref: Ferramentas/Demos<24>-Footnote-14390232
Ref: Ferramentas/Demos<24>-Footnote-24390287
Ref: Ferramentas/Demos<24>-Footnote-34390342
Node: API C<28>4390397
Ref: whatsnew/changelog id2744390493
Ref: 1ab64390493
Ref: API C<28>-Footnote-14392644
Ref: API C<28>-Footnote-24392699
Ref: API C<28>-Footnote-34392754
Ref: API C<28>-Footnote-44392809
Ref: API C<28>-Footnote-54392864
Ref: API C<28>-Footnote-64392919
Ref: API C<28>-Footnote-74392961
Ref: API C<28>-Footnote-84393016
Ref: API C<28>-Footnote-94393071
Ref: API C<28>-Footnote-104393136
Ref: API C<28>-Footnote-114393202
Ref: API C<28>-Footnote-124393268
Ref: API C<28>-Footnote-134393334
Node: Python 3 11 0 alpha 74393400
Ref: whatsnew/changelog python-3-11-0-alpha-74393526
Ref: 1ab94393526
Node: Núcleo e embutidos<32>4393912
Ref: whatsnew/changelog id2754394016
Ref: 1aba4394016
Ref: Núcleo e embutidos<32>-Footnote-14399651
Ref: Núcleo e embutidos<32>-Footnote-24399716
Ref: Núcleo e embutidos<32>-Footnote-34399781
Ref: Núcleo e embutidos<32>-Footnote-44399846
Ref: Núcleo e embutidos<32>-Footnote-54399911
Ref: Núcleo e embutidos<32>-Footnote-64399976
Ref: Núcleo e embutidos<32>-Footnote-74400041
Ref: Núcleo e embutidos<32>-Footnote-84400106
Ref: Núcleo e embutidos<32>-Footnote-94400171
Ref: Núcleo e embutidos<32>-Footnote-104400236
Ref: Núcleo e embutidos<32>-Footnote-114400302
Ref: Núcleo e embutidos<32>-Footnote-124400368
Ref: Núcleo e embutidos<32>-Footnote-134400434
Ref: Núcleo e embutidos<32>-Footnote-144400500
Ref: Núcleo e embutidos<32>-Footnote-154400566
Ref: Núcleo e embutidos<32>-Footnote-164400632
Ref: Núcleo e embutidos<32>-Footnote-174400698
Ref: Núcleo e embutidos<32>-Footnote-184400764
Ref: Núcleo e embutidos<32>-Footnote-194400830
Ref: Núcleo e embutidos<32>-Footnote-204400896
Ref: Núcleo e embutidos<32>-Footnote-214400962
Ref: Núcleo e embutidos<32>-Footnote-224401028
Ref: Núcleo e embutidos<32>-Footnote-234401094
Ref: Núcleo e embutidos<32>-Footnote-244401160
Ref: Núcleo e embutidos<32>-Footnote-254401226
Ref: Núcleo e embutidos<32>-Footnote-264401292
Ref: Núcleo e embutidos<32>-Footnote-274401358
Ref: Núcleo e embutidos<32>-Footnote-284401424
Ref: Núcleo e embutidos<32>-Footnote-294401490
Ref: Núcleo e embutidos<32>-Footnote-304401556
Ref: Núcleo e embutidos<32>-Footnote-314401622
Ref: Núcleo e embutidos<32>-Footnote-324401688
Ref: Núcleo e embutidos<32>-Footnote-334401754
Node: Biblioteca<33>4401820
Ref: whatsnew/changelog id2764401951
Ref: 1abe4401951
Ref: Biblioteca<33>-Footnote-14416161
Ref: Biblioteca<33>-Footnote-24416226
Ref: Biblioteca<33>-Footnote-34416291
Ref: Biblioteca<33>-Footnote-44416356
Ref: Biblioteca<33>-Footnote-54416421
Ref: Biblioteca<33>-Footnote-64416486
Ref: Biblioteca<33>-Footnote-74416550
Ref: Biblioteca<33>-Footnote-84416615
Ref: Biblioteca<33>-Footnote-94416680
Ref: Biblioteca<33>-Footnote-104416745
Ref: Biblioteca<33>-Footnote-114416811
Ref: Biblioteca<33>-Footnote-124416877
Ref: Biblioteca<33>-Footnote-134416943
Ref: Biblioteca<33>-Footnote-144417009
Ref: Biblioteca<33>-Footnote-154417052
Ref: Biblioteca<33>-Footnote-164417118
Ref: Biblioteca<33>-Footnote-174417184
Ref: Biblioteca<33>-Footnote-184417250
Ref: Biblioteca<33>-Footnote-194417293
Ref: Biblioteca<33>-Footnote-204417359
Ref: Biblioteca<33>-Footnote-214417425
Ref: Biblioteca<33>-Footnote-224417491
Ref: Biblioteca<33>-Footnote-234417534
Ref: Biblioteca<33>-Footnote-244417600
Ref: Biblioteca<33>-Footnote-254417666
Ref: Biblioteca<33>-Footnote-264417732
Ref: Biblioteca<33>-Footnote-274417798
Ref: Biblioteca<33>-Footnote-284417864
Ref: Biblioteca<33>-Footnote-294417930
Ref: Biblioteca<33>-Footnote-304417997
Ref: Biblioteca<33>-Footnote-314418063
Ref: Biblioteca<33>-Footnote-324418129
Ref: Biblioteca<33>-Footnote-334418195
Ref: Biblioteca<33>-Footnote-344418261
Ref: Biblioteca<33>-Footnote-354418304
Ref: Biblioteca<33>-Footnote-364418370
Ref: Biblioteca<33>-Footnote-374418436
Ref: Biblioteca<33>-Footnote-384418501
Ref: Biblioteca<33>-Footnote-394418567
Ref: Biblioteca<33>-Footnote-404418633
Ref: Biblioteca<33>-Footnote-414418699
Ref: Biblioteca<33>-Footnote-424418765
Ref: Biblioteca<33>-Footnote-434418808
Ref: Biblioteca<33>-Footnote-444418874
Ref: Biblioteca<33>-Footnote-454418940
Ref: Biblioteca<33>-Footnote-464419006
Ref: Biblioteca<33>-Footnote-474419072
Ref: Biblioteca<33>-Footnote-484419138
Ref: Biblioteca<33>-Footnote-494419204
Ref: Biblioteca<33>-Footnote-504419270
Ref: Biblioteca<33>-Footnote-514419336
Ref: Biblioteca<33>-Footnote-524419402
Ref: Biblioteca<33>-Footnote-534419468
Ref: Biblioteca<33>-Footnote-544419534
Ref: Biblioteca<33>-Footnote-554419600
Ref: Biblioteca<33>-Footnote-564419666
Ref: Biblioteca<33>-Footnote-574419732
Ref: Biblioteca<33>-Footnote-584419798
Ref: Biblioteca<33>-Footnote-594419864
Ref: Biblioteca<33>-Footnote-604419907
Ref: Biblioteca<33>-Footnote-614419974
Ref: Biblioteca<33>-Footnote-624420040
Ref: Biblioteca<33>-Footnote-634420106
Ref: Biblioteca<33>-Footnote-644420172
Ref: Biblioteca<33>-Footnote-654420238
Ref: Biblioteca<33>-Footnote-664420304
Ref: Biblioteca<33>-Footnote-674420370
Ref: Biblioteca<33>-Footnote-684420436
Ref: Biblioteca<33>-Footnote-694420502
Ref: Biblioteca<33>-Footnote-704420568
Ref: Biblioteca<33>-Footnote-714420634
Ref: Biblioteca<33>-Footnote-724420700
Ref: Biblioteca<33>-Footnote-734420766
Ref: Biblioteca<33>-Footnote-744420832
Ref: Biblioteca<33>-Footnote-754420898
Ref: Biblioteca<33>-Footnote-764420964
Ref: Biblioteca<33>-Footnote-774421030
Ref: Biblioteca<33>-Footnote-784421096
Ref: Biblioteca<33>-Footnote-794421162
Ref: Biblioteca<33>-Footnote-804421228
Ref: Biblioteca<33>-Footnote-814421294
Ref: Biblioteca<33>-Footnote-824421360
Ref: Biblioteca<33>-Footnote-834421426
Ref: Biblioteca<33>-Footnote-844421469
Ref: Biblioteca<33>-Footnote-854421535
Ref: Biblioteca<33>-Footnote-864421601
Ref: Biblioteca<33>-Footnote-874421667
Ref: Biblioteca<33>-Footnote-884421733
Node: Documentação<27>4421799
Ref: whatsnew/changelog id2774421917
Ref: 1acc4421917
Ref: Documentação<27>-Footnote-14423059
Ref: Documentação<27>-Footnote-24423124
Ref: Documentação<27>-Footnote-34423189
Ref: Documentação<27>-Footnote-44423231
Ref: Documentação<27>-Footnote-54423296
Ref: Documentação<27>-Footnote-64423361
Ref: Documentação<27>-Footnote-74423426
Ref: Documentação<27>-Footnote-84423491
Node: Testes<28>4423556
Ref: whatsnew/changelog id2784423676
Ref: 1acf4423676
Ref: Testes<28>-Footnote-14424647
Ref: Testes<28>-Footnote-24424712
Ref: Testes<28>-Footnote-34424777
Ref: Testes<28>-Footnote-44424842
Ref: Testes<28>-Footnote-54424907
Ref: Testes<28>-Footnote-64424972
Ref: Testes<28>-Footnote-74425037
Ref: Testes<28>-Footnote-84425102
Node: Construção<31>4425144
Ref: whatsnew/changelog id2794425257
Ref: 1ad04425257
Ref: Construção<31>-Footnote-14426557
Ref: Construção<31>-Footnote-24426622
Ref: Construção<31>-Footnote-34426687
Ref: Construção<31>-Footnote-44426752
Ref: Construção<31>-Footnote-54426817
Ref: Construção<31>-Footnote-64426882
Ref: Construção<31>-Footnote-74426947
Ref: Construção<31>-Footnote-84427012
Ref: Construção<31>-Footnote-94427077
Node: Windows<28>4427142
Ref: whatsnew/changelog id2804427254
Ref: 1ad24427254
Ref: Windows<28>-Footnote-14428454
Ref: Windows<28>-Footnote-24428519
Ref: Windows<28>-Footnote-34428575
Ref: Windows<28>-Footnote-44428640
Ref: Windows<28>-Footnote-54428705
Ref: Windows<28>-Footnote-64428747
Ref: Windows<28>-Footnote-74428812
Ref: Windows<28>-Footnote-84428877
Ref: Windows<28>-Footnote-94428942
Ref: Windows<28>-Footnote-104428997
Ref: Windows<28>-Footnote-114429054
Ref: Windows<28>-Footnote-124429120
Node: macOS<21>4429177
Ref: whatsnew/changelog id2814429294
Ref: 1ad34429294
Ref: macOS<21>-Footnote-14429630
Ref: macOS<21>-Footnote-24429695
Node: Ferramentas/Demos<25>4429760
Ref: whatsnew/changelog id2824429875
Ref: 1ad44429875
Ref: Ferramentas/Demos<25>-Footnote-14430092
Node: API C<29>4430157
Ref: whatsnew/changelog id2834430254
Ref: 1ad54430254
Ref: API C<29>-Footnote-14432511
Ref: API C<29>-Footnote-24432576
Ref: API C<29>-Footnote-34432641
Ref: API C<29>-Footnote-44432706
Ref: API C<29>-Footnote-54432771
Ref: API C<29>-Footnote-64432836
Ref: API C<29>-Footnote-74432901
Ref: API C<29>-Footnote-84432966
Node: Python 3 11 0 alpha 64433031
Ref: whatsnew/changelog python-3-11-0-alpha-64433158
Ref: 1ad84433158
Node: Núcleo e embutidos<33>4433498
Ref: whatsnew/changelog id2844433602
Ref: 1ad94433602
Ref: Núcleo e embutidos<33>-Footnote-14440600
Ref: Núcleo e embutidos<33>-Footnote-24440665
Ref: Núcleo e embutidos<33>-Footnote-34440730
Ref: Núcleo e embutidos<33>-Footnote-44440795
Ref: Núcleo e embutidos<33>-Footnote-54440860
Ref: Núcleo e embutidos<33>-Footnote-64440925
Ref: Núcleo e embutidos<33>-Footnote-74440990
Ref: Núcleo e embutidos<33>-Footnote-84441055
Ref: Núcleo e embutidos<33>-Footnote-94441120
Ref: Núcleo e embutidos<33>-Footnote-104441185
Ref: Núcleo e embutidos<33>-Footnote-114441251
Ref: Núcleo e embutidos<33>-Footnote-124441317
Ref: Núcleo e embutidos<33>-Footnote-134441383
Ref: Núcleo e embutidos<33>-Footnote-144441449
Ref: Núcleo e embutidos<33>-Footnote-154441515
Ref: Núcleo e embutidos<33>-Footnote-164441581
Ref: Núcleo e embutidos<33>-Footnote-174441647
Ref: Núcleo e embutidos<33>-Footnote-184441713
Ref: Núcleo e embutidos<33>-Footnote-194441779
Ref: Núcleo e embutidos<33>-Footnote-204441845
Ref: Núcleo e embutidos<33>-Footnote-214441911
Ref: Núcleo e embutidos<33>-Footnote-224441977
Ref: Núcleo e embutidos<33>-Footnote-234442043
Ref: Núcleo e embutidos<33>-Footnote-244442109
Ref: Núcleo e embutidos<33>-Footnote-254442175
Ref: Núcleo e embutidos<33>-Footnote-264442241
Ref: Núcleo e embutidos<33>-Footnote-274442307
Ref: Núcleo e embutidos<33>-Footnote-284442373
Ref: Núcleo e embutidos<33>-Footnote-294442439
Ref: Núcleo e embutidos<33>-Footnote-304442505
Ref: Núcleo e embutidos<33>-Footnote-314442571
Ref: Núcleo e embutidos<33>-Footnote-324442637
Ref: Núcleo e embutidos<33>-Footnote-334442703
Ref: Núcleo e embutidos<33>-Footnote-344442769
Ref: Núcleo e embutidos<33>-Footnote-354442835
Ref: Núcleo e embutidos<33>-Footnote-364442901
Ref: Núcleo e embutidos<33>-Footnote-374442967
Ref: Núcleo e embutidos<33>-Footnote-384443033
Ref: Núcleo e embutidos<33>-Footnote-394443099
Ref: Núcleo e embutidos<33>-Footnote-404443165
Ref: Núcleo e embutidos<33>-Footnote-414443231
Ref: Núcleo e embutidos<33>-Footnote-424443297
Ref: Núcleo e embutidos<33>-Footnote-434443363
Ref: Núcleo e embutidos<33>-Footnote-444443429
Ref: Núcleo e embutidos<33>-Footnote-454443495
Ref: Núcleo e embutidos<33>-Footnote-464443561
Ref: Núcleo e embutidos<33>-Footnote-474443627
Ref: Núcleo e embutidos<33>-Footnote-484443693
Node: Biblioteca<34>4443759
Ref: whatsnew/changelog id2854443890
Ref: 1adf4443890
Ref: Biblioteca<34>-Footnote-14452121
Ref: Biblioteca<34>-Footnote-24452186
Ref: Biblioteca<34>-Footnote-34452251
Ref: Biblioteca<34>-Footnote-44452316
Ref: Biblioteca<34>-Footnote-54452381
Ref: Biblioteca<34>-Footnote-64452446
Ref: Biblioteca<34>-Footnote-74452511
Ref: Biblioteca<34>-Footnote-84452576
Ref: Biblioteca<34>-Footnote-94452641
Ref: Biblioteca<34>-Footnote-104452706
Ref: Biblioteca<34>-Footnote-114452772
Ref: Biblioteca<34>-Footnote-124452838
Ref: Biblioteca<34>-Footnote-134452904
Ref: Biblioteca<34>-Footnote-144452970
Ref: Biblioteca<34>-Footnote-154453036
Ref: Biblioteca<34>-Footnote-164453102
Ref: Biblioteca<34>-Footnote-174453168
Ref: Biblioteca<34>-Footnote-184453234
Ref: Biblioteca<34>-Footnote-194453300
Ref: Biblioteca<34>-Footnote-204453366
Ref: Biblioteca<34>-Footnote-214453432
Ref: Biblioteca<34>-Footnote-224453498
Ref: Biblioteca<34>-Footnote-234453564
Ref: Biblioteca<34>-Footnote-244453630
Ref: Biblioteca<34>-Footnote-254453696
Ref: Biblioteca<34>-Footnote-264453762
Ref: Biblioteca<34>-Footnote-274453828
Ref: Biblioteca<34>-Footnote-284453894
Ref: Biblioteca<34>-Footnote-294453960
Ref: Biblioteca<34>-Footnote-304454026
Ref: Biblioteca<34>-Footnote-314454092
Ref: Biblioteca<34>-Footnote-324454158
Ref: Biblioteca<34>-Footnote-334454224
Ref: Biblioteca<34>-Footnote-344454290
Ref: Biblioteca<34>-Footnote-354454333
Ref: Biblioteca<34>-Footnote-364454399
Ref: Biblioteca<34>-Footnote-374454465
Ref: Biblioteca<34>-Footnote-384454531
Ref: Biblioteca<34>-Footnote-394454597
Ref: Biblioteca<34>-Footnote-404454663
Ref: Biblioteca<34>-Footnote-414454729
Ref: Biblioteca<34>-Footnote-424454795
Ref: Biblioteca<34>-Footnote-434454861
Ref: Biblioteca<34>-Footnote-444454927
Ref: Biblioteca<34>-Footnote-454454993
Ref: Biblioteca<34>-Footnote-464455059
Ref: Biblioteca<34>-Footnote-474455125
Ref: Biblioteca<34>-Footnote-484455191
Node: Documentação<28>4455257
Ref: whatsnew/changelog id2864455375
Ref: 1aeb4455375
Ref: Documentação<28>-Footnote-14455594
Node: Testes<29>4455659
Ref: whatsnew/changelog id2874455779
Ref: 1aec4455779
Ref: Testes<29>-Footnote-14456750
Ref: Testes<29>-Footnote-24456815
Ref: Testes<29>-Footnote-34456880
Ref: Testes<29>-Footnote-44456945
Ref: Testes<29>-Footnote-54457010
Node: Construção<32>4457075
Ref: whatsnew/changelog id2884457188
Ref: 1aed4457188
Ref: Construção<32>-Footnote-14458628
Ref: Construção<32>-Footnote-24458693
Ref: Construção<32>-Footnote-34458758
Ref: Construção<32>-Footnote-44458823
Ref: Construção<32>-Footnote-54458888
Ref: Construção<32>-Footnote-64458953
Ref: Construção<32>-Footnote-74459018
Node: Windows<29>4459083
Ref: whatsnew/changelog id2894459194
Ref: 1aee4459194
Ref: Windows<29>-Footnote-14459852
Ref: Windows<29>-Footnote-24459917
Ref: Windows<29>-Footnote-34459982
Node: IDLE<15>4460047
Ref: whatsnew/changelog id2904460151
Ref: 1aef4460151
Ref: IDLE<15>-Footnote-14460431
Ref: IDLE<15>-Footnote-24460496
Node: API C<30>4460561
Ref: whatsnew/changelog id2914460645
Ref: 1af04460645
Ref: API C<30>-Footnote-14461592
Ref: API C<30>-Footnote-24461657
Ref: API C<30>-Footnote-34461722
Ref: API C<30>-Footnote-44461787
Ref: API C<30>-Footnote-54461852
Node: Python 3 11 0 alpha 54461917
Ref: whatsnew/changelog python-3-11-0-alpha-54462044
Ref: 1af14462044
Node: Núcleo e embutidos<34>4462404
Ref: whatsnew/changelog id2924462508
Ref: 1af24462508
Ref: Núcleo e embutidos<34>-Footnote-14467568
Ref: Núcleo e embutidos<34>-Footnote-24467633
Ref: Núcleo e embutidos<34>-Footnote-34467698
Ref: Núcleo e embutidos<34>-Footnote-44467763
Ref: Núcleo e embutidos<34>-Footnote-54467828
Ref: Núcleo e embutidos<34>-Footnote-64467893
Ref: Núcleo e embutidos<34>-Footnote-74467958
Ref: Núcleo e embutidos<34>-Footnote-84468023
Ref: Núcleo e embutidos<34>-Footnote-94468088
Ref: Núcleo e embutidos<34>-Footnote-104468153
Ref: Núcleo e embutidos<34>-Footnote-114468219
Ref: Núcleo e embutidos<34>-Footnote-124468285
Ref: Núcleo e embutidos<34>-Footnote-134468351
Ref: Núcleo e embutidos<34>-Footnote-144468394
Ref: Núcleo e embutidos<34>-Footnote-154468460
Ref: Núcleo e embutidos<34>-Footnote-164468526
Ref: Núcleo e embutidos<34>-Footnote-174468592
Ref: Núcleo e embutidos<34>-Footnote-184468658
Ref: Núcleo e embutidos<34>-Footnote-194468724
Ref: Núcleo e embutidos<34>-Footnote-204468790
Ref: Núcleo e embutidos<34>-Footnote-214468856
Ref: Núcleo e embutidos<34>-Footnote-224468922
Ref: Núcleo e embutidos<34>-Footnote-234468988
Ref: Núcleo e embutidos<34>-Footnote-244469054
Ref: Núcleo e embutidos<34>-Footnote-254469120
Ref: Núcleo e embutidos<34>-Footnote-264469186
Ref: Núcleo e embutidos<34>-Footnote-274469252
Node: Biblioteca<35>4469318
Ref: whatsnew/changelog id2934469449
Ref: 1af54469449
Ref: Biblioteca<35>-Footnote-14475404
Ref: Biblioteca<35>-Footnote-24475469
Ref: Biblioteca<35>-Footnote-34475534
Ref: Biblioteca<35>-Footnote-44475599
Ref: Biblioteca<35>-Footnote-54475664
Ref: Biblioteca<35>-Footnote-64475729
Ref: Biblioteca<35>-Footnote-74475794
Ref: Biblioteca<35>-Footnote-84475859
Ref: Biblioteca<35>-Footnote-94475924
Ref: Biblioteca<35>-Footnote-104475989
Ref: Biblioteca<35>-Footnote-114476055
Ref: Biblioteca<35>-Footnote-124476121
Ref: Biblioteca<35>-Footnote-134476187
Ref: Biblioteca<35>-Footnote-144476253
Ref: Biblioteca<35>-Footnote-154476319
Ref: Biblioteca<35>-Footnote-164476385
Ref: Biblioteca<35>-Footnote-174476451
Ref: Biblioteca<35>-Footnote-184476517
Ref: Biblioteca<35>-Footnote-194476583
Ref: Biblioteca<35>-Footnote-204476649
Ref: Biblioteca<35>-Footnote-214476715
Ref: Biblioteca<35>-Footnote-224476781
Ref: Biblioteca<35>-Footnote-234476847
Ref: Biblioteca<35>-Footnote-244476913
Ref: Biblioteca<35>-Footnote-254476979
Ref: Biblioteca<35>-Footnote-264477045
Ref: Biblioteca<35>-Footnote-274477111
Ref: Biblioteca<35>-Footnote-284477177
Ref: Biblioteca<35>-Footnote-294477243
Ref: Biblioteca<35>-Footnote-304477309
Ref: Biblioteca<35>-Footnote-314477375
Ref: Biblioteca<35>-Footnote-324477441
Ref: Biblioteca<35>-Footnote-334477507
Ref: Biblioteca<35>-Footnote-344477573
Ref: Biblioteca<35>-Footnote-354477639
Ref: Biblioteca<35>-Footnote-364477705
Ref: Biblioteca<35>-Footnote-374477771
Node: Documentação<29>4477837
Ref: whatsnew/changelog id2944477955
Ref: 1afb4477955
Ref: Documentação<29>-Footnote-14478144
Node: Testes<30>4478209
Ref: whatsnew/changelog id2954478329
Ref: 1afc4478329
Ref: Testes<30>-Footnote-14480480
Ref: Testes<30>-Footnote-24480545
Ref: Testes<30>-Footnote-34480610
Ref: Testes<30>-Footnote-44480675
Ref: Testes<30>-Footnote-54480740
Ref: Testes<30>-Footnote-64480805
Ref: Testes<30>-Footnote-74480870
Ref: Testes<30>-Footnote-84480935
Ref: Testes<30>-Footnote-94481000
Ref: Testes<30>-Footnote-104481065
Ref: Testes<30>-Footnote-114481131
Node: Construção<33>4481197
Ref: whatsnew/changelog id2964481310
Ref: 1afd4481310
Ref: Construção<33>-Footnote-14483056
Ref: Construção<33>-Footnote-24483121
Ref: Construção<33>-Footnote-34483186
Ref: Construção<33>-Footnote-44483251
Ref: Construção<33>-Footnote-54483316
Ref: Construção<33>-Footnote-64483381
Ref: Construção<33>-Footnote-74483446
Ref: Construção<33>-Footnote-84483511
Ref: Construção<33>-Footnote-94483576
Ref: Construção<33>-Footnote-104483641
Node: Windows<30>4483707
Ref: whatsnew/changelog id2974483819
Ref: 1afe4483819
Ref: Windows<30>-Footnote-14484355
Ref: Windows<30>-Footnote-24484420
Ref: Windows<30>-Footnote-34484485
Node: macOS<22>4484550
Ref: whatsnew/changelog id2984484654
Ref: 1aff4484654
Ref: macOS<22>-Footnote-14484784
Node: IDLE<16>4484849
Ref: whatsnew/changelog id2994484951
Ref: 1b004484951
Ref: IDLE<16>-Footnote-14485370
Node: API C<31>4485435
Ref: whatsnew/changelog id3004485519
Ref: 1b014485519
Ref: API C<31>-Footnote-14486410
Ref: API C<31>-Footnote-24486475
Ref: API C<31>-Footnote-34486540
Ref: API C<31>-Footnote-44486605
Ref: API C<31>-Footnote-54486670
Node: Python 3 11 0 alpha 44486735
Ref: whatsnew/changelog python-3-11-0-alpha-44486862
Ref: 1b024486862
Node: Núcleo e embutidos<35>4487204
Ref: whatsnew/changelog id3014487308
Ref: 1b034487308
Ref: Núcleo e embutidos<35>-Footnote-14494109
Ref: Núcleo e embutidos<35>-Footnote-24494174
Ref: Núcleo e embutidos<35>-Footnote-34494239
Ref: Núcleo e embutidos<35>-Footnote-44494304
Ref: Núcleo e embutidos<35>-Footnote-54494369
Ref: Núcleo e embutidos<35>-Footnote-64494434
Ref: Núcleo e embutidos<35>-Footnote-74494499
Ref: Núcleo e embutidos<35>-Footnote-84494564
Ref: Núcleo e embutidos<35>-Footnote-94494629
Ref: Núcleo e embutidos<35>-Footnote-104494694
Ref: Núcleo e embutidos<35>-Footnote-114494760
Ref: Núcleo e embutidos<35>-Footnote-124494826
Ref: Núcleo e embutidos<35>-Footnote-134494892
Ref: Núcleo e embutidos<35>-Footnote-144494958
Ref: Núcleo e embutidos<35>-Footnote-154495024
Ref: Núcleo e embutidos<35>-Footnote-164495090
Ref: Núcleo e embutidos<35>-Footnote-174495156
Ref: Núcleo e embutidos<35>-Footnote-184495222
Ref: Núcleo e embutidos<35>-Footnote-194495288
Ref: Núcleo e embutidos<35>-Footnote-204495354
Ref: Núcleo e embutidos<35>-Footnote-214495420
Ref: Núcleo e embutidos<35>-Footnote-224495486
Ref: Núcleo e embutidos<35>-Footnote-234495552
Ref: Núcleo e embutidos<35>-Footnote-244495618
Ref: Núcleo e embutidos<35>-Footnote-254495684
Ref: Núcleo e embutidos<35>-Footnote-264495750
Ref: Núcleo e embutidos<35>-Footnote-274495816
Ref: Núcleo e embutidos<35>-Footnote-284495882
Ref: Núcleo e embutidos<35>-Footnote-294495948
Ref: Núcleo e embutidos<35>-Footnote-304496014
Ref: Núcleo e embutidos<35>-Footnote-314496080
Ref: Núcleo e embutidos<35>-Footnote-324496146
Ref: Núcleo e embutidos<35>-Footnote-334496212
Ref: Núcleo e embutidos<35>-Footnote-344496278
Ref: Núcleo e embutidos<35>-Footnote-354496344
Ref: Núcleo e embutidos<35>-Footnote-364496410
Ref: Núcleo e embutidos<35>-Footnote-374496476
Ref: Núcleo e embutidos<35>-Footnote-384496542
Ref: Núcleo e embutidos<35>-Footnote-394496608
Ref: Núcleo e embutidos<35>-Footnote-404496651
Ref: Núcleo e embutidos<35>-Footnote-414496717
Node: Biblioteca<36>4496783
Ref: whatsnew/changelog id3024496914
Ref: 1b044496914
Ref: Biblioteca<36>-Footnote-14504202
Ref: Biblioteca<36>-Footnote-24504267
Ref: Biblioteca<36>-Footnote-34504332
Ref: Biblioteca<36>-Footnote-44504397
Ref: Biblioteca<36>-Footnote-54504462
Ref: Biblioteca<36>-Footnote-64504527
Ref: Biblioteca<36>-Footnote-74504592
Ref: Biblioteca<36>-Footnote-84504657
Ref: Biblioteca<36>-Footnote-94504722
Ref: Biblioteca<36>-Footnote-104504787
Ref: Biblioteca<36>-Footnote-114504853
Ref: Biblioteca<36>-Footnote-124504919
Ref: Biblioteca<36>-Footnote-134504985
Ref: Biblioteca<36>-Footnote-144505051
Ref: Biblioteca<36>-Footnote-154505117
Ref: Biblioteca<36>-Footnote-164505183
Ref: Biblioteca<36>-Footnote-174505249
Ref: Biblioteca<36>-Footnote-184505315
Ref: Biblioteca<36>-Footnote-194505381
Ref: Biblioteca<36>-Footnote-204505447
Ref: Biblioteca<36>-Footnote-214505513
Ref: Biblioteca<36>-Footnote-224505579
Ref: Biblioteca<36>-Footnote-234505645
Ref: Biblioteca<36>-Footnote-244505711
Ref: Biblioteca<36>-Footnote-254505777
Ref: Biblioteca<36>-Footnote-264505843
Ref: Biblioteca<36>-Footnote-274505909
Ref: Biblioteca<36>-Footnote-284505975
Ref: Biblioteca<36>-Footnote-294506041
Ref: Biblioteca<36>-Footnote-304506107
Ref: Biblioteca<36>-Footnote-314506173
Ref: Biblioteca<36>-Footnote-324506239
Ref: Biblioteca<36>-Footnote-334506305
Ref: Biblioteca<36>-Footnote-344506371
Ref: Biblioteca<36>-Footnote-354506437
Ref: Biblioteca<36>-Footnote-364506503
Ref: Biblioteca<36>-Footnote-374506569
Ref: Biblioteca<36>-Footnote-384506635
Ref: Biblioteca<36>-Footnote-394506701
Ref: Biblioteca<36>-Footnote-404506767
Ref: Biblioteca<36>-Footnote-414506833
Ref: Biblioteca<36>-Footnote-424506899
Ref: Biblioteca<36>-Footnote-434506965
Ref: Biblioteca<36>-Footnote-444507031
Node: Documentação<30>4507097
Ref: whatsnew/changelog id3034507215
Ref: 1b094507215
Ref: Documentação<30>-Footnote-14507712
Ref: Documentação<30>-Footnote-24507777
Ref: Documentação<30>-Footnote-34507842
Ref: Documentação<30>-Footnote-44507907
Node: Testes<31>4507972
Ref: whatsnew/changelog id3044508092
Ref: 1b0c4508092
Ref: Testes<31>-Footnote-14509022
Ref: Testes<31>-Footnote-24509087
Ref: Testes<31>-Footnote-34509152
Ref: Testes<31>-Footnote-44509217
Ref: Testes<31>-Footnote-54509282
Ref: Testes<31>-Footnote-64509347
Ref: Testes<31>-Footnote-74509412
Ref: Testes<31>-Footnote-84509477
Node: Construção<34>4509542
Ref: whatsnew/changelog id3054509655
Ref: 1b0d4509655
Ref: Construção<34>-Footnote-14511748
Ref: Construção<34>-Footnote-24511813
Ref: Construção<34>-Footnote-34511878
Ref: Construção<34>-Footnote-44511943
Ref: Construção<34>-Footnote-54512008
Ref: Construção<34>-Footnote-64512073
Ref: Construção<34>-Footnote-74512138
Ref: Construção<34>-Footnote-84512203
Ref: Construção<34>-Footnote-94512268
Ref: Construção<34>-Footnote-104512333
Ref: Construção<34>-Footnote-114512399
Ref: Construção<34>-Footnote-124512465
Node: Windows<31>4512531
Ref: whatsnew/changelog id3064512643
Ref: 1b0e4512643
Ref: Windows<31>-Footnote-14512862
Node: macOS<23>4512927
Ref: whatsnew/changelog id3074513032
Ref: 1b0f4513032
Ref: macOS<23>-Footnote-14513270
Node: API C<32>4513335
Ref: whatsnew/changelog id3084513420
Ref: 1b104513420
Ref: API C<32>-Footnote-14514696
Ref: API C<32>-Footnote-24514761
Ref: API C<32>-Footnote-34514826
Ref: API C<32>-Footnote-44514891
Ref: API C<32>-Footnote-54514956
Node: Python 3 11 0 alpha 34515021
Ref: whatsnew/changelog python-3-11-0-alpha-34515148
Ref: 1b124515148
Node: Núcleo e embutidos<36>4515490
Ref: whatsnew/changelog id3094515594
Ref: 1b134515594
Ref: Núcleo e embutidos<36>-Footnote-14521221
Ref: Núcleo e embutidos<36>-Footnote-24521286
Ref: Núcleo e embutidos<36>-Footnote-34521351
Ref: Núcleo e embutidos<36>-Footnote-44521416
Ref: Núcleo e embutidos<36>-Footnote-54521481
Ref: Núcleo e embutidos<36>-Footnote-64521546
Ref: Núcleo e embutidos<36>-Footnote-74521611
Ref: Núcleo e embutidos<36>-Footnote-84521676
Ref: Núcleo e embutidos<36>-Footnote-94521741
Ref: Núcleo e embutidos<36>-Footnote-104521806
Ref: Núcleo e embutidos<36>-Footnote-114521872
Ref: Núcleo e embutidos<36>-Footnote-124521938
Ref: Núcleo e embutidos<36>-Footnote-134522004
Ref: Núcleo e embutidos<36>-Footnote-144522070
Ref: Núcleo e embutidos<36>-Footnote-154522136
Ref: Núcleo e embutidos<36>-Footnote-164522202
Ref: Núcleo e embutidos<36>-Footnote-174522268
Ref: Núcleo e embutidos<36>-Footnote-184522334
Ref: Núcleo e embutidos<36>-Footnote-194522400
Ref: Núcleo e embutidos<36>-Footnote-204522466
Ref: Núcleo e embutidos<36>-Footnote-214522532
Ref: Núcleo e embutidos<36>-Footnote-224522598
Ref: Núcleo e embutidos<36>-Footnote-234522641
Ref: Núcleo e embutidos<36>-Footnote-244522707
Ref: Núcleo e embutidos<36>-Footnote-254522773
Ref: Núcleo e embutidos<36>-Footnote-264522839
Ref: Núcleo e embutidos<36>-Footnote-274522905
Ref: Núcleo e embutidos<36>-Footnote-284522971
Ref: Núcleo e embutidos<36>-Footnote-294523037
Ref: Núcleo e embutidos<36>-Footnote-304523103
Ref: Núcleo e embutidos<36>-Footnote-314523169
Ref: Núcleo e embutidos<36>-Footnote-324523235
Ref: Núcleo e embutidos<36>-Footnote-334523301
Ref: Núcleo e embutidos<36>-Footnote-344523367
Node: Biblioteca<37>4523433
Ref: whatsnew/changelog id3104523564
Ref: 1b154523564
Ref: Biblioteca<37>-Footnote-14529544
Ref: Biblioteca<37>-Footnote-24529609
Ref: Biblioteca<37>-Footnote-34529674
Ref: Biblioteca<37>-Footnote-44529739
Ref: Biblioteca<37>-Footnote-54529804
Ref: Biblioteca<37>-Footnote-64529869
Ref: Biblioteca<37>-Footnote-74529934
Ref: Biblioteca<37>-Footnote-84529999
Ref: Biblioteca<37>-Footnote-94530064
Ref: Biblioteca<37>-Footnote-104530129
Ref: Biblioteca<37>-Footnote-114530195
Ref: Biblioteca<37>-Footnote-124530261
Ref: Biblioteca<37>-Footnote-134530327
Ref: Biblioteca<37>-Footnote-144530393
Ref: Biblioteca<37>-Footnote-154530459
Ref: Biblioteca<37>-Footnote-164530525
Ref: Biblioteca<37>-Footnote-174530591
Ref: Biblioteca<37>-Footnote-184530657
Ref: Biblioteca<37>-Footnote-194530723
Ref: Biblioteca<37>-Footnote-204530789
Ref: Biblioteca<37>-Footnote-214530855
Ref: Biblioteca<37>-Footnote-224530921
Ref: Biblioteca<37>-Footnote-234530987
Ref: Biblioteca<37>-Footnote-244531053
Ref: Biblioteca<37>-Footnote-254531119
Ref: Biblioteca<37>-Footnote-264531185
Ref: Biblioteca<37>-Footnote-274531251
Ref: Biblioteca<37>-Footnote-284531317
Ref: Biblioteca<37>-Footnote-294531383
Ref: Biblioteca<37>-Footnote-304531449
Ref: Biblioteca<37>-Footnote-314531515
Ref: Biblioteca<37>-Footnote-324531558
Ref: Biblioteca<37>-Footnote-334531624
Ref: Biblioteca<37>-Footnote-344531690
Ref: Biblioteca<37>-Footnote-354531756
Ref: Biblioteca<37>-Footnote-364531822
Node: Documentação<31>4531888
Ref: whatsnew/changelog id3114532006
Ref: 1b174532006
Ref: Documentação<31>-Footnote-14533314
Ref: Documentação<31>-Footnote-24533379
Ref: Documentação<31>-Footnote-34533444
Ref: Documentação<31>-Footnote-44533509
Ref: Documentação<31>-Footnote-54533574
Ref: Documentação<31>-Footnote-64533639
Ref: Documentação<31>-Footnote-74533704
Ref: Documentação<31>-Footnote-84533769
Ref: Documentação<31>-Footnote-94533834
Node: Testes<32>4533899
Ref: whatsnew/changelog id3124534019
Ref: 1b184534019
Ref: Testes<32>-Footnote-14534832
Ref: Testes<32>-Footnote-24534897
Ref: Testes<32>-Footnote-34534962
Ref: Testes<32>-Footnote-44535027
Ref: Testes<32>-Footnote-54535092
Ref: Testes<32>-Footnote-64535157
Node: Construção<35>4535222
Ref: whatsnew/changelog id3134535335
Ref: 1b194535335
Ref: Construção<35>-Footnote-14541147
Ref: Construção<35>-Footnote-24541212
Ref: Construção<35>-Footnote-34541277
Ref: Construção<35>-Footnote-44541342
Ref: Construção<35>-Footnote-54541407
Ref: Construção<35>-Footnote-64541472
Ref: Construção<35>-Footnote-74541537
Ref: Construção<35>-Footnote-84541602
Ref: Construção<35>-Footnote-94541667
Ref: Construção<35>-Footnote-104541732
Ref: Construção<35>-Footnote-114541798
Ref: Construção<35>-Footnote-124541864
Ref: Construção<35>-Footnote-134541930
Ref: Construção<35>-Footnote-144541996
Ref: Construção<35>-Footnote-154542062
Ref: Construção<35>-Footnote-164542128
Ref: Construção<35>-Footnote-174542194
Ref: Construção<35>-Footnote-184542260
Ref: Construção<35>-Footnote-194542326
Ref: Construção<35>-Footnote-204542392
Ref: Construção<35>-Footnote-214542458
Ref: Construção<35>-Footnote-224542524
Ref: Construção<35>-Footnote-234542590
Ref: Construção<35>-Footnote-244542656
Ref: Construção<35>-Footnote-254542722
Ref: Construção<35>-Footnote-264542788
Ref: Construção<35>-Footnote-274542854
Ref: Construção<35>-Footnote-284542920
Ref: Construção<35>-Footnote-294542986
Ref: Construção<35>-Footnote-304543052
Ref: Construção<35>-Footnote-314543118
Ref: Construção<35>-Footnote-324543184
Ref: Construção<35>-Footnote-334543250
Node: Windows<32>4543316
Ref: whatsnew/changelog id3144543428
Ref: 1b1a4543428
Ref: Windows<32>-Footnote-14544619
Ref: Windows<32>-Footnote-24544684
Ref: Windows<32>-Footnote-34544749
Ref: Windows<32>-Footnote-44544814
Ref: Windows<32>-Footnote-54544879
Ref: Windows<32>-Footnote-64544944
Node: macOS<24>4545009
Ref: whatsnew/changelog id3154545114
Ref: 1b1b4545114
Ref: macOS<24>-Footnote-14545264
Node: API C<33>4545329
Ref: whatsnew/changelog id3164545414
Ref: 1b1c4545414
Ref: API C<33>-Footnote-14545619
Node: Python 3 11 0 alpha 24545684
Ref: whatsnew/changelog python-3-11-0-alpha-24545811
Ref: 1b1d4545811
Node: Núcleo e embutidos<37>4546171
Ref: whatsnew/changelog id3174546275
Ref: 1b1e4546275
Ref: Núcleo e embutidos<37>-Footnote-14551658
Ref: Núcleo e embutidos<37>-Footnote-24551723
Ref: Núcleo e embutidos<37>-Footnote-34551788
Ref: Núcleo e embutidos<37>-Footnote-44551853
Ref: Núcleo e embutidos<37>-Footnote-54551918
Ref: Núcleo e embutidos<37>-Footnote-64551983
Ref: Núcleo e embutidos<37>-Footnote-74552048
Ref: Núcleo e embutidos<37>-Footnote-84552113
Ref: Núcleo e embutidos<37>-Footnote-94552178
Ref: Núcleo e embutidos<37>-Footnote-104552243
Ref: Núcleo e embutidos<37>-Footnote-114552309
Ref: Núcleo e embutidos<37>-Footnote-124552375
Ref: Núcleo e embutidos<37>-Footnote-134552441
Ref: Núcleo e embutidos<37>-Footnote-144552507
Ref: Núcleo e embutidos<37>-Footnote-154552573
Ref: Núcleo e embutidos<37>-Footnote-164552639
Ref: Núcleo e embutidos<37>-Footnote-174552705
Ref: Núcleo e embutidos<37>-Footnote-184552771
Ref: Núcleo e embutidos<37>-Footnote-194552837
Ref: Núcleo e embutidos<37>-Footnote-204552903
Ref: Núcleo e embutidos<37>-Footnote-214552946
Ref: Núcleo e embutidos<37>-Footnote-224553012
Ref: Núcleo e embutidos<37>-Footnote-234553078
Ref: Núcleo e embutidos<37>-Footnote-244553144
Ref: Núcleo e embutidos<37>-Footnote-254553210
Ref: Núcleo e embutidos<37>-Footnote-264553276
Node: Biblioteca<38>4553319
Ref: whatsnew/changelog id3184553450
Ref: 1b204553450
Ref: Biblioteca<38>-Footnote-14561027
Ref: Biblioteca<38>-Footnote-24561092
Ref: Biblioteca<38>-Footnote-34561157
Ref: Biblioteca<38>-Footnote-44561222
Ref: Biblioteca<38>-Footnote-54561287
Ref: Biblioteca<38>-Footnote-64561352
Ref: Biblioteca<38>-Footnote-74561417
Ref: Biblioteca<38>-Footnote-84561482
Ref: Biblioteca<38>-Footnote-94561547
Ref: Biblioteca<38>-Footnote-104561612
Ref: Biblioteca<38>-Footnote-114561678
Ref: Biblioteca<38>-Footnote-124561744
Ref: Biblioteca<38>-Footnote-134561810
Ref: Biblioteca<38>-Footnote-144561876
Ref: Biblioteca<38>-Footnote-154561942
Ref: Biblioteca<38>-Footnote-164562008
Ref: Biblioteca<38>-Footnote-174562074
Ref: Biblioteca<38>-Footnote-184562140
Ref: Biblioteca<38>-Footnote-194562206
Ref: Biblioteca<38>-Footnote-204562272
Ref: Biblioteca<38>-Footnote-214562338
Ref: Biblioteca<38>-Footnote-224562404
Ref: Biblioteca<38>-Footnote-234562470
Ref: Biblioteca<38>-Footnote-244562536
Ref: Biblioteca<38>-Footnote-254562602
Ref: Biblioteca<38>-Footnote-264562668
Ref: Biblioteca<38>-Footnote-274562734
Ref: Biblioteca<38>-Footnote-284562800
Ref: Biblioteca<38>-Footnote-294562866
Ref: Biblioteca<38>-Footnote-304562932
Ref: Biblioteca<38>-Footnote-314562998
Ref: Biblioteca<38>-Footnote-324563064
Ref: Biblioteca<38>-Footnote-334563130
Ref: Biblioteca<38>-Footnote-344563196
Ref: Biblioteca<38>-Footnote-354563262
Ref: Biblioteca<38>-Footnote-364563328
Ref: Biblioteca<38>-Footnote-374563394
Ref: Biblioteca<38>-Footnote-384563460
Ref: Biblioteca<38>-Footnote-394563526
Ref: Biblioteca<38>-Footnote-404563592
Ref: Biblioteca<38>-Footnote-414563658
Ref: Biblioteca<38>-Footnote-424563724
Ref: Biblioteca<38>-Footnote-434563790
Ref: Biblioteca<38>-Footnote-444563850
Ref: Biblioteca<38>-Footnote-454563916
Node: Documentação<32>4563982
Ref: whatsnew/changelog id3194564100
Ref: 1b254564100
Ref: Documentação<32>-Footnote-14565596
Ref: Documentação<32>-Footnote-24565661
Ref: Documentação<32>-Footnote-34565726
Ref: Documentação<32>-Footnote-44565791
Ref: Documentação<32>-Footnote-54565856
Ref: Documentação<32>-Footnote-64565921
Ref: Documentação<32>-Footnote-74565986
Ref: Documentação<32>-Footnote-84566051
Ref: Documentação<32>-Footnote-94566116
Ref: Documentação<32>-Footnote-104566158
Ref: Documentação<32>-Footnote-114566224
Node: Testes<33>4566290
Ref: whatsnew/changelog id3204566410
Ref: 1b294566410
Ref: Testes<33>-Footnote-14568686
Ref: Testes<33>-Footnote-24568751
Ref: Testes<33>-Footnote-34568816
Ref: Testes<33>-Footnote-44568881
Ref: Testes<33>-Footnote-54568946
Ref: Testes<33>-Footnote-64569011
Ref: Testes<33>-Footnote-74569076
Ref: Testes<33>-Footnote-84569141
Ref: Testes<33>-Footnote-94569206
Ref: Testes<33>-Footnote-104569271
Ref: Testes<33>-Footnote-114569337
Ref: Testes<33>-Footnote-124569403
Ref: Testes<33>-Footnote-134569469
Node: Construção<36>4569535
Ref: whatsnew/changelog id3214569648
Ref: 1b2a4569648
Ref: Construção<36>-Footnote-14572337
Ref: Construção<36>-Footnote-24572402
Ref: Construção<36>-Footnote-34572467
Ref: Construção<36>-Footnote-44572532
Ref: Construção<36>-Footnote-54572597
Ref: Construção<36>-Footnote-64572662
Ref: Construção<36>-Footnote-74572727
Ref: Construção<36>-Footnote-84572792
Ref: Construção<36>-Footnote-94572857
Ref: Construção<36>-Footnote-104572922
Ref: Construção<36>-Footnote-114572988
Ref: Construção<36>-Footnote-124573054
Ref: Construção<36>-Footnote-134573120
Ref: Construção<36>-Footnote-144573186
Ref: Construção<36>-Footnote-154573252
Node: Windows<33>4573318
Ref: whatsnew/changelog id3224573430
Ref: 1b2b4573430
Ref: Windows<33>-Footnote-14573985
Ref: Windows<33>-Footnote-24574050
Ref: Windows<33>-Footnote-34574115
Node: macOS<25>4574180
Ref: whatsnew/changelog id3234574284
Ref: 1b2c4574284
Ref: macOS<25>-Footnote-14574545
Node: IDLE<17>4574610
Ref: whatsnew/changelog id3244574712
Ref: 1b2d4574712
Ref: IDLE<17>-Footnote-14574873
Node: API C<34>4574938
Ref: whatsnew/changelog id3254575022
Ref: 1b2e4575022
Ref: API C<34>-Footnote-14578752
Ref: API C<34>-Footnote-24578817
Ref: API C<34>-Footnote-34578882
Ref: API C<34>-Footnote-44578947
Ref: API C<34>-Footnote-54579012
Ref: API C<34>-Footnote-64579077
Ref: API C<34>-Footnote-74579142
Ref: API C<34>-Footnote-84579207
Ref: API C<34>-Footnote-94579272
Ref: API C<34>-Footnote-104579337
Ref: API C<34>-Footnote-114579403
Ref: API C<34>-Footnote-124579469
Ref: API C<34>-Footnote-134579535
Ref: API C<34>-Footnote-144579601
Node: Python 3 11 0 alpha 14579667
Ref: whatsnew/changelog python-3-11-0-alpha-14579793
Ref: 1b2f4579793
Node: Segurança<27>4580227
Ref: whatsnew/changelog id3264580331
Ref: 1b304580331
Ref: Segurança<27>-Footnote-14581693
Ref: Segurança<27>-Footnote-24581758
Ref: Segurança<27>-Footnote-34581823
Ref: Segurança<27>-Footnote-44581888
Ref: Segurança<27>-Footnote-54581953
Ref: Segurança<27>-Footnote-64582008
Ref: Segurança<27>-Footnote-74582073
Node: Núcleo e embutidos<38>4582138
Ref: whatsnew/changelog id3274582265
Ref: 1b324582265
Ref: Núcleo e embutidos<38>-Footnote-14606073
Ref: Núcleo e embutidos<38>-Footnote-24606138
Ref: Núcleo e embutidos<38>-Footnote-34606203
Ref: Núcleo e embutidos<38>-Footnote-44606268
Ref: Núcleo e embutidos<38>-Footnote-54606333
Ref: Núcleo e embutidos<38>-Footnote-64606398
Ref: Núcleo e embutidos<38>-Footnote-74606463
Ref: Núcleo e embutidos<38>-Footnote-84606528
Ref: Núcleo e embutidos<38>-Footnote-94606593
Ref: Núcleo e embutidos<38>-Footnote-104606658
Ref: Núcleo e embutidos<38>-Footnote-114606724
Ref: Núcleo e embutidos<38>-Footnote-124606790
Ref: Núcleo e embutidos<38>-Footnote-134606856
Ref: Núcleo e embutidos<38>-Footnote-144606924
Ref: Núcleo e embutidos<38>-Footnote-154606990
Ref: Núcleo e embutidos<38>-Footnote-164607056
Ref: Núcleo e embutidos<38>-Footnote-174607122
Ref: Núcleo e embutidos<38>-Footnote-184607188
Ref: Núcleo e embutidos<38>-Footnote-194607254
Ref: Núcleo e embutidos<38>-Footnote-204607320
Ref: Núcleo e embutidos<38>-Footnote-214607386
Ref: Núcleo e embutidos<38>-Footnote-224607452
Ref: Núcleo e embutidos<38>-Footnote-234607518
Ref: Núcleo e embutidos<38>-Footnote-244607584
Ref: Núcleo e embutidos<38>-Footnote-254607650
Ref: Núcleo e embutidos<38>-Footnote-264607716
Ref: Núcleo e embutidos<38>-Footnote-274607782
Ref: Núcleo e embutidos<38>-Footnote-284607848
Ref: Núcleo e embutidos<38>-Footnote-294607914
Ref: Núcleo e embutidos<38>-Footnote-304607980
Ref: Núcleo e embutidos<38>-Footnote-314608046
Ref: Núcleo e embutidos<38>-Footnote-324608112
Ref: Núcleo e embutidos<38>-Footnote-334608178
Ref: Núcleo e embutidos<38>-Footnote-344608244
Ref: Núcleo e embutidos<38>-Footnote-354608310
Ref: Núcleo e embutidos<38>-Footnote-364608376
Ref: Núcleo e embutidos<38>-Footnote-374608442
Ref: Núcleo e embutidos<38>-Footnote-384608508
Ref: Núcleo e embutidos<38>-Footnote-394608574
Ref: Núcleo e embutidos<38>-Footnote-404608640
Ref: Núcleo e embutidos<38>-Footnote-414608706
Ref: Núcleo e embutidos<38>-Footnote-424608772
Ref: Núcleo e embutidos<38>-Footnote-434608838
Ref: Núcleo e embutidos<38>-Footnote-444608904
Ref: Núcleo e embutidos<38>-Footnote-454608970
Ref: Núcleo e embutidos<38>-Footnote-464609036
Ref: Núcleo e embutidos<38>-Footnote-474609102
Ref: Núcleo e embutidos<38>-Footnote-484609168
Ref: Núcleo e embutidos<38>-Footnote-494609234
Ref: Núcleo e embutidos<38>-Footnote-504609300
Ref: Núcleo e embutidos<38>-Footnote-514609366
Ref: Núcleo e embutidos<38>-Footnote-524609432
Ref: Núcleo e embutidos<38>-Footnote-534609498
Ref: Núcleo e embutidos<38>-Footnote-544609564
Ref: Núcleo e embutidos<38>-Footnote-554609630
Ref: Núcleo e embutidos<38>-Footnote-564609696
Ref: Núcleo e embutidos<38>-Footnote-574609762
Ref: Núcleo e embutidos<38>-Footnote-584609828
Ref: Núcleo e embutidos<38>-Footnote-594609894
Ref: Núcleo e embutidos<38>-Footnote-604609960
Ref: Núcleo e embutidos<38>-Footnote-614610026
Ref: Núcleo e embutidos<38>-Footnote-624610092
Ref: Núcleo e embutidos<38>-Footnote-634610158
Ref: Núcleo e embutidos<38>-Footnote-644610224
Ref: Núcleo e embutidos<38>-Footnote-654610290
Ref: Núcleo e embutidos<38>-Footnote-664610356
Ref: Núcleo e embutidos<38>-Footnote-674610422
Ref: Núcleo e embutidos<38>-Footnote-684610488
Ref: Núcleo e embutidos<38>-Footnote-694610554
Ref: Núcleo e embutidos<38>-Footnote-704610620
Ref: Núcleo e embutidos<38>-Footnote-714610686
Ref: Núcleo e embutidos<38>-Footnote-724610752
Ref: Núcleo e embutidos<38>-Footnote-734610818
Ref: Núcleo e embutidos<38>-Footnote-744610884
Ref: Núcleo e embutidos<38>-Footnote-754610950
Ref: Núcleo e embutidos<38>-Footnote-764610993
Ref: Núcleo e embutidos<38>-Footnote-774611059
Ref: Núcleo e embutidos<38>-Footnote-784611125
Ref: Núcleo e embutidos<38>-Footnote-794611191
Ref: Núcleo e embutidos<38>-Footnote-804611234
Ref: Núcleo e embutidos<38>-Footnote-814611300
Ref: Núcleo e embutidos<38>-Footnote-824611366
Ref: Núcleo e embutidos<38>-Footnote-834611432
Ref: Núcleo e embutidos<38>-Footnote-844611498
Ref: Núcleo e embutidos<38>-Footnote-854611564
Ref: Núcleo e embutidos<38>-Footnote-864611630
Ref: Núcleo e embutidos<38>-Footnote-874611696
Ref: Núcleo e embutidos<38>-Footnote-884611762
Ref: Núcleo e embutidos<38>-Footnote-894611828
Ref: Núcleo e embutidos<38>-Footnote-904611894
Ref: Núcleo e embutidos<38>-Footnote-914611960
Ref: Núcleo e embutidos<38>-Footnote-924612026
Ref: Núcleo e embutidos<38>-Footnote-934612092
Ref: Núcleo e embutidos<38>-Footnote-944612158
Ref: Núcleo e embutidos<38>-Footnote-954612224
Ref: Núcleo e embutidos<38>-Footnote-964612290
Ref: Núcleo e embutidos<38>-Footnote-974612356
Ref: Núcleo e embutidos<38>-Footnote-984612422
Ref: Núcleo e embutidos<38>-Footnote-994612488
Ref: Núcleo e embutidos<38>-Footnote-1004612554
Ref: Núcleo e embutidos<38>-Footnote-1014612621
Ref: Núcleo e embutidos<38>-Footnote-1024612688
Ref: Núcleo e embutidos<38>-Footnote-1034612755
Ref: Núcleo e embutidos<38>-Footnote-1044612822
Ref: Núcleo e embutidos<38>-Footnote-1054612889
Ref: Núcleo e embutidos<38>-Footnote-1064612956
Ref: Núcleo e embutidos<38>-Footnote-1074613023
Ref: Núcleo e embutidos<38>-Footnote-1084613090
Ref: Núcleo e embutidos<38>-Footnote-1094613157
Ref: Núcleo e embutidos<38>-Footnote-1104613224
Ref: Núcleo e embutidos<38>-Footnote-1114613291
Ref: Núcleo e embutidos<38>-Footnote-1124613358
Ref: Núcleo e embutidos<38>-Footnote-1134613425
Ref: Núcleo e embutidos<38>-Footnote-1144613492
Ref: Núcleo e embutidos<38>-Footnote-1154613559
Ref: Núcleo e embutidos<38>-Footnote-1164613626
Ref: Núcleo e embutidos<38>-Footnote-1174613693
Ref: Núcleo e embutidos<38>-Footnote-1184613760
Ref: Núcleo e embutidos<38>-Footnote-1194613827
Ref: Núcleo e embutidos<38>-Footnote-1204613894
Ref: Núcleo e embutidos<38>-Footnote-1214613961
Ref: Núcleo e embutidos<38>-Footnote-1224614028
Ref: Núcleo e embutidos<38>-Footnote-1234614095
Ref: Núcleo e embutidos<38>-Footnote-1244614162
Ref: Núcleo e embutidos<38>-Footnote-1254614229
Ref: Núcleo e embutidos<38>-Footnote-1264614296
Ref: Núcleo e embutidos<38>-Footnote-1274614363
Ref: Núcleo e embutidos<38>-Footnote-1284614430
Ref: Núcleo e embutidos<38>-Footnote-1294614497
Ref: Núcleo e embutidos<38>-Footnote-1304614564
Node: Biblioteca<39>4614631
Ref: whatsnew/changelog id3284614762
Ref: 1b374614762
Ref: Biblioteca<39>-Footnote-14654606
Ref: Biblioteca<39>-Footnote-24654671
Ref: Biblioteca<39>-Footnote-34654736
Ref: Biblioteca<39>-Footnote-44654801
Ref: Biblioteca<39>-Footnote-54654868
Ref: Biblioteca<39>-Footnote-64654933
Ref: Biblioteca<39>-Footnote-74654998
Ref: Biblioteca<39>-Footnote-84655063
Ref: Biblioteca<39>-Footnote-94655128
Ref: Biblioteca<39>-Footnote-104655193
Ref: Biblioteca<39>-Footnote-114655259
Ref: Biblioteca<39>-Footnote-124655325
Ref: Biblioteca<39>-Footnote-134655391
Ref: Biblioteca<39>-Footnote-144655457
Ref: Biblioteca<39>-Footnote-154655523
Ref: Biblioteca<39>-Footnote-164655589
Ref: Biblioteca<39>-Footnote-174655655
Ref: Biblioteca<39>-Footnote-184655721
Ref: Biblioteca<39>-Footnote-194655787
Ref: Biblioteca<39>-Footnote-204655853
Ref: Biblioteca<39>-Footnote-214655919
Ref: Biblioteca<39>-Footnote-224655985
Ref: Biblioteca<39>-Footnote-234656051
Ref: Biblioteca<39>-Footnote-244656117
Ref: Biblioteca<39>-Footnote-254656183
Ref: Biblioteca<39>-Footnote-264656249
Ref: Biblioteca<39>-Footnote-274656315
Ref: Biblioteca<39>-Footnote-284656381
Ref: Biblioteca<39>-Footnote-294656447
Ref: Biblioteca<39>-Footnote-304656513
Ref: Biblioteca<39>-Footnote-314656579
Ref: Biblioteca<39>-Footnote-324656645
Ref: Biblioteca<39>-Footnote-334656711
Ref: Biblioteca<39>-Footnote-344656777
Ref: Biblioteca<39>-Footnote-354656843
Ref: Biblioteca<39>-Footnote-364656886
Ref: Biblioteca<39>-Footnote-374656952
Ref: Biblioteca<39>-Footnote-384657018
Ref: Biblioteca<39>-Footnote-394657084
Ref: Biblioteca<39>-Footnote-404657150
Ref: Biblioteca<39>-Footnote-414657216
Ref: Biblioteca<39>-Footnote-424657282
Ref: Biblioteca<39>-Footnote-434657348
Ref: Biblioteca<39>-Footnote-444657414
Ref: Biblioteca<39>-Footnote-454657480
Ref: Biblioteca<39>-Footnote-464657546
Ref: Biblioteca<39>-Footnote-474657612
Ref: Biblioteca<39>-Footnote-484657678
Ref: Biblioteca<39>-Footnote-494657744
Ref: Biblioteca<39>-Footnote-504657810
Ref: Biblioteca<39>-Footnote-514657876
Ref: Biblioteca<39>-Footnote-524657942
Ref: Biblioteca<39>-Footnote-534658008
Ref: Biblioteca<39>-Footnote-544658074
Ref: Biblioteca<39>-Footnote-554658140
Ref: Biblioteca<39>-Footnote-564658206
Ref: Biblioteca<39>-Footnote-574658272
Ref: Biblioteca<39>-Footnote-584658338
Ref: Biblioteca<39>-Footnote-594658404
Ref: Biblioteca<39>-Footnote-604658470
Ref: Biblioteca<39>-Footnote-614658536
Ref: Biblioteca<39>-Footnote-624658602
Ref: Biblioteca<39>-Footnote-634658668
Ref: Biblioteca<39>-Footnote-644658734
Ref: Biblioteca<39>-Footnote-654658800
Ref: Biblioteca<39>-Footnote-664658866
Ref: Biblioteca<39>-Footnote-674658932
Ref: Biblioteca<39>-Footnote-684658998
Ref: Biblioteca<39>-Footnote-694659064
Ref: Biblioteca<39>-Footnote-704659130
Ref: Biblioteca<39>-Footnote-714659196
Ref: Biblioteca<39>-Footnote-724659262
Ref: Biblioteca<39>-Footnote-734659328
Ref: Biblioteca<39>-Footnote-744659394
Ref: Biblioteca<39>-Footnote-754659460
Ref: Biblioteca<39>-Footnote-764659526
Ref: Biblioteca<39>-Footnote-774659592
Ref: Biblioteca<39>-Footnote-784659658
Ref: Biblioteca<39>-Footnote-794659724
Ref: Biblioteca<39>-Footnote-804659790
Ref: Biblioteca<39>-Footnote-814659856
Ref: Biblioteca<39>-Footnote-824659922
Ref: Biblioteca<39>-Footnote-834659988
Ref: Biblioteca<39>-Footnote-844660054
Ref: Biblioteca<39>-Footnote-854660120
Ref: Biblioteca<39>-Footnote-864660186
Ref: Biblioteca<39>-Footnote-874660252
Ref: Biblioteca<39>-Footnote-884660318
Ref: Biblioteca<39>-Footnote-894660384
Ref: Biblioteca<39>-Footnote-904660450
Ref: Biblioteca<39>-Footnote-914660516
Ref: Biblioteca<39>-Footnote-924660582
Ref: Biblioteca<39>-Footnote-934660648
Ref: Biblioteca<39>-Footnote-944660714
Ref: Biblioteca<39>-Footnote-954660780
Ref: Biblioteca<39>-Footnote-964660846
Ref: Biblioteca<39>-Footnote-974660912
Ref: Biblioteca<39>-Footnote-984660978
Ref: Biblioteca<39>-Footnote-994661044
Ref: Biblioteca<39>-Footnote-1004661110
Ref: Biblioteca<39>-Footnote-1014661177
Ref: Biblioteca<39>-Footnote-1024661244
Ref: Biblioteca<39>-Footnote-1034661311
Ref: Biblioteca<39>-Footnote-1044661378
Ref: Biblioteca<39>-Footnote-1054661445
Ref: Biblioteca<39>-Footnote-1064661512
Ref: Biblioteca<39>-Footnote-1074661579
Ref: Biblioteca<39>-Footnote-1084661646
Ref: Biblioteca<39>-Footnote-1094661713
Ref: Biblioteca<39>-Footnote-1104661780
Ref: Biblioteca<39>-Footnote-1114661847
Ref: Biblioteca<39>-Footnote-1124661914
Ref: Biblioteca<39>-Footnote-1134661981
Ref: Biblioteca<39>-Footnote-1144662048
Ref: Biblioteca<39>-Footnote-1154662115
Ref: Biblioteca<39>-Footnote-1164662182
Ref: Biblioteca<39>-Footnote-1174662249
Ref: Biblioteca<39>-Footnote-1184662316
Ref: Biblioteca<39>-Footnote-1194662383
Ref: Biblioteca<39>-Footnote-1204662450
Ref: Biblioteca<39>-Footnote-1214662517
Ref: Biblioteca<39>-Footnote-1224662584
Ref: Biblioteca<39>-Footnote-1234662651
Ref: Biblioteca<39>-Footnote-1244662718
Ref: Biblioteca<39>-Footnote-1254662785
Ref: Biblioteca<39>-Footnote-1264662852
Ref: Biblioteca<39>-Footnote-1274662919
Ref: Biblioteca<39>-Footnote-1284662986
Ref: Biblioteca<39>-Footnote-1294663053
Ref: Biblioteca<39>-Footnote-1304663120
Ref: Biblioteca<39>-Footnote-1314663187
Ref: Biblioteca<39>-Footnote-1324663254
Ref: Biblioteca<39>-Footnote-1334663321
Ref: Biblioteca<39>-Footnote-1344663388
Ref: Biblioteca<39>-Footnote-1354663455
Ref: Biblioteca<39>-Footnote-1364663522
Ref: Biblioteca<39>-Footnote-1374663589
Ref: Biblioteca<39>-Footnote-1384663656
Ref: Biblioteca<39>-Footnote-1394663723
Ref: Biblioteca<39>-Footnote-1404663790
Ref: Biblioteca<39>-Footnote-1414663857
Ref: Biblioteca<39>-Footnote-1424663924
Ref: Biblioteca<39>-Footnote-1434663991
Ref: Biblioteca<39>-Footnote-1444664058
Ref: Biblioteca<39>-Footnote-1454664125
Ref: Biblioteca<39>-Footnote-1464664192
Ref: Biblioteca<39>-Footnote-1474664259
Ref: Biblioteca<39>-Footnote-1484664325
Ref: Biblioteca<39>-Footnote-1494664392
Ref: Biblioteca<39>-Footnote-1504664459
Ref: Biblioteca<39>-Footnote-1514664520
Ref: Biblioteca<39>-Footnote-1524664587
Ref: Biblioteca<39>-Footnote-1534664654
Ref: Biblioteca<39>-Footnote-1544664721
Ref: Biblioteca<39>-Footnote-1554664788
Ref: Biblioteca<39>-Footnote-1564664855
Ref: Biblioteca<39>-Footnote-1574664922
Ref: Biblioteca<39>-Footnote-1584664989
Ref: Biblioteca<39>-Footnote-1594665056
Ref: Biblioteca<39>-Footnote-1604665100
Ref: Biblioteca<39>-Footnote-1614665167
Ref: Biblioteca<39>-Footnote-1624665234
Ref: Biblioteca<39>-Footnote-1634665301
Ref: Biblioteca<39>-Footnote-1644665368
Ref: Biblioteca<39>-Footnote-1654665435
Ref: Biblioteca<39>-Footnote-1664665502
Ref: Biblioteca<39>-Footnote-1674665569
Ref: Biblioteca<39>-Footnote-1684665636
Ref: Biblioteca<39>-Footnote-1694665703
Ref: Biblioteca<39>-Footnote-1704665770
Ref: Biblioteca<39>-Footnote-1714665837
Ref: Biblioteca<39>-Footnote-1724665904
Ref: Biblioteca<39>-Footnote-1734665971
Ref: Biblioteca<39>-Footnote-1744666038
Ref: Biblioteca<39>-Footnote-1754666105
Ref: Biblioteca<39>-Footnote-1764666172
Ref: Biblioteca<39>-Footnote-1774666239
Ref: Biblioteca<39>-Footnote-1784666306
Ref: Biblioteca<39>-Footnote-1794666373
Ref: Biblioteca<39>-Footnote-1804666440
Ref: Biblioteca<39>-Footnote-1814666507
Ref: Biblioteca<39>-Footnote-1824666574
Ref: Biblioteca<39>-Footnote-1834666641
Ref: Biblioteca<39>-Footnote-1844666708
Ref: Biblioteca<39>-Footnote-1854666775
Ref: Biblioteca<39>-Footnote-1864666842
Ref: Biblioteca<39>-Footnote-1874666909
Ref: Biblioteca<39>-Footnote-1884666976
Ref: Biblioteca<39>-Footnote-1894667043
Ref: Biblioteca<39>-Footnote-1904667110
Ref: Biblioteca<39>-Footnote-1914667177
Ref: Biblioteca<39>-Footnote-1924667244
Ref: Biblioteca<39>-Footnote-1934667311
Ref: Biblioteca<39>-Footnote-1944667378
Ref: Biblioteca<39>-Footnote-1954667445
Ref: Biblioteca<39>-Footnote-1964667511
Ref: Biblioteca<39>-Footnote-1974667578
Ref: Biblioteca<39>-Footnote-1984667645
Ref: Biblioteca<39>-Footnote-1994667712
Ref: Biblioteca<39>-Footnote-2004667779
Ref: Biblioteca<39>-Footnote-2014667846
Ref: Biblioteca<39>-Footnote-2024667913
Ref: Biblioteca<39>-Footnote-2034667980
Ref: Biblioteca<39>-Footnote-2044668047
Ref: Biblioteca<39>-Footnote-2054668114
Ref: Biblioteca<39>-Footnote-2064668181
Ref: Biblioteca<39>-Footnote-2074668248
Ref: Biblioteca<39>-Footnote-2084668315
Ref: Biblioteca<39>-Footnote-2094668382
Node: Documentação<33>4668449
Ref: whatsnew/changelog id3294668567
Ref: 1b4e4668567
Ref: Documentação<33>-Footnote-14674909
Ref: Documentação<33>-Footnote-24674974
Ref: Documentação<33>-Footnote-34675039
Ref: Documentação<33>-Footnote-44675104
Ref: Documentação<33>-Footnote-54675169
Ref: Documentação<33>-Footnote-64675234
Ref: Documentação<33>-Footnote-74675286
Ref: Documentação<33>-Footnote-84675351
Ref: Documentação<33>-Footnote-94675416
Ref: Documentação<33>-Footnote-104675475
Ref: Documentação<33>-Footnote-114675541
Ref: Documentação<33>-Footnote-124675607
Ref: Documentação<33>-Footnote-134675673
Ref: Documentação<33>-Footnote-144675739
Ref: Documentação<33>-Footnote-154675805
Ref: Documentação<33>-Footnote-164675871
Ref: Documentação<33>-Footnote-174675937
Ref: Documentação<33>-Footnote-184676003
Ref: Documentação<33>-Footnote-194676069
Ref: Documentação<33>-Footnote-204676135
Ref: Documentação<33>-Footnote-214676201
Ref: Documentação<33>-Footnote-224676267
Ref: Documentação<33>-Footnote-234676333
Ref: Documentação<33>-Footnote-244676399
Ref: Documentação<33>-Footnote-254676465
Ref: Documentação<33>-Footnote-264676531
Ref: Documentação<33>-Footnote-274676597
Ref: Documentação<33>-Footnote-284676663
Ref: Documentação<33>-Footnote-294676729
Ref: Documentação<33>-Footnote-304676795
Ref: Documentação<33>-Footnote-314676861
Ref: Documentação<33>-Footnote-324676927
Ref: Documentação<33>-Footnote-334676993
Ref: Documentação<33>-Footnote-344677059
Ref: Documentação<33>-Footnote-354677125
Ref: Documentação<33>-Footnote-364677191
Ref: Documentação<33>-Footnote-374677257
Ref: Documentação<33>-Footnote-384677323
Ref: Documentação<33>-Footnote-394677389
Ref: Documentação<33>-Footnote-404677455
Ref: Documentação<33>-Footnote-414677521
Ref: Documentação<33>-Footnote-424677587
Node: Testes<34>4677653
Ref: whatsnew/changelog id3304677773
Ref: 1b504677773
Ref: Testes<34>-Footnote-14683635
Ref: Testes<34>-Footnote-24683700
Ref: Testes<34>-Footnote-34683765
Ref: Testes<34>-Footnote-44683830
Ref: Testes<34>-Footnote-54683895
Ref: Testes<34>-Footnote-64683960
Ref: Testes<34>-Footnote-74684025
Ref: Testes<34>-Footnote-84684090
Ref: Testes<34>-Footnote-94684155
Ref: Testes<34>-Footnote-104684220
Ref: Testes<34>-Footnote-114684286
Ref: Testes<34>-Footnote-124684352
Ref: Testes<34>-Footnote-134684418
Ref: Testes<34>-Footnote-144684484
Ref: Testes<34>-Footnote-154684550
Ref: Testes<34>-Footnote-164684616
Ref: Testes<34>-Footnote-174684682
Ref: Testes<34>-Footnote-184684748
Ref: Testes<34>-Footnote-194684814
Ref: Testes<34>-Footnote-204684880
Ref: Testes<34>-Footnote-214684946
Ref: Testes<34>-Footnote-224685012
Ref: Testes<34>-Footnote-234685078
Ref: Testes<34>-Footnote-244685144
Ref: Testes<34>-Footnote-254685210
Ref: Testes<34>-Footnote-264685276
Ref: Testes<34>-Footnote-274685342
Ref: Testes<34>-Footnote-284685408
Ref: Testes<34>-Footnote-294685474
Ref: Testes<34>-Footnote-304685540
Ref: Testes<34>-Footnote-314685606
Ref: Testes<34>-Footnote-324685672
Ref: Testes<34>-Footnote-334685738
Ref: Testes<34>-Footnote-344685804
Ref: Testes<34>-Footnote-354685870
Node: Construção<37>4685936
Ref: whatsnew/changelog id3314686049
Ref: 1b534686049
Ref: Construção<37>-Footnote-14688138
Ref: Construção<37>-Footnote-24688203
Ref: Construção<37>-Footnote-34688268
Ref: Construção<37>-Footnote-44688333
Ref: Construção<37>-Footnote-54688398
Ref: Construção<37>-Footnote-64688463
Ref: Construção<37>-Footnote-74688528
Ref: Construção<37>-Footnote-84688593
Ref: Construção<37>-Footnote-94688658
Ref: Construção<37>-Footnote-104688723
Ref: Construção<37>-Footnote-114688789
Node: Windows<34>4688855
Ref: whatsnew/changelog id3324688967
Ref: 1b544688967
Ref: Windows<34>-Footnote-14690075
Ref: Windows<34>-Footnote-24690140
Ref: Windows<34>-Footnote-34690205
Ref: Windows<34>-Footnote-44690270
Ref: Windows<34>-Footnote-54690335
Ref: Windows<34>-Footnote-64690400
Ref: Windows<34>-Footnote-74690465
Ref: Windows<34>-Footnote-84690530
Ref: Windows<34>-Footnote-94690595
Node: macOS<26>4690660
Ref: whatsnew/changelog id3334690764
Ref: 1b564690764
Ref: macOS<26>-Footnote-14691919
Ref: macOS<26>-Footnote-24691984
Ref: macOS<26>-Footnote-34692049
Ref: macOS<26>-Footnote-44692114
Ref: macOS<26>-Footnote-54692179
Ref: macOS<26>-Footnote-64692244
Ref: macOS<26>-Footnote-74692309
Node: IDLE<18>4692374
Ref: whatsnew/changelog id3344692488
Ref: 1b574692488
Ref: IDLE<18>-Footnote-14694017
Ref: IDLE<18>-Footnote-24694082
Ref: IDLE<18>-Footnote-34694147
Ref: IDLE<18>-Footnote-44694212
Ref: IDLE<18>-Footnote-54694277
Ref: IDLE<18>-Footnote-64694342
Ref: IDLE<18>-Footnote-74694407
Ref: IDLE<18>-Footnote-84694472
Ref: IDLE<18>-Footnote-94694537
Node: Ferramentas/Demos<26>4694602
Ref: whatsnew/changelog id3354694716
Ref: 1b584694716
Ref: Ferramentas/Demos<26>-Footnote-14695532
Ref: Ferramentas/Demos<26>-Footnote-24695597
Ref: Ferramentas/Demos<26>-Footnote-34695662
Ref: Ferramentas/Demos<26>-Footnote-44695727
Ref: Ferramentas/Demos<26>-Footnote-54695792
Ref: Ferramentas/Demos<26>-Footnote-64695857
Node: API C<35>4695922
Ref: whatsnew/changelog id3364696019
Ref: 1b594696019
Ref: API C<35>-Footnote-14701875
Ref: API C<35>-Footnote-24701940
Ref: API C<35>-Footnote-34702005
Ref: API C<35>-Footnote-44702070
Ref: API C<35>-Footnote-54702135
Ref: API C<35>-Footnote-64702200
Ref: API C<35>-Footnote-74702265
Ref: API C<35>-Footnote-84702330
Ref: API C<35>-Footnote-94702395
Ref: API C<35>-Footnote-104702460
Ref: API C<35>-Footnote-114702526
Ref: API C<35>-Footnote-124702592
Ref: API C<35>-Footnote-134702658
Ref: API C<35>-Footnote-144702724
Ref: API C<35>-Footnote-154702790
Ref: API C<35>-Footnote-164702856
Ref: API C<35>-Footnote-174702922
Ref: API C<35>-Footnote-184702988
Ref: API C<35>-Footnote-194703054
Ref: API C<35>-Footnote-204703120
Ref: API C<35>-Footnote-214703163
Ref: API C<35>-Footnote-224703229
Ref: API C<35>-Footnote-234703295
Ref: API C<35>-Footnote-244703361
Ref: API C<35>-Footnote-254703404
Ref: API C<35>-Footnote-264703447
Node: Python 3 10 0 beta 14703513
Ref: whatsnew/changelog python-3-10-0-beta-14703639
Ref: 1b5b4703639
Node: Segurança<28>4704027
Ref: whatsnew/changelog id3374704130
Ref: 1b5c4704130
Ref: Segurança<28>-Footnote-14707069
Ref: Segurança<28>-Footnote-24707134
Ref: Segurança<28>-Footnote-34707199
Ref: Segurança<28>-Footnote-44707264
Ref: Segurança<28>-Footnote-54707329
Ref: Segurança<28>-Footnote-64707394
Ref: Segurança<28>-Footnote-74707459
Ref: Segurança<28>-Footnote-84707524
Ref: Segurança<28>-Footnote-94707589
Ref: Segurança<28>-Footnote-104707654
Ref: Segurança<28>-Footnote-114707720
Node: Núcleo e embutidos<39>4707786
Ref: whatsnew/changelog id3384707912
Ref: 1b5f4707912
Ref: Núcleo e embutidos<39>-Footnote-14714080
Ref: Núcleo e embutidos<39>-Footnote-24714145
Ref: Núcleo e embutidos<39>-Footnote-34714210
Ref: Núcleo e embutidos<39>-Footnote-44714275
Ref: Núcleo e embutidos<39>-Footnote-54714340
Ref: Núcleo e embutidos<39>-Footnote-64714405
Ref: Núcleo e embutidos<39>-Footnote-74714470
Ref: Núcleo e embutidos<39>-Footnote-84714535
Ref: Núcleo e embutidos<39>-Footnote-94714600
Ref: Núcleo e embutidos<39>-Footnote-104714665
Ref: Núcleo e embutidos<39>-Footnote-114714731
Ref: Núcleo e embutidos<39>-Footnote-124714797
Ref: Núcleo e embutidos<39>-Footnote-134714863
Ref: Núcleo e embutidos<39>-Footnote-144714929
Ref: Núcleo e embutidos<39>-Footnote-154714972
Ref: Núcleo e embutidos<39>-Footnote-164715038
Ref: Núcleo e embutidos<39>-Footnote-174715104
Ref: Núcleo e embutidos<39>-Footnote-184715170
Ref: Núcleo e embutidos<39>-Footnote-194715236
Ref: Núcleo e embutidos<39>-Footnote-204715302
Ref: Núcleo e embutidos<39>-Footnote-214715368
Ref: Núcleo e embutidos<39>-Footnote-224715434
Ref: Núcleo e embutidos<39>-Footnote-234715500
Ref: Núcleo e embutidos<39>-Footnote-244715566
Ref: Núcleo e embutidos<39>-Footnote-254715632
Ref: Núcleo e embutidos<39>-Footnote-264715698
Ref: Núcleo e embutidos<39>-Footnote-274715764
Ref: Núcleo e embutidos<39>-Footnote-284715830
Ref: Núcleo e embutidos<39>-Footnote-294715896
Ref: Núcleo e embutidos<39>-Footnote-304715962
Ref: Núcleo e embutidos<39>-Footnote-314716028
Ref: Núcleo e embutidos<39>-Footnote-324716094
Ref: Núcleo e embutidos<39>-Footnote-334716160
Ref: Núcleo e embutidos<39>-Footnote-344716226
Ref: Núcleo e embutidos<39>-Footnote-354716292
Node: Biblioteca<40>4716358
Ref: whatsnew/changelog id3394716488
Ref: 1b634716488
Ref: Biblioteca<40>-Footnote-14733312
Ref: Biblioteca<40>-Footnote-24733377
Ref: Biblioteca<40>-Footnote-34733442
Ref: Biblioteca<40>-Footnote-44733507
Ref: Biblioteca<40>-Footnote-54733572
Ref: Biblioteca<40>-Footnote-64733637
Ref: Biblioteca<40>-Footnote-74733702
Ref: Biblioteca<40>-Footnote-84733767
Ref: Biblioteca<40>-Footnote-94733832
Ref: Biblioteca<40>-Footnote-104733897
Ref: Biblioteca<40>-Footnote-114733963
Ref: Biblioteca<40>-Footnote-124734029
Ref: Biblioteca<40>-Footnote-134734095
Ref: Biblioteca<40>-Footnote-144734161
Ref: Biblioteca<40>-Footnote-154734227
Ref: Biblioteca<40>-Footnote-164734293
Ref: Biblioteca<40>-Footnote-174734359
Ref: Biblioteca<40>-Footnote-184734425
Ref: Biblioteca<40>-Footnote-194734491
Ref: Biblioteca<40>-Footnote-204734557
Ref: Biblioteca<40>-Footnote-214734623
Ref: Biblioteca<40>-Footnote-224734689
Ref: Biblioteca<40>-Footnote-234734732
Ref: Biblioteca<40>-Footnote-244734798
Ref: Biblioteca<40>-Footnote-254734864
Ref: Biblioteca<40>-Footnote-264734930
Ref: Biblioteca<40>-Footnote-274734996
Ref: Biblioteca<40>-Footnote-284735062
Ref: Biblioteca<40>-Footnote-294735128
Ref: Biblioteca<40>-Footnote-304735194
Ref: Biblioteca<40>-Footnote-314735260
Ref: Biblioteca<40>-Footnote-324735326
Ref: Biblioteca<40>-Footnote-334735392
Ref: Biblioteca<40>-Footnote-344735458
Ref: Biblioteca<40>-Footnote-354735524
Ref: Biblioteca<40>-Footnote-364735590
Ref: Biblioteca<40>-Footnote-374735656
Ref: Biblioteca<40>-Footnote-384735722
Ref: Biblioteca<40>-Footnote-394735788
Ref: Biblioteca<40>-Footnote-404735854
Ref: Biblioteca<40>-Footnote-414735920
Ref: Biblioteca<40>-Footnote-424735986
Ref: Biblioteca<40>-Footnote-434736029
Ref: Biblioteca<40>-Footnote-444736095
Ref: Biblioteca<40>-Footnote-454736161
Ref: Biblioteca<40>-Footnote-464736217
Ref: Biblioteca<40>-Footnote-474736283
Ref: Biblioteca<40>-Footnote-484736349
Ref: Biblioteca<40>-Footnote-494736415
Ref: Biblioteca<40>-Footnote-504736481
Ref: Biblioteca<40>-Footnote-514736547
Ref: Biblioteca<40>-Footnote-524736613
Ref: Biblioteca<40>-Footnote-534736679
Ref: Biblioteca<40>-Footnote-544736744
Ref: Biblioteca<40>-Footnote-554736810
Ref: Biblioteca<40>-Footnote-564736876
Ref: Biblioteca<40>-Footnote-574736942
Ref: Biblioteca<40>-Footnote-584737007
Ref: Biblioteca<40>-Footnote-594737073
Ref: Biblioteca<40>-Footnote-604737139
Ref: Biblioteca<40>-Footnote-614737205
Ref: Biblioteca<40>-Footnote-624737271
Ref: Biblioteca<40>-Footnote-634737337
Ref: Biblioteca<40>-Footnote-644737403
Ref: Biblioteca<40>-Footnote-654737469
Ref: Biblioteca<40>-Footnote-664737535
Ref: Biblioteca<40>-Footnote-674737601
Ref: Biblioteca<40>-Footnote-684737667
Ref: Biblioteca<40>-Footnote-694737710
Ref: Biblioteca<40>-Footnote-704737776
Ref: Biblioteca<40>-Footnote-714737842
Ref: Biblioteca<40>-Footnote-724737908
Ref: Biblioteca<40>-Footnote-734737974
Ref: Biblioteca<40>-Footnote-744738040
Ref: Biblioteca<40>-Footnote-754738106
Ref: Biblioteca<40>-Footnote-764738172
Ref: Biblioteca<40>-Footnote-774738238
Ref: Biblioteca<40>-Footnote-784738304
Ref: Biblioteca<40>-Footnote-794738370
Ref: Biblioteca<40>-Footnote-804738436
Ref: Biblioteca<40>-Footnote-814738502
Ref: Biblioteca<40>-Footnote-824738568
Ref: Biblioteca<40>-Footnote-834738634
Node: Documentação<34>4738700
Ref: whatsnew/changelog id3404738817
Ref: 1b6a4738817
Ref: Documentação<34>-Footnote-14739831
Ref: Documentação<34>-Footnote-24739896
Ref: Documentação<34>-Footnote-34739961
Ref: Documentação<34>-Footnote-44740026
Ref: Documentação<34>-Footnote-54740091
Ref: Documentação<34>-Footnote-64740156
Ref: Documentação<34>-Footnote-74740221
Node: Testes<35>4740286
Ref: whatsnew/changelog id3414740405
Ref: 1b6b4740405
Ref: Testes<35>-Footnote-14741486
Ref: Testes<35>-Footnote-24741551
Ref: Testes<35>-Footnote-34741616
Ref: Testes<35>-Footnote-44741681
Ref: Testes<35>-Footnote-54741746
Node: Construção<38>4741811
Ref: whatsnew/changelog id3424741923
Ref: 1b6c4741923
Ref: Construção<38>-Footnote-14742195
Ref: Construção<38>-Footnote-24742260
Ref: Construção<38>-Footnote-34742325
Node: Windows<35>4742367
Ref: whatsnew/changelog id3434742478
Ref: 1b6d4742478
Ref: Windows<35>-Footnote-14743821
Ref: Windows<35>-Footnote-24743886
Ref: Windows<35>-Footnote-34743951
Ref: Windows<35>-Footnote-44744016
Ref: Windows<35>-Footnote-54744081
Ref: Windows<35>-Footnote-64744146
Ref: Windows<35>-Footnote-74744211
Ref: Windows<35>-Footnote-84744276
Ref: Windows<35>-Footnote-94744341
Node: macOS<27>4744406
Ref: whatsnew/changelog id3444744509
Ref: 1b714744509
Ref: macOS<27>-Footnote-14745817
Ref: macOS<27>-Footnote-24745882
Ref: macOS<27>-Footnote-34745947
Ref: macOS<27>-Footnote-44746012
Ref: macOS<27>-Footnote-54746077
Ref: macOS<27>-Footnote-64746142
Node: IDLE<19>4746207
Ref: whatsnew/changelog id3454746308
Ref: 1b724746308
Ref: IDLE<19>-Footnote-14747108
Ref: IDLE<19>-Footnote-24747173
Ref: IDLE<19>-Footnote-34747238
Ref: IDLE<19>-Footnote-44747303
Ref: IDLE<19>-Footnote-54747368
Node: API C<36>4747433
Ref: whatsnew/changelog id3464747516
Ref: 1b734747516
Ref: API C<36>-Footnote-14749765
Ref: API C<36>-Footnote-24749830
Ref: API C<36>-Footnote-34749895
Ref: API C<36>-Footnote-44749960
Ref: API C<36>-Footnote-54750025
Ref: API C<36>-Footnote-64750090
Ref: API C<36>-Footnote-74750155
Ref: API C<36>-Footnote-84750220
Ref: API C<36>-Footnote-94750285
Ref: API C<36>-Footnote-104750327
Node: Python 3 10 0 alpha 74750393
Ref: whatsnew/changelog python-3-10-0-alpha-74750519
Ref: 1b744750519
Node: Segurança<29>4750889
Ref: whatsnew/changelog id3474750993
Ref: 1b754750993
Ref: Segurança<29>-Footnote-14752080
Ref: Segurança<29>-Footnote-24752145
Ref: Segurança<29>-Footnote-34752200
Ref: Segurança<29>-Footnote-44752265
Node: Núcleo e embutidos<40>4752330
Ref: whatsnew/changelog id3484752457
Ref: 1b764752457
Ref: Núcleo e embutidos<40>-Footnote-14756984
Ref: Núcleo e embutidos<40>-Footnote-24757049
Ref: Núcleo e embutidos<40>-Footnote-34757114
Ref: Núcleo e embutidos<40>-Footnote-44757179
Ref: Núcleo e embutidos<40>-Footnote-54757244
Ref: Núcleo e embutidos<40>-Footnote-64757309
Ref: Núcleo e embutidos<40>-Footnote-74757374
Ref: Núcleo e embutidos<40>-Footnote-84757439
Ref: Núcleo e embutidos<40>-Footnote-94757504
Ref: Núcleo e embutidos<40>-Footnote-104757546
Ref: Núcleo e embutidos<40>-Footnote-114757612
Ref: Núcleo e embutidos<40>-Footnote-124757678
Ref: Núcleo e embutidos<40>-Footnote-134757744
Ref: Núcleo e embutidos<40>-Footnote-144757810
Ref: Núcleo e embutidos<40>-Footnote-154757876
Ref: Núcleo e embutidos<40>-Footnote-164757942
Ref: Núcleo e embutidos<40>-Footnote-174758008
Ref: Núcleo e embutidos<40>-Footnote-184758074
Ref: Núcleo e embutidos<40>-Footnote-194758140
Ref: Núcleo e embutidos<40>-Footnote-204758206
Ref: Núcleo e embutidos<40>-Footnote-214758272
Ref: Núcleo e embutidos<40>-Footnote-224758338
Ref: Núcleo e embutidos<40>-Footnote-234758381
Ref: Núcleo e embutidos<40>-Footnote-244758447
Node: Biblioteca<41>4758513
Ref: whatsnew/changelog id3494758644
Ref: 1b774758644
Ref: Biblioteca<41>-Footnote-14766334
Ref: Biblioteca<41>-Footnote-24766399
Ref: Biblioteca<41>-Footnote-34766464
Ref: Biblioteca<41>-Footnote-44766529
Ref: Biblioteca<41>-Footnote-54766594
Ref: Biblioteca<41>-Footnote-64766659
Ref: Biblioteca<41>-Footnote-74766724
Ref: Biblioteca<41>-Footnote-84766789
Ref: Biblioteca<41>-Footnote-94766854
Ref: Biblioteca<41>-Footnote-104766919
Ref: Biblioteca<41>-Footnote-114766985
Ref: Biblioteca<41>-Footnote-124767051
Ref: Biblioteca<41>-Footnote-134767117
Ref: Biblioteca<41>-Footnote-144767183
Ref: Biblioteca<41>-Footnote-154767249
Ref: Biblioteca<41>-Footnote-164767292
Ref: Biblioteca<41>-Footnote-174767358
Ref: Biblioteca<41>-Footnote-184767424
Ref: Biblioteca<41>-Footnote-194767490
Ref: Biblioteca<41>-Footnote-204767556
Ref: Biblioteca<41>-Footnote-214767622
Ref: Biblioteca<41>-Footnote-224767688
Ref: Biblioteca<41>-Footnote-234767754
Ref: Biblioteca<41>-Footnote-244767820
Ref: Biblioteca<41>-Footnote-254767886
Ref: Biblioteca<41>-Footnote-264767968
Ref: Biblioteca<41>-Footnote-274768034
Ref: Biblioteca<41>-Footnote-284768100
Ref: Biblioteca<41>-Footnote-294768166
Ref: Biblioteca<41>-Footnote-304768232
Ref: Biblioteca<41>-Footnote-314768298
Ref: Biblioteca<41>-Footnote-324768364
Ref: Biblioteca<41>-Footnote-334768430
Ref: Biblioteca<41>-Footnote-344768496
Ref: Biblioteca<41>-Footnote-354768562
Ref: Biblioteca<41>-Footnote-364768628
Ref: Biblioteca<41>-Footnote-374768694
Ref: Biblioteca<41>-Footnote-384768760
Ref: Biblioteca<41>-Footnote-394768826
Ref: Biblioteca<41>-Footnote-404768892
Ref: Biblioteca<41>-Footnote-414768958
Ref: Biblioteca<41>-Footnote-424769024
Ref: Biblioteca<41>-Footnote-434769090
Ref: Biblioteca<41>-Footnote-444769156
Ref: Biblioteca<41>-Footnote-454769222
Node: Documentação<35>4769288
Ref: whatsnew/changelog id3504769406
Ref: 1b7f4769406
Ref: Documentação<35>-Footnote-14770103
Ref: Documentação<35>-Footnote-24770168
Ref: Documentação<35>-Footnote-34770233
Ref: Documentação<35>-Footnote-44770298
Node: Testes<36>4770363
Ref: whatsnew/changelog id3514770483
Ref: 1b804770483
Ref: Testes<36>-Footnote-14770790
Ref: Testes<36>-Footnote-24770855
Node: Construção<39>4770920
Ref: whatsnew/changelog id3524771033
Ref: 1b814771033
Ref: Construção<39>-Footnote-14772016
Ref: Construção<39>-Footnote-24772081
Ref: Construção<39>-Footnote-34772146
Ref: Construção<39>-Footnote-44772211
Ref: Construção<39>-Footnote-54772276
Ref: Construção<39>-Footnote-64772341
Node: Windows<36>4772406
Ref: whatsnew/changelog id3534772517
Ref: 1b824772517
Ref: Windows<36>-Footnote-14772707
Node: IDLE<20>4772772
Ref: whatsnew/changelog id3544772876
Ref: 1b834772876
Ref: IDLE<20>-Footnote-14773117
Node: API C<37>4773182
Ref: whatsnew/changelog id3554773266
Ref: 1b844773266
Ref: API C<37>-Footnote-14776738
Ref: API C<37>-Footnote-24776803
Ref: API C<37>-Footnote-34776868
Ref: API C<37>-Footnote-44776933
Ref: API C<37>-Footnote-54776998
Ref: API C<37>-Footnote-64777063
Ref: API C<37>-Footnote-74777128
Ref: API C<37>-Footnote-84777193
Ref: API C<37>-Footnote-94777258
Node: Python 3 10 0 alpha 64777300
Ref: whatsnew/changelog python-3-10-0-alpha-64777427
Ref: 1b854777427
Node: Segurança<30>4777817
Ref: whatsnew/changelog id3564777921
Ref: 1b864777921
Ref: Segurança<30>-Footnote-14778170
Node: Núcleo e embutidos<41>4778235
Ref: whatsnew/changelog id3574778362
Ref: 1b874778362
Ref: Núcleo e embutidos<41>-Footnote-14781802
Ref: Núcleo e embutidos<41>-Footnote-24781867
Ref: Núcleo e embutidos<41>-Footnote-34781932
Ref: Núcleo e embutidos<41>-Footnote-44781974
Ref: Núcleo e embutidos<41>-Footnote-54782039
Ref: Núcleo e embutidos<41>-Footnote-64782104
Ref: Núcleo e embutidos<41>-Footnote-74782169
Ref: Núcleo e embutidos<41>-Footnote-84782234
Ref: Núcleo e embutidos<41>-Footnote-94782299
Ref: Núcleo e embutidos<41>-Footnote-104782364
Ref: Núcleo e embutidos<41>-Footnote-114782430
Ref: Núcleo e embutidos<41>-Footnote-124782496
Ref: Núcleo e embutidos<41>-Footnote-134782562
Ref: Núcleo e embutidos<41>-Footnote-144782628
Ref: Núcleo e embutidos<41>-Footnote-154782671
Ref: Núcleo e embutidos<41>-Footnote-164782737
Node: Biblioteca<42>4782803
Ref: whatsnew/changelog id3584782934
Ref: 1b884782934
Ref: Biblioteca<42>-Footnote-14785776
Ref: Biblioteca<42>-Footnote-24785841
Ref: Biblioteca<42>-Footnote-34785906
Ref: Biblioteca<42>-Footnote-44785971
Ref: Biblioteca<42>-Footnote-54786036
Ref: Biblioteca<42>-Footnote-64786101
Ref: Biblioteca<42>-Footnote-74786166
Ref: Biblioteca<42>-Footnote-84786231
Ref: Biblioteca<42>-Footnote-94786296
Ref: Biblioteca<42>-Footnote-104786361
Ref: Biblioteca<42>-Footnote-114786427
Ref: Biblioteca<42>-Footnote-124786493
Ref: Biblioteca<42>-Footnote-134786559
Ref: Biblioteca<42>-Footnote-144786625
Ref: Biblioteca<42>-Footnote-154786691
Ref: Biblioteca<42>-Footnote-164786757
Node: Documentação<36>4786823
Ref: whatsnew/changelog id3594786941
Ref: 1b8c4786941
Ref: Documentação<36>-Footnote-14787295
Ref: Documentação<36>-Footnote-24787360
Ref: Documentação<36>-Footnote-34787425
Node: Testes<37>4787467
Ref: whatsnew/changelog id3604787587
Ref: 1b8d4787587
Ref: Testes<37>-Footnote-14787780
Node: Construção<40>4787845
Ref: whatsnew/changelog id3614787958
Ref: 1b8e4787958
Ref: Construção<40>-Footnote-14789039
Ref: Construção<40>-Footnote-24789104
Ref: Construção<40>-Footnote-34789169
Ref: Construção<40>-Footnote-44789234
Ref: Construção<40>-Footnote-54789299
Node: Windows<37>4789364
Ref: whatsnew/changelog id3624789476
Ref: 1b8f4789476
Ref: Windows<37>-Footnote-14789640
Node: macOS<28>4789705
Ref: whatsnew/changelog id3634789809
Ref: 1b914789809
Ref: macOS<28>-Footnote-14789950
Node: IDLE<21>4790015
Ref: whatsnew/changelog id3644790117
Ref: 1b924790117
Ref: IDLE<21>-Footnote-14790387
Node: API C<38>4790452
Ref: whatsnew/changelog id3654790536
Ref: 1b934790536
Ref: API C<38>-Footnote-14792290
Ref: API C<38>-Footnote-24792355
Ref: API C<38>-Footnote-34792420
Ref: API C<38>-Footnote-44792485
Ref: API C<38>-Footnote-54792550
Ref: API C<38>-Footnote-64792615
Ref: API C<38>-Footnote-74792680
Ref: API C<38>-Footnote-84792745
Ref: API C<38>-Footnote-94792810
Node: Python 3 10 0 alpha 54792875
Ref: whatsnew/changelog python-3-10-0-alpha-54793002
Ref: 1b9b4793002
Node: Segurança<31>4793392
Ref: whatsnew/changelog id3664793496
Ref: 1b9c4793496
Ref: Segurança<31>-Footnote-14793721
Node: Núcleo e embutidos<42>4793786
Ref: whatsnew/changelog id3674793913
Ref: 1b9f4793913
Ref: Núcleo e embutidos<42>-Footnote-14796438
Ref: Núcleo e embutidos<42>-Footnote-24796503
Ref: Núcleo e embutidos<42>-Footnote-34796568
Ref: Núcleo e embutidos<42>-Footnote-44796633
Ref: Núcleo e embutidos<42>-Footnote-54796698
Ref: Núcleo e embutidos<42>-Footnote-64796763
Ref: Núcleo e embutidos<42>-Footnote-74796828
Ref: Núcleo e embutidos<42>-Footnote-84796893
Ref: Núcleo e embutidos<42>-Footnote-94796958
Ref: Núcleo e embutidos<42>-Footnote-104797023
Ref: Núcleo e embutidos<42>-Footnote-114797089
Ref: Núcleo e embutidos<42>-Footnote-124797155
Ref: Núcleo e embutidos<42>-Footnote-134797221
Ref: Núcleo e embutidos<42>-Footnote-144797287
Ref: Núcleo e embutidos<42>-Footnote-154797353
Node: Biblioteca<43>4797419
Ref: whatsnew/changelog id3684797550
Ref: 1ba04797550
Ref: Biblioteca<43>-Footnote-14802502
Ref: Biblioteca<43>-Footnote-24802567
Ref: Biblioteca<43>-Footnote-34802632
Ref: Biblioteca<43>-Footnote-44802697
Ref: Biblioteca<43>-Footnote-54802762
Ref: Biblioteca<43>-Footnote-64802827
Ref: Biblioteca<43>-Footnote-74802892
Ref: Biblioteca<43>-Footnote-84802957
Ref: Biblioteca<43>-Footnote-94803022
Ref: Biblioteca<43>-Footnote-104803087
Ref: Biblioteca<43>-Footnote-114803153
Ref: Biblioteca<43>-Footnote-124803219
Ref: Biblioteca<43>-Footnote-134803285
Ref: Biblioteca<43>-Footnote-144803351
Ref: Biblioteca<43>-Footnote-154803417
Ref: Biblioteca<43>-Footnote-164803483
Ref: Biblioteca<43>-Footnote-174803549
Ref: Biblioteca<43>-Footnote-184803615
Ref: Biblioteca<43>-Footnote-194803658
Ref: Biblioteca<43>-Footnote-204803724
Ref: Biblioteca<43>-Footnote-214803790
Ref: Biblioteca<43>-Footnote-224803856
Ref: Biblioteca<43>-Footnote-234803922
Ref: Biblioteca<43>-Footnote-244803990
Ref: Biblioteca<43>-Footnote-254804033
Ref: Biblioteca<43>-Footnote-264804099
Ref: Biblioteca<43>-Footnote-274804165
Ref: Biblioteca<43>-Footnote-284804231
Ref: Biblioteca<43>-Footnote-294804297
Ref: Biblioteca<43>-Footnote-304804363
Ref: Biblioteca<43>-Footnote-314804429
Ref: Biblioteca<43>-Footnote-324804495
Ref: Biblioteca<43>-Footnote-334804561
Ref: Biblioteca<43>-Footnote-344804627
Node: Documentação<37>4804693
Ref: whatsnew/changelog id3694804811
Ref: 1ba14804811
Ref: Documentação<37>-Footnote-14805139
Ref: Documentação<37>-Footnote-24805204
Node: Testes<38>4805269
Ref: whatsnew/changelog id3704805389
Ref: 1ba24805389
Ref: Testes<38>-Footnote-14805747
Ref: Testes<38>-Footnote-24805812
Node: Construção<41>4805877
Ref: whatsnew/changelog id3714805990
Ref: 1ba34805990
Ref: Construção<41>-Footnote-14807225
Ref: Construção<41>-Footnote-24807290
Ref: Construção<41>-Footnote-34807355
Ref: Construção<41>-Footnote-44807420
Ref: Construção<41>-Footnote-54807485
Node: Windows<38>4807550
Ref: whatsnew/changelog id3724807662
Ref: 1ba44807662
Ref: Windows<38>-Footnote-14807875
Ref: Windows<38>-Footnote-24807940
Node: macOS<29>4808005
Ref: whatsnew/changelog id3734808109
Ref: 1ba54808109
Ref: macOS<29>-Footnote-14808360
Node: IDLE<22>4808425
Ref: whatsnew/changelog id3744808527
Ref: 1ba64808527
Ref: IDLE<22>-Footnote-14809089
Ref: IDLE<22>-Footnote-24809154
Ref: IDLE<22>-Footnote-34809219
Ref: IDLE<22>-Footnote-44809284
Node: API C<39>4809349
Ref: whatsnew/changelog id3754809433
Ref: 1ba74809433
Ref: API C<39>-Footnote-14810039
Ref: API C<39>-Footnote-24810104
Node: Python 3 10 0 alpha 44810169
Ref: whatsnew/changelog python-3-10-0-alpha-44810296
Ref: 1ba94810296
Node: Núcleo e embutidos<43>4810658
Ref: whatsnew/changelog id3764810762
Ref: 1baa4810762
Ref: Núcleo e embutidos<43>-Footnote-14814183
Ref: Núcleo e embutidos<43>-Footnote-24814248
Ref: Núcleo e embutidos<43>-Footnote-34814313
Ref: Núcleo e embutidos<43>-Footnote-44814378
Ref: Núcleo e embutidos<43>-Footnote-54814443
Ref: Núcleo e embutidos<43>-Footnote-64814508
Ref: Núcleo e embutidos<43>-Footnote-74814573
Ref: Núcleo e embutidos<43>-Footnote-84814638
Ref: Núcleo e embutidos<43>-Footnote-94814703
Ref: Núcleo e embutidos<43>-Footnote-104814768
Ref: Núcleo e embutidos<43>-Footnote-114814834
Ref: Núcleo e embutidos<43>-Footnote-124814900
Ref: Núcleo e embutidos<43>-Footnote-134814966
Ref: Núcleo e embutidos<43>-Footnote-144815032
Ref: Núcleo e embutidos<43>-Footnote-154815075
Ref: Núcleo e embutidos<43>-Footnote-164815141
Ref: Núcleo e embutidos<43>-Footnote-174815207
Ref: Núcleo e embutidos<43>-Footnote-184815273
Ref: Núcleo e embutidos<43>-Footnote-194815341
Ref: Núcleo e embutidos<43>-Footnote-204815384
Ref: Núcleo e embutidos<43>-Footnote-214815450
Node: Biblioteca<44>4815516
Ref: whatsnew/changelog id3774815647
Ref: 1bac4815647
Ref: Biblioteca<44>-Footnote-14824482
Ref: Biblioteca<44>-Footnote-24824547
Ref: Biblioteca<44>-Footnote-34824612
Ref: Biblioteca<44>-Footnote-44824677
Ref: Biblioteca<44>-Footnote-54824742
Ref: Biblioteca<44>-Footnote-64824807
Ref: Biblioteca<44>-Footnote-74824872
Ref: Biblioteca<44>-Footnote-84824914
Ref: Biblioteca<44>-Footnote-94824956
Ref: Biblioteca<44>-Footnote-104825021
Ref: Biblioteca<44>-Footnote-114825087
Ref: Biblioteca<44>-Footnote-124825153
Ref: Biblioteca<44>-Footnote-134825219
Ref: Biblioteca<44>-Footnote-144825285
Ref: Biblioteca<44>-Footnote-154825351
Ref: Biblioteca<44>-Footnote-164825417
Ref: Biblioteca<44>-Footnote-174825483
Ref: Biblioteca<44>-Footnote-184825549
Ref: Biblioteca<44>-Footnote-194825614
Ref: Biblioteca<44>-Footnote-204825682
Ref: Biblioteca<44>-Footnote-214825725
Ref: Biblioteca<44>-Footnote-224825791
Ref: Biblioteca<44>-Footnote-234825857
Ref: Biblioteca<44>-Footnote-244825923
Ref: Biblioteca<44>-Footnote-254825989
Ref: Biblioteca<44>-Footnote-264826055
Ref: Biblioteca<44>-Footnote-274826121
Ref: Biblioteca<44>-Footnote-284826187
Ref: Biblioteca<44>-Footnote-294826253
Ref: Biblioteca<44>-Footnote-304826319
Ref: Biblioteca<44>-Footnote-314826385
Ref: Biblioteca<44>-Footnote-324826451
Ref: Biblioteca<44>-Footnote-334826494
Ref: Biblioteca<44>-Footnote-344826560
Ref: Biblioteca<44>-Footnote-354826626
Ref: Biblioteca<44>-Footnote-364826692
Ref: Biblioteca<44>-Footnote-374826758
Ref: Biblioteca<44>-Footnote-384826824
Ref: Biblioteca<44>-Footnote-394826890
Ref: Biblioteca<44>-Footnote-404826956
Ref: Biblioteca<44>-Footnote-414827022
Ref: Biblioteca<44>-Footnote-424827088
Ref: Biblioteca<44>-Footnote-434827154
Ref: Biblioteca<44>-Footnote-444827220
Ref: Biblioteca<44>-Footnote-454827286
Ref: Biblioteca<44>-Footnote-464827352
Ref: Biblioteca<44>-Footnote-474827418
Ref: Biblioteca<44>-Footnote-484827486
Ref: Biblioteca<44>-Footnote-494827529
Ref: Biblioteca<44>-Footnote-504827595
Ref: Biblioteca<44>-Footnote-514827661
Ref: Biblioteca<44>-Footnote-524827727
Ref: Biblioteca<44>-Footnote-534827793
Ref: Biblioteca<44>-Footnote-544827859
Ref: Biblioteca<44>-Footnote-554827925
Ref: Biblioteca<44>-Footnote-564827991
Ref: Biblioteca<44>-Footnote-574828057
Ref: Biblioteca<44>-Footnote-584828123
Node: Documentação<38>4828189
Ref: whatsnew/changelog id3784828307
Ref: 1bb24828307
Ref: Documentação<38>-Footnote-14828623
Ref: Documentação<38>-Footnote-24828688
Node: Testes<39>4828753
Ref: whatsnew/changelog id3794828873
Ref: 1bb44828873
Ref: Testes<39>-Footnote-14829652
Ref: Testes<39>-Footnote-24829717
Ref: Testes<39>-Footnote-34829782
Ref: Testes<39>-Footnote-44829847
Ref: Testes<39>-Footnote-54829912
Ref: Testes<39>-Footnote-64829977
Ref: Testes<39>-Footnote-74830042
Ref: Testes<39>-Footnote-84830107
Node: Construção<42>4830172
Ref: whatsnew/changelog id3804830283
Ref: 1bb54830283
Ref: Construção<42>-Footnote-14831286
Ref: Construção<42>-Footnote-24831351
Ref: Construção<42>-Footnote-34831416
Ref: Construção<42>-Footnote-44831481
Ref: Construção<42>-Footnote-54831546
Ref: Construção<42>-Footnote-64831611
Node: macOS<30>4831676
Ref: whatsnew/changelog id3814831798
Ref: 1bb64831798
Ref: macOS<30>-Footnote-14832116
Ref: macOS<30>-Footnote-24832181
Ref: macOS<30>-Footnote-34832246
Node: Ferramentas/Demos<27>4832311
Ref: whatsnew/changelog id3824832426
Ref: 1bb74832426
Ref: Ferramentas/Demos<27>-Footnote-14832762
Ref: Ferramentas/Demos<27>-Footnote-24832827
Node: API C<40>4832892
Ref: whatsnew/changelog id3834832989
Ref: 1bb84832989
Ref: API C<40>-Footnote-14833830
Ref: API C<40>-Footnote-24833895
Ref: API C<40>-Footnote-34833960
Ref: API C<40>-Footnote-44834027
Ref: API C<40>-Footnote-54834092
Node: Python 3 10 0 alpha 34834157
Ref: whatsnew/changelog python-3-10-0-alpha-34834284
Ref: 1bb94834284
Node: Segurança<32>4834718
Ref: whatsnew/changelog id3844834822
Ref: 1bba4834822
Ref: Segurança<32>-Footnote-14835065
Node: Núcleo e embutidos<44>4835130
Ref: whatsnew/changelog id3854835257
Ref: 1bbb4835257
Ref: Núcleo e embutidos<44>-Footnote-14839556
Ref: Núcleo e embutidos<44>-Footnote-24839621
Ref: Núcleo e embutidos<44>-Footnote-34839686
Ref: Núcleo e embutidos<44>-Footnote-44839751
Ref: Núcleo e embutidos<44>-Footnote-54839816
Ref: Núcleo e embutidos<44>-Footnote-64839881
Ref: Núcleo e embutidos<44>-Footnote-74839948
Ref: Núcleo e embutidos<44>-Footnote-84839990
Ref: Núcleo e embutidos<44>-Footnote-94840055
Ref: Núcleo e embutidos<44>-Footnote-104840120
Ref: Núcleo e embutidos<44>-Footnote-114840186
Ref: Núcleo e embutidos<44>-Footnote-124840252
Ref: Núcleo e embutidos<44>-Footnote-134840318
Ref: Núcleo e embutidos<44>-Footnote-144840384
Ref: Núcleo e embutidos<44>-Footnote-154840450
Ref: Núcleo e embutidos<44>-Footnote-164840516
Ref: Núcleo e embutidos<44>-Footnote-174840582
Ref: Núcleo e embutidos<44>-Footnote-184840648
Ref: Núcleo e embutidos<44>-Footnote-194840714
Ref: Núcleo e embutidos<44>-Footnote-204840780
Ref: Núcleo e embutidos<44>-Footnote-214840846
Ref: Núcleo e embutidos<44>-Footnote-224840912
Ref: Núcleo e embutidos<44>-Footnote-234840978
Node: Biblioteca<45>4841044
Ref: whatsnew/changelog id3864841175
Ref: 1bbe4841175
Ref: Biblioteca<45>-Footnote-14852255
Ref: Biblioteca<45>-Footnote-24852319
Ref: Biblioteca<45>-Footnote-34852384
Ref: Biblioteca<45>-Footnote-44852449
Ref: Biblioteca<45>-Footnote-54852514
Ref: Biblioteca<45>-Footnote-64852579
Ref: Biblioteca<45>-Footnote-74852644
Ref: Biblioteca<45>-Footnote-84852709
Ref: Biblioteca<45>-Footnote-94852774
Ref: Biblioteca<45>-Footnote-104852839
Ref: Biblioteca<45>-Footnote-114852905
Ref: Biblioteca<45>-Footnote-124852971
Ref: Biblioteca<45>-Footnote-134853037
Ref: Biblioteca<45>-Footnote-144853103
Ref: Biblioteca<45>-Footnote-154853169
Ref: Biblioteca<45>-Footnote-164853235
Ref: Biblioteca<45>-Footnote-174853301
Ref: Biblioteca<45>-Footnote-184853367
Ref: Biblioteca<45>-Footnote-194853433
Ref: Biblioteca<45>-Footnote-204853499
Ref: Biblioteca<45>-Footnote-214853565
Ref: Biblioteca<45>-Footnote-224853631
Ref: Biblioteca<45>-Footnote-234853697
Ref: Biblioteca<45>-Footnote-244853765
Ref: Biblioteca<45>-Footnote-254853831
Ref: Biblioteca<45>-Footnote-264853897
Ref: Biblioteca<45>-Footnote-274853940
Ref: Biblioteca<45>-Footnote-284854006
Ref: Biblioteca<45>-Footnote-294854072
Ref: Biblioteca<45>-Footnote-304854138
Ref: Biblioteca<45>-Footnote-314854204
Ref: Biblioteca<45>-Footnote-324854270
Ref: Biblioteca<45>-Footnote-334854336
Ref: Biblioteca<45>-Footnote-344854402
Ref: Biblioteca<45>-Footnote-354854468
Ref: Biblioteca<45>-Footnote-364854534
Ref: Biblioteca<45>-Footnote-374854600
Ref: Biblioteca<45>-Footnote-384854666
Ref: Biblioteca<45>-Footnote-394854732
Ref: Biblioteca<45>-Footnote-404854798
Ref: Biblioteca<45>-Footnote-414854864
Ref: Biblioteca<45>-Footnote-424854930
Ref: Biblioteca<45>-Footnote-434854996
Ref: Biblioteca<45>-Footnote-444855062
Ref: Biblioteca<45>-Footnote-454855128
Ref: Biblioteca<45>-Footnote-464855194
Ref: Biblioteca<45>-Footnote-474855260
Ref: Biblioteca<45>-Footnote-484855326
Ref: Biblioteca<45>-Footnote-494855392
Ref: Biblioteca<45>-Footnote-504855458
Ref: Biblioteca<45>-Footnote-514855524
Ref: Biblioteca<45>-Footnote-524855590
Ref: Biblioteca<45>-Footnote-534855656
Ref: Biblioteca<45>-Footnote-544855722
Ref: Biblioteca<45>-Footnote-554855788
Ref: Biblioteca<45>-Footnote-564855854
Ref: Biblioteca<45>-Footnote-574855920
Ref: Biblioteca<45>-Footnote-584855986
Ref: Biblioteca<45>-Footnote-594856052
Ref: Biblioteca<45>-Footnote-604856118
Ref: Biblioteca<45>-Footnote-614856184
Ref: Biblioteca<45>-Footnote-624856250
Ref: Biblioteca<45>-Footnote-634856316
Ref: Biblioteca<45>-Footnote-644856382
Ref: Biblioteca<45>-Footnote-654856448
Node: Documentação<39>4856514
Ref: whatsnew/changelog id3874856632
Ref: 1bc34856632
Ref: Documentação<39>-Footnote-14857098
Ref: Documentação<39>-Footnote-24857163
Ref: Documentação<39>-Footnote-34857228
Node: Testes<40>4857293
Ref: whatsnew/changelog id3884857413
Ref: 1bc44857413
Ref: Testes<40>-Footnote-14858623
Ref: Testes<40>-Footnote-24858688
Ref: Testes<40>-Footnote-34858753
Ref: Testes<40>-Footnote-44858818
Ref: Testes<40>-Footnote-54858883
Ref: Testes<40>-Footnote-64858948
Ref: Testes<40>-Footnote-74859013
Ref: Testes<40>-Footnote-84859078
Ref: Testes<40>-Footnote-94859143
Ref: Testes<40>-Footnote-104859208
Ref: Testes<40>-Footnote-114859274
Ref: Testes<40>-Footnote-124859340
Node: Construção<43>4859406
Ref: whatsnew/changelog id3894859519
Ref: 1bc54859519
Ref: Construção<43>-Footnote-14860672
Ref: Construção<43>-Footnote-24860737
Ref: Construção<43>-Footnote-34860802
Ref: Construção<43>-Footnote-44860867
Ref: Construção<43>-Footnote-54860932
Ref: Construção<43>-Footnote-64860997
Ref: Construção<43>-Footnote-74861062
Node: Windows<39>4861127
Ref: whatsnew/changelog id3904861239
Ref: 1bc64861239
Ref: Windows<39>-Footnote-14861531
Ref: Windows<39>-Footnote-24861596
Node: macOS<31>4861661
Ref: whatsnew/changelog id3914861765
Ref: 1bc74861765
Ref: macOS<31>-Footnote-14862713
Ref: macOS<31>-Footnote-24862778
Ref: macOS<31>-Footnote-34862843
Ref: macOS<31>-Footnote-44862908
Ref: macOS<31>-Footnote-54862973
Node: IDLE<23>4863038
Ref: whatsnew/changelog id3924863152
Ref: 1bc84863152
Ref: IDLE<23>-Footnote-14863572
Ref: IDLE<23>-Footnote-24863637
Ref: IDLE<23>-Footnote-34863702
Node: Ferramentas/Demos<28>4863767
Ref: whatsnew/changelog id3934863881
Ref: 1bc94863881
Ref: Ferramentas/Demos<28>-Footnote-14864295
Ref: Ferramentas/Demos<28>-Footnote-24864360
Node: API C<41>4864425
Ref: whatsnew/changelog id3944864522
Ref: 1bca4864522
Ref: API C<41>-Footnote-14869294
Ref: API C<41>-Footnote-24869359
Ref: API C<41>-Footnote-34869426
Ref: API C<41>-Footnote-44869468
Ref: API C<41>-Footnote-54869535
Ref: API C<41>-Footnote-64869577
Ref: API C<41>-Footnote-74869644
Ref: API C<41>-Footnote-84869686
Ref: API C<41>-Footnote-94869753
Ref: API C<41>-Footnote-104869795
Ref: API C<41>-Footnote-114869863
Ref: API C<41>-Footnote-124869906
Ref: API C<41>-Footnote-134869974
Ref: API C<41>-Footnote-144870017
Ref: API C<41>-Footnote-154870085
Ref: API C<41>-Footnote-164870128
Ref: API C<41>-Footnote-174870194
Ref: API C<41>-Footnote-184870262
Ref: API C<41>-Footnote-194870305
Ref: API C<41>-Footnote-204870373
Ref: API C<41>-Footnote-214870416
Ref: API C<41>-Footnote-224870484
Ref: API C<41>-Footnote-234870527
Ref: API C<41>-Footnote-244870595
Ref: API C<41>-Footnote-254870638
Ref: API C<41>-Footnote-264870704
Ref: API C<41>-Footnote-274870770
Ref: API C<41>-Footnote-284870836
Ref: API C<41>-Footnote-294870902
Ref: API C<41>-Footnote-304870968
Ref: API C<41>-Footnote-314871034
Ref: API C<41>-Footnote-324871100
Ref: API C<41>-Footnote-334871168
Ref: API C<41>-Footnote-344871234
Ref: API C<41>-Footnote-354871300
Ref: API C<41>-Footnote-364871366
Node: Python 3 10 0 alpha 24871432
Ref: whatsnew/changelog python-3-10-0-alpha-24871559
Ref: 1bcc4871559
Node: Segurança<33>4871949
Ref: whatsnew/changelog id3954872053
Ref: 1bcd4872053
Ref: Segurança<33>-Footnote-14872532
Ref: Segurança<33>-Footnote-24872597
Node: Núcleo e embutidos<45>4872662
Ref: whatsnew/changelog id3964872789
Ref: 1bce4872789
Ref: Núcleo e embutidos<45>-Footnote-14876624
Ref: Núcleo e embutidos<45>-Footnote-24876689
Ref: Núcleo e embutidos<45>-Footnote-34876754
Ref: Núcleo e embutidos<45>-Footnote-44876819
Ref: Núcleo e embutidos<45>-Footnote-54876884
Ref: Núcleo e embutidos<45>-Footnote-64876949
Ref: Núcleo e embutidos<45>-Footnote-74877014
Ref: Núcleo e embutidos<45>-Footnote-84877079
Ref: Núcleo e embutidos<45>-Footnote-94877144
Ref: Núcleo e embutidos<45>-Footnote-104877209
Ref: Núcleo e embutidos<45>-Footnote-114877275
Ref: Núcleo e embutidos<45>-Footnote-124877341
Ref: Núcleo e embutidos<45>-Footnote-134877407
Ref: Núcleo e embutidos<45>-Footnote-144877473
Ref: Núcleo e embutidos<45>-Footnote-154877539
Ref: Núcleo e embutidos<45>-Footnote-164877605
Ref: Núcleo e embutidos<45>-Footnote-174877671
Ref: Núcleo e embutidos<45>-Footnote-184877737
Ref: Núcleo e embutidos<45>-Footnote-194877803
Ref: Núcleo e embutidos<45>-Footnote-204877869
Ref: Núcleo e embutidos<45>-Footnote-214877935
Node: Biblioteca<46>4877978
Ref: whatsnew/changelog id3974878109
Ref: 1bd14878109
Ref: Biblioteca<46>-Footnote-14885154
Ref: Biblioteca<46>-Footnote-24885219
Ref: Biblioteca<46>-Footnote-34885284
Ref: Biblioteca<46>-Footnote-44885349
Ref: Biblioteca<46>-Footnote-54885414
Ref: Biblioteca<46>-Footnote-64885479
Ref: Biblioteca<46>-Footnote-74885544
Ref: Biblioteca<46>-Footnote-84885586
Ref: Biblioteca<46>-Footnote-94885651
Ref: Biblioteca<46>-Footnote-104885716
Ref: Biblioteca<46>-Footnote-114885782
Ref: Biblioteca<46>-Footnote-124885848
Ref: Biblioteca<46>-Footnote-134885914
Ref: Biblioteca<46>-Footnote-144885980
Ref: Biblioteca<46>-Footnote-154886046
Ref: Biblioteca<46>-Footnote-164886112
Ref: Biblioteca<46>-Footnote-174886178
Ref: Biblioteca<46>-Footnote-184886244
Ref: Biblioteca<46>-Footnote-194886310
Ref: Biblioteca<46>-Footnote-204886376
Ref: Biblioteca<46>-Footnote-214886442
Ref: Biblioteca<46>-Footnote-224886508
Ref: Biblioteca<46>-Footnote-234886574
Ref: Biblioteca<46>-Footnote-244886640
Ref: Biblioteca<46>-Footnote-254886706
Ref: Biblioteca<46>-Footnote-264886749
Ref: Biblioteca<46>-Footnote-274886815
Ref: Biblioteca<46>-Footnote-284886881
Ref: Biblioteca<46>-Footnote-294886947
Ref: Biblioteca<46>-Footnote-304887013
Ref: Biblioteca<46>-Footnote-314887079
Ref: Biblioteca<46>-Footnote-324887145
Ref: Biblioteca<46>-Footnote-334887211
Ref: Biblioteca<46>-Footnote-344887277
Ref: Biblioteca<46>-Footnote-354887343
Ref: Biblioteca<46>-Footnote-364887409
Ref: Biblioteca<46>-Footnote-374887474
Ref: Biblioteca<46>-Footnote-384887540
Ref: Biblioteca<46>-Footnote-394887606
Ref: Biblioteca<46>-Footnote-404887672
Ref: Biblioteca<46>-Footnote-414887738
Node: Documentação<40>4887804
Ref: whatsnew/changelog id3984887922
Ref: 1bd44887922
Ref: Documentação<40>-Footnote-14888772
Ref: Documentação<40>-Footnote-24888837
Ref: Documentação<40>-Footnote-34888902
Ref: Documentação<40>-Footnote-44888967
Ref: Documentação<40>-Footnote-54889032
Ref: Documentação<40>-Footnote-64889097
Node: Testes<41>4889162
Ref: whatsnew/changelog id3994889282
Ref: 1bd74889282
Ref: Testes<41>-Footnote-14889921
Ref: Testes<41>-Footnote-24889986
Ref: Testes<41>-Footnote-34890051
Ref: Testes<41>-Footnote-44890116
Node: Construção<44>4890181
Ref: whatsnew/changelog id4004890294
Ref: 1bd84890294
Ref: Construção<44>-Footnote-14890570
Node: Windows<40>4890635
Ref: whatsnew/changelog id4014890747
Ref: 1bd94890747
Ref: Windows<40>-Footnote-14891223
Ref: Windows<40>-Footnote-24891288
Ref: Windows<40>-Footnote-34891353
Ref: Windows<40>-Footnote-44891418
Ref: Windows<40>-Footnote-54891483
Node: macOS<32>4891548
Ref: whatsnew/changelog id4024891652
Ref: 1bda4891652
Ref: macOS<32>-Footnote-14891802
Node: IDLE<24>4891867
Ref: whatsnew/changelog id4034891969
Ref: 1bdb4891969
Ref: IDLE<24>-Footnote-14892582
Ref: IDLE<24>-Footnote-24892647
Ref: IDLE<24>-Footnote-34892712
Node: API C<42>4892777
Ref: whatsnew/changelog id4044892861
Ref: 1bdc4892861
Ref: API C<42>-Footnote-14894196
Ref: API C<42>-Footnote-24894261
Ref: API C<42>-Footnote-34894326
Ref: API C<42>-Footnote-44894391
Ref: API C<42>-Footnote-54894456
Ref: API C<42>-Footnote-64894521
Ref: API C<42>-Footnote-74894586
Ref: API C<42>-Footnote-84894651
Node: Python 3 10 0 alpha 14894716
Ref: whatsnew/changelog python-3-10-0-alpha-14894841
Ref: 1bde4894841
Node: Segurança<34>4895231
Ref: whatsnew/changelog id4054895335
Ref: 1bdf4895335
Ref: Segurança<34>-Footnote-14896241
Ref: Segurança<34>-Footnote-24896306
Ref: Segurança<34>-Footnote-34896371
Ref: Segurança<34>-Footnote-44896427
Ref: Segurança<34>-Footnote-54896492
Ref: Segurança<34>-Footnote-64896557
Ref: Segurança<34>-Footnote-74896613
Ref: Segurança<34>-Footnote-84896678
Node: Núcleo e embutidos<46>4896743
Ref: whatsnew/changelog id4064896870
Ref: 1be04896870
Ref: Núcleo e embutidos<46>-Footnote-14912409
Ref: Núcleo e embutidos<46>-Footnote-24912474
Ref: Núcleo e embutidos<46>-Footnote-34912539
Ref: Núcleo e embutidos<46>-Footnote-44912581
Ref: Núcleo e embutidos<46>-Footnote-54912646
Ref: Núcleo e embutidos<46>-Footnote-64912711
Ref: Núcleo e embutidos<46>-Footnote-74912753
Ref: Núcleo e embutidos<46>-Footnote-84912820
Ref: Núcleo e embutidos<46>-Footnote-94912862
Ref: Núcleo e embutidos<46>-Footnote-104912927
Ref: Núcleo e embutidos<46>-Footnote-114912993
Ref: Núcleo e embutidos<46>-Footnote-124913061
Ref: Núcleo e embutidos<46>-Footnote-134913104
Ref: Núcleo e embutidos<46>-Footnote-144913172
Ref: Núcleo e embutidos<46>-Footnote-154913215
Ref: Núcleo e embutidos<46>-Footnote-164913283
Ref: Núcleo e embutidos<46>-Footnote-174913326
Ref: Núcleo e embutidos<46>-Footnote-184913394
Ref: Núcleo e embutidos<46>-Footnote-194913437
Ref: Núcleo e embutidos<46>-Footnote-204913505
Ref: Núcleo e embutidos<46>-Footnote-214913571
Ref: Núcleo e embutidos<46>-Footnote-224913639
Ref: Núcleo e embutidos<46>-Footnote-234913682
Ref: Núcleo e embutidos<46>-Footnote-244913750
Ref: Núcleo e embutidos<46>-Footnote-254913793
Ref: Núcleo e embutidos<46>-Footnote-264913861
Ref: Núcleo e embutidos<46>-Footnote-274913904
Ref: Núcleo e embutidos<46>-Footnote-284913970
Ref: Núcleo e embutidos<46>-Footnote-294914036
Ref: Núcleo e embutidos<46>-Footnote-304914102
Ref: Núcleo e embutidos<46>-Footnote-314914168
Ref: Núcleo e embutidos<46>-Footnote-324914236
Ref: Núcleo e embutidos<46>-Footnote-334914279
Ref: Núcleo e embutidos<46>-Footnote-344914345
Ref: Núcleo e embutidos<46>-Footnote-354914411
Ref: Núcleo e embutidos<46>-Footnote-364914479
Ref: Núcleo e embutidos<46>-Footnote-374914547
Ref: Núcleo e embutidos<46>-Footnote-384914590
Ref: Núcleo e embutidos<46>-Footnote-394914656
Ref: Núcleo e embutidos<46>-Footnote-404914722
Ref: Núcleo e embutidos<46>-Footnote-414914788
Ref: Núcleo e embutidos<46>-Footnote-424914856
Ref: Núcleo e embutidos<46>-Footnote-434914899
Ref: Núcleo e embutidos<46>-Footnote-444914965
Ref: Núcleo e embutidos<46>-Footnote-454915031
Ref: Núcleo e embutidos<46>-Footnote-464915097
Ref: Núcleo e embutidos<46>-Footnote-474915163
Ref: Núcleo e embutidos<46>-Footnote-484915229
Ref: Núcleo e embutidos<46>-Footnote-494915295
Ref: Núcleo e embutidos<46>-Footnote-504915361
Ref: Núcleo e embutidos<46>-Footnote-514915427
Ref: Núcleo e embutidos<46>-Footnote-524915493
Ref: Núcleo e embutidos<46>-Footnote-534915559
Ref: Núcleo e embutidos<46>-Footnote-544915627
Ref: Núcleo e embutidos<46>-Footnote-554915695
Ref: Núcleo e embutidos<46>-Footnote-564915761
Ref: Núcleo e embutidos<46>-Footnote-574915827
Ref: Núcleo e embutidos<46>-Footnote-584915895
Ref: Núcleo e embutidos<46>-Footnote-594915963
Ref: Núcleo e embutidos<46>-Footnote-604916029
Ref: Núcleo e embutidos<46>-Footnote-614916095
Ref: Núcleo e embutidos<46>-Footnote-624916161
Ref: Núcleo e embutidos<46>-Footnote-634916227
Ref: Núcleo e embutidos<46>-Footnote-644916293
Ref: Núcleo e embutidos<46>-Footnote-654916359
Ref: Núcleo e embutidos<46>-Footnote-664916425
Ref: Núcleo e embutidos<46>-Footnote-674916491
Ref: Núcleo e embutidos<46>-Footnote-684916557
Ref: Núcleo e embutidos<46>-Footnote-694916623
Ref: Núcleo e embutidos<46>-Footnote-704916689
Ref: Núcleo e embutidos<46>-Footnote-714916755
Ref: Núcleo e embutidos<46>-Footnote-724916821
Ref: Núcleo e embutidos<46>-Footnote-734916887
Ref: Núcleo e embutidos<46>-Footnote-744916953
Ref: Núcleo e embutidos<46>-Footnote-754917019
Ref: Núcleo e embutidos<46>-Footnote-764917062
Ref: Núcleo e embutidos<46>-Footnote-774917130
Ref: Núcleo e embutidos<46>-Footnote-784917196
Ref: Núcleo e embutidos<46>-Footnote-794917262
Ref: Núcleo e embutidos<46>-Footnote-804917330
Ref: Núcleo e embutidos<46>-Footnote-814917396
Ref: Núcleo e embutidos<46>-Footnote-824917462
Ref: Núcleo e embutidos<46>-Footnote-834917505
Ref: Núcleo e embutidos<46>-Footnote-844917571
Ref: Núcleo e embutidos<46>-Footnote-854917637
Ref: Núcleo e embutidos<46>-Footnote-864917703
Ref: Núcleo e embutidos<46>-Footnote-874917769
Ref: Núcleo e embutidos<46>-Footnote-884917835
Ref: Núcleo e embutidos<46>-Footnote-894917901
Ref: Núcleo e embutidos<46>-Footnote-904917967
Ref: Núcleo e embutidos<46>-Footnote-914918033
Ref: Núcleo e embutidos<46>-Footnote-924918099
Ref: Núcleo e embutidos<46>-Footnote-934918165
Ref: Núcleo e embutidos<46>-Footnote-944918231
Ref: Núcleo e embutidos<46>-Footnote-954918297
Ref: Núcleo e embutidos<46>-Footnote-964918365
Ref: Núcleo e embutidos<46>-Footnote-974918431
Ref: Núcleo e embutidos<46>-Footnote-984918497
Ref: Núcleo e embutidos<46>-Footnote-994918563
Ref: Núcleo e embutidos<46>-Footnote-1004918629
Ref: Núcleo e embutidos<46>-Footnote-1014918696
Ref: Núcleo e embutidos<46>-Footnote-1024918763
Ref: Núcleo e embutidos<46>-Footnote-1034918830
Ref: Núcleo e embutidos<46>-Footnote-1044918897
Ref: Núcleo e embutidos<46>-Footnote-1054918964
Ref: Núcleo e embutidos<46>-Footnote-1064919031
Ref: Núcleo e embutidos<46>-Footnote-1074919098
Ref: Núcleo e embutidos<46>-Footnote-1084919165
Ref: Núcleo e embutidos<46>-Footnote-1094919231
Ref: Núcleo e embutidos<46>-Footnote-1104919300
Ref: Núcleo e embutidos<46>-Footnote-1114919369
Ref: Núcleo e embutidos<46>-Footnote-1124919436
Ref: Núcleo e embutidos<46>-Footnote-1134919503
Ref: Núcleo e embutidos<46>-Footnote-1144919570
Ref: Núcleo e embutidos<46>-Footnote-1154919637
Node: Biblioteca<47>4919704
Ref: whatsnew/changelog id4074919835
Ref: 1be54919835
Ref: Biblioteca<47>-Footnote-14942023
Ref: Biblioteca<47>-Footnote-24942088
Ref: Biblioteca<47>-Footnote-34942153
Ref: Biblioteca<47>-Footnote-44942218
Ref: Biblioteca<47>-Footnote-54942283
Ref: Biblioteca<47>-Footnote-64942348
Ref: Biblioteca<47>-Footnote-74942413
Ref: Biblioteca<47>-Footnote-84942478
Ref: Biblioteca<47>-Footnote-94942543
Ref: Biblioteca<47>-Footnote-104942608
Ref: Biblioteca<47>-Footnote-114942674
Ref: Biblioteca<47>-Footnote-124942740
Ref: Biblioteca<47>-Footnote-134942806
Ref: Biblioteca<47>-Footnote-144942872
Ref: Biblioteca<47>-Footnote-154942938
Ref: Biblioteca<47>-Footnote-164943004
Ref: Biblioteca<47>-Footnote-174943057
Ref: Biblioteca<47>-Footnote-184943123
Ref: Biblioteca<47>-Footnote-194943189
Ref: Biblioteca<47>-Footnote-204943255
Ref: Biblioteca<47>-Footnote-214943323
Ref: Biblioteca<47>-Footnote-224943366
Ref: Biblioteca<47>-Footnote-234943434
Ref: Biblioteca<47>-Footnote-244943477
Ref: Biblioteca<47>-Footnote-254943543
Ref: Biblioteca<47>-Footnote-264943609
Ref: Biblioteca<47>-Footnote-274943675
Ref: Biblioteca<47>-Footnote-284943741
Ref: Biblioteca<47>-Footnote-294943807
Ref: Biblioteca<47>-Footnote-304943873
Ref: Biblioteca<47>-Footnote-314943939
Ref: Biblioteca<47>-Footnote-324944005
Ref: Biblioteca<47>-Footnote-334944071
Ref: Biblioteca<47>-Footnote-344944137
Ref: Biblioteca<47>-Footnote-354944203
Ref: Biblioteca<47>-Footnote-364944269
Ref: Biblioteca<47>-Footnote-374944335
Ref: Biblioteca<47>-Footnote-384944401
Ref: Biblioteca<47>-Footnote-394944467
Ref: Biblioteca<47>-Footnote-404944533
Ref: Biblioteca<47>-Footnote-414944599
Ref: Biblioteca<47>-Footnote-424944665
Ref: Biblioteca<47>-Footnote-434944731
Ref: Biblioteca<47>-Footnote-444944797
Ref: Biblioteca<47>-Footnote-454944863
Ref: Biblioteca<47>-Footnote-464944929
Ref: Biblioteca<47>-Footnote-474944995
Ref: Biblioteca<47>-Footnote-484945061
Ref: Biblioteca<47>-Footnote-494945127
Ref: Biblioteca<47>-Footnote-504945193
Ref: Biblioteca<47>-Footnote-514945259
Ref: Biblioteca<47>-Footnote-524945325
Ref: Biblioteca<47>-Footnote-534945391
Ref: Biblioteca<47>-Footnote-544945457
Ref: Biblioteca<47>-Footnote-554945523
Ref: Biblioteca<47>-Footnote-564945589
Ref: Biblioteca<47>-Footnote-574945655
Ref: Biblioteca<47>-Footnote-584945712
Ref: Biblioteca<47>-Footnote-594945778
Ref: Biblioteca<47>-Footnote-604945844
Ref: Biblioteca<47>-Footnote-614945910
Ref: Biblioteca<47>-Footnote-624945976
Ref: Biblioteca<47>-Footnote-634946042
Ref: Biblioteca<47>-Footnote-644946108
Ref: Biblioteca<47>-Footnote-654946174
Ref: Biblioteca<47>-Footnote-664946240
Ref: Biblioteca<47>-Footnote-674946306
Ref: Biblioteca<47>-Footnote-684946372
Ref: Biblioteca<47>-Footnote-694946438
Ref: Biblioteca<47>-Footnote-704946504
Ref: Biblioteca<47>-Footnote-714946570
Ref: Biblioteca<47>-Footnote-724946636
Ref: Biblioteca<47>-Footnote-734946702
Ref: Biblioteca<47>-Footnote-744946768
Ref: Biblioteca<47>-Footnote-754946834
Ref: Biblioteca<47>-Footnote-764946900
Ref: Biblioteca<47>-Footnote-774946966
Ref: Biblioteca<47>-Footnote-784947032
Ref: Biblioteca<47>-Footnote-794947098
Ref: Biblioteca<47>-Footnote-804947164
Ref: Biblioteca<47>-Footnote-814947230
Ref: Biblioteca<47>-Footnote-824947296
Ref: Biblioteca<47>-Footnote-834947362
Ref: Biblioteca<47>-Footnote-844947428
Ref: Biblioteca<47>-Footnote-854947494
Ref: Biblioteca<47>-Footnote-864947560
Ref: Biblioteca<47>-Footnote-874947626
Ref: Biblioteca<47>-Footnote-884947692
Ref: Biblioteca<47>-Footnote-894947758
Ref: Biblioteca<47>-Footnote-904947824
Ref: Biblioteca<47>-Footnote-914947890
Ref: Biblioteca<47>-Footnote-924947956
Ref: Biblioteca<47>-Footnote-934948022
Ref: Biblioteca<47>-Footnote-944948088
Ref: Biblioteca<47>-Footnote-954948154
Ref: Biblioteca<47>-Footnote-964948220
Ref: Biblioteca<47>-Footnote-974948286
Ref: Biblioteca<47>-Footnote-984948352
Ref: Biblioteca<47>-Footnote-994948418
Ref: Biblioteca<47>-Footnote-1004948484
Ref: Biblioteca<47>-Footnote-1014948551
Ref: Biblioteca<47>-Footnote-1024948618
Ref: Biblioteca<47>-Footnote-1034948685
Ref: Biblioteca<47>-Footnote-1044948752
Ref: Biblioteca<47>-Footnote-1054948819
Ref: Biblioteca<47>-Footnote-1064948886
Ref: Biblioteca<47>-Footnote-1074948953
Ref: Biblioteca<47>-Footnote-1084949020
Ref: Biblioteca<47>-Footnote-1094949087
Ref: Biblioteca<47>-Footnote-1104949154
Ref: Biblioteca<47>-Footnote-1114949221
Ref: Biblioteca<47>-Footnote-1124949288
Ref: Biblioteca<47>-Footnote-1134949355
Ref: Biblioteca<47>-Footnote-1144949422
Ref: Biblioteca<47>-Footnote-1154949489
Ref: Biblioteca<47>-Footnote-1164949556
Ref: Biblioteca<47>-Footnote-1174949623
Ref: Biblioteca<47>-Footnote-1184949690
Ref: Biblioteca<47>-Footnote-1194949757
Ref: Biblioteca<47>-Footnote-1204949824
Ref: Biblioteca<47>-Footnote-1214949890
Ref: Biblioteca<47>-Footnote-1224949957
Ref: Biblioteca<47>-Footnote-1234950024
Ref: Biblioteca<47>-Footnote-1244950091
Ref: Biblioteca<47>-Footnote-1254950158
Ref: Biblioteca<47>-Footnote-1264950202
Ref: Biblioteca<47>-Footnote-1274950269
Ref: Biblioteca<47>-Footnote-1284950336
Ref: Biblioteca<47>-Footnote-1294950403
Ref: Biblioteca<47>-Footnote-1304950470
Ref: Biblioteca<47>-Footnote-1314950537
Ref: Biblioteca<47>-Footnote-1324950604
Ref: Biblioteca<47>-Footnote-1334950671
Ref: Biblioteca<47>-Footnote-1344950738
Ref: Biblioteca<47>-Footnote-1354950805
Ref: Biblioteca<47>-Footnote-1364950872
Ref: Biblioteca<47>-Footnote-1374950939
Ref: Biblioteca<47>-Footnote-1384951006
Ref: Biblioteca<47>-Footnote-1394951073
Ref: Biblioteca<47>-Footnote-1404951140
Ref: Biblioteca<47>-Footnote-1414951207
Ref: Biblioteca<47>-Footnote-1424951274
Ref: Biblioteca<47>-Footnote-1434951341
Ref: Biblioteca<47>-Footnote-1444951408
Ref: Biblioteca<47>-Footnote-1454951475
Ref: Biblioteca<47>-Footnote-1464951542
Ref: Biblioteca<47>-Footnote-1474951609
Ref: Biblioteca<47>-Footnote-1484951676
Ref: Biblioteca<47>-Footnote-1494951743
Ref: Biblioteca<47>-Footnote-1504951810
Ref: Biblioteca<47>-Footnote-1514951877
Ref: Biblioteca<47>-Footnote-1524951944
Ref: Biblioteca<47>-Footnote-1534952011
Ref: Biblioteca<47>-Footnote-1544952078
Node: Documentação<41>4952145
Ref: whatsnew/changelog id4084952263
Ref: 1bec4952263
Ref: Documentação<41>-Footnote-14954028
Ref: Documentação<41>-Footnote-24954093
Ref: Documentação<41>-Footnote-34954135
Ref: Documentação<41>-Footnote-44954200
Ref: Documentação<41>-Footnote-54954265
Ref: Documentação<41>-Footnote-64954330
Ref: Documentação<41>-Footnote-74954395
Ref: Documentação<41>-Footnote-84954460
Ref: Documentação<41>-Footnote-94954525
Ref: Documentação<41>-Footnote-104954590
Ref: Documentação<41>-Footnote-114954656
Ref: Documentação<41>-Footnote-124954722
Ref: Documentação<41>-Footnote-134954788
Ref: Documentação<41>-Footnote-144954854
Node: Testes<42>4954920
Ref: whatsnew/changelog id4094955040
Ref: 1bee4955040
Ref: Testes<42>-Footnote-14957195
Ref: Testes<42>-Footnote-24957260
Ref: Testes<42>-Footnote-34957325
Ref: Testes<42>-Footnote-44957390
Ref: Testes<42>-Footnote-54957455
Ref: Testes<42>-Footnote-64957520
Ref: Testes<42>-Footnote-74957585
Ref: Testes<42>-Footnote-84957650
Ref: Testes<42>-Footnote-94957715
Ref: Testes<42>-Footnote-104957780
Ref: Testes<42>-Footnote-114957846
Ref: Testes<42>-Footnote-124957912
Ref: Testes<42>-Footnote-134957978
Ref: Testes<42>-Footnote-144958044
Ref: Testes<42>-Footnote-154958110
Ref: Testes<42>-Footnote-164958176
Node: Construção<45>4958242
Ref: whatsnew/changelog id4104958355
Ref: 1bf14958355
Ref: Construção<45>-Footnote-14959286
Ref: Construção<45>-Footnote-24959351
Ref: Construção<45>-Footnote-34959416
Ref: Construção<45>-Footnote-44959481
Ref: Construção<45>-Footnote-54959546
Ref: Construção<45>-Footnote-64959611
Node: Windows<41>4959676
Ref: whatsnew/changelog id4114959788
Ref: 1bf24959788
Ref: Windows<41>-Footnote-14961559
Ref: Windows<41>-Footnote-24961624
Ref: Windows<41>-Footnote-34961689
Ref: Windows<41>-Footnote-44961754
Ref: Windows<41>-Footnote-54961819
Ref: Windows<41>-Footnote-64961884
Ref: Windows<41>-Footnote-74961949
Ref: Windows<41>-Footnote-84962014
Ref: Windows<41>-Footnote-94962079
Ref: Windows<41>-Footnote-104962144
Ref: Windows<41>-Footnote-114962210
Ref: Windows<41>-Footnote-124962276
Ref: Windows<41>-Footnote-134962342
Ref: Windows<41>-Footnote-144962408
Node: macOS<33>4962474
Ref: whatsnew/changelog id4124962578
Ref: 1bf34962578
Ref: macOS<33>-Footnote-14963467
Ref: macOS<33>-Footnote-24963532
Ref: macOS<33>-Footnote-34963597
Ref: macOS<33>-Footnote-44963662
Ref: macOS<33>-Footnote-54963727
Ref: macOS<33>-Footnote-64963792
Node: IDLE<25>4963857
Ref: whatsnew/changelog id4134963959
Ref: 1bf44963959
Ref: IDLE<25>-Footnote-14965122
Ref: IDLE<25>-Footnote-24965187
Ref: IDLE<25>-Footnote-34965252
Ref: IDLE<25>-Footnote-44965317
Ref: IDLE<25>-Footnote-54965382
Ref: IDLE<25>-Footnote-64965447
Ref: IDLE<25>-Footnote-74965512
Ref: IDLE<25>-Footnote-84965577
Ref: IDLE<25>-Footnote-94965642
Ref: IDLE<25>-Footnote-104965707
Ref: IDLE<25>-Footnote-114965773
Node: API C<43>4965839
Ref: whatsnew/changelog id4144965923
Ref: 1bf54965923
Ref: API C<43>-Footnote-14971050
Ref: API C<43>-Footnote-24971115
Ref: API C<43>-Footnote-34971180
Ref: API C<43>-Footnote-44971245
Ref: API C<43>-Footnote-54971310
Ref: API C<43>-Footnote-64971375
Ref: API C<43>-Footnote-74971440
Ref: API C<43>-Footnote-84971505
Ref: API C<43>-Footnote-94971570
Ref: API C<43>-Footnote-104971635
Ref: API C<43>-Footnote-114971701
Ref: API C<43>-Footnote-124971767
Ref: API C<43>-Footnote-134971833
Ref: API C<43>-Footnote-144971899
Ref: API C<43>-Footnote-154971965
Ref: API C<43>-Footnote-164972031
Ref: API C<43>-Footnote-174972097
Ref: API C<43>-Footnote-184972163
Ref: API C<43>-Footnote-194972229
Ref: API C<43>-Footnote-204972295
Ref: API C<43>-Footnote-214972338
Ref: API C<43>-Footnote-224972404
Ref: API C<43>-Footnote-234972470
Ref: API C<43>-Footnote-244972536
Ref: API C<43>-Footnote-254972602
Ref: API C<43>-Footnote-264972668
Ref: API C<43>-Footnote-274972734
Ref: API C<43>-Footnote-284972800
Ref: API C<43>-Footnote-294972866
Node: Python 3 9 0 beta 14972932
Ref: whatsnew/changelog python-3-9-0-beta-14973056
Ref: 1bfa4973056
Node: Segurança<35>4973468
Ref: whatsnew/changelog id4154973570
Ref: 1bfb4973570
Ref: Segurança<35>-Footnote-14973777
Node: Núcleo e embutidos<47>4973842
Ref: whatsnew/changelog id4164973967
Ref: 1bfc4973967
Ref: Núcleo e embutidos<47>-Footnote-14976513
Ref: Núcleo e embutidos<47>-Footnote-24976578
Ref: Núcleo e embutidos<47>-Footnote-34976643
Ref: Núcleo e embutidos<47>-Footnote-44976708
Ref: Núcleo e embutidos<47>-Footnote-54976773
Ref: Núcleo e embutidos<47>-Footnote-64976838
Ref: Núcleo e embutidos<47>-Footnote-74976880
Ref: Núcleo e embutidos<47>-Footnote-84976945
Ref: Núcleo e embutidos<47>-Footnote-94977010
Ref: Núcleo e embutidos<47>-Footnote-104977077
Ref: Núcleo e embutidos<47>-Footnote-114977120
Ref: Núcleo e embutidos<47>-Footnote-124977186
Ref: Núcleo e embutidos<47>-Footnote-134977254
Ref: Núcleo e embutidos<47>-Footnote-144977297
Ref: Núcleo e embutidos<47>-Footnote-154977363
Ref: Núcleo e embutidos<47>-Footnote-164977429
Ref: Núcleo e embutidos<47>-Footnote-174977495
Ref: Núcleo e embutidos<47>-Footnote-184977561
Ref: Núcleo e embutidos<47>-Footnote-194977629
Ref: Núcleo e embutidos<47>-Footnote-204977672
Ref: Núcleo e embutidos<47>-Footnote-214977738
Ref: Núcleo e embutidos<47>-Footnote-224977804
Ref: Núcleo e embutidos<47>-Footnote-234977870
Ref: Núcleo e embutidos<47>-Footnote-244977936
Node: Biblioteca<48>4978002
Ref: whatsnew/changelog id4174978131
Ref: 1bfe4978131
Ref: Biblioteca<48>-Footnote-14985531
Ref: Biblioteca<48>-Footnote-24985596
Ref: Biblioteca<48>-Footnote-34985661
Ref: Biblioteca<48>-Footnote-44985726
Ref: Biblioteca<48>-Footnote-54985791
Ref: Biblioteca<48>-Footnote-64985856
Ref: Biblioteca<48>-Footnote-74985921
Ref: Biblioteca<48>-Footnote-84985986
Ref: Biblioteca<48>-Footnote-94986051
Ref: Biblioteca<48>-Footnote-104986116
Ref: Biblioteca<48>-Footnote-114986182
Ref: Biblioteca<48>-Footnote-124986248
Ref: Biblioteca<48>-Footnote-134986314
Ref: Biblioteca<48>-Footnote-144986380
Ref: Biblioteca<48>-Footnote-154986446
Ref: Biblioteca<48>-Footnote-164986489
Ref: Biblioteca<48>-Footnote-174986555
Ref: Biblioteca<48>-Footnote-184986621
Ref: Biblioteca<48>-Footnote-194986687
Ref: Biblioteca<48>-Footnote-204986753
Ref: Biblioteca<48>-Footnote-214986819
Ref: Biblioteca<48>-Footnote-224986885
Ref: Biblioteca<48>-Footnote-234986951
Ref: Biblioteca<48>-Footnote-244987017
Ref: Biblioteca<48>-Footnote-254987083
Ref: Biblioteca<48>-Footnote-264987149
Ref: Biblioteca<48>-Footnote-274987215
Ref: Biblioteca<48>-Footnote-284987281
Ref: Biblioteca<48>-Footnote-294987347
Ref: Biblioteca<48>-Footnote-304987413
Ref: Biblioteca<48>-Footnote-314987479
Ref: Biblioteca<48>-Footnote-324987545
Ref: Biblioteca<48>-Footnote-334987611
Ref: Biblioteca<48>-Footnote-344987677
Ref: Biblioteca<48>-Footnote-354987743
Ref: Biblioteca<48>-Footnote-364987809
Ref: Biblioteca<48>-Footnote-374987875
Ref: Biblioteca<48>-Footnote-384987941
Ref: Biblioteca<48>-Footnote-394988007
Ref: Biblioteca<48>-Footnote-404988073
Ref: Biblioteca<48>-Footnote-414988139
Ref: Biblioteca<48>-Footnote-424988205
Ref: Biblioteca<48>-Footnote-434988271
Ref: Biblioteca<48>-Footnote-444988337
Ref: Biblioteca<48>-Footnote-454988403
Ref: Biblioteca<48>-Footnote-464988469
Ref: Biblioteca<48>-Footnote-474988535
Ref: Biblioteca<48>-Footnote-484988601
Ref: Biblioteca<48>-Footnote-494988667
Ref: Biblioteca<48>-Footnote-504988733
Node: Documentação<42>4988799
Ref: whatsnew/changelog id4184988915
Ref: 1c034988915
Ref: Documentação<42>-Footnote-14989584
Ref: Documentação<42>-Footnote-24989649
Ref: Documentação<42>-Footnote-34989714
Ref: Documentação<42>-Footnote-44989779
Ref: Documentação<42>-Footnote-54989844
Node: Testes<43>4989909
Ref: whatsnew/changelog id4194990027
Ref: 1c044990027
Ref: Testes<43>-Footnote-14990384
Ref: Testes<43>-Footnote-24990449
Node: Construção<46>4990514
Ref: whatsnew/changelog id4204990625
Ref: 1c054990625
Ref: Construção<46>-Footnote-14990977
Ref: Construção<46>-Footnote-24991042
Node: Windows<42>4991107
Ref: whatsnew/changelog id4214991217
Ref: 1c064991217
Ref: Windows<42>-Footnote-14991672
Ref: Windows<42>-Footnote-24991737
Ref: Windows<42>-Footnote-34991802
Node: macOS<34>4991867
Ref: whatsnew/changelog id4224991982
Ref: 1c074991982
Ref: macOS<34>-Footnote-14992605
Ref: macOS<34>-Footnote-24992670
Node: Ferramentas/Demos<29>4992735
Ref: whatsnew/changelog id4234992848
Ref: 1c084992848
Ref: Ferramentas/Demos<29>-Footnote-14993345
Ref: Ferramentas/Demos<29>-Footnote-24993410
Ref: Ferramentas/Demos<29>-Footnote-34993475
Node: API C<44>4993540
Ref: whatsnew/changelog id4244993635
Ref: 1c094993635
Ref: API C<44>-Footnote-14995661
Ref: API C<44>-Footnote-24995726
Ref: API C<44>-Footnote-34995791
Ref: API C<44>-Footnote-44995856
Ref: API C<44>-Footnote-54995921
Ref: API C<44>-Footnote-64995986
Ref: API C<44>-Footnote-74996051
Ref: API C<44>-Footnote-84996116
Ref: API C<44>-Footnote-94996181
Ref: API C<44>-Footnote-104996246
Ref: API C<44>-Footnote-114996312
Node: Python 3 9 0 alpha 64996355
Ref: whatsnew/changelog python-3-9-0-alpha-64996478
Ref: 1c0a4996478
Node: Segurança<36>4996910
Ref: whatsnew/changelog id4254997013
Ref: 1c0b4997013
Ref: Segurança<36>-Footnote-14997664
Ref: Segurança<36>-Footnote-24997729
Ref: Segurança<36>-Footnote-34997794
Ref: Segurança<36>-Footnote-44997859
Node: Núcleo e embutidos<48>4997914
Ref: whatsnew/changelog id4264998040
Ref: 1c0c4998040
Ref: Núcleo e embutidos<48>-Footnote-15001816
Ref: Núcleo e embutidos<48>-Footnote-25001881
Ref: Núcleo e embutidos<48>-Footnote-35001946
Ref: Núcleo e embutidos<48>-Footnote-45002011
Ref: Núcleo e embutidos<48>-Footnote-55002076
Ref: Núcleo e embutidos<48>-Footnote-65002141
Ref: Núcleo e embutidos<48>-Footnote-75002206
Ref: Núcleo e embutidos<48>-Footnote-85002271
Ref: Núcleo e embutidos<48>-Footnote-95002336
Ref: Núcleo e embutidos<48>-Footnote-105002401
Ref: Núcleo e embutidos<48>-Footnote-115002444
Ref: Núcleo e embutidos<48>-Footnote-125002510
Ref: Núcleo e embutidos<48>-Footnote-135002578
Ref: Núcleo e embutidos<48>-Footnote-145002621
Ref: Núcleo e embutidos<48>-Footnote-155002689
Ref: Núcleo e embutidos<48>-Footnote-165002732
Ref: Núcleo e embutidos<48>-Footnote-175002800
Ref: Núcleo e embutidos<48>-Footnote-185002843
Ref: Núcleo e embutidos<48>-Footnote-195002909
Ref: Núcleo e embutidos<48>-Footnote-205002975
Ref: Núcleo e embutidos<48>-Footnote-215003043
Ref: Núcleo e embutidos<48>-Footnote-225003111
Ref: Núcleo e embutidos<48>-Footnote-235003177
Ref: Núcleo e embutidos<48>-Footnote-245003245
Ref: Núcleo e embutidos<48>-Footnote-255003288
Ref: Núcleo e embutidos<48>-Footnote-265003356
Ref: Núcleo e embutidos<48>-Footnote-275003399
Ref: Núcleo e embutidos<48>-Footnote-285003465
Ref: Núcleo e embutidos<48>-Footnote-295003531
Ref: Núcleo e embutidos<48>-Footnote-305003574
Ref: Núcleo e embutidos<48>-Footnote-315003640
Ref: Núcleo e embutidos<48>-Footnote-325003706
Ref: Núcleo e embutidos<48>-Footnote-335003772
Node: Biblioteca<49>5003815
Ref: whatsnew/changelog id4275003945
Ref: 1c0d5003945
Ref: Biblioteca<49>-Footnote-15014219
Ref: Biblioteca<49>-Footnote-25014284
Ref: Biblioteca<49>-Footnote-35014349
Ref: Biblioteca<49>-Footnote-45014414
Ref: Biblioteca<49>-Footnote-55014479
Ref: Biblioteca<49>-Footnote-65014544
Ref: Biblioteca<49>-Footnote-75014586
Ref: Biblioteca<49>-Footnote-85014651
Ref: Biblioteca<49>-Footnote-95014716
Ref: Biblioteca<49>-Footnote-105014781
Ref: Biblioteca<49>-Footnote-115014847
Ref: Biblioteca<49>-Footnote-125014913
Ref: Biblioteca<49>-Footnote-135014979
Ref: Biblioteca<49>-Footnote-145015045
Ref: Biblioteca<49>-Footnote-155015111
Ref: Biblioteca<49>-Footnote-165015177
Ref: Biblioteca<49>-Footnote-175015243
Ref: Biblioteca<49>-Footnote-185015309
Ref: Biblioteca<49>-Footnote-195015375
Ref: Biblioteca<49>-Footnote-205015441
Ref: Biblioteca<49>-Footnote-215015507
Ref: Biblioteca<49>-Footnote-225015573
Ref: Biblioteca<49>-Footnote-235015639
Ref: Biblioteca<49>-Footnote-245015705
Ref: Biblioteca<49>-Footnote-255015771
Ref: Biblioteca<49>-Footnote-265015837
Ref: Biblioteca<49>-Footnote-275015903
Ref: Biblioteca<49>-Footnote-285015969
Ref: Biblioteca<49>-Footnote-295016035
Ref: Biblioteca<49>-Footnote-305016101
Ref: Biblioteca<49>-Footnote-315016167
Ref: Biblioteca<49>-Footnote-325016233
Ref: Biblioteca<49>-Footnote-335016299
Ref: Biblioteca<49>-Footnote-345016365
Ref: Biblioteca<49>-Footnote-355016431
Ref: Biblioteca<49>-Footnote-365016497
Ref: Biblioteca<49>-Footnote-375016563
Ref: Biblioteca<49>-Footnote-385016629
Ref: Biblioteca<49>-Footnote-395016695
Ref: Biblioteca<49>-Footnote-405016761
Ref: Biblioteca<49>-Footnote-415016827
Ref: Biblioteca<49>-Footnote-425016893
Ref: Biblioteca<49>-Footnote-435016959
Ref: Biblioteca<49>-Footnote-445017025
Ref: Biblioteca<49>-Footnote-455017091
Ref: Biblioteca<49>-Footnote-465017157
Ref: Biblioteca<49>-Footnote-475017223
Ref: Biblioteca<49>-Footnote-485017289
Ref: Biblioteca<49>-Footnote-495017332
Ref: Biblioteca<49>-Footnote-505017398
Ref: Biblioteca<49>-Footnote-515017441
Ref: Biblioteca<49>-Footnote-525017507
Ref: Biblioteca<49>-Footnote-535017573
Ref: Biblioteca<49>-Footnote-545017639
Ref: Biblioteca<49>-Footnote-555017682
Ref: Biblioteca<49>-Footnote-565017748
Ref: Biblioteca<49>-Footnote-575017814
Ref: Biblioteca<49>-Footnote-585017880
Ref: Biblioteca<49>-Footnote-595017946
Ref: Biblioteca<49>-Footnote-605018012
Ref: Biblioteca<49>-Footnote-615018078
Node: Documentação<43>5018144
Ref: whatsnew/changelog id4285018261
Ref: 1c105018261
Ref: Documentação<43>-Footnote-15018841
Ref: Documentação<43>-Footnote-25018906
Ref: Documentação<43>-Footnote-35018971
Ref: Documentação<43>-Footnote-45019036
Node: Testes<44>5019101
Ref: whatsnew/changelog id4295019220
Ref: 1c135019220
Ref: Testes<44>-Footnote-15020303
Ref: Testes<44>-Footnote-25020368
Ref: Testes<44>-Footnote-35020433
Ref: Testes<44>-Footnote-45020498
Ref: Testes<44>-Footnote-55020563
Ref: Testes<44>-Footnote-65020628
Ref: Testes<44>-Footnote-75020693
Ref: Testes<44>-Footnote-85020752
Ref: Testes<44>-Footnote-95020817
Node: Construção<47>5020881
Ref: whatsnew/changelog id4305020993
Ref: 1c155020993
Ref: Construção<47>-Footnote-15021426
Ref: Construção<47>-Footnote-25021491
Ref: Construção<47>-Footnote-35021556
Node: Windows<43>5021621
Ref: whatsnew/changelog id4315021732
Ref: 1c165021732
Ref: Windows<43>-Footnote-15021945
Ref: Windows<43>-Footnote-25022010
Node: macOS<35>5022074
Ref: whatsnew/changelog id4325022177
Ref: 1c175022177
Ref: macOS<35>-Footnote-15022633
Ref: macOS<35>-Footnote-25022698
Node: IDLE<26>5022763
Ref: whatsnew/changelog id4335022876
Ref: 1c185022876
Ref: IDLE<26>-Footnote-15023220
Ref: IDLE<26>-Footnote-25023285
Node: Ferramentas/Demos<30>5023350
Ref: whatsnew/changelog id4345023463
Ref: 1c195023463
Ref: Ferramentas/Demos<30>-Footnote-15023942
Ref: Ferramentas/Demos<30>-Footnote-25024007
Ref: Ferramentas/Demos<30>-Footnote-35024072
Node: API C<45>5024137
Ref: whatsnew/changelog id4355024233
Ref: 1c1a5024233
Ref: API C<45>-Footnote-15026208
Ref: API C<45>-Footnote-25026273
Ref: API C<45>-Footnote-35026338
Ref: API C<45>-Footnote-45026403
Ref: API C<45>-Footnote-55026468
Ref: API C<45>-Footnote-65026533
Ref: API C<45>-Footnote-75026598
Ref: API C<45>-Footnote-85026663
Ref: API C<45>-Footnote-95026728
Node: Python 3 9 0 alpha 55026793
Ref: whatsnew/changelog python-3-9-0-alpha-55026917
Ref: 1c1b5026917
Node: Segurança<37>5027349
Ref: whatsnew/changelog id4365027452
Ref: 1c1c5027452
Ref: Segurança<37>-Footnote-15027739
Ref: Segurança<37>-Footnote-25027804
Node: Núcleo e embutidos<49>5027860
Ref: whatsnew/changelog id4375027986
Ref: 1c1d5027986
Ref: Núcleo e embutidos<49>-Footnote-15033893
Ref: Núcleo e embutidos<49>-Footnote-25033958
Ref: Núcleo e embutidos<49>-Footnote-35034025
Ref: Núcleo e embutidos<49>-Footnote-45034067
Ref: Núcleo e embutidos<49>-Footnote-55034134
Ref: Núcleo e embutidos<49>-Footnote-65034176
Ref: Núcleo e embutidos<49>-Footnote-75034241
Ref: Núcleo e embutidos<49>-Footnote-85034306
Ref: Núcleo e embutidos<49>-Footnote-95034373
Ref: Núcleo e embutidos<49>-Footnote-105034440
Ref: Núcleo e embutidos<49>-Footnote-115034483
Ref: Núcleo e embutidos<49>-Footnote-125034549
Ref: Núcleo e embutidos<49>-Footnote-135034592
Ref: Núcleo e embutidos<49>-Footnote-145034658
Ref: Núcleo e embutidos<49>-Footnote-155034724
Ref: Núcleo e embutidos<49>-Footnote-165034767
Ref: Núcleo e embutidos<49>-Footnote-175034835
Ref: Núcleo e embutidos<49>-Footnote-185034878
Ref: Núcleo e embutidos<49>-Footnote-195034944
Ref: Núcleo e embutidos<49>-Footnote-205035010
Ref: Núcleo e embutidos<49>-Footnote-215035076
Ref: Núcleo e embutidos<49>-Footnote-225035142
Ref: Núcleo e embutidos<49>-Footnote-235035185
Ref: Núcleo e embutidos<49>-Footnote-245035251
Ref: Núcleo e embutidos<49>-Footnote-255035317
Ref: Núcleo e embutidos<49>-Footnote-265035383
Ref: Núcleo e embutidos<49>-Footnote-275035449
Ref: Núcleo e embutidos<49>-Footnote-285035515
Ref: Núcleo e embutidos<49>-Footnote-295035581
Ref: Núcleo e embutidos<49>-Footnote-305035647
Ref: Núcleo e embutidos<49>-Footnote-315035713
Ref: Núcleo e embutidos<49>-Footnote-325035781
Ref: Núcleo e embutidos<49>-Footnote-335035824
Ref: Núcleo e embutidos<49>-Footnote-345035890
Ref: Núcleo e embutidos<49>-Footnote-355035933
Ref: Núcleo e embutidos<49>-Footnote-365035999
Ref: Núcleo e embutidos<49>-Footnote-375036067
Ref: Núcleo e embutidos<49>-Footnote-385036110
Ref: Núcleo e embutidos<49>-Footnote-395036176
Ref: Núcleo e embutidos<49>-Footnote-405036242
Ref: Núcleo e embutidos<49>-Footnote-415036308
Ref: Núcleo e embutidos<49>-Footnote-425036374
Node: Biblioteca<50>5036440
Ref: whatsnew/changelog id4385036570
Ref: 1c1e5036570
Ref: Biblioteca<50>-Footnote-15045747
Ref: Biblioteca<50>-Footnote-25045812
Ref: Biblioteca<50>-Footnote-35045877
Ref: Biblioteca<50>-Footnote-45045942
Ref: Biblioteca<50>-Footnote-55046007
Ref: Biblioteca<50>-Footnote-65046072
Ref: Biblioteca<50>-Footnote-75046137
Ref: Biblioteca<50>-Footnote-85046202
Ref: Biblioteca<50>-Footnote-95046267
Ref: Biblioteca<50>-Footnote-105046332
Ref: Biblioteca<50>-Footnote-115046398
Ref: Biblioteca<50>-Footnote-125046464
Ref: Biblioteca<50>-Footnote-135046507
Ref: Biblioteca<50>-Footnote-145046573
Ref: Biblioteca<50>-Footnote-155046639
Ref: Biblioteca<50>-Footnote-165046705
Ref: Biblioteca<50>-Footnote-175046748
Ref: Biblioteca<50>-Footnote-185046814
Ref: Biblioteca<50>-Footnote-195046880
Ref: Biblioteca<50>-Footnote-205046946
Ref: Biblioteca<50>-Footnote-215047012
Ref: Biblioteca<50>-Footnote-225047078
Ref: Biblioteca<50>-Footnote-235047144
Ref: Biblioteca<50>-Footnote-245047210
Ref: Biblioteca<50>-Footnote-255047276
Ref: Biblioteca<50>-Footnote-265047342
Ref: Biblioteca<50>-Footnote-275047408
Ref: Biblioteca<50>-Footnote-285047474
Ref: Biblioteca<50>-Footnote-295047540
Ref: Biblioteca<50>-Footnote-305047606
Ref: Biblioteca<50>-Footnote-315047672
Ref: Biblioteca<50>-Footnote-325047738
Ref: Biblioteca<50>-Footnote-335047781
Ref: Biblioteca<50>-Footnote-345047847
Ref: Biblioteca<50>-Footnote-355047913
Ref: Biblioteca<50>-Footnote-365047979
Ref: Biblioteca<50>-Footnote-375048045
Ref: Biblioteca<50>-Footnote-385048111
Ref: Biblioteca<50>-Footnote-395048177
Ref: Biblioteca<50>-Footnote-405048220
Ref: Biblioteca<50>-Footnote-415048286
Ref: Biblioteca<50>-Footnote-425048352
Ref: Biblioteca<50>-Footnote-435048418
Ref: Biblioteca<50>-Footnote-445048484
Ref: Biblioteca<50>-Footnote-455048550
Ref: Biblioteca<50>-Footnote-465048616
Ref: Biblioteca<50>-Footnote-475048682
Ref: Biblioteca<50>-Footnote-485048748
Ref: Biblioteca<50>-Footnote-495048814
Ref: Biblioteca<50>-Footnote-505048880
Ref: Biblioteca<50>-Footnote-515048946
Ref: Biblioteca<50>-Footnote-525049012
Ref: Biblioteca<50>-Footnote-535049078
Ref: Biblioteca<50>-Footnote-545049144
Node: Documentação<44>5049210
Ref: whatsnew/changelog id4395049327
Ref: 1c245049327
Ref: Documentação<44>-Footnote-15049970
Ref: Documentação<44>-Footnote-25050035
Ref: Documentação<44>-Footnote-35050077
Ref: Documentação<44>-Footnote-45050142
Ref: Documentação<44>-Footnote-55050207
Ref: Documentação<44>-Footnote-65050272
Ref: Documentação<44>-Footnote-75050337
Node: Testes<45>5050402
Ref: whatsnew/changelog id4405050521
Ref: 1c255050521
Ref: Testes<45>-Footnote-15051209
Ref: Testes<45>-Footnote-25051274
Ref: Testes<45>-Footnote-35051339
Ref: Testes<45>-Footnote-45051404
Node: Construção<48>5051469
Ref: whatsnew/changelog id4415051581
Ref: 1c265051581
Ref: Construção<48>-Footnote-15052468
Ref: Construção<48>-Footnote-25052533
Ref: Construção<48>-Footnote-35052598
Node: Windows<44>5052665
Ref: whatsnew/changelog id4425052776
Ref: 1c275052776
Ref: Windows<44>-Footnote-15053658
Ref: Windows<44>-Footnote-25053723
Ref: Windows<44>-Footnote-35053788
Ref: Windows<44>-Footnote-45053853
Ref: Windows<44>-Footnote-55053918
Ref: Windows<44>-Footnote-65053983
Node: macOS<36>5054048
Ref: whatsnew/changelog id4435054151
Ref: 1c285054151
Ref: macOS<36>-Footnote-15054281
Node: IDLE<27>5054346
Ref: whatsnew/changelog id4445054459
Ref: 1c295054459
Ref: IDLE<27>-Footnote-15055021
Ref: IDLE<27>-Footnote-25055086
Ref: IDLE<27>-Footnote-35055151
Ref: IDLE<27>-Footnote-45055216
Node: Ferramentas/Demos<31>5055281
Ref: whatsnew/changelog id4455055394
Ref: 1c2a5055394
Ref: Ferramentas/Demos<31>-Footnote-15055943
Ref: Ferramentas/Demos<31>-Footnote-25056008
Node: API C<46>5056073
Ref: whatsnew/changelog id4465056169
Ref: 1c2b5056169
Ref: API C<46>-Footnote-15059731
Ref: API C<46>-Footnote-25059796
Ref: API C<46>-Footnote-35059861
Ref: API C<46>-Footnote-45059926
Ref: API C<46>-Footnote-55059991
Ref: API C<46>-Footnote-65060056
Ref: API C<46>-Footnote-75060121
Ref: API C<46>-Footnote-85060186
Ref: API C<46>-Footnote-95060251
Ref: API C<46>-Footnote-105060316
Ref: API C<46>-Footnote-115060382
Ref: API C<46>-Footnote-125060448
Ref: API C<46>-Footnote-135060514
Ref: API C<46>-Footnote-145060580
Ref: API C<46>-Footnote-155060646
Ref: API C<46>-Footnote-165060712
Ref: API C<46>-Footnote-175060778
Node: Python 3 9 0 alpha 45060844
Ref: whatsnew/changelog python-3-9-0-alpha-45060968
Ref: 1c305060968
Node: Segurança<38>5061336
Ref: whatsnew/changelog id4475061439
Ref: 1c315061439
Ref: Segurança<38>-Footnote-15061853
Ref: Segurança<38>-Footnote-25061918
Ref: Segurança<38>-Footnote-35061983
Node: Núcleo e embutidos<50>5062048
Ref: whatsnew/changelog id4485062174
Ref: 1c325062174
Ref: Núcleo e embutidos<50>-Footnote-15065590
Ref: Núcleo e embutidos<50>-Footnote-25065655
Ref: Núcleo e embutidos<50>-Footnote-35065720
Ref: Núcleo e embutidos<50>-Footnote-45065785
Ref: Núcleo e embutidos<50>-Footnote-55065850
Ref: Núcleo e embutidos<50>-Footnote-65065915
Ref: Núcleo e embutidos<50>-Footnote-75065980
Ref: Núcleo e embutidos<50>-Footnote-85066045
Ref: Núcleo e embutidos<50>-Footnote-95066112
Ref: Núcleo e embutidos<50>-Footnote-105066154
Ref: Núcleo e embutidos<50>-Footnote-115066222
Ref: Núcleo e embutidos<50>-Footnote-125066265
Ref: Núcleo e embutidos<50>-Footnote-135066331
Ref: Núcleo e embutidos<50>-Footnote-145066397
Ref: Núcleo e embutidos<50>-Footnote-155066463
Ref: Núcleo e embutidos<50>-Footnote-165066529
Ref: Núcleo e embutidos<50>-Footnote-175066595
Ref: Núcleo e embutidos<50>-Footnote-185066663
Ref: Núcleo e embutidos<50>-Footnote-195066706
Ref: Núcleo e embutidos<50>-Footnote-205066774
Ref: Núcleo e embutidos<50>-Footnote-215066817
Ref: Núcleo e embutidos<50>-Footnote-225066885
Ref: Núcleo e embutidos<50>-Footnote-235066928
Ref: Núcleo e embutidos<50>-Footnote-245066994
Ref: Núcleo e embutidos<50>-Footnote-255067060
Ref: Núcleo e embutidos<50>-Footnote-265067126
Ref: Núcleo e embutidos<50>-Footnote-275067192
Ref: Núcleo e embutidos<50>-Footnote-285067258
Ref: Núcleo e embutidos<50>-Footnote-295067324
Node: Biblioteca<51>5067390
Ref: whatsnew/changelog id4495067520
Ref: 1c355067520
Ref: Biblioteca<51>-Footnote-15073724
Ref: Biblioteca<51>-Footnote-25073789
Ref: Biblioteca<51>-Footnote-35073854
Ref: Biblioteca<51>-Footnote-45073919
Ref: Biblioteca<51>-Footnote-55073984
Ref: Biblioteca<51>-Footnote-65074049
Ref: Biblioteca<51>-Footnote-75074114
Ref: Biblioteca<51>-Footnote-85074179
Ref: Biblioteca<51>-Footnote-95074244
Ref: Biblioteca<51>-Footnote-105074309
Ref: Biblioteca<51>-Footnote-115074375
Ref: Biblioteca<51>-Footnote-125074441
Ref: Biblioteca<51>-Footnote-135074507
Ref: Biblioteca<51>-Footnote-145074573
Ref: Biblioteca<51>-Footnote-155074639
Ref: Biblioteca<51>-Footnote-165074705
Ref: Biblioteca<51>-Footnote-175074787
Ref: Biblioteca<51>-Footnote-185074853
Ref: Biblioteca<51>-Footnote-195074919
Ref: Biblioteca<51>-Footnote-205074985
Ref: Biblioteca<51>-Footnote-215075051
Ref: Biblioteca<51>-Footnote-225075117
Ref: Biblioteca<51>-Footnote-235075183
Ref: Biblioteca<51>-Footnote-245075249
Ref: Biblioteca<51>-Footnote-255075315
Ref: Biblioteca<51>-Footnote-265075381
Ref: Biblioteca<51>-Footnote-275075447
Ref: Biblioteca<51>-Footnote-285075490
Ref: Biblioteca<51>-Footnote-295075556
Ref: Biblioteca<51>-Footnote-305075622
Ref: Biblioteca<51>-Footnote-315075688
Ref: Biblioteca<51>-Footnote-325075754
Ref: Biblioteca<51>-Footnote-335075820
Ref: Biblioteca<51>-Footnote-345075886
Ref: Biblioteca<51>-Footnote-355075952
Ref: Biblioteca<51>-Footnote-365076018
Ref: Biblioteca<51>-Footnote-375076084
Ref: Biblioteca<51>-Footnote-385076150
Ref: Biblioteca<51>-Footnote-395076216
Node: Documentação<45>5076282
Ref: whatsnew/changelog id4505076399
Ref: 1c375076399
Ref: Documentação<45>-Footnote-15077440
Ref: Documentação<45>-Footnote-25077505
Ref: Documentação<45>-Footnote-35077570
Ref: Documentação<45>-Footnote-45077635
Ref: Documentação<45>-Footnote-55077700
Ref: Documentação<45>-Footnote-65077765
Ref: Documentação<45>-Footnote-75077830
Node: Testes<46>5077894
Ref: whatsnew/changelog id4515078013
Ref: 1c385078013
Ref: Testes<46>-Footnote-15078349
Ref: Testes<46>-Footnote-25078414
Node: Construção<49>5078479
Ref: whatsnew/changelog id4525078591
Ref: 1c395078591
Ref: Construção<49>-Footnote-15078733
Node: Windows<45>5078798
Ref: whatsnew/changelog id4535078908
Ref: 1c3a5078908
Ref: Windows<45>-Footnote-15079716
Ref: Windows<45>-Footnote-25079781
Ref: Windows<45>-Footnote-35079846
Ref: Windows<45>-Footnote-45079911
Ref: Windows<45>-Footnote-55079976
Ref: Windows<45>-Footnote-65080041
Node: IDLE<28>5080106
Ref: whatsnew/changelog id4545080209
Ref: 1c3b5080209
Ref: IDLE<28>-Footnote-15080756
Ref: IDLE<28>-Footnote-25080821
Ref: IDLE<28>-Footnote-35080886
Ref: IDLE<28>-Footnote-45080951
Ref: IDLE<28>-Footnote-55081016
Node: API C<47>5081081
Ref: whatsnew/changelog id4555081164
Ref: 1c3c5081164
Ref: API C<47>-Footnote-15083823
Ref: API C<47>-Footnote-25083888
Ref: API C<47>-Footnote-35083953
Ref: API C<47>-Footnote-45084018
Ref: API C<47>-Footnote-55084083
Ref: API C<47>-Footnote-65084148
Ref: API C<47>-Footnote-75084213
Ref: API C<47>-Footnote-85084278
Ref: API C<47>-Footnote-95084343
Ref: API C<47>-Footnote-105084408
Ref: API C<47>-Footnote-115084474
Ref: API C<47>-Footnote-125084540
Node: Python 3 9 0 alpha 35084606
Ref: whatsnew/changelog python-3-9-0-alpha-35084730
Ref: 1c415084730
Node: Núcleo e embutidos<51>5085022
Ref: whatsnew/changelog id4565085125
Ref: 1c425085125
Ref: Núcleo e embutidos<51>-Footnote-15089234
Ref: Núcleo e embutidos<51>-Footnote-25089299
Ref: Núcleo e embutidos<51>-Footnote-35089364
Ref: Núcleo e embutidos<51>-Footnote-45089429
Ref: Núcleo e embutidos<51>-Footnote-55089494
Ref: Núcleo e embutidos<51>-Footnote-65089559
Ref: Núcleo e embutidos<51>-Footnote-75089624
Ref: Núcleo e embutidos<51>-Footnote-85089689
Ref: Núcleo e embutidos<51>-Footnote-95089754
Ref: Núcleo e embutidos<51>-Footnote-105089819
Ref: Núcleo e embutidos<51>-Footnote-115089885
Ref: Núcleo e embutidos<51>-Footnote-125089953
Ref: Núcleo e embutidos<51>-Footnote-135089996
Ref: Núcleo e embutidos<51>-Footnote-145090062
Ref: Núcleo e embutidos<51>-Footnote-155090128
Ref: Núcleo e embutidos<51>-Footnote-165090194
Ref: Núcleo e embutidos<51>-Footnote-175090260
Ref: Núcleo e embutidos<51>-Footnote-185090326
Ref: Núcleo e embutidos<51>-Footnote-195090392
Ref: Núcleo e embutidos<51>-Footnote-205090458
Ref: Núcleo e embutidos<51>-Footnote-215090524
Ref: Núcleo e embutidos<51>-Footnote-225090590
Ref: Núcleo e embutidos<51>-Footnote-235090656
Ref: Núcleo e embutidos<51>-Footnote-245090722
Node: Biblioteca<52>5090788
Ref: whatsnew/changelog id4575090918
Ref: 1c465090918
Ref: Biblioteca<52>-Footnote-15100544
Ref: Biblioteca<52>-Footnote-25100609
Ref: Biblioteca<52>-Footnote-35100674
Ref: Biblioteca<52>-Footnote-45100739
Ref: Biblioteca<52>-Footnote-55100804
Ref: Biblioteca<52>-Footnote-65100869
Ref: Biblioteca<52>-Footnote-75100934
Ref: Biblioteca<52>-Footnote-85100999
Ref: Biblioteca<52>-Footnote-95101064
Ref: Biblioteca<52>-Footnote-105101129
Ref: Biblioteca<52>-Footnote-115101195
Ref: Biblioteca<52>-Footnote-125101261
Ref: Biblioteca<52>-Footnote-135101327
Ref: Biblioteca<52>-Footnote-145101393
Ref: Biblioteca<52>-Footnote-155101459
Ref: Biblioteca<52>-Footnote-165101525
Ref: Biblioteca<52>-Footnote-175101591
Ref: Biblioteca<52>-Footnote-185101657
Ref: Biblioteca<52>-Footnote-195101723
Ref: Biblioteca<52>-Footnote-205101789
Ref: Biblioteca<52>-Footnote-215101855
Ref: Biblioteca<52>-Footnote-225101921
Ref: Biblioteca<52>-Footnote-235101987
Ref: Biblioteca<52>-Footnote-245102053
Ref: Biblioteca<52>-Footnote-255102119
Ref: Biblioteca<52>-Footnote-265102185
Ref: Biblioteca<52>-Footnote-275102251
Ref: Biblioteca<52>-Footnote-285102317
Ref: Biblioteca<52>-Footnote-295102383
Ref: Biblioteca<52>-Footnote-305102449
Ref: Biblioteca<52>-Footnote-315102515
Ref: Biblioteca<52>-Footnote-325102581
Ref: Biblioteca<52>-Footnote-335102647
Ref: Biblioteca<52>-Footnote-345102713
Ref: Biblioteca<52>-Footnote-355102779
Ref: Biblioteca<52>-Footnote-365102845
Ref: Biblioteca<52>-Footnote-375102911
Ref: Biblioteca<52>-Footnote-385102977
Ref: Biblioteca<52>-Footnote-395103043
Ref: Biblioteca<52>-Footnote-405103109
Ref: Biblioteca<52>-Footnote-415103175
Ref: Biblioteca<52>-Footnote-425103241
Ref: Biblioteca<52>-Footnote-435103307
Ref: Biblioteca<52>-Footnote-445103373
Ref: Biblioteca<52>-Footnote-455103439
Ref: Biblioteca<52>-Footnote-465103505
Ref: Biblioteca<52>-Footnote-475103571
Ref: Biblioteca<52>-Footnote-485103637
Ref: Biblioteca<52>-Footnote-495103703
Ref: Biblioteca<52>-Footnote-505103769
Ref: Biblioteca<52>-Footnote-515103835
Ref: Biblioteca<52>-Footnote-525103901
Ref: Biblioteca<52>-Footnote-535103967
Node: Documentação<46>5104033
Ref: whatsnew/changelog id4585104156
Ref: 1c485104156
Ref: Documentação<46>-Footnote-15104771
Ref: Documentação<46>-Footnote-25104836
Ref: Documentação<46>-Footnote-35104901
Node: Construção<50>5104965
Ref: whatsnew/changelog id4595105082
Ref: 1c4a5105082
Ref: Construção<50>-Footnote-15105620
Ref: Construção<50>-Footnote-25105685
Ref: Construção<50>-Footnote-35105750
Node: IDLE<29>5105815
Ref: whatsnew/changelog id4605105923
Ref: 1c4b5105923
Ref: IDLE<29>-Footnote-15106344
Ref: IDLE<29>-Footnote-25106409
Ref: IDLE<29>-Footnote-35106474
Node: API C<48>5106539
Ref: whatsnew/changelog id4615106622
Ref: 1c4c5106622
Ref: API C<48>-Footnote-15107387
Ref: API C<48>-Footnote-25107452
Node: Python 3 9 0 alpha 25107517
Ref: whatsnew/changelog python-3-9-0-alpha-25107641
Ref: 1c4d5107641
Node: Segurança<39>5108029
Ref: whatsnew/changelog id4625108132
Ref: 1c4e5108132
Ref: Segurança<39>-Footnote-15109008
Ref: Segurança<39>-Footnote-25109073
Ref: Segurança<39>-Footnote-35109138
Ref: Segurança<39>-Footnote-45109203
Node: Núcleo e embutidos<52>5109268
Ref: whatsnew/changelog id4635109394
Ref: 1c4f5109394
Ref: Núcleo e embutidos<52>-Footnote-15113106
Ref: Núcleo e embutidos<52>-Footnote-25113171
Ref: Núcleo e embutidos<52>-Footnote-35113236
Ref: Núcleo e embutidos<52>-Footnote-45113301
Ref: Núcleo e embutidos<52>-Footnote-55113366
Ref: Núcleo e embutidos<52>-Footnote-65113431
Ref: Núcleo e embutidos<52>-Footnote-75113496
Ref: Núcleo e embutidos<52>-Footnote-85113561
Ref: Núcleo e embutidos<52>-Footnote-95113626
Ref: Núcleo e embutidos<52>-Footnote-105113691
Ref: Núcleo e embutidos<52>-Footnote-115113757
Ref: Núcleo e embutidos<52>-Footnote-125113823
Ref: Núcleo e embutidos<52>-Footnote-135113889
Ref: Núcleo e embutidos<52>-Footnote-145113955
Ref: Núcleo e embutidos<52>-Footnote-155114021
Ref: Núcleo e embutidos<52>-Footnote-165114087
Ref: Núcleo e embutidos<52>-Footnote-175114153
Ref: Núcleo e embutidos<52>-Footnote-185114219
Ref: Núcleo e embutidos<52>-Footnote-195114285
Ref: Núcleo e embutidos<52>-Footnote-205114351
Node: Biblioteca<53>5114417
Ref: whatsnew/changelog id4645114547
Ref: 1c505114547
Ref: Biblioteca<53>-Footnote-15122338
Ref: Biblioteca<53>-Footnote-25122403
Ref: Biblioteca<53>-Footnote-35122468
Ref: Biblioteca<53>-Footnote-45122533
Ref: Biblioteca<53>-Footnote-55122598
Ref: Biblioteca<53>-Footnote-65122663
Ref: Biblioteca<53>-Footnote-75122728
Ref: Biblioteca<53>-Footnote-85122793
Ref: Biblioteca<53>-Footnote-95122858
Ref: Biblioteca<53>-Footnote-105122923
Ref: Biblioteca<53>-Footnote-115122989
Ref: Biblioteca<53>-Footnote-125123055
Ref: Biblioteca<53>-Footnote-135123121
Ref: Biblioteca<53>-Footnote-145123187
Ref: Biblioteca<53>-Footnote-155123253
Ref: Biblioteca<53>-Footnote-165123319
Ref: Biblioteca<53>-Footnote-175123385
Ref: Biblioteca<53>-Footnote-185123451
Ref: Biblioteca<53>-Footnote-195123517
Ref: Biblioteca<53>-Footnote-205123583
Ref: Biblioteca<53>-Footnote-215123649
Ref: Biblioteca<53>-Footnote-225123715
Ref: Biblioteca<53>-Footnote-235123781
Ref: Biblioteca<53>-Footnote-245123847
Ref: Biblioteca<53>-Footnote-255123913
Ref: Biblioteca<53>-Footnote-265123979
Ref: Biblioteca<53>-Footnote-275124045
Ref: Biblioteca<53>-Footnote-285124111
Ref: Biblioteca<53>-Footnote-295124177
Ref: Biblioteca<53>-Footnote-305124243
Ref: Biblioteca<53>-Footnote-315124309
Ref: Biblioteca<53>-Footnote-325124375
Ref: Biblioteca<53>-Footnote-335124441
Ref: Biblioteca<53>-Footnote-345124507
Ref: Biblioteca<53>-Footnote-355124573
Ref: Biblioteca<53>-Footnote-365124639
Ref: Biblioteca<53>-Footnote-375124705
Ref: Biblioteca<53>-Footnote-385124771
Ref: Biblioteca<53>-Footnote-395124837
Ref: Biblioteca<53>-Footnote-405124903
Node: Documentação<47>5124969
Ref: whatsnew/changelog id4655125086
Ref: 1c515125086
Ref: Documentação<47>-Footnote-15125673
Ref: Documentação<47>-Footnote-25125738
Ref: Documentação<47>-Footnote-35125803
Node: Testes<47>5125868
Ref: whatsnew/changelog id4665125987
Ref: 1c525125987
Ref: Testes<47>-Footnote-15128569
Ref: Testes<47>-Footnote-25128634
Ref: Testes<47>-Footnote-35128699
Ref: Testes<47>-Footnote-45128764
Ref: Testes<47>-Footnote-55128829
Ref: Testes<47>-Footnote-65128894
Ref: Testes<47>-Footnote-75128959
Ref: Testes<47>-Footnote-85129024
Ref: Testes<47>-Footnote-95129089
Ref: Testes<47>-Footnote-105129154
Ref: Testes<47>-Footnote-115129220
Ref: Testes<47>-Footnote-125129286
Ref: Testes<47>-Footnote-135129352
Node: Construção<51>5129418
Ref: whatsnew/changelog id4675129530
Ref: 1c565129530
Ref: Construção<51>-Footnote-15129944
Ref: Construção<51>-Footnote-25130009
Node: Windows<46>5130074
Ref: whatsnew/changelog id4685130185
Ref: 1c575130185
Ref: Windows<46>-Footnote-15130426
Ref: Windows<46>-Footnote-25130491
Node: macOS<37>5130556
Ref: whatsnew/changelog id4695130659
Ref: 1c585130659
Ref: macOS<37>-Footnote-15130967
Node: IDLE<30>5131032
Ref: whatsnew/changelog id4705131133
Ref: 1c595131133
Ref: IDLE<30>-Footnote-15131728
Ref: IDLE<30>-Footnote-25131793
Ref: IDLE<30>-Footnote-35131858
Ref: IDLE<30>-Footnote-45131923
Node: API C<49>5131988
Ref: whatsnew/changelog id4715132071
Ref: 1c5a5132071
Ref: API C<49>-Footnote-15132605
Ref: API C<49>-Footnote-25132670
Ref: API C<49>-Footnote-35132735
Node: Python 3 9 0 alpha 15132800
Ref: whatsnew/changelog python-3-9-0-alpha-15132923
Ref: 1c5b5132923
Node: Segurança<40>5133355
Ref: whatsnew/changelog id4725133458
Ref: 1c5c5133458
Ref: Segurança<40>-Footnote-15135783
Ref: Segurança<40>-Footnote-25135848
Ref: Segurança<40>-Footnote-35135913
Ref: Segurança<40>-Footnote-45135978
Ref: Segurança<40>-Footnote-55136043
Ref: Segurança<40>-Footnote-65136108
Ref: Segurança<40>-Footnote-75136173
Ref: Segurança<40>-Footnote-85136229
Ref: Segurança<40>-Footnote-95136294
Ref: Segurança<40>-Footnote-105136359
Ref: Segurança<40>-Footnote-115136425
Ref: Segurança<40>-Footnote-125136491
Ref: Segurança<40>-Footnote-135136557
Ref: Segurança<40>-Footnote-145136623
Ref: Segurança<40>-Footnote-155136689
Node: Núcleo e embutidos<53>5136755
Ref: whatsnew/changelog id4735136881
Ref: 1c5f5136881
Ref: Núcleo e embutidos<53>-Footnote-15152432
Ref: Núcleo e embutidos<53>-Footnote-25152497
Ref: Núcleo e embutidos<53>-Footnote-35152562
Ref: Núcleo e embutidos<53>-Footnote-45152627
Ref: Núcleo e embutidos<53>-Footnote-55152692
Ref: Núcleo e embutidos<53>-Footnote-65152757
Ref: Núcleo e embutidos<53>-Footnote-75152822
Ref: Núcleo e embutidos<53>-Footnote-85152887
Ref: Núcleo e embutidos<53>-Footnote-95152952
Ref: Núcleo e embutidos<53>-Footnote-105153017
Ref: Núcleo e embutidos<53>-Footnote-115153083
Ref: Núcleo e embutidos<53>-Footnote-125153149
Ref: Núcleo e embutidos<53>-Footnote-135153215
Ref: Núcleo e embutidos<53>-Footnote-145153281
Ref: Núcleo e embutidos<53>-Footnote-155153347
Ref: Núcleo e embutidos<53>-Footnote-165153413
Ref: Núcleo e embutidos<53>-Footnote-175153479
Ref: Núcleo e embutidos<53>-Footnote-185153545
Ref: Núcleo e embutidos<53>-Footnote-195153611
Ref: Núcleo e embutidos<53>-Footnote-205153677
Ref: Núcleo e embutidos<53>-Footnote-215153720
Ref: Núcleo e embutidos<53>-Footnote-225153786
Ref: Núcleo e embutidos<53>-Footnote-235153852
Ref: Núcleo e embutidos<53>-Footnote-245153918
Ref: Núcleo e embutidos<53>-Footnote-255153984
Ref: Núcleo e embutidos<53>-Footnote-265154050
Ref: Núcleo e embutidos<53>-Footnote-275154116
Ref: Núcleo e embutidos<53>-Footnote-285154182
Ref: Núcleo e embutidos<53>-Footnote-295154248
Ref: Núcleo e embutidos<53>-Footnote-305154314
Ref: Núcleo e embutidos<53>-Footnote-315154380
Ref: Núcleo e embutidos<53>-Footnote-325154446
Ref: Núcleo e embutidos<53>-Footnote-335154512
Ref: Núcleo e embutidos<53>-Footnote-345154578
Ref: Núcleo e embutidos<53>-Footnote-355154644
Ref: Núcleo e embutidos<53>-Footnote-365154710
Ref: Núcleo e embutidos<53>-Footnote-375154776
Ref: Núcleo e embutidos<53>-Footnote-385154842
Ref: Núcleo e embutidos<53>-Footnote-395154908
Ref: Núcleo e embutidos<53>-Footnote-405154974
Ref: Núcleo e embutidos<53>-Footnote-415155039
Ref: Núcleo e embutidos<53>-Footnote-425155105
Ref: Núcleo e embutidos<53>-Footnote-435155171
Ref: Núcleo e embutidos<53>-Footnote-445155237
Ref: Núcleo e embutidos<53>-Footnote-455155303
Ref: Núcleo e embutidos<53>-Footnote-465155369
Ref: Núcleo e embutidos<53>-Footnote-475155435
Ref: Núcleo e embutidos<53>-Footnote-485155501
Ref: Núcleo e embutidos<53>-Footnote-495155567
Ref: Núcleo e embutidos<53>-Footnote-505155633
Ref: Núcleo e embutidos<53>-Footnote-515155699
Ref: Núcleo e embutidos<53>-Footnote-525155765
Ref: Núcleo e embutidos<53>-Footnote-535155831
Ref: Núcleo e embutidos<53>-Footnote-545155874
Ref: Núcleo e embutidos<53>-Footnote-555155940
Ref: Núcleo e embutidos<53>-Footnote-565156006
Ref: Núcleo e embutidos<53>-Footnote-575156072
Ref: Núcleo e embutidos<53>-Footnote-585156138
Ref: Núcleo e embutidos<53>-Footnote-595156204
Ref: Núcleo e embutidos<53>-Footnote-605156270
Ref: Núcleo e embutidos<53>-Footnote-615156336
Ref: Núcleo e embutidos<53>-Footnote-625156402
Ref: Núcleo e embutidos<53>-Footnote-635156468
Ref: Núcleo e embutidos<53>-Footnote-645156534
Ref: Núcleo e embutidos<53>-Footnote-655156600
Ref: Núcleo e embutidos<53>-Footnote-665156666
Ref: Núcleo e embutidos<53>-Footnote-675156732
Ref: Núcleo e embutidos<53>-Footnote-685156798
Ref: Núcleo e embutidos<53>-Footnote-695156864
Ref: Núcleo e embutidos<53>-Footnote-705156930
Ref: Núcleo e embutidos<53>-Footnote-715156996
Ref: Núcleo e embutidos<53>-Footnote-725157062
Ref: Núcleo e embutidos<53>-Footnote-735157128
Ref: Núcleo e embutidos<53>-Footnote-745157194
Ref: Núcleo e embutidos<53>-Footnote-755157260
Ref: Núcleo e embutidos<53>-Footnote-765157326
Ref: Núcleo e embutidos<53>-Footnote-775157392
Ref: Núcleo e embutidos<53>-Footnote-785157458
Ref: Núcleo e embutidos<53>-Footnote-795157524
Ref: Núcleo e embutidos<53>-Footnote-805157590
Ref: Núcleo e embutidos<53>-Footnote-815157656
Ref: Núcleo e embutidos<53>-Footnote-825157722
Ref: Núcleo e embutidos<53>-Footnote-835157788
Ref: Núcleo e embutidos<53>-Footnote-845157854
Ref: Núcleo e embutidos<53>-Footnote-855157920
Ref: Núcleo e embutidos<53>-Footnote-865157986
Ref: Núcleo e embutidos<53>-Footnote-875158052
Ref: Núcleo e embutidos<53>-Footnote-885158118
Ref: Núcleo e embutidos<53>-Footnote-895158184
Ref: Núcleo e embutidos<53>-Footnote-905158250
Ref: Núcleo e embutidos<53>-Footnote-915158316
Ref: Núcleo e embutidos<53>-Footnote-925158382
Ref: Núcleo e embutidos<53>-Footnote-935158448
Ref: Núcleo e embutidos<53>-Footnote-945158514
Node: Biblioteca<54>5158580
Ref: whatsnew/changelog id4745158710
Ref: 1c615158710
Ref: Biblioteca<54>-Footnote-15198206
Ref: Biblioteca<54>-Footnote-25198271
Ref: Biblioteca<54>-Footnote-35198336
Ref: Biblioteca<54>-Footnote-45198401
Ref: Biblioteca<54>-Footnote-55198466
Ref: Biblioteca<54>-Footnote-65198531
Ref: Biblioteca<54>-Footnote-75198596
Ref: Biblioteca<54>-Footnote-85198661
Ref: Biblioteca<54>-Footnote-95198726
Ref: Biblioteca<54>-Footnote-105198791
Ref: Biblioteca<54>-Footnote-115198857
Ref: Biblioteca<54>-Footnote-125198923
Ref: Biblioteca<54>-Footnote-135198989
Ref: Biblioteca<54>-Footnote-145199055
Ref: Biblioteca<54>-Footnote-155199121
Ref: Biblioteca<54>-Footnote-165199187
Ref: Biblioteca<54>-Footnote-175199253
Ref: Biblioteca<54>-Footnote-185199319
Ref: Biblioteca<54>-Footnote-195199385
Ref: Biblioteca<54>-Footnote-205199451
Ref: Biblioteca<54>-Footnote-215199517
Ref: Biblioteca<54>-Footnote-225199583
Ref: Biblioteca<54>-Footnote-235199649
Ref: Biblioteca<54>-Footnote-245199715
Ref: Biblioteca<54>-Footnote-255199781
Ref: Biblioteca<54>-Footnote-265199847
Ref: Biblioteca<54>-Footnote-275199913
Ref: Biblioteca<54>-Footnote-285199979
Ref: Biblioteca<54>-Footnote-295200045
Ref: Biblioteca<54>-Footnote-305200111
Ref: Biblioteca<54>-Footnote-315200177
Ref: Biblioteca<54>-Footnote-325200243
Ref: Biblioteca<54>-Footnote-335200309
Ref: Biblioteca<54>-Footnote-345200375
Ref: Biblioteca<54>-Footnote-355200441
Ref: Biblioteca<54>-Footnote-365200507
Ref: Biblioteca<54>-Footnote-375200573
Ref: Biblioteca<54>-Footnote-385200639
Ref: Biblioteca<54>-Footnote-395200705
Ref: Biblioteca<54>-Footnote-405200771
Ref: Biblioteca<54>-Footnote-415200837
Ref: Biblioteca<54>-Footnote-425200903
Ref: Biblioteca<54>-Footnote-435200969
Ref: Biblioteca<54>-Footnote-445201035
Ref: Biblioteca<54>-Footnote-455201101
Ref: Biblioteca<54>-Footnote-465201167
Ref: Biblioteca<54>-Footnote-475201233
Ref: Biblioteca<54>-Footnote-485201299
Ref: Biblioteca<54>-Footnote-495201365
Ref: Biblioteca<54>-Footnote-505201431
Ref: Biblioteca<54>-Footnote-515201497
Ref: Biblioteca<54>-Footnote-525201563
Ref: Biblioteca<54>-Footnote-535201629
Ref: Biblioteca<54>-Footnote-545201695
Ref: Biblioteca<54>-Footnote-555201761
Ref: Biblioteca<54>-Footnote-565201827
Ref: Biblioteca<54>-Footnote-575201893
Ref: Biblioteca<54>-Footnote-585201959
Ref: Biblioteca<54>-Footnote-595202025
Ref: Biblioteca<54>-Footnote-605202091
Ref: Biblioteca<54>-Footnote-615202157
Ref: Biblioteca<54>-Footnote-625202223
Ref: Biblioteca<54>-Footnote-635202289
Ref: Biblioteca<54>-Footnote-645202354
Ref: Biblioteca<54>-Footnote-655202420
Ref: Biblioteca<54>-Footnote-665202486
Ref: Biblioteca<54>-Footnote-675202552
Ref: Biblioteca<54>-Footnote-685202618
Ref: Biblioteca<54>-Footnote-695202684
Ref: Biblioteca<54>-Footnote-705202750
Ref: Biblioteca<54>-Footnote-715202816
Ref: Biblioteca<54>-Footnote-725202882
Ref: Biblioteca<54>-Footnote-735202948
Ref: Biblioteca<54>-Footnote-745203014
Ref: Biblioteca<54>-Footnote-755203080
Ref: Biblioteca<54>-Footnote-765203146
Ref: Biblioteca<54>-Footnote-775203254
Ref: Biblioteca<54>-Footnote-785203320
Ref: Biblioteca<54>-Footnote-795203386
Ref: Biblioteca<54>-Footnote-805203452
Ref: Biblioteca<54>-Footnote-815203518
Ref: Biblioteca<54>-Footnote-825203584
Ref: Biblioteca<54>-Footnote-835203650
Ref: Biblioteca<54>-Footnote-845203716
Ref: Biblioteca<54>-Footnote-855203782
Ref: Biblioteca<54>-Footnote-865203848
Ref: Biblioteca<54>-Footnote-875203914
Ref: Biblioteca<54>-Footnote-885203980
Ref: Biblioteca<54>-Footnote-895204046
Ref: Biblioteca<54>-Footnote-905204112
Ref: Biblioteca<54>-Footnote-915204178
Ref: Biblioteca<54>-Footnote-925204244
Ref: Biblioteca<54>-Footnote-935204310
Ref: Biblioteca<54>-Footnote-945204376
Ref: Biblioteca<54>-Footnote-955204442
Ref: Biblioteca<54>-Footnote-965204508
Ref: Biblioteca<54>-Footnote-975204574
Ref: Biblioteca<54>-Footnote-985204640
Ref: Biblioteca<54>-Footnote-995204706
Ref: Biblioteca<54>-Footnote-1005204772
Ref: Biblioteca<54>-Footnote-1015204839
Ref: Biblioteca<54>-Footnote-1025204906
Ref: Biblioteca<54>-Footnote-1035204973
Ref: Biblioteca<54>-Footnote-1045205040
Ref: Biblioteca<54>-Footnote-1055205107
Ref: Biblioteca<54>-Footnote-1065205174
Ref: Biblioteca<54>-Footnote-1075205241
Ref: Biblioteca<54>-Footnote-1085205307
Ref: Biblioteca<54>-Footnote-1095205374
Ref: Biblioteca<54>-Footnote-1105205441
Ref: Biblioteca<54>-Footnote-1115205508
Ref: Biblioteca<54>-Footnote-1125205575
Ref: Biblioteca<54>-Footnote-1135205642
Ref: Biblioteca<54>-Footnote-1145205709
Ref: Biblioteca<54>-Footnote-1155205776
Ref: Biblioteca<54>-Footnote-1165205843
Ref: Biblioteca<54>-Footnote-1175205910
Ref: Biblioteca<54>-Footnote-1185205977
Ref: Biblioteca<54>-Footnote-1195206044
Ref: Biblioteca<54>-Footnote-1205206111
Ref: Biblioteca<54>-Footnote-1215206178
Ref: Biblioteca<54>-Footnote-1225206245
Ref: Biblioteca<54>-Footnote-1235206312
Ref: Biblioteca<54>-Footnote-1245206379
Ref: Biblioteca<54>-Footnote-1255206446
Ref: Biblioteca<54>-Footnote-1265206513
Ref: Biblioteca<54>-Footnote-1275206580
Ref: Biblioteca<54>-Footnote-1285206647
Ref: Biblioteca<54>-Footnote-1295206714
Ref: Biblioteca<54>-Footnote-1305206781
Ref: Biblioteca<54>-Footnote-1315206848
Ref: Biblioteca<54>-Footnote-1325206915
Ref: Biblioteca<54>-Footnote-1335206982
Ref: Biblioteca<54>-Footnote-1345207049
Ref: Biblioteca<54>-Footnote-1355207116
Ref: Biblioteca<54>-Footnote-1365207183
Ref: Biblioteca<54>-Footnote-1375207260
Ref: Biblioteca<54>-Footnote-1385207327
Ref: Biblioteca<54>-Footnote-1395207394
Ref: Biblioteca<54>-Footnote-1405207461
Ref: Biblioteca<54>-Footnote-1415207528
Ref: Biblioteca<54>-Footnote-1425207595
Ref: Biblioteca<54>-Footnote-1435207662
Ref: Biblioteca<54>-Footnote-1445207729
Ref: Biblioteca<54>-Footnote-1455207796
Ref: Biblioteca<54>-Footnote-1465207863
Ref: Biblioteca<54>-Footnote-1475207930
Ref: Biblioteca<54>-Footnote-1485207997
Ref: Biblioteca<54>-Footnote-1495208064
Ref: Biblioteca<54>-Footnote-1505208131
Ref: Biblioteca<54>-Footnote-1515208198
Ref: Biblioteca<54>-Footnote-1525208265
Ref: Biblioteca<54>-Footnote-1535208332
Ref: Biblioteca<54>-Footnote-1545208399
Ref: Biblioteca<54>-Footnote-1555208466
Ref: Biblioteca<54>-Footnote-1565208533
Ref: Biblioteca<54>-Footnote-1575208600
Ref: Biblioteca<54>-Footnote-1585208667
Ref: Biblioteca<54>-Footnote-1595208734
Ref: Biblioteca<54>-Footnote-1605208801
Ref: Biblioteca<54>-Footnote-1615208868
Ref: Biblioteca<54>-Footnote-1625208935
Ref: Biblioteca<54>-Footnote-1635209002
Ref: Biblioteca<54>-Footnote-1645209069
Ref: Biblioteca<54>-Footnote-1655209136
Ref: Biblioteca<54>-Footnote-1665209203
Ref: Biblioteca<54>-Footnote-1675209270
Ref: Biblioteca<54>-Footnote-1685209337
Ref: Biblioteca<54>-Footnote-1695209404
Ref: Biblioteca<54>-Footnote-1705209471
Ref: Biblioteca<54>-Footnote-1715209538
Ref: Biblioteca<54>-Footnote-1725209605
Ref: Biblioteca<54>-Footnote-1735209649
Ref: Biblioteca<54>-Footnote-1745209716
Ref: Biblioteca<54>-Footnote-1755209783
Ref: Biblioteca<54>-Footnote-1765209850
Ref: Biblioteca<54>-Footnote-1775209917
Ref: Biblioteca<54>-Footnote-1785209984
Ref: Biblioteca<54>-Footnote-1795210051
Ref: Biblioteca<54>-Footnote-1805210118
Ref: Biblioteca<54>-Footnote-1815210185
Ref: Biblioteca<54>-Footnote-1825210252
Ref: Biblioteca<54>-Footnote-1835210319
Ref: Biblioteca<54>-Footnote-1845210386
Ref: Biblioteca<54>-Footnote-1855210453
Ref: Biblioteca<54>-Footnote-1865210520
Ref: Biblioteca<54>-Footnote-1875210587
Ref: Biblioteca<54>-Footnote-1885210654
Ref: Biblioteca<54>-Footnote-1895210721
Ref: Biblioteca<54>-Footnote-1905210788
Ref: Biblioteca<54>-Footnote-1915210855
Ref: Biblioteca<54>-Footnote-1925210922
Ref: Biblioteca<54>-Footnote-1935210989
Ref: Biblioteca<54>-Footnote-1945211056
Ref: Biblioteca<54>-Footnote-1955211123
Ref: Biblioteca<54>-Footnote-1965211190
Ref: Biblioteca<54>-Footnote-1975211257
Ref: Biblioteca<54>-Footnote-1985211324
Ref: Biblioteca<54>-Footnote-1995211391
Ref: Biblioteca<54>-Footnote-2005211458
Ref: Biblioteca<54>-Footnote-2015211525
Ref: Biblioteca<54>-Footnote-2025211592
Ref: Biblioteca<54>-Footnote-2035211659
Ref: Biblioteca<54>-Footnote-2045211726
Ref: Biblioteca<54>-Footnote-2055211793
Ref: Biblioteca<54>-Footnote-2065211860
Ref: Biblioteca<54>-Footnote-2075211927
Ref: Biblioteca<54>-Footnote-2085211994
Ref: Biblioteca<54>-Footnote-2095212061
Ref: Biblioteca<54>-Footnote-2105212128
Ref: Biblioteca<54>-Footnote-2115212195
Ref: Biblioteca<54>-Footnote-2125212262
Ref: Biblioteca<54>-Footnote-2135212329
Ref: Biblioteca<54>-Footnote-2145212396
Ref: Biblioteca<54>-Footnote-2155212463
Ref: Biblioteca<54>-Footnote-2165212530
Ref: Biblioteca<54>-Footnote-2175212597
Ref: Biblioteca<54>-Footnote-2185212664
Ref: Biblioteca<54>-Footnote-2195212731
Ref: Biblioteca<54>-Footnote-2205212798
Ref: Biblioteca<54>-Footnote-2215212865
Ref: Biblioteca<54>-Footnote-2225212932
Ref: Biblioteca<54>-Footnote-2235212999
Ref: Biblioteca<54>-Footnote-2245213066
Ref: Biblioteca<54>-Footnote-2255213133
Ref: Biblioteca<54>-Footnote-2265213200
Ref: Biblioteca<54>-Footnote-2275213267
Ref: Biblioteca<54>-Footnote-2285213334
Ref: Biblioteca<54>-Footnote-2295213401
Ref: Biblioteca<54>-Footnote-2305213468
Ref: Biblioteca<54>-Footnote-2315213535
Ref: Biblioteca<54>-Footnote-2325213602
Ref: Biblioteca<54>-Footnote-2335213669
Ref: Biblioteca<54>-Footnote-2345213736
Ref: Biblioteca<54>-Footnote-2355213803
Ref: Biblioteca<54>-Footnote-2365213870
Ref: Biblioteca<54>-Footnote-2375213937
Ref: Biblioteca<54>-Footnote-2385214004
Ref: Biblioteca<54>-Footnote-2395214071
Ref: Biblioteca<54>-Footnote-2405214137
Ref: Biblioteca<54>-Footnote-2415214204
Ref: Biblioteca<54>-Footnote-2425214271
Ref: Biblioteca<54>-Footnote-2435214338
Ref: Biblioteca<54>-Footnote-2445214405
Ref: Biblioteca<54>-Footnote-2455214472
Ref: Biblioteca<54>-Footnote-2465214539
Ref: Biblioteca<54>-Footnote-2475214606
Ref: Biblioteca<54>-Footnote-2485214673
Ref: Biblioteca<54>-Footnote-2495214740
Ref: Biblioteca<54>-Footnote-2505214807
Ref: Biblioteca<54>-Footnote-2515214874
Ref: Biblioteca<54>-Footnote-2525214941
Ref: Biblioteca<54>-Footnote-2535215008
Node: Documentação<48>5215074
Ref: whatsnew/changelog id4755215191
Ref: 1c6e5215191
Ref: Documentação<48>-Footnote-15219661
Ref: Documentação<48>-Footnote-25219726
Ref: Documentação<48>-Footnote-35219791
Ref: Documentação<48>-Footnote-45219856
Ref: Documentação<48>-Footnote-55219921
Ref: Documentação<48>-Footnote-65219986
Ref: Documentação<48>-Footnote-75220051
Ref: Documentação<48>-Footnote-85220116
Ref: Documentação<48>-Footnote-95220181
Ref: Documentação<48>-Footnote-105220246
Ref: Documentação<48>-Footnote-115220312
Ref: Documentação<48>-Footnote-125220378
Ref: Documentação<48>-Footnote-135220444
Ref: Documentação<48>-Footnote-145220510
Ref: Documentação<48>-Footnote-155220576
Ref: Documentação<48>-Footnote-165220642
Ref: Documentação<48>-Footnote-175220708
Ref: Documentação<48>-Footnote-185220774
Ref: Documentação<48>-Footnote-195220840
Ref: Documentação<48>-Footnote-205220906
Ref: Documentação<48>-Footnote-215220972
Ref: Documentação<48>-Footnote-225221038
Ref: Documentação<48>-Footnote-235221104
Ref: Documentação<48>-Footnote-245221170
Ref: Documentação<48>-Footnote-255221236
Ref: Documentação<48>-Footnote-265221302
Ref: Documentação<48>-Footnote-275221368
Ref: Documentação<48>-Footnote-285221434
Ref: Documentação<48>-Footnote-295221500
Ref: Documentação<48>-Footnote-305221566
Ref: Documentação<48>-Footnote-315221632
Ref: Documentação<48>-Footnote-325221698
Ref: Documentação<48>-Footnote-335221764
Ref: Documentação<48>-Footnote-345221830
Ref: Documentação<48>-Footnote-355221896
Node: Testes<48>5221962
Ref: whatsnew/changelog id4765222081
Ref: 1c705222081
Ref: Testes<48>-Footnote-15230220
Ref: Testes<48>-Footnote-25230285
Ref: Testes<48>-Footnote-35230350
Ref: Testes<48>-Footnote-45230415
Ref: Testes<48>-Footnote-55230480
Ref: Testes<48>-Footnote-65230545
Ref: Testes<48>-Footnote-75230610
Ref: Testes<48>-Footnote-85230675
Ref: Testes<48>-Footnote-95230740
Ref: Testes<48>-Footnote-105230805
Ref: Testes<48>-Footnote-115230871
Ref: Testes<48>-Footnote-125230937
Ref: Testes<48>-Footnote-135231003
Ref: Testes<48>-Footnote-145231069
Ref: Testes<48>-Footnote-155231135
Ref: Testes<48>-Footnote-165231201
Ref: Testes<48>-Footnote-175231267
Ref: Testes<48>-Footnote-185231333
Ref: Testes<48>-Footnote-195231399
Ref: Testes<48>-Footnote-205231465
Ref: Testes<48>-Footnote-215231531
Ref: Testes<48>-Footnote-225231597
Ref: Testes<48>-Footnote-235231663
Ref: Testes<48>-Footnote-245231729
Ref: Testes<48>-Footnote-255231795
Ref: Testes<48>-Footnote-265231861
Ref: Testes<48>-Footnote-275231927
Ref: Testes<48>-Footnote-285231993
Ref: Testes<48>-Footnote-295232059
Ref: Testes<48>-Footnote-305232125
Ref: Testes<48>-Footnote-315232191
Ref: Testes<48>-Footnote-325232257
Ref: Testes<48>-Footnote-335232323
Ref: Testes<48>-Footnote-345232389
Ref: Testes<48>-Footnote-355232455
Ref: Testes<48>-Footnote-365232521
Ref: Testes<48>-Footnote-375232587
Ref: Testes<48>-Footnote-385232653
Ref: Testes<48>-Footnote-395232719
Ref: Testes<48>-Footnote-405232785
Ref: Testes<48>-Footnote-415232851
Ref: Testes<48>-Footnote-425232917
Ref: Testes<48>-Footnote-435232983
Ref: Testes<48>-Footnote-445233049
Ref: Testes<48>-Footnote-455233115
Ref: Testes<48>-Footnote-465233181
Ref: Testes<48>-Footnote-475233247
Ref: Testes<48>-Footnote-485233313
Node: Construção<52>5233379
Ref: whatsnew/changelog id4775233491
Ref: 1c765233491
Ref: Construção<52>-Footnote-15237342
Ref: Construção<52>-Footnote-25237407
Ref: Construção<52>-Footnote-35237472
Ref: Construção<52>-Footnote-45237537
Ref: Construção<52>-Footnote-55237602
Ref: Construção<52>-Footnote-65237667
Ref: Construção<52>-Footnote-75237732
Ref: Construção<52>-Footnote-85237797
Ref: Construção<52>-Footnote-95237862
Ref: Construção<52>-Footnote-105237927
Ref: Construção<52>-Footnote-115237993
Ref: Construção<52>-Footnote-125238059
Ref: Construção<52>-Footnote-135238125
Ref: Construção<52>-Footnote-145238191
Ref: Construção<52>-Footnote-155238257
Ref: Construção<52>-Footnote-165238323
Node: Windows<47>5238389
Ref: whatsnew/changelog id4785238500
Ref: 1c785238500
Ref: Windows<47>-Footnote-15243408
Ref: Windows<47>-Footnote-25243473
Ref: Windows<47>-Footnote-35243538
Ref: Windows<47>-Footnote-45243603
Ref: Windows<47>-Footnote-55243668
Ref: Windows<47>-Footnote-65243733
Ref: Windows<47>-Footnote-75243798
Ref: Windows<47>-Footnote-85243863
Ref: Windows<47>-Footnote-95243928
Ref: Windows<47>-Footnote-105243993
Ref: Windows<47>-Footnote-115244059
Ref: Windows<47>-Footnote-125244125
Ref: Windows<47>-Footnote-135244191
Ref: Windows<47>-Footnote-145244257
Ref: Windows<47>-Footnote-155244323
Ref: Windows<47>-Footnote-165244389
Ref: Windows<47>-Footnote-175244455
Ref: Windows<47>-Footnote-185244521
Ref: Windows<47>-Footnote-195244587
Ref: Windows<47>-Footnote-205244653
Ref: Windows<47>-Footnote-215244719
Ref: Windows<47>-Footnote-225244785
Ref: Windows<47>-Footnote-235244851
Ref: Windows<47>-Footnote-245244916
Ref: Windows<47>-Footnote-255244981
Ref: Windows<47>-Footnote-265245047
Ref: Windows<47>-Footnote-275245113
Ref: Windows<47>-Footnote-285245179
Ref: Windows<47>-Footnote-295245245
Ref: Windows<47>-Footnote-305245311
Ref: Windows<47>-Footnote-315245377
Ref: Windows<47>-Footnote-325245443
Ref: Windows<47>-Footnote-335245509
Ref: Windows<47>-Footnote-345245575
Ref: Windows<47>-Footnote-355245641
Ref: Windows<47>-Footnote-365245707
Ref: Windows<47>-Footnote-375245773
Ref: Windows<47>-Footnote-385245839
Ref: Windows<47>-Footnote-395245905
Ref: Windows<47>-Footnote-405245971
Ref: Windows<47>-Footnote-415246037
Ref: Windows<47>-Footnote-425246103
Node: macOS<38>5246169
Ref: whatsnew/changelog id4795246272
Ref: 1c7b5246272
Ref: macOS<38>-Footnote-15247105
Ref: macOS<38>-Footnote-25247170
Ref: macOS<38>-Footnote-35247235
Ref: macOS<38>-Footnote-45247300
Ref: macOS<38>-Footnote-55247365
Ref: macOS<38>-Footnote-65247430
Node: IDLE<31>5247495
Ref: whatsnew/changelog id4805247608
Ref: 1c7c5247608
Ref: IDLE<31>-Footnote-15252347
Ref: IDLE<31>-Footnote-25252412
Ref: IDLE<31>-Footnote-35252476
Ref: IDLE<31>-Footnote-45252541
Ref: IDLE<31>-Footnote-55252606
Ref: IDLE<31>-Footnote-65252671
Ref: IDLE<31>-Footnote-75252736
Ref: IDLE<31>-Footnote-85252801
Ref: IDLE<31>-Footnote-95252866
Ref: IDLE<31>-Footnote-105252931
Ref: IDLE<31>-Footnote-115252997
Ref: IDLE<31>-Footnote-125253063
Ref: IDLE<31>-Footnote-135253129
Ref: IDLE<31>-Footnote-145253195
Ref: IDLE<31>-Footnote-155253261
Ref: IDLE<31>-Footnote-165253327
Ref: IDLE<31>-Footnote-175253393
Ref: IDLE<31>-Footnote-185253459
Ref: IDLE<31>-Footnote-195253525
Ref: IDLE<31>-Footnote-205253591
Ref: IDLE<31>-Footnote-215253657
Ref: IDLE<31>-Footnote-225253723
Ref: IDLE<31>-Footnote-235253789
Ref: IDLE<31>-Footnote-245253855
Ref: IDLE<31>-Footnote-255253921
Ref: IDLE<31>-Footnote-265253987
Ref: IDLE<31>-Footnote-275254053
Ref: IDLE<31>-Footnote-285254119
Ref: IDLE<31>-Footnote-295254185
Ref: IDLE<31>-Footnote-305254250
Node: Ferramentas/Demos<32>5254316
Ref: whatsnew/changelog id4815254429
Ref: 1c7d5254429
Ref: Ferramentas/Demos<32>-Footnote-15255442
Ref: Ferramentas/Demos<32>-Footnote-25255507
Ref: Ferramentas/Demos<32>-Footnote-35255572
Ref: Ferramentas/Demos<32>-Footnote-45255637
Ref: Ferramentas/Demos<32>-Footnote-55255702
Ref: Ferramentas/Demos<32>-Footnote-65255767
Ref: Ferramentas/Demos<32>-Footnote-75255832
Ref: Ferramentas/Demos<32>-Footnote-85255897
Node: API C<50>5255962
Ref: whatsnew/changelog id4825256058
Ref: 1c7f5256058
Ref: API C<50>-Footnote-15261453
Ref: API C<50>-Footnote-25261518
Ref: API C<50>-Footnote-35261583
Ref: API C<50>-Footnote-45261648
Ref: API C<50>-Footnote-55261713
Ref: API C<50>-Footnote-65261778
Ref: API C<50>-Footnote-75261843
Ref: API C<50>-Footnote-85261908
Ref: API C<50>-Footnote-95261973
Ref: API C<50>-Footnote-105262038
Ref: API C<50>-Footnote-115262104
Ref: API C<50>-Footnote-125262170
Ref: API C<50>-Footnote-135262236
Ref: API C<50>-Footnote-145262302
Ref: API C<50>-Footnote-155262345
Ref: API C<50>-Footnote-165262411
Ref: API C<50>-Footnote-175262477
Ref: API C<50>-Footnote-185262543
Ref: API C<50>-Footnote-195262609
Ref: API C<50>-Footnote-205262675
Ref: API C<50>-Footnote-215262741
Ref: API C<50>-Footnote-225262807
Ref: API C<50>-Footnote-235262873
Ref: API C<50>-Footnote-245262939
Ref: API C<50>-Footnote-255263005
Ref: API C<50>-Footnote-265263071
Ref: API C<50>-Footnote-275263137
Ref: API C<50>-Footnote-285263203
Ref: API C<50>-Footnote-295263269
Ref: API C<50>-Footnote-305263335
Ref: API C<50>-Footnote-315263401
Ref: API C<50>-Footnote-325263467
Ref: API C<50>-Footnote-335263533
Ref: API C<50>-Footnote-345263599
Node: Python 3 8 0 beta 15263665
Ref: whatsnew/changelog python-3-8-0-beta-15263788
Ref: 1c825263788
Node: Segurança<41>5264218
Ref: whatsnew/changelog id4835264320
Ref: 1c835264320
Ref: Segurança<41>-Footnote-15264917
Ref: Segurança<41>-Footnote-25264982
Ref: Segurança<41>-Footnote-35265037
Ref: Segurança<41>-Footnote-45265102
Node: Núcleo e embutidos<54>5265167
Ref: whatsnew/changelog id4845265292
Ref: 1c845265292
Ref: Núcleo e embutidos<54>-Footnote-15273355
Ref: Núcleo e embutidos<54>-Footnote-25273420
Ref: Núcleo e embutidos<54>-Footnote-35273485
Ref: Núcleo e embutidos<54>-Footnote-45273550
Ref: Núcleo e embutidos<54>-Footnote-55273615
Ref: Núcleo e embutidos<54>-Footnote-65273680
Ref: Núcleo e embutidos<54>-Footnote-75273745
Ref: Núcleo e embutidos<54>-Footnote-85273810
Ref: Núcleo e embutidos<54>-Footnote-95273875
Ref: Núcleo e embutidos<54>-Footnote-105273940
Ref: Núcleo e embutidos<54>-Footnote-115274006
Ref: Núcleo e embutidos<54>-Footnote-125274072
Ref: Núcleo e embutidos<54>-Footnote-135274138
Ref: Núcleo e embutidos<54>-Footnote-145274204
Ref: Núcleo e embutidos<54>-Footnote-155274270
Ref: Núcleo e embutidos<54>-Footnote-165274336
Ref: Núcleo e embutidos<54>-Footnote-175274402
Ref: Núcleo e embutidos<54>-Footnote-185274468
Ref: Núcleo e embutidos<54>-Footnote-195274533
Ref: Núcleo e embutidos<54>-Footnote-205274599
Ref: Núcleo e embutidos<54>-Footnote-215274665
Ref: Núcleo e embutidos<54>-Footnote-225274731
Ref: Núcleo e embutidos<54>-Footnote-235274796
Ref: Núcleo e embutidos<54>-Footnote-245274862
Ref: Núcleo e embutidos<54>-Footnote-255274928
Ref: Núcleo e embutidos<54>-Footnote-265274994
Ref: Núcleo e embutidos<54>-Footnote-275275060
Ref: Núcleo e embutidos<54>-Footnote-285275126
Ref: Núcleo e embutidos<54>-Footnote-295275192
Ref: Núcleo e embutidos<54>-Footnote-305275258
Ref: Núcleo e embutidos<54>-Footnote-315275324
Ref: Núcleo e embutidos<54>-Footnote-325275390
Ref: Núcleo e embutidos<54>-Footnote-335275456
Ref: Núcleo e embutidos<54>-Footnote-345275522
Ref: Núcleo e embutidos<54>-Footnote-355275588
Ref: Núcleo e embutidos<54>-Footnote-365275654
Ref: Núcleo e embutidos<54>-Footnote-375275720
Ref: Núcleo e embutidos<54>-Footnote-385275786
Ref: Núcleo e embutidos<54>-Footnote-395275852
Ref: Núcleo e embutidos<54>-Footnote-405275918
Ref: Núcleo e embutidos<54>-Footnote-415275984
Ref: Núcleo e embutidos<54>-Footnote-425276050
Ref: Núcleo e embutidos<54>-Footnote-435276116
Ref: Núcleo e embutidos<54>-Footnote-445276182
Node: Biblioteca<55>5276248
Ref: whatsnew/changelog id4855276377
Ref: 1c875276377
Ref: Biblioteca<55>-Footnote-15294648
Ref: Biblioteca<55>-Footnote-25294713
Ref: Biblioteca<55>-Footnote-35294778
Ref: Biblioteca<55>-Footnote-45294843
Ref: Biblioteca<55>-Footnote-55294908
Ref: Biblioteca<55>-Footnote-65294973
Ref: Biblioteca<55>-Footnote-75295038
Ref: Biblioteca<55>-Footnote-85295103
Ref: Biblioteca<55>-Footnote-95295168
Ref: Biblioteca<55>-Footnote-105295233
Ref: Biblioteca<55>-Footnote-115295299
Ref: Biblioteca<55>-Footnote-125295365
Ref: Biblioteca<55>-Footnote-135295431
Ref: Biblioteca<55>-Footnote-145295497
Ref: Biblioteca<55>-Footnote-155295563
Ref: Biblioteca<55>-Footnote-165295629
Ref: Biblioteca<55>-Footnote-175295695
Ref: Biblioteca<55>-Footnote-185295761
Ref: Biblioteca<55>-Footnote-195295827
Ref: Biblioteca<55>-Footnote-205295893
Ref: Biblioteca<55>-Footnote-215295959
Ref: Biblioteca<55>-Footnote-225296025
Ref: Biblioteca<55>-Footnote-235296091
Ref: Biblioteca<55>-Footnote-245296157
Ref: Biblioteca<55>-Footnote-255296225
Ref: Biblioteca<55>-Footnote-265296291
Ref: Biblioteca<55>-Footnote-275296357
Ref: Biblioteca<55>-Footnote-285296423
Ref: Biblioteca<55>-Footnote-295296489
Ref: Biblioteca<55>-Footnote-305296555
Ref: Biblioteca<55>-Footnote-315296621
Ref: Biblioteca<55>-Footnote-325296687
Ref: Biblioteca<55>-Footnote-335296753
Ref: Biblioteca<55>-Footnote-345296819
Ref: Biblioteca<55>-Footnote-355296885
Ref: Biblioteca<55>-Footnote-365296951
Ref: Biblioteca<55>-Footnote-375297017
Ref: Biblioteca<55>-Footnote-385297083
Ref: Biblioteca<55>-Footnote-395297149
Ref: Biblioteca<55>-Footnote-405297215
Ref: Biblioteca<55>-Footnote-415297281
Ref: Biblioteca<55>-Footnote-425297347
Ref: Biblioteca<55>-Footnote-435297413
Ref: Biblioteca<55>-Footnote-445297479
Ref: Biblioteca<55>-Footnote-455297545
Ref: Biblioteca<55>-Footnote-465297611
Ref: Biblioteca<55>-Footnote-475297677
Ref: Biblioteca<55>-Footnote-485297743
Ref: Biblioteca<55>-Footnote-495297809
Ref: Biblioteca<55>-Footnote-505297875
Ref: Biblioteca<55>-Footnote-515297941
Ref: Biblioteca<55>-Footnote-525298007
Ref: Biblioteca<55>-Footnote-535298073
Ref: Biblioteca<55>-Footnote-545298139
Ref: Biblioteca<55>-Footnote-555298205
Ref: Biblioteca<55>-Footnote-565298271
Ref: Biblioteca<55>-Footnote-575298337
Ref: Biblioteca<55>-Footnote-585298403
Ref: Biblioteca<55>-Footnote-595298469
Ref: Biblioteca<55>-Footnote-605298535
Ref: Biblioteca<55>-Footnote-615298601
Ref: Biblioteca<55>-Footnote-625298667
Ref: Biblioteca<55>-Footnote-635298733
Ref: Biblioteca<55>-Footnote-645298799
Ref: Biblioteca<55>-Footnote-655298865
Ref: Biblioteca<55>-Footnote-665298931
Ref: Biblioteca<55>-Footnote-675298997
Ref: Biblioteca<55>-Footnote-685299063
Ref: Biblioteca<55>-Footnote-695299128
Ref: Biblioteca<55>-Footnote-705299194
Ref: Biblioteca<55>-Footnote-715299259
Ref: Biblioteca<55>-Footnote-725299325
Ref: Biblioteca<55>-Footnote-735299391
Ref: Biblioteca<55>-Footnote-745299457
Ref: Biblioteca<55>-Footnote-755299523
Ref: Biblioteca<55>-Footnote-765299589
Ref: Biblioteca<55>-Footnote-775299655
Ref: Biblioteca<55>-Footnote-785299721
Ref: Biblioteca<55>-Footnote-795299787
Ref: Biblioteca<55>-Footnote-805299853
Ref: Biblioteca<55>-Footnote-815299919
Ref: Biblioteca<55>-Footnote-825299985
Ref: Biblioteca<55>-Footnote-835300051
Ref: Biblioteca<55>-Footnote-845300117
Ref: Biblioteca<55>-Footnote-855300183
Ref: Biblioteca<55>-Footnote-865300249
Ref: Biblioteca<55>-Footnote-875300315
Ref: Biblioteca<55>-Footnote-885300381
Ref: Biblioteca<55>-Footnote-895300447
Ref: Biblioteca<55>-Footnote-905300513
Ref: Biblioteca<55>-Footnote-915300579
Ref: Biblioteca<55>-Footnote-925300645
Ref: Biblioteca<55>-Footnote-935300711
Ref: Biblioteca<55>-Footnote-945300777
Ref: Biblioteca<55>-Footnote-955300843
Ref: Biblioteca<55>-Footnote-965300909
Ref: Biblioteca<55>-Footnote-975300975
Ref: Biblioteca<55>-Footnote-985301041
Ref: Biblioteca<55>-Footnote-995301107
Ref: Biblioteca<55>-Footnote-1005301173
Ref: Biblioteca<55>-Footnote-1015301240
Ref: Biblioteca<55>-Footnote-1025301307
Ref: Biblioteca<55>-Footnote-1035301374
Ref: Biblioteca<55>-Footnote-1045301441
Ref: Biblioteca<55>-Footnote-1055301508
Ref: Biblioteca<55>-Footnote-1065301575
Ref: Biblioteca<55>-Footnote-1075301642
Node: Documentação<49>5301709
Ref: whatsnew/changelog id4865301825
Ref: 1c8d5301825
Ref: Documentação<49>-Footnote-15303903
Ref: Documentação<49>-Footnote-25303968
Ref: Documentação<49>-Footnote-35304033
Ref: Documentação<49>-Footnote-45304098
Ref: Documentação<49>-Footnote-55304163
Ref: Documentação<49>-Footnote-65304228
Ref: Documentação<49>-Footnote-75304293
Ref: Documentação<49>-Footnote-85304358
Ref: Documentação<49>-Footnote-95304423
Ref: Documentação<49>-Footnote-105304488
Ref: Documentação<49>-Footnote-115304554
Ref: Documentação<49>-Footnote-125304620
Ref: Documentação<49>-Footnote-135304686
Ref: Documentação<49>-Footnote-145304752
Node: Testes<49>5304818
Ref: whatsnew/changelog id4875304936
Ref: 1c8e5304936
Ref: Testes<49>-Footnote-15306576
Ref: Testes<49>-Footnote-25306641
Ref: Testes<49>-Footnote-35306706
Ref: Testes<49>-Footnote-45306771
Ref: Testes<49>-Footnote-55306836
Ref: Testes<49>-Footnote-65306901
Ref: Testes<49>-Footnote-75306966
Ref: Testes<49>-Footnote-85307031
Ref: Testes<49>-Footnote-95307096
Ref: Testes<49>-Footnote-105307161
Node: Construção<53>5307227
Ref: whatsnew/changelog id4885307338
Ref: 1c905307338
Ref: Construção<53>-Footnote-15308598
Ref: Construção<53>-Footnote-25308663
Node: Windows<48>5308728
Ref: whatsnew/changelog id4895308838
Ref: 1c915308838
Ref: Windows<48>-Footnote-15309270
Ref: Windows<48>-Footnote-25309335
Ref: Windows<48>-Footnote-35309400
Ref: Windows<48>-Footnote-45309465
Node: macOS<39>5309530
Ref: whatsnew/changelog id4905309632
Ref: 1c925309632
Ref: macOS<39>-Footnote-15309934
Node: IDLE<32>5309999
Ref: whatsnew/changelog id4915310111
Ref: 1c935310111
Ref: IDLE<32>-Footnote-15310713
Ref: IDLE<32>-Footnote-25310778
Ref: IDLE<32>-Footnote-35310843
Ref: IDLE<32>-Footnote-45310908
Ref: IDLE<32>-Footnote-55310973
Ref: IDLE<32>-Footnote-65311038
Node: Ferramentas/Demos<33>5311103
Ref: whatsnew/changelog id4925311215
Ref: 1c945311215
Ref: Ferramentas/Demos<33>-Footnote-15311430
Node: API C<51>5311495
Ref: whatsnew/changelog id4935311590
Ref: 1c955311590
Ref: API C<51>-Footnote-15312930
Ref: API C<51>-Footnote-25312995
Ref: API C<51>-Footnote-35313037
Ref: API C<51>-Footnote-45313102
Ref: API C<51>-Footnote-55313167
Ref: API C<51>-Footnote-65313232
Ref: API C<51>-Footnote-75313274
Ref: API C<51>-Footnote-85313339
Ref: API C<51>-Footnote-95313404
Node: Python 3 8 0 alpha 45313469
Ref: whatsnew/changelog python-3-8-0-alpha-45313592
Ref: 1c975313592
Node: Segurança<42>5314024
Ref: whatsnew/changelog id4945314127
Ref: 1c985314127
Ref: Segurança<42>-Footnote-15315015
Ref: Segurança<42>-Footnote-25315080
Ref: Segurança<42>-Footnote-35315145
Ref: Segurança<42>-Footnote-45315200
Node: Núcleo e embutidos<55>5315265
Ref: whatsnew/changelog id4955315391
Ref: 1c995315391
Ref: Núcleo e embutidos<55>-Footnote-15318670
Ref: Núcleo e embutidos<55>-Footnote-25318735
Ref: Núcleo e embutidos<55>-Footnote-35318800
Ref: Núcleo e embutidos<55>-Footnote-45318865
Ref: Núcleo e embutidos<55>-Footnote-55318930
Ref: Núcleo e embutidos<55>-Footnote-65318995
Ref: Núcleo e embutidos<55>-Footnote-75319060
Ref: Núcleo e embutidos<55>-Footnote-85319125
Ref: Núcleo e embutidos<55>-Footnote-95319190
Ref: Núcleo e embutidos<55>-Footnote-105319232
Ref: Núcleo e embutidos<55>-Footnote-115319298
Ref: Núcleo e embutidos<55>-Footnote-125319364
Ref: Núcleo e embutidos<55>-Footnote-135319430
Ref: Núcleo e embutidos<55>-Footnote-145319496
Ref: Núcleo e embutidos<55>-Footnote-155319562
Ref: Núcleo e embutidos<55>-Footnote-165319628
Ref: Núcleo e embutidos<55>-Footnote-175319694
Ref: Núcleo e embutidos<55>-Footnote-185319760
Ref: Núcleo e embutidos<55>-Footnote-195319826
Ref: Núcleo e embutidos<55>-Footnote-205319892
Node: Biblioteca<56>5319958
Ref: whatsnew/changelog id4965320088
Ref: 1c9a5320088
Ref: Biblioteca<56>-Footnote-15329430
Ref: Biblioteca<56>-Footnote-25329495
Ref: Biblioteca<56>-Footnote-35329560
Ref: Biblioteca<56>-Footnote-45329625
Ref: Biblioteca<56>-Footnote-55329692
Ref: Biblioteca<56>-Footnote-65329757
Ref: Biblioteca<56>-Footnote-75329822
Ref: Biblioteca<56>-Footnote-85329887
Ref: Biblioteca<56>-Footnote-95329952
Ref: Biblioteca<56>-Footnote-105330017
Ref: Biblioteca<56>-Footnote-115330083
Ref: Biblioteca<56>-Footnote-125330149
Ref: Biblioteca<56>-Footnote-135330215
Ref: Biblioteca<56>-Footnote-145330281
Ref: Biblioteca<56>-Footnote-155330347
Ref: Biblioteca<56>-Footnote-165330413
Ref: Biblioteca<56>-Footnote-175330479
Ref: Biblioteca<56>-Footnote-185330545
Ref: Biblioteca<56>-Footnote-195330611
Ref: Biblioteca<56>-Footnote-205330677
Ref: Biblioteca<56>-Footnote-215330743
Ref: Biblioteca<56>-Footnote-225330809
Ref: Biblioteca<56>-Footnote-235330875
Ref: Biblioteca<56>-Footnote-245330941
Ref: Biblioteca<56>-Footnote-255331007
Ref: Biblioteca<56>-Footnote-265331073
Ref: Biblioteca<56>-Footnote-275331139
Ref: Biblioteca<56>-Footnote-285331205
Ref: Biblioteca<56>-Footnote-295331271
Ref: Biblioteca<56>-Footnote-305331337
Ref: Biblioteca<56>-Footnote-315331403
Ref: Biblioteca<56>-Footnote-325331469
Ref: Biblioteca<56>-Footnote-335331535
Ref: Biblioteca<56>-Footnote-345331601
Ref: Biblioteca<56>-Footnote-355331667
Ref: Biblioteca<56>-Footnote-365331733
Ref: Biblioteca<56>-Footnote-375331799
Ref: Biblioteca<56>-Footnote-385331865
Ref: Biblioteca<56>-Footnote-395331931
Ref: Biblioteca<56>-Footnote-405331997
Ref: Biblioteca<56>-Footnote-415332063
Ref: Biblioteca<56>-Footnote-425332129
Ref: Biblioteca<56>-Footnote-435332195
Ref: Biblioteca<56>-Footnote-445332261
Ref: Biblioteca<56>-Footnote-455332327
Ref: Biblioteca<56>-Footnote-465332393
Ref: Biblioteca<56>-Footnote-475332459
Ref: Biblioteca<56>-Footnote-485332525
Ref: Biblioteca<56>-Footnote-495332591
Ref: Biblioteca<56>-Footnote-505332657
Ref: Biblioteca<56>-Footnote-515332723
Ref: Biblioteca<56>-Footnote-525332789
Ref: Biblioteca<56>-Footnote-535332855
Ref: Biblioteca<56>-Footnote-545332921
Node: Documentação<50>5332987
Ref: whatsnew/changelog id4975333104
Ref: 1c9e5333104
Ref: Documentação<50>-Footnote-15334555
Ref: Documentação<50>-Footnote-25334620
Ref: Documentação<50>-Footnote-35334685
Ref: Documentação<50>-Footnote-45334750
Ref: Documentação<50>-Footnote-55334815
Ref: Documentação<50>-Footnote-65334854
Ref: Documentação<50>-Footnote-75334919
Ref: Documentação<50>-Footnote-85334984
Ref: Documentação<50>-Footnote-95335049
Ref: Documentação<50>-Footnote-105335114
Ref: Documentação<50>-Footnote-115335180
Ref: Documentação<50>-Footnote-125335246
Node: Testes<50>5335312
Ref: whatsnew/changelog id4985335431
Ref: 1c9f5335431
Ref: Testes<50>-Footnote-15337684
Ref: Testes<50>-Footnote-25337749
Ref: Testes<50>-Footnote-35337814
Ref: Testes<50>-Footnote-45337879
Ref: Testes<50>-Footnote-55337944
Ref: Testes<50>-Footnote-65338009
Ref: Testes<50>-Footnote-75338074
Ref: Testes<50>-Footnote-85338139
Ref: Testes<50>-Footnote-95338204
Ref: Testes<50>-Footnote-105338269
Ref: Testes<50>-Footnote-115338335
Ref: Testes<50>-Footnote-125338401
Ref: Testes<50>-Footnote-135338467
Ref: Testes<50>-Footnote-145338533
Ref: Testes<50>-Footnote-155338599
Node: Construção<54>5338665
Ref: whatsnew/changelog id4995338777
Ref: 1ca15338777
Ref: Construção<54>-Footnote-15341960
Ref: Construção<54>-Footnote-25342025
Ref: Construção<54>-Footnote-35342090
Ref: Construção<54>-Footnote-45342155
Ref: Construção<54>-Footnote-55342220
Ref: Construção<54>-Footnote-65342285
Ref: Construção<54>-Footnote-75342350
Ref: Construção<54>-Footnote-85342415
Ref: Construção<54>-Footnote-95342480
Ref: Construção<54>-Footnote-105342545
Ref: Construção<54>-Footnote-115342611
Ref: Construção<54>-Footnote-125342677
Ref: Construção<54>-Footnote-135342743
Node: Windows<49>5342809
Ref: whatsnew/changelog id5005342920
Ref: 1ca25342920
Ref: Windows<49>-Footnote-15345572
Ref: Windows<49>-Footnote-25345637
Ref: Windows<49>-Footnote-35345702
Ref: Windows<49>-Footnote-45345767
Ref: Windows<49>-Footnote-55345832
Ref: Windows<49>-Footnote-65345897
Ref: Windows<49>-Footnote-75345962
Ref: Windows<49>-Footnote-85346027
Ref: Windows<49>-Footnote-95346092
Ref: Windows<49>-Footnote-105346157
Ref: Windows<49>-Footnote-115346223
Ref: Windows<49>-Footnote-125346289
Node: macOS<40>5346355
Ref: whatsnew/changelog id5015346458
Ref: 1ca35346458
Ref: macOS<40>-Footnote-15346772
Ref: macOS<40>-Footnote-25346837
Node: IDLE<33>5346902
Ref: whatsnew/changelog id5025347015
Ref: 1ca45347015
Ref: IDLE<33>-Footnote-15347262
Node: Ferramentas/Demos<34>5347327
Ref: whatsnew/changelog id5035347440
Ref: 1ca55347440
Ref: Ferramentas/Demos<34>-Footnote-15347606
Node: API C<52>5347671
Ref: whatsnew/changelog id5045347767
Ref: 1ca65347767
Ref: API C<52>-Footnote-15349759
Ref: API C<52>-Footnote-25349824
Ref: API C<52>-Footnote-35349889
Ref: API C<52>-Footnote-45349954
Ref: API C<52>-Footnote-55350019
Ref: API C<52>-Footnote-65350084
Node: Python 3 8 0 alpha 35350149
Ref: whatsnew/changelog python-3-8-0-alpha-35350273
Ref: 1ca85350273
Node: Segurança<43>5350685
Ref: whatsnew/changelog id5055350788
Ref: 1ca95350788
Ref: Segurança<43>-Footnote-15351355
Ref: Segurança<43>-Footnote-25351420
Node: Núcleo e embutidos<56>5351485
Ref: whatsnew/changelog id5065351611
Ref: 1cab5351611
Ref: Núcleo e embutidos<56>-Footnote-15355196
Ref: Núcleo e embutidos<56>-Footnote-25355261
Ref: Núcleo e embutidos<56>-Footnote-35355326
Ref: Núcleo e embutidos<56>-Footnote-45355391
Ref: Núcleo e embutidos<56>-Footnote-55355456
Ref: Núcleo e embutidos<56>-Footnote-65355521
Ref: Núcleo e embutidos<56>-Footnote-75355586
Ref: Núcleo e embutidos<56>-Footnote-85355651
Ref: Núcleo e embutidos<56>-Footnote-95355716
Ref: Núcleo e embutidos<56>-Footnote-105355781
Ref: Núcleo e embutidos<56>-Footnote-115355847
Ref: Núcleo e embutidos<56>-Footnote-125355913
Ref: Núcleo e embutidos<56>-Footnote-135355979
Ref: Núcleo e embutidos<56>-Footnote-145356045
Ref: Núcleo e embutidos<56>-Footnote-155356111
Ref: Núcleo e embutidos<56>-Footnote-165356177
Ref: Núcleo e embutidos<56>-Footnote-175356243
Ref: Núcleo e embutidos<56>-Footnote-185356309
Ref: Núcleo e embutidos<56>-Footnote-195356375
Ref: Núcleo e embutidos<56>-Footnote-205356441
Ref: Núcleo e embutidos<56>-Footnote-215356507
Ref: Núcleo e embutidos<56>-Footnote-225356573
Node: Biblioteca<57>5356639
Ref: whatsnew/changelog id5075356769
Ref: 1cad5356769
Ref: Biblioteca<57>-Footnote-15362393
Ref: Biblioteca<57>-Footnote-25362458
Ref: Biblioteca<57>-Footnote-35362523
Ref: Biblioteca<57>-Footnote-45362588
Ref: Biblioteca<57>-Footnote-55362653
Ref: Biblioteca<57>-Footnote-65362718
Ref: Biblioteca<57>-Footnote-75362783
Ref: Biblioteca<57>-Footnote-85362848
Ref: Biblioteca<57>-Footnote-95362913
Ref: Biblioteca<57>-Footnote-105362978
Ref: Biblioteca<57>-Footnote-115363044
Ref: Biblioteca<57>-Footnote-125363110
Ref: Biblioteca<57>-Footnote-135363176
Ref: Biblioteca<57>-Footnote-145363242
Ref: Biblioteca<57>-Footnote-155363308
Ref: Biblioteca<57>-Footnote-165363374
Ref: Biblioteca<57>-Footnote-175363440
Ref: Biblioteca<57>-Footnote-185363506
Ref: Biblioteca<57>-Footnote-195363572
Ref: Biblioteca<57>-Footnote-205363638
Ref: Biblioteca<57>-Footnote-215363704
Ref: Biblioteca<57>-Footnote-225363770
Ref: Biblioteca<57>-Footnote-235363836
Ref: Biblioteca<57>-Footnote-245363902
Ref: Biblioteca<57>-Footnote-255363968
Ref: Biblioteca<57>-Footnote-265364034
Ref: Biblioteca<57>-Footnote-275364100
Ref: Biblioteca<57>-Footnote-285364166
Ref: Biblioteca<57>-Footnote-295364232
Ref: Biblioteca<57>-Footnote-305364298
Ref: Biblioteca<57>-Footnote-315364364
Ref: Biblioteca<57>-Footnote-325364430
Ref: Biblioteca<57>-Footnote-335364496
Ref: Biblioteca<57>-Footnote-345364562
Ref: Biblioteca<57>-Footnote-355364628
Ref: Biblioteca<57>-Footnote-365364694
Ref: Biblioteca<57>-Footnote-375364760
Node: Documentação<51>5364826
Ref: whatsnew/changelog id5085364943
Ref: 1caf5364943
Ref: Documentação<51>-Footnote-15365514
Ref: Documentação<51>-Footnote-25365579
Ref: Documentação<51>-Footnote-35365644
Node: Testes<51>5365709
Ref: whatsnew/changelog id5095365828
Ref: 1cb05365828
Ref: Testes<51>-Footnote-15366342
Ref: Testes<51>-Footnote-25366407
Ref: Testes<51>-Footnote-35366472
Node: Construção<55>5366537
Ref: whatsnew/changelog id5105366649
Ref: 1cb15366649
Ref: Construção<55>-Footnote-15367181
Ref: Construção<55>-Footnote-25367246
Ref: Construção<55>-Footnote-35367311
Ref: Construção<55>-Footnote-45367376
Node: Windows<50>5367441
Ref: whatsnew/changelog id5115367551
Ref: 1cb25367551
Ref: Windows<50>-Footnote-15368002
Ref: Windows<50>-Footnote-25368067
Ref: Windows<50>-Footnote-35368132
Node: IDLE<34>5368197
Ref: whatsnew/changelog id5125368312
Ref: 1cb35368312
Ref: IDLE<34>-Footnote-15369421
Ref: IDLE<34>-Footnote-25369486
Ref: IDLE<34>-Footnote-35369551
Ref: IDLE<34>-Footnote-45369616
Ref: IDLE<34>-Footnote-55369681
Ref: IDLE<34>-Footnote-65369746
Ref: IDLE<34>-Footnote-75369811
Ref: IDLE<34>-Footnote-85369876
Ref: IDLE<34>-Footnote-95369941
Node: Ferramentas/Demos<35>5370006
Ref: whatsnew/changelog id5135370119
Ref: 1cb45370119
Ref: Ferramentas/Demos<35>-Footnote-15370344
Ref: Ferramentas/Demos<35>-Footnote-25370409
Node: API C<53>5370474
Ref: whatsnew/changelog id5145370570
Ref: 1cb55370570
Ref: API C<53>-Footnote-15370962
Ref: API C<53>-Footnote-25371027
Node: Python 3 8 0 alpha 25371092
Ref: whatsnew/changelog python-3-8-0-alpha-25371216
Ref: 1cb65371216
Node: Núcleo e embutidos<57>5371500
Ref: whatsnew/changelog id5155371603
Ref: 1cb75371603
Ref: Núcleo e embutidos<57>-Footnote-15374745
Ref: Núcleo e embutidos<57>-Footnote-25374810
Ref: Núcleo e embutidos<57>-Footnote-35374875
Ref: Núcleo e embutidos<57>-Footnote-45374940
Ref: Núcleo e embutidos<57>-Footnote-55375005
Ref: Núcleo e embutidos<57>-Footnote-65375072
Ref: Núcleo e embutidos<57>-Footnote-75375137
Ref: Núcleo e embutidos<57>-Footnote-85375202
Ref: Núcleo e embutidos<57>-Footnote-95375267
Ref: Núcleo e embutidos<57>-Footnote-105375332
Ref: Núcleo e embutidos<57>-Footnote-115375398
Ref: Núcleo e embutidos<57>-Footnote-125375464
Ref: Núcleo e embutidos<57>-Footnote-135375530
Ref: Núcleo e embutidos<57>-Footnote-145375596
Ref: Núcleo e embutidos<57>-Footnote-155375662
Ref: Núcleo e embutidos<57>-Footnote-165375728
Ref: Núcleo e embutidos<57>-Footnote-175375794
Node: Biblioteca<58>5375860
Ref: whatsnew/changelog id5165375990
Ref: 1cb85375990
Ref: Biblioteca<58>-Footnote-15379711
Ref: Biblioteca<58>-Footnote-25379776
Ref: Biblioteca<58>-Footnote-35379841
Ref: Biblioteca<58>-Footnote-45379906
Ref: Biblioteca<58>-Footnote-55379971
Ref: Biblioteca<58>-Footnote-65380036
Ref: Biblioteca<58>-Footnote-75380101
Ref: Biblioteca<58>-Footnote-85380166
Ref: Biblioteca<58>-Footnote-95380231
Ref: Biblioteca<58>-Footnote-105380296
Ref: Biblioteca<58>-Footnote-115380362
Ref: Biblioteca<58>-Footnote-125380428
Ref: Biblioteca<58>-Footnote-135380494
Ref: Biblioteca<58>-Footnote-145380560
Ref: Biblioteca<58>-Footnote-155380626
Ref: Biblioteca<58>-Footnote-165380692
Ref: Biblioteca<58>-Footnote-175380758
Node: Documentação<52>5380824
Ref: whatsnew/changelog id5175380941
Ref: 1cba5380941
Ref: Documentação<52>-Footnote-15381319
Ref: Documentação<52>-Footnote-25381384
Ref: Documentação<52>-Footnote-35381449
Node: Testes<52>5381514
Ref: whatsnew/changelog id5185381628
Ref: 1cbb5381628
Ref: Testes<52>-Footnote-15382995
Ref: Testes<52>-Footnote-25383060
Ref: Testes<52>-Footnote-35383125
Ref: Testes<52>-Footnote-45383190
Ref: Testes<52>-Footnote-55383255
Ref: Testes<52>-Footnote-65383320
Ref: Testes<52>-Footnote-75383385
Ref: Testes<52>-Footnote-85383450
Node: Windows<51>5383515
Ref: whatsnew/changelog id5195383619
Ref: 1cbc5383619
Ref: Windows<51>-Footnote-15384216
Ref: Windows<51>-Footnote-25384281
Ref: Windows<51>-Footnote-35384346
Ref: Windows<51>-Footnote-45384411
Ref: Windows<51>-Footnote-55384476
Node: IDLE<35>5384541
Ref: whatsnew/changelog id5205384626
Ref: 1cbd5384626
Ref: IDLE<35>-Footnote-15384932
Ref: IDLE<35>-Footnote-25384997
Ref: IDLE<35>-Footnote-35385062
Node: Python 3 8 0 alpha 15385127
Ref: whatsnew/changelog python-3-8-0-alpha-15385249
Ref: 1cbe5385249
Node: Segurança<44>5385681
Ref: whatsnew/changelog id5215385784
Ref: 1cbf5385784
Ref: Segurança<44>-Footnote-15388127
Ref: Segurança<44>-Footnote-25388192
Ref: Segurança<44>-Footnote-35388247
Ref: Segurança<44>-Footnote-45388312
Ref: Segurança<44>-Footnote-55388377
Ref: Segurança<44>-Footnote-65388442
Ref: Segurança<44>-Footnote-75388507
Ref: Segurança<44>-Footnote-85388563
Ref: Segurança<44>-Footnote-95388628
Ref: Segurança<44>-Footnote-105388693
Ref: Segurança<44>-Footnote-115388759
Ref: Segurança<44>-Footnote-125388825
Ref: Segurança<44>-Footnote-135388881
Ref: Segurança<44>-Footnote-145388947
Ref: Segurança<44>-Footnote-155389013
Ref: Segurança<44>-Footnote-165389069
Ref: Segurança<44>-Footnote-175389125
Node: Núcleo e embutidos<58>5389191
Ref: whatsnew/changelog id5225389317
Ref: 1cc05389317
Ref: Núcleo e embutidos<58>-Footnote-15415506
Ref: Núcleo e embutidos<58>-Footnote-25415571
Ref: Núcleo e embutidos<58>-Footnote-35415636
Ref: Núcleo e embutidos<58>-Footnote-45415701
Ref: Núcleo e embutidos<58>-Footnote-55415766
Ref: Núcleo e embutidos<58>-Footnote-65415831
Ref: Núcleo e embutidos<58>-Footnote-75415896
Ref: Núcleo e embutidos<58>-Footnote-85415961
Ref: Núcleo e embutidos<58>-Footnote-95416026
Ref: Núcleo e embutidos<58>-Footnote-105416091
Ref: Núcleo e embutidos<58>-Footnote-115416157
Ref: Núcleo e embutidos<58>-Footnote-125416223
Ref: Núcleo e embutidos<58>-Footnote-135416289
Ref: Núcleo e embutidos<58>-Footnote-145416355
Ref: Núcleo e embutidos<58>-Footnote-155416421
Ref: Núcleo e embutidos<58>-Footnote-165416487
Ref: Núcleo e embutidos<58>-Footnote-175416553
Ref: Núcleo e embutidos<58>-Footnote-185416619
Ref: Núcleo e embutidos<58>-Footnote-195416685
Ref: Núcleo e embutidos<58>-Footnote-205416751
Ref: Núcleo e embutidos<58>-Footnote-215416817
Ref: Núcleo e embutidos<58>-Footnote-225416883
Ref: Núcleo e embutidos<58>-Footnote-235416949
Ref: Núcleo e embutidos<58>-Footnote-245417015
Ref: Núcleo e embutidos<58>-Footnote-255417081
Ref: Núcleo e embutidos<58>-Footnote-265417124
Ref: Núcleo e embutidos<58>-Footnote-275417190
Ref: Núcleo e embutidos<58>-Footnote-285417256
Ref: Núcleo e embutidos<58>-Footnote-295417322
Ref: Núcleo e embutidos<58>-Footnote-305417388
Ref: Núcleo e embutidos<58>-Footnote-315417454
Ref: Núcleo e embutidos<58>-Footnote-325417520
Ref: Núcleo e embutidos<58>-Footnote-335417586
Ref: Núcleo e embutidos<58>-Footnote-345417652
Ref: Núcleo e embutidos<58>-Footnote-355417718
Ref: Núcleo e embutidos<58>-Footnote-365417784
Ref: Núcleo e embutidos<58>-Footnote-375417850
Ref: Núcleo e embutidos<58>-Footnote-385417916
Ref: Núcleo e embutidos<58>-Footnote-395417982
Ref: Núcleo e embutidos<58>-Footnote-405418048
Ref: Núcleo e embutidos<58>-Footnote-415418114
Ref: Núcleo e embutidos<58>-Footnote-425418180
Ref: Núcleo e embutidos<58>-Footnote-435418246
Ref: Núcleo e embutidos<58>-Footnote-445418312
Ref: Núcleo e embutidos<58>-Footnote-455418378
Ref: Núcleo e embutidos<58>-Footnote-465418444
Ref: Núcleo e embutidos<58>-Footnote-475418510
Ref: Núcleo e embutidos<58>-Footnote-485418576
Ref: Núcleo e embutidos<58>-Footnote-495418642
Ref: Núcleo e embutidos<58>-Footnote-505418708
Ref: Núcleo e embutidos<58>-Footnote-515418774
Ref: Núcleo e embutidos<58>-Footnote-525418840
Ref: Núcleo e embutidos<58>-Footnote-535418906
Ref: Núcleo e embutidos<58>-Footnote-545418972
Ref: Núcleo e embutidos<58>-Footnote-555419038
Ref: Núcleo e embutidos<58>-Footnote-565419104
Ref: Núcleo e embutidos<58>-Footnote-575419170
Ref: Núcleo e embutidos<58>-Footnote-585419236
Ref: Núcleo e embutidos<58>-Footnote-595419302
Ref: Núcleo e embutidos<58>-Footnote-605419367
Ref: Núcleo e embutidos<58>-Footnote-615419433
Ref: Núcleo e embutidos<58>-Footnote-625419499
Ref: Núcleo e embutidos<58>-Footnote-635419565
Ref: Núcleo e embutidos<58>-Footnote-645419631
Ref: Núcleo e embutidos<58>-Footnote-655419697
Ref: Núcleo e embutidos<58>-Footnote-665419763
Ref: Núcleo e embutidos<58>-Footnote-675419829
Ref: Núcleo e embutidos<58>-Footnote-685419895
Ref: Núcleo e embutidos<58>-Footnote-695419961
Ref: Núcleo e embutidos<58>-Footnote-705420027
Ref: Núcleo e embutidos<58>-Footnote-715420093
Ref: Núcleo e embutidos<58>-Footnote-725420159
Ref: Núcleo e embutidos<58>-Footnote-735420225
Ref: Núcleo e embutidos<58>-Footnote-745420291
Ref: Núcleo e embutidos<58>-Footnote-755420357
Ref: Núcleo e embutidos<58>-Footnote-765420423
Ref: Núcleo e embutidos<58>-Footnote-775420489
Ref: Núcleo e embutidos<58>-Footnote-785420555
Ref: Núcleo e embutidos<58>-Footnote-795420621
Ref: Núcleo e embutidos<58>-Footnote-805420687
Ref: Núcleo e embutidos<58>-Footnote-815420753
Ref: Núcleo e embutidos<58>-Footnote-825420819
Ref: Núcleo e embutidos<58>-Footnote-835420885
Ref: Núcleo e embutidos<58>-Footnote-845420951
Ref: Núcleo e embutidos<58>-Footnote-855421017
Ref: Núcleo e embutidos<58>-Footnote-865421083
Ref: Núcleo e embutidos<58>-Footnote-875421149
Ref: Núcleo e embutidos<58>-Footnote-885421215
Ref: Núcleo e embutidos<58>-Footnote-895421281
Ref: Núcleo e embutidos<58>-Footnote-905421347
Ref: Núcleo e embutidos<58>-Footnote-915421413
Ref: Núcleo e embutidos<58>-Footnote-925421479
Ref: Núcleo e embutidos<58>-Footnote-935421545
Ref: Núcleo e embutidos<58>-Footnote-945421611
Ref: Núcleo e embutidos<58>-Footnote-955421677
Ref: Núcleo e embutidos<58>-Footnote-965421743
Ref: Núcleo e embutidos<58>-Footnote-975421811
Ref: Núcleo e embutidos<58>-Footnote-985421877
Ref: Núcleo e embutidos<58>-Footnote-995421943
Ref: Núcleo e embutidos<58>-Footnote-1005422009
Ref: Núcleo e embutidos<58>-Footnote-1015422076
Ref: Núcleo e embutidos<58>-Footnote-1025422143
Ref: Núcleo e embutidos<58>-Footnote-1035422210
Ref: Núcleo e embutidos<58>-Footnote-1045422277
Ref: Núcleo e embutidos<58>-Footnote-1055422344
Ref: Núcleo e embutidos<58>-Footnote-1065422411
Ref: Núcleo e embutidos<58>-Footnote-1075422478
Ref: Núcleo e embutidos<58>-Footnote-1085422545
Ref: Núcleo e embutidos<58>-Footnote-1095422612
Ref: Núcleo e embutidos<58>-Footnote-1105422679
Ref: Núcleo e embutidos<58>-Footnote-1115422746
Ref: Núcleo e embutidos<58>-Footnote-1125422813
Ref: Núcleo e embutidos<58>-Footnote-1135422880
Ref: Núcleo e embutidos<58>-Footnote-1145422947
Ref: Núcleo e embutidos<58>-Footnote-1155423014
Ref: Núcleo e embutidos<58>-Footnote-1165423081
Ref: Núcleo e embutidos<58>-Footnote-1175423148
Ref: Núcleo e embutidos<58>-Footnote-1185423215
Ref: Núcleo e embutidos<58>-Footnote-1195423282
Ref: Núcleo e embutidos<58>-Footnote-1205423349
Ref: Núcleo e embutidos<58>-Footnote-1215423416
Ref: Núcleo e embutidos<58>-Footnote-1225423483
Ref: Núcleo e embutidos<58>-Footnote-1235423550
Ref: Núcleo e embutidos<58>-Footnote-1245423617
Ref: Núcleo e embutidos<58>-Footnote-1255423684
Ref: Núcleo e embutidos<58>-Footnote-1265423751
Ref: Núcleo e embutidos<58>-Footnote-1275423818
Ref: Núcleo e embutidos<58>-Footnote-1285423885
Ref: Núcleo e embutidos<58>-Footnote-1295423952
Ref: Núcleo e embutidos<58>-Footnote-1305424019
Ref: Núcleo e embutidos<58>-Footnote-1315424086
Ref: Núcleo e embutidos<58>-Footnote-1325424153
Ref: Núcleo e embutidos<58>-Footnote-1335424220
Ref: Núcleo e embutidos<58>-Footnote-1345424287
Ref: Núcleo e embutidos<58>-Footnote-1355424354
Ref: Núcleo e embutidos<58>-Footnote-1365424421
Ref: Núcleo e embutidos<58>-Footnote-1375424488
Ref: Núcleo e embutidos<58>-Footnote-1385424555
Ref: Núcleo e embutidos<58>-Footnote-1395424622
Ref: Núcleo e embutidos<58>-Footnote-1405424689
Ref: Núcleo e embutidos<58>-Footnote-1415424756
Ref: Núcleo e embutidos<58>-Footnote-1425424823
Ref: Núcleo e embutidos<58>-Footnote-1435424890
Ref: Núcleo e embutidos<58>-Footnote-1445424957
Ref: Núcleo e embutidos<58>-Footnote-1455425024
Ref: Núcleo e embutidos<58>-Footnote-1465425091
Ref: Núcleo e embutidos<58>-Footnote-1475425158
Ref: Núcleo e embutidos<58>-Footnote-1485425225
Ref: Núcleo e embutidos<58>-Footnote-1495425292
Ref: Núcleo e embutidos<58>-Footnote-1505425359
Ref: Núcleo e embutidos<58>-Footnote-1515425426
Ref: Núcleo e embutidos<58>-Footnote-1525425493
Ref: Núcleo e embutidos<58>-Footnote-1535425560
Ref: Núcleo e embutidos<58>-Footnote-1545425627
Ref: Núcleo e embutidos<58>-Footnote-1555425694
Ref: Núcleo e embutidos<58>-Footnote-1565425761
Ref: Núcleo e embutidos<58>-Footnote-1575425828
Ref: Núcleo e embutidos<58>-Footnote-1585425895
Ref: Núcleo e embutidos<58>-Footnote-1595425962
Ref: Núcleo e embutidos<58>-Footnote-1605426029
Ref: Núcleo e embutidos<58>-Footnote-1615426096
Ref: Núcleo e embutidos<58>-Footnote-1625426163
Node: Biblioteca<59>5426230
Ref: whatsnew/changelog id5235426360
Ref: 1cc65426360
Ref: Biblioteca<59>-Footnote-15497560
Ref: Biblioteca<59>-Footnote-25497625
Ref: Biblioteca<59>-Footnote-35497690
Ref: Biblioteca<59>-Footnote-45497755
Ref: Biblioteca<59>-Footnote-55497820
Ref: Biblioteca<59>-Footnote-65497885
Ref: Biblioteca<59>-Footnote-75497950
Ref: Biblioteca<59>-Footnote-85498015
Ref: Biblioteca<59>-Footnote-95498080
Ref: Biblioteca<59>-Footnote-105498145
Ref: Biblioteca<59>-Footnote-115498211
Ref: Biblioteca<59>-Footnote-125498277
Ref: Biblioteca<59>-Footnote-135498343
Ref: Biblioteca<59>-Footnote-145498409
Ref: Biblioteca<59>-Footnote-155498475
Ref: Biblioteca<59>-Footnote-165498541
Ref: Biblioteca<59>-Footnote-175498607
Ref: Biblioteca<59>-Footnote-185498673
Ref: Biblioteca<59>-Footnote-195498739
Ref: Biblioteca<59>-Footnote-205498805
Ref: Biblioteca<59>-Footnote-215498871
Ref: Biblioteca<59>-Footnote-225498937
Ref: Biblioteca<59>-Footnote-235499003
Ref: Biblioteca<59>-Footnote-245499069
Ref: Biblioteca<59>-Footnote-255499135
Ref: Biblioteca<59>-Footnote-265499201
Ref: Biblioteca<59>-Footnote-275499267
Ref: Biblioteca<59>-Footnote-285499333
Ref: Biblioteca<59>-Footnote-295499399
Ref: Biblioteca<59>-Footnote-305499465
Ref: Biblioteca<59>-Footnote-315499531
Ref: Biblioteca<59>-Footnote-325499597
Ref: Biblioteca<59>-Footnote-335499663
Ref: Biblioteca<59>-Footnote-345499729
Ref: Biblioteca<59>-Footnote-355499795
Ref: Biblioteca<59>-Footnote-365499861
Ref: Biblioteca<59>-Footnote-375499927
Ref: Biblioteca<59>-Footnote-385499993
Ref: Biblioteca<59>-Footnote-395500059
Ref: Biblioteca<59>-Footnote-405500125
Ref: Biblioteca<59>-Footnote-415500191
Ref: Biblioteca<59>-Footnote-425500257
Ref: Biblioteca<59>-Footnote-435500323
Ref: Biblioteca<59>-Footnote-445500389
Ref: Biblioteca<59>-Footnote-455500455
Ref: Biblioteca<59>-Footnote-465500521
Ref: Biblioteca<59>-Footnote-475500587
Ref: Biblioteca<59>-Footnote-485500653
Ref: Biblioteca<59>-Footnote-495500719
Ref: Biblioteca<59>-Footnote-505500785
Ref: Biblioteca<59>-Footnote-515500851
Ref: Biblioteca<59>-Footnote-525500917
Ref: Biblioteca<59>-Footnote-535500983
Ref: Biblioteca<59>-Footnote-545501049
Ref: Biblioteca<59>-Footnote-555501115
Ref: Biblioteca<59>-Footnote-565501181
Ref: Biblioteca<59>-Footnote-575501247
Ref: Biblioteca<59>-Footnote-585501313
Ref: Biblioteca<59>-Footnote-595501379
Ref: Biblioteca<59>-Footnote-605501445
Ref: Biblioteca<59>-Footnote-615501511
Ref: Biblioteca<59>-Footnote-625501577
Ref: Biblioteca<59>-Footnote-635501643
Ref: Biblioteca<59>-Footnote-645501709
Ref: Biblioteca<59>-Footnote-655501775
Ref: Biblioteca<59>-Footnote-665501841
Ref: Biblioteca<59>-Footnote-675501907
Ref: Biblioteca<59>-Footnote-685501973
Ref: Biblioteca<59>-Footnote-695502039
Ref: Biblioteca<59>-Footnote-705502105
Ref: Biblioteca<59>-Footnote-715502171
Ref: Biblioteca<59>-Footnote-725502237
Ref: Biblioteca<59>-Footnote-735502303
Ref: Biblioteca<59>-Footnote-745502369
Ref: Biblioteca<59>-Footnote-755502435
Ref: Biblioteca<59>-Footnote-765502501
Ref: Biblioteca<59>-Footnote-775502567
Ref: Biblioteca<59>-Footnote-785502633
Ref: Biblioteca<59>-Footnote-795502699
Ref: Biblioteca<59>-Footnote-805502765
Ref: Biblioteca<59>-Footnote-815502831
Ref: Biblioteca<59>-Footnote-825502897
Ref: Biblioteca<59>-Footnote-835502963
Ref: Biblioteca<59>-Footnote-845503029
Ref: Biblioteca<59>-Footnote-855503095
Ref: Biblioteca<59>-Footnote-865503161
Ref: Biblioteca<59>-Footnote-875503227
Ref: Biblioteca<59>-Footnote-885503293
Ref: Biblioteca<59>-Footnote-895503359
Ref: Biblioteca<59>-Footnote-905503425
Ref: Biblioteca<59>-Footnote-915503491
Ref: Biblioteca<59>-Footnote-925503557
Ref: Biblioteca<59>-Footnote-935503623
Ref: Biblioteca<59>-Footnote-945503683
Ref: Biblioteca<59>-Footnote-955503749
Ref: Biblioteca<59>-Footnote-965503815
Ref: Biblioteca<59>-Footnote-975503881
Ref: Biblioteca<59>-Footnote-985503947
Ref: Biblioteca<59>-Footnote-995504013
Ref: Biblioteca<59>-Footnote-1005504079
Ref: Biblioteca<59>-Footnote-1015504146
Ref: Biblioteca<59>-Footnote-1025504213
Ref: Biblioteca<59>-Footnote-1035504280
Ref: Biblioteca<59>-Footnote-1045504347
Ref: Biblioteca<59>-Footnote-1055504414
Ref: Biblioteca<59>-Footnote-1065504481
Ref: Biblioteca<59>-Footnote-1075504548
Ref: Biblioteca<59>-Footnote-1085504615
Ref: Biblioteca<59>-Footnote-1095504682
Ref: Biblioteca<59>-Footnote-1105504749
Ref: Biblioteca<59>-Footnote-1115504816
Ref: Biblioteca<59>-Footnote-1125504883
Ref: Biblioteca<59>-Footnote-1135504950
Ref: Biblioteca<59>-Footnote-1145505017
Ref: Biblioteca<59>-Footnote-1155505084
Ref: Biblioteca<59>-Footnote-1165505151
Ref: Biblioteca<59>-Footnote-1175505218
Ref: Biblioteca<59>-Footnote-1185505285
Ref: Biblioteca<59>-Footnote-1195505352
Ref: Biblioteca<59>-Footnote-1205505419
Ref: Biblioteca<59>-Footnote-1215505486
Ref: Biblioteca<59>-Footnote-1225505553
Ref: Biblioteca<59>-Footnote-1235505620
Ref: Biblioteca<59>-Footnote-1245505687
Ref: Biblioteca<59>-Footnote-1255505754
Ref: Biblioteca<59>-Footnote-1265505820
Ref: Biblioteca<59>-Footnote-1275505887
Ref: Biblioteca<59>-Footnote-1285505954
Ref: Biblioteca<59>-Footnote-1295506021
Ref: Biblioteca<59>-Footnote-1305506088
Ref: Biblioteca<59>-Footnote-1315506155
Ref: Biblioteca<59>-Footnote-1325506222
Ref: Biblioteca<59>-Footnote-1335506289
Ref: Biblioteca<59>-Footnote-1345506356
Ref: Biblioteca<59>-Footnote-1355506423
Ref: Biblioteca<59>-Footnote-1365506490
Ref: Biblioteca<59>-Footnote-1375506556
Ref: Biblioteca<59>-Footnote-1385506623
Ref: Biblioteca<59>-Footnote-1395506690
Ref: Biblioteca<59>-Footnote-1405506757
Ref: Biblioteca<59>-Footnote-1415506824
Ref: Biblioteca<59>-Footnote-1425506891
Ref: Biblioteca<59>-Footnote-1435506958
Ref: Biblioteca<59>-Footnote-1445507025
Ref: Biblioteca<59>-Footnote-1455507092
Ref: Biblioteca<59>-Footnote-1465507159
Ref: Biblioteca<59>-Footnote-1475507226
Ref: Biblioteca<59>-Footnote-1485507293
Ref: Biblioteca<59>-Footnote-1495507360
Ref: Biblioteca<59>-Footnote-1505507427
Ref: Biblioteca<59>-Footnote-1515507494
Ref: Biblioteca<59>-Footnote-1525507561
Ref: Biblioteca<59>-Footnote-1535507628
Ref: Biblioteca<59>-Footnote-1545507695
Ref: Biblioteca<59>-Footnote-1555507761
Ref: Biblioteca<59>-Footnote-1565507828
Ref: Biblioteca<59>-Footnote-1575507895
Ref: Biblioteca<59>-Footnote-1585507962
Ref: Biblioteca<59>-Footnote-1595508029
Ref: Biblioteca<59>-Footnote-1605508096
Ref: Biblioteca<59>-Footnote-1615508163
Ref: Biblioteca<59>-Footnote-1625508207
Ref: Biblioteca<59>-Footnote-1635508274
Ref: Biblioteca<59>-Footnote-1645508341
Ref: Biblioteca<59>-Footnote-1655508408
Ref: Biblioteca<59>-Footnote-1665508474
Ref: Biblioteca<59>-Footnote-1675508541
Ref: Biblioteca<59>-Footnote-1685508608
Ref: Biblioteca<59>-Footnote-1695508675
Ref: Biblioteca<59>-Footnote-1705508742
Ref: Biblioteca<59>-Footnote-1715508809
Ref: Biblioteca<59>-Footnote-1725508876
Ref: Biblioteca<59>-Footnote-1735508943
Ref: Biblioteca<59>-Footnote-1745509010
Ref: Biblioteca<59>-Footnote-1755509076
Ref: Biblioteca<59>-Footnote-1765509143
Ref: Biblioteca<59>-Footnote-1775509210
Ref: Biblioteca<59>-Footnote-1785509277
Ref: Biblioteca<59>-Footnote-1795509344
Ref: Biblioteca<59>-Footnote-1805509411
Ref: Biblioteca<59>-Footnote-1815509477
Ref: Biblioteca<59>-Footnote-1825509544
Ref: Biblioteca<59>-Footnote-1835509611
Ref: Biblioteca<59>-Footnote-1845509678
Ref: Biblioteca<59>-Footnote-1855509745
Ref: Biblioteca<59>-Footnote-1865509812
Ref: Biblioteca<59>-Footnote-1875509879
Ref: Biblioteca<59>-Footnote-1885509946
Ref: Biblioteca<59>-Footnote-1895510013
Ref: Biblioteca<59>-Footnote-1905510080
Ref: Biblioteca<59>-Footnote-1915510147
Ref: Biblioteca<59>-Footnote-1925510214
Ref: Biblioteca<59>-Footnote-1935510281
Ref: Biblioteca<59>-Footnote-1945510348
Ref: Biblioteca<59>-Footnote-1955510415
Ref: Biblioteca<59>-Footnote-1965510482
Ref: Biblioteca<59>-Footnote-1975510549
Ref: Biblioteca<59>-Footnote-1985510616
Ref: Biblioteca<59>-Footnote-1995510683
Ref: Biblioteca<59>-Footnote-2005510750
Ref: Biblioteca<59>-Footnote-2015510817
Ref: Biblioteca<59>-Footnote-2025510884
Ref: Biblioteca<59>-Footnote-2035510952
Ref: Biblioteca<59>-Footnote-2045511019
Ref: Biblioteca<59>-Footnote-2055511086
Ref: Biblioteca<59>-Footnote-2065511153
Ref: Biblioteca<59>-Footnote-2075511220
Ref: Biblioteca<59>-Footnote-2085511287
Ref: Biblioteca<59>-Footnote-2095511354
Ref: Biblioteca<59>-Footnote-2105511421
Ref: Biblioteca<59>-Footnote-2115511488
Ref: Biblioteca<59>-Footnote-2125511555
Ref: Biblioteca<59>-Footnote-2135511622
Ref: Biblioteca<59>-Footnote-2145511666
Ref: Biblioteca<59>-Footnote-2155511733
Ref: Biblioteca<59>-Footnote-2165511800
Ref: Biblioteca<59>-Footnote-2175511867
Ref: Biblioteca<59>-Footnote-2185511934
Ref: Biblioteca<59>-Footnote-2195512001
Ref: Biblioteca<59>-Footnote-2205512068
Ref: Biblioteca<59>-Footnote-2215512135
Ref: Biblioteca<59>-Footnote-2225512202
Ref: Biblioteca<59>-Footnote-2235512269
Ref: Biblioteca<59>-Footnote-2245512336
Ref: Biblioteca<59>-Footnote-2255512403
Ref: Biblioteca<59>-Footnote-2265512470
Ref: Biblioteca<59>-Footnote-2275512537
Ref: Biblioteca<59>-Footnote-2285512604
Ref: Biblioteca<59>-Footnote-2295512671
Ref: Biblioteca<59>-Footnote-2305512738
Ref: Biblioteca<59>-Footnote-2315512805
Ref: Biblioteca<59>-Footnote-2325512872
Ref: Biblioteca<59>-Footnote-2335512939
Ref: Biblioteca<59>-Footnote-2345513006
Ref: Biblioteca<59>-Footnote-2355513073
Ref: Biblioteca<59>-Footnote-2365513140
Ref: Biblioteca<59>-Footnote-2375513207
Ref: Biblioteca<59>-Footnote-2385513274
Ref: Biblioteca<59>-Footnote-2395513341
Ref: Biblioteca<59>-Footnote-2405513408
Ref: Biblioteca<59>-Footnote-2415513475
Ref: Biblioteca<59>-Footnote-2425513542
Ref: Biblioteca<59>-Footnote-2435513609
Ref: Biblioteca<59>-Footnote-2445513676
Ref: Biblioteca<59>-Footnote-2455513743
Ref: Biblioteca<59>-Footnote-2465513810
Ref: Biblioteca<59>-Footnote-2475513877
Ref: Biblioteca<59>-Footnote-2485513944
Ref: Biblioteca<59>-Footnote-2495514011
Ref: Biblioteca<59>-Footnote-2505514078
Ref: Biblioteca<59>-Footnote-2515514145
Ref: Biblioteca<59>-Footnote-2525514212
Ref: Biblioteca<59>-Footnote-2535514279
Ref: Biblioteca<59>-Footnote-2545514346
Ref: Biblioteca<59>-Footnote-2555514413
Ref: Biblioteca<59>-Footnote-2565514480
Ref: Biblioteca<59>-Footnote-2575514547
Ref: Biblioteca<59>-Footnote-2585514614
Ref: Biblioteca<59>-Footnote-2595514681
Ref: Biblioteca<59>-Footnote-2605514748
Ref: Biblioteca<59>-Footnote-2615514814
Ref: Biblioteca<59>-Footnote-2625514881
Ref: Biblioteca<59>-Footnote-2635514948
Ref: Biblioteca<59>-Footnote-2645515015
Ref: Biblioteca<59>-Footnote-2655515082
Ref: Biblioteca<59>-Footnote-2665515149
Ref: Biblioteca<59>-Footnote-2675515216
Ref: Biblioteca<59>-Footnote-2685515283
Ref: Biblioteca<59>-Footnote-2695515350
Ref: Biblioteca<59>-Footnote-2705515417
Ref: Biblioteca<59>-Footnote-2715515484
Ref: Biblioteca<59>-Footnote-2725515551
Ref: Biblioteca<59>-Footnote-2735515618
Ref: Biblioteca<59>-Footnote-2745515685
Ref: Biblioteca<59>-Footnote-2755515752
Ref: Biblioteca<59>-Footnote-2765515819
Ref: Biblioteca<59>-Footnote-2775515886
Ref: Biblioteca<59>-Footnote-2785515953
Ref: Biblioteca<59>-Footnote-2795516020
Ref: Biblioteca<59>-Footnote-2805516087
Ref: Biblioteca<59>-Footnote-2815516154
Ref: Biblioteca<59>-Footnote-2825516221
Ref: Biblioteca<59>-Footnote-2835516288
Ref: Biblioteca<59>-Footnote-2845516355
Ref: Biblioteca<59>-Footnote-2855516422
Ref: Biblioteca<59>-Footnote-2865516489
Ref: Biblioteca<59>-Footnote-2875516556
Ref: Biblioteca<59>-Footnote-2885516623
Ref: Biblioteca<59>-Footnote-2895516690
Ref: Biblioteca<59>-Footnote-2905516757
Ref: Biblioteca<59>-Footnote-2915516824
Ref: Biblioteca<59>-Footnote-2925516891
Ref: Biblioteca<59>-Footnote-2935516958
Ref: Biblioteca<59>-Footnote-2945517025
Ref: Biblioteca<59>-Footnote-2955517092
Ref: Biblioteca<59>-Footnote-2965517159
Ref: Biblioteca<59>-Footnote-2975517226
Ref: Biblioteca<59>-Footnote-2985517293
Ref: Biblioteca<59>-Footnote-2995517360
Ref: Biblioteca<59>-Footnote-3005517427
Ref: Biblioteca<59>-Footnote-3015517494
Ref: Biblioteca<59>-Footnote-3025517561
Ref: Biblioteca<59>-Footnote-3035517628
Ref: Biblioteca<59>-Footnote-3045517695
Ref: Biblioteca<59>-Footnote-3055517762
Ref: Biblioteca<59>-Footnote-3065517829
Ref: Biblioteca<59>-Footnote-3075517896
Ref: Biblioteca<59>-Footnote-3085517963
Ref: Biblioteca<59>-Footnote-3095518030
Ref: Biblioteca<59>-Footnote-3105518097
Ref: Biblioteca<59>-Footnote-3115518164
Ref: Biblioteca<59>-Footnote-3125518231
Ref: Biblioteca<59>-Footnote-3135518298
Ref: Biblioteca<59>-Footnote-3145518365
Ref: Biblioteca<59>-Footnote-3155518432
Ref: Biblioteca<59>-Footnote-3165518499
Ref: Biblioteca<59>-Footnote-3175518566
Ref: Biblioteca<59>-Footnote-3185518633
Ref: Biblioteca<59>-Footnote-3195518700
Ref: Biblioteca<59>-Footnote-3205518767
Ref: Biblioteca<59>-Footnote-3215518834
Ref: Biblioteca<59>-Footnote-3225518901
Ref: Biblioteca<59>-Footnote-3235518968
Ref: Biblioteca<59>-Footnote-3245519035
Ref: Biblioteca<59>-Footnote-3255519102
Ref: Biblioteca<59>-Footnote-3265519169
Ref: Biblioteca<59>-Footnote-3275519236
Ref: Biblioteca<59>-Footnote-3285519303
Ref: Biblioteca<59>-Footnote-3295519371
Ref: Biblioteca<59>-Footnote-3305519438
Ref: Biblioteca<59>-Footnote-3315519505
Ref: Biblioteca<59>-Footnote-3325519572
Ref: Biblioteca<59>-Footnote-3335519639
Ref: Biblioteca<59>-Footnote-3345519706
Ref: Biblioteca<59>-Footnote-3355519773
Ref: Biblioteca<59>-Footnote-3365519840
Ref: Biblioteca<59>-Footnote-3375519907
Ref: Biblioteca<59>-Footnote-3385519974
Ref: Biblioteca<59>-Footnote-3395520041
Ref: Biblioteca<59>-Footnote-3405520108
Ref: Biblioteca<59>-Footnote-3415520175
Ref: Biblioteca<59>-Footnote-3425520242
Ref: Biblioteca<59>-Footnote-3435520309
Ref: Biblioteca<59>-Footnote-3445520376
Ref: Biblioteca<59>-Footnote-3455520443
Ref: Biblioteca<59>-Footnote-3465520487
Ref: Biblioteca<59>-Footnote-3475520554
Ref: Biblioteca<59>-Footnote-3485520621
Ref: Biblioteca<59>-Footnote-3495520688
Ref: Biblioteca<59>-Footnote-3505520732
Ref: Biblioteca<59>-Footnote-3515520799
Ref: Biblioteca<59>-Footnote-3525520866
Ref: Biblioteca<59>-Footnote-3535520933
Ref: Biblioteca<59>-Footnote-3545521000
Ref: Biblioteca<59>-Footnote-3555521067
Ref: Biblioteca<59>-Footnote-3565521134
Ref: Biblioteca<59>-Footnote-3575521201
Ref: Biblioteca<59>-Footnote-3585521268
Ref: Biblioteca<59>-Footnote-3595521335
Ref: Biblioteca<59>-Footnote-3605521402
Ref: Biblioteca<59>-Footnote-3615521469
Ref: Biblioteca<59>-Footnote-3625521536
Ref: Biblioteca<59>-Footnote-3635521603
Ref: Biblioteca<59>-Footnote-3645521670
Ref: Biblioteca<59>-Footnote-3655521737
Ref: Biblioteca<59>-Footnote-3665521804
Ref: Biblioteca<59>-Footnote-3675521871
Ref: Biblioteca<59>-Footnote-3685521938
Ref: Biblioteca<59>-Footnote-3695522005
Ref: Biblioteca<59>-Footnote-3705522072
Ref: Biblioteca<59>-Footnote-3715522139
Ref: Biblioteca<59>-Footnote-3725522206
Ref: Biblioteca<59>-Footnote-3735522273
Ref: Biblioteca<59>-Footnote-3745522340
Ref: Biblioteca<59>-Footnote-3755522407
Ref: Biblioteca<59>-Footnote-3765522474
Ref: Biblioteca<59>-Footnote-3775522541
Ref: Biblioteca<59>-Footnote-3785522608
Ref: Biblioteca<59>-Footnote-3795522675
Ref: Biblioteca<59>-Footnote-3805522742
Ref: Biblioteca<59>-Footnote-3815522809
Ref: Biblioteca<59>-Footnote-3825522876
Ref: Biblioteca<59>-Footnote-3835522943
Ref: Biblioteca<59>-Footnote-3845523010
Ref: Biblioteca<59>-Footnote-3855523077
Ref: Biblioteca<59>-Footnote-3865523144
Ref: Biblioteca<59>-Footnote-3875523211
Ref: Biblioteca<59>-Footnote-3885523278
Ref: Biblioteca<59>-Footnote-3895523345
Ref: Biblioteca<59>-Footnote-3905523412
Ref: Biblioteca<59>-Footnote-3915523479
Ref: Biblioteca<59>-Footnote-3925523546
Ref: Biblioteca<59>-Footnote-3935523613
Ref: Biblioteca<59>-Footnote-3945523680
Ref: Biblioteca<59>-Footnote-3955523747
Ref: Biblioteca<59>-Footnote-3965523814
Ref: Biblioteca<59>-Footnote-3975523881
Ref: Biblioteca<59>-Footnote-3985523948
Ref: Biblioteca<59>-Footnote-3995524015
Ref: Biblioteca<59>-Footnote-4005524082
Ref: Biblioteca<59>-Footnote-4015524149
Ref: Biblioteca<59>-Footnote-4025524216
Ref: Biblioteca<59>-Footnote-4035524283
Ref: Biblioteca<59>-Footnote-4045524350
Ref: Biblioteca<59>-Footnote-4055524417
Ref: Biblioteca<59>-Footnote-4065524484
Ref: Biblioteca<59>-Footnote-4075524551
Ref: Biblioteca<59>-Footnote-4085524618
Ref: Biblioteca<59>-Footnote-4095524685
Ref: Biblioteca<59>-Footnote-4105524752
Ref: Biblioteca<59>-Footnote-4115524819
Ref: Biblioteca<59>-Footnote-4125524886
Ref: Biblioteca<59>-Footnote-4135524953
Ref: Biblioteca<59>-Footnote-4145525020
Ref: Biblioteca<59>-Footnote-4155525087
Ref: Biblioteca<59>-Footnote-4165525154
Ref: Biblioteca<59>-Footnote-4175525221
Ref: Biblioteca<59>-Footnote-4185525288
Ref: Biblioteca<59>-Footnote-4195525355
Ref: Biblioteca<59>-Footnote-4205525422
Ref: Biblioteca<59>-Footnote-4215525489
Ref: Biblioteca<59>-Footnote-4225525556
Ref: Biblioteca<59>-Footnote-4235525622
Ref: Biblioteca<59>-Footnote-4245525689
Ref: Biblioteca<59>-Footnote-4255525756
Ref: Biblioteca<59>-Footnote-4265525823
Ref: Biblioteca<59>-Footnote-4275525890
Ref: Biblioteca<59>-Footnote-4285525957
Ref: Biblioteca<59>-Footnote-4295526024
Ref: Biblioteca<59>-Footnote-4305526091
Ref: Biblioteca<59>-Footnote-4315526158
Ref: Biblioteca<59>-Footnote-4325526225
Ref: Biblioteca<59>-Footnote-4335526292
Ref: Biblioteca<59>-Footnote-4345526359
Ref: Biblioteca<59>-Footnote-4355526426
Ref: Biblioteca<59>-Footnote-4365526493
Ref: Biblioteca<59>-Footnote-4375526560
Node: Documentação<53>5526627
Ref: whatsnew/changelog id5245526744
Ref: 1cde5526744
Ref: Documentação<53>-Footnote-15533435
Ref: Documentação<53>-Footnote-25533500
Ref: Documentação<53>-Footnote-35533565
Ref: Documentação<53>-Footnote-45533630
Ref: Documentação<53>-Footnote-55533695
Ref: Documentação<53>-Footnote-65533760
Ref: Documentação<53>-Footnote-75533825
Ref: Documentação<53>-Footnote-85533890
Ref: Documentação<53>-Footnote-95533955
Ref: Documentação<53>-Footnote-105534020
Ref: Documentação<53>-Footnote-115534086
Ref: Documentação<53>-Footnote-125534152
Ref: Documentação<53>-Footnote-135534218
Ref: Documentação<53>-Footnote-145534284
Ref: Documentação<53>-Footnote-155534350
Ref: Documentação<53>-Footnote-165534416
Ref: Documentação<53>-Footnote-175534482
Ref: Documentação<53>-Footnote-185534548
Ref: Documentação<53>-Footnote-195534614
Ref: Documentação<53>-Footnote-205534680
Ref: Documentação<53>-Footnote-215534746
Ref: Documentação<53>-Footnote-225534812
Ref: Documentação<53>-Footnote-235534878
Ref: Documentação<53>-Footnote-245534921
Ref: Documentação<53>-Footnote-255534987
Ref: Documentação<53>-Footnote-265535053
Ref: Documentação<53>-Footnote-275535119
Ref: Documentação<53>-Footnote-285535185
Ref: Documentação<53>-Footnote-295535251
Ref: Documentação<53>-Footnote-305535294
Ref: Documentação<53>-Footnote-315535360
Ref: Documentação<53>-Footnote-325535426
Ref: Documentação<53>-Footnote-335535492
Ref: Documentação<53>-Footnote-345535558
Ref: Documentação<53>-Footnote-355535624
Ref: Documentação<53>-Footnote-365535690
Ref: Documentação<53>-Footnote-375535756
Ref: Documentação<53>-Footnote-385535822
Ref: Documentação<53>-Footnote-395535888
Ref: Documentação<53>-Footnote-405535954
Ref: Documentação<53>-Footnote-415536020
Ref: Documentação<53>-Footnote-425536086
Ref: Documentação<53>-Footnote-435536152
Ref: Documentação<53>-Footnote-445536218
Ref: Documentação<53>-Footnote-455536284
Ref: Documentação<53>-Footnote-465536350
Ref: Documentação<53>-Footnote-475536416
Ref: Documentação<53>-Footnote-485536482
Ref: Documentação<53>-Footnote-495536548
Ref: Documentação<53>-Footnote-505536614
Ref: Documentação<53>-Footnote-515536679
Ref: Documentação<53>-Footnote-525536745
Ref: Documentação<53>-Footnote-535536811
Ref: Documentação<53>-Footnote-545536877
Ref: Documentação<53>-Footnote-555536943
Ref: Documentação<53>-Footnote-565537009
Ref: Documentação<53>-Footnote-575537074
Ref: Documentação<53>-Footnote-585537140
Ref: Documentação<53>-Footnote-595537206
Node: Testes<53>5537272
Ref: whatsnew/changelog id5255537391
Ref: 1ce05537391
Ref: Testes<53>-Footnote-15545019
Ref: Testes<53>-Footnote-25545084
Ref: Testes<53>-Footnote-35545149
Ref: Testes<53>-Footnote-45545214
Ref: Testes<53>-Footnote-55545279
Ref: Testes<53>-Footnote-65545344
Ref: Testes<53>-Footnote-75545409
Ref: Testes<53>-Footnote-85545474
Ref: Testes<53>-Footnote-95545539
Ref: Testes<53>-Footnote-105545604
Ref: Testes<53>-Footnote-115545670
Ref: Testes<53>-Footnote-125545736
Ref: Testes<53>-Footnote-135545802
Ref: Testes<53>-Footnote-145545868
Ref: Testes<53>-Footnote-155545934
Ref: Testes<53>-Footnote-165546000
Ref: Testes<53>-Footnote-175546066
Ref: Testes<53>-Footnote-185546132
Ref: Testes<53>-Footnote-195546198
Ref: Testes<53>-Footnote-205546264
Ref: Testes<53>-Footnote-215546330
Ref: Testes<53>-Footnote-225546396
Ref: Testes<53>-Footnote-235546462
Ref: Testes<53>-Footnote-245546528
Ref: Testes<53>-Footnote-255546594
Ref: Testes<53>-Footnote-265546660
Ref: Testes<53>-Footnote-275546726
Ref: Testes<53>-Footnote-285546792
Ref: Testes<53>-Footnote-295546858
Ref: Testes<53>-Footnote-305546924
Ref: Testes<53>-Footnote-315546990
Ref: Testes<53>-Footnote-325547056
Ref: Testes<53>-Footnote-335547122
Ref: Testes<53>-Footnote-345547188
Ref: Testes<53>-Footnote-355547254
Ref: Testes<53>-Footnote-365547320
Ref: Testes<53>-Footnote-375547386
Ref: Testes<53>-Footnote-385547452
Ref: Testes<53>-Footnote-395547518
Ref: Testes<53>-Footnote-405547584
Ref: Testes<53>-Footnote-415547650
Ref: Testes<53>-Footnote-425547716
Ref: Testes<53>-Footnote-435547782
Ref: Testes<53>-Footnote-445547848
Ref: Testes<53>-Footnote-455547914
Ref: Testes<53>-Footnote-465547980
Ref: Testes<53>-Footnote-475548046
Ref: Testes<53>-Footnote-485548112
Node: Construção<56>5548178
Ref: whatsnew/changelog id5265548290
Ref: 1ce15548290
Ref: Construção<56>-Footnote-15553423
Ref: Construção<56>-Footnote-25553488
Ref: Construção<56>-Footnote-35553553
Ref: Construção<56>-Footnote-45553618
Ref: Construção<56>-Footnote-55553683
Ref: Construção<56>-Footnote-65553748
Ref: Construção<56>-Footnote-75553813
Ref: Construção<56>-Footnote-85553878
Ref: Construção<56>-Footnote-95553943
Ref: Construção<56>-Footnote-105554008
Ref: Construção<56>-Footnote-115554074
Ref: Construção<56>-Footnote-125554140
Ref: Construção<56>-Footnote-135554206
Ref: Construção<56>-Footnote-145554272
Ref: Construção<56>-Footnote-155554338
Ref: Construção<56>-Footnote-165554404
Ref: Construção<56>-Footnote-175554470
Ref: Construção<56>-Footnote-185554536
Ref: Construção<56>-Footnote-195554602
Ref: Construção<56>-Footnote-205554668
Ref: Construção<56>-Footnote-215554734
Ref: Construção<56>-Footnote-225554800
Ref: Construção<56>-Footnote-235554866
Ref: Construção<56>-Footnote-245554931
Ref: Construção<56>-Footnote-255554997
Ref: Construção<56>-Footnote-265555063
Ref: Construção<56>-Footnote-275555129
Ref: Construção<56>-Footnote-285555195
Ref: Construção<56>-Footnote-295555261
Ref: Construção<56>-Footnote-305555327
Ref: Construção<56>-Footnote-315555393
Ref: Construção<56>-Footnote-325555459
Ref: Construção<56>-Footnote-335555525
Ref: Construção<56>-Footnote-345555591
Ref: Construção<56>-Footnote-355555657
Ref: Construção<56>-Footnote-365555723
Ref: Construção<56>-Footnote-375555789
Node: Windows<52>5555855
Ref: whatsnew/changelog id5275555966
Ref: 1ce25555966
Ref: Windows<52>-Footnote-15560389
Ref: Windows<52>-Footnote-25560454
Ref: Windows<52>-Footnote-35560519
Ref: Windows<52>-Footnote-45560584
Ref: Windows<52>-Footnote-55560649
Ref: Windows<52>-Footnote-65560714
Ref: Windows<52>-Footnote-75560779
Ref: Windows<52>-Footnote-85560844
Ref: Windows<52>-Footnote-95560909
Ref: Windows<52>-Footnote-105560974
Ref: Windows<52>-Footnote-115561040
Ref: Windows<52>-Footnote-125561106
Ref: Windows<52>-Footnote-135561172
Ref: Windows<52>-Footnote-145561238
Ref: Windows<52>-Footnote-155561304
Ref: Windows<52>-Footnote-165561370
Ref: Windows<52>-Footnote-175561436
Ref: Windows<52>-Footnote-185561502
Ref: Windows<52>-Footnote-195561568
Ref: Windows<52>-Footnote-205561634
Ref: Windows<52>-Footnote-215561700
Ref: Windows<52>-Footnote-225561766
Ref: Windows<52>-Footnote-235561832
Ref: Windows<52>-Footnote-245561898
Ref: Windows<52>-Footnote-255561964
Ref: Windows<52>-Footnote-265562030
Ref: Windows<52>-Footnote-275562096
Ref: Windows<52>-Footnote-285562162
Ref: Windows<52>-Footnote-295562228
Ref: Windows<52>-Footnote-305562294
Ref: Windows<52>-Footnote-315562360
Ref: Windows<52>-Footnote-325562426
Ref: Windows<52>-Footnote-335562492
Ref: Windows<52>-Footnote-345562558
Ref: Windows<52>-Footnote-355562624
Ref: Windows<52>-Footnote-365562690
Ref: Windows<52>-Footnote-375562756
Ref: Windows<52>-Footnote-385562822
Ref: Windows<52>-Footnote-395562888
Ref: Windows<52>-Footnote-405562954
Node: macOS<41>5563019
Ref: whatsnew/changelog id5285563122
Ref: 1ce35563122
Ref: macOS<41>-Footnote-15564729
Ref: macOS<41>-Footnote-25564794
Ref: macOS<41>-Footnote-35564859
Ref: macOS<41>-Footnote-45564924
Ref: macOS<41>-Footnote-55564989
Ref: macOS<41>-Footnote-65565054
Ref: macOS<41>-Footnote-75565119
Ref: macOS<41>-Footnote-85565184
Ref: macOS<41>-Footnote-95565249
Ref: macOS<41>-Footnote-105565314
Node: IDLE<36>5565380
Ref: whatsnew/changelog id5295565493
Ref: 1ce45565493
Ref: IDLE<36>-Footnote-15573955
Ref: IDLE<36>-Footnote-25574020
Ref: IDLE<36>-Footnote-35574085
Ref: IDLE<36>-Footnote-45574150
Ref: IDLE<36>-Footnote-55574215
Ref: IDLE<36>-Footnote-65574280
Ref: IDLE<36>-Footnote-75574345
Ref: IDLE<36>-Footnote-85574410
Ref: IDLE<36>-Footnote-95574475
Ref: IDLE<36>-Footnote-105574540
Ref: IDLE<36>-Footnote-115574606
Ref: IDLE<36>-Footnote-125574672
Ref: IDLE<36>-Footnote-135574738
Ref: IDLE<36>-Footnote-145574804
Ref: IDLE<36>-Footnote-155574870
Ref: IDLE<36>-Footnote-165574936
Ref: IDLE<36>-Footnote-175575002
Ref: IDLE<36>-Footnote-185575068
Ref: IDLE<36>-Footnote-195575134
Ref: IDLE<36>-Footnote-205575200
Ref: IDLE<36>-Footnote-215575266
Ref: IDLE<36>-Footnote-225575332
Ref: IDLE<36>-Footnote-235575398
Ref: IDLE<36>-Footnote-245575464
Ref: IDLE<36>-Footnote-255575530
Ref: IDLE<36>-Footnote-265575596
Ref: IDLE<36>-Footnote-275575662
Ref: IDLE<36>-Footnote-285575730
Ref: IDLE<36>-Footnote-295575796
Ref: IDLE<36>-Footnote-305575862
Ref: IDLE<36>-Footnote-315575928
Ref: IDLE<36>-Footnote-325575994
Ref: IDLE<36>-Footnote-335576060
Ref: IDLE<36>-Footnote-345576126
Ref: IDLE<36>-Footnote-355576192
Ref: IDLE<36>-Footnote-365576258
Ref: IDLE<36>-Footnote-375576324
Ref: IDLE<36>-Footnote-385576390
Ref: IDLE<36>-Footnote-395576456
Ref: IDLE<36>-Footnote-405576522
Ref: IDLE<36>-Footnote-415576588
Ref: IDLE<36>-Footnote-425576654
Ref: IDLE<36>-Footnote-435576720
Ref: IDLE<36>-Footnote-445576786
Ref: IDLE<36>-Footnote-455576852
Ref: IDLE<36>-Footnote-465576918
Ref: IDLE<36>-Footnote-475576984
Ref: IDLE<36>-Footnote-485577050
Ref: IDLE<36>-Footnote-495577116
Ref: IDLE<36>-Footnote-505577182
Ref: IDLE<36>-Footnote-515577248
Ref: IDLE<36>-Footnote-525577314
Ref: IDLE<36>-Footnote-535577380
Ref: IDLE<36>-Footnote-545577446
Ref: IDLE<36>-Footnote-555577512
Ref: IDLE<36>-Footnote-565577578
Ref: IDLE<36>-Footnote-575577644
Ref: IDLE<36>-Footnote-585577710
Ref: IDLE<36>-Footnote-595577776
Node: Ferramentas/Demos<36>5577842
Ref: whatsnew/changelog id5305577955
Ref: 1ce55577955
Ref: Ferramentas/Demos<36>-Footnote-15579616
Ref: Ferramentas/Demos<36>-Footnote-25579681
Ref: Ferramentas/Demos<36>-Footnote-35579746
Ref: Ferramentas/Demos<36>-Footnote-45579811
Ref: Ferramentas/Demos<36>-Footnote-55579876
Ref: Ferramentas/Demos<36>-Footnote-65579941
Ref: Ferramentas/Demos<36>-Footnote-75580006
Ref: Ferramentas/Demos<36>-Footnote-85580071
Ref: Ferramentas/Demos<36>-Footnote-95580136
Ref: Ferramentas/Demos<36>-Footnote-105580201
Ref: Ferramentas/Demos<36>-Footnote-115580267
Ref: Ferramentas/Demos<36>-Footnote-125580333
Node: API C<54>5580399
Ref: whatsnew/changelog id5315580495
Ref: 1ce65580495
Ref: API C<54>-Footnote-15583905
Ref: API C<54>-Footnote-25583970
Ref: API C<54>-Footnote-35584035
Ref: API C<54>-Footnote-45584100
Ref: API C<54>-Footnote-55584165
Ref: API C<54>-Footnote-65584230
Ref: API C<54>-Footnote-75584295
Ref: API C<54>-Footnote-85584360
Ref: API C<54>-Footnote-95584425
Ref: API C<54>-Footnote-105584490
Ref: API C<54>-Footnote-115584556
Ref: API C<54>-Footnote-125584622
Ref: API C<54>-Footnote-135584688
Ref: API C<54>-Footnote-145584754
Ref: API C<54>-Footnote-155584820
Ref: API C<54>-Footnote-165584886
Ref: API C<54>-Footnote-175584952
Ref: API C<54>-Footnote-185585018
Ref: API C<54>-Footnote-195585084
Ref: API C<54>-Footnote-205585150
Ref: API C<54>-Footnote-215585216
Ref: API C<54>-Footnote-225585282
Node: Python 3 7 0 final5585348
Ref: whatsnew/changelog python-3-7-0-final5585482
Ref: 1cee5585482
Node: Biblioteca<60>5585632
Ref: whatsnew/changelog id5325585719
Ref: 1cef5585719
Ref: Biblioteca<60>-Footnote-15585895
Node: API C<55>5585960
Ref: whatsnew/changelog id5335586047
Ref: 1cf15586047
Ref: API C<55>-Footnote-15586258
Node: Python 3 7 0 release candidate 15586323
Ref: whatsnew/changelog python-3-7-0-release-candidate-15586456
Ref: 1cf25586456
Node: Núcleo e embutidos<59>5586776
Ref: whatsnew/changelog id5345586891
Ref: 1cf35586891
Ref: Núcleo e embutidos<59>-Footnote-15587538
Ref: Núcleo e embutidos<59>-Footnote-25587603
Ref: Núcleo e embutidos<59>-Footnote-35587668
Ref: Núcleo e embutidos<59>-Footnote-45587733
Node: Biblioteca<61>5587798
Ref: whatsnew/changelog id5355587940
Ref: 1cf45587940
Ref: Biblioteca<61>-Footnote-15589644
Ref: Biblioteca<61>-Footnote-25589709
Ref: Biblioteca<61>-Footnote-35589774
Ref: Biblioteca<61>-Footnote-45589839
Ref: Biblioteca<61>-Footnote-55589904
Ref: Biblioteca<61>-Footnote-65589969
Ref: Biblioteca<61>-Footnote-75590034
Ref: Biblioteca<61>-Footnote-85590099
Ref: Biblioteca<61>-Footnote-95590164
Ref: Biblioteca<61>-Footnote-105590229
Ref: Biblioteca<61>-Footnote-115590295
Ref: Biblioteca<61>-Footnote-125590361
Ref: Biblioteca<61>-Footnote-135590427
Node: Documentação<54>5590493
Ref: whatsnew/changelog id5365590628
Ref: 1cf55590628
Ref: Documentação<54>-Footnote-15591135
Ref: Documentação<54>-Footnote-25591200
Ref: Documentação<54>-Footnote-35591242
Ref: Documentação<54>-Footnote-45591307
Node: Construção<57>5591372
Ref: whatsnew/changelog id5375591504
Ref: 1cf65591504
Ref: Construção<57>-Footnote-15591778
Node: Windows<53>5591842
Ref: whatsnew/changelog id5385591964
Ref: 1cf75591964
Ref: Windows<53>-Footnote-15592121
Node: IDLE<37>5592186
Ref: whatsnew/changelog id5395592283
Ref: 1cf85592283
Ref: IDLE<37>-Footnote-15593503
Ref: IDLE<37>-Footnote-25593568
Ref: IDLE<37>-Footnote-35593633
Ref: IDLE<37>-Footnote-45593698
Ref: IDLE<37>-Footnote-55593763
Ref: IDLE<37>-Footnote-65593828
Node: Python 3 7 0 beta 55593893
Ref: whatsnew/changelog python-3-7-0-beta-55594027
Ref: 1cf95594027
Node: Núcleo e embutidos<60>5594339
Ref: whatsnew/changelog id5405594441
Ref: 1cfa5594441
Ref: Núcleo e embutidos<60>-Footnote-15595958
Ref: Núcleo e embutidos<60>-Footnote-25596023
Ref: Núcleo e embutidos<60>-Footnote-35596088
Ref: Núcleo e embutidos<60>-Footnote-45596153
Ref: Núcleo e embutidos<60>-Footnote-55596218
Ref: Núcleo e embutidos<60>-Footnote-65596283
Ref: Núcleo e embutidos<60>-Footnote-75596348
Ref: Núcleo e embutidos<60>-Footnote-85596413
Ref: Núcleo e embutidos<60>-Footnote-95596478
Node: Biblioteca<62>5596543
Ref: whatsnew/changelog id5415596672
Ref: 1cfb5596672
Ref: Biblioteca<62>-Footnote-15602308
Ref: Biblioteca<62>-Footnote-25602373
Ref: Biblioteca<62>-Footnote-35602438
Ref: Biblioteca<62>-Footnote-45602503
Ref: Biblioteca<62>-Footnote-55602568
Ref: Biblioteca<62>-Footnote-65602633
Ref: Biblioteca<62>-Footnote-75602698
Ref: Biblioteca<62>-Footnote-85602763
Ref: Biblioteca<62>-Footnote-95602828
Ref: Biblioteca<62>-Footnote-105602893
Ref: Biblioteca<62>-Footnote-115602959
Ref: Biblioteca<62>-Footnote-125603025
Ref: Biblioteca<62>-Footnote-135603091
Ref: Biblioteca<62>-Footnote-145603157
Ref: Biblioteca<62>-Footnote-155603223
Ref: Biblioteca<62>-Footnote-165603289
Ref: Biblioteca<62>-Footnote-175603355
Ref: Biblioteca<62>-Footnote-185603421
Ref: Biblioteca<62>-Footnote-195603487
Ref: Biblioteca<62>-Footnote-205603553
Ref: Biblioteca<62>-Footnote-215603619
Ref: Biblioteca<62>-Footnote-225603685
Ref: Biblioteca<62>-Footnote-235603751
Ref: Biblioteca<62>-Footnote-245603817
Ref: Biblioteca<62>-Footnote-255603883
Ref: Biblioteca<62>-Footnote-265603949
Ref: Biblioteca<62>-Footnote-275604015
Ref: Biblioteca<62>-Footnote-285604081
Ref: Biblioteca<62>-Footnote-295604147
Ref: Biblioteca<62>-Footnote-305604213
Ref: Biblioteca<62>-Footnote-315604279
Ref: Biblioteca<62>-Footnote-325604345
Ref: Biblioteca<62>-Footnote-335604411
Ref: Biblioteca<62>-Footnote-345604477
Ref: Biblioteca<62>-Footnote-355604543
Ref: Biblioteca<62>-Footnote-365604609
Ref: Biblioteca<62>-Footnote-375604675
Ref: Biblioteca<62>-Footnote-385604741
Node: Documentação<55>5604807
Ref: whatsnew/changelog id5425604923
Ref: 1cfc5604923
Ref: Documentação<55>-Footnote-15605393
Ref: Documentação<55>-Footnote-25605458
Ref: Documentação<55>-Footnote-35605523
Ref: Documentação<55>-Footnote-45605565
Ref: Documentação<55>-Footnote-55605630
Ref: Documentação<55>-Footnote-65605695
Node: Testes<54>5605760
Ref: whatsnew/changelog id5435605878
Ref: 1cfd5605878
Ref: Testes<54>-Footnote-15606229
Ref: Testes<54>-Footnote-25606294
Node: Construção<58>5606359
Ref: whatsnew/changelog id5445606468
Ref: 1cfe5606468
Ref: Construção<58>-Footnote-15606959
Ref: Construção<58>-Footnote-25607024
Ref: Construção<58>-Footnote-35607089
Node: macOS<42>5607154
Ref: whatsnew/changelog id5455607261
Ref: 1cff5607261
Ref: macOS<42>-Footnote-15607503
Node: IDLE<38>5607568
Ref: whatsnew/changelog id5465607650
Ref: 1d005607650
Ref: IDLE<38>-Footnote-15607929
Ref: IDLE<38>-Footnote-25607994
Ref: IDLE<38>-Footnote-35608059
Node: Python 3 7 0 beta 45608124
Ref: whatsnew/changelog python-3-7-0-beta-45608245
Ref: 1d015608245
Node: Núcleo e embutidos<61>5608625
Ref: whatsnew/changelog id5475608727
Ref: 1d025608727
Ref: Núcleo e embutidos<61>-Footnote-15609860
Ref: Núcleo e embutidos<61>-Footnote-25609925
Ref: Núcleo e embutidos<61>-Footnote-35609990
Ref: Núcleo e embutidos<61>-Footnote-45610055
Ref: Núcleo e embutidos<61>-Footnote-55610120
Ref: Núcleo e embutidos<61>-Footnote-65610185
Ref: Núcleo e embutidos<61>-Footnote-75610250
Node: Biblioteca<63>5610315
Ref: whatsnew/changelog id5485610444
Ref: 1d035610444
Ref: Biblioteca<63>-Footnote-15613287
Ref: Biblioteca<63>-Footnote-25613352
Ref: Biblioteca<63>-Footnote-35613417
Ref: Biblioteca<63>-Footnote-45613482
Ref: Biblioteca<63>-Footnote-55613548
Ref: Biblioteca<63>-Footnote-65613613
Ref: Biblioteca<63>-Footnote-75613678
Ref: Biblioteca<63>-Footnote-85613743
Ref: Biblioteca<63>-Footnote-95613808
Ref: Biblioteca<63>-Footnote-105613873
Ref: Biblioteca<63>-Footnote-115613939
Ref: Biblioteca<63>-Footnote-125614005
Ref: Biblioteca<63>-Footnote-135614071
Ref: Biblioteca<63>-Footnote-145614137
Ref: Biblioteca<63>-Footnote-155614203
Ref: Biblioteca<63>-Footnote-165614269
Ref: Biblioteca<63>-Footnote-175614335
Ref: Biblioteca<63>-Footnote-185614378
Ref: Biblioteca<63>-Footnote-195614444
Ref: Biblioteca<63>-Footnote-205614510
Ref: Biblioteca<63>-Footnote-215614576
Ref: Biblioteca<63>-Footnote-225614642
Node: Documentação<56>5614708
Ref: whatsnew/changelog id5495614824
Ref: 1d045614824
Ref: Documentação<56>-Footnote-15615575
Ref: Documentação<56>-Footnote-25615640
Ref: Documentação<56>-Footnote-35615705
Ref: Documentação<56>-Footnote-45615770
Ref: Documentação<56>-Footnote-55615835
Ref: Documentação<56>-Footnote-65615899
Node: Testes<55>5615964
Ref: whatsnew/changelog id5505616082
Ref: 1d055616082
Ref: Testes<55>-Footnote-15616300
Node: Construção<59>5616365
Ref: whatsnew/changelog id5515616476
Ref: 1d065616476
Ref: Construção<59>-Footnote-15617178
Ref: Construção<59>-Footnote-25617243
Ref: Construção<59>-Footnote-35617308
Ref: Construção<59>-Footnote-45617373
Ref: Construção<59>-Footnote-55617438
Node: Windows<54>5617503
Ref: whatsnew/changelog id5525617613
Ref: 1d075617613
Ref: Windows<54>-Footnote-15617754
Node: macOS<43>5617819
Ref: whatsnew/changelog id5535617921
Ref: 1d085617921
Ref: macOS<43>-Footnote-15618062
Node: IDLE<39>5618127
Ref: whatsnew/changelog id5545618239
Ref: 1d095618239
Ref: IDLE<39>-Footnote-15618829
Ref: IDLE<39>-Footnote-25618894
Node: Ferramentas/Demos<37>5618959
Ref: whatsnew/changelog id5555619053
Ref: 1d0a5619053
Ref: Ferramentas/Demos<37>-Footnote-15619673
Ref: Ferramentas/Demos<37>-Footnote-25619738
Ref: Ferramentas/Demos<37>-Footnote-35619803
Ref: Ferramentas/Demos<37>-Footnote-45619868
Node: Python 3 7 0 beta 35619933
Ref: whatsnew/changelog python-3-7-0-beta-35620054
Ref: 1d0b5620054
Node: Segurança<45>5620484
Ref: whatsnew/changelog id5565620586
Ref: 1d0c5620586
Ref: Segurança<45>-Footnote-15621221
Ref: Segurança<45>-Footnote-25621286
Ref: Segurança<45>-Footnote-35621341
Ref: Segurança<45>-Footnote-45621406
Ref: Segurança<45>-Footnote-55621471
Ref: Segurança<45>-Footnote-65621526
Node: Núcleo e embutidos<62>5621581
Ref: whatsnew/changelog id5575621706
Ref: 1d0d5621706
Ref: Núcleo e embutidos<62>-Footnote-15622919
Ref: Núcleo e embutidos<62>-Footnote-25622984
Ref: Núcleo e embutidos<62>-Footnote-35623049
Ref: Núcleo e embutidos<62>-Footnote-45623114
Ref: Núcleo e embutidos<62>-Footnote-55623179
Ref: Núcleo e embutidos<62>-Footnote-65623244
Ref: Núcleo e embutidos<62>-Footnote-75623309
Node: Biblioteca<64>5623374
Ref: whatsnew/changelog id5585623503
Ref: 1d0e5623503
Ref: Biblioteca<64>-Footnote-15627564
Ref: Biblioteca<64>-Footnote-25627629
Ref: Biblioteca<64>-Footnote-35627694
Ref: Biblioteca<64>-Footnote-45627759
Ref: Biblioteca<64>-Footnote-55627824
Ref: Biblioteca<64>-Footnote-65627889
Ref: Biblioteca<64>-Footnote-75627954
Ref: Biblioteca<64>-Footnote-85628019
Ref: Biblioteca<64>-Footnote-95628084
Ref: Biblioteca<64>-Footnote-105628149
Ref: Biblioteca<64>-Footnote-115628215
Ref: Biblioteca<64>-Footnote-125628281
Ref: Biblioteca<64>-Footnote-135628347
Ref: Biblioteca<64>-Footnote-145628413
Ref: Biblioteca<64>-Footnote-155628479
Ref: Biblioteca<64>-Footnote-165628545
Ref: Biblioteca<64>-Footnote-175628611
Ref: Biblioteca<64>-Footnote-185628677
Ref: Biblioteca<64>-Footnote-195628743
Ref: Biblioteca<64>-Footnote-205628809
Ref: Biblioteca<64>-Footnote-215628875
Ref: Biblioteca<64>-Footnote-225628941
Ref: Biblioteca<64>-Footnote-235629007
Ref: Biblioteca<64>-Footnote-245629073
Ref: Biblioteca<64>-Footnote-255629139
Ref: Biblioteca<64>-Footnote-265629205
Ref: Biblioteca<64>-Footnote-275629271
Node: Documentação<57>5629337
Ref: whatsnew/changelog id5595629453
Ref: 1d0f5629453
Ref: Documentação<57>-Footnote-15630090
Ref: Documentação<57>-Footnote-25630155
Ref: Documentação<57>-Footnote-35630220
Ref: Documentação<57>-Footnote-45630285
Ref: Documentação<57>-Footnote-55630350
Node: Testes<56>5630415
Ref: whatsnew/changelog id5605630533
Ref: 1d105630533
Ref: Testes<56>-Footnote-15630868
Ref: Testes<56>-Footnote-25630933
Ref: Testes<56>-Footnote-35630998
Node: Construção<60>5631063
Ref: whatsnew/changelog id5615631174
Ref: 1d115631174
Ref: Construção<60>-Footnote-15631323
Node: Windows<55>5631388
Ref: whatsnew/changelog id5625631498
Ref: 1d125631498
Ref: Windows<55>-Footnote-15631777
Ref: Windows<55>-Footnote-25631842
Node: macOS<44>5631907
Ref: whatsnew/changelog id5635632009
Ref: 1d135632009
Ref: macOS<44>-Footnote-15632441
Node: IDLE<40>5632506
Ref: whatsnew/changelog id5645632618
Ref: 1d145632618
Ref: IDLE<40>-Footnote-15633332
Ref: IDLE<40>-Footnote-25633397
Node: Ferramentas/Demos<38>5633462
Ref: whatsnew/changelog id5655633574
Ref: 1d155633574
Ref: Ferramentas/Demos<38>-Footnote-15633816
Node: API C<56>5633881
Ref: whatsnew/changelog id5665633976
Ref: 1d165633976
Ref: API C<56>-Footnote-15634360
Ref: API C<56>-Footnote-25634425
Node: Python 3 7 0 beta 25634490
Ref: whatsnew/changelog python-3-7-0-beta-25634611
Ref: 1d175634611
Node: Segurança<46>5635021
Ref: whatsnew/changelog id5675635123
Ref: 1d185635123
Ref: Segurança<46>-Footnote-15635311
Node: Núcleo e embutidos<63>5635376
Ref: whatsnew/changelog id5685635501
Ref: 1d195635501
Ref: Núcleo e embutidos<63>-Footnote-15636335
Ref: Núcleo e embutidos<63>-Footnote-25636400
Ref: Núcleo e embutidos<63>-Footnote-35636465
Ref: Núcleo e embutidos<63>-Footnote-45636530
Ref: Núcleo e embutidos<63>-Footnote-55636595
Ref: Núcleo e embutidos<63>-Footnote-65636660
Ref: Núcleo e embutidos<63>-Footnote-75636725
Node: Biblioteca<65>5636790
Ref: whatsnew/changelog id5695636919
Ref: 1d1a5636919
Ref: Biblioteca<65>-Footnote-15643360
Ref: Biblioteca<65>-Footnote-25643425
Ref: Biblioteca<65>-Footnote-35643490
Ref: Biblioteca<65>-Footnote-45643555
Ref: Biblioteca<65>-Footnote-55643620
Ref: Biblioteca<65>-Footnote-65643685
Ref: Biblioteca<65>-Footnote-75643750
Ref: Biblioteca<65>-Footnote-85643815
Ref: Biblioteca<65>-Footnote-95643880
Ref: Biblioteca<65>-Footnote-105643945
Ref: Biblioteca<65>-Footnote-115644011
Ref: Biblioteca<65>-Footnote-125644077
Ref: Biblioteca<65>-Footnote-135644143
Ref: Biblioteca<65>-Footnote-145644209
Ref: Biblioteca<65>-Footnote-155644275
Ref: Biblioteca<65>-Footnote-165644341
Ref: Biblioteca<65>-Footnote-175644407
Ref: Biblioteca<65>-Footnote-185644473
Ref: Biblioteca<65>-Footnote-195644539
Ref: Biblioteca<65>-Footnote-205644605
Ref: Biblioteca<65>-Footnote-215644671
Ref: Biblioteca<65>-Footnote-225644737
Ref: Biblioteca<65>-Footnote-235644803
Ref: Biblioteca<65>-Footnote-245644869
Ref: Biblioteca<65>-Footnote-255644935
Ref: Biblioteca<65>-Footnote-265645001
Ref: Biblioteca<65>-Footnote-275645067
Ref: Biblioteca<65>-Footnote-285645133
Ref: Biblioteca<65>-Footnote-295645199
Ref: Biblioteca<65>-Footnote-305645265
Ref: Biblioteca<65>-Footnote-315645331
Ref: Biblioteca<65>-Footnote-325645397
Ref: Biblioteca<65>-Footnote-335645463
Ref: Biblioteca<65>-Footnote-345645529
Node: Documentação<58>5645595
Ref: whatsnew/changelog id5705645711
Ref: 1d1b5645711
Ref: Documentação<58>-Footnote-15646662
Ref: Documentação<58>-Footnote-25646727
Ref: Documentação<58>-Footnote-35646792
Ref: Documentação<58>-Footnote-45646857
Ref: Documentação<58>-Footnote-55646922
Ref: Documentação<58>-Footnote-65646987
Ref: Documentação<58>-Footnote-75647051
Ref: Documentação<58>-Footnote-85647116
Node: Testes<57>5647181
Ref: whatsnew/changelog id5715647299
Ref: 1d1c5647299
Ref: Testes<57>-Footnote-15647444
Node: Construção<61>5647509
Ref: whatsnew/changelog id5725647620
Ref: 1d1d5647620
Ref: Construção<61>-Footnote-15647773
Node: Windows<56>5647838
Ref: whatsnew/changelog id5735647948
Ref: 1d1e5647948
Ref: Windows<56>-Footnote-15648684
Ref: Windows<56>-Footnote-25648749
Ref: Windows<56>-Footnote-35648814
Ref: Windows<56>-Footnote-45648879
Ref: Windows<56>-Footnote-55648944
Ref: Windows<56>-Footnote-65649009
Node: macOS<45>5649074
Ref: whatsnew/changelog id5745649176
Ref: 1d1f5649176
Ref: macOS<45>-Footnote-15649311
Node: IDLE<41>5649376
Ref: whatsnew/changelog id5755649488
Ref: 1d205649488
Ref: IDLE<41>-Footnote-15650335
Ref: IDLE<41>-Footnote-25650400
Ref: IDLE<41>-Footnote-35650465
Ref: IDLE<41>-Footnote-45650530
Ref: IDLE<41>-Footnote-55650595
Ref: IDLE<41>-Footnote-65650660
Node: Ferramentas/Demos<39>5650725
Ref: whatsnew/changelog id5765650819
Ref: 1d215650819
Ref: Ferramentas/Demos<39>-Footnote-15651050
Node: Python 3 7 0 beta 15651115
Ref: whatsnew/changelog python-3-7-0-beta-15651237
Ref: 1d225651237
Node: Núcleo e embutidos<64>5651575
Ref: whatsnew/changelog id5775651677
Ref: 1d235651677
Ref: Núcleo e embutidos<64>-Footnote-15655114
Ref: Núcleo e embutidos<64>-Footnote-25655179
Ref: Núcleo e embutidos<64>-Footnote-35655244
Ref: Núcleo e embutidos<64>-Footnote-45655309
Ref: Núcleo e embutidos<64>-Footnote-55655374
Ref: Núcleo e embutidos<64>-Footnote-65655439
Ref: Núcleo e embutidos<64>-Footnote-75655504
Ref: Núcleo e embutidos<64>-Footnote-85655569
Ref: Núcleo e embutidos<64>-Footnote-95655634
Ref: Núcleo e embutidos<64>-Footnote-105655676
Ref: Núcleo e embutidos<64>-Footnote-115655742
Ref: Núcleo e embutidos<64>-Footnote-125655808
Ref: Núcleo e embutidos<64>-Footnote-135655874
Ref: Núcleo e embutidos<64>-Footnote-145655940
Ref: Núcleo e embutidos<64>-Footnote-155656006
Ref: Núcleo e embutidos<64>-Footnote-165656072
Ref: Núcleo e embutidos<64>-Footnote-175656138
Ref: Núcleo e embutidos<64>-Footnote-185656204
Ref: Núcleo e embutidos<64>-Footnote-195656247
Ref: Núcleo e embutidos<64>-Footnote-205656313
Ref: Núcleo e embutidos<64>-Footnote-215656379
Ref: Núcleo e embutidos<64>-Footnote-225656445
Ref: Núcleo e embutidos<64>-Footnote-235656511
Node: Biblioteca<66>5656577
Ref: whatsnew/changelog id5785656706
Ref: 1d245656706
Ref: Biblioteca<66>-Footnote-15664095
Ref: Biblioteca<66>-Footnote-25664160
Ref: Biblioteca<66>-Footnote-35664225
Ref: Biblioteca<66>-Footnote-45664290
Ref: Biblioteca<66>-Footnote-55664355
Ref: Biblioteca<66>-Footnote-65664420
Ref: Biblioteca<66>-Footnote-75664485
Ref: Biblioteca<66>-Footnote-85664550
Ref: Biblioteca<66>-Footnote-95664615
Ref: Biblioteca<66>-Footnote-105664680
Ref: Biblioteca<66>-Footnote-115664746
Ref: Biblioteca<66>-Footnote-125664812
Ref: Biblioteca<66>-Footnote-135664878
Ref: Biblioteca<66>-Footnote-145664944
Ref: Biblioteca<66>-Footnote-155665010
Ref: Biblioteca<66>-Footnote-165665076
Ref: Biblioteca<66>-Footnote-175665142
Ref: Biblioteca<66>-Footnote-185665208
Ref: Biblioteca<66>-Footnote-195665251
Ref: Biblioteca<66>-Footnote-205665317
Ref: Biblioteca<66>-Footnote-215665383
Ref: Biblioteca<66>-Footnote-225665449
Ref: Biblioteca<66>-Footnote-235665515
Ref: Biblioteca<66>-Footnote-245665581
Ref: Biblioteca<66>-Footnote-255665647
Ref: Biblioteca<66>-Footnote-265665713
Ref: Biblioteca<66>-Footnote-275665779
Ref: Biblioteca<66>-Footnote-285665845
Ref: Biblioteca<66>-Footnote-295665911
Ref: Biblioteca<66>-Footnote-305665977
Ref: Biblioteca<66>-Footnote-315666043
Ref: Biblioteca<66>-Footnote-325666109
Ref: Biblioteca<66>-Footnote-335666175
Ref: Biblioteca<66>-Footnote-345666241
Ref: Biblioteca<66>-Footnote-355666307
Ref: Biblioteca<66>-Footnote-365666373
Ref: Biblioteca<66>-Footnote-375666439
Ref: Biblioteca<66>-Footnote-385666505
Ref: Biblioteca<66>-Footnote-395666571
Ref: Biblioteca<66>-Footnote-405666637
Ref: Biblioteca<66>-Footnote-415666703
Ref: Biblioteca<66>-Footnote-425666769
Ref: Biblioteca<66>-Footnote-435666835
Ref: Biblioteca<66>-Footnote-445666901
Ref: Biblioteca<66>-Footnote-455666967
Ref: Biblioteca<66>-Footnote-465667033
Ref: Biblioteca<66>-Footnote-475667099
Node: Documentação<59>5667165
Ref: whatsnew/changelog id5795667281
Ref: 1d255667281
Ref: Documentação<59>-Footnote-15667822
Ref: Documentação<59>-Footnote-25667887
Ref: Documentação<59>-Footnote-35667952
Node: Testes<58>5668017
Ref: whatsnew/changelog id5805668135
Ref: 1d265668135
Ref: Testes<58>-Footnote-15669049
Ref: Testes<58>-Footnote-25669114
Ref: Testes<58>-Footnote-35669179
Ref: Testes<58>-Footnote-45669244
Ref: Testes<58>-Footnote-55669309
Ref: Testes<58>-Footnote-65669374
Node: Construção<62>5669439
Ref: whatsnew/changelog id5815669550
Ref: 1d275669550
Ref: Construção<62>-Footnote-15670165
Ref: Construção<62>-Footnote-25670230
Ref: Construção<62>-Footnote-35670295
Ref: Construção<62>-Footnote-45670360
Node: Windows<57>5670425
Ref: whatsnew/changelog id5825670535
Ref: 1d285670535
Ref: Windows<57>-Footnote-15670916
Ref: Windows<57>-Footnote-25670981
Ref: Windows<57>-Footnote-35671046
Node: macOS<46>5671111
Ref: whatsnew/changelog id5835671214
Ref: 1d295671214
Ref: macOS<46>-Footnote-15671736
Ref: macOS<46>-Footnote-25671801
Node: API C<57>5671866
Ref: whatsnew/changelog id5845671949
Ref: 1d2a5671949
Ref: API C<57>-Footnote-15672271
Ref: API C<57>-Footnote-25672336
Node: Python 3 7 0 alpha 45672401
Ref: whatsnew/changelog python-3-7-0-alpha-45672524
Ref: 1d2b5672524
Node: Núcleo e embutidos<65>5672854
Ref: whatsnew/changelog id5855672957
Ref: 1d2c5672957
Ref: Núcleo e embutidos<65>-Footnote-15676467
Ref: Núcleo e embutidos<65>-Footnote-25676532
Ref: Núcleo e embutidos<65>-Footnote-35676597
Ref: Núcleo e embutidos<65>-Footnote-45676662
Ref: Núcleo e embutidos<65>-Footnote-55676727
Ref: Núcleo e embutidos<65>-Footnote-65676792
Ref: Núcleo e embutidos<65>-Footnote-75676857
Ref: Núcleo e embutidos<65>-Footnote-85676922
Ref: Núcleo e embutidos<65>-Footnote-95676987
Ref: Núcleo e embutidos<65>-Footnote-105677052
Ref: Núcleo e embutidos<65>-Footnote-115677118
Ref: Núcleo e embutidos<65>-Footnote-125677184
Ref: Núcleo e embutidos<65>-Footnote-135677250
Ref: Núcleo e embutidos<65>-Footnote-145677316
Ref: Núcleo e embutidos<65>-Footnote-155677382
Ref: Núcleo e embutidos<65>-Footnote-165677448
Ref: Núcleo e embutidos<65>-Footnote-175677514
Ref: Núcleo e embutidos<65>-Footnote-185677580
Ref: Núcleo e embutidos<65>-Footnote-195677646
Ref: Núcleo e embutidos<65>-Footnote-205677689
Ref: Núcleo e embutidos<65>-Footnote-215677755
Ref: Núcleo e embutidos<65>-Footnote-225677798
Ref: Núcleo e embutidos<65>-Footnote-235677864
Ref: Núcleo e embutidos<65>-Footnote-245677907
Ref: Núcleo e embutidos<65>-Footnote-255677973
Ref: Núcleo e embutidos<65>-Footnote-265678039
Ref: Núcleo e embutidos<65>-Footnote-275678082
Node: Biblioteca<67>5678148
Ref: whatsnew/changelog id5865678278
Ref: 1d2e5678278
Ref: Biblioteca<67>-Footnote-15686303
Ref: Biblioteca<67>-Footnote-25686368
Ref: Biblioteca<67>-Footnote-35686433
Ref: Biblioteca<67>-Footnote-45686498
Ref: Biblioteca<67>-Footnote-55686563
Ref: Biblioteca<67>-Footnote-65686628
Ref: Biblioteca<67>-Footnote-75686693
Ref: Biblioteca<67>-Footnote-85686758
Ref: Biblioteca<67>-Footnote-95686823
Ref: Biblioteca<67>-Footnote-105686888
Ref: Biblioteca<67>-Footnote-115686954
Ref: Biblioteca<67>-Footnote-125687020
Ref: Biblioteca<67>-Footnote-135687086
Ref: Biblioteca<67>-Footnote-145687152
Ref: Biblioteca<67>-Footnote-155687218
Ref: Biblioteca<67>-Footnote-165687284
Ref: Biblioteca<67>-Footnote-175687350
Ref: Biblioteca<67>-Footnote-185687416
Ref: Biblioteca<67>-Footnote-195687482
Ref: Biblioteca<67>-Footnote-205687548
Ref: Biblioteca<67>-Footnote-215687614
Ref: Biblioteca<67>-Footnote-225687680
Ref: Biblioteca<67>-Footnote-235687746
Ref: Biblioteca<67>-Footnote-245687812
Ref: Biblioteca<67>-Footnote-255687878
Ref: Biblioteca<67>-Footnote-265687944
Ref: Biblioteca<67>-Footnote-275688010
Ref: Biblioteca<67>-Footnote-285688076
Ref: Biblioteca<67>-Footnote-295688142
Ref: Biblioteca<67>-Footnote-305688208
Ref: Biblioteca<67>-Footnote-315688274
Ref: Biblioteca<67>-Footnote-325688340
Ref: Biblioteca<67>-Footnote-335688406
Ref: Biblioteca<67>-Footnote-345688472
Ref: Biblioteca<67>-Footnote-355688538
Ref: Biblioteca<67>-Footnote-365688604
Ref: Biblioteca<67>-Footnote-375688670
Ref: Biblioteca<67>-Footnote-385688736
Ref: Biblioteca<67>-Footnote-395688802
Ref: Biblioteca<67>-Footnote-405688868
Ref: Biblioteca<67>-Footnote-415688934
Ref: Biblioteca<67>-Footnote-425689000
Ref: Biblioteca<67>-Footnote-435689066
Ref: Biblioteca<67>-Footnote-445689132
Ref: Biblioteca<67>-Footnote-455689198
Ref: Biblioteca<67>-Footnote-465689264
Ref: Biblioteca<67>-Footnote-475689330
Ref: Biblioteca<67>-Footnote-485689396
Ref: Biblioteca<67>-Footnote-495689462
Ref: Biblioteca<67>-Footnote-505689528
Ref: Biblioteca<67>-Footnote-515689594
Ref: Biblioteca<67>-Footnote-525689660
Ref: Biblioteca<67>-Footnote-535689726
Ref: Biblioteca<67>-Footnote-545689792
Node: Documentação<60>5689858
Ref: whatsnew/changelog id5875689975
Ref: 1d2f5689975
Ref: Documentação<60>-Footnote-15690145
Node: Testes<59>5690210
Ref: whatsnew/changelog id5885690324
Ref: 1d305690324
Ref: Testes<59>-Footnote-15690721
Ref: Testes<59>-Footnote-25690786
Node: Windows<58>5690851
Ref: whatsnew/changelog id5895690968
Ref: 1d315690968
Ref: Windows<58>-Footnote-15691167
Node: Ferramentas/Demos<40>5691232
Ref: whatsnew/changelog id5905691348
Ref: 1d325691348
Ref: Ferramentas/Demos<40>-Footnote-15691642
Node: API C<58>5691707
Ref: whatsnew/changelog id5915691803
Ref: 1d335691803
Ref: API C<58>-Footnote-15692447
Ref: API C<58>-Footnote-25692512
Ref: API C<58>-Footnote-35692577
Ref: API C<58>-Footnote-45692642
Node: Python 3 7 0 alpha 35692707
Ref: whatsnew/changelog python-3-7-0-alpha-35692831
Ref: 1d345692831
Node: Núcleo e embutidos<66>5693233
Ref: whatsnew/changelog id5925693336
Ref: 1d355693336
Ref: Núcleo e embutidos<66>-Footnote-15698474
Ref: Núcleo e embutidos<66>-Footnote-25698539
Ref: Núcleo e embutidos<66>-Footnote-35698604
Ref: Núcleo e embutidos<66>-Footnote-45698669
Ref: Núcleo e embutidos<66>-Footnote-55698734
Ref: Núcleo e embutidos<66>-Footnote-65698799
Ref: Núcleo e embutidos<66>-Footnote-75698864
Ref: Núcleo e embutidos<66>-Footnote-85698929
Ref: Núcleo e embutidos<66>-Footnote-95698994
Ref: Núcleo e embutidos<66>-Footnote-105699059
Ref: Núcleo e embutidos<66>-Footnote-115699125
Ref: Núcleo e embutidos<66>-Footnote-125699191
Ref: Núcleo e embutidos<66>-Footnote-135699257
Ref: Núcleo e embutidos<66>-Footnote-145699323
Ref: Núcleo e embutidos<66>-Footnote-155699389
Ref: Núcleo e embutidos<66>-Footnote-165699455
Ref: Núcleo e embutidos<66>-Footnote-175699521
Ref: Núcleo e embutidos<66>-Footnote-185699587
Ref: Núcleo e embutidos<66>-Footnote-195699653
Ref: Núcleo e embutidos<66>-Footnote-205699719
Ref: Núcleo e embutidos<66>-Footnote-215699785
Ref: Núcleo e embutidos<66>-Footnote-225699851
Node: Biblioteca<68>5699917
Ref: whatsnew/changelog id5935700047
Ref: 1d365700047
Ref: Biblioteca<68>-Footnote-15716109
Ref: Biblioteca<68>-Footnote-25716174
Ref: Biblioteca<68>-Footnote-35716239
Ref: Biblioteca<68>-Footnote-45716304
Ref: Biblioteca<68>-Footnote-55716369
Ref: Biblioteca<68>-Footnote-65716434
Ref: Biblioteca<68>-Footnote-75716499
Ref: Biblioteca<68>-Footnote-85716564
Ref: Biblioteca<68>-Footnote-95716629
Ref: Biblioteca<68>-Footnote-105716694
Ref: Biblioteca<68>-Footnote-115716760
Ref: Biblioteca<68>-Footnote-125716826
Ref: Biblioteca<68>-Footnote-135716892
Ref: Biblioteca<68>-Footnote-145716958
Ref: Biblioteca<68>-Footnote-155717024
Ref: Biblioteca<68>-Footnote-165717090
Ref: Biblioteca<68>-Footnote-175717156
Ref: Biblioteca<68>-Footnote-185717222
Ref: Biblioteca<68>-Footnote-195717288
Ref: Biblioteca<68>-Footnote-205717354
Ref: Biblioteca<68>-Footnote-215717420
Ref: Biblioteca<68>-Footnote-225717486
Ref: Biblioteca<68>-Footnote-235717552
Ref: Biblioteca<68>-Footnote-245717618
Ref: Biblioteca<68>-Footnote-255717684
Ref: Biblioteca<68>-Footnote-265717752
Ref: Biblioteca<68>-Footnote-275717818
Ref: Biblioteca<68>-Footnote-285717884
Ref: Biblioteca<68>-Footnote-295717950
Ref: Biblioteca<68>-Footnote-305718016
Ref: Biblioteca<68>-Footnote-315718082
Ref: Biblioteca<68>-Footnote-325718148
Ref: Biblioteca<68>-Footnote-335718191
Ref: Biblioteca<68>-Footnote-345718257
Ref: Biblioteca<68>-Footnote-355718323
Ref: Biblioteca<68>-Footnote-365718389
Ref: Biblioteca<68>-Footnote-375718455
Ref: Biblioteca<68>-Footnote-385718521
Ref: Biblioteca<68>-Footnote-395718587
Ref: Biblioteca<68>-Footnote-405718653
Ref: Biblioteca<68>-Footnote-415718719
Ref: Biblioteca<68>-Footnote-425718785
Ref: Biblioteca<68>-Footnote-435718851
Ref: Biblioteca<68>-Footnote-445718917
Ref: Biblioteca<68>-Footnote-455718983
Ref: Biblioteca<68>-Footnote-465719049
Ref: Biblioteca<68>-Footnote-475719114
Ref: Biblioteca<68>-Footnote-485719180
Ref: Biblioteca<68>-Footnote-495719246
Ref: Biblioteca<68>-Footnote-505719312
Ref: Biblioteca<68>-Footnote-515719378
Ref: Biblioteca<68>-Footnote-525719444
Ref: Biblioteca<68>-Footnote-535719510
Ref: Biblioteca<68>-Footnote-545719576
Ref: Biblioteca<68>-Footnote-555719642
Ref: Biblioteca<68>-Footnote-565719708
Ref: Biblioteca<68>-Footnote-575719774
Ref: Biblioteca<68>-Footnote-585719840
Ref: Biblioteca<68>-Footnote-595719906
Ref: Biblioteca<68>-Footnote-605719972
Ref: Biblioteca<68>-Footnote-615720038
Ref: Biblioteca<68>-Footnote-625720104
Ref: Biblioteca<68>-Footnote-635720147
Ref: Biblioteca<68>-Footnote-645720213
Ref: Biblioteca<68>-Footnote-655720279
Ref: Biblioteca<68>-Footnote-665720345
Ref: Biblioteca<68>-Footnote-675720411
Ref: Biblioteca<68>-Footnote-685720477
Ref: Biblioteca<68>-Footnote-695720543
Ref: Biblioteca<68>-Footnote-705720609
Ref: Biblioteca<68>-Footnote-715720675
Ref: Biblioteca<68>-Footnote-725720741
Ref: Biblioteca<68>-Footnote-735720807
Ref: Biblioteca<68>-Footnote-745720873
Ref: Biblioteca<68>-Footnote-755720939
Ref: Biblioteca<68>-Footnote-765721005
Ref: Biblioteca<68>-Footnote-775721071
Ref: Biblioteca<68>-Footnote-785721137
Ref: Biblioteca<68>-Footnote-795721203
Ref: Biblioteca<68>-Footnote-805721269
Ref: Biblioteca<68>-Footnote-815721335
Ref: Biblioteca<68>-Footnote-825721401
Ref: Biblioteca<68>-Footnote-835721444
Ref: Biblioteca<68>-Footnote-845721510
Ref: Biblioteca<68>-Footnote-855721576
Ref: Biblioteca<68>-Footnote-865721642
Ref: Biblioteca<68>-Footnote-875721708
Ref: Biblioteca<68>-Footnote-885721774
Ref: Biblioteca<68>-Footnote-895721840
Ref: Biblioteca<68>-Footnote-905721906
Ref: Biblioteca<68>-Footnote-915721972
Ref: Biblioteca<68>-Footnote-925722038
Ref: Biblioteca<68>-Footnote-935722104
Ref: Biblioteca<68>-Footnote-945722170
Ref: Biblioteca<68>-Footnote-955722236
Ref: Biblioteca<68>-Footnote-965722302
Ref: Biblioteca<68>-Footnote-975722368
Ref: Biblioteca<68>-Footnote-985722434
Node: Documentação<61>5722500
Ref: whatsnew/changelog id5945722617
Ref: 1d3b5722617
Ref: Documentação<61>-Footnote-15722800
Node: Testes<60>5722865
Ref: whatsnew/changelog id5955722984
Ref: 1d3c5722984
Ref: Testes<60>-Footnote-15724196
Ref: Testes<60>-Footnote-25724261
Ref: Testes<60>-Footnote-35724326
Ref: Testes<60>-Footnote-45724391
Ref: Testes<60>-Footnote-55724456
Ref: Testes<60>-Footnote-65724521
Ref: Testes<60>-Footnote-75724586
Node: Construção<63>5724651
Ref: whatsnew/changelog id5965724763
Ref: 1d3d5724763
Ref: Construção<63>-Footnote-15725989
Ref: Construção<63>-Footnote-25726054
Ref: Construção<63>-Footnote-35726119
Ref: Construção<63>-Footnote-45726184
Ref: Construção<63>-Footnote-55726249
Ref: Construção<63>-Footnote-65726314
Ref: Construção<63>-Footnote-75726379
Ref: Construção<63>-Footnote-85726444
Ref: Construção<63>-Footnote-95726509
Ref: Construção<63>-Footnote-105726574
Ref: Construção<63>-Footnote-115726640
Ref: Construção<63>-Footnote-125726706
Node: Windows<59>5726772
Ref: whatsnew/changelog id5975726883
Ref: 1d3e5726883
Ref: Windows<59>-Footnote-15727416
Ref: Windows<59>-Footnote-25727480
Ref: Windows<59>-Footnote-35727545
Ref: Windows<59>-Footnote-45727610
Node: macOS<47>5727675
Ref: whatsnew/changelog id5985727778
Ref: 1d3f5727778
Ref: macOS<47>-Footnote-15727912
Node: IDLE<42>5727977
Ref: whatsnew/changelog id5995728090
Ref: 1d405728090
Ref: IDLE<42>-Footnote-15730183
Ref: IDLE<42>-Footnote-25730248
Ref: IDLE<42>-Footnote-35730313
Ref: IDLE<42>-Footnote-45730378
Ref: IDLE<42>-Footnote-55730443
Ref: IDLE<42>-Footnote-65730508
Ref: IDLE<42>-Footnote-75730573
Ref: IDLE<42>-Footnote-85730638
Node: Ferramentas/Demos<41>5730703
Ref: whatsnew/changelog id6005730816
Ref: 1d415730816
Ref: Ferramentas/Demos<41>-Footnote-15731360
Ref: Ferramentas/Demos<41>-Footnote-25731425
Node: API C<59>5731490
Ref: whatsnew/changelog id6015731586
Ref: 1d425731586
Ref: API C<59>-Footnote-15732714
Ref: API C<59>-Footnote-25732779
Ref: API C<59>-Footnote-35732844
Ref: API C<59>-Footnote-45732909
Ref: API C<59>-Footnote-55732974
Ref: API C<59>-Footnote-65733039
Node: Python 3 7 0 alpha 25733104
Ref: whatsnew/changelog python-3-7-0-alpha-25733228
Ref: 1d435733228
Node: Núcleo e embutidos<67>5733520
Ref: whatsnew/changelog id6025733623
Ref: 1d445733623
Ref: Núcleo e embutidos<67>-Footnote-15737819
Ref: Núcleo e embutidos<67>-Footnote-25737884
Ref: Núcleo e embutidos<67>-Footnote-35737949
Ref: Núcleo e embutidos<67>-Footnote-45738014
Ref: Núcleo e embutidos<67>-Footnote-55738079
Ref: Núcleo e embutidos<67>-Footnote-65738144
Ref: Núcleo e embutidos<67>-Footnote-75738209
Ref: Núcleo e embutidos<67>-Footnote-85738274
Ref: Núcleo e embutidos<67>-Footnote-95738339
Ref: Núcleo e embutidos<67>-Footnote-105738404
Ref: Núcleo e embutidos<67>-Footnote-115738470
Ref: Núcleo e embutidos<67>-Footnote-125738536
Ref: Núcleo e embutidos<67>-Footnote-135738602
Ref: Núcleo e embutidos<67>-Footnote-145738668
Ref: Núcleo e embutidos<67>-Footnote-155738734
Ref: Núcleo e embutidos<67>-Footnote-165738800
Ref: Núcleo e embutidos<67>-Footnote-175738866
Ref: Núcleo e embutidos<67>-Footnote-185738932
Ref: Núcleo e embutidos<67>-Footnote-195738998
Ref: Núcleo e embutidos<67>-Footnote-205739064
Ref: Núcleo e embutidos<67>-Footnote-215739107
Ref: Núcleo e embutidos<67>-Footnote-225739173
Ref: Núcleo e embutidos<67>-Footnote-235739239
Ref: Núcleo e embutidos<67>-Footnote-245739305
Ref: Núcleo e embutidos<67>-Footnote-255739371
Ref: Núcleo e embutidos<67>-Footnote-265739437
Ref: Núcleo e embutidos<67>-Footnote-275739503
Node: Biblioteca<69>5739546
Ref: whatsnew/changelog id6035739676
Ref: 1d455739676
Ref: Biblioteca<69>-Footnote-15743749
Ref: Biblioteca<69>-Footnote-25743814
Ref: Biblioteca<69>-Footnote-35743879
Ref: Biblioteca<69>-Footnote-45743944
Ref: Biblioteca<69>-Footnote-55744009
Ref: Biblioteca<69>-Footnote-65744074
Ref: Biblioteca<69>-Footnote-75744139
Ref: Biblioteca<69>-Footnote-85744204
Ref: Biblioteca<69>-Footnote-95744269
Ref: Biblioteca<69>-Footnote-105744334
Ref: Biblioteca<69>-Footnote-115744400
Ref: Biblioteca<69>-Footnote-125744466
Ref: Biblioteca<69>-Footnote-135744532
Ref: Biblioteca<69>-Footnote-145744598
Ref: Biblioteca<69>-Footnote-155744664
Ref: Biblioteca<69>-Footnote-165744730
Ref: Biblioteca<69>-Footnote-175744796
Ref: Biblioteca<69>-Footnote-185744862
Ref: Biblioteca<69>-Footnote-195744928
Ref: Biblioteca<69>-Footnote-205744994
Ref: Biblioteca<69>-Footnote-215745060
Ref: Biblioteca<69>-Footnote-225745126
Ref: Biblioteca<69>-Footnote-235745192
Ref: Biblioteca<69>-Footnote-245745258
Ref: Biblioteca<69>-Footnote-255745324
Ref: Biblioteca<69>-Footnote-265745390
Node: Documentação<62>5745456
Ref: whatsnew/changelog id6045745579
Ref: 1d465745579
Ref: Documentação<62>-Footnote-15745970
Ref: Documentação<62>-Footnote-25746035
Node: Construção<64>5746100
Ref: whatsnew/changelog id6055746217
Ref: 1d475746217
Ref: Construção<64>-Footnote-15746856
Ref: Construção<64>-Footnote-25746921
Ref: Construção<64>-Footnote-35746986
Ref: Construção<64>-Footnote-45747051
Ref: Construção<64>-Footnote-55747116
Ref: Construção<64>-Footnote-65747181
Node: IDLE<43>5747246
Ref: whatsnew/changelog id6065747354
Ref: 1d485747354
Ref: IDLE<43>-Footnote-15748660
Ref: IDLE<43>-Footnote-25748725
Ref: IDLE<43>-Footnote-35748790
Ref: IDLE<43>-Footnote-45748855
Ref: IDLE<43>-Footnote-55748920
Ref: IDLE<43>-Footnote-65748985
Node: API C<60>5749052
Ref: whatsnew/changelog id6075749135
Ref: 1d495749135
Ref: API C<60>-Footnote-15749859
Ref: API C<60>-Footnote-25749924
Ref: API C<60>-Footnote-35749989
Ref: API C<60>-Footnote-45750054
Node: Python 3 7 0 alpha 15750096
Ref: whatsnew/changelog python-3-7-0-alpha-15750218
Ref: 1d4a5750218
Node: Segurança<47>5750630
Ref: whatsnew/changelog id6085750733
Ref: 1d4b5750733
Ref: Segurança<47>-Footnote-15752390
Ref: Segurança<47>-Footnote-25752455
Ref: Segurança<47>-Footnote-35752520
Ref: Segurança<47>-Footnote-45752585
Ref: Segurança<47>-Footnote-55752650
Ref: Segurança<47>-Footnote-65752715
Ref: Segurança<47>-Footnote-75752770
Ref: Segurança<47>-Footnote-85752825
Ref: Segurança<47>-Footnote-95752880
Ref: Segurança<47>-Footnote-105752935
Ref: Segurança<47>-Footnote-115752991
Ref: Segurança<47>-Footnote-125753047
Ref: Segurança<47>-Footnote-135753113
Ref: Segurança<47>-Footnote-145753179
Ref: Segurança<47>-Footnote-155753235
Node: Núcleo e embutidos<68>5753291
Ref: whatsnew/changelog id6095753417
Ref: 1d4c5753417
Ref: Núcleo e embutidos<68>-Footnote-15774322
Ref: Núcleo e embutidos<68>-Footnote-25774387
Ref: Núcleo e embutidos<68>-Footnote-35774452
Ref: Núcleo e embutidos<68>-Footnote-45774517
Ref: Núcleo e embutidos<68>-Footnote-55774582
Ref: Núcleo e embutidos<68>-Footnote-65774647
Ref: Núcleo e embutidos<68>-Footnote-75774712
Ref: Núcleo e embutidos<68>-Footnote-85774777
Ref: Núcleo e embutidos<68>-Footnote-95774842
Ref: Núcleo e embutidos<68>-Footnote-105774907
Ref: Núcleo e embutidos<68>-Footnote-115774973
Ref: Núcleo e embutidos<68>-Footnote-125775039
Ref: Núcleo e embutidos<68>-Footnote-135775105
Ref: Núcleo e embutidos<68>-Footnote-145775171
Ref: Núcleo e embutidos<68>-Footnote-155775237
Ref: Núcleo e embutidos<68>-Footnote-165775303
Ref: Núcleo e embutidos<68>-Footnote-175775369
Ref: Núcleo e embutidos<68>-Footnote-185775435
Ref: Núcleo e embutidos<68>-Footnote-195775501
Ref: Núcleo e embutidos<68>-Footnote-205775567
Ref: Núcleo e embutidos<68>-Footnote-215775633
Ref: Núcleo e embutidos<68>-Footnote-225775699
Ref: Núcleo e embutidos<68>-Footnote-235775765
Ref: Núcleo e embutidos<68>-Footnote-245775831
Ref: Núcleo e embutidos<68>-Footnote-255775897
Ref: Núcleo e embutidos<68>-Footnote-265775963
Ref: Núcleo e embutidos<68>-Footnote-275776029
Ref: Núcleo e embutidos<68>-Footnote-285776095
Ref: Núcleo e embutidos<68>-Footnote-295776161
Ref: Núcleo e embutidos<68>-Footnote-305776227
Ref: Núcleo e embutidos<68>-Footnote-315776293
Ref: Núcleo e embutidos<68>-Footnote-325776359
Ref: Núcleo e embutidos<68>-Footnote-335776425
Ref: Núcleo e embutidos<68>-Footnote-345776491
Ref: Núcleo e embutidos<68>-Footnote-355776557
Ref: Núcleo e embutidos<68>-Footnote-365776600
Ref: Núcleo e embutidos<68>-Footnote-375776666
Ref: Núcleo e embutidos<68>-Footnote-385776732
Ref: Núcleo e embutidos<68>-Footnote-395776798
Ref: Núcleo e embutidos<68>-Footnote-405776864
Ref: Núcleo e embutidos<68>-Footnote-415776930
Ref: Núcleo e embutidos<68>-Footnote-425776996
Ref: Núcleo e embutidos<68>-Footnote-435777062
Ref: Núcleo e embutidos<68>-Footnote-445777128
Ref: Núcleo e embutidos<68>-Footnote-455777194
Ref: Núcleo e embutidos<68>-Footnote-465777260
Ref: Núcleo e embutidos<68>-Footnote-475777326
Ref: Núcleo e embutidos<68>-Footnote-485777392
Ref: Núcleo e embutidos<68>-Footnote-495777458
Ref: Núcleo e embutidos<68>-Footnote-505777524
Ref: Núcleo e embutidos<68>-Footnote-515777590
Ref: Núcleo e embutidos<68>-Footnote-525777656
Ref: Núcleo e embutidos<68>-Footnote-535777722
Ref: Núcleo e embutidos<68>-Footnote-545777788
Ref: Núcleo e embutidos<68>-Footnote-555777854
Ref: Núcleo e embutidos<68>-Footnote-565777920
Ref: Núcleo e embutidos<68>-Footnote-575777986
Ref: Núcleo e embutidos<68>-Footnote-585778052
Ref: Núcleo e embutidos<68>-Footnote-595778118
Ref: Núcleo e embutidos<68>-Footnote-605778184
Ref: Núcleo e embutidos<68>-Footnote-615778250
Ref: Núcleo e embutidos<68>-Footnote-625778316
Ref: Núcleo e embutidos<68>-Footnote-635778382
Ref: Núcleo e embutidos<68>-Footnote-645778448
Ref: Núcleo e embutidos<68>-Footnote-655778514
Ref: Núcleo e embutidos<68>-Footnote-665778580
Ref: Núcleo e embutidos<68>-Footnote-675778646
Ref: Núcleo e embutidos<68>-Footnote-685778712
Ref: Núcleo e embutidos<68>-Footnote-695778778
Ref: Núcleo e embutidos<68>-Footnote-705778844
Ref: Núcleo e embutidos<68>-Footnote-715778910
Ref: Núcleo e embutidos<68>-Footnote-725778976
Ref: Núcleo e embutidos<68>-Footnote-735779042
Ref: Núcleo e embutidos<68>-Footnote-745779108
Ref: Núcleo e embutidos<68>-Footnote-755779174
Ref: Núcleo e embutidos<68>-Footnote-765779240
Ref: Núcleo e embutidos<68>-Footnote-775779306
Ref: Núcleo e embutidos<68>-Footnote-785779372
Ref: Núcleo e embutidos<68>-Footnote-795779438
Ref: Núcleo e embutidos<68>-Footnote-805779504
Ref: Núcleo e embutidos<68>-Footnote-815779570
Ref: Núcleo e embutidos<68>-Footnote-825779636
Ref: Núcleo e embutidos<68>-Footnote-835779702
Ref: Núcleo e embutidos<68>-Footnote-845779768
Ref: Núcleo e embutidos<68>-Footnote-855779834
Ref: Núcleo e embutidos<68>-Footnote-865779900
Ref: Núcleo e embutidos<68>-Footnote-875779966
Ref: Núcleo e embutidos<68>-Footnote-885780032
Ref: Núcleo e embutidos<68>-Footnote-895780098
Ref: Núcleo e embutidos<68>-Footnote-905780164
Ref: Núcleo e embutidos<68>-Footnote-915780207
Ref: Núcleo e embutidos<68>-Footnote-925780273
Ref: Núcleo e embutidos<68>-Footnote-935780339
Ref: Núcleo e embutidos<68>-Footnote-945780405
Ref: Núcleo e embutidos<68>-Footnote-955780471
Ref: Núcleo e embutidos<68>-Footnote-965780537
Ref: Núcleo e embutidos<68>-Footnote-975780603
Ref: Núcleo e embutidos<68>-Footnote-985780669
Ref: Núcleo e embutidos<68>-Footnote-995780735
Ref: Núcleo e embutidos<68>-Footnote-1005780801
Ref: Núcleo e embutidos<68>-Footnote-1015780868
Ref: Núcleo e embutidos<68>-Footnote-1025780935
Ref: Núcleo e embutidos<68>-Footnote-1035781002
Ref: Núcleo e embutidos<68>-Footnote-1045781069
Ref: Núcleo e embutidos<68>-Footnote-1055781136
Ref: Núcleo e embutidos<68>-Footnote-1065781203
Ref: Núcleo e embutidos<68>-Footnote-1075781270
Ref: Núcleo e embutidos<68>-Footnote-1085781337
Ref: Núcleo e embutidos<68>-Footnote-1095781404
Ref: Núcleo e embutidos<68>-Footnote-1105781471
Ref: Núcleo e embutidos<68>-Footnote-1115781538
Ref: Núcleo e embutidos<68>-Footnote-1125781605
Ref: Núcleo e embutidos<68>-Footnote-1135781672
Ref: Núcleo e embutidos<68>-Footnote-1145781739
Ref: Núcleo e embutidos<68>-Footnote-1155781806
Ref: Núcleo e embutidos<68>-Footnote-1165781873
Ref: Núcleo e embutidos<68>-Footnote-1175781940
Ref: Núcleo e embutidos<68>-Footnote-1185782007
Ref: Núcleo e embutidos<68>-Footnote-1195782074
Ref: Núcleo e embutidos<68>-Footnote-1205782141
Ref: Núcleo e embutidos<68>-Footnote-1215782208
Ref: Núcleo e embutidos<68>-Footnote-1225782275
Ref: Núcleo e embutidos<68>-Footnote-1235782342
Ref: Núcleo e embutidos<68>-Footnote-1245782409
Ref: Núcleo e embutidos<68>-Footnote-1255782476
Ref: Núcleo e embutidos<68>-Footnote-1265782543
Ref: Núcleo e embutidos<68>-Footnote-1275782610
Ref: Núcleo e embutidos<68>-Footnote-1285782677
Ref: Núcleo e embutidos<68>-Footnote-1295782744
Ref: Núcleo e embutidos<68>-Footnote-1305782811
Ref: Núcleo e embutidos<68>-Footnote-1315782878
Ref: Núcleo e embutidos<68>-Footnote-1325782945
Ref: Núcleo e embutidos<68>-Footnote-1335783012
Ref: Núcleo e embutidos<68>-Footnote-1345783079
Ref: Núcleo e embutidos<68>-Footnote-1355783146
Ref: Núcleo e embutidos<68>-Footnote-1365783213
Ref: Núcleo e embutidos<68>-Footnote-1375783280
Ref: Núcleo e embutidos<68>-Footnote-1385783347
Ref: Núcleo e embutidos<68>-Footnote-1395783414
Ref: Núcleo e embutidos<68>-Footnote-1405783481
Ref: Núcleo e embutidos<68>-Footnote-1415783548
Ref: Núcleo e embutidos<68>-Footnote-1425783615
Ref: Núcleo e embutidos<68>-Footnote-1435783682
Ref: Núcleo e embutidos<68>-Footnote-1445783749
Ref: Núcleo e embutidos<68>-Footnote-1455783816
Ref: Núcleo e embutidos<68>-Footnote-1465783883
Ref: Núcleo e embutidos<68>-Footnote-1475783950
Ref: Núcleo e embutidos<68>-Footnote-1485784017
Node: Biblioteca<70>5784084
Ref: whatsnew/changelog id6105784214
Ref: 1d4d5784214
Ref: Biblioteca<70>-Footnote-15830875
Ref: Biblioteca<70>-Footnote-25830940
Ref: Biblioteca<70>-Footnote-35831005
Ref: Biblioteca<70>-Footnote-45831070
Ref: Biblioteca<70>-Footnote-55831135
Ref: Biblioteca<70>-Footnote-65831200
Ref: Biblioteca<70>-Footnote-75831265
Ref: Biblioteca<70>-Footnote-85831330
Ref: Biblioteca<70>-Footnote-95831395
Ref: Biblioteca<70>-Footnote-105831460
Ref: Biblioteca<70>-Footnote-115831526
Ref: Biblioteca<70>-Footnote-125831592
Ref: Biblioteca<70>-Footnote-135831658
Ref: Biblioteca<70>-Footnote-145831724
Ref: Biblioteca<70>-Footnote-155831790
Ref: Biblioteca<70>-Footnote-165831856
Ref: Biblioteca<70>-Footnote-175831922
Ref: Biblioteca<70>-Footnote-185831988
Ref: Biblioteca<70>-Footnote-195832054
Ref: Biblioteca<70>-Footnote-205832120
Ref: Biblioteca<70>-Footnote-215832186
Ref: Biblioteca<70>-Footnote-225832254
Ref: Biblioteca<70>-Footnote-235832320
Ref: Biblioteca<70>-Footnote-245832386
Ref: Biblioteca<70>-Footnote-255832452
Ref: Biblioteca<70>-Footnote-265832518
Ref: Biblioteca<70>-Footnote-275832561
Ref: Biblioteca<70>-Footnote-285832627
Ref: Biblioteca<70>-Footnote-295832693
Ref: Biblioteca<70>-Footnote-305832759
Ref: Biblioteca<70>-Footnote-315832825
Ref: Biblioteca<70>-Footnote-325832891
Ref: Biblioteca<70>-Footnote-335832957
Ref: Biblioteca<70>-Footnote-345833023
Ref: Biblioteca<70>-Footnote-355833088
Ref: Biblioteca<70>-Footnote-365833154
Ref: Biblioteca<70>-Footnote-375833220
Ref: Biblioteca<70>-Footnote-385833286
Ref: Biblioteca<70>-Footnote-395833352
Ref: Biblioteca<70>-Footnote-405833417
Ref: Biblioteca<70>-Footnote-415833483
Ref: Biblioteca<70>-Footnote-425833549
Ref: Biblioteca<70>-Footnote-435833615
Ref: Biblioteca<70>-Footnote-445833681
Ref: Biblioteca<70>-Footnote-455833747
Ref: Biblioteca<70>-Footnote-465833813
Ref: Biblioteca<70>-Footnote-475833879
Ref: Biblioteca<70>-Footnote-485833945
Ref: Biblioteca<70>-Footnote-495834011
Ref: Biblioteca<70>-Footnote-505834077
Ref: Biblioteca<70>-Footnote-515834143
Ref: Biblioteca<70>-Footnote-525834209
Ref: Biblioteca<70>-Footnote-535834274
Ref: Biblioteca<70>-Footnote-545834340
Ref: Biblioteca<70>-Footnote-555834406
Ref: Biblioteca<70>-Footnote-565834472
Ref: Biblioteca<70>-Footnote-575834538
Ref: Biblioteca<70>-Footnote-585834604
Ref: Biblioteca<70>-Footnote-595834670
Ref: Biblioteca<70>-Footnote-605834736
Ref: Biblioteca<70>-Footnote-615834802
Ref: Biblioteca<70>-Footnote-625834868
Ref: Biblioteca<70>-Footnote-635834934
Ref: Biblioteca<70>-Footnote-645835000
Ref: Biblioteca<70>-Footnote-655835066
Ref: Biblioteca<70>-Footnote-665835132
Ref: Biblioteca<70>-Footnote-675835198
Ref: Biblioteca<70>-Footnote-685835264
Ref: Biblioteca<70>-Footnote-695835330
Ref: Biblioteca<70>-Footnote-705835396
Ref: Biblioteca<70>-Footnote-715835462
Ref: Biblioteca<70>-Footnote-725835528
Ref: Biblioteca<70>-Footnote-735835593
Ref: Biblioteca<70>-Footnote-745835659
Ref: Biblioteca<70>-Footnote-755835725
Ref: Biblioteca<70>-Footnote-765835791
Ref: Biblioteca<70>-Footnote-775835857
Ref: Biblioteca<70>-Footnote-785835923
Ref: Biblioteca<70>-Footnote-795835989
Ref: Biblioteca<70>-Footnote-805836055
Ref: Biblioteca<70>-Footnote-815836121
Ref: Biblioteca<70>-Footnote-825836187
Ref: Biblioteca<70>-Footnote-835836253
Ref: Biblioteca<70>-Footnote-845836319
Ref: Biblioteca<70>-Footnote-855836385
Ref: Biblioteca<70>-Footnote-865836451
Ref: Biblioteca<70>-Footnote-875836517
Ref: Biblioteca<70>-Footnote-885836583
Ref: Biblioteca<70>-Footnote-895836649
Ref: Biblioteca<70>-Footnote-905836715
Ref: Biblioteca<70>-Footnote-915836781
Ref: Biblioteca<70>-Footnote-925836847
Ref: Biblioteca<70>-Footnote-935836913
Ref: Biblioteca<70>-Footnote-945836979
Ref: Biblioteca<70>-Footnote-955837045
Ref: Biblioteca<70>-Footnote-965837111
Ref: Biblioteca<70>-Footnote-975837177
Ref: Biblioteca<70>-Footnote-985837243
Ref: Biblioteca<70>-Footnote-995837309
Ref: Biblioteca<70>-Footnote-1005837375
Ref: Biblioteca<70>-Footnote-1015837442
Ref: Biblioteca<70>-Footnote-1025837509
Ref: Biblioteca<70>-Footnote-1035837576
Ref: Biblioteca<70>-Footnote-1045837643
Ref: Biblioteca<70>-Footnote-1055837710
Ref: Biblioteca<70>-Footnote-1065837777
Ref: Biblioteca<70>-Footnote-1075837844
Ref: Biblioteca<70>-Footnote-1085837911
Ref: Biblioteca<70>-Footnote-1095837978
Ref: Biblioteca<70>-Footnote-1105838045
Ref: Biblioteca<70>-Footnote-1115838112
Ref: Biblioteca<70>-Footnote-1125838179
Ref: Biblioteca<70>-Footnote-1135838246
Ref: Biblioteca<70>-Footnote-1145838313
Ref: Biblioteca<70>-Footnote-1155838380
Ref: Biblioteca<70>-Footnote-1165838447
Ref: Biblioteca<70>-Footnote-1175838513
Ref: Biblioteca<70>-Footnote-1185838580
Ref: Biblioteca<70>-Footnote-1195838647
Ref: Biblioteca<70>-Footnote-1205838714
Ref: Biblioteca<70>-Footnote-1215838781
Ref: Biblioteca<70>-Footnote-1225838848
Ref: Biblioteca<70>-Footnote-1235838915
Ref: Biblioteca<70>-Footnote-1245838982
Ref: Biblioteca<70>-Footnote-1255839049
Ref: Biblioteca<70>-Footnote-1265839116
Ref: Biblioteca<70>-Footnote-1275839183
Ref: Biblioteca<70>-Footnote-1285839250
Ref: Biblioteca<70>-Footnote-1295839317
Ref: Biblioteca<70>-Footnote-1305839384
Ref: Biblioteca<70>-Footnote-1315839451
Ref: Biblioteca<70>-Footnote-1325839518
Ref: Biblioteca<70>-Footnote-1335839585
Ref: Biblioteca<70>-Footnote-1345839652
Ref: Biblioteca<70>-Footnote-1355839719
Ref: Biblioteca<70>-Footnote-1365839786
Ref: Biblioteca<70>-Footnote-1375839853
Ref: Biblioteca<70>-Footnote-1385839920
Ref: Biblioteca<70>-Footnote-1395839987
Ref: Biblioteca<70>-Footnote-1405840054
Ref: Biblioteca<70>-Footnote-1415840121
Ref: Biblioteca<70>-Footnote-1425840188
Ref: Biblioteca<70>-Footnote-1435840255
Ref: Biblioteca<70>-Footnote-1445840322
Ref: Biblioteca<70>-Footnote-1455840389
Ref: Biblioteca<70>-Footnote-1465840456
Ref: Biblioteca<70>-Footnote-1475840522
Ref: Biblioteca<70>-Footnote-1485840589
Ref: Biblioteca<70>-Footnote-1495840656
Ref: Biblioteca<70>-Footnote-1505840723
Ref: Biblioteca<70>-Footnote-1515840790
Ref: Biblioteca<70>-Footnote-1525840857
Ref: Biblioteca<70>-Footnote-1535840924
Ref: Biblioteca<70>-Footnote-1545840991
Ref: Biblioteca<70>-Footnote-1555841058
Ref: Biblioteca<70>-Footnote-1565841125
Ref: Biblioteca<70>-Footnote-1575841192
Ref: Biblioteca<70>-Footnote-1585841259
Ref: Biblioteca<70>-Footnote-1595841326
Ref: Biblioteca<70>-Footnote-1605841393
Ref: Biblioteca<70>-Footnote-1615841460
Ref: Biblioteca<70>-Footnote-1625841527
Ref: Biblioteca<70>-Footnote-1635841594
Ref: Biblioteca<70>-Footnote-1645841661
Ref: Biblioteca<70>-Footnote-1655841728
Ref: Biblioteca<70>-Footnote-1665841795
Ref: Biblioteca<70>-Footnote-1675841862
Ref: Biblioteca<70>-Footnote-1685841929
Ref: Biblioteca<70>-Footnote-1695841996
Ref: Biblioteca<70>-Footnote-1705842062
Ref: Biblioteca<70>-Footnote-1715842129
Ref: Biblioteca<70>-Footnote-1725842196
Ref: Biblioteca<70>-Footnote-1735842263
Ref: Biblioteca<70>-Footnote-1745842330
Ref: Biblioteca<70>-Footnote-1755842397
Ref: Biblioteca<70>-Footnote-1765842464
Ref: Biblioteca<70>-Footnote-1775842531
Ref: Biblioteca<70>-Footnote-1785842598
Ref: Biblioteca<70>-Footnote-1795842665
Ref: Biblioteca<70>-Footnote-1805842732
Ref: Biblioteca<70>-Footnote-1815842798
Ref: Biblioteca<70>-Footnote-1825842865
Ref: Biblioteca<70>-Footnote-1835842932
Ref: Biblioteca<70>-Footnote-1845842999
Ref: Biblioteca<70>-Footnote-1855843066
Ref: Biblioteca<70>-Footnote-1865843133
Ref: Biblioteca<70>-Footnote-1875843199
Ref: Biblioteca<70>-Footnote-1885843266
Ref: Biblioteca<70>-Footnote-1895843333
Ref: Biblioteca<70>-Footnote-1905843400
Ref: Biblioteca<70>-Footnote-1915843467
Ref: Biblioteca<70>-Footnote-1925843534
Ref: Biblioteca<70>-Footnote-1935843601
Ref: Biblioteca<70>-Footnote-1945843668
Ref: Biblioteca<70>-Footnote-1955843735
Ref: Biblioteca<70>-Footnote-1965843802
Ref: Biblioteca<70>-Footnote-1975843869
Ref: Biblioteca<70>-Footnote-1985843936
Ref: Biblioteca<70>-Footnote-1995844003
Ref: Biblioteca<70>-Footnote-2005844070
Ref: Biblioteca<70>-Footnote-2015844137
Ref: Biblioteca<70>-Footnote-2025844204
Ref: Biblioteca<70>-Footnote-2035844271
Ref: Biblioteca<70>-Footnote-2045844338
Ref: Biblioteca<70>-Footnote-2055844405
Ref: Biblioteca<70>-Footnote-2065844472
Ref: Biblioteca<70>-Footnote-2075844539
Ref: Biblioteca<70>-Footnote-2085844606
Ref: Biblioteca<70>-Footnote-2095844673
Ref: Biblioteca<70>-Footnote-2105844740
Ref: Biblioteca<70>-Footnote-2115844807
Ref: Biblioteca<70>-Footnote-2125844874
Ref: Biblioteca<70>-Footnote-2135844941
Ref: Biblioteca<70>-Footnote-2145845008
Ref: Biblioteca<70>-Footnote-2155845075
Ref: Biblioteca<70>-Footnote-2165845142
Ref: Biblioteca<70>-Footnote-2175845209
Ref: Biblioteca<70>-Footnote-2185845276
Ref: Biblioteca<70>-Footnote-2195845343
Ref: Biblioteca<70>-Footnote-2205845410
Ref: Biblioteca<70>-Footnote-2215845477
Ref: Biblioteca<70>-Footnote-2225845544
Ref: Biblioteca<70>-Footnote-2235845611
Ref: Biblioteca<70>-Footnote-2245845678
Ref: Biblioteca<70>-Footnote-2255845744
Ref: Biblioteca<70>-Footnote-2265845811
Ref: Biblioteca<70>-Footnote-2275845878
Ref: Biblioteca<70>-Footnote-2285845945
Ref: Biblioteca<70>-Footnote-2295846012
Ref: Biblioteca<70>-Footnote-2305846079
Ref: Biblioteca<70>-Footnote-2315846146
Ref: Biblioteca<70>-Footnote-2325846213
Ref: Biblioteca<70>-Footnote-2335846280
Ref: Biblioteca<70>-Footnote-2345846347
Ref: Biblioteca<70>-Footnote-2355846414
Ref: Biblioteca<70>-Footnote-2365846481
Ref: Biblioteca<70>-Footnote-2375846548
Ref: Biblioteca<70>-Footnote-2385846615
Ref: Biblioteca<70>-Footnote-2395846682
Ref: Biblioteca<70>-Footnote-2405846749
Ref: Biblioteca<70>-Footnote-2415846816
Ref: Biblioteca<70>-Footnote-2425846883
Ref: Biblioteca<70>-Footnote-2435846950
Ref: Biblioteca<70>-Footnote-2445847017
Ref: Biblioteca<70>-Footnote-2455847084
Ref: Biblioteca<70>-Footnote-2465847151
Ref: Biblioteca<70>-Footnote-2475847218
Ref: Biblioteca<70>-Footnote-2485847285
Ref: Biblioteca<70>-Footnote-2495847352
Ref: Biblioteca<70>-Footnote-2505847419
Ref: Biblioteca<70>-Footnote-2515847486
Ref: Biblioteca<70>-Footnote-2525847553
Ref: Biblioteca<70>-Footnote-2535847620
Ref: Biblioteca<70>-Footnote-2545847687
Ref: Biblioteca<70>-Footnote-2555847754
Ref: Biblioteca<70>-Footnote-2565847821
Ref: Biblioteca<70>-Footnote-2575847888
Ref: Biblioteca<70>-Footnote-2585847955
Ref: Biblioteca<70>-Footnote-2595848022
Ref: Biblioteca<70>-Footnote-2605848089
Ref: Biblioteca<70>-Footnote-2615848156
Ref: Biblioteca<70>-Footnote-2625848223
Ref: Biblioteca<70>-Footnote-2635848290
Ref: Biblioteca<70>-Footnote-2645848357
Ref: Biblioteca<70>-Footnote-2655848424
Ref: Biblioteca<70>-Footnote-2665848491
Ref: Biblioteca<70>-Footnote-2675848558
Ref: Biblioteca<70>-Footnote-2685848625
Ref: Biblioteca<70>-Footnote-2695848692
Ref: Biblioteca<70>-Footnote-2705848759
Ref: Biblioteca<70>-Footnote-2715848826
Ref: Biblioteca<70>-Footnote-2725848893
Ref: Biblioteca<70>-Footnote-2735848949
Ref: Biblioteca<70>-Footnote-2745849016
Ref: Biblioteca<70>-Footnote-2755849083
Ref: Biblioteca<70>-Footnote-2765849150
Ref: Biblioteca<70>-Footnote-2775849217
Ref: Biblioteca<70>-Footnote-2785849284
Ref: Biblioteca<70>-Footnote-2795849351
Ref: Biblioteca<70>-Footnote-2805849418
Ref: Biblioteca<70>-Footnote-2815849485
Ref: Biblioteca<70>-Footnote-2825849552
Ref: Biblioteca<70>-Footnote-2835849619
Ref: Biblioteca<70>-Footnote-2845849686
Ref: Biblioteca<70>-Footnote-2855849753
Ref: Biblioteca<70>-Footnote-2865849820
Ref: Biblioteca<70>-Footnote-2875849887
Ref: Biblioteca<70>-Footnote-2885849954
Ref: Biblioteca<70>-Footnote-2895850021
Ref: Biblioteca<70>-Footnote-2905850088
Ref: Biblioteca<70>-Footnote-2915850155
Ref: Biblioteca<70>-Footnote-2925850222
Ref: Biblioteca<70>-Footnote-2935850289
Ref: Biblioteca<70>-Footnote-2945850356
Ref: Biblioteca<70>-Footnote-2955850423
Ref: Biblioteca<70>-Footnote-2965850490
Ref: Biblioteca<70>-Footnote-2975850557
Ref: Biblioteca<70>-Footnote-2985850624
Ref: Biblioteca<70>-Footnote-2995850691
Ref: Biblioteca<70>-Footnote-3005850758
Ref: Biblioteca<70>-Footnote-3015850825
Ref: Biblioteca<70>-Footnote-3025850892
Ref: Biblioteca<70>-Footnote-3035850959
Ref: Biblioteca<70>-Footnote-3045851026
Ref: Biblioteca<70>-Footnote-3055851093
Ref: Biblioteca<70>-Footnote-3065851160
Ref: Biblioteca<70>-Footnote-3075851227
Ref: Biblioteca<70>-Footnote-3085851294
Ref: Biblioteca<70>-Footnote-3095851361
Ref: Biblioteca<70>-Footnote-3105851428
Ref: Biblioteca<70>-Footnote-3115851495
Ref: Biblioteca<70>-Footnote-3125851562
Ref: Biblioteca<70>-Footnote-3135851629
Ref: Biblioteca<70>-Footnote-3145851696
Ref: Biblioteca<70>-Footnote-3155851763
Ref: Biblioteca<70>-Footnote-3165851830
Ref: Biblioteca<70>-Footnote-3175851897
Ref: Biblioteca<70>-Footnote-3185851964
Ref: Biblioteca<70>-Footnote-3195852031
Ref: Biblioteca<70>-Footnote-3205852098
Ref: Biblioteca<70>-Footnote-3215852165
Ref: Biblioteca<70>-Footnote-3225852232
Ref: Biblioteca<70>-Footnote-3235852299
Ref: Biblioteca<70>-Footnote-3245852366
Ref: Biblioteca<70>-Footnote-3255852433
Ref: Biblioteca<70>-Footnote-3265852500
Node: Documentação<63>5852567
Ref: whatsnew/changelog id6115852684
Ref: 1d4e5852684
Ref: Documentação<63>-Footnote-15854850
Ref: Documentação<63>-Footnote-25854915
Ref: Documentação<63>-Footnote-35854980
Ref: Documentação<63>-Footnote-45855045
Ref: Documentação<63>-Footnote-55855110
Ref: Documentação<63>-Footnote-65855175
Ref: Documentação<63>-Footnote-75855240
Ref: Documentação<63>-Footnote-85855305
Ref: Documentação<63>-Footnote-95855370
Ref: Documentação<63>-Footnote-105855435
Ref: Documentação<63>-Footnote-115855501
Ref: Documentação<63>-Footnote-125855567
Ref: Documentação<63>-Footnote-135855633
Ref: Documentação<63>-Footnote-145855699
Ref: Documentação<63>-Footnote-155855765
Ref: Documentação<63>-Footnote-165855831
Ref: Documentação<63>-Footnote-175855874
Node: Testes<61>5855940
Ref: whatsnew/changelog id6125856059
Ref: 1d515856059
Ref: Testes<61>-Footnote-15858825
Ref: Testes<61>-Footnote-25858890
Ref: Testes<61>-Footnote-35858955
Ref: Testes<61>-Footnote-45859020
Ref: Testes<61>-Footnote-55859085
Ref: Testes<61>-Footnote-65859150
Ref: Testes<61>-Footnote-75859215
Ref: Testes<61>-Footnote-85859280
Ref: Testes<61>-Footnote-95859345
Ref: Testes<61>-Footnote-105859410
Ref: Testes<61>-Footnote-115859476
Ref: Testes<61>-Footnote-125859542
Ref: Testes<61>-Footnote-135859608
Ref: Testes<61>-Footnote-145859674
Ref: Testes<61>-Footnote-155859740
Ref: Testes<61>-Footnote-165859806
Ref: Testes<61>-Footnote-175859872
Ref: Testes<61>-Footnote-185859938
Ref: Testes<61>-Footnote-195860004
Node: Construção<65>5860070
Ref: whatsnew/changelog id6135860182
Ref: 1d525860182
Ref: Construção<65>-Footnote-15864963
Ref: Construção<65>-Footnote-25865028
Ref: Construção<65>-Footnote-35865093
Ref: Construção<65>-Footnote-45865158
Ref: Construção<65>-Footnote-55865200
Ref: Construção<65>-Footnote-65865265
Ref: Construção<65>-Footnote-75865330
Ref: Construção<65>-Footnote-85865395
Ref: Construção<65>-Footnote-95865460
Ref: Construção<65>-Footnote-105865525
Ref: Construção<65>-Footnote-115865591
Ref: Construção<65>-Footnote-125865657
Ref: Construção<65>-Footnote-135865723
Ref: Construção<65>-Footnote-145865789
Ref: Construção<65>-Footnote-155865855
Ref: Construção<65>-Footnote-165865921
Ref: Construção<65>-Footnote-175865987
Ref: Construção<65>-Footnote-185866053
Ref: Construção<65>-Footnote-195866119
Ref: Construção<65>-Footnote-205866185
Ref: Construção<65>-Footnote-215866251
Ref: Construção<65>-Footnote-225866317
Ref: Construção<65>-Footnote-235866383
Ref: Construção<65>-Footnote-245866449
Ref: Construção<65>-Footnote-255866515
Ref: Construção<65>-Footnote-265866581
Ref: Construção<65>-Footnote-275866647
Ref: Construção<65>-Footnote-285866713
Ref: Construção<65>-Footnote-295866779
Ref: Construção<65>-Footnote-305866845
Ref: Construção<65>-Footnote-315866911
Ref: Construção<65>-Footnote-325866977
Ref: Construção<65>-Footnote-335867043
Ref: Construção<65>-Footnote-345867109
Ref: Construção<65>-Footnote-355867175
Ref: Construção<65>-Footnote-365867241
Ref: Construção<65>-Footnote-375867307
Node: Windows<60>5867373
Ref: whatsnew/changelog id6145867483
Ref: 1d535867483
Ref: Windows<60>-Footnote-15869969
Ref: Windows<60>-Footnote-25870034
Ref: Windows<60>-Footnote-35870099
Ref: Windows<60>-Footnote-45870164
Ref: Windows<60>-Footnote-55870229
Ref: Windows<60>-Footnote-65870294
Ref: Windows<60>-Footnote-75870359
Ref: Windows<60>-Footnote-85870424
Ref: Windows<60>-Footnote-95870489
Ref: Windows<60>-Footnote-105870554
Ref: Windows<60>-Footnote-115870620
Ref: Windows<60>-Footnote-125870686
Ref: Windows<60>-Footnote-135870752
Ref: Windows<60>-Footnote-145870818
Ref: Windows<60>-Footnote-155870884
Ref: Windows<60>-Footnote-165870950
Ref: Windows<60>-Footnote-175871016
Ref: Windows<60>-Footnote-185871082
Ref: Windows<60>-Footnote-195871148
Ref: Windows<60>-Footnote-205871214
Ref: Windows<60>-Footnote-215871280
Ref: Windows<60>-Footnote-225871346
Ref: Windows<60>-Footnote-235871412
Ref: Windows<60>-Footnote-245871478
Ref: Windows<60>-Footnote-255871544
Node: IDLE<44>5871610
Ref: whatsnew/changelog id6155871725
Ref: 1d545871725
Ref: IDLE<44>-Footnote-15881726
Ref: IDLE<44>-Footnote-25881791
Ref: IDLE<44>-Footnote-35881856
Ref: IDLE<44>-Footnote-45881921
Ref: IDLE<44>-Footnote-55881986
Ref: IDLE<44>-Footnote-65882051
Ref: IDLE<44>-Footnote-75882116
Ref: IDLE<44>-Footnote-85882181
Ref: IDLE<44>-Footnote-95882246
Ref: IDLE<44>-Footnote-105882311
Ref: IDLE<44>-Footnote-115882377
Ref: IDLE<44>-Footnote-125882443
Ref: IDLE<44>-Footnote-135882509
Ref: IDLE<44>-Footnote-145882575
Ref: IDLE<44>-Footnote-155882641
Ref: IDLE<44>-Footnote-165882707
Ref: IDLE<44>-Footnote-175882773
Ref: IDLE<44>-Footnote-185882839
Ref: IDLE<44>-Footnote-195882905
Ref: IDLE<44>-Footnote-205882971
Ref: IDLE<44>-Footnote-215883037
Ref: IDLE<44>-Footnote-225883103
Ref: IDLE<44>-Footnote-235883169
Ref: IDLE<44>-Footnote-245883235
Ref: IDLE<44>-Footnote-255883301
Ref: IDLE<44>-Footnote-265883367
Ref: IDLE<44>-Footnote-275883433
Ref: IDLE<44>-Footnote-285883499
Ref: IDLE<44>-Footnote-295883565
Ref: IDLE<44>-Footnote-305883631
Ref: IDLE<44>-Footnote-315883697
Ref: IDLE<44>-Footnote-325883763
Ref: IDLE<44>-Footnote-335883829
Ref: IDLE<44>-Footnote-345883895
Ref: IDLE<44>-Footnote-355883960
Ref: IDLE<44>-Footnote-365884026
Ref: IDLE<44>-Footnote-375884092
Ref: IDLE<44>-Footnote-385884158
Ref: IDLE<44>-Footnote-395884224
Ref: IDLE<44>-Footnote-405884290
Ref: IDLE<44>-Footnote-415884356
Ref: IDLE<44>-Footnote-425884422
Ref: IDLE<44>-Footnote-435884488
Ref: IDLE<44>-Footnote-445884553
Ref: IDLE<44>-Footnote-455884619
Ref: IDLE<44>-Footnote-465884685
Ref: IDLE<44>-Footnote-475884751
Ref: IDLE<44>-Footnote-485884817
Ref: IDLE<44>-Footnote-495884883
Ref: IDLE<44>-Footnote-505884949
Ref: IDLE<44>-Footnote-515885015
Node: Ferramentas/Demos<42>5885081
Ref: whatsnew/changelog id6165885194
Ref: 1d555885194
Ref: Ferramentas/Demos<42>-Footnote-15886694
Ref: Ferramentas/Demos<42>-Footnote-25886759
Ref: Ferramentas/Demos<42>-Footnote-35886801
Ref: Ferramentas/Demos<42>-Footnote-45886866
Ref: Ferramentas/Demos<42>-Footnote-55886931
Ref: Ferramentas/Demos<42>-Footnote-65886996
Ref: Ferramentas/Demos<42>-Footnote-75887061
Ref: Ferramentas/Demos<42>-Footnote-85887126
Node: API C<61>5887191
Ref: whatsnew/changelog id6175887287
Ref: 1d565887287
Ref: API C<61>-Footnote-15890351
Ref: API C<61>-Footnote-25890416
Ref: API C<61>-Footnote-35890481
Ref: API C<61>-Footnote-45890546
Ref: API C<61>-Footnote-55890611
Ref: API C<61>-Footnote-65890675
Ref: API C<61>-Footnote-75890740
Ref: API C<61>-Footnote-85890805
Ref: API C<61>-Footnote-95890870
Ref: API C<61>-Footnote-105890935
Ref: API C<61>-Footnote-115891001
Ref: API C<61>-Footnote-125891067
Ref: API C<61>-Footnote-135891133
Ref: API C<61>-Footnote-145891199
Ref: API C<61>-Footnote-155891265
Node: Python 3 6 6 final5891331
Ref: whatsnew/changelog python-3-6-6-final5891465
Ref: 1d575891465
Node: Python 3 6 6 release candidate 15891600
Ref: whatsnew/changelog python-3-6-6-release-candidate-15891732
Ref: 1d585891732
Node: Núcleo e embutidos<69>5892158
Ref: whatsnew/changelog id6185892273
Ref: 1d595892273
Ref: Núcleo e embutidos<69>-Footnote-15893858
Ref: Núcleo e embutidos<69>-Footnote-25893923
Ref: Núcleo e embutidos<69>-Footnote-35893988
Ref: Núcleo e embutidos<69>-Footnote-45894053
Ref: Núcleo e embutidos<69>-Footnote-55894118
Ref: Núcleo e embutidos<69>-Footnote-65894183
Ref: Núcleo e embutidos<69>-Footnote-75894248
Ref: Núcleo e embutidos<69>-Footnote-85894313
Ref: Núcleo e embutidos<69>-Footnote-95894378
Ref: Núcleo e embutidos<69>-Footnote-105894443
Ref: Núcleo e embutidos<69>-Footnote-115894509
Ref: Núcleo e embutidos<69>-Footnote-125894575
Node: Biblioteca<71>5894641
Ref: whatsnew/changelog id6195894783
Ref: 1d5a5894783
Ref: Biblioteca<71>-Footnote-15900270
Ref: Biblioteca<71>-Footnote-25900335
Ref: Biblioteca<71>-Footnote-35900400
Ref: Biblioteca<71>-Footnote-45900465
Ref: Biblioteca<71>-Footnote-55900530
Ref: Biblioteca<71>-Footnote-65900595
Ref: Biblioteca<71>-Footnote-75900660
Ref: Biblioteca<71>-Footnote-85900725
Ref: Biblioteca<71>-Footnote-95900790
Ref: Biblioteca<71>-Footnote-105900855
Ref: Biblioteca<71>-Footnote-115900921
Ref: Biblioteca<71>-Footnote-125900987
Ref: Biblioteca<71>-Footnote-135901053
Ref: Biblioteca<71>-Footnote-145901119
Ref: Biblioteca<71>-Footnote-155901185
Ref: Biblioteca<71>-Footnote-165901251
Ref: Biblioteca<71>-Footnote-175901317
Ref: Biblioteca<71>-Footnote-185901383
Ref: Biblioteca<71>-Footnote-195901449
Ref: Biblioteca<71>-Footnote-205901515
Ref: Biblioteca<71>-Footnote-215901581
Ref: Biblioteca<71>-Footnote-225901648
Ref: Biblioteca<71>-Footnote-235901714
Ref: Biblioteca<71>-Footnote-245901780
Ref: Biblioteca<71>-Footnote-255901846
Ref: Biblioteca<71>-Footnote-265901912
Ref: Biblioteca<71>-Footnote-275901978
Ref: Biblioteca<71>-Footnote-285902044
Ref: Biblioteca<71>-Footnote-295902087
Ref: Biblioteca<71>-Footnote-305902153
Ref: Biblioteca<71>-Footnote-315902219
Ref: Biblioteca<71>-Footnote-325902285
Ref: Biblioteca<71>-Footnote-335902351
Ref: Biblioteca<71>-Footnote-345902417
Ref: Biblioteca<71>-Footnote-355902483
Ref: Biblioteca<71>-Footnote-365902549
Ref: Biblioteca<71>-Footnote-375902615
Ref: Biblioteca<71>-Footnote-385902681
Ref: Biblioteca<71>-Footnote-395902747
Node: Documentação<64>5902813
Ref: whatsnew/changelog id6205902942
Ref: 1d5b5902942
Ref: Documentação<64>-Footnote-15904433
Ref: Documentação<64>-Footnote-25904498
Ref: Documentação<64>-Footnote-35904563
Ref: Documentação<64>-Footnote-45904628
Ref: Documentação<64>-Footnote-55904693
Ref: Documentação<64>-Footnote-65904758
Ref: Documentação<64>-Footnote-75904823
Ref: Documentação<64>-Footnote-85904888
Ref: Documentação<64>-Footnote-95904953
Ref: Documentação<64>-Footnote-105905018
Ref: Documentação<64>-Footnote-115905084
Ref: Documentação<64>-Footnote-125905150
Ref: Documentação<64>-Footnote-135905215
Node: Testes<62>5905281
Ref: whatsnew/changelog id6215905412
Ref: 1d5c5905412
Ref: Testes<62>-Footnote-15905636
Ref: Testes<62>-Footnote-25905701
Node: Construção<66>5905766
Ref: whatsnew/changelog id6225905890
Ref: 1d5d5905890
Ref: Construção<66>-Footnote-15906699
Ref: Construção<66>-Footnote-25906763
Ref: Construção<66>-Footnote-35906828
Ref: Construção<66>-Footnote-45906893
Ref: Construção<66>-Footnote-55906958
Node: Windows<61>5907023
Ref: whatsnew/changelog id6235907146
Ref: 1d5e5907146
Ref: Windows<61>-Footnote-15907283
Node: macOS<48>5907348
Ref: whatsnew/changelog id6245907463
Ref: 1d5f5907463
Ref: macOS<48>-Footnote-15907604
Node: IDLE<45>5907669
Ref: whatsnew/changelog id6255907794
Ref: 1d605907794
Ref: IDLE<45>-Footnote-15909863
Ref: IDLE<45>-Footnote-25909928
Ref: IDLE<45>-Footnote-35909993
Ref: IDLE<45>-Footnote-45910058
Ref: IDLE<45>-Footnote-55910123
Ref: IDLE<45>-Footnote-65910188
Ref: IDLE<45>-Footnote-75910253
Ref: IDLE<45>-Footnote-85910318
Ref: IDLE<45>-Footnote-95910383
Ref: IDLE<45>-Footnote-105910448
Ref: IDLE<45>-Footnote-115910514
Ref: IDLE<45>-Footnote-125910580
Node: Ferramentas/Demos<43>5910646
Ref: whatsnew/changelog id6265910771
Ref: 1d615910771
Ref: Ferramentas/Demos<43>-Footnote-15911538
Ref: Ferramentas/Demos<43>-Footnote-25911603
Ref: Ferramentas/Demos<43>-Footnote-35911668
Ref: Ferramentas/Demos<43>-Footnote-45911733
Ref: Ferramentas/Demos<43>-Footnote-55911798
Node: API C<62>5911863
Ref: whatsnew/changelog id6275911971
Ref: 1d625911971
Ref: API C<62>-Footnote-15912184
Node: Python 3 6 5 final5912249
Ref: whatsnew/changelog python-3-6-5-final5912395
Ref: 1d635912395
Node: Testes<63>5912551
Ref: whatsnew/changelog id6285912641
Ref: 1d645912641
Ref: Testes<63>-Footnote-15912797
Node: Construção<67>5912862
Ref: whatsnew/changelog id6295912952
Ref: 1d655912952
Ref: Construção<67>-Footnote-15913101
Node: Python 3 6 5 release candidate 15913166
Ref: whatsnew/changelog python-3-6-5-release-candidate-15913298
Ref: 1d665913298
Node: Segurança<48>5913754
Ref: whatsnew/changelog id6305913869
Ref: 1d675913869
Ref: Segurança<48>-Footnote-15914303
Ref: Segurança<48>-Footnote-25914368
Ref: Segurança<48>-Footnote-35914433
Ref: Segurança<48>-Footnote-45914488
Node: Núcleo e embutidos<70>5914543
Ref: whatsnew/changelog id6315914681
Ref: 1d685914681
Ref: Núcleo e embutidos<70>-Footnote-15916858
Ref: Núcleo e embutidos<70>-Footnote-25916923
Ref: Núcleo e embutidos<70>-Footnote-35916988
Ref: Núcleo e embutidos<70>-Footnote-45917053
Ref: Núcleo e embutidos<70>-Footnote-55917118
Ref: Núcleo e embutidos<70>-Footnote-65917183
Ref: Núcleo e embutidos<70>-Footnote-75917248
Ref: Núcleo e embutidos<70>-Footnote-85917313
Ref: Núcleo e embutidos<70>-Footnote-95917378
Ref: Núcleo e embutidos<70>-Footnote-105917443
Ref: Núcleo e embutidos<70>-Footnote-115917509
Ref: Núcleo e embutidos<70>-Footnote-125917575
Ref: Núcleo e embutidos<70>-Footnote-135917641
Ref: Núcleo e embutidos<70>-Footnote-145917707
Node: Biblioteca<72>5917773
Ref: whatsnew/changelog id6325917915
Ref: 1d695917915
Ref: Biblioteca<72>-Footnote-15923852
Ref: Biblioteca<72>-Footnote-25923917
Ref: Biblioteca<72>-Footnote-35923982
Ref: Biblioteca<72>-Footnote-45924047
Ref: Biblioteca<72>-Footnote-55924112
Ref: Biblioteca<72>-Footnote-65924177
Ref: Biblioteca<72>-Footnote-75924242
Ref: Biblioteca<72>-Footnote-85924307
Ref: Biblioteca<72>-Footnote-95924372
Ref: Biblioteca<72>-Footnote-105924437
Ref: Biblioteca<72>-Footnote-115924503
Ref: Biblioteca<72>-Footnote-125924569
Ref: Biblioteca<72>-Footnote-135924635
Ref: Biblioteca<72>-Footnote-145924701
Ref: Biblioteca<72>-Footnote-155924767
Ref: Biblioteca<72>-Footnote-165924833
Ref: Biblioteca<72>-Footnote-175924899
Ref: Biblioteca<72>-Footnote-185924965
Ref: Biblioteca<72>-Footnote-195925031
Ref: Biblioteca<72>-Footnote-205925097
Ref: Biblioteca<72>-Footnote-215925163
Ref: Biblioteca<72>-Footnote-225925229
Ref: Biblioteca<72>-Footnote-235925295
Ref: Biblioteca<72>-Footnote-245925361
Ref: Biblioteca<72>-Footnote-255925427
Ref: Biblioteca<72>-Footnote-265925493
Ref: Biblioteca<72>-Footnote-275925559
Ref: Biblioteca<72>-Footnote-285925625
Ref: Biblioteca<72>-Footnote-295925691
Ref: Biblioteca<72>-Footnote-305925757
Ref: Biblioteca<72>-Footnote-315925823
Ref: Biblioteca<72>-Footnote-325925889
Ref: Biblioteca<72>-Footnote-335925955
Ref: Biblioteca<72>-Footnote-345926021
Ref: Biblioteca<72>-Footnote-355926087
Ref: Biblioteca<72>-Footnote-365926153
Ref: Biblioteca<72>-Footnote-375926219
Ref: Biblioteca<72>-Footnote-385926285
Ref: Biblioteca<72>-Footnote-395926351
Ref: Biblioteca<72>-Footnote-405926417
Node: Documentação<65>5926483
Ref: whatsnew/changelog id6335926612
Ref: 1d6a5926612
Ref: Documentação<65>-Footnote-15927448
Ref: Documentação<65>-Footnote-25927513
Ref: Documentação<65>-Footnote-35927578
Ref: Documentação<65>-Footnote-45927642
Ref: Documentação<65>-Footnote-55927707
Ref: Documentação<65>-Footnote-65927772
Node: Testes<64>5927837
Ref: whatsnew/changelog id6345927968
Ref: 1d6b5927968
Ref: Testes<64>-Footnote-15928631
Ref: Testes<64>-Footnote-25928696
Ref: Testes<64>-Footnote-35928761
Ref: Testes<64>-Footnote-45928826
Node: Construção<68>5928891
Ref: whatsnew/changelog id6355929015
Ref: 1d6c5929015
Ref: Construção<68>-Footnote-15929216
Node: Windows<62>5929281
Ref: whatsnew/changelog id6365929404
Ref: 1d6d5929404
Ref: Windows<62>-Footnote-15930354
Ref: Windows<62>-Footnote-25930419
Ref: Windows<62>-Footnote-35930484
Ref: Windows<62>-Footnote-45930549
Ref: Windows<62>-Footnote-55930614
Ref: Windows<62>-Footnote-65930679
Ref: Windows<62>-Footnote-75930744
Ref: Windows<62>-Footnote-85930809
Node: macOS<49>5930874
Ref: whatsnew/changelog id6375930989
Ref: 1d6e5930989
Ref: macOS<49>-Footnote-15931382
Node: IDLE<46>5931447
Ref: whatsnew/changelog id6385931572
Ref: 1d6f5931572
Ref: IDLE<46>-Footnote-15933066
Ref: IDLE<46>-Footnote-25933131
Ref: IDLE<46>-Footnote-35933196
Ref: IDLE<46>-Footnote-45933261
Ref: IDLE<46>-Footnote-55933326
Ref: IDLE<46>-Footnote-65933391
Ref: IDLE<46>-Footnote-75933456
Ref: IDLE<46>-Footnote-85933521
Node: Ferramentas/Demos<44>5933586
Ref: whatsnew/changelog id6395933711
Ref: 1d705933711
Ref: Ferramentas/Demos<44>-Footnote-15934143
Ref: Ferramentas/Demos<44>-Footnote-25934208
Node: API C<63>5934273
Ref: whatsnew/changelog id6405934381
Ref: 1d715934381
Ref: API C<63>-Footnote-15934631
Node: Python 3 6 4 final5934696
Ref: whatsnew/changelog python-3-6-4-final5934842
Ref: 1d725934842
Node: Python 3 6 4 release candidate 15934998
Ref: whatsnew/changelog python-3-6-4-release-candidate-15935130
Ref: 1d735935130
Node: Núcleo e embutidos<71>5935556
Ref: whatsnew/changelog id6415935671
Ref: 1d745935671
Ref: Núcleo e embutidos<71>-Footnote-15940406
Ref: Núcleo e embutidos<71>-Footnote-25940471
Ref: Núcleo e embutidos<71>-Footnote-35940536
Ref: Núcleo e embutidos<71>-Footnote-45940601
Ref: Núcleo e embutidos<71>-Footnote-55940666
Ref: Núcleo e embutidos<71>-Footnote-65940731
Ref: Núcleo e embutidos<71>-Footnote-75940796
Ref: Núcleo e embutidos<71>-Footnote-85940861
Ref: Núcleo e embutidos<71>-Footnote-95940926
Ref: Núcleo e embutidos<71>-Footnote-105940991
Ref: Núcleo e embutidos<71>-Footnote-115941057
Ref: Núcleo e embutidos<71>-Footnote-125941123
Ref: Núcleo e embutidos<71>-Footnote-135941189
Ref: Núcleo e embutidos<71>-Footnote-145941255
Ref: Núcleo e embutidos<71>-Footnote-155941321
Ref: Núcleo e embutidos<71>-Footnote-165941387
Ref: Núcleo e embutidos<71>-Footnote-175941453
Ref: Núcleo e embutidos<71>-Footnote-185941519
Ref: Núcleo e embutidos<71>-Footnote-195941585
Ref: Núcleo e embutidos<71>-Footnote-205941651
Ref: Núcleo e embutidos<71>-Footnote-215941717
Ref: Núcleo e embutidos<71>-Footnote-225941783
Ref: Núcleo e embutidos<71>-Footnote-235941849
Ref: Núcleo e embutidos<71>-Footnote-245941915
Node: Biblioteca<73>5941981
Ref: whatsnew/changelog id6425942123
Ref: 1d755942123
Ref: Biblioteca<73>-Footnote-15949454
Ref: Biblioteca<73>-Footnote-25949519
Ref: Biblioteca<73>-Footnote-35949584
Ref: Biblioteca<73>-Footnote-45949649
Ref: Biblioteca<73>-Footnote-55949714
Ref: Biblioteca<73>-Footnote-65949779
Ref: Biblioteca<73>-Footnote-75949844
Ref: Biblioteca<73>-Footnote-85949909
Ref: Biblioteca<73>-Footnote-95949974
Ref: Biblioteca<73>-Footnote-105950039
Ref: Biblioteca<73>-Footnote-115950105
Ref: Biblioteca<73>-Footnote-125950171
Ref: Biblioteca<73>-Footnote-135950237
Ref: Biblioteca<73>-Footnote-145950303
Ref: Biblioteca<73>-Footnote-155950369
Ref: Biblioteca<73>-Footnote-165950435
Ref: Biblioteca<73>-Footnote-175950500
Ref: Biblioteca<73>-Footnote-185950566
Ref: Biblioteca<73>-Footnote-195950632
Ref: Biblioteca<73>-Footnote-205950698
Ref: Biblioteca<73>-Footnote-215950764
Ref: Biblioteca<73>-Footnote-225950830
Ref: Biblioteca<73>-Footnote-235950896
Ref: Biblioteca<73>-Footnote-245950962
Ref: Biblioteca<73>-Footnote-255951028
Ref: Biblioteca<73>-Footnote-265951094
Ref: Biblioteca<73>-Footnote-275951160
Ref: Biblioteca<73>-Footnote-285951226
Ref: Biblioteca<73>-Footnote-295951292
Ref: Biblioteca<73>-Footnote-305951358
Ref: Biblioteca<73>-Footnote-315951424
Ref: Biblioteca<73>-Footnote-325951490
Ref: Biblioteca<73>-Footnote-335951556
Ref: Biblioteca<73>-Footnote-345951622
Ref: Biblioteca<73>-Footnote-355951688
Ref: Biblioteca<73>-Footnote-365951754
Ref: Biblioteca<73>-Footnote-375951820
Ref: Biblioteca<73>-Footnote-385951886
Ref: Biblioteca<73>-Footnote-395951952
Ref: Biblioteca<73>-Footnote-405952018
Ref: Biblioteca<73>-Footnote-415952084
Ref: Biblioteca<73>-Footnote-425952150
Ref: Biblioteca<73>-Footnote-435952216
Ref: Biblioteca<73>-Footnote-445952282
Ref: Biblioteca<73>-Footnote-455952348
Ref: Biblioteca<73>-Footnote-465952414
Ref: Biblioteca<73>-Footnote-475952480
Ref: Biblioteca<73>-Footnote-485952546
Ref: Biblioteca<73>-Footnote-495952612
Ref: Biblioteca<73>-Footnote-505952678
Ref: Biblioteca<73>-Footnote-515952744
Ref: Biblioteca<73>-Footnote-525952810
Node: Documentação<66>5952876
Ref: whatsnew/changelog id6435953005
Ref: 1d765953005
Ref: Documentação<66>-Footnote-15953494
Ref: Documentação<66>-Footnote-25953559
Ref: Documentação<66>-Footnote-35953624
Node: Testes<65>5953689
Ref: whatsnew/changelog id6445953820
Ref: 1d775953820
Ref: Testes<65>-Footnote-15954500
Ref: Testes<65>-Footnote-25954565
Ref: Testes<65>-Footnote-35954630
Ref: Testes<65>-Footnote-45954695
Node: Construção<69>5954760
Ref: whatsnew/changelog id6455954884
Ref: 1d785954884
Ref: Construção<69>-Footnote-15955800
Ref: Construção<69>-Footnote-25955865
Ref: Construção<69>-Footnote-35955930
Ref: Construção<69>-Footnote-45955995
Ref: Construção<69>-Footnote-55956060
Ref: Construção<69>-Footnote-65956125
Ref: Construção<69>-Footnote-75956190
Ref: Construção<69>-Footnote-85956255
Ref: Construção<69>-Footnote-95956320
Node: Windows<63>5956385
Ref: whatsnew/changelog id6465956508
Ref: 1d795956508
Ref: Windows<63>-Footnote-15956826
Ref: Windows<63>-Footnote-25956890
Node: macOS<50>5956955
Ref: whatsnew/changelog id6475957070
Ref: 1d7a5957070
Ref: macOS<50>-Footnote-15957204
Node: IDLE<47>5957269
Ref: whatsnew/changelog id6485957394
Ref: 1d7b5957394
Ref: IDLE<47>-Footnote-15960731
Ref: IDLE<47>-Footnote-25960796
Ref: IDLE<47>-Footnote-35960861
Ref: IDLE<47>-Footnote-45960926
Ref: IDLE<47>-Footnote-55960991
Ref: IDLE<47>-Footnote-65961056
Ref: IDLE<47>-Footnote-75961121
Ref: IDLE<47>-Footnote-85961186
Ref: IDLE<47>-Footnote-95961251
Ref: IDLE<47>-Footnote-105961316
Ref: IDLE<47>-Footnote-115961382
Ref: IDLE<47>-Footnote-125961448
Ref: IDLE<47>-Footnote-135961514
Ref: IDLE<47>-Footnote-145961580
Node: Ferramentas/Demos<45>5961648
Ref: whatsnew/changelog id6495961773
Ref: 1d7c5961773
Ref: Ferramentas/Demos<45>-Footnote-15962075
Node: API C<64>5962140
Ref: whatsnew/changelog id6505962248
Ref: 1d7d5962248
Ref: API C<64>-Footnote-15962976
Ref: API C<64>-Footnote-25963041
Ref: API C<64>-Footnote-35963106
Ref: API C<64>-Footnote-45963171
Node: Python 3 6 3 final5963236
Ref: whatsnew/changelog python-3-6-3-final5963382
Ref: 1d7e5963382
Node: Biblioteca<74>5963546
Ref: whatsnew/changelog id6515963640
Ref: 1d7f5963640
Ref: Biblioteca<74>-Footnote-15963848
Node: Construção<70>5963913
Ref: whatsnew/changelog id6525964007
Ref: 1d805964007
Ref: Construção<70>-Footnote-15964310
Ref: Construção<70>-Footnote-25964375
Node: Python 3 6 3 release candidate 15964440
Ref: whatsnew/changelog python-3-6-3-release-candidate-15964572
Ref: 1d815964572
Node: Segurança<49>5964988
Ref: whatsnew/changelog id6535965103
Ref: 1d825965103
Ref: Segurança<49>-Footnote-15965412
Ref: Segurança<49>-Footnote-25965477
Node: Núcleo e embutidos<72>5965542
Ref: whatsnew/changelog id6545965680
Ref: 1d835965680
Ref: Núcleo e embutidos<72>-Footnote-15969215
Ref: Núcleo e embutidos<72>-Footnote-25969280
Ref: Núcleo e embutidos<72>-Footnote-35969345
Ref: Núcleo e embutidos<72>-Footnote-45969410
Ref: Núcleo e embutidos<72>-Footnote-55969475
Ref: Núcleo e embutidos<72>-Footnote-65969540
Ref: Núcleo e embutidos<72>-Footnote-75969605
Ref: Núcleo e embutidos<72>-Footnote-85969670
Ref: Núcleo e embutidos<72>-Footnote-95969735
Ref: Núcleo e embutidos<72>-Footnote-105969800
Ref: Núcleo e embutidos<72>-Footnote-115969866
Ref: Núcleo e embutidos<72>-Footnote-125969932
Ref: Núcleo e embutidos<72>-Footnote-135969998
Ref: Núcleo e embutidos<72>-Footnote-145970064
Ref: Núcleo e embutidos<72>-Footnote-155970130
Ref: Núcleo e embutidos<72>-Footnote-165970196
Ref: Núcleo e embutidos<72>-Footnote-175970262
Ref: Núcleo e embutidos<72>-Footnote-185970328
Ref: Núcleo e embutidos<72>-Footnote-195970394
Ref: Núcleo e embutidos<72>-Footnote-205970460
Ref: Núcleo e embutidos<72>-Footnote-215970526
Ref: Núcleo e embutidos<72>-Footnote-225970592
Node: Biblioteca<75>5970658
Ref: whatsnew/changelog id6555970800
Ref: 1d845970800
Ref: Biblioteca<75>-Footnote-15976807
Ref: Biblioteca<75>-Footnote-25976872
Ref: Biblioteca<75>-Footnote-35976937
Ref: Biblioteca<75>-Footnote-45977002
Ref: Biblioteca<75>-Footnote-55977067
Ref: Biblioteca<75>-Footnote-65977132
Ref: Biblioteca<75>-Footnote-75977197
Ref: Biblioteca<75>-Footnote-85977262
Ref: Biblioteca<75>-Footnote-95977327
Ref: Biblioteca<75>-Footnote-105977392
Ref: Biblioteca<75>-Footnote-115977458
Ref: Biblioteca<75>-Footnote-125977524
Ref: Biblioteca<75>-Footnote-135977590
Ref: Biblioteca<75>-Footnote-145977656
Ref: Biblioteca<75>-Footnote-155977722
Ref: Biblioteca<75>-Footnote-165977787
Ref: Biblioteca<75>-Footnote-175977853
Ref: Biblioteca<75>-Footnote-185977919
Ref: Biblioteca<75>-Footnote-195977962
Ref: Biblioteca<75>-Footnote-205978028
Ref: Biblioteca<75>-Footnote-215978094
Ref: Biblioteca<75>-Footnote-225978160
Ref: Biblioteca<75>-Footnote-235978226
Ref: Biblioteca<75>-Footnote-245978292
Ref: Biblioteca<75>-Footnote-255978358
Ref: Biblioteca<75>-Footnote-265978424
Ref: Biblioteca<75>-Footnote-275978490
Ref: Biblioteca<75>-Footnote-285978556
Ref: Biblioteca<75>-Footnote-295978622
Ref: Biblioteca<75>-Footnote-305978688
Ref: Biblioteca<75>-Footnote-315978754
Ref: Biblioteca<75>-Footnote-325978820
Ref: Biblioteca<75>-Footnote-335978886
Ref: Biblioteca<75>-Footnote-345978952
Ref: Biblioteca<75>-Footnote-355979018
Ref: Biblioteca<75>-Footnote-365979084
Ref: Biblioteca<75>-Footnote-375979150
Ref: Biblioteca<75>-Footnote-385979216
Ref: Biblioteca<75>-Footnote-395979282
Ref: Biblioteca<75>-Footnote-405979348
Ref: Biblioteca<75>-Footnote-415979414
Ref: Biblioteca<75>-Footnote-425979480
Node: Documentação<67>5979546
Ref: whatsnew/changelog id6565979675
Ref: 1d855979675
Ref: Documentação<67>-Footnote-15980098
Ref: Documentação<67>-Footnote-25980163
Ref: Documentação<67>-Footnote-35980228
Node: Testes<66>5980293
Ref: whatsnew/changelog id6575980424
Ref: 1d865980424
Ref: Testes<66>-Footnote-15981131
Ref: Testes<66>-Footnote-25981196
Ref: Testes<66>-Footnote-35981261
Ref: Testes<66>-Footnote-45981326
Node: Construção<71>5981391
Ref: whatsnew/changelog id6585981515
Ref: 1d875981515
Ref: Construção<71>-Footnote-15981702
Node: Windows<64>5981767
Ref: whatsnew/changelog id6595981889
Ref: 1d885981889
Ref: Windows<64>-Footnote-15982397
Ref: Windows<64>-Footnote-25982462
Ref: Windows<64>-Footnote-35982527
Ref: Windows<64>-Footnote-45982592
Node: IDLE<48>5982657
Ref: whatsnew/changelog id6605982784
Ref: 1d895982784
Ref: IDLE<48>-Footnote-15991617
Ref: IDLE<48>-Footnote-25991682
Ref: IDLE<48>-Footnote-35991747
Ref: IDLE<48>-Footnote-45991812
Ref: IDLE<48>-Footnote-55991877
Ref: IDLE<48>-Footnote-65991942
Ref: IDLE<48>-Footnote-75992007
Ref: IDLE<48>-Footnote-85992072
Ref: IDLE<48>-Footnote-95992137
Ref: IDLE<48>-Footnote-105992202
Ref: IDLE<48>-Footnote-115992268
Ref: IDLE<48>-Footnote-125992334
Ref: IDLE<48>-Footnote-135992400
Ref: IDLE<48>-Footnote-145992466
Ref: IDLE<48>-Footnote-155992532
Ref: IDLE<48>-Footnote-165992598
Ref: IDLE<48>-Footnote-175992664
Ref: IDLE<48>-Footnote-185992730
Ref: IDLE<48>-Footnote-195992796
Ref: IDLE<48>-Footnote-205992862
Ref: IDLE<48>-Footnote-215992928
Ref: IDLE<48>-Footnote-225992994
Ref: IDLE<48>-Footnote-235993060
Ref: IDLE<48>-Footnote-245993126
Ref: IDLE<48>-Footnote-255993192
Ref: IDLE<48>-Footnote-265993258
Ref: IDLE<48>-Footnote-275993324
Ref: IDLE<48>-Footnote-285993390
Ref: IDLE<48>-Footnote-295993456
Ref: IDLE<48>-Footnote-305993522
Ref: IDLE<48>-Footnote-315993588
Ref: IDLE<48>-Footnote-325993654
Ref: IDLE<48>-Footnote-335993720
Ref: IDLE<48>-Footnote-345993786
Ref: IDLE<48>-Footnote-355993851
Ref: IDLE<48>-Footnote-365993917
Ref: IDLE<48>-Footnote-375993983
Ref: IDLE<48>-Footnote-385994049
Ref: IDLE<48>-Footnote-395994115
Ref: IDLE<48>-Footnote-405994181
Ref: IDLE<48>-Footnote-415994247
Ref: IDLE<48>-Footnote-425994313
Ref: IDLE<48>-Footnote-435994379
Node: Ferramentas/Demos<46>5994444
Ref: whatsnew/changelog id6615994551
Ref: 1d8a5994551
Ref: Ferramentas/Demos<46>-Footnote-15995125
Ref: Ferramentas/Demos<46>-Footnote-25995190
Node: Python 3 6 2 final5995232
Ref: whatsnew/changelog python-3-6-2-final5995378
Ref: 1d8b5995378
Node: Python 3 6 2 release candidate 25995506
Ref: whatsnew/changelog python-3-6-2-release-candidate-25995652
Ref: 1d8c5995652
Node: Segurança<50>5995810
Ref: whatsnew/changelog id6625995893
Ref: 1d8d5995893
Ref: Segurança<50>-Footnote-15997021
Ref: Segurança<50>-Footnote-25997086
Ref: Segurança<50>-Footnote-35997151
Ref: Segurança<50>-Footnote-45997206
Ref: Segurança<50>-Footnote-55997261
Ref: Segurança<50>-Footnote-65997316
Ref: Segurança<50>-Footnote-75997371
Ref: Segurança<50>-Footnote-85997426
Ref: Segurança<50>-Footnote-95997481
Node: Python 3 6 2 release candidate 15997546
Ref: whatsnew/changelog python-3-6-2-release-candidate-15997692
Ref: 1d8e5997692
Node: Segurança<51>5998128
Ref: whatsnew/changelog id6635998243
Ref: 1d8f5998243
Ref: Segurança<51>-Footnote-15998519
Ref: Segurança<51>-Footnote-25998584
Ref: Segurança<51>-Footnote-35998639
Node: Núcleo e embutidos<73>5998694
Ref: whatsnew/changelog id6645998832
Ref: 1d905998832
Ref: Núcleo e embutidos<73>-Footnote-16000835
Ref: Núcleo e embutidos<73>-Footnote-26000900
Ref: Núcleo e embutidos<73>-Footnote-36000965
Ref: Núcleo e embutidos<73>-Footnote-46001030
Ref: Núcleo e embutidos<73>-Footnote-56001095
Ref: Núcleo e embutidos<73>-Footnote-66001160
Ref: Núcleo e embutidos<73>-Footnote-76001225
Ref: Núcleo e embutidos<73>-Footnote-86001290
Ref: Núcleo e embutidos<73>-Footnote-96001355
Ref: Núcleo e embutidos<73>-Footnote-106001420
Ref: Núcleo e embutidos<73>-Footnote-116001486
Ref: Núcleo e embutidos<73>-Footnote-126001552
Ref: Núcleo e embutidos<73>-Footnote-136001618
Ref: Núcleo e embutidos<73>-Footnote-146001684
Ref: Núcleo e embutidos<73>-Footnote-156001750
Node: Biblioteca<76>6001816
Ref: whatsnew/changelog id6656001948
Ref: 1d916001948
Ref: Biblioteca<76>-Footnote-16010382
Ref: Biblioteca<76>-Footnote-26010447
Ref: Biblioteca<76>-Footnote-36010512
Ref: Biblioteca<76>-Footnote-46010577
Ref: Biblioteca<76>-Footnote-56010642
Ref: Biblioteca<76>-Footnote-66010707
Ref: Biblioteca<76>-Footnote-76010772
Ref: Biblioteca<76>-Footnote-86010837
Ref: Biblioteca<76>-Footnote-96010902
Ref: Biblioteca<76>-Footnote-106010967
Ref: Biblioteca<76>-Footnote-116011033
Ref: Biblioteca<76>-Footnote-126011099
Ref: Biblioteca<76>-Footnote-136011165
Ref: Biblioteca<76>-Footnote-146011231
Ref: Biblioteca<76>-Footnote-156011297
Ref: Biblioteca<76>-Footnote-166011363
Ref: Biblioteca<76>-Footnote-176011429
Ref: Biblioteca<76>-Footnote-186011495
Ref: Biblioteca<76>-Footnote-196011561
Ref: Biblioteca<76>-Footnote-206011627
Ref: Biblioteca<76>-Footnote-216011693
Ref: Biblioteca<76>-Footnote-226011759
Ref: Biblioteca<76>-Footnote-236011825
Ref: Biblioteca<76>-Footnote-246011891
Ref: Biblioteca<76>-Footnote-256011957
Ref: Biblioteca<76>-Footnote-266012023
Ref: Biblioteca<76>-Footnote-276012089
Ref: Biblioteca<76>-Footnote-286012155
Ref: Biblioteca<76>-Footnote-296012221
Ref: Biblioteca<76>-Footnote-306012287
Ref: Biblioteca<76>-Footnote-316012353
Ref: Biblioteca<76>-Footnote-326012419
Ref: Biblioteca<76>-Footnote-336012485
Ref: Biblioteca<76>-Footnote-346012551
Ref: Biblioteca<76>-Footnote-356012617
Ref: Biblioteca<76>-Footnote-366012683
Ref: Biblioteca<76>-Footnote-376012749
Ref: Biblioteca<76>-Footnote-386012815
Ref: Biblioteca<76>-Footnote-396012881
Ref: Biblioteca<76>-Footnote-406012947
Ref: Biblioteca<76>-Footnote-416013013
Ref: Biblioteca<76>-Footnote-426013079
Ref: Biblioteca<76>-Footnote-436013145
Ref: Biblioteca<76>-Footnote-446013211
Ref: Biblioteca<76>-Footnote-456013277
Ref: Biblioteca<76>-Footnote-466013343
Ref: Biblioteca<76>-Footnote-476013409
Ref: Biblioteca<76>-Footnote-486013475
Ref: Biblioteca<76>-Footnote-496013541
Ref: Biblioteca<76>-Footnote-506013607
Ref: Biblioteca<76>-Footnote-516013673
Ref: Biblioteca<76>-Footnote-526013739
Ref: Biblioteca<76>-Footnote-536013805
Ref: Biblioteca<76>-Footnote-546013871
Ref: Biblioteca<76>-Footnote-556013937
Ref: Biblioteca<76>-Footnote-566014002
Ref: Biblioteca<76>-Footnote-576014068
Ref: Biblioteca<76>-Footnote-586014134
Ref: Biblioteca<76>-Footnote-596014200
Ref: Biblioteca<76>-Footnote-606014266
Node: IDLE<49>6014332
Ref: whatsnew/changelog id6666014450
Ref: 1d926014450
Ref: IDLE<49>-Footnote-16015455
Ref: IDLE<49>-Footnote-26015520
Ref: IDLE<49>-Footnote-36015585
Ref: IDLE<49>-Footnote-46015650
Ref: IDLE<49>-Footnote-56015715
Ref: IDLE<49>-Footnote-66015780
Node: API C<65>6015845
Ref: whatsnew/changelog id6676015965
Ref: 1d936015965
Ref: API C<65>-Footnote-16016153
Node: Construção<72>6016218
Ref: whatsnew/changelog id6686016348
Ref: 1d946016348
Ref: Construção<72>-Footnote-16017169
Ref: Construção<72>-Footnote-26017234
Ref: Construção<72>-Footnote-36017299
Ref: Construção<72>-Footnote-46017364
Ref: Construção<72>-Footnote-56017429
Node: Documentação<68>6017494
Ref: whatsnew/changelog id6696017636
Ref: 1d956017636
Ref: Documentação<68>-Footnote-16018365
Ref: Documentação<68>-Footnote-26018430
Ref: Documentação<68>-Footnote-36018495
Node: Ferramentas/Demos<47>6018560
Ref: whatsnew/changelog id6706018696
Ref: 1d966018696
Ref: Ferramentas/Demos<47>-Footnote-16018898
Node: Testes<67>6018963
Ref: whatsnew/changelog id6716019092
Ref: 1d976019092
Ref: Testes<67>-Footnote-16019755
Ref: Testes<67>-Footnote-26019820
Node: Windows<65>6019885
Ref: whatsnew/changelog id6726019984
Ref: 1d986019984
Ref: Windows<65>-Footnote-16020428
Ref: Windows<65>-Footnote-26020493
Node: Python 3 6 1 final6020558
Ref: whatsnew/changelog python-3-6-1-final6020704
Ref: 1d996020704
Node: Núcleo e embutidos<74>6020886
Ref: whatsnew/changelog id6736020989
Ref: 1d9a6020989
Ref: Núcleo e embutidos<74>-Footnote-16021611
Ref: Núcleo e embutidos<74>-Footnote-26021676
Node: Construção<73>6021741
Ref: whatsnew/changelog id6746021844
Ref: 1d9b6021844
Ref: Construção<73>-Footnote-16022048
Node: Python 3 6 1 release candidate 16022113
Ref: whatsnew/changelog python-3-6-1-release-candidate-16022245
Ref: 1d9c6022245
Node: Núcleo e embutidos<75>6022607
Ref: whatsnew/changelog id6756022722
Ref: 1d9d6022722
Ref: Núcleo e embutidos<75>-Footnote-16025557
Ref: Núcleo e embutidos<75>-Footnote-26025622
Ref: Núcleo e embutidos<75>-Footnote-36025687
Ref: Núcleo e embutidos<75>-Footnote-46025752
Ref: Núcleo e embutidos<75>-Footnote-56025817
Ref: Núcleo e embutidos<75>-Footnote-66025882
Ref: Núcleo e embutidos<75>-Footnote-76025947
Ref: Núcleo e embutidos<75>-Footnote-86026012
Ref: Núcleo e embutidos<75>-Footnote-96026077
Ref: Núcleo e embutidos<75>-Footnote-106026142
Ref: Núcleo e embutidos<75>-Footnote-116026208
Ref: Núcleo e embutidos<75>-Footnote-126026274
Ref: Núcleo e embutidos<75>-Footnote-136026340
Ref: Núcleo e embutidos<75>-Footnote-146026406
Ref: Núcleo e embutidos<75>-Footnote-156026472
Ref: Núcleo e embutidos<75>-Footnote-166026538
Ref: Núcleo e embutidos<75>-Footnote-176026604
Ref: Núcleo e embutidos<75>-Footnote-186026670
Ref: Núcleo e embutidos<75>-Footnote-196026736
Ref: Núcleo e embutidos<75>-Footnote-206026802
Ref: Núcleo e embutidos<75>-Footnote-216026868
Ref: Núcleo e embutidos<75>-Footnote-226026934
Node: Biblioteca<77>6027000
Ref: whatsnew/changelog id6766027132
Ref: 1d9e6027132
Ref: Biblioteca<77>-Footnote-16032785
Ref: Biblioteca<77>-Footnote-26032850
Ref: Biblioteca<77>-Footnote-36032915
Ref: Biblioteca<77>-Footnote-46032980
Ref: Biblioteca<77>-Footnote-56033045
Ref: Biblioteca<77>-Footnote-66033110
Ref: Biblioteca<77>-Footnote-76033175
Ref: Biblioteca<77>-Footnote-86033240
Ref: Biblioteca<77>-Footnote-96033305
Ref: Biblioteca<77>-Footnote-106033370
Ref: Biblioteca<77>-Footnote-116033436
Ref: Biblioteca<77>-Footnote-126033502
Ref: Biblioteca<77>-Footnote-136033568
Ref: Biblioteca<77>-Footnote-146033634
Ref: Biblioteca<77>-Footnote-156033700
Ref: Biblioteca<77>-Footnote-166033766
Ref: Biblioteca<77>-Footnote-176033832
Ref: Biblioteca<77>-Footnote-186033898
Ref: Biblioteca<77>-Footnote-196033964
Ref: Biblioteca<77>-Footnote-206034030
Ref: Biblioteca<77>-Footnote-216034096
Ref: Biblioteca<77>-Footnote-226034162
Ref: Biblioteca<77>-Footnote-236034228
Ref: Biblioteca<77>-Footnote-246034294
Ref: Biblioteca<77>-Footnote-256034360
Ref: Biblioteca<77>-Footnote-266034426
Ref: Biblioteca<77>-Footnote-276034492
Ref: Biblioteca<77>-Footnote-286034535
Ref: Biblioteca<77>-Footnote-296034601
Ref: Biblioteca<77>-Footnote-306034667
Ref: Biblioteca<77>-Footnote-316034733
Ref: Biblioteca<77>-Footnote-326034799
Ref: Biblioteca<77>-Footnote-336034865
Ref: Biblioteca<77>-Footnote-346034931
Ref: Biblioteca<77>-Footnote-356034997
Ref: Biblioteca<77>-Footnote-366035062
Ref: Biblioteca<77>-Footnote-376035128
Ref: Biblioteca<77>-Footnote-386035194
Ref: Biblioteca<77>-Footnote-396035260
Ref: Biblioteca<77>-Footnote-406035326
Ref: Biblioteca<77>-Footnote-416035392
Ref: Biblioteca<77>-Footnote-426035458
Ref: Biblioteca<77>-Footnote-436035524
Ref: Biblioteca<77>-Footnote-446035590
Node: IDLE<50>6035656
Ref: whatsnew/changelog id6776035776
Ref: 1d9f6035776
Ref: IDLE<50>-Footnote-16036065
Ref: IDLE<50>-Footnote-26036130
Node: Windows<66>6036195
Ref: whatsnew/changelog id6786036310
Ref: 1da06036310
Ref: Windows<66>-Footnote-16036957
Ref: Windows<66>-Footnote-26037022
Ref: Windows<66>-Footnote-36037087
Ref: Windows<66>-Footnote-46037152
Ref: Windows<66>-Footnote-56037217
Ref: Windows<66>-Footnote-66037259
Ref: Windows<66>-Footnote-76037324
Ref: Windows<66>-Footnote-86037389
Node: API C<66>6037454
Ref: whatsnew/changelog id6796037579
Ref: 1da16037579
Ref: API C<66>-Footnote-16038405
Ref: API C<66>-Footnote-26038470
Ref: API C<66>-Footnote-36038535
Node: Documentação<69>6038600
Ref: whatsnew/changelog id6806038724
Ref: 1da26038724
Ref: Documentação<69>-Footnote-16039261
Ref: Documentação<69>-Footnote-26039326
Ref: Documentação<69>-Footnote-36039391
Ref: Documentação<69>-Footnote-46039456
Node: Testes<68>6039521
Ref: whatsnew/changelog id6816039652
Ref: 1da36039652
Ref: Testes<68>-Footnote-16040639
Ref: Testes<68>-Footnote-26040704
Ref: Testes<68>-Footnote-36040769
Ref: Testes<68>-Footnote-46040834
Ref: Testes<68>-Footnote-56040899
Node: Construção<74>6040964
Ref: whatsnew/changelog id6826041068
Ref: 1da46041068
Ref: Construção<74>-Footnote-16042341
Ref: Construção<74>-Footnote-26042406
Ref: Construção<74>-Footnote-36042471
Ref: Construção<74>-Footnote-46042536
Ref: Construção<74>-Footnote-56042601
Ref: Construção<74>-Footnote-66042666
Ref: Construção<74>-Footnote-76042731
Ref: Construção<74>-Footnote-86042796
Ref: Construção<74>-Footnote-96042861
Ref: Construção<74>-Footnote-106042926
Node: Python 3 6 0 final6042992
Ref: whatsnew/changelog python-3-6-0-final6043138
Ref: 1da56043138
Node: Python 3 6 0 release candidate 26043266
Ref: whatsnew/changelog python-3-6-0-release-candidate-26043412
Ref: 1da66043412
Node: Núcleo e embutidos<76>6043690
Ref: whatsnew/changelog id6836043812
Ref: 1da76043812
Ref: Núcleo e embutidos<76>-Footnote-16044200
Ref: Núcleo e embutidos<76>-Footnote-26044265
Node: Ferramentas/Demos<48>6044330
Ref: whatsnew/changelog id6846044472
Ref: 1da86044472
Ref: Ferramentas/Demos<48>-Footnote-16044618
Node: Windows<67>6044683
Ref: whatsnew/changelog id6856044818
Ref: 1da96044818
Ref: Windows<67>-Footnote-16044944
Node: Construção<75>6045009
Ref: whatsnew/changelog id6866045114
Ref: 1daa6045114
Ref: Construção<75>-Footnote-16045281
Node: Python 3 6 0 release candidate 16045346
Ref: whatsnew/changelog python-3-6-0-release-candidate-16045493
Ref: 1dab6045493
Node: Núcleo e embutidos<77>6045801
Ref: whatsnew/changelog id6876045916
Ref: 1dac6045916
Ref: Núcleo e embutidos<77>-Footnote-16046728
Ref: Núcleo e embutidos<77>-Footnote-26046793
Ref: Núcleo e embutidos<77>-Footnote-36046858
Ref: Núcleo e embutidos<77>-Footnote-46046923
Node: Biblioteca<78>6046988
Ref: whatsnew/changelog id6886047121
Ref: 1dad6047121
Ref: Biblioteca<78>-Footnote-16048166
Ref: Biblioteca<78>-Footnote-26048231
Ref: Biblioteca<78>-Footnote-36048296
Ref: Biblioteca<78>-Footnote-46048361
Ref: Biblioteca<78>-Footnote-56048426
Ref: Biblioteca<78>-Footnote-66048491
Node: API C<67>6048556
Ref: whatsnew/changelog id6896048684
Ref: 1dae6048684
Ref: API C<67>-Footnote-16048842
Node: Documentação<70>6048907
Ref: whatsnew/changelog id6906049042
Ref: 1daf6049042
Ref: Documentação<70>-Footnote-16049382
Ref: Documentação<70>-Footnote-26049447
Node: Ferramentas/Demos<49>6049489
Ref: whatsnew/changelog id6916049606
Ref: 1db06049606
Ref: Ferramentas/Demos<49>-Footnote-16049784
Node: Python 3 6 0 beta 46049849
Ref: whatsnew/changelog python-3-6-0-beta-46049983
Ref: 1db16049983
Node: Núcleo e embutidos<78>6050257
Ref: whatsnew/changelog id6926050359
Ref: 1db26050359
Ref: Núcleo e embutidos<78>-Footnote-16051914
Ref: Núcleo e embutidos<78>-Footnote-26051979
Ref: Núcleo e embutidos<78>-Footnote-36052044
Ref: Núcleo e embutidos<78>-Footnote-46052109
Ref: Núcleo e embutidos<78>-Footnote-56052174
Ref: Núcleo e embutidos<78>-Footnote-66052239
Ref: Núcleo e embutidos<78>-Footnote-76052304
Ref: Núcleo e embutidos<78>-Footnote-86052369
Ref: Núcleo e embutidos<78>-Footnote-96052434
Ref: Núcleo e embutidos<78>-Footnote-106052499
Ref: Núcleo e embutidos<78>-Footnote-116052565
Node: Biblioteca<79>6052631
Ref: whatsnew/changelog id6936052760
Ref: 1db36052760
Ref: Biblioteca<79>-Footnote-16054768
Ref: Biblioteca<79>-Footnote-26054833
Ref: Biblioteca<79>-Footnote-36054898
Ref: Biblioteca<79>-Footnote-46054963
Ref: Biblioteca<79>-Footnote-56055028
Ref: Biblioteca<79>-Footnote-66055093
Ref: Biblioteca<79>-Footnote-76055158
Ref: Biblioteca<79>-Footnote-86055223
Ref: Biblioteca<79>-Footnote-96055288
Ref: Biblioteca<79>-Footnote-106055353
Ref: Biblioteca<79>-Footnote-116055419
Ref: Biblioteca<79>-Footnote-126055485
Ref: Biblioteca<79>-Footnote-136055551
Ref: Biblioteca<79>-Footnote-146055617
Ref: Biblioteca<79>-Footnote-156055683
Ref: Biblioteca<79>-Footnote-166055749
Ref: Biblioteca<79>-Footnote-176055815
Ref: Biblioteca<79>-Footnote-186055881
Node: Documentação<71>6055947
Ref: whatsnew/changelog id6946056063
Ref: 1db46056063
Ref: Documentação<71>-Footnote-16056214
Node: Testes<69>6056279
Ref: whatsnew/changelog id6956056397
Ref: 1db56056397
Ref: Testes<69>-Footnote-16056661
Ref: Testes<69>-Footnote-26056726
Node: Construção<76>6056791
Ref: whatsnew/changelog id6966056882
Ref: 1db66056882
Ref: Construção<76>-Footnote-16057257
Ref: Construção<76>-Footnote-26057322
Ref: Construção<76>-Footnote-36057387
Node: Python 3 6 0 beta 36057452
Ref: whatsnew/changelog python-3-6-0-beta-36057573
Ref: 1db76057573
Node: Núcleo e embutidos<79>6057833
Ref: whatsnew/changelog id6976057935
Ref: 1db86057935
Ref: Núcleo e embutidos<79>-Footnote-16058845
Ref: Núcleo e embutidos<79>-Footnote-26058910
Ref: Núcleo e embutidos<79>-Footnote-36058975
Ref: Núcleo e embutidos<79>-Footnote-46059040
Ref: Núcleo e embutidos<79>-Footnote-56059105
Ref: Núcleo e embutidos<79>-Footnote-66059170
Ref: Núcleo e embutidos<79>-Footnote-76059235
Node: Biblioteca<80>6059300
Ref: whatsnew/changelog id6986059422
Ref: 1db96059422
Ref: Biblioteca<80>-Footnote-16062475
Ref: Biblioteca<80>-Footnote-26062540
Ref: Biblioteca<80>-Footnote-36062605
Ref: Biblioteca<80>-Footnote-46062670
Ref: Biblioteca<80>-Footnote-56062735
Ref: Biblioteca<80>-Footnote-66062800
Ref: Biblioteca<80>-Footnote-76062865
Ref: Biblioteca<80>-Footnote-86062930
Ref: Biblioteca<80>-Footnote-96062995
Ref: Biblioteca<80>-Footnote-106063060
Ref: Biblioteca<80>-Footnote-116063126
Ref: Biblioteca<80>-Footnote-126063192
Ref: Biblioteca<80>-Footnote-136063258
Ref: Biblioteca<80>-Footnote-146063324
Ref: Biblioteca<80>-Footnote-156063390
Ref: Biblioteca<80>-Footnote-166063456
Ref: Biblioteca<80>-Footnote-176063522
Ref: Biblioteca<80>-Footnote-186063588
Ref: Biblioteca<80>-Footnote-196063654
Ref: Biblioteca<80>-Footnote-206063720
Ref: Biblioteca<80>-Footnote-216063786
Ref: Biblioteca<80>-Footnote-226063852
Ref: Biblioteca<80>-Footnote-236063918
Ref: Biblioteca<80>-Footnote-246063984
Node: Windows<68>6064050
Ref: whatsnew/changelog id6996064165
Ref: 1dba6064165
Ref: Windows<68>-Footnote-16064309
Node: Construção<77>6064374
Ref: whatsnew/changelog id7006064485
Ref: 1dbb6064485
Ref: Construção<77>-Footnote-16064816
Ref: Construção<77>-Footnote-26064881
Ref: Construção<77>-Footnote-36064946
Node: Testes<70>6065011
Ref: whatsnew/changelog id7016065102
Ref: 1dbc6065102
Ref: Testes<70>-Footnote-16065363
Ref: Testes<70>-Footnote-26065428
Node: Python 3 6 0 beta 26065493
Ref: whatsnew/changelog python-3-6-0-beta-26065614
Ref: 1dbd6065614
Node: Núcleo e embutidos<80>6065894
Ref: whatsnew/changelog id7026065996
Ref: 1dbe6065996
Ref: Núcleo e embutidos<80>-Footnote-16068740
Ref: Núcleo e embutidos<80>-Footnote-26068805
Ref: Núcleo e embutidos<80>-Footnote-36068870
Ref: Núcleo e embutidos<80>-Footnote-46068935
Ref: Núcleo e embutidos<80>-Footnote-56069000
Ref: Núcleo e embutidos<80>-Footnote-66069065
Ref: Núcleo e embutidos<80>-Footnote-76069130
Ref: Núcleo e embutidos<80>-Footnote-86069195
Ref: Núcleo e embutidos<80>-Footnote-96069260
Ref: Núcleo e embutidos<80>-Footnote-106069325
Ref: Núcleo e embutidos<80>-Footnote-116069391
Ref: Núcleo e embutidos<80>-Footnote-126069457
Ref: Núcleo e embutidos<80>-Footnote-136069523
Ref: Núcleo e embutidos<80>-Footnote-146069589
Ref: Núcleo e embutidos<80>-Footnote-156069655
Ref: Núcleo e embutidos<80>-Footnote-166069721
Ref: Núcleo e embutidos<80>-Footnote-176069787
Ref: Núcleo e embutidos<80>-Footnote-186069853
Ref: Núcleo e embutidos<80>-Footnote-196069919
Ref: Núcleo e embutidos<80>-Footnote-206069985
Ref: Núcleo e embutidos<80>-Footnote-216070051
Ref: Núcleo e embutidos<80>-Footnote-226070117
Ref: Núcleo e embutidos<80>-Footnote-236070183
Node: Biblioteca<81>6070249
Ref: whatsnew/changelog id7036070371
Ref: 1dbf6070371
Ref: Biblioteca<81>-Footnote-16076167
Ref: Biblioteca<81>-Footnote-26076232
Ref: Biblioteca<81>-Footnote-36076297
Ref: Biblioteca<81>-Footnote-46076362
Ref: Biblioteca<81>-Footnote-56076427
Ref: Biblioteca<81>-Footnote-66076492
Ref: Biblioteca<81>-Footnote-76076557
Ref: Biblioteca<81>-Footnote-86076622
Ref: Biblioteca<81>-Footnote-96076687
Ref: Biblioteca<81>-Footnote-106076752
Ref: Biblioteca<81>-Footnote-116076818
Ref: Biblioteca<81>-Footnote-126076884
Ref: Biblioteca<81>-Footnote-136076950
Ref: Biblioteca<81>-Footnote-146077016
Ref: Biblioteca<81>-Footnote-156077082
Ref: Biblioteca<81>-Footnote-166077148
Ref: Biblioteca<81>-Footnote-176077214
Ref: Biblioteca<81>-Footnote-186077280
Ref: Biblioteca<81>-Footnote-196077346
Ref: Biblioteca<81>-Footnote-206077412
Ref: Biblioteca<81>-Footnote-216077478
Ref: Biblioteca<81>-Footnote-226077544
Ref: Biblioteca<81>-Footnote-236077610
Ref: Biblioteca<81>-Footnote-246077676
Ref: Biblioteca<81>-Footnote-256077742
Ref: Biblioteca<81>-Footnote-266077808
Ref: Biblioteca<81>-Footnote-276077874
Ref: Biblioteca<81>-Footnote-286077940
Ref: Biblioteca<81>-Footnote-296078006
Ref: Biblioteca<81>-Footnote-306078072
Ref: Biblioteca<81>-Footnote-316078138
Ref: Biblioteca<81>-Footnote-326078204
Ref: Biblioteca<81>-Footnote-336078270
Ref: Biblioteca<81>-Footnote-346078336
Ref: Biblioteca<81>-Footnote-356078402
Ref: Biblioteca<81>-Footnote-366078468
Ref: Biblioteca<81>-Footnote-376078534
Ref: Biblioteca<81>-Footnote-386078600
Ref: Biblioteca<81>-Footnote-396078666
Ref: Biblioteca<81>-Footnote-406078732
Ref: Biblioteca<81>-Footnote-416078798
Ref: Biblioteca<81>-Footnote-426078864
Ref: Biblioteca<81>-Footnote-436078930
Ref: Biblioteca<81>-Footnote-446078996
Ref: Biblioteca<81>-Footnote-456079062
Ref: Biblioteca<81>-Footnote-466079128
Ref: Biblioteca<81>-Footnote-476079194
Ref: Biblioteca<81>-Footnote-486079260
Node: Windows<69>6079326
Ref: whatsnew/changelog id7046079434
Ref: 1dc06079434
Ref: Windows<69>-Footnote-16080245
Ref: Windows<69>-Footnote-26080310
Ref: Windows<69>-Footnote-36080375
Ref: Windows<69>-Footnote-46080440
Ref: Windows<69>-Footnote-56080505
Ref: Windows<69>-Footnote-66080570
Ref: Windows<69>-Footnote-76080635
Ref: Windows<69>-Footnote-86080700
Ref: Windows<69>-Footnote-96080765
Ref: Windows<69>-Footnote-106080830
Node: API C<68>6080896
Ref: whatsnew/changelog id7056081006
Ref: 1dc16081006
Ref: API C<68>-Footnote-16081260
Node: Construção<78>6081325
Ref: whatsnew/changelog id7066081434
Ref: 1dc26081434
Ref: Construção<78>-Footnote-16081872
Ref: Construção<78>-Footnote-26081937
Ref: Construção<78>-Footnote-36082002
Node: Testes<71>6082067
Ref: whatsnew/changelog id7076082158
Ref: 1dc36082158
Ref: Testes<71>-Footnote-16082297
Node: Python 3 6 0 beta 16082362
Ref: whatsnew/changelog python-3-6-0-beta-16082484
Ref: 1dc46082484
Node: Núcleo e embutidos<81>6082826
Ref: whatsnew/changelog id7086082928
Ref: 1dc56082928
Ref: Núcleo e embutidos<81>-Footnote-16089130
Ref: Núcleo e embutidos<81>-Footnote-26089195
Ref: Núcleo e embutidos<81>-Footnote-36089260
Ref: Núcleo e embutidos<81>-Footnote-46089325
Ref: Núcleo e embutidos<81>-Footnote-56089367
Ref: Núcleo e embutidos<81>-Footnote-66089432
Ref: Núcleo e embutidos<81>-Footnote-76089497
Ref: Núcleo e embutidos<81>-Footnote-86089562
Ref: Núcleo e embutidos<81>-Footnote-96089627
Ref: Núcleo e embutidos<81>-Footnote-106089692
Ref: Núcleo e embutidos<81>-Footnote-116089758
Ref: Núcleo e embutidos<81>-Footnote-126089824
Ref: Núcleo e embutidos<81>-Footnote-136089890
Ref: Núcleo e embutidos<81>-Footnote-146089933
Ref: Núcleo e embutidos<81>-Footnote-156089999
Ref: Núcleo e embutidos<81>-Footnote-166090065
Ref: Núcleo e embutidos<81>-Footnote-176090108
Ref: Núcleo e embutidos<81>-Footnote-186090174
Ref: Núcleo e embutidos<81>-Footnote-196090217
Ref: Núcleo e embutidos<81>-Footnote-206090283
Ref: Núcleo e embutidos<81>-Footnote-216090349
Ref: Núcleo e embutidos<81>-Footnote-226090415
Ref: Núcleo e embutidos<81>-Footnote-236090481
Ref: Núcleo e embutidos<81>-Footnote-246090547
Ref: Núcleo e embutidos<81>-Footnote-256090613
Ref: Núcleo e embutidos<81>-Footnote-266090679
Ref: Núcleo e embutidos<81>-Footnote-276090745
Ref: Núcleo e embutidos<81>-Footnote-286090788
Ref: Núcleo e embutidos<81>-Footnote-296090854
Ref: Núcleo e embutidos<81>-Footnote-306090920
Ref: Núcleo e embutidos<81>-Footnote-316090986
Ref: Núcleo e embutidos<81>-Footnote-326091052
Ref: Núcleo e embutidos<81>-Footnote-336091118
Ref: Núcleo e embutidos<81>-Footnote-346091184
Ref: Núcleo e embutidos<81>-Footnote-356091250
Ref: Núcleo e embutidos<81>-Footnote-366091316
Ref: Núcleo e embutidos<81>-Footnote-376091382
Ref: Núcleo e embutidos<81>-Footnote-386091448
Ref: Núcleo e embutidos<81>-Footnote-396091514
Ref: Núcleo e embutidos<81>-Footnote-406091580
Ref: Núcleo e embutidos<81>-Footnote-416091646
Ref: Núcleo e embutidos<81>-Footnote-426091712
Ref: Núcleo e embutidos<81>-Footnote-436091778
Ref: Núcleo e embutidos<81>-Footnote-446091844
Ref: Núcleo e embutidos<81>-Footnote-456091910
Ref: Núcleo e embutidos<81>-Footnote-466091976
Ref: Núcleo e embutidos<81>-Footnote-476092019
Node: Biblioteca<82>6092085
Ref: whatsnew/changelog id7096092204
Ref: 1dc66092204
Ref: Biblioteca<82>-Footnote-16103202
Ref: Biblioteca<82>-Footnote-26103267
Ref: Biblioteca<82>-Footnote-36103332
Ref: Biblioteca<82>-Footnote-46103397
Ref: Biblioteca<82>-Footnote-56103462
Ref: Biblioteca<82>-Footnote-66103527
Ref: Biblioteca<82>-Footnote-76103592
Ref: Biblioteca<82>-Footnote-86103657
Ref: Biblioteca<82>-Footnote-96103722
Ref: Biblioteca<82>-Footnote-106103787
Ref: Biblioteca<82>-Footnote-116103853
Ref: Biblioteca<82>-Footnote-126103919
Ref: Biblioteca<82>-Footnote-136103985
Ref: Biblioteca<82>-Footnote-146104051
Ref: Biblioteca<82>-Footnote-156104117
Ref: Biblioteca<82>-Footnote-166104183
Ref: Biblioteca<82>-Footnote-176104249
Ref: Biblioteca<82>-Footnote-186104317
Ref: Biblioteca<82>-Footnote-196104383
Ref: Biblioteca<82>-Footnote-206104449
Ref: Biblioteca<82>-Footnote-216104515
Ref: Biblioteca<82>-Footnote-226104581
Ref: Biblioteca<82>-Footnote-236104647
Ref: Biblioteca<82>-Footnote-246104713
Ref: Biblioteca<82>-Footnote-256104779
Ref: Biblioteca<82>-Footnote-266104846
Ref: Biblioteca<82>-Footnote-276104912
Ref: Biblioteca<82>-Footnote-286104978
Ref: Biblioteca<82>-Footnote-296105044
Ref: Biblioteca<82>-Footnote-306105110
Ref: Biblioteca<82>-Footnote-316105176
Ref: Biblioteca<82>-Footnote-326105242
Ref: Biblioteca<82>-Footnote-336105308
Ref: Biblioteca<82>-Footnote-346105374
Ref: Biblioteca<82>-Footnote-356105440
Ref: Biblioteca<82>-Footnote-366105506
Ref: Biblioteca<82>-Footnote-376105572
Ref: Biblioteca<82>-Footnote-386105638
Ref: Biblioteca<82>-Footnote-396105704
Ref: Biblioteca<82>-Footnote-406105770
Ref: Biblioteca<82>-Footnote-416105836
Ref: Biblioteca<82>-Footnote-426105902
Ref: Biblioteca<82>-Footnote-436105945
Ref: Biblioteca<82>-Footnote-446106011
Ref: Biblioteca<82>-Footnote-456106054
Ref: Biblioteca<82>-Footnote-466106120
Ref: Biblioteca<82>-Footnote-476106186
Ref: Biblioteca<82>-Footnote-486106252
Ref: Biblioteca<82>-Footnote-496106318
Ref: Biblioteca<82>-Footnote-506106384
Ref: Biblioteca<82>-Footnote-516106450
Ref: Biblioteca<82>-Footnote-526106516
Ref: Biblioteca<82>-Footnote-536106582
Ref: Biblioteca<82>-Footnote-546106638
Ref: Biblioteca<82>-Footnote-556106704
Ref: Biblioteca<82>-Footnote-566106770
Ref: Biblioteca<82>-Footnote-576106836
Ref: Biblioteca<82>-Footnote-586106902
Ref: Biblioteca<82>-Footnote-596106968
Ref: Biblioteca<82>-Footnote-606107034
Ref: Biblioteca<82>-Footnote-616107100
Ref: Biblioteca<82>-Footnote-626107166
Ref: Biblioteca<82>-Footnote-636107232
Ref: Biblioteca<82>-Footnote-646107298
Ref: Biblioteca<82>-Footnote-656107364
Ref: Biblioteca<82>-Footnote-666107430
Ref: Biblioteca<82>-Footnote-676107496
Ref: Biblioteca<82>-Footnote-686107562
Ref: Biblioteca<82>-Footnote-696107628
Ref: Biblioteca<82>-Footnote-706107694
Ref: Biblioteca<82>-Footnote-716107760
Ref: Biblioteca<82>-Footnote-726107826
Ref: Biblioteca<82>-Footnote-736107892
Ref: Biblioteca<82>-Footnote-746107958
Ref: Biblioteca<82>-Footnote-756108024
Ref: Biblioteca<82>-Footnote-766108090
Ref: Biblioteca<82>-Footnote-776108155
Ref: Biblioteca<82>-Footnote-786108220
Ref: Biblioteca<82>-Footnote-796108286
Ref: Biblioteca<82>-Footnote-806108352
Ref: Biblioteca<82>-Footnote-816108417
Ref: Biblioteca<82>-Footnote-826108483
Node: IDLE<51>6108549
Ref: whatsnew/changelog id7106108654
Ref: 1dc76108654
Ref: IDLE<51>-Footnote-16109420
Ref: IDLE<51>-Footnote-26109485
Ref: IDLE<51>-Footnote-36109550
Ref: IDLE<51>-Footnote-46109615
Ref: IDLE<51>-Footnote-56109680
Ref: IDLE<51>-Footnote-66109745
Node: API C<69>6109810
Ref: whatsnew/changelog id7116109911
Ref: 1dc86109911
Ref: API C<69>-Footnote-16110183
Ref: API C<69>-Footnote-26110248
Node: Testes<72>6110313
Ref: whatsnew/changelog id7126110422
Ref: 1dc96110422
Ref: Testes<72>-Footnote-16110944
Ref: Testes<72>-Footnote-26111009
Ref: Testes<72>-Footnote-36111074
Ref: Testes<72>-Footnote-46111139
Node: Construção<79>6111204
Ref: whatsnew/changelog id7136111325
Ref: 1dca6111325
Ref: Construção<79>-Footnote-16112722
Ref: Construção<79>-Footnote-26112787
Ref: Construção<79>-Footnote-36112852
Ref: Construção<79>-Footnote-46112917
Ref: Construção<79>-Footnote-56112982
Ref: Construção<79>-Footnote-66113047
Ref: Construção<79>-Footnote-76113112
Ref: Construção<79>-Footnote-86113177
Ref: Construção<79>-Footnote-96113242
Ref: Construção<79>-Footnote-106113307
Ref: Construção<79>-Footnote-116113373
Node: Ferramentas/Demos<50>6113439
Ref: whatsnew/changelog id7146113561
Ref: 1dcb6113561
Ref: Ferramentas/Demos<50>-Footnote-16113852
Node: Windows<70>6113917
Ref: whatsnew/changelog id7156114014
Ref: 1dcc6114014
Ref: Windows<70>-Footnote-16114983
Ref: Windows<70>-Footnote-26115048
Ref: Windows<70>-Footnote-36115113
Ref: Windows<70>-Footnote-46115177
Ref: Windows<70>-Footnote-56115242
Ref: Windows<70>-Footnote-66115307
Ref: Windows<70>-Footnote-76115371
Ref: Windows<70>-Footnote-86115436
Ref: Windows<70>-Footnote-96115501
Ref: Windows<70>-Footnote-106115566
Ref: Windows<70>-Footnote-116115632
Node: Python 3 6 0 alpha 46115698
Ref: whatsnew/changelog python-3-6-0-alpha-46115821
Ref: 1dcd6115821
Node: Núcleo e embutidos<82>6116101
Ref: whatsnew/changelog id7166116204
Ref: 1dce6116204
Ref: Núcleo e embutidos<82>-Footnote-16118165
Ref: Núcleo e embutidos<82>-Footnote-26118230
Ref: Núcleo e embutidos<82>-Footnote-36118295
Ref: Núcleo e embutidos<82>-Footnote-46118360
Ref: Núcleo e embutidos<82>-Footnote-56118425
Ref: Núcleo e embutidos<82>-Footnote-66118490
Ref: Núcleo e embutidos<82>-Footnote-76118555
Ref: Núcleo e embutidos<82>-Footnote-86118620
Ref: Núcleo e embutidos<82>-Footnote-96118685
Ref: Núcleo e embutidos<82>-Footnote-106118749
Ref: Núcleo e embutidos<82>-Footnote-116118815
Ref: Núcleo e embutidos<82>-Footnote-126118881
Ref: Núcleo e embutidos<82>-Footnote-136118947
Ref: Núcleo e embutidos<82>-Footnote-146119013
Node: Biblioteca<83>6119056
Ref: whatsnew/changelog id7176119176
Ref: 1dcf6119176
Ref: Biblioteca<83>-Footnote-16123695
Ref: Biblioteca<83>-Footnote-26123760
Ref: Biblioteca<83>-Footnote-36123802
Ref: Biblioteca<83>-Footnote-46123867
Ref: Biblioteca<83>-Footnote-56123932
Ref: Biblioteca<83>-Footnote-66123997
Ref: Biblioteca<83>-Footnote-76124062
Ref: Biblioteca<83>-Footnote-86124127
Ref: Biblioteca<83>-Footnote-96124192
Ref: Biblioteca<83>-Footnote-106124257
Ref: Biblioteca<83>-Footnote-116124323
Ref: Biblioteca<83>-Footnote-126124366
Ref: Biblioteca<83>-Footnote-136124432
Ref: Biblioteca<83>-Footnote-146124498
Ref: Biblioteca<83>-Footnote-156124564
Ref: Biblioteca<83>-Footnote-166124630
Ref: Biblioteca<83>-Footnote-176124695
Ref: Biblioteca<83>-Footnote-186124761
Ref: Biblioteca<83>-Footnote-196124827
Ref: Biblioteca<83>-Footnote-206124893
Ref: Biblioteca<83>-Footnote-216124959
Ref: Biblioteca<83>-Footnote-226125025
Ref: Biblioteca<83>-Footnote-236125091
Ref: Biblioteca<83>-Footnote-246125157
Ref: Biblioteca<83>-Footnote-256125223
Ref: Biblioteca<83>-Footnote-266125289
Ref: Biblioteca<83>-Footnote-276125355
Ref: Biblioteca<83>-Footnote-286125421
Ref: Biblioteca<83>-Footnote-296125480
Ref: Biblioteca<83>-Footnote-306125545
Ref: Biblioteca<83>-Footnote-316125611
Ref: Biblioteca<83>-Footnote-326125677
Ref: Biblioteca<83>-Footnote-336125743
Ref: Biblioteca<83>-Footnote-346125786
Ref: Biblioteca<83>-Footnote-356125852
Ref: Biblioteca<83>-Footnote-366125917
Ref: Biblioteca<83>-Footnote-376125983
Ref: Biblioteca<83>-Footnote-386126049
Ref: Biblioteca<83>-Footnote-396126115
Node: IDLE<52>6126181
Ref: whatsnew/changelog id7186126288
Ref: 1dd06126288
Ref: IDLE<52>-Footnote-16127612
Ref: IDLE<52>-Footnote-26127677
Ref: IDLE<52>-Footnote-36127742
Ref: IDLE<52>-Footnote-46127807
Ref: IDLE<52>-Footnote-56127872
Ref: IDLE<52>-Footnote-66127937
Ref: IDLE<52>-Footnote-76128002
Ref: IDLE<52>-Footnote-86128067
Node: Testes<73>6128132
Ref: whatsnew/changelog id7196128236
Ref: 1dd16128236
Ref: Testes<73>-Footnote-16128827
Ref: Testes<73>-Footnote-26128892
Ref: Testes<73>-Footnote-36128957
Ref: Testes<73>-Footnote-46129022
Node: Windows<71>6129087
Ref: whatsnew/changelog id7206129199
Ref: 1dd26129199
Ref: Windows<71>-Footnote-16129575
Ref: Windows<71>-Footnote-26129640
Ref: Windows<71>-Footnote-36129705
Ref: Windows<71>-Footnote-46129747
Ref: Windows<71>-Footnote-56129812
Node: Construção<80>6129877
Ref: whatsnew/changelog id7216129970
Ref: 1dd36129970
Ref: Construção<80>-Footnote-16130883
Ref: Construção<80>-Footnote-26130948
Ref: Construção<80>-Footnote-36131013
Ref: Construção<80>-Footnote-46131078
Ref: Construção<80>-Footnote-56131143
Ref: Construção<80>-Footnote-66131208
Node: Python 3 6 0 alpha 36131273
Ref: whatsnew/changelog python-3-6-0-alpha-36131397
Ref: 1dd46131397
Node: Segurança<52>6131785
Ref: whatsnew/changelog id7226131888
Ref: 1dd56131888
Ref: Segurança<52>-Footnote-16132269
Ref: Segurança<52>-Footnote-26132334
Node: Núcleo e embutidos<83>6132399
Ref: whatsnew/changelog id7236132525
Ref: 1dd66132525
Ref: Núcleo e embutidos<83>-Footnote-16133279
Ref: Núcleo e embutidos<83>-Footnote-26133344
Ref: Núcleo e embutidos<83>-Footnote-36133409
Ref: Núcleo e embutidos<83>-Footnote-46133474
Node: Biblioteca<84>6133539
Ref: whatsnew/changelog id7246133659
Ref: 1dd76133659
Ref: Biblioteca<84>-Footnote-16137778
Ref: Biblioteca<84>-Footnote-26137843
Ref: Biblioteca<84>-Footnote-36137908
Ref: Biblioteca<84>-Footnote-46137973
Ref: Biblioteca<84>-Footnote-56138038
Ref: Biblioteca<84>-Footnote-66138103
Ref: Biblioteca<84>-Footnote-76138168
Ref: Biblioteca<84>-Footnote-86138233
Ref: Biblioteca<84>-Footnote-96138298
Ref: Biblioteca<84>-Footnote-106138363
Ref: Biblioteca<84>-Footnote-116138429
Ref: Biblioteca<84>-Footnote-126138495
Ref: Biblioteca<84>-Footnote-136138561
Ref: Biblioteca<84>-Footnote-146138627
Ref: Biblioteca<84>-Footnote-156138693
Ref: Biblioteca<84>-Footnote-166138759
Ref: Biblioteca<84>-Footnote-176138825
Ref: Biblioteca<84>-Footnote-186138891
Ref: Biblioteca<84>-Footnote-196138957
Ref: Biblioteca<84>-Footnote-206139023
Ref: Biblioteca<84>-Footnote-216139089
Ref: Biblioteca<84>-Footnote-226139132
Ref: Biblioteca<84>-Footnote-236139198
Ref: Biblioteca<84>-Footnote-246139264
Ref: Biblioteca<84>-Footnote-256139329
Ref: Biblioteca<84>-Footnote-266139395
Node: IDLE<53>6139461
Ref: whatsnew/changelog id7256139567
Ref: 1dd86139567
Ref: IDLE<53>-Footnote-16141233
Ref: IDLE<53>-Footnote-26141298
Ref: IDLE<53>-Footnote-36141363
Ref: IDLE<53>-Footnote-46141428
Ref: IDLE<53>-Footnote-56141493
Ref: IDLE<53>-Footnote-66141558
Ref: IDLE<53>-Footnote-76141623
Ref: IDLE<53>-Footnote-86141688
Ref: IDLE<53>-Footnote-96141753
Ref: IDLE<53>-Footnote-106141818
Node: API C<70>6141884
Ref: whatsnew/changelog id7266141992
Ref: 1dd96141992
Ref: API C<70>-Footnote-16142232
Node: Construção<81>6142297
Ref: whatsnew/changelog id7276142418
Ref: 1dda6142418
Ref: Construção<81>-Footnote-16143407
Ref: Construção<81>-Footnote-26143472
Ref: Construção<81>-Footnote-36143537
Ref: Construção<81>-Footnote-46143602
Ref: Construção<81>-Footnote-56143667
Node: Ferramentas/Demos<51>6143732
Ref: whatsnew/changelog id7286143862
Ref: 1ddb6143862
Ref: Ferramentas/Demos<51>-Footnote-16144158
Ref: Ferramentas/Demos<51>-Footnote-26144223
Node: Documentação<72>6144288
Ref: whatsnew/changelog id7296144412
Ref: 1ddc6144412
Ref: Documentação<72>-Footnote-16144793
Ref: Documentação<72>-Footnote-26144858
Node: Testes<74>6144923
Ref: whatsnew/changelog id7306145017
Ref: 1ddd6145017
Ref: Testes<74>-Footnote-16145187
Node: Python 3 6 0 alpha 26145252
Ref: whatsnew/changelog python-3-6-0-alpha-26145376
Ref: 1dde6145376
Node: Segurança<53>6145788
Ref: whatsnew/changelog id7316145891
Ref: 1ddf6145891
Ref: Segurança<53>-Footnote-16146385
Ref: Segurança<53>-Footnote-26146450
Ref: Segurança<53>-Footnote-36146505
Ref: Segurança<53>-Footnote-46146560
Node: Núcleo e embutidos<84>6146625
Ref: whatsnew/changelog id7326146751
Ref: 1de06146751
Ref: Núcleo e embutidos<84>-Footnote-16148386
Ref: Núcleo e embutidos<84>-Footnote-26148451
Ref: Núcleo e embutidos<84>-Footnote-36148516
Ref: Núcleo e embutidos<84>-Footnote-46148581
Ref: Núcleo e embutidos<84>-Footnote-56148646
Ref: Núcleo e embutidos<84>-Footnote-66148711
Ref: Núcleo e embutidos<84>-Footnote-76148753
Ref: Núcleo e embutidos<84>-Footnote-86148818
Ref: Núcleo e embutidos<84>-Footnote-96148883
Ref: Núcleo e embutidos<84>-Footnote-106148948
Ref: Núcleo e embutidos<84>-Footnote-116149014
Ref: Núcleo e embutidos<84>-Footnote-126149080
Node: Biblioteca<85>6149146
Ref: whatsnew/changelog id7336149266
Ref: 1de16149266
Ref: Biblioteca<85>-Footnote-16154483
Ref: Biblioteca<85>-Footnote-26154548
Ref: Biblioteca<85>-Footnote-36154613
Ref: Biblioteca<85>-Footnote-46154678
Ref: Biblioteca<85>-Footnote-56154743
Ref: Biblioteca<85>-Footnote-66154808
Ref: Biblioteca<85>-Footnote-76154873
Ref: Biblioteca<85>-Footnote-86154938
Ref: Biblioteca<85>-Footnote-96155003
Ref: Biblioteca<85>-Footnote-106155045
Ref: Biblioteca<85>-Footnote-116155111
Ref: Biblioteca<85>-Footnote-126155177
Ref: Biblioteca<85>-Footnote-136155243
Ref: Biblioteca<85>-Footnote-146155286
Ref: Biblioteca<85>-Footnote-156155352
Ref: Biblioteca<85>-Footnote-166155395
Ref: Biblioteca<85>-Footnote-176155438
Ref: Biblioteca<85>-Footnote-186155504
Ref: Biblioteca<85>-Footnote-196155570
Ref: Biblioteca<85>-Footnote-206155636
Ref: Biblioteca<85>-Footnote-216155702
Ref: Biblioteca<85>-Footnote-226155768
Ref: Biblioteca<85>-Footnote-236155834
Ref: Biblioteca<85>-Footnote-246155900
Ref: Biblioteca<85>-Footnote-256155966
Ref: Biblioteca<85>-Footnote-266156032
Ref: Biblioteca<85>-Footnote-276156098
Ref: Biblioteca<85>-Footnote-286156164
Ref: Biblioteca<85>-Footnote-296156230
Ref: Biblioteca<85>-Footnote-306156296
Ref: Biblioteca<85>-Footnote-316156362
Ref: Biblioteca<85>-Footnote-326156428
Ref: Biblioteca<85>-Footnote-336156494
Ref: Biblioteca<85>-Footnote-346156560
Ref: Biblioteca<85>-Footnote-356156626
Node: IDLE<54>6156692
Ref: whatsnew/changelog id7346156807
Ref: 1de26156807
Ref: IDLE<54>-Footnote-16159460
Ref: IDLE<54>-Footnote-26159524
Ref: IDLE<54>-Footnote-36159589
Ref: IDLE<54>-Footnote-46159654
Ref: IDLE<54>-Footnote-56159719
Ref: IDLE<54>-Footnote-66159784
Ref: IDLE<54>-Footnote-76159849
Ref: IDLE<54>-Footnote-86159914
Ref: IDLE<54>-Footnote-96159979
Ref: IDLE<54>-Footnote-106160044
Ref: IDLE<54>-Footnote-116160110
Ref: IDLE<54>-Footnote-126160176
Ref: IDLE<54>-Footnote-136160242
Ref: IDLE<54>-Footnote-146160308
Ref: IDLE<54>-Footnote-156160374
Ref: IDLE<54>-Footnote-166160440
Ref: IDLE<54>-Footnote-176160506
Ref: IDLE<54>-Footnote-186160572
Ref: IDLE<54>-Footnote-196160638
Node: Documentação<73>6160704
Ref: whatsnew/changelog id7356160815
Ref: 1de36160815
Ref: Documentação<73>-Footnote-16161262
Ref: Documentação<73>-Footnote-26161327
Ref: Documentação<73>-Footnote-36161392
Ref: Documentação<73>-Footnote-46161434
Node: Testes<75>6161499
Ref: whatsnew/changelog id7366161613
Ref: 1de46161613
Ref: Testes<75>-Footnote-16161995
Ref: Testes<75>-Footnote-26162060
Node: Windows<72>6162125
Ref: whatsnew/changelog id7376162237
Ref: 1de56162237
Ref: Windows<72>-Footnote-16162647
Ref: Windows<72>-Footnote-26162712
Node: Construção<82>6162777
Ref: whatsnew/changelog id7386162888
Ref: 1de66162888
Ref: Construção<82>-Footnote-16163177
Ref: Construção<82>-Footnote-26163242
Node: API C<71>6163307
Ref: whatsnew/changelog id7396163428
Ref: 1de76163428
Ref: API C<71>-Footnote-16163666
Ref: API C<71>-Footnote-26163731
Ref: API C<71>-Footnote-36163773
Node: Ferramentas/Demos<52>6163838
Ref: whatsnew/changelog id7406163934
Ref: 1de86163934
Ref: Ferramentas/Demos<52>-Footnote-16164144
Node: Python 3 6 0 alpha 16164209
Ref: whatsnew/changelog python-3-6-0-alpha-16164331
Ref: 1de96164331
Node: Segurança<54>6164743
Ref: whatsnew/changelog id7416164846
Ref: 1dea6164846
Ref: Segurança<54>-Footnote-16165340
Ref: Segurança<54>-Footnote-26165405
Ref: Segurança<54>-Footnote-36165470
Node: Núcleo e embutidos<85>6165535
Ref: whatsnew/changelog id7426165661
Ref: 1deb6165661
Ref: Núcleo e embutidos<85>-Footnote-16178857
Ref: Núcleo e embutidos<85>-Footnote-26178922
Ref: Núcleo e embutidos<85>-Footnote-36178987
Ref: Núcleo e embutidos<85>-Footnote-46179052
Ref: Núcleo e embutidos<85>-Footnote-56179117
Ref: Núcleo e embutidos<85>-Footnote-66179182
Ref: Núcleo e embutidos<85>-Footnote-76179247
Ref: Núcleo e embutidos<85>-Footnote-86179312
Ref: Núcleo e embutidos<85>-Footnote-96179377
Ref: Núcleo e embutidos<85>-Footnote-106179442
Ref: Núcleo e embutidos<85>-Footnote-116179508
Ref: Núcleo e embutidos<85>-Footnote-126179574
Ref: Núcleo e embutidos<85>-Footnote-136179640
Ref: Núcleo e embutidos<85>-Footnote-146179706
Ref: Núcleo e embutidos<85>-Footnote-156179772
Ref: Núcleo e embutidos<85>-Footnote-166179838
Ref: Núcleo e embutidos<85>-Footnote-176179881
Ref: Núcleo e embutidos<85>-Footnote-186179947
Ref: Núcleo e embutidos<85>-Footnote-196180013
Ref: Núcleo e embutidos<85>-Footnote-206180079
Ref: Núcleo e embutidos<85>-Footnote-216180145
Ref: Núcleo e embutidos<85>-Footnote-226180211
Ref: Núcleo e embutidos<85>-Footnote-236180277
Ref: Núcleo e embutidos<85>-Footnote-246180320
Ref: Núcleo e embutidos<85>-Footnote-256180386
Ref: Núcleo e embutidos<85>-Footnote-266180452
Ref: Núcleo e embutidos<85>-Footnote-276180518
Ref: Núcleo e embutidos<85>-Footnote-286180584
Ref: Núcleo e embutidos<85>-Footnote-296180650
Ref: Núcleo e embutidos<85>-Footnote-306180716
Ref: Núcleo e embutidos<85>-Footnote-316180782
Ref: Núcleo e embutidos<85>-Footnote-326180848
Ref: Núcleo e embutidos<85>-Footnote-336180914
Ref: Núcleo e embutidos<85>-Footnote-346180980
Ref: Núcleo e embutidos<85>-Footnote-356181046
Ref: Núcleo e embutidos<85>-Footnote-366181112
Ref: Núcleo e embutidos<85>-Footnote-376181177
Ref: Núcleo e embutidos<85>-Footnote-386181243
Ref: Núcleo e embutidos<85>-Footnote-396181309
Ref: Núcleo e embutidos<85>-Footnote-406181375
Ref: Núcleo e embutidos<85>-Footnote-416181441
Ref: Núcleo e embutidos<85>-Footnote-426181507
Ref: Núcleo e embutidos<85>-Footnote-436181573
Ref: Núcleo e embutidos<85>-Footnote-446181639
Ref: Núcleo e embutidos<85>-Footnote-456181705
Ref: Núcleo e embutidos<85>-Footnote-466181771
Ref: Núcleo e embutidos<85>-Footnote-476181837
Ref: Núcleo e embutidos<85>-Footnote-486181903
Ref: Núcleo e embutidos<85>-Footnote-496181969
Ref: Núcleo e embutidos<85>-Footnote-506182035
Ref: Núcleo e embutidos<85>-Footnote-516182101
Ref: Núcleo e embutidos<85>-Footnote-526182167
Ref: Núcleo e embutidos<85>-Footnote-536182232
Ref: Núcleo e embutidos<85>-Footnote-546182298
Ref: Núcleo e embutidos<85>-Footnote-556182364
Ref: Núcleo e embutidos<85>-Footnote-566182430
Ref: Núcleo e embutidos<85>-Footnote-576182496
Ref: Núcleo e embutidos<85>-Footnote-586182562
Ref: Núcleo e embutidos<85>-Footnote-596182628
Ref: Núcleo e embutidos<85>-Footnote-606182694
Ref: Núcleo e embutidos<85>-Footnote-616182760
Ref: Núcleo e embutidos<85>-Footnote-626182826
Ref: Núcleo e embutidos<85>-Footnote-636182892
Ref: Núcleo e embutidos<85>-Footnote-646182958
Ref: Núcleo e embutidos<85>-Footnote-656183024
Ref: Núcleo e embutidos<85>-Footnote-666183090
Ref: Núcleo e embutidos<85>-Footnote-676183156
Ref: Núcleo e embutidos<85>-Footnote-686183222
Ref: Núcleo e embutidos<85>-Footnote-696183288
Ref: Núcleo e embutidos<85>-Footnote-706183354
Ref: Núcleo e embutidos<85>-Footnote-716183420
Ref: Núcleo e embutidos<85>-Footnote-726183486
Ref: Núcleo e embutidos<85>-Footnote-736183552
Ref: Núcleo e embutidos<85>-Footnote-746183618
Ref: Núcleo e embutidos<85>-Footnote-756183684
Ref: Núcleo e embutidos<85>-Footnote-766183750
Ref: Núcleo e embutidos<85>-Footnote-776183816
Ref: Núcleo e embutidos<85>-Footnote-786183882
Ref: Núcleo e embutidos<85>-Footnote-796183947
Ref: Núcleo e embutidos<85>-Footnote-806184013
Ref: Núcleo e embutidos<85>-Footnote-816184056
Ref: Núcleo e embutidos<85>-Footnote-826184122
Ref: Núcleo e embutidos<85>-Footnote-836184188
Ref: Núcleo e embutidos<85>-Footnote-846184254
Ref: Núcleo e embutidos<85>-Footnote-856184320
Ref: Núcleo e embutidos<85>-Footnote-866184386
Ref: Núcleo e embutidos<85>-Footnote-876184452
Node: Biblioteca<86>6184518
Ref: whatsnew/changelog id7436184638
Ref: 1ded6184638
Ref: Biblioteca<86>-Footnote-16215712
Ref: Biblioteca<86>-Footnote-26215777
Ref: Biblioteca<86>-Footnote-36215842
Ref: Biblioteca<86>-Footnote-46215907
Ref: Biblioteca<86>-Footnote-56215972
Ref: Biblioteca<86>-Footnote-66216037
Ref: Biblioteca<86>-Footnote-76216102
Ref: Biblioteca<86>-Footnote-86216167
Ref: Biblioteca<86>-Footnote-96216232
Ref: Biblioteca<86>-Footnote-106216297
Ref: Biblioteca<86>-Footnote-116216363
Ref: Biblioteca<86>-Footnote-126216429
Ref: Biblioteca<86>-Footnote-136216495
Ref: Biblioteca<86>-Footnote-146216561
Ref: Biblioteca<86>-Footnote-156216627
Ref: Biblioteca<86>-Footnote-166216693
Ref: Biblioteca<86>-Footnote-176216759
Ref: Biblioteca<86>-Footnote-186216825
Ref: Biblioteca<86>-Footnote-196216868
Ref: Biblioteca<86>-Footnote-206216934
Ref: Biblioteca<86>-Footnote-216217000
Ref: Biblioteca<86>-Footnote-226217066
Ref: Biblioteca<86>-Footnote-236217132
Ref: Biblioteca<86>-Footnote-246217198
Ref: Biblioteca<86>-Footnote-256217264
Ref: Biblioteca<86>-Footnote-266217330
Ref: Biblioteca<86>-Footnote-276217396
Ref: Biblioteca<86>-Footnote-286217462
Ref: Biblioteca<86>-Footnote-296217528
Ref: Biblioteca<86>-Footnote-306217594
Ref: Biblioteca<86>-Footnote-316217660
Ref: Biblioteca<86>-Footnote-326217726
Ref: Biblioteca<86>-Footnote-336217792
Ref: Biblioteca<86>-Footnote-346217858
Ref: Biblioteca<86>-Footnote-356217924
Ref: Biblioteca<86>-Footnote-366217990
Ref: Biblioteca<86>-Footnote-376218056
Ref: Biblioteca<86>-Footnote-386218122
Ref: Biblioteca<86>-Footnote-396218188
Ref: Biblioteca<86>-Footnote-406218254
Ref: Biblioteca<86>-Footnote-416218320
Ref: Biblioteca<86>-Footnote-426218386
Ref: Biblioteca<86>-Footnote-436218452
Ref: Biblioteca<86>-Footnote-446218518
Ref: Biblioteca<86>-Footnote-456218584
Ref: Biblioteca<86>-Footnote-466218650
Ref: Biblioteca<86>-Footnote-476218716
Ref: Biblioteca<86>-Footnote-486218782
Ref: Biblioteca<86>-Footnote-496218848
Ref: Biblioteca<86>-Footnote-506218914
Ref: Biblioteca<86>-Footnote-516218980
Ref: Biblioteca<86>-Footnote-526219046
Ref: Biblioteca<86>-Footnote-536219112
Ref: Biblioteca<86>-Footnote-546219178
Ref: Biblioteca<86>-Footnote-556219244
Ref: Biblioteca<86>-Footnote-566219310
Ref: Biblioteca<86>-Footnote-576219376
Ref: Biblioteca<86>-Footnote-586219442
Ref: Biblioteca<86>-Footnote-596219508
Ref: Biblioteca<86>-Footnote-606219574
Ref: Biblioteca<86>-Footnote-616219640
Ref: Biblioteca<86>-Footnote-626219706
Ref: Biblioteca<86>-Footnote-636219772
Ref: Biblioteca<86>-Footnote-646219838
Ref: Biblioteca<86>-Footnote-656219904
Ref: Biblioteca<86>-Footnote-666219970
Ref: Biblioteca<86>-Footnote-676220036
Ref: Biblioteca<86>-Footnote-686220102
Ref: Biblioteca<86>-Footnote-696220168
Ref: Biblioteca<86>-Footnote-706220234
Ref: Biblioteca<86>-Footnote-716220300
Ref: Biblioteca<86>-Footnote-726220366
Ref: Biblioteca<86>-Footnote-736220432
Ref: Biblioteca<86>-Footnote-746220498
Ref: Biblioteca<86>-Footnote-756220564
Ref: Biblioteca<86>-Footnote-766220630
Ref: Biblioteca<86>-Footnote-776220696
Ref: Biblioteca<86>-Footnote-786220762
Ref: Biblioteca<86>-Footnote-796220828
Ref: Biblioteca<86>-Footnote-806220894
Ref: Biblioteca<86>-Footnote-816220959
Ref: Biblioteca<86>-Footnote-826221025
Ref: Biblioteca<86>-Footnote-836221091
Ref: Biblioteca<86>-Footnote-846221157
Ref: Biblioteca<86>-Footnote-856221223
Ref: Biblioteca<86>-Footnote-866221289
Ref: Biblioteca<86>-Footnote-876221355
Ref: Biblioteca<86>-Footnote-886221421
Ref: Biblioteca<86>-Footnote-896221487
Ref: Biblioteca<86>-Footnote-906221553
Ref: Biblioteca<86>-Footnote-916221619
Ref: Biblioteca<86>-Footnote-926221685
Ref: Biblioteca<86>-Footnote-936221751
Ref: Biblioteca<86>-Footnote-946221817
Ref: Biblioteca<86>-Footnote-956221883
Ref: Biblioteca<86>-Footnote-966221949
Ref: Biblioteca<86>-Footnote-976222015
Ref: Biblioteca<86>-Footnote-986222081
Ref: Biblioteca<86>-Footnote-996222147
Ref: Biblioteca<86>-Footnote-1006222213
Ref: Biblioteca<86>-Footnote-1016222280
Ref: Biblioteca<86>-Footnote-1026222347
Ref: Biblioteca<86>-Footnote-1036222414
Ref: Biblioteca<86>-Footnote-1046222481
Ref: Biblioteca<86>-Footnote-1056222548
Ref: Biblioteca<86>-Footnote-1066222615
Ref: Biblioteca<86>-Footnote-1076222682
Ref: Biblioteca<86>-Footnote-1086222749
Ref: Biblioteca<86>-Footnote-1096222816
Ref: Biblioteca<86>-Footnote-1106222883
Ref: Biblioteca<86>-Footnote-1116222950
Ref: Biblioteca<86>-Footnote-1126223017
Ref: Biblioteca<86>-Footnote-1136223084
Ref: Biblioteca<86>-Footnote-1146223151
Ref: Biblioteca<86>-Footnote-1156223218
Ref: Biblioteca<86>-Footnote-1166223285
Ref: Biblioteca<86>-Footnote-1176223352
Ref: Biblioteca<86>-Footnote-1186223419
Ref: Biblioteca<86>-Footnote-1196223486
Ref: Biblioteca<86>-Footnote-1206223553
Ref: Biblioteca<86>-Footnote-1216223620
Ref: Biblioteca<86>-Footnote-1226223687
Ref: Biblioteca<86>-Footnote-1236223754
Ref: Biblioteca<86>-Footnote-1246223821
Ref: Biblioteca<86>-Footnote-1256223888
Ref: Biblioteca<86>-Footnote-1266223955
Ref: Biblioteca<86>-Footnote-1276224022
Ref: Biblioteca<86>-Footnote-1286224089
Ref: Biblioteca<86>-Footnote-1296224156
Ref: Biblioteca<86>-Footnote-1306224223
Ref: Biblioteca<86>-Footnote-1316224290
Ref: Biblioteca<86>-Footnote-1326224357
Ref: Biblioteca<86>-Footnote-1336224424
Ref: Biblioteca<86>-Footnote-1346224491
Ref: Biblioteca<86>-Footnote-1356224558
Ref: Biblioteca<86>-Footnote-1366224625
Ref: Biblioteca<86>-Footnote-1376224692
Ref: Biblioteca<86>-Footnote-1386224759
Ref: Biblioteca<86>-Footnote-1396224826
Ref: Biblioteca<86>-Footnote-1406224893
Ref: Biblioteca<86>-Footnote-1416224960
Ref: Biblioteca<86>-Footnote-1426225027
Ref: Biblioteca<86>-Footnote-1436225094
Ref: Biblioteca<86>-Footnote-1446225161
Ref: Biblioteca<86>-Footnote-1456225227
Ref: Biblioteca<86>-Footnote-1466225294
Ref: Biblioteca<86>-Footnote-1476225361
Ref: Biblioteca<86>-Footnote-1486225428
Ref: Biblioteca<86>-Footnote-1496225495
Ref: Biblioteca<86>-Footnote-1506225562
Ref: Biblioteca<86>-Footnote-1516225628
Ref: Biblioteca<86>-Footnote-1526225695
Ref: Biblioteca<86>-Footnote-1536225762
Ref: Biblioteca<86>-Footnote-1546225829
Ref: Biblioteca<86>-Footnote-1556225896
Ref: Biblioteca<86>-Footnote-1566225963
Ref: Biblioteca<86>-Footnote-1576226030
Ref: Biblioteca<86>-Footnote-1586226097
Ref: Biblioteca<86>-Footnote-1596226164
Ref: Biblioteca<86>-Footnote-1606226231
Ref: Biblioteca<86>-Footnote-1616226297
Ref: Biblioteca<86>-Footnote-1626226364
Ref: Biblioteca<86>-Footnote-1636226431
Ref: Biblioteca<86>-Footnote-1646226498
Ref: Biblioteca<86>-Footnote-1656226565
Ref: Biblioteca<86>-Footnote-1666226632
Ref: Biblioteca<86>-Footnote-1676226699
Ref: Biblioteca<86>-Footnote-1686226766
Ref: Biblioteca<86>-Footnote-1696226833
Ref: Biblioteca<86>-Footnote-1706226900
Ref: Biblioteca<86>-Footnote-1716226967
Ref: Biblioteca<86>-Footnote-1726227034
Ref: Biblioteca<86>-Footnote-1736227101
Ref: Biblioteca<86>-Footnote-1746227168
Ref: Biblioteca<86>-Footnote-1756227235
Ref: Biblioteca<86>-Footnote-1766227302
Ref: Biblioteca<86>-Footnote-1776227369
Ref: Biblioteca<86>-Footnote-1786227436
Ref: Biblioteca<86>-Footnote-1796227503
Ref: Biblioteca<86>-Footnote-1806227570
Ref: Biblioteca<86>-Footnote-1816227637
Ref: Biblioteca<86>-Footnote-1826227704
Ref: Biblioteca<86>-Footnote-1836227771
Ref: Biblioteca<86>-Footnote-1846227838
Ref: Biblioteca<86>-Footnote-1856227905
Ref: Biblioteca<86>-Footnote-1866227972
Ref: Biblioteca<86>-Footnote-1876228039
Ref: Biblioteca<86>-Footnote-1886228106
Ref: Biblioteca<86>-Footnote-1896228173
Ref: Biblioteca<86>-Footnote-1906228240
Ref: Biblioteca<86>-Footnote-1916228307
Ref: Biblioteca<86>-Footnote-1926228374
Ref: Biblioteca<86>-Footnote-1936228441
Ref: Biblioteca<86>-Footnote-1946228508
Ref: Biblioteca<86>-Footnote-1956228575
Ref: Biblioteca<86>-Footnote-1966228642
Ref: Biblioteca<86>-Footnote-1976228709
Ref: Biblioteca<86>-Footnote-1986228776
Ref: Biblioteca<86>-Footnote-1996228843
Ref: Biblioteca<86>-Footnote-2006228910
Ref: Biblioteca<86>-Footnote-2016228977
Ref: Biblioteca<86>-Footnote-2026229044
Ref: Biblioteca<86>-Footnote-2036229111
Ref: Biblioteca<86>-Footnote-2046229178
Ref: Biblioteca<86>-Footnote-2056229245
Ref: Biblioteca<86>-Footnote-2066229312
Ref: Biblioteca<86>-Footnote-2076229379
Ref: Biblioteca<86>-Footnote-2086229446
Ref: Biblioteca<86>-Footnote-2096229512
Ref: Biblioteca<86>-Footnote-2106229578
Ref: Biblioteca<86>-Footnote-2116229645
Ref: Biblioteca<86>-Footnote-2126229712
Ref: Biblioteca<86>-Footnote-2136229779
Ref: Biblioteca<86>-Footnote-2146229846
Ref: Biblioteca<86>-Footnote-2156229913
Ref: Biblioteca<86>-Footnote-2166229980
Ref: Biblioteca<86>-Footnote-2176230047
Ref: Biblioteca<86>-Footnote-2186230114
Ref: Biblioteca<86>-Footnote-2196230181
Ref: Biblioteca<86>-Footnote-2206230248
Ref: Biblioteca<86>-Footnote-2216230315
Ref: Biblioteca<86>-Footnote-2226230382
Ref: Biblioteca<86>-Footnote-2236230449
Ref: Biblioteca<86>-Footnote-2246230516
Node: IDLE<55>6230583
Ref: whatsnew/changelog id7446230698
Ref: 1def6230698
Ref: IDLE<55>-Footnote-16236277
Ref: IDLE<55>-Footnote-26236342
Ref: IDLE<55>-Footnote-36236407
Ref: IDLE<55>-Footnote-46236472
Ref: IDLE<55>-Footnote-56236537
Ref: IDLE<55>-Footnote-66236602
Ref: IDLE<55>-Footnote-76236667
Ref: IDLE<55>-Footnote-86236732
Ref: IDLE<55>-Footnote-96236797
Ref: IDLE<55>-Footnote-106236862
Ref: IDLE<55>-Footnote-116236928
Ref: IDLE<55>-Footnote-126236994
Ref: IDLE<55>-Footnote-136237060
Ref: IDLE<55>-Footnote-146237126
Ref: IDLE<55>-Footnote-156237192
Ref: IDLE<55>-Footnote-166237258
Ref: IDLE<55>-Footnote-176237324
Ref: IDLE<55>-Footnote-186237390
Ref: IDLE<55>-Footnote-196237456
Ref: IDLE<55>-Footnote-206237522
Ref: IDLE<55>-Footnote-216237588
Ref: IDLE<55>-Footnote-226237654
Ref: IDLE<55>-Footnote-236237720
Ref: IDLE<55>-Footnote-246237786
Ref: IDLE<55>-Footnote-256237852
Ref: IDLE<55>-Footnote-266237918
Ref: IDLE<55>-Footnote-276237984
Ref: IDLE<55>-Footnote-286238050
Node: Documentação<74>6238116
Ref: whatsnew/changelog id7456238227
Ref: 1df06238227
Ref: Documentação<74>-Footnote-16239023
Ref: Documentação<74>-Footnote-26239088
Ref: Documentação<74>-Footnote-36239152
Ref: Documentação<74>-Footnote-46239217
Ref: Documentação<74>-Footnote-56239282
Node: Testes<76>6239347
Ref: whatsnew/changelog id7466239466
Ref: 1df16239466
Ref: Testes<76>-Footnote-16241224
Ref: Testes<76>-Footnote-26241289
Ref: Testes<76>-Footnote-36241354
Ref: Testes<76>-Footnote-46241419
Ref: Testes<76>-Footnote-56241484
Ref: Testes<76>-Footnote-66241549
Ref: Testes<76>-Footnote-76241614
Ref: Testes<76>-Footnote-86241679
Ref: Testes<76>-Footnote-96241744
Ref: Testes<76>-Footnote-106241809
Ref: Testes<76>-Footnote-116241875
Ref: Testes<76>-Footnote-126241941
Ref: Testes<76>-Footnote-136242007
Node: Construção<83>6242073
Ref: whatsnew/changelog id7476242185
Ref: 1df26242185
Ref: Construção<83>-Footnote-16244927
Ref: Construção<83>-Footnote-26244992
Ref: Construção<83>-Footnote-36245057
Ref: Construção<83>-Footnote-46245122
Ref: Construção<83>-Footnote-56245187
Ref: Construção<83>-Footnote-66245252
Ref: Construção<83>-Footnote-76245317
Ref: Construção<83>-Footnote-86245382
Ref: Construção<83>-Footnote-96245447
Ref: Construção<83>-Footnote-106245512
Ref: Construção<83>-Footnote-116245578
Ref: Construção<83>-Footnote-126245644
Ref: Construção<83>-Footnote-136245710
Ref: Construção<83>-Footnote-146245776
Ref: Construção<83>-Footnote-156245842
Ref: Construção<83>-Footnote-166245908
Ref: Construção<83>-Footnote-176245974
Ref: Construção<83>-Footnote-186246040
Ref: Construção<83>-Footnote-196246106
Node: Windows<73>6246172
Ref: whatsnew/changelog id7486246295
Ref: 1df36246295
Ref: Windows<73>-Footnote-16246943
Ref: Windows<73>-Footnote-26247008
Ref: Windows<73>-Footnote-36247073
Ref: Windows<73>-Footnote-46247138
Ref: Windows<73>-Footnote-56247203
Ref: Windows<73>-Footnote-66247268
Node: Ferramentas/Demos<53>6247333
Ref: whatsnew/changelog id7496247449
Ref: 1df46247449
Ref: Ferramentas/Demos<53>-Footnote-16248251
Ref: Ferramentas/Demos<53>-Footnote-26248316
Ref: Ferramentas/Demos<53>-Footnote-36248381
Ref: Ferramentas/Demos<53>-Footnote-46248446
Ref: Ferramentas/Demos<53>-Footnote-56248511
Ref: Ferramentas/Demos<53>-Footnote-66248576
Node: API C<72>6248641
Ref: whatsnew/changelog id7506248737
Ref: 1df56248737
Ref: API C<72>-Footnote-16249234
Ref: API C<72>-Footnote-26249299
Node: Python 3 5 5 final6249364
Ref: whatsnew/changelog python-3-5-5-final6249498
Ref: 1df66249498
Node: Python 3 5 5 release candidate 16249633
Ref: whatsnew/changelog python-3-5-5-release-candidate-16249765
Ref: 1df76249765
Node: Segurança<55>6250001
Ref: whatsnew/changelog id7516250116
Ref: 1df86250116
Ref: Segurança<55>-Footnote-16251390
Ref: Segurança<55>-Footnote-26251455
Ref: Segurança<55>-Footnote-36251520
Ref: Segurança<55>-Footnote-46251585
Ref: Segurança<55>-Footnote-56251650
Ref: Segurança<55>-Footnote-66251708
Node: Núcleo e embutidos<86>6251773
Ref: whatsnew/changelog id7526251911
Ref: 1df96251911
Ref: Núcleo e embutidos<86>-Footnote-16252139
Node: Biblioteca<87>6252204
Ref: whatsnew/changelog id7536252319
Ref: 1dfa6252319
Ref: Biblioteca<87>-Footnote-16252852
Ref: Biblioteca<87>-Footnote-26252917
Node: Python 3 5 4 final6252982
Ref: whatsnew/changelog python-3-5-4-final6253128
Ref: 1dfb6253128
Node: Biblioteca<88>6253258
Ref: whatsnew/changelog id7546253327
Ref: 1dfc6253327
Ref: Biblioteca<88>-Footnote-16253531
Node: Python 3 5 4 release candidate 16253596
Ref: whatsnew/changelog python-3-5-4-release-candidate-16253728
Ref: 1dfd6253728
Node: Segurança<56>6254102
Ref: whatsnew/changelog id7556254217
Ref: 1dfe6254217
Ref: Segurança<56>-Footnote-16255546
Ref: Segurança<56>-Footnote-26255611
Ref: Segurança<56>-Footnote-36255676
Ref: Segurança<56>-Footnote-46255731
Ref: Segurança<56>-Footnote-56255786
Ref: Segurança<56>-Footnote-66255841
Ref: Segurança<56>-Footnote-76255896
Ref: Segurança<56>-Footnote-86255951
Ref: Segurança<56>-Footnote-96256006
Ref: Segurança<56>-Footnote-106256071
Ref: Segurança<56>-Footnote-116256137
Ref: Segurança<56>-Footnote-126256193
Node: Núcleo e embutidos<87>6256249
Ref: whatsnew/changelog id7566256387
Ref: 1dff6256387
Ref: Núcleo e embutidos<87>-Footnote-16258645
Ref: Núcleo e embutidos<87>-Footnote-26258710
Ref: Núcleo e embutidos<87>-Footnote-36258775
Ref: Núcleo e embutidos<87>-Footnote-46258840
Ref: Núcleo e embutidos<87>-Footnote-56258905
Ref: Núcleo e embutidos<87>-Footnote-66258970
Ref: Núcleo e embutidos<87>-Footnote-76259035
Ref: Núcleo e embutidos<87>-Footnote-86259100
Ref: Núcleo e embutidos<87>-Footnote-96259165
Ref: Núcleo e embutidos<87>-Footnote-106259230
Ref: Núcleo e embutidos<87>-Footnote-116259296
Ref: Núcleo e embutidos<87>-Footnote-126259362
Ref: Núcleo e embutidos<87>-Footnote-136259428
Ref: Núcleo e embutidos<87>-Footnote-146259494
Ref: Núcleo e embutidos<87>-Footnote-156259560
Node: Biblioteca<89>6259626
Ref: whatsnew/changelog id7576259768
Ref: 1e006259768
Ref: Biblioteca<89>-Footnote-16269975
Ref: Biblioteca<89>-Footnote-26270040
Ref: Biblioteca<89>-Footnote-36270105
Ref: Biblioteca<89>-Footnote-46270170
Ref: Biblioteca<89>-Footnote-56270235
Ref: Biblioteca<89>-Footnote-66270300
Ref: Biblioteca<89>-Footnote-76270365
Ref: Biblioteca<89>-Footnote-86270430
Ref: Biblioteca<89>-Footnote-96270495
Ref: Biblioteca<89>-Footnote-106270560
Ref: Biblioteca<89>-Footnote-116270626
Ref: Biblioteca<89>-Footnote-126270692
Ref: Biblioteca<89>-Footnote-136270758
Ref: Biblioteca<89>-Footnote-146270824
Ref: Biblioteca<89>-Footnote-156270890
Ref: Biblioteca<89>-Footnote-166270956
Ref: Biblioteca<89>-Footnote-176271022
Ref: Biblioteca<89>-Footnote-186271088
Ref: Biblioteca<89>-Footnote-196271154
Ref: Biblioteca<89>-Footnote-206271220
Ref: Biblioteca<89>-Footnote-216271286
Ref: Biblioteca<89>-Footnote-226271352
Ref: Biblioteca<89>-Footnote-236271418
Ref: Biblioteca<89>-Footnote-246271484
Ref: Biblioteca<89>-Footnote-256271550
Ref: Biblioteca<89>-Footnote-266271616
Ref: Biblioteca<89>-Footnote-276271682
Ref: Biblioteca<89>-Footnote-286271748
Ref: Biblioteca<89>-Footnote-296271814
Ref: Biblioteca<89>-Footnote-306271880
Ref: Biblioteca<89>-Footnote-316271946
Ref: Biblioteca<89>-Footnote-326272012
Ref: Biblioteca<89>-Footnote-336272078
Ref: Biblioteca<89>-Footnote-346272144
Ref: Biblioteca<89>-Footnote-356272210
Ref: Biblioteca<89>-Footnote-366272276
Ref: Biblioteca<89>-Footnote-376272342
Ref: Biblioteca<89>-Footnote-386272408
Ref: Biblioteca<89>-Footnote-396272474
Ref: Biblioteca<89>-Footnote-406272540
Ref: Biblioteca<89>-Footnote-416272606
Ref: Biblioteca<89>-Footnote-426272672
Ref: Biblioteca<89>-Footnote-436272738
Ref: Biblioteca<89>-Footnote-446272804
Ref: Biblioteca<89>-Footnote-456272870
Ref: Biblioteca<89>-Footnote-466272936
Ref: Biblioteca<89>-Footnote-476273002
Ref: Biblioteca<89>-Footnote-486273068
Ref: Biblioteca<89>-Footnote-496273134
Ref: Biblioteca<89>-Footnote-506273200
Ref: Biblioteca<89>-Footnote-516273266
Ref: Biblioteca<89>-Footnote-526273332
Ref: Biblioteca<89>-Footnote-536273398
Ref: Biblioteca<89>-Footnote-546273464
Ref: Biblioteca<89>-Footnote-556273529
Ref: Biblioteca<89>-Footnote-566273595
Ref: Biblioteca<89>-Footnote-576273661
Ref: Biblioteca<89>-Footnote-586273727
Ref: Biblioteca<89>-Footnote-596273793
Ref: Biblioteca<89>-Footnote-606273859
Ref: Biblioteca<89>-Footnote-616273925
Ref: Biblioteca<89>-Footnote-626273991
Ref: Biblioteca<89>-Footnote-636274057
Ref: Biblioteca<89>-Footnote-646274123
Ref: Biblioteca<89>-Footnote-656274189
Ref: Biblioteca<89>-Footnote-666274255
Ref: Biblioteca<89>-Footnote-676274321
Ref: Biblioteca<89>-Footnote-686274387
Ref: Biblioteca<89>-Footnote-696274453
Ref: Biblioteca<89>-Footnote-706274519
Ref: Biblioteca<89>-Footnote-716274585
Ref: Biblioteca<89>-Footnote-726274651
Ref: Biblioteca<89>-Footnote-736274717
Ref: Biblioteca<89>-Footnote-746274783
Node: Documentação<75>6274849
Ref: whatsnew/changelog id7586274978
Ref: 1e016274978
Ref: Documentação<75>-Footnote-16275688
Ref: Documentação<75>-Footnote-26275753
Ref: Documentação<75>-Footnote-36275818
Ref: Documentação<75>-Footnote-46275883
Ref: Documentação<75>-Footnote-56275948
Ref: Documentação<75>-Footnote-66276013
Node: Testes<77>6276078
Ref: whatsnew/changelog id7596276209
Ref: 1e026276209
Ref: Testes<77>-Footnote-16278318
Ref: Testes<77>-Footnote-26278383
Ref: Testes<77>-Footnote-36278448
Ref: Testes<77>-Footnote-46278513
Ref: Testes<77>-Footnote-56278578
Ref: Testes<77>-Footnote-66278643
Ref: Testes<77>-Footnote-76278708
Ref: Testes<77>-Footnote-86278773
Ref: Testes<77>-Footnote-96278838
Node: Construção<84>6278903
Ref: whatsnew/changelog id7606279027
Ref: 1e036279027
Ref: Construção<84>-Footnote-16279555
Ref: Construção<84>-Footnote-26279620
Ref: Construção<84>-Footnote-36279685
Node: Windows<74>6279750
Ref: whatsnew/changelog id7616279873
Ref: 1e046279873
Ref: Windows<74>-Footnote-16280131
Ref: Windows<74>-Footnote-26280196
Node: API C<73>6280261
Ref: whatsnew/changelog id7626280359
Ref: 1e056280359
Ref: API C<73>-Footnote-16280966
Ref: API C<73>-Footnote-26281031
Node: Python 3 5 3 final6281096
Ref: whatsnew/changelog python-3-5-3-final6281242
Ref: 1e066281242
Node: Python 3 5 3 release candidate 16281394
Ref: whatsnew/changelog python-3-5-3-release-candidate-16281526
Ref: 1e076281526
Node: Segurança<57>6281964
Ref: whatsnew/changelog id7636282079
Ref: 1e086282079
Ref: Segurança<57>-Footnote-16282462
Ref: Segurança<57>-Footnote-26282527
Node: Núcleo e embutidos<88>6282592
Ref: whatsnew/changelog id7646282730
Ref: 1e096282730
Ref: Núcleo e embutidos<88>-Footnote-16288193
Ref: Núcleo e embutidos<88>-Footnote-26288258
Ref: Núcleo e embutidos<88>-Footnote-36288323
Ref: Núcleo e embutidos<88>-Footnote-46288388
Ref: Núcleo e embutidos<88>-Footnote-56288453
Ref: Núcleo e embutidos<88>-Footnote-66288518
Ref: Núcleo e embutidos<88>-Footnote-76288583
Ref: Núcleo e embutidos<88>-Footnote-86288648
Ref: Núcleo e embutidos<88>-Footnote-96288713
Ref: Núcleo e embutidos<88>-Footnote-106288778
Ref: Núcleo e embutidos<88>-Footnote-116288844
Ref: Núcleo e embutidos<88>-Footnote-126288910
Ref: Núcleo e embutidos<88>-Footnote-136288976
Ref: Núcleo e embutidos<88>-Footnote-146289042
Ref: Núcleo e embutidos<88>-Footnote-156289108
Ref: Núcleo e embutidos<88>-Footnote-166289174
Ref: Núcleo e embutidos<88>-Footnote-176289240
Ref: Núcleo e embutidos<88>-Footnote-186289306
Ref: Núcleo e embutidos<88>-Footnote-196289372
Ref: Núcleo e embutidos<88>-Footnote-206289438
Ref: Núcleo e embutidos<88>-Footnote-216289504
Ref: Núcleo e embutidos<88>-Footnote-226289570
Ref: Núcleo e embutidos<88>-Footnote-236289636
Ref: Núcleo e embutidos<88>-Footnote-246289702
Ref: Núcleo e embutidos<88>-Footnote-256289768
Ref: Núcleo e embutidos<88>-Footnote-266289834
Ref: Núcleo e embutidos<88>-Footnote-276289900
Ref: Núcleo e embutidos<88>-Footnote-286289966
Ref: Núcleo e embutidos<88>-Footnote-296290032
Ref: Núcleo e embutidos<88>-Footnote-306290098
Ref: Núcleo e embutidos<88>-Footnote-316290164
Ref: Núcleo e embutidos<88>-Footnote-326290230
Ref: Núcleo e embutidos<88>-Footnote-336290296
Ref: Núcleo e embutidos<88>-Footnote-346290362
Ref: Núcleo e embutidos<88>-Footnote-356290428
Ref: Núcleo e embutidos<88>-Footnote-366290494
Ref: Núcleo e embutidos<88>-Footnote-376290560
Ref: Núcleo e embutidos<88>-Footnote-386290626
Ref: Núcleo e embutidos<88>-Footnote-396290692
Ref: Núcleo e embutidos<88>-Footnote-406290758
Ref: Núcleo e embutidos<88>-Footnote-416290824
Ref: Núcleo e embutidos<88>-Footnote-426290890
Ref: Núcleo e embutidos<88>-Footnote-436290956
Node: Biblioteca<90>6291022
Ref: whatsnew/changelog id7656291154
Ref: 1e0a6291154
Ref: Biblioteca<90>-Footnote-16307175
Ref: Biblioteca<90>-Footnote-26307240
Ref: Biblioteca<90>-Footnote-36307305
Ref: Biblioteca<90>-Footnote-46307370
Ref: Biblioteca<90>-Footnote-56307435
Ref: Biblioteca<90>-Footnote-66307499
Ref: Biblioteca<90>-Footnote-76307564
Ref: Biblioteca<90>-Footnote-86307629
Ref: Biblioteca<90>-Footnote-96307694
Ref: Biblioteca<90>-Footnote-106307759
Ref: Biblioteca<90>-Footnote-116307825
Ref: Biblioteca<90>-Footnote-126307891
Ref: Biblioteca<90>-Footnote-136307957
Ref: Biblioteca<90>-Footnote-146308023
Ref: Biblioteca<90>-Footnote-156308089
Ref: Biblioteca<90>-Footnote-166308155
Ref: Biblioteca<90>-Footnote-176308221
Ref: Biblioteca<90>-Footnote-186308287
Ref: Biblioteca<90>-Footnote-196308353
Ref: Biblioteca<90>-Footnote-206308419
Ref: Biblioteca<90>-Footnote-216308485
Ref: Biblioteca<90>-Footnote-226308551
Ref: Biblioteca<90>-Footnote-236308617
Ref: Biblioteca<90>-Footnote-246308683
Ref: Biblioteca<90>-Footnote-256308749
Ref: Biblioteca<90>-Footnote-266308815
Ref: Biblioteca<90>-Footnote-276308881
Ref: Biblioteca<90>-Footnote-286308947
Ref: Biblioteca<90>-Footnote-296309013
Ref: Biblioteca<90>-Footnote-306309079
Ref: Biblioteca<90>-Footnote-316309145
Ref: Biblioteca<90>-Footnote-326309211
Ref: Biblioteca<90>-Footnote-336309279
Ref: Biblioteca<90>-Footnote-346309345
Ref: Biblioteca<90>-Footnote-356309411
Ref: Biblioteca<90>-Footnote-366309477
Ref: Biblioteca<90>-Footnote-376309543
Ref: Biblioteca<90>-Footnote-386309609
Ref: Biblioteca<90>-Footnote-396309675
Ref: Biblioteca<90>-Footnote-406309741
Ref: Biblioteca<90>-Footnote-416309807
Ref: Biblioteca<90>-Footnote-426309873
Ref: Biblioteca<90>-Footnote-436309939
Ref: Biblioteca<90>-Footnote-446310005
Ref: Biblioteca<90>-Footnote-456310071
Ref: Biblioteca<90>-Footnote-466310137
Ref: Biblioteca<90>-Footnote-476310203
Ref: Biblioteca<90>-Footnote-486310269
Ref: Biblioteca<90>-Footnote-496310335
Ref: Biblioteca<90>-Footnote-506310401
Ref: Biblioteca<90>-Footnote-516310467
Ref: Biblioteca<90>-Footnote-526310533
Ref: Biblioteca<90>-Footnote-536310599
Ref: Biblioteca<90>-Footnote-546310665
Ref: Biblioteca<90>-Footnote-556310731
Ref: Biblioteca<90>-Footnote-566310797
Ref: Biblioteca<90>-Footnote-576310863
Ref: Biblioteca<90>-Footnote-586310929
Ref: Biblioteca<90>-Footnote-596310995
Ref: Biblioteca<90>-Footnote-606311061
Ref: Biblioteca<90>-Footnote-616311117
Ref: Biblioteca<90>-Footnote-626311183
Ref: Biblioteca<90>-Footnote-636311249
Ref: Biblioteca<90>-Footnote-646311315
Ref: Biblioteca<90>-Footnote-656311381
Ref: Biblioteca<90>-Footnote-666311447
Ref: Biblioteca<90>-Footnote-676311513
Ref: Biblioteca<90>-Footnote-686311579
Ref: Biblioteca<90>-Footnote-696311645
Ref: Biblioteca<90>-Footnote-706311711
Ref: Biblioteca<90>-Footnote-716311777
Ref: Biblioteca<90>-Footnote-726311843
Ref: Biblioteca<90>-Footnote-736311908
Ref: Biblioteca<90>-Footnote-746311974
Ref: Biblioteca<90>-Footnote-756312040
Ref: Biblioteca<90>-Footnote-766312106
Ref: Biblioteca<90>-Footnote-776312172
Ref: Biblioteca<90>-Footnote-786312238
Ref: Biblioteca<90>-Footnote-796312304
Ref: Biblioteca<90>-Footnote-806312370
Ref: Biblioteca<90>-Footnote-816312429
Ref: Biblioteca<90>-Footnote-826312495
Ref: Biblioteca<90>-Footnote-836312561
Ref: Biblioteca<90>-Footnote-846312627
Ref: Biblioteca<90>-Footnote-856312693
Ref: Biblioteca<90>-Footnote-866312759
Ref: Biblioteca<90>-Footnote-876312825
Ref: Biblioteca<90>-Footnote-886312891
Ref: Biblioteca<90>-Footnote-896312957
Ref: Biblioteca<90>-Footnote-906313023
Ref: Biblioteca<90>-Footnote-916313089
Ref: Biblioteca<90>-Footnote-926313155
Ref: Biblioteca<90>-Footnote-936313221
Ref: Biblioteca<90>-Footnote-946313287
Ref: Biblioteca<90>-Footnote-956313353
Ref: Biblioteca<90>-Footnote-966313419
Ref: Biblioteca<90>-Footnote-976313485
Ref: Biblioteca<90>-Footnote-986313528
Ref: Biblioteca<90>-Footnote-996313594
Ref: Biblioteca<90>-Footnote-1006313660
Ref: Biblioteca<90>-Footnote-1016313727
Ref: Biblioteca<90>-Footnote-1026313794
Ref: Biblioteca<90>-Footnote-1036313861
Ref: Biblioteca<90>-Footnote-1046313928
Ref: Biblioteca<90>-Footnote-1056313995
Ref: Biblioteca<90>-Footnote-1066314062
Ref: Biblioteca<90>-Footnote-1076314129
Ref: Biblioteca<90>-Footnote-1086314196
Ref: Biblioteca<90>-Footnote-1096314263
Ref: Biblioteca<90>-Footnote-1106314330
Ref: Biblioteca<90>-Footnote-1116314397
Ref: Biblioteca<90>-Footnote-1126314464
Ref: Biblioteca<90>-Footnote-1136314531
Ref: Biblioteca<90>-Footnote-1146314598
Ref: Biblioteca<90>-Footnote-1156314665
Ref: Biblioteca<90>-Footnote-1166314732
Ref: Biblioteca<90>-Footnote-1176314799
Ref: Biblioteca<90>-Footnote-1186314866
Ref: Biblioteca<90>-Footnote-1196314933
Ref: Biblioteca<90>-Footnote-1206315000
Ref: Biblioteca<90>-Footnote-1216315067
Ref: Biblioteca<90>-Footnote-1226315134
Ref: Biblioteca<90>-Footnote-1236315201
Ref: Biblioteca<90>-Footnote-1246315268
Ref: Biblioteca<90>-Footnote-1256315335
Ref: Biblioteca<90>-Footnote-1266315402
Node: IDLE<56>6315469
Ref: whatsnew/changelog id7666315587
Ref: 1e0b6315587
Ref: IDLE<56>-Footnote-16316838
Ref: IDLE<56>-Footnote-26316903
Ref: IDLE<56>-Footnote-36316968
Ref: IDLE<56>-Footnote-46317033
Ref: IDLE<56>-Footnote-56317098
Ref: IDLE<56>-Footnote-66317163
Ref: IDLE<56>-Footnote-76317228
Ref: IDLE<56>-Footnote-86317293
Node: API C<74>6317358
Ref: whatsnew/changelog id7676317480
Ref: 1e0c6317480
Ref: API C<74>-Footnote-16317812
Ref: API C<74>-Footnote-26317877
Node: Documentação<76>6317942
Ref: whatsnew/changelog id7686318066
Ref: 1e0d6318066
Ref: Documentação<76>-Footnote-16318219
Node: Testes<78>6318284
Ref: whatsnew/changelog id7696318420
Ref: 1e0e6318420
Ref: Testes<78>-Footnote-16319115
Ref: Testes<78>-Footnote-26319180
Ref: Testes<78>-Footnote-36319245
Ref: Testes<78>-Footnote-46319310
Ref: Testes<78>-Footnote-56319375
Ref: Testes<78>-Footnote-66319440
Node: Ferramentas/Demos<54>6319505
Ref: whatsnew/changelog id7706319634
Ref: 1e0f6319634
Ref: Ferramentas/Demos<54>-Footnote-16320130
Ref: Ferramentas/Demos<54>-Footnote-26320195
Ref: Ferramentas/Demos<54>-Footnote-36320260
Node: Windows<75>6320325
Ref: whatsnew/changelog id7716320460
Ref: 1e106320460
Ref: Windows<75>-Footnote-16320962
Ref: Windows<75>-Footnote-26321027
Ref: Windows<75>-Footnote-36321092
Ref: Windows<75>-Footnote-46321157
Ref: Windows<75>-Footnote-56321222
Node: Construção<85>6321287
Ref: whatsnew/changelog id7726321392
Ref: 1e116321392
Ref: Construção<85>-Footnote-16324113
Ref: Construção<85>-Footnote-26324178
Ref: Construção<85>-Footnote-36324243
Ref: Construção<85>-Footnote-46324308
Ref: Construção<85>-Footnote-56324373
Ref: Construção<85>-Footnote-66324438
Ref: Construção<85>-Footnote-76324503
Ref: Construção<85>-Footnote-86324568
Ref: Construção<85>-Footnote-96324633
Ref: Construção<85>-Footnote-106324698
Ref: Construção<85>-Footnote-116324764
Ref: Construção<85>-Footnote-126324830
Ref: Construção<85>-Footnote-136324896
Ref: Construção<85>-Footnote-146324962
Ref: Construção<85>-Footnote-156325028
Ref: Construção<85>-Footnote-166325094
Ref: Construção<85>-Footnote-176325160
Ref: Construção<85>-Footnote-186325226
Ref: Construção<85>-Footnote-196325292
Ref: Construção<85>-Footnote-206325358
Ref: Construção<85>-Footnote-216325424
Ref: Construção<85>-Footnote-226325490
Node: Python 3 5 2 final6325556
Ref: whatsnew/changelog python-3-5-2-final6325702
Ref: 1e126325702
Node: Núcleo e embutidos<89>6325892
Ref: whatsnew/changelog id7736325989
Ref: 1e136325989
Ref: Núcleo e embutidos<89>-Footnote-16326152
Node: Testes<79>6326217
Ref: whatsnew/changelog id7746326331
Ref: 1e146326331
Ref: Testes<79>-Footnote-16326495
Node: IDLE<57>6326560
Ref: whatsnew/changelog id7756326642
Ref: 1e156326642
Ref: IDLE<57>-Footnote-16326798
Node: Python 3 5 2 release candidate 16326863
Ref: whatsnew/changelog python-3-5-2-release-candidate-16326995
Ref: 1e166326995
Node: Segurança<58>6327413
Ref: whatsnew/changelog id7766327528
Ref: 1e176327528
Ref: Segurança<58>-Footnote-16328440
Ref: Segurança<58>-Footnote-26328505
Ref: Segurança<58>-Footnote-36328560
Ref: Segurança<58>-Footnote-46328615
Ref: Segurança<58>-Footnote-56328680
Ref: Segurança<58>-Footnote-66328745
Ref: Segurança<58>-Footnote-76328810
Node: Núcleo e embutidos<90>6328875
Ref: whatsnew/changelog id7776329013
Ref: 1e186329013
Ref: Núcleo e embutidos<90>-Footnote-16334869
Ref: Núcleo e embutidos<90>-Footnote-26334934
Ref: Núcleo e embutidos<90>-Footnote-36334999
Ref: Núcleo e embutidos<90>-Footnote-46335064
Ref: Núcleo e embutidos<90>-Footnote-56335129
Ref: Núcleo e embutidos<90>-Footnote-66335194
Ref: Núcleo e embutidos<90>-Footnote-76335259
Ref: Núcleo e embutidos<90>-Footnote-86335324
Ref: Núcleo e embutidos<90>-Footnote-96335389
Ref: Núcleo e embutidos<90>-Footnote-106335454
Ref: Núcleo e embutidos<90>-Footnote-116335520
Ref: Núcleo e embutidos<90>-Footnote-126335586
Ref: Núcleo e embutidos<90>-Footnote-136335652
Ref: Núcleo e embutidos<90>-Footnote-146335718
Ref: Núcleo e embutidos<90>-Footnote-156335784
Ref: Núcleo e embutidos<90>-Footnote-166335850
Ref: Núcleo e embutidos<90>-Footnote-176335916
Ref: Núcleo e embutidos<90>-Footnote-186335981
Ref: Núcleo e embutidos<90>-Footnote-196336047
Ref: Núcleo e embutidos<90>-Footnote-206336113
Ref: Núcleo e embutidos<90>-Footnote-216336179
Ref: Núcleo e embutidos<90>-Footnote-226336245
Ref: Núcleo e embutidos<90>-Footnote-236336311
Ref: Núcleo e embutidos<90>-Footnote-246336377
Ref: Núcleo e embutidos<90>-Footnote-256336443
Ref: Núcleo e embutidos<90>-Footnote-266336509
Ref: Núcleo e embutidos<90>-Footnote-276336575
Ref: Núcleo e embutidos<90>-Footnote-286336641
Ref: Núcleo e embutidos<90>-Footnote-296336707
Ref: Núcleo e embutidos<90>-Footnote-306336773
Ref: Núcleo e embutidos<90>-Footnote-316336839
Ref: Núcleo e embutidos<90>-Footnote-326336882
Ref: Núcleo e embutidos<90>-Footnote-336336948
Ref: Núcleo e embutidos<90>-Footnote-346337014
Ref: Núcleo e embutidos<90>-Footnote-356337080
Ref: Núcleo e embutidos<90>-Footnote-366337146
Ref: Núcleo e embutidos<90>-Footnote-376337212
Ref: Núcleo e embutidos<90>-Footnote-386337278
Node: Biblioteca<91>6337344
Ref: whatsnew/changelog id7786337476
Ref: 1e196337476
Ref: Biblioteca<91>-Footnote-16354303
Ref: Biblioteca<91>-Footnote-26354368
Ref: Biblioteca<91>-Footnote-36354433
Ref: Biblioteca<91>-Footnote-46354475
Ref: Biblioteca<91>-Footnote-56354540
Ref: Biblioteca<91>-Footnote-66354605
Ref: Biblioteca<91>-Footnote-76354670
Ref: Biblioteca<91>-Footnote-86354735
Ref: Biblioteca<91>-Footnote-96354800
Ref: Biblioteca<91>-Footnote-106354865
Ref: Biblioteca<91>-Footnote-116354931
Ref: Biblioteca<91>-Footnote-126354997
Ref: Biblioteca<91>-Footnote-136355063
Ref: Biblioteca<91>-Footnote-146355129
Ref: Biblioteca<91>-Footnote-156355195
Ref: Biblioteca<91>-Footnote-166355261
Ref: Biblioteca<91>-Footnote-176355327
Ref: Biblioteca<91>-Footnote-186355393
Ref: Biblioteca<91>-Footnote-196355459
Ref: Biblioteca<91>-Footnote-206355525
Ref: Biblioteca<91>-Footnote-216355591
Ref: Biblioteca<91>-Footnote-226355657
Ref: Biblioteca<91>-Footnote-236355723
Ref: Biblioteca<91>-Footnote-246355789
Ref: Biblioteca<91>-Footnote-256355855
Ref: Biblioteca<91>-Footnote-266355921
Ref: Biblioteca<91>-Footnote-276355987
Ref: Biblioteca<91>-Footnote-286356053
Ref: Biblioteca<91>-Footnote-296356119
Ref: Biblioteca<91>-Footnote-306356185
Ref: Biblioteca<91>-Footnote-316356251
Ref: Biblioteca<91>-Footnote-326356317
Ref: Biblioteca<91>-Footnote-336356383
Ref: Biblioteca<91>-Footnote-346356449
Ref: Biblioteca<91>-Footnote-356356515
Ref: Biblioteca<91>-Footnote-366356581
Ref: Biblioteca<91>-Footnote-376356647
Ref: Biblioteca<91>-Footnote-386356713
Ref: Biblioteca<91>-Footnote-396356779
Ref: Biblioteca<91>-Footnote-406356845
Ref: Biblioteca<91>-Footnote-416356911
Ref: Biblioteca<91>-Footnote-426356977
Ref: Biblioteca<91>-Footnote-436357043
Ref: Biblioteca<91>-Footnote-446357109
Ref: Biblioteca<91>-Footnote-456357175
Ref: Biblioteca<91>-Footnote-466357241
Ref: Biblioteca<91>-Footnote-476357307
Ref: Biblioteca<91>-Footnote-486357373
Ref: Biblioteca<91>-Footnote-496357439
Ref: Biblioteca<91>-Footnote-506357505
Ref: Biblioteca<91>-Footnote-516357571
Ref: Biblioteca<91>-Footnote-526357637
Ref: Biblioteca<91>-Footnote-536357703
Ref: Biblioteca<91>-Footnote-546357769
Ref: Biblioteca<91>-Footnote-556357835
Ref: Biblioteca<91>-Footnote-566357901
Ref: Biblioteca<91>-Footnote-576357967
Ref: Biblioteca<91>-Footnote-586358033
Ref: Biblioteca<91>-Footnote-596358099
Ref: Biblioteca<91>-Footnote-606358165
Ref: Biblioteca<91>-Footnote-616358231
Ref: Biblioteca<91>-Footnote-626358296
Ref: Biblioteca<91>-Footnote-636358362
Ref: Biblioteca<91>-Footnote-646358428
Ref: Biblioteca<91>-Footnote-656358494
Ref: Biblioteca<91>-Footnote-666358560
Ref: Biblioteca<91>-Footnote-676358626
Ref: Biblioteca<91>-Footnote-686358692
Ref: Biblioteca<91>-Footnote-696358758
Ref: Biblioteca<91>-Footnote-706358824
Ref: Biblioteca<91>-Footnote-716358890
Ref: Biblioteca<91>-Footnote-726358956
Ref: Biblioteca<91>-Footnote-736359022
Ref: Biblioteca<91>-Footnote-746359088
Ref: Biblioteca<91>-Footnote-756359154
Ref: Biblioteca<91>-Footnote-766359220
Ref: Biblioteca<91>-Footnote-776359286
Ref: Biblioteca<91>-Footnote-786359352
Ref: Biblioteca<91>-Footnote-796359418
Ref: Biblioteca<91>-Footnote-806359484
Ref: Biblioteca<91>-Footnote-816359550
Ref: Biblioteca<91>-Footnote-826359616
Ref: Biblioteca<91>-Footnote-836359682
Ref: Biblioteca<91>-Footnote-846359748
Ref: Biblioteca<91>-Footnote-856359814
Ref: Biblioteca<91>-Footnote-866359880
Ref: Biblioteca<91>-Footnote-876359946
Ref: Biblioteca<91>-Footnote-886360012
Ref: Biblioteca<91>-Footnote-896360078
Ref: Biblioteca<91>-Footnote-906360144
Ref: Biblioteca<91>-Footnote-916360210
Ref: Biblioteca<91>-Footnote-926360276
Ref: Biblioteca<91>-Footnote-936360342
Ref: Biblioteca<91>-Footnote-946360408
Ref: Biblioteca<91>-Footnote-956360474
Ref: Biblioteca<91>-Footnote-966360540
Ref: Biblioteca<91>-Footnote-976360606
Ref: Biblioteca<91>-Footnote-986360672
Ref: Biblioteca<91>-Footnote-996360738
Ref: Biblioteca<91>-Footnote-1006360804
Ref: Biblioteca<91>-Footnote-1016360871
Ref: Biblioteca<91>-Footnote-1026360937
Ref: Biblioteca<91>-Footnote-1036361004
Ref: Biblioteca<91>-Footnote-1046361071
Ref: Biblioteca<91>-Footnote-1056361138
Ref: Biblioteca<91>-Footnote-1066361205
Ref: Biblioteca<91>-Footnote-1076361272
Ref: Biblioteca<91>-Footnote-1086361339
Ref: Biblioteca<91>-Footnote-1096361406
Ref: Biblioteca<91>-Footnote-1106361473
Ref: Biblioteca<91>-Footnote-1116361540
Ref: Biblioteca<91>-Footnote-1126361607
Ref: Biblioteca<91>-Footnote-1136361674
Ref: Biblioteca<91>-Footnote-1146361741
Ref: Biblioteca<91>-Footnote-1156361808
Ref: Biblioteca<91>-Footnote-1166361875
Ref: Biblioteca<91>-Footnote-1176361942
Ref: Biblioteca<91>-Footnote-1186362009
Ref: Biblioteca<91>-Footnote-1196362076
Ref: Biblioteca<91>-Footnote-1206362143
Node: IDLE<58>6362210
Ref: whatsnew/changelog id7796362337
Ref: 1e1a6362337
Ref: IDLE<58>-Footnote-16364700
Ref: IDLE<58>-Footnote-26364764
Ref: IDLE<58>-Footnote-36364829
Ref: IDLE<58>-Footnote-46364894
Ref: IDLE<58>-Footnote-56364959
Ref: IDLE<58>-Footnote-66365024
Ref: IDLE<58>-Footnote-76365089
Ref: IDLE<58>-Footnote-86365154
Ref: IDLE<58>-Footnote-96365219
Ref: IDLE<58>-Footnote-106365284
Ref: IDLE<58>-Footnote-116365350
Ref: IDLE<58>-Footnote-126365416
Ref: IDLE<58>-Footnote-136365482
Ref: IDLE<58>-Footnote-146365548
Ref: IDLE<58>-Footnote-156365614
Node: Documentação<77>6365680
Ref: whatsnew/changelog id7806365803
Ref: 1e1b6365803
Ref: Documentação<77>-Footnote-16366763
Ref: Documentação<77>-Footnote-26366828
Ref: Documentação<77>-Footnote-36366893
Ref: Documentação<77>-Footnote-46366935
Ref: Documentação<77>-Footnote-56367000
Ref: Documentação<77>-Footnote-66367064
Ref: Documentação<77>-Footnote-76367129
Ref: Documentação<77>-Footnote-86367194
Node: Testes<80>6367259
Ref: whatsnew/changelog id7816367390
Ref: 1e1c6367390
Ref: Testes<80>-Footnote-16368267
Ref: Testes<80>-Footnote-26368332
Ref: Testes<80>-Footnote-36368397
Ref: Testes<80>-Footnote-46368462
Ref: Testes<80>-Footnote-56368527
Ref: Testes<80>-Footnote-66368592
Ref: Testes<80>-Footnote-76368657
Node: Construção<86>6368722
Ref: whatsnew/changelog id7826368846
Ref: 1e1d6368846
Ref: Construção<86>-Footnote-16371386
Ref: Construção<86>-Footnote-26371451
Ref: Construção<86>-Footnote-36371516
Ref: Construção<86>-Footnote-46371581
Ref: Construção<86>-Footnote-56371646
Ref: Construção<86>-Footnote-66371711
Ref: Construção<86>-Footnote-76371776
Ref: Construção<86>-Footnote-86371841
Ref: Construção<86>-Footnote-96371906
Ref: Construção<86>-Footnote-106371971
Ref: Construção<86>-Footnote-116372037
Ref: Construção<86>-Footnote-126372103
Ref: Construção<86>-Footnote-136372169
Ref: Construção<86>-Footnote-146372235
Ref: Construção<86>-Footnote-156372301
Ref: Construção<86>-Footnote-166372367
Ref: Construção<86>-Footnote-176372433
Node: Windows<76>6372499
Ref: whatsnew/changelog id7836372634
Ref: 1e1e6372634
Ref: Windows<76>-Footnote-16373344
Ref: Windows<76>-Footnote-26373409
Ref: Windows<76>-Footnote-36373474
Ref: Windows<76>-Footnote-46373539
Ref: Windows<76>-Footnote-56373604
Ref: Windows<76>-Footnote-66373669
Node: Ferramentas/Demos<55>6373734
Ref: whatsnew/changelog id7846373844
Ref: 1e1f6373844
Ref: Ferramentas/Demos<55>-Footnote-16374480
Ref: Ferramentas/Demos<55>-Footnote-26374545
Ref: Ferramentas/Demos<55>-Footnote-36374610
Ref: Ferramentas/Demos<55>-Footnote-46374675
Node: Python 3 5 1 final6374740
Ref: whatsnew/changelog python-3-5-1-final6374886
Ref: 1e206374886
Node: Núcleo e embutidos<91>6375060
Ref: whatsnew/changelog id7856375158
Ref: 1e216375158
Ref: Núcleo e embutidos<91>-Footnote-16375347
Node: Windows<77>6375412
Ref: whatsnew/changelog id7866375510
Ref: 1e226375510
Ref: Windows<77>-Footnote-16375702
Node: Python 3 5 1 release candidate 16375767
Ref: whatsnew/changelog python-3-5-1-release-candidate-16375899
Ref: 1e236375899
Node: Núcleo e embutidos<92>6376287
Ref: whatsnew/changelog id7876376402
Ref: 1e246376402
Ref: Núcleo e embutidos<92>-Footnote-16379553
Ref: Núcleo e embutidos<92>-Footnote-26379618
Ref: Núcleo e embutidos<92>-Footnote-36379683
Ref: Núcleo e embutidos<92>-Footnote-46379748
Ref: Núcleo e embutidos<92>-Footnote-56379813
Ref: Núcleo e embutidos<92>-Footnote-66379878
Ref: Núcleo e embutidos<92>-Footnote-76379943
Ref: Núcleo e embutidos<92>-Footnote-86380008
Ref: Núcleo e embutidos<92>-Footnote-96380073
Ref: Núcleo e embutidos<92>-Footnote-106380138
Ref: Núcleo e embutidos<92>-Footnote-116380204
Ref: Núcleo e embutidos<92>-Footnote-126380270
Ref: Núcleo e embutidos<92>-Footnote-136380336
Ref: Núcleo e embutidos<92>-Footnote-146380402
Ref: Núcleo e embutidos<92>-Footnote-156380468
Ref: Núcleo e embutidos<92>-Footnote-166380534
Ref: Núcleo e embutidos<92>-Footnote-176380600
Ref: Núcleo e embutidos<92>-Footnote-186380666
Ref: Núcleo e embutidos<92>-Footnote-196380732
Node: Biblioteca<92>6380798
Ref: whatsnew/changelog id7886380930
Ref: 1e256380930
Ref: Biblioteca<92>-Footnote-16391316
Ref: Biblioteca<92>-Footnote-26391381
Ref: Biblioteca<92>-Footnote-36391446
Ref: Biblioteca<92>-Footnote-46391511
Ref: Biblioteca<92>-Footnote-56391575
Ref: Biblioteca<92>-Footnote-66391640
Ref: Biblioteca<92>-Footnote-76391705
Ref: Biblioteca<92>-Footnote-86391770
Ref: Biblioteca<92>-Footnote-96391835
Ref: Biblioteca<92>-Footnote-106391900
Ref: Biblioteca<92>-Footnote-116391966
Ref: Biblioteca<92>-Footnote-126392032
Ref: Biblioteca<92>-Footnote-136392098
Ref: Biblioteca<92>-Footnote-146392164
Ref: Biblioteca<92>-Footnote-156392230
Ref: Biblioteca<92>-Footnote-166392296
Ref: Biblioteca<92>-Footnote-176392362
Ref: Biblioteca<92>-Footnote-186392428
Ref: Biblioteca<92>-Footnote-196392494
Ref: Biblioteca<92>-Footnote-206392560
Ref: Biblioteca<92>-Footnote-216392626
Ref: Biblioteca<92>-Footnote-226392692
Ref: Biblioteca<92>-Footnote-236392758
Ref: Biblioteca<92>-Footnote-246392824
Ref: Biblioteca<92>-Footnote-256392890
Ref: Biblioteca<92>-Footnote-266392956
Ref: Biblioteca<92>-Footnote-276393022
Ref: Biblioteca<92>-Footnote-286393088
Ref: Biblioteca<92>-Footnote-296393154
Ref: Biblioteca<92>-Footnote-306393220
Ref: Biblioteca<92>-Footnote-316393286
Ref: Biblioteca<92>-Footnote-326393352
Ref: Biblioteca<92>-Footnote-336393418
Ref: Biblioteca<92>-Footnote-346393484
Ref: Biblioteca<92>-Footnote-356393550
Ref: Biblioteca<92>-Footnote-366393616
Ref: Biblioteca<92>-Footnote-376393682
Ref: Biblioteca<92>-Footnote-386393748
Ref: Biblioteca<92>-Footnote-396393814
Ref: Biblioteca<92>-Footnote-406393880
Ref: Biblioteca<92>-Footnote-416393946
Ref: Biblioteca<92>-Footnote-426394012
Ref: Biblioteca<92>-Footnote-436394078
Ref: Biblioteca<92>-Footnote-446394144
Ref: Biblioteca<92>-Footnote-456394210
Ref: Biblioteca<92>-Footnote-466394276
Ref: Biblioteca<92>-Footnote-476394342
Ref: Biblioteca<92>-Footnote-486394408
Ref: Biblioteca<92>-Footnote-496394474
Ref: Biblioteca<92>-Footnote-506394540
Ref: Biblioteca<92>-Footnote-516394606
Ref: Biblioteca<92>-Footnote-526394672
Ref: Biblioteca<92>-Footnote-536394738
Ref: Biblioteca<92>-Footnote-546394804
Ref: Biblioteca<92>-Footnote-556394870
Ref: Biblioteca<92>-Footnote-566394936
Ref: Biblioteca<92>-Footnote-576395002
Ref: Biblioteca<92>-Footnote-586395068
Ref: Biblioteca<92>-Footnote-596395134
Ref: Biblioteca<92>-Footnote-606395200
Ref: Biblioteca<92>-Footnote-616395266
Ref: Biblioteca<92>-Footnote-626395332
Ref: Biblioteca<92>-Footnote-636395398
Ref: Biblioteca<92>-Footnote-646395464
Ref: Biblioteca<92>-Footnote-656395530
Ref: Biblioteca<92>-Footnote-666395596
Ref: Biblioteca<92>-Footnote-676395662
Ref: Biblioteca<92>-Footnote-686395728
Ref: Biblioteca<92>-Footnote-696395794
Ref: Biblioteca<92>-Footnote-706395860
Node: IDLE<59>6395926
Ref: whatsnew/changelog id7896396053
Ref: 1e266396053
Ref: IDLE<59>-Footnote-16401006
Ref: IDLE<59>-Footnote-26401071
Ref: IDLE<59>-Footnote-36401136
Ref: IDLE<59>-Footnote-46401201
Ref: IDLE<59>-Footnote-56401266
Ref: IDLE<59>-Footnote-66401331
Ref: IDLE<59>-Footnote-76401396
Ref: IDLE<59>-Footnote-86401461
Ref: IDLE<59>-Footnote-96401526
Ref: IDLE<59>-Footnote-106401591
Ref: IDLE<59>-Footnote-116401657
Ref: IDLE<59>-Footnote-126401723
Ref: IDLE<59>-Footnote-136401789
Ref: IDLE<59>-Footnote-146401855
Ref: IDLE<59>-Footnote-156401921
Ref: IDLE<59>-Footnote-166401987
Ref: IDLE<59>-Footnote-176402053
Ref: IDLE<59>-Footnote-186402119
Ref: IDLE<59>-Footnote-196402185
Ref: IDLE<59>-Footnote-206402251
Ref: IDLE<59>-Footnote-216402317
Ref: IDLE<59>-Footnote-226402383
Ref: IDLE<59>-Footnote-236402449
Ref: IDLE<59>-Footnote-246402515
Ref: IDLE<59>-Footnote-256402581
Node: Documentação<78>6402647
Ref: whatsnew/changelog id7906402770
Ref: 1e276402770
Ref: Documentação<78>-Footnote-16403853
Ref: Documentação<78>-Footnote-26403918
Ref: Documentação<78>-Footnote-36403983
Ref: Documentação<78>-Footnote-46404048
Ref: Documentação<78>-Footnote-56404113
Ref: Documentação<78>-Footnote-66404178
Node: Testes<81>6404243
Ref: whatsnew/changelog id7916404374
Ref: 1e286404374
Ref: Testes<81>-Footnote-16404885
Ref: Testes<81>-Footnote-26404950
Ref: Testes<81>-Footnote-36405015
Node: Construção<87>6405080
Ref: whatsnew/changelog id7926405204
Ref: 1e296405204
Ref: Construção<87>-Footnote-16405643
Ref: Construção<87>-Footnote-26405708
Ref: Construção<87>-Footnote-36405773
Node: Windows<78>6405838
Ref: whatsnew/changelog id7936405973
Ref: 1e2a6405973
Ref: Windows<78>-Footnote-16407248
Ref: Windows<78>-Footnote-26407313
Ref: Windows<78>-Footnote-36407378
Ref: Windows<78>-Footnote-46407443
Ref: Windows<78>-Footnote-56407508
Ref: Windows<78>-Footnote-66407573
Ref: Windows<78>-Footnote-76407638
Ref: Windows<78>-Footnote-86407703
Ref: Windows<78>-Footnote-96407768
Ref: Windows<78>-Footnote-106407833
Ref: Windows<78>-Footnote-116407899
Ref: Windows<78>-Footnote-126407965
Ref: Windows<78>-Footnote-136408031
Ref: Windows<78>-Footnote-146408097
Node: Ferramentas/Demos<56>6408163
Ref: whatsnew/changelog id7946408273
Ref: 1e2b6408273
Ref: Ferramentas/Demos<56>-Footnote-16408437
Node: Python 3 5 0 final6408502
Ref: whatsnew/changelog python-3-5-0-final6408648
Ref: 1e2c6408648
Node: Construção<88>6408784
Ref: whatsnew/changelog id7956408855
Ref: 1e2d6408855
Ref: Construção<88>-Footnote-16409045
Node: Python 3 5 0 release candidate 46409110
Ref: whatsnew/changelog python-3-5-0-release-candidate-46409256
Ref: 1e2e6409256
Node: Biblioteca<93>6409450
Ref: whatsnew/changelog id7966409558
Ref: 1e2f6409558
Ref: Biblioteca<93>-Footnote-16409695
Node: Construção<89>6409760
Ref: whatsnew/changelog id7976409868
Ref: 1e306409868
Ref: Construção<89>-Footnote-16410064
Node: Python 3 5 0 release candidate 36410129
Ref: whatsnew/changelog python-3-5-0-release-candidate-36410289
Ref: 1e316410289
Node: Núcleo e embutidos<93>6410497
Ref: whatsnew/changelog id7986410612
Ref: 1e326410612
Ref: Núcleo e embutidos<93>-Footnote-16410985
Ref: Núcleo e embutidos<93>-Footnote-26411050
Ref: Núcleo e embutidos<93>-Footnote-36411115
Ref: Núcleo e embutidos<93>-Footnote-46411180
Node: Biblioteca<94>6411222
Ref: whatsnew/changelog id7996411337
Ref: 1e336411337
Ref: Biblioteca<94>-Footnote-16412119
Ref: Biblioteca<94>-Footnote-26412184
Ref: Biblioteca<94>-Footnote-36412249
Ref: Biblioteca<94>-Footnote-46412314
Ref: Biblioteca<94>-Footnote-56412379
Node: Python 3 5 0 release candidate 26412444
Ref: whatsnew/changelog python-3-5-0-release-candidate-26412604
Ref: 1e346412604
Node: Núcleo e embutidos<94>6412812
Ref: whatsnew/changelog id8006412927
Ref: 1e356412927
Ref: Núcleo e embutidos<94>-Footnote-16413476
Ref: Núcleo e embutidos<94>-Footnote-26413541
Ref: Núcleo e embutidos<94>-Footnote-36413606
Node: Biblioteca<95>6413671
Ref: whatsnew/changelog id8016413786
Ref: 1e366413786
Ref: Biblioteca<95>-Footnote-16414075
Ref: Biblioteca<95>-Footnote-26414140
Ref: Biblioteca<95>-Footnote-36414205
Node: Python 3 5 0 release candidate 16414270
Ref: whatsnew/changelog python-3-5-0-release-candidate-16414417
Ref: 1e376414417
Node: Núcleo e embutidos<95>6414703
Ref: whatsnew/changelog id8026414818
Ref: 1e386414818
Ref: Núcleo e embutidos<95>-Footnote-16415001
Node: Biblioteca<96>6415066
Ref: whatsnew/changelog id8036415198
Ref: 1e396415198
Ref: Biblioteca<96>-Footnote-16416788
Ref: Biblioteca<96>-Footnote-26416853
Ref: Biblioteca<96>-Footnote-36416918
Ref: Biblioteca<96>-Footnote-46416983
Ref: Biblioteca<96>-Footnote-56417047
Ref: Biblioteca<96>-Footnote-66417112
Ref: Biblioteca<96>-Footnote-76417177
Ref: Biblioteca<96>-Footnote-86417242
Ref: Biblioteca<96>-Footnote-96417307
Ref: Biblioteca<96>-Footnote-106417372
Ref: Biblioteca<96>-Footnote-116417438
Ref: Biblioteca<96>-Footnote-126417504
Ref: Biblioteca<96>-Footnote-136417570
Ref: Biblioteca<96>-Footnote-146417636
Ref: Biblioteca<96>-Footnote-156417702
Node: IDLE<60>6417768
Ref: whatsnew/changelog id8046417895
Ref: 1e3a6417895
Ref: IDLE<60>-Footnote-16418648
Ref: IDLE<60>-Footnote-26418713
Ref: IDLE<60>-Footnote-36418778
Ref: IDLE<60>-Footnote-46418843
Node: Documentação<79>6418908
Ref: whatsnew/changelog id8056419031
Ref: 1e3b6419031
Ref: Documentação<79>-Footnote-16419693
Ref: Documentação<79>-Footnote-26419758
Ref: Documentação<79>-Footnote-36419823
Ref: Documentação<79>-Footnote-46419888
Node: Testes<82>6419953
Ref: whatsnew/changelog id8066420059
Ref: 1e3c6420059
Ref: Testes<82>-Footnote-16420301
Node: Python 3 5 0 beta 46420366
Ref: whatsnew/changelog python-3-5-0-beta-46420500
Ref: 1e3d6420500
Node: Núcleo e embutidos<96>6420716
Ref: whatsnew/changelog id8076420818
Ref: 1e3e6420818
Ref: Núcleo e embutidos<96>-Footnote-16421627
Ref: Núcleo e embutidos<96>-Footnote-26421692
Ref: Núcleo e embutidos<96>-Footnote-36421757
Ref: Núcleo e embutidos<96>-Footnote-46421799
Ref: Núcleo e embutidos<96>-Footnote-56421864
Ref: Núcleo e embutidos<96>-Footnote-66421929
Ref: Núcleo e embutidos<96>-Footnote-76421994
Ref: Núcleo e embutidos<96>-Footnote-86422059
Node: Biblioteca<97>6422124
Ref: whatsnew/changelog id8086422251
Ref: 1e3f6422251
Ref: Biblioteca<97>-Footnote-16424540
Ref: Biblioteca<97>-Footnote-26424605
Ref: Biblioteca<97>-Footnote-36424670
Ref: Biblioteca<97>-Footnote-46424735
Ref: Biblioteca<97>-Footnote-56424800
Ref: Biblioteca<97>-Footnote-66424865
Ref: Biblioteca<97>-Footnote-76424930
Ref: Biblioteca<97>-Footnote-86424995
Ref: Biblioteca<97>-Footnote-96425060
Ref: Biblioteca<97>-Footnote-106425125
Ref: Biblioteca<97>-Footnote-116425191
Ref: Biblioteca<97>-Footnote-126425257
Ref: Biblioteca<97>-Footnote-136425323
Ref: Biblioteca<97>-Footnote-146425389
Ref: Biblioteca<97>-Footnote-156425455
Ref: Biblioteca<97>-Footnote-166425521
Ref: Biblioteca<97>-Footnote-176425587
Ref: Biblioteca<97>-Footnote-186425653
Ref: Biblioteca<97>-Footnote-196425719
Node: Construção<90>6425785
Ref: whatsnew/changelog id8096425880
Ref: 1e406425880
Ref: Construção<90>-Footnote-16426057
Node: Python 3 5 0 beta 36426122
Ref: whatsnew/changelog python-3-5-0-beta-36426243
Ref: 1e416426243
Node: Núcleo e embutidos<97>6426519
Ref: whatsnew/changelog id8106426621
Ref: 1e426426621
Ref: Núcleo e embutidos<97>-Footnote-16427951
Ref: Núcleo e embutidos<97>-Footnote-26428016
Ref: Núcleo e embutidos<97>-Footnote-36428081
Ref: Núcleo e embutidos<97>-Footnote-46428146
Ref: Núcleo e embutidos<97>-Footnote-56428188
Ref: Núcleo e embutidos<97>-Footnote-66428253
Node: Biblioteca<98>6428318
Ref: whatsnew/changelog id8116428439
Ref: 1e436428439
Ref: Biblioteca<98>-Footnote-16430407
Ref: Biblioteca<98>-Footnote-26430472
Ref: Biblioteca<98>-Footnote-36430537
Ref: Biblioteca<98>-Footnote-46430602
Ref: Biblioteca<98>-Footnote-56430667
Ref: Biblioteca<98>-Footnote-66430732
Ref: Biblioteca<98>-Footnote-76430797
Ref: Biblioteca<98>-Footnote-86430862
Ref: Biblioteca<98>-Footnote-96430927
Ref: Biblioteca<98>-Footnote-106430992
Ref: Biblioteca<98>-Footnote-116431058
Ref: Biblioteca<98>-Footnote-126431124
Ref: Biblioteca<98>-Footnote-136431190
Ref: Biblioteca<98>-Footnote-146431256
Ref: Biblioteca<98>-Footnote-156431322
Ref: Biblioteca<98>-Footnote-166431388
Ref: Biblioteca<98>-Footnote-176431454
Ref: Biblioteca<98>-Footnote-186431520
Node: Testes<83>6431586
Ref: whatsnew/changelog id8126431702
Ref: 1e446431702
Ref: Testes<83>-Footnote-16431986
Ref: Testes<83>-Footnote-26432051
Node: Documentação<80>6432116
Ref: whatsnew/changelog id8136432234
Ref: 1e456432234
Ref: Documentação<80>-Footnote-16432578
Ref: Documentação<80>-Footnote-26432643
Node: Construção<91>6432708
Ref: whatsnew/changelog id8146432807
Ref: 1e466432807
Ref: Construção<91>-Footnote-16432984
Node: Python 3 5 0 beta 26433049
Ref: whatsnew/changelog python-3-5-0-beta-26433170
Ref: 1e476433170
Node: Núcleo e embutidos<98>6433352
Ref: whatsnew/changelog id8156433454
Ref: 1e486433454
Ref: Núcleo e embutidos<98>-Footnote-16434210
Ref: Núcleo e embutidos<98>-Footnote-26434275
Ref: Núcleo e embutidos<98>-Footnote-36434340
Ref: Núcleo e embutidos<98>-Footnote-46434405
Ref: Núcleo e embutidos<98>-Footnote-56434470
Node: Biblioteca<99>6434535
Ref: whatsnew/changelog id8166434637
Ref: 1e496434637
Ref: Biblioteca<99>-Footnote-16435350
Ref: Biblioteca<99>-Footnote-26435415
Ref: Biblioteca<99>-Footnote-36435480
Ref: Biblioteca<99>-Footnote-46435522
Ref: Biblioteca<99>-Footnote-56435586
Ref: Biblioteca<99>-Footnote-66435651
Ref: Biblioteca<99>-Footnote-76435716
Node: Python 3 5 0 beta 16435781
Ref: whatsnew/changelog python-3-5-0-beta-16435903
Ref: 1e4a6435903
Node: Núcleo e embutidos<99>6436208
Ref: whatsnew/changelog id8176436311
Ref: 1e4b6436311
Ref: Núcleo e embutidos<99>-Footnote-16438187
Ref: Núcleo e embutidos<99>-Footnote-26438252
Ref: Núcleo e embutidos<99>-Footnote-36438317
Ref: Núcleo e embutidos<99>-Footnote-46438382
Ref: Núcleo e embutidos<99>-Footnote-56438447
Ref: Núcleo e embutidos<99>-Footnote-66438512
Ref: Núcleo e embutidos<99>-Footnote-76438577
Ref: Núcleo e embutidos<99>-Footnote-86438642
Ref: Núcleo e embutidos<99>-Footnote-96438707
Ref: Núcleo e embutidos<99>-Footnote-106438772
Ref: Núcleo e embutidos<99>-Footnote-116438837
Ref: Núcleo e embutidos<99>-Footnote-126438903
Ref: Núcleo e embutidos<99>-Footnote-136438969
Ref: Núcleo e embutidos<99>-Footnote-146439035
Ref: Núcleo e embutidos<99>-Footnote-156439101
Ref: Núcleo e embutidos<99>-Footnote-166439167
Ref: Núcleo e embutidos<99>-Footnote-176439233
Ref: Núcleo e embutidos<99>-Footnote-186439298
Ref: Núcleo e embutidos<99>-Footnote-196439364
Node: Biblioteca<100>6439430
Ref: whatsnew/changelog id8186439550
Ref: 1e4c6439550
Ref: Biblioteca<100>-Footnote-16447218
Ref: Biblioteca<100>-Footnote-26447283
Ref: Biblioteca<100>-Footnote-36447348
Ref: Biblioteca<100>-Footnote-46447413
Ref: Biblioteca<100>-Footnote-56447478
Ref: Biblioteca<100>-Footnote-66447543
Ref: Biblioteca<100>-Footnote-76447608
Ref: Biblioteca<100>-Footnote-86447673
Ref: Biblioteca<100>-Footnote-96447738
Ref: Biblioteca<100>-Footnote-106447803
Ref: Biblioteca<100>-Footnote-116447868
Ref: Biblioteca<100>-Footnote-126447934
Ref: Biblioteca<100>-Footnote-136448000
Ref: Biblioteca<100>-Footnote-146448066
Ref: Biblioteca<100>-Footnote-156448131
Ref: Biblioteca<100>-Footnote-166448197
Ref: Biblioteca<100>-Footnote-176448263
Ref: Biblioteca<100>-Footnote-186448329
Ref: Biblioteca<100>-Footnote-196448395
Ref: Biblioteca<100>-Footnote-206448461
Ref: Biblioteca<100>-Footnote-216448527
Ref: Biblioteca<100>-Footnote-226448593
Ref: Biblioteca<100>-Footnote-236448659
Ref: Biblioteca<100>-Footnote-246448725
Ref: Biblioteca<100>-Footnote-256448791
Ref: Biblioteca<100>-Footnote-266448856
Ref: Biblioteca<100>-Footnote-276448922
Ref: Biblioteca<100>-Footnote-286448988
Ref: Biblioteca<100>-Footnote-296449054
Ref: Biblioteca<100>-Footnote-306449120
Ref: Biblioteca<100>-Footnote-316449186
Ref: Biblioteca<100>-Footnote-326449252
Ref: Biblioteca<100>-Footnote-336449318
Ref: Biblioteca<100>-Footnote-346449384
Ref: Biblioteca<100>-Footnote-356449450
Ref: Biblioteca<100>-Footnote-366449516
Ref: Biblioteca<100>-Footnote-376449582
Ref: Biblioteca<100>-Footnote-386449648
Ref: Biblioteca<100>-Footnote-396449714
Ref: Biblioteca<100>-Footnote-406449780
Ref: Biblioteca<100>-Footnote-416449846
Ref: Biblioteca<100>-Footnote-426449911
Ref: Biblioteca<100>-Footnote-436449977
Ref: Biblioteca<100>-Footnote-446450043
Ref: Biblioteca<100>-Footnote-456450109
Ref: Biblioteca<100>-Footnote-466450175
Ref: Biblioteca<100>-Footnote-476450241
Ref: Biblioteca<100>-Footnote-486450307
Ref: Biblioteca<100>-Footnote-496450373
Ref: Biblioteca<100>-Footnote-506450439
Ref: Biblioteca<100>-Footnote-516450505
Ref: Biblioteca<100>-Footnote-526450571
Ref: Biblioteca<100>-Footnote-536450637
Ref: Biblioteca<100>-Footnote-546450703
Ref: Biblioteca<100>-Footnote-556450769
Ref: Biblioteca<100>-Footnote-566450835
Node: IDLE<61>6450901
Ref: whatsnew/changelog id8196451008
Ref: 1e4d6451008
Ref: IDLE<61>-Footnote-16451177
Node: Testes<84>6451242
Ref: whatsnew/changelog id8206451352
Ref: 1e4e6451352
Ref: Testes<84>-Footnote-16451652
Ref: Testes<84>-Footnote-26451717
Node: Documentação<81>6451781
Ref: whatsnew/changelog id8216451904
Ref: 1e4f6451904
Ref: Documentação<81>-Footnote-16452311
Ref: Documentação<81>-Footnote-26452376
Ref: Documentação<81>-Footnote-36452441
Node: Ferramentas/Demos<57>6452506
Ref: whatsnew/changelog id8226452610
Ref: 1e506452610
Ref: Ferramentas/Demos<57>-Footnote-16453141
Ref: Ferramentas/Demos<57>-Footnote-26453206
Ref: Ferramentas/Demos<57>-Footnote-36453271
Ref: Ferramentas/Demos<57>-Footnote-46453336
Node: Python 3 5 0 alpha 46453401
Ref: whatsnew/changelog python-3-5-0-alpha-46453524
Ref: 1e516453524
Node: Núcleo e embutidos<100>6453830
Ref: whatsnew/changelog id8236453935
Ref: 1e526453935
Ref: Núcleo e embutidos<100>-Footnote-16455307
Ref: Núcleo e embutidos<100>-Footnote-26455372
Ref: Núcleo e embutidos<100>-Footnote-36455414
Ref: Núcleo e embutidos<100>-Footnote-46455479
Ref: Núcleo e embutidos<100>-Footnote-56455544
Ref: Núcleo e embutidos<100>-Footnote-66455586
Ref: Núcleo e embutidos<100>-Footnote-76455651
Ref: Núcleo e embutidos<100>-Footnote-86455716
Ref: Núcleo e embutidos<100>-Footnote-96455781
Ref: Núcleo e embutidos<100>-Footnote-106455846
Ref: Núcleo e embutidos<100>-Footnote-116455912
Node: Biblioteca<101>6455978
Ref: whatsnew/changelog id8246456108
Ref: 1e536456108
Ref: Biblioteca<101>-Footnote-16462831
Ref: Biblioteca<101>-Footnote-26462896
Ref: Biblioteca<101>-Footnote-36462961
Ref: Biblioteca<101>-Footnote-46463025
Ref: Biblioteca<101>-Footnote-56463090
Ref: Biblioteca<101>-Footnote-66463155
Ref: Biblioteca<101>-Footnote-76463219
Ref: Biblioteca<101>-Footnote-86463284
Ref: Biblioteca<101>-Footnote-96463349
Ref: Biblioteca<101>-Footnote-106463414
Ref: Biblioteca<101>-Footnote-116463480
Ref: Biblioteca<101>-Footnote-126463546
Ref: Biblioteca<101>-Footnote-136463612
Ref: Biblioteca<101>-Footnote-146463678
Ref: Biblioteca<101>-Footnote-156463744
Ref: Biblioteca<101>-Footnote-166463810
Ref: Biblioteca<101>-Footnote-176463876
Ref: Biblioteca<101>-Footnote-186463942
Ref: Biblioteca<101>-Footnote-196464008
Ref: Biblioteca<101>-Footnote-206464074
Ref: Biblioteca<101>-Footnote-216464140
Ref: Biblioteca<101>-Footnote-226464206
Ref: Biblioteca<101>-Footnote-236464272
Ref: Biblioteca<101>-Footnote-246464338
Ref: Biblioteca<101>-Footnote-256464404
Ref: Biblioteca<101>-Footnote-266464470
Ref: Biblioteca<101>-Footnote-276464536
Ref: Biblioteca<101>-Footnote-286464602
Ref: Biblioteca<101>-Footnote-296464668
Ref: Biblioteca<101>-Footnote-306464734
Ref: Biblioteca<101>-Footnote-316464799
Ref: Biblioteca<101>-Footnote-326464865
Ref: Biblioteca<101>-Footnote-336464931
Ref: Biblioteca<101>-Footnote-346464997
Ref: Biblioteca<101>-Footnote-356465063
Ref: Biblioteca<101>-Footnote-366465129
Ref: Biblioteca<101>-Footnote-376465195
Ref: Biblioteca<101>-Footnote-386465261
Ref: Biblioteca<101>-Footnote-396465327
Ref: Biblioteca<101>-Footnote-406465393
Ref: Biblioteca<101>-Footnote-416465459
Ref: Biblioteca<101>-Footnote-426465525
Ref: Biblioteca<101>-Footnote-436465568
Ref: Biblioteca<101>-Footnote-446465634
Ref: Biblioteca<101>-Footnote-456465700
Ref: Biblioteca<101>-Footnote-466465766
Ref: Biblioteca<101>-Footnote-476465832
Ref: Biblioteca<101>-Footnote-486465898
Node: Construção<92>6465964
Ref: whatsnew/changelog id8256466080
Ref: 1e546466080
Ref: Construção<92>-Footnote-16466377
Ref: Construção<92>-Footnote-26466442
Node: Testes<85>6466507
Ref: whatsnew/changelog id8266466629
Ref: 1e556466629
Ref: Testes<85>-Footnote-16466932
Ref: Testes<85>-Footnote-26466997
Node: Ferramentas/Demos<58>6467062
Ref: whatsnew/changelog id8276467177
Ref: 1e566467177
Ref: Ferramentas/Demos<58>-Footnote-16468223
Ref: Ferramentas/Demos<58>-Footnote-26468288
Ref: Ferramentas/Demos<58>-Footnote-36468353
Ref: Ferramentas/Demos<58>-Footnote-46468418
Ref: Ferramentas/Demos<58>-Footnote-56468483
Ref: Ferramentas/Demos<58>-Footnote-66468548
Node: API C<75>6468613
Ref: whatsnew/changelog id8286468709
Ref: 1e576468709
Ref: API C<75>-Footnote-16468864
Node: Python 3 5 0 alpha 36468929
Ref: whatsnew/changelog python-3-5-0-alpha-36469053
Ref: 1e586469053
Node: Núcleo e embutidos<101>6469339
Ref: whatsnew/changelog id8296469444
Ref: 1e596469444
Ref: Núcleo e embutidos<101>-Footnote-16470243
Ref: Núcleo e embutidos<101>-Footnote-26470308
Ref: Núcleo e embutidos<101>-Footnote-36470373
Ref: Núcleo e embutidos<101>-Footnote-46470438
Ref: Núcleo e embutidos<101>-Footnote-56470503
Ref: Núcleo e embutidos<101>-Footnote-66470568
Node: Biblioteca<102>6470633
Ref: whatsnew/changelog id8306470763
Ref: 1e5a6470763
Ref: Biblioteca<102>-Footnote-16477205
Ref: Biblioteca<102>-Footnote-26477270
Ref: Biblioteca<102>-Footnote-36477335
Ref: Biblioteca<102>-Footnote-46477400
Ref: Biblioteca<102>-Footnote-56477465
Ref: Biblioteca<102>-Footnote-66477530
Ref: Biblioteca<102>-Footnote-76477595
Ref: Biblioteca<102>-Footnote-86477660
Ref: Biblioteca<102>-Footnote-96477725
Ref: Biblioteca<102>-Footnote-106477790
Ref: Biblioteca<102>-Footnote-116477856
Ref: Biblioteca<102>-Footnote-126477922
Ref: Biblioteca<102>-Footnote-136477988
Ref: Biblioteca<102>-Footnote-146478054
Ref: Biblioteca<102>-Footnote-156478119
Ref: Biblioteca<102>-Footnote-166478185
Ref: Biblioteca<102>-Footnote-176478251
Ref: Biblioteca<102>-Footnote-186478317
Ref: Biblioteca<102>-Footnote-196478383
Ref: Biblioteca<102>-Footnote-206478449
Ref: Biblioteca<102>-Footnote-216478515
Ref: Biblioteca<102>-Footnote-226478581
Ref: Biblioteca<102>-Footnote-236478647
Ref: Biblioteca<102>-Footnote-246478713
Ref: Biblioteca<102>-Footnote-256478779
Ref: Biblioteca<102>-Footnote-266478845
Ref: Biblioteca<102>-Footnote-276478911
Ref: Biblioteca<102>-Footnote-286478977
Ref: Biblioteca<102>-Footnote-296479043
Ref: Biblioteca<102>-Footnote-306479109
Ref: Biblioteca<102>-Footnote-316479174
Ref: Biblioteca<102>-Footnote-326479240
Ref: Biblioteca<102>-Footnote-336479306
Ref: Biblioteca<102>-Footnote-346479372
Ref: Biblioteca<102>-Footnote-356479437
Ref: Biblioteca<102>-Footnote-366479503
Ref: Biblioteca<102>-Footnote-376479569
Ref: Biblioteca<102>-Footnote-386479635
Ref: Biblioteca<102>-Footnote-396479701
Ref: Biblioteca<102>-Footnote-406479767
Ref: Biblioteca<102>-Footnote-416479833
Ref: Biblioteca<102>-Footnote-426479899
Node: Construção<93>6479965
Ref: whatsnew/changelog id8316480081
Ref: 1e5b6480081
Ref: Construção<93>-Footnote-16480238
Node: Testes<86>6480303
Ref: whatsnew/changelog id8326480425
Ref: 1e5c6480425
Ref: Testes<86>-Footnote-16480652
Ref: Testes<86>-Footnote-26480717
Node: Ferramentas/Demos<59>6480782
Ref: whatsnew/changelog id8336480879
Ref: 1e5d6480879
Ref: Ferramentas/Demos<59>-Footnote-16481160
Node: Python 3 5 0 alpha 26481225
Ref: whatsnew/changelog python-3-5-0-alpha-26481349
Ref: 1e5e6481349
Node: Núcleo e embutidos<102>6481613
Ref: whatsnew/changelog id8346481718
Ref: 1e5f6481718
Ref: Núcleo e embutidos<102>-Footnote-16482019
Node: Biblioteca<103>6482084
Ref: whatsnew/changelog id8356482214
Ref: 1e606482214
Ref: Biblioteca<103>-Footnote-16486537
Ref: Biblioteca<103>-Footnote-26486602
Ref: Biblioteca<103>-Footnote-36486644
Ref: Biblioteca<103>-Footnote-46486709
Ref: Biblioteca<103>-Footnote-56486774
Ref: Biblioteca<103>-Footnote-66486839
Ref: Biblioteca<103>-Footnote-76486904
Ref: Biblioteca<103>-Footnote-86486969
Ref: Biblioteca<103>-Footnote-96487034
Ref: Biblioteca<103>-Footnote-106487098
Ref: Biblioteca<103>-Footnote-116487164
Ref: Biblioteca<103>-Footnote-126487230
Ref: Biblioteca<103>-Footnote-136487296
Ref: Biblioteca<103>-Footnote-146487362
Ref: Biblioteca<103>-Footnote-156487428
Ref: Biblioteca<103>-Footnote-166487494
Ref: Biblioteca<103>-Footnote-176487559
Ref: Biblioteca<103>-Footnote-186487626
Ref: Biblioteca<103>-Footnote-196487691
Ref: Biblioteca<103>-Footnote-206487757
Ref: Biblioteca<103>-Footnote-216487822
Ref: Biblioteca<103>-Footnote-226487888
Ref: Biblioteca<103>-Footnote-236487954
Ref: Biblioteca<103>-Footnote-246488020
Ref: Biblioteca<103>-Footnote-256488086
Ref: Biblioteca<103>-Footnote-266488152
Ref: Biblioteca<103>-Footnote-276488218
Ref: Biblioteca<103>-Footnote-286488284
Ref: Biblioteca<103>-Footnote-296488350
Ref: Biblioteca<103>-Footnote-306488416
Ref: Biblioteca<103>-Footnote-316488482
Ref: Biblioteca<103>-Footnote-326488548
Ref: Biblioteca<103>-Footnote-336488614
Ref: Biblioteca<103>-Footnote-346488680
Ref: Biblioteca<103>-Footnote-356488746
Ref: Biblioteca<103>-Footnote-366488812
Ref: Biblioteca<103>-Footnote-376488878
Node: Construção<94>6488944
Ref: whatsnew/changelog id8366489059
Ref: 1e616489059
Ref: Construção<94>-Footnote-16489342
Ref: Construção<94>-Footnote-26489407
Node: API C<76>6489472
Ref: whatsnew/changelog id8376489583
Ref: 1e626489583
Ref: API C<76>-Footnote-16489765
Node: Windows<79>6489830
Ref: whatsnew/changelog id8386489916
Ref: 1e636489916
Ref: Windows<79>-Footnote-16490213
Ref: Windows<79>-Footnote-26490278
Ref: Windows<79>-Footnote-36490320
Node: Python 3 5 0 alpha 16490385
Ref: whatsnew/changelog python-3-5-0-alpha-16490480
Ref: 1e646490480
Node: Núcleo e embutidos<103>6490866
Ref: whatsnew/changelog id8396490971
Ref: 1e656490971
Ref: Núcleo e embutidos<103>-Footnote-16500899
Ref: Núcleo e embutidos<103>-Footnote-26500964
Ref: Núcleo e embutidos<103>-Footnote-36501029
Ref: Núcleo e embutidos<103>-Footnote-46501094
Ref: Núcleo e embutidos<103>-Footnote-56501159
Ref: Núcleo e embutidos<103>-Footnote-66501224
Ref: Núcleo e embutidos<103>-Footnote-76501289
Ref: Núcleo e embutidos<103>-Footnote-86501354
Ref: Núcleo e embutidos<103>-Footnote-96501419
Ref: Núcleo e embutidos<103>-Footnote-106501484
Ref: Núcleo e embutidos<103>-Footnote-116501550
Ref: Núcleo e embutidos<103>-Footnote-126501616
Ref: Núcleo e embutidos<103>-Footnote-136501682
Ref: Núcleo e embutidos<103>-Footnote-146501748
Ref: Núcleo e embutidos<103>-Footnote-156501814
Ref: Núcleo e embutidos<103>-Footnote-166501880
Ref: Núcleo e embutidos<103>-Footnote-176501946
Ref: Núcleo e embutidos<103>-Footnote-186502012
Ref: Núcleo e embutidos<103>-Footnote-196502078
Ref: Núcleo e embutidos<103>-Footnote-206502144
Ref: Núcleo e embutidos<103>-Footnote-216502210
Ref: Núcleo e embutidos<103>-Footnote-226502276
Ref: Núcleo e embutidos<103>-Footnote-236502342
Ref: Núcleo e embutidos<103>-Footnote-246502408
Ref: Núcleo e embutidos<103>-Footnote-256502474
Ref: Núcleo e embutidos<103>-Footnote-266502540
Ref: Núcleo e embutidos<103>-Footnote-276502606
Ref: Núcleo e embutidos<103>-Footnote-286502672
Ref: Núcleo e embutidos<103>-Footnote-296502738
Ref: Núcleo e embutidos<103>-Footnote-306502804
Ref: Núcleo e embutidos<103>-Footnote-316502870
Ref: Núcleo e embutidos<103>-Footnote-326502936
Ref: Núcleo e embutidos<103>-Footnote-336503002
Ref: Núcleo e embutidos<103>-Footnote-346503070
Ref: Núcleo e embutidos<103>-Footnote-356503136
Ref: Núcleo e embutidos<103>-Footnote-366503202
Ref: Núcleo e embutidos<103>-Footnote-376503268
Ref: Núcleo e embutidos<103>-Footnote-386503334
Ref: Núcleo e embutidos<103>-Footnote-396503400
Ref: Núcleo e embutidos<103>-Footnote-406503466
Ref: Núcleo e embutidos<103>-Footnote-416503532
Ref: Núcleo e embutidos<103>-Footnote-426503598
Ref: Núcleo e embutidos<103>-Footnote-436503664
Ref: Núcleo e embutidos<103>-Footnote-446503730
Ref: Núcleo e embutidos<103>-Footnote-456503796
Ref: Núcleo e embutidos<103>-Footnote-466503862
Ref: Núcleo e embutidos<103>-Footnote-476503928
Ref: Núcleo e embutidos<103>-Footnote-486503994
Ref: Núcleo e embutidos<103>-Footnote-496504060
Ref: Núcleo e embutidos<103>-Footnote-506504126
Ref: Núcleo e embutidos<103>-Footnote-516504192
Ref: Núcleo e embutidos<103>-Footnote-526504258
Ref: Núcleo e embutidos<103>-Footnote-536504324
Ref: Núcleo e embutidos<103>-Footnote-546504390
Ref: Núcleo e embutidos<103>-Footnote-556504456
Ref: Núcleo e embutidos<103>-Footnote-566504522
Ref: Núcleo e embutidos<103>-Footnote-576504588
Ref: Núcleo e embutidos<103>-Footnote-586504654
Ref: Núcleo e embutidos<103>-Footnote-596504720
Ref: Núcleo e embutidos<103>-Footnote-606504786
Ref: Núcleo e embutidos<103>-Footnote-616504852
Ref: Núcleo e embutidos<103>-Footnote-626504918
Ref: Núcleo e embutidos<103>-Footnote-636504984
Ref: Núcleo e embutidos<103>-Footnote-646505050
Ref: Núcleo e embutidos<103>-Footnote-656505116
Ref: Núcleo e embutidos<103>-Footnote-666505182
Ref: Núcleo e embutidos<103>-Footnote-676505247
Ref: Núcleo e embutidos<103>-Footnote-686505313
Ref: Núcleo e embutidos<103>-Footnote-696505379
Ref: Núcleo e embutidos<103>-Footnote-706505445
Ref: Núcleo e embutidos<103>-Footnote-716505511
Ref: Núcleo e embutidos<103>-Footnote-726505577
Ref: Núcleo e embutidos<103>-Footnote-736505642
Node: Biblioteca<104>6505708
Ref: whatsnew/changelog id8406505830
Ref: 1e666505830
Ref: Biblioteca<104>-Footnote-16558368
Ref: Biblioteca<104>-Footnote-26558433
Ref: Biblioteca<104>-Footnote-36558498
Ref: Biblioteca<104>-Footnote-46558563
Ref: Biblioteca<104>-Footnote-56558628
Ref: Biblioteca<104>-Footnote-66558693
Ref: Biblioteca<104>-Footnote-76558758
Ref: Biblioteca<104>-Footnote-86558823
Ref: Biblioteca<104>-Footnote-96558888
Ref: Biblioteca<104>-Footnote-106558953
Ref: Biblioteca<104>-Footnote-116559019
Ref: Biblioteca<104>-Footnote-126559085
Ref: Biblioteca<104>-Footnote-136559151
Ref: Biblioteca<104>-Footnote-146559217
Ref: Biblioteca<104>-Footnote-156559283
Ref: Biblioteca<104>-Footnote-166559349
Ref: Biblioteca<104>-Footnote-176559415
Ref: Biblioteca<104>-Footnote-186559481
Ref: Biblioteca<104>-Footnote-196559547
Ref: Biblioteca<104>-Footnote-206559613
Ref: Biblioteca<104>-Footnote-216559679
Ref: Biblioteca<104>-Footnote-226559745
Ref: Biblioteca<104>-Footnote-236559811
Ref: Biblioteca<104>-Footnote-246559877
Ref: Biblioteca<104>-Footnote-256559943
Ref: Biblioteca<104>-Footnote-266560009
Ref: Biblioteca<104>-Footnote-276560075
Ref: Biblioteca<104>-Footnote-286560141
Ref: Biblioteca<104>-Footnote-296560207
Ref: Biblioteca<104>-Footnote-306560273
Ref: Biblioteca<104>-Footnote-316560339
Ref: Biblioteca<104>-Footnote-326560405
Ref: Biblioteca<104>-Footnote-336560471
Ref: Biblioteca<104>-Footnote-346560537
Ref: Biblioteca<104>-Footnote-356560603
Ref: Biblioteca<104>-Footnote-366560669
Ref: Biblioteca<104>-Footnote-376560735
Ref: Biblioteca<104>-Footnote-386560801
Ref: Biblioteca<104>-Footnote-396560867
Ref: Biblioteca<104>-Footnote-406560933
Ref: Biblioteca<104>-Footnote-416560999
Ref: Biblioteca<104>-Footnote-426561065
Ref: Biblioteca<104>-Footnote-436561131
Ref: Biblioteca<104>-Footnote-446561197
Ref: Biblioteca<104>-Footnote-456561263
Ref: Biblioteca<104>-Footnote-466561329
Ref: Biblioteca<104>-Footnote-476561395
Ref: Biblioteca<104>-Footnote-486561461
Ref: Biblioteca<104>-Footnote-496561527
Ref: Biblioteca<104>-Footnote-506561593
Ref: Biblioteca<104>-Footnote-516561659
Ref: Biblioteca<104>-Footnote-526561725
Ref: Biblioteca<104>-Footnote-536561791
Ref: Biblioteca<104>-Footnote-546561857
Ref: Biblioteca<104>-Footnote-556561923
Ref: Biblioteca<104>-Footnote-566561991
Ref: Biblioteca<104>-Footnote-576562057
Ref: Biblioteca<104>-Footnote-586562123
Ref: Biblioteca<104>-Footnote-596562189
Ref: Biblioteca<104>-Footnote-606562255
Ref: Biblioteca<104>-Footnote-616562321
Ref: Biblioteca<104>-Footnote-626562377
Ref: Biblioteca<104>-Footnote-636562443
Ref: Biblioteca<104>-Footnote-646562509
Ref: Biblioteca<104>-Footnote-656562575
Ref: Biblioteca<104>-Footnote-666562641
Ref: Biblioteca<104>-Footnote-676562707
Ref: Biblioteca<104>-Footnote-686562773
Ref: Biblioteca<104>-Footnote-696562839
Ref: Biblioteca<104>-Footnote-706562905
Ref: Biblioteca<104>-Footnote-716562971
Ref: Biblioteca<104>-Footnote-726563037
Ref: Biblioteca<104>-Footnote-736563103
Ref: Biblioteca<104>-Footnote-746563169
Ref: Biblioteca<104>-Footnote-756563235
Ref: Biblioteca<104>-Footnote-766563301
Ref: Biblioteca<104>-Footnote-776563367
Ref: Biblioteca<104>-Footnote-786563433
Ref: Biblioteca<104>-Footnote-796563499
Ref: Biblioteca<104>-Footnote-806563565
Ref: Biblioteca<104>-Footnote-816563631
Ref: Biblioteca<104>-Footnote-826563697
Ref: Biblioteca<104>-Footnote-836563763
Ref: Biblioteca<104>-Footnote-846563829
Ref: Biblioteca<104>-Footnote-856563895
Ref: Biblioteca<104>-Footnote-866563961
Ref: Biblioteca<104>-Footnote-876564027
Ref: Biblioteca<104>-Footnote-886564093
Ref: Biblioteca<104>-Footnote-896564159
Ref: Biblioteca<104>-Footnote-906564225
Ref: Biblioteca<104>-Footnote-916564291
Ref: Biblioteca<104>-Footnote-926564357
Ref: Biblioteca<104>-Footnote-936564423
Ref: Biblioteca<104>-Footnote-946564489
Ref: Biblioteca<104>-Footnote-956564555
Ref: Biblioteca<104>-Footnote-966564621
Ref: Biblioteca<104>-Footnote-976564686
Ref: Biblioteca<104>-Footnote-986564752
Ref: Biblioteca<104>-Footnote-996564818
Ref: Biblioteca<104>-Footnote-1006564884
Ref: Biblioteca<104>-Footnote-1016564950
Ref: Biblioteca<104>-Footnote-1026565017
Ref: Biblioteca<104>-Footnote-1036565084
Ref: Biblioteca<104>-Footnote-1046565151
Ref: Biblioteca<104>-Footnote-1056565218
Ref: Biblioteca<104>-Footnote-1066565285
Ref: Biblioteca<104>-Footnote-1076565352
Ref: Biblioteca<104>-Footnote-1086565418
Ref: Biblioteca<104>-Footnote-1096565484
Ref: Biblioteca<104>-Footnote-1106565551
Ref: Biblioteca<104>-Footnote-1116565618
Ref: Biblioteca<104>-Footnote-1126565685
Ref: Biblioteca<104>-Footnote-1136565752
Ref: Biblioteca<104>-Footnote-1146565819
Ref: Biblioteca<104>-Footnote-1156565886
Ref: Biblioteca<104>-Footnote-1166565953
Ref: Biblioteca<104>-Footnote-1176566020
Ref: Biblioteca<104>-Footnote-1186566087
Ref: Biblioteca<104>-Footnote-1196566154
Ref: Biblioteca<104>-Footnote-1206566221
Ref: Biblioteca<104>-Footnote-1216566288
Ref: Biblioteca<104>-Footnote-1226566357
Ref: Biblioteca<104>-Footnote-1236566424
Ref: Biblioteca<104>-Footnote-1246566491
Ref: Biblioteca<104>-Footnote-1256566558
Ref: Biblioteca<104>-Footnote-1266566625
Ref: Biblioteca<104>-Footnote-1276566692
Ref: Biblioteca<104>-Footnote-1286566759
Ref: Biblioteca<104>-Footnote-1296566826
Ref: Biblioteca<104>-Footnote-1306566893
Ref: Biblioteca<104>-Footnote-1316566960
Ref: Biblioteca<104>-Footnote-1326567027
Ref: Biblioteca<104>-Footnote-1336567094
Ref: Biblioteca<104>-Footnote-1346567161
Ref: Biblioteca<104>-Footnote-1356567228
Ref: Biblioteca<104>-Footnote-1366567295
Ref: Biblioteca<104>-Footnote-1376567362
Ref: Biblioteca<104>-Footnote-1386567429
Ref: Biblioteca<104>-Footnote-1396567496
Ref: Biblioteca<104>-Footnote-1406567563
Ref: Biblioteca<104>-Footnote-1416567630
Ref: Biblioteca<104>-Footnote-1426567697
Ref: Biblioteca<104>-Footnote-1436567763
Ref: Biblioteca<104>-Footnote-1446567829
Ref: Biblioteca<104>-Footnote-1456567896
Ref: Biblioteca<104>-Footnote-1466567963
Ref: Biblioteca<104>-Footnote-1476568030
Ref: Biblioteca<104>-Footnote-1486568097
Ref: Biblioteca<104>-Footnote-1496568164
Ref: Biblioteca<104>-Footnote-1506568231
Ref: Biblioteca<104>-Footnote-1516568298
Ref: Biblioteca<104>-Footnote-1526568365
Ref: Biblioteca<104>-Footnote-1536568432
Ref: Biblioteca<104>-Footnote-1546568499
Ref: Biblioteca<104>-Footnote-1556568566
Ref: Biblioteca<104>-Footnote-1566568633
Ref: Biblioteca<104>-Footnote-1576568700
Ref: Biblioteca<104>-Footnote-1586568766
Ref: Biblioteca<104>-Footnote-1596568833
Ref: Biblioteca<104>-Footnote-1606568900
Ref: Biblioteca<104>-Footnote-1616568967
Ref: Biblioteca<104>-Footnote-1626569034
Ref: Biblioteca<104>-Footnote-1636569101
Ref: Biblioteca<104>-Footnote-1646569168
Ref: Biblioteca<104>-Footnote-1656569235
Ref: Biblioteca<104>-Footnote-1666569302
Ref: Biblioteca<104>-Footnote-1676569369
Ref: Biblioteca<104>-Footnote-1686569436
Ref: Biblioteca<104>-Footnote-1696569503
Ref: Biblioteca<104>-Footnote-1706569570
Ref: Biblioteca<104>-Footnote-1716569637
Ref: Biblioteca<104>-Footnote-1726569704
Ref: Biblioteca<104>-Footnote-1736569771
Ref: Biblioteca<104>-Footnote-1746569838
Ref: Biblioteca<104>-Footnote-1756569905
Ref: Biblioteca<104>-Footnote-1766569972
Ref: Biblioteca<104>-Footnote-1776570039
Ref: Biblioteca<104>-Footnote-1786570106
Ref: Biblioteca<104>-Footnote-1796570173
Ref: Biblioteca<104>-Footnote-1806570240
Ref: Biblioteca<104>-Footnote-1816570307
Ref: Biblioteca<104>-Footnote-1826570374
Ref: Biblioteca<104>-Footnote-1836570441
Ref: Biblioteca<104>-Footnote-1846570508
Ref: Biblioteca<104>-Footnote-1856570575
Ref: Biblioteca<104>-Footnote-1866570642
Ref: Biblioteca<104>-Footnote-1876570709
Ref: Biblioteca<104>-Footnote-1886570776
Ref: Biblioteca<104>-Footnote-1896570842
Ref: Biblioteca<104>-Footnote-1906570909
Ref: Biblioteca<104>-Footnote-1916570976
Ref: Biblioteca<104>-Footnote-1926571043
Ref: Biblioteca<104>-Footnote-1936571110
Ref: Biblioteca<104>-Footnote-1946571177
Ref: Biblioteca<104>-Footnote-1956571244
Ref: Biblioteca<104>-Footnote-1966571311
Ref: Biblioteca<104>-Footnote-1976571377
Ref: Biblioteca<104>-Footnote-1986571444
Ref: Biblioteca<104>-Footnote-1996571511
Ref: Biblioteca<104>-Footnote-2006571578
Ref: Biblioteca<104>-Footnote-2016571645
Ref: Biblioteca<104>-Footnote-2026571712
Ref: Biblioteca<104>-Footnote-2036571779
Ref: Biblioteca<104>-Footnote-2046571845
Ref: Biblioteca<104>-Footnote-2056571912
Ref: Biblioteca<104>-Footnote-2066571979
Ref: Biblioteca<104>-Footnote-2076572046
Ref: Biblioteca<104>-Footnote-2086572113
Ref: Biblioteca<104>-Footnote-2096572180
Ref: Biblioteca<104>-Footnote-2106572247
Ref: Biblioteca<104>-Footnote-2116572314
Ref: Biblioteca<104>-Footnote-2126572381
Ref: Biblioteca<104>-Footnote-2136572448
Ref: Biblioteca<104>-Footnote-2146572515
Ref: Biblioteca<104>-Footnote-2156572582
Ref: Biblioteca<104>-Footnote-2166572649
Ref: Biblioteca<104>-Footnote-2176572716
Ref: Biblioteca<104>-Footnote-2186572783
Ref: Biblioteca<104>-Footnote-2196572850
Ref: Biblioteca<104>-Footnote-2206572917
Ref: Biblioteca<104>-Footnote-2216572984
Ref: Biblioteca<104>-Footnote-2226573051
Ref: Biblioteca<104>-Footnote-2236573118
Ref: Biblioteca<104>-Footnote-2246573185
Ref: Biblioteca<104>-Footnote-2256573251
Ref: Biblioteca<104>-Footnote-2266573317
Ref: Biblioteca<104>-Footnote-2276573384
Ref: Biblioteca<104>-Footnote-2286573451
Ref: Biblioteca<104>-Footnote-2296573518
Ref: Biblioteca<104>-Footnote-2306573585
Ref: Biblioteca<104>-Footnote-2316573652
Ref: Biblioteca<104>-Footnote-2326573719
Ref: Biblioteca<104>-Footnote-2336573786
Ref: Biblioteca<104>-Footnote-2346573853
Ref: Biblioteca<104>-Footnote-2356573920
Ref: Biblioteca<104>-Footnote-2366573987
Ref: Biblioteca<104>-Footnote-2376574054
Ref: Biblioteca<104>-Footnote-2386574121
Ref: Biblioteca<104>-Footnote-2396574188
Ref: Biblioteca<104>-Footnote-2406574255
Ref: Biblioteca<104>-Footnote-2416574322
Ref: Biblioteca<104>-Footnote-2426574389
Ref: Biblioteca<104>-Footnote-2436574456
Ref: Biblioteca<104>-Footnote-2446574523
Ref: Biblioteca<104>-Footnote-2456574590
Ref: Biblioteca<104>-Footnote-2466574656
Ref: Biblioteca<104>-Footnote-2476574723
Ref: Biblioteca<104>-Footnote-2486574790
Ref: Biblioteca<104>-Footnote-2496574857
Ref: Biblioteca<104>-Footnote-2506574924
Ref: Biblioteca<104>-Footnote-2516574991
Ref: Biblioteca<104>-Footnote-2526575058
Ref: Biblioteca<104>-Footnote-2536575125
Ref: Biblioteca<104>-Footnote-2546575192
Ref: Biblioteca<104>-Footnote-2556575259
Ref: Biblioteca<104>-Footnote-2566575326
Ref: Biblioteca<104>-Footnote-2576575393
Ref: Biblioteca<104>-Footnote-2586575460
Ref: Biblioteca<104>-Footnote-2596575527
Ref: Biblioteca<104>-Footnote-2606575594
Ref: Biblioteca<104>-Footnote-2616575661
Ref: Biblioteca<104>-Footnote-2626575728
Ref: Biblioteca<104>-Footnote-2636575795
Ref: Biblioteca<104>-Footnote-2646575862
Ref: Biblioteca<104>-Footnote-2656575929
Ref: Biblioteca<104>-Footnote-2666575996
Ref: Biblioteca<104>-Footnote-2676576063
Ref: Biblioteca<104>-Footnote-2686576130
Ref: Biblioteca<104>-Footnote-2696576197
Ref: Biblioteca<104>-Footnote-2706576264
Ref: Biblioteca<104>-Footnote-2716576331
Ref: Biblioteca<104>-Footnote-2726576398
Ref: Biblioteca<104>-Footnote-2736576465
Ref: Biblioteca<104>-Footnote-2746576532
Ref: Biblioteca<104>-Footnote-2756576599
Ref: Biblioteca<104>-Footnote-2766576666
Ref: Biblioteca<104>-Footnote-2776576733
Ref: Biblioteca<104>-Footnote-2786576799
Ref: Biblioteca<104>-Footnote-2796576866
Ref: Biblioteca<104>-Footnote-2806576933
Ref: Biblioteca<104>-Footnote-2816577000
Ref: Biblioteca<104>-Footnote-2826577067
Ref: Biblioteca<104>-Footnote-2836577134
Ref: Biblioteca<104>-Footnote-2846577201
Ref: Biblioteca<104>-Footnote-2856577268
Ref: Biblioteca<104>-Footnote-2866577335
Ref: Biblioteca<104>-Footnote-2876577402
Ref: Biblioteca<104>-Footnote-2886577469
Ref: Biblioteca<104>-Footnote-2896577536
Ref: Biblioteca<104>-Footnote-2906577580
Ref: Biblioteca<104>-Footnote-2916577647
Ref: Biblioteca<104>-Footnote-2926577714
Ref: Biblioteca<104>-Footnote-2936577781
Ref: Biblioteca<104>-Footnote-2946577848
Ref: Biblioteca<104>-Footnote-2956577915
Ref: Biblioteca<104>-Footnote-2966577982
Ref: Biblioteca<104>-Footnote-2976578049
Ref: Biblioteca<104>-Footnote-2986578116
Ref: Biblioteca<104>-Footnote-2996578183
Ref: Biblioteca<104>-Footnote-3006578250
Ref: Biblioteca<104>-Footnote-3016578317
Ref: Biblioteca<104>-Footnote-3026578384
Ref: Biblioteca<104>-Footnote-3036578451
Ref: Biblioteca<104>-Footnote-3046578518
Ref: Biblioteca<104>-Footnote-3056578585
Ref: Biblioteca<104>-Footnote-3066578652
Ref: Biblioteca<104>-Footnote-3076578719
Ref: Biblioteca<104>-Footnote-3086578786
Ref: Biblioteca<104>-Footnote-3096578853
Ref: Biblioteca<104>-Footnote-3106578920
Ref: Biblioteca<104>-Footnote-3116578987
Ref: Biblioteca<104>-Footnote-3126579054
Ref: Biblioteca<104>-Footnote-3136579121
Ref: Biblioteca<104>-Footnote-3146579188
Ref: Biblioteca<104>-Footnote-3156579255
Ref: Biblioteca<104>-Footnote-3166579321
Ref: Biblioteca<104>-Footnote-3176579388
Ref: Biblioteca<104>-Footnote-3186579455
Ref: Biblioteca<104>-Footnote-3196579522
Ref: Biblioteca<104>-Footnote-3206579589
Ref: Biblioteca<104>-Footnote-3216579656
Ref: Biblioteca<104>-Footnote-3226579723
Ref: Biblioteca<104>-Footnote-3236579790
Ref: Biblioteca<104>-Footnote-3246579857
Ref: Biblioteca<104>-Footnote-3256579924
Ref: Biblioteca<104>-Footnote-3266579991
Ref: Biblioteca<104>-Footnote-3276580058
Ref: Biblioteca<104>-Footnote-3286580125
Ref: Biblioteca<104>-Footnote-3296580192
Ref: Biblioteca<104>-Footnote-3306580259
Ref: Biblioteca<104>-Footnote-3316580326
Ref: Biblioteca<104>-Footnote-3326580393
Ref: Biblioteca<104>-Footnote-3336580460
Ref: Biblioteca<104>-Footnote-3346580527
Ref: Biblioteca<104>-Footnote-3356580594
Ref: Biblioteca<104>-Footnote-3366580660
Ref: Biblioteca<104>-Footnote-3376580727
Ref: Biblioteca<104>-Footnote-3386580794
Ref: Biblioteca<104>-Footnote-3396580851
Ref: Biblioteca<104>-Footnote-3406580918
Ref: Biblioteca<104>-Footnote-3416580985
Ref: Biblioteca<104>-Footnote-3426581052
Ref: Biblioteca<104>-Footnote-3436581119
Ref: Biblioteca<104>-Footnote-3446581186
Ref: Biblioteca<104>-Footnote-3456581253
Ref: Biblioteca<104>-Footnote-3466581320
Ref: Biblioteca<104>-Footnote-3476581387
Ref: Biblioteca<104>-Footnote-3486581454
Ref: Biblioteca<104>-Footnote-3496581521
Ref: Biblioteca<104>-Footnote-3506581588
Ref: Biblioteca<104>-Footnote-3516581655
Ref: Biblioteca<104>-Footnote-3526581722
Ref: Biblioteca<104>-Footnote-3536581789
Ref: Biblioteca<104>-Footnote-3546581856
Ref: Biblioteca<104>-Footnote-3556581923
Ref: Biblioteca<104>-Footnote-3566581990
Ref: Biblioteca<104>-Footnote-3576582057
Ref: Biblioteca<104>-Footnote-3586582124
Ref: Biblioteca<104>-Footnote-3596582191
Ref: Biblioteca<104>-Footnote-3606582258
Ref: Biblioteca<104>-Footnote-3616582325
Ref: Biblioteca<104>-Footnote-3626582392
Ref: Biblioteca<104>-Footnote-3636582459
Ref: Biblioteca<104>-Footnote-3646582526
Ref: Biblioteca<104>-Footnote-3656582593
Ref: Biblioteca<104>-Footnote-3666582660
Ref: Biblioteca<104>-Footnote-3676582727
Ref: Biblioteca<104>-Footnote-3686582794
Ref: Biblioteca<104>-Footnote-3696582861
Ref: Biblioteca<104>-Footnote-3706582928
Ref: Biblioteca<104>-Footnote-3716582995
Ref: Biblioteca<104>-Footnote-3726583062
Ref: Biblioteca<104>-Footnote-3736583128
Ref: Biblioteca<104>-Footnote-3746583195
Ref: Biblioteca<104>-Footnote-3756583262
Ref: Biblioteca<104>-Footnote-3766583329
Ref: Biblioteca<104>-Footnote-3776583396
Ref: Biblioteca<104>-Footnote-3786583463
Ref: Biblioteca<104>-Footnote-3796583530
Ref: Biblioteca<104>-Footnote-3806583597
Ref: Biblioteca<104>-Footnote-3816583664
Ref: Biblioteca<104>-Footnote-3826583731
Ref: Biblioteca<104>-Footnote-3836583798
Ref: Biblioteca<104>-Footnote-3846583865
Ref: Biblioteca<104>-Footnote-3856583932
Ref: Biblioteca<104>-Footnote-3866583998
Ref: Biblioteca<104>-Footnote-3876584065
Ref: Biblioteca<104>-Footnote-3886584132
Ref: Biblioteca<104>-Footnote-3896584199
Ref: Biblioteca<104>-Footnote-3906584266
Ref: Biblioteca<104>-Footnote-3916584331
Ref: Biblioteca<104>-Footnote-3926584398
Ref: Biblioteca<104>-Footnote-3936584465
Ref: Biblioteca<104>-Footnote-3946584532
Ref: Biblioteca<104>-Footnote-3956584599
Ref: Biblioteca<104>-Footnote-3966584666
Ref: Biblioteca<104>-Footnote-3976584733
Ref: Biblioteca<104>-Footnote-3986584800
Node: IDLE<62>6584867
Ref: whatsnew/changelog id8416584981
Ref: 1e676584981
Ref: IDLE<62>-Footnote-16588479
Ref: IDLE<62>-Footnote-26588544
Ref: IDLE<62>-Footnote-36588609
Ref: IDLE<62>-Footnote-46588673
Ref: IDLE<62>-Footnote-56588738
Ref: IDLE<62>-Footnote-66588802
Ref: IDLE<62>-Footnote-76588867
Ref: IDLE<62>-Footnote-86588932
Ref: IDLE<62>-Footnote-96588997
Ref: IDLE<62>-Footnote-106589062
Ref: IDLE<62>-Footnote-116589128
Ref: IDLE<62>-Footnote-126589194
Ref: IDLE<62>-Footnote-136589260
Ref: IDLE<62>-Footnote-146589326
Ref: IDLE<62>-Footnote-156589392
Ref: IDLE<62>-Footnote-166589458
Ref: IDLE<62>-Footnote-176589524
Ref: IDLE<62>-Footnote-186589590
Ref: IDLE<62>-Footnote-196589656
Ref: IDLE<62>-Footnote-206589722
Ref: IDLE<62>-Footnote-216589788
Ref: IDLE<62>-Footnote-226589854
Ref: IDLE<62>-Footnote-236589920
Ref: IDLE<62>-Footnote-246589963
Ref: IDLE<62>-Footnote-256590029
Ref: IDLE<62>-Footnote-266590095
Node: Construção<95>6590161
Ref: whatsnew/changelog id8426590269
Ref: 1e686590269
Ref: Construção<95>-Footnote-16593715
Ref: Construção<95>-Footnote-26593780
Ref: Construção<95>-Footnote-36593845
Ref: Construção<95>-Footnote-46593910
Ref: Construção<95>-Footnote-56593975
Ref: Construção<95>-Footnote-66594040
Ref: Construção<95>-Footnote-76594105
Ref: Construção<95>-Footnote-86594170
Ref: Construção<95>-Footnote-96594235
Ref: Construção<95>-Footnote-106594300
Ref: Construção<95>-Footnote-116594366
Ref: Construção<95>-Footnote-126594432
Ref: Construção<95>-Footnote-136594498
Ref: Construção<95>-Footnote-146594564
Ref: Construção<95>-Footnote-156594630
Ref: Construção<95>-Footnote-166594696
Ref: Construção<95>-Footnote-176594762
Ref: Construção<95>-Footnote-186594828
Ref: Construção<95>-Footnote-196594894
Ref: Construção<95>-Footnote-206594960
Ref: Construção<95>-Footnote-216595026
Ref: Construção<95>-Footnote-226595092
Ref: Construção<95>-Footnote-236595158
Ref: Construção<95>-Footnote-246595224
Ref: Construção<95>-Footnote-256595290
Ref: Construção<95>-Footnote-266595356
Node: API C<77>6595422
Ref: whatsnew/changelog id8436595540
Ref: 1e696595540
Ref: API C<77>-Footnote-16596907
Ref: API C<77>-Footnote-26596972
Ref: API C<77>-Footnote-36597037
Ref: API C<77>-Footnote-46597102
Ref: API C<77>-Footnote-56597167
Ref: API C<77>-Footnote-66597232
Ref: API C<77>-Footnote-76597297
Node: Documentação<82>6597362
Ref: whatsnew/changelog id8446597474
Ref: 1e6a6597474
Ref: Documentação<82>-Footnote-16599283
Ref: Documentação<82>-Footnote-26599348
Ref: Documentação<82>-Footnote-36599413
Ref: Documentação<82>-Footnote-46599478
Ref: Documentação<82>-Footnote-56599543
Ref: Documentação<82>-Footnote-66599607
Ref: Documentação<82>-Footnote-76599672
Ref: Documentação<82>-Footnote-86599737
Ref: Documentação<82>-Footnote-96599802
Ref: Documentação<82>-Footnote-106599867
Ref: Documentação<82>-Footnote-116599933
Node: Testes<87>6599999
Ref: whatsnew/changelog id8456600123
Ref: 1e6b6600123
Ref: Testes<87>-Footnote-16604318
Ref: Testes<87>-Footnote-26604383
Ref: Testes<87>-Footnote-36604448
Ref: Testes<87>-Footnote-46604513
Ref: Testes<87>-Footnote-56604578
Ref: Testes<87>-Footnote-66604643
Ref: Testes<87>-Footnote-76604708
Ref: Testes<87>-Footnote-86604773
Ref: Testes<87>-Footnote-96604838
Ref: Testes<87>-Footnote-106604903
Ref: Testes<87>-Footnote-116604969
Ref: Testes<87>-Footnote-126605035
Ref: Testes<87>-Footnote-136605101
Ref: Testes<87>-Footnote-146605167
Ref: Testes<87>-Footnote-156605232
Ref: Testes<87>-Footnote-166605298
Ref: Testes<87>-Footnote-176605364
Ref: Testes<87>-Footnote-186605430
Ref: Testes<87>-Footnote-196605496
Ref: Testes<87>-Footnote-206605562
Ref: Testes<87>-Footnote-216605628
Ref: Testes<87>-Footnote-226605694
Ref: Testes<87>-Footnote-236605760
Ref: Testes<87>-Footnote-246605826
Ref: Testes<87>-Footnote-256605892
Ref: Testes<87>-Footnote-266605958
Ref: Testes<87>-Footnote-276606024
Ref: Testes<87>-Footnote-286606090
Ref: Testes<87>-Footnote-296606156
Ref: Testes<87>-Footnote-306606222
Ref: Testes<87>-Footnote-316606288
Ref: Testes<87>-Footnote-326606354
Ref: Testes<87>-Footnote-336606420
Ref: Testes<87>-Footnote-346606486
Ref: Testes<87>-Footnote-356606552
Ref: Testes<87>-Footnote-366606618
Ref: Testes<87>-Footnote-376606684
Node: Ferramentas/Demos<60>6606750
Ref: whatsnew/changelog id8466606867
Ref: 1e6c6606867
Ref: Ferramentas/Demos<60>-Footnote-16608567
Ref: Ferramentas/Demos<60>-Footnote-26608632
Ref: Ferramentas/Demos<60>-Footnote-36608697
Ref: Ferramentas/Demos<60>-Footnote-46608762
Ref: Ferramentas/Demos<60>-Footnote-56608827
Ref: Ferramentas/Demos<60>-Footnote-66608892
Ref: Ferramentas/Demos<60>-Footnote-76608957
Ref: Ferramentas/Demos<60>-Footnote-86609022
Ref: Ferramentas/Demos<60>-Footnote-96609087
Ref: Ferramentas/Demos<60>-Footnote-106609152
Ref: Ferramentas/Demos<60>-Footnote-116609195
Ref: Ferramentas/Demos<60>-Footnote-126609261
Ref: Ferramentas/Demos<60>-Footnote-136609327
Node: Windows<80>6609393
Ref: whatsnew/changelog id8476609491
Ref: 1e6d6609491
Ref: Windows<80>-Footnote-16610759
Ref: Windows<80>-Footnote-26610824
Ref: Windows<80>-Footnote-36610889
Ref: Windows<80>-Footnote-46610954
Ref: Windows<80>-Footnote-56611019
Ref: Windows<80>-Footnote-66611084
Ref: Windows<80>-Footnote-76611149
Node: O tutorial do Python6611214
Ref: tutorial/index doc6611350
Ref: 1e6e6611350
Ref: tutorial/index no-color6611350
Ref: 1e6f6611350
Ref: tutorial/index the-python-tutorial6611350
Ref: 1e706611350
Ref: tutorial/index tutorial-index6611350
Ref: 1e716611350
Node: Abrindo seu apetite6614654
Ref: tutorial/appetite doc6614772
Ref: 1e756614772
Ref: tutorial/appetite tut-intro6614772
Ref: 1e766614772
Ref: tutorial/appetite whetting-your-appetite6614772
Ref: 1e776614772
Node: Utilizando o interpretador Python6619969
Ref: tutorial/interpreter doc6620131
Ref: 1e786620131
Ref: tutorial/interpreter no-color6620131
Ref: 1e796620131
Ref: tutorial/interpreter tut-using6620131
Ref: 1e7a6620131
Ref: tutorial/interpreter using-the-python-interpreter6620131
Ref: 1e7b6620131
Node: Chamando o interpretador6620282
Ref: tutorial/interpreter invoking-the-interpreter6620415
Ref: 1e7c6620415
Ref: tutorial/interpreter tut-invoking6620415
Ref: 1e7d6620415
Ref: Chamando o interpretador-Footnote-16623811
Ref: Chamando o interpretador-Footnote-26624008
Node: Passagem de argumentos6624069
Ref: tutorial/interpreter argument-passing6624176
Ref: 1e816624176
Ref: tutorial/interpreter tut-argpassing6624176
Ref: 1e826624176
Node: Modo interativo6625180
Ref: tutorial/interpreter interactive-mode6625287
Ref: 1e836625287
Ref: tutorial/interpreter tut-interactive6625287
Ref: 4406625287
Node: O interpretador e seu ambiente6626393
Ref: tutorial/interpreter the-interpreter-and-its-environment6626526
Ref: 1e846626526
Ref: tutorial/interpreter tut-interp6626526
Ref: 1e856626526
Node: Edição de código-fonte6626641
Ref: tutorial/interpreter source-code-encoding6626733
Ref: 1e866626733
Ref: tutorial/interpreter tut-source-encoding6626733
Ref: 1e876626733
Node: Uma introdução informal ao Python6628061
Ref: tutorial/introduction doc6628241
Ref: 1e896628241
Ref: tutorial/introduction an-informal-introduction-to-python6628241
Ref: 1e8a6628241
Ref: tutorial/introduction no-color6628241
Ref: 1e8b6628241
Ref: tutorial/introduction tut-informal6628241
Ref: 1e8c6628241
Node: Usando Python como uma calculadora6629671
Ref: tutorial/introduction tut-calculator6629823
Ref: 1e8d6629823
Ref: tutorial/introduction using-python-as-a-calculator6629823
Ref: 1e8e6629823
Node: Números6630098
Ref: tutorial/introduction numbers6630191
Ref: 1e8f6630191
Ref: tutorial/introduction tut-numbers6630191
Ref: 1e906630191
Ref: Números-Footnote-16633411
Node: Texto6633628
Ref: tutorial/introduction text6633736
Ref: 1e926633736
Ref: tutorial/introduction tut-strings6633736
Ref: 1e936633736
Ref: Texto-Footnote-16642833
Node: Listas6643152
Ref: tutorial/introduction lists6643243
Ref: 1e986643243
Ref: tutorial/introduction tut-lists6643243
Ref: 1e996643243
Node: Primeiros passos para a programação6646620
Ref: tutorial/introduction first-steps-towards-programming6646772
Ref: 1e9c6646772
Ref: tutorial/introduction tut-firststeps6646772
Ref: 1e9d6646772
Ref: Primeiros passos para a programação-Footnote-16650084
Node: Mais ferramentas de controle de fluxo6650146
Ref: tutorial/controlflow doc6650312
Ref: 1e9e6650312
Ref: tutorial/controlflow more-control-flow-tools6650312
Ref: 1e9f6650312
Ref: tutorial/controlflow no-color6650312
Ref: 1ea06650312
Ref: tutorial/controlflow tut-morecontrol6650312
Ref: 1ea16650312
Node: Instruções if6650873
Ref: tutorial/controlflow if-statements6650987
Ref: 1ea26650987
Ref: tutorial/controlflow tut-if6650987
Ref: 1ea36650987
Node: Instruções for6652062
Ref: tutorial/controlflow for-statements6652201
Ref: 1ea56652201
Ref: tutorial/controlflow tut-for6652201
Ref: 1ea66652201
Node: A função range6653537
Ref: tutorial/controlflow the-range-function6653690
Ref: 1ea76653690
Ref: tutorial/controlflow tut-range6653690
Ref: 1ea86653690
Node: Instruções break e continue6655877
Ref: tutorial/controlflow break-and-continue-statements6656039
Ref: 1eab6656039
Ref: tutorial/controlflow tut-break6656039
Ref: 1eac6656039
Ref: tutorial/controlflow tut-for-else6657107
Ref: 1ead6657107
Node: Cláusulas else em laços6657108
Ref: tutorial/controlflow break-and-continue-statements-and-else-clauses-on-loops6657271
Ref: 1eae6657271
Ref: tutorial/controlflow else-clauses-on-loops6657271
Ref: 1eaf6657271
Node: Instruções pass6659684
Ref: tutorial/controlflow pass-statements6659836
Ref: 1eb16659836
Ref: tutorial/controlflow tut-pass6659836
Ref: 1eb26659836
Node: Instruções match6661062
Ref: tutorial/controlflow match-statements6661208
Ref: 1eb46661208
Ref: tutorial/controlflow tut-match6661208
Ref: 1ea46661208
Ref: Instruções match-Footnote-16668435
Node: Definindo funções6668477
Ref: tutorial/controlflow defining-functions6668641
Ref: 1eb56668641
Ref: tutorial/controlflow tut-functions6668641
Ref: 1eb66668641
Ref: Definindo funções-Footnote-16673909
Node: Mais sobre definição de funções6674151
Ref: tutorial/controlflow more-on-defining-functions6674331
Ref: 1eb96674331
Ref: tutorial/controlflow tut-defining6674331
Ref: 1eba6674331
Node: Argumentos com valor padrão6674784
Ref: tutorial/controlflow default-argument-values6674912
Ref: 1ebb6674912
Ref: tutorial/controlflow tut-defaultargs6674912
Ref: 1ebc6674912
Node: Argumentos nomeados6677045
Ref: tutorial/controlflow keyword-arguments6677203
Ref: 1ebd6677203
Ref: tutorial/controlflow tut-keywordargs6677203
Ref: 1ebe6677203
Node: Parâmetros especiais6681160
Ref: tutorial/controlflow special-parameters6681323
Ref: 1ec06681323
Node: Argumentos posicional-ou-nomeados6682636
Ref: tutorial/controlflow positional-or-keyword-arguments6682770
Ref: 1ec16682770
Node: Parâmetros somente-posicionais<2>6683002
Ref: tutorial/controlflow positional-only-parameters6683172
Ref: 1ec26683172
Node: Argumentos somente-nomeados6683827
Ref: tutorial/controlflow keyword-only-arguments6683985
Ref: 1ec36683985
Node: Exemplos de funções6684281
Ref: tutorial/controlflow function-examples6684418
Ref: 1ec46684418
Node: Recapitulando6687654
Ref: tutorial/controlflow recap6687755
Ref: 1ec56687755
Node: Listas de argumentos arbitrárias6688695
Ref: tutorial/controlflow arbitrary-argument-lists6688874
Ref: 1ec66688874
Ref: tutorial/controlflow tut-arbitraryargs6688874
Ref: 1ec76688874
Node: Desempacotando listas de argumentos6690012
Ref: tutorial/controlflow tut-unpacking-arguments6690188
Ref: 1ec86690188
Ref: tutorial/controlflow unpacking-argument-lists6690188
Ref: 1ec96690188
Node: Expressões lambda6691568
Ref: tutorial/controlflow lambda-expressions6691736
Ref: 1eca6691736
Ref: tutorial/controlflow tut-lambda6691736
Ref: 1ecb6691736
Node: Strings de documentação6692916
Ref: tutorial/controlflow documentation-strings6693072
Ref: 1ecc6693072
Ref: tutorial/controlflow tut-docstrings6693072
Ref: 1eb76693072
Node: Anotações de função6695192
Ref: tutorial/controlflow function-annotations6695321
Ref: 1ecd6695321
Ref: tutorial/controlflow tut-annotations6695321
Ref: 1ece6695321
Ref: Anotações de função-Footnote-16696643
Ref: Anotações de função-Footnote-26696685
Node: Intermezzo estilo de codificação6696727
Ref: tutorial/controlflow intermezzo-coding-style6696879
Ref: 1ed16696879
Ref: tutorial/controlflow tut-codingstyle6696879
Ref: 1ed26696879
Ref: Intermezzo estilo de codificação-Footnote-16699318
Node: Estruturas de dados6699360
Ref: tutorial/datastructures doc6699502
Ref: 1ed46699502
Ref: tutorial/datastructures data-structures6699502
Ref: 1ed56699502
Ref: tutorial/datastructures no-color6699502
Ref: 1ed66699502
Ref: tutorial/datastructures tut-structures6699502
Ref: 1eaa6699502
Node: Mais sobre listas6699874
Ref: tutorial/datastructures more-on-lists6699973
Ref: 1ed76699973
Ref: tutorial/datastructures tut-morelists6699973
Ref: 1ed86699973
Ref: Mais sobre listas-Footnote-16703983
Node: Usando listas como pilhas6704134
Ref: tutorial/datastructures tut-lists-as-stacks6704246
Ref: 1ed96704246
Ref: tutorial/datastructures using-lists-as-stacks6704246
Ref: 1eda6704246
Node: Usando listas como filas6704928
Ref: tutorial/datastructures tut-lists-as-queues6705074
Ref: 1edc6705074
Ref: tutorial/datastructures using-lists-as-queues6705074
Ref: 1edd6705074
Node: Compreensões de lista<2>6706205
Ref: tutorial/datastructures list-comprehensions6706358
Ref: 1ede6706358
Ref: tutorial/datastructures tut-listcomps6706358
Ref: 1edf6706358
Node: Compreensões de lista aninhadas6709872
Ref: tutorial/datastructures nested-list-comprehensions6709992
Ref: 1ee06709992
Node: A instrução del6711741
Ref: tutorial/datastructures the-del-statement6711869
Ref: 1ee16711869
Ref: tutorial/datastructures tut-del6711869
Ref: 1ee26711869
Node: Tuplas e Sequências6712816
Ref: tutorial/datastructures tuples-and-sequences6712936
Ref: 1ee36712936
Ref: tutorial/datastructures tut-tuples6712936
Ref: 1ebf6712936
Node: Conjuntos6716183
Ref: tutorial/datastructures sets6716298
Ref: 1ee56716298
Ref: tutorial/datastructures tut-sets6716298
Ref: 1ee66716298
Node: Dicionários6718220
Ref: tutorial/datastructures dictionaries6718338
Ref: 1ee76718338
Ref: tutorial/datastructures tut-dictionaries6718338
Ref: 1ee86718338
Node: Técnicas de iteração6721766
Ref: tutorial/datastructures looping-techniques6721897
Ref: 1eea6721897
Ref: tutorial/datastructures tut-loopidioms6721897
Ref: 1ea96721897
Node: Mais sobre condições6724552
Ref: tutorial/datastructures more-on-conditions6724708
Ref: 1eeb6724708
Ref: tutorial/datastructures tut-conditions6724708
Ref: 1eec6724708
Node: Comparando sequências e outros tipos6727047
Ref: tutorial/datastructures comparing-sequences-and-other-types6727171
Ref: 1eee6727171
Ref: tutorial/datastructures tut-comparing6727171
Ref: 1eef6727171
Node: Módulos<2>6728876
Ref: tutorial/modules doc6728997
Ref: 1ef06728997
Ref: tutorial/modules modules6728997
Ref: 1ef16728997
Ref: tutorial/modules no-color6728997
Ref: 1ef26728997
Ref: tutorial/modules tut-modules6728997
Ref: 1ef36728997
Node: Mais sobre módulos6731824
Ref: tutorial/modules more-on-modules6731917
Ref: 1ef66731917
Ref: tutorial/modules tut-moremodules6731917
Ref: 1ef76731917
Ref: Mais sobre módulos-Footnote-16735328
Node: Executando módulos como scripts6735548
Ref: tutorial/modules executing-modules-as-scripts6735676
Ref: 1ef86735676
Ref: tutorial/modules tut-modulesasscripts6735676
Ref: 1ef96735676
Node: O caminho de busca dos módulos6736669
Ref: tutorial/modules the-module-search-path6736838
Ref: 1efa6736838
Ref: tutorial/modules tut-searchpath6736838
Ref: 1efb6736838
Node: Arquivos Python “compilados”6738595
Ref: tutorial/modules compiled-python-files6738723
Ref: 1efe6738723
Ref: tutorial/modules tut-pycache6738723
Ref: 8e06738723
Ref: Arquivos Python “compilados”-Footnote-16741187
Node: Módulos padrões6741229
Ref: tutorial/modules standard-modules6741345
Ref: 1eff6741345
Ref: tutorial/modules tut-standardmodules6741345
Ref: 1efd6741345
Node: A função dir6742931
Ref: tutorial/modules the-dir-function6743035
Ref: 1f006743035
Ref: tutorial/modules tut-dir6743035
Ref: 1f016743035
Node: Pacotes6747542
Ref: tutorial/modules packages6747620
Ref: 1f026747620
Ref: tutorial/modules tut-packages6747620
Ref: 1f036747620
Node: Importando * de um pacote6752164
Ref: tutorial/modules importing-from-a-package6752273
Ref: 1f046752273
Ref: tutorial/modules tut-pkg-import-star6752273
Ref: 1f056752273
Node: Referências em um mesmo pacote6755847
Ref: tutorial/modules id26755998
Ref: 1f066755998
Ref: tutorial/modules intra-package-references6755998
Ref: 1f076755998
Node: Pacotes em múltiplos diretórios6757137
Ref: tutorial/modules packages-in-multiple-directories6757254
Ref: 1f086757254
Node: Entrada e Saída6757809
Ref: tutorial/inputoutput doc6757929
Ref: 1f0a6757929
Ref: tutorial/inputoutput input-and-output6757929
Ref: 1f0b6757929
Ref: tutorial/inputoutput no-color6757929
Ref: 1f0c6757929
Ref: tutorial/inputoutput tut-io6757929
Ref: 1f0d6757929
Node: Refinando a formatação de saída6758286
Ref: tutorial/inputoutput fancier-output-formatting6758411
Ref: 1f0e6758411
Ref: tutorial/inputoutput tut-formatting6758411
Ref: 1f0f6758411
Node: Strings literais formatadas6762876
Ref: tutorial/inputoutput formatted-string-literals6762999
Ref: 1f126762999
Ref: tutorial/inputoutput tut-f-strings6762999
Ref: 1f116762999
Node: O método format6765165
Ref: tutorial/inputoutput the-string-format-method6765326
Ref: 1f136765326
Ref: tutorial/inputoutput tut-string-format6765326
Ref: 1f146765326
Node: Formatação manual de string6768303
Ref: tutorial/inputoutput manual-string-formatting6768475
Ref: 1f156768475
Node: Formatação de strings à moda antiga6770133
Ref: tutorial/inputoutput old-string-formatting6770280
Ref: 1f196770280
Node: Leitura e escrita de arquivos6770930
Ref: tutorial/inputoutput reading-and-writing-files6771055
Ref: 1f1a6771055
Ref: tutorial/inputoutput tut-files6771055
Ref: 1f1b6771055
Node: Métodos de objetos arquivo6774603
Ref: tutorial/inputoutput methods-of-file-objects6774741
Ref: 1f1c6774741
Ref: tutorial/inputoutput tut-filemethods6774741
Ref: 1f1d6774741
Node: Gravando dados estruturados com json6778608
Ref: tutorial/inputoutput saving-structured-data-with-json6778746
Ref: 1f1f6778746
Ref: tutorial/inputoutput tut-json6778746
Ref: 1f206778746
Ref: Gravando dados estruturados com json-Footnote-16781868
Node: Erros e exceções6781893
Ref: tutorial/errors doc6782009
Ref: 1f246782009
Ref: tutorial/errors errors-and-exceptions6782009
Ref: 1f256782009
Ref: tutorial/errors no-color6782009
Ref: 1f266782009
Ref: tutorial/errors tut-errors6782009
Ref: 1f276782009
Node: Erros de sintaxe6782602
Ref: tutorial/errors syntax-errors6782692
Ref: 1f286782692
Ref: tutorial/errors tut-syntaxerrors6782692
Ref: 1f296782692
Node: Exceções6783538
Ref: tutorial/errors exceptions6783661
Ref: 1f2a6783661
Ref: tutorial/errors tut-exceptions6783661
Ref: 1f2b6783661
Node: Tratamento de exceções6785715
Ref: tutorial/errors handling-exceptions6785843
Ref: 1f2c6785843
Ref: tutorial/errors tut-handling6785843
Ref: 1eb06785843
Node: Levantando exceções6792972
Ref: tutorial/errors raising-exceptions6793116
Ref: 1f2d6793116
Ref: tutorial/errors tut-raising6793116
Ref: 1f2e6793116
Node: Encadeamento de exceções6794440
Ref: tutorial/errors exception-chaining6794594
Ref: 1f2f6794594
Ref: tutorial/errors tut-exception-chaining6794594
Ref: 1f306794594
Node: Exceções definidas pelo usuário6796907
Ref: tutorial/errors tut-userexceptions6797068
Ref: 1f316797068
Ref: tutorial/errors user-defined-exceptions6797068
Ref: 1f326797068
Node: Definindo ações de limpeza6797950
Ref: tutorial/errors defining-clean-up-actions6798116
Ref: 1f336798116
Ref: tutorial/errors tut-cleanup6798116
Ref: 1f346798116
Ref: Definindo ações de limpeza-Footnote-16802047
Ref: Definindo ações de limpeza-Footnote-26802089
Node: Ações de limpeza predefinidas6802131
Ref: tutorial/errors predefined-clean-up-actions6802318
Ref: 1f356802318
Ref: tutorial/errors tut-cleanup-with6802318
Ref: 1f366802318
Node: Criando e tratando várias exceções não relacionadas6803502
Ref: tutorial/errors raising-and-handling-multiple-unrelated-exceptions6803694
Ref: 1f376803694
Ref: tutorial/errors tut-exception-groups6803694
Ref: 1f386803694
Node: Enriquecendo exceções com notas6807259
Ref: tutorial/errors enriching-exceptions-with-notes6807411
Ref: 1f396807411
Ref: tutorial/errors tut-exception-notes6807411
Ref: 1f3a6807411
Node: Classes6810384
Ref: tutorial/classes doc6810524
Ref: 1f3b6810524
Ref: tutorial/classes classes6810524
Ref: 1f3c6810524
Ref: tutorial/classes no-color6810524
Ref: 1f3d6810524
Ref: tutorial/classes tut-classes6810524
Ref: 1eb86810524
Node: Uma palavra sobre nomes e objetos6813267
Ref: tutorial/classes a-word-about-names-and-objects6813390
Ref: 1f3f6813390
Ref: tutorial/classes tut-object6813390
Ref: 1f406813390
Node: Escopos e espaços de nomes do Python6814370
Ref: tutorial/classes python-scopes-and-namespaces6814533
Ref: 1f416814533
Ref: tutorial/classes tut-scopes6814533
Ref: 1ef56814533
Ref: Escopos e espaços de nomes do Python-Footnote-16821230
Node: Exemplo de escopos e espaço de nomes6821642
Ref: tutorial/classes scopes-and-namespaces-example6821753
Ref: 1f436821753
Ref: tutorial/classes tut-scopeexample6821753
Ref: 1f446821753
Node: Uma primeira olhada nas classes6823233
Ref: tutorial/classes a-first-look-at-classes6823388
Ref: 1f456823388
Ref: tutorial/classes tut-firstclasses6823388
Ref: 1ed36823388
Node: Sintaxe da definição de classe6823719
Ref: tutorial/classes class-definition-syntax6823842
Ref: 1f466823842
Ref: tutorial/classes tut-classdefinition6823842
Ref: 1f476823842
Node: Objetos classe6825468
Ref: tutorial/classes class-objects6825618
Ref: 1f486825618
Ref: tutorial/classes tut-classobjects6825618
Ref: 1f496825618
Node: Objetos instância6828037
Ref: tutorial/classes instance-objects6828170
Ref: 1f4b6828170
Ref: tutorial/classes tut-instanceobjects6828170
Ref: 1f4c6828170
Node: Objetos método6829690
Ref: tutorial/classes method-objects6829842
Ref: 1f4d6829842
Ref: tutorial/classes tut-methodobjects6829842
Ref: 1f4e6829842
Node: Variáveis de classe e instância6831842
Ref: tutorial/classes class-and-instance-variables6831967
Ref: 1f4f6831967
Ref: tutorial/classes tut-class-and-instance-variables6831967
Ref: 1f506831967
Node: Observações aleatórias6834332
Ref: tutorial/classes random-remarks6834458
Ref: 1f516834458
Ref: tutorial/classes tut-remarks6834458
Ref: 1f526834458
Node: Herança6838614
Ref: tutorial/classes inheritance6838728
Ref: 1f536838728
Ref: tutorial/classes tut-inheritance6838728
Ref: 1f546838728
Node: Herança múltipla6841723
Ref: tutorial/classes multiple-inheritance6841786
Ref: 1f556841786
Ref: tutorial/classes tut-multiple6841786
Ref: 1f566841786
Node: Variáveis privadas6843934
Ref: tutorial/classes private-variables6844049
Ref: 1f576844049
Ref: tutorial/classes tut-private6844049
Ref: 1f3e6844049
Node: Curiosidades e conclusões6847159
Ref: tutorial/classes odds-and-ends6847276
Ref: 1f596847276
Ref: tutorial/classes tut-odds6847276
Ref: 1f5a6847276
Node: Iteradores6848479
Ref: tutorial/classes iterators6848586
Ref: 1f5d6848586
Ref: tutorial/classes tut-iterators6848586
Ref: 1f5e6848586
Node: Geradores6850943
Ref: tutorial/classes generators6851045
Ref: 1f606851045
Ref: tutorial/classes tut-generators6851045
Ref: 1f616851045
Node: Expressões geradoras6852522
Ref: tutorial/classes generator-expressions6852605
Ref: 1f646852605
Ref: tutorial/classes tut-genexps6852605
Ref: 1f656852605
Node: Um breve passeio pela biblioteca padrão6853682
Ref: tutorial/stdlib doc6853857
Ref: 1f666853857
Ref: tutorial/stdlib brief-tour-of-the-standard-library6853857
Ref: 1f676853857
Ref: tutorial/stdlib no-color6853857
Ref: 1f686853857
Ref: tutorial/stdlib tut-brieftour6853857
Ref: 1f696853857
Node: Interface com o sistema operacional6854314
Ref: tutorial/stdlib operating-system-interface6854453
Ref: 1f6a6854453
Ref: tutorial/stdlib tut-os-interface6854453
Ref: 1f6b6854453
Node: Caracteres curinga6855806
Ref: tutorial/stdlib file-wildcards6855984
Ref: 1f6c6855984
Ref: tutorial/stdlib tut-file-wildcards6855984
Ref: 1f6d6855984
Node: Argumentos de linha de comando6856274
Ref: tutorial/stdlib command-line-arguments6856469
Ref: 1f6e6856469
Ref: tutorial/stdlib tut-command-line-arguments6856469
Ref: 1f6f6856469
Node: Redirecionamento de erros e encerramento do programa6857692
Ref: tutorial/stdlib error-output-redirection-and-program-termination6857906
Ref: 1f706857906
Ref: tutorial/stdlib tut-stderr6857906
Ref: 1f716857906
Node: Reconhecimento de padrões em strings6858440
Ref: tutorial/stdlib string-pattern-matching6858635
Ref: 1f726858635
Ref: tutorial/stdlib tut-string-pattern-matching6858635
Ref: 1f736858635
Node: Matemática6859370
Ref: tutorial/stdlib mathematics6859531
Ref: 1f746859531
Ref: tutorial/stdlib tut-mathematics6859531
Ref: 1f756859531
Node: Acesso à internet6860757
Ref: tutorial/stdlib internet-access6860892
Ref: 1f766860892
Ref: tutorial/stdlib tut-internet-access6860892
Ref: 1f776860892
Node: Data e hora6862002
Ref: tutorial/stdlib dates-and-times6862146
Ref: 1f786862146
Ref: tutorial/stdlib tut-dates-and-times6862146
Ref: 1f796862146
Node: Compressão de dados6863003
Ref: tutorial/stdlib data-compression6863152
Ref: 1f7a6863152
Ref: tutorial/stdlib tut-data-compression6863152
Ref: 1f7b6863152
Node: Medição de desempenho6863757
Ref: tutorial/stdlib performance-measurement6863916
Ref: 1f7c6863916
Ref: tutorial/stdlib tut-performance-measurement6863916
Ref: 1f7d6863916
Node: Controle de qualidade6864826
Ref: tutorial/stdlib quality-control6864984
Ref: 1f7e6864984
Ref: tutorial/stdlib tut-quality-control6864984
Ref: 1f7f6864984
Node: Baterias incluídas6866717
Ref: tutorial/stdlib batteries-included6866843
Ref: 1f806866843
Ref: tutorial/stdlib tut-batteries-included6866843
Ref: 1f816866843
Ref: Baterias incluídas-Footnote-16868835
Node: Um breve passeio pela biblioteca padrão — parte II6868894
Ref: tutorial/stdlib2 doc6869090
Ref: 1f826869090
Ref: tutorial/stdlib2 brief-tour-of-the-standard-library-part-ii6869090
Ref: 1f836869090
Ref: tutorial/stdlib2 no-color6869090
Ref: 1f846869090
Ref: tutorial/stdlib2 tut-brieftourtwo6869090
Ref: 1f856869090
Node: Formatando a saída6869646
Ref: tutorial/stdlib2 output-formatting6869780
Ref: 1f866869780
Ref: tutorial/stdlib2 tut-output-formatting6869780
Ref: 1f876869780
Node: Usando templates6872052
Ref: tutorial/stdlib2 templating6872238
Ref: 1f886872238
Ref: tutorial/stdlib2 tut-templating6872238
Ref: 1f896872238
Node: Trabalhando com formatos binários de dados6875210
Ref: tutorial/stdlib2 tut-binary-formats6875395
Ref: 1f8a6875395
Ref: tutorial/stdlib2 working-with-binary-data-record-layouts6875395
Ref: 1f8b6875395
Node: Multi-threading<2>6876766
Ref: tutorial/stdlib2 multi-threading6876947
Ref: 1f8c6876947
Ref: tutorial/stdlib2 tut-multi-threading6876947
Ref: 1f8d6876947
Node: Gerando logs6879258
Ref: tutorial/stdlib2 logging6879415
Ref: 1f8e6879415
Ref: tutorial/stdlib2 tut-logging6879415
Ref: 1f8f6879415
Node: Referências fracas6880782
Ref: tutorial/stdlib2 tut-weak-references6880958
Ref: 1f906880958
Ref: tutorial/stdlib2 weak-references6880958
Ref: 1f916880958
Node: Ferramentas para trabalhar com listas6882843
Ref: tutorial/stdlib2 tools-for-working-with-lists6883046
Ref: 1f926883046
Ref: tutorial/stdlib2 tut-list-tools6883046
Ref: 1f936883046
Node: Aritmética decimal com ponto flutuante6885725
Ref: tutorial/stdlib2 decimal-floating-point-arithmetic6885900
Ref: 1f946885900
Ref: tutorial/stdlib2 tut-decimal-fp6885900
Ref: 1f956885900
Node: Ambientes virtuais e pacotes6888040
Ref: tutorial/venv doc6888204
Ref: 1f966888204
Ref: tutorial/venv no-color6888204
Ref: 1f976888204
Ref: tutorial/venv tut-venv6888204
Ref: 1f986888204
Ref: tutorial/venv virtual-environments-and-packages6888204
Ref: 1f996888204
Node: Introdução<4>6888381
Ref: tutorial/venv introduction6888496
Ref: 1f9a6888496
Node: Criando ambientes virtuais6889900
Ref: tutorial/venv creating-virtual-environments6890053
Ref: 1f9c6890053
Node: Gerenciando pacotes com o pip6892211
Ref: tutorial/venv managing-packages-with-pip6892340
Ref: 1f9d6892340
Ref: Gerenciando pacotes com o pip-Footnote-16896398
Ref: Gerenciando pacotes com o pip-Footnote-26896423
Node: E agora?6896501
Ref: tutorial/whatnow doc6896673
Ref: 1f9e6896673
Ref: tutorial/whatnow no-color6896673
Ref: 1f9f6896673
Ref: tutorial/whatnow tut-whatnow6896673
Ref: 1fa06896673
Ref: tutorial/whatnow what-now6896673
Ref: 1fa16896673
Ref: E agora?-Footnote-16900419
Node: Edição de entrada interativa e substituição de histórico6900621
Ref: tutorial/interactive doc6900820
Ref: 1fa36900820
Ref: tutorial/interactive interactive-input-editing-and-history-substitution6900820
Ref: 1fa46900820
Ref: tutorial/interactive no-color6900820
Ref: 1fa56900820
Ref: tutorial/interactive tut-interacting6900820
Ref: 1e806900820
Ref: Edição de entrada interativa e substituição de histórico-Footnote-16901472
Node: Tab completion e histórico de edição6901533
Ref: tutorial/interactive tab-completion-and-history-editing6901719
Ref: 1fa66901719
Ref: tutorial/interactive tut-keybindings6901719
Ref: 1fa76901719
Node: Alternativas ao interpretador interativo6902675
Ref: tutorial/interactive alternatives-to-the-interactive-interpreter6902861
Ref: 1fa86902861
Ref: tutorial/interactive tut-commentary6902861
Ref: 1fa96902861
Ref: Alternativas ao interpretador interativo-Footnote-16903805
Ref: Alternativas ao interpretador interativo-Footnote-26903834
Node: Aritmética de ponto flutuante problemas e limitações6903875
Ref: tutorial/floatingpoint doc6904071
Ref: 1fab6904071
Ref: tutorial/floatingpoint floating-point-arithmetic-issues-and-limitations6904071
Ref: 1fac6904071
Ref: tutorial/floatingpoint no-color6904071
Ref: 1fad6904071
Ref: tutorial/floatingpoint tut-fp-issues6904071
Ref: 1fae6904071
Ref: Aritmética de ponto flutuante problemas e limitações-Footnote-16915036
Ref: Aritmética de ponto flutuante problemas e limitações-Footnote-26915114
Node: Erro de representação6915165
Ref: tutorial/floatingpoint representation-error6915280
Ref: 1fb16915280
Ref: tutorial/floatingpoint tut-fp-error6915280
Ref: 1fb26915280
Node: Anexo6918958
Ref: tutorial/appendix doc6919084
Ref: 1fb36919084
Ref: tutorial/appendix appendix6919084
Ref: 1fb46919084
Ref: tutorial/appendix no-color6919084
Ref: 1fb56919084
Ref: tutorial/appendix tut-appendix6919084
Ref: 1fb66919084
Node: Modo interativo<2>6919156
Ref: tutorial/appendix interactive-mode6919216
Ref: 1fb76919216
Ref: tutorial/appendix tut-interac6919216
Ref: 48e6919216
Node: Tratamento de erros6920605
Ref: tutorial/appendix error-handling6920715
Ref: 1fb86920715
Ref: tutorial/appendix tut-error6920715
Ref: 1fb96920715
Ref: Tratamento de erros-Footnote-16922014
Node: Scripts Python executáveis6922094
Ref: tutorial/appendix executable-python-scripts6922258
Ref: 1fba6922258
Ref: tutorial/appendix tut-scripts6922258
Ref: 1e886922258
Node: Arquivo de inicialização do modo interativo6923459
Ref: tutorial/appendix the-interactive-startup-file6923630
Ref: 1fbb6923630
Ref: tutorial/appendix tut-startup6923630
Ref: 1fbc6923630
Node: Módulos de customização6925301
Ref: tutorial/appendix the-customization-modules6925436
Ref: 1fbd6925436
Ref: tutorial/appendix tut-customize6925436
Ref: 1fbe6925436
Node: Configurações e Uso do Python6926370
Ref: using/index doc6926512
Ref: 1fbf6926512
Ref: using/index no-color6926512
Ref: 1fc06926512
Ref: using/index python-setup-and-usage6926512
Ref: 1fc16926512
Ref: using/index using-index6926512
Ref: 1fc26926512
Node: Linha de comando e ambiente<2>6927074
Ref: using/cmdline doc6927218
Ref: 1fc36927218
Ref: using/cmdline command-line-and-environment6927218
Ref: 1fc46927218
Ref: using/cmdline using-on-general6927218
Ref: 1c5e6927218
Node: Linha de comando6927602
Ref: using/cmdline command-line6927716
Ref: 1fc66927716
Ref: using/cmdline using-on-cmdline6927716
Ref: 11fd6927716
Node: Opções de interface6928136
Ref: using/cmdline interface-options6928238
Ref: 1fc76928238
Ref: using/cmdline using-on-interface-options6928238
Ref: 1fc86928238
Ref: using/cmdline cmdoption-c6929833
Ref: 1a86929833
Ref: using/cmdline cmdoption-m6930561
Ref: 23b6930561
Ref: using/cmdline cmdarg-dash6933275
Ref: 1fc96933275
Ref: using/cmdline cmdarg-script6933712
Ref: 1fca6933712
Ref: Opções de interface-Footnote-16935784
Node: Opções genéricas6935826
Ref: using/cmdline generic-options6935954
Ref: 1fcb6935954
Ref: using/cmdline using-on-generic-options6935954
Ref: 1fcc6935954
Ref: using/cmdline cmdoption-06936008
Ref: 16196936008
Ref: using/cmdline cmdoption-h6936023
Ref: 1fcd6936023
Ref: using/cmdline cmdoption-help6936038
Ref: 7fb6936038
Ref: using/cmdline cmdoption-help-env6936188
Ref: 7fd6936188
Ref: using/cmdline cmdoption-help-xoptions6936344
Ref: 7fe6936344
Ref: using/cmdline cmdoption-help-all6936508
Ref: 7ff6936508
Ref: using/cmdline cmdoption-V6936621
Ref: 4956936621
Ref: using/cmdline cmdoption-version6936636
Ref: f0b6936636
Node: Opções diversas6937021
Ref: using/cmdline miscellaneous-options6937145
Ref: 1fce6937145
Ref: using/cmdline using-on-misc-options6937145
Ref: 11fe6937145
Ref: using/cmdline cmdoption-b6937196
Ref: 7ee6937196
Ref: using/cmdline cmdoption-B6937620
Ref: 15be6937620
Ref: using/cmdline cmdoption-check-hash-based-pycs6937802
Ref: 1fcf6937802
Ref: using/cmdline cmdoption-d6938633
Ref: 1fd06938633
Ref: using/cmdline cmdoption-E6938913
Ref: b4c6938913
Ref: using/cmdline cmdoption-i6939152
Ref: 16c96939152
Ref: using/cmdline cmdoption-I6939872
Ref: b4d6939872
Ref: using/cmdline cmdoption-O6940362
Ref: 18c6940362
Ref: using/cmdline cmdoption-OO6940794
Ref: fa96940794
Ref: using/cmdline cmdoption-P6941139
Ref: 7b66941139
Ref: using/cmdline cmdoption-q6941838
Ref: 1fd36941838
Ref: using/cmdline cmdoption-R6941986
Ref: 1d2d6941986
Ref: using/cmdline cmdoption-s6943209
Ref: 15806943209
Ref: using/cmdline cmdoption-S6943461
Ref: 13a46943461
Ref: using/cmdline cmdoption-u6943813
Ref: 1c446943813
Ref: using/cmdline cmdoption-v6944090
Ref: 16166944090
Ref: using/cmdline using-on-warnings6944669
Ref: 1fd66944669
Ref: using/cmdline cmdoption-W6944669
Ref: abb6944669
Ref: using/cmdline cmdoption-x6947508
Ref: 1fd86947508
Ref: using/cmdline cmdoption-X6947687
Ref: 16f6947687
Ref: Opções diversas-Footnote-16957594
Ref: Opções diversas-Footnote-26957636
Ref: Opções diversas-Footnote-36957678
Ref: Opções diversas-Footnote-46957720
Ref: Opções diversas-Footnote-56957762
Ref: Opções diversas-Footnote-66957804
Ref: Opções diversas-Footnote-76957846
Ref: Opções diversas-Footnote-86957888
Node: Controlando cores6957920
Ref: using/cmdline controlling-color6958016
Ref: 1fdf6958016
Ref: using/cmdline using-on-controlling-color6958016
Ref: 1b76958016
Ref: Controlando cores-Footnote-16959150
Ref: Controlando cores-Footnote-26959183
Node: Variáveis de ambiente6959213
Ref: using/cmdline environment-variables6959327
Ref: 1fe06959327
Ref: using/cmdline using-on-envvars6959327
Ref: 7fc6959327
Ref: using/cmdline envvar-PYTHONHOME6959642
Ref: 3ed6959642
Ref: using/cmdline envvar-PYTHONPATH6960281
Ref: 12136960281
Ref: using/cmdline envvar-PYTHONSAFEPATH6961435
Ref: 7b76961435
Ref: using/cmdline envvar-PYTHONPLATLIBDIR6961700
Ref: 1be36961700
Ref: using/cmdline envvar-PYTHONSTARTUP6961882
Ref: 1b86961882
Ref: using/cmdline envvar-PYTHONOPTIMIZE6962628
Ref: 1fd26962628
Ref: using/cmdline envvar-PYTHONBREAKPOINT6962874
Ref: cc56962874
Ref: using/cmdline envvar-PYTHONDEBUG6963555
Ref: 1fd16963555
Ref: using/cmdline envvar-PYTHONINSPECT6963932
Ref: 16c86963932
Ref: using/cmdline envvar-PYTHONUNBUFFERED6964618
Ref: 1c456964618
Ref: using/cmdline envvar-PYTHONVERBOSE6964773
Ref: 1fd56964773
Ref: using/cmdline envvar-PYTHONCASEOK6965020
Ref: b4b6965020
Ref: using/cmdline envvar-PYTHONDONTWRITEBYTECODE6965228
Ref: 15bf6965228
Ref: using/cmdline envvar-PYTHONPYCACHEPREFIX6965488
Ref: b916965488
Ref: using/cmdline envvar-PYTHONHASHSEED6965866
Ref: 12736965866
Ref: using/cmdline envvar-PYTHONINTMAXSTRDIGITS6966623
Ref: 1a666966623
Ref: using/cmdline envvar-PYTHONIOENCODING6966903
Ref: 12006966903
Ref: using/cmdline envvar-PYTHONNOUSERSITE6967771
Ref: 15816967771
Ref: using/cmdline envvar-PYTHONUSERBASE6968043
Ref: 157f6968043
Ref: using/cmdline envvar-PYTHONEXECUTABLE6968422
Ref: 1fe66968422
Ref: using/cmdline envvar-PYTHONWARNINGS6968658
Ref: d976968658
Ref: using/cmdline envvar-PYTHONFAULTHANDLER6969710
Ref: 127b6969710
Ref: using/cmdline envvar-PYTHONTRACEMALLOC6970241
Ref: 1fda6970241
Ref: using/cmdline envvar-PYTHONPROFILEIMPORTTIME6970858
Ref: ce06970858
Ref: using/cmdline envvar-PYTHONASYNCIODEBUG6971394
Ref: 1fe76971394
Ref: using/cmdline envvar-PYTHONMALLOC6971634
Ref: e526971634
Ref: using/cmdline envvar-PYTHONMALLOCSTATS6973225
Ref: 1dec6973225
Ref: using/cmdline envvar-PYTHONLEGACYWINDOWSFSENCODING6973894
Ref: 33d6973894
Ref: using/cmdline envvar-PYTHONLEGACYWINDOWSSTDIO6974513
Ref: e496974513
Ref: using/cmdline envvar-PYTHONCOERCECLOCALE6975043
Ref: cbf6975043
Ref: using/cmdline envvar-PYTHONDEVMODE6978121
Ref: cda6978121
Ref: using/cmdline envvar-PYTHONUTF86978536
Ref: cc26978536
Ref: using/cmdline envvar-PYTHONWARNDEFAULTENCODING6978872
Ref: 9b56978872
Ref: using/cmdline envvar-PYTHONNODEBUGRANGES6979215
Ref: 7c86979215
Ref: using/cmdline envvar-PYTHONPERFSUPPORT6979757
Ref: 68e6979757
Ref: using/cmdline envvar-PYTHON_PERF_JIT_SUPPORT6980264
Ref: 4a96980264
Ref: using/cmdline envvar-PYTHON_DISABLE_REMOTE_DEBUG6980812
Ref: 16e6980812
Ref: using/cmdline envvar-PYTHON_CPU_COUNT6981317
Ref: 5186981317
Ref: using/cmdline envvar-PYTHON_FROZEN_MODULES6981654
Ref: 4a76981654
Ref: using/cmdline envvar-PYTHON_COLORS6982421
Ref: 46f6982421
Ref: using/cmdline envvar-PYTHON_BASIC_REPL6982707
Ref: 1b66982707
Ref: using/cmdline envvar-PYTHON_HISTORY6983069
Ref: 4aa6983069
Ref: using/cmdline envvar-PYTHON_GIL6983344
Ref: 4946983344
Ref: using/cmdline envvar-PYTHON_THREAD_INHERIT_CONTEXT6983833
Ref: 17cf6983833
Ref: using/cmdline envvar-PYTHON_CONTEXT_AWARE_WARNINGS6984360
Ref: 17c66984360
Ref: using/cmdline envvar-PYTHON_JIT6984810
Ref: 44a6984810
Ref: using/cmdline envvar-PYTHON_TLBC6985105
Ref: 1fdd6985105
Ref: Variáveis de ambiente-Footnote-16985599
Ref: Variáveis de ambiente-Footnote-26985641
Ref: Variáveis de ambiente-Footnote-36985683
Ref: Variáveis de ambiente-Footnote-46985725
Ref: Variáveis de ambiente-Footnote-56985767
Node: Variáveis de modo de depuração6985809
Ref: using/cmdline debug-mode-variables6985901
Ref: 1fef6985901
Ref: using/cmdline envvar-PYTHONDUMPREFS6985983
Ref: b946985983
Ref: using/cmdline envvar-PYTHONDUMPREFSFILE6986251
Ref: 1b366986251
Ref: using/cmdline envvar-PYTHON_PRESITE6986648
Ref: 1fdc6986648
Node: Utilizando Python em plataformas Unix6987484
Ref: using/unix doc6987658
Ref: 1ff06987658
Ref: using/unix no-color6987658
Ref: 1ff16987658
Ref: using/unix using-on-unix6987658
Ref: 1ff26987658
Ref: using/unix using-python-on-unix-platforms6987658
Ref: 1ff36987658
Node: Obtendo e instalando a versão mais recente do Python6987933
Ref: using/unix getting-and-installing-the-latest-version-of-python6988088
Ref: 1ff46988088
Node: No Linux6988256
Ref: using/unix on-linux6988383
Ref: 1ff56988383
Node: Instalação do IDLE6989402
Ref: using/unix installing-idle6989467
Ref: 1ff66989467
Ref: using/unix installing-idle-on-linux6989467
Ref: 1ff76989467
Node: No FreeBSD e OpenBSD6989960
Ref: using/unix on-freebsd-and-openbsd6990087
Ref: 1ff86990087
Node: Compilando o Python6990643
Ref: using/unix building-python6990849
Ref: 1ff96990849
Ref: using/unix building-python-on-unix6990849
Ref: 10ec6990849
Ref: Compilando o Python-Footnote-16991772
Ref: Compilando o Python-Footnote-26991821
Ref: Compilando o Python-Footnote-36991884
Node: Paths e arquivos relacionados com o Python6991947
Ref: using/unix python-related-paths-and-files6992111
Ref: 1ffb6992111
Node: Diversos<2>6993755
Ref: using/unix miscellaneous6993921
Ref: 1ffe6993921
Node: OpenSSL personalizado6994511
Ref: using/unix custom-openssl6994626
Ref: 1fff6994626
Ref: using/unix unix-custom-openssl6994626
Ref: 20006994626
Node: Configurando o Python6996374
Ref: using/configure doc6996546
Ref: 20016996546
Ref: using/configure configure-python6996546
Ref: 20026996546
Ref: using/configure no-color6996546
Ref: 20036996546
Node: Requisitos de construção6996775
Ref: using/configure build-requirements6996884
Ref: 20046996884
Ref: Requisitos de construção-Footnote-16999735
Ref: Requisitos de construção-Footnote-26999778
Ref: Requisitos de construção-Footnote-36999861
Ref: Requisitos de construção-Footnote-46999908
Ref: Requisitos de construção-Footnote-56999965
Ref: Requisitos de construção-Footnote-67000003
Ref: Requisitos de construção-Footnote-77000043
Ref: Requisitos de construção-Footnote-87000082
Ref: Requisitos de construção-Footnote-97000139
Ref: Requisitos de construção-Footnote-107000200
Ref: Requisitos de construção-Footnote-117000243
Ref: Requisitos de construção-Footnote-127000288
Ref: Requisitos de construção-Footnote-137000322
Ref: Requisitos de construção-Footnote-147000351
Ref: Requisitos de construção-Footnote-157000386
Ref: Requisitos de construção-Footnote-167000416
Ref: Requisitos de construção-Footnote-177000458
Ref: Requisitos de construção-Footnote-187000549
Ref: Requisitos de construção-Footnote-197000592
Node: Arquivos gerados7000635
Ref: using/configure generated-files7000779
Ref: 20067000779
Node: Script configure7001289
Ref: using/configure configure-script7001358
Ref: 20077001358
Node: Opções de configuração7001909
Ref: using/configure configure-options7002057
Ref: 1ffa7002057
Ref: using/configure id17002057
Ref: 20087002057
Node: Opções gerais7002756
Ref: using/configure general-options7002867
Ref: 20097002867
Ref: using/configure cmdoption-enable-loadable-sqlite-extensions7002914
Ref: 200a7002914
Ref: using/configure cmdoption-disable-ipv67003240
Ref: 200b7003240
Ref: using/configure cmdoption-enable-big-digits7003382
Ref: 9487003382
Ref: using/configure cmdoption-with-suffix7003687
Ref: 200c7003687
Ref: using/configure cmdoption-with-tzpath7004164
Ref: 200d7004164
Ref: using/configure cmdoption-without-decimal-contextvar7004632
Ref: 20107004632
Ref: using/configure cmdoption-with-dbmliborder7004983
Ref: 20127004983
Ref: using/configure cmdoption-without-c-locale-coercion7005315
Ref: 20137005315
Ref: using/configure cmdoption-with-platlibdir7005581
Ref: 20147005581
Ref: using/configure cmdoption-with-wheel-pkg-dir7005827
Ref: a837005827
Ref: using/configure cmdoption-with-pkg-config7006287
Ref: 20157006287
Ref: using/configure cmdoption-enable-pystats7006662
Ref: 1a647006662
Ref: using/configure free-threading-build7009247
Ref: 20167009247
Ref: using/configure cmdoption-disable-gil7009247
Ref: 4937009247
Ref: using/configure cmdoption-enable-experimental-jit7009616
Ref: 44b7009616
Ref: using/configure cmdoption-arg-PKG_CONFIG7010961
Ref: 20177010961
Ref: using/configure cmdoption-arg-PKG_CONFIG_LIBDIR7011036
Ref: 20187011036
Ref: using/configure cmdoption-arg-PKG_CONFIG_PATH7011067
Ref: 20197011067
Ref: Opções gerais-Footnote-17011168
Node: Opções do compilador C7011210
Ref: using/configure c-compiler-options7011351
Ref: 201a7011351
Ref: using/configure cmdoption-arg-CC7011416
Ref: 201b7011416
Ref: using/configure cmdoption-arg-CFLAGS7011463
Ref: 201c7011463
Ref: using/configure cmdoption-arg-CPP7011520
Ref: 201d7011520
Ref: using/configure cmdoption-arg-CPPFLAGS7011574
Ref: 201e7011574
Node: Opções da ligação7011667
Ref: using/configure linker-options7011833
Ref: 201f7011833
Ref: using/configure cmdoption-arg-LDFLAGS7011890
Ref: 20207011890
Ref: using/configure cmdoption-arg-LIBS7011981
Ref: 20217011981
Ref: using/configure cmdoption-arg-MACHDEP7012072
Ref: 20227012072
Node: Opções para dependências de terceiros7012157
Ref: using/configure options-for-third-party-dependencies7012322
Ref: 20237012322
Ref: using/configure cmdoption-arg-BZIP2_CFLAGS7012447
Ref: 20247012447
Ref: using/configure cmdoption-arg-BZIP2_LIBS7012473
Ref: 20257012473
Ref: using/configure cmdoption-arg-CURSES_CFLAGS7012659
Ref: 20267012659
Ref: using/configure cmdoption-arg-CURSES_LIBS7012686
Ref: 20277012686
Ref: using/configure cmdoption-arg-GDBM_CFLAGS7012883
Ref: 20287012883
Ref: using/configure cmdoption-arg-GDBM_LIBS7012908
Ref: 20297012908
Ref: using/configure cmdoption-arg-LIBB2_CFLAGS7012997
Ref: 202a7012997
Ref: using/configure cmdoption-arg-LIBB2_LIBS7013023
Ref: 202b7013023
Ref: using/configure cmdoption-arg-LIBEDIT_CFLAGS7013216
Ref: 202c7013216
Ref: using/configure cmdoption-arg-LIBEDIT_LIBS7013244
Ref: 202d7013244
Ref: using/configure cmdoption-arg-LIBFFI_CFLAGS7013415
Ref: 202e7013415
Ref: using/configure cmdoption-arg-LIBFFI_LIBS7013442
Ref: 202f7013442
Ref: using/configure cmdoption-arg-LIBMPDEC_CFLAGS7013609
Ref: 20307013609
Ref: using/configure cmdoption-arg-LIBMPDEC_LIBS7013638
Ref: 20317013638
Ref: using/configure cmdoption-arg-LIBLZMA_CFLAGS7013948
Ref: 20327013948
Ref: using/configure cmdoption-arg-LIBLZMA_LIBS7013976
Ref: 20337013976
Ref: using/configure cmdoption-arg-LIBREADLINE_CFLAGS7014143
Ref: 20347014143
Ref: using/configure cmdoption-arg-LIBREADLINE_LIBS7014175
Ref: 20357014175
Ref: using/configure cmdoption-arg-LIBSQLITE3_CFLAGS7014354
Ref: 20367014354
Ref: using/configure cmdoption-arg-LIBSQLITE3_LIBS7014385
Ref: 20377014385
Ref: using/configure cmdoption-arg-LIBUUID_CFLAGS7014561
Ref: 20387014561
Ref: using/configure cmdoption-arg-LIBUUID_LIBS7014589
Ref: 20397014589
Ref: using/configure cmdoption-arg-LIBZSTD_CFLAGS7014757
Ref: 203a7014757
Ref: using/configure cmdoption-arg-LIBZSTD_LIBS7014785
Ref: 203b7014785
Ref: using/configure cmdoption-arg-PANEL_CFLAGS7014995
Ref: 203c7014995
Ref: using/configure cmdoption-arg-PANEL_LIBS7015021
Ref: 203d7015021
Ref: using/configure cmdoption-arg-TCLTK_CFLAGS7015316
Ref: 203e7015316
Ref: using/configure cmdoption-arg-TCLTK_LIBS7015342
Ref: 203f7015342
Ref: using/configure cmdoption-arg-ZLIB_CFLAGS7015464
Ref: 20407015464
Ref: using/configure cmdoption-arg-ZLIB_LIBS7015489
Ref: 20417015489
Node: Opções de WebAssembly7015653
Ref: using/configure webassembly-options7015821
Ref: 20427015821
Ref: using/configure cmdoption-enable-wasm-dynamic-linking7015884
Ref: 1ad17015884
Ref: using/configure cmdoption-enable-wasm-pthreads7016197
Ref: 1aa47016197
Node: Opções de instalação7016311
Ref: using/configure install-options7016461
Ref: 20437016461
Ref: using/configure cmdoption-prefix7016524
Ref: 1ffc7016524
Ref: using/configure cmdoption-exec-prefix7016883
Ref: 1ffd7016883
Ref: using/configure cmdoption-disable-test-modules7017119
Ref: a827017119
Ref: using/configure cmdoption-with-ensurepip7017362
Ref: 20447017362
Node: Opções de desempenho7017788
Ref: using/configure performance-options7017952
Ref: 20457017952
Ref: using/configure cmdoption-enable-optimizations7018233
Ref: a587018233
Ref: using/configure envvar-PROFILE_TASK7019404
Ref: 19bd7019404
Ref: using/configure cmdoption-with-lto7019761
Ref: 9477019761
Ref: using/configure cmdoption-enable-bolt7020392
Ref: 20467020392
Ref: using/configure cmdoption-arg-BOLT_APPLY_FLAGS7021618
Ref: 20477021618
Ref: using/configure cmdoption-arg-BOLT_INSTRUMENT_FLAGS7021769
Ref: 20487021769
Ref: using/configure cmdoption-with-computed-gotos7021903
Ref: 20497021903
Ref: using/configure cmdoption-with-tail-call-interp7022058
Ref: 1727022058
Ref: using/configure cmdoption-without-mimalloc7022538
Ref: 204a7022538
Ref: using/configure cmdoption-without-pymalloc7022725
Ref: 204b7022725
Ref: using/configure cmdoption-without-doc-strings7022941
Ref: 204c7022941
Ref: using/configure cmdoption-enable-profiling7023264
Ref: 204d7023264
Ref: using/configure cmdoption-with-strict-overflow7023391
Ref: 1a0b7023391
Ref: using/configure cmdoption-without-remote-debug7023559
Ref: 1707023559
Ref: using/configure c Py_REMOTE_DEBUG7024049
Ref: 204e7024049
Ref: Opções de desempenho-Footnote-17024465
Ref: Opções de desempenho-Footnote-27024525
Ref: Opções de desempenho-Footnote-37024573
Ref: Opções de desempenho-Footnote-47024647
Ref: Opções de desempenho-Footnote-57024689
Node: Compilação de depuração do Python7024731
Ref: using/configure debug-build7024894
Ref: 5037024894
Ref: using/configure python-debug-build7024894
Ref: 204f7024894
Node: Opções de depuração7027497
Ref: using/configure debug-options7027662
Ref: 20507027662
Ref: using/configure cmdoption-with-pydebug7027723
Ref: 65a7027723
Ref: using/configure cmdoption-with-trace-refs7027871
Ref: 62a7027871
Ref: using/configure cmdoption-with-assertions7028635
Ref: 6217028635
Ref: using/configure cmdoption-with-valgrind7029064
Ref: 20527029064
Ref: using/configure cmdoption-with-dtrace7029149
Ref: 20537029149
Ref: using/configure cmdoption-with-address-sanitizer7029334
Ref: 20547029334
Ref: using/configure cmdoption-with-memory-sanitizer7029752
Ref: 20557029752
Ref: using/configure cmdoption-with-undefined-behavior-sanitizer7029928
Ref: 20567029928
Ref: using/configure cmdoption-with-thread-sanitizer7030130
Ref: 20577030130
Node: Opções da ligação<2>7030301
Ref: using/configure id27030451
Ref: 20587030451
Ref: using/configure cmdoption-enable-shared7030510
Ref: a597030510
Ref: using/configure cmdoption-without-static-libpython7030651
Ref: a847030651
Node: Opções da biblioteca7030850
Ref: using/configure libraries-options7030999
Ref: 20597030999
Ref: using/configure cmdoption-with-libs7031062
Ref: 205a7031062
Ref: using/configure cmdoption-with-system-expat7031156
Ref: 1a5b7031156
Ref: using/configure cmdoption-with-system-libmpdec7031299
Ref: 64b7031299
Ref: using/configure cmdoption-with-readline7031902
Ref: 205b7031902
Ref: using/configure cmdoption-without-readline7032155
Ref: 205c7032155
Ref: using/configure cmdoption-with-libm7032349
Ref: 205d7032349
Ref: using/configure cmdoption-with-libc7032483
Ref: 205e7032483
Ref: using/configure cmdoption-with-openssl7032607
Ref: 205f7032607
Ref: using/configure cmdoption-with-openssl-rpath7032706
Ref: a857032706
Node: Opções de segurança7033103
Ref: using/configure security-options7033245
Ref: 20607033245
Ref: using/configure cmdoption-with-hash-algorithm7033307
Ref: 20617033307
Ref: using/configure cmdoption-with-builtin-hashlib-hashes7033651
Ref: 20627033651
Ref: using/configure cmdoption-with-ssl-default-suites7033960
Ref: 20637033960
Ref: using/configure cmdoption-disable-safety7034498
Ref: 4427034498
Ref: using/configure cmdoption-enable-slower-safety7035325
Ref: 4437035325
Ref: Opções de segurança-Footnote-17036124
Ref: Opções de segurança-Footnote-27036280
Ref: Opções de segurança-Footnote-37036492
Ref: Opções de segurança-Footnote-47036712
Ref: Opções de segurança-Footnote-57036868
Node: Opções do macOS7037083
Ref: using/configure macos-options7037218
Ref: 20647037218
Ref: using/configure cmdoption-enable-universalsdk7037296
Ref: b597037296
Ref: using/configure cmdoption-07037331
Ref: 20657037331
Ref: using/configure cmdoption-enable-framework7037535
Ref: 20667037535
Ref: using/configure cmdoption-17037567
Ref: 20677037567
Ref: using/configure cmdoption-with-universal-archs7037782
Ref: 20687037782
Ref: using/configure cmdoption-with-framework-name7038644
Ref: 20697038644
Ref: using/configure cmdoption-with-app-store-compliance7038840
Ref: 18dd7038840
Ref: using/configure cmdoption-27038881
Ref: 206a7038881
Ref: Opções do macOS-Footnote-17039445
Ref: Opções do macOS-Footnote-27039512
Node: Opções do iOS7039613
Ref: using/configure ios-options7039758
Ref: 206b7039758
Ref: using/configure cmdoption-37039832
Ref: 206c7039832
Ref: using/configure cmdoption-47040020
Ref: 206d7040020
Ref: Opções do iOS-Footnote-17040163
Node: Opções de compilação cruzada7040230
Ref: using/configure cross-compiling-options7040349
Ref: 206e7040349
Ref: using/configure cmdoption-build7040782
Ref: 206f7040782
Ref: using/configure cmdoption-host7040901
Ref: 20707040901
Ref: using/configure cmdoption-with-build-python7041033
Ref: 20717041033
Ref: using/configure cmdoption-arg-CONFIG_SITE7041194
Ref: 20727041194
Ref: using/configure cmdoption-arg-HOSTRUNNER7041505
Ref: 20737041505
Node: Sistema de Construção Python7041871
Ref: using/configure python-build-system7042046
Ref: 20747042046
Node: Arquivos principais do sistema de construção7042268
Ref: using/configure main-files-of-the-build-system7042423
Ref: 20757042423
Node: Principais etapas de construção7042824
Ref: using/configure main-build-steps7043016
Ref: 20767043016
Node: Alvos principais do Makefile7043480
Ref: using/configure main-makefile-targets7043638
Ref: 20777043638
Node: make7043889
Ref: using/configure make7043980
Ref: 20787043980
Node: make platform7045566
Ref: using/configure make-platform7045682
Ref: 20797045682
Node: make profile-opt7046029
Ref: using/configure make-profile-opt7046151
Ref: 207a7046151
Node: make clean7046431
Ref: using/configure make-clean7046554
Ref: 207b7046554
Node: make distclean7046624
Ref: using/configure make-distclean7046743
Ref: 207c7046743
Ref: make distclean-Footnote-17046999
Node: make install7047480
Ref: using/configure make-install7047598
Ref: 207d7047598
Node: make test7047689
Ref: using/configure make-test7047800
Ref: 207e7047800
Node: make ci7048190
Ref: using/configure make-ci7048306
Ref: 207f7048306
Node: make buildbottest7048467
Ref: using/configure make-buildbottest7048588
Ref: 20807048588
Node: make regen-all7048792
Ref: using/configure make-regen-all7048897
Ref: 20817048897
Node: Extensões C7049238
Ref: using/configure c-extensions7049354
Ref: 20827049354
Node: Sinalizadores do compilador e do vinculador7051157
Ref: using/configure compiler-and-linker-flags7051297
Ref: 20837051297
Node: Sinalizadores do pré-processador7051614
Ref: using/configure preprocessor-flags7051763
Ref: 20847051763
Ref: using/configure envvar-CONFIGURE_CPPFLAGS7051847
Ref: 20857051847
Ref: using/configure envvar-CPPFLAGS7052020
Ref: 16a77052020
Ref: using/configure envvar-BASECPPFLAGS7052438
Ref: 20867052438
Ref: using/configure envvar-PY_CPPFLAGS7052512
Ref: 20877052512
Node: Sinalizadores do compilador7052805
Ref: using/configure compiler-flags7052990
Ref: 20887052990
Ref: using/configure envvar-CC7053063
Ref: 16a47053063
Ref: using/configure envvar-CXX7053160
Ref: 20897053160
Ref: using/configure envvar-CFLAGS7053260
Ref: 16a57053260
Ref: using/configure envvar-CFLAGS_NODIST7053332
Ref: 208a7053332
Ref: using/configure envvar-COMPILEALL_OPTS7054315
Ref: 208b7054315
Ref: using/configure envvar-EXTRA_CFLAGS7054538
Ref: 208c7054538
Ref: using/configure envvar-CONFIGURE_CFLAGS7054622
Ref: 208d7054622
Ref: using/configure envvar-CONFIGURE_CFLAGS_NODIST7054791
Ref: 208e7054791
Ref: using/configure envvar-BASECFLAGS7054974
Ref: 208f7054974
Ref: using/configure envvar-OPT7055053
Ref: 20517055053
Ref: using/configure envvar-CFLAGS_ALIASING7055122
Ref: 20907055122
Ref: using/configure envvar-CCSHARED7055301
Ref: 20917055301
Ref: using/configure envvar-CFLAGSFORSHARED7055488
Ref: 20927055488
Ref: using/configure envvar-PY_CFLAGS7055755
Ref: 20937055755
Ref: using/configure envvar-PY_CFLAGS_NODIST7055887
Ref: 20947055887
Ref: using/configure envvar-PY_STDMODULE_CFLAGS7056065
Ref: 20957056065
Ref: using/configure envvar-PY_CORE_CFLAGS7056332
Ref: 20967056332
Ref: using/configure envvar-PY_BUILTIN_MODULE_CFLAGS7056469
Ref: 20977056469
Ref: using/configure envvar-PURIFY7056787
Ref: 20987056787
Ref: Sinalizadores do compilador-Footnote-17056971
Node: Sinalizadores do vinculador7057026
Ref: using/configure linker-flags7057169
Ref: 20997057169
Ref: using/configure envvar-LINKCC7057242
Ref: 209a7057242
Ref: using/configure envvar-CONFIGURE_LDFLAGS7057417
Ref: 209b7057417
Ref: using/configure envvar-LDFLAGS_NODIST7057790
Ref: 209c7057790
Ref: using/configure envvar-CONFIGURE_LDFLAGS_NODIST7058503
Ref: 209d7058503
Ref: using/configure envvar-LDFLAGS7058688
Ref: 16a67058688
Ref: using/configure envvar-LIBS7059068
Ref: 209e7059068
Ref: using/configure envvar-LDSHARED7059243
Ref: 209f7059243
Ref: using/configure envvar-BLDSHARED7059386
Ref: 20a07059386
Ref: using/configure envvar-PY_LDFLAGS7059550
Ref: 20a17059550
Ref: using/configure envvar-PY_LDFLAGS_NODIST7059643
Ref: 20a27059643
Ref: using/configure envvar-PY_CORE_LDFLAGS7059790
Ref: 20a37059790
Ref: Sinalizadores do vinculador-Footnote-17060004
Node: Utilizando Python no Windows7060059
Ref: using/windows doc7060216
Ref: 20a47060216
Ref: using/windows no-color7060216
Ref: 20a57060216
Ref: using/windows using-on-windows7060216
Ref: c917060216
Ref: using/windows using-python-on-windows7060216
Ref: 20a67060216
Ref: using/windows pymanager7062875
Ref: 20aa7062875
Ref: using/windows windows-store7062875
Ref: 1e7e7062875
Ref: using/windows setting-envvars7062875
Ref: 1e7f7062875
Ref: using/windows windows-path-mod7062875
Ref: 12477062875
Ref: Utilizando Python no Windows-Footnote-17063376
Ref: Utilizando Python no Windows-Footnote-27063418
Node: Gerenciador de instalação do Python7063473
Ref: using/windows launcher7063603
Ref: 7cf7063603
Ref: using/windows python-install-manager7063603
Ref: 20ab7063603
Node: Instalação7064054
Ref: using/windows installation7064160
Ref: 20ac7064160
Ref: Instalação-Footnote-17066421
Ref: Instalação-Footnote-27066476
Node: Uso básico7066518
Ref: using/windows basic-use7066645
Ref: 20ae7066645
Node: Comando help7071239
Ref: using/windows command-help7071386
Ref: 20b27071386
Node: Listando ambientes de execução7072358
Ref: using/windows listing-runtimes7072528
Ref: 20b37072528
Node: Instalando ambientes de execução7074705
Ref: using/windows installing-runtimes7074884
Ref: 20b47074884
Node: Instalações offline7076562
Ref: using/windows offline-installs7076746
Ref: 20b67076746
Ref: using/windows pymanager-offline7076746
Ref: 20b57076746
Node: Desinstalando ambientes de execução7078081
Ref: using/windows uninstalling-runtimes7078245
Ref: 20b77078245
Node: Configuração7079695
Ref: using/windows configuration7079851
Ref: 20b87079851
Ref: using/windows pymanager-config7079851
Ref: 20b07079851
Ref: using/windows envvar-PYTHON_MANAGER_DEFAULT7081541
Ref: 20af7081541
Node: Shebang lines7088324
Ref: using/windows pymanager-shebang7088464
Ref: 20b17088464
Ref: using/windows shebang-lines7088464
Ref: 20b97088464
Ref: Shebang lines-Footnote-17092056
Node: Advanced Installation7092124
Ref: using/windows advanced-installation7092278
Ref: 20ba7092278
Ref: using/windows pymanager-advancedinstall7092278
Ref: 20ad7092278
Ref: Advanced Installation-Footnote-17096899
Ref: Advanced Installation-Footnote-27096975
Ref: Advanced Installation-Footnote-37097054
Ref: Advanced Installation-Footnote-47097141
Node: Administrative Configuration7097231
Ref: using/windows administrative-configuration7097411
Ref: 20bc7097411
Ref: using/windows pymanager-admin-config7097411
Ref: 20bb7097411
Node: Instalando binários com threads livres7103711
Ref: using/windows install-freethreaded-windows7103885
Ref: 4917103885
Ref: using/windows installing-free-threaded-binaries7103885
Ref: 20bd7103885
Node: Troubleshooting7104679
Ref: using/windows pymanager-troubleshoot7104816
Ref: 20a77104816
Ref: using/windows troubleshooting7104816
Ref: 20be7104816
Ref: Troubleshooting-Footnote-17112958
Node: O pacote embutível7113007
Ref: using/windows the-embeddable-package7113166
Ref: 20bf7113166
Ref: using/windows windows-embeddable7113166
Ref: 20a97113166
Node: Aplicação Python7115002
Ref: using/windows python-application7115104
Ref: 20c07115104
Node: Incorporando Python7116807
Ref: using/windows embedding-python7116909
Ref: 20c17116909
Node: Os pacotes nuget org7117760
Ref: using/windows the-nuget-org-packages7117902
Ref: 20c27117902
Ref: using/windows windows-nuget7117902
Ref: 20a87117902
Ref: Os pacotes nuget org-Footnote-17120513
Ref: Os pacotes nuget org-Footnote-27120544
Ref: Os pacotes nuget org-Footnote-37120590
Ref: Os pacotes nuget org-Footnote-47120639
Node: Pacotes com threads livres7120690
Ref: using/windows free-threaded-packages7120773
Ref: 20c37120773
Ref: Pacotes com threads livres-Footnote-17121390
Ref: Pacotes com threads livres-Footnote-27121449
Ref: Pacotes com threads livres-Footnote-37121511
Node: Pacotes Alternativos7121575
Ref: using/windows alternative-bundles7121724
Ref: 20c47121724
Ref: Pacotes Alternativos-Footnote-17122742
Ref: Pacotes Alternativos-Footnote-27122795
Ref: Pacotes Alternativos-Footnote-37122838
Ref: Pacotes Alternativos-Footnote-47122890
Ref: Pacotes Alternativos-Footnote-57123057
Node: Supported Windows versions7123094
Ref: using/windows supported-windows-versions7123258
Ref: 20c57123258
Ref: Supported Windows versions-Footnote-17123688
Node: Removendo a Limitação do MAX_PATH7123730
Ref: using/windows max-path7123884
Ref: e2f7123884
Ref: using/windows removing-the-max-path-limitation7123884
Ref: 20c67123884
Node: Modo UTF-87124767
Ref: using/windows utf-8-mode7124915
Ref: 20c77124915
Ref: using/windows win-utf8-mode7124915
Ref: 20c87124915
Ref: Modo UTF-8-Footnote-17126644
Ref: Modo UTF-8-Footnote-27126686
Node: Encontrando módulos7126728
Ref: using/windows finding-modules7126860
Ref: 20c97126860
Ref: using/windows windows-finding-modules7126860
Ref: e0e7126860
Node: Módulos adicionais7132564
Ref: using/windows additional-modules7132714
Ref: 20ca7132714
Node: PyWin327133176
Ref: using/windows pywin327133257
Ref: 20cc7133257
Ref: PyWin32-Footnote-17133880
Ref: PyWin32-Footnote-27133922
Ref: PyWin32-Footnote-37134011
Ref: PyWin32-Footnote-47134080
Ref: PyWin32-Footnote-57134174
Ref: PyWin32-Footnote-67134233
Node: cx_Freeze7134283
Ref: using/windows cx-freeze7134364
Ref: 20cd7134364
Ref: cx_Freeze-Footnote-17134664
Node: Compilando Python no Windows7134716
Ref: using/windows compiling-python-on-windows7134875
Ref: 20ce7134875
Ref: Compilando Python no Windows-Footnote-17135616
Ref: Compilando Python no Windows-Footnote-27135665
Node: The full installer deprecated7135728
Ref: using/windows the-full-installer-deprecated7135906
Ref: 20d07135906
Ref: using/windows windows-full7135906
Ref: 20d17135906
Node: Etapas de instalação7136481
Ref: using/windows installation-steps7136616
Ref: 20d27136616
Node: Removendo a Limitação do MAX_PATH<2>7139075
Ref: using/windows id27139236
Ref: 20d47139236
Node: Instalando sem UI7140223
Ref: using/windows install-quiet-option7140385
Ref: 7f97140385
Ref: using/windows installing-without-ui7140385
Ref: 20d57140385
Node: Instalando Sem Download7151609
Ref: using/windows install-layout-option7151761
Ref: 20d37151761
Ref: using/windows installing-without-downloading7151761
Ref: 20d67151761
Node: Modificando uma instalação7152824
Ref: using/windows modifying-an-install7153001
Ref: 20d77153001
Node: Instalando binários com threads livres<2>7154034
Ref: using/windows id37154179
Ref: 20d87154179
Ref: Instalando binários com threads livres<2>-Footnote-17156356
Node: Python Launcher for Windows Deprecated7156398
Ref: using/windows python-launcher-for-windows-deprecated7156539
Ref: 20d97156539
Ref: Python Launcher for Windows Deprecated-Footnote-17157745
Node: Começando7157787
Ref: using/windows getting-started7157895
Ref: 20da7157895
Node: Pela linha de comando7158045
Ref: using/windows from-the-command-line7158140
Ref: 20db7158140
Ref: Pela linha de comando-Footnote-17161017
Node: Ambientes virtuais7161059
Ref: using/windows virtual-environments7161176
Ref: 20dc7161176
Node: Por um script7161696
Ref: using/windows from-a-script7161820
Ref: 20dd7161820
Node: Por associação de arquivos7162953
Ref: using/windows from-file-associations7163050
Ref: 20de7163050
Node: Linhas Shebang7163691
Ref: using/windows id47163836
Ref: 20df7163836
Node: Argumentos em linhas shebang7168131
Ref: using/windows arguments-in-shebang-lines7168282
Ref: 20e17168282
Node: Personalização7168588
Ref: using/windows customization7168738
Ref: 20e27168738
Node: Personalização via arquivos INI7168883
Ref: using/windows customization-via-ini-files7169019
Ref: 20e37169019
Ref: using/windows launcher-ini7169019
Ref: 20e07169019
Node: Personalizando versões padrão do Python7169781
Ref: using/windows customizing-default-python-versions7169917
Ref: 20e47169917
Node: Diagnósticos7174017
Ref: using/windows diagnostics7174159
Ref: 20e57174159
Node: Teste de simulação7174652
Ref: using/windows dry-run7174798
Ref: 20e67174798
Node: Instalar sob demanda7175256
Ref: using/windows install-on-demand7175408
Ref: 20e77175408
Node: Códigos de retorno7175997
Ref: using/windows return-codes7176120
Ref: 20e87176120
Node: Usando Python em macOS7178095
Ref: using/mac doc7178259
Ref: 20e97178259
Ref: using/mac no-color7178259
Ref: 20ea7178259
Ref: using/mac using-on-mac7178259
Ref: 20eb7178259
Ref: using/mac using-python-on-macos7178259
Ref: 20ec7178259
Ref: using/mac getting-osx7179066
Ref: 20ee7179066
Ref: Usando Python em macOS-Footnote-17179341
Node: Usando Python para macOS do python org7179383
Ref: using/mac getting-and-installing-macpython7179517
Ref: 4927179517
Ref: using/mac using-python-for-macos-from-python-org7179517
Ref: 20ef7179517
Node: Etapas de instalação<2>7179714
Ref: using/mac installation-steps7179853
Ref: 20f07179853
Ref: Etapas de instalação<2>-Footnote-17185415
Ref: Etapas de instalação<2>-Footnote-27185457
Ref: Etapas de instalação<2>-Footnote-37185505
Ref: Etapas de instalação<2>-Footnote-47185562
Ref: Etapas de instalação<2>-Footnote-57185609
Node: Como executar um script Python7185658
Ref: using/mac how-to-run-a-python-script7185797
Ref: 20f27185797
Node: Distribuições alternativas7187945
Ref: using/mac alternative-bundles7188127
Ref: 20ed7188127
Ref: using/mac alternative-distributions7188127
Ref: 20f47188127
Ref: Distribuições alternativas-Footnote-17189249
Ref: Distribuições alternativas-Footnote-27189302
Ref: Distribuições alternativas-Footnote-37189345
Ref: Distribuições alternativas-Footnote-47189369
Node: Instalando pacotes adicionais ao python7189402
Ref: using/mac installing-additional-python-packages7189566
Ref: 20f57189566
Ref: using/mac mac-package-manager7189566
Ref: 20f67189566
Ref: using/mac osx-gui-scripts7189743
Ref: 20f77189743
Ref: Instalando pacotes adicionais ao python-Footnote-17189781
Node: Programação de GUI7189860
Ref: using/mac gui-programming7190015
Ref: 20f87190015
Ref: using/mac gui-programming-on-the-mac7190015
Ref: 20f97190015
Ref: Programação de GUI-Footnote-17191139
Ref: Programação de GUI-Footnote-27191180
Ref: Programação de GUI-Footnote-37191220
Ref: Programação de GUI-Footnote-47191261
Ref: Programação de GUI-Footnote-57191315
Ref: Programação de GUI-Footnote-67191340
Ref: Programação de GUI-Footnote-77191376
Ref: Programação de GUI-Footnote-87191404
Node: Tópicos Avançados7191433
Ref: using/mac advanced-topics7191564
Ref: 20fa7191564
Node: Instalando binários com threads livres<3>7191825
Ref: using/mac install-freethreaded-macos7191970
Ref: 20f17191970
Ref: using/mac installing-free-threaded-binaries7191970
Ref: 20fb7191970
Ref: Instalando binários com threads livres<3>-Footnote-17197579
Node: Instalação usando a linha de comando7197621
Ref: using/mac installing-using-the-command-line7197807
Ref: 20fd7197807
Node: Distribuindo aplicações Python7200740
Ref: using/mac distributing-python-applications7200912
Ref: 20fe7200912
Ref: using/mac distributing-python-applications-on-the-mac7200912
Ref: 20ff7200912
Ref: Distribuindo aplicações Python-Footnote-17201618
Ref: Distribuindo aplicações Python-Footnote-27201659
Ref: Distribuindo aplicações Python-Footnote-37201700
Ref: Distribuindo aplicações Python-Footnote-47201728
Node: Conformidade com a App Store7201761
Ref: using/mac app-store-compliance7201886
Ref: 21007201886
Ref: Conformidade com a App Store-Footnote-17203180
Node: Outros recursos7203274
Ref: using/mac other-resources7203376
Ref: 21017203376
Ref: Outros recursos-Footnote-17203669
Ref: Outros recursos-Footnote-27203712
Node: Utilizando Python no Android7203781
Ref: using/android doc7203937
Ref: 21027203937
Ref: using/android no-color7203937
Ref: 21037203937
Ref: using/android using-android7203937
Ref: 21047203937
Ref: using/android using-python-on-android7203937
Ref: 21057203937
Node: Adicionando Python a uma aplicação Android7205377
Ref: using/android adding-python-to-an-android-app7205536
Ref: 21087205536
Ref: Adicionando Python a uma aplicação Android-Footnote-17207344
Ref: Adicionando Python a uma aplicação Android-Footnote-27207385
Ref: Adicionando Python a uma aplicação Android-Footnote-37207426
Ref: Adicionando Python a uma aplicação Android-Footnote-47207462
Ref: Adicionando Python a uma aplicação Android-Footnote-57207529
Ref: Adicionando Python a uma aplicação Android-Footnote-67207560
Ref: Adicionando Python a uma aplicação Android-Footnote-77207628
Ref: Adicionando Python a uma aplicação Android-Footnote-87207678
Ref: Adicionando Python a uma aplicação Android-Footnote-97207748
Ref: Adicionando Python a uma aplicação Android-Footnote-107207838
Ref: Adicionando Python a uma aplicação Android-Footnote-117207961
Node: Construindo um pacote Python para Android7208062
Ref: using/android building-a-python-package-for-android7208221
Ref: 21097208221
Ref: Construindo um pacote Python para Android-Footnote-17208634
Node: Usando Python no iOS7208700
Ref: using/ios doc7208849
Ref: 210a7208849
Ref: using/ios no-color7208849
Ref: 210b7208849
Ref: using/ios using-ios7208849
Ref: 210c7208849
Ref: using/ios using-python-on-ios7208849
Ref: 210d7208849
Ref: Usando Python no iOS-Footnote-17210562
Ref: Usando Python no iOS-Footnote-27210590
Node: Python em tempo de execução no iOS7210615
Ref: using/ios python-at-runtime-on-ios7210741
Ref: 210e7210741
Node: Compatibilidade com a versão do iOS7211021
Ref: using/ios ios-version-compatibility7211168
Ref: 210f7211168
Node: Identificação da plataforma7211758
Ref: using/ios platform-identification7211951
Ref: 21107211951
Node: Disponibilidade da biblioteca padrão7212634
Ref: using/ios standard-library-availability7212821
Ref: 21137212821
Node: Módulos de extensão binária7213085
Ref: using/ios binary-extension-modules7213271
Ref: 21147213271
Node: Binários stub do compilador7216311
Ref: using/ios compiler-stub-binaries7216451
Ref: 21187216451
Node: Instalando Python no iOS7217998
Ref: using/ios installing-python-on-ios7218164
Ref: 21197218164
Node: Ferramentas para construir aplicações de iOS7218358
Ref: using/ios tools-for-building-ios-apps7218509
Ref: 211a7218509
Node: Adicionando Python a um projeto iOS7219430
Ref: using/ios adding-ios7219615
Ref: 21157219615
Ref: using/ios adding-python-to-an-ios-project7219615
Ref: 211b7219615
Ref: Adicionando Python a um projeto iOS-Footnote-17225289
Ref: Adicionando Python a um projeto iOS-Footnote-27225334
Node: Testando um pacote Python7225406
Ref: using/ios testing-a-python-package7225536
Ref: 211e7225536
Ref: Testando um pacote Python-Footnote-17228452
Ref: Testando um pacote Python-Footnote-27228522
Node: Conformidade com a App Store<2>7228594
Ref: using/ios app-store-compliance7228715
Ref: 211f7228715
Node: Código incompatível na biblioteca padrão7229397
Ref: using/ios incompatible-code-in-the-standard-library7229542
Ref: 21207229542
Ref: Código incompatível na biblioteca padrão-Footnote-17230255
Node: Manifestos de privacidade7230349
Ref: using/ios privacy-manifests7230494
Ref: 21217230494
Ref: Manifestos de privacidade-Footnote-17231317
Node: Editores e IDEs7231390
Ref: using/editors doc7231502
Ref: 21227231502
Ref: using/editors editors7231502
Ref: 20f37231502
Ref: using/editors editors-and-ides7231502
Ref: 21237231502
Ref: using/editors no-color7231502
Ref: 21247231502
Ref: Editores e IDEs-Footnote-17231870
Node: IDLE — editor e console Python7231912
Ref: using/editors idle-python-editor-and-shell7232027
Ref: 21257232027
Node: Outros editores e IDEs7232484
Ref: using/editors other-editors-and-ides7232599
Ref: 21267232599
Ref: Outros editores e IDEs-Footnote-17233029
Ref: Outros editores e IDEs-Footnote-27233072
Ref: Outros editores e IDEs-Footnote-37233123
Node: A Referência da Linguagem Python7233194
Ref: reference/index doc7233346
Ref: 21277233346
Ref: reference/index no-color7233346
Ref: 21287233346
Ref: reference/index reference-index7233346
Ref: 14a7233346
Ref: reference/index the-python-language-reference7233346
Ref: 21297233346
Node: Introdução<5>7234418
Ref: reference/introduction doc7234528
Ref: 212a7234528
Ref: reference/introduction id17234528
Ref: 212b7234528
Ref: reference/introduction introduction7234528
Ref: 212c7234528
Node: Implementações Alternativas7236517
Ref: reference/introduction alternate-implementations7236616
Ref: 212d7236616
Ref: reference/introduction implementations7236616
Ref: 1fc57236616
Ref: Implementações Alternativas-Footnote-17239166
Ref: Implementações Alternativas-Footnote-27239198
Ref: Implementações Alternativas-Footnote-37239235
Ref: Implementações Alternativas-Footnote-47239267
Node: Notação7239293
Ref: reference/introduction id27239392
Ref: 212e7239392
Ref: reference/introduction notation7239392
Ref: 212f7239392
Ref: reference/introduction grammar-token-notation-name7239576
Ref: 21307239576
Ref: reference/introduction grammar-token-notation-letter7239659
Ref: 21317239659
Ref: reference/introduction grammar-token-notation-digit7239694
Ref: 21327239694
Ref: reference/introduction lexical-lookaheads7242700
Ref: 21397242700
Ref: reference/introduction grammar-token-notation-literal7243387
Ref: 213a7243387
Ref: reference/introduction grammar-token-notation-alt-literal7243666
Ref: 213b7243666
Ref: Notação-Footnote-17243941
Ref: Notação-Footnote-27244018
Ref: Notação-Footnote-37244107
Node: Definições lexicais e sintáticas7244149
Ref: reference/introduction lexical-and-syntactic-definitions7244230
Ref: 213c7244230
Ref: reference/introduction notation-lexical-vs-syntactic7244230
Ref: 21387244230
Node: Análise léxica7245329
Ref: reference/lexical_analysis doc7245463
Ref: 21417245463
Ref: reference/lexical_analysis lexical7245463
Ref: 21407245463
Ref: reference/lexical_analysis lexical-analysis7245463
Ref: 21427245463
Ref: reference/lexical_analysis no-color7245463
Ref: 21437245463
Node: Estrutura das linhas7250260
Ref: reference/lexical_analysis id17250355
Ref: 214e7250355
Ref: reference/lexical_analysis line-structure7250355
Ref: 21467250355
Node: Linhas lógicas7250740
Ref: reference/lexical_analysis id27250836
Ref: 214f7250836
Ref: reference/lexical_analysis logical-lines7250836
Ref: 21507250836
Node: Linhas físicas7251312
Ref: reference/lexical_analysis id37251429
Ref: 21527251429
Ref: reference/lexical_analysis physical-lines7251429
Ref: 21537251429
Ref: reference/lexical_analysis grammar-token-python-grammar-newline7252256
Ref: 21547252256
Ref: Linhas físicas-Footnote-17252355
Node: Comentários7252408
Ref: reference/lexical_analysis comments7252540
Ref: 21497252540
Ref: reference/lexical_analysis id57252540
Ref: 21557252540
Node: Declarações de codificação7252880
Ref: reference/lexical_analysis encoding-declarations7253025
Ref: 21567253025
Ref: reference/lexical_analysis encodings7253025
Ref: 21447253025
Ref: reference/lexical_analysis lexical-source-character7254315
Ref: 21457254315
Ref: reference/lexical_analysis grammar-token-python-grammar-source_character7254589
Ref: 21577254589
Node: Junção de linha explícita7254651
Ref: reference/lexical_analysis explicit-joining7254812
Ref: 21487254812
Ref: reference/lexical_analysis explicit-line-joining7254812
Ref: 21587254812
Node: Junção de linha implícita7255875
Ref: reference/lexical_analysis implicit-joining7256022
Ref: 21517256022
Ref: reference/lexical_analysis implicit-line-joining7256022
Ref: 21597256022
Node: Linhas em branco7256935
Ref: reference/lexical_analysis blank-lines7257066
Ref: 215a7257066
Ref: reference/lexical_analysis id67257066
Ref: 215b7257066
Node: Indentação7257633
Ref: reference/lexical_analysis id77257767
Ref: 215c7257767
Ref: reference/lexical_analysis indentation7257767
Ref: 21477257767
Node: Espaços em branco entre tokens7261394
Ref: reference/lexical_analysis whitespace7261527
Ref: 213e7261527
Ref: reference/lexical_analysis whitespace-between-tokens7261527
Ref: 215e7261527
Node: Marcador de fim7262116
Ref: reference/lexical_analysis end-marker7262228
Ref: 215f7262228
Ref: reference/lexical_analysis endmarker-token7262228
Ref: 214d7262228
Node: Outros tokens7262375
Ref: reference/lexical_analysis id87262522
Ref: 21617262522
Ref: reference/lexical_analysis other-tokens7262522
Ref: 21627262522
Node: Nomes identificadores e palavras reservadas7263163
Ref: reference/lexical_analysis identifiers7263298
Ref: 214b7263298
Ref: reference/lexical_analysis names-identifiers-and-keywords7263298
Ref: 21667263298
Ref: reference/lexical_analysis grammar-token-python-grammar-NAME7265929
Ref: 21677265929
Ref: reference/lexical_analysis grammar-token-python-grammar-id_start7265998
Ref: 216a7265998
Ref: reference/lexical_analysis grammar-token-python-grammar-id_continue7266082
Ref: 216b7266082
Ref: reference/lexical_analysis grammar-token-python-grammar-xid_start7266173
Ref: 21687266173
Ref: reference/lexical_analysis grammar-token-python-grammar-xid_continue7266337
Ref: 21697266337
Ref: reference/lexical_analysis grammar-token-python-grammar-identifier7266481
Ref: 216c7266481
Ref: Nomes identificadores e palavras reservadas-Footnote-17266881
Ref: Nomes identificadores e palavras reservadas-Footnote-27266938
Ref: Nomes identificadores e palavras reservadas-Footnote-37267001
Ref: Nomes identificadores e palavras reservadas-Footnote-47267064
Ref: Nomes identificadores e palavras reservadas-Footnote-57267110
Ref: Nomes identificadores e palavras reservadas-Footnote-67267152
Node: Palavras reservadas7267229
Ref: reference/lexical_analysis id97267368
Ref: 216d7267368
Ref: reference/lexical_analysis keywords7267368
Ref: 21347267368
Node: Palavras reservadas contextuais7267980
Ref: reference/lexical_analysis id107268165
Ref: 216e7268165
Ref: reference/lexical_analysis soft-keywords7268165
Ref: a037268165
Node: Classes reservadas de identificadores7268968
Ref: reference/lexical_analysis id-classes7269125
Ref: 216f7269125
Ref: reference/lexical_analysis reserved-classes-of-identifiers7269125
Ref: 21707269125
Node: Literais7271282
Ref: reference/lexical_analysis id117271430
Ref: 21727271430
Ref: reference/lexical_analysis literals7271430
Ref: 21737271430
Node: Literais de string e bytes7271836
Ref: reference/lexical_analysis string-and-bytes-literals7271960
Ref: 21757271960
Ref: reference/lexical_analysis strings7271960
Ref: 214a7271960
Node: Strings entre aspas triplas7273257
Ref: reference/lexical_analysis triple-quoted-strings7273374
Ref: 21767273374
Node: Prefixos de string7274053
Ref: reference/lexical_analysis string-prefixes7274196
Ref: 21777274196
Ref: Prefixos de string-Footnote-17275517
Node: Gramática formal7275559
Ref: reference/lexical_analysis formal-grammar7275696
Ref: 217a7275696
Ref: reference/lexical_analysis grammar-token-python-grammar-STRING7276008
Ref: 217b7276008
Ref: reference/lexical_analysis grammar-token-python-grammar-stringprefix7276087
Ref: 217c7276087
Ref: reference/lexical_analysis grammar-token-python-grammar-stringcontent7276161
Ref: 217d7276161
Ref: reference/lexical_analysis grammar-token-python-grammar-stringitem7276405
Ref: 217f7276405
Ref: reference/lexical_analysis grammar-token-python-grammar-stringchar7276482
Ref: 21807276482
Ref: reference/lexical_analysis grammar-token-python-grammar-longstringitem7276569
Ref: 217e7276569
Ref: reference/lexical_analysis grammar-token-python-grammar-stringescapeseq7276625
Ref: 21817276625
Node: Sequências de escape7276873
Ref: reference/lexical_analysis escape-sequences7277009
Ref: 67c7277009
Ref: reference/lexical_analysis id127277009
Ref: 21827277009
Node: Fim de linha ignorado7281137
Ref: reference/lexical_analysis ignored-end-of-line7281245
Ref: 21897281245
Ref: reference/lexical_analysis string-escape-ignore7281245
Ref: 21837281245
Node: Caracteres escapados7281700
Ref: reference/lexical_analysis escaped-characters7281832
Ref: 218b7281832
Ref: reference/lexical_analysis string-escape-escaped-char7281832
Ref: 21847281832
Node: Caractere octal7282292
Ref: reference/lexical_analysis octal-character7282424
Ref: 218c7282424
Ref: reference/lexical_analysis string-escape-oct7282424
Ref: 21857282424
Node: Caractere hexadecimal7283123
Ref: reference/lexical_analysis hexadecimal-character7283260
Ref: 218d7283260
Ref: reference/lexical_analysis string-escape-hex7283260
Ref: 21867283260
Node: Caractere nomeado Unicode7283673
Ref: reference/lexical_analysis named-unicode-character7283826
Ref: 218e7283826
Ref: reference/lexical_analysis string-escape-named7283826
Ref: 21877283826
Ref: Caractere nomeado Unicode-Footnote-17284239
Node: Caracteres hexadecimais Unicode7284305
Ref: reference/lexical_analysis hexadecimal-unicode-characters7284476
Ref: 218f7284476
Ref: reference/lexical_analysis string-escape-long-hex7284476
Ref: 21887284476
Node: Sequências de espace não reconhecidas7284992
Ref: reference/lexical_analysis unrecognized-escape-sequences7285129
Ref: 21907285129
Node: Literais de bytes7285954
Ref: reference/lexical_analysis bytes-literal7286098
Ref: 21787286098
Ref: reference/lexical_analysis bytes-literals7286098
Ref: 21917286098
Node: Literais de string brutas7286791
Ref: reference/lexical_analysis raw-string-literals7286944
Ref: 21927286944
Ref: reference/lexical_analysis raw-strings7286944
Ref: 21797286944
Ref: reference/lexical_analysis f-strings7288152
Ref: 19a7288152
Node: Literais de strings formatadas7288152
Ref: reference/lexical_analysis formatted-string-literals7288327
Ref: 21937288327
Ref: reference/lexical_analysis id137288327
Ref: 21947288327
Ref: reference/lexical_analysis grammar-token-python-grammar-f_string7289028
Ref: 21957289028
Ref: reference/lexical_analysis grammar-token-python-grammar-replacement_field7289128
Ref: 21977289128
Ref: reference/lexical_analysis grammar-token-python-grammar-f_expression7289253
Ref: 21987289253
Ref: reference/lexical_analysis grammar-token-python-grammar-conversion7289504
Ref: 21997289504
Ref: reference/lexical_analysis grammar-token-python-grammar-format_spec7289544
Ref: 219a7289544
Ref: reference/lexical_analysis grammar-token-python-grammar-literal_char7289630
Ref: 21967289630
Ref: reference/lexical_analysis t-strings7295661
Ref: 176b7295661
Ref: Literais de strings formatadas-Footnote-17295699
Node: Literais de strings templates t-strings7295741
Ref: reference/lexical_analysis id147295882
Ref: 219e7295882
Ref: reference/lexical_analysis template-string-literals7295882
Ref: 219f7295882
Node: Literais numéricos7297856
Ref: reference/lexical_analysis numbers7297996
Ref: 214c7297996
Ref: reference/lexical_analysis numeric-literals7297996
Ref: 21a17297996
Ref: reference/lexical_analysis grammar-token-python-grammar-NUMBER7298203
Ref: 21a27298203
Node: Inteiros literais7298848
Ref: reference/lexical_analysis integer-literals7298957
Ref: 21a67298957
Ref: reference/lexical_analysis integers7298957
Ref: 21a77298957
Ref: reference/lexical_analysis grammar-token-python-grammar-integer7300554
Ref: 21a37300554
Ref: reference/lexical_analysis grammar-token-python-grammar-decinteger7300702
Ref: 21a87300702
Ref: reference/lexical_analysis grammar-token-python-grammar-bininteger7300775
Ref: 21a97300775
Ref: reference/lexical_analysis grammar-token-python-grammar-octinteger7300841
Ref: 21aa7300841
Ref: reference/lexical_analysis grammar-token-python-grammar-hexinteger7300907
Ref: 21ab7300907
Ref: reference/lexical_analysis grammar-token-python-grammar-zerointeger7300973
Ref: 21ac7300973
Ref: reference/lexical_analysis grammar-token-python-grammar-nonzerodigit7301010
Ref: 21ad7301010
Ref: reference/lexical_analysis grammar-token-python-grammar-digit7301039
Ref: 21ae7301039
Ref: reference/lexical_analysis grammar-token-python-grammar-bindigit7301068
Ref: 21af7301068
Ref: reference/lexical_analysis grammar-token-python-grammar-octdigit7301097
Ref: 21b07301097
Ref: reference/lexical_analysis grammar-token-python-grammar-hexdigit7301126
Ref: 21b17301126
Node: Literais de ponto flutuante7301290
Ref: reference/lexical_analysis floating7301429
Ref: 21b27301429
Ref: reference/lexical_analysis floating-point-literals7301429
Ref: 21b37301429
Ref: reference/lexical_analysis grammar-token-python-grammar-floatnumber7303013
Ref: 21a47303013
Ref: reference/lexical_analysis grammar-token-python-grammar-digitpart7303233
Ref: 21b57303233
Ref: reference/lexical_analysis grammar-token-python-grammar-exponent7303296
Ref: 21b67303296
Node: Literais imaginários7303461
Ref: reference/lexical_analysis imaginary7303574
Ref: 21b77303574
Ref: reference/lexical_analysis imaginary-literals7303574
Ref: 21b87303574
Ref: reference/lexical_analysis grammar-token-python-grammar-imagnumber7305238
Ref: 21a57305238
Ref: reference/lexical_analysis delimiters7305319
Ref: 21367305319
Ref: reference/lexical_analysis operators7305319
Ref: 21377305319
Node: Operators and delimiters7305320
Ref: reference/lexical_analysis lexical-ellipsis7305425
Ref: 21747305425
Ref: reference/lexical_analysis operators-and-delimiters7305425
Ref: 21b97305425
Ref: reference/lexical_analysis grammar-token-python-grammar-OP7305715
Ref: 21bb7305715
Ref: reference/lexical_analysis grammar-token-python-grammar-assignment_operator7305933
Ref: 21bc7305933
Ref: reference/lexical_analysis grammar-token-python-grammar-bitwise_operator7306091
Ref: 21bd7306091
Ref: reference/lexical_analysis grammar-token-python-grammar-comparison_operator7306161
Ref: 21be7306161
Ref: reference/lexical_analysis grammar-token-python-grammar-enclosing_delimiter7306231
Ref: 21bf7306231
Ref: reference/lexical_analysis grammar-token-python-grammar-other_delimiter7306300
Ref: 21c07306300
Ref: reference/lexical_analysis grammar-token-python-grammar-arithmetic_operator7306370
Ref: 21c17306370
Ref: reference/lexical_analysis grammar-token-python-grammar-other_op7306447
Ref: 21c27306447
Node: Modelo de dados7307500
Ref: reference/datamodel doc7307639
Ref: 21c57307639
Ref: reference/datamodel data-model7307639
Ref: 21c67307639
Ref: reference/datamodel datamodel7307639
Ref: 1c117307639
Ref: reference/datamodel no-color7307639
Ref: 21c77307639
Node: Objetos valores e tipos7307824
Ref: reference/datamodel objects7307937
Ref: 21c87307937
Ref: reference/datamodel objects-values-and-types7307937
Ref: 21c97307937
Ref: Objetos valores e tipos-Footnote-17313307
Node: A hierarquia de tipos padrão7313540
Ref: reference/datamodel the-standard-type-hierarchy7313689
Ref: 21ca7313689
Ref: reference/datamodel types7313689
Ref: 21cb7313689
Node: None7314837
Ref: reference/datamodel none7314930
Ref: 21cc7314930
Node: NotImplemented7315279
Ref: reference/datamodel notimplemented7315389
Ref: 21cd7315389
Node: Ellipsis7316358
Ref: reference/datamodel ellipsis7316478
Ref: 21cf7316478
Node: numbers Number7316728
Ref: reference/datamodel numbers-number7316845
Ref: 21d07316845
Node: numbers Integral7318197
Ref: reference/datamodel numbers-integral7318291
Ref: 21d17318291
Node: numbers Real float7319634
Ref: reference/datamodel datamodel-float7319760
Ref: 21b47319760
Ref: reference/datamodel numbers-real-float7319760
Ref: 21d27319760
Node: numbers Complex complex7320390
Ref: reference/datamodel numbers-complex-complex7320491
Ref: 21d37320491
Node: Sequências7320917
Ref: reference/datamodel sequences7321044
Ref: 21d47321044
Node: Sequências imutáveis7322350
Ref: reference/datamodel immutable-sequences7322450
Ref: 21d57322450
Node: Sequências mutáveis7324636
Ref: reference/datamodel mutable-sequences7324736
Ref: 21d77324736
Node: Tipos de conjuntos7325818
Ref: reference/datamodel set-types7325942
Ref: 21d87325942
Node: Mapeamentos7327367
Ref: reference/datamodel mappings7327496
Ref: 21da7327496
Node: Dicionários<2>7328014
Ref: reference/datamodel dictionaries7328077
Ref: 21db7328077
Node: Tipos chamáveis7329703
Ref: reference/datamodel callable-types7329825
Ref: 21dc7329825
Node: Funções definidas pelo usuário7330283
Ref: reference/datamodel user-defined-funcs7330400
Ref: 5957330400
Ref: reference/datamodel user-defined-functions7330400
Ref: 21dd7330400
Node: Atributos especiais de somente leitura7330853
Ref: reference/datamodel special-read-only-attributes7331000
Ref: 21de7331000
Ref: reference/datamodel function __globals__7331421
Ref: 14cf7331421
Ref: reference/datamodel function __closure__7331929
Ref: 14cc7331929
Node: Atributos especiais graváveis7332705
Ref: reference/datamodel special-writable-attributes7332852
Ref: 21e17332852
Ref: reference/datamodel function __doc__7333317
Ref: 13d57333317
Ref: reference/datamodel function __name__7333612
Ref: 14d07333612
Ref: reference/datamodel function __qualname__7333905
Ref: 21e27333905
Ref: reference/datamodel function __module__7334359
Ref: 21e37334359
Ref: reference/datamodel function __defaults__7334664
Ref: 14cd7334664
Ref: reference/datamodel function __code__7335172
Ref: 5967335172
Ref: reference/datamodel function __dict__7335469
Ref: 14ce7335469
Ref: reference/datamodel function __annotations__7335865
Ref: 13d47335865
Ref: reference/datamodel function __annotate__7336821
Ref: 21e57336821
Ref: reference/datamodel function __kwdefaults__7337387
Ref: 121e7337387
Ref: reference/datamodel function __type_params__7337710
Ref: 21e67337710
Ref: Atributos especiais graváveis-Footnote-17338801
Node: Métodos de instância7338843
Ref: reference/datamodel id27338988
Ref: 21e87338988
Ref: reference/datamodel instance-methods7338988
Ref: 1f5c7338988
Ref: reference/datamodel method __self__7339278
Ref: 15ba7339278
Ref: reference/datamodel method __func__7339585
Ref: 14f87339585
Ref: reference/datamodel method __doc__7339801
Ref: 21ea7339801
Ref: reference/datamodel method __name__7340307
Ref: 21eb7340307
Ref: reference/datamodel method __module__7340599
Ref: 21ec7340599
Ref: reference/datamodel method-binding7341223
Ref: 21e97341223
Node: Funções geradoras7342785
Ref: reference/datamodel generator-functions7342919
Ref: 21ed7342919
Node: Funções de corrotina7343628
Ref: reference/datamodel coroutine-functions7343772
Ref: 21ee7343772
Node: Funções geradoras assíncronas7344195
Ref: reference/datamodel asynchronous-generator-functions7344342
Ref: 21f07344342
Node: Funções embutidas<2>7345217
Ref: reference/datamodel built-in-functions7345360
Ref: 21f17345360
Ref: reference/datamodel builtin-functions7345360
Ref: 21e77345360
Node: Métodos embutidos7346202
Ref: reference/datamodel built-in-methods7346323
Ref: 21f27346323
Ref: reference/datamodel builtin-methods7346323
Ref: 21f37346323
Node: Classes<2>7346838
Ref: reference/datamodel classes7346958
Ref: 21f47346958
Ref: reference/datamodel id37346958
Ref: 21f57346958
Node: Instâncias de classe7347338
Ref: reference/datamodel class-instances7347431
Ref: 21f67347431
Node: Módulos<3>7347619
Ref: reference/datamodel module-objects7347752
Ref: 21f77347752
Ref: reference/datamodel modules7347752
Ref: 21f87347752
Node: Atributos relacionados à importação em objetos de módulo7348888
Ref: reference/datamodel import-mod-attrs7349054
Ref: 21fa7349054
Ref: reference/datamodel import-related-attributes-on-module-objects7349054
Ref: 21fb7349054
Ref: reference/datamodel module __name__7350798
Ref: 157d7350798
Ref: reference/datamodel module __spec__7351183
Ref: 21fd7351183
Ref: reference/datamodel module __package__7351491
Ref: 3217351491
Ref: reference/datamodel module __loader__7353731
Ref: 3397353731
Ref: reference/datamodel module __path__7355068
Ref: 1f097355068
Ref: reference/datamodel module __file__7355551
Ref: 22027355551
Ref: reference/datamodel module __cached__7355582
Ref: 31f7355582
Ref: Atributos relacionados à importação em objetos de módulo-Footnote-17357845
Ref: Atributos relacionados à importação em objetos de módulo-Footnote-27357887
Node: Outros atributos graváveis em objetos de módulo7357929
Ref: reference/datamodel other-writable-attributes-on-module-objects7358127
Ref: 22047358127
Ref: reference/datamodel module __doc__7358380
Ref: 1af77358380
Ref: reference/datamodel module __annotations__7358536
Ref: 22057358536
Ref: reference/datamodel module __annotate__7358933
Ref: 22067358933
Ref: Outros atributos graváveis em objetos de módulo-Footnote-17359212
Node: Dicionários do módulo7359254
Ref: reference/datamodel module-dictionaries7359383
Ref: 22077359383
Ref: reference/datamodel module __dict__7359530
Ref: 22087359530
Node: Classes personalizadas7360175
Ref: reference/datamodel class-attrs-and-methods7360316
Ref: 22097360316
Ref: reference/datamodel custom-classes7360316
Ref: 220a7360316
Node: Atributos especiais7362168
Ref: reference/datamodel special-attributes7362273
Ref: 220b7362273
Ref: reference/datamodel type __name__7362649
Ref: 16997362649
Ref: reference/datamodel type __qualname__7362940
Ref: 220c7362940
Ref: reference/datamodel type __module__7363254
Ref: 60b7363254
Ref: reference/datamodel type __dict__7363468
Ref: e4b7363468
Ref: reference/datamodel type __bases__7363895
Ref: 169a7363895
Ref: reference/datamodel type __doc__7364412
Ref: 1f4a7364412
Ref: reference/datamodel type __annotations__7364750
Ref: 17ac7364750
Ref: reference/datamodel type __annotate__7367336
Ref: 17ce7367336
Ref: reference/datamodel type __type_params__7367910
Ref: 220d7367910
Ref: reference/datamodel type __static_attributes__7368434
Ref: 4707368434
Ref: reference/datamodel type __firstlineno__7368988
Ref: 4717368988
Ref: reference/datamodel type __mro__7369631
Ref: 220e7369631
Ref: Atributos especiais-Footnote-17369979
Ref: Atributos especiais-Footnote-27370040
Node: Métodos especiais7370082
Ref: reference/datamodel special-methods7370187
Ref: 220f7370187
Ref: reference/datamodel type mro7370368
Ref: 22107370368
Ref: reference/datamodel type __subclasses__7370645
Ref: 7887370645
Node: Instâncias de classe<2>7371031
Ref: reference/datamodel id47371215
Ref: 22117371215
Node: Atributos especiais<2>7372872
Ref: reference/datamodel id57372955
Ref: 22147372955
Ref: reference/datamodel object __class__7373014
Ref: 169b7373014
Ref: reference/datamodel object __dict__7373104
Ref: 7727373104
Node: Objetos de E/S também conhecidos como objetos arquivo7373382
Ref: reference/datamodel i-o-objects-also-known-as-file-objects7373558
Ref: 22167373558
Node: Tipos internos7374362
Ref: reference/datamodel internal-types7374505
Ref: 22187374505
Node: Objetos código7374905
Ref: reference/datamodel code-objects7374994
Ref: 4e07374994
Ref: reference/datamodel id67374994
Ref: 22197374994
Node: Atributos especiais de somente leitura<2>7375826
Ref: reference/datamodel id77375955
Ref: 221a7375955
Ref: reference/datamodel codeobject co_name7376084
Ref: 221b7376084
Ref: reference/datamodel codeobject co_qualname7376274
Ref: 221c7376274
Ref: reference/datamodel codeobject co_argcount7376608
Ref: 221d7376608
Ref: reference/datamodel codeobject co_posonlyargcount7377103
Ref: 221e7377103
Ref: reference/datamodel codeobject co_kwonlyargcount7377502
Ref: 221f7377502
Ref: reference/datamodel codeobject co_nlocals7377892
Ref: 22207377892
Ref: reference/datamodel codeobject co_varnames7378204
Ref: 22217378204
Ref: reference/datamodel codeobject co_cellvars7378597
Ref: 22227378597
Ref: reference/datamodel codeobject co_freevars7379103
Ref: 21e07379103
Ref: reference/datamodel codeobject co_code7379938
Ref: 22247379938
Ref: reference/datamodel codeobject co_consts7380249
Ref: 17ff7380249
Ref: reference/datamodel codeobject co_names7380557
Ref: 22257380557
Ref: reference/datamodel codeobject co_filename7380866
Ref: 155f7380866
Ref: reference/datamodel codeobject co_firstlineno7381086
Ref: 22267381086
Ref: reference/datamodel codeobject co_lnotab7381297
Ref: 32e7381297
Ref: reference/datamodel codeobject co_stacksize7382136
Ref: 22277382136
Ref: reference/datamodel codeobject co_flags7382348
Ref: 18337382348
Node: Métodos de objetos código7383622
Ref: reference/datamodel methods-on-code-objects7383751
Ref: 222b7383751
Ref: reference/datamodel codeobject co_positions7383824
Ref: 7c57383824
Ref: reference/datamodel codeobject co_lines7385534
Ref: 34d7385534
Ref: reference/datamodel codeobject replace7387250
Ref: 222c7387250
Ref: Métodos de objetos código-Footnote-17387567
Node: Objetos quadro7387609
Ref: reference/datamodel frame-objects7387724
Ref: 8e47387724
Ref: reference/datamodel id87387724
Ref: 222d7387724
Node: Atributos especiais de somente leitura<3>7388140
Ref: reference/datamodel id97388274
Ref: 222e7388274
Ref: reference/datamodel frame f_back7388397
Ref: 9847388397
Ref: reference/datamodel frame f_code7388798
Ref: 222f7388798
Ref: reference/datamodel frame f_locals7389384
Ref: 49f7389384
Ref: reference/datamodel frame f_globals7390135
Ref: 22307390135
Ref: reference/datamodel frame f_builtins7390436
Ref: 22317390436
Ref: reference/datamodel frame f_lasti7390745
Ref: a7e7390745
Ref: reference/datamodel frame f_generator7391153
Ref: 22327391153
Node: Atributos especiais graváveis<2>7391613
Ref: reference/datamodel id107391782
Ref: 22337391782
Ref: reference/datamodel frame f_trace7391889
Ref: 22347391889
Ref: reference/datamodel frame f_trace_lines7392523
Ref: dca7392523
Ref: reference/datamodel frame f_trace_opcodes7392933
Ref: dcb7392933
Ref: reference/datamodel frame f_lineno7393653
Ref: 9a57393653
Node: Métodos de objetos quadro7394299
Ref: reference/datamodel frame-object-methods7394418
Ref: 22357394418
Ref: reference/datamodel frame clear7394533
Ref: 57e7394533
Node: Objetos traceback7395253
Ref: reference/datamodel id117395366
Ref: 22367395366
Ref: reference/datamodel traceback-objects7395366
Ref: cdf7395366
Ref: reference/datamodel traceback tb_frame7396819
Ref: 22377396819
Ref: reference/datamodel traceback tb_lineno7397521
Ref: 22387397521
Ref: reference/datamodel traceback tb_lasti7397739
Ref: 22397397739
Ref: reference/datamodel traceback tb_next7398114
Ref: cde7398114
Node: Objetos slice7398405
Ref: reference/datamodel slice-objects7398529
Ref: 223a7398529
Ref: reference/datamodel slice indices7399066
Ref: 121d7399066
Node: Objetos método estático7399566
Ref: reference/datamodel static-method-objects7399698
Ref: 223e7399698
Node: Objetos método de classe7400362
Ref: reference/datamodel class-method-objects7400472
Ref: 223f7400472
Node: Nomes de métodos especiais7400963
Ref: reference/datamodel special-method-names7401099
Ref: 22407401099
Ref: reference/datamodel specialnames7401099
Ref: e5c7401099
Ref: Nomes de métodos especiais-Footnote-17403257
Node: Personalização básica7403619
Ref: reference/datamodel basic-customization7403753
Ref: 22427403753
Ref: reference/datamodel customization7403753
Ref: 22437403753
Ref: reference/datamodel object __new__7403817
Ref: 7957403817
Ref: reference/datamodel object __init__7405516
Ref: 8b47405516
Ref: reference/datamodel object __del__7406463
Ref: 11f37406463
Ref: reference/datamodel object __repr__7409992
Ref: 8247409992
Ref: reference/datamodel object __str__7410966
Ref: 8257410966
Ref: reference/datamodel object __bytes__7411674
Ref: 7f37411674
Ref: reference/datamodel object __format__7411941
Ref: 8267411941
Ref: reference/datamodel richcmpfuncs7413273
Ref: 22447413273
Ref: reference/datamodel object __lt__7413273
Ref: 149c7413273
Ref: reference/datamodel object __le__7413314
Ref: 15067413314
Ref: reference/datamodel object __eq__7413355
Ref: ce57413355
Ref: reference/datamodel object __ne__7413396
Ref: 17057413396
Ref: reference/datamodel object __gt__7413437
Ref: 15077413437
Ref: reference/datamodel object __ge__7413478
Ref: 15087413478
Ref: reference/datamodel object __hash__7416811
Ref: ce67416811
Ref: reference/datamodel object __bool__7421377
Ref: 14d17421377
Node: Personalizando o acesso aos atributos7421930
Ref: reference/datamodel attribute-access7422109
Ref: 22467422109
Ref: reference/datamodel customizing-attribute-access7422109
Ref: 22477422109
Ref: reference/datamodel object __getattr__7422378
Ref: 6ef7422378
Ref: reference/datamodel object __getattribute__7423744
Ref: dbf7423744
Ref: reference/datamodel object __setattr__7424920
Ref: 22127424920
Ref: reference/datamodel object __delattr__7425640
Ref: 22137425640
Ref: reference/datamodel object __dir__7426058
Ref: 17587426058
Node: Personalizando acesso a atributos de módulos7426435
Ref: reference/datamodel customizing-module-attribute-access7426588
Ref: 22497426588
Ref: reference/datamodel module __getattr__7426696
Ref: ccb7426696
Ref: reference/datamodel module __dir__7426731
Ref: ccc7426731
Ref: reference/datamodel module __class__7427649
Ref: 224a7427649
Ref: Personalizando acesso a atributos de módulos-Footnote-17428983
Node: Implementando descritores7429025
Ref: reference/datamodel descriptors7429208
Ref: e3d7429208
Ref: reference/datamodel implementing-descriptors7429208
Ref: 224b7429208
Ref: reference/datamodel object __get__7429793
Ref: 16d67429793
Ref: reference/datamodel object __set__7430813
Ref: 224c7430813
Ref: reference/datamodel object __delete__7431206
Ref: 18a27431206
Ref: reference/datamodel object __objclass__7431438
Ref: 224e7431438
Ref: Implementando descritores-Footnote-17432054
Node: Invocando descritores7432096
Ref: reference/datamodel descriptor-invocation7432246
Ref: 224d7432246
Ref: reference/datamodel invoking-descriptors7432246
Ref: 224f7432246
Node: __slots__<2>7435607
Ref: reference/datamodel id137435723
Ref: 22507435723
Ref: reference/datamodel slots7435723
Ref: 22157435723
Ref: reference/datamodel object __slots__7436162
Ref: 16d97436162
Ref: reference/datamodel datamodel-note-slots7436510
Ref: 22517436510
Node: Personalizando a criação de classe7439851
Ref: reference/datamodel class-customization7440061
Ref: e397440061
Ref: reference/datamodel customizing-class-creation7440061
Ref: 22537440061
Ref: reference/datamodel object __init_subclass__7440590
Ref: 8387440590
Ref: reference/datamodel object __set_name__7442119
Ref: e3c7442119
Node: Metaclasses7443151
Ref: reference/datamodel id147443270
Ref: 22547443270
Ref: reference/datamodel metaclasses7443270
Ref: 22557443270
Node: Resolvendo entradas de MRO7444397
Ref: reference/datamodel resolving-mro-entries7444561
Ref: 22567444561
Ref: reference/datamodel object __mro_entries__7444632
Ref: cd67444632
Ref: Resolvendo entradas de MRO-Footnote-17445708
Node: Determinando a metaclasse apropriada7445750
Ref: reference/datamodel determining-the-appropriate-metaclass7445942
Ref: 22577445942
Node: Preparando o espaço de nomes da classe7446982
Ref: reference/datamodel prepare7447176
Ref: e4c7447176
Ref: reference/datamodel preparing-the-class-namespace7447176
Ref: 22587447176
Ref: Preparando o espaço de nomes da classe-Footnote-17448163
Node: Executando o corpo da classe7448205
Ref: reference/datamodel executing-the-class-body7448386
Ref: 22597448386
Node: Criando o objeto classe7449220
Ref: reference/datamodel class-object-creation7449383
Ref: e387449383
Ref: reference/datamodel creating-the-class-object7449383
Ref: 225a7449383
Ref: Criando o objeto classe-Footnote-17451954
Node: Usos para metaclasses7451996
Ref: reference/datamodel uses-for-metaclasses7452122
Ref: 225b7452122
Node: Personalizando verificações de instância e subclasse7452483
Ref: reference/datamodel customizing-instance-and-subclass-checks7452681
Ref: 225c7452681
Ref: reference/datamodel type __instancecheck__7453216
Ref: 225d7453216
Ref: reference/datamodel type __subclasscheck__7453469
Ref: 225e7453469
Ref: Personalizando verificações de instância e subclasse-Footnote-17454491
Node: Emulando tipos genéricos7454533
Ref: reference/datamodel emulating-generic-types7454722
Ref: 225f7454722
Ref: reference/datamodel object __class_getitem__7455752
Ref: 9387455752
Ref: Emulando tipos genéricos-Footnote-17456271
Node: O propósito de __class_getitem__7456313
Ref: reference/datamodel the-purpose-of-class-getitem7456453
Ref: 22617456453
Node: __class_getitem__ versus __getitem__7457459
Ref: reference/datamodel class-getitem-versus-getitem7457599
Ref: 22637457599
Ref: reference/datamodel classgetitem-versus-getitem7457599
Ref: 22647457599
Ref: __class_getitem__ versus __getitem__-Footnote-17461062
Node: Emulando objetos chamáveis7461104
Ref: reference/datamodel emulating-callable-objects7461265
Ref: 22687461265
Ref: reference/datamodel id157461265
Ref: 22697461265
Ref: reference/datamodel object __call__7461339
Ref: 76f7461339
Node: Emulando tipos contêineres7461651
Ref: reference/datamodel emulating-container-types7461812
Ref: 226a7461812
Ref: reference/datamodel sequence-types7461812
Ref: 226b7461812
Ref: reference/datamodel object __len__7464358
Ref: 22457464358
Ref: reference/datamodel object __length_hint__7465083
Ref: 11047465083
Ref: reference/datamodel object __getitem__7465931
Ref: 5817465931
Ref: reference/datamodel object __setitem__7467167
Ref: 14c77467167
Ref: reference/datamodel object __delitem__7467691
Ref: 14c87467691
Ref: reference/datamodel object __missing__7468151
Ref: 13b97468151
Ref: reference/datamodel object __iter__7468374
Ref: e5d7468374
Ref: reference/datamodel object __reversed__7468694
Ref: e7a7468694
Ref: reference/datamodel object __contains__7469729
Ref: 15ab7469729
Node: Emulando tipos numéricos7470367
Ref: reference/datamodel emulating-numeric-types7470546
Ref: 227b7470546
Ref: reference/datamodel numeric-types7470546
Ref: 227c7470546
Ref: reference/datamodel object __add__7470896
Ref: 22747470896
Ref: reference/datamodel object __sub__7470938
Ref: 227d7470938
Ref: reference/datamodel object __mul__7470980
Ref: 22777470980
Ref: reference/datamodel object __matmul__7471022
Ref: f6d7471022
Ref: reference/datamodel object __truediv__7471067
Ref: 10867471067
Ref: reference/datamodel object __floordiv__7471113
Ref: 16e27471113
Ref: reference/datamodel object __mod__7471160
Ref: 227e7471160
Ref: reference/datamodel object __divmod__7471202
Ref: 10877471202
Ref: reference/datamodel object __pow__7471247
Ref: 9ca7471247
Ref: reference/datamodel object __lshift__7471299
Ref: 227f7471299
Ref: reference/datamodel object __rshift__7471344
Ref: 22807471344
Ref: reference/datamodel object __and__7471389
Ref: 22817471389
Ref: reference/datamodel object __xor__7471431
Ref: 22827471431
Ref: reference/datamodel object __or__7471473
Ref: 22837471473
Ref: reference/datamodel object __radd__7472483
Ref: 22757472483
Ref: reference/datamodel object __rsub__7472526
Ref: 22847472526
Ref: reference/datamodel object __rmul__7472569
Ref: 22787472569
Ref: reference/datamodel object __rmatmul__7472612
Ref: f6e7472612
Ref: reference/datamodel object __rtruediv__7472658
Ref: 22857472658
Ref: reference/datamodel object __rfloordiv__7472705
Ref: 22867472705
Ref: reference/datamodel object __rmod__7472753
Ref: fc97472753
Ref: reference/datamodel object __rdivmod__7472796
Ref: 22877472796
Ref: reference/datamodel object __rpow__7472842
Ref: 1a57472842
Ref: reference/datamodel object __rlshift__7472895
Ref: 22887472895
Ref: reference/datamodel object __rrshift__7472941
Ref: 22897472941
Ref: reference/datamodel object __rand__7472987
Ref: 228a7472987
Ref: reference/datamodel object __rxor__7473030
Ref: 228b7473030
Ref: reference/datamodel object __ror__7473073
Ref: 228c7473073
Ref: reference/datamodel object __iadd__7474865
Ref: 22767474865
Ref: reference/datamodel object __isub__7474908
Ref: 228d7474908
Ref: reference/datamodel object __imul__7474951
Ref: 22797474951
Ref: reference/datamodel object __imatmul__7474994
Ref: f6f7474994
Ref: reference/datamodel object __itruediv__7475040
Ref: 228e7475040
Ref: reference/datamodel object __ifloordiv__7475087
Ref: 228f7475087
Ref: reference/datamodel object __imod__7475135
Ref: 22907475135
Ref: reference/datamodel object __ipow__7475178
Ref: 9c97475178
Ref: reference/datamodel object __ilshift__7475231
Ref: 22917475231
Ref: reference/datamodel object __irshift__7475277
Ref: 22927475277
Ref: reference/datamodel object __iand__7475323
Ref: 22937475323
Ref: reference/datamodel object __ixor__7475366
Ref: 22947475366
Ref: reference/datamodel object __ior__7475409
Ref: 22957475409
Ref: reference/datamodel object __neg__7476649
Ref: 22977476649
Ref: reference/datamodel object __pos__7476684
Ref: 22987476684
Ref: reference/datamodel object __abs__7476719
Ref: 22997476719
Ref: reference/datamodel object __invert__7476754
Ref: 229a7476754
Ref: reference/datamodel object __complex__7476916
Ref: 7f27476916
Ref: reference/datamodel object __int__7476955
Ref: 19d7476955
Ref: reference/datamodel object __float__7476990
Ref: bb77476990
Ref: reference/datamodel object __index__7477198
Ref: 19e7477198
Ref: reference/datamodel object __round__7477890
Ref: 229b7477890
Ref: reference/datamodel object __trunc__7477938
Ref: 19c7477938
Ref: reference/datamodel object __floor__7477975
Ref: 229c7477975
Ref: reference/datamodel object __ceil__7478012
Ref: 229d7478012
Ref: Emulando tipos numéricos-Footnote-17478565
Ref: Emulando tipos numéricos-Footnote-27478882
Ref: Emulando tipos numéricos-Footnote-37479090
Node: Gerenciadores de contexto da instrução with7479277
Ref: reference/datamodel context-managers7479502
Ref: 229f7479502
Ref: reference/datamodel with-statement-context-managers7479502
Ref: 22a07479502
Ref: reference/datamodel object __enter__7480474
Ref: 7d97480474
Ref: reference/datamodel object __exit__7480755
Ref: 14fc7480755
Ref: Gerenciadores de contexto da instrução with-Footnote-17481683
Node: Customizando argumentos posicionais na classe correspondência de padrão7481725
Ref: reference/datamodel class-pattern-matching7481946
Ref: 22a27481946
Ref: reference/datamodel customizing-positional-arguments-in-class-pattern-matching7481946
Ref: 22a37481946
Ref: reference/datamodel object __match_args__7482415
Ref: 1b627482415
Ref: Customizando argumentos posicionais na classe correspondência de padrão-Footnote-17483437
Node: Emulando tipos buffer7483479
Ref: reference/datamodel emulating-buffer-types7483666
Ref: 22a47483666
Ref: reference/datamodel python-buffer-protocol7483666
Ref: 22a57483666
Ref: reference/datamodel object __buffer__7484151
Ref: 6817484151
Ref: reference/datamodel object __release_buffer__7484652
Ref: 19a37484652
Ref: Emulando tipos buffer-Footnote-17485427
Node: Anotações7485469
Ref: reference/datamodel annotations7485611
Ref: 22a67485611
Ref: reference/datamodel object __annotations__7485822
Ref: 4557485822
Ref: reference/datamodel object __annotate__7486283
Ref: 18cc7486283
Ref: Anotações-Footnote-17487815
Node: Pesquisa de método especial7487857
Ref: reference/datamodel special-lookup7487969
Ref: 22487487969
Ref: reference/datamodel special-method-lookup7487969
Ref: 22a77487969
Node: Corrotinas7490817
Ref: reference/datamodel coroutines7490915
Ref: 22a87490915
Node: Objetos aguardáveis7491078
Ref: reference/datamodel awaitable-objects7491171
Ref: 22a97491171
Ref: reference/datamodel object __await__7491633
Ref: f697491633
Ref: Objetos aguardáveis-Footnote-17492517
Node: Objetos corrotina7492559
Ref: reference/datamodel coroutine-objects7492684
Ref: 21ef7492684
Ref: reference/datamodel id197492684
Ref: 22aa7492684
Ref: reference/datamodel coroutine send7493608
Ref: 22ad7493608
Ref: reference/datamodel coroutine throw7494124
Ref: 7107494124
Ref: reference/datamodel coroutine close7494924
Ref: 22af7494924
Node: Iteradores assíncronos7495556
Ref: reference/datamodel async-iterators7495699
Ref: f6b7495699
Ref: reference/datamodel asynchronous-iterators7495699
Ref: 22b07495699
Ref: reference/datamodel object __aiter__7496004
Ref: dea7496004
Ref: reference/datamodel object __anext__7496096
Ref: 17e87496096
Node: Gerenciadores de contexto assíncronos7497015
Ref: reference/datamodel async-context-managers7497132
Ref: 8077497132
Ref: reference/datamodel asynchronous-context-managers7497132
Ref: 22b17497132
Ref: reference/datamodel object __aenter__7497558
Ref: 22b27497558
Ref: reference/datamodel object __aexit__7497723
Ref: 18e57497723
Node: Modelo de execução7498229
Ref: reference/executionmodel doc7498377
Ref: 22b37498377
Ref: reference/executionmodel execmodel7498377
Ref: 22b47498377
Ref: reference/executionmodel execution-model7498377
Ref: 22b57498377
Ref: reference/executionmodel no-color7498377
Ref: 22b67498377
Node: Estrutura de um programa7498544
Ref: reference/executionmodel prog-structure7498656
Ref: 22b77498656
Ref: reference/executionmodel structure-of-a-program7498656
Ref: 22b87498656
Node: Nomeação e ligação7499877
Ref: reference/executionmodel naming7500011
Ref: 21df7500011
Ref: reference/executionmodel naming-and-binding7500011
Ref: 22b97500011
Node: Ligação de nomes7500253
Ref: reference/executionmodel bind-names7500359
Ref: 22ba7500359
Ref: reference/executionmodel binding-of-names7500359
Ref: 22bb7500359
Node: Resolução de nomes7502361
Ref: reference/executionmodel resolution-of-names7502497
Ref: 22be7502497
Ref: reference/executionmodel resolve-names7502497
Ref: 22bf7502497
Node: Escopos de anotação7506846
Ref: reference/executionmodel annotation-scopes7506987
Ref: 4a57506987
Ref: reference/executionmodel id17506987
Ref: 22c17506987
Ref: Escopos de anotação-Footnote-17510110
Ref: Escopos de anotação-Footnote-27510152
Ref: Escopos de anotação-Footnote-37510194
Ref: Escopos de anotação-Footnote-47510236
Node: Avaliação preguiçosa7510278
Ref: reference/executionmodel id27510429
Ref: 22c27510429
Ref: reference/executionmodel lazy-evaluation7510429
Ref: 67a7510429
Node: Builtins e execução restrita7512371
Ref: reference/executionmodel builtins-and-restricted-execution7512536
Ref: 22c37512536
Ref: reference/executionmodel restrict-exec7512536
Ref: 22c47512536
Node: Interação com recursos dinâmicos7513381
Ref: reference/executionmodel dynamic-features7513514
Ref: 22c57513514
Ref: reference/executionmodel interaction-with-dynamic-features7513514
Ref: 22c67513514
Ref: Interação com recursos dinâmicos-Footnote-17514385
Node: Exceções<2>7514531
Ref: reference/executionmodel exceptions7514659
Ref: 22c77514659
Ref: reference/executionmodel id47514659
Ref: 22c87514659
Node: Runtime Components7516978
Ref: reference/executionmodel execcomponents7517075
Ref: 22c97517075
Ref: reference/executionmodel runtime-components7517075
Ref: 22ca7517075
Node: General Computing Model7517189
Ref: reference/executionmodel general-computing-model7517296
Ref: 22cb7517296
Node: Python Runtime Model7520231
Ref: reference/executionmodel python-runtime-model7520338
Ref: 22cc7520338
Ref: Python Runtime Model-Footnote-17525766
Node: O sistema de importação7525825
Ref: reference/import doc7525969
Ref: 22cd7525969
Ref: reference/import importsystem7525969
Ref: 21f97525969
Ref: reference/import no-color7525969
Ref: 22ce7525969
Ref: reference/import the-import-system7525969
Ref: 22cf7525969
Ref: O sistema de importação-Footnote-17528905
Ref: O sistema de importação-Footnote-27528948
Ref: O sistema de importação-Footnote-37528990
Node: importlib<10>7529032
Ref: reference/import importlib7529126
Ref: 22d17529126
Node: Pacotes<2>7529547
Ref: reference/import packages7529666
Ref: 22d27529666
Node: Pacotes regulares7531177
Ref: reference/import regular-packages7531277
Ref: 22d37531277
Node: Pacotes de espaço de nomes7532590
Ref: reference/import namespace-packages7532690
Ref: 22d57532690
Ref: reference/import reference-namespace-package7532690
Ref: 22d67532690
Ref: Pacotes de espaço de nomes-Footnote-17534252
Node: Caminho de busca7534294
Ref: reference/import searching7534410
Ref: 22d87534410
Node: O cache de módulos7535307
Ref: reference/import the-module-cache7535416
Ref: 22d97535416
Node: Localizadores e carregadores7537155
Ref: reference/import finders-and-loaders7537296
Ref: 22da7537296
Ref: reference/import id27537296
Ref: 22db7537296
Node: Ganchos de importação7539431
Ref: reference/import import-hooks7539566
Ref: 22de7539566
Node: O metacaminho7540633
Ref: reference/import the-meta-path7540731
Ref: 22df7540731
Node: Carregando7544388
Ref: reference/import loading7544526
Ref: 22e17544526
Ref: Carregando-Footnote-17547938
Node: Carregadores7548361
Ref: reference/import loaders7548440
Ref: 22e27548440
Node: Submódulos7552044
Ref: reference/import submodules7552159
Ref: 22e37552159
Node: Especificações de módulo7553456
Ref: reference/import id47553589
Ref: 22e47553589
Ref: reference/import module-specs7553589
Ref: 21ff7553589
Node: Atributo __path__ dos módulos7554819
Ref: reference/import package-path-rules7554968
Ref: 22007554968
Ref: reference/import path-attributes-on-modules7554968
Ref: 22e77554968
Ref: Atributo __path__ dos módulos-Footnote-17556431
Ref: Atributo __path__ dos módulos-Footnote-27556473
Node: Representações do módulo7556515
Ref: reference/import module-reprs7556671
Ref: 22e87556671
Node: Invalidação de bytecode em cache7558306
Ref: reference/import cached-bytecode-invalidation7558423
Ref: 22e97558423
Ref: reference/import pyc-invalidation7558423
Ref: 7f77558423
Node: O localizador baseado no caminho7560065
Ref: reference/import the-path-based-finder7560233
Ref: 22ea7560233
Node: Localizadores de entrada de caminho7563267
Ref: reference/import path-entry-finders7563426
Ref: 22ec7563426
Node: Protocolo do localizador de entrada de caminho7569219
Ref: reference/import path-entry-finder-protocol7569378
Ref: 22ee7569378
Node: Substituindo o sistema de importação padrão7572172
Ref: reference/import replacing-the-standard-import-system7572363
Ref: 22ef7572363
Node: Importações relativas ao pacote7573472
Ref: reference/import package-relative-imports7573670
Ref: 22f07573670
Ref: reference/import relativeimports7573670
Ref: 22f17573670
Node: Considerações especiais para __main__7574954
Ref: reference/import import-dunder-main7575118
Ref: 22f27575118
Ref: reference/import special-considerations-for-main7575118
Ref: 22f37575118
Node: __main__ __spec__7575811
Ref: reference/import id57575904
Ref: 22f47575904
Ref: reference/import main-spec7575904
Ref: 22e67575904
Node: Referências7577419
Ref: reference/import references7577541
Ref: 22f57577541
Ref: Referências-Footnote-17578914
Ref: Referências-Footnote-27578966
Ref: Referências-Footnote-37579008
Ref: Referências-Footnote-47579050
Ref: Referências-Footnote-57579092
Ref: Referências-Footnote-67579134
Ref: Referências-Footnote-77579176
Ref: Referências-Footnote-87579218
Ref: Referências-Footnote-97579260
Ref: Referências-Footnote-107579302
Node: Expressões7579345
Ref: reference/expressions doc7579489
Ref: 22f67579489
Ref: reference/expressions expressions7579489
Ref: 21c37579489
Ref: reference/expressions id17579489
Ref: 22f77579489
Ref: reference/expressions no-color7579489
Ref: 22f87579489
Ref: reference/expressions grammar-token-python-grammar-name7579805
Ref: 22f97579805
Node: Conversões aritméticas7580441
Ref: reference/expressions arithmetic-conversions7580529
Ref: 22fa7580529
Ref: reference/expressions conversions7580529
Ref: 22fb7580529
Node: Átomos7581366
Ref: reference/expressions atoms7581473
Ref: 22fc7581473
Ref: reference/expressions id27581473
Ref: 22fd7581473
Ref: reference/expressions grammar-token-python-grammar-atom7581754
Ref: 22fe7581754
Ref: reference/expressions grammar-token-python-grammar-enclosure7581842
Ref: 23007581842
Node: Identificadores Nomes7582461
Ref: reference/expressions atom-identifiers7582546
Ref: 21717582546
Ref: reference/expressions identifiers-names7582546
Ref: 23077582546
Ref: reference/expressions private-name-mangling7583064
Ref: 1f587583064
Node: Desfiguração de nome privado7583109
Ref: reference/expressions id37583197
Ref: 23087583197
Node: Literais<2>7585204
Ref: reference/expressions atom-literals7585319
Ref: 23097585319
Ref: reference/expressions literals7585319
Ref: 230a7585319
Ref: reference/expressions grammar-token-python-grammar-literal7585436
Ref: 22ff7585436
Node: Concatenação de literal de string7586302
Ref: reference/expressions string-concatenation7586385
Ref: 218a7586385
Ref: reference/expressions string-literal-concatenation7586385
Ref: 230c7586385
Ref: reference/expressions grammar-token-python-grammar-strings7586740
Ref: 230b7586740
Node: Formas de parênteses7588046
Ref: reference/expressions parenthesized7588195
Ref: 230d7588195
Ref: reference/expressions parenthesized-forms7588195
Ref: 230e7588195
Ref: reference/expressions grammar-token-python-grammar-parenth_form7588339
Ref: 23017588339
Node: Sintaxe de criação de listas conjuntos e dicionários7589190
Ref: reference/expressions comprehensions7589358
Ref: 7e17589358
Ref: reference/expressions displays-for-lists-sets-and-dictionaries7589358
Ref: 23107589358
Ref: reference/expressions grammar-token-python-grammar-comprehension7589910
Ref: 23117589910
Ref: reference/expressions grammar-token-python-grammar-comp_for7589987
Ref: 23137589987
Ref: reference/expressions grammar-token-python-grammar-comp_iter7590099
Ref: 23167590099
Ref: reference/expressions grammar-token-python-grammar-comp_if7590164
Ref: 23177590164
Ref: Sintaxe de criação de listas conjuntos e dicionários-Footnote-17592794
Node: Sintaxes de criação de lista7592836
Ref: reference/expressions list-displays7593016
Ref: 23187593016
Ref: reference/expressions lists7593016
Ref: 23197593016
Ref: reference/expressions grammar-token-python-grammar-list_display7593194
Ref: 23027593194
Node: Sintaxes de criação de conjunto7593724
Ref: reference/expressions set7593885
Ref: 231b7593885
Ref: reference/expressions set-displays7593885
Ref: 231c7593885
Ref: reference/expressions grammar-token-python-grammar-set_display7594149
Ref: 23047594149
Node: Sintaxes de criação de dicionário7594795
Ref: reference/expressions dict7594950
Ref: f737594950
Ref: reference/expressions dictionary-displays7594950
Ref: 231d7594950
Ref: reference/expressions grammar-token-python-grammar-dict_display7595179
Ref: 23037595179
Ref: reference/expressions grammar-token-python-grammar-dict_item_list7595276
Ref: 231e7595276
Ref: reference/expressions grammar-token-python-grammar-dict_item7595360
Ref: 23207595360
Ref: reference/expressions grammar-token-python-grammar-dict_comprehension7595463
Ref: 231f7595463
Ref: Sintaxes de criação de dicionário-Footnote-17597586
Ref: Sintaxes de criação de dicionário-Footnote-27597628
Node: Expressões geradoras<2>7597670
Ref: reference/expressions generator-expressions7597809
Ref: 23217597809
Ref: reference/expressions genexpr7597809
Ref: 23227597809
Ref: reference/expressions grammar-token-python-grammar-generator_expression7597950
Ref: 23057597950
Node: Expressões yield7600065
Ref: reference/expressions yield-expressions7600159
Ref: 23237600159
Ref: reference/expressions yieldexpr7600159
Ref: 23247600159
Ref: reference/expressions grammar-token-python-grammar-yield_atom7600213
Ref: 23067600213
Ref: reference/expressions grammar-token-python-grammar-yield_from7600274
Ref: 23257600274
Ref: reference/expressions grammar-token-python-grammar-yield_expression7600335
Ref: 219d7600335
Ref: Expressões yield-Footnote-17605517
Ref: Expressões yield-Footnote-27605559
Ref: Expressões yield-Footnote-37605601
Ref: Expressões yield-Footnote-47605643
Ref: Expressões yield-Footnote-57605685
Node: Métodos de iterador gerador7605727
Ref: reference/expressions generator-iterator-methods7605826
Ref: 23297605826
Ref: reference/expressions generator-methods7605826
Ref: 22ac7605826
Ref: reference/expressions generator __next__7606192
Ref: 1f637606192
Ref: reference/expressions generator send7606958
Ref: 22ae7606958
Ref: reference/expressions generator throw7607521
Ref: 7117607521
Ref: reference/expressions generator close7608897
Ref: 19a47608897
Node: Exemplos7609937
Ref: reference/expressions examples7610080
Ref: 232a7610080
Node: Funções geradoras assíncronas<2>7611199
Ref: reference/expressions asynchronous-generator-functions7611356
Ref: 23287611356
Ref: reference/expressions id47611356
Ref: 232b7611356
Ref: Funções geradoras assíncronas<2>-Footnote-17615291
Node: Métodos geradores-iteradores assíncronos7615371
Ref: reference/expressions asynchronous-generator-iterator-methods7615511
Ref: 232d7615511
Ref: reference/expressions asynchronous-generator-methods7615511
Ref: 232e7615511
Ref: reference/expressions agen __anext__7615758
Ref: 232c7615758
Ref: reference/expressions agen asend7616703
Ref: acc7616703
Ref: reference/expressions agen athrow7617564
Ref: 7127617564
Ref: reference/expressions agen aclose7618475
Ref: acb7618475
Node: Primárias7619623
Ref: reference/expressions id57619722
Ref: 232f7619722
Ref: reference/expressions primaries7619722
Ref: 23307619722
Ref: reference/expressions grammar-token-python-grammar-primary7619853
Ref: 23317619853
Node: Referências de atributo7620071
Ref: reference/expressions attribute-references7620164
Ref: 23367620164
Ref: reference/expressions id67620164
Ref: 23377620164
Ref: reference/expressions grammar-token-python-grammar-attributeref7620306
Ref: 23327620306
Node: Subscrições7621172
Ref: reference/expressions id77621285
Ref: 23387621285
Ref: reference/expressions subscriptions7621285
Ref: 22657621285
Ref: reference/expressions grammar-token-python-grammar-subscription7621573
Ref: 23337621573
Ref: Subscrições-Footnote-17624401
Node: Fatiamentos7624443
Ref: reference/expressions id87624540
Ref: 23397624540
Ref: reference/expressions slicings7624540
Ref: 233a7624540
Ref: reference/expressions grammar-token-python-grammar-slicing7624837
Ref: 23347624837
Ref: reference/expressions grammar-token-python-grammar-slice_list7624909
Ref: 233b7624909
Ref: reference/expressions grammar-token-python-grammar-slice_item7624989
Ref: 233c7624989
Ref: reference/expressions grammar-token-python-grammar-proper_slice7625059
Ref: 233d7625059
Ref: reference/expressions grammar-token-python-grammar-lower_bound7625166
Ref: 233e7625166
Ref: reference/expressions grammar-token-python-grammar-upper_bound7625208
Ref: 233f7625208
Ref: reference/expressions grammar-token-python-grammar-stride7625250
Ref: 23407625250
Node: Chamadas7626608
Ref: reference/expressions calls7626683
Ref: f717626683
Ref: reference/expressions id97626683
Ref: 23417626683
Ref: reference/expressions grammar-token-python-grammar-call7626870
Ref: 23357626870
Ref: reference/expressions grammar-token-python-grammar-argument_list7626990
Ref: 23437626990
Ref: reference/expressions grammar-token-python-grammar-positional_arguments7627320
Ref: 23447627320
Ref: reference/expressions grammar-token-python-grammar-positional_item7627412
Ref: 23477627412
Ref: reference/expressions grammar-token-python-grammar-starred_and_keywords7627503
Ref: 23457627503
Ref: reference/expressions grammar-token-python-grammar-keywords_arguments7627680
Ref: 23467627680
Ref: reference/expressions grammar-token-python-grammar-keyword_item7627859
Ref: 23487627859
Ref: Chamadas-Footnote-17635298
Node: Expressão await7635340
Ref: reference/expressions await7635455
Ref: 18d7635455
Ref: reference/expressions await-expression7635455
Ref: 23497635455
Ref: reference/expressions grammar-token-python-grammar-await_expr7635654
Ref: 234a7635654
Node: O operador de potência7635729
Ref: reference/expressions power7635879
Ref: 234b7635879
Ref: reference/expressions the-power-operator7635879
Ref: 234c7635879
Ref: reference/expressions grammar-token-python-grammar-power7636131
Ref: 234d7636131
Node: Operações aritméticas unárias e bit a bit7637437
Ref: reference/expressions unary7637605
Ref: 234f7637605
Ref: reference/expressions unary-arithmetic-and-bitwise-operations7637605
Ref: 23507637605
Ref: reference/expressions grammar-token-python-grammar-u_expr7637787
Ref: 234e7637787
Node: Operações binárias aritméticas7638623
Ref: reference/expressions binary7638795
Ref: 23517638795
Ref: reference/expressions binary-arithmetic-operations7638795
Ref: 23527638795
Ref: reference/expressions grammar-token-python-grammar-m_expr7639186
Ref: 23537639186
Ref: reference/expressions grammar-token-python-grammar-a_expr7639476
Ref: 23547639476
Ref: Operações binárias aritméticas-Footnote-17643868
Ref: Operações binárias aritméticas-Footnote-27644528
Node: Operações de deslocamento7644823
Ref: reference/expressions shifting7644981
Ref: 23567644981
Ref: reference/expressions shifting-operations7644981
Ref: 23577644981
Ref: reference/expressions grammar-token-python-grammar-shift_expr7645135
Ref: 23587645135
Node: Operações binárias bit a bit7645911
Ref: reference/expressions binary-bitwise-operations7646048
Ref: 23597646048
Ref: reference/expressions bitwise7646048
Ref: 235a7646048
Ref: reference/expressions grammar-token-python-grammar-and_expr7646203
Ref: 235b7646203
Ref: reference/expressions grammar-token-python-grammar-xor_expr7646294
Ref: 235c7646294
Ref: reference/expressions grammar-token-python-grammar-or_expr7646381
Ref: 219c7646381
Node: Comparações7647141
Ref: reference/expressions comparisons7647272
Ref: 235d7647272
Ref: reference/expressions id127647272
Ref: 235e7647272
Ref: reference/expressions grammar-token-python-grammar-comparison7647611
Ref: 235f7647611
Ref: reference/expressions grammar-token-python-grammar-comp_operator7647703
Ref: 23607647703
Node: Comparações de valor7648898
Ref: reference/expressions expressions-value-comparisons7649015
Ref: 1b1f7649015
Ref: reference/expressions value-comparisons7649015
Ref: 23617649015
Ref: reference/expressions in7657692
Ref: 3487657692
Ref: reference/expressions not-in7657692
Ref: 8367657692
Ref: Comparações de valor-Footnote-17657730
Ref: Comparações de valor-Footnote-27657772
Node: Operações de teste de pertinência7659002
Ref: reference/expressions membership-test-details7659155
Ref: 227a7659155
Ref: reference/expressions membership-test-operations7659155
Ref: 23627659155
Ref: reference/expressions is7661241
Ref: 3497661241
Node: Comparações de identidade7661241
Ref: reference/expressions identity-comparisons7661363
Ref: 23637661363
Ref: reference/expressions is-not7661363
Ref: 23647661363
Ref: reference/expressions booleans7661729
Ref: 23657661729
Ref: reference/expressions and7661729
Ref: 3467661729
Ref: reference/expressions or7661729
Ref: 34a7661729
Ref: Comparações de identidade-Footnote-17661767
Node: Operações booleanas7662111
Ref: reference/expressions boolean-operations7662241
Ref: 23667662241
Ref: reference/expressions not7662241
Ref: 23677662241
Ref: reference/expressions grammar-token-python-grammar-or_test7662298
Ref: 23157662298
Ref: reference/expressions grammar-token-python-grammar-and_test7662385
Ref: 23687662385
Ref: reference/expressions grammar-token-python-grammar-not_test7662474
Ref: 23697662474
Node: Expressões de atribuição<2>7664048
Ref: reference/expressions assignment-expressions7664189
Ref: 236a7664189
Ref: reference/expressions id157664189
Ref: 236b7664189
Ref: reference/expressions grammar-token-python-grammar-assignment_expression7664257
Ref: 23127664257
Ref: Expressões de atribuição<2>-Footnote-17665433
Node: Expressões condicionais7665475
Ref: reference/expressions conditional-expressions7665602
Ref: 236c7665602
Ref: reference/expressions if-expr7665602
Ref: 17d7665602
Ref: reference/expressions grammar-token-python-grammar-conditional_expression7665666
Ref: 219b7665666
Ref: reference/expressions grammar-token-python-grammar-expression7665774
Ref: 1827665774
Ref: reference/expressions lambdas7666283
Ref: 236e7666283
Ref: Expressões condicionais-Footnote-17666321
Node: Lambdas7666363
Ref: reference/expressions id167666481
Ref: 236f7666481
Ref: reference/expressions lambda7666481
Ref: 14997666481
Ref: reference/expressions grammar-token-python-grammar-lambda_expr7666512
Ref: 236d7666512
Node: Listas de expressões7667111
Ref: reference/expressions expression-lists7667225
Ref: 23717667225
Ref: reference/expressions exprlists7667225
Ref: f727667225
Ref: reference/expressions grammar-token-python-grammar-starred_expression7667283
Ref: 230f7667283
Ref: reference/expressions grammar-token-python-grammar-flexible_expression7667364
Ref: 23727667364
Ref: reference/expressions grammar-token-python-grammar-flexible_expression_list7667464
Ref: 231a7667464
Ref: reference/expressions grammar-token-python-grammar-starred_expression_list7667574
Ref: 23737667574
Ref: reference/expressions grammar-token-python-grammar-expression_list7667682
Ref: 23747667682
Ref: reference/expressions grammar-token-python-grammar-yield_list7667772
Ref: 23267667772
Ref: Listas de expressões-Footnote-17668999
Ref: Listas de expressões-Footnote-27669041
Node: Ordem de avaliação7669083
Ref: reference/expressions evalorder7669216
Ref: 23757669216
Ref: reference/expressions evaluation-order7669216
Ref: 23767669216
Node: Precedência de operadores7669718
Ref: reference/expressions operator-precedence7669821
Ref: 23777669821
Ref: reference/expressions operator-summary7669821
Ref: 23787669821
Ref: Precedência de operadores-Footnote-17674843
Ref: Precedência de operadores-Footnote-27675012
Node: Instruções simples7675118
Ref: reference/simple_stmts doc7675259
Ref: 23797675259
Ref: reference/simple_stmts no-color7675259
Ref: 237a7675259
Ref: reference/simple_stmts simple7675259
Ref: 237b7675259
Ref: reference/simple_stmts simple-statements7675259
Ref: 237c7675259
Ref: reference/simple_stmts grammar-token-python-grammar-simple_stmt7675504
Ref: 237d7675504
Node: Instruções de expressão7676687
Ref: reference/simple_stmts expression-statements7676807
Ref: 238f7676807
Ref: reference/simple_stmts exprstmts7676807
Ref: 23907676807
Ref: reference/simple_stmts grammar-token-python-grammar-expression_stmt7677281
Ref: 237e7677281
Node: Instruções de atribuição7677751
Ref: reference/simple_stmts assignment7677900
Ref: 22bc7677900
Ref: reference/simple_stmts assignment-statements7677900
Ref: 23917677900
Ref: reference/simple_stmts grammar-token-python-grammar-assignment_stmt7678099
Ref: 23807678099
Ref: reference/simple_stmts grammar-token-python-grammar-target_list7678219
Ref: 23147678219
Ref: reference/simple_stmts grammar-token-python-grammar-target7678294
Ref: 23927678294
Ref: reference/simple_stmts attr-target-note7682018
Ref: 23937682018
Ref: Instruções de atribuição-Footnote-17686380
Node: Instruções de atribuição aumentada7686422
Ref: reference/simple_stmts augassign7686570
Ref: 23947686570
Ref: reference/simple_stmts augmented-assignment-statements7686570
Ref: 23957686570
Ref: reference/simple_stmts grammar-token-python-grammar-augmented_assignment_stmt7686795
Ref: 23817686795
Ref: reference/simple_stmts grammar-token-python-grammar-augtarget7686932
Ref: 23967686932
Ref: reference/simple_stmts grammar-token-python-grammar-augop7687067
Ref: 23977687067
Node: instruções de atribuição anotado7688897
Ref: reference/simple_stmts annassign7689045
Ref: 23987689045
Ref: reference/simple_stmts annotated-assignment-statements7689045
Ref: 23997689045
Ref: reference/simple_stmts grammar-token-python-grammar-annotated_assignment_stmt7689307
Ref: 23827689307
Ref: instruções de atribuição anotado-Footnote-17691687
Ref: instruções de atribuição anotado-Footnote-27691729
Node: A instrução assert7691771
Ref: reference/simple_stmts assert7691912
Ref: b567691912
Ref: reference/simple_stmts the-assert-statement7691912
Ref: 239a7691912
Ref: reference/simple_stmts grammar-token-python-grammar-assert_stmt7692080
Ref: 237f7692080
Node: A instrução pass7693254
Ref: reference/simple_stmts pass7693387
Ref: 17e7693387
Ref: reference/simple_stmts the-pass-statement7693387
Ref: 239b7693387
Ref: reference/simple_stmts grammar-token-python-grammar-pass_stmt7693444
Ref: 23837693444
Node: A instrução del<2>7693822
Ref: reference/simple_stmts del7693955
Ref: 1a4f7693955
Ref: reference/simple_stmts the-del-statement7693955
Ref: 239c7693955
Ref: reference/simple_stmts grammar-token-python-grammar-del_stmt7694010
Ref: 23847694010
Node: A instrução return7695009
Ref: reference/simple_stmts return7695143
Ref: 1af7695143
Ref: reference/simple_stmts the-return-statement7695143
Ref: 239d7695143
Ref: reference/simple_stmts grammar-token-python-grammar-return_stmt7695204
Ref: 23857695204
Node: A instrução yield7696423
Ref: reference/simple_stmts the-yield-statement7696556
Ref: 239e7696556
Ref: reference/simple_stmts yield7696556
Ref: bb87696556
Ref: reference/simple_stmts grammar-token-python-grammar-yield_stmt7696615
Ref: 23867696615
Node: A instrução raise7697522
Ref: reference/simple_stmts raise7697654
Ref: 7f87697654
Ref: reference/simple_stmts the-raise-statement7697654
Ref: 239f7697654
Ref: reference/simple_stmts grammar-token-python-grammar-raise_stmt7697713
Ref: 23877697713
Node: A instrução break7702162
Ref: reference/simple_stmts break7702297
Ref: 17f7702297
Ref: reference/simple_stmts the-break-statement7702297
Ref: 23a27702297
Ref: reference/simple_stmts grammar-token-python-grammar-break_stmt7702356
Ref: 23887702356
Node: A instrução continue7702992
Ref: reference/simple_stmts continue7703128
Ref: 1807703128
Ref: reference/simple_stmts the-continue-statement7703128
Ref: 23a37703128
Ref: reference/simple_stmts grammar-token-python-grammar-continue_stmt7703195
Ref: 23897703195
Ref: reference/simple_stmts import7703702
Ref: 7ed7703702
Node: A instrução import7703704
Ref: reference/simple_stmts from7703841
Ref: 14a77703841
Ref: reference/simple_stmts the-import-statement7703841
Ref: 23a47703841
Ref: reference/simple_stmts grammar-token-python-grammar-import_stmt7703904
Ref: 238a7703904
Ref: reference/simple_stmts grammar-token-python-grammar-module7704547
Ref: 23a57704547
Ref: reference/simple_stmts grammar-token-python-grammar-relative_module7704624
Ref: 23a67704624
Ref: reference/simple_stmts module __all__7708093
Ref: f2f7708093
Node: Instruções future7710402
Ref: reference/simple_stmts future7710478
Ref: 45a7710478
Ref: reference/simple_stmts future-statements7710478
Ref: 23a77710478
Ref: reference/simple_stmts grammar-token-python-grammar-future_stmt7711031
Ref: 238b7711031
Ref: reference/simple_stmts grammar-token-python-grammar-feature7711399
Ref: 23a87711399
Ref: Instruções future-Footnote-17714394
Ref: Instruções future-Footnote-27714436
Node: A instrução global7714478
Ref: reference/simple_stmts global7714615
Ref: 4a67714615
Ref: reference/simple_stmts the-global-statement7714615
Ref: 23a97714615
Ref: reference/simple_stmts grammar-token-python-grammar-global_stmt7714678
Ref: 238c7714678
Node: A instrução nonlocal7716151
Ref: reference/simple_stmts nonlocal7716286
Ref: 14a37716286
Ref: reference/simple_stmts the-nonlocal-statement7716286
Ref: 23aa7716286
Ref: reference/simple_stmts grammar-token-python-grammar-nonlocal_stmt7716353
Ref: 238d7716353
Ref: A instrução nonlocal-Footnote-17717715
Node: A instrução type7717757
Ref: reference/simple_stmts the-type-statement7717863
Ref: 23ab7717863
Ref: reference/simple_stmts type7717863
Ref: 6617717863
Ref: reference/simple_stmts grammar-token-python-grammar-type_stmt7717922
Ref: 238e7717922
Ref: A instrução type-Footnote-17719384
Node: Instruções compostas7719426
Ref: reference/compound_stmts doc7719582
Ref: 23ad7719582
Ref: reference/compound_stmts compound7719582
Ref: 23ae7719582
Ref: reference/compound_stmts compound-statements7719582
Ref: 23af7719582
Ref: reference/compound_stmts no-color7719582
Ref: 23b07719582
Ref: reference/compound_stmts grammar-token-python-grammar-compound_stmt7721639
Ref: 23b17721639
Ref: reference/compound_stmts grammar-token-python-grammar-suite7722142
Ref: 23bd7722142
Ref: reference/compound_stmts grammar-token-python-grammar-statement7722241
Ref: 23bf7722241
Ref: reference/compound_stmts grammar-token-python-grammar-stmt_list7722321
Ref: 23be7722321
Ref: reference/compound_stmts if7722956
Ref: 1817722956
Ref: reference/compound_stmts elif7722956
Ref: 17b7722956
Node: A instrução if7723253
Ref: reference/compound_stmts else7723356
Ref: 17c7723356
Ref: reference/compound_stmts the-if-statement7723356
Ref: 23c07723356
Ref: reference/compound_stmts grammar-token-python-grammar-if_stmt7723477
Ref: 23b27723477
Node: A instrução while7724119
Ref: reference/compound_stmts the-while-statement7724248
Ref: 23c17724248
Ref: reference/compound_stmts while7724248
Ref: 18c37724248
Ref: reference/compound_stmts grammar-token-python-grammar-while_stmt7724417
Ref: 23b37724417
Node: A instrução for7725056
Ref: reference/compound_stmts for7725186
Ref: 3477725186
Ref: reference/compound_stmts the-for-statement7725186
Ref: 23c27725186
Ref: reference/compound_stmts grammar-token-python-grammar-for_stmt7725391
Ref: 23b47725391
Node: A instrução try7727213
Ref: reference/compound_stmts the-try-statement7727342
Ref: 23c37727342
Ref: reference/compound_stmts try7727342
Ref: 8ed7727342
Ref: reference/compound_stmts grammar-token-python-grammar-try_stmt7727515
Ref: 23b57727515
Ref: reference/compound_stmts grammar-token-python-grammar-try1_stmt7727604
Ref: 23c47727604
Ref: reference/compound_stmts grammar-token-python-grammar-try2_stmt7727855
Ref: 23c57727855
Ref: reference/compound_stmts grammar-token-python-grammar-try3_stmt7728108
Ref: 23c67728108
Ref: A instrução try-Footnote-17728729
Node: Cláusula except7728771
Ref: reference/compound_stmts except7728867
Ref: 1ab7728867
Ref: reference/compound_stmts except-clause7728867
Ref: 23c77728867
Ref: Cláusula except-Footnote-17732504
Node: Cláusula except*7732711
Ref: reference/compound_stmts except-star7732830
Ref: 1ac7732830
Ref: reference/compound_stmts id27732830
Ref: 23c87732830
Node: Cláusula else7735844
Ref: reference/compound_stmts else-clause7735964
Ref: 23c97735964
Ref: reference/compound_stmts except-else7735964
Ref: 23ca7735964
Node: Cláusula finally7736358
Ref: reference/compound_stmts finally7736452
Ref: 1b07736452
Ref: reference/compound_stmts finally-clause7736452
Ref: 23cb7736452
Ref: reference/compound_stmts with7738506
Ref: 1867738506
Ref: Cláusula finally-Footnote-17738542
Node: A instrução with7738584
Ref: reference/compound_stmts as7738715
Ref: 23cc7738715
Ref: reference/compound_stmts the-with-statement7738715
Ref: 23cd7738715
Ref: reference/compound_stmts grammar-token-python-grammar-with_stmt7739155
Ref: 23b67739155
Ref: reference/compound_stmts grammar-token-python-grammar-with_stmt_contents7739293
Ref: 23ce7739293
Ref: reference/compound_stmts grammar-token-python-grammar-with_item7739371
Ref: 23cf7739371
Ref: reference/compound_stmts match7742742
Ref: a047742742
Ref: A instrução with-Footnote-17742778
Node: A instrução match7742820
Ref: reference/compound_stmts case7742958
Ref: 23d07742958
Ref: reference/compound_stmts the-match-statement7742958
Ref: 23d17742958
Ref: reference/compound_stmts grammar-token-python-grammar-match_stmt7743121
Ref: 23b77743121
Ref: reference/compound_stmts grammar-token-python-grammar-subject_expr7743225
Ref: 23d27743225
Ref: reference/compound_stmts grammar-token-python-grammar-case_block7743341
Ref: 23d37743341
Ref: A instrução match-Footnote-17744371
Ref: A instrução match-Footnote-27744413
Node: Visão Geral7744455
Ref: reference/compound_stmts overview7744538
Ref: 23d67744538
Node: Guards7747364
Ref: reference/compound_stmts guards7747484
Ref: 23d87747484
Ref: reference/compound_stmts grammar-token-python-grammar-guard7747515
Ref: 23d57747515
Node: Blocos irrefutáveis de case7748748
Ref: reference/compound_stmts irrefutable-case7748864
Ref: 23d97748864
Ref: reference/compound_stmts irrefutable-case-blocks7748864
Ref: 23da7748864
Node: Padrões7749647
Ref: reference/compound_stmts patterns7749748
Ref: 23de7749748
Ref: reference/compound_stmts grammar-token-python-grammar-patterns7750139
Ref: 23d47750139
Ref: reference/compound_stmts grammar-token-python-grammar-pattern7750218
Ref: 23e07750218
Ref: reference/compound_stmts grammar-token-python-grammar-closed_pattern7750289
Ref: 23e37750289
Node: Padrões OR7751331
Ref: reference/compound_stmts id37751407
Ref: 23ec7751407
Ref: reference/compound_stmts or-patterns7751407
Ref: 23dc7751407
Ref: reference/compound_stmts grammar-token-python-grammar-or_pattern7751550
Ref: 23e27751550
Node: Padrões AS7752218
Ref: reference/compound_stmts as-patterns7752320
Ref: 23db7752320
Ref: reference/compound_stmts id47752320
Ref: 23ed7752320
Ref: reference/compound_stmts grammar-token-python-grammar-as_pattern7752477
Ref: 23e17752477
Node: Padrões literais7752873
Ref: reference/compound_stmts id57752983
Ref: 23ee7752983
Ref: reference/compound_stmts literal-patterns7752983
Ref: 23ef7752983
Ref: reference/compound_stmts grammar-token-python-grammar-literal_pattern7753125
Ref: 23e47753125
Ref: reference/compound_stmts grammar-token-python-grammar-signed_number7753437
Ref: 23f07753437
Node: Padrões de captura7754215
Ref: reference/compound_stmts capture-patterns7754331
Ref: 23dd7754331
Ref: reference/compound_stmts id67754331
Ref: 23f27754331
Ref: reference/compound_stmts grammar-token-python-grammar-capture_pattern7754458
Ref: 23e57754458
Ref: Padrões de captura-Footnote-17755290
Node: Padrões curingas7755332
Ref: reference/compound_stmts id77755448
Ref: 23f37755448
Ref: reference/compound_stmts wildcard-patterns7755448
Ref: a057755448
Ref: reference/compound_stmts grammar-token-python-grammar-wildcard_pattern7755608
Ref: 23e67755608
Node: Padrões de valor7755929
Ref: reference/compound_stmts id87756043
Ref: 23f47756043
Ref: reference/compound_stmts value-patterns7756043
Ref: 23f57756043
Ref: reference/compound_stmts grammar-token-python-grammar-value_pattern7756167
Ref: 23e77756167
Ref: reference/compound_stmts grammar-token-python-grammar-attr7756205
Ref: 23f67756205
Ref: reference/compound_stmts grammar-token-python-grammar-name_or_attr7756260
Ref: 23f77756260
Node: Padrões de grupo7756973
Ref: reference/compound_stmts group-patterns7757092
Ref: 23f87757092
Ref: reference/compound_stmts id97757092
Ref: 23f97757092
Ref: reference/compound_stmts grammar-token-python-grammar-group_pattern7757332
Ref: 23e87757332
Node: Padrões de sequência7757444
Ref: reference/compound_stmts id107757568
Ref: 23fa7757568
Ref: reference/compound_stmts sequence-patterns7757568
Ref: 23fb7757568
Ref: reference/compound_stmts grammar-token-python-grammar-sequence_pattern7757802
Ref: 23e97757802
Ref: reference/compound_stmts grammar-token-python-grammar-open_sequence_pattern7757953
Ref: 23df7757953
Ref: reference/compound_stmts grammar-token-python-grammar-maybe_sequence_pattern7758056
Ref: 23fc7758056
Ref: reference/compound_stmts grammar-token-python-grammar-maybe_star_pattern7758127
Ref: 23fd7758127
Ref: reference/compound_stmts grammar-token-python-grammar-star_pattern7758205
Ref: 23fe7758205
Ref: Padrões de sequência-Footnote-17761696
Node: Padrões de mapeamento7762463
Ref: reference/compound_stmts id127762588
Ref: 23ff7762588
Ref: reference/compound_stmts mapping-patterns7762588
Ref: 24007762588
Ref: reference/compound_stmts grammar-token-python-grammar-mapping_pattern7762789
Ref: 23ea7762789
Ref: reference/compound_stmts grammar-token-python-grammar-items_pattern7762852
Ref: 24017762852
Ref: reference/compound_stmts grammar-token-python-grammar-key_value_pattern7762919
Ref: 24027762919
Ref: reference/compound_stmts grammar-token-python-grammar-double_star_pattern7763091
Ref: 24037763091
Ref: Padrões de mapeamento-Footnote-17764953
Node: Padrões de classe7765461
Ref: reference/compound_stmts class-patterns7765555
Ref: 24047765555
Ref: reference/compound_stmts id147765555
Ref: 24057765555
Ref: reference/compound_stmts grammar-token-python-grammar-class_pattern7765719
Ref: 23eb7765719
Ref: reference/compound_stmts grammar-token-python-grammar-pattern_arguments7765817
Ref: 24067765817
Ref: reference/compound_stmts grammar-token-python-grammar-positional_patterns7765970
Ref: 24077765970
Ref: reference/compound_stmts grammar-token-python-grammar-keyword_patterns7766022
Ref: 24087766022
Ref: reference/compound_stmts grammar-token-python-grammar-keyword_pattern7766082
Ref: 24097766082
Ref: reference/compound_stmts function7770662
Ref: 1ecf7770662
Ref: Padrões de classe-Footnote-17770698
Ref: Padrões de classe-Footnote-27770740
Node: Definições de função7770782
Ref: reference/compound_stmts def7770924
Ref: 16497770924
Ref: reference/compound_stmts function-definitions7770924
Ref: 240a7770924
Ref: reference/compound_stmts grammar-token-python-grammar-funcdef7771125
Ref: 23b87771125
Ref: reference/compound_stmts grammar-token-python-grammar-decorators7771361
Ref: 240b7771361
Ref: reference/compound_stmts grammar-token-python-grammar-decorator7771417
Ref: 240d7771417
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list7771496
Ref: 23707771496
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list_no_posonly7771717
Ref: 240f7771717
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list_starargs7771924
Ref: 24107771924
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_star_kwargs7772249
Ref: 24127772249
Ref: reference/compound_stmts grammar-token-python-grammar-parameter7772315
Ref: 24137772315
Ref: reference/compound_stmts grammar-token-python-grammar-star_parameter7772400
Ref: 24117772400
Ref: reference/compound_stmts grammar-token-python-grammar-defparameter7772491
Ref: 240e7772491
Ref: reference/compound_stmts grammar-token-python-grammar-funcname7772575
Ref: 240c7772575
Ref: Definições de função-Footnote-17779806
Ref: Definições de função-Footnote-27780009
Ref: Definições de função-Footnote-37780051
Ref: Definições de função-Footnote-47780093
Ref: Definições de função-Footnote-57780135
Ref: Definições de função-Footnote-67780177
Ref: Definições de função-Footnote-77780219
Ref: Definições de função-Footnote-87780261
Ref: Definições de função-Footnote-97780303
Ref: Definições de função-Footnote-107780345
Node: Definições de classe7780388
Ref: reference/compound_stmts class7780524
Ref: 14d37780524
Ref: reference/compound_stmts class-definitions7780524
Ref: 24167780524
Ref: reference/compound_stmts grammar-token-python-grammar-classdef7780693
Ref: 23b97780693
Ref: reference/compound_stmts grammar-token-python-grammar-inheritance7780845
Ref: 24187780845
Ref: reference/compound_stmts grammar-token-python-grammar-classname7780900
Ref: 24177780900
Ref: Definições de classe-Footnote-17784547
Ref: Definições de classe-Footnote-27784750
Ref: Definições de classe-Footnote-37784792
Ref: Definições de classe-Footnote-47784834
Ref: Definições de classe-Footnote-57784876
Node: Corrotinas<2>7784918
Ref: reference/compound_stmts async7785059
Ref: 9307785059
Ref: reference/compound_stmts coroutines7785059
Ref: 24197785059
Node: Definição de função de corrotina7785230
Ref: reference/compound_stmts async-def7785348
Ref: 7e27785348
Ref: reference/compound_stmts coroutine-function-definition7785348
Ref: 241a7785348
Ref: reference/compound_stmts grammar-token-python-grammar-async_funcdef7785435
Ref: 23bc7785435
Node: A instrução async for7786482
Ref: reference/compound_stmts async-for7786633
Ref: c947786633
Ref: reference/compound_stmts the-async-for-statement7786633
Ref: 241b7786633
Ref: reference/compound_stmts grammar-token-python-grammar-async_for_stmt7786704
Ref: 23bb7786704
Node: A instrução async with7787675
Ref: reference/compound_stmts async-with7787781
Ref: 1857787781
Ref: reference/compound_stmts the-async-with-statement7787781
Ref: 241c7787781
Ref: reference/compound_stmts grammar-token-python-grammar-async_with_stmt7787854
Ref: 23ba7787854
Ref: A instrução async with-Footnote-17789036
Node: Listas de parâmetros de tipo7789078
Ref: reference/compound_stmts type-parameter-lists7789211
Ref: 241d7789211
Ref: reference/compound_stmts type-params7789211
Ref: 5a67789211
Ref: reference/compound_stmts grammar-token-python-grammar-type_params7789404
Ref: 23ac7789404
Ref: reference/compound_stmts grammar-token-python-grammar-type_param7789486
Ref: 241e7789486
Ref: reference/compound_stmts grammar-token-python-grammar-typevar7789579
Ref: 241f7789579
Ref: reference/compound_stmts grammar-token-python-grammar-typevartuple7789682
Ref: 24207789682
Ref: reference/compound_stmts grammar-token-python-grammar-paramspec7789759
Ref: 24217789759
Ref: Listas de parâmetros de tipo-Footnote-17794574
Node: Funções genéricas7794616
Ref: reference/compound_stmts generic-functions7794729
Ref: 6777794729
Ref: reference/compound_stmts id177794729
Ref: 24237794729
Node: Classes genéricas7796632
Ref: reference/compound_stmts generic-classes7796780
Ref: 6767796780
Ref: reference/compound_stmts id187796780
Ref: 24247796780
Node: Apelidos de tipo genérico7797969
Ref: reference/compound_stmts generic-type-aliases7798088
Ref: 6797798088
Ref: reference/compound_stmts id197798088
Ref: 24257798088
Node: Anotações<2>7798967
Ref: reference/compound_stmts annotations7799078
Ref: 24157799078
Ref: reference/compound_stmts id207799078
Ref: 24267799078
Ref: Anotações<2>-Footnote-17801057
Node: Componentes de Alto Nível7801099
Ref: reference/toplevel_components doc7801273
Ref: 24277801273
Ref: reference/toplevel_components no-color7801273
Ref: 24287801273
Ref: reference/toplevel_components top-level7801273
Ref: 24297801273
Ref: reference/toplevel_components top-level-components7801273
Ref: 242a7801273
Node: Programas Python completos7801729
Ref: reference/toplevel_components complete-python-programs7801845
Ref: 242b7801845
Ref: reference/toplevel_components programs7801845
Ref: 22e57801845
Node: Entrada de arquivo7803347
Ref: reference/toplevel_components file-input7803490
Ref: 242c7803490
Ref: reference/toplevel_components id17803490
Ref: 242d7803490
Ref: reference/toplevel_components grammar-token-python-grammar-file_input7803609
Ref: 242e7803609
Node: Entrada interativa7803934
Ref: reference/toplevel_components interactive7804072
Ref: 242f7804072
Ref: reference/toplevel_components interactive-input7804072
Ref: 24307804072
Ref: reference/toplevel_components grammar-token-python-grammar-interactive_input7804196
Ref: 24317804196
Node: Entrada de expressão7804501
Ref: reference/toplevel_components expression-input7804612
Ref: 24327804612
Ref: reference/toplevel_components id27804612
Ref: 24337804612
Ref: reference/toplevel_components grammar-token-python-grammar-eval_input7804848
Ref: 24347804848
Node: Especificação completa da gramática7804914
Ref: reference/grammar doc7805057
Ref: 23f17805057
Ref: reference/grammar full-grammar-specification7805057
Ref: 24357805057
Ref: reference/grammar id17805057
Ref: 24367805057
Ref: reference/grammar no-color7805057
Ref: 24377805057
Ref: Especificação completa da gramática-Footnote-17884181
Node: A Biblioteca Padrão do Python7884253
Ref: library/index doc7884422
Ref: 24387884422
Ref: library/index library-index7884422
Ref: 1497884422
Ref: library/index no-color7884422
Ref: 24397884422
Ref: library/index the-python-standard-library7884422
Ref: 243a7884422
Ref: A Biblioteca Padrão do Python-Footnote-17887621
Node: Introdução<6>7887646
Ref: library/intro doc7887759
Ref: 243b7887759
Ref: library/intro introduction7887759
Ref: 243c7887759
Ref: library/intro library-intro7887759
Ref: 243d7887759
Node: Observações sobre disponibilidade7890759
Ref: library/intro availability7890846
Ref: 1fed7890846
Ref: library/intro notes-on-availability7890846
Ref: 243e7890846
Node: Plataformas WebAssembly7891752
Ref: library/intro wasm-availability7891875
Ref: 1a867891875
Ref: library/intro webassembly-platforms7891875
Ref: 243f7891875
Ref: library/intro mobile-availability7894660
Ref: 21077894660
Ref: Plataformas WebAssembly-Footnote-17894697
Ref: Plataformas WebAssembly-Footnote-27894730
Ref: Plataformas WebAssembly-Footnote-37894762
Ref: Plataformas WebAssembly-Footnote-47894788
Ref: Plataformas WebAssembly-Footnote-57894820
Ref: Plataformas WebAssembly-Footnote-67894846
Ref: Plataformas WebAssembly-Footnote-77894876
Ref: Plataformas WebAssembly-Footnote-87894905
Ref: Plataformas WebAssembly-Footnote-97894935
Node: Plataformas móveis7894995
Ref: library/intro ios-availability7895118
Ref: 24407895118
Ref: library/intro mobile-platforms7895118
Ref: 24417895118
Ref: Plataformas móveis-Footnote-17898328
Node: Funções embutidas<3>7898394
Ref: library/functions doc7898536
Ref: 24427898536
Ref: library/functions built-in-funcs7898536
Ref: 14587898536
Ref: library/functions built-in-functions7898536
Ref: 24437898536
Ref: library/functions no-color7898536
Ref: 24447898536
Ref: library/functions abs7901991
Ref: 1f427901991
Ref: library/functions aiter7902265
Ref: 9cb7902265
Ref: library/functions all7902592
Ref: 16137902592
Ref: library/functions anext7902924
Ref: 9cc7902924
Ref: library/functions any7903679
Ref: 16127903679
Ref: library/functions ascii7904019
Ref: 15d77904019
Ref: library/functions bin7904407
Ref: 14a47904407
Ref: library/functions bool7905133
Ref: 3c07905133
Ref: library/functions breakpoint7905799
Ref: 2707905799
Ref: library/functions func-bytearray7907133
Ref: 1d507907133
Ref: library/functions func-bytes7908627
Ref: 1d4f7908627
Ref: library/functions callable7909413
Ref: 13c27909413
Ref: library/functions chr7909993
Ref: 192b7909993
Ref: library/functions classmethod7910474
Ref: 4887910474
Ref: library/functions compile7912193
Ref: 4ab7912193
Ref: library/functions complex7916641
Ref: 1977916641
Ref: library/functions grammar-token-float-complexvalue7918283
Ref: 24577918283
Ref: library/functions delattr7920315
Ref: 24457920315
Ref: library/functions func-dict7920773
Ref: 24467920773
Ref: library/functions dir7921250
Ref: 8397921250
Ref: library/functions divmod7924102
Ref: b8f7924102
Ref: library/functions enumerate7924816
Ref: 166f7924816
Ref: library/functions func-eval7925721
Ref: 245b7925721
Ref: library/functions eval7925721
Ref: 49d7925721
Ref: library/functions exec7929154
Ref: 49c7929154
Ref: library/functions filter7933164
Ref: a5a7933164
Ref: library/functions float7933990
Ref: 1967933990
Ref: library/functions grammar-token-float-sign7935021
Ref: 24597935021
Ref: library/functions grammar-token-float-infinity7935056
Ref: 245d7935056
Ref: library/functions grammar-token-float-nan7935100
Ref: 245e7935100
Ref: library/functions grammar-token-float-digit7935131
Ref: 245f7935131
Ref: library/functions grammar-token-float-digitpart7935230
Ref: 24607935230
Ref: library/functions grammar-token-float-number7935302
Ref: 24617935302
Ref: library/functions grammar-token-float-exponent7935410
Ref: 24627935410
Ref: library/functions grammar-token-float-floatnumber7935490
Ref: 24637935490
Ref: library/functions grammar-token-float-absfloatvalue7935559
Ref: 245a7935559
Ref: library/functions grammar-token-float-floatvalue7935652
Ref: 24587935652
Ref: library/functions format7937030
Ref: 1997937030
Ref: library/functions func-frozenset7938161
Ref: 24477938161
Ref: library/functions getattr7938658
Ref: dbe7938658
Ref: library/functions globals7939541
Ref: 1b0b7939541
Ref: library/functions hasattr7939813
Ref: 6ee7939813
Ref: library/functions hash7940148
Ref: 7f67940148
Ref: library/functions help7940789
Ref: aca7940789
Ref: library/functions hex7941972
Ref: 14cb7941972
Ref: library/functions id7943127
Ref: 16147943127
Ref: library/functions input7943584
Ref: 14d47943584
Ref: library/functions int7944610
Ref: 19b7944610
Ref: library/functions isinstance7948105
Ref: 2ac7948105
Ref: library/functions issubclass7948976
Ref: 9ba7948976
Ref: library/functions iter7949594
Ref: 9cd7949594
Ref: library/functions len7951145
Ref: 8357951145
Ref: library/functions func-list7951569
Ref: 24487951569
Ref: library/functions locals7951814
Ref: 4687951814
Ref: library/functions map7954797
Ref: 19f7954797
Ref: library/functions max7955582
Ref: 11027955582
Ref: library/functions func-memoryview7956954
Ref: 24497956954
Ref: library/functions min7957146
Ref: 11017957146
Ref: library/functions next7958505
Ref: 9ce7958505
Ref: library/functions object7958854
Ref: c727958854
Ref: library/functions oct7959365
Ref: 14ca7959365
Ref: library/functions open7960210
Ref: 3147960210
Ref: library/functions filemodes7961834
Ref: 24697961834
Ref: library/functions open-newline-parameter7967577
Ref: 93d7967577
Ref: library/functions ord7972902
Ref: 21d67972902
Ref: library/functions pow7973461
Ref: 1a47973461
Ref: library/functions print7975740
Ref: 116b7975740
Ref: library/functions property7977019
Ref: 4ad7977019
Ref: library/functions property getter7978762
Ref: 19157978762
Ref: library/functions property setter7978790
Ref: 19167978790
Ref: library/functions property deleter7978818
Ref: 19177978818
Ref: library/functions property __name__7980075
Ref: 4ac7980075
Ref: library/functions func-range7980273
Ref: 244a7980273
Ref: library/functions repr7980558
Ref: 1c17980558
Ref: library/functions reversed7981618
Ref: a5b7981618
Ref: library/functions round7981952
Ref: 14d67981952
Ref: library/functions func-set7983416
Ref: 244b7983416
Ref: library/functions setattr7983898
Ref: 244c7983898
Ref: library/functions slice7985052
Ref: 6897985052
Ref: library/functions slice start7985639
Ref: 223b7985639
Ref: library/functions slice stop7985665
Ref: 223c7985665
Ref: library/functions slice step7985690
Ref: 223d7985690
Ref: library/functions sorted7986173
Ref: dbb7986173
Ref: library/functions staticmethod7988033
Ref: 4507988033
Ref: library/functions func-str7989936
Ref: 244d7989936
Ref: library/functions sum7990381
Ref: 68a7990381
Ref: library/functions super7991455
Ref: 1a67991455
Ref: library/functions func-tuple7996172
Ref: 244e7996172
Ref: library/functions type7996420
Ref: f387996420
Ref: library/functions vars7998273
Ref: 1cd97998273
Ref: library/functions zip7999255
Ref: 1a07999255
Ref: library/functions import__8003358
Ref: ac78003358
Ref: Funções embutidas<3>-Footnote-18006957
Ref: Funções embutidas<3>-Footnote-28007203
Ref: Funções embutidas<3>-Footnote-38007245
Ref: Funções embutidas<3>-Footnote-48007287
Ref: Funções embutidas<3>-Footnote-58007329
Ref: Funções embutidas<3>-Footnote-68007371
Ref: Funções embutidas<3>-Footnote-78007448
Ref: Funções embutidas<3>-Footnote-88007496
Ref: Funções embutidas<3>-Footnote-98007538
Node: Constantes embutidas8007580
Ref: library/constants doc8007722
Ref: 24738007722
Ref: library/constants built-in-constants8007722
Ref: 24748007722
Ref: library/constants built-in-consts8007722
Ref: 24758007722
Ref: library/constants no-color8007722
Ref: 24768007722
Ref: library/constants False8007877
Ref: d1f8007877
Ref: library/constants True8008024
Ref: dfb8008024
Ref: library/constants None8008174
Ref: 87a8008174
Ref: library/constants NotImplemented8008505
Ref: 1a28008505
Ref: library/constants Ellipsis8010406
Ref: 21c48010406
Ref: library/constants debug__8010764
Ref: 9d08010764
Node: Constantes adicionadas pelo módulo site8011283
Ref: library/constants constants-added-by-the-site-module8011380
Ref: 24778011380
Ref: library/constants site-consts8011380
Ref: 24788011380
Ref: library/constants quit8011798
Ref: 24798011798
Ref: library/constants exit8011825
Ref: 247a8011825
Ref: library/constants copyright8012417
Ref: 247b8012417
Ref: library/constants credits8012437
Ref: 247c8012437
Ref: library/constants license8012581
Ref: 247d8012581
Node: Tipos embutidos8012830
Ref: library/stdtypes doc8012970
Ref: 247e8012970
Ref: library/stdtypes bltin-types8012970
Ref: 247f8012970
Ref: library/stdtypes built-in-types8012970
Ref: 24808012970
Ref: library/stdtypes no-color8012970
Ref: 24818012970
Node: Teste do valor verdade8014830
Ref: library/stdtypes truth8014949
Ref: 17c28014949
Ref: library/stdtypes truth-value-testing8014949
Ref: 24828014949
Ref: Teste do valor verdade-Footnote-18016104
Node: Operações booleanas — and or not8016264
Ref: library/stdtypes boolean8016408
Ref: 24838016408
Ref: library/stdtypes boolean-operations-and-or-not8016408
Ref: 24848016408
Node: Comparações<2>8017830
Ref: library/stdtypes comparisons8017990
Ref: 24858017990
Ref: library/stdtypes stdcomparisons8017990
Ref: 24868017990
Node: Tipos numéricos — int float complex8020589
Ref: library/stdtypes numeric-types-int-float-complex8020733
Ref: 24878020733
Ref: library/stdtypes typesnumeric8020733
Ref: 1e918020733
Ref: Tipos numéricos — int float complex-Footnote-18029605
Ref: Tipos numéricos — int float complex-Footnote-28029727
Node: Operações de bits em tipos inteiros8029804
Ref: library/stdtypes bitstring-ops8029962
Ref: 24898029962
Ref: library/stdtypes bitwise-operations-on-integer-types8029962
Ref: 248a8029962
Node: Métodos adicionais em tipos inteiros8032482
Ref: library/stdtypes additional-methods-on-integer-types8032687
Ref: 248b8032687
Ref: library/stdtypes int bit_length8032915
Ref: 248c8032915
Ref: library/stdtypes int bit_count8033902
Ref: 9c58033902
Ref: library/stdtypes int to_bytes8034379
Ref: 1b338034379
Ref: library/stdtypes int from_bytes8036598
Ref: 1af48036598
Ref: library/stdtypes int as_integer_ratio8038566
Ref: bb68038566
Ref: library/stdtypes int is_integer8038909
Ref: 1a238038909
Node: Métodos adicionais em ponto flutuante8039085
Ref: library/stdtypes additional-methods-on-float8039294
Ref: 248f8039294
Ref: library/stdtypes float from_number8039531
Ref: 1948039531
Ref: library/stdtypes float as_integer_ratio8040291
Ref: 1faf8040291
Ref: library/stdtypes float is_integer8040611
Ref: 248e8040611
Ref: library/stdtypes float hex8041334
Ref: 1fb08041334
Ref: library/stdtypes float fromhex8041604
Ref: 24908041604
Node: Métodos adicionais em números complexos8043324
Ref: library/stdtypes additional-methods-on-complex8043523
Ref: 24918043523
Ref: library/stdtypes complex from_number8043784
Ref: 1958043784
Node: Hashing de tipos numéricos8044295
Ref: library/stdtypes hashing-of-numeric-types8044447
Ref: 24938044447
Ref: library/stdtypes numeric-hash8044447
Ref: 24948044447
Ref: library/stdtypes bltin-boolean-values8048817
Ref: 24968048817
Node: Tipo booleano - bool8048818
Ref: library/stdtypes boolean-type-bool8048962
Ref: 24978048962
Ref: library/stdtypes typebool8048962
Ref: 244f8048962
Node: Tipos iteradores8050257
Ref: library/stdtypes iterator-types8050401
Ref: 24988050401
Ref: library/stdtypes typeiter8050401
Ref: 24668050401
Ref: library/stdtypes container __iter__8050854
Ref: 1f5f8050854
Ref: library/stdtypes iterator __iter__8051636
Ref: 1f628051636
Ref: library/stdtypes iterator __next__8052004
Ref: 14c98052004
Node: Tipos geradores8052838
Ref: library/stdtypes generator-types8052906
Ref: 24998052906
Ref: library/stdtypes id38052906
Ref: 249a8052906
Node: Tipos sequências — list tuple range8053430
Ref: library/stdtypes sequence-types-list-tuple-range8053615
Ref: 249b8053615
Ref: library/stdtypes typesseq8053615
Ref: 1ee48053615
Node: Operações comuns de sequências8054131
Ref: library/stdtypes common-sequence-operations8054275
Ref: 249c8054275
Ref: library/stdtypes typesseq-common8054275
Ref: 249d8054275
Ref: library/stdtypes list count8062721
Ref: 15b78062721
Ref: library/stdtypes sequence count8062721
Ref: 226f8062721
Ref: library/stdtypes list index8062833
Ref: 15b68062833
Ref: library/stdtypes sequence index8062833
Ref: 18c78062833
Ref: Operações comuns de sequências-Footnote-18063486
Node: Tipos sequência imutáveis8063587
Ref: library/stdtypes immutable-sequence-types8063767
Ref: 24a18063767
Ref: library/stdtypes typesseq-immutable8063767
Ref: 24a28063767
Node: Tipos sequências mutáveis8064407
Ref: library/stdtypes mutable-sequence-types8064563
Ref: 24a38064563
Ref: library/stdtypes typesseq-mutable8064563
Ref: 24508064563
Ref: library/stdtypes bytearray append8068075
Ref: 15978068075
Ref: library/stdtypes sequence append8068075
Ref: 226d8068075
Ref: library/stdtypes bytearray clear8068234
Ref: 24a48068234
Ref: library/stdtypes sequence clear8068234
Ref: 226e8068234
Ref: library/stdtypes bytearray copy8068396
Ref: 24a58068396
Ref: library/stdtypes sequence copy8068396
Ref: 24a68068396
Ref: library/stdtypes bytearray extend8068746
Ref: 19128068746
Ref: library/stdtypes sequence extend8068746
Ref: 22708068746
Ref: library/stdtypes bytearray insert8068928
Ref: 24a78068928
Ref: library/stdtypes sequence insert8068928
Ref: 22718068928
Ref: library/stdtypes bytearray pop8069103
Ref: 15988069103
Ref: library/stdtypes sequence pop8069103
Ref: 22728069103
Ref: library/stdtypes bytearray remove8069284
Ref: 24a88069284
Ref: library/stdtypes sequence remove8069284
Ref: 18c88069284
Ref: library/stdtypes bytearray reverse8069489
Ref: 15998069489
Ref: library/stdtypes sequence reverse8069489
Ref: 22738069489
Node: Listas<2>8069752
Ref: library/stdtypes lists8069887
Ref: 24a98069887
Ref: library/stdtypes typesseq-list8069887
Ref: 24678069887
Ref: library/stdtypes list8070099
Ref: 24c8070099
Ref: library/stdtypes list sort8071339
Ref: dbc8071339
Node: Tuplas8074002
Ref: library/stdtypes tuples8074120
Ref: 24aa8074120
Ref: library/stdtypes typesseq-tuple8074120
Ref: 23d78074120
Ref: library/stdtypes tuple8074544
Ref: 6088074544
Node: Intervalos8076234
Ref: library/stdtypes ranges8076334
Ref: 24ab8076334
Ref: library/stdtypes typesseq-range8076334
Ref: 246d8076334
Ref: library/stdtypes range8076543
Ref: b338076543
Ref: library/stdtypes range start8078659
Ref: 24ac8078659
Ref: library/stdtypes range stop8078784
Ref: 24ad8078784
Ref: library/stdtypes range step8078849
Ref: 24ae8078849
Ref: Intervalos-Footnote-18080985
Node: Resumo dos métodos de tipo de sequência binária e de texto8081071
Ref: library/stdtypes text-and-binary-sequence-type-methods-summary8081272
Ref: 24af8081272
Ref: library/stdtypes text-methods-summary8081272
Ref: 24b08081272
Node: Tipo sequência de texto — str8092236
Ref: library/stdtypes text-sequence-type-str8092458
Ref: 24de8092458
Ref: library/stdtypes textseq8092458
Ref: 1e968092458
Ref: library/stdtypes str8094372
Ref: 1698094372
Node: Métodos de string8096833
Ref: library/stdtypes id58096966
Ref: 24e08096966
Ref: library/stdtypes string-methods8096966
Ref: 1e978096966
Ref: library/stdtypes str capitalize8097976
Ref: 24ce8097976
Ref: library/stdtypes str casefold8098391
Ref: fca8098391
Ref: library/stdtypes str center8099216
Ref: 1f188099216
Ref: library/stdtypes str count8099729
Ref: 18c98099729
Ref: library/stdtypes str encode8100434
Ref: ac88100434
Ref: library/stdtypes str endswith8101824
Ref: 10c28101824
Ref: library/stdtypes str expandtabs8102683
Ref: 24d78102683
Ref: library/stdtypes str find8104092
Ref: 109e8104092
Ref: library/stdtypes str format8104885
Ref: 8288104885
Ref: library/stdtypes str format_map8106501
Ref: fcb8106501
Ref: library/stdtypes str index8107064
Ref: 18fe8107064
Ref: library/stdtypes str isalnum8107228
Ref: 24c18107228
Ref: library/stdtypes str isalpha8107578
Ref: 24bb8107578
Ref: library/stdtypes str isascii8108160
Ref: cdc8108160
Ref: library/stdtypes str isdecimal8108424
Ref: 24bd8108424
Ref: library/stdtypes str isdigit8108864
Ref: 24be8108864
Ref: library/stdtypes str isidentifier8109445
Ref: 1bfd8109445
Ref: library/stdtypes str islower8110042
Ref: 24c38110042
Ref: library/stdtypes str isnumeric8110279
Ref: 24c08110279
Ref: library/stdtypes str isprintable8110801
Ref: fcc8110801
Ref: library/stdtypes str isspace8111719
Ref: 24c98111719
Ref: library/stdtypes str istitle8112160
Ref: 24c78112160
Ref: library/stdtypes str isupper8112525
Ref: 24c58112525
Ref: library/stdtypes meth-str-join8112962
Ref: 24e48112962
Ref: library/stdtypes str join8112962
Ref: 249f8112962
Ref: library/stdtypes str ljust8113318
Ref: 1f178113318
Ref: library/stdtypes str lower8113650
Ref: 1a928113650
Ref: library/stdtypes str lstrip8113941
Ref: 169e8113941
Ref: library/stdtypes str maketrans8114865
Ref: fcd8114865
Ref: library/stdtypes str partition8115722
Ref: 10a18115722
Ref: library/stdtypes str removeprefix8116081
Ref: ac28116081
Ref: library/stdtypes str removesuffix8116449
Ref: ac38116449
Ref: library/stdtypes str replace8116851
Ref: 4b28116851
Ref: library/stdtypes str rfind8117333
Ref: 109f8117333
Ref: library/stdtypes str rindex8117669
Ref: 14538117669
Ref: library/stdtypes str rjust8117841
Ref: 1f168117841
Ref: library/stdtypes str rpartition8118179
Ref: 14548118179
Ref: library/stdtypes str rsplit8118554
Ref: 14518118554
Ref: library/stdtypes str rstrip8119080
Ref: 169f8119080
Ref: library/stdtypes str split8119977
Ref: 10a08119977
Ref: library/stdtypes str splitlines8122241
Ref: 14528122241
Ref: library/stdtypes str startswith8125103
Ref: 10c18125103
Ref: library/stdtypes str strip8125488
Ref: 169d8125488
Ref: library/stdtypes str swapcase8126588
Ref: 24d28126588
Ref: library/stdtypes str title8126818
Ref: 24d08126818
Ref: library/stdtypes str translate8128112
Ref: 24dc8128112
Ref: library/stdtypes str upper8129129
Ref: 24cc8129129
Ref: library/stdtypes str zfill8129713
Ref: 16a08129713
Ref: Métodos de string-Footnote-18130276
Ref: Métodos de string-Footnote-28130360
Ref: Métodos de string-Footnote-38130444
Ref: Métodos de string-Footnote-48130661
Ref: Métodos de string-Footnote-58130878
Ref: Métodos de string-Footnote-68131095
Ref: Métodos de string-Footnote-78131179
Ref: Métodos de string-Footnote-88131396
Node: Strings literais formatadas f-strings8131480
Ref: library/stdtypes formatted-string-literals-f-strings8131661
Ref: 24e78131661
Node: Formatação de string no estilo printf8135600
Ref: library/stdtypes old-string-formatting8135754
Ref: 8d08135754
Ref: library/stdtypes printf-style-string-formatting8135754
Ref: 24e88135754
Ref: Formatação de string no estilo printf-Footnote-18145700
Ref: Formatação de string no estilo printf-Footnote-28145835
Node: Tipos de sequência binária — bytes bytearray memoryview8145877
Ref: library/stdtypes binary-sequence-types-bytes-bytearray-memoryview8146070
Ref: 24e98146070
Ref: library/stdtypes binaryseq8146070
Ref: 24528146070
Node: Objetos bytes8146847
Ref: library/stdtypes bytes-objects8146982
Ref: 24ea8146982
Ref: library/stdtypes typebytes8146982
Ref: 24548146982
Ref: library/stdtypes bytes8147391
Ref: 1928147391
Ref: library/stdtypes bytes fromhex8149950
Ref: 1908149950
Ref: library/stdtypes bytes hex8150800
Ref: f598150800
Node: Objetos Bytearray8152658
Ref: library/stdtypes bytearray-objects8152835
Ref: 24eb8152835
Ref: library/stdtypes typebytearray8152835
Ref: 24538152835
Ref: library/stdtypes bytearray8152982
Ref: 3428152982
Ref: library/stdtypes bytearray fromhex8154186
Ref: 1918154186
Ref: library/stdtypes bytearray hex8155072
Ref: f5a8155072
Ref: library/stdtypes bytearray resize8155640
Ref: 180d8155640
Node: Operações com Bytes e Bytearray8157307
Ref: library/stdtypes bytes-and-bytearray-operations8157515
Ref: 24ec8157515
Ref: library/stdtypes bytes-methods8157515
Ref: 24518157515
Ref: library/stdtypes bytes count8158844
Ref: 18ca8158844
Ref: library/stdtypes bytearray count8158891
Ref: 18cb8158891
Ref: library/stdtypes bytes removeprefix8159547
Ref: 24ed8159547
Ref: library/stdtypes bytearray removeprefix8159591
Ref: 24ee8159591
Ref: library/stdtypes bytes removesuffix8160246
Ref: 24ef8160246
Ref: library/stdtypes bytearray removesuffix8160290
Ref: 24f08160290
Ref: library/stdtypes bytes decode8160979
Ref: ac98160979
Ref: library/stdtypes bytearray decode8161041
Ref: 24f18161041
Ref: library/stdtypes bytes endswith8162455
Ref: 24b48162455
Ref: library/stdtypes bytearray endswith8162508
Ref: 15948162508
Ref: library/stdtypes bytes find8163048
Ref: 1ae18163048
Ref: library/stdtypes bytearray find8163094
Ref: 15958163094
Ref: library/stdtypes bytes index8163970
Ref: 24b18163970
Ref: library/stdtypes bytearray index8164017
Ref: 24f28164017
Ref: library/stdtypes bytes join8164449
Ref: 24a08164449
Ref: library/stdtypes bytearray join8164487
Ref: 24f38164487
Ref: library/stdtypes bytes maketrans8164979
Ref: 14708164979
Ref: library/stdtypes bytearray maketrans8165029
Ref: 14718165029
Ref: library/stdtypes bytes partition8165421
Ref: 24b98165421
Ref: library/stdtypes bytearray partition8165459
Ref: 24f48165459
Ref: library/stdtypes bytes replace8165966
Ref: 24b58165966
Ref: library/stdtypes bytearray replace8166017
Ref: 24f58166017
Ref: library/stdtypes bytes rfind8166621
Ref: 1ae28166621
Ref: library/stdtypes bytearray rfind8166668
Ref: 15968166668
Ref: library/stdtypes bytes rindex8167294
Ref: 24b28167294
Ref: library/stdtypes bytearray rindex8167342
Ref: 24f68167342
Ref: library/stdtypes bytes rpartition8167777
Ref: 24ba8167777
Ref: library/stdtypes bytearray rpartition8167816
Ref: 24f78167816
Ref: library/stdtypes bytes startswith8168325
Ref: 24b38168325
Ref: library/stdtypes bytearray startswith8168380
Ref: 15938168380
Ref: library/stdtypes bytes translate8168891
Ref: 24dd8168891
Ref: library/stdtypes bytearray translate8168943
Ref: 14f78168943
Ref: library/stdtypes bytes center8170056
Ref: 24d68170056
Ref: library/stdtypes bytearray center8170108
Ref: 24f88170108
Ref: library/stdtypes bytes ljust8170662
Ref: 24d48170662
Ref: library/stdtypes bytearray ljust8170713
Ref: 24f98170713
Ref: library/stdtypes bytes lstrip8171273
Ref: 24da8171273
Ref: library/stdtypes bytearray lstrip8171315
Ref: 24fa8171315
Ref: library/stdtypes bytes rjust8172589
Ref: 24d58172589
Ref: library/stdtypes bytearray rjust8172640
Ref: 24fb8172640
Ref: library/stdtypes bytes rsplit8173199
Ref: 24b78173199
Ref: library/stdtypes bytearray rsplit8173249
Ref: 24fc8173249
Ref: library/stdtypes bytes rstrip8173834
Ref: 24db8173834
Ref: library/stdtypes bytearray rstrip8173876
Ref: 24fe8173876
Ref: library/stdtypes bytes split8175126
Ref: 24b68175126
Ref: library/stdtypes bytearray split8175175
Ref: 24fd8175175
Ref: library/stdtypes bytes strip8177294
Ref: 24d98177294
Ref: library/stdtypes bytearray strip8177335
Ref: 24ff8177335
Ref: library/stdtypes bytes capitalize8178616
Ref: 24cf8178616
Ref: library/stdtypes bytearray capitalize8178649
Ref: 25008178649
Ref: library/stdtypes bytes expandtabs8179121
Ref: 24d88179121
Ref: library/stdtypes bytearray expandtabs8179163
Ref: 25018179163
Ref: library/stdtypes bytes isalnum8180678
Ref: 24c28180678
Ref: library/stdtypes bytearray isalnum8180708
Ref: 25028180708
Ref: library/stdtypes bytes isalpha8181299
Ref: 24bc8181299
Ref: library/stdtypes bytearray isalpha8181329
Ref: 25038181329
Ref: library/stdtypes bytes isascii8181804
Ref: 25048181804
Ref: library/stdtypes bytearray isascii8181834
Ref: 25058181834
Ref: library/stdtypes bytes isdigit8182076
Ref: 24bf8182076
Ref: library/stdtypes bytearray isdigit8182106
Ref: 25068182106
Ref: library/stdtypes bytes islower8182520
Ref: 24c48182520
Ref: library/stdtypes bytearray islower8182550
Ref: 25078182550
Ref: library/stdtypes bytes isspace8183148
Ref: 24ca8183148
Ref: library/stdtypes bytearray isspace8183178
Ref: 25088183178
Ref: library/stdtypes bytes istitle8183602
Ref: 24c88183602
Ref: library/stdtypes bytearray istitle8183632
Ref: 25098183632
Ref: library/stdtypes bytes isupper8184019
Ref: 24c68184019
Ref: library/stdtypes bytearray isupper8184049
Ref: 250a8184049
Ref: library/stdtypes bytes lower8184659
Ref: 24cb8184659
Ref: library/stdtypes bytearray lower8184687
Ref: 250b8184687
Ref: library/stdtypes bytes splitlines8185408
Ref: 24b88185408
Ref: library/stdtypes bytearray splitlines8185455
Ref: 250c8185455
Ref: library/stdtypes bytes swapcase8186486
Ref: 24d38186486
Ref: library/stdtypes bytearray swapcase8186517
Ref: 250d8186517
Ref: library/stdtypes bytes title8187558
Ref: 24d18187558
Ref: library/stdtypes bytearray title8187586
Ref: 250e8187586
Ref: library/stdtypes bytes upper8189439
Ref: 24cd8189439
Ref: library/stdtypes bytearray upper8189467
Ref: 250f8189467
Ref: library/stdtypes bytes zfill8190178
Ref: 25108190178
Ref: library/stdtypes bytearray zfill8190214
Ref: 25118190214
Node: Estilo de Formatação de bytes printf-style8191000
Ref: library/stdtypes bytes-formatting8191203
Ref: f758191203
Ref: library/stdtypes printf-style-bytes-formatting8191203
Ref: 25128191203
Ref: Estilo de Formatação de bytes printf-style-Footnote-18201364
Ref: Estilo de Formatação de bytes printf-style-Footnote-28201499
Ref: Estilo de Formatação de bytes printf-style-Footnote-38201541
Node: Memory Views8201583
Ref: library/stdtypes memory-views8201744
Ref: 25138201744
Ref: library/stdtypes typememoryview8201744
Ref: 24688201744
Ref: library/stdtypes memoryview8201946
Ref: 1658201946
Ref: library/stdtypes memoryview __eq__8206526
Ref: 25178206526
Ref: library/stdtypes memoryview tobytes8208889
Ref: 25188208889
Ref: library/stdtypes memoryview hex8210181
Ref: f5b8210181
Ref: library/stdtypes memoryview tolist8210823
Ref: 25148210823
Ref: library/stdtypes memoryview toreadonly8211485
Ref: 25198211485
Ref: library/stdtypes memoryview release8212187
Ref: 13ba8212187
Ref: library/stdtypes memoryview cast8213787
Ref: 251a8213787
Ref: library/stdtypes memoryview count8217355
Ref: 184e8217355
Ref: library/stdtypes memoryview index8217500
Ref: 184d8217500
Ref: library/stdtypes memoryview obj8217944
Ref: 251c8217944
Ref: library/stdtypes memoryview nbytes8218217
Ref: 251d8218217
Ref: library/stdtypes memoryview readonly8219513
Ref: 251e8219513
Ref: library/stdtypes memoryview format8219616
Ref: 25168219616
Ref: library/stdtypes memoryview itemsize8220246
Ref: 25158220246
Ref: library/stdtypes memoryview ndim8220669
Ref: 251f8220669
Ref: library/stdtypes memoryview shape8220833
Ref: 25208220833
Ref: library/stdtypes memoryview strides8221120
Ref: 25218221120
Ref: library/stdtypes memoryview suboffsets8221451
Ref: 25228221451
Ref: library/stdtypes memoryview c_contiguous8221596
Ref: 25238221596
Ref: library/stdtypes memoryview f_contiguous8221770
Ref: 25248221770
Ref: library/stdtypes memoryview contiguous8221950
Ref: 25258221950
Ref: Memory Views-Footnote-18222140
Node: Tipo conjuntos — set frozenset8222182
Ref: library/stdtypes set-types-set-frozenset8222367
Ref: 25268222367
Ref: library/stdtypes types-set8222367
Ref: 24648222367
Ref: library/stdtypes set8224084
Ref: 1848224084
Ref: library/stdtypes frozenset8224117
Ref: 7e78224117
Ref: library/stdtypes frozenset isdisjoint8225260
Ref: 25278225260
Ref: library/stdtypes frozenset issubset8225488
Ref: 25288225488
Ref: library/stdtypes frozenset issuperset8225788
Ref: 25298225788
Ref: library/stdtypes frozenset union8226092
Ref: 16718226092
Ref: library/stdtypes frozenset intersection8226258
Ref: 16728226258
Ref: library/stdtypes frozenset difference8226438
Ref: 252a8226438
Ref: library/stdtypes frozenset symmetric_difference8226615
Ref: 252b8226615
Ref: library/stdtypes frozenset copy8226814
Ref: 252c8226814
Ref: library/stdtypes frozenset update8229332
Ref: 252d8229332
Ref: library/stdtypes frozenset intersection_update8229472
Ref: 16738229472
Ref: library/stdtypes frozenset difference_update8229658
Ref: 252e8229658
Ref: library/stdtypes frozenset symmetric_difference_update8229828
Ref: 16748229828
Ref: library/stdtypes frozenset add8230040
Ref: 21d98230040
Ref: library/stdtypes frozenset remove8230124
Ref: 252f8230124
Ref: library/stdtypes frozenset discard8230293
Ref: 25308230293
Ref: library/stdtypes frozenset pop8230403
Ref: 25318230403
Ref: library/stdtypes frozenset clear8230563
Ref: 25328230563
Node: Tipo mapeamento — dict8231169
Ref: library/stdtypes mapping-types-dict8231327
Ref: 25338231327
Ref: library/stdtypes typesmapping8231327
Ref: cb08231327
Ref: library/stdtypes dict8232181
Ref: 1838232181
Ref: library/stdtypes dict clear8238271
Ref: 25348238271
Ref: library/stdtypes dict copy8238348
Ref: dbd8238348
Ref: library/stdtypes dict fromkeys8238433
Ref: 24d8238433
Ref: library/stdtypes dict get8239050
Ref: 1ee98239050
Ref: library/stdtypes dict items8239363
Ref: 9c88239363
Ref: library/stdtypes dict keys8239574
Ref: 9c68239574
Ref: library/stdtypes dict pop8239745
Ref: 5dc8239745
Ref: library/stdtypes dict popitem8240069
Ref: 17148240069
Ref: library/stdtypes dict setdefault8240921
Ref: 126f8240921
Ref: library/stdtypes dict update8241169
Ref: 16548241169
Ref: library/stdtypes dict values8241949
Ref: 9c78241949
Node: Objetos de visão de dicionário8243771
Ref: library/stdtypes dict-views8243864
Ref: 25358243864
Ref: library/stdtypes dictionary-view-objects8243864
Ref: 25368243864
Node: Tipos de Gerenciador de Contexto8247821
Ref: library/stdtypes context-manager-types8248003
Ref: 25388248003
Ref: library/stdtypes typecontextmanager8248003
Ref: 22a18248003
Ref: library/stdtypes contextmanager __enter__8248477
Ref: 25398248477
Ref: library/stdtypes contextmanager __exit__8249589
Ref: 253a8249589
Node: Tipos de anotação de tipo — Apelido genérico União8252262
Ref: library/stdtypes type-annotation-types-generic-alias-union8252442
Ref: 253b8252442
Node: Tipo Generic Alias8252740
Ref: library/stdtypes generic-alias-type8252871
Ref: 253c8252871
Ref: library/stdtypes types-genericalias8252871
Ref: 8b68252871
Node: Classes genéricas padrão8257857
Ref: library/stdtypes standard-generic-classes8257990
Ref: 253e8257990
Node: Atributos especiais de objetos GenericAlias8260406
Ref: library/stdtypes special-attributes-of-genericalias-objects8260539
Ref: 254b8260539
Ref: library/stdtypes genericalias __origin__8260739
Ref: 254c8260739
Ref: library/stdtypes genericalias __args__8260910
Ref: 253d8260910
Ref: library/stdtypes genericalias __parameters__8261222
Ref: 254d8261222
Ref: library/stdtypes genericalias __unpacked__8261824
Ref: 254e8261824
Ref: Atributos especiais de objetos GenericAlias-Footnote-18262748
Ref: Atributos especiais de objetos GenericAlias-Footnote-28262790
Node: Tipo União8262832
Ref: library/stdtypes types-union8262963
Ref: 9bb8262963
Ref: library/stdtypes union-type8262963
Ref: 254f8262963
Ref: Tipo União-Footnote-18266815
Node: Outros tipos embutidos8266857
Ref: library/stdtypes other-built-in-types8267024
Ref: 25508267024
Ref: library/stdtypes typesother8267024
Ref: 25518267024
Node: Módulos<4>8267449
Ref: library/stdtypes modules8267560
Ref: 25528267560
Ref: library/stdtypes typesmodules8267560
Ref: 25538267560
Node: Classes e Instâncias de Classes8268829
Ref: library/stdtypes classes-and-class-instances8268958
Ref: 25548268958
Ref: library/stdtypes typesobjects8268958
Ref: 25558268958
Node: Funções8269136
Ref: library/stdtypes functions8269262
Ref: 25568269262
Ref: library/stdtypes typesfunctions8269262
Ref: 25578269262
Node: Métodos8269808
Ref: library/stdtypes methods8269920
Ref: 25588269920
Ref: library/stdtypes typesmethods8269920
Ref: 25598269920
Node: Objetos código<2>8271944
Ref: library/stdtypes bltin-code-objects8272059
Ref: 255a8272059
Ref: library/stdtypes code-objects8272059
Ref: 255b8272059
Node: Objetos tipo8272984
Ref: library/stdtypes bltin-type-objects8273104
Ref: 24728273104
Ref: library/stdtypes type-objects8273104
Ref: 255c8273104
Node: O objeto nulo8273475
Ref: library/stdtypes bltin-null-object8273594
Ref: 255d8273594
Ref: library/stdtypes the-null-object8273594
Ref: 255e8273594
Node: O Objeto Ellipsis8273921
Ref: library/stdtypes bltin-ellipsis-object8274051
Ref: 1eb38274051
Ref: library/stdtypes the-ellipsis-object8274051
Ref: 255f8274051
Ref: O Objeto Ellipsis-Footnote-18275316
Node: O Objeto NotImplemented8275401
Ref: library/stdtypes bltin-notimplemented-object8275534
Ref: 25628275534
Ref: library/stdtypes the-notimplemented-object8275534
Ref: 25638275534
Node: Objetos Internos8275964
Ref: library/stdtypes internal-objects8276071
Ref: 25648276071
Ref: library/stdtypes typesinternal8276071
Ref: 25658276071
Node: Atributos Especiais8276330
Ref: library/stdtypes special-attributes8276504
Ref: 25668276504
Ref: library/stdtypes specialattrs8276504
Ref: 25678276504
Ref: library/stdtypes definition __name__8276766
Ref: 125c8276766
Ref: library/stdtypes definition __qualname__8276879
Ref: 125b8276879
Ref: library/stdtypes definition __module__8277059
Ref: 25688277059
Ref: library/stdtypes definition __doc__8277165
Ref: b178277165
Ref: library/stdtypes definition __type_params__8277296
Ref: 24228277296
Node: Limitação de comprimento de string na conversão para inteiro8277567
Ref: library/stdtypes int-max-str-digits8277710
Ref: 8008277710
Ref: library/stdtypes integer-string-conversion-length-limitation8277710
Ref: 25698277710
Ref: Limitação de comprimento de string na conversão para inteiro-Footnote-18280689
Node: APIs afetadas8280745
Ref: library/stdtypes affected-apis8280889
Ref: 256a8280889
Node: Configurando o limiter8281870
Ref: library/stdtypes configuring-the-limit8282049
Ref: 256b8282049
Node: Configuração recomendada8284836
Ref: library/stdtypes recommended-configuration8284993
Ref: 256e8284993
Node: Exceções embutidas8285927
Ref: library/exceptions doc8286082
Ref: 256f8286082
Ref: library/exceptions bltin-exceptions8286082
Ref: 1b278286082
Ref: library/exceptions built-in-exceptions8286082
Ref: 25708286082
Ref: library/exceptions no-color8286082
Ref: 25718286082
Node: Contexto da exceção8287993
Ref: library/exceptions exception-context8288112
Ref: 25728288112
Ref: library/exceptions BaseException __context__8288280
Ref: 14c38288280
Ref: library/exceptions BaseException __cause__8288320
Ref: 14c48288320
Ref: library/exceptions BaseException __suppress_context__8288358
Ref: 23a18288358
Node: Herdando de exceções embutidas8290174
Ref: library/exceptions inheriting-from-built-in-exceptions8290314
Ref: 25738290314
Ref: Herdando de exceções embutidas-Footnote-18291210
Node: Classes base8291283
Ref: library/exceptions base-classes8291422
Ref: 25748291422
Ref: library/exceptions BaseException8291555
Ref: 7cc8291555
Ref: library/exceptions BaseException args8291966
Ref: 7828291966
Ref: library/exceptions BaseException with_traceback8292376
Ref: 23a08292376
Ref: library/exceptions BaseException __traceback__8293349
Ref: 14c28293349
Ref: library/exceptions BaseException add_note8293551
Ref: 7cb8293551
Ref: library/exceptions BaseException __notes__8293856
Ref: 25758293856
Ref: library/exceptions Exception8294109
Ref: bc38294109
Ref: library/exceptions ArithmeticError8294326
Ref: 25768294326
Ref: library/exceptions BufferError8294549
Ref: 1ac88294549
Ref: library/exceptions LookupError8294679
Ref: 24e68294679
Ref: Classes base-Footnote-18295001
Node: Exceções concretas8295043
Ref: library/exceptions concrete-exceptions8295156
Ref: 25788295156
Ref: library/exceptions AssertionError8295274
Ref: 8ad8295274
Ref: library/exceptions AttributeError8295370
Ref: 5e48295370
Ref: library/exceptions AttributeError name8295766
Ref: 25798295766
Ref: library/exceptions AttributeError obj8295851
Ref: 257a8295851
Ref: library/exceptions EOFError8296035
Ref: 14d58296035
Ref: library/exceptions FloatingPointError8296328
Ref: 25778296328
Ref: library/exceptions GeneratorExit8296392
Ref: 15b98296392
Ref: library/exceptions ImportError8296723
Ref: 64f8296723
Ref: library/exceptions ImportError name8297078
Ref: 257c8297078
Ref: library/exceptions ImportError path8297168
Ref: 257d8297168
Ref: library/exceptions ModuleNotFoundError8297360
Ref: d318297360
Ref: library/exceptions IndexError8297653
Ref: 17238297653
Ref: library/exceptions KeyError8297933
Ref: 5dd8297933
Ref: library/exceptions KeyboardInterrupt8298077
Ref: bbb8298077
Ref: library/exceptions MemoryError8299025
Ref: 18098299025
Ref: library/exceptions NameError8299624
Ref: 44f8299624
Ref: library/exceptions NameError name8299937
Ref: 257f8299937
Ref: library/exceptions NotImplementedError8300095
Ref: 3688300095
Ref: library/exceptions OSError8301003
Ref: 2bf8301003
Ref: library/exceptions OSError errno8302168
Ref: 25818302168
Ref: library/exceptions OSError winerror8302262
Ref: 25828302262
Ref: library/exceptions OSError strerror8302842
Ref: 25838302842
Ref: library/exceptions OSError filename8303074
Ref: 25848303074
Ref: library/exceptions OSError filename28303102
Ref: 25858303102
Ref: library/exceptions OverflowError8304183
Ref: a778304183
Ref: library/exceptions PythonFinalizationError8304740
Ref: 4728304740
Ref: library/exceptions RecursionError8305576
Ref: f5c8305576
Ref: library/exceptions ReferenceError8305925
Ref: 16fb8305925
Ref: library/exceptions RuntimeError8306274
Ref: 2438306274
Ref: library/exceptions StopIteration8306483
Ref: de98306483
Ref: library/exceptions StopIteration value8306709
Ref: 22ab8306709
Ref: library/exceptions StopAsyncIteration8307899
Ref: 1cc58307899
Ref: library/exceptions SyntaxError8308106
Ref: 18e8308106
Ref: library/exceptions SyntaxError filename8308668
Ref: 25868308668
Ref: library/exceptions SyntaxError lineno8308760
Ref: 25878308760
Ref: library/exceptions SyntaxError offset8308948
Ref: 25888308948
Ref: library/exceptions SyntaxError text8309117
Ref: 25898309117
Ref: library/exceptions SyntaxError end_lineno8309197
Ref: 258a8309197
Ref: library/exceptions SyntaxError end_offset8309397
Ref: 258b8309397
Ref: library/exceptions IndentationError8310057
Ref: 9a18310057
Ref: library/exceptions TabError8310224
Ref: 75a8310224
Ref: library/exceptions SystemError8310409
Ref: 78a8310409
Ref: library/exceptions SystemExit8311327
Ref: f308311327
Ref: library/exceptions SystemExit code8312698
Ref: 258d8312698
Ref: library/exceptions TypeError8312838
Ref: 1988312838
Ref: library/exceptions UnboundLocalError8313729
Ref: 17248313729
Ref: library/exceptions UnicodeError8313967
Ref: 45f8313967
Ref: library/exceptions UnicodeError encoding8314378
Ref: 258e8314378
Ref: library/exceptions UnicodeError reason8314463
Ref: 258f8314463
Ref: library/exceptions UnicodeError object8314554
Ref: 18528314554
Ref: library/exceptions UnicodeError start8314655
Ref: 181f8314655
Ref: library/exceptions UnicodeError end8314933
Ref: 18208314933
Ref: library/exceptions UnicodeEncodeError8315215
Ref: 87c8315215
Ref: library/exceptions UnicodeDecodeError8315387
Ref: bfe8315387
Ref: library/exceptions UnicodeTranslateError8315561
Ref: 18538315561
Ref: library/exceptions ValueError8315733
Ref: 2ea8315733
Ref: library/exceptions ZeroDivisionError8315980
Ref: b358315980
Ref: library/exceptions EnvironmentError8316349
Ref: 124a8316349
Ref: library/exceptions IOError8316382
Ref: 12498316382
Ref: library/exceptions WindowsError8316406
Ref: 124b8316406
Ref: Exceções concretas-Footnote-18316556
Ref: Exceções concretas-Footnote-28316598
Node: Exceções de sistema operacional8316640
Ref: library/exceptions os-exceptions8316730
Ref: 25808316730
Ref: library/exceptions BlockingIOError8316940
Ref: 2348316940
Ref: library/exceptions BlockingIOError characters_written8317336
Ref: 25948317336
Ref: library/exceptions ChildProcessError8317586
Ref: 124e8317586
Ref: library/exceptions ConnectionError8317737
Ref: 10008317737
Ref: library/exceptions BrokenPipeError8318006
Ref: 12528318006
Ref: library/exceptions ConnectionAbortedError8318340
Ref: 12538318340
Ref: library/exceptions ConnectionRefusedError8318560
Ref: 12548318560
Ref: library/exceptions ConnectionResetError8318779
Ref: 12558318779
Ref: library/exceptions FileExistsError8318983
Ref: 12168318983
Ref: library/exceptions FileNotFoundError8319139
Ref: 2638319139
Ref: library/exceptions InterruptedError8319305
Ref: f7c8319305
Ref: library/exceptions IsADirectoryError8319761
Ref: 124f8319761
Ref: library/exceptions NotADirectoryError8319965
Ref: 12508319965
Ref: library/exceptions PermissionError8320387
Ref: f328320387
Ref: library/exceptions ProcessLookupError8320785
Ref: 12518320785
Ref: library/exceptions TimeoutError8320931
Ref: a2c8320931
Ref: Exceções de sistema operacional-Footnote-18321306
Ref: Exceções de sistema operacional-Footnote-28321348
Node: Avisos8321390
Ref: library/exceptions warning-categories-as-exceptions8321511
Ref: 25a28321511
Ref: library/exceptions warnings8321511
Ref: 25a38321511
Ref: library/exceptions Warning8321680
Ref: 25a58321680
Ref: library/exceptions UserWarning8321748
Ref: 25a68321748
Ref: library/exceptions DeprecationWarning8321840
Ref: 1a38321840
Ref: library/exceptions PendingDeprecationWarning8322256
Ref: library/exceptions SyntaxWarning8322864
Ref: 1ae8322864
Ref: library/exceptions RuntimeWarning8323095
Ref: 4d18323095
Ref: library/exceptions FutureWarning8323214
Ref: 64d8323214
Ref: library/exceptions ImportWarning8323401
Ref: 7138323401
Ref: library/exceptions UnicodeWarning8323648
Ref: 16158323648
Ref: library/exceptions EncodingWarning8323733
Ref: 1fdb8323733
Ref: library/exceptions BytesWarning8323922
Ref: e108323922
Ref: library/exceptions ResourceWarning8324043
Ref: 5468324043
Ref: Avisos-Footnote-18324336
Ref: Avisos-Footnote-28324378
Ref: Avisos-Footnote-38324420
Node: Grupos de exceções8324462
Ref: library/exceptions exception-groups8324588
Ref: 25a78324588
Ref: library/exceptions lib-exception-groups8324588
Ref: 25a88324588
Ref: library/exceptions ExceptionGroup8325009
Ref: 4cc8325009
Ref: library/exceptions BaseExceptionGroup8325052
Ref: 55f8325052
Ref: library/exceptions BaseExceptionGroup message8326124
Ref: 25a98326124
Ref: library/exceptions BaseExceptionGroup exceptions8326252
Ref: 25aa8326252
Ref: library/exceptions BaseExceptionGroup subgroup8326410
Ref: 19768326410
Ref: library/exceptions BaseExceptionGroup split8327900
Ref: 18328327900
Ref: library/exceptions BaseExceptionGroup derive8328135
Ref: 19758328135
Node: Hierarquia das exceções8331246
Ref: library/exceptions exception-hierarchy8331357
Ref: 25ab8331357
Ref: library/text stringservices8334250
Ref: 24df8334250
Node: Serviços de Processamento de Texto8334250
Ref: library/text doc8334418
Ref: 25ac8334418
Ref: library/text no-color8334418
Ref: 25ad8334418
Ref: library/text text-processing-services8334418
Ref: 25ae8334418
Ref: library/text textservices8334418
Ref: 24e28334418
Node: string — Operações comuns de strings8335470
Ref: library/string doc8335654
Ref: 25b08335654
Ref: library/string module-string8335654
Ref: d88335654
Ref: library/string string-common-string-operations8335654
Ref: 25b18335654
Ref: string — Operações comuns de strings-Footnote-18336194
Node: Constantes de strings8336260
Ref: library/string string-constants8336404
Ref: 25b28336404
Ref: library/string string ascii_letters8336510
Ref: 14bf8336510
Ref: library/string string ascii_lowercase8336708
Ref: 25b38336708
Ref: library/string string ascii_uppercase8336866
Ref: 25b48336866
Ref: library/string string digits8337024
Ref: 25b58337024
Ref: library/string string hexdigits8337084
Ref: 25b68337084
Ref: library/string string octdigits8337159
Ref: 25b78337159
Ref: library/string string punctuation8337220
Ref: 25b88337220
Ref: library/string string printable8337399
Ref: 18188337399
Ref: library/string string whitespace8337870
Ref: 25b98337870
Ref: Constantes de strings-Footnote-18338167
Node: Formatação personalizada de strings8338213
Ref: library/string custom-string-formatting8338396
Ref: 25ba8338396
Ref: library/string string-formatting8338396
Ref: 24e18338396
Ref: library/string string Formatter8338907
Ref: 10b38338907
Ref: library/string string Formatter format8339012
Ref: dee8339012
Ref: library/string string Formatter vformat8339407
Ref: 25bb8339407
Ref: library/string string Formatter parse8340150
Ref: 25bc8340150
Ref: library/string string Formatter get_field8341126
Ref: 25bd8341126
Ref: library/string string Formatter get_value8341789
Ref: 25be8341789
Ref: library/string string Formatter check_unused_args8343073
Ref: 25bf8343073
Ref: library/string string Formatter format_field8343753
Ref: 25c08343753
Ref: library/string string Formatter convert_field8343992
Ref: 25c18343992
Ref: Formatação personalizada de strings-Footnote-18344367
Ref: Formatação personalizada de strings-Footnote-28344409
Node: Sintaxe das strings de formato8344451
Ref: library/string format-string-syntax8344639
Ref: 25c28344639
Ref: library/string formatstrings8344639
Ref: 158d8344639
Ref: library/string grammar-token-format-string-replacement_field8345532
Ref: 25c38345532
Ref: library/string grammar-token-format-string-field_name8345651
Ref: 25c48345651
Ref: library/string grammar-token-format-string-arg_name8345769
Ref: 25c78345769
Ref: library/string grammar-token-format-string-attribute_name8345841
Ref: 25c88345841
Ref: library/string grammar-token-format-string-element_index8345889
Ref: 25c98345889
Ref: library/string grammar-token-format-string-index_string8345961
Ref: 25ca8345961
Ref: library/string grammar-token-format-string-conversion8346021
Ref: 25c58346021
Ref: library/string grammar-token-format-string-format_spec8346061
Ref: 25c68346061
Ref: library/string formatstrings-conversion8348624
Ref: 25cc8348624
Node: Minilinguagem de especificação de formato8350595
Ref: library/string format-specification-mini-language8350733
Ref: 25ce8350733
Ref: library/string formatspec8350733
Ref: 4f38350733
Ref: library/string grammar-token-format-spec-format_spec8351774
Ref: 25cb8351774
Ref: library/string grammar-token-format-spec-options8351880
Ref: 25cf8351880
Ref: library/string grammar-token-format-spec-fill8351984
Ref: 25d28351984
Ref: library/string grammar-token-format-spec-align8352030
Ref: 25d38352030
Ref: library/string grammar-token-format-spec-sign8352082
Ref: 25d48352082
Ref: library/string grammar-token-format-spec-width_and_precision8352128
Ref: 25d08352128
Ref: library/string grammar-token-format-spec-width_with_grouping8352231
Ref: 25d58352231
Ref: library/string grammar-token-format-spec-precision_with_grouping8352305
Ref: 25d68352305
Ref: library/string grammar-token-format-spec-width8352415
Ref: 25d78352415
Ref: library/string grammar-token-format-spec-precision8352465
Ref: 25d98352465
Ref: library/string grammar-token-format-spec-grouping8352515
Ref: 25d88352515
Ref: library/string grammar-token-format-spec-type8352555
Ref: 25d18352555
Ref: Minilinguagem de especificação de formato-Footnote-18368289
Ref: Minilinguagem de especificação de formato-Footnote-28368331
Ref: Minilinguagem de especificação de formato-Footnote-38368373
Node: Exemplos de formato8368415
Ref: library/string format-examples8368553
Ref: 25db8368553
Ref: library/string formatexamples8368553
Ref: 25cd8368553
Node: Template strings $-strings8373694
Ref: library/string template-strings-pep2928373865
Ref: 25dc8373865
Ref: library/string template-strings-strings8373865
Ref: 25dd8373865
Ref: library/string string Template8376036
Ref: 88c8376036
Ref: library/string string Template substitute8376147
Ref: 25df8376147
Ref: library/string string Template safe_substitute8376654
Ref: 25e08376654
Ref: library/string string Template is_valid8377728
Ref: 88b8377728
Ref: library/string string Template get_identifiers8377974
Ref: 88a8377974
Ref: library/string string Template template8378328
Ref: 25e18378328
Ref: Template strings $-strings-Footnote-18382541
Ref: Template strings $-strings-Footnote-28382583
Node: Funções auxiliares8382635
Ref: library/string helper-functions8382767
Ref: 25e28382767
Ref: library/string string capwords8382824
Ref: 24e58382824
Node: string templatelib — Suporte para literais de string template8383385
Ref: library/string templatelib doc8383622
Ref: 25e38383622
Ref: library/string templatelib module-string templatelib8383622
Ref: d98383622
Ref: library/string templatelib no-color8383622
Ref: 25e48383622
Ref: library/string templatelib string-templatelib-support-for-template-string-literals8383622
Ref: 25e58383622
Ref: string templatelib — Suporte para literais de string template-Footnote-18384161
Ref: string templatelib — Suporte para literais de string template-Footnote-28384240
Node: Strings template8384282
Ref: library/string templatelib id18384412
Ref: 25e68384412
Ref: library/string templatelib template-strings8384412
Ref: 25de8384412
Node: Tipos8385116
Ref: library/string templatelib types8385278
Ref: 25e78385278
Ref: library/string templatelib string templatelib Template8385307
Ref: 16a8385307
Ref: library/string templatelib string templatelib Template strings8386868
Ref: 25e88386868
Ref: library/string templatelib string templatelib Template interpolations8387827
Ref: 25e98387827
Ref: library/string templatelib string templatelib Template values8388399
Ref: 25ea8388399
Ref: library/string templatelib string templatelib Template __new__8388924
Ref: 25eb8388924
Ref: library/string templatelib string templatelib Interpolation8392800
Ref: 16b8392800
Ref: library/string templatelib string templatelib Interpolation value8393700
Ref: 25ec8393700
Ref: library/string templatelib string templatelib Interpolation expression8393865
Ref: 25ed8393865
Ref: library/string templatelib string templatelib Interpolation conversion8394745
Ref: 21a08394745
Ref: library/string templatelib string templatelib Interpolation format_spec8395535
Ref: 25ef8395535
Ref: library/string templatelib string templatelib Interpolation __new__8396535
Ref: 25f08396535
Node: Funções auxiliares<2>8397361
Ref: library/string templatelib helper-functions8397498
Ref: 25f18397498
Ref: library/string templatelib string templatelib convert8397555
Ref: 25ee8397555
Node: re — Operações com expressões regulares8398207
Ref: library/re doc8398444
Ref: 25f28398444
Ref: library/re module-re8398444
Ref: be8398444
Ref: library/re no-color8398444
Ref: 25f38398444
Ref: library/re re-regular-expression-operations8398444
Ref: 25f48398444
Ref: re — Operações com expressões regulares-Footnote-18401466
Ref: re — Operações com expressões regulares-Footnote-28401526
Node: Sintaxe de expressão regular8401566
Ref: library/re re-syntax8401705
Ref: 9238401705
Ref: library/re regular-expression-syntax8401705
Ref: 25f58401705
Ref: library/re re-conditional-expression8424813
Ref: 1a568424813
Ref: library/re re-special-sequences8425547
Ref: 26028425547
Ref: Sintaxe de expressão regular-Footnote-18432838
Ref: Sintaxe de expressão regular-Footnote-28432880
Node: Conteúdo do módulo8432952
Ref: library/re contents-of-module-re8433126
Ref: 26018433126
Ref: library/re module-contents8433126
Ref: 26038433126
Node: Sinalizadores8433517
Ref: library/re flags8433608
Ref: 26048433608
Ref: library/re re RegexFlag8433804
Ref: 8348433804
Ref: library/re re A8434002
Ref: 25fa8434002
Ref: library/re re ASCII8434017
Ref: 8338434017
Ref: library/re re DEBUG8434822
Ref: 26058434822
Ref: library/re re I8434963
Ref: 25fb8434963
Ref: library/re re IGNORECASE8434978
Ref: 19d28434978
Ref: library/re re L8436148
Ref: 25fc8436148
Ref: library/re re LOCALE8436163
Ref: d578436163
Ref: library/re re M8437329
Ref: 25fd8437329
Ref: library/re re MULTILINE8437344
Ref: 25f98437344
Ref: library/re re NOFLAG8437908
Ref: 26068437908
Ref: library/re re S8438376
Ref: 25fe8438376
Ref: library/re re DOTALL8438391
Ref: 25f88438391
Ref: library/re re U8438682
Ref: 25ff8438682
Ref: library/re re UNICODE8438697
Ref: d588438697
Ref: library/re re X8439054
Ref: 26008439054
Ref: library/re re VERBOSE8439069
Ref: 26078439069
Node: Funções<2>8440262
Ref: library/re functions8440375
Ref: 26088440375
Ref: library/re re compile8440410
Ref: dc28440410
Ref: library/re re search8441669
Ref: 14288441669
Ref: library/re re match8442347
Ref: 14298442347
Ref: library/re re fullmatch8443292
Ref: 117b8443292
Ref: library/re re split8443898
Ref: 59b8443898
Ref: library/re re findall8446496
Ref: 12208446496
Ref: library/re re finditer8447909
Ref: 16e88447909
Ref: library/re re sub8448688
Ref: 59c8448688
Ref: library/re re subn8452886
Ref: 59d8452886
Ref: library/re re escape8453328
Ref: df78453328
Ref: library/re re purge8454867
Ref: 260c8454867
Node: Exceções<3>8454937
Ref: library/re exceptions8455028
Ref: 260d8455028
Ref: library/re re PatternError8455065
Ref: 5408455065
Ref: library/re re PatternError msg8455584
Ref: 10408455584
Ref: library/re re PatternError pattern8455654
Ref: 10418455654
Ref: library/re re PatternError pos8455726
Ref: 10428455726
Ref: library/re re PatternError lineno8455855
Ref: 10438455855
Ref: library/re re PatternError colno8455947
Ref: 10448455947
Node: Objetos expressão regular8456293
Ref: library/re re-objects8456462
Ref: 117d8456462
Ref: library/re regular-expression-objects8456462
Ref: 260e8456462
Ref: library/re re Pattern8456532
Ref: 1a838456532
Ref: library/re re Pattern search8456815
Ref: 260a8456815
Ref: library/re re Pattern match8458355
Ref: 26098458355
Ref: library/re re Pattern fullmatch8459294
Ref: 117c8459294
Ref: library/re re Pattern split8460174
Ref: 260f8460174
Ref: library/re re Pattern findall8460299
Ref: 26108460299
Ref: library/re re Pattern finditer8460577
Ref: 26118460577
Ref: library/re re Pattern sub8460857
Ref: 26128460857
Ref: library/re re Pattern subn8460981
Ref: 26138460981
Ref: library/re re Pattern flags8461107
Ref: 26148461107
Ref: library/re re Pattern groups8461451
Ref: 26158461451
Ref: library/re re Pattern groupindex8461530
Ref: 26168461530
Ref: library/re re Pattern pattern8461770
Ref: 26178461770
Node: Objetos correspondência8462043
Ref: library/re id38462222
Ref: 26188462222
Ref: library/re match-objects8462222
Ref: 117e8462222
Ref: library/re re Match8462630
Ref: eb78462630
Ref: library/re re Match expand8462925
Ref: 26198462925
Ref: library/re re Match group8463583
Ref: 12218463583
Ref: library/re re Match __getitem__8466043
Ref: 261a8466043
Ref: library/re re Match groups8466794
Ref: 12228466794
Ref: library/re re Match groupdict8467693
Ref: 261b8467693
Ref: library/re re Match start8468188
Ref: 261c8468188
Ref: library/re re Match end8468223
Ref: 261d8468223
Ref: library/re re Match span8469348
Ref: 261e8469348
Ref: library/re re Match pos8469657
Ref: 261f8469657
Ref: library/re re Match endpos8469939
Ref: 26208469939
Ref: library/re re Match lastindex8470207
Ref: 26218470207
Ref: library/re re Match lastgroup8470611
Ref: 26228470611
Ref: library/re re Match re8470786
Ref: 26238470786
Ref: library/re re Match string8470972
Ref: 26248470972
Node: Exemplos de expressão regular8471233
Ref: library/re re-examples8471377
Ref: 14598471377
Ref: library/re regular-expression-examples8471377
Ref: 26258471377
Node: Verificando por um par8471776
Ref: library/re checking-for-a-pair8471889
Ref: 26268471889
Node: Simulando scanf8474063
Ref: library/re simulating-scanf8474200
Ref: 26278474200
Node: search vs match8476300
Ref: library/re id48476444
Ref: 26288476444
Ref: library/re search-vs-match8476444
Ref: 260b8476444
Node: Criando uma lista telefônica8478072
Ref: library/re making-a-phonebook8478217
Ref: 26298478217
Node: Mastigando texto8480543
Ref: library/re text-munging8480704
Ref: 262a8480704
Node: Encontrando todos os advérbios8481584
Ref: library/re finding-all-adverbs8481765
Ref: 262b8481765
Node: Encontrando todos os advérbios e suas posições8482299
Ref: library/re finding-all-adverbs-and-their-positions8482489
Ref: 262c8482489
Node: Notação de string bruta8483273
Ref: library/re raw-string-notation8483457
Ref: 262d8483457
Node: Escrevendo um tokenizador8484503
Ref: library/re writing-a-tokenizer8484629
Ref: 262e8484629
Ref: library/re frie098488071
Ref: 25f68488071
Ref: Escrevendo um tokenizador-Footnote-18488357
Node: difflib — Helpers for computing deltas8488412
Ref: library/difflib doc8488642
Ref: 262f8488642
Ref: library/difflib difflib-helpers-for-computing-deltas8488642
Ref: 26308488642
Ref: library/difflib module-difflib8488642
Ref: 3b8488642
Ref: library/difflib no-color8488642
Ref: 26318488642
Ref: library/difflib difflib Differ8491155
Ref: 26328491155
Ref: library/difflib difflib HtmlDiff8492338
Ref: 2008492338
Ref: library/difflib difflib HtmlDiff __init__8492709
Ref: 26338492709
Ref: library/difflib difflib HtmlDiff make_file8493521
Ref: fe58493521
Ref: library/difflib difflib HtmlDiff make_table8495206
Ref: 26358495206
Ref: library/difflib difflib context_diff8495668
Ref: 18ce8495668
Ref: library/difflib difflib get_close_matches8497714
Ref: 26398497714
Ref: library/difflib difflib ndiff8498878
Ref: 26348498878
Ref: library/difflib difflib restore8500442
Ref: 263b8500442
Ref: library/difflib difflib unified_diff8501185
Ref: 18cd8501185
Ref: library/difflib difflib diff_bytes8503110
Ref: fe68503110
Ref: library/difflib difflib IS_LINE_JUNK8504009
Ref: 2d68504009
Ref: library/difflib difflib IS_CHARACTER_JUNK8504311
Ref: 263a8504311
Ref: difflib — Helpers for computing deltas-Footnote-18504986
Ref: difflib — Helpers for computing deltas-Footnote-28505053
Node: SequenceMatcher Objects8505133
Ref: library/difflib sequence-matcher8505266
Ref: 263d8505266
Ref: library/difflib sequencematcher-objects8505266
Ref: 263e8505266
Ref: library/difflib difflib SequenceMatcher8505393
Ref: 120f8505393
Ref: library/difflib difflib SequenceMatcher set_seqs8506936
Ref: 263f8506936
Ref: library/difflib difflib SequenceMatcher set_seq18507356
Ref: 26418507356
Ref: library/difflib difflib SequenceMatcher set_seq28507500
Ref: 26408507500
Ref: library/difflib difflib SequenceMatcher find_longest_match8507644
Ref: 1c028507644
Ref: library/difflib difflib SequenceMatcher get_matching_blocks8509803
Ref: 26428509803
Ref: library/difflib difflib SequenceMatcher get_opcodes8510721
Ref: 26438510721
Ref: library/difflib difflib SequenceMatcher get_grouped_opcodes8512713
Ref: 26448512713
Ref: library/difflib difflib SequenceMatcher ratio8513147
Ref: 26458513147
Ref: library/difflib difflib SequenceMatcher quick_ratio8514171
Ref: 26468514171
Ref: library/difflib difflib SequenceMatcher real_quick_ratio8514292
Ref: 26478514292
Node: SequenceMatcher Examples8514825
Ref: library/difflib id18514981
Ref: 26488514981
Ref: library/difflib sequencematcher-examples8514981
Ref: 26498514981
Ref: SequenceMatcher Examples-Footnote-18516728
Node: Differ Objects8516805
Ref: library/difflib differ-objects8516952
Ref: 264a8516952
Ref: library/difflib id28516952
Ref: 264b8516952
Ref: library/difflib difflib Differ compare8518359
Ref: 263c8518359
Node: Differ Example8518884
Ref: library/difflib differ-example8519042
Ref: 264c8519042
Ref: library/difflib differ-examples8519042
Ref: 264d8519042
Node: A command-line interface to difflib8521307
Ref: library/difflib a-command-line-interface-to-difflib8521464
Ref: 264e8521464
Ref: library/difflib difflib-interface8521464
Ref: 26388521464
Node: ndiff example8524103
Ref: library/difflib ndiff-example8524237
Ref: 264f8524237
Node: textwrap — Quebra automática e preenchimento de texto8527887
Ref: library/textwrap doc8528114
Ref: 26508528114
Ref: library/textwrap module-textwrap8528114
Ref: f28528114
Ref: library/textwrap no-color8528114
Ref: 26518528114
Ref: library/textwrap textwrap-text-wrapping-and-filling8528114
Ref: 26528528114
Ref: library/textwrap textwrap wrap8528736
Ref: 16b58528736
Ref: library/textwrap textwrap fill8529513
Ref: 16b48529513
Ref: library/textwrap textwrap shorten8530154
Ref: 11c68530154
Ref: library/textwrap textwrap dedent8531493
Ref: 1a98531493
Ref: library/textwrap textwrap indent8532506
Ref: 5768532506
Ref: library/textwrap textwrap TextWrapper8533990
Ref: 11c38533990
Ref: library/textwrap textwrap TextWrapper width8534696
Ref: 26598534696
Ref: library/textwrap textwrap TextWrapper expand_tabs8535043
Ref: 26558535043
Ref: library/textwrap textwrap TextWrapper tabsize8535281
Ref: 26548535281
Ref: library/textwrap textwrap TextWrapper replace_whitespace8535615
Ref: 26578535615
Ref: library/textwrap textwrap TextWrapper drop_whitespace8536715
Ref: 26568536715
Ref: library/textwrap textwrap TextWrapper initial_indent8537188
Ref: 265a8537188
Ref: library/textwrap textwrap TextWrapper subsequent_indent8537435
Ref: 265b8537435
Ref: library/textwrap textwrap TextWrapper fix_sentence_endings8537677
Ref: 265c8537677
Ref: library/textwrap textwrap TextWrapper break_long_words8538942
Ref: 26588538942
Ref: library/textwrap textwrap TextWrapper break_on_hyphens8539452
Ref: 265d8539452
Ref: library/textwrap textwrap TextWrapper max_lines8540083
Ref: 11c48540083
Ref: library/textwrap textwrap TextWrapper placeholder8540333
Ref: 11c58540333
Ref: library/textwrap textwrap TextWrapper wrap8540670
Ref: 26538540670
Ref: library/textwrap textwrap TextWrapper fill8541126
Ref: 265e8541126
Ref: textwrap — Quebra automática e preenchimento de texto-Footnote-18541311
Node: unicodedata — Banco de dados de Unicode8541379
Ref: library/unicodedata doc8541617
Ref: 265f8541617
Ref: library/unicodedata module-unicodedata8541617
Ref: 10b8541617
Ref: library/unicodedata no-color8541617
Ref: 26608541617
Ref: library/unicodedata unicodedata-unicode-database8541617
Ref: 26618541617
Ref: library/unicodedata unicodedata lookup8542284
Ref: 126e8542284
Ref: library/unicodedata unicodedata name8542958
Ref: 26628542958
Ref: library/unicodedata unicodedata decimal8543377
Ref: 26638543377
Ref: library/unicodedata unicodedata digit8543809
Ref: 26648543809
Ref: library/unicodedata unicodedata numeric8544145
Ref: 145e8544145
Ref: library/unicodedata unicodedata category8544465
Ref: 26658544465
Ref: library/unicodedata unicodedata bidirectional8544865
Ref: 26668544865
Ref: library/unicodedata unicodedata combining8545324
Ref: 26678545324
Ref: library/unicodedata unicodedata east_asian_width8545629
Ref: 26688545629
Ref: library/unicodedata unicodedata mirrored8545853
Ref: 26698545853
Ref: library/unicodedata unicodedata decomposition8546183
Ref: 266a8546183
Ref: library/unicodedata unicodedata normalize8546481
Ref: 8d98546481
Ref: library/unicodedata unicodedata is_normalized8548353
Ref: c318548353
Ref: library/unicodedata unicodedata unidata_version8548667
Ref: 266b8548667
Ref: library/unicodedata unicodedata ucd_3_2_08548769
Ref: 16258548769
Ref: unicodedata — Banco de dados de Unicode-Footnote-18549068
Ref: unicodedata — Banco de dados de Unicode-Footnote-28549118
Ref: unicodedata — Banco de dados de Unicode-Footnote-38549164
Ref: unicodedata — Banco de dados de Unicode-Footnote-48549236
Ref: unicodedata — Banco de dados de Unicode-Footnote-58549311
Ref: unicodedata — Banco de dados de Unicode-Footnote-68549394
Ref: unicodedata — Banco de dados de Unicode-Footnote-78549471
Ref: unicodedata — Banco de dados de Unicode-Footnote-88549563
Node: stringprep — Preparação de string para internet8549621
Ref: library/stringprep doc8549845
Ref: 266c8549845
Ref: library/stringprep module-stringprep8549845
Ref: da8549845
Ref: library/stringprep no-color8549845
Ref: 266d8549845
Ref: library/stringprep stringprep-internet-string-preparation8549845
Ref: 266e8549845
Ref: library/stringprep stringprep in_table_a18551919
Ref: 266f8551919
Ref: library/stringprep stringprep in_table_b18552068
Ref: 26708552068
Ref: library/stringprep stringprep map_table_b28552195
Ref: 26718552195
Ref: library/stringprep stringprep map_table_b38552369
Ref: 26728552369
Ref: library/stringprep stringprep in_table_c118552566
Ref: 26738552566
Ref: library/stringprep stringprep in_table_c128552696
Ref: 26748552696
Ref: library/stringprep stringprep in_table_c11_c128552831
Ref: 26758552831
Ref: library/stringprep stringprep in_table_c218552982
Ref: 26768552982
Ref: library/stringprep stringprep in_table_c228553113
Ref: 26778553113
Ref: library/stringprep stringprep in_table_c21_c228553249
Ref: 26788553249
Ref: library/stringprep stringprep in_table_c38553401
Ref: 26798553401
Ref: library/stringprep stringprep in_table_c48553507
Ref: 267a8553507
Ref: library/stringprep stringprep in_table_c58553640
Ref: 267b8553640
Ref: library/stringprep stringprep in_table_c68553755
Ref: 267c8553755
Ref: library/stringprep stringprep in_table_c78553886
Ref: 267d8553886
Ref: library/stringprep stringprep in_table_c88554034
Ref: 267e8554034
Ref: library/stringprep stringprep in_table_c98554193
Ref: 267f8554193
Ref: library/stringprep stringprep in_table_d18554305
Ref: 26808554305
Ref: library/stringprep stringprep in_table_d28554464
Ref: 26818554464
Ref: stringprep — Preparação de string para internet-Footnote-18554647
Ref: stringprep — Preparação de string para internet-Footnote-28554717
Ref: stringprep — Preparação de string para internet-Footnote-38554776
Node: readline — Interface para o GNU readline8554835
Ref: library/readline doc8555079
Ref: 26828555079
Ref: library/readline module-readline8555079
Ref: bf8555079
Ref: library/readline no-color8555079
Ref: 26838555079
Ref: library/readline readline-gnu-readline-interface8555079
Ref: 26848555079
Ref: library/readline readline backend8557419
Ref: 19648557419
Ref: readline — Interface para o GNU readline-Footnote-18557795
Node: Arquivo init8557880
Ref: library/readline init-file8557995
Ref: 26858557995
Ref: library/readline readline parse_and_bind8558131
Ref: 26868558131
Ref: library/readline readline read_init_file8558311
Ref: 26878558311
Node: Buffer de linha8558824
Ref: library/readline line-buffer8558969
Ref: 26888558969
Ref: library/readline readline get_line_buffer8559069
Ref: 26898559069
Ref: library/readline readline insert_text8559217
Ref: 268a8559217
Ref: library/readline readline redisplay8559426
Ref: 16b38559426
Node: Arquivo de histórico8559622
Ref: library/readline history-file8559774
Ref: 268b8559774
Ref: library/readline readline read_history_file8559891
Ref: 268c8559891
Ref: library/readline readline write_history_file8560352
Ref: 268d8560352
Ref: library/readline readline append_history_file8560855
Ref: 10468560855
Ref: library/readline readline get_history_length8561489
Ref: 268e8561489
Ref: library/readline readline set_history_length8561534
Ref: 18788561534
Node: Lista de histórico8561933
Ref: library/readline history-list8562096
Ref: 268f8562096
Ref: library/readline readline clear_history8562218
Ref: 26908562218
Ref: library/readline readline get_current_history_length8562463
Ref: 16b28562463
Ref: library/readline readline get_history_item8562733
Ref: 16b18562733
Ref: library/readline readline remove_history_item8562953
Ref: 26918562953
Ref: library/readline readline replace_history_item8563191
Ref: 26928563191
Ref: library/readline readline add_history8563445
Ref: 26938563445
Ref: library/readline readline set_auto_history8563645
Ref: eb98563645
Node: Ganchos de inicialização8564124
Ref: library/readline startup-hooks8564281
Ref: 26948564281
Ref: library/readline readline set_startup_hook8564350
Ref: 26958564350
Ref: library/readline readline set_pre_input_hook8564781
Ref: 26968564781
Node: Autocomplemento8565382
Ref: library/readline completion8565527
Ref: 26978565527
Ref: library/readline readline-completion8565527
Ref: 26988565527
Ref: library/readline readline set_completer8566163
Ref: 26998566163
Ref: library/readline readline get_completer8567044
Ref: 269a8567044
Ref: library/readline readline get_completion_type8567207
Ref: 269b8567207
Ref: library/readline readline get_begidx8567429
Ref: 1b898567429
Ref: library/readline readline get_endidx8567466
Ref: 1b8a8567466
Ref: library/readline readline set_completer_delims8567967
Ref: 19688567967
Ref: library/readline readline get_completer_delims8568020
Ref: 269c8568020
Ref: library/readline readline set_completion_display_matches_hook8568374
Ref: 269d8568374
Node: Exemplo8569054
Ref: library/readline example8569164
Ref: 269e8569164
Ref: library/readline readline-example8569164
Ref: 269f8569164
Node: rlcompleter — Função de autocomplemento para GNU readline8571906
Ref: library/rlcompleter doc8572090
Ref: 26a18572090
Ref: library/rlcompleter module-rlcompleter8572090
Ref: c28572090
Ref: library/rlcompleter no-color8572090
Ref: 26a28572090
Ref: library/rlcompleter rlcompleter-completion-function-for-gnu-readline8572090
Ref: 26a38572090
Ref: library/rlcompleter completer-objects8573685
Ref: 26a58573685
Ref: library/rlcompleter rlcompleter Completer8573685
Ref: 1be78573685
Ref: library/rlcompleter rlcompleter Completer complete8573772
Ref: 26a48573772
Ref: rlcompleter — Função de autocomplemento para GNU readline-Footnote-18574903
Node: Serviços de Dados Binários8574974
Ref: library/binary doc8575136
Ref: 26a68575136
Ref: library/binary binary-data-services8575136
Ref: 26a78575136
Ref: library/binary binaryservices8575136
Ref: 25af8575136
Ref: library/binary no-color8575136
Ref: 26a88575136
Node: struct — Interpreta bytes como dados binários empacotados8576016
Ref: library/struct doc8576192
Ref: 26a98576192
Ref: library/struct struct-interpret-bytes-as-packed-binary-data8576192
Ref: 26aa8576192
Ref: library/struct module-struct8576332
Ref: db8576332
Ref: struct — Interpreta bytes como dados binários empacotados-Footnote-18578235
Node: Funções e exceções8578301
Ref: library/struct functions-and-exceptions8578443
Ref: 26ad8578443
Ref: library/struct struct error8578557
Ref: 151f8578557
Ref: library/struct struct pack8578696
Ref: 14728578696
Ref: library/struct struct pack_into8578938
Ref: 26ae8578938
Ref: library/struct struct unpack8579237
Ref: 17c58579237
Ref: library/struct struct unpack_from8579604
Ref: 26af8579604
Ref: library/struct struct iter_unpack8580000
Ref: 11b58580000
Ref: library/struct struct calcsize8580527
Ref: 1c608580527
Node: Format Strings8580726
Ref: library/struct format-strings8580889
Ref: 26b08580889
Ref: library/struct struct-format-strings8580889
Ref: 26ab8580889
Node: Byte Order Size and Alignment8581531
Ref: library/struct byte-order-size-and-alignment8581641
Ref: 26b28581641
Ref: library/struct struct-alignment8581641
Ref: 26ac8581641
Ref: Byte Order Size and Alignment-Footnote-18585377
Node: Caracteres Formatados8585431
Ref: library/struct format-characters8585561
Ref: 26b18585561
Ref: library/struct id18585561
Ref: 26b48585561
Ref: Caracteres Formatados-Footnote-18598281
Ref: Caracteres Formatados-Footnote-28598342
Node: Exemplos<2>8598418
Ref: library/struct examples8598510
Ref: 26b58598510
Ref: library/struct struct-examples8598510
Ref: 26b38598510
Node: Applications8601025
Ref: library/struct applications8601176
Ref: 26b68601176
Ref: library/struct id28601176
Ref: 26b78601176
Node: Native Formats8601677
Ref: library/struct native-formats8601765
Ref: 26ba8601765
Ref: library/struct struct-native-formats8601765
Ref: 26b88601765
Node: Standard Formats8602913
Ref: library/struct standard-formats8603001
Ref: 26bb8603001
Ref: library/struct struct-standard-formats8603001
Ref: 26b98603001
Node: Classes<3>8604444
Ref: library/struct classes8604572
Ref: 26bc8604572
Ref: library/struct struct-objects8604572
Ref: 26bd8604572
Ref: library/struct struct Struct8604668
Ref: 19668604668
Ref: library/struct struct Struct pack8605365
Ref: 26be8605365
Ref: library/struct struct Struct pack_into8605548
Ref: 26c08605548
Ref: library/struct struct Struct unpack8605707
Ref: 26c18605707
Ref: library/struct struct Struct unpack_from8605908
Ref: 26c28605908
Ref: library/struct struct Struct iter_unpack8606167
Ref: 11b68606167
Ref: library/struct struct Struct format8606427
Ref: df48606427
Ref: library/struct struct Struct size8606642
Ref: 26bf8606642
Node: codecs — Codec registry and base classes8606978
Ref: library/codecs doc8607154
Ref: 26c38607154
Ref: library/codecs codecs-codec-registry-and-base-classes8607154
Ref: 26c48607154
Ref: library/codecs module-codecs8607154
Ref: 1c8607154
Ref: library/codecs no-color8607154
Ref: 26c58607154
Ref: library/codecs codecs encode8608048
Ref: 10fa8608048
Ref: library/codecs codecs decode8608543
Ref: 10fb8608543
Ref: library/codecs codecs charmap_build8609038
Ref: 26c78609038
Ref: library/codecs codecs lookup8609531
Ref: b528609531
Ref: library/codecs codecs CodecInfo8610032
Ref: 19ab8610032
Ref: library/codecs codecs CodecInfo name8610329
Ref: 26c88610329
Ref: library/codecs codecs CodecInfo encode8610391
Ref: 26c98610391
Ref: library/codecs codecs CodecInfo decode8610417
Ref: 26ca8610417
Ref: library/codecs codecs CodecInfo incrementalencoder8610794
Ref: 26ce8610794
Ref: library/codecs codecs CodecInfo incrementaldecoder8610832
Ref: 26cf8610832
Ref: library/codecs codecs CodecInfo streamwriter8611170
Ref: 26d28611170
Ref: library/codecs codecs CodecInfo streamreader8611202
Ref: 26d38611202
Ref: library/codecs codecs getencoder8611654
Ref: 26d68611654
Ref: library/codecs codecs getdecoder8611866
Ref: 26d78611866
Ref: library/codecs codecs getincrementalencoder8612078
Ref: 26d88612078
Ref: library/codecs codecs getincrementaldecoder8612384
Ref: 26d98612384
Ref: library/codecs codecs getreader8612690
Ref: 26da8612690
Ref: library/codecs codecs getwriter8612936
Ref: 26db8612936
Ref: library/codecs codecs register8613265
Ref: 26dc8613265
Ref: library/codecs codecs unregister8613744
Ref: 9df8613744
Ref: library/codecs codecs open8614250
Ref: 3138614250
Ref: library/codecs codecs EncodedFile8615733
Ref: 26de8615733
Ref: library/codecs codecs iterencode8616590
Ref: 26df8616590
Ref: library/codecs codecs iterdecode8617175
Ref: 26e08617175
Ref: library/codecs codecs readbuffer_encode8617834
Ref: 26e18617834
Ref: library/codecs codecs BOM8618335
Ref: 26e28618335
Ref: library/codecs codecs BOM_BE8618356
Ref: 26e38618356
Ref: library/codecs codecs BOM_LE8618380
Ref: 26e48618380
Ref: library/codecs codecs BOM_UTF88618404
Ref: 26e58618404
Ref: library/codecs codecs BOM_UTF168618430
Ref: 26e68618430
Ref: library/codecs codecs BOM_UTF16_BE8618457
Ref: 26e78618457
Ref: library/codecs codecs BOM_UTF16_LE8618487
Ref: 26e88618487
Ref: library/codecs codecs BOM_UTF328618517
Ref: 26e98618517
Ref: library/codecs codecs BOM_UTF32_BE8618544
Ref: 26ea8618544
Ref: library/codecs codecs BOM_UTF32_LE8618574
Ref: 26eb8618574
Ref: codecs — Codec registry and base classes-Footnote-18619757
Node: Codec Base Classes8619823
Ref: library/codecs codec-base-classes8619950
Ref: 26c68619950
Ref: library/codecs id18619950
Ref: 26ec8619950
Ref: library/codecs surrogateescape8620543
Ref: 26ed8620543
Node: Error Handlers8620680
Ref: library/codecs error-handlers8620789
Ref: 1a8b8620789
Ref: library/codecs id28620789
Ref: 26ee8620789
Ref: library/codecs codecs register_error8625732
Ref: 16898625732
Ref: library/codecs codecs lookup_error8627277
Ref: 168a8627277
Ref: library/codecs codecs strict_errors8627575
Ref: 26ef8627575
Ref: library/codecs codecs ignore_errors8627748
Ref: 26f08627748
Ref: library/codecs codecs replace_errors8627945
Ref: 18218627945
Ref: library/codecs codecs backslashreplace_errors8628196
Ref: 18228628196
Ref: library/codecs codecs xmlcharrefreplace_errors8628660
Ref: 18238628660
Ref: library/codecs codecs namereplace_errors8629024
Ref: 26f18629024
Ref: Error Handlers-Footnote-18629592
Node: Stateless Encoding and Decoding8629634
Ref: library/codecs codec-objects8629785
Ref: 26cd8629785
Ref: library/codecs stateless-encoding-and-decoding8629785
Ref: 26f28629785
Ref: library/codecs codecs Codec8630003
Ref: 26f38630003
Ref: library/codecs codecs Codec encode8630029
Ref: 26cb8630029
Ref: library/codecs codecs Codec decode8630850
Ref: 26cc8630850
Node: Incremental Encoding and Decoding8631881
Ref: library/codecs incremental-encoding-and-decoding8632046
Ref: 26f48632046
Node: IncrementalEncoder Objects8632886
Ref: library/codecs incremental-encoder-objects8633017
Ref: 26f78633017
Ref: library/codecs incrementalencoder-objects8633017
Ref: 26f88633017
Ref: library/codecs codecs IncrementalEncoder8633316
Ref: 26d08633316
Ref: library/codecs codecs IncrementalEncoder encode8634102
Ref: 26f58634102
Ref: library/codecs codecs IncrementalEncoder reset8634401
Ref: 26f98634401
Ref: library/codecs codecs IncrementalEncoder getstate8634671
Ref: 26fa8634671
Ref: library/codecs codecs IncrementalEncoder setstate8635085
Ref: 26fb8635085
Node: IncrementalDecoder Objects8635253
Ref: library/codecs incremental-decoder-objects8635384
Ref: 26fc8635384
Ref: library/codecs incrementaldecoder-objects8635384
Ref: 26fd8635384
Ref: library/codecs codecs IncrementalDecoder8635683
Ref: 26d18635683
Ref: library/codecs codecs IncrementalDecoder decode8636469
Ref: 26f68636469
Ref: library/codecs codecs IncrementalDecoder reset8637104
Ref: 26fe8637104
Ref: library/codecs codecs IncrementalDecoder getstate8637183
Ref: 26ff8637183
Ref: library/codecs codecs IncrementalDecoder setstate8638131
Ref: 27008638131
Node: Stream Encoding and Decoding8638298
Ref: library/codecs stream-encoding-and-decoding8638423
Ref: 27018638423
Node: StreamWriter Objects8638850
Ref: library/codecs stream-writer-objects8638964
Ref: 27028638964
Ref: library/codecs streamwriter-objects8638964
Ref: 27038638964
Ref: library/codecs codecs StreamWriter8639226
Ref: 26d48639226
Ref: library/codecs codecs StreamWriter write8640184
Ref: 27048640184
Ref: library/codecs codecs StreamWriter writelines8640283
Ref: 27058640283
Ref: library/codecs codecs StreamWriter reset8640590
Ref: 27068640590
Node: StreamReader Objects8641046
Ref: library/codecs stream-reader-objects8641195
Ref: 27078641195
Ref: library/codecs streamreader-objects8641195
Ref: 27088641195
Ref: library/codecs codecs StreamReader8641457
Ref: 26d58641457
Ref: library/codecs codecs StreamReader read8642529
Ref: 27098642529
Ref: library/codecs codecs StreamReader readline8643788
Ref: 270a8643788
Ref: library/codecs codecs StreamReader readlines8644140
Ref: 270b8644140
Ref: library/codecs codecs StreamReader reset8644593
Ref: 270c8644593
Node: StreamReaderWriter Objects8644997
Ref: library/codecs stream-reader-writer8645147
Ref: 270d8645147
Ref: library/codecs streamreaderwriter-objects8645147
Ref: 270e8645147
Ref: library/codecs codecs StreamReaderWriter8645482
Ref: 26dd8645482
Node: StreamRecoder Objects8646138
Ref: library/codecs stream-recoder-objects8646259
Ref: 270f8646259
Ref: library/codecs streamrecoder-objects8646259
Ref: 27108646259
Ref: library/codecs codecs StreamRecoder8646609
Ref: 1c8b8646609
Node: Encodings and Unicode8647764
Ref: library/codecs encodings-and-unicode8647918
Ref: 27118647918
Ref: library/codecs encodings-overview8647918
Ref: 27128647918
Ref: Encodings and Unicode-Footnote-18654610
Node: Standard Encodings8654652
Ref: library/codecs id38654813
Ref: 27138654813
Ref: library/codecs standard-encodings8654813
Ref: fac8654813
Ref: Standard Encodings-Footnote-18677439
Node: Python Specific Encodings8677517
Ref: library/codecs python-specific-encodings8677688
Ref: 27148677688
Node: Text Encodings8678307
Ref: library/codecs text-encodings8678409
Ref: 27158678409
Ref: Text Encodings-Footnote-18681964
Ref: Text Encodings-Footnote-28682023
Node: Binary Transforms8682082
Ref: library/codecs binary-transforms8682219
Ref: 10fc8682219
Ref: library/codecs id48682219
Ref: 27168682219
Ref: Binary Transforms-Footnote-18685912
Node: Standalone Codec Functions8686053
Ref: library/codecs id68686191
Ref: 271c8686191
Ref: library/codecs standalone-codec-functions8686191
Ref: 271d8686191
Ref: library/codecs codecs codecs escape_encode8686605
Ref: 271e8686605
Ref: library/codecs codecs codecs escape_decode8686977
Ref: 271f8686977
Node: Text Transforms8687300
Ref: library/codecs id78687412
Ref: 27208687412
Ref: library/codecs text-transforms8687412
Ref: 10fd8687412
Node: encodings — Encodings package8688168
Ref: library/codecs encodings-encodings-package8688386
Ref: 27218688386
Ref: library/codecs module-encodings8688386
Ref: 558688386
Ref: library/codecs encodings normalize_encoding8688524
Ref: 9f38688524
Ref: library/codecs encodings search_function8689101
Ref: 27228689101
Ref: library/codecs encodings win32_code_page_search_function8689796
Ref: 27238689796
Ref: library/codecs encodings CodecRegistryError8690186
Ref: 27248690186
Node: encodings idna — Internationalized Domain Names in Applications8690285
Ref: library/codecs encodings-idna-internationalized-domain-names-in-applications8690518
Ref: 27258690518
Ref: library/codecs module-encodings idna8690518
Ref: 568690518
Ref: library/codecs encodings idna nameprep8693133
Ref: 27268693133
Ref: library/codecs encodings idna ToASCII8693321
Ref: 27278693321
Ref: library/codecs encodings idna ToUnicode8693481
Ref: 27288693481
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-18693628
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-28693687
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-38693746
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-48693805
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-58693864
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-68693903
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-78693974
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-88694033
Node: encodings mbcs — Windows ANSI codepage8694092
Ref: library/codecs encodings-mbcs-windows-ansi-codepage8694348
Ref: 27298694348
Ref: library/codecs module-encodings mbcs8694348
Ref: 578694348
Node: encodings utf_8_sig — UTF-8 codec with BOM signature8694746
Ref: library/codecs encodings-utf-8-sig-utf-8-codec-with-bom-signature8694928
Ref: 272a8694928
Ref: library/codecs module-encodings utf_8_sig8694928
Ref: 588694928
Node: Tipos de Dados8695373
Ref: library/datatypes doc8695534
Ref: 272b8695534
Ref: library/datatypes data-types8695534
Ref: 272c8695534
Ref: library/datatypes datatypes8695534
Ref: 272d8695534
Ref: library/datatypes no-color8695534
Ref: 272e8695534
Node: datetime — Tipos básicos de data e hora8697066
Ref: library/datetime doc8697212
Ref: 272f8697212
Ref: library/datetime datetime-basic-date-and-time-types8697212
Ref: 27308697212
Ref: library/datetime module-datetime8697212
Ref: 348697212
Ref: datetime — Tipos básicos de data e hora-Footnote-18698667
Ref: datetime — Tipos básicos de data e hora-Footnote-28698735
Ref: datetime — Tipos básicos de data e hora-Footnote-38698786
Node: Objetos Conscientes e Ingênuos8698829
Ref: library/datetime aware-and-naive-objects8698958
Ref: 27328698958
Ref: library/datetime datetime-naive-aware8698958
Ref: 27338698958
Ref: Objetos Conscientes e Ingênuos-Footnote-18701073
Node: Constantes8701136
Ref: library/datetime constants8701292
Ref: 27348701292
Ref: library/datetime datetime MINYEAR8701390
Ref: 27358701390
Ref: library/datetime datetime MAXYEAR8701544
Ref: 27368701544
Ref: library/datetime datetime UTC8701698
Ref: 7088701698
Node: Tipos disponíveis8701847
Ref: library/datetime available-types8701989
Ref: 27378701989
Node: Propriedades Comuns8703865
Ref: library/datetime common-properties8703999
Ref: 27488703999
Node: Determinando se um Objeto é Consciente ou Ingênuo8704446
Ref: library/datetime determining-if-an-object-is-aware-or-naive8704580
Ref: 27498704580
Node: Objetos timedelta8705407
Ref: library/datetime datetime-timedelta8705551
Ref: 274a8705551
Ref: library/datetime timedelta-objects8705551
Ref: 274b8705551
Ref: library/datetime datetime timedelta8705747
Ref: bb98705747
Ref: library/datetime datetime timedelta min8708685
Ref: 274c8708685
Ref: library/datetime datetime timedelta max8708799
Ref: 274d8708799
Ref: library/datetime datetime timedelta resolution8708977
Ref: 274e8708977
Ref: library/datetime datetime timedelta days8709355
Ref: 274f8709355
Ref: library/datetime datetime timedelta seconds8709434
Ref: 27508709434
Ref: library/datetime datetime timedelta microseconds8709958
Ref: 27518709958
Ref: library/datetime datetime timedelta total_seconds8716182
Ref: 15018716182
Node: Exemplos de uso timedelta8716753
Ref: library/datetime examples-of-usage-timedelta8716832
Ref: 27528716832
Node: Objetos date8717752
Ref: library/datetime date-objects8717894
Ref: 27538717894
Ref: library/datetime datetime-date8717894
Ref: 27548717894
Ref: library/datetime datetime date8718253
Ref: 1f98718253
Ref: library/datetime datetime date today8718733
Ref: 16b88718733
Ref: library/datetime datetime date fromtimestamp8718874
Ref: dc18718874
Ref: library/datetime datetime date fromordinal8719908
Ref: dc08719908
Ref: library/datetime datetime date fromisoformat8720276
Ref: 81d8720276
Ref: library/datetime datetime date fromisocalendar8721237
Ref: bd58721237
Ref: library/datetime datetime date strptime8721524
Ref: 1f88721524
Ref: library/datetime datetime date min8723084
Ref: 27558723084
Ref: library/datetime datetime date max8723176
Ref: 27568723176
Ref: library/datetime datetime date resolution8723270
Ref: 27578723270
Ref: library/datetime datetime date year8723442
Ref: 27388723442
Ref: library/datetime datetime date month8723548
Ref: 27398723548
Ref: library/datetime datetime date day8723613
Ref: 273a8723613
Ref: library/datetime datetime date replace8726531
Ref: 19358726531
Ref: library/datetime datetime date timetuple8727014
Ref: 27588727014
Ref: library/datetime datetime date toordinal8727524
Ref: 27598727524
Ref: library/datetime datetime date weekday8727772
Ref: 275a8727772
Ref: library/datetime datetime date isoweekday8728005
Ref: 275b8728005
Ref: library/datetime datetime date isocalendar8728272
Ref: ae78728272
Ref: library/datetime datetime date isoformat8729450
Ref: 275c8729450
Ref: library/datetime datetime date __str__8729680
Ref: 275d8729680
Ref: library/datetime datetime date ctime8729789
Ref: 275e8729789
Ref: library/datetime datetime date strftime8730279
Ref: e838730279
Ref: library/datetime datetime date __format__8730625
Ref: 27608730625
Ref: Objetos date-Footnote-18731095
Ref: Objetos date-Footnote-28731424
Node: Exemplos de uso date8731643
Ref: library/datetime examples-of-usage-date8731712
Ref: 27618731712
Node: Objetos datetime8733653
Ref: library/datetime datetime-datetime8733790
Ref: 27628733790
Ref: library/datetime datetime-objects8733790
Ref: 27638733790
Ref: library/datetime datetime datetime8734260
Ref: 4dc8734260
Ref: library/datetime datetime datetime today8735184
Ref: 27648735184
Ref: library/datetime datetime datetime now8735574
Ref: 7068735574
Ref: library/datetime datetime datetime utcnow8736483
Ref: 34e8736483
Ref: library/datetime datetime datetime fromtimestamp8737372
Ref: 7078737372
Ref: library/datetime datetime datetime utcfromtimestamp8739285
Ref: 34f8739285
Ref: library/datetime datetime datetime fromordinal8741253
Ref: 27658741253
Ref: library/datetime datetime datetime combine8741671
Ref: e848741671
Ref: library/datetime datetime datetime fromisoformat8742519
Ref: 81f8742519
Ref: library/datetime datetime datetime fromisocalendar8744717
Ref: bd68744717
Ref: library/datetime datetime datetime strptime8745120
Ref: 18a38745120
Ref: library/datetime datetime datetime min8746702
Ref: 1a818746702
Ref: library/datetime datetime datetime max8746833
Ref: 27668746833
Ref: library/datetime datetime datetime resolution8746985
Ref: 27678746985
Ref: library/datetime datetime datetime year8747184
Ref: 27408747184
Ref: library/datetime datetime datetime month8747294
Ref: 27418747294
Ref: library/datetime datetime datetime day8747363
Ref: 27428747363
Ref: library/datetime datetime datetime hour8747467
Ref: 27438747467
Ref: library/datetime datetime datetime minute8747532
Ref: 27448747532
Ref: library/datetime datetime datetime second8747599
Ref: 27458747599
Ref: library/datetime datetime datetime microsecond8747666
Ref: 27468747666
Ref: library/datetime datetime datetime tzinfo8747743
Ref: 27478747743
Ref: library/datetime datetime datetime fold8747898
Ref: e458747898
Ref: library/datetime datetime datetime date8753304
Ref: 27688753304
Ref: library/datetime datetime datetime time8753405
Ref: 27698753405
Ref: library/datetime datetime datetime timetz8753739
Ref: 276a8753739
Ref: library/datetime datetime datetime replace8754047
Ref: 16b98754047
Ref: library/datetime datetime datetime astimezone8754758
Ref: bba8754758
Ref: library/datetime datetime datetime utcoffset8757302
Ref: 276b8757302
Ref: library/datetime datetime datetime dst8757710
Ref: 276c8757710
Ref: library/datetime datetime datetime tzname8758124
Ref: 276e8758124
Ref: library/datetime datetime datetime timetuple8758369
Ref: 276f8758369
Ref: library/datetime datetime datetime utctimetuple8759286
Ref: 27718759286
Ref: library/datetime datetime datetime toordinal8760586
Ref: 27728760586
Ref: library/datetime datetime datetime timestamp8760727
Ref: 12968760727
Ref: library/datetime datetime datetime weekday8762398
Ref: 27738762398
Ref: library/datetime datetime datetime isoweekday8762613
Ref: 27748762613
Ref: library/datetime datetime datetime isocalendar8762857
Ref: ae88762857
Ref: library/datetime datetime datetime isoformat8763053
Ref: d198763053
Ref: library/datetime datetime datetime __str__8766209
Ref: 27758766209
Ref: library/datetime datetime datetime ctime8766358
Ref: 27768766358
Ref: library/datetime datetime datetime strftime8767003
Ref: e828767003
Ref: library/datetime datetime datetime __format__8767262
Ref: 27778767262
Node: Exemplos de uso datetime8767719
Ref: library/datetime examples-of-usage-datetime8767796
Ref: 27788767796
Node: Objetos time8772240
Ref: library/datetime datetime-time8772379
Ref: 27798772379
Ref: library/datetime time-objects8772379
Ref: 277a8772379
Ref: library/datetime datetime time8772599
Ref: 1fa8772599
Ref: library/datetime datetime time min8773317
Ref: 277b8773317
Ref: library/datetime datetime time max8773432
Ref: 277c8773432
Ref: library/datetime datetime time resolution8773557
Ref: 277d8773557
Ref: library/datetime datetime time hour8773834
Ref: 273b8773834
Ref: library/datetime datetime time minute8773895
Ref: 273c8773895
Ref: library/datetime datetime time second8773958
Ref: 273d8773958
Ref: library/datetime datetime time microsecond8774021
Ref: 273e8774021
Ref: library/datetime datetime time tzinfo8774094
Ref: 273f8774094
Ref: library/datetime datetime time fold8774251
Ref: e818774251
Ref: library/datetime datetime time fromisoformat8775993
Ref: 81e8775993
Ref: library/datetime datetime time strptime8777643
Ref: 189f8777643
Ref: library/datetime datetime time replace8778363
Ref: 19368778363
Ref: library/datetime datetime time isoformat8779005
Ref: 277e8779005
Ref: library/datetime datetime time __str__8781135
Ref: 27808781135
Ref: library/datetime datetime time strftime8781245
Ref: 1a2b8781245
Ref: library/datetime datetime time __format__8781490
Ref: 27818781490
Ref: library/datetime datetime time utcoffset8781868
Ref: 277f8781868
Ref: library/datetime datetime time dst8782272
Ref: 27828782272
Ref: library/datetime datetime time tzname8782683
Ref: 27838782683
Ref: Objetos time-Footnote-18783025
Node: Exemplos de uso time8783090
Ref: library/datetime examples-of-usage-time8783159
Ref: 27848783159
Node: Objetos tzinfo8784037
Ref: library/datetime datetime-tzinfo8784176
Ref: 27858784176
Ref: library/datetime tzinfo-objects8784176
Ref: 27868784176
Ref: library/datetime datetime tzinfo8784233
Ref: 7eb8784233
Ref: library/datetime datetime tzinfo utcoffset8786185
Ref: 27878786185
Ref: library/datetime datetime tzinfo dst8787545
Ref: 27888787545
Ref: library/datetime datetime tzinfo tzname8790521
Ref: 27898790521
Ref: library/datetime datetime tzinfo fromutc8792820
Ref: 276d8792820
Ref: Objetos tzinfo-Footnote-18806623
Node: Objetos timezone8806663
Ref: library/datetime datetime-timezone8806826
Ref: 278a8806826
Ref: library/datetime timezone-objects8806826
Ref: 278b8806826
Ref: library/datetime datetime timezone8807284
Ref: 12bb8807284
Ref: library/datetime datetime timezone utcoffset8807960
Ref: 278c8807960
Ref: library/datetime datetime timezone tzname8808366
Ref: 278d8808366
Ref: library/datetime datetime timezone dst8809055
Ref: 278e8809055
Ref: library/datetime datetime timezone fromutc8809120
Ref: 278f8809120
Ref: library/datetime datetime timezone utc8809334
Ref: 81c8809334
Node: Comportamento de strftime e strptime8809419
Ref: library/datetime strftime-and-strptime-behavior8809559
Ref: 27908809559
Ref: library/datetime strftime-strptime-behavior8809559
Ref: 1a708809559
Ref: library/datetime format-codes8811537
Ref: 27318811537
Node: Códigos de formato strftime e strptime8811658
Ref: library/datetime strftime-and-strptime-format-codes8811797
Ref: 27918811797
Ref: Códigos de formato strftime e strptime-Footnote-18823219
Node: Detalhes técnicos8823267
Ref: library/datetime technical-detail8823406
Ref: 27928823406
Ref: Detalhes técnicos-Footnote-18830951
Ref: Detalhes técnicos-Footnote-28831058
Node: zoneinfo — Suporte a fuso horário da IANA8831113
Ref: library/zoneinfo doc8831325
Ref: 27938831325
Ref: library/zoneinfo module-zoneinfo8831325
Ref: 13a8831325
Ref: library/zoneinfo no-color8831325
Ref: 27948831325
Ref: library/zoneinfo zoneinfo-iana-time-zone-support8831325
Ref: 27958831325
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-18832695
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-28832760
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-38832802
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-48832843
Node: Usando ZoneInfo8832884
Ref: library/zoneinfo using-zoneinfo8833004
Ref: 27968833004
Ref: Usando ZoneInfo-Footnote-18835004
Node: Fontes de dados8835046
Ref: library/zoneinfo data-sources8835192
Ref: 27978835192
Ref: Fontes de dados-Footnote-18835967
Node: Configurando as fontes de dados8836008
Ref: library/zoneinfo configuring-the-data-sources8836091
Ref: 27988836091
Ref: library/zoneinfo zoneinfo-data-configuration8836091
Ref: 27998836091
Node: Configuração em tempo de compilação8836968
Ref: library/zoneinfo compile-time-configuration8837110
Ref: 279c8837110
Ref: library/zoneinfo zoneinfo-data-compile-time-config8837110
Ref: 200f8837110
Node: Configuração do ambiente8837976
Ref: library/zoneinfo environment-configuration8838164
Ref: 279d8838164
Ref: library/zoneinfo zoneinfo-data-environment-var8838164
Ref: 279a8838164
Ref: library/zoneinfo envvar-PYTHONTZPATH8838492
Ref: 279e8838492
Node: Configuração em tempo de execução8839234
Ref: library/zoneinfo runtime-configuration8839374
Ref: 27a08839374
Ref: library/zoneinfo zoneinfo-data-runtime-config8839374
Ref: 279b8839374
Node: A classe ZoneInfo8839826
Ref: library/zoneinfo the-zoneinfo-class8839969
Ref: 27a18839969
Ref: library/zoneinfo zoneinfo ZoneInfo8840030
Ref: ad28840030
Ref: library/zoneinfo zoneinfo ZoneInfo from_file8841001
Ref: 27a38841001
Ref: library/zoneinfo zoneinfo ZoneInfo no_cache8841536
Ref: 27a58841536
Ref: library/zoneinfo zoneinfo ZoneInfo clear_cache8842259
Ref: 27a28842259
Ref: library/zoneinfo zoneinfo ZoneInfo key8843055
Ref: 27a68843055
Node: String representations8843910
Ref: library/zoneinfo string-representations8844015
Ref: 27a88844015
Node: Pickle serialization8844824
Ref: library/zoneinfo pickle-serialization8844929
Ref: 27a98844929
Ref: library/zoneinfo pickling8844929
Ref: 27a48844929
Node: Funções<3>8847324
Ref: library/zoneinfo functions8847459
Ref: 27aa8847459
Ref: library/zoneinfo zoneinfo available_timezones8847496
Ref: 1bff8847496
Ref: library/zoneinfo zoneinfo reset_tzpath8848472
Ref: 17498848472
Node: Globals8849168
Ref: library/zoneinfo globals8849309
Ref: 27ab8849309
Ref: library/zoneinfo zoneinfo TZPATH8849344
Ref: 200e8849344
Node: Exceptions and warnings8850122
Ref: library/zoneinfo exceptions-and-warnings8850242
Ref: 27ac8850242
Ref: library/zoneinfo zoneinfo ZoneInfoNotFoundError8850309
Ref: 17848850309
Ref: library/zoneinfo zoneinfo InvalidTZPathWarning8850540
Ref: 279f8850540
Node: calendar — Funções gerais relacionadas ao calendário8850717
Ref: library/calendar doc8850933
Ref: 27ad8850933
Ref: library/calendar calendar-general-calendar-related-functions8850933
Ref: 27ae8850933
Ref: library/calendar module-calendar8850933
Ref: 158850933
Ref: library/calendar no-color8850933
Ref: 27af8850933
Ref: library/calendar calendar Calendar8852260
Ref: 27b18852260
Ref: library/calendar calendar Calendar firstweekday8852849
Ref: 27b48852849
Ref: library/calendar calendar Calendar getfirstweekday8853112
Ref: 27b68853112
Ref: library/calendar calendar Calendar setfirstweekday8853314
Ref: 27b58853314
Ref: library/calendar calendar Calendar iterweekdays8853552
Ref: 27b78853552
Ref: library/calendar calendar Calendar itermonthdates8853804
Ref: e078853804
Ref: library/calendar calendar Calendar itermonthdays8854179
Ref: 27b88854179
Ref: library/calendar calendar Calendar itermonthdays28854587
Ref: 27b98854587
Ref: library/calendar calendar Calendar itermonthdays38854950
Ref: e088854950
Ref: library/calendar calendar Calendar itermonthdays48855340
Ref: e098855340
Ref: library/calendar calendar Calendar monthdatescalendar8855748
Ref: 27ba8855748
Ref: library/calendar calendar Calendar monthdays2calendar8855977
Ref: 27bb8855977
Ref: library/calendar calendar Calendar monthdayscalendar8856222
Ref: 27bc8856222
Ref: library/calendar calendar Calendar yeardatescalendar8856438
Ref: 27bd8856438
Ref: library/calendar calendar Calendar yeardays2calendar8856848
Ref: 27be8856848
Ref: library/calendar calendar Calendar yeardayscalendar8857204
Ref: 27bf8857204
Ref: library/calendar calendar TextCalendar8857511
Ref: 180b8857511
Ref: library/calendar calendar TextCalendar formatday8857713
Ref: 27c08857713
Ref: library/calendar calendar TextCalendar formatweek8858050
Ref: 27c18858050
Ref: library/calendar calendar TextCalendar formatweekday8858428
Ref: 27c28858428
Ref: library/calendar calendar TextCalendar formatweekheader8858757
Ref: 27c38858757
Ref: library/calendar calendar TextCalendar formatmonth8859087
Ref: 27c48859087
Ref: library/calendar calendar TextCalendar formatmonthname8859571
Ref: 27c58859571
Ref: library/calendar calendar TextCalendar prmonth8859987
Ref: 27c68859987
Ref: library/calendar calendar TextCalendar formatyear8860147
Ref: 27c78860147
Ref: library/calendar calendar TextCalendar pryear8860746
Ref: 27c88860746
Ref: library/calendar calendar HTMLCalendar8860914
Ref: d0c8860914
Ref: library/calendar calendar HTMLCalendar formatmonth8861098
Ref: 27c98861098
Ref: library/calendar calendar HTMLCalendar formatyear8861361
Ref: 27ca8861361
Ref: library/calendar calendar HTMLCalendar formatyearpage8861553
Ref: 27cb8861553
Ref: library/calendar calendar HTMLCalendar formatmonthname8862104
Ref: 27cc8862104
Ref: library/calendar calendar HTMLCalendar cssclasses8862509
Ref: 27cd8862509
Ref: library/calendar calendar HTMLCalendar cssclass_noday8862956
Ref: 27ce8862956
Ref: library/calendar calendar HTMLCalendar cssclasses_weekday_head8863126
Ref: 27cf8863126
Ref: library/calendar calendar HTMLCalendar cssclass_month_head8863374
Ref: 27d08863374
Ref: library/calendar calendar HTMLCalendar cssclass_month8863583
Ref: 27d18863583
Ref: library/calendar calendar HTMLCalendar cssclass_year8863795
Ref: 27d28863795
Ref: library/calendar calendar HTMLCalendar cssclass_year_head8864014
Ref: 27d38864014
Ref: library/calendar calendar LocaleTextCalendar8864986
Ref: 9408864986
Ref: library/calendar calendar LocaleHTMLCalendar8865239
Ref: 9418865239
Ref: library/calendar calendar setfirstweekday8865880
Ref: 27b08865880
Ref: library/calendar calendar firstweekday8866401
Ref: 27d98866401
Ref: library/calendar calendar isleap8866528
Ref: 27da8866528
Ref: library/calendar calendar leapdays8866668
Ref: 27db8866668
Ref: library/calendar calendar weekday8866914
Ref: 27dc8866914
Ref: library/calendar calendar weekheader8867117
Ref: 27dd8867117
Ref: library/calendar calendar monthrange8867296
Ref: 27de8867296
Ref: library/calendar calendar monthcalendar8867472
Ref: 27df8867472
Ref: library/calendar calendar prmonth8867788
Ref: 27e08867788
Ref: library/calendar calendar month8867937
Ref: 18618867937
Ref: library/calendar calendar prcal8868148
Ref: 27e18868148
Ref: library/calendar calendar calendar8868303
Ref: 27e28868303
Ref: library/calendar calendar timegm8868538
Ref: 27e38868538
Ref: library/calendar calendar day_name8869042
Ref: 27e48869042
Ref: library/calendar calendar day_abbr8869336
Ref: 27e58869336
Ref: library/calendar calendar MONDAY8869609
Ref: 27b28869609
Ref: library/calendar calendar TUESDAY8869635
Ref: 27d48869635
Ref: library/calendar calendar WEDNESDAY8869662
Ref: 27d58869662
Ref: library/calendar calendar THURSDAY8869691
Ref: 27d68869691
Ref: library/calendar calendar FRIDAY8869719
Ref: 27d78869719
Ref: library/calendar calendar SATURDAY8869745
Ref: 27d88869745
Ref: library/calendar calendar SUNDAY8869773
Ref: 27b38869773
Ref: library/calendar calendar Day8869934
Ref: 69f8869934
Ref: library/calendar calendar month_name8870199
Ref: 27e68870199
Ref: library/calendar calendar month_abbr8870661
Ref: 27e78870661
Ref: library/calendar calendar JANUARY8871102
Ref: 34b8871102
Ref: library/calendar calendar FEBRUARY8871129
Ref: 34c8871129
Ref: library/calendar calendar MARCH8871157
Ref: 27e88871157
Ref: library/calendar calendar APRIL8871182
Ref: 27e98871182
Ref: library/calendar calendar MAY8871207
Ref: 27ea8871207
Ref: library/calendar calendar JUNE8871230
Ref: 27eb8871230
Ref: library/calendar calendar JULY8871254
Ref: 27ec8871254
Ref: library/calendar calendar AUGUST8871278
Ref: 27ed8871278
Ref: library/calendar calendar SEPTEMBER8871304
Ref: 27ee8871304
Ref: library/calendar calendar OCTOBER8871333
Ref: 27ef8871333
Ref: library/calendar calendar NOVEMBER8871360
Ref: 27f08871360
Ref: library/calendar calendar DECEMBER8871388
Ref: 27f18871388
Ref: library/calendar calendar Month8871553
Ref: 69e8871553
Ref: library/calendar calendar IllegalMonthError8871884
Ref: 18608871884
Ref: library/calendar calendar IllegalMonthError month8872078
Ref: 27f28872078
Ref: library/calendar calendar IllegalWeekdayError8872146
Ref: 27f38872146
Ref: library/calendar calendar IllegalWeekdayError weekday8872357
Ref: 27f48872357
Ref: calendar — Funções gerais relacionadas ao calendário-Footnote-18872760
Node: Uso na linha de comando8872828
Ref: library/calendar calendar-cli8872945
Ref: 1d08872945
Ref: library/calendar command-line-usage8872945
Ref: 27f58872945
Ref: library/calendar cmdoption-calendar-help8875721
Ref: 27f68875721
Ref: library/calendar cmdoption-calendar-h8875721
Ref: 27f78875721
Ref: library/calendar cmdoption-calendar-locale8875785
Ref: 27f88875785
Ref: library/calendar cmdoption-calendar-L8875785
Ref: 27f98875785
Ref: library/calendar cmdoption-calendar-encoding8875922
Ref: 27fa8875922
Ref: library/calendar cmdoption-calendar-e8875922
Ref: 27fb8875922
Ref: library/calendar cmdoption-calendar-type8876101
Ref: 27fc8876101
Ref: library/calendar cmdoption-calendar-t8876101
Ref: 27fd8876101
Ref: library/calendar cmdoption-calendar-first-weekday8876230
Ref: 27fe8876230
Ref: library/calendar cmdoption-calendar-f8876230
Ref: 27ff8876230
Ref: library/calendar cmdoption-calendar-arg-year8876456
Ref: 28008876456
Ref: library/calendar cmdoption-calendar-arg-month8876540
Ref: 28018876540
Ref: library/calendar cmdoption-calendar-width8876799
Ref: 28028876799
Ref: library/calendar cmdoption-calendar-w8876799
Ref: 28038876799
Ref: library/calendar cmdoption-calendar-lines8877003
Ref: 28048877003
Ref: library/calendar cmdoption-calendar-l8877003
Ref: 28058877003
Ref: library/calendar cmdoption-calendar-spacing8877208
Ref: 28068877208
Ref: library/calendar cmdoption-calendar-s8877208
Ref: 28078877208
Ref: library/calendar cmdoption-calendar-months8877357
Ref: 28088877357
Ref: library/calendar cmdoption-calendar-m8877357
Ref: 28098877357
Ref: library/calendar cmdoption-calendar-css8877624
Ref: 280a8877624
Ref: library/calendar cmdoption-calendar-c8877624
Ref: 280b8877624
Node: collections — Tipos de dados de contêineres8877821
Ref: library/collections doc8878053
Ref: 280c8878053
Ref: library/collections collections-container-datatypes8878053
Ref: 280d8878053
Ref: library/collections module-collections8878053
Ref: 1e8878053
Ref: library/collections no-color8878053
Ref: 280e8878053
Ref: collections — Tipos de dados de contêineres-Footnote-18880446
Node: Objetos ChainMap8880527
Ref: library/collections chainmap-objects8880650
Ref: 280f8880650
Ref: library/collections collections ChainMap8881084
Ref: e0a8881084
Ref: library/collections collections ChainMap maps8882220
Ref: 28108882220
Ref: library/collections collections ChainMap new_child8882581
Ref: 111b8882581
Ref: library/collections collections ChainMap parents8883477
Ref: 28118883477
Ref: Objetos ChainMap-Footnote-18885589
Ref: Objetos ChainMap-Footnote-28885631
Ref: Objetos ChainMap-Footnote-38885726
Ref: Objetos ChainMap-Footnote-48885773
Ref: Objetos ChainMap-Footnote-58885852
Ref: Objetos ChainMap-Footnote-68885949
Node: Exemplos e Receitas de ChainMap8886002
Ref: library/collections chainmap-examples-and-recipes8886086
Ref: 28128886086
Node: Objetos Counter8889410
Ref: library/collections counter-objects8889555
Ref: 28138889555
Ref: library/collections collections Counter8890298
Ref: 128d8890298
Ref: library/collections collections Counter elements8892563
Ref: 14ff8892563
Ref: library/collections collections Counter most_common8893055
Ref: 14fe8893055
Ref: library/collections collections Counter subtract8893569
Ref: 13da8893569
Ref: library/collections collections Counter total8894194
Ref: 28148894194
Ref: library/collections collections Counter fromkeys8894567
Ref: 28158894567
Ref: library/collections collections Counter update8894708
Ref: 28168894708
Ref: Objetos Counter-Footnote-18900403
Ref: Objetos Counter-Footnote-28900482
Ref: Objetos Counter-Footnote-38900534
Node: Objetos deque8900627
Ref: library/collections deque-objects8900775
Ref: 28178900775
Ref: library/collections collections deque8900828
Ref: 7e98900828
Ref: library/collections collections deque append8902577
Ref: 28188902577
Ref: library/collections collections deque appendleft8902657
Ref: 28198902657
Ref: library/collections collections deque clear8902741
Ref: 281a8902741
Ref: library/collections collections deque copy8902855
Ref: fc68902855
Ref: library/collections collections deque count8902962
Ref: 13dc8902962
Ref: library/collections collections deque extend8903088
Ref: 281b8903088
Ref: library/collections collections deque extendleft8903221
Ref: 281c8903221
Ref: library/collections collections deque index8903487
Ref: fc48903487
Ref: library/collections collections deque insert8903792
Ref: fc58903792
Ref: library/collections collections deque pop8904050
Ref: 281d8904050
Ref: library/collections collections deque popleft8904235
Ref: 281e8904235
Ref: library/collections collections deque remove8904425
Ref: 1bae8904425
Ref: library/collections collections deque reverse8904581
Ref: 13dd8904581
Ref: library/collections collections deque rotate8904744
Ref: 1b798904744
Ref: library/collections collections deque maxlen8905168
Ref: 15008905168
Node: Receitas de deque8907967
Ref: library/collections deque-recipes8908034
Ref: 281f8908034
Ref: Receitas de deque-Footnote-18910619
Node: Objetos defaultdict8910680
Ref: library/collections defaultdict-objects8910876
Ref: 28208910876
Ref: library/collections collections defaultdict8910941
Ref: 13b88910941
Ref: library/collections collections defaultdict __missing__8911753
Ref: 28228911753
Ref: library/collections collections defaultdict default_factory8913006
Ref: 28218913006
Ref: Objetos defaultdict-Footnote-18913467
Node: Exemplos de defaultdict8913509
Ref: library/collections defaultdict-examples8913588
Ref: 28238913588
Node: Função de fábrica para tuplas com campos nomeados namedtuple8916351
Ref: library/collections namedtuple-factory-function-for-tuples-with-named-fields8916553
Ref: 28248916553
Ref: library/collections collections namedtuple8916988
Ref: 4da8916988
Ref: library/collections collections somenamedtuple _make8921325
Ref: 28268921325
Ref: library/collections collections somenamedtuple _asdict8921577
Ref: bca8921577
Ref: library/collections collections somenamedtuple _replace8922305
Ref: 28278922305
Ref: library/collections collections somenamedtuple _fields8922961
Ref: 28288922961
Ref: library/collections collections somenamedtuple _field_defaults8923488
Ref: 28258923488
Node: Objetos OrderedDict8926481
Ref: library/collections ordereddict-objects8926680
Ref: 28298926680
Ref: library/collections collections OrderedDict8929281
Ref: 7e88929281
Ref: library/collections collections OrderedDict popitem8929505
Ref: 14e98929505
Ref: library/collections collections OrderedDict move_to_end8929819
Ref: 13db8929819
Ref: library/collections collections-ordereddict-eq8930618
Ref: 189c8930618
Ref: Objetos OrderedDict-Footnote-18931647
Ref: Objetos OrderedDict-Footnote-28931689
Node: Exemplos e receitas de OrderedDict8931731
Ref: library/collections ordereddict-examples-and-recipes8931821
Ref: 282b8931821
Node: Objetos UserDict8934891
Ref: library/collections userdict-objects8935043
Ref: 282c8935043
Ref: library/collections collections UserDict8935440
Ref: 1c348935440
Ref: library/collections collections UserDict data8936054
Ref: 282d8936054
Node: Objetos UserList8936185
Ref: library/collections userlist-objects8936336
Ref: 282e8936336
Ref: library/collections collections UserList8936931
Ref: 16d28936931
Ref: library/collections collections UserList data8937572
Ref: 282f8937572
Node: Objetos UserString8938388
Ref: library/collections userstring-objects8938514
Ref: 28308938514
Ref: library/collections collections UserString8938905
Ref: fc78938905
Ref: library/collections collections UserString data8939525
Ref: 28318939525
Node: collections abc — Classes Base Abstratas para Contêineres8939828
Ref: library/collections abc doc8940035
Ref: 28328940035
Ref: library/collections abc collections-abc-abstract-base-classes-for-containers8940035
Ref: 28338940035
Ref: library/collections abc module-collections abc8940035
Ref: 1f8940035
Ref: library/collections abc no-color8940035
Ref: 28348940035
Ref: collections abc — Classes Base Abstratas para Contêineres-Footnote-18944204
Ref: collections abc — Classes Base Abstratas para Contêineres-Footnote-28944281
Node: Classes Base Abstratas de Coleções8944323
Ref: library/collections abc collections-abstract-base-classes8944528
Ref: a6e8944528
Ref: library/collections abc id18944528
Ref: 28358944528
Ref: Classes Base Abstratas de Coleções-Footnote-18954225
Ref: Classes Base Abstratas de Coleções-Footnote-28954549
Ref: Classes Base Abstratas de Coleções-Footnote-38954873
Ref: Classes Base Abstratas de Coleções-Footnote-48955197
Ref: Classes Base Abstratas de Coleções-Footnote-58955556
Ref: Classes Base Abstratas de Coleções-Footnote-68955880
Ref: Classes Base Abstratas de Coleções-Footnote-78956204
Ref: Classes Base Abstratas de Coleções-Footnote-88956528
Ref: Classes Base Abstratas de Coleções-Footnote-98956852
Ref: Classes Base Abstratas de Coleções-Footnote-108957176
Ref: Classes Base Abstratas de Coleções-Footnote-118957501
Ref: Classes Base Abstratas de Coleções-Footnote-128957826
Ref: Classes Base Abstratas de Coleções-Footnote-138958151
Ref: Classes Base Abstratas de Coleções-Footnote-148958476
Ref: Classes Base Abstratas de Coleções-Footnote-158958801
Ref: Classes Base Abstratas de Coleções-Footnote-168959126
Node: Classes Base Abstrata de Coleções – Descrições Detalhadas8959451
Ref: library/collections abc collections-abstract-base-classes-detailed-descriptions8959684
Ref: 28378959684
Ref: library/collections abc collections abc Container8959823
Ref: 25418959823
Ref: library/collections abc collections abc Hashable8959936
Ref: 70e8959936
Ref: library/collections abc collections abc Sized8960043
Ref: 70f8960043
Ref: library/collections abc collections abc Callable8960147
Ref: 9e18960147
Ref: library/collections abc collections abc Iterable8960387
Ref: 253f8960387
Ref: library/collections abc collections abc Collection8960877
Ref: e788960877
Ref: library/collections abc collections abc Iterator8961009
Ref: 25408961009
Ref: library/collections abc collections abc Reversible8961216
Ref: e798961216
Ref: library/collections abc collections abc Generator8961386
Ref: fcf8961386
Ref: library/collections abc collections abc Sequence8961829
Ref: 13c08961829
Ref: library/collections abc collections abc MutableSequence8961866
Ref: 4b98961866
Ref: library/collections abc collections abc ByteString8961910
Ref: 3408961910
Ref: library/collections abc collections abc ByteString index8962579
Ref: 28398962579
Ref: library/collections abc collections abc Set8964051
Ref: 25378964051
Ref: library/collections abc collections abc MutableSet8964083
Ref: 25428964083
Ref: library/collections abc collections abc Mapping8964191
Ref: abd8964191
Ref: library/collections abc collections abc MutableMapping8964227
Ref: 12a88964227
Ref: library/collections abc collections abc MappingView8964336
Ref: 25438964336
Ref: library/collections abc collections abc ItemsView8964376
Ref: 25458964376
Ref: library/collections abc collections abc KeysView8964414
Ref: 25448964414
Ref: library/collections abc collections abc ValuesView8964451
Ref: 25468964451
Ref: library/collections abc collections abc Awaitable8964562
Ref: fd08964562
Ref: library/collections abc collections abc Coroutine8965345
Ref: fd18965345
Ref: library/collections abc collections abc AsyncIterable8966465
Ref: fd38966465
Ref: library/collections abc collections abc AsyncIterator8966675
Ref: fd28966675
Ref: library/collections abc collections abc AsyncGenerator8966902
Ref: e7b8966902
Ref: library/collections abc collections abc Buffer8967255
Ref: 3418967255
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-18967500
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-28967542
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-38967600
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-48967642
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-58967684
Node: Exemplos e receitas8967726
Ref: library/collections abc examples-and-recipes8967914
Ref: 283a8967914
Ref: Exemplos e receitas-Footnote-18971125
Ref: Exemplos e receitas-Footnote-28971178
Node: heapq — Algoritmo de fila heap8971220
Ref: library/heapq doc8971424
Ref: 283b8971424
Ref: library/heapq heapq-heap-queue-algorithm8971424
Ref: 283c8971424
Ref: library/heapq module-heapq8971424
Ref: 6d8971424
Ref: library/heapq no-color8971424
Ref: 283d8971424
Ref: library/heapq heapq heappush8973800
Ref: 16aa8973800
Ref: library/heapq heapq heappop8973929
Ref: 16ab8973929
Ref: library/heapq heapq heappushpop8974198
Ref: 283f8974198
Ref: library/heapq heapq heapify8974482
Ref: 283e8974482
Ref: library/heapq heapq heapreplace8974583
Ref: 28408974583
Ref: library/heapq heapq heapify_max8975422
Ref: 2208975422
Ref: library/heapq heapq heappush_max8975561
Ref: 2218975561
Ref: library/heapq heapq heappop_max8975737
Ref: 2228975737
Ref: library/heapq heapq heappushpop_max8976058
Ref: 2248976058
Ref: library/heapq heapq heapreplace_max8976381
Ref: 2238976381
Ref: library/heapq heapq merge8976908
Ref: ffa8976908
Ref: library/heapq heapq nlargest8978233
Ref: 28418978233
Ref: library/heapq heapq nsmallest8978659
Ref: 28428978659
Ref: heapq — Algoritmo de fila heap-Footnote-18979578
Node: Exemplos básicos8979643
Ref: library/heapq basic-examples8979784
Ref: 28438979784
Ref: Exemplos básicos-Footnote-18980822
Node: Notas de implementação da fila de prioridade8980869
Ref: library/heapq priority-queue-implementation-notes8981025
Ref: 28448981025
Ref: Notas de implementação da fila de prioridade-Footnote-18984240
Node: Teoria8984293
Ref: library/heapq theory8984423
Ref: 28458984423
Ref: Teoria-Footnote-18989090
Node: bisect — Algoritmo de bisseção de vetor8989810
Ref: library/bisect doc8990003
Ref: 28468990003
Ref: library/bisect bisect-array-bisection-algorithm8990003
Ref: 28478990003
Ref: library/bisect module-bisect8990003
Ref: 128990003
Ref: library/bisect no-color8990003
Ref: 28488990003
Ref: library/bisect bisect-functions8991593
Ref: 284a8991593
Ref: library/bisect bisect bisect_left8991634
Ref: 284b8991634
Ref: library/bisect bisect bisect_right8992945
Ref: 284c8992945
Ref: library/bisect bisect bisect8993016
Ref: 284d8993016
Ref: library/bisect bisect insort_left8993579
Ref: 28498993579
Ref: library/bisect bisect insort_right8994315
Ref: 284e8994315
Ref: library/bisect bisect insort8994386
Ref: 284f8994386
Ref: bisect — Algoritmo de bisseção de vetor-Footnote-18995321
Node: Observações sobre desempenho8995387
Ref: library/bisect performance-notes8995534
Ref: 28508995534
Ref: Observações sobre desempenho-Footnote-18997085
Ref: Observações sobre desempenho-Footnote-28997140
Node: Buscando em listas ordenadas8997210
Ref: library/bisect searching-sorted-lists8997377
Ref: 28518997377
Node: Exemplos<3>8998685
Ref: library/bisect examples8998813
Ref: 28528998813
Ref: library/bisect bisect-example8998848
Ref: 28538998848
Node: array— Vetores eficientes de valores numéricos9001488
Ref: library/array doc9001680
Ref: 28549001680
Ref: library/array array-efficient-arrays-of-numeric-values9001680
Ref: 28559001680
Ref: library/array module-array9001680
Ref: 89001680
Ref: library/array no-color9001680
Ref: 28569001680
Ref: library/array array typecodes9006673
Ref: 28589006673
Ref: library/array array array9006792
Ref: 4b89006792
Ref: library/array array array typecode9008150
Ref: 285b9008150
Ref: library/array array array itemsize9008247
Ref: 28579008247
Ref: library/array array array append9008364
Ref: 285c9008364
Ref: library/array array array buffer_info9008460
Ref: 285d9008460
Ref: library/array array array byteswap9009651
Ref: 285e9009651
Ref: library/array array array count9010061
Ref: 285f9010061
Ref: library/array array array extend9010155
Ref: 285a9010155
Ref: library/array array array frombytes9010565
Ref: 146d9010565
Ref: library/array array array fromfile9010978
Ref: 14bc9010978
Ref: library/array array array fromlist9011318
Ref: 28609011318
Ref: library/array array array fromunicode9011531
Ref: 28599011531
Ref: library/array array array index9011905
Ref: 9d79011905
Ref: library/array array array insert9012374
Ref: 28619012374
Ref: library/array array array pop9012581
Ref: 28629012581
Ref: library/array array array remove9012812
Ref: 28639012812
Ref: library/array array array clear9012900
Ref: 4ba9012900
Ref: library/array array array reverse9013014
Ref: 28649013014
Ref: library/array array array tobytes9013091
Ref: 146c9013091
Ref: library/array array array tofile9013454
Ref: 14bd9013454
Ref: library/array array array tolist9013596
Ref: 28659013596
Ref: library/array array array tounicode9013684
Ref: 28669013684
Ref: array— Vetores eficientes de valores numéricos-Footnote-19014995
Node: weakref — Referências fracas9015022
Ref: library/weakref doc9015239
Ref: 28679015239
Ref: library/weakref mod-weakref9015239
Ref: 11039015239
Ref: library/weakref module-weakref9015239
Ref: 11a9015239
Ref: library/weakref no-color9015239
Ref: 28689015239
Ref: library/weakref weakref-weak-references9015239
Ref: 28699015239
Ref: library/weakref weakref ref9019731
Ref: 11e69019731
Ref: library/weakref weakref ref __callback__9021806
Ref: 11e79021806
Ref: library/weakref weakref proxy9022214
Ref: c3b9022214
Ref: library/weakref weakref getweakrefcount9023304
Ref: 286b9023304
Ref: library/weakref weakref getweakrefs9023456
Ref: 286c9023456
Ref: library/weakref weakref WeakKeyDictionary9023622
Ref: 187b9023622
Ref: library/weakref weakref WeakKeyDictionary keyrefs9025595
Ref: 286d9025595
Ref: library/weakref weakref WeakValueDictionary9025701
Ref: 187c9025701
Ref: library/weakref weakref WeakValueDictionary valuerefs9026213
Ref: 286e9026213
Ref: library/weakref weakref WeakSet9026324
Ref: 7ea9026324
Ref: library/weakref weakref WeakMethod9026533
Ref: 11e59026533
Ref: library/weakref weakref finalize9027622
Ref: c639027622
Ref: library/weakref weakref finalize __call__9029108
Ref: 286f9029108
Ref: library/weakref weakref finalize detach9029326
Ref: 28709029326
Ref: library/weakref weakref finalize peek9029531
Ref: 28719029531
Ref: library/weakref weakref finalize alive9029703
Ref: 28729029703
Ref: library/weakref weakref finalize atexit9029835
Ref: 28739029835
Ref: library/weakref weakref ReferenceType9030469
Ref: 1a799030469
Ref: library/weakref weakref ProxyType9030556
Ref: 1a7a9030556
Ref: library/weakref weakref CallableProxyType9030671
Ref: 1a7b9030671
Ref: library/weakref weakref ProxyTypes9030775
Ref: 28749030775
Ref: weakref — Referências fracas-Footnote-19031487
Ref: weakref — Referências fracas-Footnote-29031554
Ref: weakref — Referências fracas-Footnote-39031596
Ref: weakref — Referências fracas-Footnote-49031638
Node: Objetos referência fraca9031680
Ref: library/weakref weak-reference-objects9031792
Ref: 28759031792
Ref: library/weakref weakref-objects9031792
Ref: 28769031792
Node: Exemplo<2>9034467
Ref: library/weakref example9034609
Ref: 28779034609
Ref: library/weakref weakref-example9034609
Ref: 28789034609
Node: Objetos finalizadores9035171
Ref: library/weakref finalize-examples9035333
Ref: 28799035333
Ref: library/weakref finalizer-objects9035333
Ref: 287a9035333
Node: Comparando finalizadores com métodos __del__9037260
Ref: library/weakref comparing-finalizers-with-del-methods9037403
Ref: 287b9037403
Node: types — Criação de tipos dinâmicos e nomes para tipos embutidos9040381
Ref: library/types doc9040602
Ref: 287c9040602
Ref: library/types module-types9040602
Ref: 1099040602
Ref: library/types no-color9040602
Ref: 287d9040602
Ref: library/types types-dynamic-type-creation-and-names-for-built-in-types9040602
Ref: 287e9040602
Ref: types — Criação de tipos dinâmicos e nomes para tipos embutidos-Footnote-19041488
Node: Criação de tipos dinâmicos9041553
Ref: library/types dynamic-type-creation9041726
Ref: 287f9041726
Ref: library/types types new_class9041802
Ref: 135d9041802
Ref: library/types types prepare_class9042601
Ref: 135e9042601
Ref: library/types types resolve_bases9043850
Ref: d899043850
Ref: library/types types get_original_bases9044452
Ref: 6ea9044452
Ref: Criação de tipos dinâmicos-Footnote-19046037
Ref: Criação de tipos dinâmicos-Footnote-29046079
Ref: Criação de tipos dinâmicos-Footnote-39046121
Ref: Criação de tipos dinâmicos-Footnote-49046163
Node: Tipos padrão do interpretador9046205
Ref: library/types standard-interpreter-types9046431
Ref: 28809046431
Ref: library/types types NoneType9047027
Ref: a489047027
Ref: library/types types FunctionType9047120
Ref: a799047120
Ref: library/types types LambdaType9047149
Ref: 28819047149
Ref: library/types types GeneratorType9047537
Ref: 18ef9047537
Ref: library/types types CoroutineType9047666
Ref: 107f9047666
Ref: library/types types AsyncGeneratorType9047830
Ref: 28829047830
Ref: library/types types CodeType9048021
Ref: 32d9048021
Ref: library/types types CellType9048663
Ref: 28839048663
Ref: library/types types MethodType9048874
Ref: 1a9e9048874
Ref: library/types types BuiltinFunctionType9048976
Ref: 28849048976
Ref: library/types types BuiltinMethodType9049012
Ref: 28859049012
Ref: library/types types WrapperDescriptorType9049238
Ref: d869049238
Ref: library/types types MethodWrapperType9049457
Ref: 8509049457
Ref: library/types types NotImplementedType9049670
Ref: a499049670
Ref: library/types types MethodDescriptorType9049783
Ref: d879049783
Ref: library/types types ClassMethodDescriptorType9049948
Ref: d889049948
Ref: library/types types ModuleType9050156
Ref: 10099050156
Ref: library/types types EllipsisType9050999
Ref: a479050999
Ref: library/types types GenericAlias9051101
Ref: 9e29051101
Ref: library/types types UnionType9052080
Ref: 2a69052080
Ref: library/types types TracebackType9052288
Ref: cdd9052288
Ref: library/types types FrameType9052633
Ref: 1af69052633
Ref: library/types types GetSetDescriptorType9052791
Ref: 28869052791
Ref: library/types types MemberDescriptorType9053167
Ref: 28879053167
Ref: library/types types MappingProxyType9053965
Ref: 68d9053965
Ref: library/types types MappingProxyType copy9055022
Ref: 28889055022
Ref: library/types types MappingProxyType get9055110
Ref: 28899055110
Ref: library/types types MappingProxyType items9055413
Ref: 288a9055413
Ref: library/types types MappingProxyType keys9055551
Ref: 288b9055551
Ref: library/types types MappingProxyType values9055650
Ref: 288c9055650
Ref: library/types types CapsuleType9056041
Ref: 288d9056041
Ref: Tipos padrão do interpretador-Footnote-19056188
Ref: Tipos padrão do interpretador-Footnote-29056230
Node: Classes e funções de utilidades adicionais9056272
Ref: library/types additional-utility-classes-and-functions9056504
Ref: 288f9056504
Ref: library/types types SimpleNamespace9056611
Ref: 4df9056611
Ref: library/types types DynamicClassAttribute9058747
Ref: 8319058747
Node: Funções de utilidade de corrotina9059479
Ref: library/types coroutine-utility-functions9059672
Ref: 28909059672
Ref: library/types types coroutine9059761
Ref: 107e9059761
Node: copy — Operações de cópia profunda e cópia rasa9060625
Ref: library/copy doc9060852
Ref: 28919060852
Ref: library/copy copy-shallow-and-deep-copy-operations9060852
Ref: 28929060852
Ref: library/copy module-copy9060852
Ref: 299060852
Ref: library/copy no-color9060852
Ref: 28939060852
Ref: library/copy copy copy9061472
Ref: 74c9061472
Ref: library/copy copy deepcopy9061543
Ref: d599061543
Ref: library/copy copy replace9061630
Ref: 1c09061630
Ref: library/copy copy Error9061814
Ref: 28949061814
Ref: library/copy shallow-vs-deep-copy9061892
Ref: 1e9b9061892
Ref: library/copy object __copy__9064113
Ref: 17569064113
Ref: library/copy object __deepcopy__9064254
Ref: 17579064254
Ref: library/copy object __replace__9064992
Ref: 4769064992
Ref: copy — Operações de cópia profunda e cópia rasa-Footnote-19065401
Node: pprint — Impressão bonita de dados9065465
Ref: library/pprint doc9065671
Ref: 28959065671
Ref: library/pprint module-pprint9065671
Ref: b39065671
Ref: library/pprint no-color9065671
Ref: 28969065671
Ref: library/pprint pprint-data-pretty-printer9065671
Ref: 28979065671
Ref: pprint — Impressão bonita de dados-Footnote-19067016
Node: Funções<4>9067082
Ref: library/pprint functions9067198
Ref: 28989067198
Ref: library/pprint pprint-functions9067198
Ref: 28999067198
Ref: library/pprint pprint pp9067235
Ref: c0e9067235
Ref: library/pprint pprint pprint9070001
Ref: a1f9070001
Ref: library/pprint pprint pformat9070422
Ref: 11769070422
Ref: library/pprint pprint isreadable9070885
Ref: 289b9070885
Ref: library/pprint pprint isrecursive9071196
Ref: 289c9071196
Ref: library/pprint pprint saferepr9071519
Ref: 289d9071519
Node: Objetos PrettyPrinter9072191
Ref: library/pprint id19072326
Ref: 289e9072326
Ref: library/pprint prettyprinter-objects9072326
Ref: 289f9072326
Ref: library/pprint pprint PrettyPrinter9072389
Ref: 11759072389
Ref: library/pprint pprint PrettyPrinter pformat9074097
Ref: 28a09074097
Ref: library/pprint pprint PrettyPrinter pprint9074302
Ref: 28a19074302
Ref: library/pprint pprint PrettyPrinter isreadable9074701
Ref: 28a29074701
Ref: library/pprint pprint PrettyPrinter isrecursive9075122
Ref: 28a39075122
Ref: library/pprint pprint PrettyPrinter format9075478
Ref: 1bc19075478
Node: Exemplo<3>9076682
Ref: library/pprint example9076796
Ref: 28a49076796
Ref: library/pprint pprint-example9076796
Ref: 28a59076796
Ref: Exemplo<3>-Footnote-19084141
Node: reprlib — Implementação alternativa à repr9084166
Ref: library/reprlib doc9084351
Ref: 28a69084351
Ref: library/reprlib module-reprlib9084351
Ref: c09084351
Ref: library/reprlib no-color9084351
Ref: 28a79084351
Ref: library/reprlib reprlib-alternate-repr-implementation9084351
Ref: 28a89084351
Ref: library/reprlib reprlib Repr9084856
Ref: 28a99084856
Ref: library/reprlib reprlib aRepr9085919
Ref: 28ab9085919
Ref: library/reprlib reprlib repr9086206
Ref: 28ac9086206
Ref: library/reprlib reprlib recursive_repr9086634
Ref: 13ef9086634
Ref: reprlib — Implementação alternativa à repr-Footnote-19087460
Node: Objetos Repr9087527
Ref: library/reprlib id19087655
Ref: 28aa9087655
Ref: library/reprlib repr-objects9087655
Ref: 28ae9087655
Ref: library/reprlib reprlib Repr fillvalue9087923
Ref: 28af9087923
Ref: library/reprlib reprlib Repr maxlevel9088076
Ref: 28b09088076
Ref: library/reprlib reprlib Repr maxdict9088207
Ref: 28b19088207
Ref: library/reprlib reprlib Repr maxlist9088234
Ref: 28b29088234
Ref: library/reprlib reprlib Repr maxtuple9088261
Ref: 28b39088261
Ref: library/reprlib reprlib Repr maxset9088289
Ref: 28b49088289
Ref: library/reprlib reprlib Repr maxfrozenset9088315
Ref: 28b59088315
Ref: library/reprlib reprlib Repr maxdeque9088347
Ref: 28b69088347
Ref: library/reprlib reprlib Repr maxarray9088375
Ref: 28b79088375
Ref: library/reprlib reprlib Repr maxlong9088605
Ref: 28b89088605
Ref: library/reprlib reprlib Repr maxstring9088779
Ref: 28b99088779
Ref: library/reprlib reprlib Repr maxother9089144
Ref: 28ba9089144
Ref: library/reprlib reprlib Repr indent9089451
Ref: 28bb9089451
Ref: library/reprlib reprlib Repr repr9091002
Ref: 28ad9091002
Ref: library/reprlib reprlib Repr repr19091136
Ref: 28bc9091136
Node: Estendendo objetos Repr9092013
Ref: library/reprlib subclassing-repr-objects9092141
Ref: 28bd9092141
Ref: library/reprlib subclassing-reprs9092141
Ref: 28be9092141
Node: enum — Suporte a enumerações9092856
Ref: library/enum doc9093072
Ref: 28bf9093072
Ref: library/enum enum-support-for-enumerations9093072
Ref: 28c09093072
Ref: library/enum module-enum9093072
Ref: 5a9093072
Ref: library/enum no-color9093072
Ref: 28c19093072
Ref: enum — Suporte a enumerações-Footnote-19095093
Node: Conteúdo do módulo<2>9095157
Ref: library/enum module-contents9095275
Ref: 28c69095275
Node: Tipos de Dados<2>9098966
Ref: library/enum data-types9099117
Ref: 28ca9099117
Ref: library/enum enum EnumType9099166
Ref: 4f19099166
Ref: library/enum enum EnumType __call__9099841
Ref: 28cc9099841
Ref: library/enum enum EnumType __contains__9101117
Ref: 28cd9101117
Ref: library/enum enum EnumType __dir__9101574
Ref: 28ce9101574
Ref: library/enum enum EnumType __getitem__9101956
Ref: 28cf9101956
Ref: library/enum enum EnumType __iter__9102173
Ref: 28d09102173
Ref: library/enum enum EnumType __len__9102371
Ref: 28d19102371
Ref: library/enum enum EnumType __members__9102502
Ref: 28d29102502
Ref: library/enum enum EnumType __reversed__9102642
Ref: 28d39102642
Ref: library/enum enum Enum9102862
Ref: 8379102862
Ref: library/enum enum Enum name9102951
Ref: 28d49102951
Ref: library/enum enum Enum value9103092
Ref: 28d59103092
Ref: library/enum enum Enum _name_9104054
Ref: 28d79104054
Ref: library/enum enum Enum _value_9104108
Ref: 28d89104108
Ref: library/enum enum Enum _order_9104209
Ref: 28d99104209
Ref: library/enum enum Enum _ignore_9104405
Ref: 28da9104405
Ref: library/enum enum Enum __dir__9104782
Ref: 1b059104782
Ref: library/enum enum Enum _generate_next_value_9105675
Ref: 28dc9105675
Ref: library/enum enum Enum __init__9106624
Ref: 28dd9106624
Ref: library/enum enum Enum __init_subclass__9107107
Ref: 28de9107107
Ref: library/enum enum Enum _missing_9107272
Ref: 28df9107272
Ref: library/enum enum Enum __new__9108180
Ref: 28d69108180
Ref: library/enum enum Enum __repr__9108847
Ref: 1a2d9108847
Ref: library/enum enum Enum __str__9109624
Ref: 8299109624
Ref: library/enum enum Enum __format__9110300
Ref: 8279110300
Ref: library/enum enum Enum _add_alias_9111226
Ref: 28e09111226
Ref: library/enum enum Enum _add_value_alias_9111580
Ref: 28e19111580
Ref: library/enum enum IntEnum9111942
Ref: ecf9111942
Ref: library/enum enum StrEnum9112986
Ref: 8229112986
Ref: library/enum enum Flag9114396
Ref: 82a9114396
Ref: library/enum enum Flag __contains__9114680
Ref: 28e29114680
Ref: library/enum enum Flag __or__9116133
Ref: 28e39116133
Ref: library/enum enum Flag __and__9116312
Ref: 28e49116312
Ref: library/enum enum Flag __xor__9116549
Ref: 28e59116549
Ref: library/enum enum Flag _numeric_repr_9117087
Ref: 28e69117087
Ref: library/enum enum IntFlag9117589
Ref: e8e9117589
Ref: library/enum enum ReprEnum9119214
Ref: 8239119214
Ref: library/enum enum EnumCheck9119734
Ref: 82d9119734
Ref: library/enum enum EnumCheck UNIQUE9119939
Ref: 28e79119939
Ref: library/enum enum EnumCheck CONTINUOUS9120425
Ref: 28e89120425
Ref: library/enum enum EnumCheck NAMED_FLAGS9120954
Ref: 28e99120954
Ref: library/enum enum FlagBoundary9121829
Ref: 82b9121829
Ref: library/enum enum FlagBoundary STRICT9121975
Ref: 28ea9121975
Ref: library/enum enum FlagBoundary CONFORM9122623
Ref: 28eb9122623
Ref: library/enum enum FlagBoundary EJECT9123091
Ref: 28ec9123091
Ref: library/enum enum FlagBoundary KEEP9123530
Ref: 28ed9123530
Ref: library/enum enum EnumDict9124060
Ref: 4f09124060
Ref: library/enum enum EnumDict member_names9124793
Ref: 28ee9124793
Node: Nomes __dunder__ suportados9125035
Ref: library/enum supported-dunder-names9125150
Ref: 28ef9125150
Node: Nomes _sunder_ suportados9125581
Ref: library/enum supported-sunder-names9125696
Ref: 28f09125696
Ref: Nomes _sunder_ suportados-Footnote-19127493
Node: Utilities and Decorators9127580
Ref: library/enum ipython-s-rich-display9127713
Ref: 28f19127713
Ref: library/enum utilities-and-decorators9127713
Ref: 28f29127713
Ref: library/enum enum auto9127782
Ref: e8f9127782
Ref: library/enum enum property9129276
Ref: 8309129276
Ref: library/enum enum unique9129802
Ref: 28c89129802
Ref: library/enum enum verify9130432
Ref: 82c9130432
Ref: library/enum enum member9130693
Ref: 82e9130693
Ref: library/enum enum nonmember9130824
Ref: 82f9130824
Ref: library/enum enum global_enum9130962
Ref: 8329130962
Ref: library/enum enum show_flag_values9131336
Ref: 28c99131336
Node: Notas9131566
Ref: library/enum notes9131673
Ref: 28c79131673
Node: graphlib — Funcionalidade para operar com estruturas do tipo grafo9132607
Ref: library/graphlib doc9132767
Ref: 28f39132767
Ref: library/graphlib graphlib-functionality-to-operate-with-graph-like-structures9132767
Ref: 28f49132767
Ref: library/graphlib module-graphlib9132767
Ref: 699132767
Ref: library/graphlib no-color9132767
Ref: 28f59132767
Ref: library/graphlib graphlib TopologicalSorter9133031
Ref: ad49133031
Ref: library/graphlib graphlib TopologicalSorter add9136599
Ref: 28f69136599
Ref: library/graphlib graphlib TopologicalSorter prepare9137409
Ref: 21e9137409
Ref: library/graphlib graphlib TopologicalSorter is_active9138334
Ref: 28f79138334
Ref: library/graphlib graphlib TopologicalSorter done9139214
Ref: 28f99139214
Ref: library/graphlib graphlib TopologicalSorter get_ready9139925
Ref: 28f89139925
Ref: library/graphlib graphlib TopologicalSorter static_order9140526
Ref: 28fa9140526
Ref: graphlib — Funcionalidade para operar com estruturas do tipo grafo-Footnote-19142051
Node: Exceções<4>9142119
Ref: library/graphlib exceptions9142237
Ref: 28fc9142237
Ref: library/graphlib graphlib CycleError9142349
Ref: 28fb9142349
Node: Módulos Matemáticos e Numéricos9143014
Ref: library/numeric doc9143182
Ref: 28fd9143182
Ref: library/numeric no-color9143182
Ref: 28fe9143182
Ref: library/numeric numeric9143182
Ref: 28ff9143182
Ref: library/numeric numeric-and-mathematical-modules9143182
Ref: 29009143182
Node: numbers — Classes base abstratas numéricas9144142
Ref: library/numbers doc9144298
Ref: 29019144298
Ref: library/numbers module-numbers9144298
Ref: a29144298
Ref: library/numbers numbers-numeric-abstract-base-classes9144298
Ref: 29029144298
Ref: library/numbers numbers Number9144731
Ref: 29039144731
Ref: numbers — Classes base abstratas numéricas-Footnote-19145045
Ref: numbers — Classes base abstratas numéricas-Footnote-29145112
Node: A torre numérica9145154
Ref: library/numbers the-numeric-tower9145297
Ref: 29049145297
Ref: library/numbers numbers Complex9145349
Ref: 24929145349
Ref: library/numbers numbers Complex real9145803
Ref: 29059145803
Ref: library/numbers numbers Complex imag9145890
Ref: 29069145890
Ref: library/numbers numbers Complex conjugate9145984
Ref: 29079145984
Ref: library/numbers numbers Real9146143
Ref: 24889146143
Ref: library/numbers numbers Rational9146655
Ref: 14ba9146655
Ref: library/numbers numbers Rational numerator9147053
Ref: 29089147053
Ref: library/numbers numbers Rational denominator9147141
Ref: 29099147141
Ref: library/numbers numbers Integral9147233
Ref: 229e9147233
Node: Notas para implementadores de tipos9147615
Ref: library/numbers notes-for-type-implementers9147758
Ref: 290a9147758
Node: Adicionando mais ABCs numéricas9148683
Ref: library/numbers adding-more-numeric-abcs9148837
Ref: 290b9148837
Node: Implementando as operações aritméticas9149201
Ref: library/numbers id19149355
Ref: 290c9149355
Ref: library/numbers implementing-the-arithmetic-operations9149355
Ref: 21ce9149355
Node: math — Funções matemáticas9154087
Ref: library/math doc9154308
Ref: 290d9154308
Ref: library/math math-mathematical-functions9154308
Ref: 290e9154308
Ref: library/math module-math9154308
Ref: 929154308
Ref: library/math no-color9154308
Ref: 290f9154308
Ref: math — Funções matemáticas-Footnote-19169179
Ref: math — Funções matemáticas-Footnote-29169231
Ref: math — Funções matemáticas-Footnote-39169283
Ref: math — Funções matemáticas-Footnote-49169335
Node: Funções de teoria dos números9169387
Ref: library/math number-theoretic-functions9169525
Ref: 29209169525
Ref: library/math math comb9169605
Ref: 8d49169605
Ref: library/math math factorial9170185
Ref: b379170185
Ref: library/math math gcd9170396
Ref: b029170396
Ref: library/math math isqrt9170972
Ref: bee9170972
Ref: library/math math lcm9171496
Ref: b039171496
Ref: library/math math perm9171920
Ref: 8d59171920
Node: Arimética de ponto flutuante9172473
Ref: library/math floating-point-arithmetic9172665
Ref: 29219172665
Ref: library/math math ceil9172741
Ref: 15b09172741
Ref: library/math math fabs9172968
Ref: 29109172968
Ref: library/math math floor9173036
Ref: 15af9173036
Ref: library/math math fma9173274
Ref: 50e9173274
Ref: library/math math fmod9174090
Ref: 23559174090
Ref: library/math math modf9175225
Ref: 29119175225
Ref: library/math math remainder9175700
Ref: d3e9175700
Ref: library/math math trunc9176807
Ref: 15b19176807
Node: Funções de manipulação de ponto flutuante9177674
Ref: library/math floating-point-manipulation-functions9177886
Ref: 29229177886
Ref: library/math math copysign9177991
Ref: 15c49177991
Ref: library/math math frexp9178219
Ref: 29129178219
Ref: library/math math isclose9178926
Ref: fa49178926
Ref: library/math math isfinite9180599
Ref: 13e79180599
Ref: library/math math isinf9180816
Ref: 15c29180816
Ref: library/math math isnan9180952
Ref: 15c39180952
Ref: library/math math ldexp9181080
Ref: 17a89181080
Ref: library/math math nextafter9181217
Ref: 6b59181217
Ref: library/math math ulp9181930
Ref: b049181930
Ref: Funções de manipulação de ponto flutuante-Footnote-19183152
Node: Funções de potências exponenciais e logarítmicas9183194
Ref: library/math power-exponential-and-logarithmic-functions9183404
Ref: 29239183404
Ref: library/math math cbrt9183525
Ref: 8669183525
Ref: library/math math exp9183625
Ref: 150f9183625
Ref: library/math math exp29183848
Ref: 8659183848
Ref: library/math math expm19183943
Ref: 13e89183943
Ref: library/math math log9184595
Ref: 16ae9184595
Ref: library/math math log1p9184835
Ref: 15c99184835
Ref: library/math math log29184994
Ref: 12d79184994
Ref: library/math math log109185364
Ref: 189b9185364
Ref: library/math math pow9185502
Ref: 8679185502
Ref: library/math math sqrt9186414
Ref: bef9186414
Ref: Funções de potências exponenciais e logarítmicas-Footnote-19186517
Node: Funções de soma e produto9186576
Ref: library/math summation-and-product-functions9186759
Ref: 29249186759
Ref: library/math math dist9186830
Ref: beb9186830
Ref: library/math math fsum9187181
Ref: 15c59187181
Ref: library/math math hypot9187943
Ref: bec9187943
Ref: library/math math prod9188722
Ref: bed9188722
Ref: library/math math sumprod9189113
Ref: 6b49189113
Ref: Funções de soma e produto-Footnote-19189611
Node: Conversão angular9189716
Ref: library/math angular-conversion9189873
Ref: 29259189873
Ref: library/math math degrees9189927
Ref: 29139189927
Ref: library/math math radians9190012
Ref: 29149190012
Node: Funções trigonométricas9190097
Ref: library/math trigonometric-functions9190250
Ref: 29269190250
Ref: library/math math acos9190318
Ref: 29159190318
Ref: library/math math asin9190447
Ref: 29169190447
Ref: library/math math atan9190579
Ref: 29179190579
Ref: library/math math atan29190715
Ref: 29189190715
Ref: library/math math cos9191226
Ref: 16ad9191226
Ref: library/math math sin9191295
Ref: 16ac9191295
Ref: library/math math tan9191361
Ref: 29199191361
Node: Funções hiperbólicas9191431
Ref: library/math hyperbolic-functions9191585
Ref: 29279191585
Ref: library/math math acosh9191766
Ref: 15c69191766
Ref: library/math math asinh9191849
Ref: 15c79191849
Ref: library/math math atanh9191929
Ref: 15c89191929
Ref: library/math math cosh9192013
Ref: 291a9192013
Ref: library/math math sinh9192087
Ref: 291b9192087
Ref: library/math math tanh9192158
Ref: 291c9192158
Ref: Funções hiperbólicas-Footnote-19192269
Node: Funções especiais9192328
Ref: library/math special-functions9192469
Ref: 29289192469
Ref: library/math math erf9192524
Ref: dc79192524
Ref: library/math math erfc9192959
Ref: dc89192959
Ref: library/math math gamma9193263
Ref: 13e99193263
Ref: library/math math lgamma9193367
Ref: 13ea9193367
Ref: Funções especiais-Footnote-19193549
Ref: Funções especiais-Footnote-29193601
Ref: Funções especiais-Footnote-39193672
Ref: Funções especiais-Footnote-49193725
Ref: Funções especiais-Footnote-59193784
Node: Constantes<2>9193836
Ref: library/math constants9193945
Ref: 29299193945
Ref: library/math math pi9193986
Ref: 291d9193986
Ref: library/math math e9194085
Ref: 291e9194085
Ref: library/math math tau9194182
Ref: 291f9194182
Ref: library/math math inf9194591
Ref: e749194591
Ref: library/math math nan9194790
Ref: 8689194790
Ref: Constantes<2>-Footnote-19196868
Ref: Constantes<2>-Footnote-29196904
Ref: Constantes<2>-Footnote-39196932
Node: cmath — Funções matemáticas para números complexos9196979
Ref: library/cmath doc9197218
Ref: 292a9197218
Ref: library/cmath cmath-mathematical-functions-for-complex-numbers9197218
Ref: 292b9197218
Ref: library/cmath module-cmath9197218
Ref: 199197218
Ref: library/cmath no-color9197218
Ref: 292c9197218
Node: Conversões de e para coordenadas polares9205826
Ref: library/cmath conversions-to-and-from-polar-coordinates9206007
Ref: 29459206007
Ref: library/cmath cmath phase9206831
Ref: 292e9206831
Ref: library/cmath cmath polar9207601
Ref: 292f9207601
Ref: library/cmath cmath rect9207841
Ref: 29309207841
Node: Funções de potência e logarítmicas9208019
Ref: library/cmath power-and-logarithmic-functions9208238
Ref: 29469208238
Ref: library/cmath cmath exp9208329
Ref: 29319208329
Ref: library/cmath cmath log9208450
Ref: 29329208450
Ref: library/cmath cmath log109208706
Ref: 29339208706
Ref: library/cmath cmath sqrt9208851
Ref: 292d9208851
Node: Funções trigonométricas<2>9208988
Ref: library/cmath trigonometric-functions9209192
Ref: 29479209192
Ref: library/cmath cmath acos9209260
Ref: 29349209260
Ref: library/cmath cmath asin9209505
Ref: 29359209505
Ref: library/cmath cmath atan9209637
Ref: 29369209637
Ref: library/cmath cmath cos9209911
Ref: 29379209911
Ref: library/cmath cmath sin9209972
Ref: 29389209972
Ref: library/cmath cmath tan9210030
Ref: 29399210030
Node: Funções hiperbólicas<2>9210092
Ref: library/cmath hyperbolic-functions9210286
Ref: 29489210286
Ref: library/cmath cmath acosh9210348
Ref: 293a9210348
Ref: library/cmath cmath asinh9210542
Ref: 293b9210542
Ref: library/cmath cmath atanh9210829
Ref: 293c9210829
Ref: library/cmath cmath cosh9211096
Ref: 293d9211096
Ref: library/cmath cmath sinh9211171
Ref: 293e9211171
Ref: library/cmath cmath tanh9211243
Ref: 293f9211243
Node: Funções de classificação9211319
Ref: library/cmath classification-functions9211497
Ref: 29499211497
Ref: library/cmath cmath isfinite9211568
Ref: 29409211568
Ref: library/cmath cmath isinf9211756
Ref: 29419211756
Ref: library/cmath cmath isnan9211905
Ref: 29429211905
Ref: library/cmath cmath isclose9212049
Ref: fa59212049
Ref: Funções de classificação-Footnote-19213745
Node: Constantes<3>9213787
Ref: library/cmath constants9213930
Ref: 294a9213930
Ref: library/cmath cmath pi9213969
Ref: 29439213969
Ref: library/cmath cmath e9214050
Ref: 29449214050
Ref: library/cmath cmath tau9214129
Ref: e719214129
Ref: library/cmath cmath inf9214244
Ref: e729214244
Ref: library/cmath cmath infj9214374
Ref: e759214374
Ref: library/cmath cmath nan9214562
Ref: e739214562
Ref: library/cmath cmath nanj9214715
Ref: e769214715
Node: decimal — Aritmética de ponto fixo decimal e ponto flutuante9216227
Ref: library/decimal doc9216467
Ref: 294b9216467
Ref: library/decimal decimal-decimal-fixed-point-and-floating-point-arithmetic9216467
Ref: 294c9216467
Ref: library/decimal module-decimal9216467
Ref: 3a9216467
Ref: library/decimal no-color9216467
Ref: 294d9216467
Ref: decimal — Aritmética de ponto fixo decimal e ponto flutuante-Footnote-19222090
Ref: decimal — Aritmética de ponto fixo decimal e ponto flutuante-Footnote-29222157
Node: Tutorial de início rápido9222211
Ref: library/decimal decimal-tutorial9222365
Ref: 295d9222365
Ref: library/decimal quick-start-tutorial9222365
Ref: 295e9222365
Node: Objetos de Decimal9229992
Ref: library/decimal decimal-decimal9230174
Ref: 29619230174
Ref: library/decimal decimal-objects9230174
Ref: 29629230174
Ref: library/decimal decimal Decimal9230229
Ref: 1fd9230229
Ref: library/decimal decimal Decimal adjusted9235929
Ref: 29639235929
Ref: library/decimal decimal Decimal as_integer_ratio9236286
Ref: e869236286
Ref: library/decimal decimal Decimal as_tuple9236749
Ref: 29649236749
Ref: library/decimal decimal Decimal canonical9236914
Ref: 29659236914
Ref: library/decimal decimal Decimal compare9237186
Ref: 29669237186
Ref: library/decimal decimal Decimal compare_signal9237632
Ref: 29679237632
Ref: library/decimal decimal Decimal compare_total9237962
Ref: 29689237962
Ref: library/decimal decimal Decimal compare_total_mag9239315
Ref: 29699239315
Ref: library/decimal decimal Decimal conjugate9239974
Ref: 296a9239974
Ref: library/decimal decimal Decimal copy_abs9240127
Ref: 296b9240127
Ref: library/decimal decimal Decimal copy_negate9240361
Ref: 296c9240361
Ref: library/decimal decimal Decimal copy_sign9240593
Ref: 296d9240593
Ref: library/decimal decimal Decimal exp9241200
Ref: 12a69241200
Ref: library/decimal decimal Decimal from_float9241649
Ref: 14009241649
Ref: library/decimal decimal Decimal from_number9242854
Ref: 1fc9242854
Ref: library/decimal decimal Decimal fma9243410
Ref: 296e9243410
Ref: library/decimal decimal Decimal is_canonical9243673
Ref: 296f9243673
Ref: library/decimal decimal Decimal is_finite9243970
Ref: 29709243970
Ref: library/decimal decimal Decimal is_infinite9244147
Ref: 29719244147
Ref: library/decimal decimal Decimal is_nan9244313
Ref: 29729244313
Ref: library/decimal decimal Decimal is_normal9244476
Ref: 29739244476
Ref: library/decimal decimal Decimal is_qnan9244703
Ref: 29749244703
Ref: library/decimal decimal Decimal is_signed9244854
Ref: 29759244854
Ref: library/decimal decimal Decimal is_snan9245067
Ref: 29769245067
Ref: library/decimal decimal Decimal is_subnormal9245212
Ref: 29779245212
Ref: library/decimal decimal Decimal is_zero9245371
Ref: 29789245371
Ref: library/decimal decimal Decimal ln9245534
Ref: 12a79245534
Ref: library/decimal decimal Decimal log109245754
Ref: 29799245754
Ref: library/decimal decimal Decimal logb9245972
Ref: 297a9245972
Ref: library/decimal decimal Decimal logical_and9246391
Ref: 297b9246391
Ref: library/decimal decimal Decimal logical_invert9246672
Ref: 297d9246672
Ref: library/decimal decimal Decimal logical_or9246858
Ref: 297e9246858
Ref: library/decimal decimal Decimal logical_xor9247136
Ref: 297f9247136
Ref: library/decimal decimal Decimal max9247439
Ref: 29809247439
Ref: library/decimal decimal Decimal max_mag9247755
Ref: 29819247755
Ref: library/decimal decimal Decimal min9247937
Ref: 29829247937
Ref: library/decimal decimal Decimal min_mag9248253
Ref: 29839248253
Ref: library/decimal decimal Decimal next_minus9248435
Ref: 29849248435
Ref: library/decimal decimal Decimal next_plus9248683
Ref: 29859248683
Ref: library/decimal decimal Decimal next_toward9248927
Ref: 29869248927
Ref: library/decimal decimal Decimal normalize9249319
Ref: 29879249319
Ref: library/decimal decimal Decimal number_class9250451
Ref: 29889250451
Ref: library/decimal decimal Decimal quantize9251578
Ref: 12ac9251578
Ref: library/decimal decimal Decimal radix9252960
Ref: 298a9252960
Ref: library/decimal decimal Decimal remainder_near9253180
Ref: 298b9253180
Ref: library/decimal decimal Decimal rotate9254043
Ref: 298c9254043
Ref: library/decimal decimal Decimal same_quantum9254800
Ref: 298d9254800
Ref: library/decimal decimal Decimal scaleb9255266
Ref: 298e9255266
Ref: library/decimal decimal Decimal shift9255549
Ref: 298f9255549
Ref: library/decimal decimal Decimal sqrt9256227
Ref: 29909256227
Ref: library/decimal decimal Decimal to_eng_string9256338
Ref: 29919256338
Ref: library/decimal decimal Decimal to_integral9256816
Ref: 29929256816
Ref: library/decimal decimal Decimal to_integral_exact9257048
Ref: 29949257048
Ref: library/decimal decimal Decimal to_integral_value9257557
Ref: 29939257557
Node: Operandos lógicos9260259
Ref: library/decimal logical-operands9260332
Ref: 29959260332
Ref: library/decimal logical-operands-label9260332
Ref: 297c9260332
Node: Objetos de contexto9260711
Ref: library/decimal context-objects9260879
Ref: 29969260879
Ref: library/decimal decimal-context9260879
Ref: 25da9260879
Ref: library/decimal decimal getcontext9261303
Ref: 18899261303
Ref: library/decimal decimal setcontext9261392
Ref: 295f9261392
Ref: library/decimal decimal localcontext9261637
Ref: 15789261637
Ref: library/decimal decimal IEEEContext9263157
Ref: 1fe9263157
Ref: library/decimal decimal BasicContext9263617
Ref: 12a09263617
Ref: library/decimal decimal ExtendedContext9264147
Ref: 12a19264147
Ref: library/decimal decimal DefaultContext9264865
Ref: 129f9264865
Ref: library/decimal decimal Context9266030
Ref: 12ab9266030
Ref: library/decimal decimal Context prec9266444
Ref: 29989266444
Ref: library/decimal decimal Context rounding9266613
Ref: 29999266613
Ref: library/decimal decimal Context traps9266739
Ref: 12aa9266739
Ref: library/decimal decimal Context flags9266764
Ref: 12a99266764
Ref: library/decimal decimal Context Emin9266964
Ref: 12a39266964
Ref: library/decimal decimal Context Emax9266988
Ref: 12a29266988
Ref: library/decimal decimal Context capitals9267254
Ref: 299b9267254
Ref: library/decimal decimal Context clamp9267513
Ref: 139a9267513
Ref: library/decimal decimal Context clear_flags9269455
Ref: 29609269455
Ref: library/decimal decimal Context clear_traps9269546
Ref: 299c9269546
Ref: library/decimal decimal Context copy9269672
Ref: 299d9269672
Ref: library/decimal decimal Context copy_decimal9269745
Ref: 299e9269745
Ref: library/decimal decimal Context create_decimal9269848
Ref: 12a59269848
Ref: library/decimal decimal Context create_decimal_from_float9271091
Ref: 299f9271091
Ref: library/decimal decimal Context Etiny9271933
Ref: 29899271933
Ref: library/decimal decimal Context Etop9272195
Ref: 29a09272195
Ref: library/decimal decimal Context abs9272700
Ref: 29a19272700
Ref: library/decimal decimal Context add9272774
Ref: 29a29272774
Ref: library/decimal decimal Context canonical9272847
Ref: 15029272847
Ref: library/decimal decimal Context compare9272933
Ref: 29a39272933
Ref: library/decimal decimal Context compare_signal9273014
Ref: 29a49273014
Ref: library/decimal decimal Context compare_total9273122
Ref: 29a59273122
Ref: library/decimal decimal Context compare_total_mag9273236
Ref: 29a69273236
Ref: library/decimal decimal Context copy_abs9273383
Ref: 29a79273383
Ref: library/decimal decimal Context copy_negate9273484
Ref: 29a89273484
Ref: library/decimal decimal Context copy_sign9273582
Ref: 29a99273582
Ref: library/decimal decimal Context divide9273663
Ref: 29aa9273663
Ref: library/decimal decimal Context divide_int9273740
Ref: 29ab9273740
Ref: library/decimal decimal Context divmod9273847
Ref: 29ac9273847
Ref: library/decimal decimal Context exp9273955
Ref: 29ad9273955
Ref: library/decimal decimal Context fma9274018
Ref: 29ae9274018
Ref: library/decimal decimal Context is_canonical9274109
Ref: 15039274109
Ref: library/decimal decimal Context is_finite9274248
Ref: 29af9274248
Ref: library/decimal decimal Context is_infinite9274381
Ref: 29b09274381
Ref: library/decimal decimal Context is_nan9274518
Ref: 29b19274518
Ref: library/decimal decimal Context is_normal9274654
Ref: 29b29274654
Ref: library/decimal decimal Context is_qnan9274798
Ref: 29b39274798
Ref: library/decimal decimal Context is_signed9274940
Ref: 29b49274940
Ref: library/decimal decimal Context is_snan9275075
Ref: 29b59275075
Ref: library/decimal decimal Context is_subnormal9275218
Ref: 29b69275218
Ref: library/decimal decimal Context is_zero9275357
Ref: 29b79275357
Ref: library/decimal decimal Context ln9275486
Ref: 29b89275486
Ref: library/decimal decimal Context log109275571
Ref: 29b99275571
Ref: library/decimal decimal Context logb9275653
Ref: 29ba9275653
Ref: library/decimal decimal Context logical_and9275747
Ref: 29bb9275747
Ref: library/decimal decimal Context logical_invert9275863
Ref: 29bc9275863
Ref: library/decimal decimal Context logical_or9275949
Ref: 29bd9275949
Ref: library/decimal decimal Context logical_xor9276065
Ref: 29be9276065
Ref: library/decimal decimal Context max9276202
Ref: 29bf9276202
Ref: library/decimal decimal Context max_mag9276302
Ref: 29c09276302
Ref: library/decimal decimal Context min9276409
Ref: 29c19276409
Ref: library/decimal decimal Context min_mag9276509
Ref: 29c29276509
Ref: library/decimal decimal Context minus9276616
Ref: 29c39276616
Ref: library/decimal decimal Context multiply9276744
Ref: 29c49276744
Ref: library/decimal decimal Context next_minus9276825
Ref: 29c59276825
Ref: library/decimal decimal Context next_plus9276927
Ref: 29c69276927
Ref: library/decimal decimal Context next_toward9277028
Ref: 29c79277028
Ref: library/decimal decimal Context normalize9277139
Ref: 29c89277139
Ref: library/decimal decimal Context number_class9277225
Ref: 29c99277225
Ref: library/decimal decimal Context plus9277317
Ref: 29ca9277317
Ref: library/decimal decimal Context power9277563
Ref: 29cb9277563
Ref: library/decimal decimal Context quantize9279453
Ref: 29cc9279453
Ref: library/decimal decimal Context radix9279579
Ref: 29cd9279579
Ref: library/decimal decimal Context remainder9279662
Ref: 29ce9279662
Ref: library/decimal decimal Context remainder_near9279854
Ref: 29cf9279854
Ref: library/decimal decimal Context rotate9280084
Ref: 29d09280084
Ref: library/decimal decimal Context same_quantum9280172
Ref: 29d19280172
Ref: library/decimal decimal Context scaleb9280291
Ref: 29d29280291
Ref: library/decimal decimal Context shift9280417
Ref: 29d39280417
Ref: library/decimal decimal Context sqrt9280511
Ref: 29d49280511
Ref: library/decimal decimal Context subtract9280633
Ref: 29d59280633
Ref: library/decimal decimal Context to_eng_string9280720
Ref: 29d69280720
Ref: library/decimal decimal Context to_integral_exact9281087
Ref: 29d79281087
Ref: library/decimal decimal Context to_sci_string9281177
Ref: 29d89281177
Node: Constantes<4>9281292
Ref: library/decimal constants9281465
Ref: 29d99281465
Ref: library/decimal decimal-rounding-modes9281465
Ref: 29da9281465
Ref: library/decimal decimal MAX_PREC9281982
Ref: 129c9281982
Ref: library/decimal decimal MAX_EMAX9282205
Ref: 129d9282205
Ref: library/decimal decimal MIN_EMIN9282428
Ref: 129e9282428
Ref: library/decimal decimal MIN_ETINY9282653
Ref: 29db9282653
Ref: library/decimal decimal IEEE_CONTEXT_MAX_BITS9282860
Ref: 29979282860
Ref: library/decimal decimal HAVE_THREADS9282995
Ref: 129a9282995
Ref: library/decimal decimal HAVE_CONTEXTVAR9283159
Ref: 20119283159
Node: Modos de arredondamento9283552
Ref: library/decimal rounding-modes9283712
Ref: 299a9283712
Ref: library/decimal decimal ROUND_CEILING9283777
Ref: 294e9283777
Ref: library/decimal decimal ROUND_DOWN9283847
Ref: 294f9283847
Ref: library/decimal decimal ROUND_FLOOR9283904
Ref: 29509283904
Ref: library/decimal decimal ROUND_HALF_DOWN9283973
Ref: 29519283973
Ref: library/decimal decimal ROUND_HALF_EVEN9284075
Ref: 29529284075
Ref: library/decimal decimal ROUND_HALF_UP9284203
Ref: 29539284203
Ref: library/decimal decimal ROUND_UP9284308
Ref: 29549284308
Ref: library/decimal decimal ROUND_05UP9284374
Ref: 29559284374
Node: Sinais9284557
Ref: library/decimal decimal-signals9284739
Ref: 29dc9284739
Ref: library/decimal signals9284739
Ref: 29dd9284739
Ref: library/decimal decimal Clamped9285555
Ref: 29569285555
Ref: library/decimal decimal DecimalException9285884
Ref: 29de9285884
Ref: library/decimal decimal DivisionByZero9286012
Ref: 29579286012
Ref: library/decimal decimal Inexact9286362
Ref: 29589286362
Ref: library/decimal decimal InvalidOperation9286706
Ref: 12a49286706
Ref: library/decimal decimal Overflow9287160
Ref: 295b9287160
Ref: library/decimal decimal Rounded9287606
Ref: 29599287606
Ref: library/decimal decimal Subnormal9288022
Ref: 295a9288022
Ref: library/decimal decimal Underflow9288284
Ref: 295c9288284
Ref: library/decimal decimal FloatOperation9288548
Ref: 12999288548
Node: Observações sobre ponto flutuante9289950
Ref: library/decimal decimal-notes9290132
Ref: 29df9290132
Ref: library/decimal floating-point-notes9290132
Ref: 29e09290132
Node: Atenuando o erro de arredondamento com maior precisão9290310
Ref: library/decimal mitigating-round-off-error-with-increased-precision9290462
Ref: 29e19290462
Node: Valores especiais9292201
Ref: library/decimal special-values9292353
Ref: 29e29292353
Node: Trabalhando com threads9295706
Ref: library/decimal decimal-threads9295890
Ref: 29e39295890
Ref: library/decimal working-with-threads9295890
Ref: 29e49295890
Node: Receitas9297806
Ref: library/decimal decimal-recipes9297972
Ref: 29e59297972
Ref: library/decimal recipes9297972
Ref: 29e69297972
Node: FAQ sobre Decimal9303023
Ref: library/decimal decimal-faq9303157
Ref: 29e79303157
Ref: library/decimal id19303157
Ref: 29e89303157
Ref: FAQ sobre Decimal-Footnote-19312702
Ref: FAQ sobre Decimal-Footnote-29312769
Ref: FAQ sobre Decimal-Footnote-39312805
Ref: FAQ sobre Decimal-Footnote-49312866
Ref: FAQ sobre Decimal-Footnote-59312969
Node: fractions — Números racionais9313126
Ref: library/fractions doc9313352
Ref: 29e99313352
Ref: library/fractions fractions-rational-numbers9313352
Ref: 29ea9313352
Ref: library/fractions module-fractions9313352
Ref: 619313352
Ref: library/fractions no-color9313352
Ref: 29eb9313352
Ref: library/fractions fractions Fraction9313760
Ref: 2129313760
Ref: library/fractions fractions Fraction numerator9318425
Ref: 29ed9318425
Ref: library/fractions fractions Fraction denominator9318504
Ref: 29ee9318504
Ref: library/fractions fractions Fraction as_integer_ratio9318627
Ref: 29ef9318627
Ref: library/fractions fractions Fraction is_integer9318882
Ref: 29f09318882
Ref: library/fractions fractions Fraction from_float9319014
Ref: 14019319014
Ref: library/fractions fractions Fraction from_decimal9319487
Ref: 14029319487
Ref: library/fractions fractions Fraction from_number9319878
Ref: 2139319878
Ref: library/fractions fractions Fraction limit_denominator9320243
Ref: 29ec9320243
Ref: library/fractions fractions Fraction __floor__9321150
Ref: 1a2a9321150
Ref: library/fractions fractions Fraction __ceil__9321453
Ref: 1a299321453
Ref: library/fractions fractions Fraction __round__9321638
Ref: 1a289321638
Ref: library/fractions fractions Fraction __format__9322151
Ref: 29f19322151
Ref: fractions — Números racionais-Footnote-19324624
Ref: fractions — Números racionais-Footnote-29324693
Node: random — Gera números pseudoaleatórios9324735
Ref: library/random doc9324936
Ref: 29f29324936
Ref: library/random module-random9324936
Ref: bd9324936
Ref: library/random no-color9324936
Ref: 29f39324936
Ref: library/random random-generate-pseudo-random-numbers9324936
Ref: 29f49324936
Ref: random — Gera números pseudoaleatórios-Footnote-19328521
Ref: random — Gera números pseudoaleatórios-Footnote-29328587
Node: Funções de contabilidade9328677
Ref: library/random bookkeeping-functions9328811
Ref: 29f69328811
Ref: library/random random seed9328880
Ref: 146f9328880
Ref: library/random random getstate9330037
Ref: 29f79330037
Ref: library/random random setstate9330234
Ref: 29f89330234
Node: Funções para bytes9330509
Ref: library/random functions-for-bytes9330675
Ref: 29f99330675
Ref: library/random random randbytes9330732
Ref: 17949330732
Node: Funções para inteiros9330952
Ref: library/random functions-for-integers9331118
Ref: 29fb9331118
Ref: library/random random randrange9331181
Ref: a619331181
Ref: library/random random randint9332331
Ref: 142b9332331
Ref: library/random random getrandbits9332483
Ref: 12039332483
Node: Funções para sequências9332966
Ref: library/random functions-for-sequences9333137
Ref: 29fc9333137
Ref: library/random random choice9333205
Ref: 142c9333205
Ref: library/random random choices9333371
Ref: eb59333371
Ref: library/random random shuffle9335586
Ref: 9439335586
Ref: library/random random sample9336314
Ref: 9429336314
Node: Distribuições discretas9338008
Ref: library/random discrete-distributions9338186
Ref: 29fd9338186
Ref: library/random random binomialvariate9338308
Ref: 6cc9338308
Ref: Distribuições discretas-Footnote-19338906
Node: Distribuições com valor real9338970
Ref: library/random id19339141
Ref: 29fe9339141
Ref: library/random real-valued-distributions9339141
Ref: 29ff9339141
Ref: library/random random random9339529
Ref: 9449339529
Ref: library/random random uniform9339664
Ref: 2a009339664
Ref: library/random random triangular9340020
Ref: 2a019340020
Ref: library/random random betavariate9340410
Ref: 2a029340410
Ref: library/random random expovariate9340604
Ref: 6cd9340604
Ref: library/random random gammavariate9341072
Ref: 2a039341072
Ref: library/random random gauss9341601
Ref: 1ae59341601
Ref: library/random random lognormvariate9342389
Ref: 2a049342389
Ref: library/random random normalvariate9342684
Ref: 1ae69342684
Ref: library/random random vonmisesvariate9342901
Ref: 2a059342901
Ref: library/random random paretovariate9343252
Ref: 2a069343252
Ref: library/random random weibullvariate9343363
Ref: 2a079343363
Node: Gerador alternativo9343519
Ref: library/random alternative-generator9343694
Ref: 2a089343694
Ref: library/random random Random9343751
Ref: 1b4b9343751
Ref: library/random random Random seed9344279
Ref: 1c219344279
Ref: library/random random Random getstate9344482
Ref: 2a099344482
Ref: library/random random Random setstate9344676
Ref: 2a0a9344676
Ref: library/random random Random random9344875
Ref: 2a0b9344875
Ref: library/random random Random getrandbits9345169
Ref: 2a0c9345169
Ref: library/random random Random randbytes9345370
Ref: b199345370
Ref: library/random random SystemRandom9345567
Ref: 29f59345567
Node: Notas sobre reprodutibilidade9346088
Ref: library/random notes-on-reproducibility9346244
Ref: 2a0d9346244
Node: Exemplos<4>9347063
Ref: library/random examples9347211
Ref: 2a0e9347211
Ref: library/random random-examples9347211
Ref: 13d89347211
Ref: Exemplos<4>-Footnote-19352605
Ref: Exemplos<4>-Footnote-29352672
Ref: Exemplos<4>-Footnote-39352753
Ref: Exemplos<4>-Footnote-49352799
Ref: Exemplos<4>-Footnote-59352851
Ref: Exemplos<4>-Footnote-69352906
Ref: Exemplos<4>-Footnote-79352974
Ref: Exemplos<4>-Footnote-89353010
Ref: Exemplos<4>-Footnote-99353080
Node: Receitas<2>9353116
Ref: library/random recipes9353261
Ref: 2a0f9353261
Ref: Receitas<2>-Footnote-19356615
Node: Uso na linha de comando<2>9356683
Ref: library/random command-line-usage9356845
Ref: 2a109356845
Ref: library/random random-cli9356845
Ref: 4789356845
Ref: library/random cmdoption-random-h9357139
Ref: 2a119357139
Ref: library/random cmdoption-random-help9357139
Ref: 2a129357139
Ref: library/random cmdoption-random-c9357203
Ref: 2a139357203
Ref: library/random cmdoption-random-choice9357238
Ref: 2a149357238
Ref: library/random cmdoption-random-i9357347
Ref: 2a159357347
Ref: library/random cmdoption-random-integer9357366
Ref: 2a169357366
Ref: library/random cmdoption-random-f9357487
Ref: 2a179357487
Ref: library/random cmdoption-random-float9357506
Ref: 2a189357506
Node: Exemplos na linha de comando9357866
Ref: library/random command-line-example9358008
Ref: 2a199358008
Ref: library/random random-cli-example9358008
Ref: 2a1a9358008
Node: statistics — Funções estatísticas9358878
Ref: library/statistics doc9359038
Ref: 2a1b9359038
Ref: library/statistics module-statistics9359038
Ref: d79359038
Ref: library/statistics no-color9359038
Ref: 2a1c9359038
Ref: library/statistics statistics-mathematical-statistics-functions9359038
Ref: 2a1d9359038
Ref: statistics — Funções estatísticas-Footnote-19361750
Ref: statistics — Funções estatísticas-Footnote-29361820
Ref: statistics — Funções estatísticas-Footnote-39361846
Node: Médias e medidas de valor central9361873
Ref: library/statistics averages-and-measures-of-central-location9362014
Ref: 2a1e9362014
Node: Medidas de espalhamento9363924
Ref: library/statistics measures-of-spread9364123
Ref: 2a259364123
Node: Estatísticas para relações entre duas entradas9364754
Ref: library/statistics statistics-for-relations-between-two-inputs9364941
Ref: 2a289364941
Node: Detalhes das funções9365537
Ref: library/statistics function-details9365714
Ref: 2a299365714
Ref: library/statistics statistics mean9365938
Ref: 8d69365938
Ref: library/statistics statistics fmean9367588
Ref: c1f9367588
Ref: library/statistics statistics geometric_mean9368671
Ref: c209368671
Ref: library/statistics statistics harmonic_mean9369402
Ref: ed19369402
Ref: library/statistics statistics kde9371097
Ref: 54c9371097
Ref: library/statistics statistics kde_random9373206
Ref: 54d9373206
Ref: library/statistics statistics median9374384
Ref: 2a1f9374384
Ref: library/statistics statistics median_low9375524
Ref: 2a209375524
Ref: library/statistics statistics median_high9376296
Ref: 2a219376296
Ref: library/statistics statistics median_grouped9377071
Ref: 2a229377071
Ref: library/statistics statistics mode9379091
Ref: 2a239379091
Ref: library/statistics statistics multimode9380789
Ref: 2a249380789
Ref: library/statistics statistics pstdev9381200
Ref: 2a269381200
Ref: library/statistics statistics pvariance9381500
Ref: 2a279381500
Ref: library/statistics statistics stdev9383999
Ref: 8d89383999
Ref: library/statistics statistics variance9384290
Ref: 8d79384290
Ref: library/statistics statistics quantiles9386771
Ref: c219386771
Ref: library/statistics statistics covariance9389932
Ref: a279389932
Ref: library/statistics statistics correlation9390600
Ref: 6d89390600
Ref: library/statistics statistics linear_regression9392845
Ref: a289392845
Ref: Detalhes das funções-Footnote-19395516
Ref: Detalhes das funções-Footnote-29395562
Ref: Detalhes das funções-Footnote-39395621
Ref: Detalhes das funções-Footnote-49395717
Ref: Detalhes das funções-Footnote-59395775
Ref: Detalhes das funções-Footnote-69395854
Ref: Detalhes das funções-Footnote-79395905
Ref: Detalhes das funções-Footnote-89395975
Ref: Detalhes das funções-Footnote-99396056
Ref: Detalhes das funções-Footnote-109396128
Ref: Detalhes das funções-Footnote-119396192
Node: Exceções<5>9396250
Ref: library/statistics exceptions9396396
Ref: 2a2b9396396
Ref: library/statistics statistics StatisticsError9396468
Ref: 2a2a9396468
Node: Objetos NormalDist9396604
Ref: library/statistics normaldist-objects9396750
Ref: 2a2c9396750
Ref: library/statistics statistics NormalDist9397154
Ref: c229397154
Ref: library/statistics statistics NormalDist mean9397428
Ref: 2a2d9397428
Ref: library/statistics statistics NormalDist median9397565
Ref: 2a2e9397565
Ref: library/statistics statistics NormalDist mode9397693
Ref: 2a2f9397693
Ref: library/statistics statistics NormalDist stdev9397816
Ref: 2a309397816
Ref: library/statistics statistics NormalDist variance9397950
Ref: 2a319397950
Ref: library/statistics statistics NormalDist from_samples9398121
Ref: 2a329398121
Ref: library/statistics statistics NormalDist samples9398771
Ref: 2a339398771
Ref: library/statistics statistics NormalDist pdf9399434
Ref: 2a349399434
Ref: library/statistics statistics NormalDist cdf9400088
Ref: 17bc9400088
Ref: library/statistics statistics NormalDist inv_cdf9400371
Ref: 2a359400371
Ref: library/statistics statistics NormalDist overlap9400836
Ref: 2a369400836
Ref: library/statistics statistics NormalDist quantiles9401115
Ref: 2a379401115
Ref: library/statistics statistics NormalDist zscore9401593
Ref: 2a389401593
Ref: Objetos NormalDist-Footnote-19403109
Ref: Objetos NormalDist-Footnote-29403168
Ref: Objetos NormalDist-Footnote-39403232
Ref: Objetos NormalDist-Footnote-49403289
Ref: Objetos NormalDist-Footnote-59403342
Ref: Objetos NormalDist-Footnote-69403399
Ref: Objetos NormalDist-Footnote-79403460
Ref: Objetos NormalDist-Footnote-89403518
Ref: Objetos NormalDist-Footnote-99403571
Ref: Objetos NormalDist-Footnote-109403620
Ref: Objetos NormalDist-Footnote-119403678
Ref: Objetos NormalDist-Footnote-129403751
Ref: Objetos NormalDist-Footnote-139403798
Ref: Objetos NormalDist-Footnote-149403933
Ref: Objetos NormalDist-Footnote-159403980
Ref: Objetos NormalDist-Footnote-169404058
Node: Exemplos e receitas<2>9404143
Ref: library/statistics examples-and-recipes9404267
Ref: 2a399404267
Node: Problemas clássicos de probabilidade9404506
Ref: library/statistics classic-probability-problems9404652
Ref: 2a3a9404652
Ref: Problemas clássicos de probabilidade-Footnote-19405546
Ref: Problemas clássicos de probabilidade-Footnote-29405617
Ref: Problemas clássicos de probabilidade-Footnote-39405663
Node: Entradas de Monte Carlo para simulações9405707
Ref: library/statistics monte-carlo-inputs-for-simulations9405904
Ref: 2a3b9405904
Ref: Entradas de Monte Carlo para simulações-Footnote-19406624
Node: Aproximação de distribuições binomiais9406685
Ref: library/statistics approximating-binomial-distributions9406877
Ref: 2a3c9406877
Ref: Aproximação de distribuições binomiais-Footnote-19408405
Node: Classificador bayesiano ingênuo9408469
Ref: library/statistics naive-bayesian-classifier9408611
Ref: 2a3d9408611
Ref: Classificador bayesiano ingênuo-Footnote-19410620
Ref: Classificador bayesiano ingênuo-Footnote-29410704
Ref: Classificador bayesiano ingênuo-Footnote-39410765
Node: Módulos de Programação Funcional9410835
Ref: library/functional doc9411020
Ref: 2a3e9411020
Ref: library/functional functional-programming-modules9411020
Ref: 2a3f9411020
Ref: library/functional no-color9411020
Ref: 2a409411020
Node: itertools — Funções que criam iteradores para laços eficientes9411524
Ref: library/itertools doc9411743
Ref: 2a419411743
Ref: library/itertools itertools-functions-creating-iterators-for-efficient-looping9411743
Ref: 2a429411743
Ref: library/itertools module-itertools9411743
Ref: 859411743
Node: Funções do intertools9423191
Ref: library/itertools itertool-functions9423349
Ref: 2a499423349
Ref: library/itertools itertools-functions9423349
Ref: 2a4a9423349
Ref: library/itertools itertools accumulate9423611
Ref: be69423611
Ref: library/itertools itertools batched9426095
Ref: 50b9426095
Ref: library/itertools itertools chain9427511
Ref: 24709427511
Ref: library/itertools itertools chain from_iterable9428002
Ref: 2a449428002
Ref: library/itertools itertools combinations9428445
Ref: 150d9428445
Ref: library/itertools itertools combinations_with_replacement9430142
Ref: 147d9430142
Ref: library/itertools itertools compress9431837
Ref: 147e9431837
Ref: library/itertools itertools count9432340
Ref: 147f9432340
Ref: library/itertools itertools cycle9433213
Ref: 2a439433213
Ref: library/itertools itertools dropwhile9433945
Ref: 2a459433945
Ref: library/itertools itertools filterfalse9434676
Ref: 245c9434676
Ref: library/itertools itertools groupby9435273
Ref: 2a469435273
Ref: library/itertools itertools islice9438004
Ref: d379438004
Ref: library/itertools itertools pairwise9439870
Ref: a0c9439870
Ref: library/itertools itertools permutations9440500
Ref: 1bbd9440500
Ref: library/itertools itertools product9442577
Ref: 150e9442577
Ref: library/itertools itertools repeat9444337
Ref: 17c49444337
Ref: library/itertools itertools starmap9445039
Ref: 12e09445039
Ref: library/itertools itertools takewhile9445687
Ref: 2a479445687
Ref: library/itertools itertools tee9446490
Ref: 2a489446490
Ref: library/itertools itertools zip_longest9449233
Ref: 149a9449233
Ref: Funções do intertools-Footnote-19450750
Ref: Funções do intertools-Footnote-29450824
Ref: Funções do intertools-Footnote-39450879
Ref: Funções do intertools-Footnote-49450935
Node: Receitas com itertools9451033
Ref: library/itertools id19451191
Ref: 2a4c9451191
Ref: library/itertools itertools-recipes9451191
Ref: 145a9451191
Ref: Receitas com itertools-Footnote-19464940
Ref: Receitas com itertools-Footnote-29464989
Node: functools — Higher-order functions and operations on callable objects9465060
Ref: library/functools doc9465335
Ref: 2a4d9465335
Ref: library/functools functools-higher-order-functions-and-operations-on-callable-objects9465335
Ref: 2a4e9465335
Ref: library/functools module-functools9465335
Ref: 639465335
Ref: library/functools no-color9465335
Ref: 2a4f9465335
Ref: library/functools functools cache9465895
Ref: 17519465895
Ref: library/functools functools cached_property9467139
Ref: 7589467139
Ref: library/functools functools cmp_to_key9470535
Ref: 13d69470535
Ref: library/functools functools lru_cache9471694
Ref: bd89471694
Ref: library/functools functools lru_cache cache_info9474261
Ref: 2a519474261
Ref: library/functools functools lru_cache cache_clear9474526
Ref: 2a529474526
Ref: library/functools functools total_ordering9477321
Ref: 11389477321
Ref: library/functools functools Placeholder9479568
Ref: 2159479568
Ref: library/functools functools partial9479800
Ref: 2169479800
Ref: library/functools functools partialmethod9482874
Ref: 2179482874
Ref: library/functools functools reduce9484624
Ref: 2199484624
Ref: library/functools functools singledispatch9485969
Ref: 8409485969
Ref: library/functools functools singledispatch register9486573
Ref: 2a539486573
Ref: library/functools functools singledispatchmethod9492409
Ref: bd99492409
Ref: library/functools functools update_wrapper9494135
Ref: 12189494135
Ref: library/functools functools wraps9496727
Ref: 11539496727
Ref: functools — Higher-order functions and operations on callable objects-Footnote-19498026
Ref: functools — Higher-order functions and operations on callable objects-Footnote-29498095
Ref: functools — Higher-order functions and operations on callable objects-Footnote-39498145
Ref: functools — Higher-order functions and operations on callable objects-Footnote-49498187
Ref: functools — Higher-order functions and operations on callable objects-Footnote-59498279
Ref: functools — Higher-order functions and operations on callable objects-Footnote-69498341
Ref: functools — Higher-order functions and operations on callable objects-Footnote-79498403
Node: Objetos partial9498468
Ref: library/functools id19498591
Ref: 2a559498591
Ref: library/functools partial-objects9498591
Ref: 2189498591
Ref: library/functools functools partial func9498772
Ref: 2a569498772
Ref: library/functools functools partial args9498960
Ref: 2a579498960
Ref: library/functools functools partial keywords9499131
Ref: 2a589499131
Node: operator — Operadores padrões como funções9499549
Ref: library/operator doc9499748
Ref: 2a599499748
Ref: library/operator module-operator9499748
Ref: a39499748
Ref: library/operator no-color9499748
Ref: 2a5a9499748
Ref: library/operator operator-standard-operators-as-functions9499748
Ref: 2a5b9499748
Ref: library/operator operator lt9500776
Ref: 2a5c9500776
Ref: library/operator operator le9500809
Ref: 2a5d9500809
Ref: library/operator operator eq9500842
Ref: 2a5e9500842
Ref: library/operator operator ne9500875
Ref: 2a5f9500875
Ref: library/operator operator ge9500908
Ref: 2a609500908
Ref: library/operator operator gt9500941
Ref: 2a619500941
Ref: library/operator operator __lt__9500974
Ref: 2a629500974
Ref: library/operator operator __le__9501011
Ref: 2a639501011
Ref: library/operator operator __eq__9501048
Ref: 2a649501048
Ref: library/operator operator __ne__9501085
Ref: 2a659501085
Ref: library/operator operator __ge__9501122
Ref: 2a669501122
Ref: library/operator operator __gt__9501159
Ref: 2a679501159
Ref: library/operator operator not_9501959
Ref: 2a689501959
Ref: library/operator operator __not__9501993
Ref: 2a699501993
Ref: library/operator operator truth9502340
Ref: 2a6a9502340
Ref: library/operator operator is_9502545
Ref: 2a6b9502545
Ref: library/operator operator is_not9502639
Ref: 2a6c9502639
Ref: library/operator operator is_none9502740
Ref: 2549502740
Ref: library/operator operator is_not_none9502872
Ref: 2559502872
Ref: library/operator operator abs9503075
Ref: 2a6d9503075
Ref: library/operator operator __abs__9503108
Ref: 2a6e9503108
Ref: library/operator operator add9503187
Ref: 2a6f9503187
Ref: library/operator operator __add__9503221
Ref: 2a709503221
Ref: library/operator operator and_9503317
Ref: 2a719503317
Ref: library/operator operator __and__9503352
Ref: 2a729503352
Ref: library/operator operator floordiv9503429
Ref: 2a739503429
Ref: library/operator operator __floordiv__9503468
Ref: 2a749503468
Ref: library/operator operator index9503540
Ref: 1bb19503540
Ref: library/operator operator __index__9503573
Ref: 2a759503573
Ref: library/operator operator inv9503884
Ref: 2a769503884
Ref: library/operator operator invert9503917
Ref: 2a779503917
Ref: library/operator operator __inv__9503953
Ref: 2a789503953
Ref: library/operator operator __invert__9503990
Ref: 2a799503990
Ref: library/operator operator lshift9504117
Ref: 2a7a9504117
Ref: library/operator operator __lshift__9504154
Ref: 2a7b9504154
Ref: library/operator operator mod9504249
Ref: 2a7c9504249
Ref: library/operator operator __mod__9504283
Ref: 2a7d9504283
Ref: library/operator operator mul9504349
Ref: 2a4b9504349
Ref: library/operator operator __mul__9504383
Ref: 2a7e9504383
Ref: library/operator operator matmul9504479
Ref: 102a9504479
Ref: library/operator operator __matmul__9504516
Ref: 2a7f9504516
Ref: library/operator operator neg9504618
Ref: 2a809504618
Ref: library/operator operator __neg__9504651
Ref: 2a819504651
Ref: library/operator operator or_9504730
Ref: 2a829504730
Ref: library/operator operator __or__9504764
Ref: 2a839504764
Ref: library/operator operator pos9504840
Ref: 2a849504840
Ref: library/operator operator __pos__9504873
Ref: 2a859504873
Ref: library/operator operator pow9504954
Ref: 2a869504954
Ref: library/operator operator __pow__9504988
Ref: 2a879504988
Ref: library/operator operator rshift9505085
Ref: 2a889505085
Ref: library/operator operator __rshift__9505122
Ref: 2a899505122
Ref: library/operator operator sub9505216
Ref: 2a8a9505216
Ref: library/operator operator __sub__9505250
Ref: 2a8b9505250
Ref: library/operator operator truediv9505316
Ref: 2a8c9505316
Ref: library/operator operator __truediv__9505354
Ref: 2a8d9505354
Ref: library/operator operator xor9505516
Ref: 2a8e9505516
Ref: library/operator operator __xor__9505550
Ref: 2a8f9505550
Ref: library/operator operator concat9505728
Ref: 2a909505728
Ref: library/operator operator __concat__9505765
Ref: 2a919505765
Ref: library/operator operator contains9505864
Ref: acd9505864
Ref: library/operator operator __contains__9505903
Ref: 2a929505903
Ref: library/operator operator countOf9506035
Ref: acf9506035
Ref: library/operator operator delitem9506129
Ref: 2a939506129
Ref: library/operator operator __delitem__9506167
Ref: 2a949506167
Ref: library/operator operator getitem9506254
Ref: 2a959506254
Ref: library/operator operator __getitem__9506292
Ref: 2a969506292
Ref: library/operator operator indexOf9506380
Ref: ace9506380
Ref: library/operator operator setitem9506482
Ref: 2a979506482
Ref: library/operator operator __setitem__9506523
Ref: 2a989506523
Ref: library/operator operator length_hint9506622
Ref: 11639506622
Ref: library/operator operator call9506996
Ref: 1b219506996
Ref: library/operator operator __call__9507050
Ref: 2a999507050
Ref: library/operator operator attrgetter9507518
Ref: 10289507518
Ref: library/operator operator itemgetter9508858
Ref: c4b9508858
Ref: library/operator operator methodcaller9510703
Ref: 10299510703
Ref: operator — Operadores padrões como funções-Footnote-19511550
Node: Mapeando os operadores para suas respectivas funções9511618
Ref: library/operator mapping-operators-to-functions9511784
Ref: 2a9a9511784
Ref: library/operator operator-map9511784
Ref: 2a9b9511784
Node: Operadores in-place9519707
Ref: library/operator in-place-operators9519873
Ref: 2a9c9519873
Ref: library/operator operator iadd9521259
Ref: 2a9e9521259
Ref: library/operator operator __iadd__9521294
Ref: 2a9f9521294
Ref: library/operator operator iand9521392
Ref: 2aa09521392
Ref: library/operator operator __iand__9521427
Ref: 2aa19521427
Ref: library/operator operator iconcat9521525
Ref: 2aa29521525
Ref: library/operator operator __iconcat__9521563
Ref: 2aa39521563
Ref: library/operator operator ifloordiv9521704
Ref: 2aa49521704
Ref: library/operator operator __ifloordiv__9521744
Ref: 2aa59521744
Ref: library/operator operator ilshift9521853
Ref: 2aa69521853
Ref: library/operator operator __ilshift__9521891
Ref: 2aa79521891
Ref: library/operator operator imod9521996
Ref: 2aa89521996
Ref: library/operator operator __imod__9522031
Ref: 2aa99522031
Ref: library/operator operator imul9522129
Ref: 2aaa9522129
Ref: library/operator operator __imul__9522164
Ref: 2aab9522164
Ref: library/operator operator imatmul9522262
Ref: 102b9522262
Ref: library/operator operator __imatmul__9522300
Ref: 2aac9522300
Ref: library/operator operator ior9522437
Ref: 2aad9522437
Ref: library/operator operator __ior__9522471
Ref: 2aae9522471
Ref: library/operator operator ipow9522567
Ref: 2aaf9522567
Ref: library/operator operator __ipow__9522602
Ref: 2ab09522602
Ref: library/operator operator irshift9522701
Ref: 2ab19522701
Ref: library/operator operator __irshift__9522739
Ref: 2ab29522739
Ref: library/operator operator isub9522844
Ref: 2ab39522844
Ref: library/operator operator __isub__9522879
Ref: 2ab49522879
Ref: library/operator operator itruediv9522977
Ref: 2ab59522977
Ref: library/operator operator __itruediv__9523016
Ref: 2ab69523016
Ref: library/operator operator ixor9523122
Ref: 2ab79523122
Ref: library/operator operator __ixor__9523157
Ref: 2ab89523157
Node: Acesso a arquivos e diretórios9523255
Ref: library/filesys doc9523428
Ref: 2ab99523428
Ref: library/filesys file-and-directory-access9523428
Ref: 2aba9523428
Ref: library/filesys filesys9523428
Ref: 2abb9523428
Ref: library/filesys no-color9523428
Ref: 2abc9523428
Node: pathlib — Caminhos do sistema de arquivos orientados a objetos9524436
Ref: library/pathlib doc9524631
Ref: 2abd9524631
Ref: library/pathlib module-pathlib9524631
Ref: a89524631
Ref: library/pathlib pathlib-object-oriented-filesystem-paths9524631
Ref: 2abe9524631
Ref: pathlib — Caminhos do sistema de arquivos orientados a objetos-Footnote-19527156
Ref: pathlib — Caminhos do sistema de arquivos orientados a objetos-Footnote-29527221
Node: Uso básico<2>9527263
Ref: library/pathlib basic-use9527400
Ref: 2ac29527400
Node: Exceções<6>9528397
Ref: library/pathlib exceptions9528557
Ref: 2ac39528557
Ref: library/pathlib pathlib UnsupportedOperation9528596
Ref: 52d9528596
Node: Caminhos puros9528835
Ref: library/pathlib id19528999
Ref: 2ac49528999
Ref: library/pathlib pure-paths9528999
Ref: 2abf9528999
Ref: library/pathlib pathlib PurePath9529261
Ref: 6c29529261
Ref: library/pathlib pathlib PurePosixPath9531819
Ref: 2ac59531819
Ref: library/pathlib pathlib PureWindowsPath9532163
Ref: 19b49532163
Ref: Caminhos puros-Footnote-19533028
Node: Propriedades gerais9533087
Ref: library/pathlib general-properties9533176
Ref: 2ac69533176
Node: Operadores9534090
Ref: library/pathlib operators9534216
Ref: 2ac79534216
Node: Acessando partes individuais9535920
Ref: library/pathlib accessing-individual-parts9536050
Ref: 2ac89536050
Ref: library/pathlib pathlib PurePath parts9536226
Ref: 2ac99536226
Node: Métodos e propriedades9536646
Ref: library/pathlib methods-and-properties9536757
Ref: 2aca9536757
Ref: library/pathlib pathlib PurePath parser9536886
Ref: 5309536886
Ref: library/pathlib pathlib PurePath drive9537103
Ref: 2acb9537103
Ref: library/pathlib pathlib PurePath root9537578
Ref: 2acc9537578
Ref: library/pathlib pathlib PurePath anchor9538703
Ref: 2acd9538703
Ref: library/pathlib pathlib PurePath parents9539089
Ref: a179539089
Ref: library/pathlib pathlib PurePath parent9539584
Ref: 19d99539584
Ref: library/pathlib pathlib PurePath name9540461
Ref: 2ace9540461
Ref: library/pathlib pathlib PurePath suffix9540906
Ref: 18aa9540906
Ref: library/pathlib pathlib PurePath suffixes9541398
Ref: 18ab9541398
Ref: library/pathlib pathlib PurePath stem9541883
Ref: 2acf9541883
Ref: library/pathlib pathlib PurePath as_posix9542200
Ref: 2ad09542200
Ref: library/pathlib pathlib PurePath is_absolute9542457
Ref: 19d89542457
Ref: library/pathlib pathlib PurePath is_relative_to9543048
Ref: 2fc9543048
Ref: library/pathlib pathlib PurePath is_reserved9543817
Ref: 3289543817
Ref: library/pathlib pathlib PurePath joinpath9544465
Ref: 2ad19544465
Ref: library/pathlib pathlib PurePath full_match9545046
Ref: 52f9545046
Ref: library/pathlib pathlib PurePath match9546077
Ref: 6c89546077
Ref: library/pathlib pathlib PurePath relative_to9547051
Ref: 2fb9547051
Ref: library/pathlib pathlib PurePath with_name9549389
Ref: 19a79549389
Ref: library/pathlib pathlib PurePath with_stem9550109
Ref: 19189550109
Ref: library/pathlib pathlib PurePath with_suffix9551138
Ref: 18a99551138
Ref: library/pathlib pathlib PurePath with_segments9552013
Ref: 6c39552013
Ref: Métodos e propriedades-Footnote-19552970
Node: Caminhos concretos9553062
Ref: library/pathlib concrete-paths9553234
Ref: 2ac09553234
Ref: library/pathlib id29553234
Ref: 2ad39553234
Ref: library/pathlib pathlib Path9553551
Ref: 2659553551
Ref: library/pathlib pathlib PosixPath9553950
Ref: 2ad49553950
Ref: library/pathlib pathlib WindowsPath9554494
Ref: 2ac19554494
Node: Analisando e gerando URIs9556155
Ref: library/pathlib parsing-and-generating-uris9556276
Ref: 2ad59556276
Ref: library/pathlib pathlib Path from_uri9556602
Ref: 52e9556602
Ref: library/pathlib pathlib Path as_uri9558122
Ref: 31a9558122
Ref: Analisando e gerando URIs-Footnote-19558785
Node: Expandindo e resolvendo caminhos9558844
Ref: library/pathlib expanding-and-resolving-paths9559010
Ref: 2ad79559010
Ref: library/pathlib pathlib Path home9559097
Ref: 10389559097
Ref: library/pathlib pathlib Path expanduser9559508
Ref: 10379559508
Ref: library/pathlib pathlib Path cwd9559954
Ref: 19d79559954
Ref: library/pathlib pathlib Path absolute9560190
Ref: 19639560190
Ref: library/pathlib pathlib Path resolve9560506
Ref: 19ac9560506
Ref: library/pathlib pathlib Path readlink9561747
Ref: b0f9561747
Node: Consultando tipo de arquivo e status9562272
Ref: library/pathlib querying-file-type-and-status9562440
Ref: 2ad89562440
Ref: library/pathlib pathlib Path stat9563390
Ref: a1a9563390
Ref: library/pathlib pathlib Path lstat9564044
Ref: 2ad99564044
Ref: library/pathlib pathlib Path exists9564235
Ref: c019564235
Ref: library/pathlib pathlib Path is_file9565001
Ref: 5339565001
Ref: library/pathlib pathlib Path is_dir9565566
Ref: 5349565566
Ref: library/pathlib pathlib Path is_symlink9566146
Ref: c039566146
Ref: library/pathlib pathlib Path is_junction9566498
Ref: 6c79566498
Ref: library/pathlib pathlib Path is_mount9566747
Ref: c029566747
Ref: library/pathlib pathlib Path is_socket9567555
Ref: c079567555
Ref: library/pathlib pathlib Path is_fifo9567868
Ref: c069567868
Ref: library/pathlib pathlib Path is_block_device9568163
Ref: c049568163
Ref: library/pathlib pathlib Path is_char_device9568487
Ref: c059568487
Ref: library/pathlib pathlib Path samefile9568836
Ref: 10359568836
Ref: library/pathlib pathlib Path info9569432
Ref: 26a9569432
Node: Lendo e escrevendo arquivos9570833
Ref: library/pathlib reading-and-writing-files9570986
Ref: 2ada9570986
Ref: library/pathlib pathlib Path open9571063
Ref: 2adb9571063
Ref: library/pathlib pathlib Path read_text9571414
Ref: 103a9571414
Ref: library/pathlib pathlib Path read_bytes9571981
Ref: 2de9571981
Ref: library/pathlib pathlib Path write_text9572306
Ref: 10399572306
Ref: library/pathlib pathlib Path write_bytes9572910
Ref: 103b9572910
Node: Lendo diretórios9573303
Ref: library/pathlib reading-directories9573450
Ref: 2adc9573450
Ref: library/pathlib pathlib Path iterdir9573506
Ref: 26d9573506
Ref: library/pathlib pathlib Path glob9574399
Ref: 5319574399
Ref: library/pathlib pathlib Path rglob9576580
Ref: 5329576580
Ref: library/pathlib pathlib Path walk9577366
Ref: 6c49577366
Node: Criando arquivos e diretórios9582745
Ref: library/pathlib creating-files-and-directories9582893
Ref: 2ade9582893
Ref: library/pathlib pathlib Path touch9582975
Ref: 2adf9582975
Ref: library/pathlib pathlib Path mkdir9583645
Ref: 10369583645
Ref: library/pathlib pathlib Path symlink_to9584805
Ref: a199584805
Ref: library/pathlib pathlib Path hardlink_to9585976
Ref: a189585976
Node: Copiando movendo e excluindo9586450
Ref: library/pathlib copying-moving-and-deleting9586606
Ref: 2ae09586606
Ref: library/pathlib pathlib Path copy9586687
Ref: 2669586687
Ref: library/pathlib pathlib Path copy_into9588067
Ref: 2679588067
Ref: library/pathlib pathlib Path rename9588475
Ref: 17f59588475
Ref: library/pathlib pathlib Path replace9589581
Ref: 2ae19589581
Ref: library/pathlib pathlib Path move9590172
Ref: 2689590172
Ref: library/pathlib pathlib Path move_into9590976
Ref: 2699590976
Ref: library/pathlib pathlib Path unlink9591245
Ref: 1c8c9591245
Ref: library/pathlib pathlib Path rmdir9591796
Ref: 2add9591796
Node: Permissões e propriedade9591886
Ref: library/pathlib permissions-and-ownership9592003
Ref: 2ae29592003
Ref: library/pathlib pathlib Path owner9592075
Ref: 5359592075
Ref: library/pathlib pathlib Path group9592765
Ref: 5369592765
Ref: library/pathlib pathlib Path chmod9593451
Ref: a1b9593451
Ref: library/pathlib pathlib Path lchmod9594067
Ref: 2ae39594067
Node: Linguagem de padrões9594258
Ref: library/pathlib pathlib-pattern-language9594447
Ref: 2ad29594447
Ref: library/pathlib pattern-language9594447
Ref: 2ae49594447
Node: Comparação com o módulo glob9597262
Ref: library/pathlib comparison-to-the-glob-module9597474
Ref: 2ae59597474
Node: Comparação com os módulos os e os path9598992
Ref: library/pathlib comparison-to-the-os-and-os-path-modules9599193
Ref: 2ae69599193
Node: Ferramentas correspondentes9601586
Ref: library/pathlib corresponding-tools9601691
Ref: 2ae79601691
Ref: Ferramentas correspondentes-Footnote-19606969
Ref: Ferramentas correspondentes-Footnote-29607322
Ref: Ferramentas correspondentes-Footnote-39607515
Ref: Ferramentas correspondentes-Footnote-49607758
Node: Protocolos9608005
Ref: library/pathlib module-pathlib types9608166
Ref: a99608166
Ref: library/pathlib protocols9608166
Ref: 2aea9608166
Ref: library/pathlib pathlib types PathInfo9608326
Ref: 26b9608326
Ref: library/pathlib pathlib types PathInfo exists9608525
Ref: 2aeb9608525
Ref: library/pathlib pathlib types PathInfo is_dir9608900
Ref: 2aec9608900
Ref: library/pathlib pathlib types PathInfo is_file9609470
Ref: 2aed9609470
Ref: library/pathlib pathlib types PathInfo is_symlink9610083
Ref: 2aee9610083
Node: os path — Manipulações comuns de nomes de caminhos9610329
Ref: library/os path doc9610574
Ref: 2aef9610574
Ref: library/os path module-os path9610574
Ref: a69610574
Ref: library/os path no-color9610574
Ref: 2af09610574
Ref: library/os path os-path-common-pathname-manipulations9610574
Ref: 2af19610574
Ref: library/os path os path abspath9612835
Ref: 15169612835
Ref: library/os path os path basename9613205
Ref: 2ae99613205
Ref: library/os path os path commonpath9613729
Ref: 10329613729
Ref: library/os path os path commonprefix9614374
Ref: 10339614374
Ref: library/os path os path dirname9615084
Ref: 2ae89615084
Ref: library/os path os path exists9615380
Ref: bf99615380
Ref: library/os path os path lexists9616050
Ref: bfa9616050
Ref: library/os path os path expanduser9616369
Ref: bff9616369
Ref: library/os path os path expandvars9617526
Ref: 15ca9617526
Ref: library/os path os path getatime9618057
Ref: 2af39618057
Ref: library/os path os path getmtime9618373
Ref: 2af49618373
Ref: library/os path os path getctime9618780
Ref: 2af59618780
Ref: library/os path os path getsize9619306
Ref: 2af69619306
Ref: library/os path os path isabs9619559
Ref: 52b9619559
Ref: library/os path os path isfile9620069
Ref: bfc9620069
Ref: library/os path os path isdir9620406
Ref: bfb9620406
Ref: library/os path os path isjunction9620738
Ref: 6bf9620738
Ref: library/os path os path islink9621024
Ref: bf79621024
Ref: library/os path os path ismount9621379
Ref: bfd9621379
Ref: library/os path os path isdevdrive9622537
Ref: 19029622537
Ref: library/os path os path isreserved9623504
Ref: 3299623504
Ref: library/os path os path join9624503
Ref: 18ed9624503
Ref: library/os path os path normcase9625762
Ref: 2af79625762
Ref: library/os path os path normpath9626186
Ref: 15159626186
Ref: library/os path os path realpath9627202
Ref: 2619627202
Ref: library/os path os path ALLOW_MISSING9629663
Ref: 2629629663
Ref: library/os path os path relpath9629814
Ref: 6c69629814
Ref: library/os path os path samefile9630386
Ref: 11679630386
Ref: library/os path os path sameopenfile9630985
Ref: 2af99630985
Ref: library/os path os path samestat9631287
Ref: 11669631287
Ref: library/os path os path split9631768
Ref: 2af29631768
Ref: library/os path os path splitdrive9632624
Ref: de39632624
Ref: library/os path os path splitroot9633551
Ref: 6c09633551
Ref: library/os path os path splitext9634913
Ref: 18ac9634913
Ref: library/os path os path supports_unicode_filenames9635909
Ref: 167c9635909
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-19636150
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-29636221
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-39636290
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-49636356
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-59636411
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-69636503
Node: stat — Interpretando resultados de stat9636595
Ref: library/stat doc9636827
Ref: 2afa9636827
Ref: library/stat module-stat9636827
Ref: d69636827
Ref: library/stat no-color9636827
Ref: 2afb9636827
Ref: library/stat stat-interpreting-stat-results9636827
Ref: 2afc9636827
Ref: library/stat stat S_ISDIR9637529
Ref: 2afd9637529
Ref: library/stat stat S_ISCHR9637628
Ref: 2afe9637628
Ref: library/stat stat S_ISBLK9637766
Ref: 2aff9637766
Ref: library/stat stat S_ISREG9637900
Ref: 2b009637900
Ref: library/stat stat S_ISFIFO9638004
Ref: 2b019638004
Ref: library/stat stat S_ISLNK9638126
Ref: 2b029638126
Ref: library/stat stat S_ISSOCK9638230
Ref: 2b039638230
Ref: library/stat stat S_ISDOOR9638327
Ref: 1c629638327
Ref: library/stat stat S_ISPORT9638456
Ref: 1c639638456
Ref: library/stat stat S_ISWHT9638596
Ref: 1c649638596
Ref: library/stat stat S_IMODE9638820
Ref: 2b049638820
Ref: library/stat stat S_IFMT9639098
Ref: 2b059639098
Ref: library/stat stat filemode9640733
Ref: 13479640733
Ref: library/stat stat ST_MODE9641181
Ref: 11b09641181
Ref: library/stat stat ST_INO9641240
Ref: 2b069641240
Ref: library/stat stat ST_DEV9641287
Ref: 2b079641287
Ref: library/stat stat ST_NLINK9641351
Ref: 2b089641351
Ref: library/stat stat ST_UID9641413
Ref: 2b099641413
Ref: library/stat stat ST_GID9641481
Ref: 2b0a9641481
Ref: library/stat stat ST_SIZE9641546
Ref: 2b0b9641546
Ref: library/stat stat ST_ATIME9641682
Ref: 2b0c9641682
Ref: library/stat stat ST_MTIME9641737
Ref: 2b0d9641737
Ref: library/stat stat ST_CTIME9641799
Ref: 2b0e9641799
Ref: library/stat stat S_IFSOCK9642967
Ref: 2b0f9642967
Ref: library/stat stat S_IFLNK9643007
Ref: 2b109643007
Ref: library/stat stat S_IFREG9643054
Ref: 2b119643054
Ref: library/stat stat S_IFBLK9643101
Ref: 2b129643101
Ref: library/stat stat S_IFDIR9643153
Ref: 2b139643153
Ref: library/stat stat S_IFCHR9643195
Ref: 2b149643195
Ref: library/stat stat S_IFIFO9643252
Ref: 2b159643252
Ref: library/stat stat S_IFDOOR9643288
Ref: 11b19643288
Ref: library/stat stat S_IFPORT9643359
Ref: 11b29643359
Ref: library/stat stat S_IFWHT9643441
Ref: 11b39643441
Ref: library/stat stat S_ISUID9643794
Ref: 2b169643794
Ref: library/stat stat S_ISGID9643845
Ref: 2b179643845
Ref: library/stat stat S_ISVTX9644463
Ref: 2b1a9644463
Ref: library/stat stat S_IRWXU9644745
Ref: 2b1b9644745
Ref: library/stat stat S_IRUSR9644830
Ref: 2b1c9644830
Ref: library/stat stat S_IWUSR9644901
Ref: 2b1d9644901
Ref: library/stat stat S_IXUSR9644972
Ref: 2b1e9644972
Ref: library/stat stat S_IRWXG9645046
Ref: 2b1f9645046
Ref: library/stat stat S_IRGRP9645112
Ref: 2b209645112
Ref: library/stat stat S_IWGRP9645175
Ref: 2b219645175
Ref: library/stat stat S_IXGRP9645238
Ref: 2b189645238
Ref: library/stat stat S_IRWXO9645304
Ref: 2b229645304
Ref: library/stat stat S_IROTH9645389
Ref: 2b239645389
Ref: library/stat stat S_IWOTH9645454
Ref: 2b249645454
Ref: library/stat stat S_IXOTH9645519
Ref: 2b259645519
Ref: library/stat stat S_ENFMT9645587
Ref: 2b199645587
Ref: library/stat stat S_IREAD9645868
Ref: 2b269645868
Ref: library/stat stat S_IWRITE9645942
Ref: 2b279645942
Ref: library/stat stat S_IEXEC9646017
Ref: 2b289646017
Ref: library/stat stat UF_SETTABLE9646187
Ref: 2b299646187
Ref: library/stat stat UF_NODUMP9646304
Ref: 2b2a9646304
Ref: library/stat stat UF_IMMUTABLE9646360
Ref: 2b2b9646360
Ref: library/stat stat UF_APPEND9646429
Ref: 2b2c9646429
Ref: library/stat stat UF_OPAQUE9646500
Ref: 2b2d9646500
Ref: library/stat stat UF_NOUNLINK9646611
Ref: 2b2e9646611
Ref: library/stat stat UF_COMPRESSED9646693
Ref: 2b2f9646693
Ref: library/stat stat UF_TRACKED9646779
Ref: 2b309646779
Ref: library/stat stat UF_DATAVAULT9646893
Ref: 2b319646893
Ref: library/stat stat UF_HIDDEN9647038
Ref: 2b329647038
Ref: library/stat stat SF_SETTABLE9647128
Ref: 2b339647128
Ref: library/stat stat SF_SUPPORTED9647246
Ref: 2b349647246
Ref: library/stat stat SF_SYNTHETIC9647406
Ref: 2b359647406
Ref: library/stat stat SF_ARCHIVED9647593
Ref: 2b369647593
Ref: library/stat stat SF_IMMUTABLE9647662
Ref: 2b379647662
Ref: library/stat stat SF_APPEND9647731
Ref: 2b389647731
Ref: library/stat stat SF_RESTRICTED9647802
Ref: 2b399647802
Ref: library/stat stat SF_NOUNLINK9647936
Ref: 2b3a9647936
Ref: library/stat stat SF_SNAPSHOT9648018
Ref: 2b3b9648018
Ref: library/stat stat SF_FIRMLINK9648099
Ref: 2b3c9648099
Ref: library/stat stat SF_DATALESS9648207
Ref: 2b3d9648207
Ref: library/stat stat FILE_ATTRIBUTE_ARCHIVE9648713
Ref: 2b3e9648713
Ref: library/stat stat FILE_ATTRIBUTE_COMPRESSED9648751
Ref: 2b3f9648751
Ref: library/stat stat FILE_ATTRIBUTE_DEVICE9648792
Ref: 2b409648792
Ref: library/stat stat FILE_ATTRIBUTE_DIRECTORY9648829
Ref: 2b419648829
Ref: library/stat stat FILE_ATTRIBUTE_ENCRYPTED9648869
Ref: 2b429648869
Ref: library/stat stat FILE_ATTRIBUTE_HIDDEN9648909
Ref: 2b439648909
Ref: library/stat stat FILE_ATTRIBUTE_INTEGRITY_STREAM9648946
Ref: 2b449648946
Ref: library/stat stat FILE_ATTRIBUTE_NORMAL9648993
Ref: 2b459648993
Ref: library/stat stat FILE_ATTRIBUTE_NOT_CONTENT_INDEXED9649030
Ref: 2b469649030
Ref: library/stat stat FILE_ATTRIBUTE_NO_SCRUB_DATA9649080
Ref: 2b479649080
Ref: library/stat stat FILE_ATTRIBUTE_OFFLINE9649124
Ref: 2b489649124
Ref: library/stat stat FILE_ATTRIBUTE_READONLY9649162
Ref: 2b499649162
Ref: library/stat stat FILE_ATTRIBUTE_REPARSE_POINT9649201
Ref: 2b4a9649201
Ref: library/stat stat FILE_ATTRIBUTE_SPARSE_FILE9649245
Ref: 2b4b9649245
Ref: library/stat stat FILE_ATTRIBUTE_SYSTEM9649287
Ref: 2b4c9649287
Ref: library/stat stat FILE_ATTRIBUTE_TEMPORARY9649324
Ref: 2b4d9649324
Ref: library/stat stat FILE_ATTRIBUTE_VIRTUAL9649364
Ref: 2b4e9649364
Ref: library/stat stat IO_REPARSE_TAG_SYMLINK9649655
Ref: 2b4f9649655
Ref: library/stat stat IO_REPARSE_TAG_MOUNT_POINT9649693
Ref: 2b509649693
Ref: library/stat stat IO_REPARSE_TAG_APPEXECLINK9649735
Ref: 2b519649735
Ref: stat — Interpretando resultados de stat-Footnote-19649847
Ref: stat — Interpretando resultados de stat-Footnote-29649911
Ref: stat — Interpretando resultados de stat-Footnote-39649958
Node: filecmp — Comparações de arquivos e diretórios9650038
Ref: library/filecmp doc9650269
Ref: 2b529650269
Ref: library/filecmp filecmp-file-and-directory-comparisons9650269
Ref: 2b539650269
Ref: library/filecmp module-filecmp9650269
Ref: 5e9650269
Ref: library/filecmp no-color9650269
Ref: 2b549650269
Ref: library/filecmp filecmp cmp9650766
Ref: 19199650766
Ref: library/filecmp filecmp cmpfiles9651675
Ref: 18989651675
Ref: library/filecmp filecmp clear_cache9652652
Ref: 11349652652
Ref: filecmp — Comparações de arquivos e diretórios-Footnote-19652999
Node: A classe dircmp9653066
Ref: library/filecmp dircmp-objects9653169
Ref: 2b559653169
Ref: library/filecmp the-dircmp-class9653169
Ref: 2b569653169
Ref: library/filecmp filecmp dircmp9653228
Ref: 11369653228
Ref: library/filecmp filecmp dircmp report9653967
Ref: 2b579653967
Ref: library/filecmp filecmp dircmp report_partial_closure9654087
Ref: 2b589654087
Ref: library/filecmp filecmp dircmp report_full_closure9654227
Ref: 2b599654227
Ref: library/filecmp filecmp dircmp left9654817
Ref: 2b5a9654817
Ref: library/filecmp filecmp dircmp right9654871
Ref: 2b5b9654871
Ref: library/filecmp filecmp dircmp left_list9654926
Ref: 2b5c9654926
Ref: library/filecmp filecmp dircmp right_list9655044
Ref: 2b5d9655044
Ref: library/filecmp filecmp dircmp common9655163
Ref: 2b5e9655163
Ref: library/filecmp filecmp dircmp left_only9655241
Ref: 2b5f9655241
Ref: library/filecmp filecmp dircmp right_only9655323
Ref: 2b609655323
Ref: library/filecmp filecmp dircmp common_dirs9655406
Ref: 2b619655406
Ref: library/filecmp filecmp dircmp common_files9655478
Ref: 2b629655478
Ref: library/filecmp filecmp dircmp common_funny9655545
Ref: 2b639655545
Ref: library/filecmp filecmp dircmp same_files9655738
Ref: 2b649655738
Ref: library/filecmp filecmp dircmp diff_files9655890
Ref: 2b659655890
Ref: library/filecmp filecmp dircmp funny_files9656065
Ref: 2b669656065
Ref: library/filecmp filecmp dircmp subdirs9656185
Ref: 1bbf9656185
Ref: library/filecmp filecmp DEFAULT_IGNORES9656699
Ref: 11359656699
Node: tempfile — Generate temporary files and directories9657408
Ref: library/tempfile doc9657661
Ref: 2b679657661
Ref: library/tempfile module-tempfile9657661
Ref: e69657661
Ref: library/tempfile no-color9657661
Ref: 2b689657661
Ref: library/tempfile tempfile-generate-temporary-files-and-directories9657661
Ref: 2b699657661
Ref: library/tempfile tempfile TemporaryFile9658829
Ref: 2b6a9658829
Ref: library/tempfile tempfile NamedTemporaryFile9661026
Ref: 6e29661026
Ref: library/tempfile tempfile SpooledTemporaryFile9664846
Ref: 8979664846
Ref: library/tempfile tempfile SpooledTemporaryFile rollover9665369
Ref: 2b6e9665369
Ref: library/tempfile tempfile TemporaryDirectory9666346
Ref: 14309666346
Ref: library/tempfile tempfile TemporaryDirectory name9666874
Ref: 2b6f9666874
Ref: library/tempfile tempfile TemporaryDirectory cleanup9667228
Ref: 2b709667228
Ref: library/tempfile tempfile mkstemp9668506
Ref: 2b6b9668506
Ref: library/tempfile tempfile mkdtemp9671399
Ref: 5279671399
Ref: library/tempfile tempfile gettempdir9672645
Ref: 1b7c9672645
Ref: library/tempfile tempfile gettempdirb9673846
Ref: 1b7d9673846
Ref: library/tempfile tempfile gettempprefix9673992
Ref: 2b729673992
Ref: library/tempfile tempfile gettempprefixb9674151
Ref: 2b739674151
Ref: library/tempfile tempfile tempdir9674735
Ref: 1b7b9674735
Ref: tempfile — Generate temporary files and directories-Footnote-19675850
Node: Exemplos<5>9675918
Ref: library/tempfile examples9676062
Ref: 2b749676062
Ref: library/tempfile tempfile-examples9676062
Ref: 2b6c9676062
Node: Deprecated functions and variables9677457
Ref: library/tempfile deprecated-functions-and-variables9677601
Ref: 2b759677601
Ref: library/tempfile tempfile-mktemp-deprecated9677601
Ref: 2b769677601
Ref: library/tempfile tempfile mktemp9678231
Ref: 1b319678231
Node: glob — Expansão de padrão de nome de arquivo no estilo Unix9679358
Ref: library/glob doc9679624
Ref: 2b779679624
Ref: library/glob glob-unix-style-pathname-pattern-expansion9679624
Ref: 2b789679624
Ref: library/glob module-glob9679624
Ref: 689679624
Ref: library/glob no-color9679624
Ref: 2b799679624
Ref: library/glob glob glob9680909
Ref: 5999680909
Ref: library/glob glob iglob9683457
Ref: 9fe9683457
Ref: library/glob glob escape9684416
Ref: 113b9684416
Ref: library/glob glob translate9684898
Ref: 4f59684898
Ref: glob — Expansão de padrão de nome de arquivo no estilo Unix-Footnote-19686654
Node: Exemplos<6>9686718
Ref: library/glob examples9686829
Ref: 2b7a9686829
Node: fnmatch — Correspondência de padrões de nome de arquivo Unix9688000
Ref: library/fnmatch doc9688262
Ref: 2b7b9688262
Ref: library/fnmatch fnmatch-unix-filename-pattern-matching9688262
Ref: 2b7c9688262
Ref: library/fnmatch module-fnmatch9688262
Ref: 609688262
Ref: library/fnmatch no-color9688262
Ref: 2b7d9688262
Ref: library/fnmatch fnmatch fnmatch9690432
Ref: 1b439690432
Ref: library/fnmatch fnmatch fnmatchcase9691209
Ref: 1b449691209
Ref: library/fnmatch fnmatch filter9691503
Ref: 1b459691503
Ref: library/fnmatch fnmatch filterfalse9691824
Ref: 2109691824
Ref: library/fnmatch fnmatch translate9692193
Ref: 17b89692193
Ref: fnmatch — Correspondência de padrões de nome de arquivo Unix-Footnote-19692849
Node: linecache — Acesso aleatório a linhas de texto9692916
Ref: library/linecache doc9693163
Ref: 2b7e9693163
Ref: library/linecache linecache-random-access-to-text-lines9693163
Ref: 2b7f9693163
Ref: library/linecache module-linecache9693163
Ref: 899693163
Ref: library/linecache no-color9693163
Ref: 2b809693163
Ref: library/linecache linecache getline9694083
Ref: 23f9694083
Ref: library/linecache linecache clearcache9695200
Ref: 2b839695200
Ref: library/linecache linecache checkcache9695383
Ref: 18439695383
Ref: library/linecache linecache lazycache9695673
Ref: 10199695673
Ref: linecache — Acesso aleatório a linhas de texto-Footnote-19696276
Ref: linecache — Acesso aleatório a linhas de texto-Footnote-29696345
Node: shutil — Operações de arquivo de alto nível9696387
Ref: library/shutil doc9696561
Ref: 2b849696561
Ref: library/shutil module-shutil9696561
Ref: ca9696561
Ref: library/shutil no-color9696561
Ref: 2b859696561
Ref: library/shutil shutil-high-level-file-operations9696561
Ref: 2b869696561
Ref: shutil — Operações de arquivo de alto nível-Footnote-19697857
Node: Operações de diretório e arquivos9697923
Ref: library/shutil directory-and-files-operations9698080
Ref: 2b879698080
Ref: library/shutil file-operations9698080
Ref: 2b889698080
Ref: library/shutil shutil copyfileobj9698170
Ref: c469698170
Ref: library/shutil shutil copyfile9699270
Ref: c439699270
Ref: library/shutil shutil SpecialFileError9701124
Ref: 15179701124
Ref: library/shutil shutil SameFileError9701322
Ref: 11949701322
Ref: library/shutil shutil copymode9701504
Ref: 19619701504
Ref: library/shutil shutil copystat9702482
Ref: 132a9702482
Ref: library/shutil shutil copy9704830
Ref: c449704830
Ref: library/shutil shutil copy29706509
Ref: c459706509
Ref: library/shutil shutil ignore_patterns9708261
Ref: 2b8a9708261
Ref: library/shutil shutil copytree9708595
Ref: c149708595
Ref: library/shutil shutil rmtree9712414
Ref: 3539712414
Ref: library/shutil shutil rmtree avoids_symlink_attacks9715554
Ref: 2b8b9715554
Ref: library/shutil shutil move9715957
Ref: 10499715957
Ref: library/shutil shutil disk_usage9718188
Ref: 13299718188
Ref: library/shutil shutil chown9718978
Ref: 5429718978
Ref: library/shutil shutil which9719662
Ref: 6d09719662
Ref: library/shutil shutil Error9722447
Ref: 11939722447
Node: Operações de cópia eficientes dependentes da plataforma9722839
Ref: library/shutil platform-dependent-efficient-copy-operations9722998
Ref: 2b8d9722998
Ref: library/shutil shutil-platform-dependent-efficient-copy-operations9722998
Ref: c479722998
Ref: Operações de cópia eficientes dependentes da plataforma-Footnote-19724624
Ref: Operações de cópia eficientes dependentes da plataforma-Footnote-29724689
Node: Exemplo de copytree9724737
Ref: library/shutil copytree-example9724919
Ref: 2b8e9724919
Ref: library/shutil shutil-copytree-example9724919
Ref: 2b8f9724919
Node: exemplo rmtree9725594
Ref: library/shutil rmtree-example9725709
Ref: 2b909725709
Ref: library/shutil shutil-rmtree-example9725709
Ref: 2b8c9725709
Node: Operações de arquivamento9726295
Ref: library/shutil archiving-operations9726504
Ref: 14149726504
Ref: library/shutil id19726504
Ref: 2b919726504
Ref: library/shutil shutil make_archive9726845
Ref: 6cf9726845
Ref: library/shutil shutil get_archive_formats9729486
Ref: 2b949729486
Ref: library/shutil shutil register_archive_format9730589
Ref: 2b939730589
Ref: library/shutil shutil unregister_archive_format9731976
Ref: 2b959731976
Ref: library/shutil shutil unpack_archive9732105
Ref: 68b9732105
Ref: library/shutil shutil register_unpack_format9734343
Ref: 2b969734343
Ref: library/shutil shutil unregister_unpack_format9735297
Ref: 2b999735297
Ref: library/shutil shutil get_unpack_formats9735446
Ref: 2b989735446
Ref: Operações de arquivamento-Footnote-19736677
Node: Exemplo de arquivo9736719
Ref: library/shutil archiving-example9736846
Ref: 2b9a9736846
Ref: library/shutil shutil-archiving-example9736846
Ref: 2b9b9736846
Node: Exemplo de arquivamento com base_dir9737951
Ref: library/shutil archiving-example-with-base-dir9738078
Ref: 2b9c9738078
Ref: library/shutil shutil-archiving-example-with-basedir9738078
Ref: 2b929738078
Node: Consultando o tamanho do terminal de saída9739197
Ref: library/shutil querying-the-size-of-the-output-terminal9739361
Ref: 2b9d9739361
Ref: library/shutil shutil get_terminal_size9739467
Ref: 12ff9739467
Ref: Consultando o tamanho do terminal de saída-Footnote-19741239
Node: Persistência de Dados9741322
Ref: library/persistence doc9741495
Ref: 2ba09741495
Ref: library/persistence data-persistence9741495
Ref: 2ba19741495
Ref: library/persistence no-color9741495
Ref: 2ba29741495
Ref: library/persistence persistence9741495
Ref: 2ba39741495
Node: pickle — Serialização de objetos Python9742483
Ref: library/pickle doc9742642
Ref: 2ba49742642
Ref: library/pickle module-pickle9742642
Ref: ab9742642
Ref: library/pickle pickle-python-object-serialization9742642
Ref: 2ba59742642
Ref: pickle — Serialização de objetos Python-Footnote-19744884
Ref: pickle — Serialização de objetos Python-Footnote-29744950
Node: Relacionamento com outros módulos Python9745010
Ref: library/pickle relationship-to-other-python-modules9745165
Ref: 2ba79745165
Node: Comparação com marshal9745332
Ref: library/pickle comparison-with-marshal9745464
Ref: 2ba89745464
Node: Comparação com json9748015
Ref: library/pickle comparison-with-json9748147
Ref: 2ba69748147
Ref: library/pickle id29748147
Ref: 2ba99748147
Ref: Comparação com json-Footnote-19749464
Node: Formato de fluxo de dados9749489
Ref: library/pickle data-stream-format9749673
Ref: 2bab9749673
Ref: library/pickle pickle-protocols9749673
Ref: 27a9749673
Ref: Formato de fluxo de dados-Footnote-19753172
Ref: Formato de fluxo de dados-Footnote-29753214
Ref: Formato de fluxo de dados-Footnote-39753256
Node: Interface do módulo9753298
Ref: library/pickle module-interface9753496
Ref: 2bae9753496
Ref: library/pickle pickle HIGHEST_PROTOCOL9753987
Ref: 16939753987
Ref: library/pickle pickle DEFAULT_PROTOCOL9754275
Ref: a259754275
Ref: library/pickle pickle dump9755093
Ref: 2baf9755093
Ref: library/pickle pickle dumps9755625
Ref: 16929755625
Ref: library/pickle pickle load9756110
Ref: f009756110
Ref: library/pickle pickle loads9756931
Ref: f019756931
Ref: library/pickle pickle PickleError9757730
Ref: 2bb09757730
Ref: library/pickle pickle PicklingError9757882
Ref: 18959757882
Ref: library/pickle pickle UnpicklingError9758233
Ref: 2bb29758233
Ref: library/pickle pickle Pickler9758791
Ref: c099758791
Ref: library/pickle pickle Pickler dump9760541
Ref: 1cdc9760541
Ref: library/pickle pickle Pickler persistent_id9760699
Ref: 18629760699
Ref: library/pickle pickle Pickler dispatch_table9761590
Ref: 131e9761590
Ref: library/pickle pickle Pickler reducer_override9762862
Ref: c0a9762862
Ref: library/pickle pickle Pickler fast9763558
Ref: 2bb89763558
Ref: library/pickle pickle Pickler clear_memo9764134
Ref: 2bba9764134
Ref: library/pickle pickle Unpickler9764484
Ref: 195e9764484
Ref: library/pickle pickle Unpickler load9766847
Ref: 2bbb9766847
Ref: library/pickle pickle Unpickler persistent_load9767191
Ref: 186b9767191
Ref: library/pickle pickle Unpickler find_class9767802
Ref: 2bbc9767802
Ref: library/pickle pickle PickleBuffer9768554
Ref: 1a9d9768554
Ref: library/pickle pickle PickleBuffer raw9769249
Ref: 2bbe9769249
Ref: library/pickle pickle PickleBuffer release9769601
Ref: 2bbf9769601
Ref: Interface do módulo-Footnote-19769739
Node: O que pode ser serializado e desserializado com pickle?9769781
Ref: library/pickle pickle-picklable9770000
Ref: 2bb19770000
Ref: library/pickle what-can-be-pickled-and-unpickled9770000
Ref: 2bc09770000
Ref: O que pode ser serializado e desserializado com pickle?-Footnote-19773308
Ref: O que pode ser serializado e desserializado com pickle?-Footnote-29773477
Node: Serializando com pickle instâncias de classes9773618
Ref: library/pickle pickle-inst9773878
Ref: 2baa9773878
Ref: library/pickle pickling-class-instances9773878
Ref: 2bc19773878
Ref: library/pickle object __getnewargs_ex__9775007
Ref: 2bc29775007
Ref: library/pickle object __getnewargs__9775919
Ref: fc89775919
Ref: library/pickle object __getstate__9776548
Ref: 7e69776548
Ref: library/pickle object __setstate__9778055
Ref: bbd9778055
Ref: library/pickle object __reduce__9780190
Ref: bbc9780190
Ref: library/pickle object __reduce_ex__9783259
Ref: 18bf9783259
Ref: Serializando com pickle instâncias de classes-Footnote-19783987
Node: Persistência de objetos externos9784091
Ref: library/pickle persistence-of-external-objects9784235
Ref: 2bc49784235
Ref: library/pickle pickle-persistent9784235
Ref: 2bb49784235
Ref: Persistência de objetos externos-Footnote-19789238
Node: Tabelas de despacho9789556
Ref: library/pickle dispatch-tables9789744
Ref: 2bc59789744
Ref: library/pickle pickle-dispatch9789744
Ref: 2bb69789744
Node: Manipulação de objetos com estado9791131
Ref: library/pickle handling-stateful-objects9791277
Ref: 2bc69791277
Ref: library/pickle pickle-state9791277
Ref: 2bc39791277
Node: Redução personalizada para tipos funções e outros objetos9793744
Ref: library/pickle custom-reduction-for-types-functions-and-other-objects9793970
Ref: 2bc79793970
Ref: library/pickle reducer-override9793970
Ref: 2bb79793970
Node: Buffers fora da banda9796204
Ref: library/pickle out-of-band-buffers9796404
Ref: 2bc89796404
Ref: library/pickle pickle-oob9796404
Ref: 2bb39796404
Node: API de provedor9797337
Ref: library/pickle provider-api9797436
Ref: 2bc99797436
Node: API de consumidor9798143
Ref: library/pickle consumer-api9798261
Ref: 2bca9798261
Node: Exemplo<4>9799658
Ref: library/pickle example9799752
Ref: 2bcb9799752
Ref: Exemplo<4>-Footnote-19802330
Node: Restringindo globais9802372
Ref: library/pickle pickle-restrict9802524
Ref: 2bbd9802524
Ref: library/pickle restricting-globals9802524
Ref: 2bcc9802524
Node: Desempenho<2>9805453
Ref: library/pickle performance9805595
Ref: 2bcd9805595
Node: Exemplos<7>9805886
Ref: library/pickle examples9806037
Ref: 2bce9806037
Ref: library/pickle pickle-example9806037
Ref: 2bcf9806037
Node: Interface de linha de comando9806881
Ref: library/pickle command-line-interface9807010
Ref: 2bd09807010
Ref: library/pickle pickle-cli9807010
Ref: 2bd19807010
Ref: library/pickle cmdoption-pickle-arg-pickle_file9807557
Ref: 2bd39807557
Node: copyreg — Registra funções de suporte pickle9808162
Ref: library/copyreg doc9808366
Ref: 2bd49808366
Ref: library/copyreg copyreg-register-pickle-support-functions9808366
Ref: 2bd59808366
Ref: library/copyreg module-copyreg9808366
Ref: 2a9808366
Ref: library/copyreg no-color9808366
Ref: 2bd69808366
Ref: library/copyreg copyreg constructor9809010
Ref: 2bd79809010
Ref: library/copyreg copyreg pickle9809233
Ref: 2bb59809233
Ref: copyreg — Registra funções de suporte pickle-Footnote-19809989
Node: Exemplo<5>9810056
Ref: library/copyreg example9810151
Ref: 2bd89810151
Node: shelve — Python object persistence9810698
Ref: library/shelve doc9810911
Ref: 2bd99810911
Ref: library/shelve module-shelve9810911
Ref: c89810911
Ref: library/shelve no-color9810911
Ref: 2bda9810911
Ref: library/shelve shelve-python-object-persistence9810911
Ref: 2bdb9810911
Ref: library/shelve shelve open9811498
Ref: 19b09811498
Ref: library/shelve shelve-security9813562
Ref: 2bdf9813562
Ref: library/shelve shelve Shelf sync9814059
Ref: 2bdd9814059
Ref: library/shelve shelve Shelf close9814381
Ref: 2bde9814381
Ref: shelve — Python object persistence-Footnote-19814769
Ref: shelve — Python object persistence-Footnote-29814835
Node: Restrições9814940
Ref: library/shelve restrictions9815044
Ref: 2be09815044
Ref: library/shelve shelve Shelf9816231
Ref: 11919816231
Ref: library/shelve shelve BsdDbShelf9817653
Ref: 25499817653
Ref: library/shelve shelve DbfilenameShelf9818378
Ref: 254a9818378
Ref: Restrições-Footnote-19818997
Node: Exemplo<6>9819050
Ref: library/shelve example9819154
Ref: 2be19819154
Ref: library/shelve shelve-example9819154
Ref: 2bdc9819154
Node: marshal — Serialização interna de objetos Python9820840
Ref: library/marshal doc9821054
Ref: 2be29821054
Ref: library/marshal marshal-internal-python-object-serialization9821054
Ref: 2be39821054
Ref: library/marshal module-marshal9821054
Ref: 919821054
Ref: library/marshal no-color9821054
Ref: 2be49821054
Ref: library/marshal marshal dump9824397
Ref: 2be69824397
Ref: library/marshal marshal load9825280
Ref: 1cac9825280
Ref: library/marshal marshal dumps9826391
Ref: 109b9826391
Ref: library/marshal marshal loads9827117
Ref: 2be79827117
Ref: library/marshal marshal version9827978
Ref: 2be59827978
Ref: marshal — Serialização interna de objetos Python-Footnote-19829190
Node: dbm — Interfaces para “banco de dados” Unix9829568
Ref: library/dbm doc9829817
Ref: 2be89829817
Ref: library/dbm dbm-interfaces-to-unix-databases9829817
Ref: 2be99829817
Ref: library/dbm module-dbm9829817
Ref: 359829817
Ref: library/dbm no-color9829817
Ref: 2bea9829817
Ref: library/dbm dbm error9830397
Ref: 2beb9830397
Ref: library/dbm dbm whichdb9830689
Ref: 2bec9830689
Ref: library/dbm dbm open9831438
Ref: 11229831438
Ref: dbm — Interfaces para “banco de dados” Unix-Footnote-19835592
Ref: dbm — Interfaces para “banco de dados” Unix-Footnote-29835664
Node: dbm sqlite3 — Backend de SQLite para dbm9835717
Ref: library/dbm dbm-sqlite3-sqlite-backend-for-dbm9835902
Ref: 2bed9835902
Ref: library/dbm module-dbm sqlite39835902
Ref: 399835902
Ref: library/dbm dbm sqlite3 open9836627
Ref: 2bee9836627
Ref: library/dbm dbm sqlite3 sqlite3 close9837798
Ref: 2bef9837798
Ref: dbm sqlite3 — Backend de SQLite para dbm-Footnote-19837908
Node: dbm gnu — Gerenciador de banco de dados do GNU9837979
Ref: library/dbm dbm-gnu-gnu-database-manager9838206
Ref: 2bf09838206
Ref: library/dbm module-dbm gnu9838206
Ref: 379838206
Ref: library/dbm dbm gnu error9838962
Ref: c849838962
Ref: library/dbm dbm gnu open_flags9839186
Ref: 2bf19839186
Ref: library/dbm dbm gnu open9839312
Ref: 1cd69839312
Ref: library/dbm dbm gnu gdbm close9841607
Ref: 2bf29841607
Ref: library/dbm dbm gnu gdbm firstkey9841680
Ref: 2bf39841680
Ref: library/dbm dbm gnu gdbm nextkey9842035
Ref: 2bf49842035
Ref: library/dbm dbm gnu gdbm reorganize9842418
Ref: 2bf59842418
Ref: library/dbm dbm gnu gdbm sync9842915
Ref: 2bf69842915
Ref: dbm gnu — Gerenciador de banco de dados do GNU-Footnote-19843130
Node: dbm ndbm — New Database Manager9843197
Ref: library/dbm dbm-ndbm-new-database-manager9843427
Ref: 2bf79843427
Ref: library/dbm module-dbm ndbm9843427
Ref: 389843427
Ref: library/dbm dbm ndbm error9844508
Ref: c859844508
Ref: library/dbm dbm ndbm library9844734
Ref: 2bf89844734
Ref: library/dbm dbm ndbm open9844818
Ref: 1cd79844818
Ref: library/dbm dbm ndbm ndbm close9846422
Ref: 2bf99846422
Ref: dbm ndbm — New Database Manager-Footnote-19846531
Node: dbm dumb — Implementação portátil do DBM9846599
Ref: library/dbm dbm-dumb-portable-dbm-implementation9846772
Ref: 2bfa9846772
Ref: library/dbm module-dbm dumb9846772
Ref: 369846772
Ref: library/dbm dbm dumb error9847604
Ref: c839847604
Ref: library/dbm dbm dumb open9847830
Ref: c809847830
Ref: library/dbm dbm dumb dumbdbm close9849767
Ref: 2bfb9849767
Ref: library/dbm dbm dumb dumbdbm sync9849838
Ref: 2bfc9849838
Ref: dbm dumb — Implementação portátil do DBM-Footnote-19850058
Node: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite9850126
Ref: library/sqlite3 doc9850314
Ref: 2bfd9850314
Ref: library/sqlite3 module-sqlite39850314
Ref: d49850314
Ref: library/sqlite3 no-color9850314
Ref: 2bfe9850314
Ref: library/sqlite3 sqlite3-db-api-2-0-interface-for-sqlite-databases9850314
Ref: 2bff9850314
Ref: library/sqlite3 sqlite3-intro9850513
Ref: 2c009850513
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-19852091
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-29852156
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-39852198
Node: Tutorial9852240
Ref: library/sqlite3 sqlite3-tutorial9852376
Ref: 2c019852376
Ref: library/sqlite3 tutorial9852376
Ref: 2c059852376
Ref: Tutorial-Footnote-19858671
Ref: Tutorial-Footnote-29858730
Ref: Tutorial-Footnote-39858787
Ref: Tutorial-Footnote-49858836
Ref: Tutorial-Footnote-59858882
Node: Referência9858934
Ref: library/sqlite3 reference9859098
Ref: 2c0f9859098
Ref: library/sqlite3 sqlite3-reference9859098
Ref: 2c029859098
Ref: library/sqlite3 sqlite3-module-contents9859140
Ref: 2c109859140
Node: Funções do módulo9859520
Ref: library/sqlite3 module-functions9859618
Ref: 2c119859618
Ref: library/sqlite3 sqlite3-module-functions9859618
Ref: 2c129859618
Ref: library/sqlite3 sqlite3 connect9859676
Ref: 59f9859676
Ref: library/sqlite3 sqlite3 complete_statement9864548
Ref: 2c1b9864548
Ref: library/sqlite3 sqlite3 enable_callback_tracebacks9865365
Ref: 2c1c9865365
Ref: library/sqlite3 sqlite3 register_adapter9866029
Ref: 2c1d9866029
Ref: library/sqlite3 sqlite3 register_converter9866367
Ref: 2c149866367
Ref: Funções do módulo-Footnote-19867016
Ref: Funções do módulo-Footnote-29867059
Ref: Funções do módulo-Footnote-39867101
Node: Constantes do módulo9867178
Ref: library/sqlite3 module-constants9867303
Ref: 2c1f9867303
Ref: library/sqlite3 sqlite3-module-constants9867303
Ref: 2c209867303
Ref: library/sqlite3 sqlite3 LEGACY_TRANSACTION_CONTROL9867365
Ref: 2c199867365
Ref: library/sqlite3 sqlite3 PARSE_DECLTYPES9867646
Ref: 2c159867646
Ref: library/sqlite3 sqlite3 PARSE_COLNAMES9868627
Ref: 2c169868627
Ref: library/sqlite3 sqlite3 SQLITE_OK9869222
Ref: 2c219869222
Ref: library/sqlite3 sqlite3 SQLITE_DENY9869250
Ref: 2c229869250
Ref: library/sqlite3 sqlite3 SQLITE_IGNORE9869280
Ref: 2c239869280
Ref: library/sqlite3 sqlite3 apilevel9869714
Ref: 2c249869714
Ref: library/sqlite3 sqlite3 paramstyle9869857
Ref: 2c259869857
Ref: library/sqlite3 sqlite3 sqlite_version9870134
Ref: 3019870134
Ref: library/sqlite3 sqlite3 sqlite_version_info9870248
Ref: 3029870248
Ref: library/sqlite3 sqlite3 threadsafety9870390
Ref: 8819870390
Ref: library/sqlite3 sqlite3-dbconfig-constants9872722
Ref: 2c269872722
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DEFENSIVE9872722
Ref: 2c279872722
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DQS_DDL9872766
Ref: 2c289872766
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DQS_DML9872808
Ref: 2c299872808
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_FKEY9872850
Ref: 2c2a9872850
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER9872896
Ref: 2c2b9872896
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION9872952
Ref: 2c2c9872952
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_QPSG9873008
Ref: 2c2d9873008
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_TRIGGER9873054
Ref: 2c2e9873054
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_VIEW9873103
Ref: 2c2f9873103
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE9873149
Ref: 2c309873149
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT9873202
Ref: 2c319873202
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE9873255
Ref: 2c329873255
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_RESET_DATABASE9873306
Ref: 2c339873306
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_TRIGGER_EQP9873355
Ref: 2c349873355
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_TRUSTED_SCHEMA9873401
Ref: 2c359873401
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_WRITABLE_SCHEMA9873450
Ref: 2c369873450
Ref: Constantes do módulo-Footnote-19874078
Ref: Constantes do módulo-Footnote-29874121
Ref: Constantes do módulo-Footnote-39874176
Node: Connection objects9874227
Ref: library/sqlite3 connection-objects9874346
Ref: 2c379874346
Ref: library/sqlite3 sqlite3-connection-objects9874346
Ref: 2c389874346
Ref: library/sqlite3 sqlite3 Connection9874403
Ref: 5479874403
Ref: library/sqlite3 sqlite3 Connection cursor9875094
Ref: 2c069875094
Ref: library/sqlite3 sqlite3 Connection blobopen9875407
Ref: 8869875407
Ref: library/sqlite3 sqlite3 Connection commit9876688
Ref: 2c0a9876688
Ref: library/sqlite3 sqlite3 Connection rollback9877048
Ref: 2c3a9877048
Ref: library/sqlite3 sqlite3 Connection close9877415
Ref: 5489877415
Ref: library/sqlite3 sqlite3 Connection execute9877835
Ref: 2c3b9877835
Ref: library/sqlite3 sqlite3 Connection executemany9878063
Ref: 2c3c9878063
Ref: library/sqlite3 sqlite3 Connection executescript9878297
Ref: 2c3d9878297
Ref: library/sqlite3 sqlite3 Connection create_function9878520
Ref: 5a09878520
Ref: library/sqlite3 sqlite3 Connection create_aggregate9880200
Ref: 5a19880200
Ref: library/sqlite3 sqlite3 Connection create_window_function9882146
Ref: 8859882146
Ref: library/sqlite3 sqlite3 Connection create_collation9885362
Ref: 87b9885362
Ref: library/sqlite3 sqlite3 Connection interrupt9886796
Ref: 2c419886796
Ref: library/sqlite3 sqlite3 Connection set_authorizer9887025
Ref: 5a29887025
Ref: library/sqlite3 sqlite3 Connection set_progress_handler9888668
Ref: 5a39888668
Ref: library/sqlite3 sqlite3 Connection set_trace_callback9889520
Ref: 5a49889520
Ref: library/sqlite3 sqlite3 Connection enable_load_extension9890828
Ref: a359890828
Ref: library/sqlite3 sqlite3 Connection load_extension9893184
Ref: 6d49893184
Ref: library/sqlite3 sqlite3 Connection iterdump9894189
Ref: 5499894189
Ref: library/sqlite3 sqlite3 Connection backup9895221
Ref: d679895221
Ref: library/sqlite3 sqlite3 Connection getlimit9897604
Ref: 8809897604
Ref: library/sqlite3 sqlite3 Connection setlimit9898252
Ref: 87f9898252
Ref: library/sqlite3 sqlite3 Connection getconfig9899362
Ref: 6d59899362
Ref: library/sqlite3 sqlite3 Connection setconfig9899646
Ref: 6d69899646
Ref: library/sqlite3 sqlite3 Connection serialize9900104
Ref: 8839900104
Ref: library/sqlite3 sqlite3 Connection deserialize9900869
Ref: 8849900869
Ref: library/sqlite3 sqlite3 Connection autocommit9902044
Ref: 6d29902044
Ref: library/sqlite3 sqlite3 Connection in_transaction9903485
Ref: 2c449903485
Ref: library/sqlite3 sqlite3 Connection isolation_level9903775
Ref: 2c179903775
Ref: library/sqlite3 sqlite3 Connection row_factory9904713
Ref: 18e99904713
Ref: library/sqlite3 sqlite3 Connection text_factory9905215
Ref: 2c469905215
Ref: library/sqlite3 sqlite3 Connection total_changes9905627
Ref: 2c479905627
Ref: Connection objects-Footnote-19905857
Ref: Connection objects-Footnote-29905903
Ref: Connection objects-Footnote-39905968
Ref: Connection objects-Footnote-49906027
Ref: Connection objects-Footnote-59906086
Ref: Connection objects-Footnote-69906128
Ref: Connection objects-Footnote-79906170
Ref: Connection objects-Footnote-89906262
Ref: Connection objects-Footnote-99906304
Ref: Connection objects-Footnote-109906396
Node: Cursor objects9906497
Ref: library/sqlite3 cursor-objects9906606
Ref: 2c489906606
Ref: library/sqlite3 sqlite3-cursor-objects9906606
Ref: 2c499906606
Ref: library/sqlite3 sqlite3 Cursor9907216
Ref: 2c079907216
Ref: library/sqlite3 sqlite3 Cursor execute9907328
Ref: 5a99907328
Ref: library/sqlite3 sqlite3 Cursor executemany9908817
Ref: 5aa9908817
Ref: library/sqlite3 sqlite3 Cursor executescript9910332
Ref: 2c3e9910332
Ref: library/sqlite3 sqlite3 Cursor fetchone9911179
Ref: 2c089911179
Ref: library/sqlite3 sqlite3 Cursor fetchmany9911460
Ref: 17429911460
Ref: library/sqlite3 sqlite3 Cursor fetchall9912432
Ref: 2c0b9912432
Ref: library/sqlite3 sqlite3 Cursor close9912714
Ref: 2c4a9912714
Ref: library/sqlite3 sqlite3 Cursor setinputsizes9913019
Ref: 2c4b9913019
Ref: library/sqlite3 sqlite3 Cursor setoutputsize9913129
Ref: 2c4c9913129
Ref: library/sqlite3 sqlite3 Cursor arraysize9913251
Ref: 17439913251
Ref: library/sqlite3 sqlite3 Cursor connection9913604
Ref: 2c4d9913604
Ref: library/sqlite3 sqlite3 Cursor description9914105
Ref: 180c9914105
Ref: library/sqlite3 sqlite3 Cursor lastrowid9914480
Ref: ec09914480
Ref: library/sqlite3 sqlite3 Cursor rowcount9915173
Ref: 1a7c9915173
Ref: library/sqlite3 sqlite3 Cursor row_factory9915730
Ref: 2c459915730
Ref: library/sqlite3 sqlite3-columns-by-name9916522
Ref: 2c4e9916522
Ref: Cursor objects-Footnote-19916558
Ref: Cursor objects-Footnote-29916615
Node: Row objects9916666
Ref: library/sqlite3 row-objects9916769
Ref: 2c4f9916769
Ref: library/sqlite3 sqlite3-row-objects9916769
Ref: 2c509916769
Ref: library/sqlite3 sqlite3 Row9916812
Ref: 10679916812
Ref: library/sqlite3 sqlite3 Row keys9917271
Ref: 2c519917271
Node: Blob objects9917551
Ref: library/sqlite3 blob-objects9917663
Ref: 2c529917663
Ref: library/sqlite3 sqlite3-blob-objects9917663
Ref: 2c539917663
Ref: library/sqlite3 sqlite3 Blob9917708
Ref: 8879917708
Ref: library/sqlite3 sqlite3 Blob close9918884
Ref: 2c549918884
Ref: library/sqlite3 sqlite3 Blob read9919135
Ref: 2c559919135
Ref: library/sqlite3 sqlite3 Blob write9919492
Ref: 2c569919492
Ref: library/sqlite3 sqlite3 Blob tell9919722
Ref: 2c579919722
Ref: library/sqlite3 sqlite3 Blob seek9919808
Ref: 2c589919808
Node: PrepareProtocol objects9920233
Ref: library/sqlite3 prepareprotocol-objects9920347
Ref: 2c599920347
Ref: library/sqlite3 sqlite3 PrepareProtocol9920414
Ref: 1a879920414
Ref: PrepareProtocol objects-Footnote-19920684
Node: Exceções<7>9920726
Ref: library/sqlite3 exceptions9920851
Ref: 2c5b9920851
Ref: library/sqlite3 sqlite3-exceptions9920851
Ref: 2c5c9920851
Ref: library/sqlite3 sqlite3 Warning9920961
Ref: 1ac99920961
Ref: library/sqlite3 sqlite3 Error9921262
Ref: 1b249921262
Ref: library/sqlite3 sqlite3 Error sqlite_errorcode9921618
Ref: 87d9921618
Ref: library/sqlite3 sqlite3 Error sqlite_errorname9921751
Ref: 87e9921751
Ref: library/sqlite3 sqlite3 InterfaceError9921915
Ref: 8829921915
Ref: library/sqlite3 sqlite3 DatabaseError9922194
Ref: 2c429922194
Ref: library/sqlite3 sqlite3 DataError9922509
Ref: 1b409922509
Ref: library/sqlite3 sqlite3 OperationalError9922758
Ref: 1b419922758
Ref: library/sqlite3 sqlite3 IntegrityError9923112
Ref: 2c5d9923112
Ref: library/sqlite3 sqlite3 InternalError9923324
Ref: 2c5e9923324
Ref: library/sqlite3 sqlite3 ProgrammingError9923600
Ref: 3039923600
Ref: library/sqlite3 sqlite3 NotSupportedError9923908
Ref: 2c409923908
Ref: Exceções<7>-Footnote-19924341
Ref: Exceções<7>-Footnote-29924383
Ref: Exceções<7>-Footnote-39924423
Node: SQLite and Python types9924463
Ref: library/sqlite3 sqlite-and-python-types9924607
Ref: 2c5f9924607
Ref: library/sqlite3 sqlite3-types9924607
Ref: 2c139924607
Node: Default adapters and converters deprecated9926525
Ref: library/sqlite3 default-adapters-and-converters-deprecated9926688
Ref: 2c609926688
Ref: library/sqlite3 sqlite3-default-converters9926688
Ref: 7099926688
Ref: Default adapters and converters deprecated-Footnote-19927920
Node: Interface de linha de comando<2>9927967
Ref: library/sqlite3 command-line-interface9928098
Ref: 2c619928098
Ref: library/sqlite3 sqlite3-cli9928098
Ref: 6689928098
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-h9928462
Ref: 2c629928462
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-help9928462
Ref: 2c639928462
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-v9928508
Ref: 2c649928508
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-version9928508
Ref: 2c659928508
Node: Guias de como fazer9928611
Ref: library/sqlite3 how-to-guides9928779
Ref: 2c669928779
Ref: library/sqlite3 sqlite3-howtos9928779
Ref: 2c039928779
Node: How to use placeholders to bind values in SQL queries9929257
Ref: library/sqlite3 how-to-use-placeholders-to-bind-values-in-sql-queries9929424
Ref: 2c679929424
Ref: library/sqlite3 sqlite3-placeholders9929424
Ref: 5ab9929424
Ref: How to use placeholders to bind values in SQL queries-Footnote-19931677
Ref: How to use placeholders to bind values in SQL queries-Footnote-29931729
Node: How to adapt custom Python types to SQLite values9931771
Ref: library/sqlite3 how-to-adapt-custom-python-types-to-sqlite-values9931998
Ref: 2c689931998
Ref: library/sqlite3 sqlite3-adapters9931998
Ref: 2c0c9931998
Node: How to write adaptable objects9932787
Ref: library/sqlite3 how-to-write-adaptable-objects9932945
Ref: 2c699932945
Ref: library/sqlite3 sqlite3-conform9932945
Ref: 2c5a9932945
Node: How to register adapter callables9933856
Ref: library/sqlite3 how-to-register-adapter-callables9934014
Ref: 2c6a9934014
Node: How to convert SQLite values to custom Python types9934658
Ref: library/sqlite3 how-to-convert-sqlite-values-to-custom-python-types9934861
Ref: 2c6b9934861
Ref: library/sqlite3 sqlite3-converters9934861
Ref: 2c0d9934861
Node: Adapter and converter recipes9937432
Ref: library/sqlite3 adapter-and-converter-recipes9937624
Ref: 2c6c9937624
Ref: library/sqlite3 sqlite3-adapter-converter-recipes9937624
Ref: 70a9937624
Node: How to use connection shortcut methods9939081
Ref: library/sqlite3 how-to-use-connection-shortcut-methods9939263
Ref: 2c6d9939263
Ref: library/sqlite3 sqlite3-connection-shortcuts9939263
Ref: 2c399939263
Node: How to use the connection context manager9940547
Ref: library/sqlite3 how-to-use-the-connection-context-manager9940728
Ref: 2c6e9940728
Ref: library/sqlite3 sqlite3-connection-context-manager9940728
Ref: 1a889940728
Node: How to work with SQLite URIs9942479
Ref: library/sqlite3 how-to-work-with-sqlite-uris9942657
Ref: 2c6f9942657
Ref: library/sqlite3 sqlite3-uri-tricks9942657
Ref: 2c1a9942657
Ref: How to work with SQLite URIs-Footnote-19943960
Node: How to create and use row factories9944000
Ref: library/sqlite3 how-to-create-and-use-row-factories9944175
Ref: 2c709944175
Ref: library/sqlite3 sqlite3-howto-row-factory9944175
Ref: 2c0e9944175
Node: How to handle non-UTF-8 text encodings9947036
Ref: library/sqlite3 how-to-handle-non-utf-8-text-encodings9947174
Ref: 2c719947174
Ref: library/sqlite3 sqlite3-howto-encoding9947174
Ref: 2c439947174
Ref: How to handle non-UTF-8 text encodings-Footnote-19948507
Node: Explicação9948556
Ref: library/sqlite3 explanation9948704
Ref: 2c729948704
Ref: library/sqlite3 sqlite3-explanation9948704
Ref: 2c049948704
Ref: library/sqlite3 sqlite3-transaction-control9948749
Ref: 2c739948749
Node: Controle de transações9948788
Ref: library/sqlite3 sqlite3-controlling-transactions9948861
Ref: 2c099948861
Ref: library/sqlite3 transaction-control9948861
Ref: 2c749948861
Node: Controle de transações através do atributo autocommit9949409
Ref: library/sqlite3 sqlite3-transaction-control-autocommit9949595
Ref: 6d39949595
Ref: library/sqlite3 transaction-control-via-the-autocommit-attribute9949595
Ref: 2c759949595
Ref: Controle de transações através do atributo autocommit-Footnote-19951517
Ref: Controle de transações através do atributo autocommit-Footnote-29951559
Ref: Controle de transações através do atributo autocommit-Footnote-39951651
Node: Controle de transação através do atributo isolation_level9951693
Ref: library/sqlite3 sqlite3-transaction-control-isolation-level9951879
Ref: 2c189951879
Ref: library/sqlite3 transaction-control-via-the-isolation-level-attribute9951879
Ref: 2c769951879
Ref: Controle de transação através do atributo isolation_level-Footnote-19954158
Ref: Controle de transação através do atributo isolation_level-Footnote-29954258
Node: Compressão de Dados e Arquivamento9954350
Ref: library/archiving doc9954511
Ref: 2bac9954511
Ref: library/archiving archiving9954511
Ref: 2c779954511
Ref: library/archiving data-compression-and-archiving9954511
Ref: 2c789954511
Ref: library/archiving no-color9954511
Ref: 2c799954511
Node: O pacote compression9955320
Ref: library/compression doc9955491
Ref: 2c7a9955491
Ref: library/compression module-compression9955491
Ref: 229955491
Ref: library/compression the-compression-package9955491
Ref: 2c7b9955491
Node: compression zstd — Compactação compatível com o formato Zstandard9956370
Ref: library/compression zstd doc9956593
Ref: 2c7c9956593
Ref: library/compression zstd compression-zstd-compression-compatible-with-the-zstandard-format9956593
Ref: 2c7d9956593
Ref: library/compression zstd module-compression zstd9956593
Ref: 239956593
Ref: library/compression zstd no-color9956593
Ref: 2c7e9956593
Ref: compression zstd — Compactação compatível com o formato Zstandard-Footnote-19958489
Ref: compression zstd — Compactação compatível com o formato Zstandard-Footnote-29958575
Node: Exceções<8>9958642
Ref: library/compression zstd exceptions9958810
Ref: 2c8b9958810
Ref: library/compression zstd compression zstd ZstdError9958849
Ref: 2c8c9958849
Node: Lendo e escrevendo arquivos comprimidos9959059
Ref: library/compression zstd reading-and-writing-compressed-files9959282
Ref: 2c8d9959282
Ref: library/compression zstd compression zstd open9959381
Ref: 2c7f9959381
Ref: library/compression zstd compression zstd ZstdFile9961762
Ref: 2c809961762
Ref: library/compression zstd compression zstd ZstdFile peek9964181
Ref: 2c8f9964181
Ref: library/compression zstd compression zstd ZstdFile mode9964836
Ref: 2c909964836
Ref: library/compression zstd compression zstd ZstdFile name9964923
Ref: 2c919964923
Node: Comprimindo e descomprimindo dados na memória9965084
Ref: library/compression zstd compressing-and-decompressing-data-in-memory9965319
Ref: 2c939965319
Ref: library/compression zstd compression zstd compress9965431
Ref: 2c839965431
Ref: library/compression zstd compression zstd decompress9966721
Ref: 2c849966721
Ref: library/compression zstd compression zstd ZstdCompressor9967595
Ref: 2c819967595
Ref: library/compression zstd compression zstd ZstdCompressor compress9969008
Ref: 2c969969008
Ref: library/compression zstd compression zstd ZstdCompressor flush9970153
Ref: 2c979970153
Ref: library/compression zstd compression zstd ZstdCompressor set_pledged_input_size9970560
Ref: 2c9b9970560
Ref: library/compression zstd compression zstd ZstdCompressor CONTINUE9972025
Ref: 2c989972025
Ref: library/compression zstd compression zstd ZstdCompressor FLUSH_BLOCK9972262
Ref: 2c999972262
Ref: library/compression zstd compression zstd ZstdCompressor FLUSH_FRAME9972606
Ref: 2c9a9972606
Ref: library/compression zstd compression zstd ZstdCompressor last_mode9972838
Ref: 2c9d9972838
Ref: library/compression zstd compression zstd ZstdDecompressor9973200
Ref: 2c829973200
Ref: library/compression zstd compression zstd ZstdDecompressor decompress9974532
Ref: 2c9e9974532
Ref: library/compression zstd compression zstd ZstdDecompressor eof9975930
Ref: 2ca19975930
Ref: library/compression zstd compression zstd ZstdDecompressor unused_data9976020
Ref: 2ca09976020
Ref: library/compression zstd compression zstd ZstdDecompressor needs_input9976192
Ref: 2c9f9976192
Node: Dicionários de Zstandard9976392
Ref: library/compression zstd zstandard-dictionaries9976614
Ref: 2ca29976614
Ref: library/compression zstd compression zstd train_dict9976684
Ref: 2c859976684
Ref: library/compression zstd compression zstd finalize_dict9977847
Ref: 2c869977847
Ref: library/compression zstd compression zstd ZstdDict9979062
Ref: 2c879979062
Ref: library/compression zstd compression zstd ZstdDict dict_content9982497
Ref: 2ca39982497
Ref: library/compression zstd compression zstd ZstdDict dict_id9982810
Ref: 2ca49982810
Ref: library/compression zstd compression zstd ZstdDict as_digested_dict9983431
Ref: 2ca69983431
Ref: library/compression zstd compression zstd ZstdDict as_undigested_dict9983520
Ref: 2ca79983520
Node: Advanced parameter control9983614
Ref: library/compression zstd advanced-parameter-control9983801
Ref: 2ca89983801
Ref: library/compression zstd compression zstd CompressionParameter9983874
Ref: 2c889983874
Ref: library/compression zstd compression zstd CompressionParameter bounds9984728
Ref: 2c959984728
Ref: library/compression zstd compression zstd CompressionParameter compression_level9985213
Ref: 2c949985213
Ref: library/compression zstd compression zstd CompressionParameter window_log9985857
Ref: 2ca99985857
Ref: library/compression zstd compression zstd CompressionParameter hash_log9986346
Ref: 2cab9986346
Ref: library/compression zstd compression zstd CompressionParameter chain_log9986795
Ref: 2cad9986795
Ref: library/compression zstd compression zstd CompressionParameter search_log9987356
Ref: 2caf9987356
Ref: library/compression zstd compression zstd CompressionParameter min_match9987715
Ref: 2cb09987715
Ref: library/compression zstd compression zstd CompressionParameter target_length9988386
Ref: 2cb29988386
Ref: library/compression zstd compression zstd CompressionParameter strategy9989140
Ref: 2cb59989140
Ref: library/compression zstd compression zstd CompressionParameter enable_long_distance_matching9989483
Ref: 2cb69989483
Ref: library/compression zstd compression zstd CompressionParameter ldm_hash_log9990288
Ref: 2cb79990288
Ref: library/compression zstd compression zstd CompressionParameter ldm_min_match9990640
Ref: 2cb89990640
Ref: library/compression zstd compression zstd CompressionParameter ldm_bucket_size_log9990948
Ref: 2cb99990948
Ref: library/compression zstd compression zstd CompressionParameter ldm_hash_rate_log9991311
Ref: 2cba9991311
Ref: library/compression zstd compression zstd CompressionParameter content_size_flag9991750
Ref: 2c9c9991750
Ref: library/compression zstd compression zstd CompressionParameter checksum_flag9992937
Ref: 2cbb9992937
Ref: library/compression zstd compression zstd CompressionParameter dict_id_flag9993417
Ref: 2cbc9993417
Ref: library/compression zstd compression zstd CompressionParameter nb_workers9993686
Ref: 2cbd9993686
Ref: library/compression zstd compression zstd CompressionParameter job_size9994161
Ref: 2cbe9994161
Ref: library/compression zstd compression zstd CompressionParameter overlap_log9994572
Ref: 2cbf9994572
Ref: library/compression zstd compression zstd DecompressionParameter9995430
Ref: 2c899995430
Ref: library/compression zstd compression zstd DecompressionParameter bounds9996164
Ref: 2cc09996164
Ref: library/compression zstd compression zstd DecompressionParameter window_log_max9996449
Ref: 2cc19996449
Ref: library/compression zstd compression zstd Strategy9996824
Ref: 2c8a9996824
Ref: library/compression zstd compression zstd Strategy fast9997304
Ref: 2cae9997304
Ref: library/compression zstd compression zstd Strategy dfast9997329
Ref: 2cac9997329
Ref: library/compression zstd compression zstd Strategy greedy9997355
Ref: 2cc29997355
Ref: library/compression zstd compression zstd Strategy lazy9997382
Ref: 2cc39997382
Ref: library/compression zstd compression zstd Strategy lazy29997407
Ref: 2cc49997407
Ref: library/compression zstd compression zstd Strategy btlazy29997433
Ref: 2cc59997433
Ref: library/compression zstd compression zstd Strategy btopt9997461
Ref: 2cb19997461
Ref: library/compression zstd compression zstd Strategy btultra9997487
Ref: 2cb39997487
Ref: library/compression zstd compression zstd Strategy btultra29997515
Ref: 2cb49997515
Node: Diversos<3>9997544
Ref: library/compression zstd miscellaneous9997717
Ref: 2cc69997717
Ref: library/compression zstd compression zstd get_frame_info9997754
Ref: 2ca59997754
Ref: library/compression zstd compression zstd FrameInfo9997985
Ref: 2cc79997985
Ref: library/compression zstd compression zstd FrameInfo decompressed_size9998070
Ref: 2cc89998070
Ref: library/compression zstd compression zstd FrameInfo dictionary_id9998171
Ref: 2cc99998171
Ref: library/compression zstd compression zstd COMPRESSION_LEVEL_DEFAULT9998531
Ref: 2caa9998531
Ref: library/compression zstd compression zstd zstd_version_info9998649
Ref: 2cca9998649
Node: Exemplos<8>9998801
Ref: library/compression zstd examples9998939
Ref: 2ccb9998939
Node: zlib — Compactação compatível com gzip10000359
Ref: library/zlib doc10000597
Ref: 2ccc10000597
Ref: library/zlib module-zlib10000597
Ref: 13910000597
Ref: library/zlib no-color10000597
Ref: 2ccd10000597
Ref: library/zlib zlib-compression-compatible-with-gzip10000597
Ref: 2cce10000597
Ref: library/zlib zlib error10001643
Ref: 2ccf10001643
Ref: library/zlib zlib adler3210001742
Ref: 1acd10001742
Ref: library/zlib zlib compress10002677
Ref: 84410002677
Ref: library/zlib compress-wbits10003322
Ref: 2cd010003322
Ref: library/zlib zlib compressobj10004655
Ref: 2cd110004655
Ref: library/zlib zlib crc3210006788
Ref: 194c10006788
Ref: library/zlib zlib decompress10007603
Ref: efd10007603
Ref: library/zlib decompress-wbits10008050
Ref: 2cd210008050
Ref: library/zlib zlib decompressobj10009938
Ref: 2cd310009938
Ref: library/zlib zlib Compress compress10011002
Ref: 2cd410011002
Ref: library/zlib zlib Compress flush10011398
Ref: 2cd510011398
Ref: library/zlib zlib Compress copy10012217
Ref: 2cd610012217
Ref: library/zlib zlib Decompress unused_data10012652
Ref: 2cd710012652
Ref: library/zlib zlib Decompress unconsumed_tail10013005
Ref: 2cd810013005
Ref: library/zlib zlib Decompress eof10013505
Ref: 136910013505
Ref: library/zlib zlib Decompress decompress10013773
Ref: 2cd910013773
Ref: library/zlib zlib Decompress flush10014894
Ref: 2cda10014894
Ref: library/zlib zlib Decompress copy10015335
Ref: 2cdb10015335
Ref: library/zlib zlib ZLIB_VERSION10015849
Ref: 2cdc10015849
Ref: library/zlib zlib ZLIB_RUNTIME_VERSION10016128
Ref: 136a10016128
Ref: library/zlib zlib ZLIBNG_VERSION10016294
Ref: 2cdd10016294
Ref: zlib — Compactação compatível com gzip-Footnote-110017226
Ref: zlib — Compactação compatível com gzip-Footnote-210017271
Node: gzip — Suporte para arquivos gzip10017324
Ref: library/gzip doc10017530
Ref: 2cde10017530
Ref: library/gzip gzip-support-for-gzip-files10017530
Ref: 2cdf10017530
Ref: library/gzip module-gzip10017530
Ref: 6b10017530
Ref: library/gzip no-color10017530
Ref: 2ce010017530
Ref: library/gzip gzip open10018559
Ref: 2ce110018559
Ref: library/gzip gzip BadGzipFile10020179
Ref: be010020179
Ref: library/gzip gzip GzipFile10020455
Ref: 65010020455
Ref: library/gzip gzip GzipFile peek10023666
Ref: 140810023666
Ref: library/gzip gzip GzipFile mode10024218
Ref: 2ce410024218
Ref: library/gzip gzip GzipFile mtime10024410
Ref: 2ce210024410
Ref: library/gzip gzip GzipFile name10024784
Ref: 72610024784
Ref: library/gzip gzip compress10026101
Ref: 84310026101
Ref: library/gzip gzip decompress10027447
Ref: 140910027447
Ref: gzip — Suporte para arquivos gzip-Footnote-110028183
Node: Exemplos de uso10028247
Ref: library/gzip examples-of-usage10028375
Ref: 2ce610028375
Ref: library/gzip gzip-usage-examples10028375
Ref: 2ce710028375
Ref: Exemplos de uso-Footnote-110029544
Node: Interface de linha de comando<3>10029597
Ref: library/gzip command-line-interface10029725
Ref: 2ce810029725
Ref: library/gzip gzip-cli10029725
Ref: 2ce910029725
Node: Opções da linha de comando10030218
Ref: library/gzip command-line-options10030315
Ref: 2cea10030315
Ref: library/gzip cmdoption-gzip-arg-file10030390
Ref: 2ceb10030390
Ref: library/gzip cmdoption-gzip-fast10030481
Ref: 2cec10030481
Ref: library/gzip cmdoption-gzip-best10030572
Ref: 2ced10030572
Ref: library/gzip cmdoption-gzip-d10030663
Ref: 2cee10030663
Ref: library/gzip cmdoption-gzip-decompress10030663
Ref: 2cef10030663
Ref: library/gzip cmdoption-gzip-h10030727
Ref: 2cf010030727
Ref: library/gzip cmdoption-gzip-help10030727
Ref: 2cf110030727
Node: bz2 — Suporte para compressão bzip210030784
Ref: library/bz2 doc10030991
Ref: 2cf210030991
Ref: library/bz2 bz2-support-for-bzip2-compression10030991
Ref: 2cf310030991
Ref: library/bz2 module-bz210030991
Ref: 1410030991
Ref: library/bz2 no-color10030991
Ref: 2cf410030991
Ref: bz2 — Suporte para compressão bzip2-Footnote-110032000
Node: Des compressão de arquivos10032063
Ref: library/bz2 de-compression-of-files10032201
Ref: 2cf510032201
Ref: library/bz2 bz2 open10032277
Ref: 128910032277
Ref: library/bz2 bz2 BZ2File10033810
Ref: a5c10033810
Ref: library/bz2 bz2 BZ2File peek10035306
Ref: 2cf610035306
Ref: library/bz2 bz2 BZ2File fileno10035943
Ref: 2cf710035943
Ref: library/bz2 bz2 BZ2File readable10036085
Ref: 2cf810036085
Ref: library/bz2 bz2 BZ2File seekable10036211
Ref: 2cf910036211
Ref: library/bz2 bz2 BZ2File writable10036329
Ref: 2cfa10036329
Ref: library/bz2 bz2 BZ2File read110036458
Ref: 2cfb10036458
Ref: library/bz2 bz2 BZ2File readinto10036830
Ref: 2cfc10036830
Ref: library/bz2 bz2 BZ2File mode10036989
Ref: 2cfd10036989
Ref: library/bz2 bz2 BZ2File name10037115
Ref: 2cfe10037115
Node: Des compressão incremental10038442
Ref: library/bz2 incremental-de-compression10038627
Ref: 2cff10038627
Ref: library/bz2 bz2 BZ2Compressor10038703
Ref: 1a0610038703
Ref: library/bz2 bz2 BZ2Compressor compress10039047
Ref: 2d0010039047
Ref: library/bz2 bz2 BZ2Compressor flush10039422
Ref: 2d0110039422
Ref: library/bz2 bz2 BZ2Decompressor10039662
Ref: 1a0410039662
Ref: library/bz2 bz2 BZ2Decompressor decompress10040250
Ref: fbe10040250
Ref: library/bz2 bz2 BZ2Decompressor eof10041728
Ref: 2d0410041728
Ref: library/bz2 bz2 BZ2Decompressor unused_data10041856
Ref: 2d0310041856
Ref: library/bz2 bz2 BZ2Decompressor needs_input10042073
Ref: 2d0210042073
Node: De compressão de uma só vez one-shot10042313
Ref: library/bz2 one-shot-de-compression10042489
Ref: 2d0510042489
Ref: library/bz2 bz2 compress10042590
Ref: 271710042590
Ref: library/bz2 bz2 decompress10042883
Ref: 128a10042883
Node: Exemplos de uso<2>10043247
Ref: library/bz2 bz2-usage-examples10043387
Ref: 2d0610043387
Ref: library/bz2 examples-of-usage10043387
Ref: 2d0710043387
Node: lzma — Compressão usando o algoritmo LZMA10046365
Ref: library/lzma doc10046574
Ref: 2d0810046574
Ref: library/lzma lzma-compression-using-the-lzma-algorithm10046574
Ref: 2d0910046574
Ref: library/lzma module-lzma10046574
Ref: 8e10046574
Ref: library/lzma no-color10046574
Ref: 2d0a10046574
Ref: library/lzma lzma LZMAError10047463
Ref: 2d0b10047463
Ref: lzma — Compressão usando o algoritmo LZMA-Footnote-110048001
Node: Lendo e escrevendo arquivos comprimidos<2>10048065
Ref: library/lzma reading-and-writing-compressed-files10048246
Ref: 2d0c10048246
Ref: library/lzma lzma open10048345
Ref: 2d0d10048345
Ref: library/lzma lzma LZMAFile10050225
Ref: 120210050225
Ref: library/lzma lzma LZMAFile peek10052241
Ref: 2d0e10052241
Ref: library/lzma lzma LZMAFile mode10052907
Ref: 2d0f10052907
Ref: library/lzma lzma LZMAFile name10053033
Ref: 2d1010053033
Node: Comprimindo e descomprimindo dados na memória<2>10053512
Ref: library/lzma compressing-and-decompressing-data-in-memory10053713
Ref: 2d1110053713
Ref: library/lzma lzma LZMACompressor10053825
Ref: 1a0510053825
Ref: library/lzma lzma LZMACompressor compress10057299
Ref: 2d1410057299
Ref: library/lzma lzma LZMACompressor flush10057811
Ref: 2d1510057811
Ref: library/lzma lzma LZMADecompressor10058091
Ref: 1a0310058091
Ref: library/lzma lzma LZMADecompressor decompress10059758
Ref: 102310059758
Ref: library/lzma lzma LZMADecompressor check10061237
Ref: 2d1910061237
Ref: library/lzma lzma LZMADecompressor eof10061516
Ref: 2d1a10061516
Ref: library/lzma lzma LZMADecompressor unused_data10061606
Ref: 2d1810061606
Ref: library/lzma lzma LZMADecompressor needs_input10061778
Ref: 2d1710061778
Ref: library/lzma lzma compress10062021
Ref: 2d1210062021
Ref: library/lzma lzma decompress10062372
Ref: 2d1610062372
Node: Diversos<4>10062886
Ref: library/lzma miscellaneous10063092
Ref: 2d1b10063092
Ref: library/lzma lzma is_check_supported10063129
Ref: 2d1c10063129
Node: Especificando cadeias de filtros personalizadas10063540
Ref: library/lzma filter-chain-specs10063708
Ref: 2d1310063708
Ref: library/lzma specifying-custom-filter-chains10063708
Ref: 2d1d10063708
Node: Exemplos<9>10066696
Ref: library/lzma examples10066844
Ref: 2d1e10066844
Node: zipfile — Trabalha com arquivos ZIP10068254
Ref: library/zipfile doc10068470
Ref: 2d1f10068470
Ref: library/zipfile module-zipfile10068470
Ref: 13710068470
Ref: library/zipfile no-color10068470
Ref: 2d2010068470
Ref: library/zipfile zipfile-work-with-zip-archives10068470
Ref: 2d2110068470
Ref: library/zipfile zipfile BadZipFile10069410
Ref: 1a8410069410
Ref: library/zipfile zipfile BadZipfile10069538
Ref: 2d2210069538
Ref: library/zipfile zipfile LargeZipFile10069718
Ref: 2d2310069718
Ref: library/zipfile zipfile ZipInfo10070366
Ref: 2ca10070366
Ref: library/zipfile zipfile ZipInfo _for_archive10071385
Ref: 2c910071385
Ref: library/zipfile zipfile is_zipfile10071670
Ref: 152510071670
Ref: library/zipfile zipfile ZIP_STORED10072024
Ref: 2d2810072024
Ref: library/zipfile zipfile ZIP_DEFLATED10072121
Ref: 2d2910072121
Ref: library/zipfile zipfile ZIP_BZIP210072258
Ref: 2d2a10072258
Ref: library/zipfile zipfile ZIP_LZMA10072421
Ref: 2d2b10072421
Ref: library/zipfile zipfile ZIP_ZSTANDARD10072582
Ref: 2d2c10072582
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-110074107
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-210074172
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-310074240
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-410074308
Node: Objetos ZipFile10074349
Ref: library/zipfile id110074459
Ref: 2d2d10074459
Ref: library/zipfile zipfile-objects10074459
Ref: 2d2410074459
Ref: library/zipfile zipfile ZipFile10074510
Ref: 8c810074510
Ref: library/zipfile zipfile ZipFile close10080340
Ref: 2d2e10080340
Ref: library/zipfile zipfile ZipFile getinfo10080515
Ref: 2d2510080515
Ref: library/zipfile zipfile ZipFile infolist10080764
Ref: 2d2610080764
Ref: library/zipfile zipfile ZipFile namelist10081007
Ref: 2d2f10081007
Ref: library/zipfile zipfile ZipFile open10081097
Ref: 65110081097
Ref: library/zipfile zipfile ZipFile extract10084169
Ref: 2d3210084169
Ref: library/zipfile zipfile ZipFile extractall10085647
Ref: 2d3310085647
Ref: library/zipfile zipfile ZipFile printdir10086750
Ref: 2d3410086750
Ref: library/zipfile zipfile ZipFile setpassword10086858
Ref: 2d3510086858
Ref: library/zipfile zipfile ZipFile read10087009
Ref: 2d3110087009
Ref: library/zipfile zipfile ZipFile testzip10088039
Ref: 2d3610088039
Ref: library/zipfile zipfile ZipFile write10088445
Ref: f3d10088445
Ref: library/zipfile zipfile ZipFile writestr10090412
Ref: 2cb10090412
Ref: library/zipfile zipfile ZipFile mkdir10092062
Ref: 8c910092062
Ref: library/zipfile zipfile ZipFile filename10092595
Ref: 2d3710092595
Ref: library/zipfile zipfile ZipFile debug10092654
Ref: 2d3810092654
Ref: library/zipfile zipfile ZipFile comment10092888
Ref: 2d3910092888
Node: Objetos Path10093223
Ref: library/zipfile id210093359
Ref: 2d3a10093359
Ref: library/zipfile path-objects10093359
Ref: 2d3b10093359
Ref: library/zipfile zipfile Path10093404
Ref: 8cd10093404
Ref: library/zipfile zipfile Path name10094674
Ref: 2d3c10094674
Ref: library/zipfile zipfile Path open10094736
Ref: 185d10094736
Ref: library/zipfile zipfile Path iterdir10095740
Ref: 2d3d10095740
Ref: library/zipfile zipfile Path is_dir10095815
Ref: 2d3e10095815
Ref: library/zipfile zipfile Path is_file10095924
Ref: 2d3f10095924
Ref: library/zipfile zipfile Path is_symlink10096031
Ref: 2d4010096031
Ref: library/zipfile zipfile Path exists10096299
Ref: 2d4110096299
Ref: library/zipfile zipfile Path suffix10096439
Ref: 8cb10096439
Ref: library/zipfile zipfile Path stem10096680
Ref: 8ca10096680
Ref: library/zipfile zipfile Path suffixes10096840
Ref: 8cc10096840
Ref: library/zipfile zipfile Path read_text10097045
Ref: 1a1610097045
Ref: library/zipfile zipfile Path read_bytes10097682
Ref: 2d4210097682
Ref: library/zipfile zipfile Path joinpath10097753
Ref: 2d4310097753
Ref: Objetos Path-Footnote-110098463
Node: Objetos PyZipFile10098502
Ref: library/zipfile id310098638
Ref: 2d4410098638
Ref: library/zipfile pyzipfile-objects10098638
Ref: 2d4510098638
Ref: library/zipfile zipfile PyZipFile10098831
Ref: 11ef10098831
Ref: library/zipfile zipfile PyZipFile writepy10099178
Ref: 11ee10099178
Node: Objetos ZipInfo10102311
Ref: library/zipfile id410102464
Ref: 2d4610102464
Ref: library/zipfile zipinfo-objects10102464
Ref: 2d2710102464
Ref: library/zipfile zipfile ZipInfo from_file10102860
Ref: efa10102860
Ref: library/zipfile zipfile ZipInfo is_dir10104090
Ref: efb10104090
Ref: library/zipfile zipfile ZipInfo filename10104314
Ref: 2d4710104314
Ref: library/zipfile zipfile ZipInfo date_time10104379
Ref: 2d4810104379
Ref: library/zipfile zipfile ZipInfo compress_type10106246
Ref: 2d4910106246
Ref: library/zipfile zipfile ZipInfo comment10106330
Ref: 2d4a10106330
Ref: library/zipfile zipfile ZipInfo extra10106452
Ref: 2d4b10106452
Ref: library/zipfile zipfile ZipInfo create_system10106659
Ref: 2d4c10106659
Ref: library/zipfile zipfile ZipInfo create_version10106736
Ref: 2d4d10106736
Ref: library/zipfile zipfile ZipInfo extract_version10106823
Ref: 2d4e10106823
Ref: library/zipfile zipfile ZipInfo reserved10106922
Ref: 2d4f10106922
Ref: library/zipfile zipfile ZipInfo flag_bits10106974
Ref: 2d5010106974
Ref: library/zipfile zipfile ZipInfo volume10107041
Ref: 2d5110107041
Ref: library/zipfile zipfile ZipInfo internal_attr10107121
Ref: 2d5210107121
Ref: library/zipfile zipfile ZipInfo external_attr10107184
Ref: 2d5310107184
Ref: library/zipfile zipfile ZipInfo header_offset10107257
Ref: 2d5410107257
Ref: library/zipfile zipfile ZipInfo CRC10107351
Ref: 2d5510107351
Ref: library/zipfile zipfile ZipInfo compress_size10107419
Ref: 2d5610107419
Ref: library/zipfile zipfile ZipInfo file_size10107493
Ref: 2d3010107493
Ref: Objetos ZipInfo-Footnote-110107604
Node: Interface de Linha de Comando10107672
Ref: library/zipfile command-line-interface10107836
Ref: 2d5710107836
Ref: library/zipfile zipfile-commandline10107836
Ref: 2d5810107836
Node: Opções de linha de comando10108677
Ref: library/zipfile command-line-options10108771
Ref: 2d5c10108771
Ref: library/zipfile cmdoption-zipfile-l10108846
Ref: 2d5b10108846
Ref: library/zipfile cmdoption-zipfile-list10108871
Ref: 2d5d10108871
Ref: library/zipfile cmdoption-zipfile-c10108941
Ref: 2d5910108941
Ref: library/zipfile cmdoption-zipfile-create10108990
Ref: 2d5e10108990
Ref: library/zipfile cmdoption-zipfile-e10109101
Ref: 2d5a10109101
Ref: library/zipfile cmdoption-zipfile-extract10109139
Ref: 2d5f10109139
Ref: library/zipfile cmdoption-zipfile-t10109244
Ref: 2d6010109244
Ref: library/zipfile cmdoption-zipfile-test10109269
Ref: 2d6110109269
Ref: library/zipfile cmdoption-zipfile-metadata-encoding10109348
Ref: 2d6210109348
Node: Armadilhas de descompressão10109541
Ref: library/zipfile decompression-pitfalls10109681
Ref: 2d6310109681
Node: Do próprio arquivo10110009
Ref: library/zipfile from-file-itself10110137
Ref: 2d6410110137
Node: Limitações do sistema de arquivos10110359
Ref: library/zipfile file-system-limitations10110520
Ref: 2d6510110520
Node: Limitações de recursos10110877
Ref: library/zipfile resources-limitations10111032
Ref: 2d6610111032
Ref: library/zipfile zipfile-resources-limitations10111032
Ref: 2d6710111032
Ref: Limitações de recursos-Footnote-110111387
Node: Interrupção10111434
Ref: library/zipfile interruption10111590
Ref: 2d6810111590
Node: Comportamentos padrão da extração10111805
Ref: library/zipfile default-behaviors-of-extraction10111928
Ref: 2d6910111928
Node: tarfile — Ler e gravar arquivos do tipo tar10112222
Ref: library/tarfile doc10112385
Ref: 2d6a10112385
Ref: library/tarfile module-tarfile10112385
Ref: e410112385
Ref: library/tarfile no-color10112385
Ref: 2d6b10112385
Ref: library/tarfile tarfile-read-and-write-tar-archive-files10112385
Ref: 2d6c10112385
Ref: library/tarfile tarfile open10114459
Ref: 106d10114459
Ref: library/tarfile tarfile is_tarfile10123079
Ref: 1ae810123079
Ref: library/tarfile tarfile TarError10123449
Ref: 2d7110123449
Ref: library/tarfile tarfile ReadError10123547
Ref: 1b3e10123547
Ref: library/tarfile tarfile CompressionError10123734
Ref: 2d6f10123734
Ref: library/tarfile tarfile StreamError10123914
Ref: 2d7210123914
Ref: library/tarfile tarfile ExtractError10124051
Ref: 2d7310124051
Ref: library/tarfile tarfile HeaderError10124237
Ref: 2d7410124237
Ref: library/tarfile tarfile FilterError10124366
Ref: 2d7610124366
Ref: library/tarfile tarfile FilterError tarinfo10124469
Ref: 2d7810124469
Ref: library/tarfile tarfile AbsolutePathError10124608
Ref: 2d7a10124608
Ref: library/tarfile tarfile OutsideDestinationError10124735
Ref: 2d7b10124735
Ref: library/tarfile tarfile SpecialFileError10124874
Ref: 2d7c10124874
Ref: library/tarfile tarfile AbsoluteLinkError10125032
Ref: 2d7d10125032
Ref: library/tarfile tarfile LinkOutsideDestinationError10125168
Ref: 2d7e10125168
Ref: library/tarfile tarfile LinkFallbackError10125335
Ref: 29c10125335
Ref: library/tarfile tarfile ENCODING10125779
Ref: 2d7f10125779
Ref: library/tarfile tarfile REGTYPE10125967
Ref: 2d8010125967
Ref: library/tarfile tarfile AREGTYPE10125993
Ref: 2d8110125993
Ref: library/tarfile tarfile LNKTYPE10126063
Ref: 2d8310126063
Ref: library/tarfile tarfile SYMTYPE10126146
Ref: 2d8410126146
Ref: library/tarfile tarfile CHRTYPE10126216
Ref: 2d8510126216
Ref: library/tarfile tarfile BLKTYPE10126305
Ref: 2d8610126305
Ref: library/tarfile tarfile DIRTYPE10126389
Ref: 2d8710126389
Ref: library/tarfile tarfile FIFOTYPE10126454
Ref: 2d8810126454
Ref: library/tarfile tarfile CONTTYPE10126538
Ref: 2d8910126538
Ref: library/tarfile tarfile GNUTYPE_LONGNAME10126611
Ref: 2d8a10126611
Ref: library/tarfile tarfile GNUTYPE_LONGLINK10126690
Ref: 2d8b10126690
Ref: library/tarfile tarfile GNUTYPE_SPARSE10126769
Ref: 2d8c10126769
Ref: library/tarfile tarfile USTAR_FORMAT10127046
Ref: 2d8e10127046
Ref: library/tarfile tarfile GNU_FORMAT10127114
Ref: 2d8f10127114
Ref: library/tarfile tarfile PAX_FORMAT10127166
Ref: 2d9010127166
Ref: library/tarfile tarfile DEFAULT_FORMAT10127230
Ref: 2d9110127230
Ref: tarfile — Ler e gravar arquivos do tipo tar-Footnote-110128144
Ref: tarfile — Ler e gravar arquivos do tipo tar-Footnote-210128211
Node: TarFile Objects10128283
Ref: library/tarfile id110128404
Ref: 2d9210128404
Ref: library/tarfile tarfile-objects10128404
Ref: 2d6e10128404
Ref: library/tarfile tarfile TarFile10129297
Ref: 140c10129297
Ref: library/tarfile tarfile TarFile open10132661
Ref: 1ae910132661
Ref: library/tarfile tarfile TarFile getmember10132828
Ref: 1af810132828
Ref: library/tarfile tarfile TarFile getmembers10133153
Ref: 106f10133153
Ref: library/tarfile tarfile TarFile getnames10133336
Ref: 2d9410133336
Ref: library/tarfile tarfile TarFile list10133499
Ref: 106e10133499
Ref: library/tarfile tarfile TarFile next10133952
Ref: 2d9510133952
Ref: library/tarfile tarfile TarFile extractall10134175
Ref: 29a10134175
Ref: library/tarfile tarfile TarFile extract10136122
Ref: 29b10136122
Ref: library/tarfile tarfile TarFile extractfile10137427
Ref: 2d9610137427
Ref: library/tarfile tarfile TarFile errorlevel10138095
Ref: 29d10138095
Ref: library/tarfile tarfile TarFile extraction_filter10139064
Ref: 2d9710139064
Ref: library/tarfile tarfile TarFile add10140349
Ref: de210140349
Ref: library/tarfile tarfile TarFile addfile10141265
Ref: 18eb10141265
Ref: library/tarfile tarfile TarFile gettarinfo10141787
Ref: 2d9810141787
Ref: library/tarfile tarfile TarFile close10142941
Ref: 2d9b10142941
Ref: library/tarfile tarfile TarFile pax_headers10143085
Ref: 2d9c10143085
Node: Objetos TarInfo10143222
Ref: library/tarfile id210143373
Ref: 2d9d10143373
Ref: library/tarfile tarinfo-objects10143373
Ref: 2d7910143373
Ref: library/tarfile tarfile TarInfo10144601
Ref: 140d10144601
Ref: library/tarfile tarfile TarInfo frombuf10144682
Ref: 2d7510144682
Ref: library/tarfile tarfile TarInfo fromtarfile10144921
Ref: 2d9f10144921
Ref: library/tarfile tarfile TarInfo tobuf10145104
Ref: 2da010145104
Ref: library/tarfile tarfile TarInfo name10145547
Ref: 2d9a10145547
Ref: library/tarfile tarfile TarInfo size10145615
Ref: 2d9910145615
Ref: library/tarfile tarfile TarInfo mtime10145684
Ref: 2da110145684
Ref: library/tarfile tarfile TarInfo mode10146044
Ref: 2da410146044
Ref: library/tarfile tarfile TarInfo type10146316
Ref: 2d8210146316
Ref: library/tarfile tarfile TarInfo linkname10146759
Ref: 2da510146759
Ref: library/tarfile tarfile TarInfo uid10147170
Ref: 2da610147170
Ref: library/tarfile tarfile TarInfo gid10147462
Ref: 2da710147462
Ref: library/tarfile tarfile TarInfo uname10147751
Ref: 2da810147751
Ref: library/tarfile tarfile TarInfo gname10147995
Ref: 2da910147995
Ref: library/tarfile tarfile TarInfo chksum10148236
Ref: 2daa10148236
Ref: library/tarfile tarfile TarInfo devmajor10148326
Ref: 2dab10148326
Ref: library/tarfile tarfile TarInfo devminor10148415
Ref: 2dac10148415
Ref: library/tarfile tarfile TarInfo offset10148500
Ref: 2dad10148500
Ref: library/tarfile tarfile TarInfo offset_data10148587
Ref: 2dae10148587
Ref: library/tarfile tarfile TarInfo sparse10148680
Ref: 2daf10148680
Ref: library/tarfile tarfile TarInfo pax_headers10148743
Ref: 2db010148743
Ref: library/tarfile tarfile TarInfo replace10148885
Ref: 2d9e10148885
Ref: library/tarfile tarfile TarInfo isfile10149580
Ref: 2db110149580
Ref: library/tarfile tarfile TarInfo isreg10149701
Ref: 2db210149701
Ref: library/tarfile tarfile TarInfo isdir10149768
Ref: 2db310149768
Ref: library/tarfile tarfile TarInfo issym10149852
Ref: 2db410149852
Ref: library/tarfile tarfile TarInfo islnk10149941
Ref: 2db510149941
Ref: library/tarfile tarfile TarInfo ischr10150027
Ref: 2db610150027
Ref: library/tarfile tarfile TarInfo isblk10150110
Ref: 2db710150110
Ref: library/tarfile tarfile TarInfo isfifo10150196
Ref: 2db810150196
Ref: library/tarfile tarfile TarInfo isdev10150275
Ref: 2db910150275
Node: Filtros de extração10150397
Ref: library/tarfile extraction-filters10150565
Ref: 2dba10150565
Ref: library/tarfile tarfile-extraction-filter10150565
Ref: 68c10150565
Ref: Filtros de extração-Footnote-110153806
Node: Default named filters10153848
Ref: library/tarfile default-named-filters10153949
Ref: 2dbc10153949
Ref: library/tarfile tarfile fully_trusted_filter10154113
Ref: 2d6d10154113
Ref: library/tarfile tarfile tar_filter10154263
Ref: 2dbb10154263
Ref: library/tarfile tarfile data_filter10155070
Ref: 29910155070
Node: Filter errors10156932
Ref: library/tarfile filter-errors10157076
Ref: 2dbd10157076
Ref: library/tarfile tarfile-extraction-refuse10157076
Ref: 2d7710157076
Node: Dicas para verificação adicional10157436
Ref: library/tarfile hints-for-further-verification10157600
Ref: 2dbe10157600
Ref: library/tarfile tarfile-further-verification10157600
Ref: 2b9710157600
Node: Suporte a versões mais antigas do Python10159363
Ref: library/tarfile supporting-older-python-versions10159548
Ref: 2dbf10159548
Node: Stateful extraction filter example10161129
Ref: library/tarfile stateful-extraction-filter-example10161271
Ref: 2dc010161271
Node: Interface de Linha de Comando<2>10162066
Ref: library/tarfile command-line-interface10162231
Ref: 2dc110162231
Ref: library/tarfile tarfile-commandline10162231
Ref: 11c110162231
Node: Opções de linha de comando<2>10163221
Ref: library/tarfile command-line-options10163321
Ref: 2dc510163321
Ref: library/tarfile cmdoption-tarfile-l10163398
Ref: 2dc410163398
Ref: library/tarfile cmdoption-tarfile-list10163423
Ref: 2dc610163423
Ref: library/tarfile cmdoption-tarfile-c10163496
Ref: 2dc210163496
Ref: library/tarfile cmdoption-tarfile-create10163545
Ref: 2dc710163545
Ref: library/tarfile cmdoption-tarfile-e10163660
Ref: 2dc310163660
Ref: library/tarfile cmdoption-tarfile-extract10163700
Ref: 2dc810163700
Ref: library/tarfile cmdoption-tarfile-t10163836
Ref: 2dc910163836
Ref: library/tarfile cmdoption-tarfile-test10163861
Ref: 2dca10163861
Ref: library/tarfile cmdoption-tarfile-v10163939
Ref: 2dcb10163939
Ref: library/tarfile cmdoption-tarfile-verbose10163939
Ref: 2dcc10163939
Ref: library/tarfile cmdoption-tarfile-filter10163990
Ref: 2dcd10163990
Node: Exemplos<10>10164228
Ref: library/tarfile examples10164395
Ref: 2dce10164395
Ref: library/tarfile tar-examples10164395
Ref: 2d7010164395
Node: Reading examples10164486
Ref: library/tarfile reading-examples10164576
Ref: 2dcf10164576
Node: Writing examples10165694
Ref: library/tarfile writing-examples10165784
Ref: 2dd010165784
Node: Formatos tar suportados10166956
Ref: library/tarfile supported-tar-formats10167111
Ref: 2dd110167111
Ref: library/tarfile tar-formats10167111
Ref: 2d8d10167111
Node: Problemas de Unicode10169337
Ref: library/tarfile tar-unicode10169471
Ref: 2d9310169471
Ref: library/tarfile unicode-issues10169471
Ref: 2dd210169471
Node: Formatos de Arquivo10171471
Ref: library/fileformats doc10171635
Ref: 2dd410171635
Ref: library/fileformats file-formats10171635
Ref: 2dd510171635
Ref: library/fileformats fileformats10171635
Ref: 2dd610171635
Ref: library/fileformats no-color10171635
Ref: 2dd710171635
Node: csv — Leitura e escrita de arquivos CSV10172162
Ref: library/csv doc10172335
Ref: 2dd810172335
Ref: library/csv csv-csv-file-reading-and-writing10172335
Ref: 2dd910172335
Ref: library/csv module-csv10172335
Ref: 2d10172335
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-110174377
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-210174440
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-310174499
Node: Conteúdo do módulo<3>10174541
Ref: library/csv csv-contents10174689
Ref: 2dda10174689
Ref: library/csv module-contents10174689
Ref: 2ddb10174689
Ref: library/csv csv reader10174805
Ref: 6a310174805
Ref: library/csv csv writer10176574
Ref: 6a410176574
Ref: library/csv csv register_dialect10178478
Ref: 188b10178478
Ref: library/csv csv unregister_dialect10178980
Ref: 1aaa10178980
Ref: library/csv csv get_dialect10179188
Ref: 1aa910179188
Ref: library/csv csv list_dialects10179432
Ref: 1aab10179432
Ref: library/csv csv field_size_limit10179524
Ref: 1aa810179524
Ref: library/csv csv DictReader10179824
Ref: bce10179824
Ref: library/csv csv DictWriter10181808
Ref: 13fa10181808
Ref: library/csv csv Dialect10183707
Ref: 179510183707
Ref: library/csv csv excel10184613
Ref: 2ddf10184613
Ref: library/csv csv excel_tab10184803
Ref: 2de010184803
Ref: library/csv csv unix_dialect10185020
Ref: 13f910185020
Ref: library/csv csv Sniffer10185342
Ref: 2de110185342
Ref: library/csv csv Sniffer sniff10185518
Ref: 2de210185518
Ref: library/csv csv Sniffer has_header10185882
Ref: 1b4610185882
Ref: library/csv csv-constants10187114
Ref: 2de310187114
Ref: library/csv csv QUOTE_ALL10187172
Ref: 2de410187172
Ref: library/csv csv QUOTE_MINIMAL10187279
Ref: 2de510187279
Ref: library/csv csv QUOTE_NONNUMERIC10187537
Ref: 189a10187537
Ref: library/csv csv QUOTE_NONE10188120
Ref: 2de610188120
Ref: library/csv csv QUOTE_NOTNULL10188759
Ref: 6a110188759
Ref: library/csv csv QUOTE_STRINGS10189239
Ref: 6a210189239
Ref: library/csv csv Error10189793
Ref: 2dde10189793
Ref: Conteúdo do módulo<3>-Footnote-110189931
Ref: Conteúdo do módulo<3>-Footnote-210190324
Node: Dialetos e parâmetros de formatação10190717
Ref: library/csv csv-fmt-params10190888
Ref: 2ddd10190888
Ref: library/csv dialects-and-formatting-parameters10190888
Ref: 2de710190888
Ref: library/csv csv Dialect delimiter10191718
Ref: 2de810191718
Ref: library/csv csv Dialect doublequote10191841
Ref: 2de910191841
Ref: library/csv csv Dialect escapechar10192347
Ref: 2dea10192347
Ref: library/csv csv Dialect lineterminator10193088
Ref: 2deb10193088
Ref: library/csv csv Dialect quotechar10193439
Ref: 2dec10193439
Ref: library/csv csv Dialect quoting10193978
Ref: 2ded10193978
Ref: library/csv csv Dialect skipinitialspace10194317
Ref: 2dee10194317
Ref: library/csv csv Dialect strict10194610
Ref: 2def10194610
Node: Objetos Reader10194761
Ref: library/csv id310194923
Ref: 2df010194923
Ref: library/csv reader-objects10194923
Ref: 2ddc10194923
Ref: library/csv csv csvreader __next__10195122
Ref: 2df110195122
Ref: library/csv csv csvreader dialect10195537
Ref: 2df210195537
Ref: library/csv csv csvreader line_num10195659
Ref: 2df310195659
Ref: library/csv csv DictReader fieldnames10195921
Ref: 2df410195921
Node: Objetos Writer10196132
Ref: library/csv writer-objects10196268
Ref: 2df510196268
Ref: library/csv csv csvwriter writerow10196904
Ref: fde10196904
Ref: library/csv csv csvwriter writerows10197239
Ref: 2df610197239
Ref: library/csv csv csvwriter dialect10197519
Ref: 2df710197519
Ref: library/csv csv DictWriter writeheader10197680
Ref: 13fb10197680
Node: Exemplos<11>10198198
Ref: library/csv csv-examples10198311
Ref: 2df810198311
Ref: library/csv examples10198311
Ref: 2df910198311
Node: configparser — Analisador sintático de arquivo de configuração10200401
Ref: library/configparser doc10200616
Ref: 2dfa10200616
Ref: library/configparser configparser-configuration-file-parser10200616
Ref: 2dfb10200616
Ref: library/configparser module-configparser10200616
Ref: 2610200616
Ref: library/configparser no-color10200616
Ref: 2dfc10200616
Ref: configparser — Analisador sintático de arquivo de configuração-Footnote-110202378
Node: Início rápido10202450
Ref: library/configparser quick-start10202603
Ref: 2dfd10202603
Ref: Início rápido-Footnote-110206505
Ref: Início rápido-Footnote-210206779
Node: Tipos de dados suportados10207053
Ref: library/configparser supported-datatypes10207231
Ref: 2e0110207231
Ref: Tipos de dados suportados-Footnote-110208826
Ref: Tipos de dados suportados-Footnote-210209100
Node: Valores reservas10209374
Ref: library/configparser fallback-values10209563
Ref: 2e0510209563
Node: Estrutura dos arquivos INI10211178
Ref: library/configparser supported-ini-file-structure10211364
Ref: 2dfe10211364
Ref: Estrutura dos arquivos INI-Footnote-110214539
Ref: Estrutura dos arquivos INI-Footnote-210214813
Ref: Estrutura dos arquivos INI-Footnote-310215087
Ref: Estrutura dos arquivos INI-Footnote-410215361
Ref: Estrutura dos arquivos INI-Footnote-510215635
Node: Seções não nomeadas10215909
Ref: library/configparser id1010216104
Ref: 2e0710216104
Ref: library/configparser unnamed-sections10216104
Ref: 2e0810216104
Node: Interpolação de valores10216592
Ref: library/configparser interpolation-of-values10216803
Ref: 2e0910216803
Ref: library/configparser configparser BasicInterpolation10217073
Ref: 92110217073
Ref: library/configparser configparser ExtendedInterpolation10218443
Ref: 92210218443
Ref: Interpolação de valores-Footnote-110219980
Node: Acesso através do protocolo de mapeamento10220254
Ref: library/configparser mapping-protocol-access10220498
Ref: 2dff10220498
Ref: Acesso através do protocolo de mapeamento-Footnote-110223788
Node: Personalizando o comportamento do analisador sintático10224062
Ref: library/configparser customizing-parser-behaviour10224305
Ref: 2e0010224305
Ref: library/configparser configparser ConfigParser BOOLEAN_STATES10236170
Ref: 2e0c10236170
Ref: library/configparser configparser ConfigParser SECTCRE10238488
Ref: 2e0610238488
Node: Exemplos de APIs legadas10239763
Ref: library/configparser legacy-api-examples10239984
Ref: 2e0d10239984
Node: Objetos ConfigParser10244032
Ref: library/configparser configparser-objects10244221
Ref: 2e0e10244221
Ref: library/configparser id1310244221
Ref: 2e0f10244221
Ref: library/configparser configparser ConfigParser10244284
Ref: 4d810244284
Ref: library/configparser configparser ConfigParser defaults10250199
Ref: 2e1210250199
Ref: library/configparser configparser ConfigParser sections10250307
Ref: 2e1310250307
Ref: library/configparser configparser ConfigParser add_section10250455
Ref: 146910250455
Ref: library/configparser configparser ConfigParser has_section10251000
Ref: 2e1410251000
Ref: library/configparser configparser ConfigParser options10251167
Ref: 2e1510251167
Ref: library/configparser configparser ConfigParser has_option10251295
Ref: 2e1610251295
Ref: library/configparser configparser ConfigParser read10251615
Ref: 165710251615
Ref: library/configparser configparser ConfigParser read_file10253568
Ref: 71f10253568
Ref: library/configparser configparser ConfigParser read_string10254081
Ref: 2e0b10254081
Ref: library/configparser configparser ConfigParser read_dict10254490
Ref: 2e0a10254490
Ref: library/configparser configparser ConfigParser get10255307
Ref: 146710255307
Ref: library/configparser configparser ConfigParser getint10256367
Ref: 2e0310256367
Ref: library/configparser configparser ConfigParser getfloat10256668
Ref: 2e0410256668
Ref: library/configparser configparser ConfigParser getboolean10256982
Ref: 2e0210256982
Ref: library/configparser configparser ConfigParser items10257762
Ref: 2e1710257762
Ref: library/configparser configparser ConfigParser set10258467
Ref: 146810258467
Ref: library/configparser configparser ConfigParser write10258789
Ref: 1dd10258789
Ref: library/configparser configparser ConfigParser remove_option10259776
Ref: 2e1910259776
Ref: library/configparser configparser ConfigParser remove_section10260100
Ref: 2e1a10260100
Ref: library/configparser configparser ConfigParser optionxform10260316
Ref: 2e1010260316
Ref: library/configparser configparser UNNAMED_SECTION10261519
Ref: 189310261519
Ref: library/configparser configparser MAX_INTERPOLATION_DEPTH10261714
Ref: 2e1b10261714
Node: Objetos RawConfigParser10261960
Ref: library/configparser id1510262138
Ref: 2e1c10262138
Ref: library/configparser rawconfigparser-objects10262138
Ref: 2e1d10262138
Ref: library/configparser configparser RawConfigParser10262207
Ref: 115a10262207
Ref: library/configparser configparser RawConfigParser add_section10263652
Ref: 2e1e10263652
Ref: library/configparser configparser RawConfigParser set10264460
Ref: 2e2010264460
Node: Exceções<9>10265391
Ref: library/configparser exceptions10265540
Ref: 2e2110265540
Ref: library/configparser configparser Error10265581
Ref: 2e2210265581
Ref: library/configparser configparser NoSectionError10265698
Ref: 2e1810265698
Ref: library/configparser configparser DuplicateSectionError10265820
Ref: 146a10265820
Ref: library/configparser configparser DuplicateOptionError10266274
Ref: 146b10266274
Ref: library/configparser configparser NoOptionError10266777
Ref: 2e2310266777
Ref: library/configparser configparser InterpolationError10266927
Ref: 2e2410266927
Ref: library/configparser configparser InterpolationDepthError10267091
Ref: 2e2510267091
Ref: library/configparser configparser InterpolationMissingOptionError10267366
Ref: 2e2610267366
Ref: library/configparser configparser InterpolationSyntaxError10267570
Ref: 2e2710267570
Ref: library/configparser configparser MissingSectionHeaderError10267815
Ref: 2e2810267815
Ref: library/configparser configparser ParsingError10267971
Ref: 71e10267971
Ref: library/configparser configparser MultilineContinuationError10268293
Ref: 2e1110268293
Ref: library/configparser configparser UnnamedSectionDisabledError10268490
Ref: 2e1f10268490
Ref: library/configparser configparser InvalidWriteError10268679
Ref: 1de10268679
Node: tomllib — Analisa arquivos TOML10269156
Ref: library/tomllib doc10269370
Ref: 2e2910269370
Ref: library/tomllib module-tomllib10269370
Ref: 10210269370
Ref: library/tomllib no-color10269370
Ref: 2e2a10269370
Ref: library/tomllib tomllib-parse-toml-files10269370
Ref: 2e2b10269370
Ref: library/tomllib tomllib load10270278
Ref: 2e2c10270278
Ref: library/tomllib tomllib loads10271139
Ref: 187e10271139
Ref: library/tomllib tomllib TOMLDecodeError10271602
Ref: 186310271602
Ref: library/tomllib tomllib TOMLDecodeError msg10271744
Ref: 2e2e10271744
Ref: library/tomllib tomllib TOMLDecodeError doc10271814
Ref: 2e2f10271814
Ref: library/tomllib tomllib TOMLDecodeError pos10271883
Ref: 2e3010271883
Ref: library/tomllib tomllib TOMLDecodeError lineno10271961
Ref: 2e3110271961
Ref: library/tomllib tomllib TOMLDecodeError colno10272031
Ref: 2e3210272031
Ref: tomllib — Analisa arquivos TOML-Footnote-110272527
Ref: tomllib — Analisa arquivos TOML-Footnote-210272591
Ref: tomllib — Analisa arquivos TOML-Footnote-310272619
Ref: tomllib — Analisa arquivos TOML-Footnote-410272661
Node: Exemplos<12>10272703
Ref: library/tomllib examples10272814
Ref: 2e3310272814
Node: Tabela de conversão10273166
Ref: library/tomllib conversion-table10273277
Ref: 2e3410273277
Ref: library/tomllib toml-to-py-table10273337
Ref: 2e2d10273337
Node: netrc — Arquivo de processamento netrc10274756
Ref: library/netrc doc10274951
Ref: 2e3510274951
Ref: library/netrc module-netrc10274951
Ref: 9f10274951
Ref: library/netrc netrc-netrc-file-processing10274951
Ref: 2e3610274951
Ref: library/netrc no-color10274951
Ref: 2e3710274951
Ref: library/netrc netrc netrc10275290
Ref: 1b6410275290
Ref: library/netrc netrc NetrcParseError10277378
Ref: 2e3810277378
Ref: library/netrc netrc NetrcParseError msg10277613
Ref: 2e3910277613
Ref: library/netrc netrc NetrcParseError filename10277678
Ref: 2e3a10277678
Ref: library/netrc netrc NetrcParseError lineno10277747
Ref: 2e3b10277747
Ref: netrc — Arquivo de processamento netrc-Footnote-110277898
Node: Objetos netrc10277963
Ref: library/netrc id110278053
Ref: 2e3c10278053
Ref: library/netrc netrc-objects10278053
Ref: 2e3d10278053
Ref: library/netrc netrc netrc authenticators10278172
Ref: 2e3e10278172
Ref: library/netrc netrc netrc __repr__10278551
Ref: 2e3f10278551
Ref: library/netrc netrc netrc hosts10278816
Ref: 2e4010278816
Ref: library/netrc netrc netrc macros10279019
Ref: 2e4110279019
Node: plistlib — Gera e analisa arquivos Apple plist10279114
Ref: library/plistlib doc10279267
Ref: 2e4210279267
Ref: library/plistlib module-plistlib10279267
Ref: b010279267
Ref: library/plistlib no-color10279267
Ref: 2e4310279267
Ref: library/plistlib plistlib-generate-and-parse-apple-plist-files10279267
Ref: 2e4410279267
Ref: library/plistlib plistlib load10280873
Ref: b3e10280873
Ref: library/plistlib plistlib loads10282248
Ref: b3f10282248
Ref: library/plistlib plistlib dump10282618
Ref: b4010282618
Ref: library/plistlib plistlib dumps10284147
Ref: b4110284147
Ref: library/plistlib plistlib UID10284523
Ref: c0c10284523
Ref: library/plistlib plistlib UID data10284710
Ref: 2e4510284710
Ref: library/plistlib plistlib FMT_XML10284906
Ref: 116f10284906
Ref: library/plistlib plistlib FMT_BINARY10285008
Ref: 117010285008
Ref: library/plistlib plistlib InvalidFileException10285160
Ref: 1bd210285160
Ref: plistlib — Gera e analisa arquivos Apple plist-Footnote-110285371
Ref: plistlib — Gera e analisa arquivos Apple plist-Footnote-210285439
Node: Exemplos<13>10285538
Ref: library/plistlib examples10285635
Ref: 2e4610285635
Node: Serviços Criptográficos10286492
Ref: library/crypto doc10286664
Ref: 2e4710286664
Ref: library/crypto crypto10286664
Ref: 2e4810286664
Ref: library/crypto cryptographic-services10286664
Ref: 2e4910286664
Ref: library/crypto no-color10286664
Ref: 2e4a10286664
Node: hashlib — Resumos de mensagens e hashes seguros10287116
Ref: library/hashlib doc10287297
Ref: 2e4b10287297
Ref: library/hashlib hashlib-secure-hashes-and-message-digests10287297
Ref: 2e4c10287297
Ref: library/hashlib module-hashlib10287297
Ref: 6c10287297
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-110288250
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-210288317
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-310288387
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-410288437
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-510288494
Node: Algoritmos de hash10288553
Ref: library/hashlib hash-algorithms10288669
Ref: 2e4d10288669
Ref: library/hashlib id110288669
Ref: 2e4e10288669
Ref: library/hashlib hashlib-usedforsecurity10290975
Ref: 2e5710290975
Ref: Algoritmos de hash-Footnote-110291701
Ref: Algoritmos de hash-Footnote-210291809
Node: Uso10291856
Ref: library/hashlib usage10291993
Ref: 2e5810291993
Node: Construtores10292641
Ref: library/hashlib constructors10292769
Ref: 2e5910292769
Ref: library/hashlib hashlib new10292814
Ref: 1bea10292814
Ref: library/hashlib hashlib md510293404
Ref: 179110293404
Ref: library/hashlib hashlib sha110293465
Ref: 2e5210293465
Ref: library/hashlib hashlib sha22410293527
Ref: 2e5310293527
Ref: library/hashlib hashlib sha25610293591
Ref: 180f10293591
Ref: library/hashlib hashlib sha38410293655
Ref: 2e5410293655
Ref: library/hashlib hashlib sha51210293719
Ref: 2e5510293719
Ref: library/hashlib hashlib sha3_22410293783
Ref: e9410293783
Ref: library/hashlib hashlib sha3_25610293849
Ref: e9510293849
Ref: library/hashlib hashlib sha3_38410293915
Ref: e9610293915
Ref: library/hashlib hashlib sha3_51210293981
Ref: e9710293981
Node: Atributos10294159
Ref: library/hashlib attributes10294296
Ref: 2e5a10294296
Ref: library/hashlib hashlib algorithms_guaranteed10294400
Ref: 156510294400
Ref: library/hashlib hashlib algorithms_available10294784
Ref: 156610294784
Node: Objetos hash10295236
Ref: library/hashlib hash-objects10295402
Ref: 2e5b10295402
Ref: library/hashlib hashlib hash digest_size10295559
Ref: 2e5c10295559
Ref: library/hashlib hashlib hash block_size10295632
Ref: 2e5d10295632
Ref: library/hashlib hashlib hash name10295767
Ref: 113d10295767
Ref: library/hashlib hashlib hash update10296204
Ref: 2e4f10296204
Ref: library/hashlib hashlib hash digest10296495
Ref: 2e5010296495
Ref: library/hashlib hashlib hash hexdigest10296745
Ref: 2e5110296745
Ref: library/hashlib hashlib hash copy10297049
Ref: 2e5e10297049
Node: Resumos de comprimento variável de SHAKE10297258
Ref: library/hashlib shake-variable-length-digests10297430
Ref: 2e5f10297430
Ref: library/hashlib hashlib shake_12810297532
Ref: e9810297532
Ref: library/hashlib hashlib shake_25610297599
Ref: e9910297599
Ref: library/hashlib hashlib shake digest10297954
Ref: 1cd010297954
Ref: library/hashlib hashlib shake hexdigest10298190
Ref: 1cd110298190
Node: Hash de arquivo10298652
Ref: library/hashlib file-hashing10298832
Ref: 2e6010298832
Ref: library/hashlib hashlib file_digest10298985
Ref: 84910298985
Node: Derivação de chave10300791
Ref: library/hashlib key-derivation10300936
Ref: 2e6110300936
Ref: library/hashlib hashlib pbkdf2_hmac10301292
Ref: 72810301292
Ref: library/hashlib hashlib scrypt10303160
Ref: e2c10303160
Ref: Derivação de chave-Footnote-110303973
Ref: Derivação de chave-Footnote-210304030
Ref: Derivação de chave-Footnote-310304117
Ref: Derivação de chave-Footnote-410304228
Node: BLAKE210304287
Ref: library/hashlib blake210304408
Ref: 2e6210304408
Ref: library/hashlib hashlib-blake210304408
Ref: 200510304408
Ref: BLAKE2-Footnote-110305146
Ref: BLAKE2-Footnote-210305177
Ref: BLAKE2-Footnote-310305236
Node: Criando objetos hash10305314
Ref: library/hashlib creating-hash-objects10305399
Ref: 2e6310305399
Ref: library/hashlib hashlib blake2b10305528
Ref: 84710305528
Ref: library/hashlib hashlib blake2s10305764
Ref: 84810305764
Ref: Criando objetos hash-Footnote-110308846
Node: Constantes<5>10308897
Ref: library/hashlib constants10309003
Ref: 2e6410309003
Ref: library/hashlib hashlib blake2b SALT_SIZE10309046
Ref: 2e6510309046
Ref: library/hashlib hashlib blake2s SALT_SIZE10309075
Ref: 2e6610309075
Ref: library/hashlib hashlib blake2b PERSON_SIZE10309160
Ref: 2e6710309160
Ref: library/hashlib hashlib blake2s PERSON_SIZE10309191
Ref: 2e6810309191
Ref: library/hashlib hashlib blake2b MAX_KEY_SIZE10309296
Ref: 2e6910309296
Ref: library/hashlib hashlib blake2s MAX_KEY_SIZE10309328
Ref: 2e6a10309328
Ref: library/hashlib hashlib blake2b MAX_DIGEST_SIZE10309379
Ref: 2e6b10309379
Ref: library/hashlib hashlib blake2s MAX_DIGEST_SIZE10309414
Ref: 2e6c10309414
Node: Exemplos<14>10309505
Ref: library/hashlib examples10309598
Ref: 2e6d10309598
Node: Simple hashing10309777
Ref: library/hashlib simple-hashing10309877
Ref: 2e6e10309877
Node: Using different digest sizes10311331
Ref: library/hashlib using-different-digest-sizes10311453
Ref: 2e6f10311453
Node: Keyed hashing10312596
Ref: library/hashlib keyed-hashing10312722
Ref: 2e7010312722
Ref: Keyed hashing-Footnote-110314733
Node: Randomized hashing10314776
Ref: library/hashlib randomized-hashing10314889
Ref: 2e7110314889
Ref: Randomized hashing-Footnote-110317491
Ref: Randomized hashing-Footnote-210317543
Node: Personalization10317578
Ref: library/hashlib personalization10317690
Ref: 2e7210317690
Ref: Personalization-Footnote-110319685
Node: Modo árvore10319755
Ref: library/hashlib tree-mode10319840
Ref: 2e7310319840
Node: Credits10321096
Ref: library/hashlib credits10321167
Ref: 2e7410321167
Ref: library/hashlib hashlib-seealso10322598
Ref: 2e5610322598
Ref: Credits-Footnote-110323590
Ref: Credits-Footnote-210323621
Ref: Credits-Footnote-310323682
Ref: Credits-Footnote-410323760
Ref: Credits-Footnote-510323797
Ref: Credits-Footnote-610323840
Node: hmac — Código de autenticação de mensagem com chave hash10323883
Ref: library/hmac doc10324142
Ref: 2e7510324142
Ref: library/hmac hmac-keyed-hashing-for-message-authentication10324142
Ref: 2e7610324142
Ref: library/hmac module-hmac10324142
Ref: 6e10324142
Ref: library/hmac no-color10324142
Ref: 2e7710324142
Ref: library/hmac hmac new10324657
Ref: c8910324657
Ref: library/hmac hmac digest10325563
Ref: d2610325563
Ref: library/hmac hmac HMAC10326201
Ref: d2710326201
Ref: library/hmac hmac HMAC update10326272
Ref: 113f10326272
Ref: library/hmac hmac HMAC digest10326642
Ref: 2e7810326642
Ref: library/hmac hmac HMAC hexdigest10327260
Ref: 2e7910327260
Ref: library/hmac hmac HMAC copy10327888
Ref: 2e7a10327888
Ref: library/hmac hmac HMAC digest_size10328142
Ref: 114210328142
Ref: library/hmac hmac HMAC block_size10328226
Ref: 114010328226
Ref: library/hmac hmac HMAC name10328354
Ref: 114110328354
Ref: library/hmac hmac compare_digest10328706
Ref: 12c510328706
Ref: hmac — Código de autenticação de mensagem com chave hash-Footnote-110329711
Ref: hmac — Código de autenticação de mensagem com chave hash-Footnote-210329775
Node: secrets — Gera números aleatórios seguros para gerenciar segredos10329834
Ref: library/secrets doc10330035
Ref: 2e7b10330035
Ref: library/secrets module-secrets10330035
Ref: c510330035
Ref: library/secrets no-color10330035
Ref: 2e7c10330035
Ref: library/secrets secrets-generate-secure-random-numbers-for-managing-secrets10330035
Ref: 2e7d10330035
Ref: secrets — Gera números aleatórios seguros para gerenciar segredos-Footnote-110330954
Ref: secrets — Gera números aleatórios seguros para gerenciar segredos-Footnote-210331021
Node: Números aleatórios10331063
Ref: library/secrets random-numbers10331212
Ref: 2e7e10331212
Ref: library/secrets secrets SystemRandom10331391
Ref: 2e7f10331391
Ref: library/secrets secrets choice10331626
Ref: 2e8010331626
Ref: library/secrets secrets randbelow10331748
Ref: 2e8110331748
Ref: library/secrets secrets randbits10331880
Ref: 2e8210331880
Node: Gerando tokens10331977
Ref: library/secrets generating-tokens10332151
Ref: 2e8310332151
Ref: library/secrets secrets token_bytes10332375
Ref: 29fa10332375
Ref: library/secrets secrets token_hex10332682
Ref: 1a5410332682
Ref: library/secrets secrets token_urlsafe10333054
Ref: 2e8410333054
Node: Quantos bytes os tokens devem usar?10333530
Ref: library/secrets how-many-bytes-should-tokens-use10333616
Ref: 2e8510333616
Ref: Quantos bytes os tokens devem usar?-Footnote-110334782
Node: Outras funções10334843
Ref: library/secrets other-functions10335026
Ref: 2e8610335026
Ref: library/secrets secrets compare_digest10335077
Ref: 2e8710335077
Ref: Outras funções-Footnote-110335477
Node: Receitas e melhores práticas10335534
Ref: library/secrets recipes-and-best-practices10335694
Ref: 2e8810335694
Ref: Receitas e melhores práticas-Footnote-110337558
Ref: Receitas e melhores práticas-Footnote-210337614
Node: Serviços Genéricos do Sistema Operacional10337644
Ref: library/allos doc10337841
Ref: 2e8910337841
Ref: library/allos allos10337841
Ref: 2e8a10337841
Ref: library/allos generic-operating-system-services10337841
Ref: 2e8b10337841
Ref: library/allos no-color10337841
Ref: 2e8c10337841
Node: os — Diversas interfaces de sistema operacional10338947
Ref: library/os doc10339140
Ref: 2e8d10339140
Ref: library/os module-os10339140
Ref: a510339140
Ref: library/os os-miscellaneous-operating-system-interfaces10339140
Ref: 2e8e10339140
Ref: library/os os error10341624
Ref: 2e9010341624
Ref: library/os os name10341712
Ref: 2e9110341712
Ref: library/os os-filenames10342204
Ref: 2dd310342204
Ref: os — Diversas interfaces de sistema operacional-Footnote-110342705
Node: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente10342767
Ref: library/os file-names-command-line-arguments-and-environment-variables10342955
Ref: 2e9210342955
Ref: library/os filesystem-encoding10342955
Ref: 2ad610342955
Node: Modo UTF-8 do Python10344525
Ref: library/os python-utf-8-mode10344745
Ref: 2e9310344745
Ref: library/os utf8-mode10344745
Ref: 85b10344745
Ref: Modo UTF-8 do Python-Footnote-110347941
Ref: Modo UTF-8 do Python-Footnote-210347983
Node: Parâmetros de processo10348025
Ref: library/os os-procinfo10348201
Ref: 2e9410348201
Ref: library/os process-parameters10348201
Ref: 2e9510348201
Ref: library/os os ctermid10348364
Ref: 2e9610348364
Ref: library/os os environ10348534
Ref: 25810348534
Ref: library/os os environb10350782
Ref: 25910350782
Ref: library/os os reload_environ10351432
Ref: 25710351432
Ref: library/os os fsencode10352526
Ref: e4310352526
Ref: library/os os fsdecode10352960
Ref: e4210352960
Ref: library/os os fspath10353398
Ref: e4110353398
Ref: library/os os PathLike10353883
Ref: e3f10353883
Ref: library/os os PathLike __fspath__10354105
Ref: e4010354105
Ref: library/os os getenv10354380
Ref: 2e9710354380
Ref: library/os os getenvb10355109
Ref: 141210355109
Ref: library/os os get_exec_path10355729
Ref: 2e9910355729
Ref: library/os os getegid10356129
Ref: 2e9a10356129
Ref: library/os os geteuid10356369
Ref: 1a8e10356369
Ref: library/os os getgid10356508
Ref: 2e9b10356508
Ref: library/os os getgrouplist10356747
Ref: 131010356747
Ref: library/os os getgroups10357174
Ref: 2e9c10357174
Ref: library/os os getlogin10358515
Ref: 179010358515
Ref: library/os os getpgid10359023
Ref: 2e9e10359023
Ref: library/os os getpgrp10359239
Ref: 2e9f10359239
Ref: library/os os getpid10359367
Ref: 2e8f10359367
Ref: library/os os getppid10359550
Ref: 190c10359550
Ref: library/os os getpriority10359933
Ref: 12fb10359933
Ref: library/os os PRIO_PROCESS10360646
Ref: 2ea010360646
Ref: library/os os PRIO_PGRP10360672
Ref: 2ea110360672
Ref: library/os os PRIO_USER10360695
Ref: 2ea210360695
Ref: library/os os PRIO_DARWIN_THREAD10360901
Ref: 2ea310360901
Ref: library/os os PRIO_DARWIN_PROCESS10360933
Ref: 2ea410360933
Ref: library/os os PRIO_DARWIN_BG10360966
Ref: 2ea510360966
Ref: library/os os PRIO_DARWIN_NONUI10360994
Ref: 2ea610360994
Ref: library/os os getresuid10361199
Ref: 151110361199
Ref: library/os os getresgid10361433
Ref: 151010361433
Ref: library/os os getuid10361665
Ref: 178510361665
Ref: library/os os initgroups10361907
Ref: 151410361907
Ref: library/os os putenv10362251
Ref: 25a10362251
Ref: library/os os setegid10363498
Ref: 2ea810363498
Ref: library/os os seteuid10363653
Ref: 2ea910363653
Ref: library/os os setgid10363811
Ref: 2eaa10363811
Ref: library/os os setgroups10363956
Ref: 2e9d10363956
Ref: library/os os setns10364683
Ref: 1a6810364683
Ref: library/os os setpgrp10366305
Ref: 2eac10366305
Ref: library/os os setpgid10366560
Ref: 2ead10366560
Ref: library/os os setpriority10366847
Ref: 12fc10366847
Ref: library/os os setregid10367719
Ref: 2eae10367719
Ref: library/os os setresgid10367890
Ref: 151210367890
Ref: library/os os setresuid10368108
Ref: 151310368108
Ref: library/os os setreuid10368329
Ref: 2eaf10368329
Ref: library/os os getsid10368503
Ref: 2eb010368503
Ref: library/os os setsid10368685
Ref: 1c7110368685
Ref: library/os os setuid10368861
Ref: 2eb110368861
Ref: library/os os strerror10369009
Ref: 2eb210369009
Ref: library/os os supports_bytes_environ10369283
Ref: 141110369283
Ref: library/os os umask10369483
Ref: 2eb310369483
Ref: library/os os uname10369699
Ref: 131210369699
Ref: library/os os unsetenv10371146
Ref: 25b10371146
Ref: library/os os unshare10372014
Ref: 1a6910372014
Ref: library/os os-unshare-clone-flags10372796
Ref: 2eab10372796
Ref: library/os os CLONE_FILES10372976
Ref: 2eb510372976
Ref: library/os os CLONE_FS10373001
Ref: 2eb610373001
Ref: library/os os CLONE_NEWCGROUP10373023
Ref: 2eb710373023
Ref: library/os os CLONE_NEWIPC10373052
Ref: 2eb810373052
Ref: library/os os CLONE_NEWNET10373078
Ref: 2eb910373078
Ref: library/os os CLONE_NEWNS10373104
Ref: 2eba10373104
Ref: library/os os CLONE_NEWPID10373129
Ref: 2ebb10373129
Ref: library/os os CLONE_NEWTIME10373155
Ref: 2ebc10373155
Ref: library/os os CLONE_NEWUSER10373182
Ref: 2ebd10373182
Ref: library/os os CLONE_NEWUTS10373209
Ref: 2ebe10373209
Ref: library/os os CLONE_SIGHAND10373235
Ref: 2ebf10373235
Ref: library/os os CLONE_SYSVSEM10373262
Ref: 2ec010373262
Ref: library/os os CLONE_THREAD10373289
Ref: 2ec110373289
Ref: library/os os CLONE_VM10373315
Ref: 2ec210373315
Ref: Parâmetros de processo-Footnote-110373374
Ref: Parâmetros de processo-Footnote-210373416
Ref: Parâmetros de processo-Footnote-310373458
Ref: Parâmetros de processo-Footnote-410373503
Ref: Parâmetros de processo-Footnote-510373553
Ref: Parâmetros de processo-Footnote-610373600
Node: Criação de objetos arquivos10373647
Ref: library/os file-object-creation10373842
Ref: 2ec310373842
Ref: library/os os-newstreams10373842
Ref: 2ec410373842
Ref: library/os os fdopen10374052
Ref: 221710374052
Node: Operações dos descritores de arquivos10374390
Ref: library/os file-descriptor-operations10374584
Ref: 2ec510374584
Ref: library/os os-fd-ops10374584
Ref: 2ec610374584
Ref: library/os os close10375532
Ref: d5f10375532
Ref: library/os os closerange10375998
Ref: 2ec710375998
Ref: library/os os copy_file_range10376365
Ref: 181510376365
Ref: library/os os device_encoding10378237
Ref: 1b3510378237
Ref: library/os os dup10378680
Ref: 1c7910378680
Ref: library/os os dup210379105
Ref: d4e10379105
Ref: library/os os fchmod10379652
Ref: 52410379652
Ref: library/os os fchown10380273
Ref: f7e10380273
Ref: library/os os fdatasync10380878
Ref: f7f10380878
Ref: library/os os fpathconf10381141
Ref: 2ec910381141
Ref: library/os os fstat10382296
Ref: f8010382296
Ref: library/os os fstatvfs10382563
Ref: f8110382563
Ref: library/os os fsync10382865
Ref: f8210382865
Ref: library/os os ftruncate10383399
Ref: f8310383399
Ref: library/os os get_blocking10383884
Ref: 102e10383884
Ref: library/os os grantpt10384542
Ref: 193a10384542
Ref: library/os os isatty10384964
Ref: 1b3410384964
Ref: library/os os lockf10385135
Ref: 130f10385135
Ref: library/os os F_LOCK10385703
Ref: 2ecb10385703
Ref: library/os os F_TLOCK10385723
Ref: 2ecc10385723
Ref: library/os os F_ULOCK10385744
Ref: 2ecd10385744
Ref: library/os os F_TEST10385765
Ref: 2ece10385765
Ref: library/os os login_tty10385949
Ref: 1a0210385949
Ref: library/os os lseek10386322
Ref: 131310386322
Ref: library/os os SEEK_SET10387241
Ref: 148910387241
Ref: library/os os SEEK_CUR10387263
Ref: 148a10387263
Ref: library/os os SEEK_END10387285
Ref: 148b10387285
Ref: library/os os SEEK_HOLE10387867
Ref: 2ecf10387867
Ref: library/os os SEEK_DATA10387890
Ref: 2ed010387890
Ref: library/os os open10388713
Ref: f8610388713
Ref: library/os os O_RDONLY10390995
Ref: 2ed110390995
Ref: library/os os O_WRONLY10391017
Ref: 2ed210391017
Ref: library/os os O_RDWR10391039
Ref: 2ed410391039
Ref: library/os os O_APPEND10391059
Ref: 2ed510391059
Ref: library/os os O_CREAT10391081
Ref: 2ed610391081
Ref: library/os os O_EXCL10391102
Ref: 2b7110391102
Ref: library/os os O_TRUNC10391122
Ref: 2ed710391122
Ref: library/os os O_DSYNC10391209
Ref: 2ed810391209
Ref: library/os os O_RSYNC10391230
Ref: 2ed910391230
Ref: library/os os O_SYNC10391251
Ref: 2eda10391251
Ref: library/os os O_NDELAY10391271
Ref: 2edb10391271
Ref: library/os os O_NONBLOCK10391293
Ref: 103010391293
Ref: library/os os O_NOCTTY10391317
Ref: 2edc10391317
Ref: library/os os O_CLOEXEC10391339
Ref: 127210391339
Ref: library/os os O_BINARY10391507
Ref: 2ed310391507
Ref: library/os os O_NOINHERIT10391529
Ref: 2edd10391529
Ref: library/os os O_SHORT_LIVED10391554
Ref: 2ede10391554
Ref: library/os os O_TEMPORARY10391581
Ref: 2edf10391581
Ref: library/os os O_RANDOM10391606
Ref: 2ee010391606
Ref: library/os os O_SEQUENTIAL10391628
Ref: 2ee110391628
Ref: library/os os O_TEXT10391654
Ref: 2ee210391654
Ref: library/os os O_EVTONLY10391740
Ref: a1110391740
Ref: library/os os O_FSYNC10391763
Ref: a1210391763
Ref: library/os os O_SYMLINK10391784
Ref: a1310391784
Ref: library/os os O_NOFOLLOW_ANY10391807
Ref: a1410391807
Ref: library/os os O_ASYNC10392060
Ref: 2ee310392060
Ref: library/os os O_DIRECT10392081
Ref: 2ee410392081
Ref: library/os os O_DIRECTORY10392103
Ref: 2ee510392103
Ref: library/os os O_NOFOLLOW10392128
Ref: 2ee610392128
Ref: library/os os O_NOATIME10392152
Ref: 2ee710392152
Ref: library/os os O_PATH10392175
Ref: 116810392175
Ref: library/os os O_TMPFILE10392195
Ref: 116910392195
Ref: library/os os O_SHLOCK10392218
Ref: 162010392218
Ref: library/os os O_EXLOCK10392240
Ref: 162110392240
Ref: library/os os openpty10392579
Ref: 2ee810392579
Ref: library/os os pipe10393068
Ref: 1a8010393068
Ref: library/os os pipe210393452
Ref: 12e510393452
Ref: library/os os posix_fallocate10393909
Ref: f8810393909
Ref: library/os os posix_fadvise10394201
Ref: f8710394201
Ref: library/os os POSIX_FADV_NORMAL10394847
Ref: 2ee910394847
Ref: library/os os POSIX_FADV_SEQUENTIAL10394878
Ref: 2eea10394878
Ref: library/os os POSIX_FADV_RANDOM10394913
Ref: 2eeb10394913
Ref: library/os os POSIX_FADV_NOREUSE10394944
Ref: 2eec10394944
Ref: library/os os POSIX_FADV_WILLNEED10394976
Ref: 2eed10394976
Ref: library/os os POSIX_FADV_DONTNEED10395009
Ref: 2eee10395009
Ref: library/os os pread10395279
Ref: d4a10395279
Ref: library/os os posix_openpt10395693
Ref: 193910395693
Ref: library/os os preadv10396363
Ref: d4810396363
Ref: library/os os RWF_NOWAIT10397484
Ref: 2ef010397484
Ref: library/os os RWF_HIPRI10398040
Ref: 2eef10398040
Ref: library/os os ptsname10398496
Ref: 193c10398496
Ref: library/os os pwrite10399103
Ref: d4d10399103
Ref: library/os os pwritev10399417
Ref: d4b10399417
Ref: library/os os RWF_DSYNC10400566
Ref: 2ef110400566
Ref: library/os os RWF_SYNC10400903
Ref: 2ef210400903
Ref: library/os os RWF_APPEND10401238
Ref: 1be910401238
Ref: library/os os read10401851
Ref: f8910401851
Ref: library/os os readinto10402852
Ref: 25e10402852
Ref: library/os os sendfile10404139
Ref: cf810404139
Ref: library/os os SF_NODISKIO10405795
Ref: 2ef310405795
Ref: library/os os SF_MNOWAIT10405820
Ref: 2ef410405820
Ref: library/os os SF_SYNC10405844
Ref: 2ef510405844
Ref: library/os os SF_NOCACHE10406056
Ref: 2ef610406056
Ref: library/os os set_blocking10406374
Ref: 102f10406374
Ref: library/os os splice10407047
Ref: a1010407047
Ref: library/os os SPLICE_F_MOVE10409690
Ref: 2ef710409690
Ref: library/os os SPLICE_F_NONBLOCK10409717
Ref: 2ef810409717
Ref: library/os os SPLICE_F_MORE10409748
Ref: 2ef910409748
Ref: library/os os readv10409810
Ref: d4910409810
Ref: library/os os tcgetpgrp10410489
Ref: 2efa10410489
Ref: library/os os tcsetpgrp10410733
Ref: 2efb10410733
Ref: library/os os ttyname10410990
Ref: 2efc10410990
Ref: library/os os unlockpt10411272
Ref: 193b10411272
Ref: library/os os write10411689
Ref: f8f10411689
Ref: library/os os writev10412615
Ref: d4c10412615
Ref: Operações dos descritores de arquivos-Footnote-110413394
Ref: Operações dos descritores de arquivos-Footnote-210413436
Ref: Operações dos descritores de arquivos-Footnote-310413480
Ref: Operações dos descritores de arquivos-Footnote-410413543
Ref: Operações dos descritores de arquivos-Footnote-510413585
Ref: Operações dos descritores de arquivos-Footnote-610413631
Node: Consultando o tamanho de um terminal10413673
Ref: library/os querying-the-size-of-a-terminal10413829
Ref: 2efd10413829
Ref: library/os terminal-size10413829
Ref: 2efe10413829
Ref: library/os os get_terminal_size10413950
Ref: 12fe10413950
Ref: library/os os terminal_size10414633
Ref: 2b9f10414633
Ref: library/os os terminal_size columns10414764
Ref: 2eff10414764
Ref: library/os os terminal_size lines10414848
Ref: 2f0010414848
Node: Herança de descritores de arquivos10414929
Ref: library/os fd-inheritance10415085
Ref: 10f210415085
Ref: library/os inheritance-of-file-descriptors10415085
Ref: 2f0110415085
Ref: library/os os get_inheritable10416245
Ref: 10f310416245
Ref: library/os os set_inheritable10416387
Ref: 10f410416387
Ref: library/os os get_handle_inheritable10416528
Ref: 10f510416528
Ref: library/os os set_handle_inheritable10416717
Ref: 10f610416717
Node: Arquivos e diretórios10416900
Ref: library/os files-and-directories10417090
Ref: 2f0210417090
Ref: library/os os-file-dir10417090
Ref: 2e9810417090
Ref: library/os path-fd10417256
Ref: d4710417256
Ref: library/os dir-fd10418293
Ref: 12e610418293
Ref: library/os follow-symlinks10419055
Ref: 12e710419055
Ref: library/os os access10419655
Ref: 12e810419655
Ref: library/os os F_OK10422462
Ref: 2f0310422462
Ref: library/os os R_OK10422480
Ref: 2f0410422480
Ref: library/os os W_OK10422498
Ref: 2f0510422498
Ref: library/os os X_OK10422516
Ref: 2f0610422516
Ref: library/os os chdir10422735
Ref: 81610422735
Ref: library/os os chflags10423499
Ref: 12e910423499
Ref: library/os os chmod10424669
Ref: 52310424669
Ref: library/os os chown10426880
Ref: 12ea10426880
Ref: library/os os chroot10428000
Ref: 1c3310428000
Ref: library/os os fchdir10428242
Ref: f7d10428242
Ref: library/os os getcwd10428671
Ref: 185f10428671
Ref: library/os os getcwdb10428770
Ref: c7610428770
Ref: library/os os lchflags10429108
Ref: 2f0810429108
Ref: library/os os lchmod10429637
Ref: 52210429637
Ref: library/os os lchown10430544
Ref: 2f0910430544
Ref: library/os os link10431090
Ref: 12eb10431090
Ref: library/os os listdir10432019
Ref: 12f610432019
Ref: library/os os listdrives10433667
Ref: 6ba10433667
Ref: library/os os listmounts10434345
Ref: 6bc10434345
Ref: library/os os listvolumes10435256
Ref: 6bb10435256
Ref: library/os os lstat10436056
Ref: 6bd10436056
Ref: library/os os mkdir10437282
Ref: 52510437282
Ref: library/os mkdir-modebits10437617
Ref: 2f0a10437617
Ref: library/os os makedirs10438905
Ref: 52610438905
Ref: library/os os mkfifo10440789
Ref: f8410440789
Ref: library/os os mknod10441769
Ref: f8510441769
Ref: library/os os major10442759
Ref: 18b210442759
Ref: library/os os minor10442950
Ref: 18b310442950
Ref: library/os os makedev10443137
Ref: 18b410443137
Ref: library/os os pathconf10443296
Ref: 12f710443296
Ref: library/os os pathconf_names10444544
Ref: 2f0c10444544
Ref: library/os os readlink10444902
Ref: b1010444902
Ref: library/os os remove10446509
Ref: 12ec10446509
Ref: library/os os removedirs10447533
Ref: 2f0d10447533
Ref: library/os os rename10448429
Ref: 12ed10448429
Ref: library/os os renames10450261
Ref: 2f0e10450261
Ref: library/os os replace10451174
Ref: 12ee10451174
Ref: library/os os rmdir10452134
Ref: 12ef10452134
Ref: library/os os scandir10452835
Ref: c4810452835
Ref: library/os os scandir close10454798
Ref: eac10454798
Ref: library/os os DirEntry10456431
Ref: 6b810456431
Ref: library/os os DirEntry name10457779
Ref: 2f1010457779
Ref: library/os os DirEntry path10458177
Ref: 193410458177
Ref: library/os os DirEntry inode10458946
Ref: 198b10458946
Ref: library/os os DirEntry is_dir10459337
Ref: 2f0f10459337
Ref: library/os os DirEntry is_file10460943
Ref: f7810460943
Ref: library/os os DirEntry is_symlink10461757
Ref: 2f1110461757
Ref: library/os os DirEntry is_junction10462724
Ref: 6b910462724
Ref: library/os os DirEntry stat10463230
Ref: 19aa10463230
Ref: library/os os stat10465137
Ref: 26c10465137
Ref: library/os os stat_result10467976
Ref: 16af10467976
Ref: library/os os stat_result st_mode10468226
Ref: bf510468226
Ref: library/os os stat_result st_ino10468349
Ref: 2f1210468349
Ref: library/os os stat_result st_dev10468647
Ref: 2f1310468647
Ref: library/os os stat_result st_nlink10468743
Ref: 2f1410468743
Ref: library/os os stat_result st_uid10468810
Ref: 2f1510468810
Ref: library/os os stat_result st_gid10468903
Ref: 2f1610468903
Ref: library/os os stat_result st_size10468993
Ref: 2f1710468993
Ref: library/os os stat_result st_atime10469281
Ref: 2f1810469281
Ref: library/os os stat_result st_mtime10469371
Ref: 2da310469371
Ref: library/os os stat_result st_ctime10469491
Ref: 2f1910469491
Ref: library/os os stat_result st_atime_ns10469896
Ref: 2f1a10469896
Ref: library/os os stat_result st_mtime_ns10470066
Ref: 2f1b10470066
Ref: library/os os stat_result st_ctime_ns10470256
Ref: 2f1c10470256
Ref: library/os os stat_result st_birthtime10470737
Ref: 2f1d10470737
Ref: library/os os stat_result st_birthtime_ns10471041
Ref: 2f1e10471041
Ref: library/os os stat_result st_blocks10472739
Ref: 2f1f10472739
Ref: library/os os stat_result st_blksize10472940
Ref: 2f2010472940
Ref: library/os os stat_result st_rdev10473179
Ref: 174810473179
Ref: library/os os stat_result st_flags10473268
Ref: 2f2110473268
Ref: library/os os stat_result st_gen10473527
Ref: 2f2210473527
Ref: library/os os stat_result st_fstype10473690
Ref: d4f10473690
Ref: library/os os stat_result st_rsize10473918
Ref: 2f2310473918
Ref: library/os os stat_result st_creator10473983
Ref: 2f2410473983
Ref: library/os os stat_result st_type10474045
Ref: 2f2510474045
Ref: library/os os stat_result st_file_attributes10474185
Ref: 102d10474185
Ref: library/os os stat_result st_reparse_tag10474573
Ref: bf610474573
Ref: library/os os statvfs10477150
Ref: 12f810477150
Ref: library/os os supports_dir_fd10479486
Ref: 12f310479486
Ref: library/os os supports_effective_ids10480765
Ref: 12fa10480765
Ref: library/os os supports_fd10481530
Ref: 12f910481530
Ref: library/os os supports_follow_symlinks10482440
Ref: 12f410482440
Ref: library/os os symlink10483672
Ref: 12f010483672
Ref: library/os os sync10485674
Ref: 130e10485674
Ref: library/os os truncate10485820
Ref: 103110485820
Ref: library/os os unlink10486400
Ref: 12f110486400
Ref: library/os os utime10486970
Ref: 12f210486970
Ref: library/os os walk10489058
Ref: 6c510489058
Ref: library/os os fwalk10494751
Ref: d4610494751
Ref: library/os os memfd_create10497590
Ref: bf410497590
Ref: library/os os MFD_CLOEXEC10498492
Ref: 2f2610498492
Ref: library/os os MFD_ALLOW_SEALING10498517
Ref: 2f2710498517
Ref: library/os os MFD_HUGETLB10498548
Ref: 2f2810498548
Ref: library/os os MFD_HUGE_SHIFT10498573
Ref: 2f2910498573
Ref: library/os os MFD_HUGE_MASK10498601
Ref: 2f2a10498601
Ref: library/os os MFD_HUGE_64KB10498628
Ref: 2f2b10498628
Ref: library/os os MFD_HUGE_512KB10498655
Ref: 2f2c10498655
Ref: library/os os MFD_HUGE_1MB10498683
Ref: 2f2d10498683
Ref: library/os os MFD_HUGE_2MB10498709
Ref: 2f2e10498709
Ref: library/os os MFD_HUGE_8MB10498735
Ref: 2f2f10498735
Ref: library/os os MFD_HUGE_16MB10498761
Ref: 2f3010498761
Ref: library/os os MFD_HUGE_32MB10498788
Ref: 2f3110498788
Ref: library/os os MFD_HUGE_256MB10498815
Ref: 2f3210498815
Ref: library/os os MFD_HUGE_512MB10498843
Ref: 2f3310498843
Ref: library/os os MFD_HUGE_1GB10498871
Ref: 2f3410498871
Ref: library/os os MFD_HUGE_2GB10498897
Ref: 2f3510498897
Ref: library/os os MFD_HUGE_16GB10498923
Ref: 2f3610498923
Ref: library/os os eventfd10499231
Ref: a0f10499231
Ref: library/os os eventfd_read10501355
Ref: 2f3810501355
Ref: library/os os eventfd_write10501660
Ref: 2f3910501660
Ref: library/os os EFD_CLOEXEC10501983
Ref: 1a7410501983
Ref: library/os os EFD_NONBLOCK10502194
Ref: 1a7510502194
Ref: library/os os EFD_SEMAPHORE10502427
Ref: 1a7610502427
Ref: Arquivos e diretórios-Footnote-110502839
Ref: Arquivos e diretórios-Footnote-210502885
Ref: Arquivos e diretórios-Footnote-310502927
Ref: Arquivos e diretórios-Footnote-410502992
Ref: Arquivos e diretórios-Footnote-510503072
Ref: Arquivos e diretórios-Footnote-610503154
Ref: Arquivos e diretórios-Footnote-710503243
Ref: Arquivos e diretórios-Footnote-810503332
Ref: Arquivos e diretórios-Footnote-910503390
Node: Descritores de arquivo de temporizador10503437
Ref: library/os os-timerfd10503572
Ref: 47710503572
Ref: library/os timer-file-descriptors10503572
Ref: 2f3a10503572
Ref: library/os os timerfd_create10503788
Ref: 51910503788
Ref: library/os os timerfd_settime10506806
Ref: 51a10506806
Ref: library/os os timerfd_settime_ns10509868
Ref: 51b10509868
Ref: library/os os timerfd_gettime10510239
Ref: 51c10510239
Ref: library/os os timerfd_gettime_ns10510920
Ref: 51d10510920
Ref: library/os os TFD_NONBLOCK10511158
Ref: 51e10511158
Ref: library/os os TFD_CLOEXEC10511573
Ref: 51f10511573
Ref: library/os os TFD_TIMER_ABSTIME10511910
Ref: 52010511910
Ref: library/os os TFD_TIMER_CANCEL_ON_SET10512328
Ref: 52110512328
Ref: Descritores de arquivo de temporizador-Footnote-110512763
Ref: Descritores de arquivo de temporizador-Footnote-210512817
Ref: Descritores de arquivo de temporizador-Footnote-310512871
Ref: Descritores de arquivo de temporizador-Footnote-410512926
Ref: Descritores de arquivo de temporizador-Footnote-510512978
Ref: Descritores de arquivo de temporizador-Footnote-610513031
Ref: Descritores de arquivo de temporizador-Footnote-710513075
Node: Atributos estendidos do Linux10513130
Ref: library/os linux-extended-attributes10513265
Ref: 2f3c10513265
Ref: library/os os getxattr10513434
Ref: 130010513434
Ref: library/os os listxattr10514155
Ref: 130110514155
Ref: library/os os removexattr10514840
Ref: 130210514840
Ref: library/os os setxattr10515594
Ref: 130310515594
Ref: library/os os XATTR_SIZE_MAX10516932
Ref: 2f3f10516932
Ref: library/os os XATTR_CREATE10517071
Ref: 2f3e10517071
Ref: library/os os XATTR_REPLACE10517237
Ref: 2f3d10517237
Node: Gerenciamento de processo10517424
Ref: library/os os-process10517597
Ref: 2f4010517597
Ref: library/os process-management10517597
Ref: 2f4110517597
Ref: library/os os abort10518262
Ref: 2f4310518262
Ref: library/os os add_dll_directory10518661
Ref: bd310518661
Ref: library/os os execl10519983
Ref: 2f4210519983
Ref: library/os os execle10520030
Ref: 2f4410520030
Ref: library/os os execlp10520083
Ref: 2f4510520083
Ref: library/os os execlpe10520131
Ref: 2f4610520131
Ref: library/os os execv10520185
Ref: 2ea710520185
Ref: library/os os execve10520221
Ref: 12f510520221
Ref: library/os os execvp10520263
Ref: 2f4710520263
Ref: library/os os execvpe10520300
Ref: 2f4810520300
Ref: library/os os _exit10523893
Ref: 258c10523893
Ref: library/os os EX_OK10524726
Ref: 2f4910524726
Ref: library/os os EX_USAGE10524990
Ref: 2f4a10524990
Ref: library/os os EX_DATAERR10525210
Ref: 2f4b10525210
Ref: library/os os EX_NOINPUT10525373
Ref: 2f4c10525373
Ref: library/os os EX_NOUSER10525555
Ref: 2f4d10525555
Ref: library/os os EX_NOHOST10525716
Ref: 2f4e10525716
Ref: library/os os EX_UNAVAILABLE10525868
Ref: 2f4f10525868
Ref: library/os os EX_SOFTWARE10526041
Ref: 2f5010526041
Ref: library/os os EX_OSERR10526209
Ref: 2f5110526209
Ref: library/os os EX_OSFILE10526439
Ref: 2f5210526439
Ref: library/os os EX_CANTCREAT10526657
Ref: 2f5310526657
Ref: library/os os EX_IOERR10526854
Ref: 2f5410526854
Ref: library/os os EX_TEMPFAIL10527023
Ref: 2f5510527023
Ref: library/os os EX_PROTOCOL10527336
Ref: 2f5610527336
Ref: library/os os EX_NOPERM10527528
Ref: 2f5710527528
Ref: library/os os EX_CONFIG10527783
Ref: 2f5810527783
Ref: library/os os EX_NOTFOUND10527952
Ref: 2f5910527952
Ref: library/os os fork10528122
Ref: 4af10528122
Ref: library/os os forkpty10530407
Ref: 4b010530407
Ref: library/os os kill10531600
Ref: 155910531600
Ref: library/os os killpg10532553
Ref: 1c7210532553
Ref: library/os os nice10532827
Ref: 12fd10532827
Ref: library/os os pidfd_open10533025
Ref: 69910533025
Ref: library/os os PIDFD_NONBLOCK10533454
Ref: 6b710533454
Ref: library/os os plock10533944
Ref: 2f5a10533944
Ref: library/os os popen10534188
Ref: 31810534188
Ref: library/os os posix_spawn10536547
Ref: 52810536547
Ref: library/os os POSIX_SPAWN_OPEN10537705
Ref: 2f5b10537705
Ref: library/os os POSIX_SPAWN_CLOSE10537876
Ref: 2f5c10537876
Ref: library/os os POSIX_SPAWN_DUP210537997
Ref: 2f5d10537997
Ref: library/os os POSIX_SPAWN_CLOSEFROM10538133
Ref: 52910538133
Ref: library/os os posix_spawnp10541167
Ref: 1cc710541167
Ref: library/os os register_at_fork10541952
Ref: 35210541952
Ref: library/os os spawnl10543579
Ref: 31910543579
Ref: library/os os spawnle10543621
Ref: 2f5e10543621
Ref: library/os os spawnlp10543669
Ref: 2f5f10543669
Ref: library/os os spawnlpe10543712
Ref: 2f6010543712
Ref: library/os os spawnv10543761
Ref: 2f6110543761
Ref: library/os os spawnve10543804
Ref: 2f6210543804
Ref: library/os os spawnvp10543853
Ref: 2f6310543853
Ref: library/os os spawnvpe10543897
Ref: 2f6410543897
Ref: library/os os P_NOWAIT10548210
Ref: 2f6510548210
Ref: library/os os P_NOWAITO10548232
Ref: 2f6710548232
Ref: library/os os P_WAIT10548594
Ref: 2f6610548594
Ref: library/os os P_DETACH10549060
Ref: 2f6810549060
Ref: library/os os P_OVERLAY10549082
Ref: 2f6910549082
Ref: library/os os startfile10549577
Ref: 1b6e10549577
Ref: library/os os system10552431
Ref: 164c10552431
Ref: library/os os times10554246
Ref: 131110554246
Ref: library/os os wait10555375
Ref: f8c10555375
Ref: library/os os waitid10556371
Ref: f8d10556371
Ref: library/os os waitpid10557900
Ref: f8e10557900
Ref: library/os os wait310560490
Ref: f8a10560490
Ref: library/os os wait410561189
Ref: f8b10561189
Ref: library/os os P_PID10561846
Ref: 2f6a10561846
Ref: library/os os P_PGID10561865
Ref: 2f6b10561865
Ref: library/os os P_ALL10561885
Ref: 2f6c10561885
Ref: library/os os P_PIDFD10561904
Ref: b0c10561904
Ref: library/os os WCONTINUED10562703
Ref: 2f6f10562703
Ref: library/os os WEXITED10563104
Ref: 2f6d10563104
Ref: library/os os WSTOPPED10563498
Ref: 2f6e10563498
Ref: library/os os WUNTRACED10563870
Ref: 2f7410563870
Ref: library/os os WNOHANG10564306
Ref: 2f7010564306
Ref: library/os os WNOWAIT10564640
Ref: 2f7110564640
Ref: library/os os CLD_EXITED10565058
Ref: 2f7310565058
Ref: library/os os CLD_KILLED10565082
Ref: b0a10565082
Ref: library/os os CLD_DUMPED10565106
Ref: 2f7510565106
Ref: library/os os CLD_TRAPPED10565130
Ref: 2f7610565130
Ref: library/os os CLD_STOPPED10565155
Ref: b0b10565155
Ref: library/os os CLD_CONTINUED10565180
Ref: 2f7710565180
Ref: library/os os waitstatus_to_exitcode10565534
Ref: b0d10565534
Ref: library/os os WCOREDUMP10567176
Ref: 2f7e10567176
Ref: library/os os WIFCONTINUED10567523
Ref: 2f7f10567523
Ref: library/os os WIFSTOPPED10567900
Ref: 2f7c10567900
Ref: library/os os WIFSIGNALED10568360
Ref: 2f7a10568360
Ref: library/os os WIFEXITED10568583
Ref: 2f7810568583
Ref: library/os os WEXITSTATUS10568888
Ref: 2f7910568888
Ref: library/os os WSTOPSIG10569142
Ref: 2f7d10569142
Ref: library/os os WTERMSIG10569410
Ref: 2f7b10569410
Ref: Gerenciamento de processo-Footnote-110569725
Ref: Gerenciamento de processo-Footnote-210569797
Ref: Gerenciamento de processo-Footnote-310569840
Ref: Gerenciamento de processo-Footnote-410569890
Ref: Gerenciamento de processo-Footnote-510569936
Ref: Gerenciamento de processo-Footnote-610569981
Ref: Gerenciamento de processo-Footnote-710570033
Ref: Gerenciamento de processo-Footnote-810570142
Ref: Gerenciamento de processo-Footnote-910570184
Node: Interface do agendador10570230
Ref: library/os interface-to-the-scheduler10570414
Ref: 2f8110570414
Ref: library/os os-scheduling-policy10570842
Ref: 2f8210570842
Ref: library/os os SCHED_OTHER10570842
Ref: 2f8310570842
Ref: library/os os SCHED_BATCH10570910
Ref: 2f8410570910
Ref: library/os os SCHED_DEADLINE10571073
Ref: 25c10571073
Ref: library/os os SCHED_IDLE10571207
Ref: 2f8510571207
Ref: library/os os SCHED_NORMAL10571332
Ref: 25d10571332
Ref: library/os os SCHED_SPORADIC10571437
Ref: 2f8610571437
Ref: library/os os SCHED_FIFO10571538
Ref: 2f8710571538
Ref: library/os os SCHED_RR10571667
Ref: 2f8810571667
Ref: library/os os SCHED_RESET_ON_FORK10571738
Ref: 2f8910571738
Ref: library/os os sched_param10572025
Ref: 186610572025
Ref: library/os os sched_param sched_priority10572334
Ref: 2f8a10572334
Ref: library/os os sched_get_priority_min10572443
Ref: 130510572443
Ref: library/os os sched_get_priority_max10572623
Ref: 130410572623
Ref: library/os os sched_setscheduler10572803
Ref: 130c10572803
Ref: library/os os sched_getscheduler10573120
Ref: 130810573120
Ref: library/os os sched_setparam10573365
Ref: 130b10573365
Ref: library/os os sched_getparam10573600
Ref: 130710573600
Ref: library/os os sched_rr_get_interval10573823
Ref: 130910573823
Ref: library/os os sched_yield10574004
Ref: 130d10574004
Ref: library/os os sched_setaffinity10574124
Ref: 130a10574124
Ref: library/os os sched_getaffinity10574398
Ref: 130610574398
Ref: Interface do agendador-Footnote-110574748
Node: Diversas informações de sistema10574799
Ref: library/os miscellaneous-system-information10574981
Ref: 2f8b10574981
Ref: library/os os-path10574981
Ref: 2f8c10574981
Ref: library/os os confstr10575068
Ref: 184410575068
Ref: library/os os confstr_names10576217
Ref: 2f8d10576217
Ref: library/os os cpu_count10576552
Ref: 4d510576552
Ref: library/os os getloadavg10577077
Ref: 187710577077
Ref: library/os os process_cpu_count10577341
Ref: 4d410577341
Ref: library/os os sysconf10577984
Ref: 184510577984
Ref: library/os os sysconf_names10578457
Ref: 2f8e10578457
Ref: library/os os curdir10579112
Ref: 2af810579112
Ref: library/os os pardir10579320
Ref: 2f0b10579320
Ref: library/os os sep10579527
Ref: 86f10579527
Ref: library/os os altsep10579970
Ref: 87010579970
Ref: library/os os extsep10580309
Ref: 2f8f10580309
Ref: library/os os pathsep10580491
Ref: 1fe110580491
Ref: library/os os defpath10580765
Ref: 1c9b10580765
Ref: library/os os linesep10580980
Ref: 246c10580980
Ref: library/os os devnull10581403
Ref: 1cca10581403
Ref: library/os os RTLD_LAZY10581597
Ref: 131410581597
Ref: library/os os RTLD_NOW10581620
Ref: 131510581620
Ref: library/os os RTLD_GLOBAL10581642
Ref: 131610581642
Ref: library/os os RTLD_LOCAL10581667
Ref: 131710581667
Ref: library/os os RTLD_NODELETE10581691
Ref: 131810581691
Ref: library/os os RTLD_NOLOAD10581718
Ref: 131910581718
Ref: library/os os RTLD_DEEPBIND10581743
Ref: 131a10581743
Ref: Diversas informações de sistema-Footnote-110582067
Node: Números aleatórios<2>10582113
Ref: library/os random-numbers10582264
Ref: 2f9010582264
Ref: library/os os getrandom10582325
Ref: ead10582325
Ref: library/os os urandom10583255
Ref: 73b10583255
Ref: library/os os GRND_NONBLOCK10585618
Ref: 2f9210585618
Ref: library/os os GRND_RANDOM10586125
Ref: 2f9110586125
Ref: Números aleatórios<2>-Footnote-110586354
Ref: Números aleatórios<2>-Footnote-210586417
Node: io — Ferramentas essenciais para trabalhar com fluxos10586459
Ref: library/io doc10586702
Ref: 2f9310586702
Ref: library/io io-core-tools-for-working-with-streams10586702
Ref: 2f9410586702
Ref: library/io module-io10586702
Ref: 8310586702
Ref: library/io no-color10586702
Ref: 2f9510586702
Ref: io — Ferramentas essenciais para trabalhar com fluxos-Footnote-110587144
Node: Visão Geral<2>10587206
Ref: library/io io-overview10587344
Ref: 246a10587344
Ref: library/io overview10587344
Ref: 2f9610587344
Node: E/S de texto10588765
Ref: library/io text-i-o10588850
Ref: 2f9710588850
Node: E/S binária10589912
Ref: library/io binary-i-o10590015
Ref: 2f9810590015
Node: E/S bruta10591013
Ref: library/io raw-i-o10591095
Ref: 2f9910591095
Node: Codificação do texto10591624
Ref: library/io io-text-encoding10591798
Ref: 9b610591798
Ref: library/io text-encoding10591798
Ref: 2f9a10591798
Ref: Codificação do texto-Footnote-110593164
Node: Ativar EncodingWarning10593206
Ref: library/io io-encoding-warning10593287
Ref: 1fee10593287
Ref: library/io opt-in-encodingwarning10593287
Ref: 2f9b10593287
Ref: Ativar EncodingWarning-Footnote-110594157
Node: High-level Module Interface10594199
Ref: library/io high-level-module-interface10594378
Ref: 2f9c10594378
Ref: library/io io DEFAULT_BUFFER_SIZE10594453
Ref: 197b10594453
Ref: library/io io open10594688
Ref: 73510594688
Ref: library/io io open_code10595116
Ref: 19d410595116
Ref: library/io io text_encoding10595784
Ref: 197a10595784
Ref: library/io io BlockingIOError10596937
Ref: 2f9d10596937
Ref: library/io io UnsupportedOperation10597068
Ref: 1c3610597068
Node: hierarquia de classe10597420
Ref: library/io class-hierarchy10597590
Ref: 2f9e10597590
Node: I/O Base Classes10602311
Ref: library/io i-o-base-classes10602405
Ref: 2f9f10602405
Ref: library/io io IOBase10602458
Ref: 4ff10602458
Ref: library/io io IOBase close10604306
Ref: 50010604306
Ref: library/io io IOBase closed10604717
Ref: 1cc410604717
Ref: library/io io IOBase fileno10604791
Ref: 2b6d10604791
Ref: library/io io IOBase flush10605013
Ref: 2b8910605013
Ref: library/io io IOBase isatty10605174
Ref: 1f1e10605174
Ref: library/io io IOBase readable10605315
Ref: 159f10605315
Ref: library/io io IOBase readline10605478
Ref: 257b10605478
Ref: library/io io IOBase readlines10605851
Ref: 263610605851
Ref: library/io io IOBase seek10606416
Ref: 148810606416
Ref: library/io io IOBase seekable10607407
Ref: 15a110607407
Ref: library/io io IOBase tell10607641
Ref: 159e10607641
Ref: library/io io IOBase truncate10607715
Ref: 150c10607715
Ref: library/io io IOBase writable10608295
Ref: 15a010608295
Ref: library/io io IOBase writelines10608497
Ref: 263710608497
Ref: library/io io IOBase __del__10608721
Ref: 2fa010608721
Ref: library/io io RawIOBase10608939
Ref: 12cc10608939
Ref: library/io io RawIOBase read10609446
Ref: 101210609446
Ref: library/io io RawIOBase readall10610132
Ref: 2fa110610132
Ref: library/io io RawIOBase readinto10610289
Ref: 101310610289
Ref: library/io io RawIOBase write10610631
Ref: 159d10610631
Ref: library/io io BufferedIOBase10611271
Ref: 89810611271
Ref: library/io io BufferedIOBase raw10612486
Ref: 15a210612486
Ref: library/io io BufferedIOBase detach10612756
Ref: 2c8e10612756
Ref: library/io io BufferedIOBase read10613198
Ref: 152410613198
Ref: library/io io BufferedIOBase read110614483
Ref: 2ce510614483
Ref: library/io io BufferedIOBase readinto10615072
Ref: 17f910615072
Ref: library/io io BufferedIOBase readinto110615607
Ref: 101110615607
Ref: library/io io BufferedIOBase write10616112
Ref: ecb10616112
Ref: I/O Base Classes-Footnote-110616969
Ref: I/O Base Classes-Footnote-210617011
Node: Raw File I/O10617053
Ref: library/io raw-file-i-o10617172
Ref: 2fa210617172
Ref: library/io io FileIO10617219
Ref: 150b10617219
Ref: library/io io FileIO mode10619546
Ref: 2fa310619546
Ref: library/io io FileIO name10619620
Ref: 2c9210619620
Node: Buffered Streams10619764
Ref: library/io buffered-streams10619882
Ref: 2fa410619882
Ref: library/io io BytesIO10620028
Ref: 109a10620028
Ref: library/io io BytesIO getbuffer10620516
Ref: 13ed10620516
Ref: library/io io BytesIO getvalue10621092
Ref: 2ce310621092
Ref: library/io io BytesIO read110621215
Ref: 2fa510621215
Ref: library/io io BytesIO readinto110621411
Ref: 2fa610621411
Ref: library/io io BufferedReader10621574
Ref: 140a10621574
Ref: library/io io BufferedReader peek10622415
Ref: 2fa710622415
Ref: library/io io BufferedReader read10622716
Ref: 2fa810622716
Ref: library/io io BufferedReader read110622863
Ref: 2fa910622863
Ref: library/io io BufferedWriter10623085
Ref: 15a310623085
Ref: library/io io BufferedWriter flush10624206
Ref: 2faa10624206
Ref: library/io io BufferedWriter write10624391
Ref: 2fab10624391
Ref: library/io io BufferedRandom10624749
Ref: 15a410624749
Ref: library/io io BufferedRWPair10625452
Ref: 15a510625452
Node: E/S de texto<2>10626391
Ref: library/io id110626488
Ref: 2fac10626488
Ref: library/io io TextIOBase10626535
Ref: 89910626535
Ref: library/io io TextIOBase encoding10626852
Ref: 2fad10626852
Ref: library/io io TextIOBase errors10627011
Ref: 150a10627011
Ref: library/io io TextIOBase newlines10627094
Ref: 2fae10627094
Ref: library/io io TextIOBase buffer10627337
Ref: 149f10627337
Ref: library/io io TextIOBase detach10627635
Ref: 2faf10627635
Ref: library/io io TextIOBase read10628159
Ref: 1f2110628159
Ref: library/io io TextIOBase readline10628368
Ref: 1f5b10628368
Ref: library/io io TextIOBase seek10628639
Ref: 2fb010628639
Ref: library/io io TextIOBase tell10629618
Ref: 2fb110629618
Ref: library/io io TextIOBase write10629823
Ref: 1f1010629823
Ref: library/io io TextIOWrapper10629956
Ref: 9b410629956
Ref: library/io io TextIOWrapper line_buffering10634038
Ref: 2fb210634038
Ref: library/io io TextIOWrapper write_through10634119
Ref: 2fb310634119
Ref: library/io io TextIOWrapper reconfigure10634283
Ref: d3410634283
Ref: library/io io TextIOWrapper seek10635180
Ref: 2fb410635180
Ref: library/io io TextIOWrapper tell10636107
Ref: 2fb510636107
Ref: library/io io StringIO10636331
Ref: 111f10636331
Ref: library/io io StringIO getvalue10637498
Ref: 2fb610637498
Ref: library/io io IncrementalNewlineDecoder10638155
Ref: 197c10638155
Node: Static Typing10638343
Ref: library/io static-typing10638499
Ref: 2fb710638499
Ref: library/io io Reader10638742
Ref: 23510638742
Ref: library/io io Reader read10638994
Ref: 2fb810638994
Ref: library/io io Writer10639385
Ref: 23610639385
Ref: library/io io Writer write10639642
Ref: 2fb910639642
Node: Desempenho<3>10640054
Ref: library/io performance10640181
Ref: 2fbb10640181
Node: E/S binária<2>10640440
Ref: library/io id210640529
Ref: 2fbc10640529
Node: E/S de texto<3>10641184
Ref: library/io id310641300
Ref: 2fbd10641300
Node: Multi-threading<3>10641873
Ref: library/io multi-threading10641984
Ref: 2fbe10641984
Ref: Multi-threading<3>-Footnote-110642558
Node: Reentrancy10642602
Ref: library/io reentrancy10642689
Ref: 2fbf10642689
Node: time — Acesso ao horário e conversões10643483
Ref: library/time doc10643732
Ref: 2fc010643732
Ref: library/time module-time10643732
Ref: f410643732
Ref: library/time no-color10643732
Ref: 2fc110643732
Ref: library/time time-time-access-and-conversions10643732
Ref: 2fc210643732
Ref: library/time epoch10644499
Ref: 2da210644499
Ref: time — Acesso ao horário e conversões-Footnote-110649452
Ref: time — Acesso ao horário e conversões-Footnote-210649502
Ref: time — Acesso ao horário e conversões-Footnote-310649567
Node: Funções<5>10649625
Ref: library/time functions10649752
Ref: 2fc510649752
Ref: library/time time-functions10649752
Ref: 2fc610649752
Ref: library/time time asctime10649789
Ref: 13e310649789
Ref: library/time time pthread_getcpuclockid10650530
Ref: d7f10650530
Ref: library/time time clock_getres10651220
Ref: 135910651220
Ref: library/time time clock_gettime10651520
Ref: 135a10651520
Ref: library/time time clock_gettime_ns10651927
Ref: cce10651927
Ref: library/time time clock_settime10652147
Ref: 135b10652147
Ref: library/time time clock_settime_ns10652554
Ref: ccf10652554
Ref: library/time time ctime10652799
Ref: 275f10652799
Ref: library/time time get_clock_info10653443
Ref: 135810653443
Ref: library/time time gmtime10654694
Ref: 13bc10654694
Ref: library/time time localtime10655217
Ref: 16e710655217
Ref: library/time time mktime10655954
Ref: 13e410655954
Ref: library/time time monotonic10656781
Ref: 55510656781
Ref: library/time time monotonic_ns10657965
Ref: cd010657965
Ref: library/time time perf_counter10658126
Ref: c6e10658126
Ref: library/time time perf_counter_ns10659083
Ref: cd110659083
Ref: library/time time process_time10659252
Ref: c6f10659252
Ref: library/time time process_time_ns10659794
Ref: cd210659794
Ref: library/time time sleep10659963
Ref: 8a110659963
Ref: library/time time strftime10662278
Ref: 13e510662278
Ref: library/time leap-second10670186
Ref: 2fc810670186
Ref: library/time time strptime10671473
Ref: 161e10671473
Ref: library/time time struct_time10673316
Ref: eda10673316
Ref: library/time time struct_time tm_year10673986
Ref: 16e610673986
Ref: library/time time struct_time tm_mon10674250
Ref: 2fc910674250
Ref: library/time time struct_time tm_mday10674513
Ref: 2fca10674513
Ref: library/time time struct_time tm_hour10674775
Ref: 2fcb10674775
Ref: library/time time struct_time tm_min10675036
Ref: 2fcc10675036
Ref: library/time time struct_time tm_sec10675298
Ref: 2fcd10675298
Ref: library/time time struct_time tm_wday10675779
Ref: 2fce10675779
Ref: library/time time struct_time tm_yday10676061
Ref: 2fcf10676061
Ref: library/time time struct_time tm_isdst10676326
Ref: 277010676326
Ref: library/time time struct_time tm_zone10676594
Ref: 2fc410676594
Ref: library/time time struct_time tm_gmtoff10676879
Ref: 2fc310676879
Ref: library/time time time10677713
Ref: 55610677713
Ref: library/time time time_ns10679386
Ref: cd310679386
Ref: library/time time thread_time10679589
Ref: b2610679589
Ref: library/time time thread_time_ns10680263
Ref: d7e10680263
Ref: library/time time tzset10680430
Ref: 2fd010680430
Ref: Funções<5>-Footnote-110684700
Ref: Funções<5>-Footnote-210684761
Ref: Funções<5>-Footnote-310684853
Ref: Funções<5>-Footnote-410684895
Ref: Funções<5>-Footnote-510685654
Ref: Funções<5>-Footnote-610686413
Ref: Funções<5>-Footnote-710686463
Ref: Funções<5>-Footnote-810686522
Ref: Funções<5>-Footnote-910687281
Ref: Funções<5>-Footnote-1010687329
Ref: Funções<5>-Footnote-1110687380
Ref: Funções<5>-Footnote-1210687429
Node: Constantes de ID de Relógio10687476
Ref: library/time clock-id-constants10687639
Ref: 2fd110687639
Ref: library/time time-clock-id-constants10687639
Ref: 2f3b10687639
Ref: library/time time CLOCK_BOOTTIME10687830
Ref: d7b10687830
Ref: library/time time CLOCK_HIGHRES10688352
Ref: 2fd210688352
Ref: library/time time CLOCK_MONOTONIC10688705
Ref: 89d10688705
Ref: library/time time CLOCK_MONOTONIC_RAW10688938
Ref: 2fd310688938
Ref: library/time time CLOCK_MONOTONIC_RAW_APPROX10689223
Ref: 2fd410689223
Ref: library/time time CLOCK_PROCESS_CPUTIME_ID10689510
Ref: 2fd510689510
Ref: library/time time CLOCK_PROF10689679
Ref: d7c10689679
Ref: library/time time CLOCK_TAI10689859
Ref: 1c0e10689859
Ref: library/time time CLOCK_THREAD_CPUTIME_ID10690180
Ref: 2fd610690180
Ref: library/time time CLOCK_UPTIME10690348
Ref: d7d10690348
Ref: library/time time CLOCK_UPTIME_RAW10690670
Ref: c2c10690670
Ref: library/time time CLOCK_UPTIME_RAW_APPROX10691000
Ref: 2fd710691000
Ref: library/time time CLOCK_REALTIME10691384
Ref: 89e10691384
Ref: Constantes de ID de Relógio-Footnote-110691668
Node: Constantes de Fuso Horário10691795
Ref: library/time time-timezone-constants10691937
Ref: 2fd810691937
Ref: library/time timezone-constants10691937
Ref: 2fd910691937
Ref: library/time time altzone10692011
Ref: 2fda10692011
Ref: library/time time daylight10692350
Ref: 2fdb10692350
Ref: library/time time timezone10692460
Ref: 2fdc10692460
Ref: library/time time tzname10692711
Ref: 2fdd10692711
Node: logging — Recursos de registro de eventos para Python10694015
Ref: library/logging doc10694261
Ref: 2fde10694261
Ref: library/logging logging-logging-facility-for-python10694261
Ref: 2fdf10694261
Ref: library/logging module-logging10694261
Ref: 8b10694261
Ref: library/logging no-color10694261
Ref: 2fe010694261
Ref: logging — Recursos de registro de eventos para Python-Footnote-110698222
Node: Objetos Logger10698299
Ref: library/logging logger10698432
Ref: 2fe110698432
Ref: library/logging logger-objects10698432
Ref: 2fe210698432
Ref: library/logging logging Logger10699603
Ref: d3a10699603
Ref: library/logging logging Logger name10699631
Ref: 2fe310699631
Ref: library/logging logging Logger level10699878
Ref: 2fe410699878
Ref: library/logging logging Logger parent10700170
Ref: 2fe510700170
Ref: library/logging logging Logger propagate10700437
Ref: 168310700437
Ref: library/logging logging Logger handlers10702775
Ref: 2fe610702775
Ref: library/logging logging Logger disabled10703151
Ref: 2fe910703151
Ref: library/logging logging Logger setLevel10703443
Ref: 168110703443
Ref: library/logging logging Logger isEnabledFor10705600
Ref: 14f210705600
Ref: library/logging logging Logger getEffectiveLevel10705959
Ref: 2fed10705959
Ref: library/logging logging Logger getChild10706491
Ref: 14f010706491
Ref: library/logging logging Logger getChildren10707013
Ref: 1a6e10707013
Ref: library/logging logging Logger debug10707589
Ref: 102010707589
Ref: library/logging logging Logger info10713085
Ref: 2ff010713085
Ref: library/logging logging Logger warning10713271
Ref: 19b310713271
Ref: library/logging logging Logger error10713684
Ref: 2ff210713684
Ref: library/logging logging Logger critical10713872
Ref: 101f10713872
Ref: library/logging logging Logger log10714077
Ref: 101d10714077
Ref: library/logging logging Logger exception10714274
Ref: 101e10714274
Ref: library/logging logging Logger addFilter10714596
Ref: 2ff510714596
Ref: library/logging logging Logger removeFilter10714696
Ref: 2ff610714696
Ref: library/logging logging Logger filter10714804
Ref: 2ff710714804
Ref: library/logging logging Logger addHandler10715242
Ref: 2fe710715242
Ref: library/logging logging Logger removeHandler10715348
Ref: 2fe810715348
Ref: library/logging logging Logger findCaller10715455
Ref: 2ff810715455
Ref: library/logging logging Logger handle10716258
Ref: 2ff910716258
Ref: library/logging logging Logger makeRecord10716658
Ref: 2ffa10716658
Ref: library/logging logging Logger hasHandlers10716922
Ref: 2ffb10716922
Node: Níveis de Logging10717550
Ref: library/logging levels10717707
Ref: 85f10717707
Ref: library/logging logging-levels10717707
Ref: 2ffc10717707
Ref: library/logging logging NOTSET10718439
Ref: 2fea10718439
Ref: library/logging logging DEBUG10719049
Ref: 2fee10719049
Ref: library/logging logging INFO10719384
Ref: 2fec10719384
Ref: library/logging logging WARNING10719646
Ref: 2feb10719646
Ref: library/logging logging ERROR10720155
Ref: 2ff310720155
Ref: library/logging logging CRITICAL10720472
Ref: 2ff410720472
Node: Objetos Handler10720688
Ref: library/logging handler10720848
Ref: 2ffd10720848
Ref: library/logging handler-objects10720848
Ref: 2ffe10720848
Ref: library/logging logging Handler10721168
Ref: 168410721168
Ref: library/logging logging Handler __init__10721197
Ref: 2fff10721197
Ref: library/logging logging Handler createLock10721493
Ref: 300010721493
Ref: library/logging logging Handler acquire10721682
Ref: 300110721682
Ref: library/logging logging Handler release10721797
Ref: 300210721797
Ref: library/logging logging Handler setLevel10721900
Ref: 300310721900
Ref: library/logging logging Handler setFormatter10722496
Ref: 300410722496
Ref: library/logging logging Handler addFilter10722678
Ref: 300510722678
Ref: library/logging logging Handler removeFilter10722779
Ref: 300610722779
Ref: library/logging logging Handler filter10722888
Ref: 300710722888
Ref: library/logging logging Handler flush10723288
Ref: 300810723288
Ref: library/logging logging Handler close10723457
Ref: 300910723457
Ref: library/logging logging Handler handle10723802
Ref: 300a10723802
Ref: library/logging logging Handler handleError10724081
Ref: 300b10724081
Ref: library/logging logging Handler format10724884
Ref: 300d10724884
Ref: library/logging logging Handler emit10725053
Ref: 300c10725053
Node: Formatter Objects10726584
Ref: library/logging formatter-objects10726740
Ref: 300e10726740
Ref: library/logging id110726740
Ref: 300f10726740
Ref: library/logging logging Formatter10726795
Ref: 168510726795
Ref: library/logging logging Formatter format10728983
Ref: 301210728983
Ref: library/logging logging Formatter formatTime10730461
Ref: 301010730461
Ref: library/logging logging Formatter formatException10732858
Ref: 301310732858
Ref: library/logging logging Formatter formatStack10733197
Ref: 301410733197
Ref: library/logging logging BufferingFormatter10733491
Ref: 301510733491
Ref: library/logging logging BufferingFormatter formatHeader10733910
Ref: 301610733910
Ref: library/logging logging BufferingFormatter formatFooter10734225
Ref: 301710734225
Ref: library/logging logging BufferingFormatter format10734531
Ref: 301810734531
Node: Filter Objects10734863
Ref: library/logging filter10735021
Ref: 301910735021
Ref: library/logging filter-objects10735021
Ref: 301a10735021
Ref: library/logging logging Filter10735535
Ref: 13f710735535
Ref: library/logging logging Filter filter10735827
Ref: 301b10735827
Node: LogRecord Objects10738236
Ref: library/logging log-record10738396
Ref: 301e10738396
Ref: library/logging logrecord-objects10738396
Ref: 301f10738396
Ref: library/logging logging LogRecord10738690
Ref: 11dc10738690
Ref: library/logging logging LogRecord getMessage10741260
Ref: 302210741260
Node: Atributos LogRecord10742763
Ref: library/logging id210742930
Ref: 302510742930
Ref: library/logging logrecord-attributes10742930
Ref: 2fef10742930
Node: LoggerAdapter Objects10751341
Ref: library/logging logger-adapter10751504
Ref: 302610751504
Ref: library/logging loggeradapter-objects10751504
Ref: 302710751504
Ref: library/logging logging LoggerAdapter10751785
Ref: 14f110751785
Ref: library/logging logging LoggerAdapter process10752336
Ref: 302910752336
Ref: library/logging logging LoggerAdapter manager10752792
Ref: 302a10752792
Ref: library/logging logging LoggerAdapter _log10752886
Ref: 302b10752886
Node: Thread Safety10754052
Ref: library/logging thread-safety10754226
Ref: 302c10754226
Node: Funções de Nível de Módulo10754885
Ref: library/logging module-level-functions10755061
Ref: 302d10755061
Ref: library/logging logging getLogger10755231
Ref: b4f10755231
Ref: library/logging logging getLoggerClass10755962
Ref: 302e10755962
Ref: library/logging logging getLogRecordFactory10756440
Ref: 302310756440
Ref: library/logging logging debug10756908
Ref: 2ff110756908
Ref: library/logging logging info10757801
Ref: 301c10757801
Ref: library/logging logging warning10758010
Ref: 35110758010
Ref: library/logging logging error10758433
Ref: 303010758433
Ref: library/logging logging critical10758644
Ref: 303110758644
Ref: library/logging logging exception10758861
Ref: 168210758861
Ref: library/logging logging log10759193
Ref: 303210759193
Ref: library/logging logging disable10759399
Ref: 303310759399
Ref: library/logging logging addLevelName10760616
Ref: 303410760616
Ref: library/logging logging getLevelNamesMapping10761283
Ref: 85e10761283
Ref: library/logging logging getLevelName10761617
Ref: 303610761617
Ref: library/logging logging getHandlerByName10763257
Ref: 1a7e10763257
Ref: library/logging logging getHandlerNames10763447
Ref: 19ad10763447
Ref: library/logging logging makeLogRecord10763582
Ref: 302010763582
Ref: library/logging logging basicConfig10763950
Ref: be910763950
Ref: library/logging logging shutdown10769385
Ref: 303710769385
Ref: library/logging logging setLoggerClass10769827
Ref: 302f10769827
Ref: library/logging logging setLogRecordFactory10770443
Ref: 302410770443
Ref: Funções de Nível de Módulo-Footnote-110771787
Node: Module-Level Attributes10771852
Ref: library/logging module-level-attributes10772051
Ref: 303810772051
Ref: library/logging logging lastResort10772120
Ref: 13f610772120
Ref: library/logging logging raiseExceptions10772732
Ref: 13f510772732
Node: Integration with the warnings module10773129
Ref: library/logging integration-with-the-warnings-module10773289
Ref: 303910773289
Ref: library/logging logging captureWarnings10773511
Ref: 303a10773511
Ref: Integration with the warnings module-Footnote-110774912
Ref: Integration with the warnings module-Footnote-210774954
Node: logging config — Configuração do módulo logging10775007
Ref: library/logging config doc10775266
Ref: 303b10775266
Ref: library/logging config logging-config-logging-configuration10775266
Ref: 303c10775266
Ref: library/logging config module-logging config10775266
Ref: 8c10775266
Ref: library/logging config no-color10775266
Ref: 303d10775266
Ref: logging config — Configuração do módulo logging-Footnote-110775997
Node: Funções de configuração10776071
Ref: library/logging config configuration-functions10776225
Ref: 303e10776225
Ref: library/logging config logging-config-api10776225
Ref: 14ed10776225
Ref: library/logging config logging config dictConfig10776681
Ref: 13ac10776681
Ref: library/logging config logging config fileConfig10778806
Ref: d3c10778806
Ref: library/logging config logging config listen10781540
Ref: 115b10781540
Ref: library/logging config logging-eval-security10783193
Ref: 304210783193
Ref: library/logging config logging config stopListening10784882
Ref: 304110784882
Node: Considerações de segurança10785128
Ref: library/logging config security-considerations10785322
Ref: 304310785322
Node: Configuration dictionary schema10786049
Ref: library/logging config configuration-dictionary-schema10786252
Ref: 304510786252
Ref: library/logging config logging-config-dictschema10786252
Ref: 303f10786252
Node: Dictionary Schema Details10787269
Ref: library/logging config dictionary-schema-details10787396
Ref: 304710787396
Ref: library/logging config logging-config-dictschema-formatters10788203
Ref: 304810788203
Node: Incremental Configuration10793077
Ref: library/logging config incremental-configuration10793231
Ref: 304a10793231
Ref: library/logging config logging-config-dict-incremental10793231
Ref: 304910793231
Node: Object connections10794676
Ref: library/logging config logging-config-dict-connections10794825
Ref: 304610794825
Ref: library/logging config object-connections10794825
Ref: 304b10794825
Node: User-defined objects10797220
Ref: library/logging config logging-config-dict-userdef10797371
Ref: 304410797371
Ref: library/logging config user-defined-objects10797371
Ref: 304c10797371
Node: Handler configuration order10801961
Ref: library/logging config handler-config-dict-order10802120
Ref: 304d10802120
Ref: library/logging config handler-configuration-order10802120
Ref: 304e10802120
Node: Access to external objects10803433
Ref: library/logging config access-to-external-objects10803598
Ref: 304f10803598
Ref: library/logging config logging-config-dict-externalobj10803598
Ref: 305010803598
Node: Access to internal objects10804897
Ref: library/logging config access-to-internal-objects10805073
Ref: 305110805073
Ref: library/logging config logging-config-dict-internalobj10805073
Ref: 305210805073
Node: Import resolution and custom importers10808511
Ref: library/logging config import-resolution-and-custom-importers10808703
Ref: 305410808703
Ref: library/logging config logging-import-resolution10808703
Ref: 305510808703
Node: Configuring QueueHandler and QueueListener10809683
Ref: library/logging config configure-queue10809840
Ref: 189910809840
Ref: library/logging config configuring-queuehandler-and-queuelistener10809840
Ref: 305610809840
Node: Formato do arquivo de configuração10813052
Ref: library/logging config configuration-file-format10813217
Ref: 305b10813217
Ref: library/logging config logging-config-fileformat10813217
Ref: 304010813217
Node: logging handlers — Tratadores de registro de eventos10820621
Ref: library/logging handlers doc10820898
Ref: 305c10820898
Ref: library/logging handlers logging-handlers-logging-handlers10820898
Ref: 305d10820898
Ref: library/logging handlers module-logging handlers10820898
Ref: 8d10820898
Ref: library/logging handlers no-color10820898
Ref: 305e10820898
Ref: logging handlers — Tratadores de registro de eventos-Footnote-110822043
Node: StreamHandler10822120
Ref: library/logging handlers stream-handler10822244
Ref: 305f10822244
Ref: library/logging handlers streamhandler10822244
Ref: 306010822244
Ref: library/logging handlers logging StreamHandler10822558
Ref: 13f410822558
Ref: library/logging handlers logging StreamHandler emit10822797
Ref: 306110822797
Ref: library/logging handlers logging StreamHandler flush10823148
Ref: 306310823148
Ref: library/logging handlers logging StreamHandler setStream10823442
Ref: d3b10823442
Ref: library/logging handlers logging StreamHandler terminator10823865
Ref: 306210823865
Node: FileHandler10824285
Ref: library/logging handlers file-handler10824429
Ref: 306410824429
Ref: library/logging handlers filehandler10824429
Ref: 306510824429
Ref: library/logging handlers logging FileHandler10824664
Ref: 1b4210824664
Ref: library/logging handlers logging FileHandler close10825489
Ref: 306710825489
Ref: library/logging handlers logging FileHandler emit10825545
Ref: 306610825545
Ref: FileHandler-Footnote-110825834
Node: NullHandler10825899
Ref: library/logging handlers null-handler10826048
Ref: 306810826048
Ref: library/logging handlers nullhandler10826048
Ref: 306910826048
Ref: library/logging handlers logging NullHandler10826314
Ref: 148010826314
Ref: library/logging handlers logging NullHandler emit10826415
Ref: 306a10826415
Ref: library/logging handlers logging NullHandler handle10826485
Ref: 306b10826485
Ref: library/logging handlers logging NullHandler createLock10826557
Ref: 306c10826557
Node: WatchedFileHandler10826848
Ref: library/logging handlers watched-file-handler10827005
Ref: 306e10827005
Ref: library/logging handlers watchedfilehandler10827005
Ref: 306f10827005
Ref: library/logging handlers logging handlers WatchedFileHandler10828020
Ref: 307010828020
Ref: library/logging handlers logging handlers WatchedFileHandler reopenIfNeeded10828855
Ref: ea810828855
Ref: library/logging handlers logging handlers WatchedFileHandler emit10829154
Ref: 307110829154
Node: BaseRotatingHandler10829323
Ref: library/logging handlers base-rotating-handler10829488
Ref: 307210829488
Ref: library/logging handlers baserotatinghandler10829488
Ref: 307310829488
Ref: library/logging handlers logging handlers BaseRotatingHandler10829876
Ref: 307410829876
Ref: library/logging handlers logging handlers BaseRotatingHandler namer10830066
Ref: 307510830066
Ref: library/logging handlers logging handlers BaseRotatingHandler rotator10831809
Ref: 307810831809
Ref: library/logging handlers logging handlers BaseRotatingHandler rotation_filename10832098
Ref: 307610832098
Ref: library/logging handlers logging handlers BaseRotatingHandler rotate10832676
Ref: 307910832676
Node: RotatingFileHandler10833996
Ref: library/logging handlers rotating-file-handler10834167
Ref: 307b10834167
Ref: library/logging handlers rotatingfilehandler10834167
Ref: 307c10834167
Ref: library/logging handlers logging handlers RotatingFileHandler10834359
Ref: 189410834359
Ref: library/logging handlers logging handlers RotatingFileHandler doRollover10836333
Ref: 307e10836333
Ref: library/logging handlers logging handlers RotatingFileHandler emit10836414
Ref: 307d10836414
Ref: library/logging handlers logging handlers RotatingFileHandler shouldRollover10836547
Ref: 307f10836547
Node: TimedRotatingFileHandler10836696
Ref: library/logging handlers timed-rotating-file-handler10836861
Ref: 308010836861
Ref: library/logging handlers timedrotatingfilehandler10836861
Ref: 308110836861
Ref: library/logging handlers logging handlers TimedRotatingFileHandler10837095
Ref: 115710837095
Ref: library/logging handlers logging handlers TimedRotatingFileHandler doRollover10842252
Ref: 308310842252
Ref: library/logging handlers logging handlers TimedRotatingFileHandler emit10842333
Ref: 308210842333
Ref: library/logging handlers logging handlers TimedRotatingFileHandler getFilesToDelete10842461
Ref: 307710842461
Ref: library/logging handlers logging handlers TimedRotatingFileHandler shouldRollover10842601
Ref: 308410842601
Node: SocketHandler10842766
Ref: library/logging handlers socket-handler10842927
Ref: 308510842927
Ref: library/logging handlers sockethandler10842927
Ref: 308610842927
Ref: library/logging handlers logging handlers SocketHandler10843140
Ref: 115810843140
Ref: library/logging handlers logging handlers SocketHandler close10843550
Ref: 308710843550
Ref: library/logging handlers logging handlers SocketHandler emit10843608
Ref: 308810843608
Ref: library/logging handlers logging handlers SocketHandler handleError10844045
Ref: 308910844045
Ref: library/logging handlers logging handlers SocketHandler makeSocket10844276
Ref: 308a10844276
Ref: library/logging handlers logging handlers SocketHandler makePickle10844521
Ref: 308b10844521
Ref: library/logging handlers logging handlers SocketHandler send10845332
Ref: 308c10845332
Ref: library/logging handlers logging handlers SocketHandler createSocket10845654
Ref: 86210845654
Node: DatagramHandler10846855
Ref: library/logging handlers datagram-handler10847005
Ref: 308d10847005
Ref: library/logging handlers datagramhandler10847005
Ref: 308e10847005
Ref: library/logging handlers logging handlers DatagramHandler10847243
Ref: 115910847243
Ref: library/logging handlers logging handlers DatagramHandler emit10848160
Ref: 308f10848160
Ref: library/logging handlers logging handlers DatagramHandler makeSocket10848516
Ref: 309010848516
Ref: library/logging handlers logging handlers DatagramHandler send10848705
Ref: 309110848705
Node: SysLogHandler10848921
Ref: library/logging handlers syslog-handler10849075
Ref: 309210849075
Ref: library/logging handlers sysloghandler10849075
Ref: 309310849075
Ref: library/logging handlers logging handlers SysLogHandler10849281
Ref: 86110849281
Ref: library/logging handlers logging handlers SysLogHandler close10851593
Ref: 309410851593
Ref: library/logging handlers logging handlers SysLogHandler createSocket10851670
Ref: 86010851670
Ref: library/logging handlers logging handlers SysLogHandler emit10852131
Ref: 309510852131
Ref: library/logging handlers logging handlers SysLogHandler encodePriority10854016
Ref: 309610854016
Ref: library/logging handlers logging handlers SysLogHandler mapPriority10858041
Ref: 309710858041
Ref: SysLogHandler-Footnote-110858532
Ref: SysLogHandler-Footnote-210858587
Ref: SysLogHandler-Footnote-310858652
Ref: SysLogHandler-Footnote-410858711
Node: NTEventLogHandler10858776
Ref: library/logging handlers nt-eventlog-handler10858926
Ref: 309810858926
Ref: library/logging handlers nteventloghandler10858926
Ref: 309910858926
Ref: library/logging handlers logging handlers NTEventLogHandler10859261
Ref: 309a10859261
Ref: library/logging handlers logging handlers NTEventLogHandler close10860323
Ref: 309b10860323
Ref: library/logging handlers logging handlers NTEventLogHandler emit10860726
Ref: 309c10860726
Ref: library/logging handlers logging handlers NTEventLogHandler getEventCategory10860885
Ref: 309d10860885
Ref: library/logging handlers logging handlers NTEventLogHandler getEventType10861088
Ref: 309e10861088
Ref: library/logging handlers logging handlers NTEventLogHandler getMessageID10861676
Ref: 309f10861676
Node: SMTPHandler10862107
Ref: library/logging handlers smtp-handler10862257
Ref: 30a010862257
Ref: library/logging handlers smtphandler10862257
Ref: 30a110862257
Ref: library/logging handlers logging handlers SMTPHandler10862454
Ref: 181310862454
Ref: library/logging handlers logging handlers SMTPHandler emit10863711
Ref: 30a210863711
Ref: library/logging handlers logging handlers SMTPHandler getSubject10863816
Ref: 30a310863816
Node: MemoryHandler10863963
Ref: library/logging handlers memory-handler10864107
Ref: 30a410864107
Ref: library/logging handlers memoryhandler10864107
Ref: 30a510864107
Ref: library/logging handlers logging handlers BufferingHandler10864810
Ref: 30a610864810
Ref: library/logging handlers logging handlers BufferingHandler emit10865007
Ref: 30a710865007
Ref: library/logging handlers logging handlers BufferingHandler flush10865198
Ref: 30a910865198
Ref: library/logging handlers logging handlers BufferingHandler shouldFlush10865436
Ref: 30a810865436
Ref: library/logging handlers logging handlers MemoryHandler10865620
Ref: 305310865620
Ref: library/logging handlers logging handlers MemoryHandler close10866437
Ref: 30ab10866437
Ref: library/logging handlers logging handlers MemoryHandler flush10866566
Ref: 30ac10866566
Ref: library/logging handlers logging handlers MemoryHandler setTarget10866874
Ref: 30aa10866874
Ref: library/logging handlers logging handlers MemoryHandler shouldFlush10866965
Ref: 30ad10866965
Node: HTTPHandler10867092
Ref: library/logging handlers http-handler10867237
Ref: 30ae10867237
Ref: library/logging handlers httphandler10867237
Ref: 30af10867237
Ref: library/logging handlers logging handlers HTTPHandler10867469
Ref: 102110867469
Ref: library/logging handlers logging handlers HTTPHandler mapLogRecord10868432
Ref: 30b010868432
Ref: library/logging handlers logging handlers HTTPHandler emit10868890
Ref: 30b110868890
Node: QueueHandler10869627
Ref: library/logging handlers queue-handler10869772
Ref: 30b210869772
Ref: library/logging handlers queuehandler10869772
Ref: 30b310869772
Ref: library/logging handlers logging handlers QueueHandler10870518
Ref: 1a7d10870518
Ref: library/logging handlers logging handlers QueueHandler emit10871658
Ref: 30b610871658
Ref: library/logging handlers logging handlers QueueHandler prepare10872162
Ref: 30b710872162
Ref: library/logging handlers logging handlers QueueHandler enqueue10874102
Ref: 30b410874102
Ref: library/logging handlers logging handlers QueueHandler listener10874349
Ref: 305710874349
Node: QueueListener10874648
Ref: library/logging handlers queue-listener10874773
Ref: 30b810874773
Ref: library/logging handlers queuelistener10874773
Ref: 30b910874773
Ref: library/logging handlers logging handlers QueueListener10875800
Ref: 24110875800
Ref: library/logging handlers logging handlers QueueListener dequeue10877346
Ref: 30ba10877346
Ref: library/logging handlers logging handlers QueueListener prepare10877628
Ref: 30bb10877628
Ref: library/logging handlers logging handlers QueueListener handle10877946
Ref: 30bc10877946
Ref: library/logging handlers logging handlers QueueListener start10878209
Ref: 24210878209
Ref: library/logging handlers logging handlers QueueListener stop10878499
Ref: 30bd10878499
Ref: library/logging handlers logging handlers QueueListener enqueue_sentinel10878811
Ref: 30be10878811
Node: platform — Acesso aos dados de identificação da plataforma subjacente10879335
Ref: library/platform doc10879604
Ref: 30bf10879604
Ref: library/platform module-platform10879604
Ref: af10879604
Ref: library/platform no-color10879604
Ref: 30c010879604
Ref: library/platform platform-access-to-underlying-platform-s-identifying-data10879604
Ref: 30c110879604
Ref: platform — Acesso aos dados de identificação da plataforma subjacente-Footnote-110880256
Node: Multiplataforma10880324
Ref: library/platform cross-platform10880473
Ref: 30c210880473
Ref: library/platform platform architecture10880524
Ref: 194210880524
Ref: library/platform platform machine10882016
Ref: 30c310882016
Ref: library/platform platform node10882314
Ref: 30c410882314
Ref: library/platform platform platform10882510
Ref: 19fe10882510
Ref: library/platform platform processor10883517
Ref: 30c610883517
Ref: library/platform platform python_build10883867
Ref: 30c710883867
Ref: library/platform platform python_compiler10884033
Ref: 30c810884033
Ref: library/platform platform python_branch10884161
Ref: 30c910884161
Ref: library/platform platform python_implementation10884289
Ref: 30ca10884289
Ref: library/platform platform python_revision10884515
Ref: 30cb10884515
Ref: library/platform platform python_version10884648
Ref: 30cc10884648
Ref: library/platform platform python_version_tuple10884905
Ref: 30cd10884905
Ref: library/platform platform release10885193
Ref: 30ce10885193
Ref: library/platform platform system10885381
Ref: 211210885381
Ref: library/platform platform system_alias10885841
Ref: 30c510885841
Ref: library/platform platform version10886156
Ref: 30cf10886156
Ref: library/platform platform uname10886515
Ref: 1cc910886515
Ref: library/platform platform invalidate_caches10887320
Ref: 27c10887320
Node: Plataforma Java10887638
Ref: library/platform java-platform10887814
Ref: 30d010887814
Ref: library/platform platform java_ver10887865
Ref: 32a10887865
Node: Plataforma Windows10888552
Ref: library/platform windows-platform10888729
Ref: 30d110888729
Ref: library/platform platform win32_ver10888786
Ref: 1c0110888786
Ref: library/platform platform win32_edition10889801
Ref: 30d210889801
Ref: library/platform platform win32_is_iot10890152
Ref: 30d310890152
Node: Plataforma macOS10890362
Ref: library/platform macos-platform10890538
Ref: 30d410890538
Ref: library/platform platform mac_ver10890591
Ref: 1ccb10890591
Node: Plataforma iOS10891011
Ref: library/platform ios-platform10891185
Ref: 30d510891185
Ref: library/platform platform ios_ver10891234
Ref: 211110891234
Node: Plataformas Unix10892126
Ref: library/platform unix-platforms10892301
Ref: 30d610892301
Ref: library/platform platform libc_ver10892354
Ref: 176610892354
Node: Plataformas Linux10893023
Ref: library/platform linux-platforms10893202
Ref: 30d710893202
Ref: library/platform platform freedesktop_os_release10893257
Ref: a1d10893257
Ref: Plataformas Linux-Footnote-110894826
Node: Plataforma Android10894899
Ref: library/platform android-platform10895088
Ref: 30d810895088
Ref: library/platform platform android_ver10895145
Ref: 190610895145
Ref: Plataforma Android-Footnote-110896442
Ref: Plataforma Android-Footnote-210896521
Ref: Plataforma Android-Footnote-310896592
Ref: Plataforma Android-Footnote-410896664
Node: Uso na linha de comando<3>10896738
Ref: library/platform command-line-usage10896901
Ref: 30d910896901
Ref: library/platform platform-cli10896901
Ref: 30da10896901
Ref: library/platform cmdoption-platform-terse10897189
Ref: 30db10897189
Ref: library/platform cmdoption-platform-nonaliased10897382
Ref: 30dc10897382
Node: errno — Símbolos padrão do sistema errno10897817
Ref: library/errno doc10898091
Ref: 30dd10898091
Ref: library/errno errno-standard-errno-system-symbols10898091
Ref: 30de10898091
Ref: library/errno module-errno10898091
Ref: 5b10898091
Ref: library/errno no-color10898091
Ref: 30df10898091
Ref: library/errno errno errorcode10898502
Ref: 30e010898502
Ref: library/errno errno EPERM10899063
Ref: 1a7210899063
Ref: library/errno errno ENOENT10899191
Ref: 259c10899191
Ref: library/errno errno ESRCH10899330
Ref: 25a010899330
Ref: library/errno errno EINTR10899457
Ref: f7b10899457
Ref: library/errno errno EIO10899592
Ref: 30e110899592
Ref: library/errno errno ENXIO10899631
Ref: 30e210899631
Ref: library/errno errno E2BIG10899697
Ref: 30e310899697
Ref: library/errno errno ENOEXEC10899758
Ref: 30e410899758
Ref: library/errno errno EBADF10899810
Ref: b4a10899810
Ref: library/errno errno ECHILD10899870
Ref: 259510899870
Ref: library/errno errno EAGAIN10900002
Ref: 259010900002
Ref: library/errno errno ENOMEM10900121
Ref: 30e510900121
Ref: library/errno errno EACCES10900173
Ref: 259f10900173
Ref: library/errno errno EFAULT10900294
Ref: 30e610900294
Ref: library/errno errno ENOTBLK10900344
Ref: 30e710900344
Ref: library/errno errno EBUSY10900406
Ref: 30e810900406
Ref: library/errno errno EEXIST10900466
Ref: 259b10900466
Ref: library/errno errno EXDEV10900585
Ref: 2ec810900585
Ref: library/errno errno ENODEV10900648
Ref: 30e910900648
Ref: library/errno errno ENOTDIR10900702
Ref: 259e10900702
Ref: library/errno errno EISDIR10900832
Ref: 259d10900832
Ref: library/errno errno EINVAL10900955
Ref: 1c8910900955
Ref: library/errno errno ENFILE10901005
Ref: 30ea10901005
Ref: library/errno errno EMFILE10901065
Ref: 30eb10901065
Ref: library/errno errno ENOTTY10901119
Ref: 30ec10901119
Ref: library/errno errno ETXTBSY10901166
Ref: 30ed10901166
Ref: library/errno errno EFBIG10901219
Ref: 30ee10901219
Ref: library/errno errno ENOSPC10901269
Ref: 30ef10901269
Ref: library/errno errno ESPIPE10901343
Ref: 30f010901343
Ref: library/errno errno EROFS10901388
Ref: 30f110901388
Ref: library/errno errno EMLINK10901456
Ref: 30f210901456
Ref: library/errno errno EPIPE10901499
Ref: 259610901499
Ref: library/errno errno EDOM10901616
Ref: 30f310901616
Ref: library/errno errno ERANGE10901695
Ref: 30f410901695
Ref: library/errno errno EDEADLK10901767
Ref: 30f510901767
Ref: library/errno errno ENAMETOOLONG10901842
Ref: 30f610901842
Ref: library/errno errno ENOLCK10901906
Ref: 30f710901906
Ref: library/errno errno ENOSYS10901974
Ref: 1a7310901974
Ref: library/errno errno ENOTEMPTY10902031
Ref: 30f810902031
Ref: library/errno errno ELOOP10902086
Ref: 30f910902086
Ref: library/errno errno EWOULDBLOCK10902158
Ref: 259210902158
Ref: library/errno errno ENOMSG10902294
Ref: 30fa10902294
Ref: library/errno errno EIDRM10902358
Ref: 30fb10902358
Ref: library/errno errno ECHRNG10902410
Ref: 30fc10902410
Ref: library/errno errno EL2NSYNC10902475
Ref: 30fd10902475
Ref: library/errno errno EL3HLT10902534
Ref: 30fe10902534
Ref: library/errno errno EL3RST10902591
Ref: 30ff10902591
Ref: library/errno errno ELNRNG10902648
Ref: 310010902648
Ref: library/errno errno EUNATCH10902708
Ref: 310110902708
Ref: library/errno errno ENOCSI10902772
Ref: 310210902772
Ref: library/errno errno EL2HLT10902837
Ref: 310310902837
Ref: library/errno errno EBADE10902894
Ref: 310410902894
Ref: library/errno errno EBADR10902939
Ref: 310510902939
Ref: library/errno errno EXFULL10903004
Ref: 310610903004
Ref: library/errno errno ENOANO10903049
Ref: 310710903049
Ref: library/errno errno EBADRQC10903089
Ref: 310810903089
Ref: library/errno errno EBADSLT10903154
Ref: 310910903154
Ref: library/errno errno EDEADLOCK10903200
Ref: 310a10903200
Ref: library/errno errno EBFONT10903274
Ref: 310b10903274
Ref: library/errno errno ENOSTR10903342
Ref: 310c10903342
Ref: library/errno errno ENODATA10903402
Ref: 310d10903402
Ref: library/errno errno ETIME10903461
Ref: 310e10903461
Ref: library/errno errno ENOSR10903512
Ref: 310f10903512
Ref: library/errno errno ENONET10903565
Ref: 311010903565
Ref: library/errno errno ENOPKG10903625
Ref: 311110903625
Ref: library/errno errno EREMOTE10903677
Ref: 311210903677
Ref: library/errno errno ENOLINK10903727
Ref: 311310903727
Ref: library/errno errno EADV10903781
Ref: 311410903781
Ref: library/errno errno ESRMNT10903826
Ref: 311510903826
Ref: library/errno errno ECOMM10903869
Ref: 311610903869
Ref: library/errno errno EPROTO10903930
Ref: 311710903930
Ref: library/errno errno EMULTIHOP10903978
Ref: 311810903978
Ref: library/errno errno EDOTDOT10904040
Ref: 311910904040
Ref: library/errno errno EBADMSG10904095
Ref: 311a10904095
Ref: library/errno errno EOVERFLOW10904156
Ref: 311b10904156
Ref: library/errno errno ENOTUNIQ10904238
Ref: 311c10904238
Ref: library/errno errno EBADFD10904300
Ref: 311d10904300
Ref: library/errno errno EREMCHG10904365
Ref: 311e10904365
Ref: library/errno errno ELIBACC10904419
Ref: 311f10904419
Ref: library/errno errno ELIBBAD10904517
Ref: 312010904517
Ref: library/errno errno ELIBSCN10904598
Ref: 312110904598
Ref: library/errno errno ELIBMAX10904662
Ref: 312210904662
Ref: library/errno errno ELIBEXEC10904745
Ref: 312310904745
Ref: library/errno errno EILSEQ10904845
Ref: 312410904845
Ref: library/errno errno ERESTART10904902
Ref: 312510904902
Ref: library/errno errno ESTRPIPE10904986
Ref: 312610904986
Ref: library/errno errno EUSERS10905041
Ref: 312710905041
Ref: library/errno errno ENOTSOCK10905088
Ref: 312810905088
Ref: library/errno errno EDESTADDRREQ10905164
Ref: 312910905164
Ref: library/errno errno EMSGSIZE10905233
Ref: 312a10905233
Ref: library/errno errno EPROTOTYPE10905286
Ref: 312b10905286
Ref: library/errno errno ENOPROTOOPT10905357
Ref: 312c10905357
Ref: library/errno errno EPROTONOSUPPORT10905419
Ref: 312d10905419
Ref: library/errno errno ESOCKTNOSUPPORT10905480
Ref: 312e10905480
Ref: library/errno errno EOPNOTSUPP10905543
Ref: 312f10905543
Ref: library/errno errno ENOTSUP10905629
Ref: 313010905629
Ref: library/errno errno EPFNOSUPPORT10905716
Ref: 313110905716
Ref: library/errno errno EAFNOSUPPORT10905786
Ref: 313210905786
Ref: library/errno errno EADDRINUSE10905872
Ref: 313310905872
Ref: library/errno errno EADDRNOTAVAIL10905927
Ref: 313410905927
Ref: library/errno errno ENETDOWN10906014
Ref: 313510906014
Ref: library/errno errno ENETUNREACH10906067
Ref: 1ca010906067
Ref: library/errno errno ENETRESET10906131
Ref: 313610906131
Ref: library/errno errno ECONNABORTED10906199
Ref: 259810906199
Ref: library/errno errno ECONNRESET10906362
Ref: 259a10906362
Ref: library/errno errno ENOBUFS10906509
Ref: 1a8d10906509
Ref: library/errno errno EISCONN10906579
Ref: 313710906579
Ref: library/errno errno ENOTCONN10906658
Ref: 313810906658
Ref: library/errno errno ESHUTDOWN10906739
Ref: 259710906739
Ref: library/errno errno ETOOMANYREFS10906892
Ref: 313910906892
Ref: library/errno errno ETIMEDOUT10906963
Ref: 25a110906963
Ref: library/errno errno ECONNREFUSED10907087
Ref: 259910907087
Ref: library/errno errno EHOSTDOWN10907223
Ref: 313a10907223
Ref: library/errno errno EHOSTUNREACH10907269
Ref: 313b10907269
Ref: library/errno errno EHWPOISON10907322
Ref: 20a10907322
Ref: library/errno errno EALREADY10907421
Ref: 259110907421
Ref: library/errno errno EINPROGRESS10907556
Ref: 259310907556
Ref: library/errno errno ESTALE10907690
Ref: 313c10907690
Ref: library/errno errno EUCLEAN10907742
Ref: 313d10907742
Ref: library/errno errno ENOTNAM10907798
Ref: 313e10907798
Ref: library/errno errno ENAVAIL10907857
Ref: 313f10907857
Ref: library/errno errno EISNAM10907918
Ref: 314010907918
Ref: library/errno errno EREMOTEIO10907978
Ref: 314110907978
Ref: library/errno errno EDQUOT10908030
Ref: 314210908030
Ref: library/errno errno EQFULL10908075
Ref: 314310908075
Ref: library/errno errno ENOMEDIUM10908170
Ref: 314410908170
Ref: library/errno errno EMEDIUMTYPE10908219
Ref: 314510908219
Ref: library/errno errno ENOKEY10908272
Ref: 314610908272
Ref: library/errno errno EKEYEXPIRED10908329
Ref: 314710908329
Ref: library/errno errno EKEYREVOKED10908380
Ref: 314810908380
Ref: library/errno errno EKEYREJECTED10908436
Ref: 314910908436
Ref: library/errno errno ERFKILL10908500
Ref: 314a10908500
Ref: library/errno errno ELOCKUNMAPPED10908569
Ref: 314b10908569
Ref: library/errno errno ENOTACTIVE10908631
Ref: 314c10908631
Ref: library/errno errno EAUTH10908688
Ref: 314d10908688
Ref: library/errno errno EBADARCH10908771
Ref: 314e10908771
Ref: library/errno errno EBADEXEC10908863
Ref: 314f10908863
Ref: library/errno errno EBADMACHO10908963
Ref: 315010908963
Ref: library/errno errno EDEVERR10909051
Ref: 315110909051
Ref: library/errno errno EFTYPE10909128
Ref: 315210909128
Ref: library/errno errno ENEEDAUTH10909225
Ref: 315310909225
Ref: library/errno errno ENOATTR10909310
Ref: 315410909310
Ref: library/errno errno ENOPOLICY10909394
Ref: 315510909394
Ref: library/errno errno EPROCLIM10909477
Ref: 315610909477
Ref: library/errno errno EPROCUNAVAIL10909561
Ref: 315710909561
Ref: library/errno errno EPROGMISMATCH10909656
Ref: 315810909656
Ref: library/errno errno EPROGUNAVAIL10909748
Ref: 315910909748
Ref: library/errno errno EPWROFF10909838
Ref: 315a10909838
Ref: library/errno errno EBADRPC10909922
Ref: 315b10909922
Ref: library/errno errno ERPCMISMATCH10910004
Ref: 315c10910004
Ref: library/errno errno ESHLIBVERS10910091
Ref: 315d10910091
Ref: library/errno errno ENOTCAPABLE10910190
Ref: 1a6710910190
Ref: library/errno errno ECANCELED10910410
Ref: 174b10910410
Ref: library/errno errno EOWNERDEAD10910495
Ref: 315e10910495
Ref: library/errno errno ENOTRECOVERABLE10910573
Ref: 315f10910573
Node: ctypes — Uma biblioteca de funções externas para Python10910667
Ref: library/ctypes doc10910859
Ref: 316010910859
Ref: library/ctypes ctypes-a-foreign-function-library-for-python10910859
Ref: 316110910859
Ref: library/ctypes module-ctypes10910859
Ref: 2e10910859
Ref: library/ctypes no-color10910859
Ref: 316210910859
Ref: ctypes — Uma biblioteca de funções externas para Python-Footnote-110911443
Node: Tutorial ctypes10911506
Ref: library/ctypes ctypes-ctypes-tutorial10911644
Ref: 316310911644
Ref: library/ctypes ctypes-tutorial10911644
Ref: 316410911644
Node: Carregando bibliotecas de links dinâmicos10913252
Ref: library/ctypes ctypes-loading-dynamic-link-libraries10913393
Ref: 316710913393
Ref: library/ctypes loading-dynamic-link-libraries10913393
Ref: 316810913393
Node: Acessando funções de dlls carregadas10915617
Ref: library/ctypes accessing-functions-from-loaded-dlls10915785
Ref: 316a10915785
Ref: library/ctypes ctypes-accessing-functions-from-loaded-dlls10915785
Ref: 316b10915785
Node: Chamando funções10918067
Ref: library/ctypes calling-functions10918220
Ref: 316c10918220
Ref: library/ctypes ctypes-calling-functions10918220
Ref: 316d10918220
Node: Tipos de dados fundamentais10920886
Ref: library/ctypes ctypes-fundamental-data-types10921033
Ref: 316e10921033
Ref: library/ctypes fundamental-data-types10921033
Ref: 316f10921033
Node: Chamando funções continuação10932312
Ref: library/ctypes calling-functions-continued10932468
Ref: 318410932468
Ref: library/ctypes ctypes-calling-functions-continued10932468
Ref: 318510932468
Node: Chamando funções variadas10933559
Ref: library/ctypes calling-variadic-functions10933737
Ref: 318610933737
Ref: library/ctypes ctypes-calling-variadic-functions10933737
Ref: 318710933737
Node: Calling functions with your own custom data types10934432
Ref: library/ctypes calling-functions-with-your-own-custom-data-types10934636
Ref: 318810934636
Ref: library/ctypes ctypes-calling-functions-with-own-custom-data-types10934636
Ref: 318910934636
Node: Specifying the required argument types function prototypes10935553
Ref: library/ctypes ctypes-specifying-required-argument-types10935746
Ref: 318a10935746
Ref: library/ctypes specifying-the-required-argument-types-function-prototypes10935746
Ref: 318b10935746
Node: Tipos de Retorno10937647
Ref: library/ctypes ctypes-return-types10937849
Ref: 318d10937849
Ref: library/ctypes return-types10937849
Ref: 318e10937849
Node: Passando ponteiros ou passando parâmetros por referência10940980
Ref: library/ctypes ctypes-passing-pointers10941144
Ref: 319210941144
Ref: library/ctypes passing-pointers-or-passing-parameters-by-reference10941144
Ref: 319310941144
Node: Estruturas e uniões10942248
Ref: library/ctypes ctypes-structures-unions10942443
Ref: 319510942443
Ref: library/ctypes structures-and-unions10942443
Ref: 319610942443
Ref: library/ctypes ctypes-structureunion-alignment-byte-order10944562
Ref: 319710944562
Node: Structure/union layout alignment and byte order10944888
Ref: library/ctypes structure-union-layout-alignment-and-byte-order10945060
Ref: 319810945060
Node: Bit fields in structures and unions10946016
Ref: library/ctypes bit-fields-in-structures-and-unions10946174
Ref: 319b10946174
Ref: library/ctypes ctypes-bit-fields-in-structures-unions10946174
Ref: 1e310946174
Node: Arrays10947180
Ref: library/ctypes arrays10947300
Ref: 319c10947300
Ref: library/ctypes ctypes-arrays10947300
Ref: 319d10947300
Node: Ponteiros10948587
Ref: library/ctypes ctypes-pointers10948701
Ref: 319e10948701
Ref: library/ctypes pointers10948701
Ref: 319f10948701
Node: Thread safety without the GIL10951363
Ref: library/ctypes ctypes-thread-safety10951490
Ref: 31a110951490
Ref: library/ctypes thread-safety-without-the-gil10951490
Ref: 31a210951490
Node: Conversão de Tipos10952497
Ref: library/ctypes ctypes-type-conversions10952632
Ref: 31a310952632
Ref: library/ctypes type-conversions10952632
Ref: 31a410952632
Node: Tipos Incompletos10955251
Ref: library/ctypes ctypes-incomplete-types10955376
Ref: 31610955376
Ref: library/ctypes incomplete-types10955376
Ref: 31a610955376
Node: Funções Callbacks10956992
Ref: library/ctypes callback-functions10957133
Ref: 31a710957133
Ref: library/ctypes ctypes-callback-functions10957133
Ref: 31a810957133
Node: Accessing values exported from dlls10961006
Ref: library/ctypes accessing-values-exported-from-dlls10961139
Ref: 31ab10961139
Ref: library/ctypes ctypes-accessing-values-exported-from-dlls10961139
Ref: 31ac10961139
Node: Surprises10963843
Ref: library/ctypes ctypes-surprises10963982
Ref: 31af10963982
Ref: library/ctypes surprises10963982
Ref: 31b010963982
Node: Variable-sized data types10966155
Ref: library/ctypes ctypes-variable-sized-data-types10966250
Ref: 31b110966250
Ref: library/ctypes variable-sized-data-types10966250
Ref: 31b210966250
Node: Referência ctypes10967651
Ref: library/ctypes ctypes-ctypes-reference10967789
Ref: 31b410967789
Ref: library/ctypes ctypes-reference10967789
Ref: 31b510967789
Node: Finding shared libraries10968182
Ref: library/ctypes ctypes-finding-shared-libraries10968301
Ref: 31b610968301
Ref: library/ctypes finding-shared-libraries10968301
Ref: 31b710968301
Node: Listing loaded shared libraries10970870
Ref: library/ctypes ctypes-listing-loaded-shared-libraries10971022
Ref: 31b810971022
Ref: library/ctypes listing-loaded-shared-libraries10971022
Ref: 31b910971022
Node: Loading shared libraries10971911
Ref: library/ctypes ctypes-loading-shared-libraries10972056
Ref: 31ba10972056
Ref: library/ctypes loading-shared-libraries10972056
Ref: 31bb10972056
Ref: library/ctypes ctypes CDLL10972257
Ref: bd210972257
Ref: library/ctypes ctypes OleDLL10973397
Ref: 1a1a10973397
Ref: library/ctypes ctypes WinDLL10974268
Ref: 1a1b10974268
Ref: library/ctypes ctypes PyDLL10974873
Ref: 1a1c10974873
Ref: library/ctypes ctypes PyDLL _handle10978713
Ref: 31c110978713
Ref: library/ctypes ctypes PyDLL _name10978794
Ref: 31c210978794
Ref: library/ctypes ctypes LibraryLoader10979142
Ref: 31c310979142
Ref: library/ctypes ctypes LibraryLoader LoadLibrary10979601
Ref: 316910979601
Ref: Loading shared libraries-Footnote-110981262
Ref: Loading shared libraries-Footnote-210981328
Node: Foreign functions10981374
Ref: library/ctypes ctypes-foreign-functions10981507
Ref: 31c410981507
Ref: library/ctypes foreign-functions10981507
Ref: 31c510981507
Ref: library/ctypes ctypes _CFuncPtr10982203
Ref: 182e10982203
Ref: library/ctypes ctypes _CFuncPtr restype10982506
Ref: 318f10982506
Ref: library/ctypes ctypes _CFuncPtr argtypes10983182
Ref: 174a10983182
Ref: library/ctypes ctypes _CFuncPtr errcheck10984444
Ref: 319110984444
Node: Function prototypes10985971
Ref: library/ctypes ctypes-function-prototypes10986102
Ref: 31c610986102
Ref: library/ctypes function-prototypes10986102
Ref: 31c710986102
Ref: library/ctypes ctypes CFUNCTYPE10986684
Ref: 31a910986684
Ref: library/ctypes ctypes WINFUNCTYPE10987195
Ref: 31aa10987195
Ref: library/ctypes ctypes PYFUNCTYPE10987579
Ref: 31c810987579
Node: Funções utilitárias10993263
Ref: library/ctypes ctypes-utility-functions10993387
Ref: 31c910993387
Ref: library/ctypes utility-functions10993387
Ref: 31ca10993387
Ref: library/ctypes ctypes addressof10993451
Ref: 31cb10993451
Ref: library/ctypes ctypes alignment10993703
Ref: 31cc10993703
Ref: library/ctypes ctypes byref10993863
Ref: 319410993863
Ref: library/ctypes ctypes CopyComPointer10994377
Ref: 1e910994377
Ref: library/ctypes ctypes cast10994980
Ref: 31a510994980
Ref: library/ctypes ctypes create_string_buffer10995274
Ref: 318310995274
Ref: library/ctypes ctypes create_unicode_buffer10996778
Ref: 1c6b10996778
Ref: library/ctypes ctypes DllCanUnloadNow10997318
Ref: 31cd10997318
Ref: library/ctypes ctypes DllGetClassObject10997593
Ref: 31ce10997593
Ref: library/ctypes ctypes util find_library10997878
Ref: f3910997878
Ref: library/ctypes ctypes util find_msvcrt10998270
Ref: 31cf10998270
Ref: library/ctypes ctypes util dllist10998757
Ref: 1ef10998757
Ref: library/ctypes ctypes FormatError10999339
Ref: 31d010999339
Ref: library/ctypes ctypes GetLastError10999622
Ref: 319010999622
Ref: library/ctypes ctypes get_errno10999920
Ref: 31bd10999920
Ref: library/ctypes ctypes get_last_error11000176
Ref: 31bf11000176
Ref: library/ctypes ctypes memmove11000485
Ref: 31d111000485
Ref: library/ctypes ctypes memset11000729
Ref: 31d211000729
Ref: library/ctypes ctypes POINTER11000982
Ref: 1f011000982
Ref: library/ctypes ctypes pointer11001663
Ref: 199411001663
Ref: library/ctypes ctypes resize11001972
Ref: 31b311001972
Ref: library/ctypes ctypes set_errno11002310
Ref: 31be11002310
Ref: library/ctypes ctypes set_last_error11002626
Ref: 31c011002626
Ref: library/ctypes ctypes sizeof11002996
Ref: 31d311002996
Ref: library/ctypes ctypes string_at11003167
Ref: 1eb11003167
Ref: library/ctypes ctypes WinError11003488
Ref: 31d411003488
Ref: library/ctypes ctypes wstring_at11003999
Ref: 31d511003999
Ref: library/ctypes ctypes memoryview_at11004366
Ref: 1ea11004366
Node: Data types11005340
Ref: library/ctypes ctypes-data-types11005475
Ref: 31d711005475
Ref: library/ctypes data-types11005475
Ref: 31d811005475
Ref: library/ctypes ctypes _CData11005518
Ref: 31d911005518
Ref: library/ctypes ctypes _CData from_buffer11006154
Ref: 31db11006154
Ref: library/ctypes ctypes _CData from_buffer_copy11006761
Ref: 31dc11006761
Ref: library/ctypes ctypes _CData from_address11007326
Ref: 31d611007326
Ref: library/ctypes ctypes _CData from_param11007686
Ref: 318c11007686
Ref: library/ctypes ctypes _CData in_dll11008248
Ref: 31ad11008248
Ref: library/ctypes ctypes _CData __pointer_type__11008542
Ref: 1f111008542
Ref: library/ctypes ctypes _CData _b_base_11008872
Ref: 31dd11008872
Ref: library/ctypes ctypes _CData _b_needsfree_11009176
Ref: 31de11009176
Ref: library/ctypes ctypes _CData _objects11009349
Ref: 31da11009349
Node: Tipos de dados fundamentais<2>11009660
Ref: library/ctypes ctypes-fundamental-data-types-211009794
Ref: 31df11009794
Ref: library/ctypes id111009794
Ref: 31e011009794
Ref: library/ctypes ctypes _SimpleCData11009871
Ref: 31e111009871
Ref: library/ctypes ctypes _SimpleCData value11010345
Ref: 31e211010345
Ref: library/ctypes ctypes c_byte11011706
Ref: 1a1811011706
Ref: library/ctypes ctypes c_char11011919
Ref: 317111011919
Ref: library/ctypes ctypes c_char_p11012160
Ref: 199511012160
Ref: library/ctypes ctypes c_double11012455
Ref: 1b9d11012455
Ref: library/ctypes ctypes c_longdouble11012585
Ref: 1b9e11012585
Ref: library/ctypes ctypes c_float11012833
Ref: 318211012833
Ref: library/ctypes ctypes c_double_complex11012961
Ref: 1ed11012961
Ref: library/ctypes ctypes c_float_complex11013169
Ref: 1ec11013169
Ref: library/ctypes ctypes c_longdouble_complex11013375
Ref: 1ee11013375
Ref: library/ctypes ctypes c_int11013592
Ref: 316511013592
Ref: library/ctypes ctypes c_int811013857
Ref: 317511013857
Ref: library/ctypes ctypes c_int1611013979
Ref: 317611013979
Ref: library/ctypes ctypes c_int3211014106
Ref: 317711014106
Ref: library/ctypes ctypes c_int6411014231
Ref: 317811014231
Ref: library/ctypes ctypes c_long11014361
Ref: 316611014361
Ref: library/ctypes ctypes c_longlong11014526
Ref: 317f11014526
Ref: library/ctypes ctypes c_short11014705
Ref: 317311014705
Ref: library/ctypes ctypes c_size_t11014872
Ref: 318111014872
Ref: library/ctypes ctypes c_ssize_t11014947
Ref: 143811014947
Ref: library/ctypes ctypes c_time_t11015057
Ref: 1a7f11015057
Ref: library/ctypes ctypes c_ubyte11015166
Ref: 1a1911015166
Ref: library/ctypes ctypes c_uint11015381
Ref: 317911015381
Ref: library/ctypes ctypes c_uint811015651
Ref: 317a11015651
Ref: library/ctypes ctypes c_uint1611015777
Ref: 317b11015777
Ref: library/ctypes ctypes c_uint3211015908
Ref: 317c11015908
Ref: library/ctypes ctypes c_uint6411016037
Ref: 317d11016037
Ref: library/ctypes ctypes c_ulong11016171
Ref: 317e11016171
Ref: library/ctypes ctypes c_ulonglong11016339
Ref: 318011016339
Ref: library/ctypes ctypes c_ushort11016521
Ref: 317411016521
Ref: library/ctypes ctypes c_void_p11016691
Ref: 199711016691
Ref: library/ctypes ctypes c_wchar11016855
Ref: 317211016855
Ref: library/ctypes ctypes c_wchar_p11017121
Ref: 199611017121
Ref: library/ctypes ctypes c_bool11017329
Ref: 317011017329
Ref: library/ctypes ctypes HRESULT11017544
Ref: 31bc11017544
Ref: library/ctypes ctypes py_object11017736
Ref: 1f211017736
Node: Structured data types11018213
Ref: library/ctypes ctypes-structured-data-types11018356
Ref: 31e311018356
Ref: library/ctypes structured-data-types11018356
Ref: 31e411018356
Ref: library/ctypes ctypes Union11018421
Ref: 1e511018421
Ref: library/ctypes ctypes BigEndianUnion11018645
Ref: 1aca11018645
Ref: library/ctypes ctypes LittleEndianUnion11018793
Ref: 1acb11018793
Ref: library/ctypes ctypes BigEndianStructure11018947
Ref: 319911018947
Ref: library/ctypes ctypes LittleEndianStructure11019069
Ref: 319a11019069
Ref: library/ctypes ctypes Structure11019339
Ref: 1e411019339
Ref: library/ctypes ctypes Structure _fields_11019764
Ref: 188811019764
Ref: library/ctypes ctypes Structure _pack_11021628
Ref: 31511021628
Ref: library/ctypes ctypes Structure _align_11022728
Ref: 4e211022728
Ref: library/ctypes ctypes Structure _layout_11023572
Ref: 1e611023572
Ref: library/ctypes ctypes Structure _anonymous_11024861
Ref: 31e511024861
Ref: library/ctypes ctypes CField11027216
Ref: 1e711027216
Ref: library/ctypes ctypes CField name11028383
Ref: 31e611028383
Ref: library/ctypes ctypes CField type11028451
Ref: 31e711028451
Ref: library/ctypes ctypes CField offset11028537
Ref: 31e811028537
Ref: library/ctypes ctypes CField byte_offset11028563
Ref: 31e911028563
Ref: library/ctypes ctypes CField byte_size11028767
Ref: 31eb11028767
Ref: library/ctypes ctypes CField size11028993
Ref: 31ec11028993
Ref: library/ctypes ctypes CField is_bitfield11029306
Ref: 31ee11029306
Ref: library/ctypes ctypes CField bit_offset11029377
Ref: 31ea11029377
Ref: library/ctypes ctypes CField bit_size11029407
Ref: 31ed11029407
Ref: library/ctypes ctypes CField is_anonymous11029922
Ref: 31ef11029922
Node: Arrays and pointers11030118
Ref: library/ctypes arrays-and-pointers11030245
Ref: 31f011030245
Ref: library/ctypes ctypes-arrays-pointers11030245
Ref: 31f111030245
Ref: library/ctypes ctypes Array11030306
Ref: 1cc211030306
Ref: library/ctypes ctypes Array _length_11030821
Ref: 31f211030821
Ref: library/ctypes ctypes Array _type_11031049
Ref: 31f311031049
Ref: library/ctypes ctypes ARRAY11031246
Ref: 59711031246
Ref: library/ctypes ctypes _Pointer11031542
Ref: 31f411031542
Ref: library/ctypes ctypes _Pointer _type_11032200
Ref: 17b911032200
Ref: library/ctypes ctypes _Pointer contents11032269
Ref: 31a011032269
Node: Exceções<10>11032458
Ref: library/ctypes ctypes-exceptions11032555
Ref: 31f511032555
Ref: library/ctypes exceptions11032555
Ref: 31f611032555
Ref: library/ctypes ctypes ArgumentError11032596
Ref: 31f711032596
Ref: library/ctypes ctypes COMError11032742
Ref: 1e811032742
Ref: library/ctypes ctypes COMError hresult11032861
Ref: 31f811032861
Ref: library/ctypes ctypes COMError text11032947
Ref: 31f911032947
Ref: library/ctypes ctypes COMError details11033002
Ref: 31fa11033002
Node: Bibliotecas de interface de linha de comando11033532
Ref: library/cmdlinelibs doc11033726
Ref: 31fb11033726
Ref: library/cmdlinelibs cmdlinelibs11033726
Ref: 31fc11033726
Ref: library/cmdlinelibs command-line-interface-libraries11033726
Ref: 31fd11033726
Ref: library/cmdlinelibs no-color11033726
Ref: 31fe11033726
Node: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos11034971
Ref: library/argparse doc11035222
Ref: 31ff11035222
Ref: library/argparse argparse-parser-for-command-line-options-arguments-and-subcommands11035222
Ref: 320011035222
Ref: library/argparse module-argparse11035222
Ref: 711035222
Ref: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos-Footnote-111038639
Node: Objetos ArgumentParser11038707
Ref: library/argparse argumentparser-objects11038890
Ref: 320511038890
Ref: library/argparse argparse ArgumentParser11038955
Ref: 1bd11038955
Node: prog11042411
Ref: library/argparse id111042488
Ref: 321311042488
Ref: library/argparse prog11042488
Ref: 1bc11042488
Node: usage11044299
Ref: library/argparse usage11044396
Ref: 320611044396
Node: description11045506
Ref: library/argparse description11045605
Ref: 320711045605
Ref: library/argparse id211045605
Ref: 321411045605
Node: epilog11046172
Ref: library/argparse epilog11046273
Ref: 320811046273
Node: parents11047112
Ref: library/argparse parents11047217
Ref: 320911047217
Node: formatter_class11048769
Ref: library/argparse formatter-class11048880
Ref: 320a11048880
Ref: library/argparse id311048880
Ref: 321511048880
Ref: library/argparse argparse RawDescriptionHelpFormatter11049141
Ref: 321611049141
Ref: library/argparse argparse RawTextHelpFormatter11049190
Ref: 321711049190
Ref: library/argparse argparse ArgumentDefaultsHelpFormatter11049232
Ref: 1b3f11049232
Ref: library/argparse argparse MetavarTypeHelpFormatter11049283
Ref: 321811049283
Node: prefix_chars11052928
Ref: library/argparse prefix-chars11053053
Ref: 320b11053053
Node: fromfile_prefix_chars11053882
Ref: library/argparse fromfile-prefix-chars11054008
Ref: 320c11054008
Node: argument_default11056197
Ref: library/argparse argument-default11056323
Ref: 320d11056323
Node: allow_abbrev11057247
Ref: library/argparse allow-abbrev11057368
Ref: fb311057368
Ref: library/argparse id411057368
Ref: 321d11057368
Node: conflict_handler11058058
Ref: library/argparse conflict-handler11058171
Ref: 320e11058171
Node: add_help11059828
Ref: library/argparse add-help11059942
Ref: 320f11059942
Node: exit_on_error11061159
Ref: library/argparse exit-on-error11061273
Ref: 321011061273
Node: suggest_on_error11062217
Ref: library/argparse suggest-on-error11062326
Ref: 321111062326
Node: cor11063954
Ref: library/argparse color11064041
Ref: 321211064041
Ref: cor-Footnote-111064802
Node: O método add_argument11064857
Ref: library/argparse the-add-argument-method11065069
Ref: 321e11065069
Ref: library/argparse argparse ArgumentParser add_argument11065139
Ref: 4b611065139
Node: name ou flags11067194
Ref: library/argparse id511067281
Ref: 321f11067281
Ref: library/argparse name-or-flags11067281
Ref: 322411067281
Node: action11069324
Ref: library/argparse action11069425
Ref: 187d11069425
Ref: library/argparse id611069425
Ref: 322511069425
Node: nargs11076101
Ref: library/argparse id711076194
Ref: 322711076194
Ref: library/argparse nargs11076194
Ref: 188311076194
Node: const11080238
Ref: library/argparse const11080332
Ref: 188511080332
Ref: library/argparse id811080332
Ref: 322911080332
Node: default11081640
Ref: library/argparse default11081733
Ref: 188411081733
Ref: library/argparse id911081733
Ref: 322a11081733
Node: type11084340
Ref: library/argparse argparse-type11084435
Ref: 322b11084435
Ref: library/argparse type11084435
Ref: 321911084435
Node: choices11087534
Ref: library/argparse choices11087630
Ref: 187f11087630
Ref: library/argparse id1011087630
Ref: 322d11087630
Node: required11089568
Ref: library/argparse id1111089664
Ref: 322e11089664
Ref: library/argparse required11089664
Ref: 322011089664
Node: help11090690
Ref: library/argparse help11090786
Ref: 322111090786
Ref: library/argparse id1211090786
Ref: 322f11090786
Node: metavar11092393
Ref: library/argparse id1311092485
Ref: 323011092485
Ref: library/argparse metavar11092485
Ref: 322211092485
Node: dest11094757
Ref: library/argparse dest11094855
Ref: 321a11094855
Ref: library/argparse id1411094855
Ref: 323111094855
Node: deprecated11096547
Ref: library/argparse deprecated11096655
Ref: 322311096655
Ref: library/argparse id1511096655
Ref: 323211096655
Node: Classes de ação11097615
Ref: library/argparse action-classes11097710
Ref: 323311097710
Ref: library/argparse argparse Action11098015
Ref: 1aa311098015
Ref: library/argparse argparse Action __call__11098964
Ref: 323411098964
Ref: library/argparse argparse Action format_usage11100317
Ref: 323511100317
Ref: library/argparse argparse BooleanOptionalAction11100641
Ref: 1afa11100641
Node: O método parse_args11101257
Ref: library/argparse the-parse-args-method11101466
Ref: 323611101466
Ref: library/argparse argparse ArgumentParser parse_args11101532
Ref: 320311101532
Node: Sintaxe de valores da opção11102489
Ref: library/argparse option-value-syntax11102605
Ref: 323911102605
Node: Argumentos inválidos11104059
Ref: library/argparse invalid-arguments11104205
Ref: 323a11104205
Node: Argumentos contendo -11105211
Ref: library/argparse arguments-containing11105382
Ref: 323b11105382
Node: Abreviações de argumento correspondência de prefixo11107606
Ref: library/argparse argument-abbreviations-prefix-matching11107773
Ref: 323c11107773
Ref: library/argparse prefix-matching11107773
Ref: fb211107773
Node: Além do sys argv11108757
Ref: library/argparse args11108921
Ref: 323711108921
Ref: library/argparse beyond-sys-argv11108921
Ref: 323d11108921
Node: O objeto Namespace11109898
Ref: library/argparse namespace11109999
Ref: 323811109999
Ref: library/argparse the-namespace-object11109999
Ref: 323e11109999
Ref: library/argparse argparse Namespace11110058
Ref: 320411110058
Node: Outros utilitários11111218
Ref: library/argparse other-utilities11111419
Ref: 323f11111419
Node: Subcomandos11111789
Ref: library/argparse sub-commands11111881
Ref: 324011111881
Ref: library/argparse argparse ArgumentParser add_subparsers11111926
Ref: e0511111926
Node: Objetos FileType11121935
Ref: library/argparse filetype-objects11122056
Ref: 324111122056
Ref: library/argparse argparse FileType11122111
Ref: 30a11122111
Node: Grupos de argumentos11124077
Ref: library/argparse argument-groups11124203
Ref: 324211124203
Ref: library/argparse argparse ArgumentParser add_argument_group11124266
Ref: 2e911124266
Node: Exclusão mútua11127335
Ref: library/argparse mutual-exclusion11127478
Ref: 324311127478
Ref: library/argparse argparse ArgumentParser add_mutually_exclusive_group11127531
Ref: 2eb11127531
Node: Padrões do analisador sintático11130342
Ref: library/argparse parser-defaults11130483
Ref: 324411130483
Ref: library/argparse argparse ArgumentParser set_defaults11130570
Ref: 321c11130570
Ref: library/argparse argparse ArgumentParser get_default11131783
Ref: 324511131783
Node: Imprimindo a ajuda11132163
Ref: library/argparse printing-help11132304
Ref: 324611132304
Ref: library/argparse argparse ArgumentParser print_usage11132575
Ref: 324711132575
Ref: library/argparse argparse ArgumentParser print_help11132817
Ref: 324811132817
Ref: library/argparse argparse ArgumentParser format_usage11133195
Ref: 1c6711133195
Ref: library/argparse argparse ArgumentParser format_help11133377
Ref: 324911133377
Node: Análise parcial11133597
Ref: library/argparse partial-parsing11133742
Ref: 324a11133742
Ref: library/argparse argparse ArgumentParser parse_known_args11133796
Ref: 324b11133796
Node: Personalizando a análise de arquivos11135069
Ref: library/argparse customizing-file-parsing11135214
Ref: 324c11135214
Ref: library/argparse argparse ArgumentParser convert_arg_line_to_args11135310
Ref: 321b11135310
Node: Métodos de saída11136267
Ref: library/argparse exiting-methods11136414
Ref: 324d11136414
Ref: library/argparse argparse ArgumentParser exit11136471
Ref: 324e11136471
Ref: library/argparse argparse ArgumentParser error11137056
Ref: 324f11137056
Node: Análise misturada11137257
Ref: library/argparse intermixed-parsing11137409
Ref: 325011137409
Ref: library/argparse argparse ArgumentParser parse_intermixed_args11137467
Ref: ceb11137467
Ref: library/argparse argparse ArgumentParser parse_known_intermixed_args11137556
Ref: 325111137556
Node: Registrando ações e tipos personalizados11139291
Ref: library/argparse registering-custom-types-or-actions11139416
Ref: 325211139416
Ref: library/argparse argparse ArgumentParser register11139521
Ref: 322611139521
Node: Exceções<11>11141044
Ref: library/argparse exceptions11141216
Ref: 325311141216
Ref: library/argparse argparse ArgumentError11141257
Ref: 325411141257
Ref: library/argparse argparse ArgumentTypeError11141490
Ref: 322c11141490
Node: Tutorial de Argparse11141749
Ref: howto/argparse doc11141868
Ref: 325511141868
Ref: howto/argparse argparse-tutorial11141868
Ref: 320211141868
Ref: howto/argparse id111141868
Ref: 325611141868
Node: Conceitos11143265
Ref: howto/argparse concepts11143349
Ref: 325711143349
Node: O básico11145536
Ref: howto/argparse the-basics11145667
Ref: 325811145667
Node: Apresentando os argumentos posicionais11146900
Ref: howto/argparse introducing-positional-arguments11147058
Ref: 325911147058
Node: Apresentando os argumentos opcionais11150466
Ref: howto/argparse introducing-optional-arguments11150660
Ref: 325a11150660
Node: Opções curtas11153756
Ref: howto/argparse short-options11153844
Ref: 325b11153844
Node: Combinando argumentos posicionais e opcionais11154639
Ref: howto/argparse combining-positional-and-optional-arguments11154819
Ref: 325c11154819
Node: Avançando um pouco mais11163108
Ref: howto/argparse getting-a-little-more-advanced11163286
Ref: 325d11163286
Node: Especificando argumentos ambíguos11165268
Ref: howto/argparse id211165393
Ref: 325e11165393
Ref: howto/argparse specifying-ambiguous-arguments11165393
Ref: 322811165393
Node: Opções conflitantes11166355
Ref: howto/argparse conflicting-options11166480
Ref: 325f11166480
Node: Como traduzir a saída do argparse11169629
Ref: howto/argparse how-to-translate-the-argparse-output11169796
Ref: 326011169796
Ref: Como traduzir a saída do argparse-Footnote-111171591
Node: Conversores de tipo personalizados11171624
Ref: howto/argparse custom-type-converters11171777
Ref: 326211171777
Node: Conclusão11173687
Ref: howto/argparse conclusion11173797
Ref: 326311173797
Ref: howto/argparse-optparse upgrading-optparse-code11174081
Ref: 13aa11174081
Node: Migrando código optparse para argparse11174081
Ref: howto/argparse-optparse doc11174200
Ref: 326411174200
Ref: howto/argparse-optparse migrating-optparse-code11174200
Ref: 326511174200
Ref: howto/argparse-optparse migrating-optparse-code-to-argparse11174200
Ref: 326611174200
Ref: howto/argparse-optparse no-color11174200
Ref: 326711174200
Node: optparse — Analisador sintático para opções de linha de comando11177473
Ref: library/optparse doc11177771
Ref: 326d11177771
Ref: library/optparse module-optparse11177771
Ref: a411177771
Ref: library/optparse no-color11177771
Ref: 326e11177771
Ref: library/optparse optparse-parser-for-command-line-options11177771
Ref: 326f11177771
Ref: optparse — Analisador sintático para opções de linha de comando-Footnote-111178325
Node: Escolhendo uma biblioteca de análise de linha de comando11178393
Ref: library/optparse choosing-an-argument-parser11178579
Ref: 320111178579
Ref: library/optparse choosing-an-argument-parsing-library11178579
Ref: 327011178579
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-111184729
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-211184769
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-311184809
Node: Introdução<7>11184857
Ref: library/optparse introduction11185060
Ref: 327111185060
Node: Contexto11187584
Ref: library/optparse background11187741
Ref: 327211187741
Ref: library/optparse optparse-background11187741
Ref: 327311187741
Node: Terminologia11188391
Ref: library/optparse optparse-terminology11188485
Ref: 327411188485
Ref: library/optparse terminology11188485
Ref: 327511188485
Node: Para que servem as opções?11192643
Ref: library/optparse optparse-what-options-for11192788
Ref: 327611192788
Ref: library/optparse what-are-options-for11192788
Ref: 327711192788
Node: Para que servem os argumentos posicionais?11194618
Ref: library/optparse optparse-what-positional-arguments-for11194742
Ref: 327811194742
Ref: library/optparse what-are-positional-arguments-for11194742
Ref: 327911194742
Node: Tutorial<2>11196235
Ref: library/optparse optparse-tutorial11196396
Ref: 327a11196396
Ref: library/optparse tutorial11196396
Ref: 327b11196396
Node: Compreendendo as ações de opções11199250
Ref: library/optparse optparse-understanding-option-actions11199357
Ref: 328011199357
Ref: library/optparse understanding-option-actions11199357
Ref: 328111199357
Node: A ação store11200019
Ref: library/optparse optparse-store-action11200179
Ref: 328311200179
Ref: library/optparse the-store-action11200179
Ref: 328411200179
Node: Manipulando opções sinalizadores booleanas11202460
Ref: library/optparse handling-boolean-flag-options11202598
Ref: 328511202598
Ref: library/optparse optparse-handling-boolean-options11202598
Ref: 328611202598
Node: Outras ações11203576
Ref: library/optparse optparse-other-actions11203715
Ref: 328711203715
Ref: library/optparse other-actions11203715
Ref: 328811203715
Node: Valores padrão11204227
Ref: library/optparse default-values11204344
Ref: 328c11204344
Ref: library/optparse optparse-default-values11204344
Ref: 328d11204344
Node: Gerando texto de ajuda11206348
Ref: library/optparse generating-help11206481
Ref: 328e11206481
Ref: library/optparse optparse-generating-help11206481
Ref: 328f11206481
Node: Agrupando opções11210852
Ref: library/optparse grouping-options11210929
Ref: 329011210929
Ref: library/optparse optparse OptionGroup11211276
Ref: 329111211276
Ref: library/optparse optparse OptionParser get_option_group11214826
Ref: 329211214826
Node: Exibindo uma string de versão11215117
Ref: library/optparse optparse-printing-version-string11215260
Ref: 329311215260
Ref: library/optparse printing-a-version-string11215260
Ref: 329411215260
Ref: library/optparse optparse OptionParser print_version11216195
Ref: 329511216195
Ref: library/optparse optparse OptionParser get_version11216584
Ref: 329711216584
Node: Como optparse trata erros11216730
Ref: library/optparse how-optparse-handles-errors11216864
Ref: 329811216864
Ref: library/optparse optparse-how-optparse-handles-errors11216864
Ref: 329911216864
Node: Juntando tudo11219141
Ref: library/optparse optparse-putting-it-all-together11219236
Ref: 329a11219236
Ref: library/optparse putting-it-all-together11219236
Ref: 329b11219236
Node: Guia de referência11220143
Ref: library/optparse optparse-reference-guide11220327
Ref: 328a11220327
Ref: library/optparse reference-guide11220327
Ref: 329c11220327
Node: Criando o analisador sintático11220746
Ref: library/optparse creating-the-parser11220877
Ref: 329d11220877
Ref: library/optparse optparse-creating-parser11220877
Ref: 329e11220877
Ref: library/optparse optparse OptionParser11221052
Ref: 16bb11221052
Node: Preenchendo o analisador sintático11224379
Ref: library/optparse optparse-populating-parser11224540
Ref: 32a011224540
Ref: library/optparse populating-the-parser11224540
Ref: 32a111224540
Node: Definindo as opções11225935
Ref: library/optparse defining-options11226091
Ref: 32a211226091
Ref: library/optparse optparse-defining-options11226091
Ref: 32a311226091
Ref: library/optparse optparse OptionParser add_option11226573
Ref: 326811226573
Ref: library/optparse optparse Values11228830
Ref: 326a11228830
Node: Atributos da classe Option11230161
Ref: library/optparse option-attributes11230308
Ref: 32a711230308
Ref: library/optparse optparse-option-attributes11230308
Ref: 32a811230308
Ref: library/optparse optparse Option11230383
Ref: 32a411230383
Ref: library/optparse optparse Option action11231077
Ref: 327c11231077
Ref: library/optparse optparse Option type11231315
Ref: 327d11231315
Ref: library/optparse optparse Option dest11231554
Ref: 327e11231554
Ref: library/optparse optparse Option default11231912
Ref: 32aa11231912
Ref: library/optparse optparse Option nargs11232109
Ref: 32ac11232109
Ref: library/optparse optparse Option const11232352
Ref: 328911232352
Ref: library/optparse optparse Option choices11232474
Ref: 32ad11232474
Ref: library/optparse optparse Option callback11232602
Ref: 32ae11232602
Ref: library/optparse optparse Option callback_args11232874
Ref: 32af11232874
Ref: library/optparse optparse Option callback_kwargs11232909
Ref: 32b011232909
Ref: library/optparse optparse Option help11233093
Ref: 327f11233093
Ref: library/optparse optparse Option metavar11233473
Ref: 32b111233473
Node: Ações de opção padrão11233712
Ref: library/optparse optparse-standard-option-actions11233862
Ref: 32a511233862
Ref: library/optparse standard-option-actions11233862
Ref: 32b211233862
Node: Tipos de opção padrão11242384
Ref: library/optparse optparse-standard-option-types11242530
Ref: 32a911242530
Ref: library/optparse standard-option-types11242530
Ref: 32b311242530
Node: Análise de argumentos11244206
Ref: library/optparse optparse-parsing-arguments11244389
Ref: 32a611244389
Ref: library/optparse parsing-arguments11244389
Ref: 32b411244389
Ref: library/optparse optparse OptionParser parse_args11244567
Ref: 16bc11244567
Node: Consultando e manipulando seu analisador sintático de opções11246092
Ref: library/optparse optparse-querying-manipulating-option-parser11246275
Ref: 32b511246275
Ref: library/optparse querying-and-manipulating-your-option-parser11246275
Ref: 32b611246275
Ref: library/optparse optparse OptionParser disable_interspersed_args11246674
Ref: 326911246674
Ref: library/optparse optparse OptionParser enable_interspersed_args11247527
Ref: 32b711247527
Ref: library/optparse optparse OptionParser get_option11247754
Ref: 32b811247754
Ref: library/optparse optparse OptionParser has_option11247942
Ref: 32b911247942
Ref: library/optparse optparse OptionParser remove_option11248139
Ref: 32ba11248139
Node: Conflitos entre opções11248568
Ref: library/optparse conflicts-between-options11248736
Ref: 32bb11248736
Ref: library/optparse optparse-conflicts-between-options11248736
Ref: 329f11248736
Node: Limpeza11251359
Ref: library/optparse cleanup11251479
Ref: 32bd11251479
Ref: library/optparse optparse-cleanup11251479
Ref: 32be11251479
Node: Outros métodos11251939
Ref: library/optparse optparse-other-methods11252026
Ref: 32bf11252026
Ref: library/optparse other-methods11252026
Ref: 32c011252026
Ref: library/optparse optparse OptionParser set_usage11252134
Ref: 32c111252134
Ref: library/optparse optparse OptionParser print_usage11252435
Ref: 329611252435
Ref: library/optparse optparse OptionParser get_usage11252776
Ref: 32c211252776
Ref: library/optparse optparse OptionParser set_defaults11252914
Ref: 32ab11252914
Node: Funções de retorno de opção11254122
Ref: library/optparse option-callbacks11254314
Ref: 32c311254314
Ref: library/optparse optparse-option-callbacks11254314
Ref: 328b11254314
Node: Definindo uma opção de retorno de chamada11255964
Ref: library/optparse defining-a-callback-option11256125
Ref: 32c411256125
Ref: library/optparse optparse-defining-callback-option11256125
Ref: 32c511256125
Node: Como os retornos de chamada são chamados11258674
Ref: library/optparse how-callbacks-are-called11258887
Ref: 32c611258887
Ref: library/optparse optparse-how-callbacks-called11258887
Ref: 32c711258887
Node: Levantando erros em uma função de retorno11261773
Ref: library/optparse optparse-raising-errors-in-callback11262002
Ref: 32c811262002
Ref: library/optparse raising-errors-in-a-callback11262002
Ref: 32c911262002
Node: Exemplo de função de retorno 1 retorno de chamada trivial11262527
Ref: library/optparse callback-example-1-trivial-callback11262778
Ref: 32ca11262778
Ref: library/optparse optparse-callback-example-111262778
Ref: 32cb11262778
Node: Exemplo de função de retorno 2 verificar a ordem das opções11263293
Ref: library/optparse callback-example-2-check-option-order11263577
Ref: 32cc11263577
Ref: library/optparse optparse-callback-example-211263577
Ref: 32cd11263577
Node: Exemplo 3 de função de retorno verificar a ordem das opções generalizada11264194
Ref: library/optparse callback-example-3-check-option-order-generalized11264488
Ref: 32ce11264488
Ref: library/optparse optparse-callback-example-311264488
Ref: 32cf11264488
Node: Exemplo de função de retorno 4 verificar uma condição arbitrária11265368
Ref: library/optparse callback-example-4-check-arbitrary-condition11265648
Ref: 32d011265648
Ref: library/optparse optparse-callback-example-411265648
Ref: 32d111265648
Node: Exemplo de função de retorno 5 argumentos fixos11266516
Ref: library/optparse callback-example-5-fixed-arguments11266774
Ref: 32d211266774
Ref: library/optparse optparse-callback-example-511266774
Ref: 32d311266774
Node: Exemplo de função de retorno 6 argumentos variáveis11267984
Ref: library/optparse callback-example-6-variable-arguments11268164
Ref: 32d411268164
Ref: library/optparse optparse-callback-example-611268164
Ref: 32d511268164
Node: Estendendo optparse11270515
Ref: library/optparse extending-optparse11270702
Ref: 32d611270702
Ref: library/optparse optparse-extending-optparse11270702
Ref: 328211270702
Node: Adicionando novos tipos11271080
Ref: library/optparse adding-new-types11271193
Ref: 32d711271193
Ref: library/optparse optparse-adding-new-types11271193
Ref: 32d811271193
Ref: library/optparse optparse Option TYPES11271515
Ref: 32d911271515
Ref: library/optparse optparse Option TYPE_CHECKER11271681
Ref: 32da11271681
Node: Adicionando novas ações11274898
Ref: library/optparse adding-new-actions11275011
Ref: 32db11275011
Ref: library/optparse optparse-adding-new-actions11275011
Ref: 32dc11275011
Ref: library/optparse optparse Option ACTIONS11276161
Ref: 32dd11276161
Ref: library/optparse optparse Option STORE_ACTIONS11276245
Ref: 32de11276245
Ref: library/optparse optparse Option TYPED_ACTIONS11276338
Ref: 32df11276338
Ref: library/optparse optparse Option ALWAYS_TYPED_ACTIONS11276431
Ref: 32e011276431
Node: Exceções<12>11279815
Ref: library/optparse exceptions11279962
Ref: 32e111279962
Ref: library/optparse optparse OptionError11280003
Ref: 326b11280003
Ref: library/optparse optparse OptionConflictError11280158
Ref: 32bc11280158
Ref: library/optparse optparse OptionValueError11280312
Ref: 326c11280312
Ref: library/optparse optparse BadOptionError11280444
Ref: 32e211280444
Ref: library/optparse optparse AmbiguousOptionError11280558
Ref: 32e311280558
Node: getpass — Entrada de senha portátil11280677
Ref: library/getpass doc11280946
Ref: 32e411280946
Ref: library/getpass getpass-portable-password-input11280946
Ref: 32e511280946
Ref: library/getpass module-getpass11280946
Ref: 6611280946
Ref: library/getpass no-color11280946
Ref: 32e611280946
Ref: library/getpass getpass getpass11281381
Ref: 21c11281381
Ref: library/getpass getpass GetPassWarning11283171
Ref: 32e711283171
Ref: library/getpass getpass getuser11283332
Ref: 64e11283332
Ref: getpass — Entrada de senha portátil-Footnote-111284105
Ref: getpass — Entrada de senha portátil-Footnote-211284172
Node: fileinput — Itera sobre linhas de múltiplos fluxos de entrada11284252
Ref: library/fileinput doc11284533
Ref: 32e811284533
Ref: library/fileinput fileinput-iterate-over-lines-from-multiple-input-streams11284533
Ref: 32e911284533
Ref: library/fileinput module-fileinput11284533
Ref: 5f11284533
Ref: library/fileinput no-color11284533
Ref: 32ea11284533
Ref: library/fileinput fileinput input11287131
Ref: 9f611287131
Ref: library/fileinput fileinput filename11288426
Ref: 32eb11288426
Ref: library/fileinput fileinput fileno11288588
Ref: 161f11288588
Ref: library/fileinput fileinput lineno11288812
Ref: 32ec11288812
Ref: library/fileinput fileinput filelineno11289071
Ref: 32ed11289071
Ref: library/fileinput fileinput isfirstline11289328
Ref: 32ee11289328
Ref: library/fileinput fileinput isstdin11289501
Ref: 32ef11289501
Ref: library/fileinput fileinput nextfile11289652
Ref: 32f011289652
Ref: library/fileinput fileinput close11290226
Ref: 32f111290226
Ref: library/fileinput fileinput FileInput11290407
Ref: 93511290407
Ref: library/fileinput fileinput hook_compressed11293306
Ref: 9f711293306
Ref: library/fileinput fileinput hook_encoded11294163
Ref: e9211294163
Ref: fileinput — Itera sobre linhas de múltiplos fluxos de entrada-Footnote-111294790
Node: curses — Gerenciador de terminal para visualizadores de células de caracteres11294859
Ref: library/curses doc11295158
Ref: 32f211295158
Ref: library/curses curses-terminal-handling-for-character-cell-displays11295158
Ref: 32f311295158
Ref: library/curses module-curses11295158
Ref: 2f11295158
Ref: library/curses no-color11295158
Ref: 32f411295158
Ref: curses — Gerenciador de terminal para visualizadores de células de caracteres-Footnote-111296999
Node: Funções<6>11297062
Ref: library/curses curses-functions11297214
Ref: 32f611297214
Ref: library/curses functions11297214
Ref: 32f711297214
Ref: library/curses curses error11297314
Ref: 32f811297314
Ref: library/curses curses assume_default_colors11297682
Ref: 1f511297682
Ref: library/curses curses baudrate11298310
Ref: 32fa11298310
Ref: library/curses curses beep11298662
Ref: 32fb11298662
Ref: library/curses curses can_change_color11298728
Ref: 32fc11298728
Ref: library/curses curses cbreak11298900
Ref: 32fd11298900
Ref: library/curses curses color_content11299378
Ref: 9e811299378
Ref: library/curses curses color_pair11299761
Ref: 32ff11299761
Ref: library/curses curses curs_set11300148
Ref: 330311300148
Ref: library/curses curses def_prog_mode11300576
Ref: 330411300576
Ref: library/curses curses def_shell_mode11300904
Ref: 330611300904
Ref: library/curses curses delay_output11301250
Ref: 330811301250
Ref: library/curses curses doupdate11301340
Ref: 330911301340
Ref: library/curses curses echo11302166
Ref: 330d11302166
Ref: library/curses curses endwin11302302
Ref: 330e11302302
Ref: library/curses curses erasechar11302405
Ref: 330f11302405
Ref: library/curses curses filter11302673
Ref: 331011302673
Ref: library/curses curses flash11303284
Ref: 331111303284
Ref: library/curses curses flushinp11303547
Ref: 331211303547
Ref: library/curses curses getmouse11303733
Ref: 331311303733
Ref: library/curses curses getsyx11304735
Ref: 331d11304735
Ref: library/curses curses getwin11304946
Ref: 331f11304946
Ref: library/curses curses has_colors11305201
Ref: 332111305201
Ref: library/curses curses has_extended_color_support11305333
Ref: 9ec11305333
Ref: library/curses curses has_ic11305724
Ref: 332211305724
Ref: library/curses curses has_il11305980
Ref: 332311305980
Ref: library/curses curses has_key11306277
Ref: 332411306277
Ref: library/curses curses halfdelay11306431
Ref: 332511306431
Ref: library/curses curses init_color11306869
Ref: 9e911306869
Ref: library/curses curses init_pair11307525
Ref: 9ea11307525
Ref: library/curses curses initscr11308324
Ref: 186511308324
Ref: library/curses curses is_term_resized11308599
Ref: 332711308599
Ref: library/curses curses isendwin11308770
Ref: 332811308770
Ref: library/curses curses keyname11308928
Ref: 332911308928
Ref: library/curses curses killchar11309459
Ref: 332a11309459
Ref: library/curses curses longname11309730
Ref: 332b11309730
Ref: library/curses curses meta11310005
Ref: 332c11310005
Ref: library/curses curses mouseinterval11310162
Ref: 332d11310162
Ref: library/curses curses mousemask11310469
Ref: 332e11310469
Ref: library/curses curses napms11310889
Ref: 186411310889
Ref: library/curses curses newpad11310957
Ref: 332f11310957
Ref: library/curses curses newwin11312045
Ref: 333011312045
Ref: library/curses curses nl11312412
Ref: 333111312412
Ref: library/curses curses nocbreak11312627
Ref: 332611312627
Ref: library/curses curses noecho11312748
Ref: 333211312748
Ref: library/curses curses nonl11312847
Ref: 333311312847
Ref: library/curses curses noqiflush11313340
Ref: 333411313340
Ref: library/curses curses noraw11313730
Ref: 333511313730
Ref: library/curses curses pair_content11313845
Ref: 9eb11313845
Ref: library/curses curses pair_number11314071
Ref: 330211314071
Ref: library/curses curses putp11314263
Ref: 333611314263
Ref: library/curses curses qiflush11314509
Ref: 333711314509
Ref: library/curses curses raw11314775
Ref: 32fe11314775
Ref: library/curses curses reset_prog_mode11315017
Ref: 330511315017
Ref: library/curses curses reset_shell_mode11315165
Ref: 330711315165
Ref: library/curses curses resetty11315313
Ref: 333811315313
Ref: library/curses curses resize_term11315455
Ref: 188211315455
Ref: library/curses curses resizeterm11315994
Ref: 188111315994
Ref: library/curses curses savetty11316267
Ref: 333911316267
Ref: library/curses curses get_escdelay11316402
Ref: ae211316402
Ref: library/curses curses set_escdelay11316533
Ref: ae311316533
Ref: library/curses curses get_tabsize11316836
Ref: ae411316836
Ref: library/curses curses set_tabsize11316965
Ref: ae511316965
Ref: library/curses curses setsyx11317183
Ref: 333a11317183
Ref: library/curses curses setupterm11317353
Ref: 333b11317353
Ref: library/curses curses start_color11317770
Ref: 333c11317770
Ref: library/curses curses termattrs11318463
Ref: 333f11318463
Ref: library/curses curses termname11318693
Ref: 334011318693
Ref: library/curses curses tigetflag11318842
Ref: 334111318842
Ref: library/curses curses tigetnum11319158
Ref: 334211319158
Ref: library/curses curses tigetstr11319474
Ref: 334311319474
Ref: library/curses curses tparm11319784
Ref: 334411319784
Ref: library/curses curses typeahead11320121
Ref: 334511320121
Ref: library/curses curses unctrl11320714
Ref: 334611320714
Ref: library/curses curses ungetch11320995
Ref: 334711320995
Ref: library/curses curses update_lines_cols11321172
Ref: fe011321172
Ref: library/curses curses unget_wch11321370
Ref: 129411321370
Ref: library/curses curses ungetmouse11321596
Ref: 334811321596
Ref: library/curses curses use_env11321762
Ref: 334911321762
Ref: library/curses curses use_default_colors11322272
Ref: 1f611322272
Ref: library/curses curses wrapper11322373
Ref: c6711322373
Node: Window Objects11323199
Ref: library/curses curses-window-objects11323373
Ref: 18d011323373
Ref: library/curses window-objects11323373
Ref: 334a11323373
Ref: library/curses curses window11323422
Ref: 129111323422
Ref: library/curses curses window addch11323590
Ref: 334b11323590
Ref: library/curses curses window addnstr11324195
Ref: 334c11324195
Ref: library/curses curses window addstr11324456
Ref: 330b11324456
Ref: library/curses curses window attroff11325458
Ref: 334d11325458
Ref: library/curses curses window attron11325604
Ref: 334e11325604
Ref: library/curses curses window attrset11325744
Ref: 334f11325744
Ref: library/curses curses window bkgd11325893
Ref: 335011325893
Ref: library/curses curses window bkgdset11326339
Ref: 335111326339
Ref: library/curses curses window border11326906
Ref: 335211326906
Ref: library/curses curses window box11328917
Ref: 335911328917
Ref: library/curses curses window chgat11329146
Ref: 335a11329146
Ref: library/curses curses window clear11329774
Ref: 335c11329774
Ref: library/curses curses window clearok11329930
Ref: 335e11329930
Ref: library/curses curses window clrtobot11330076
Ref: 335f11330076
Ref: library/curses curses window clrtoeol11330274
Ref: 336011330274
Ref: library/curses curses window cursyncup11330355
Ref: 336111330355
Ref: library/curses curses window delch11330524
Ref: 336211330524
Ref: library/curses curses window deleteln11330604
Ref: 336311330604
Ref: library/curses curses window derwin11330729
Ref: 336411330729
Ref: library/curses curses window echochar11331141
Ref: 336611331141
Ref: library/curses curses window enclose11331296
Ref: 1b7a11331296
Ref: library/curses curses window encoding11331718
Ref: 129211331718
Ref: library/curses curses window erase11332103
Ref: 335d11332103
Ref: library/curses curses window getbegyx11332157
Ref: 336711332157
Ref: library/curses curses window getbkgd11332261
Ref: 336811332261
Ref: library/curses curses window getch11332377
Ref: 179311332377
Ref: library/curses curses window get_wch11332698
Ref: 129311332698
Ref: library/curses curses window getkey11332972
Ref: 336911332972
Ref: library/curses curses window getmaxyx11333281
Ref: 336a11333281
Ref: library/curses curses window getparyx11333387
Ref: 336b11333387
Ref: library/curses curses window getstr11333592
Ref: 17a611333592
Ref: library/curses curses window getyx11333944
Ref: 336c11333944
Ref: library/curses curses window hline11334086
Ref: 336d11334086
Ref: library/curses curses window idcok11334274
Ref: 336e11334274
Ref: library/curses curses window idlok11334621
Ref: 336f11334621
Ref: library/curses curses window immedok11334815
Ref: 337011334815
Ref: library/curses curses window inch11335165
Ref: 337111335165
Ref: library/curses curses window insch11335354
Ref: 337211335354
Ref: library/curses curses window insdelln11335570
Ref: 337311335570
Ref: library/curses curses window insertln11335950
Ref: 337411335950
Ref: library/curses curses window insnstr11336081
Ref: 337511336081
Ref: library/curses curses window insstr11336596
Ref: 337611336596
Ref: library/curses curses window instr11337017
Ref: 17a511337017
Ref: library/curses curses window is_linetouched11337551
Ref: 337711337551
Ref: library/curses curses window is_wintouched11337835
Ref: 337811337835
Ref: library/curses curses window keypad11338016
Ref: 337911338016
Ref: library/curses curses window leaveok11338285
Ref: 331e11338285
Ref: library/curses curses window move11338637
Ref: 337a11338637
Ref: library/curses curses window mvderwin11338721
Ref: 337b11338721
Ref: library/curses curses window mvwin11338999
Ref: 337c11338999
Ref: library/curses curses window nodelay11339116
Ref: 337d11339116
Ref: library/curses curses window notimeout11339226
Ref: 337e11339226
Ref: library/curses curses window noutrefresh11339491
Ref: 330a11339491
Ref: library/curses curses window overlay11339766
Ref: 337f11339766
Ref: library/curses curses window overwrite11340416
Ref: 338011340416
Ref: library/curses curses window putwin11341069
Ref: 332011341069
Ref: library/curses curses window redrawln11341276
Ref: 338111341276
Ref: library/curses curses window redrawwin11341483
Ref: 338211341483
Ref: library/curses curses window refresh11341630
Ref: 330c11341630
Ref: library/curses curses window resize11342652
Ref: 338311342652
Ref: library/curses curses window scroll11343005
Ref: 338411343005
Ref: library/curses curses window scrollok11343114
Ref: 338511343114
Ref: library/curses curses window setscrreg11343651
Ref: 338611343651
Ref: library/curses curses window standend11343821
Ref: 338711343821
Ref: library/curses curses window standout11343973
Ref: 338811343973
Ref: library/curses curses window subpad11344044
Ref: 338911344044
Ref: library/curses curses window subwin11344285
Ref: 336511344285
Ref: library/curses curses window syncdown11344645
Ref: 338a11344645
Ref: library/curses curses window syncok11344892
Ref: 338b11344892
Ref: library/curses curses window syncup11345056
Ref: 338c11345056
Ref: library/curses curses window timeout11345183
Ref: 338d11345183
Ref: library/curses curses window touchline11345687
Ref: 335b11345687
Ref: library/curses curses window touchwin11345996
Ref: 338e11345996
Ref: library/curses curses window untouchwin11346122
Ref: 338f11346122
Ref: library/curses curses window vline11346256
Ref: 1a3111346256
Ref: Window Objects-Footnote-111346517
Node: Constantes<6>11346560
Ref: library/curses constants11346713
Ref: 339011346713
Ref: library/curses curses ERR11346820
Ref: 339111346820
Ref: library/curses curses OK11346965
Ref: 339211346965
Ref: library/curses curses version11347108
Ref: 339311347108
Ref: library/curses curses __version__11347134
Ref: 339411347134
Ref: library/curses curses ncurses_version11347233
Ref: bd011347233
Ref: library/curses curses COLORS11347657
Ref: 333d11347657
Ref: library/curses curses COLOR_PAIRS11347813
Ref: 333e11347813
Ref: library/curses curses COLS11347979
Ref: fe211347979
Ref: library/curses curses LINES11348239
Ref: fe111348239
Ref: library/curses curses A_ALTCHARSET11348796
Ref: 339511348796
Ref: library/curses curses A_BLINK11348900
Ref: 339611348900
Ref: library/curses curses A_BOLD11348999
Ref: 339711348999
Ref: library/curses curses A_DIM11349097
Ref: 339811349097
Ref: library/curses curses A_INVIS11349197
Ref: 339911349197
Ref: library/curses curses A_ITALIC11349311
Ref: 339a11349311
Ref: library/curses curses A_NORMAL11349412
Ref: 32f911349412
Ref: library/curses curses A_PROTECT11349519
Ref: 339b11349519
Ref: library/curses curses A_REVERSE11349623
Ref: 330111349623
Ref: library/curses curses A_STANDOUT11349765
Ref: 330011349765
Ref: library/curses curses A_UNDERLINE11349839
Ref: 339c11349839
Ref: library/curses curses A_HORIZONTAL11349914
Ref: 339d11349914
Ref: library/curses curses A_LEFT11350009
Ref: 339e11350009
Ref: library/curses curses A_LOW11350112
Ref: 339f11350112
Ref: library/curses curses A_RIGHT11350217
Ref: 33a011350217
Ref: library/curses curses A_TOP11350320
Ref: 33a111350320
Ref: library/curses curses A_VERTICAL11350410
Ref: 33a211350410
Ref: library/curses curses A_ATTRIBUTES11350809
Ref: 33a311350809
Ref: library/curses curses A_CHARTEXT11350920
Ref: 33a411350920
Ref: library/curses curses A_COLOR11351041
Ref: 33a511351041
Ref: library/curses curses KEY_MIN11351491
Ref: 33a611351491
Ref: library/curses curses KEY_BREAK11351603
Ref: 33a711351603
Ref: library/curses curses KEY_DOWN11351717
Ref: 33a811351717
Ref: library/curses curses KEY_UP11351818
Ref: 33a911351818
Ref: library/curses curses KEY_LEFT11351921
Ref: 33aa11351921
Ref: library/curses curses KEY_RIGHT11352025
Ref: 33ab11352025
Ref: library/curses curses KEY_HOME11352128
Ref: 33ac11352128
Ref: library/curses curses KEY_BACKSPACE11352233
Ref: 33ad11352233
Ref: library/curses curses KEY_F011352332
Ref: 33ae11352332
Ref: library/curses curses KEY_Fn11352508
Ref: 33af11352508
Ref: library/curses curses KEY_DL11352626
Ref: 33b011352626
Ref: library/curses curses KEY_IL11352730
Ref: 33b111352730
Ref: library/curses curses KEY_DC11352834
Ref: 33b211352834
Ref: library/curses curses KEY_IC11352943
Ref: 33b311352943
Ref: library/curses curses KEY_EIC11353069
Ref: 33b411353069
Ref: library/curses curses KEY_CLEAR11353185
Ref: 33b511353185
Ref: library/curses curses KEY_EOS11353288
Ref: 33b611353288
Ref: library/curses curses KEY_EOL11353403
Ref: 33b711353403
Ref: library/curses curses KEY_SF11353515
Ref: 33b811353515
Ref: library/curses curses KEY_SR11353629
Ref: 33b911353629
Ref: library/curses curses KEY_NPAGE11353757
Ref: 33ba11353757
Ref: library/curses curses KEY_PPAGE11353859
Ref: 33bb11353859
Ref: library/curses curses KEY_STAB11353964
Ref: 33bc11353964
Ref: library/curses curses KEY_CTAB11354064
Ref: 33bd11354064
Ref: library/curses curses KEY_CATAB11354167
Ref: 33be11354167
Ref: library/curses curses KEY_ENTER11354274
Ref: 33bf11354274
Ref: library/curses curses KEY_SRESET11354394
Ref: 33c011354394
Ref: library/curses curses KEY_RESET11354519
Ref: 33c111354519
Ref: library/curses curses KEY_PRINT11354644
Ref: 33c211354644
Ref: library/curses curses KEY_LL11354739
Ref: 33c311354739
Ref: library/curses curses KEY_A111354864
Ref: 33c411354864
Ref: library/curses curses KEY_A311354977
Ref: 33c511354977
Ref: library/curses curses KEY_B211355091
Ref: 33c611355091
Ref: library/curses curses KEY_C111355200
Ref: 33c711355200
Ref: library/curses curses KEY_C311355313
Ref: 33c811355313
Ref: library/curses curses KEY_BTAB11355429
Ref: 33c911355429
Ref: library/curses curses KEY_BEG11355529
Ref: 33ca11355529
Ref: library/curses curses KEY_CANCEL11355640
Ref: 33cb11355640
Ref: library/curses curses KEY_CLOSE11355740
Ref: 33cc11355740
Ref: library/curses curses KEY_COMMAND11355821
Ref: 33cd11355821
Ref: library/curses curses KEY_COPY11355913
Ref: 33ce11355913
Ref: library/curses curses KEY_CREATE11356012
Ref: 33cf11356012
Ref: library/curses curses KEY_END11356108
Ref: 33d011356108
Ref: library/curses curses KEY_EXIT11356205
Ref: 33d111356205
Ref: library/curses curses KEY_FIND11356302
Ref: 33d211356302
Ref: library/curses curses KEY_HELP11356399
Ref: 33d311356399
Ref: library/curses curses KEY_MARK11356496
Ref: 33d411356496
Ref: library/curses curses KEY_MESSAGE11356577
Ref: 33d511356577
Ref: library/curses curses KEY_MOVE11356663
Ref: 33d611356663
Ref: library/curses curses KEY_NEXT11356760
Ref: 33d711356760
Ref: library/curses curses KEY_OPEN11356857
Ref: 33d811356857
Ref: library/curses curses KEY_OPTIONS11356938
Ref: 33d911356938
Ref: library/curses curses KEY_PREVIOUS11357009
Ref: 33da11357009
Ref: library/curses curses KEY_REDO11357103
Ref: 33db11357103
Ref: library/curses curses KEY_REFERENCE11357184
Ref: 33dc11357184
Ref: library/curses curses KEY_REFRESH11357262
Ref: 33dd11357262
Ref: library/curses curses KEY_REPLACE11357332
Ref: 33de11357332
Ref: library/curses curses KEY_RESTART11357402
Ref: 33df11357402
Ref: library/curses curses KEY_RESUME11357490
Ref: 33e011357490
Ref: library/curses curses KEY_SAVE11357587
Ref: 33e111357587
Ref: library/curses curses KEY_SBEG11357686
Ref: 33e211357686
Ref: library/curses curses KEY_SCANCEL11357786
Ref: 33e311357786
Ref: library/curses curses KEY_SCOMMAND11357863
Ref: 33e411357863
Ref: library/curses curses KEY_SCOPY11357958
Ref: 33e511357958
Ref: library/curses curses KEY_SCREATE11358046
Ref: 33e611358046
Ref: library/curses curses KEY_SDC11358138
Ref: 33e711358138
Ref: library/curses curses KEY_SDL11358250
Ref: 33e811358250
Ref: library/curses curses KEY_SELECT11358365
Ref: 33e911358365
Ref: library/curses curses KEY_SEND11358462
Ref: 33ea11358462
Ref: library/curses curses KEY_SEOL11358566
Ref: 33eb11358566
Ref: library/curses curses KEY_SEXIT11358678
Ref: 33ec11358678
Ref: library/curses curses KEY_SFIND11358783
Ref: 33ed11358783
Ref: library/curses curses KEY_SHELP11358888
Ref: 33ee11358888
Ref: library/curses curses KEY_SHOME11358993
Ref: 33ef11358993
Ref: library/curses curses KEY_SIC11359096
Ref: 33f011359096
Ref: library/curses curses KEY_SLEFT11359204
Ref: 33f111359204
Ref: library/curses curses KEY_SMESSAGE11359298
Ref: 33f211359298
Ref: library/curses curses KEY_SMOVE11359393
Ref: 33f311359393
Ref: library/curses curses KEY_SNEXT11359498
Ref: 33f411359498
Ref: library/curses curses KEY_SOPTIONS11359586
Ref: 33f511359586
Ref: library/curses curses KEY_SPREVIOUS11359664
Ref: 33f611359664
Ref: library/curses curses KEY_SPRINT11359757
Ref: 33f711359757
Ref: library/curses curses KEY_SREDO11359862
Ref: 33f811359862
Ref: library/curses curses KEY_SREPLACE11359950
Ref: 33f911359950
Ref: library/curses curses KEY_SRIGHT11360046
Ref: 33fa11360046
Ref: library/curses curses KEY_SRSUME11360158
Ref: 33fb11360158
Ref: library/curses curses KEY_SSAVE11360265
Ref: 33fc11360265
Ref: library/curses curses KEY_SSUSPEND11360353
Ref: 33fd11360353
Ref: library/curses curses KEY_SUNDO11360448
Ref: 33fe11360448
Ref: library/curses curses KEY_SUSPEND11360536
Ref: 33ff11360536
Ref: library/curses curses KEY_UNDO11360622
Ref: 340011360622
Ref: library/curses curses KEY_MOUSE11360724
Ref: 331411360724
Ref: library/curses curses KEY_RESIZE11360842
Ref: 340111360842
Ref: library/curses curses KEY_MAX11360953
Ref: 340211360953
Ref: library/curses curses-acs-codes11362157
Ref: 340311362157
Ref: library/curses curses ACS_BBSS11362739
Ref: 340411362739
Ref: library/curses curses ACS_BLOCK11362867
Ref: 340511362867
Ref: library/curses curses ACS_BOARD11362975
Ref: 340611362975
Ref: library/curses curses ACS_BSBS11363080
Ref: 340711363080
Ref: library/curses curses ACS_BSSB11363204
Ref: 340811363204
Ref: library/curses curses ACS_BSSS11363330
Ref: 340911363330
Ref: library/curses curses ACS_BTEE11363446
Ref: 340a11363446
Ref: library/curses curses ACS_BULLET11363530
Ref: 340b11363530
Ref: library/curses curses ACS_CKBOARD11363597
Ref: 340c11363597
Ref: library/curses curses ACS_DARROW11363681
Ref: 340d11363681
Ref: library/curses curses ACS_DEGREE11363761
Ref: 340e11363761
Ref: library/curses curses ACS_DIAMOND11363835
Ref: 340f11363835
Ref: library/curses curses ACS_GEQUAL11363903
Ref: 341011363903
Ref: library/curses curses ACS_HLINE11364005
Ref: 335411364005
Ref: library/curses curses ACS_LANTERN11364093
Ref: 341111364093
Ref: library/curses curses ACS_LARROW11364168
Ref: 341211364168
Ref: library/curses curses ACS_LEQUAL11364239
Ref: 341311364239
Ref: library/curses curses ACS_LLCORNER11364321
Ref: 335711364321
Ref: library/curses curses ACS_LRCORNER11364404
Ref: 335811364404
Ref: library/curses curses ACS_LTEE11364504
Ref: 341411364504
Ref: library/curses curses ACS_NEQUAL11364586
Ref: 341511364586
Ref: library/curses curses ACS_PI11364675
Ref: 341611364675
Ref: library/curses curses ACS_PLMINUS11364760
Ref: 341711364760
Ref: library/curses curses ACS_PLUS11364855
Ref: 341811364855
Ref: library/curses curses ACS_RARROW11364942
Ref: 341911364942
Ref: library/curses curses ACS_RTEE11365030
Ref: 341a11365030
Ref: library/curses curses ACS_S111365127
Ref: 341b11365127
Ref: library/curses curses ACS_S311365228
Ref: 341c11365228
Ref: library/curses curses ACS_S711365329
Ref: 341d11365329
Ref: library/curses curses ACS_S911365430
Ref: 341e11365430
Ref: library/curses curses ACS_SBBS11365533
Ref: 341f11365533
Ref: library/curses curses ACS_SBSB11365660
Ref: 342011365660
Ref: library/curses curses ACS_SBSS11365782
Ref: 342111365782
Ref: library/curses curses ACS_SSBB11365900
Ref: 342211365900
Ref: library/curses curses ACS_SSBS11366026
Ref: 342311366026
Ref: library/curses curses ACS_SSSB11366145
Ref: 342411366145
Ref: library/curses curses ACS_SSSS11366262
Ref: 342511366262
Ref: library/curses curses ACS_STERLING11366376
Ref: 342611366376
Ref: library/curses curses ACS_TTEE11366467
Ref: 342711366467
Ref: library/curses curses ACS_UARROW11366548
Ref: 342811366548
Ref: library/curses curses ACS_ULCORNER11366617
Ref: 335511366617
Ref: library/curses curses ACS_URCORNER11366695
Ref: 335611366695
Ref: library/curses curses ACS_VLINE11366791
Ref: 335311366791
Ref: library/curses curses BUTTONn_PRESSED11367175
Ref: 331511367175
Ref: library/curses curses BUTTONn_RELEASED11367320
Ref: 331611367320
Ref: library/curses curses BUTTONn_CLICKED11367464
Ref: 331711367464
Ref: library/curses curses BUTTONn_DOUBLE_CLICKED11367585
Ref: 331811367585
Ref: library/curses curses BUTTONn_TRIPLE_CLICKED11367697
Ref: 331911367697
Ref: library/curses curses BUTTON_SHIFT11367829
Ref: 331a11367829
Ref: library/curses curses BUTTON_CTRL11367989
Ref: 331b11367989
Ref: library/curses curses BUTTON_ALT11368151
Ref: 331c11368151
Ref: library/curses curses COLOR_BLACK11368597
Ref: 342911368597
Ref: library/curses curses COLOR_BLUE11368683
Ref: 342a11368683
Ref: library/curses curses COLOR_CYAN11368780
Ref: 342b11368780
Ref: library/curses curses COLOR_GREEN11368881
Ref: 342c11368881
Ref: library/curses curses COLOR_MAGENTA11368949
Ref: 342d11368949
Ref: library/curses curses COLOR_RED11369051
Ref: 342e11369051
Ref: library/curses curses COLOR_WHITE11369130
Ref: 342f11369130
Ref: library/curses curses COLOR_YELLOW11369198
Ref: 343011369198
Node: curses textpad — Text input widget for curses programs11369258
Ref: library/curses curses-textpad-text-input-widget-for-curses-programs11369544
Ref: 343111369544
Ref: library/curses module-curses textpad11369544
Ref: 3211369544
Ref: library/curses curses textpad rectangle11370132
Ref: 343311370132
Node: Textbox objects11370855
Ref: library/curses curses-textpad-objects11370963
Ref: 343411370963
Ref: library/curses textbox-objects11370963
Ref: 343511370963
Ref: library/curses curses textpad Textbox11371077
Ref: 343211371077
Ref: library/curses curses textpad Textbox edit11371557
Ref: 343711371557
Ref: library/curses curses textpad Textbox do_command11372129
Ref: 343811372129
Ref: library/curses curses textpad Textbox gather11375860
Ref: 343911375860
Ref: library/curses curses textpad Textbox stripspaces11376054
Ref: 343611376054
Node: curses ascii — Utilitários para caracteres ASCII11376464
Ref: library/curses ascii doc11376735
Ref: 343a11376735
Ref: library/curses ascii curses-ascii-utilities-for-ascii-characters11376735
Ref: 343b11376735
Ref: library/curses ascii module-curses ascii11376735
Ref: 3011376735
Ref: library/curses ascii no-color11376735
Ref: 343c11376735
Ref: library/curses ascii curses ascii NUL11377374
Ref: 343d11377374
Ref: library/curses ascii curses ascii SOH11377412
Ref: 343e11377412
Ref: library/curses ascii curses ascii STX11377508
Ref: 343f11377508
Ref: library/curses ascii curses ascii ETX11377573
Ref: 344011377573
Ref: library/curses ascii curses ascii EOT11377634
Ref: 344111377634
Ref: library/curses ascii curses ascii ENQ11377702
Ref: 344211377702
Ref: library/curses ascii curses ascii ACK11377845
Ref: 344311377845
Ref: library/curses ascii curses ascii BEL11377907
Ref: 344411377907
Ref: library/curses ascii curses ascii BS11377965
Ref: 344511377965
Ref: library/curses ascii curses ascii TAB11378022
Ref: 344611378022
Ref: library/curses ascii curses ascii HT11378082
Ref: 344711378082
Ref: library/curses ascii curses ascii LF11378229
Ref: 344811378229
Ref: library/curses ascii curses ascii NL11378314
Ref: 344911378314
Ref: library/curses ascii curses ascii VT11378408
Ref: 344a11378408
Ref: library/curses ascii curses ascii FF11378476
Ref: 344b11378476
Ref: library/curses ascii curses ascii CR11378567
Ref: 344c11378567
Ref: library/curses ascii curses ascii SO11378652
Ref: 344d11378652
Ref: library/curses ascii curses ascii SI11378823
Ref: 344e11378823
Ref: library/curses ascii curses ascii DLE11378990
Ref: 344f11378990
Ref: library/curses ascii curses ascii DC111379079
Ref: 345011379079
Ref: library/curses ascii curses ascii DC211379155
Ref: 345111379155
Ref: library/curses ascii curses ascii DC311379301
Ref: 345211379301
Ref: library/curses ascii curses ascii DC411379378
Ref: 345311379378
Ref: library/curses ascii curses ascii NAK11379452
Ref: 345411379452
Ref: library/curses ascii curses ascii SYN11379523
Ref: 345511379523
Ref: library/curses ascii curses ascii ETB11379595
Ref: 345611379595
Ref: library/curses ascii curses ascii CAN11379672
Ref: 345711379672
Ref: library/curses ascii curses ascii EM11379729
Ref: 345811379729
Ref: library/curses ascii curses ascii SUB11379790
Ref: 345911379790
Ref: library/curses ascii curses ascii ESC11379849
Ref: 345a11379849
Ref: library/curses ascii curses ascii FS11379905
Ref: 345b11379905
Ref: library/curses ascii curses ascii GS11379974
Ref: 345c11379974
Ref: library/curses ascii curses ascii RS11380041
Ref: 345d11380041
Ref: library/curses ascii curses ascii US11380137
Ref: 345e11380137
Ref: library/curses ascii curses ascii SP11380206
Ref: 345f11380206
Ref: library/curses ascii curses ascii DEL11380261
Ref: 346011380261
Ref: library/curses ascii curses ascii isalnum11380561
Ref: 346111380561
Ref: library/curses ascii curses ascii isalpha11380705
Ref: 346211380705
Ref: library/curses ascii curses ascii isascii11380847
Ref: 346311380847
Ref: library/curses ascii curses ascii isblank11380980
Ref: 346411380980
Ref: library/curses ascii curses ascii iscntrl11381123
Ref: 346511381123
Ref: library/curses ascii curses ascii isdigit11381260
Ref: 346611381260
Ref: library/curses ascii curses ascii isgraph11381419
Ref: 346711381419
Ref: library/curses ascii curses ascii islower11381532
Ref: 346811381532
Ref: library/curses ascii curses ascii isprint11381625
Ref: 346911381625
Ref: library/curses ascii curses ascii ispunct11381741
Ref: 346a11381741
Ref: library/curses ascii curses ascii isspace11381898
Ref: 346b11381898
Ref: library/curses ascii curses ascii isupper11382111
Ref: 346c11382111
Ref: library/curses ascii curses ascii isxdigit11382201
Ref: 346d11382201
Ref: library/curses ascii curses ascii isctrl11382344
Ref: 346e11382344
Ref: library/curses ascii curses ascii ismeta11382471
Ref: 346f11382471
Ref: library/curses ascii curses ascii ascii11383107
Ref: 347011383107
Ref: library/curses ascii curses ascii ctrl11383219
Ref: 347111383219
Ref: library/curses ascii curses ascii alt11383412
Ref: 347211383412
Ref: library/curses ascii curses ascii unctrl11383716
Ref: 347311383716
Ref: library/curses ascii curses ascii controlnames11384303
Ref: 347411384303
Ref: curses ascii — Utilitários para caracteres ASCII-Footnote-111384607
Node: curses panel — Uma extensão de pilha de painéis para o curses11384679
Ref: library/curses panel doc11384960
Ref: 347511384960
Ref: library/curses panel curses-panel-a-panel-stack-extension-for-curses11384960
Ref: 347611384960
Ref: library/curses panel module-curses panel11384960
Ref: 3111384960
Ref: library/curses panel no-color11384960
Ref: 347711384960
Node: Funções<7>11385503
Ref: library/curses panel cursespanel-functions11385640
Ref: 347811385640
Ref: library/curses panel functions11385640
Ref: 347911385640
Ref: library/curses panel curses panel bottom_panel11385743
Ref: 347a11385743
Ref: library/curses panel curses panel new_panel11385841
Ref: 347b11385841
Ref: library/curses panel curses panel top_panel11386164
Ref: 347c11386164
Ref: library/curses panel curses panel update_panels11386259
Ref: 347d11386259
Node: Objetos painel11386476
Ref: library/curses panel curses-panel-objects11386613
Ref: 347e11386613
Ref: library/curses panel panel-objects11386613
Ref: 347f11386613
Ref: library/curses panel curses panel Panel above11386994
Ref: 348011386994
Ref: library/curses panel curses panel Panel below11387069
Ref: 348111387069
Ref: library/curses panel curses panel Panel bottom11387145
Ref: 348211387145
Ref: library/curses panel curses panel Panel hidden11387220
Ref: 348311387220
Ref: library/curses panel curses panel Panel hide11387353
Ref: 348411387353
Ref: library/curses panel curses panel Panel move11387479
Ref: 348511387479
Ref: library/curses panel curses panel Panel replace11387573
Ref: 348611387573
Ref: library/curses panel curses panel Panel set_userptr11387670
Ref: 348711387670
Ref: library/curses panel curses panel Panel show11387883
Ref: 348811387883
Ref: library/curses panel curses panel Panel top11387957
Ref: 348911387957
Ref: library/curses panel curses panel Panel userptr11388028
Ref: 348a11388028
Ref: library/curses panel curses panel Panel window11388150
Ref: 348b11388150
Node: cmd — Suporte para interpretadores de comando orientado a linhas11388234
Ref: library/cmd doc11388455
Ref: 348c11388455
Ref: library/cmd cmd-support-for-line-oriented-command-interpreters11388455
Ref: 348d11388455
Ref: library/cmd module-cmd11388455
Ref: 1a11388455
Ref: library/cmd no-color11388455
Ref: 348e11388455
Ref: library/cmd cmd Cmd11388995
Ref: 17b711388995
Ref: cmd — Suporte para interpretadores de comando orientado a linhas-Footnote-111390830
Node: Objetos Cmd11390893
Ref: library/cmd cmd-objects11391030
Ref: 349011391030
Ref: library/cmd id111391030
Ref: 349111391030
Ref: library/cmd cmd Cmd cmdloop11391133
Ref: 349211391133
Ref: library/cmd cmd Cmd do_help11393421
Ref: 196911393421
Ref: library/cmd cmd Cmd onecmd11394002
Ref: 349511394002
Ref: library/cmd cmd Cmd emptyline11394618
Ref: 349811394618
Ref: library/cmd cmd Cmd default11394829
Ref: 349711394829
Ref: library/cmd cmd Cmd completedefault11395051
Ref: 349911395051
Ref: library/cmd cmd Cmd columnize11395310
Ref: 1b0a11395310
Ref: library/cmd cmd Cmd precmd11395575
Ref: 349611395575
Ref: library/cmd cmd Cmd postcmd11396085
Ref: 349411396085
Ref: library/cmd cmd Cmd preloop11396740
Ref: 349a11396740
Ref: library/cmd cmd Cmd postloop11396955
Ref: 349b11396955
Ref: library/cmd cmd Cmd prompt11397279
Ref: 349c11397279
Ref: library/cmd cmd Cmd identchars11397358
Ref: 349d11397358
Ref: library/cmd cmd Cmd lastcmd11397455
Ref: 349e11397455
Ref: library/cmd cmd Cmd cmdqueue11397535
Ref: 349f11397535
Ref: library/cmd cmd Cmd intro11397837
Ref: 349311397837
Ref: library/cmd cmd Cmd doc_header11398006
Ref: 34a011398006
Ref: library/cmd cmd Cmd misc_header11398141
Ref: 34a111398141
Ref: library/cmd cmd Cmd undoc_header11398368
Ref: 34a211398368
Ref: library/cmd cmd Cmd ruler11398599
Ref: 34a311398599
Ref: library/cmd cmd Cmd use_rawinput11398817
Ref: 348f11398817
Node: Exemplo do Cmd11399333
Ref: library/cmd cmd-example11399470
Ref: 34a411399470
Ref: library/cmd id211399470
Ref: 34a511399470
Node: Execução Concorrente11404924
Ref: library/concurrency doc11405112
Ref: 34a711405112
Ref: library/concurrency concurrency11405112
Ref: 34a811405112
Ref: library/concurrency concurrent-execution11405112
Ref: 34a911405112
Ref: library/concurrency no-color11405112
Ref: 34aa11405112
Node: threading — Paralelismo baseado em threads11406298
Ref: library/threading doc11406461
Ref: 34ab11406461
Ref: library/threading module-threading11406461
Ref: f311406461
Ref: library/threading threading-thread-based-parallelism11406461
Ref: 34ac11406461
Ref: threading — Paralelismo baseado em threads-Footnote-111407254
Node: Introdução<8>11407323
Ref: library/threading introduction11407462
Ref: 34ad11407462
Ref: Introdução<8>-Footnote-111410476
Node: GIL and performance considerations11410533
Ref: library/threading gil-and-performance-considerations11410695
Ref: 34ae11410695
Ref: GIL and performance considerations-Footnote-111411486
Node: Referência<2>11411528
Ref: library/threading reference11411734
Ref: 34af11411734
Ref: library/threading threading active_count11411821
Ref: 35c11411821
Ref: library/threading threading current_thread11412114
Ref: 35b11412114
Ref: library/threading threading excepthook11412511
Ref: a4111412511
Ref: library/threading threading __excepthook__11413933
Ref: a4011413933
Ref: library/threading threading get_ident11414210
Ref: 135611414210
Ref: library/threading threading get_native_id11414672
Ref: c2711414672
Ref: library/threading threading enumerate11415282
Ref: 1b4911415282
Ref: library/threading threading main_thread11415666
Ref: 11c811415666
Ref: library/threading threading settrace11415898
Ref: a3e11415898
Ref: library/threading threading settrace_all_threads11416154
Ref: 6e411416154
Ref: library/threading threading gettrace11416513
Ref: a3c11416513
Ref: library/threading threading setprofile11416659
Ref: a3f11416659
Ref: library/threading threading setprofile_all_threads11416922
Ref: 6e511416922
Ref: library/threading threading getprofile11417288
Ref: a3d11417288
Ref: library/threading threading stack_size11417458
Ref: 34b011417458
Ref: library/threading threading TIMEOUT_MAX11418943
Ref: 34b111418943
Node: Thread-local data11420168
Ref: library/threading thread-local-data11420259
Ref: 34b211420259
Ref: library/threading threading local11423373
Ref: 17ca11423373
Node: Thread objects11423451
Ref: library/threading id111423563
Ref: 34b311423563
Ref: library/threading thread-objects11423563
Ref: 34b411423563
Ref: library/threading threading Thread11426240
Ref: 17611426240
Ref: library/threading threading Thread start11428454
Ref: 17811428454
Ref: library/threading threading Thread run11429107
Ref: c2611429107
Ref: library/threading meth-thread-join11429920
Ref: 34b511429920
Ref: library/threading threading Thread join11429920
Ref: 13e011429920
Ref: library/threading threading Thread name11431480
Ref: 29f11431480
Ref: library/threading threading Thread getName11432234
Ref: 34b711432234
Ref: library/threading threading Thread setName11432263
Ref: 35a11432263
Ref: library/threading threading Thread ident11432451
Ref: 2fc711432451
Ref: library/threading threading Thread native_id11432842
Ref: c2811432842
Ref: library/threading threading Thread is_alive11433662
Ref: b3c11433662
Ref: library/threading threading Thread daemon11434001
Ref: 35911434001
Ref: library/threading threading Thread isDaemon11434593
Ref: 34b811434593
Ref: library/threading threading Thread setDaemon11434623
Ref: 35811434623
Node: Lock objects11434815
Ref: library/threading id211434923
Ref: 34b911434923
Ref: library/threading lock-objects11434923
Ref: 34ba11434923
Ref: library/threading threading Lock11436340
Ref: 193011436340
Ref: library/threading threading Lock acquire11436745
Ref: 89c11436745
Ref: library/threading threading Lock release11438192
Ref: 14be11438192
Ref: library/threading threading Lock locked11438678
Ref: 34bc11438678
Node: RLock objects11438761
Ref: library/threading id311438872
Ref: 34bd11438872
Ref: library/threading rlock-objects11438872
Ref: 34be11438872
Ref: library/threading threading RLock11440247
Ref: 32c11440247
Ref: library/threading threading RLock acquire11440770
Ref: 107111440770
Ref: library/threading threading RLock release11442761
Ref: 34bf11442761
Ref: library/threading threading RLock locked11443459
Ref: 17a411443459
Node: Condition objects11443617
Ref: library/threading condition-objects11443733
Ref: 34c011443733
Ref: library/threading id411443733
Ref: 34c111443733
Ref: library/threading threading Condition11446852
Ref: 135111446852
Ref: library/threading threading Condition acquire11447397
Ref: 34c211447397
Ref: library/threading threading Condition release11447610
Ref: 34c311447610
Ref: library/threading threading Condition locked11447794
Ref: 34c511447794
Ref: library/threading threading Condition wait11447952
Ref: 1b5511447952
Ref: library/threading threading Condition wait_for11449484
Ref: 34c411449484
Ref: library/threading threading Condition notify11450464
Ref: 1a8211450464
Ref: library/threading threading Condition notify_all11451367
Ref: 35611451367
Node: Semaphore objects11451784
Ref: library/threading id511451904
Ref: 34c611451904
Ref: library/threading semaphore-objects11451904
Ref: 34c711451904
Ref: library/threading threading Semaphore11452603
Ref: 135211452603
Ref: library/threading threading Semaphore acquire11453296
Ref: 144f11453296
Ref: library/threading threading Semaphore release11454593
Ref: 34c811454593
Ref: library/threading threading BoundedSemaphore11454972
Ref: 135311454972
Node: Semaphore example11455505
Ref: library/threading semaphore-example11455621
Ref: 34c911455621
Ref: library/threading semaphore-examples11455621
Ref: 34ca11455621
Node: Event objects11456492
Ref: library/threading event-objects11456604
Ref: 34cb11456604
Ref: library/threading id611456604
Ref: 34cc11456604
Ref: library/threading threading Event11457008
Ref: 135411457008
Ref: library/threading threading Event is_set11457406
Ref: 35711457406
Ref: library/threading threading Event set11457579
Ref: 34cd11457579
Ref: library/threading threading Event clear11457808
Ref: 34ce11457808
Ref: library/threading threading Event wait11458038
Ref: 152211458038
Node: Timer objects11458770
Ref: library/threading id711458880
Ref: 34cf11458880
Ref: library/threading timer-objects11458880
Ref: 34d011458880
Ref: library/threading threading Timer11459643
Ref: 135511459643
Ref: library/threading threading Timer cancel11460094
Ref: 34d111460094
Node: Barrier objects11460285
Ref: library/threading barrier-objects11460373
Ref: 34d211460373
Ref: library/threading threading Barrier11461335
Ref: 13df11461335
Ref: library/threading threading Barrier wait11461680
Ref: 34d311461680
Ref: library/threading threading Barrier reset11462829
Ref: 34d411462829
Ref: library/threading threading Barrier abort11463267
Ref: 34d511463267
Ref: library/threading threading Barrier parties11463758
Ref: 34d611463758
Ref: library/threading threading Barrier n_waiting11463849
Ref: 34d711463849
Ref: library/threading threading Barrier broken11463946
Ref: 34d811463946
Ref: library/threading threading BrokenBarrierError11464062
Ref: 13e111464062
Node: Using locks conditions and semaphores in the with statement11464240
Ref: library/threading using-locks-conditions-and-semaphores-in-the-with-statement11464403
Ref: 34d911464403
Ref: library/threading with-locks11464403
Ref: 34bb11464403
Node: multiprocessing — Paralelismo baseado em processo11465244
Ref: library/multiprocessing doc11465507
Ref: 34da11465507
Ref: library/multiprocessing module-multiprocessing11465507
Ref: 9811465507
Ref: library/multiprocessing multiprocessing-process-based-parallelism11465507
Ref: 34db11465507
Ref: library/multiprocessing no-color11465507
Ref: 34dc11465507
Ref: multiprocessing — Paralelismo baseado em processo-Footnote-111466075
Node: Introdução<9>11466148
Ref: library/multiprocessing introduction11466274
Ref: 34dd11466274
Node: A classe Process11468329
Ref: library/multiprocessing the-process-class11468445
Ref: 34de11468445
Node: Contextos e métodos de inicialização11469943
Ref: library/multiprocessing contexts-and-start-methods11470100
Ref: 34e011470100
Ref: library/multiprocessing multiprocessing-start-methods11470100
Ref: 1d511470100
Ref: library/multiprocessing multiprocessing-start-method-spawn11470338
Ref: 1d811470338
Ref: library/multiprocessing multiprocessing-start-method-fork11470913
Ref: 1d711470913
Ref: library/multiprocessing multiprocessing-start-method-forkserver11472022
Ref: 1d411472022
Ref: Contextos e métodos de inicialização-Footnote-111476676
Ref: Contextos e métodos de inicialização-Footnote-211476741
Node: Trocando objetos entre processos11476796
Ref: library/multiprocessing exchanging-objects-between-processes11476968
Ref: 34e211476968
Node: Sincronização entre processos11478943
Ref: library/multiprocessing synchronization-between-processes11479113
Ref: 34e411479113
Node: Compartilhando estado entre processos11479838
Ref: library/multiprocessing sharing-state-between-processes11480001
Ref: 34e511480001
Node: Usando um pool de workers11483546
Ref: library/multiprocessing using-a-pool-of-workers11483669
Ref: 34ed11483669
Node: Referência<3>11487018
Ref: library/multiprocessing reference11487175
Ref: 34ee11487175
Node: Process e exceções11487702
Ref: library/multiprocessing process-and-exceptions11487803
Ref: 34ef11487803
Ref: library/multiprocessing multiprocessing Process11487870
Ref: 25111487870
Ref: library/multiprocessing multiprocessing Process run11491132
Ref: 34e111491132
Ref: library/multiprocessing multiprocessing Process start11491948
Ref: 158311491948
Ref: library/multiprocessing multiprocessing Process join11492212
Ref: 158511492212
Ref: library/multiprocessing multiprocessing Process name11492970
Ref: 34f011492970
Ref: library/multiprocessing multiprocessing Process is_alive11493437
Ref: 158411493437
Ref: library/multiprocessing multiprocessing Process daemon11493691
Ref: 34f111493691
Ref: library/multiprocessing multiprocessing Process pid11494640
Ref: 34f411494640
Ref: library/multiprocessing multiprocessing Process exitcode11494765
Ref: 34f311494765
Ref: library/multiprocessing multiprocessing Process authkey11495399
Ref: 34f511495399
Ref: library/multiprocessing multiprocessing Process sentinel11495952
Ref: 12dd11495952
Ref: library/multiprocessing multiprocessing Process interrupt11496695
Ref: 25011496695
Ref: library/multiprocessing multiprocessing Process terminate11497683
Ref: 17c111497683
Ref: library/multiprocessing multiprocessing Process kill11498564
Ref: d4311498564
Ref: library/multiprocessing multiprocessing Process close11498730
Ref: d4211498730
Ref: library/multiprocessing multiprocessing ProcessError11500064
Ref: 34f711500064
Ref: library/multiprocessing multiprocessing BufferTooShort11500182
Ref: 34f811500182
Ref: library/multiprocessing multiprocessing AuthenticationError11500514
Ref: 34f911500514
Ref: library/multiprocessing multiprocessing TimeoutError11500620
Ref: 34fa11500620
Ref: Process e exceções-Footnote-111500785
Node: Encadeamentos e filas11500841
Ref: library/multiprocessing pipes-and-queues11500962
Ref: 34fb11500962
Ref: library/multiprocessing multiprocessing Pipe11505010
Ref: 34e311505010
Ref: library/multiprocessing multiprocessing Queue11505587
Ref: 1aa011505587
Ref: library/multiprocessing multiprocessing Queue qsize11506256
Ref: 350611506256
Ref: library/multiprocessing multiprocessing Queue empty11506618
Ref: 18bc11506618
Ref: library/multiprocessing multiprocessing Queue full11506941
Ref: 350711506941
Ref: library/multiprocessing multiprocessing Queue put11507157
Ref: 1cd311507157
Ref: library/multiprocessing multiprocessing Queue put_nowait11508044
Ref: 350811508044
Ref: library/multiprocessing multiprocessing Queue get11508128
Ref: 1cd411508128
Ref: library/multiprocessing multiprocessing Queue get_nowait11508988
Ref: 350311508988
Ref: library/multiprocessing multiprocessing Queue close11509268
Ref: 1aa111509268
Ref: library/multiprocessing multiprocessing Queue join_thread11509723
Ref: 350911509723
Ref: library/multiprocessing multiprocessing Queue cancel_join_thread11510318
Ref: 350411510318
Ref: library/multiprocessing multiprocessing SimpleQueue11511555
Ref: b0611511555
Ref: library/multiprocessing multiprocessing SimpleQueue close11511699
Ref: b0711511699
Ref: library/multiprocessing multiprocessing SimpleQueue empty11512017
Ref: 18bd11512017
Ref: library/multiprocessing multiprocessing SimpleQueue get11512229
Ref: 350a11512229
Ref: library/multiprocessing multiprocessing SimpleQueue put11512300
Ref: 350b11512300
Ref: library/multiprocessing multiprocessing JoinableQueue11512364
Ref: 34fc11512364
Ref: library/multiprocessing multiprocessing JoinableQueue task_done11512588
Ref: 34ff11512588
Ref: library/multiprocessing multiprocessing JoinableQueue join11513356
Ref: 350c11513356
Ref: Encadeamentos e filas-Footnote-111513903
Node: Diversos<5>11513967
Ref: library/multiprocessing miscellaneous11514087
Ref: 350d11514087
Ref: library/multiprocessing multiprocessing active_children11514126
Ref: 350e11514126
Ref: library/multiprocessing multiprocessing cpu_count11514358
Ref: 116511514358
Ref: library/multiprocessing multiprocessing current_process11515145
Ref: 350f11515145
Ref: library/multiprocessing multiprocessing parent_process11515337
Ref: 351011515337
Ref: library/multiprocessing multiprocessing freeze_support11515604
Ref: 17a311515604
Ref: library/multiprocessing multiprocessing get_all_start_methods11516595
Ref: 115f11516595
Ref: library/multiprocessing multiprocessing get_context11517002
Ref: 24911517002
Ref: library/multiprocessing multiprocessing get_start_method11517668
Ref: 116011517668
Ref: library/multiprocessing multiprocessing set_executable11518530
Ref: 1aa711518530
Ref: library/multiprocessing multiprocessing set_forkserver_preload11519132
Ref: 185e11519132
Ref: library/multiprocessing multiprocessing set_start_method11519955
Ref: 24a11519955
Ref: Diversos<5>-Footnote-111521130
Node: Objetos de conexão11521195
Ref: library/multiprocessing connection-objects11521323
Ref: 351111521323
Ref: library/multiprocessing multiprocessing connection Connection11521690
Ref: 12dc11521690
Ref: library/multiprocessing multiprocessing connection Connection send11521741
Ref: 351311521741
Ref: library/multiprocessing multiprocessing connection Connection recv11522144
Ref: 351411522144
Ref: library/multiprocessing multiprocessing connection Connection fileno11522471
Ref: 351511522471
Ref: library/multiprocessing multiprocessing connection Connection close11522590
Ref: 351611522590
Ref: library/multiprocessing multiprocessing connection Connection poll11522741
Ref: 351711522741
Ref: library/multiprocessing multiprocessing connection Connection send_bytes11523269
Ref: 351811523269
Ref: library/multiprocessing multiprocessing connection Connection recv_bytes11523788
Ref: 351911523788
Ref: library/multiprocessing multiprocessing connection Connection recv_bytes_into11524480
Ref: 351a11524480
Ref: library/multiprocessing multiprocessing-recv-pickle-security11526406
Ref: 351b11526406
Node: Primitivas de sincronização11527185
Ref: library/multiprocessing synchronization-primitives11527331
Ref: 351c11527331
Ref: library/multiprocessing multiprocessing Barrier11527735
Ref: 34ec11527735
Ref: library/multiprocessing multiprocessing BoundedSemaphore11527908
Ref: 34ea11527908
Ref: library/multiprocessing multiprocessing Condition11528440
Ref: 34eb11528440
Ref: library/multiprocessing multiprocessing Event11528798
Ref: 1b0711528798
Ref: library/multiprocessing multiprocessing Lock11528880
Ref: 17bd11528880
Ref: library/multiprocessing multiprocessing Lock acquire11529833
Ref: 351d11529833
Ref: library/multiprocessing multiprocessing Lock release11531496
Ref: 351e11531496
Ref: library/multiprocessing multiprocessing Lock locked11531893
Ref: 17dd11531893
Ref: library/multiprocessing multiprocessing RLock11532051
Ref: 17be11532051
Ref: library/multiprocessing multiprocessing RLock acquire11532854
Ref: 351f11532854
Ref: library/multiprocessing multiprocessing RLock release11534620
Ref: 352011534620
Ref: library/multiprocessing multiprocessing RLock locked11535706
Ref: 17de11535706
Ref: library/multiprocessing multiprocessing Semaphore11535864
Ref: 34e911535864
Ref: Primitivas de sincronização-Footnote-111536805
Node: Objetos ctypes compartilhados11536869
Ref: library/multiprocessing shared-ctypes-objects11537009
Ref: 352111537009
Ref: library/multiprocessing multiprocessing Value11537214
Ref: 34e611537214
Ref: library/multiprocessing multiprocessing Array11538713
Ref: 34e711538713
Node: O módulo multiprocessing sharedctypes11540214
Ref: library/multiprocessing module-multiprocessing sharedctypes11540318
Ref: 9e11540318
Ref: library/multiprocessing the-multiprocessing-sharedctypes-module11540318
Ref: 352211540318
Ref: library/multiprocessing multiprocessing sharedctypes RawArray11540985
Ref: 352311540985
Ref: library/multiprocessing multiprocessing sharedctypes RawValue11541823
Ref: 352511541823
Ref: library/multiprocessing multiprocessing sharedctypes Array11542594
Ref: 352411542594
Ref: library/multiprocessing multiprocessing sharedctypes Value11543427
Ref: 352611543427
Ref: library/multiprocessing multiprocessing sharedctypes copy11544241
Ref: 352711544241
Ref: library/multiprocessing multiprocessing sharedctypes synchronized11544408
Ref: 102611544408
Node: Gerenciadores11547446
Ref: library/multiprocessing managers11547572
Ref: 352811547572
Ref: library/multiprocessing multiprocessing-managers11547572
Ref: 350011547572
Ref: library/multiprocessing multiprocessing Manager11547932
Ref: 24f11547932
Ref: library/multiprocessing module-multiprocessing managers11548279
Ref: 9b11548279
Ref: library/multiprocessing multiprocessing managers BaseManager11548468
Ref: 352911548468
Ref: library/multiprocessing multiprocessing managers BaseManager start11549910
Ref: 352a11549910
Ref: library/multiprocessing multiprocessing managers BaseManager get_server11550146
Ref: 352c11550146
Ref: library/multiprocessing multiprocessing managers BaseManager connect11550691
Ref: 352e11550691
Ref: library/multiprocessing multiprocessing managers BaseManager shutdown11550973
Ref: 352b11550973
Ref: library/multiprocessing multiprocessing managers BaseManager register11551210
Ref: 352f11551210
Ref: library/multiprocessing multiprocessing managers BaseManager address11553526
Ref: 352d11553526
Ref: library/multiprocessing multiprocessing managers SyncManager11554067
Ref: 17f811554067
Ref: library/multiprocessing multiprocessing managers SyncManager Barrier11554510
Ref: 353211554510
Ref: library/multiprocessing multiprocessing managers SyncManager BoundedSemaphore11554708
Ref: 353311554708
Ref: library/multiprocessing multiprocessing managers SyncManager Condition11554865
Ref: 353411554865
Ref: library/multiprocessing multiprocessing managers SyncManager Event11555245
Ref: 353511555245
Ref: library/multiprocessing multiprocessing managers SyncManager Lock11555373
Ref: 158911555373
Ref: library/multiprocessing multiprocessing managers SyncManager Namespace11555499
Ref: 353611555499
Ref: library/multiprocessing multiprocessing managers SyncManager Queue11555625
Ref: 305a11555625
Ref: library/multiprocessing multiprocessing managers SyncManager RLock11555758
Ref: 158a11555758
Ref: library/multiprocessing multiprocessing managers SyncManager Semaphore11555885
Ref: 158b11555885
Ref: library/multiprocessing multiprocessing managers SyncManager Array11556028
Ref: 353711556028
Ref: library/multiprocessing multiprocessing managers SyncManager Value11556128
Ref: 353811556128
Ref: library/multiprocessing multiprocessing managers SyncManager dict11556274
Ref: 353911556274
Ref: library/multiprocessing multiprocessing managers SyncManager list11556458
Ref: 353a11556458
Ref: library/multiprocessing multiprocessing managers SyncManager set11556608
Ref: 24e11556608
Ref: library/multiprocessing multiprocessing managers Namespace11557179
Ref: 34e811557179
Node: Customized managers11558020
Ref: library/multiprocessing customized-managers11558120
Ref: 353b11558120
Node: Using a remote manager11558892
Ref: library/multiprocessing using-a-remote-manager11558992
Ref: 353c11558992
Node: Objetos proxies11561133
Ref: library/multiprocessing multiprocessing-proxy-objects11561243
Ref: 24b11561243
Ref: library/multiprocessing proxy-objects11561243
Ref: 353d11561243
Ref: library/multiprocessing multiprocessing managers BaseProxy11564715
Ref: 353011564715
Ref: library/multiprocessing multiprocessing managers BaseProxy _callmethod11564837
Ref: 353111564837
Ref: library/multiprocessing multiprocessing managers BaseProxy _getvalue11566419
Ref: 353e11566419
Ref: library/multiprocessing multiprocessing managers BaseProxy __repr__11566580
Ref: 353f11566580
Ref: library/multiprocessing multiprocessing managers BaseProxy __str__11566667
Ref: 354011566667
Node: Limpeza<2>11566784
Ref: library/multiprocessing cleanup11566846
Ref: 354111566846
Node: Process Pools11567135
Ref: library/multiprocessing module-multiprocessing pool11567253
Ref: 9c11567253
Ref: library/multiprocessing process-pools11567253
Ref: 354211567253
Ref: library/multiprocessing multiprocessing pool Pool11567415
Ref: 116111567415
Ref: library/multiprocessing multiprocessing pool Pool apply11570238
Ref: 158711570238
Ref: library/multiprocessing multiprocessing pool Pool apply_async11570610
Ref: 158811570610
Ref: library/multiprocessing multiprocessing pool Pool map11571463
Ref: 12e111571463
Ref: library/multiprocessing multiprocessing pool Pool map_async11572249
Ref: 12e211572249
Ref: library/multiprocessing multiprocessing pool Pool imap11573105
Ref: 354611573105
Ref: library/multiprocessing multiprocessing pool Pool imap_unordered11573818
Ref: 354711573818
Ref: library/multiprocessing multiprocessing pool Pool starmap11574145
Ref: 12de11574145
Ref: library/multiprocessing multiprocessing pool Pool starmap_async11574506
Ref: 12df11574506
Ref: library/multiprocessing multiprocessing pool Pool close11574867
Ref: 354311574867
Ref: library/multiprocessing multiprocessing pool Pool terminate11575055
Ref: 354411575055
Ref: library/multiprocessing multiprocessing pool Pool join11575290
Ref: 354811575290
Ref: library/multiprocessing multiprocessing pool AsyncResult11575751
Ref: 354511575751
Ref: library/multiprocessing multiprocessing pool AsyncResult get11575910
Ref: 354911575910
Ref: library/multiprocessing multiprocessing pool AsyncResult wait11576276
Ref: 354a11576276
Ref: library/multiprocessing multiprocessing pool AsyncResult ready11576401
Ref: 354b11576401
Ref: library/multiprocessing multiprocessing pool AsyncResult successful11576479
Ref: 354c11576479
Node: Listeners and Clients11577774
Ref: library/multiprocessing listeners-and-clients11577896
Ref: 354d11577896
Ref: library/multiprocessing module-multiprocessing connection11577896
Ref: 9911577896
Ref: library/multiprocessing multiprocessing-listeners-clients11577896
Ref: 351211577896
Ref: library/multiprocessing multiprocessing connection deliver_challenge11578432
Ref: 354e11578432
Ref: library/multiprocessing multiprocessing connection answer_challenge11578838
Ref: 354f11578838
Ref: library/multiprocessing multiprocessing connection Client11579152
Ref: 355011579152
Ref: library/multiprocessing multiprocessing connection Listener11579923
Ref: 196011579923
Ref: library/multiprocessing multiprocessing connection Listener accept11581707
Ref: 191b11581707
Ref: library/multiprocessing multiprocessing connection Listener close11581990
Ref: 355211581990
Ref: library/multiprocessing multiprocessing connection Listener address11582291
Ref: 355311582291
Ref: library/multiprocessing multiprocessing connection Listener last_accepted11582386
Ref: 355411582386
Ref: library/multiprocessing multiprocessing connection wait11582817
Ref: 12db11582817
Node: Formatos de Endereços11586848
Ref: library/multiprocessing address-formats11586928
Ref: 355511586928
Ref: library/multiprocessing multiprocessing-address-formats11586928
Ref: 355111586928
Node: Authentication keys11587653
Ref: library/multiprocessing authentication-keys11587777
Ref: 355611587777
Ref: library/multiprocessing multiprocessing-auth-keys11587777
Ref: 34f611587777
Node: Gerando logs<2>11588961
Ref: library/multiprocessing logging11589096
Ref: 355711589096
Ref: library/multiprocessing multiprocessing get_logger11589374
Ref: 30b511589374
Ref: library/multiprocessing multiprocessing log_to_stderr11589893
Ref: 355811589893
Node: The multiprocessing dummy module11591000
Ref: library/multiprocessing module-multiprocessing dummy11591107
Ref: 9a11591107
Ref: library/multiprocessing the-multiprocessing-dummy-module11591107
Ref: 355911591107
Ref: library/multiprocessing multiprocessing pool ThreadPool11591632
Ref: 1bb311591632
Node: Programming guidelines11593395
Ref: library/multiprocessing multiprocessing-programming11593549
Ref: 34df11593549
Ref: library/multiprocessing programming-guidelines11593549
Ref: 355a11593549
Node: All start methods11593797
Ref: library/multiprocessing all-start-methods11593920
Ref: 355b11593920
Ref: library/multiprocessing multiprocessing-programming-spawn11599980
Ref: 34f211599980
Ref: All start methods-Footnote-111600017
Ref: All start methods-Footnote-211600081
Ref: All start methods-Footnote-311600145
Node: The spawn and forkserver start methods11600209
Ref: library/multiprocessing multiprocessing-programming-forkserver11600332
Ref: 1d911600332
Ref: library/multiprocessing the-spawn-and-forkserver-start-methods11600332
Ref: 355c11600332
Ref: library/multiprocessing multiprocessing-safe-main-import11601138
Ref: 355d11601138
Node: Exemplos<15>11602413
Ref: library/multiprocessing examples11602544
Ref: 355e11602544
Ref: library/multiprocessing multiprocessing-examples11602544
Ref: 350511602544
Node: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos11611456
Ref: library/multiprocessing shared_memory doc11611694
Ref: 355f11611694
Ref: library/multiprocessing shared_memory module-multiprocessing shared_memory11611694
Ref: 9d11611694
Ref: library/multiprocessing shared_memory multiprocessing-shared-memory-shared-memory-for-direct-access-across-processes11611694
Ref: 356011611694
Ref: library/multiprocessing shared_memory no-color11611694
Ref: 356111611694
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory11613468
Ref: 191411613468
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory close11617261
Ref: 356311617261
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory unlink11617819
Ref: 356411617819
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory buf11618564
Ref: 356511618564
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory name11618689
Ref: 356611618689
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory size11618809
Ref: 356711618809
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager11622019
Ref: 356211622019
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager SharedMemory11623586
Ref: 356811623586
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager ShareableList11623738
Ref: 356911623738
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList11625693
Ref: 1c0f11625693
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList count11628344
Ref: 356a11628344
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList index11628434
Ref: 356b11628434
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList format11628606
Ref: 356c11628606
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList shm11628794
Ref: 356d11628794
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-111631413
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-211631503
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-311631530
Node: O pacote concurrent11631586
Ref: library/concurrent doc11631820
Ref: 356e11631820
Ref: library/concurrent no-color11631820
Ref: 356f11631820
Ref: library/concurrent the-concurrent-package11631820
Ref: 357011631820
Node: concurrent futures — Launching parallel tasks11632092
Ref: library/concurrent futures doc11632307
Ref: 357111632307
Ref: library/concurrent futures concurrent-futures-launching-parallel-tasks11632307
Ref: 357211632307
Ref: library/concurrent futures module-concurrent futures11632307
Ref: 2411632307
Ref: library/concurrent futures no-color11632307
Ref: 357311632307
Ref: concurrent futures — Launching parallel tasks-Footnote-111633450
Ref: concurrent futures — Launching parallel tasks-Footnote-211633536
Ref: concurrent futures — Launching parallel tasks-Footnote-311633623
Node: Executor Objects11633714
Ref: library/concurrent futures executor-objects11633841
Ref: 357511633841
Ref: library/concurrent futures concurrent futures Executor11633894
Ref: 357411633894
Ref: library/concurrent futures concurrent futures Executor submit11634094
Ref: c6911634094
Ref: library/concurrent futures concurrent futures Executor map11634505
Ref: fd811634505
Ref: library/concurrent futures concurrent futures Executor shutdown11636394
Ref: ae011636394
Node: ThreadPoolExecutor11638564
Ref: library/concurrent futures threadpoolexecutor11638723
Ref: 357611638723
Ref: library/concurrent futures concurrent futures ThreadPoolExecutor11639793
Ref: 93e11639793
Node: Exemplo de ThreadPoolExecutor11642177
Ref: library/concurrent futures id111642261
Ref: 357811642261
Ref: library/concurrent futures threadpoolexecutor-example11642261
Ref: 13af11642261
Node: InterpreterPoolExecutor11643475
Ref: library/concurrent futures interpreterpoolexecutor11643639
Ref: 357911643639
Ref: library/concurrent futures concurrent futures InterpreterPoolExecutor11646339
Ref: 1d211646339
Ref: InterpreterPoolExecutor-Footnote-111648337
Node: `ProcessPoolExecutor`11648379
Ref: library/concurrent futures processpoolexecutor11648539
Ref: 357b11648539
Ref: library/concurrent futures concurrent futures ProcessPoolExecutor11649576
Ref: 1d611649576
Ref: library/concurrent futures concurrent futures ProcessPoolExecutor terminate_workers11653073
Ref: 1da11653073
Ref: library/concurrent futures concurrent futures ProcessPoolExecutor kill_workers11653565
Ref: 1db11653565
Node: ProcessPoolExecutor Example11654084
Ref: library/concurrent futures id211654169
Ref: 357d11654169
Ref: library/concurrent futures processpoolexecutor-example11654169
Ref: 13b011654169
Node: Future Objects11655075
Ref: library/concurrent futures future-objects11655228
Ref: 357e11655228
Ref: library/concurrent futures concurrent futures Future11655439
Ref: 13ae11655439
Ref: library/concurrent futures concurrent futures Future cancel11655680
Ref: 357f11655680
Ref: library/concurrent futures concurrent futures Future cancelled11655980
Ref: 358011655980
Ref: library/concurrent futures concurrent futures Future running11656081
Ref: 358111656081
Ref: library/concurrent futures concurrent futures Future done11656215
Ref: 358211656215
Ref: library/concurrent futures concurrent futures Future result11656341
Ref: 358311656341
Ref: library/concurrent futures concurrent futures Future exception11656999
Ref: 358411656999
Ref: library/concurrent futures concurrent futures Future add_done_callback11657640
Ref: 358511657640
Ref: library/concurrent futures concurrent futures Future set_running_or_notify_cancel11658479
Ref: 358611658479
Ref: library/concurrent futures concurrent futures Future set_result11659467
Ref: 358711659467
Ref: library/concurrent futures concurrent futures Future set_exception11659887
Ref: 358811659887
Node: Module Functions11660342
Ref: library/concurrent futures module-functions11660491
Ref: 358911660491
Ref: library/concurrent futures concurrent futures wait11660544
Ref: 1b0611660544
Ref: library/concurrent futures concurrent futures FIRST_COMPLETED11661864
Ref: 358a11661864
Ref: library/concurrent futures concurrent futures FIRST_EXCEPTION11662181
Ref: 358b11662181
Ref: library/concurrent futures concurrent futures ALL_COMPLETED11662702
Ref: 358c11662702
Ref: library/concurrent futures concurrent futures as_completed11662918
Ref: 190711662918
Ref: Module Functions-Footnote-111663957
Node: Exception classes11663999
Ref: library/concurrent futures exception-classes11664125
Ref: 358d11664125
Ref: library/concurrent futures concurrent futures CancelledError11664180
Ref: bc411664180
Ref: library/concurrent futures concurrent futures TimeoutError11664271
Ref: 358e11664271
Ref: library/concurrent futures concurrent futures BrokenExecutor11664538
Ref: 358f11664538
Ref: library/concurrent futures concurrent futures InvalidStateError11664801
Ref: 18a411664801
Ref: library/concurrent futures concurrent futures thread BrokenThreadPool11664990
Ref: 357711664990
Ref: library/concurrent futures concurrent futures interpreter BrokenInterpreterPool11665255
Ref: 359011665255
Ref: library/concurrent futures concurrent futures interpreter ExecutionFailed11665538
Ref: 357a11665538
Ref: library/concurrent futures concurrent futures process BrokenProcessPool11665823
Ref: 357c11665823
Node: concurrent interpreters — Múltiplos interpretadores no mesmo processo11666196
Ref: library/concurrent interpreters doc11666436
Ref: 359111666436
Ref: library/concurrent interpreters concurrent-interpreters-multiple-interpreters-in-the-same-process11666436
Ref: 359211666436
Ref: library/concurrent interpreters module-concurrent interpreters11666436
Ref: 2511666436
Ref: library/concurrent interpreters no-color11666436
Ref: 359311666436
Ref: library/concurrent interpreters interp-concurrency11667375
Ref: 359411667375
Ref: concurrent interpreters — Múltiplos interpretadores no mesmo processo-Footnote-111668027
Ref: concurrent interpreters — Múltiplos interpretadores no mesmo processo-Footnote-211668108
Ref: concurrent interpreters — Múltiplos interpretadores no mesmo processo-Footnote-311668150
Ref: concurrent interpreters — Múltiplos interpretadores no mesmo processo-Footnote-411668192
Node: Detalhes-chave11668234
Ref: library/concurrent interpreters key-details11668382
Ref: 359511668382
Ref: library/concurrent interpreters interp-isolation11668572
Ref: 359611668572
Node: Introdução<10>11668715
Ref: library/concurrent interpreters interpreters-intro11668886
Ref: 359711668886
Ref: library/concurrent interpreters introduction11668886
Ref: 359811668886
Node: Multiple Interpreters and Isolation11669748
Ref: library/concurrent interpreters multiple-interpreters-and-isolation11669870
Ref: 359911669870
Node: Running in an Interpreter11670846
Ref: library/concurrent interpreters running-in-an-interpreter11671004
Ref: 359a11671004
Ref: library/concurrent interpreters interp-call-in-thread11671508
Ref: 359b11671508
Node: Concurrency and Parallelism11671962
Ref: library/concurrent interpreters concurrency-and-parallelism11672119
Ref: 359c11672119
Node: Communication Between Interpreters11673698
Ref: library/concurrent interpreters communication-between-interpreters11673851
Ref: 359d11673851
Node: “Sharing” Objects11674312
Ref: library/concurrent interpreters interp-object-sharing11674429
Ref: 359f11674429
Ref: library/concurrent interpreters sharing-objects11674429
Ref: 35a011674429
Node: Referência<4>11675464
Ref: library/concurrent interpreters reference11675635
Ref: 35a211675635
Ref: library/concurrent interpreters concurrent interpreters list_all11675722
Ref: 35a311675722
Ref: library/concurrent interpreters concurrent interpreters get_current11675883
Ref: 35a511675883
Ref: library/concurrent interpreters concurrent interpreters get_main11676038
Ref: 35a611676038
Ref: library/concurrent interpreters concurrent interpreters create11676320
Ref: 174611676320
Ref: library/concurrent interpreters concurrent interpreters create_queue11676484
Ref: 359e11676484
Node: Objetos interpretador11676743
Ref: library/concurrent interpreters interpreter-objects11676838
Ref: 35a711676838
Ref: library/concurrent interpreters concurrent interpreters Interpreter11676901
Ref: 35a411676901
Ref: library/concurrent interpreters concurrent interpreters Interpreter id11677173
Ref: 35a811677173
Ref: library/concurrent interpreters concurrent interpreters Interpreter whence11677271
Ref: 35a911677271
Ref: library/concurrent interpreters concurrent interpreters Interpreter is_running11677391
Ref: 35aa11677391
Ref: library/concurrent interpreters concurrent interpreters Interpreter close11677571
Ref: 35ab11677571
Ref: library/concurrent interpreters concurrent interpreters Interpreter prepare_main11677647
Ref: 35ac11677647
Ref: library/concurrent interpreters concurrent interpreters Interpreter exec11677948
Ref: 35ad11677948
Ref: library/concurrent interpreters concurrent interpreters Interpreter call11678086
Ref: 35ae11678086
Ref: library/concurrent interpreters concurrent interpreters Interpreter call_in_thread11678265
Ref: 35af11678265
Node: Exceções<13>11678419
Ref: library/concurrent interpreters exceptions11678557
Ref: 35b011678557
Ref: library/concurrent interpreters concurrent interpreters InterpreterError11678598
Ref: 35b111678598
Ref: library/concurrent interpreters concurrent interpreters InterpreterNotFoundError11678786
Ref: 35b211678786
Ref: library/concurrent interpreters concurrent interpreters ExecutionFailed11678990
Ref: 35b311678990
Ref: library/concurrent interpreters concurrent interpreters ExecutionFailed excinfo11679207
Ref: 35b411679207
Ref: library/concurrent interpreters concurrent interpreters NotShareableError11679323
Ref: 35b511679323
Node: Communicating Between Interpreters11679525
Ref: library/concurrent interpreters communicating-between-interpreters11679633
Ref: 35b611679633
Ref: library/concurrent interpreters concurrent interpreters Queue11679724
Ref: 35a111679724
Ref: library/concurrent interpreters concurrent interpreters Queue id11680142
Ref: 35b711680142
Ref: library/concurrent interpreters concurrent interpreters QueueEmptyError11680223
Ref: 35b811680223
Ref: library/concurrent interpreters concurrent interpreters QueueFullError11680437
Ref: 35b911680437
Node: Uso básico<3>11680643
Ref: library/concurrent interpreters basic-usage11680789
Ref: 35ba11680789
Node: subprocess — Gerenciamento de subprocessos11681447
Ref: library/subprocess doc11681670
Ref: 35bb11681670
Ref: library/subprocess module-subprocess11681670
Ref: dc11681670
Ref: library/subprocess no-color11681670
Ref: 35bc11681670
Ref: library/subprocess subprocess-subprocess-management11681670
Ref: 35bd11681670
Ref: subprocess — Gerenciamento de subprocessos-Footnote-111682865
Ref: subprocess — Gerenciamento de subprocessos-Footnote-211682935
Node: Usando o módulo subprocess11682977
Ref: library/subprocess using-the-subprocess-module11683123
Ref: 35be11683123
Ref: library/subprocess subprocess run11683449
Ref: d7311683449
Ref: library/subprocess subprocess CompletedProcess11688289
Ref: 106911688289
Ref: library/subprocess subprocess CompletedProcess args11688427
Ref: 35c211688427
Ref: library/subprocess subprocess CompletedProcess returncode11688554
Ref: 35c311688554
Ref: library/subprocess subprocess CompletedProcess stdout11688831
Ref: 35c411688831
Ref: library/subprocess subprocess CompletedProcess stderr11689278
Ref: 35c511689278
Ref: library/subprocess subprocess CompletedProcess check_returncode11689539
Ref: 35c611689539
Ref: library/subprocess subprocess DEVNULL11689725
Ref: 134a11689725
Ref: library/subprocess subprocess PIPE11689977
Ref: d7411689977
Ref: library/subprocess subprocess STDOUT11690245
Ref: 35c011690245
Ref: library/subprocess subprocess SubprocessError11690456
Ref: 35c711690456
Ref: library/subprocess subprocess TimeoutExpired11690597
Ref: 17ba11690597
Ref: library/subprocess subprocess TimeoutExpired cmd11690771
Ref: 35c811690771
Ref: library/subprocess subprocess TimeoutExpired timeout11690857
Ref: 35c911690857
Ref: library/subprocess subprocess TimeoutExpired output11690922
Ref: 35ca11690922
Ref: library/subprocess subprocess TimeoutExpired stdout11691342
Ref: 35cb11691342
Ref: library/subprocess subprocess TimeoutExpired stderr11691441
Ref: 35cc11691441
Ref: library/subprocess subprocess CalledProcessError11691968
Ref: 152011691968
Ref: library/subprocess subprocess CalledProcessError returncode11692265
Ref: 35ce11692265
Ref: library/subprocess subprocess CalledProcessError cmd11692451
Ref: 35cf11692451
Ref: library/subprocess subprocess CalledProcessError output11692537
Ref: 35d011692537
Ref: library/subprocess subprocess CalledProcessError stdout11692714
Ref: 35d111692714
Ref: library/subprocess subprocess CalledProcessError stderr11692813
Ref: 35d211692813
Node: Argumentos usados frequentemente11693145
Ref: library/subprocess frequently-used-arguments11693266
Ref: 35bf11693266
Ref: library/subprocess id111693266
Ref: 35d311693266
Node: Construtor Popen11697817
Ref: library/subprocess popen-constructor11697961
Ref: 35d811697961
Ref: library/subprocess subprocess Popen11698282
Ref: 4b111698282
Ref: Construtor Popen-Footnote-111716736
Node: Exceções<14>11716796
Ref: library/subprocess exceptions11716899
Ref: 35e911716899
Node: Considerações de Segurança11718208
Ref: library/subprocess security-considerations11718376
Ref: 35d711718376
Ref: library/subprocess subprocess-security11718376
Ref: 35ea11718376
Ref: Considerações de Segurança-Footnote-111719501
Ref: Considerações de Segurança-Footnote-211719571
Node: Objetos Popen11719627
Ref: library/subprocess popen-objects11719789
Ref: 35ec11719789
Ref: library/subprocess subprocess Popen poll11719905
Ref: 35ed11719905
Ref: library/subprocess subprocess Popen wait11720065
Ref: ed411720065
Ref: library/subprocess subprocess Popen communicate11721078
Ref: 35c111721078
Ref: library/subprocess subprocess Popen send_signal11722835
Ref: 15cf11722835
Ref: library/subprocess subprocess Popen terminate11723225
Ref: 15cd11723225
Ref: library/subprocess subprocess Popen kill11723445
Ref: 15ce11723445
Ref: library/subprocess subprocess Popen args11723752
Ref: 35ee11723752
Ref: library/subprocess subprocess Popen stdin11723957
Ref: 35d411723957
Ref: library/subprocess subprocess Popen stdout11724397
Ref: 35d511724397
Ref: library/subprocess subprocess Popen stderr11724909
Ref: 35d611724909
Ref: library/subprocess subprocess Popen pid11725681
Ref: 35ef11725681
Ref: library/subprocess subprocess Popen returncode11725867
Ref: c7711725867
Node: Windows Popen Helpers11726362
Ref: library/subprocess windows-popen-helpers11726525
Ref: 35f011726525
Ref: library/subprocess subprocess STARTUPINFO11726679
Ref: 35dc11726679
Ref: library/subprocess subprocess STARTUPINFO dwFlags11727100
Ref: 35f111727100
Ref: library/subprocess subprocess STARTUPINFO hStdInput11727413
Ref: 35f211727413
Ref: library/subprocess subprocess STARTUPINFO hStdOutput11727734
Ref: 35f411727734
Ref: library/subprocess subprocess STARTUPINFO hStdError11728044
Ref: 35f511728044
Ref: library/subprocess subprocess STARTUPINFO wShowWindow11728351
Ref: 35f611728351
Ref: library/subprocess subprocess STARTUPINFO lpAttributeList11728842
Ref: dfc11728842
Ref: Windows Popen Helpers-Footnote-111730105
Ref: Windows Popen Helpers-Footnote-211730177
Ref: Windows Popen Helpers-Footnote-311730249
Node: Constantes do Windows11730338
Ref: library/subprocess windows-constants11730417
Ref: 35f911730417
Ref: library/subprocess subprocess STD_INPUT_HANDLE11730547
Ref: 35fa11730547
Ref: library/subprocess subprocess STD_OUTPUT_HANDLE11730684
Ref: 35fb11730684
Ref: library/subprocess subprocess STD_ERROR_HANDLE11730832
Ref: 35fc11730832
Ref: library/subprocess subprocess SW_HIDE11730978
Ref: 35f811730978
Ref: library/subprocess subprocess STARTF_USESTDHANDLES11731060
Ref: 35f311731060
Ref: library/subprocess subprocess STARTF_USESHOWWINDOW11731291
Ref: 35f711731291
Ref: library/subprocess subprocess STARTF_FORCEONFEEDBACK11731444
Ref: 35fd11731444
Ref: library/subprocess subprocess STARTF_FORCEOFFFEEDBACK11731743
Ref: 35fe11731743
Ref: library/subprocess subprocess CREATE_NEW_CONSOLE11731958
Ref: 35dd11731958
Ref: library/subprocess subprocess CREATE_NEW_PROCESS_GROUP11732105
Ref: 35de11732105
Ref: library/subprocess subprocess ABOVE_NORMAL_PRIORITY_CLASS11732428
Ref: 35df11732428
Ref: library/subprocess subprocess BELOW_NORMAL_PRIORITY_CLASS11732639
Ref: 35e011732639
Ref: library/subprocess subprocess HIGH_PRIORITY_CLASS11732849
Ref: 35e111732849
Ref: library/subprocess subprocess IDLE_PRIORITY_CLASS11733042
Ref: 35e211733042
Ref: library/subprocess subprocess NORMAL_PRIORITY_CLASS11733245
Ref: 35e311733245
Ref: library/subprocess subprocess REALTIME_PRIORITY_CLASS11733453
Ref: 35e411733453
Ref: library/subprocess subprocess CREATE_NO_WINDOW11733994
Ref: 35e511733994
Ref: library/subprocess subprocess DETACHED_PROCESS11734183
Ref: 35e611734183
Ref: library/subprocess subprocess CREATE_DEFAULT_ERROR_MODE11734444
Ref: 35e711734444
Ref: library/subprocess subprocess CREATE_BREAKAWAY_FROM_JOB11734851
Ref: 35e811734851
Node: API de alto nível mais antiga11735055
Ref: library/subprocess call-function-trio11735257
Ref: 35ff11735257
Ref: library/subprocess older-high-level-api11735257
Ref: 360011735257
Ref: library/subprocess subprocess call11735546
Ref: d7511735546
Ref: library/subprocess subprocess check_call11736957
Ref: 35cd11736957
Ref: library/subprocess subprocess check_output11738649
Ref: 11b811738649
Node: Replacing Older Functions with the subprocess Module11741266
Ref: library/subprocess replacing-older-functions-with-the-subprocess-module11741480
Ref: 360111741480
Ref: library/subprocess subprocess-replacements11741480
Ref: 138411741480
Node: Replacing /bin/sh shell command substitution11742562
Ref: library/subprocess replacing-bin-sh-shell-command-substitution11742728
Ref: 360211742728
Node: Replacing shell pipeline11742934
Ref: library/subprocess replacing-shell-pipeline11743131
Ref: 360311743131
Node: Substituindo os system11743784
Ref: library/subprocess replacing-os-system11743966
Ref: 360411743966
Node: Replacing the os spawn family11744913
Ref: library/subprocess replacing-the-os-spawn-family11745089
Ref: 360511745089
Node: Replacing os popen11745722
Ref: library/subprocess replacing-os-popen11745867
Ref: 360611745867
Node: Legacy Shell Invocation Functions11746277
Ref: library/subprocess legacy-shell-invocation-functions11746469
Ref: 360711746469
Ref: library/subprocess subprocess getstatusoutput11746833
Ref: 11ba11746833
Ref: library/subprocess subprocess getoutput11748179
Ref: 11b911748179
Node: Notas<2>11748758
Ref: library/subprocess notes11748889
Ref: 360811748889
Node: Timeout Behavior11749081
Ref: library/subprocess subprocess-timeout-behavior11749214
Ref: 360911749214
Ref: library/subprocess timeout-behavior11749214
Ref: 360a11749214
Node: Converter uma sequência de argumentos em uma string no Windows11750001
Ref: library/subprocess converting-an-argument-sequence-to-a-string-on-windows11750169
Ref: 360b11750169
Ref: library/subprocess converting-argument-sequence11750169
Ref: 35d911750169
Node: Disable use of posix_spawn11751351
Ref: library/subprocess disable-posix-spawn11751494
Ref: 360c11751494
Ref: library/subprocess disable-use-of-posix-spawn11751494
Ref: 360d11751494
Node: sched — Agendador de eventos11752339
Ref: library/sched doc11752526
Ref: 360e11752526
Ref: library/sched module-sched11752526
Ref: c411752526
Ref: library/sched no-color11752526
Ref: 360f11752526
Ref: library/sched sched-event-scheduler11752526
Ref: 361011752526
Ref: library/sched sched scheduler11752810
Ref: 132311752810
Ref: sched — Agendador de eventos-Footnote-111754926
Node: Objetos Scheduler11754991
Ref: library/sched id111755075
Ref: 361111755075
Ref: library/sched scheduler-objects11755075
Ref: 361211755075
Ref: library/sched sched scheduler enterabs11755209
Ref: 132511755209
Ref: library/sched sched scheduler enter11756144
Ref: 132411756144
Ref: library/sched sched scheduler cancel11756569
Ref: 1bd311756569
Ref: library/sched sched scheduler empty11756746
Ref: 361311756746
Ref: library/sched sched scheduler run11756840
Ref: 132211756840
Ref: library/sched sched scheduler queue11757975
Ref: 361411757975
Node: queue — A synchronized queue class11758254
Ref: library/queue doc11758435
Ref: 361511758435
Ref: library/queue module-queue11758435
Ref: bb11758435
Ref: library/queue no-color11758435
Ref: 361611758435
Ref: library/queue queue-a-synchronized-queue-class11758435
Ref: 361711758435
Ref: library/queue queue Queue11759761
Ref: 158611759761
Ref: library/queue queue LifoQueue11760126
Ref: 254711760126
Ref: library/queue queue PriorityQueue11760495
Ref: 254811760495
Ref: library/queue queue SimpleQueue11761493
Ref: d5511761493
Ref: library/queue queue Empty11761675
Ref: 350111761675
Ref: library/queue queue Full11761861
Ref: 350211761861
Ref: library/queue queue ShutDown11762045
Ref: 53d11762045
Ref: queue — A synchronized queue class-Footnote-111762339
Node: Objetos Queue11762404
Ref: library/queue queue-objects11762518
Ref: 361a11762518
Ref: library/queue queueobjects11762518
Ref: 361b11762518
Ref: library/queue queue Queue qsize11762698
Ref: 361c11762698
Ref: library/queue queue Queue empty11762928
Ref: 361d11762928
Ref: library/queue queue Queue full11763258
Ref: 361e11763258
Ref: library/queue queue Queue put11763584
Ref: 361911763584
Ref: library/queue queue Queue put_nowait11764244
Ref: 305811764244
Ref: library/queue queue Queue get11764332
Ref: 305911764332
Ref: library/queue queue Queue get_nowait11765370
Ref: 361811765370
Ref: library/queue queue Queue task_done11765564
Ref: 34fd11765564
Ref: library/queue queue Queue join11766217
Ref: 34fe11766217
Node: Waiting for task completion11766720
Ref: library/queue waiting-for-task-completion11766824
Ref: 361f11766824
Node: Terminating queues11767478
Ref: library/queue terminating-queues11767582
Ref: 362011767582
Ref: library/queue queue Queue shutdown11767768
Ref: 53c11767768
Node: Objetos SimpleQueue11769125
Ref: library/queue simplequeue-objects11769239
Ref: 362111769239
Ref: library/queue queue SimpleQueue qsize11769375
Ref: 362211769375
Ref: library/queue queue SimpleQueue empty11769542
Ref: 362311769542
Ref: library/queue queue SimpleQueue put11769760
Ref: 362411769760
Ref: library/queue queue SimpleQueue put_nowait11770534
Ref: 362511770534
Ref: library/queue queue SimpleQueue get11770697
Ref: 362611770697
Ref: library/queue queue SimpleQueue get_nowait11771280
Ref: 362711771280
Node: contextvars — Variáveis de contexto11771734
Ref: library/contextvars doc11771932
Ref: 362811771932
Ref: library/contextvars contextvars-context-variables11771932
Ref: 362911771932
Ref: library/contextvars module-contextvars11771932
Ref: 2811771932
Ref: library/contextvars no-color11771932
Ref: 362a11771932
Ref: contextvars — Variáveis de contexto-Footnote-111772883
Node: Variáveis de contexto11772925
Ref: library/contextvars context-variables11773063
Ref: 362b11773063
Ref: library/contextvars contextvars ContextVar11773129
Ref: 17db11773129
Ref: library/contextvars contextvars ContextVar name11773925
Ref: 362d11773925
Ref: library/contextvars contextvars ContextVar get11774064
Ref: 362c11774064
Ref: library/contextvars contextvars ContextVar set11774552
Ref: 362e11774552
Ref: library/contextvars contextvars ContextVar reset11774972
Ref: 362f11774972
Ref: library/contextvars contextvars Token11775529
Ref: 1e111775529
Ref: library/contextvars contextvars Token var11776289
Ref: 363011776289
Ref: library/contextvars contextvars Token old_value11776432
Ref: 363111776432
Ref: library/contextvars contextvars Token MISSING11776757
Ref: 176a11776757
Node: Gerenciamento de contexto manual11776854
Ref: library/contextvars manual-context-management11777018
Ref: 363211777018
Ref: library/contextvars contextvars copy_context11777105
Ref: 34b611777105
Ref: library/contextvars contextvars Context11777605
Ref: 17711777605
Ref: library/contextvars contextvars Context run11779624
Ref: 189e11779624
Ref: library/contextvars contextvars Context copy11780983
Ref: 363311780983
Ref: library/contextvars contextvars Context get11781445
Ref: 363411781445
Ref: library/contextvars contextvars Context keys11781909
Ref: 363511781909
Ref: library/contextvars contextvars Context values11782008
Ref: 363611782008
Ref: library/contextvars contextvars Context items11782131
Ref: 363711782131
Node: Suporte a asyncio11782287
Ref: library/contextvars asyncio-support11782420
Ref: 363811782420
Node: _thread— API de segmentação de baixo nível11784190
Ref: library/_thread doc11784343
Ref: 363911784343
Ref: library/_thread module-_thread11784343
Ref: 211784343
Ref: library/_thread no-color11784343
Ref: 363a11784343
Ref: library/_thread thread-low-level-threading-api11784343
Ref: 363b11784343
Ref: library/_thread thread error11785163
Ref: 363c11785163
Ref: library/_thread thread LockType11785351
Ref: 363d11785351
Ref: library/_thread thread start_new_thread11785421
Ref: 4ae11785421
Ref: library/_thread thread interrupt_main11786548
Ref: a3a11786548
Ref: library/_thread thread exit11787508
Ref: 363e11787508
Ref: library/_thread thread allocate_lock11787658
Ref: 363f11787658
Ref: library/_thread thread get_ident11787821
Ref: 364011787821
Ref: library/_thread thread get_native_id11788253
Ref: 364111788253
Ref: library/_thread thread stack_size11788861
Ref: 364211788861
Ref: library/_thread thread TIMEOUT_MAX11790293
Ref: 364311790293
Ref: library/_thread thread lock acquire11790605
Ref: 364411790605
Ref: library/_thread thread lock release11791917
Ref: 364511791917
Ref: library/_thread thread lock locked11792066
Ref: 364611792066
Node: Comunicação em Rede e Interprocesso11793046
Ref: library/ipc doc11793219
Ref: 364711793219
Ref: library/ipc ipc11793219
Ref: 364811793219
Ref: library/ipc networking-and-interprocess-communication11793219
Ref: 364911793219
Ref: library/ipc no-color11793219
Ref: 364a11793219
Node: asyncio — E/S assíncrona11794075
Ref: library/asyncio doc11794229
Ref: 364b11794229
Ref: library/asyncio asyncio-asynchronous-i-o11794229
Ref: 364c11794229
Ref: library/asyncio module-asyncio11794229
Ref: b11794229
Ref: library/asyncio asyncio-cli11796165
Ref: 365811796165
Node: Runners11797286
Ref: library/asyncio-runner doc11797386
Ref: 365911797386
Ref: library/asyncio-runner runners11797386
Ref: 365a11797386
Ref: Runners-Footnote-111797808
Node: Executando um programa asyncio11797884
Ref: library/asyncio-runner running-an-asyncio-program11797989
Ref: 365b11797989
Ref: library/asyncio-runner asyncio run11798070
Ref: 2f111798070
Node: Runner context manager11800153
Ref: library/asyncio-runner runner-context-manager11800297
Ref: 365d11800297
Ref: library/asyncio-runner asyncio Runner11800362
Ref: 2f311800362
Ref: library/asyncio-runner asyncio Runner run11801526
Ref: 18a011801526
Ref: library/asyncio-runner asyncio Runner close11802252
Ref: 365e11802252
Ref: library/asyncio-runner asyncio Runner get_loop11802475
Ref: 365f11802475
Node: Handling Keyboard Interruption11802918
Ref: library/asyncio-runner handling-keyboard-interruption11803023
Ref: 366011803023
Node: Corrotinas e Tarefas11804538
Ref: library/asyncio-task doc11804654
Ref: 366111804654
Ref: library/asyncio-task coroutines-and-tasks11804654
Ref: 366211804654
Ref: library/asyncio-task no-color11804654
Ref: 366311804654
Node: Corrotinas<3>11805181
Ref: library/asyncio-task coroutine11805272
Ref: 364e11805272
Ref: library/asyncio-task coroutines11805272
Ref: 366411805272
Ref: Corrotinas<3>-Footnote-111808683
Node: Aguardáveis11808762
Ref: library/asyncio-task asyncio-awaitables11808877
Ref: 366511808877
Ref: library/asyncio-task awaitables11808877
Ref: 366611808877
Node: Criando Tarefas11811681
Ref: library/asyncio-task creating-tasks11811800
Ref: 366711811800
Ref: library/asyncio-task asyncio create_task11811959
Ref: 1c911811959
Ref: Criando Tarefas-Footnote-111814623
Node: Task Cancellation11814696
Ref: library/asyncio-task task-cancellation11814814
Ref: 366811814814
Node: Task Groups11815884
Ref: library/asyncio-task task-groups11815995
Ref: 366911815995
Ref: library/asyncio-task taskgroups11815995
Ref: 366a11815995
Ref: library/asyncio-task asyncio TaskGroup11816162
Ref: 4cb11816162
Ref: library/asyncio-task asyncio TaskGroup create_task11816433
Ref: 1cb11816433
Node: Terminating a Task Group11820581
Ref: library/asyncio-task terminating-a-task-group11820653
Ref: 366b11820653
Node: Dormindo11821982
Ref: library/asyncio-task sleeping11822111
Ref: 366c11822111
Ref: library/asyncio-task asyncio sleep11822150
Ref: c5811822150
Ref: library/asyncio-task asyncio-example-sleep11822714
Ref: 366d11822714
Node: Executando tarefas concorrentemente11823380
Ref: library/asyncio-task running-tasks-concurrently11823516
Ref: 366e11823516
Ref: library/asyncio-task asyncio gather11823609
Ref: 80811823609
Ref: library/asyncio-task asyncio-example-gather11825493
Ref: 366f11825493
Node: Eager Task Factory11827665
Ref: library/asyncio-task eager-task-factory11827823
Ref: 367011827823
Ref: library/asyncio-task id111827823
Ref: 367111827823
Ref: library/asyncio-task asyncio eager_task_factory11827882
Ref: 69711827882
Ref: library/asyncio-task asyncio create_eager_task_factory11829033
Ref: 69811829033
Node: Protegendo contra cancelamento11829708
Ref: library/asyncio-task shielding-from-cancellation11829843
Ref: 367211829843
Ref: library/asyncio-task asyncio shield11829926
Ref: c5911829926
Node: Tempo limite11831822
Ref: library/asyncio-task timeouts11831959
Ref: 367311831959
Ref: library/asyncio-task asyncio timeout11832006
Ref: 80911832006
Ref: library/asyncio-task asyncio Timeout11833749
Ref: 197e11833749
Ref: library/asyncio-task asyncio Timeout when11834231
Ref: 367511834231
Ref: library/asyncio-task asyncio Timeout reschedule11834404
Ref: 367411834404
Ref: library/asyncio-task asyncio Timeout expired11834510
Ref: 367611834510
Ref: library/asyncio-task asyncio timeout_at11835356
Ref: 1ac511835356
Ref: library/asyncio-task asyncio wait_for11835976
Ref: 80a11835976
Ref: library/asyncio-task asyncio-example-waitfor11836866
Ref: 367711836866
Node: Primitivas de Espera11837705
Ref: library/asyncio-task waiting-primitives11837833
Ref: 367811837833
Ref: library/asyncio-task asyncio wait11837896
Ref: 69c11837896
Ref: library/asyncio-task asyncio FIRST_COMPLETED11839140
Ref: 367911839140
Ref: library/asyncio-task asyncio FIRST_EXCEPTION11839457
Ref: 367a11839457
Ref: library/asyncio-task asyncio ALL_COMPLETED11839978
Ref: 367b11839978
Ref: library/asyncio-task asyncio as_completed11840571
Ref: 4c011840571
Node: Executando em Threads11843475
Ref: library/asyncio-task running-in-threads11843627
Ref: 367c11843627
Ref: library/asyncio-task asyncio to_thread11843692
Ref: adb11843692
Node: Agendando a partir de outras Threads11846056
Ref: library/asyncio-task scheduling-from-other-threads11846202
Ref: 367d11846202
Ref: library/asyncio-task asyncio run_coroutine_threadsafe11846297
Ref: a7811846297
Node: Introspecção11849696
Ref: library/asyncio-task introspection11849832
Ref: 367f11849832
Ref: library/asyncio-task asyncio current_task11849881
Ref: 69a11849881
Ref: library/asyncio-task asyncio all_tasks11850199
Ref: b4511850199
Ref: library/asyncio-task asyncio iscoroutine11850500
Ref: 69b11850500
Node: Objeto Task11850630
Ref: library/asyncio-task asyncio-task-obj11850721
Ref: 368011850721
Ref: library/asyncio-task task-object11850721
Ref: 368111850721
Ref: library/asyncio-task asyncio Task11850766
Ref: 1c711850766
Ref: library/asyncio-task asyncio Task done11853719
Ref: 368411853719
Ref: library/asyncio-task asyncio Task result11853971
Ref: 368511853971
Ref: library/asyncio-task asyncio Task exception11854472
Ref: 368711854472
Ref: library/asyncio-task asyncio Task add_done_callback11854980
Ref: 368811854980
Ref: library/asyncio-task asyncio Task remove_done_callback11855379
Ref: 368911855379
Ref: library/asyncio-task asyncio Task get_stack11855726
Ref: 368a11855726
Ref: library/asyncio-task asyncio Task print_stack11856910
Ref: 1a0811856910
Ref: library/asyncio-task asyncio Task get_coro11857436
Ref: bc511857436
Ref: library/asyncio-task asyncio Task get_context11857854
Ref: 368b11857854
Ref: library/asyncio-task asyncio Task get_name11858024
Ref: bc711858024
Ref: library/asyncio-task asyncio Task set_name11858316
Ref: bc611858316
Ref: library/asyncio-task asyncio Task cancel11858670
Ref: 4cd11858670
Ref: library/asyncio-task asyncio-example-task-cancel11859887
Ref: 368c11859887
Ref: library/asyncio-task asyncio Task cancelled11861147
Ref: 368211861147
Ref: library/asyncio-task asyncio Task uncancel11861439
Ref: 4d011861439
Ref: library/asyncio-task asyncio Task cancelling11863756
Ref: 4cf11863756
Node: Streams11864572
Ref: library/asyncio-stream doc11864707
Ref: 368d11864707
Ref: library/asyncio-stream asyncio-streams11864707
Ref: 364f11864707
Ref: library/asyncio-stream no-color11864707
Ref: 368e11864707
Ref: library/asyncio-stream streams11864707
Ref: 368f11864707
Ref: library/asyncio-stream asyncio-example-stream11865038
Ref: 369011865038
Ref: library/asyncio-stream asyncio open_connection11865814
Ref: d0211865814
Ref: library/asyncio-stream asyncio start_server11867142
Ref: d0311867142
Ref: library/asyncio-stream asyncio open_unix_connection11868831
Ref: 369411868831
Ref: library/asyncio-stream asyncio start_unix_server11869819
Ref: 369611869819
Ref: Streams-Footnote-111871217
Node: StreamReader11871293
Ref: library/asyncio-stream streamreader11871370
Ref: 369711871370
Ref: library/asyncio-stream asyncio StreamReader11871417
Ref: 1b6811871417
Ref: library/asyncio-stream asyncio StreamReader feed_eof11871807
Ref: 369811871807
Ref: library/asyncio-stream asyncio StreamReader read11871870
Ref: 369911871870
Ref: library/asyncio-stream asyncio StreamReader readline11872500
Ref: 369a11872500
Ref: library/asyncio-stream asyncio StreamReader readexactly11872872
Ref: e6a11872872
Ref: library/asyncio-stream asyncio StreamReader readuntil11873178
Ref: 4ca11873178
Ref: library/asyncio-stream asyncio StreamReader at_eof11874526
Ref: 369d11874526
Node: StreamWriter11874660
Ref: library/asyncio-stream streamwriter11874758
Ref: 369e11874758
Ref: library/asyncio-stream asyncio StreamWriter11874805
Ref: 19af11874805
Ref: library/asyncio-stream asyncio StreamWriter write11875097
Ref: 369f11875097
Ref: library/asyncio-stream asyncio StreamWriter writelines11875598
Ref: 36a011875598
Ref: library/asyncio-stream asyncio StreamWriter close11876035
Ref: 369211876035
Ref: library/asyncio-stream asyncio StreamWriter can_write_eof11876309
Ref: 36a111876309
Ref: library/asyncio-stream asyncio StreamWriter write_eof11876484
Ref: 36a211876484
Ref: library/asyncio-stream asyncio StreamWriter transport11876636
Ref: 36a311876636
Ref: library/asyncio-stream asyncio StreamWriter get_extra_info11876718
Ref: 36a411876718
Ref: library/asyncio-stream asyncio StreamWriter drain11876903
Ref: 1a5711876903
Ref: library/asyncio-stream asyncio StreamWriter start_tls11877564
Ref: 80e11877564
Ref: library/asyncio-stream asyncio StreamWriter is_closing11878585
Ref: cf611878585
Ref: library/asyncio-stream asyncio StreamWriter wait_closed11878755
Ref: cf511878755
Node: Exemplos<16>11879084
Ref: library/asyncio-stream examples11879161
Ref: 369111879161
Node: Cliente para eco TCP usando streams11879380
Ref: library/asyncio-stream asyncio-tcp-echo-client-streams11879504
Ref: 36a511879504
Ref: library/asyncio-stream tcp-echo-client-using-streams11879504
Ref: 36a611879504
Node: Servidor eco TCP usando streams11880324
Ref: library/asyncio-stream asyncio-tcp-echo-server-streams11880476
Ref: 36a811880476
Ref: library/asyncio-stream tcp-echo-server-using-streams11880476
Ref: 36a911880476
Node: Obtém headers HTTP11881534
Ref: library/asyncio-stream get-http-headers11881716
Ref: 36ab11881716
Node: Registra um soquete aberto para aguardar por dados usando streams11882994
Ref: library/asyncio-stream asyncio-example-create-connection-streams11883136
Ref: 36ac11883136
Ref: library/asyncio-stream register-an-open-socket-to-wait-for-data-using-streams11883136
Ref: 36ad11883136
Node: Synchronization Primitives11884659
Ref: library/asyncio-sync doc11884786
Ref: 36b111884786
Ref: library/asyncio-sync asyncio-sync11884786
Ref: 365211884786
Ref: library/asyncio-sync no-color11884786
Ref: 36b211884786
Ref: library/asyncio-sync synchronization-primitives11884786
Ref: 36b311884786
Ref: Synchronization Primitives-Footnote-111885867
Node: Lock11885940
Ref: library/asyncio-sync lock11886022
Ref: 36b411886022
Ref: library/asyncio-sync asyncio Lock11886053
Ref: c5a11886053
Ref: library/asyncio-sync asyncio Lock acquire11886717
Ref: 36b511886717
Ref: library/asyncio-sync asyncio Lock release11887208
Ref: 36b611887208
Ref: library/asyncio-sync asyncio Lock locked11887426
Ref: 36b711887426
Node: Evento11887509
Ref: library/asyncio-sync event11887610
Ref: 36b811887610
Ref: library/asyncio-sync asyncio Event11887645
Ref: 2f211887645
Ref: library/asyncio-sync asyncio-example-sync-event11888176
Ref: 36bc11888176
Ref: library/asyncio-sync asyncio Event wait11888805
Ref: 36bb11888805
Ref: library/asyncio-sync asyncio Event set11889012
Ref: 36b911889012
Ref: library/asyncio-sync asyncio Event clear11889153
Ref: 36ba11889153
Ref: library/asyncio-sync asyncio Event is_set11889355
Ref: 36bd11889355
Node: Condição11889434
Ref: library/asyncio-sync condition11889540
Ref: 36be11889540
Ref: library/asyncio-sync asyncio Condition11889581
Ref: c5b11889581
Ref: library/asyncio-sync asyncio Condition acquire11890815
Ref: 36bf11890815
Ref: library/asyncio-sync asyncio Condition notify11891015
Ref: 193311891015
Ref: library/asyncio-sync asyncio Condition locked11891380
Ref: 36c011891380
Ref: library/asyncio-sync asyncio Condition notify_all11891474
Ref: 36c111891474
Ref: library/asyncio-sync asyncio Condition release11891853
Ref: 36c211891853
Ref: library/asyncio-sync asyncio Condition wait11892016
Ref: 195c11892016
Ref: library/asyncio-sync asyncio Condition wait_for11892757
Ref: 36c311892757
Node: Semaphore11893106
Ref: library/asyncio-sync semaphore11893222
Ref: 36c411893222
Ref: library/asyncio-sync asyncio Semaphore11893263
Ref: c5c11893263
Ref: library/asyncio-sync asyncio Semaphore acquire11894377
Ref: 195d11894377
Ref: library/asyncio-sync asyncio Semaphore locked11894662
Ref: 36c611894662
Ref: library/asyncio-sync asyncio Semaphore release11894767
Ref: 36c511894767
Node: BoundedSemaphore11895082
Ref: library/asyncio-sync boundedsemaphore11895195
Ref: 36c711895195
Ref: library/asyncio-sync asyncio BoundedSemaphore11895250
Ref: c5d11895250
Node: Barrier11895611
Ref: library/asyncio-sync barrier11895706
Ref: 36c811895706
Ref: library/asyncio-sync asyncio Barrier11895743
Ref: 80b11895743
Ref: library/asyncio-sync asyncio-example-barrier11896339
Ref: 36ca11896339
Ref: library/asyncio-sync asyncio Barrier wait11897212
Ref: 36c911897212
Ref: library/asyncio-sync asyncio Barrier reset11898290
Ref: 36cb11898290
Ref: library/asyncio-sync asyncio Barrier abort11898587
Ref: 36cc11898587
Ref: library/asyncio-sync asyncio Barrier parties11898901
Ref: 36cd11898901
Ref: library/asyncio-sync asyncio Barrier n_waiting11898990
Ref: 36ce11898990
Ref: library/asyncio-sync asyncio Barrier broken11899109
Ref: 36cf11899109
Ref: library/asyncio-sync asyncio BrokenBarrierError11899225
Ref: 80c11899225
Node: Subprocessos11899696
Ref: library/asyncio-subprocess doc11899821
Ref: 36d011899821
Ref: library/asyncio-subprocess asyncio-subprocess11899821
Ref: 365011899821
Ref: library/asyncio-subprocess no-color11899821
Ref: 36d111899821
Ref: library/asyncio-subprocess subprocesses11899821
Ref: 36d211899821
Ref: library/asyncio-subprocess asyncio-example-subprocess-shell11900116
Ref: 36d311900116
Ref: Subprocessos-Footnote-111901466
Ref: Subprocessos-Footnote-211901545
Node: Criando subprocessos11901629
Ref: library/asyncio-subprocess creating-subprocesses11901720
Ref: 36d511901720
Ref: library/asyncio-subprocess asyncio create_subprocess_exec11901783
Ref: c5f11901783
Ref: library/asyncio-subprocess asyncio create_subprocess_shell11902404
Ref: c6011902404
Ref: Criando subprocessos-Footnote-111904071
Node: Constantes<7>11904141
Ref: library/asyncio-subprocess constants11904269
Ref: 36e011904269
Ref: library/asyncio-subprocess asyncio subprocess PIPE11904312
Ref: 36e111904312
Ref: library/asyncio-subprocess asyncio subprocess STDOUT11904789
Ref: 36e311904789
Ref: library/asyncio-subprocess asyncio subprocess DEVNULL11904986
Ref: 36e411904986
Node: Interagindo com subprocessos11905281
Ref: library/asyncio-subprocess interacting-with-subprocesses11905380
Ref: 36e511905380
Ref: library/asyncio-subprocess asyncio subprocess Process11905720
Ref: 36d811905720
Ref: library/asyncio-subprocess asyncio subprocess Process wait11906766
Ref: 36e611906766
Ref: library/asyncio-subprocess asyncio subprocess Process communicate11907322
Ref: 19db11907322
Ref: library/asyncio-subprocess asyncio subprocess Process send_signal11908822
Ref: 189d11908822
Ref: library/asyncio-subprocess asyncio subprocess Process terminate11909248
Ref: 36e911909248
Ref: library/asyncio-subprocess asyncio subprocess Process kill11909549
Ref: 36ea11909549
Ref: library/asyncio-subprocess asyncio subprocess Process stdin11909800
Ref: 36e211909800
Ref: library/asyncio-subprocess asyncio subprocess Process stdout11909961
Ref: 36d611909961
Ref: library/asyncio-subprocess asyncio subprocess Process stderr11910123
Ref: 36d711910123
Ref: library/asyncio-subprocess asyncio subprocess Process pid11910625
Ref: 36eb11910625
Ref: library/asyncio-subprocess asyncio subprocess Process returncode11910866
Ref: 36e811910866
Node: Subprocesso e Threads11911215
Ref: library/asyncio-subprocess asyncio-subprocess-threads11911322
Ref: 36e711911322
Ref: library/asyncio-subprocess subprocess-and-threads11911322
Ref: 36ec11911322
Node: Exemplos<17>11911912
Ref: library/asyncio-subprocess examples11912019
Ref: 36d411912019
Ref: library/asyncio-subprocess asyncio-example-create-subprocess-exec11912214
Ref: 36ed11912214
Node: Filas11913026
Ref: library/asyncio-queue doc11913139
Ref: 36ef11913139
Ref: library/asyncio-queue asyncio-queues11913139
Ref: 365111913139
Ref: library/asyncio-queue no-color11913139
Ref: 36f011913139
Ref: library/asyncio-queue queues11913139
Ref: 36f111913139
Ref: Filas-Footnote-111913977
Node: Queue11914051
Ref: library/asyncio-queue queue11914125
Ref: 36f311914125
Ref: library/asyncio-queue asyncio Queue11914158
Ref: c5e11914158
Ref: library/asyncio-queue asyncio Queue maxsize11914861
Ref: 36f611914861
Ref: library/asyncio-queue asyncio Queue empty11914937
Ref: 36f711914937
Ref: library/asyncio-queue asyncio Queue full11915059
Ref: 36f811915059
Ref: library/asyncio-queue asyncio Queue get11915297
Ref: 36f411915297
Ref: library/asyncio-queue asyncio Queue get_nowait11915591
Ref: 36f911915591
Ref: library/asyncio-queue asyncio Queue join11915749
Ref: fba11915749
Ref: library/asyncio-queue asyncio Queue put11916277
Ref: 36fb11916277
Ref: library/asyncio-queue asyncio Queue put_nowait11916547
Ref: 36fc11916547
Ref: library/asyncio-queue asyncio Queue qsize11916749
Ref: 36f511916749
Ref: library/asyncio-queue asyncio Queue shutdown11916824
Ref: 4c611916824
Ref: library/asyncio-queue asyncio Queue task_done11918319
Ref: fbb11918319
Node: Fila de prioridade11919165
Ref: library/asyncio-queue priority-queue11919291
Ref: 36fe11919291
Ref: library/asyncio-queue asyncio PriorityQueue11919350
Ref: 36ff11919350
Node: Filas LIFO último a entrar primeiro a sair11919582
Ref: library/asyncio-queue lifo-queue11919717
Ref: 370011919717
Ref: library/asyncio-queue asyncio LifoQueue11919831
Ref: 370111919831
Node: Exceções<15>11920013
Ref: library/asyncio-queue exceptions11920142
Ref: 370211920142
Ref: library/asyncio-queue asyncio QueueEmpty11920183
Ref: 36fa11920183
Ref: library/asyncio-queue asyncio QueueFull11920330
Ref: 36fd11920330
Ref: library/asyncio-queue asyncio QueueShutDown11920488
Ref: 4c711920488
Node: Exemplos<18>11920681
Ref: library/asyncio-queue examples11920758
Ref: 36f211920758
Ref: library/asyncio-queue asyncio-example-queue-dist11920797
Ref: 370311920797
Node: Exceções<16>11922620
Ref: library/asyncio-exceptions doc11922745
Ref: 370411922745
Ref: library/asyncio-exceptions asyncio-exceptions11922745
Ref: 370511922745
Ref: library/asyncio-exceptions exceptions11922745
Ref: 370611922745
Ref: library/asyncio-exceptions no-color11922745
Ref: 370711922745
Ref: library/asyncio-exceptions asyncio TimeoutError11922901
Ref: 19ed11922901
Ref: library/asyncio-exceptions asyncio CancelledError11923164
Ref: 4ce11923164
Ref: library/asyncio-exceptions asyncio InvalidStateError11923602
Ref: 368611923602
Ref: library/asyncio-exceptions asyncio SendfileNotAvailableError11923865
Ref: 370811923865
Ref: library/asyncio-exceptions asyncio IncompleteReadError11924069
Ref: 1bc211924069
Ref: library/asyncio-exceptions asyncio IncompleteReadError expected11924309
Ref: 370911924309
Ref: library/asyncio-exceptions asyncio IncompleteReadError partial11924403
Ref: 369b11924403
Ref: library/asyncio-exceptions asyncio LimitOverrunError11924529
Ref: 369c11924529
Ref: library/asyncio-exceptions asyncio LimitOverrunError consumed11924701
Ref: 370a11924701
Ref: Exceções<16>-Footnote-111924822
Node: Call Graph Introspection11924901
Ref: library/asyncio-graph doc11925037
Ref: 370b11925037
Ref: library/asyncio-graph asyncio-graph11925037
Ref: 370c11925037
Ref: library/asyncio-graph call-graph-introspection11925037
Ref: 370d11925037
Ref: library/asyncio-graph no-color11925037
Ref: 370e11925037
Ref: library/asyncio-graph asyncio print_call_graph11925529
Ref: 1cd11925529
Ref: library/asyncio-graph asyncio format_call_graph11927455
Ref: 370f11927455
Ref: library/asyncio-graph asyncio capture_call_graph11927717
Ref: 1cc11927717
Ref: Call Graph Introspection-Footnote-111928941
Node: Low level utility functions11929014
Ref: library/asyncio-graph low-level-utility-functions11929102
Ref: 371011929102
Ref: library/asyncio-graph asyncio future_add_to_awaited_by11929619
Ref: 371111929619
Ref: library/asyncio-graph asyncio future_discard_from_awaited_by11930089
Ref: 371211930089
Node: Laço de Eventos11930392
Ref: library/asyncio-eventloop doc11930521
Ref: 371311930521
Ref: library/asyncio-eventloop asyncio-event-loop11930521
Ref: f6a11930521
Ref: library/asyncio-eventloop event-loop11930521
Ref: 371411930521
Ref: library/asyncio-eventloop no-color11930521
Ref: 371511930521
Ref: library/asyncio-eventloop asyncio get_running_loop11931497
Ref: cf411931497
Ref: library/asyncio-eventloop asyncio get_event_loop11931868
Ref: 2f011931868
Ref: library/asyncio-eventloop asyncio set_event_loop11933238
Ref: 1a7111933238
Ref: library/asyncio-eventloop asyncio new_event_loop11933382
Ref: 365c11933382
Ref: Laço de Eventos-Footnote-111934832
Ref: Laço de Eventos-Footnote-211934906
Node: Métodos do laço de eventos11934986
Ref: library/asyncio-eventloop asyncio-event-loop-methods11935109
Ref: 371c11935109
Ref: library/asyncio-eventloop event-loop-methods11935109
Ref: 371711935109
Node: Executar e interromper o laço11935817
Ref: library/asyncio-eventloop running-and-stopping-the-loop11935951
Ref: 371d11935951
Ref: library/asyncio-eventloop asyncio loop run_until_complete11936033
Ref: e6611936033
Ref: library/asyncio-eventloop asyncio loop run_forever11936391
Ref: 371e11936391
Ref: library/asyncio-eventloop asyncio loop stop11937222
Ref: e6b11937222
Ref: library/asyncio-eventloop asyncio loop is_running11937280
Ref: 371f11937280
Ref: library/asyncio-eventloop asyncio loop is_closed11937383
Ref: fb711937383
Ref: library/asyncio-eventloop asyncio loop close11937475
Ref: 372011937475
Ref: library/asyncio-eventloop asyncio loop shutdown_asyncgens11937930
Ref: e6d11937930
Ref: library/asyncio-eventloop asyncio loop shutdown_default_executor11938625
Ref: ada11938625
Node: Agendando funções de retorno11939669
Ref: library/asyncio-eventloop scheduling-callbacks11939852
Ref: 372111939852
Ref: library/asyncio-eventloop asyncio loop call_soon11939933
Ref: cee11939933
Ref: library/asyncio-eventloop asyncio loop call_soon_threadsafe11940693
Ref: cef11940693
Ref: library/asyncio-eventloop asyncio-pass-keywords11941542
Ref: 372211941542
Ref: Agendando funções de retorno-Footnote-111942073
Node: Agendando funções de retorno atrasadas11942115
Ref: library/asyncio-eventloop asyncio-delayed-calls11942291
Ref: 372311942291
Ref: library/asyncio-eventloop scheduling-delayed-callbacks11942291
Ref: 372411942291
Ref: library/asyncio-eventloop asyncio loop call_later11942578
Ref: d0011942578
Ref: library/asyncio-eventloop asyncio loop call_at11944105
Ref: cf011944105
Ref: library/asyncio-eventloop asyncio loop time11945138
Ref: 372511945138
Ref: Agendando funções de retorno atrasadas-Footnote-111945595
Ref: Agendando funções de retorno atrasadas-Footnote-211945637
Node: Criando Futures e Tasks11945679
Ref: library/asyncio-eventloop creating-futures-and-tasks11945850
Ref: 372611945850
Ref: library/asyncio-eventloop asyncio loop create_future11945919
Ref: e6811945919
Ref: library/asyncio-eventloop asyncio loop create_task11946300
Ref: 1ca11946300
Ref: library/asyncio-eventloop asyncio loop set_task_factory11948185
Ref: 1c811948185
Ref: library/asyncio-eventloop asyncio loop get_task_factory11949087
Ref: fb911949087
Node: Abrindo conexões de rede11949218
Ref: library/asyncio-eventloop opening-network-connections11949375
Ref: 372711949375
Ref: library/asyncio-eventloop asyncio loop create_connection11949447
Ref: 80d11949447
Ref: library/asyncio-eventloop asyncio loop create_datagram_endpoint11956757
Ref: 93111956757
Ref: library/asyncio-eventloop asyncio loop create_unix_connection11960778
Ref: 369511960778
Ref: Abrindo conexões de rede-Footnote-111961905
Ref: Abrindo conexões de rede-Footnote-211961964
Node: Criando servidores de rede11962023
Ref: library/asyncio-eventloop creating-network-servers11962178
Ref: 372f11962178
Ref: library/asyncio-eventloop loop-create-server11962253
Ref: 365311962253
Ref: library/asyncio-eventloop asyncio loop create_server11962253
Ref: cfc11962253
Ref: library/asyncio-eventloop asyncio loop create_unix_server11967244
Ref: 4c411967244
Ref: library/asyncio-eventloop asyncio loop connect_accepted_socket11968559
Ref: 9d411968559
Node: Transferindo arquivos11970199
Ref: library/asyncio-eventloop transferring-files11970344
Ref: 373111970344
Ref: library/asyncio-eventloop asyncio loop sendfile11970409
Ref: 373211970409
Node: Atualizando TLS11971564
Ref: library/asyncio-eventloop tls-upgrade11971716
Ref: 373311971716
Ref: library/asyncio-eventloop asyncio loop start_tls11971769
Ref: cf211971769
Node: Observando descritores de arquivo11973792
Ref: library/asyncio-eventloop watching-file-descriptors11973966
Ref: 373411973966
Ref: library/asyncio-eventloop asyncio loop add_reader11974055
Ref: 36b011974055
Ref: library/asyncio-eventloop asyncio loop remove_reader11974402
Ref: 373511974402
Ref: library/asyncio-eventloop asyncio loop add_writer11974584
Ref: 373611974584
Ref: library/asyncio-eventloop asyncio loop remove_writer11975042
Ref: 373711975042
Node: Trabalhando com objetos soquete diretamente11975331
Ref: library/asyncio-eventloop working-with-socket-objects-directly11975493
Ref: 373911975493
Ref: library/asyncio-eventloop asyncio loop sock_recv11975998
Ref: dff11975998
Ref: library/asyncio-eventloop asyncio loop sock_recv_into11976497
Ref: cf311976497
Ref: library/asyncio-eventloop asyncio loop sock_recvfrom11976811
Ref: 81011976811
Ref: library/asyncio-eventloop asyncio loop sock_recvfrom_into11977124
Ref: 81111977124
Ref: library/asyncio-eventloop asyncio loop sock_sendall11977474
Ref: e0011977474
Ref: library/asyncio-eventloop asyncio loop sock_sendto11978302
Ref: 80f11978302
Ref: library/asyncio-eventloop asyncio loop sock_connect11978590
Ref: fbc11978590
Ref: library/asyncio-eventloop asyncio loop sock_accept11979226
Ref: e0111979226
Ref: library/asyncio-eventloop asyncio loop sock_sendfile11980081
Ref: cf711980081
Node: DNS11981407
Ref: library/asyncio-eventloop dns11981565
Ref: 373a11981565
Ref: library/asyncio-eventloop asyncio loop getaddrinfo11981594
Ref: e0211981594
Ref: library/asyncio-eventloop asyncio loop getnameinfo11981756
Ref: e0311981756
Node: Trabalhando com encadeamentos11982619
Ref: library/asyncio-eventloop working-with-pipes11982745
Ref: 373b11982745
Ref: library/asyncio-eventloop asyncio loop connect_read_pipe11982826
Ref: 36dc11982826
Ref: library/asyncio-eventloop asyncio loop connect_write_pipe11983443
Ref: 36dd11983443
Node: Sinais Unix11984321
Ref: library/asyncio-eventloop unix-signals11984499
Ref: 373e11984499
Ref: library/asyncio-eventloop loop-add-signal-handler11984544
Ref: 365511984544
Ref: library/asyncio-eventloop asyncio loop add_signal_handler11984544
Ref: 373f11984544
Ref: library/asyncio-eventloop asyncio loop remove_signal_handler11985459
Ref: 374011985459
Node: Executando código em conjuntos de threads ou processos11985783
Ref: library/asyncio-eventloop executing-code-in-thread-or-process-pools11985953
Ref: 374111985953
Ref: library/asyncio-eventloop asyncio loop run_in_executor11986085
Ref: adc11986085
Ref: library/asyncio-eventloop asyncio loop set_default_executor11989107
Ref: 93f11989107
Node: Tratando erros da API11989475
Ref: library/asyncio-eventloop error-handling-api11989661
Ref: 374211989661
Ref: library/asyncio-eventloop asyncio loop set_exception_handler11989797
Ref: 374311989797
Ref: library/asyncio-eventloop asyncio loop get_exception_handler11990707
Ref: e6911990707
Ref: library/asyncio-eventloop asyncio loop default_exception_handler11990908
Ref: 374511990908
Ref: library/asyncio-eventloop asyncio loop call_exception_handler11991341
Ref: 374411991341
Node: Habilitando o modo de debug11992597
Ref: library/asyncio-eventloop enabling-debug-mode11992751
Ref: 374611992751
Ref: library/asyncio-eventloop asyncio loop get_debug11992828
Ref: fb611992828
Ref: library/asyncio-eventloop asyncio loop set_debug11993108
Ref: fb511993108
Ref: library/asyncio-eventloop asyncio loop slow_callback_duration11993358
Ref: 374711993358
Node: Executando Subprocessos11993692
Ref: library/asyncio-eventloop running-subprocesses11993816
Ref: 374811993816
Ref: library/asyncio-eventloop loop-subprocess-exec11994386
Ref: 365411994386
Ref: library/asyncio-eventloop asyncio loop subprocess_exec11994386
Ref: 36d911994386
Ref: library/asyncio-eventloop asyncio loop subprocess_shell11998395
Ref: 36da11998395
Ref: Executando Subprocessos-Footnote-111999799
Node: Tratadores de função de retorno11999869
Ref: library/asyncio-eventloop callback-handles12000015
Ref: 371812000015
Ref: library/asyncio-eventloop asyncio Handle12000102
Ref: 1d3912000102
Ref: library/asyncio-eventloop asyncio Handle get_context12000268
Ref: 374b12000268
Ref: library/asyncio-eventloop asyncio Handle cancel12000440
Ref: 374c12000440
Ref: library/asyncio-eventloop asyncio Handle cancelled12000616
Ref: d0412000616
Ref: library/asyncio-eventloop asyncio TimerHandle12000756
Ref: 1a1512000756
Ref: library/asyncio-eventloop asyncio TimerHandle when12000975
Ref: d0112000975
Node: Objetos Server12001266
Ref: library/asyncio-eventloop server-objects12001420
Ref: 371912001420
Ref: library/asyncio-eventloop asyncio Server12001708
Ref: cfb12001708
Ref: library/asyncio-eventloop asyncio Server close12002434
Ref: 369312002434
Ref: library/asyncio-eventloop asyncio Server close_clients12002904
Ref: 4c812002904
Ref: library/asyncio-eventloop asyncio Server abort_clients12003278
Ref: 4c912003278
Ref: library/asyncio-eventloop asyncio Server get_loop12003726
Ref: cfa12003726
Ref: library/asyncio-eventloop asyncio Server start_serving12003864
Ref: cfd12003864
Ref: library/asyncio-eventloop asyncio Server serve_forever12004496
Ref: cfe12004496
Ref: library/asyncio-eventloop asyncio Server is_serving12005410
Ref: cff12005410
Ref: library/asyncio-eventloop asyncio Server wait_closed12005560
Ref: 197d12005560
Ref: library/asyncio-eventloop asyncio Server sockets12005716
Ref: e0412005716
Ref: library/asyncio-eventloop asyncio-event-loops12006081
Ref: 374e12006081
Node: Implementações do Laço de Eventos12006081
Ref: library/asyncio-eventloop asyncio-event-loop-implementations12006214
Ref: 374f12006214
Ref: library/asyncio-eventloop event-loop-implementations12006214
Ref: 371a12006214
Ref: library/asyncio-eventloop asyncio SelectorEventLoop12006502
Ref: 31212006502
Ref: library/asyncio-eventloop asyncio ProactorEventLoop12007118
Ref: 81212007118
Ref: library/asyncio-eventloop asyncio EventLoop12007401
Ref: 19a612007401
Ref: library/asyncio-eventloop asyncio AbstractEventLoop12007717
Ref: b4e12007717
Ref: Implementações do Laço de Eventos-Footnote-112008039
Node: Exemplos<19>12008118
Ref: library/asyncio-eventloop examples12008228
Ref: 371b12008228
Node: Hello World com call_soon12008871
Ref: library/asyncio-eventloop asyncio-example-lowlevel-helloworld12008987
Ref: 375012008987
Ref: library/asyncio-eventloop hello-world-with-call-soon12008987
Ref: 375112008987
Node: Exibe a data atual com call_later12009785
Ref: library/asyncio-eventloop asyncio-example-call-later12009964
Ref: 375212009964
Ref: library/asyncio-eventloop display-the-current-date-with-call-later12009964
Ref: 375312009964
Node: Observa um descritor de arquivo por eventos de leitura12010973
Ref: library/asyncio-eventloop asyncio-example-watch-fd12011176
Ref: 36af12011176
Ref: library/asyncio-eventloop watch-a-file-descriptor-for-read-events12011176
Ref: 375412011176
Node: Define tratadores de sinais para SIGINT e SIGTERM12012555
Ref: library/asyncio-eventloop asyncio-example-unix-signals12012716
Ref: 375512012716
Ref: library/asyncio-eventloop set-signal-handlers-for-sigint-and-sigterm12012716
Ref: 375612012716
Node: Futuros12013666
Ref: library/asyncio-future doc12013795
Ref: 375712013795
Ref: library/asyncio-future asyncio-futures12013795
Ref: 365712013795
Ref: library/asyncio-future futures12013795
Ref: 375812013795
Ref: library/asyncio-future no-color12013795
Ref: 375912013795
Ref: Futuros-Footnote-112014162
Ref: Futuros-Footnote-212014238
Node: Future Functions12014319
Ref: library/asyncio-future future-functions12014401
Ref: 375a12014401
Ref: library/asyncio-future asyncio isfuture12014456
Ref: 375b12014456
Ref: library/asyncio-future asyncio ensure_future12014769
Ref: e6512014769
Ref: library/asyncio-future asyncio wrap_future12016113
Ref: 1b6712016113
Node: Future Object12016462
Ref: library/asyncio-future asyncio-future-obj12016544
Ref: 375c12016544
Ref: library/asyncio-future future-object12016544
Ref: 375d12016544
Ref: library/asyncio-future asyncio Future12016593
Ref: dba12016593
Ref: library/asyncio-future asyncio Future result12017763
Ref: 375e12017763
Ref: library/asyncio-future asyncio Future set_result12018375
Ref: 368312018375
Ref: library/asyncio-future asyncio Future set_exception12018572
Ref: e6c12018572
Ref: library/asyncio-future asyncio Future done12018777
Ref: 375f12018777
Ref: library/asyncio-future asyncio Future cancelled12019041
Ref: 376012019041
Ref: library/asyncio-future asyncio Future add_done_callback12019347
Ref: cf112019347
Ref: library/asyncio-future asyncio Future remove_done_callback12020374
Ref: 186812020374
Ref: library/asyncio-future asyncio Future cancel12020616
Ref: 1abc12020616
Ref: library/asyncio-future asyncio Future exception12020975
Ref: 376112020975
Ref: library/asyncio-future asyncio Future get_loop12021416
Ref: cf912021416
Ref: library/asyncio-future asyncio-example-future12021549
Ref: 376212021549
Ref: Future Object-Footnote-112023759
Node: Transports and Protocols12023801
Ref: library/asyncio-protocol doc12023924
Ref: 376312023924
Ref: library/asyncio-protocol asyncio-transports-protocols12023924
Ref: 365612023924
Ref: library/asyncio-protocol no-color12023924
Ref: 376412023924
Ref: library/asyncio-protocol transports-and-protocols12023924
Ref: 376512023924
Node: Transportes12026314
Ref: library/asyncio-protocol asyncio-transport12026408
Ref: 372912026408
Ref: library/asyncio-protocol transports12026408
Ref: 376612026408
Ref: Transportes-Footnote-112027162
Node: Transports Hierarchy12027241
Ref: library/asyncio-protocol transports-hierarchy12027332
Ref: 376d12027332
Ref: library/asyncio-protocol asyncio BaseTransport12027395
Ref: 376812027395
Ref: library/asyncio-protocol asyncio WriteTransport12027525
Ref: 373d12027525
Ref: library/asyncio-protocol asyncio ReadTransport12027857
Ref: 373c12027857
Ref: library/asyncio-protocol asyncio Transport12028185
Ref: 376912028185
Ref: library/asyncio-protocol asyncio DatagramTransport12028789
Ref: 1a5512028789
Ref: library/asyncio-protocol asyncio SubprocessTransport12029033
Ref: 374a12029033
Node: Base Transport12029360
Ref: library/asyncio-protocol base-transport12029480
Ref: 376e12029480
Ref: library/asyncio-protocol asyncio BaseTransport close12029531
Ref: 372c12029531
Ref: library/asyncio-protocol asyncio BaseTransport is_closing12029960
Ref: e6712029960
Ref: library/asyncio-protocol asyncio BaseTransport get_extra_info12030080
Ref: c8612030080
Ref: library/asyncio-protocol asyncio BaseTransport set_protocol12032239
Ref: 377212032239
Ref: library/asyncio-protocol asyncio BaseTransport get_protocol12032431
Ref: 377312032431
Node: Read-only Transports12032508
Ref: library/asyncio-protocol read-only-transports12032629
Ref: 377412032629
Ref: library/asyncio-protocol asyncio ReadTransport is_reading12032692
Ref: d0512032692
Ref: library/asyncio-protocol asyncio ReadTransport pause_reading12032831
Ref: d0712032831
Ref: library/asyncio-protocol asyncio ReadTransport resume_reading12033202
Ref: d0612033202
Node: Write-only Transports12033542
Ref: library/asyncio-protocol write-only-transports12033673
Ref: 377512033673
Ref: library/asyncio-protocol asyncio WriteTransport abort12033738
Ref: 374d12033738
Ref: library/asyncio-protocol asyncio WriteTransport can_write_eof12034078
Ref: 377612034078
Ref: library/asyncio-protocol asyncio WriteTransport get_write_buffer_size12034236
Ref: 377812034236
Ref: library/asyncio-protocol asyncio WriteTransport get_write_buffer_limits12034364
Ref: fb812034364
Ref: library/asyncio-protocol asyncio WriteTransport set_write_buffer_limits12034686
Ref: 377912034686
Ref: library/asyncio-protocol asyncio WriteTransport write12036099
Ref: 175312036099
Ref: library/asyncio-protocol asyncio WriteTransport writelines12036299
Ref: 175212036299
Ref: library/asyncio-protocol asyncio WriteTransport write_eof12036584
Ref: 377712036584
Node: Transportes de datagrama12036874
Ref: library/asyncio-protocol datagram-transports12037011
Ref: 377c12037011
Ref: library/asyncio-protocol asyncio DatagramTransport sendto12037082
Ref: 4c512037082
Ref: library/asyncio-protocol asyncio DatagramTransport abort12037696
Ref: 377d12037696
Node: Transportes de Subprocesso12038039
Ref: library/asyncio-protocol asyncio-subprocess-transports12038146
Ref: 36de12038146
Ref: library/asyncio-protocol subprocess-transports12038146
Ref: 377e12038146
Ref: library/asyncio-protocol asyncio SubprocessTransport get_pid12038221
Ref: 377f12038221
Ref: library/asyncio-protocol asyncio SubprocessTransport get_pipe_transport12038320
Ref: 378012038320
Ref: library/asyncio-protocol asyncio SubprocessTransport get_returncode12039067
Ref: 378112039067
Ref: library/asyncio-protocol asyncio SubprocessTransport kill12039303
Ref: 378212039303
Ref: library/asyncio-protocol asyncio SubprocessTransport send_signal12039564
Ref: 378412039564
Ref: library/asyncio-protocol asyncio SubprocessTransport terminate12039724
Ref: 378312039724
Ref: library/asyncio-protocol asyncio SubprocessTransport close12040049
Ref: 378512040049
Node: Protocolos<2>12040276
Ref: library/asyncio-protocol asyncio-protocol12040391
Ref: 372812040391
Ref: library/asyncio-protocol protocols12040391
Ref: 376712040391
Ref: Protocolos<2>-Footnote-112041209
Node: Protocolos de Base12041287
Ref: library/asyncio-protocol base-protocols12041377
Ref: 378612041377
Ref: library/asyncio-protocol asyncio BaseProtocol12041436
Ref: 376a12041436
Ref: library/asyncio-protocol asyncio Protocol12041529
Ref: 376b12041529
Ref: library/asyncio-protocol asyncio BufferedProtocol12041663
Ref: c8712041663
Ref: library/asyncio-protocol asyncio DatagramProtocol12041820
Ref: 8d312041820
Ref: library/asyncio-protocol asyncio SubprocessProtocol12041937
Ref: 374912041937
Node: Base Protocol12042104
Ref: library/asyncio-protocol base-protocol12042222
Ref: 378712042222
Ref: library/asyncio-protocol asyncio BaseProtocol connection_made12042545
Ref: 372a12042545
Ref: library/asyncio-protocol asyncio BaseProtocol connection_lost12042811
Ref: 376f12042811
Ref: library/asyncio-protocol asyncio BaseProtocol pause_writing12043358
Ref: 377a12043358
Ref: library/asyncio-protocol asyncio BaseProtocol resume_writing12043475
Ref: 377b12043475
Node: Streaming Protocols12043940
Ref: library/asyncio-protocol streaming-protocols12044076
Ref: 378812044076
Ref: library/asyncio-protocol asyncio Protocol data_received12044486
Ref: 1a3512044486
Ref: library/asyncio-protocol asyncio Protocol eof_received12045168
Ref: 378912045168
Node: Protocolos de Streaming Bufferizados12046033
Ref: library/asyncio-protocol buffered-streaming-protocols12046180
Ref: 378a12046180
Ref: library/asyncio-protocol asyncio BufferedProtocol get_buffer12046894
Ref: 378b12046894
Ref: library/asyncio-protocol asyncio BufferedProtocol buffer_updated12047380
Ref: 378c12047380
Ref: library/asyncio-protocol asyncio BufferedProtocol eof_received12047586
Ref: 378d12047586
Node: Protocolos de Datagramas12048159
Ref: library/asyncio-protocol datagram-protocols12048312
Ref: 378e12048312
Ref: library/asyncio-protocol asyncio DatagramProtocol datagram_received12048522
Ref: 378f12048522
Ref: library/asyncio-protocol asyncio DatagramProtocol error_received12048788
Ref: 379012048788
Node: Protocolos de Subprocesso12049724
Ref: library/asyncio-protocol asyncio-subprocess-protocols12049832
Ref: 36df12049832
Ref: library/asyncio-protocol subprocess-protocols12049832
Ref: 379112049832
Ref: library/asyncio-protocol asyncio SubprocessProtocol pipe_data_received12050080
Ref: 1a6c12050080
Ref: library/asyncio-protocol asyncio SubprocessProtocol pipe_connection_lost12050354
Ref: 379212050354
Ref: library/asyncio-protocol asyncio SubprocessProtocol process_exited12050569
Ref: 1a6b12050569
Node: Exemplos<20>12050786
Ref: library/asyncio-protocol examples12050881
Ref: 376c12050881
Node: TCP Echo Server12051136
Ref: library/asyncio-protocol asyncio-example-tcp-echo-server-protocol12051224
Ref: 36aa12051224
Ref: library/asyncio-protocol tcp-echo-server12051224
Ref: 379312051224
Node: TCP Echo Client12052503
Ref: library/asyncio-protocol asyncio-example-tcp-echo-client-protocol12052615
Ref: 36a712052615
Ref: library/asyncio-protocol tcp-echo-client12052615
Ref: 379412052615
Node: UDP Echo Server12054178
Ref: library/asyncio-protocol asyncio-udp-echo-server-protocol12054290
Ref: 372e12054290
Ref: library/asyncio-protocol udp-echo-server12054290
Ref: 379512054290
Node: UDP Echo Client12055428
Ref: library/asyncio-protocol asyncio-udp-echo-client-protocol12055552
Ref: 372d12055552
Ref: library/asyncio-protocol udp-echo-client12055552
Ref: 379612055552
Node: Connecting Existing Sockets12057086
Ref: library/asyncio-protocol asyncio-example-create-connection12057238
Ref: 36ae12057238
Ref: library/asyncio-protocol connecting-existing-sockets12057238
Ref: 379712057238
Node: loop subprocess_exec and SubprocessProtocol12059157
Ref: library/asyncio-protocol asyncio-example-subprocess-proto12059285
Ref: 36ee12059285
Ref: library/asyncio-protocol loop-subprocess-exec-and-subprocessprotocol12059285
Ref: 379812059285
Node: Políticas12061596
Ref: library/asyncio-policy doc12061733
Ref: 379912061733
Ref: library/asyncio-policy asyncio-policies12061733
Ref: 371612061733
Ref: library/asyncio-policy no-color12061733
Ref: 379a12061733
Ref: library/asyncio-policy policies12061733
Ref: 379b12061733
Node: Getting and Setting the Policy12062894
Ref: library/asyncio-policy asyncio-policy-get-set12062994
Ref: 379c12062994
Ref: library/asyncio-policy getting-and-setting-the-policy12062994
Ref: 37a012062994
Ref: library/asyncio-policy asyncio get_event_loop_policy12063167
Ref: 31012063167
Ref: library/asyncio-policy asyncio set_event_loop_policy12063418
Ref: 31112063418
Node: Policy Objects12063750
Ref: library/asyncio-policy asyncio-policy-objects12063874
Ref: 379f12063874
Ref: library/asyncio-policy policy-objects12063874
Ref: 37a112063874
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy12063993
Ref: 30c12063993
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy get_event_loop12064089
Ref: 37a212064089
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy set_event_loop12064384
Ref: 37a312064384
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy new_event_loop12064493
Ref: 37a412064493
Ref: library/asyncio-policy asyncio-policy-builtin12064795
Ref: 379d12064795
Ref: library/asyncio-policy asyncio DefaultEventLoopPolicy12064848
Ref: 30d12064848
Ref: library/asyncio-policy asyncio WindowsSelectorEventLoopPolicy12065583
Ref: 30e12065583
Ref: library/asyncio-policy asyncio WindowsProactorEventLoopPolicy12065950
Ref: 30f12065950
Node: Custom Policies12066317
Ref: library/asyncio-policy asyncio-custom-policies12066402
Ref: 379e12066402
Ref: library/asyncio-policy custom-policies12066402
Ref: 37a512066402
Node: Suporte a plataformas12067010
Ref: library/asyncio-platforms doc12067132
Ref: 37a612067132
Ref: library/asyncio-platforms asyncio-platform-support12067132
Ref: 373812067132
Ref: library/asyncio-platforms no-color12067132
Ref: 37a712067132
Ref: library/asyncio-platforms platform-support12067132
Ref: 37a812067132
Node: Todas as plataformas12067461
Ref: library/asyncio-platforms all-platforms12067559
Ref: 37a912067559
Node: Windows<81>12067737
Ref: library/asyncio-platforms windows12067853
Ref: 37aa12067853
Ref: Windows<81>-Footnote-112069705
Ref: Windows<81>-Footnote-212069789
Ref: Windows<81>-Footnote-312069872
Ref: Windows<81>-Footnote-412069954
Node: Suporte para subprocesso no Windows12070019
Ref: library/asyncio-platforms asyncio-windows-subprocess12070102
Ref: 36db12070102
Ref: library/asyncio-platforms subprocess-support-on-windows12070102
Ref: 37ac12070102
Node: macOS<51>12070334
Ref: library/asyncio-platforms macos12070421
Ref: 37ad12070421
Node: Extensão12071052
Ref: library/asyncio-extending doc12071193
Ref: 37af12071193
Ref: library/asyncio-extending extending12071193
Ref: 37b012071193
Ref: library/asyncio-extending no-color12071193
Ref: 37b112071193
Node: Escrevendo um laço de eventos personalizado12071792
Ref: library/asyncio-extending writing-a-custom-event-loop12071929
Ref: 37b212071929
Node: Construtores privados de Future e Task12072718
Ref: library/asyncio-extending future-and-task-private-constructors12072899
Ref: 37b312072899
Ref: library/asyncio-extending asyncio Future __init__12073485
Ref: 37b412073485
Ref: library/asyncio-extending asyncio Task __init__12073637
Ref: 37b512073637
Node: Suporte ao ciclo de vida de tarefas12073963
Ref: library/asyncio-extending task-lifetime-support12074091
Ref: 37b612074091
Ref: library/asyncio-extending asyncio _register_task12074368
Ref: 37b712074368
Ref: library/asyncio-extending asyncio _unregister_task12074531
Ref: 37b812074531
Ref: library/asyncio-extending asyncio _enter_task12074713
Ref: 37b912074713
Ref: library/asyncio-extending asyncio _leave_task12074975
Ref: 37ba12074975
Node: Índice da API de alto nível12075191
Ref: library/asyncio-api-index doc12075342
Ref: a6f12075342
Ref: library/asyncio-api-index high-level-api-index12075342
Ref: 37bb12075342
Ref: library/asyncio-api-index no-color12075342
Ref: 37bc12075342
Node: Tarefas12075656
Ref: library/asyncio-api-index tasks12075746
Ref: 37bd12075746
Node: Filas<2>12080287
Ref: library/asyncio-api-index queues12080401
Ref: 37be12080401
Node: Subprocessos<2>12081463
Ref: library/asyncio-api-index subprocesses12081580
Ref: 37bf12081580
Node: Streams<2>12082184
Ref: library/asyncio-api-index streams12082308
Ref: 37c012082308
Node: Sincronização12083873
Ref: library/asyncio-api-index synchronization12083996
Ref: 37c112083996
Node: Exceções<17>12085401
Ref: library/asyncio-api-index exceptions12085505
Ref: 37c212085505
Node: Índice de APIs de baixo nível12086323
Ref: library/asyncio-llapi-index doc12086490
Ref: 37c312086490
Ref: library/asyncio-llapi-index low-level-api-index12086490
Ref: 37c412086490
Ref: library/asyncio-llapi-index no-color12086490
Ref: 37c512086490
Node: Obtendo o laço de eventos12086838
Ref: library/asyncio-llapi-index obtaining-the-event-loop12086972
Ref: 37c612086972
Node: Métodos do laço de eventos<2>12088159
Ref: library/asyncio-llapi-index event-loop-methods12088316
Ref: 37c712088316
Node: Transportes<2>12101451
Ref: library/asyncio-llapi-index transports12101595
Ref: 37c812101595
Node: Protocolos<3>12108026
Ref: library/asyncio-llapi-index protocols12108169
Ref: 37c912108169
Node: Políticas de laço de eventos12112160
Ref: library/asyncio-llapi-index event-loop-policies12112280
Ref: 37ca12112280
Node: Desenvolvendo com asyncio12113198
Ref: library/asyncio-dev doc12113327
Ref: 37cb12113327
Ref: library/asyncio-dev asyncio-dev12113327
Ref: 37cc12113327
Ref: library/asyncio-dev developing-with-asyncio12113327
Ref: 37cd12113327
Ref: library/asyncio-dev no-color12113327
Ref: 37ce12113327
Node: Modo de Depuração12113773
Ref: library/asyncio-dev asyncio-debug-mode12113897
Ref: 1fe812113897
Ref: library/asyncio-dev debug-mode12113897
Ref: 37cf12113897
Node: Concorrência e Múltiplas Threads12115487
Ref: library/asyncio-dev asyncio-multithreading12115649
Ref: 367e12115649
Ref: library/asyncio-dev concurrency-and-multithreading12115649
Ref: 37d112115649
Node: Executando código bloqueante12117988
Ref: library/asyncio-dev asyncio-handle-blocking12118146
Ref: 37d212118146
Ref: library/asyncio-dev running-blocking-code12118146
Ref: 37d312118146
Node: Gerando logs<3>12118695
Ref: library/asyncio-dev asyncio-logger12118850
Ref: 37d012118850
Ref: library/asyncio-dev logging12118850
Ref: 37d412118850
Node: Detect never-awaited coroutines12119336
Ref: library/asyncio-dev asyncio-coroutine-not-scheduled12119495
Ref: 37d612119495
Ref: library/asyncio-dev detect-never-awaited-coroutines12119495
Ref: 37d712119495
Node: Detect never-retrieved exceptions12120504
Ref: library/asyncio-dev detect-never-retrieved-exceptions12120639
Ref: 37d812120639
Ref: Detect never-retrieved exceptions-Footnote-112122267
Node: socket — Interface de rede de baixo nível12122332
Ref: library/socket doc12122544
Ref: 37d912122544
Ref: library/socket module-socket12122544
Ref: d112122544
Ref: library/socket no-color12122544
Ref: 37da12122544
Ref: library/socket socket-low-level-networking-interface12122544
Ref: 37db12122544
Ref: socket — Interface de rede de baixo nível-Footnote-112124241
Node: Famílias de soquete12124307
Ref: library/socket socket-families12124440
Ref: 37dc12124440
Ref: library/socket host-port12125824
Ref: 37dd12125824
Ref: Famílias de soquete-Footnote-112137342
Ref: Famílias de soquete-Footnote-212137384
Node: Conteúdo do módulo<4>12137429
Ref: library/socket module-contents12137585
Ref: 37e912137585
Node: Exceções<18>12137802
Ref: library/socket exceptions12137898
Ref: 37ea12137898
Ref: library/socket socket error12137937
Ref: 124c12137937
Ref: library/socket socket herror12138146
Ref: 37eb12138146
Ref: library/socket socket gaierror12138772
Ref: 19fc12138772
Ref: library/socket socket timeout12139378
Ref: a2b12139378
Ref: Exceções<18>-Footnote-112140030
Node: Constantes<8>12140072
Ref: library/socket constants12140189
Ref: 37ed12140189
Ref: library/socket socket AF_UNIX12140371
Ref: 1ac212140371
Ref: library/socket socket AF_INET12140396
Ref: 1abf12140396
Ref: library/socket socket AF_INET612140421
Ref: 1ac012140421
Ref: library/socket socket AF_UNSPEC12140735
Ref: 373012140735
Ref: library/socket socket SOCK_STREAM12140946
Ref: 14ef12140946
Ref: library/socket socket SOCK_DGRAM12140975
Ref: 14ee12140975
Ref: library/socket socket SOCK_RAW12141003
Ref: 37ee12141003
Ref: library/socket socket SOCK_RDM12141029
Ref: 37ef12141029
Ref: library/socket socket SOCK_SEQPACKET12141055
Ref: 37f012141055
Ref: library/socket socket SOCK_CLOEXEC12141356
Ref: df912141356
Ref: library/socket socket SOCK_NONBLOCK12141386
Ref: df812141386
Ref: library/socket socket-unix-constants12141816
Ref: d6012141816
Ref: library/socket socket SOMAXCONN12141831
Ref: 105512141831
Ref: library/socket socket AF_CAN12144741
Ref: 37de12144741
Ref: library/socket socket PF_CAN12144765
Ref: 37f112144765
Ref: library/socket socket CAN_BCM12145194
Ref: 119912145194
Ref: library/socket socket CAN_RAW_FD_FRAMES12145627
Ref: 10c012145627
Ref: library/socket socket CAN_RAW_JOIN_FILTERS12146051
Ref: b2112146051
Ref: library/socket socket CAN_ISOTP12146361
Ref: 37df12146361
Ref: library/socket socket CAN_J193912146621
Ref: b2212146621
Ref: library/socket socket AF_DIVERT12146865
Ref: 37f212146865
Ref: library/socket socket PF_DIVERT12146892
Ref: 37f312146892
Ref: library/socket socket AF_PACKET12147127
Ref: 37e512147127
Ref: library/socket socket PF_PACKET12147154
Ref: 37f412147154
Ref: library/socket socket ETH_P_ALL12147372
Ref: 1a5112147372
Ref: library/socket socket AF_RDS12147730
Ref: 37f512147730
Ref: library/socket socket PF_RDS12147754
Ref: 37f612147754
Ref: library/socket socket SOL_RDS12147778
Ref: 37f712147778
Ref: library/socket socket SIO_RCVALL12148027
Ref: 37f812148027
Ref: library/socket socket SIO_KEEPALIVE_VALS12148055
Ref: 37f912148055
Ref: library/socket socket SIO_LOOPBACK_FAST_PATH12148091
Ref: ec312148091
Ref: library/socket socket AF_ALG12148511
Ref: ec612148511
Ref: library/socket socket SOL_ALG12148535
Ref: 37fa12148535
Ref: library/socket socket AF_VSOCK12148711
Ref: d6112148711
Ref: library/socket socket IOCTL_VM_SOCKETS_GET_LOCAL_CID12148737
Ref: 37fb12148737
Ref: library/socket socket AF_LINK12148958
Ref: 119a12148958
Ref: library/socket socket has_ipv612149065
Ref: 37fc12149065
Ref: library/socket socket AF_BLUETOOTH12149197
Ref: 1ac112149197
Ref: library/socket socket BTPROTO_L2CAP12149227
Ref: 28212149227
Ref: library/socket socket BTPROTO_RFCOMM12149258
Ref: 37e312149258
Ref: library/socket socket BTPROTO_HCI12149290
Ref: 28012149290
Ref: library/socket socket BTPROTO_SCO12149319
Ref: 28112149319
Ref: library/socket socket BDADDR_ANY12149407
Ref: 37fd12149407
Ref: library/socket socket BDADDR_LOCAL12149435
Ref: 37fe12149435
Ref: library/socket socket BDADDR_BREDR12149710
Ref: 37e012149710
Ref: library/socket socket BDADDR_LE_PUBLIC12149740
Ref: 37e112149740
Ref: library/socket socket BDADDR_LE_RANDOM12149774
Ref: 37e212149774
Ref: library/socket socket SOL_RFCOMM12150020
Ref: 37ff12150020
Ref: library/socket socket SOL_L2CAP12150048
Ref: 380012150048
Ref: library/socket socket SOL_HCI12150075
Ref: 380112150075
Ref: library/socket socket SOL_SCO12150100
Ref: 380212150100
Ref: library/socket socket SOL_BLUETOOTH12150125
Ref: 380312150125
Ref: library/socket socket L2CAP_LM12150455
Ref: 380412150455
Ref: library/socket socket HCI_FILTER12150995
Ref: 380512150995
Ref: library/socket socket HCI_TIME_STAMP12151023
Ref: 380612151023
Ref: library/socket socket HCI_DATA_DIR12151055
Ref: 380712151055
Ref: library/socket socket SO_HCI_EVT_FILTER12151085
Ref: 380812151085
Ref: library/socket socket SO_HCI_PKT_FILTER12151120
Ref: 380912151120
Ref: library/socket socket HCI_DEV_NONE12151475
Ref: 380a12151475
Ref: library/socket socket HCI_CHANNEL_RAW12151701
Ref: 37e412151701
Ref: library/socket socket HCI_CHANNEL_USER12151734
Ref: 380b12151734
Ref: library/socket socket HCI_CHANNEL_MONITOR12151768
Ref: 380c12151768
Ref: library/socket socket HCI_CHANNEL_CONTROL12151805
Ref: 380d12151805
Ref: library/socket socket HCI_CHANNEL_LOGGING12151842
Ref: 380e12151842
Ref: library/socket socket AF_QIPCRTR12152047
Ref: 37e612152047
Ref: library/socket socket SCM_CREDS212152246
Ref: 380f12152246
Ref: library/socket socket LOCAL_CREDS12152274
Ref: 381012152274
Ref: library/socket socket LOCAL_CREDS_PERSISTENT12152303
Ref: 381112152303
Ref: library/socket socket SO_INCOMING_CPU12152749
Ref: 381212152749
Ref: library/socket socket SO_REUSEPORT_LB12152963
Ref: 183012152963
Ref: library/socket socket AF_HYPERV12153180
Ref: 37e712153180
Ref: library/socket socket HV_PROTOCOL_RAW12153207
Ref: 381312153207
Ref: library/socket socket HVSOCKET_CONNECT_TIMEOUT12153240
Ref: 381412153240
Ref: library/socket socket HVSOCKET_CONNECT_TIMEOUT_MAX12153282
Ref: 381512153282
Ref: library/socket socket HVSOCKET_CONNECTED_SUSPEND12153328
Ref: 381612153328
Ref: library/socket socket HVSOCKET_ADDRESS_FLAG_PASSTHRU12153372
Ref: 381712153372
Ref: library/socket socket HV_GUID_ZERO12153420
Ref: 381812153420
Ref: library/socket socket HV_GUID_WILDCARD12153450
Ref: 381912153450
Ref: library/socket socket HV_GUID_BROADCAST12153484
Ref: 381a12153484
Ref: library/socket socket HV_GUID_CHILDREN12153519
Ref: 381b12153519
Ref: library/socket socket HV_GUID_LOOPBACK12153553
Ref: 381c12153553
Ref: library/socket socket HV_GUID_PARENT12153587
Ref: 381d12153587
Ref: library/socket socket-ethernet-types12153779
Ref: 1a5212153779
Ref: library/socket socket ETHERTYPE_ARP12153779
Ref: 381e12153779
Ref: library/socket socket ETHERTYPE_IP12153810
Ref: 381f12153810
Ref: library/socket socket ETHERTYPE_IPV612153840
Ref: 382012153840
Ref: library/socket socket ETHERTYPE_VLAN12153872
Ref: 382112153872
Ref: library/socket socket SHUT_RD12154047
Ref: 382212154047
Ref: library/socket socket SHUT_WR12154072
Ref: 382312154072
Ref: library/socket socket SHUT_RDWR12154097
Ref: 382412154097
Ref: Constantes<8>-Footnote-112154300
Ref: Constantes<8>-Footnote-212154352
Ref: Constantes<8>-Footnote-312154398
Node: Funções<8>12154478
Ref: library/socket functions12154572
Ref: 382612154572
Node: Criação de sockets12154685
Ref: library/socket creating-sockets12154782
Ref: 382712154782
Ref: library/socket socket socket12154905
Ref: f9512154905
Ref: library/socket socket socketpair12157502
Ref: de412157502
Ref: library/socket socket create_connection12158243
Ref: 87712158243
Ref: library/socket socket create_server12159758
Ref: c1612159758
Ref: library/socket socket has_dualstack_ipv612161593
Ref: c1712161593
Ref: library/socket socket fromfd12161795
Ref: 382912161795
Ref: library/socket socket fromshare12162686
Ref: df512162686
Ref: library/socket socket SocketType12162950
Ref: 382b12162950
Node: Outras funções<2>12163103
Ref: library/socket other-functions12163200
Ref: 382c12163200
Ref: library/socket socket close12163327
Ref: d5e12163327
Ref: library/socket socket getaddrinfo12163606
Ref: 19fb12163606
Ref: library/socket socket getfqdn12167712
Ref: 1a2412167712
Ref: library/socket socket gethostbyname12168329
Ref: 382d12168329
Ref: library/socket socket gethostbyname_ex12168984
Ref: 1b7012168984
Ref: library/socket socket gethostname12169785
Ref: 2eb412169785
Ref: library/socket socket gethostbyaddr12170221
Ref: 1b6f12170221
Ref: library/socket socket getnameinfo12170973
Ref: 197812170973
Ref: library/socket socket getprotobyname12171756
Ref: 382e12171756
Ref: library/socket socket getservbyname12172256
Ref: 382f12172256
Ref: library/socket socket getservbyport12172723
Ref: 383012172723
Ref: library/socket socket ntohl12173177
Ref: 383112173177
Ref: library/socket socket ntohs12173434
Ref: a7612173434
Ref: library/socket socket htonl12173811
Ref: 383212173811
Ref: library/socket socket htons12174068
Ref: a7512174068
Ref: library/socket socket inet_aton12174445
Ref: b5012174445
Ref: library/socket socket inet_ntoa12175376
Ref: 383312175376
Ref: library/socket socket inet_pton12176200
Ref: b5112176200
Ref: library/socket socket inet_ntop12177004
Ref: 119b12177004
Ref: library/socket socket CMSG_LEN12178006
Ref: 1cce12178006
Ref: library/socket socket CMSG_SPACE12178696
Ref: 1ccd12178696
Ref: library/socket socket getdefaulttimeout12179605
Ref: 382a12179605
Ref: library/socket socket setdefaulttimeout12179883
Ref: 37ec12179883
Ref: library/socket socket sethostname12180171
Ref: 133712180171
Ref: library/socket socket if_nameindex12180534
Ref: c1812180534
Ref: library/socket socket if_nametoindex12181353
Ref: c1912181353
Ref: library/socket socket if_indextoname12181837
Ref: c1a12181837
Ref: library/socket socket send_fds12182323
Ref: b2312182323
Ref: library/socket socket recv_fds12182806
Ref: b2412182806
Ref: Outras funções<2>-Footnote-112183399
Ref: Outras funções<2>-Footnote-212183452
Ref: Outras funções<2>-Footnote-312183503
Ref: Outras funções<2>-Footnote-412183547
Node: Socket Objects12183606
Ref: library/socket id112183777
Ref: 383412183777
Ref: library/socket socket-objects12183777
Ref: 382812183777
Ref: library/socket socket socket accept12184131
Ref: f9612184131
Ref: library/socket socket socket bind12184901
Ref: 172812184901
Ref: library/socket socket socket close12185258
Ref: f3312185258
Ref: library/socket socket socket connect12186256
Ref: f9712186256
Ref: library/socket socket socket connect_ex12187384
Ref: 172712187384
Ref: library/socket socket socket detach12188020
Ref: 141812188020
Ref: library/socket socket socket dup12188269
Ref: 383512188269
Ref: library/socket socket socket fileno12188500
Ref: 383612188500
Ref: library/socket socket socket get_inheritable12188862
Ref: 10f712188862
Ref: library/socket socket socket getpeername12189133
Ref: 377012189133
Ref: library/socket socket socket getsockname12189473
Ref: 28312189473
Ref: library/socket socket socket getsockopt12189723
Ref: ec412189723
Ref: library/socket socket socket getblocking12190479
Ref: d5d12190479
Ref: library/socket socket socket gettimeout12190709
Ref: 383712190709
Ref: library/socket socket socket ioctl12190957
Ref: ec212190957
Ref: library/socket socket socket listen12191616
Ref: 105412191616
Ref: library/socket socket socket makefile12192090
Ref: 139b12192090
Ref: library/socket socket socket recv12193239
Ref: f9812193239
Ref: library/socket socket socket recvfrom12193948
Ref: f9912193948
Ref: library/socket socket socket recvmsg12194893
Ref: f9a12194893
Ref: library/socket socket socket recvmsg_into12198822
Ref: 133612198822
Ref: library/socket socket socket recvfrom_into12200471
Ref: 151a12200471
Ref: library/socket socket socket recv_into12201010
Ref: 151912201010
Ref: library/socket socket socket send12201462
Ref: f9b12201462
Ref: library/socket socket socket sendall12202279
Ref: f9c12202279
Ref: library/socket socket socket sendto12203259
Ref: f9d12203259
Ref: library/socket socket socket sendmsg12204103
Ref: 69612204103
Ref: library/socket socket socket sendmsg_afalg12206296
Ref: ec712206296
Ref: library/socket socket socket sendfile12206645
Ref: 105312206645
Ref: library/socket socket socket set_inheritable12207558
Ref: 10f812207558
Ref: library/socket socket socket setblocking12207747
Ref: 2eca12207747
Ref: library/socket socket socket settimeout12208321
Ref: 37e812208321
Ref: library/socket socket socket setsockopt12209059
Ref: ec512209059
Ref: library/socket socket socket shutdown12210194
Ref: 382512210194
Ref: library/socket socket socket share12210555
Ref: df612210555
Ref: library/socket socket socket family12211432
Ref: 383a12211432
Ref: library/socket socket socket type12211486
Ref: dfa12211486
Ref: library/socket socket socket proto12211536
Ref: 383b12211536
Ref: Socket Objects-Footnote-112211627
Ref: Socket Objects-Footnote-212211669
Ref: Socket Objects-Footnote-312211711
Ref: Socket Objects-Footnote-412211761
Ref: Socket Objects-Footnote-512211835
Ref: Socket Objects-Footnote-612211879
Ref: Socket Objects-Footnote-712211921
Ref: Socket Objects-Footnote-812211965
Ref: Socket Objects-Footnote-912212007
Ref: Socket Objects-Footnote-1012212049
Ref: Socket Objects-Footnote-1112212094
Ref: Socket Objects-Footnote-1212212139
Ref: Socket Objects-Footnote-1312212182
Ref: Socket Objects-Footnote-1412212225
Ref: Socket Objects-Footnote-1512212268
Ref: Socket Objects-Footnote-1612212311
Node: Notas sobre tempo limite de soquete12212362
Ref: library/socket notes-on-socket-timeouts12212520
Ref: 383c12212520
Ref: library/socket socket-timeouts12212520
Ref: 383912212520
Node: Timeouts and the connect method12213933
Ref: library/socket timeouts-and-the-connect-method12214075
Ref: 383d12214075
Node: Timeouts and the accept method12214550
Ref: library/socket timeouts-and-the-accept-method12214692
Ref: 383e12214692
Node: Exemplo<7>12215433
Ref: library/socket example12215568
Ref: 383f12215568
Ref: library/socket socket-example12215568
Ref: 384012215568
Ref: Exemplo<7>-Footnote-112223318
Node: ssl — Invólucro de TLS/SSL para objetos socket12223377
Ref: library/ssl doc12223599
Ref: 384112223599
Ref: library/ssl module-ssl12223599
Ref: d512223599
Ref: library/ssl no-color12223599
Ref: 384212223599
Ref: library/ssl ssl-tls-ssl-wrapper-for-socket-objects12223599
Ref: 384312223599
Ref: ssl — Invólucro de TLS/SSL para objetos socket-Footnote-112226884
Ref: ssl — Invólucro de TLS/SSL para objetos socket-Footnote-212226947
Node: Funções constantes e exceções12226989
Ref: library/ssl functions-constants-and-exceptions12227128
Ref: 384412227128
Node: Criação de socket12227390
Ref: library/ssl socket-creation12227509
Ref: 384512227509
Node: Criação de contexto12229104
Ref: library/ssl context-creation12229246
Ref: 384612229246
Ref: library/ssl ssl create_default_context12229396
Ref: 47912229396
Ref: Criação de contexto-Footnote-112233420
Ref: Criação de contexto-Footnote-212233479
Ref: Criação de contexto-Footnote-312233524
Node: Exceções<19>12233583
Ref: library/ssl exceptions12233723
Ref: 384b12233723
Ref: library/ssl ssl SSLError12233762
Ref: 147512233762
Ref: library/ssl ssl SSLError library12234338
Ref: 134312234338
Ref: library/ssl ssl SSLError reason12234622
Ref: 134412234622
Ref: library/ssl ssl SSLZeroReturnError12234887
Ref: 384c12234887
Ref: library/ssl ssl SSLWantReadError12235189
Ref: 105f12235189
Ref: library/ssl ssl SSLWantWriteError12235504
Ref: 106012235504
Ref: library/ssl ssl SSLSyscallError12235816
Ref: 384e12235816
Ref: library/ssl ssl SSLEOFError12236113
Ref: 19f012236113
Ref: library/ssl ssl SSLCertVerificationError12236389
Ref: d6912236389
Ref: library/ssl ssl SSLCertVerificationError verify_code12236561
Ref: 384f12236561
Ref: library/ssl ssl SSLCertVerificationError verify_message12236664
Ref: 385012236664
Ref: library/ssl ssl CertificateError12236761
Ref: 385112236761
Node: Random generation12236961
Ref: library/ssl random-generation12237109
Ref: 385212237109
Ref: library/ssl ssl RAND_bytes12237164
Ref: 73c12237164
Ref: library/ssl ssl RAND_status12237854
Ref: 1b6912237854
Ref: library/ssl ssl RAND_add12238174
Ref: 385312238174
Ref: Random generation-Footnote-112238620
Ref: Random generation-Footnote-212238714
Node: Manipulação de certificados12238773
Ref: library/ssl certificate-handling12238920
Ref: 385412238920
Ref: library/ssl ssl cert_time_to_seconds12238997
Ref: 106112238997
Ref: library/ssl ssl get_server_certificate12239908
Ref: a3312239908
Ref: library/ssl ssl DER_cert_to_PEM_cert12241085
Ref: 385612241085
Ref: library/ssl ssl PEM_cert_to_DER_cert12241267
Ref: 385712241267
Ref: library/ssl ssl get_default_verify_paths12241447
Ref: 11a012241447
Ref: library/ssl ssl enum_certificates12242330
Ref: 11ab12242330
Ref: library/ssl ssl enum_crls12243217
Ref: 11ac12243217
Ref: Manipulação de certificados-Footnote-112243794
Node: Constantes<9>12243853
Ref: library/ssl constants12243974
Ref: 385812243974
Ref: library/ssl ssl CERT_NONE12244147
Ref: 385912244147
Ref: library/ssl ssl CERT_OPTIONAL12244707
Ref: 385a12244707
Ref: library/ssl ssl CERT_REQUIRED12245458
Ref: 384812245458
Ref: library/ssl ssl VerifyMode12246429
Ref: 385c12246429
Ref: library/ssl ssl VERIFY_DEFAULT12246553
Ref: 11a512246553
Ref: library/ssl ssl VERIFY_CRL_CHECK_LEAF12246814
Ref: 11a612246814
Ref: library/ssl ssl VERIFY_CRL_CHECK_CHAIN12247268
Ref: 11a712247268
Ref: library/ssl ssl VERIFY_X509_STRICT12247482
Ref: 47b12247482
Ref: library/ssl ssl VERIFY_ALLOW_PROXY_CERTS12247670
Ref: 1b7e12247670
Ref: library/ssl ssl VERIFY_X509_TRUSTED_FIRST12247854
Ref: 385d12247854
Ref: library/ssl ssl VERIFY_X509_PARTIAL_CHAIN12248151
Ref: 47a12248151
Ref: library/ssl ssl VerifyFlags12248591
Ref: 385e12248591
Ref: library/ssl ssl PROTOCOL_TLS12248718
Ref: 384a12248718
Ref: library/ssl ssl PROTOCOL_TLS_CLIENT12249226
Ref: a6812249226
Ref: library/ssl ssl PROTOCOL_TLS_SERVER12249544
Ref: a6912249544
Ref: library/ssl ssl PROTOCOL_SSLv2312249764
Ref: 385f12249764
Ref: library/ssl ssl PROTOCOL_SSLv312249922
Ref: 385512249922
Ref: library/ssl ssl PROTOCOL_TLSv112250504
Ref: 386012250504
Ref: library/ssl ssl PROTOCOL_TLSv1_112250701
Ref: 119e12250701
Ref: library/ssl ssl PROTOCOL_TLSv1_212250982
Ref: 119f12250982
Ref: library/ssl ssl OP_ALL12251263
Ref: 386112251263
Ref: library/ssl ssl OP_NO_SSLv212251527
Ref: a3012251527
Ref: library/ssl ssl OP_NO_SSLv312251840
Ref: a3112251840
Ref: library/ssl ssl OP_NO_TLSv112252153
Ref: 386212252153
Ref: library/ssl ssl OP_NO_TLSv1_112252604
Ref: 386312252604
Ref: library/ssl ssl OP_NO_TLSv1_212253003
Ref: 386412253003
Ref: library/ssl ssl OP_NO_TLSv1_312253402
Ref: 1b4a12253402
Ref: library/ssl ssl OP_NO_RENEGOTIATION12254000
Ref: 386512254000
Ref: library/ssl ssl OP_CIPHER_SERVER_PREFERENCE12254288
Ref: 134512254288
Ref: library/ssl ssl OP_SINGLE_DH_USE12254526
Ref: 386612254526
Ref: library/ssl ssl OP_SINGLE_ECDH_USE12254786
Ref: 386712254786
Ref: library/ssl ssl OP_ENABLE_MIDDLEBOX_COMPAT12255050
Ref: 386812255050
Ref: library/ssl ssl OP_NO_COMPRESSION12255334
Ref: 134212255334
Ref: library/ssl ssl Options12255532
Ref: 386912255532
Ref: library/ssl ssl OP_NO_TICKET12255618
Ref: 386a12255618
Ref: library/ssl ssl OP_IGNORE_UNEXPECTED_EOF12255739
Ref: a2e12255739
Ref: library/ssl ssl OP_ENABLE_KTLS12255932
Ref: 1a4012255932
Ref: library/ssl ssl OP_LEGACY_SERVER_CONNECT12256647
Ref: 1a2512256647
Ref: library/ssl ssl HAS_ALPN12256812
Ref: 105c12256812
Ref: library/ssl ssl HAS_NEVER_CHECK_COMMON_NAME12257026
Ref: 386b12257026
Ref: library/ssl ssl HAS_ECDH12257269
Ref: 386c12257269
Ref: library/ssl ssl HAS_SNI12257533
Ref: 386d12257533
Ref: library/ssl ssl HAS_NPN12257721
Ref: 386e12257721
Ref: library/ssl ssl HAS_SSLv212258079
Ref: 386f12258079
Ref: library/ssl ssl HAS_SSLv312258223
Ref: 387012258223
Ref: library/ssl ssl HAS_TLSv112258367
Ref: 387112258367
Ref: library/ssl ssl HAS_TLSv1_112258511
Ref: d7012258511
Ref: library/ssl ssl HAS_TLSv1_212258657
Ref: 387212258657
Ref: library/ssl ssl HAS_TLSv1_312258803
Ref: 387312258803
Ref: library/ssl ssl HAS_PSK12258949
Ref: 387412258949
Ref: library/ssl ssl HAS_PHA12259074
Ref: 28512259074
Ref: library/ssl ssl CHANNEL_BINDING_TYPES12259199
Ref: 387512259199
Ref: library/ssl ssl OPENSSL_VERSION12259425
Ref: 141a12259425
Ref: library/ssl ssl OPENSSL_VERSION_INFO12259644
Ref: 141b12259644
Ref: library/ssl ssl OPENSSL_VERSION_NUMBER12259877
Ref: 141c12259877
Ref: library/ssl ssl ALERT_DESCRIPTION_HANDSHAKE_FAILURE12260153
Ref: 387612260153
Ref: library/ssl ssl ALERT_DESCRIPTION_INTERNAL_ERROR12260203
Ref: 387712260203
Ref: library/ssl ssl AlertDescription12260603
Ref: 387812260603
Ref: library/ssl ssl Purpose SERVER_AUTH12260751
Ref: 11a912260751
Ref: library/ssl ssl Purpose CLIENT_AUTH12261072
Ref: 11aa12261072
Ref: library/ssl ssl SSLErrorNumber12261393
Ref: 387912261393
Ref: library/ssl ssl TLSVersion12261526
Ref: 387a12261526
Ref: library/ssl ssl TLSVersion MINIMUM_SUPPORTED12261749
Ref: 387b12261749
Ref: library/ssl ssl TLSVersion MAXIMUM_SUPPORTED12261793
Ref: 387c12261793
Ref: library/ssl ssl TLSVersion SSLv312262015
Ref: 387d12262015
Ref: library/ssl ssl TLSVersion TLSv112262047
Ref: 387e12262047
Ref: library/ssl ssl TLSVersion TLSv1_112262079
Ref: 387f12262079
Ref: library/ssl ssl TLSVersion TLSv1_212262113
Ref: 388012262113
Ref: library/ssl ssl TLSVersion TLSv1_312262147
Ref: 388112262147
Ref: Constantes<9>-Footnote-112262422
Ref: Constantes<9>-Footnote-212262481
Ref: Constantes<9>-Footnote-312262540
Ref: Constantes<9>-Footnote-412262618
Ref: Constantes<9>-Footnote-512262677
Node: SSL Sockets12262770
Ref: library/ssl ssl-sockets12262930
Ref: 388212262930
Ref: library/ssl ssl SSLSocket12262973
Ref: add12262973
Ref: library/ssl ssl SSLSocket read12265422
Ref: 106412265422
Ref: library/ssl ssl SSLSocket write12266256
Ref: 106512266256
Ref: library/ssl ssl SSLSocket do_handshake12267506
Ref: 106312267506
Ref: library/ssl ssl SSLSocket getpeercert12268443
Ref: 11ae12268443
Ref: library/ssl ssl SSLSocket get_verified_chain12271979
Ref: 18b012271979
Ref: library/ssl ssl SSLSocket get_unverified_chain12272294
Ref: 18b112272294
Ref: library/ssl ssl SSLSocket cipher12272494
Ref: 377112272494
Ref: library/ssl ssl SSLSocket shared_ciphers12272779
Ref: 106212272779
Ref: library/ssl ssl SSLSocket compression12273265
Ref: 134112273265
Ref: library/ssl ssl SSLSocket get_channel_binding12273619
Ref: 134012273619
Ref: library/ssl ssl SSLSocket selected_alpn_protocol12274260
Ref: 105b12274260
Ref: library/ssl ssl SSLSocket selected_npn_protocol12274680
Ref: a6a12274680
Ref: library/ssl ssl SSLSocket unwrap12275116
Ref: 388312275116
Ref: library/ssl ssl SSLSocket verify_client_post_handshake12275540
Ref: c1d12275540
Ref: library/ssl ssl SSLSocket version12276427
Ref: 105e12276427
Ref: library/ssl ssl SSLSocket pending12276846
Ref: 388512276846
Ref: library/ssl ssl SSLSocket context12276985
Ref: 388412276985
Ref: library/ssl ssl SSLSocket server_side12277119
Ref: 388612277119
Ref: library/ssl ssl SSLSocket server_hostname12277295
Ref: d6c12277295
Ref: library/ssl ssl SSLSocket session12277805
Ref: 188f12277805
Ref: library/ssl ssl SSLSocket session_reused12278168
Ref: 388712278168
Ref: SSL Sockets-Footnote-112278277
Ref: SSL Sockets-Footnote-212278336
Node: SSL Contexts12278395
Ref: library/ssl ssl-contexts12278534
Ref: 388812278534
Ref: library/ssl ssl SSLContext12278885
Ref: 35412278885
Ref: library/ssl ssl SSLContext cert_store_stats12283888
Ref: 11a212283888
Ref: library/ssl ssl SSLContext load_cert_chain12284300
Ref: 59112284300
Ref: library/ssl ssl SSLContext load_default_certs12285926
Ref: 11a812285926
Ref: library/ssl ssl SSLContext load_verify_locations12286759
Ref: 10e412286759
Ref: library/ssl ssl SSLContext get_ca_certs12288092
Ref: 11a312288092
Ref: library/ssl ssl SSLContext get_ciphers12288736
Ref: ece12288736
Ref: library/ssl ssl SSLContext set_default_verify_paths12290045
Ref: 11a112290045
Ref: library/ssl ssl SSLContext set_ciphers12290515
Ref: 388a12290515
Ref: library/ssl ssl SSLContext set_alpn_protocols12291119
Ref: 105a12291119
Ref: library/ssl ssl SSLContext set_npn_protocols12291770
Ref: 35512291770
Ref: library/ssl ssl SSLContext sni_callback12292524
Ref: 1b7812292524
Ref: library/ssl ssl SSLContext set_servername_callback12295170
Ref: 11ad12295170
Ref: library/ssl ssl SSLContext load_dh_params12295850
Ref: 133e12295850
Ref: library/ssl ssl SSLContext set_ecdh_curve12296404
Ref: 133f12296404
Ref: library/ssl ssl SSLContext wrap_socket12297147
Ref: 73d12297147
Ref: library/ssl ssl SSLContext sslsocket_class12300065
Ref: 388b12300065
Ref: library/ssl ssl SSLContext wrap_bio12300386
Ref: d6f12300386
Ref: library/ssl ssl SSLContext sslobject_class12301136
Ref: 388c12301136
Ref: library/ssl ssl SSLContext session_stats12301435
Ref: 388d12301435
Ref: library/ssl ssl SSLContext check_hostname12301901
Ref: 385b12301901
Ref: library/ssl ssl SSLContext keylog_filename12303434
Ref: 384912303434
Ref: library/ssl ssl SSLContext maximum_version12303884
Ref: a6712303884
Ref: library/ssl ssl SSLContext minimum_version12304746
Ref: a6612304746
Ref: library/ssl ssl SSLContext num_tickets12304963
Ref: 388e12304963
Ref: library/ssl ssl SSLContext options12305200
Ref: a2f12305200
Ref: library/ssl ssl SSLContext post_handshake_auth12305936
Ref: c1c12305936
Ref: library/ssl ssl SSLContext protocol12306757
Ref: 388f12306757
Ref: library/ssl ssl SSLContext hostname_checks_common_name12306892
Ref: d6a12306892
Ref: library/ssl ssl SSLContext security_level12307332
Ref: 389012307332
Ref: library/ssl ssl SSLContext verify_flags12307511
Ref: 11a412307511
Ref: library/ssl ssl SSLContext verify_mode12308054
Ref: 384712308054
Ref: library/ssl ssl SSLContext set_psk_client_callback12308524
Ref: 389112308524
Ref: library/ssl ssl SSLContext set_psk_server_callback12310532
Ref: 389212310532
Ref: SSL Contexts-Footnote-112312423
Ref: SSL Contexts-Footnote-212312577
Ref: SSL Contexts-Footnote-312312664
Ref: SSL Contexts-Footnote-412312751
Ref: SSL Contexts-Footnote-512312905
Ref: SSL Contexts-Footnote-612312992
Ref: SSL Contexts-Footnote-712313079
Ref: SSL Contexts-Footnote-812313156
Ref: SSL Contexts-Footnote-912313210
Ref: SSL Contexts-Footnote-1012313269
Ref: SSL Contexts-Footnote-1112313348
Ref: SSL Contexts-Footnote-1212313408
Ref: SSL Contexts-Footnote-1312313485
Ref: SSL Contexts-Footnote-1412313551
Node: Certificados12313625
Ref: library/ssl certificates12313765
Ref: 389312313765
Ref: library/ssl ssl-certificates12313765
Ref: 388912313765
Ref: Certificados-Footnote-112316114
Node: Certificate chains12316173
Ref: library/ssl certificate-chains12316264
Ref: 389412316264
Node: CA certificates12317535
Ref: library/ssl ca-certificates12317663
Ref: 389512317663
Node: Combined key and certificate12318254
Ref: library/ssl combined-key-and-certificate12318388
Ref: 389612318388
Node: Self-signed certificates12319004
Ref: library/ssl self-signed-certificates12319114
Ref: 389712319114
Node: Exemplos<21>12320812
Ref: library/ssl examples12320969
Ref: 389812320969
Node: Testing for SSL support12321098
Ref: library/ssl testing-for-ssl-support12321200
Ref: 389912321200
Node: Client-side operation12321514
Ref: library/ssl client-side-operation12321646
Ref: 389a12321646
Node: Server-side operation12326393
Ref: library/ssl server-side-operation12326493
Ref: 389b12326493
Node: Notes on non-blocking sockets12328502
Ref: library/ssl notes-on-non-blocking-sockets12328688
Ref: 389c12328688
Ref: library/ssl ssl-nonblocking12328688
Ref: 384d12328688
Node: Підтримка BIO пам’яті<2>12331612
Ref: library/ssl memory-bio-support12331797
Ref: 389d12331797
Ref: library/ssl ssl SSLObject12332943
Ref: d6e12332943
Ref: library/ssl ssl MemoryBIO12336618
Ref: 105812336618
Ref: library/ssl ssl MemoryBIO pending12336747
Ref: 389e12336747
Ref: library/ssl ssl MemoryBIO eof12336845
Ref: 389f12336845
Ref: library/ssl ssl MemoryBIO read12336974
Ref: 38a012336974
Ref: library/ssl ssl MemoryBIO write12337136
Ref: 38a112337136
Ref: library/ssl ssl MemoryBIO write_eof12337422
Ref: 38a212337422
Node: SSL session12337715
Ref: library/ssl ssl-session12337903
Ref: 38a312337903
Ref: library/ssl ssl SSLSession12337976
Ref: ecd12337976
Ref: library/ssl ssl SSLSession id12338054
Ref: 38a412338054
Ref: library/ssl ssl SSLSession time12338077
Ref: 38a512338077
Ref: library/ssl ssl SSLSession timeout12338102
Ref: 38a612338102
Ref: library/ssl ssl SSLSession ticket_lifetime_hint12338130
Ref: 38a712338130
Ref: library/ssl ssl SSLSession has_ticket12338171
Ref: 38a812338171
Node: Considerações de segurança<2>12338202
Ref: library/ssl security-considerations12338356
Ref: 38a912338356
Ref: library/ssl ssl-security12338356
Ref: 372b12338356
Node: Best defaults12338503
Ref: library/ssl best-defaults12338609
Ref: 38aa12338609
Node: Manual settings12339770
Ref: library/ssl manual-settings12339901
Ref: 38ab12339901
Node: Verifying certificates12340034
Ref: library/ssl verifying-certificates12340134
Ref: 38ac12340134
Node: Protocol versions12341329
Ref: library/ssl protocol-versions12341454
Ref: 38ad12341454
Node: Cipher selection12342278
Ref: library/ssl cipher-selection12342372
Ref: 38ae12342372
Ref: Cipher selection-Footnote-112343028
Node: Multi-processing12343100
Ref: library/ssl multi-processing12343209
Ref: 38af12343209
Node: TLS 1 312343732
Ref: library/ssl ssl-tlsv1-312343866
Ref: d6d12343866
Ref: library/ssl tls-1-312343866
Ref: 38b012343866
Ref: TLS 1 3-Footnote-112345990
Ref: TLS 1 3-Footnote-212346056
Ref: TLS 1 3-Footnote-312346115
Ref: TLS 1 3-Footnote-412346174
Ref: TLS 1 3-Footnote-512346233
Ref: TLS 1 3-Footnote-612346292
Ref: TLS 1 3-Footnote-712346351
Ref: TLS 1 3-Footnote-812346427
Ref: TLS 1 3-Footnote-912346486
Node: select — Waiting for I/O completion12346544
Ref: library/select doc12346763
Ref: 38b112346763
Ref: library/select module-select12346763
Ref: c612346763
Ref: library/select no-color12346763
Ref: 38b212346763
Ref: library/select select-waiting-for-i-o-completion12346763
Ref: 38b312346763
Ref: library/select select error12348048
Ref: 124d12348048
Ref: library/select select devpoll12348257
Ref: 118c12348257
Ref: library/select select epoll12349039
Ref: 118a12349039
Ref: library/select select poll12350542
Ref: 2f3712350542
Ref: library/select select kqueue12350861
Ref: 198112350861
Ref: library/select select kevent12351213
Ref: 38b812351213
Ref: library/select select select12351490
Ref: f9412351490
Ref: library/select select PIPE_BUF12353761
Ref: 140612353761
Ref: select — Waiting for I/O completion-Footnote-112354454
Ref: select — Waiting for I/O completion-Footnote-212354496
Node: /dev/poll Polling Objects12354538
Ref: library/select dev-poll-polling-objects12354690
Ref: 38ba12354690
Ref: library/select devpoll-objects12354690
Ref: 38b412354690
Ref: library/select select devpoll close12355056
Ref: 118e12355056
Ref: library/select select devpoll closed12355175
Ref: 118f12355175
Ref: library/select select devpoll fileno12355288
Ref: 118d12355288
Ref: library/select select devpoll register12355416
Ref: 38bb12355416
Ref: library/select select devpoll modify12356399
Ref: 38bc12356399
Ref: library/select select devpoll unregister12356608
Ref: 38bd12356608
Ref: library/select select devpoll poll12356966
Ref: f9012356966
Ref: /dev/poll Polling Objects-Footnote-112358111
Node: Edge and Level Trigger Polling epoll Objects12358153
Ref: library/select edge-and-level-trigger-polling-epoll-objects12358329
Ref: 38be12358329
Ref: library/select epoll-objects12358329
Ref: 38b512358329
Ref: library/select select epoll close12361489
Ref: 118b12361489
Ref: library/select select epoll closed12361579
Ref: 38bf12361579
Ref: library/select select epoll fileno12361655
Ref: 38c012361655
Ref: library/select select epoll fromfd12361744
Ref: 38c112361744
Ref: library/select select epoll register12361835
Ref: 38c212361835
Ref: library/select select epoll modify12361936
Ref: 38c312361936
Ref: library/select select epoll unregister12362022
Ref: b4912362022
Ref: library/select select epoll poll12362217
Ref: f9112362217
Ref: Edge and Level Trigger Polling epoll Objects-Footnote-112362621
Node: Polling Objects12362663
Ref: library/select poll-objects12362828
Ref: 38b612362828
Ref: library/select polling-objects12362828
Ref: 38c412362828
Ref: library/select select poll register12363403
Ref: 38c512363403
Ref: library/select select poll modify12365385
Ref: 38c612365385
Ref: library/select select poll unregister12365687
Ref: 38c712365687
Ref: library/select select poll poll12366077
Ref: f9312366077
Ref: Polling Objects-Footnote-112367225
Node: Kqueue Objects12367267
Ref: library/select id112367402
Ref: 38c812367402
Ref: library/select kqueue-objects12367402
Ref: 38b712367402
Ref: library/select select kqueue close12367451
Ref: 38c912367451
Ref: library/select select kqueue closed12367543
Ref: 38ca12367543
Ref: library/select select kqueue fileno12367621
Ref: 38cb12367621
Ref: library/select select kqueue fromfd12367711
Ref: 38cc12367711
Ref: library/select select kqueue control12367803
Ref: f9212367803
Ref: Kqueue Objects-Footnote-112368456
Node: Kevent Objects12368498
Ref: library/select id212368609
Ref: 38cd12368609
Ref: library/select kevent-objects12368609
Ref: 38b912368609
Ref: library/select select kevent ident12368724
Ref: 38ce12368724
Ref: library/select select kevent filter12369025
Ref: 38cf12369025
Ref: library/select select kevent flags12370807
Ref: 38d012370807
Ref: library/select select kevent fflags12372471
Ref: 38d112372471
Ref: library/select select kevent data12376234
Ref: 38d212376234
Ref: library/select select kevent udata12376289
Ref: 38d312376289
Node: selectors — High-level I/O multiplexing12376343
Ref: library/selectors doc12376570
Ref: 38d412376570
Ref: library/selectors module-selectors12376570
Ref: c712376570
Ref: library/selectors no-color12376570
Ref: 38d512376570
Ref: library/selectors selectors-high-level-i-o-multiplexing12376570
Ref: 38d612376570
Ref: selectors — High-level I/O multiplexing-Footnote-112376938
Node: Introdução<11>12377007
Ref: library/selectors introduction12377120
Ref: 38d712377120
Node: Classes<4>12378478
Ref: library/selectors classes12378612
Ref: 38da12378612
Ref: library/selectors selectors EVENT_READ12379193
Ref: 38db12379193
Ref: library/selectors selectors EVENT_WRITE12379288
Ref: 38dc12379288
Ref: library/selectors selectors SelectorKey12379370
Ref: 38dd12379370
Ref: library/selectors selectors SelectorKey fileobj12379649
Ref: 38de12379649
Ref: library/selectors selectors SelectorKey fd12379712
Ref: 38df12379712
Ref: library/selectors selectors SelectorKey events12379781
Ref: 38e012379781
Ref: library/selectors selectors SelectorKey data12379871
Ref: 38e112379871
Ref: library/selectors selectors BaseSelector12380036
Ref: 38d812380036
Ref: library/selectors selectors BaseSelector register12380713
Ref: 38e212380713
Ref: library/selectors selectors BaseSelector unregister12381377
Ref: 38e312381377
Ref: library/selectors selectors BaseSelector modify12381998
Ref: dc312381998
Ref: library/selectors selectors BaseSelector select12382595
Ref: 38e412382595
Ref: library/selectors selectors BaseSelector close12383896
Ref: 38e512383896
Ref: library/selectors selectors BaseSelector get_key12384115
Ref: 38e612384115
Ref: library/selectors selectors BaseSelector get_map12384403
Ref: 38e712384403
Ref: library/selectors selectors DefaultSelector12384672
Ref: 38d912384672
Ref: library/selectors selectors SelectSelector12384881
Ref: 37ab12384881
Ref: library/selectors selectors PollSelector12384969
Ref: dc512384969
Ref: library/selectors selectors EpollSelector12385054
Ref: dc412385054
Ref: library/selectors selectors EpollSelector fileno12385141
Ref: 38e812385141
Ref: library/selectors selectors DevpollSelector12385283
Ref: dc612385283
Ref: library/selectors selectors DevpollSelector fileno12385374
Ref: 38e912385374
Ref: library/selectors selectors KqueueSelector12385551
Ref: 37ae12385551
Ref: library/selectors selectors KqueueSelector fileno12385640
Ref: 38ea12385640
Ref: Classes<4>-Footnote-112385819
Node: Exemplos<22>12385861
Ref: library/selectors examples12385970
Ref: 38eb12385970
Node: signal — Define manipuladores para eventos assíncronos12386997
Ref: library/signal doc12387235
Ref: 38ec12387235
Ref: library/signal module-signal12387235
Ref: cb12387235
Ref: library/signal no-color12387235
Ref: 38ed12387235
Ref: library/signal signal-set-handlers-for-asynchronous-events12387235
Ref: 38ee12387235
Ref: signal — Define manipuladores para eventos assíncronos-Footnote-112387765
Node: Regras gerais12387831
Ref: library/signal general-rules12387970
Ref: 38ef12387970
Node: Execução de manipuladores de sinais Python12389032
Ref: library/signal execution-of-python-signal-handlers12389151
Ref: 38f112389151
Node: Sinais e threads12390640
Ref: library/signal id112390759
Ref: 38f312390759
Ref: library/signal signals-and-threads12390759
Ref: 38f412390759
Node: Conteúdo do módulo<5>12391294
Ref: library/signal module-contents12391454
Ref: 38f512391454
Ref: library/signal signal Signals12392117
Ref: 38f912392117
Ref: library/signal signal Handlers12392267
Ref: 38fa12392267
Ref: library/signal signal Sigmasks12392437
Ref: 38fb12392437
Ref: library/signal signal SIG_DFL12392849
Ref: 1ac412392849
Ref: library/signal signal SIG_IGN12393219
Ref: 1ac312393219
Ref: library/signal signal SIGABRT12393346
Ref: 127812393346
Ref: library/signal signal SIGALRM12393417
Ref: 38fd12393417
Ref: library/signal signal SIGBREAK12393535
Ref: 38fe12393535
Ref: library/signal signal SIGBUS12393654
Ref: 127912393654
Ref: library/signal signal SIGCHLD12393778
Ref: 2f7212393778
Ref: library/signal signal SIGCLD12393894
Ref: 38ff12393894
Ref: library/signal signal SIGCONT12394006
Ref: 2f8012394006
Ref: library/signal signal SIGFPE12394133
Ref: 127712394133
Ref: library/signal signal SIGHUP12394392
Ref: 390012394392
Ref: library/signal signal SIGILL12394549
Ref: 127a12394549
Ref: library/signal signal SIGINT12394600
Ref: 25212394600
Ref: library/signal signal SIGKILL12394733
Ref: d4412394733
Ref: library/signal signal SIGPIPE12394900
Ref: 38f012394900
Ref: library/signal signal SIGQUIT12395078
Ref: 38fc12395078
Ref: library/signal signal SIGSEGV12395174
Ref: 127612395174
Ref: library/signal signal SIGSTKFLT12395265
Ref: 1b0812395265
Ref: library/signal signal SIGTERM12395627
Ref: 15d012395627
Ref: library/signal signal SIGUSR112395682
Ref: 390112395682
Ref: library/signal signal SIGUSR212395788
Ref: 390212395788
Ref: library/signal signal SIGWINCH12395894
Ref: 390312395894
Ref: library/signal signal CTRL_C_EVENT12396637
Ref: 155a12396637
Ref: library/signal signal CTRL_BREAK_EVENT12396900
Ref: 155b12396900
Ref: library/signal signal NSIG12397171
Ref: 1aa212397171
Ref: library/signal signal ITIMER_REAL12397323
Ref: 390512397323
Ref: library/signal signal ITIMER_VIRTUAL12397457
Ref: 390612397457
Ref: library/signal signal ITIMER_PROF12397624
Ref: 390712397624
Ref: library/signal signal SIG_BLOCK12398027
Ref: 38f612398027
Ref: library/signal signal SIG_UNBLOCK12398229
Ref: 38f712398229
Ref: library/signal signal SIG_SETMASK12398436
Ref: 38f812398436
Ref: library/signal signal ItimerError12398702
Ref: 390812398702
Ref: library/signal signal alarm12399257
Ref: 390b12399257
Ref: library/signal signal getsignal12399958
Ref: 196212399958
Ref: library/signal signal strsignal12400558
Ref: 1cd512400558
Ref: library/signal signal valid_signals12400872
Ref: 390412400872
Ref: library/signal signal pause12401133
Ref: 390c12401133
Ref: library/signal signal raise_signal12401538
Ref: 1aa612401538
Ref: library/signal signal pidfd_send_signal12401684
Ref: b1b12401684
Ref: library/signal signal pthread_kill12402284
Ref: 132d12402284
Ref: library/signal signal pthread_sigmask12403634
Ref: 132c12403634
Ref: library/signal signal setitimer12405139
Ref: 390912405139
Ref: library/signal signal getitimer12406258
Ref: 390a12406258
Ref: library/signal signal set_wakeup_fd12406424
Ref: d5b12406424
Ref: library/signal signal siginterrupt12408944
Ref: 133112408944
Ref: library/signal signal signal12409685
Ref: 133012409685
Ref: library/signal signal sigpending12411299
Ref: 132e12411299
Ref: library/signal signal sigwait12411774
Ref: 132f12411774
Ref: library/signal signal sigwaitinfo12412360
Ref: f9f12412360
Ref: library/signal signal sigtimedwait12413666
Ref: f9e12413666
Ref: Conteúdo do módulo<5>-Footnote-112414529
Ref: Conteúdo do módulo<5>-Footnote-212414580
Ref: Conteúdo do módulo<5>-Footnote-312414635
Ref: Conteúdo do módulo<5>-Footnote-412414680
Ref: Conteúdo do módulo<5>-Footnote-512414725
Ref: Conteúdo do módulo<5>-Footnote-612414771
Ref: Conteúdo do módulo<5>-Footnote-712414817
Ref: Conteúdo do módulo<5>-Footnote-812414863
Ref: Conteúdo do módulo<5>-Footnote-912414908
Ref: Conteúdo do módulo<5>-Footnote-1012414954
Ref: Conteúdo do módulo<5>-Footnote-1112415012
Ref: Conteúdo do módulo<5>-Footnote-1212415065
Ref: Conteúdo do módulo<5>-Footnote-1312415117
Ref: Conteúdo do módulo<5>-Footnote-1412415173
Ref: Conteúdo do módulo<5>-Footnote-1512415226
Ref: Conteúdo do módulo<5>-Footnote-1612415273
Ref: Conteúdo do módulo<5>-Footnote-1712415324
Ref: Conteúdo do módulo<5>-Footnote-1812415372
Ref: Conteúdo do módulo<5>-Footnote-1912415424
Ref: Conteúdo do módulo<5>-Footnote-2012415467
Ref: Conteúdo do módulo<5>-Footnote-2112415520
Node: Exemplos<23>12415563
Ref: library/signal examples12415728
Ref: 390d12415728
Ref: library/signal signal-example12415728
Ref: 390e12415728
Node: Nota sobre SIGPIPE12416757
Ref: library/signal note-on-sigpipe12416946
Ref: 390f12416946
Ref: Nota sobre SIGPIPE-Footnote-112418509
Node: Nota sobre manipuladores de sinais e exceções12418553
Ref: library/signal handlers-and-exceptions12418721
Ref: 257e12418721
Ref: library/signal note-on-signal-handlers-and-exceptions12418721
Ref: 391012418721
Node: mmap — Suporte a arquivos mapeados na memória12421479
Ref: library/mmap doc12421667
Ref: 391112421667
Ref: library/mmap mmap-memory-mapped-file-support12421667
Ref: 391212421667
Ref: library/mmap module-mmap12421667
Ref: 9412421667
Ref: library/mmap no-color12421667
Ref: 391312421667
Ref: library/mmap mmap mmap12424586
Ref: 51312424586
Ref: library/mmap mmap mmap close12430475
Ref: 391912430475
Ref: library/mmap mmap mmap closed12430687
Ref: 391a12430687
Ref: library/mmap mmap mmap find12430797
Ref: 391b12430797
Ref: library/mmap mmap mmap flush12431229
Ref: c8212431229
Ref: library/mmap mmap mmap madvise12432146
Ref: bf112432146
Ref: library/mmap mmap mmap move12432720
Ref: 391d12432720
Ref: library/mmap mmap mmap read12432999
Ref: 12d912432999
Ref: library/mmap mmap mmap read_byte12433453
Ref: 391e12433453
Ref: library/mmap mmap mmap readline12433602
Ref: 391f12433602
Ref: library/mmap mmap mmap resize12433828
Ref: 391812433828
Ref: library/mmap mmap mmap rfind12434689
Ref: 392012434689
Ref: library/mmap mmap mmap seek12435123
Ref: 51512435123
Ref: library/mmap mmap mmap seekable12435613
Ref: 51412435613
Ref: library/mmap mmap mmap size12435789
Ref: 391712435789
Ref: library/mmap mmap mmap tell12435929
Ref: 392112435929
Ref: library/mmap mmap mmap write12436017
Ref: f3a12436017
Ref: library/mmap mmap mmap write_byte12436727
Ref: 392212436727
Node: Constantes MADV_*12437096
Ref: library/mmap madv-constants12437223
Ref: 392312437223
Ref: library/mmap madvise-constants12437223
Ref: 391c12437223
Ref: library/mmap mmap MADV_NORMAL12437278
Ref: 392412437278
Ref: library/mmap mmap MADV_RANDOM12437305
Ref: 392512437305
Ref: library/mmap mmap MADV_SEQUENTIAL12437332
Ref: 392612437332
Ref: library/mmap mmap MADV_WILLNEED12437363
Ref: 392712437363
Ref: library/mmap mmap MADV_DONTNEED12437392
Ref: 392812437392
Ref: library/mmap mmap MADV_REMOVE12437421
Ref: 392912437421
Ref: library/mmap mmap MADV_DONTFORK12437448
Ref: 392a12437448
Ref: library/mmap mmap MADV_DOFORK12437477
Ref: 392b12437477
Ref: library/mmap mmap MADV_HWPOISON12437504
Ref: 392c12437504
Ref: library/mmap mmap MADV_MERGEABLE12437533
Ref: 392d12437533
Ref: library/mmap mmap MADV_UNMERGEABLE12437563
Ref: 392e12437563
Ref: library/mmap mmap MADV_SOFT_OFFLINE12437595
Ref: 392f12437595
Ref: library/mmap mmap MADV_HUGEPAGE12437628
Ref: 393012437628
Ref: library/mmap mmap MADV_NOHUGEPAGE12437657
Ref: 393112437657
Ref: library/mmap mmap MADV_DONTDUMP12437688
Ref: 393212437688
Ref: library/mmap mmap MADV_DODUMP12437717
Ref: 393312437717
Ref: library/mmap mmap MADV_FREE12437744
Ref: 393412437744
Ref: library/mmap mmap MADV_NOSYNC12437769
Ref: 393512437769
Ref: library/mmap mmap MADV_AUTOSYNC12437796
Ref: 393612437796
Ref: library/mmap mmap MADV_NOCORE12437825
Ref: 393712437825
Ref: library/mmap mmap MADV_CORE12437852
Ref: 393812437852
Ref: library/mmap mmap MADV_PROTECT12437877
Ref: 393912437877
Ref: library/mmap mmap MADV_FREE_REUSABLE12437905
Ref: 393a12437905
Ref: library/mmap mmap MADV_FREE_REUSE12437939
Ref: 393b12437939
Node: Constantes MAP_*12438184
Ref: library/mmap id112438311
Ref: 393c12438311
Ref: library/mmap map-constants12438311
Ref: 391612438311
Ref: library/mmap mmap MAP_SHARED12438364
Ref: 391512438364
Ref: library/mmap mmap MAP_PRIVATE12438390
Ref: 391412438390
Ref: library/mmap mmap MAP_32BIT12438417
Ref: 195812438417
Ref: library/mmap mmap MAP_ALIGNED_SUPER12438442
Ref: 19ff12438442
Ref: library/mmap mmap MAP_ANON12438475
Ref: 393d12438475
Ref: library/mmap mmap MAP_ANONYMOUS12438499
Ref: 393e12438499
Ref: library/mmap mmap MAP_CONCEAL12438528
Ref: 1a0012438528
Ref: library/mmap mmap MAP_DENYWRITE12438555
Ref: 393f12438555
Ref: library/mmap mmap MAP_EXECUTABLE12438584
Ref: 394012438584
Ref: library/mmap mmap MAP_HASSEMAPHORE12438614
Ref: 195312438614
Ref: library/mmap mmap MAP_JIT12438646
Ref: 195512438646
Ref: library/mmap mmap MAP_NOCACHE12438669
Ref: 195412438669
Ref: library/mmap mmap MAP_NOEXTEND12438696
Ref: 195212438696
Ref: library/mmap mmap MAP_NORESERVE12438724
Ref: 195112438724
Ref: library/mmap mmap MAP_POPULATE12438753
Ref: 1beb12438753
Ref: library/mmap mmap MAP_RESILIENT_CODESIGN12438781
Ref: 195612438781
Ref: library/mmap mmap MAP_RESILIENT_MEDIA12438819
Ref: 195712438819
Ref: library/mmap mmap MAP_STACK12438854
Ref: 394112438854
Ref: library/mmap mmap MAP_TPRO12438879
Ref: 195b12438879
Ref: library/mmap mmap MAP_TRANSLATED_ALLOW_EXECUTE12438903
Ref: 195912438903
Ref: library/mmap mmap MAP_UNIX0312438947
Ref: 195a12438947
Node: Manuseio de Dados na Internet12439907
Ref: library/netdata doc12440108
Ref: 394212440108
Ref: library/netdata internet-data-handling12440108
Ref: 394312440108
Ref: library/netdata netdata12440108
Ref: 394412440108
Ref: library/netdata no-color12440108
Ref: 394512440108
Node: email — Um e-mail e um pacote MIME manipulável12440753
Ref: library/email doc12440918
Ref: 394612440918
Ref: library/email email-an-email-and-mime-handling-package12440918
Ref: 394712440918
Ref: library/email module-email12440918
Ref: 3f12440918
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-112448051
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-212448125
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-312448184
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-412448243
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-512448302
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-612448361
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-712448420
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-812448479
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-912448538
Node: email message Representing an email message12448597
Ref: library/email message doc12448770
Ref: 394812448770
Ref: library/email message email-message-representing-an-email-message12448770
Ref: 394912448770
Ref: library/email message module-email message12448770
Ref: 4812448770
Ref: library/email message email message EmailMessage12451250
Ref: 57912451250
Ref: library/email message email message EmailMessage as_string12451732
Ref: 394c12451732
Ref: library/email message email message EmailMessage __str__12453587
Ref: 394e12453587
Ref: library/email message email message EmailMessage as_bytes12454058
Ref: 394f12454058
Ref: library/email message email message EmailMessage __bytes__12455223
Ref: 395012455223
Ref: library/email message email message EmailMessage is_multipart12455400
Ref: 395112455400
Ref: library/email message email message EmailMessage set_unixfrom12456086
Ref: 395212456086
Ref: library/email message email message EmailMessage get_unixfrom12456309
Ref: 395412456309
Ref: library/email message email message EmailMessage __len__12457442
Ref: 395612457442
Ref: library/email message email message EmailMessage __contains__12457541
Ref: 395712457541
Ref: library/email message email message EmailMessage __getitem__12457932
Ref: 395812457932
Ref: library/email message email message EmailMessage __setitem__12458650
Ref: 395b12458650
Ref: library/email message email message EmailMessage __delitem__12459689
Ref: 395c12459689
Ref: library/email message email message EmailMessage keys12459916
Ref: 395512459916
Ref: library/email message email message EmailMessage values12460011
Ref: 395d12460011
Ref: library/email message email message EmailMessage items12460102
Ref: 395e12460102
Ref: library/email message email message EmailMessage get12460234
Ref: 395f12460234
Ref: library/email message email message EmailMessage get_all12460583
Ref: 395912460583
Ref: library/email message email message EmailMessage add_header12460821
Ref: 396012460821
Ref: library/email message email message EmailMessage replace_header12462789
Ref: 396112462789
Ref: library/email message email message EmailMessage get_content_type12463096
Ref: 396212463096
Ref: library/email message email message EmailMessage get_content_maintype12463981
Ref: 396412463981
Ref: library/email message email message EmailMessage get_content_subtype12464188
Ref: 396512464188
Ref: library/email message email message EmailMessage get_default_type12464382
Ref: 396312464382
Ref: library/email message email message EmailMessage set_default_type12464703
Ref: 396612464703
Ref: library/email message email message EmailMessage set_param12465146
Ref: 396712465146
Ref: library/email message email message EmailMessage del_param12466792
Ref: 396912466792
Ref: library/email message email message EmailMessage get_filename12467231
Ref: 396a12467231
Ref: library/email message email message EmailMessage get_boundary12467771
Ref: 396c12467771
Ref: library/email message email message EmailMessage set_boundary12468136
Ref: 396d12468136
Ref: library/email message email message EmailMessage get_content_charset12468805
Ref: 396f12468805
Ref: library/email message email message EmailMessage get_charsets12469108
Ref: 397012469108
Ref: library/email message email message EmailMessage is_attachment12469802
Ref: 397112469802
Ref: library/email message email message EmailMessage get_content_disposition12470171
Ref: 397312470171
Ref: library/email message email message EmailMessage walk12470654
Ref: 397412470654
Ref: library/email message email message EmailMessage get_body12472668
Ref: 397512472668
Ref: library/email message email message EmailMessage iter_attachments12474788
Ref: 397612474788
Ref: library/email message email message EmailMessage iter_parts12475763
Ref: 397712475763
Ref: library/email message email message EmailMessage get_content12475977
Ref: 397812475977
Ref: library/email message email message EmailMessage set_content12476388
Ref: 1b4c12476388
Ref: library/email message email message EmailMessage make_related12476799
Ref: 397b12476799
Ref: library/email message email message EmailMessage make_alternative12477288
Ref: 397c12477288
Ref: library/email message email message EmailMessage make_mixed12477808
Ref: 397d12477808
Ref: library/email message email message EmailMessage add_related12478348
Ref: 397e12478348
Ref: library/email message email message EmailMessage add_alternative12479106
Ref: 398012479106
Ref: library/email message email message EmailMessage add_attachment12479797
Ref: 398112479797
Ref: library/email message email message EmailMessage clear12480783
Ref: 398212480783
Ref: library/email message email message EmailMessage clear_content12480865
Ref: 398312480865
Ref: library/email message email message EmailMessage preamble12481127
Ref: 398412481127
Ref: library/email message email message EmailMessage epilogue12482390
Ref: 398512482390
Ref: library/email message email message EmailMessage defects12482735
Ref: 398612482735
Ref: library/email message email message MIMEPart12482976
Ref: 113012482976
Ref: email message Representing an email message-Footnote-112483343
Ref: email message Representing an email message-Footnote-212483416
Ref: email message Representing an email message-Footnote-312483613
Ref: email message Representing an email message-Footnote-412483672
Ref: email message Representing an email message-Footnote-512483731
Ref: email message Representing an email message-Footnote-612483790
Ref: email message Representing an email message-Footnote-712483849
Ref: email message Representing an email message-Footnote-812483908
Ref: email message Representing an email message-Footnote-912483967
Ref: email message Representing an email message-Footnote-1012484026
Ref: email message Representing an email message-Footnote-1112484086
Ref: email message Representing an email message-Footnote-1212484146
Ref: email message Representing an email message-Footnote-1312484206
Node: email parser Parsing email messages12484266
Ref: library/email parser doc12484492
Ref: 398712484492
Ref: library/email parser email-parser-parsing-email-messages12484492
Ref: 398812484492
Ref: library/email parser module-email parser12484492
Ref: 5212484492
Ref: library/email parser no-color12484492
Ref: 398912484492
Ref: email parser Parsing email messages-Footnote-112486891
Node: API do FeedParser12486963
Ref: library/email parser feedparser-api12487071
Ref: 398b12487071
Ref: library/email parser email parser BytesFeedParser12488376
Ref: 13c712488376
Ref: library/email parser email parser BytesFeedParser feed12489600
Ref: 398c12489600
Ref: library/email parser email parser BytesFeedParser close12490036
Ref: 398d12490036
Ref: library/email parser email parser FeedParser12490277
Ref: 398a12490277
Node: Parser API12490757
Ref: library/email parser parser-api12490890
Ref: 398e12490890
Ref: library/email parser email parser BytesParser12491624
Ref: 13c812491624
Ref: library/email parser email parser BytesParser parse12492296
Ref: 398f12492296
Ref: library/email parser email parser BytesParser parsebytes12493342
Ref: 399012493342
Ref: library/email parser email parser BytesHeaderParser12493857
Ref: 12b712493857
Ref: library/email parser email parser Parser12494084
Ref: 139912494084
Ref: library/email parser email parser Parser parse12494433
Ref: 399112494433
Ref: library/email parser email parser Parser parsestr12494872
Ref: 399212494872
Ref: library/email parser email parser HeaderParser12495313
Ref: 12b812495313
Ref: library/email parser email message_from_bytes12495712
Ref: 13c512495712
Ref: library/email parser email message_from_binary_file12496188
Ref: 13c612496188
Ref: library/email parser email message_from_string12496672
Ref: 399312496672
Ref: library/email parser email message_from_file12497069
Ref: 399412497069
Ref: Parser API-Footnote-112497803
Ref: Parser API-Footnote-212497862
Node: Additional notes12497921
Ref: library/email parser additional-notes12498028
Ref: 399512498028
Node: email generator Geração de documentos MIME12499582
Ref: library/email generator doc12499792
Ref: 399712499792
Ref: library/email generator email-generator-generating-mime-documents12499792
Ref: 399812499792
Ref: library/email generator module-email generator12499792
Ref: 4412499792
Ref: library/email generator no-color12499792
Ref: 399912499792
Ref: library/email generator email generator BytesGenerator12502063
Ref: 13cb12502063
Ref: library/email generator email generator BytesGenerator flatten12504140
Ref: 399b12504140
Ref: library/email generator email generator BytesGenerator clone12506120
Ref: 399e12506120
Ref: library/email generator email generator BytesGenerator write12506336
Ref: 399c12506336
Ref: library/email generator email generator Generator12507445
Ref: 13ca12507445
Ref: library/email generator email generator Generator flatten12509444
Ref: 399f12509444
Ref: library/email generator email generator Generator clone12511355
Ref: 39a112511355
Ref: library/email generator email generator Generator write12511548
Ref: 39a012511548
Ref: library/email generator email generator DecodedGenerator12512497
Ref: e8912512497
Ref: email generator Geração de documentos MIME-Footnote-112513946
Ref: email generator Geração de documentos MIME-Footnote-212514022
Ref: email generator Geração de documentos MIME-Footnote-312514591
Ref: email generator Geração de documentos MIME-Footnote-412514643
Ref: email generator Geração de documentos MIME-Footnote-512514702
Ref: email generator Geração de documentos MIME-Footnote-612514754
Node: email policy Policy Objects12514813
Ref: library/email policy doc12515031
Ref: 39a212515031
Ref: library/email policy email-policy-policy-objects12515031
Ref: 39a312515031
Ref: library/email policy module-email policy12515031
Ref: 5312515031
Ref: library/email policy no-color12515031
Ref: 39a412515031
Ref: library/email policy email policy Policy12521017
Ref: 12af12521017
Ref: library/email policy email policy Policy max_line_length12521841
Ref: 394d12521841
Ref: library/email policy email policy Policy linesep12522146
Ref: 39a512522146
Ref: library/email policy email policy Policy cte_type12522414
Ref: 399d12522414
Ref: library/email policy email policy Policy raise_on_defect12523524
Ref: 39a712523524
Ref: library/email policy email policy Policy mangle_from_12523767
Ref: fec12523767
Ref: library/email policy email policy Policy message_factory12524100
Ref: e8a12524100
Ref: library/email policy email policy Policy verify_generated_headers12524381
Ref: 4ec12524381
Ref: library/email policy email policy Policy clone12525233
Ref: 12b112525233
Ref: library/email policy email policy Policy handle_defect12525720
Ref: 39aa12525720
Ref: library/email policy email policy Policy register_defect12526213
Ref: 39a812526213
Ref: library/email policy email policy Policy header_max_count12526920
Ref: 39ac12526920
Ref: library/email policy email policy Policy header_source_parse12527983
Ref: 39ad12527983
Ref: library/email policy email policy Policy header_store_parse12528997
Ref: 39ae12528997
Ref: library/email policy email policy Policy header_fetch_parse12529759
Ref: 39af12529759
Ref: library/email policy email policy Policy fold12530583
Ref: 39b012530583
Ref: library/email policy email policy Policy fold_binary12531300
Ref: 39a612531300
Ref: library/email policy email policy EmailPolicy12531635
Ref: 12b312531635
Ref: library/email policy email policy EmailPolicy utf812532474
Ref: fee12532474
Ref: library/email policy email policy EmailPolicy refold_source12532869
Ref: 399a12532869
Ref: library/email policy email policy EmailPolicy header_factory12533670
Ref: 39b112533670
Ref: library/email policy email policy EmailPolicy content_manager12534280
Ref: 113112534280
Ref: library/email policy email policy EmailPolicy header_max_count12534996
Ref: 39b312534996
Ref: library/email policy email policy EmailPolicy header_source_parse12535203
Ref: 186912535203
Ref: library/email policy email policy EmailPolicy header_store_parse12535589
Ref: 39b512535589
Ref: library/email policy email policy EmailPolicy header_fetch_parse12536071
Ref: 39b612536071
Ref: library/email policy email policy EmailPolicy fold12536498
Ref: 192e12536498
Ref: library/email policy email policy EmailPolicy fold_binary12537662
Ref: 39b712537662
Ref: library/email policy email policy default12538483
Ref: 394b12538483
Ref: library/email policy email policy SMTP12538693
Ref: 39b812538693
Ref: library/email policy email policy SMTPUTF812538895
Ref: 39b912538895
Ref: library/email policy email policy HTTP12539310
Ref: 39ba12539310
Ref: library/email policy email policy strict12539502
Ref: 39bb12539502
Ref: library/email policy email policy Compat3212540880
Ref: 12b012540880
Ref: library/email policy email policy Compat32 mangle_from_12541414
Ref: 39bc12541414
Ref: library/email policy email policy Compat32 header_source_parse12541600
Ref: 186a12541600
Ref: library/email policy email policy Compat32 header_store_parse12541986
Ref: 39bd12541986
Ref: library/email policy email policy Compat32 header_fetch_parse12542093
Ref: 39be12542093
Ref: library/email policy email policy Compat32 fold12542336
Ref: 39bf12542336
Ref: library/email policy email policy Compat32 fold_binary12542680
Ref: 39c012542680
Ref: library/email policy email policy compat3212543211
Ref: e8b12543211
Ref: email policy Policy Objects-Footnote-112543415
Ref: email policy Policy Objects-Footnote-212543487
Ref: email policy Policy Objects-Footnote-312543546
Ref: email policy Policy Objects-Footnote-412543605
Ref: email policy Policy Objects-Footnote-512543664
Ref: email policy Policy Objects-Footnote-612543723
Ref: email policy Policy Objects-Footnote-712543782
Ref: email policy Policy Objects-Footnote-812543841
Ref: email policy Policy Objects-Footnote-912543911
Ref: email policy Policy Objects-Footnote-1012543970
Ref: email policy Policy Objects-Footnote-1112544030
Ref: email policy Policy Objects-Footnote-1212544090
Node: email errors Classes de Exceção e Defeito12544150
Ref: library/email errors doc12544366
Ref: 39c112544366
Ref: library/email errors email-errors-exception-and-defect-classes12544366
Ref: 39c212544366
Ref: library/email errors module-email errors12544366
Ref: 4312544366
Ref: library/email errors no-color12544366
Ref: 39c312544366
Ref: library/email errors email errors MessageError12544670
Ref: 39c412544670
Ref: library/email errors email errors MessageParseError12544912
Ref: 39c512544912
Ref: library/email errors email errors HeaderParseError12545212
Ref: 396e12545212
Ref: library/email errors email errors BoundaryError12545855
Ref: 39c612545855
Ref: library/email errors email errors MultipartConversionError12545937
Ref: 39c712545937
Ref: library/email errors email errors HeaderWriteError12546298
Ref: 39a912546298
Ref: library/email errors email errors MessageDefect12546430
Ref: 39ab12546430
Ref: library/email errors email errors HeaderDefect12546601
Ref: 39ca12546601
Ref: library/email errors email errors NoBoundaryInMultipartDefect12547214
Ref: 39cb12547214
Ref: library/email errors email errors StartBoundaryNotFoundDefect12547356
Ref: 39cc12547356
Ref: library/email errors email errors CloseBoundaryNotFoundDefect12547501
Ref: 39cd12547501
Ref: library/email errors email errors FirstHeaderLineIsContinuationDefect12547682
Ref: 39ce12547682
Ref: library/email errors email errors MisplacedEnvelopeHeaderDefect12547815
Ref: 39cf12547815
Ref: library/email errors email errors MissingHeaderBodySeparatorDefect12547948
Ref: 39d012547948
Ref: library/email errors email errors MalformedHeaderDefect12548237
Ref: 39d112548237
Ref: library/email errors email errors MultipartInvariantViolationDefect12548477
Ref: 399612548477
Ref: library/email errors email errors InvalidBase64PaddingDefect12548795
Ref: 39d212548795
Ref: library/email errors email errors InvalidBase64CharactersDefect12549039
Ref: 39d312549039
Ref: library/email errors email errors InvalidBase64LengthDefect12549295
Ref: 39d412549295
Ref: library/email errors email errors InvalidDateDefect12549535
Ref: 39d512549535
Ref: email errors Classes de Exceção e Defeito-Footnote-112549715
Ref: email errors Classes de Exceção e Defeito-Footnote-212549787
Node: email headerregistry Custom Header Objects12549846
Ref: library/email headerregistry doc12550082
Ref: 39d612550082
Ref: library/email headerregistry email-headerregistry-custom-header-objects12550082
Ref: 39d712550082
Ref: library/email headerregistry module-email headerregistry12550082
Ref: 4612550082
Ref: library/email headerregistry no-color12550082
Ref: 39d812550082
Ref: library/email headerregistry email headerregistry BaseHeader12551858
Ref: 395a12551858
Ref: library/email headerregistry email headerregistry BaseHeader name12552172
Ref: 39db12552172
Ref: library/email headerregistry email headerregistry BaseHeader defects12552422
Ref: 39dc12552422
Ref: library/email headerregistry email headerregistry BaseHeader max_count12552780
Ref: 39b412552780
Ref: library/email headerregistry email headerregistry BaseHeader fold12553296
Ref: 39dd12553296
Ref: library/email headerregistry email headerregistry UnstructuredHeader12555488
Ref: 39da12555488
Ref: library/email headerregistry email headerregistry DateHeader12556568
Ref: 39de12556568
Ref: library/email headerregistry email headerregistry DateHeader datetime12556932
Ref: 39df12556932
Ref: library/email headerregistry email headerregistry AddressHeader12558500
Ref: 39e012558500
Ref: library/email headerregistry email headerregistry AddressHeader groups12558785
Ref: 39e112558785
Ref: library/email headerregistry email headerregistry AddressHeader addresses12559099
Ref: 39e412559099
Ref: library/email headerregistry email headerregistry SingleAddressHeader12560260
Ref: 39e612560260
Ref: library/email headerregistry email headerregistry SingleAddressHeader address12560405
Ref: 39e712560405
Ref: library/email headerregistry email headerregistry MIMEVersionHeader12560936
Ref: 39e812560936
Ref: library/email headerregistry email headerregistry MIMEVersionHeader version12561329
Ref: 39e912561329
Ref: library/email headerregistry email headerregistry MIMEVersionHeader major12561455
Ref: 39ea12561455
Ref: library/email headerregistry email headerregistry MIMEVersionHeader minor12561531
Ref: 39eb12561531
Ref: library/email headerregistry email headerregistry ParameterizedMIMEHeader12561607
Ref: 39ec12561607
Ref: library/email headerregistry email headerregistry ParameterizedMIMEHeader params12561991
Ref: 396812561991
Ref: library/email headerregistry email headerregistry ContentTypeHeader12562087
Ref: 39ed12562087
Ref: library/email headerregistry email headerregistry ContentTypeHeader content_type12562239
Ref: 39ee12562239
Ref: library/email headerregistry email headerregistry ContentTypeHeader maintype12562344
Ref: 39ef12562344
Ref: library/email headerregistry email headerregistry ContentTypeHeader subtype12562373
Ref: 39f012562373
Ref: library/email headerregistry email headerregistry ContentDispositionHeader12562401
Ref: 39f112562401
Ref: library/email headerregistry email headerregistry ContentDispositionHeader content_disposition12562572
Ref: 39f212562572
Ref: library/email headerregistry email headerregistry ContentTransferEncoding12562708
Ref: 39f312562708
Ref: library/email headerregistry email headerregistry ContentTransferEncoding cte12562824
Ref: 39f412562824
Ref: library/email headerregistry email headerregistry HeaderRegistry12562992
Ref: 39d912562992
Ref: library/email headerregistry email headerregistry HeaderRegistry map_to_type12564726
Ref: 39f512564726
Ref: library/email headerregistry email headerregistry HeaderRegistry __getitem__12565062
Ref: 39f612565062
Ref: library/email headerregistry email headerregistry HeaderRegistry __call__12565186
Ref: 39f712565186
Ref: library/email headerregistry email headerregistry Address12565829
Ref: 39e512565829
Ref: library/email headerregistry email headerregistry Address display_name12566669
Ref: 39f812566669
Ref: library/email headerregistry email headerregistry Address username12566894
Ref: 39f912566894
Ref: library/email headerregistry email headerregistry Address domain12567013
Ref: 39fa12567013
Ref: library/email headerregistry email headerregistry Address addr_spec12567092
Ref: 39fb12567092
Ref: library/email headerregistry email headerregistry Address __str__12567309
Ref: 39fc12567309
Ref: library/email headerregistry email headerregistry Group12567749
Ref: 39e212567749
Ref: library/email headerregistry email headerregistry Group display_name12568299
Ref: 39e312568299
Ref: library/email headerregistry email headerregistry Group addresses12568553
Ref: 39fd12568553
Ref: library/email headerregistry email headerregistry Group __str__12568700
Ref: 39fe12568700
Ref: email headerregistry Custom Header Objects-Footnote-112569141
Ref: email headerregistry Custom Header Objects-Footnote-212569222
Ref: email headerregistry Custom Header Objects-Footnote-312569291
Ref: email headerregistry Custom Header Objects-Footnote-412569350
Ref: email headerregistry Custom Header Objects-Footnote-512569409
Ref: email headerregistry Custom Header Objects-Footnote-612569468
Ref: email headerregistry Custom Header Objects-Footnote-712569527
Ref: email headerregistry Custom Header Objects-Footnote-812569586
Ref: email headerregistry Custom Header Objects-Footnote-912569645
Ref: email headerregistry Custom Header Objects-Footnote-1012569704
Ref: email headerregistry Custom Header Objects-Footnote-1112569764
Ref: email headerregistry Custom Header Objects-Footnote-1212569824
Ref: email headerregistry Custom Header Objects-Footnote-1312569884
Ref: email headerregistry Custom Header Objects-Footnote-1412569944
Ref: email headerregistry Custom Header Objects-Footnote-1512570004
Ref: email headerregistry Custom Header Objects-Footnote-1612570064
Ref: email headerregistry Custom Header Objects-Footnote-1712570124
Node: email contentmanager Gerenciando conteúdo MIME12570184
Ref: library/email contentmanager doc12570391
Ref: 39ff12570391
Ref: library/email contentmanager email-contentmanager-managing-mime-content12570391
Ref: 3a0012570391
Ref: library/email contentmanager module-email contentmanager12570391
Ref: 4112570391
Ref: library/email contentmanager no-color12570391
Ref: 3a0112570391
Ref: library/email contentmanager email contentmanager ContentManager12570666
Ref: 3a0212570666
Ref: library/email contentmanager email contentmanager ContentManager get_content12570971
Ref: 397912570971
Ref: library/email contentmanager email contentmanager ContentManager set_content12571828
Ref: 397a12571828
Ref: library/email contentmanager email contentmanager ContentManager add_get_handler12573462
Ref: 3a0312573462
Ref: library/email contentmanager email contentmanager ContentManager add_set_handler12573655
Ref: 3a0512573655
Ref: email contentmanager Gerenciando conteúdo MIME-Footnote-112574021
Ref: email contentmanager Gerenciando conteúdo MIME-Footnote-212574102
Node: Content Manager Instances12574171
Ref: library/email contentmanager content-manager-instances12574280
Ref: 3a0712574280
Ref: library/email contentmanager email contentmanager raw_data_manager12574622
Ref: 39b212574622
Ref: library/email contentmanager email contentmanager get_content12575352
Ref: 3a0412575352
Ref: library/email contentmanager email contentmanager set_content12575952
Ref: 3a0612575952
Ref: Content Manager Instances-Footnote-112580742
Node: email Exemplos12580801
Ref: library/email examples doc12581040
Ref: 3a0812581040
Ref: library/email examples email-examples12581040
Ref: 113212581040
Ref: library/email examples id112581040
Ref: 3a0912581040
Ref: library/email examples no-color12581040
Ref: 3a0a12581040
Ref: email Exemplos-Footnote-112596261
Ref: email Exemplos-Footnote-212596319
Node: email message Message Representing an email message using the compat32 API12596404
Ref: library/email compat32-message doc12596654
Ref: 3a0b12596654
Ref: library/email compat32-message compat32-message12596654
Ref: 394a12596654
Ref: library/email compat32-message email-message-message-representing-an-email-message-using-the-compat32-api12596654
Ref: 3a0c12596654
Ref: library/email compat32-message no-color12596654
Ref: 3a0d12596654
Ref: library/email compat32-message email message Message12599212
Ref: 57a12599212
Ref: library/email compat32-message email message Message as_string12599747
Ref: 112c12599747
Ref: library/email compat32-message email message Message __str__12601900
Ref: 3a0e12601900
Ref: library/email compat32-message email message Message as_bytes12602067
Ref: 112d12602067
Ref: library/email compat32-message email message Message __bytes__12603631
Ref: 112e12603631
Ref: library/email compat32-message email message Message is_multipart12603845
Ref: 397212603845
Ref: library/email compat32-message email message Message set_unixfrom12604522
Ref: 3a0f12604522
Ref: library/email compat32-message email message Message get_unixfrom12604663
Ref: 3a1012604663
Ref: library/email compat32-message email message Message attach12604821
Ref: 397f12604821
Ref: library/email compat32-message email message Message get_payload12605446
Ref: 13c912605446
Ref: library/email compat32-message email message Message set_payload12608129
Ref: 3a1112608129
Ref: library/email compat32-message email message Message set_charset12608614
Ref: 3a1212608614
Ref: library/email compat32-message email message Message get_charset12610392
Ref: 3a1312610392
Ref: library/email compat32-message email message Message __len__12611851
Ref: 3a1512611851
Ref: library/email compat32-message email message Message __contains__12611950
Ref: 1a2712611950
Ref: library/email compat32-message email message Message __getitem__12612321
Ref: 3a1612612321
Ref: library/email compat32-message email message Message __setitem__12612857
Ref: 17e312612857
Ref: library/email compat32-message email message Message __delitem__12613415
Ref: 3a1812613415
Ref: library/email compat32-message email message Message keys12613642
Ref: 3a1412613642
Ref: library/email compat32-message email message Message values12613737
Ref: 3a1912613737
Ref: library/email compat32-message email message Message items12613828
Ref: 3a1a12613828
Ref: library/email compat32-message email message Message get12613960
Ref: 3a1b12613960
Ref: library/email compat32-message email message Message get_all12614274
Ref: 3a1712614274
Ref: library/email compat32-message email message Message add_header12614512
Ref: 17e412614512
Ref: library/email compat32-message email message Message replace_header12616477
Ref: 3a1c12616477
Ref: library/email compat32-message email message Message get_content_type12616767
Ref: 3a1d12616767
Ref: library/email compat32-message email message Message get_content_maintype12617626
Ref: 3a1f12617626
Ref: library/email compat32-message email message Message get_content_subtype12617833
Ref: 3a2012617833
Ref: library/email compat32-message email message Message get_default_type12618027
Ref: 3a1e12618027
Ref: library/email compat32-message email message Message set_default_type12618348
Ref: 3a2112618348
Ref: library/email compat32-message email message Message get_params12618636
Ref: 3a2212618636
Ref: library/email compat32-message email message Message get_param12619699
Ref: 3a2312619699
Ref: library/email compat32-message email message Message set_param12621708
Ref: 112f12621708
Ref: library/email compat32-message email message Message del_param12622998
Ref: 3a2512622998
Ref: library/email compat32-message email message Message set_type12623440
Ref: 3a2612623440
Ref: library/email compat32-message email message Message get_filename12624330
Ref: 3a2712624330
Ref: library/email compat32-message email message Message get_boundary12624870
Ref: 3a2812624870
Ref: library/email compat32-message email message Message set_boundary12625235
Ref: 3a2912625235
Ref: library/email compat32-message email message Message get_content_charset12626051
Ref: 3a2a12626051
Ref: library/email compat32-message email message Message get_charsets12626540
Ref: 3a2b12626540
Ref: library/email compat32-message email message Message get_content_disposition12627243
Ref: fed12627243
Ref: library/email compat32-message email message Message walk12627614
Ref: 3a2c12627614
Ref: library/email compat32-message email message Message preamble12629735
Ref: 3a2d12629735
Ref: library/email compat32-message email message Message epilogue12630998
Ref: 3a2e12630998
Ref: library/email compat32-message email message Message defects12631396
Ref: 3a2f12631396
Ref: email message Message Representing an email message using the compat32 API-Footnote-112631673
Ref: email message Message Representing an email message using the compat32 API-Footnote-212631732
Ref: email message Message Representing an email message using the compat32 API-Footnote-312631791
Ref: email message Message Representing an email message using the compat32 API-Footnote-412631850
Ref: email message Message Representing an email message using the compat32 API-Footnote-512631909
Ref: email message Message Representing an email message using the compat32 API-Footnote-612631968
Ref: email message Message Representing an email message using the compat32 API-Footnote-712632027
Ref: email message Message Representing an email message using the compat32 API-Footnote-812632086
Ref: email message Message Representing an email message using the compat32 API-Footnote-912632145
Ref: email message Message Representing an email message using the compat32 API-Footnote-1012632204
Ref: email message Message Representing an email message using the compat32 API-Footnote-1112632264
Ref: email message Message Representing an email message using the compat32 API-Footnote-1212632324
Node: email mimeemail mime Criando e-mail e objetos MIME do zero12632384
Ref: library/email mime doc12632658
Ref: 3a3012632658
Ref: library/email mime email-mime-creating-email-and-mime-objects-from-scratch12632658
Ref: 3a3112632658
Ref: library/email mime module-email mime12632658
Ref: 4912632658
Ref: library/email mime no-color12632658
Ref: 3a3212632658
Ref: library/email mime module-email mime base12634021
Ref: 4c12634021
Ref: library/email mime email mime base MIMEBase12634021
Ref: 3a3312634021
Ref: library/email mime module-email mime nonmultipart12635260
Ref: 5012635260
Ref: library/email mime email mime nonmultipart MIMENonMultipart12635260
Ref: 39c812635260
Ref: library/email mime module-email mime multipart12635769
Ref: 4f12635769
Ref: library/email mime email mime multipart MIMEMultipart12635769
Ref: 3a3412635769
Ref: library/email mime module-email mime application12637172
Ref: 4a12637172
Ref: library/email mime email mime application MIMEApplication12637172
Ref: 3a3512637172
Ref: library/email mime module-email mime audio12638627
Ref: 4b12638627
Ref: library/email mime email mime audio MIMEAudio12638627
Ref: 3a3612638627
Ref: library/email mime module-email mime image12640359
Ref: 4d12640359
Ref: library/email mime email mime image MIMEImage12640359
Ref: 39c912640359
Ref: library/email mime module-email mime message12642157
Ref: 4e12642157
Ref: library/email mime email mime message MIMEMessage12642157
Ref: 3a3712642157
Ref: library/email mime module-email mime text12642898
Ref: 5112642898
Ref: library/email mime email mime text MIMEText12642898
Ref: fef12642898
Ref: email mimeemail mime Criando e-mail e objetos MIME do zero-Footnote-112644667
Node: email header Internationalized headers12644735
Ref: library/email header doc12644986
Ref: 3a3812644986
Ref: library/email header email-header-internationalized-headers12644986
Ref: 3a3912644986
Ref: library/email header module-email header12644986
Ref: 4512644986
Ref: library/email header no-color12644986
Ref: 3a3a12644986
Ref: library/email header email header Header12647677
Ref: 1b4d12647677
Ref: library/email header email header Header append12649550
Ref: 3a3b12649550
Ref: library/email header email header Header encode12650885
Ref: 3a3c12650885
Ref: library/email header email header Header __str__12652530
Ref: 3a3d12652530
Ref: library/email header email header Header __eq__12653031
Ref: 3a3e12653031
Ref: library/email header email header Header __ne__12653168
Ref: 3a3f12653168
Ref: library/email header email header decode_header12653393
Ref: 12b412653393
Ref: library/email header email header make_header12654859
Ref: 12b512654859
Ref: email header Internationalized headers-Footnote-112655684
Ref: email header Internationalized headers-Footnote-212655756
Ref: email header Internationalized headers-Footnote-312655815
Ref: email header Internationalized headers-Footnote-412655873
Ref: email header Internationalized headers-Footnote-512655932
Ref: email header Internationalized headers-Footnote-612655991
Ref: email header Internationalized headers-Footnote-712656050
Ref: email header Internationalized headers-Footnote-812656109
Ref: email header Internationalized headers-Footnote-912656168
Ref: email header Internationalized headers-Footnote-1012656227
Ref: email header Internationalized headers-Footnote-1112656287
Ref: email header Internationalized headers-Footnote-1212656347
Ref: email header Internationalized headers-Footnote-1312656407
Ref: email header Internationalized headers-Footnote-1412656467
Ref: email header Internationalized headers-Footnote-1512656527
Node: email charset Representando conjuntos de caracteres12656587
Ref: library/email charset doc12656808
Ref: 3a4012656808
Ref: library/email charset email-charset-representing-character-sets12656808
Ref: 3a4112656808
Ref: library/email charset module-email charset12656808
Ref: 4012656808
Ref: library/email charset no-color12656808
Ref: 3a4212656808
Ref: library/email charset email charset Charset12657669
Ref: ff012657669
Ref: library/email charset email charset Charset input_charset12659435
Ref: 3a4312659435
Ref: library/email charset email charset Charset header_encoding12659732
Ref: 3a4412659732
Ref: library/email charset email charset Charset body_encoding12660167
Ref: 3a4512660167
Ref: library/email charset email charset Charset output_charset12660453
Ref: 3a4612660453
Ref: library/email charset email charset Charset input_codec12660817
Ref: 3a4712660817
Ref: library/email charset email charset Charset output_codec12661036
Ref: 3a4812661036
Ref: library/email charset email charset Charset get_body_encoding12661364
Ref: 3a4912661364
Ref: library/email charset email charset Charset get_output_charset12662106
Ref: 3a4a12662106
Ref: library/email charset email charset Charset header_encode12662320
Ref: 3a4b12662320
Ref: library/email charset email charset Charset header_encode_lines12662537
Ref: 3a4c12662537
Ref: library/email charset email charset Charset body_encode12663024
Ref: 3a4d12663024
Ref: library/email charset email charset Charset __str__12663367
Ref: 3a4e12663367
Ref: library/email charset email charset Charset __eq__12663541
Ref: 3a4f12663541
Ref: library/email charset email charset Charset __ne__12663700
Ref: 3a5012663700
Ref: library/email charset email charset add_charset12664032
Ref: 3a5112664032
Ref: library/email charset email charset add_alias12665529
Ref: 3a5312665529
Ref: library/email charset email charset add_codec12665927
Ref: 3a5212665927
Ref: email charset Representando conjuntos de caracteres-Footnote-112666352
Node: email encoders Codificadores12666425
Ref: library/email encoders doc12666641
Ref: 3a5412666641
Ref: library/email encoders email-encoders-encoders12666641
Ref: 3a5512666641
Ref: library/email encoders module-email encoders12666641
Ref: 4212666641
Ref: library/email encoders no-color12666641
Ref: 3a5612666641
Ref: library/email encoders email encoders encode_quopri12668511
Ref: 3a5712668511
Ref: library/email encoders email encoders encode_base6412668888
Ref: 3a5812668888
Ref: library/email encoders email encoders encode_7or8bit12669344
Ref: 3a5912669344
Ref: library/email encoders email encoders encode_noop12669612
Ref: 3a5a12669612
Ref: email encoders Codificadores-Footnote-112669790
Ref: email encoders Codificadores-Footnote-212669864
Node: email utils Utilitários diversos12670006
Ref: library/email utils doc12670197
Ref: 3a5b12670197
Ref: library/email utils email-utils-miscellaneous-utilities12670197
Ref: 3a5c12670197
Ref: library/email utils module-email utils12670197
Ref: 5412670197
Ref: library/email utils no-color12670197
Ref: 3a5d12670197
Ref: library/email utils email utils localtime12670484
Ref: 2f512670484
Ref: library/email utils email utils make_msgid12671092
Ref: 3a5e12671092
Ref: library/email utils email utils quote12672045
Ref: 3a5f12672045
Ref: library/email utils email utils unquote12672254
Ref: 396b12672254
Ref: library/email utils email utils parseaddr12672539
Ref: 4ee12672539
Ref: library/email utils email utils formataddr12673157
Ref: 139612673157
Ref: library/email utils email utils getaddresses12673870
Ref: 4ed12673870
Ref: library/email utils email utils parsedate12674805
Ref: 3a6012674805
Ref: library/email utils email utils parsedate_tz12675480
Ref: 1b2212675480
Ref: library/email utils email utils parsedate_to_datetime12676089
Ref: 12ba12676089
Ref: library/email utils email utils mktime_tz12677046
Ref: 3a6112677046
Ref: library/email utils email utils formatdate12677316
Ref: 165912677316
Ref: library/email utils email utils format_datetime12678369
Ref: 12b912678369
Ref: library/email utils email utils decode_rfc223112679151
Ref: 3a6212679151
Ref: library/email utils email utils encode_rfc223112679254
Ref: 3a6312679254
Ref: library/email utils email utils collapse_rfc2231_value12679704
Ref: 3a2412679704
Ref: library/email utils email utils decode_params12680610
Ref: 179212680610
Ref: email utils Utilitários diversos-Footnote-112680883
Ref: email utils Utilitários diversos-Footnote-212680954
Ref: email utils Utilitários diversos-Footnote-312681013
Ref: email utils Utilitários diversos-Footnote-412681072
Ref: email utils Utilitários diversos-Footnote-512681131
Ref: email utils Utilitários diversos-Footnote-612681190
Ref: email utils Utilitários diversos-Footnote-712681466
Ref: email utils Utilitários diversos-Footnote-812681525
Ref: email utils Utilitários diversos-Footnote-912681584
Ref: email utils Utilitários diversos-Footnote-1012681643
Ref: email utils Utilitários diversos-Footnote-1112681703
Ref: email utils Utilitários diversos-Footnote-1212681763
Node: email iterators Iteradores12681823
Ref: library/email iterators doc12681977
Ref: 3a6412681977
Ref: library/email iterators email-iterators-iterators12681977
Ref: 3a6512681977
Ref: library/email iterators module-email iterators12681977
Ref: 4712681977
Ref: library/email iterators no-color12681977
Ref: 3a6612681977
Ref: library/email iterators email iterators body_line_iterator12682424
Ref: 3a6712682424
Ref: library/email iterators email iterators typed_subpart_iterator12683048
Ref: 3a6812683048
Ref: library/email iterators email iterators _structure12683805
Ref: 3a6912683805
Ref: email iterators Iteradores-Footnote-112685284
Node: json — Codificador e decodificador JSON12685360
Ref: library/json doc12685585
Ref: 3a6a12685585
Ref: library/json json-json-encoder-and-decoder12685585
Ref: 3a6b12685585
Ref: library/json module-json12685585
Ref: 8612685585
Ref: library/json no-color12685585
Ref: 3a6c12685585
Ref: json — Codificador e decodificador JSON-Footnote-112690487
Ref: json — Codificador e decodificador JSON-Footnote-212690560
Ref: json — Codificador e decodificador JSON-Footnote-312690585
Ref: json — Codificador e decodificador JSON-Footnote-412690644
Ref: json — Codificador e decodificador JSON-Footnote-512690703
Ref: json — Codificador e decodificador JSON-Footnote-612690790
Ref: json — Codificador e decodificador JSON-Footnote-712690839
Ref: json — Codificador e decodificador JSON-Footnote-812691111
Node: Uso básico<4>12691137
Ref: library/json basic-usage12691269
Ref: 3a6d12691269
Ref: library/json json dump12691311
Ref: f3412691311
Ref: library/json json dumps12695897
Ref: f3512695897
Ref: library/json json load12696759
Ref: ea612696759
Ref: library/json json loads12700792
Ref: b4412700792
Ref: Uso básico<4>-Footnote-112701539
Node: Codificadores e decodificadores12701571
Ref: library/json encoders-and-decoders12701726
Ref: 3a7112701726
Ref: library/json json JSONDecoder12701809
Ref: f3712701809
Ref: library/json json-to-py-table12702076
Ref: 3a7012702076
Ref: library/json json JSONDecoder decode12705286
Ref: 3a7212705286
Ref: library/json json JSONDecoder raw_decode12705566
Ref: 3a7312705566
Ref: library/json json JSONEncoder12705986
Ref: f3612705986
Ref: library/json py-to-json-table12706308
Ref: 3a6e12706308
Ref: library/json json JSONEncoder default12711018
Ref: 3a6f12711018
Ref: library/json json JSONEncoder encode12711736
Ref: 3a7412711736
Ref: library/json json JSONEncoder iterencode12711998
Ref: 3a7512711998
Ref: Codificadores e decodificadores-Footnote-112712307
Node: Exceções<20>12712339
Ref: library/json exceptions12712528
Ref: 3a7612712528
Ref: library/json json JSONDecodeError12712567
Ref: 101712712567
Ref: library/json json JSONDecodeError msg12712706
Ref: 3a7712712706
Ref: library/json json JSONDecodeError doc12712776
Ref: 3a7812712776
Ref: library/json json JSONDecodeError pos12712845
Ref: 3a7912712845
Ref: library/json json JSONDecodeError lineno12712933
Ref: 3a7a12712933
Ref: library/json json JSONDecodeError colno12713003
Ref: 3a7b12713003
Node: Conformidade e interoperabilidade entre padrões12713106
Ref: library/json standard-compliance-and-interoperability12713296
Ref: 3a7c12713296
Ref: Conformidade e interoperabilidade entre padrões-Footnote-112714555
Ref: Conformidade e interoperabilidade entre padrões-Footnote-212714614
Node: Codificações de caracteres12714701
Ref: library/json character-encodings12714857
Ref: 3a7d12714857
Node: Valores numéricos infinitos e NaN12716286
Ref: library/json infinite-and-nan-number-values12716486
Ref: 3a7e12716486
Node: Nomes repetidos dentro de um objeto12717312
Ref: library/json repeated-names-within-an-object12717535
Ref: 3a7f12717535
Node: Valores não objeto e não vetor de nível superior12718098
Ref: library/json top-level-non-object-non-array-values12718318
Ref: 3a8012718318
Ref: Valores não objeto e não vetor de nível superior-Footnote-112719015
Ref: Valores não objeto e não vetor de nível superior-Footnote-212719074
Node: Limitações de implementação12719133
Ref: library/json implementation-limitations12719309
Ref: 3a8112719309
Node: Interface de linha de comando<4>12720351
Ref: library/json command-line-interface12720518
Ref: 3a8212720518
Ref: library/json json-commandline12720518
Ref: 23d12720518
Ref: library/json module-json tool12720518
Ref: 8712720518
Ref: Interface de linha de comando<4>-Footnote-112721795
Node: Opções de linha de comando<3>12721864
Ref: library/json command-line-options12721964
Ref: 3a8412721964
Ref: library/json cmdoption-json-arg-infile12722041
Ref: 3a8512722041
Ref: library/json cmdoption-json-arg-outfile12722519
Ref: 3a8612722519
Ref: library/json cmdoption-json-sort-keys12722655
Ref: 3a8312722655
Ref: library/json cmdoption-json-no-ensure-ascii12722779
Ref: 3a8712722779
Ref: library/json cmdoption-json-json-lines12722953
Ref: 3a8812722953
Ref: library/json cmdoption-json-indent12723078
Ref: 3a8912723078
Ref: library/json cmdoption-json-tab12723078
Ref: 3a8a12723078
Ref: library/json cmdoption-json-no-indent12723078
Ref: 3a8b12723078
Ref: library/json cmdoption-json-compact12723078
Ref: 3a8c12723078
Ref: library/json cmdoption-json-h12723239
Ref: 3a8d12723239
Ref: library/json cmdoption-json-help12723239
Ref: 3a8e12723239
Node: mailbox — Manipulate mailboxes in various formats12723296
Ref: library/mailbox doc12723526
Ref: 3a8f12723526
Ref: library/mailbox mailbox-manipulate-mailboxes-in-various-formats12723526
Ref: 3a9012723526
Ref: library/mailbox module-mailbox12723526
Ref: 8f12723526
Ref: library/mailbox no-color12723526
Ref: 3a9112723526
Ref: mailbox — Manipulate mailboxes in various formats-Footnote-112724415
Node: Mailbox objects12724482
Ref: library/mailbox id112724609
Ref: 3a9212724609
Ref: library/mailbox mailbox-objects12724609
Ref: 3a9312724609
Ref: library/mailbox mailbox Mailbox12724668
Ref: 144812724668
Ref: library/mailbox mailbox Mailbox add12727456
Ref: 144712727456
Ref: library/mailbox mailbox Mailbox remove12728251
Ref: 3a9412728251
Ref: library/mailbox mailbox Mailbox __delitem__12728282
Ref: 3a9812728282
Ref: library/mailbox mailbox Mailbox discard12728318
Ref: 3a9512728318
Ref: library/mailbox mailbox Mailbox __setitem__12728864
Ref: 3a9912728864
Ref: library/mailbox mailbox Mailbox iterkeys12729751
Ref: 3a9a12729751
Ref: library/mailbox mailbox Mailbox keys12729838
Ref: 3a9b12729838
Ref: library/mailbox mailbox Mailbox itervalues12730001
Ref: 3a9c12730001
Ref: library/mailbox mailbox Mailbox __iter__12730033
Ref: 3a9d12730033
Ref: library/mailbox mailbox Mailbox values12730521
Ref: 3a9e12730521
Ref: library/mailbox mailbox Mailbox iteritems12730688
Ref: 3a9f12730688
Ref: library/mailbox mailbox Mailbox items12731110
Ref: 3aa012731110
Ref: library/mailbox mailbox Mailbox get12731304
Ref: 3aa112731304
Ref: library/mailbox mailbox Mailbox __getitem__12731346
Ref: 3aa212731346
Ref: library/mailbox mailbox Mailbox get_message12731922
Ref: 3aa312731922
Ref: library/mailbox mailbox Mailbox get_bytes12732212
Ref: 144a12732212
Ref: library/mailbox mailbox Mailbox get_string12732453
Ref: 144b12732453
Ref: library/mailbox mailbox Mailbox get_file12732793
Ref: 144912732793
Ref: library/mailbox mailbox Mailbox __contains__12733826
Ref: 3aa412733826
Ref: library/mailbox mailbox Mailbox __len__12733961
Ref: 3aa512733961
Ref: library/mailbox mailbox Mailbox clear12734045
Ref: 3aa612734045
Ref: library/mailbox mailbox Mailbox pop12734122
Ref: 3aa712734122
Ref: library/mailbox mailbox Mailbox popitem12734561
Ref: 3aa812734561
Ref: library/mailbox mailbox Mailbox update12735078
Ref: 3aa912735078
Ref: library/mailbox mailbox Mailbox flush12735781
Ref: 190112735781
Ref: library/mailbox mailbox Mailbox lock12736067
Ref: 3a9612736067
Ref: library/mailbox mailbox Mailbox unlock12736487
Ref: 3a9712736487
Ref: library/mailbox mailbox Mailbox close12736568
Ref: 3aab12736568
Node: Maildir objects12736855
Ref: library/mailbox mailbox-maildir12736943
Ref: 3aac12736943
Ref: library/mailbox maildir-objects12736943
Ref: 3aad12736943
Ref: library/mailbox mailbox Maildir12737002
Ref: 65212737002
Ref: library/mailbox mailbox Maildir colon12739134
Ref: 3aaf12739134
Ref: library/mailbox mailbox Maildir list_folders12739948
Ref: 3ab012739948
Ref: library/mailbox mailbox Maildir get_folder12740037
Ref: 3ab112740037
Ref: library/mailbox mailbox Maildir add_folder12740272
Ref: 3ab312740272
Ref: library/mailbox mailbox Maildir remove_folder12740424
Ref: 3ab412740424
Ref: library/mailbox mailbox Maildir clean12740667
Ref: 3ab612740667
Ref: library/mailbox mailbox Maildir get_flags12740904
Ref: 198412740904
Ref: library/mailbox mailbox Maildir set_flags12741715
Ref: 198512741715
Ref: library/mailbox mailbox Maildir add_flag12742472
Ref: 198612742472
Ref: library/mailbox mailbox Maildir remove_flag12742990
Ref: 198712742990
Ref: library/mailbox mailbox Maildir get_info12743519
Ref: 198212743519
Ref: library/mailbox mailbox Maildir set_info12744255
Ref: 198312744255
Ref: library/mailbox mailbox Maildir add12745059
Ref: 3abe12745059
Ref: library/mailbox mailbox Maildir __setitem__12745091
Ref: 3abb12745091
Ref: library/mailbox mailbox Maildir update12745136
Ref: 3abf12745136
Ref: library/mailbox mailbox Maildir flush12745548
Ref: 3ac012745548
Ref: library/mailbox mailbox Maildir lock12745684
Ref: 3ac112745684
Ref: library/mailbox mailbox Maildir unlock12745710
Ref: 3ac212745710
Ref: library/mailbox mailbox Maildir close12745844
Ref: 3ac312745844
Ref: library/mailbox mailbox Maildir get_file12746036
Ref: 3ac412746036
Ref: Maildir objects-Footnote-112746578
Ref: Maildir objects-Footnote-212746627
Node: mbox objects12746671
Ref: library/mailbox mailbox-mbox12746778
Ref: 3ac512746778
Ref: library/mailbox mbox-objects12746778
Ref: 3ac612746778
Ref: library/mailbox mailbox mbox12746831
Ref: 193712746831
Ref: library/mailbox mailbox mbox get_bytes12748251
Ref: 3ac712748251
Ref: library/mailbox mailbox mbox get_file12748549
Ref: 3ac812748549
Ref: library/mailbox mailbox mbox get_string12749033
Ref: 3ac912749033
Ref: library/mailbox mailbox mbox lock12749332
Ref: 3aca12749332
Ref: library/mailbox mailbox mbox unlock12749358
Ref: 3acb12749358
Ref: mbox objects-Footnote-112749941
Ref: mbox objects-Footnote-212750001
Ref: mbox objects-Footnote-312750053
Node: MH objects12750131
Ref: library/mailbox mailbox-mh12750236
Ref: 3acc12750236
Ref: library/mailbox mh-objects12750236
Ref: 3acd12750236
Ref: library/mailbox mailbox MH12750285
Ref: 196b12750285
Ref: library/mailbox mailbox MH list_folders12751824
Ref: 3acf12751824
Ref: library/mailbox mailbox MH get_folder12751913
Ref: 3ad012751913
Ref: library/mailbox mailbox MH add_folder12752144
Ref: 3ad112752144
Ref: library/mailbox mailbox MH remove_folder12752292
Ref: 3ad212752292
Ref: library/mailbox mailbox MH get_sequences12752535
Ref: 3ad312752535
Ref: library/mailbox mailbox MH set_sequences12752713
Ref: 3ad412752713
Ref: library/mailbox mailbox MH pack12752952
Ref: 3ad512752952
Ref: library/mailbox mailbox MH remove12753368
Ref: 3ad612753368
Ref: library/mailbox mailbox MH __delitem__12753399
Ref: 3ad712753399
Ref: library/mailbox mailbox MH discard12753435
Ref: 3ad812753435
Ref: library/mailbox mailbox MH lock12753645
Ref: 3ad912753645
Ref: library/mailbox mailbox MH unlock12753671
Ref: 3ada12753671
Ref: library/mailbox mailbox MH get_file12754047
Ref: 3adb12754047
Ref: library/mailbox mailbox MH flush12754240
Ref: 3adc12754240
Ref: library/mailbox mailbox MH close12754371
Ref: 3add12754371
Ref: MH objects-Footnote-112754837
Ref: MH objects-Footnote-212754873
Node: Babyl objects12754918
Ref: library/mailbox babyl-objects12755023
Ref: 3ade12755023
Ref: library/mailbox mailbox-babyl12755023
Ref: 3adf12755023
Ref: library/mailbox mailbox Babyl12755078
Ref: 3ae012755078
Ref: library/mailbox mailbox Babyl get_labels12756643
Ref: 3ae212756643
Ref: library/mailbox mailbox Babyl get_file12757171
Ref: 3ae312757171
Ref: library/mailbox mailbox Babyl lock12757703
Ref: 3ae412757703
Ref: library/mailbox mailbox Babyl unlock12757729
Ref: 3ae512757729
Ref: Babyl objects-Footnote-112758129
Ref: Babyl objects-Footnote-212758173
Node: MMDF objects12758251
Ref: library/mailbox mailbox-mmdf12758337
Ref: 3ae612758337
Ref: library/mailbox mmdf-objects12758337
Ref: 3ae712758337
Ref: library/mailbox mailbox MMDF12758390
Ref: 193812758390
Ref: library/mailbox mailbox MMDF get_bytes12759649
Ref: 3ae912759649
Ref: library/mailbox mailbox MMDF get_file12759947
Ref: 3aea12759947
Ref: library/mailbox mailbox MMDF lock12760431
Ref: 3aeb12760431
Ref: library/mailbox mailbox MMDF unlock12760457
Ref: 3aec12760457
Ref: MMDF objects-Footnote-112760900
Ref: MMDF objects-Footnote-212760960
Node: Message objects12761003
Ref: library/mailbox mailbox-message-objects12761153
Ref: 3aed12761153
Ref: library/mailbox message-objects12761153
Ref: 3aee12761153
Ref: library/mailbox mailbox Message12761212
Ref: 144c12761212
Ref: Message objects-Footnote-112763258
Node: MaildirMessage objects12763317
Ref: library/mailbox mailbox-maildirmessage12763419
Ref: 3aef12763419
Ref: library/mailbox maildirmessage-objects12763419
Ref: 3af012763419
Ref: library/mailbox mailbox MaildirMessage12763492
Ref: 3aae12763492
Ref: library/mailbox mailbox MaildirMessage get_subdir12765344
Ref: 3af112765344
Ref: library/mailbox mailbox MaildirMessage set_subdir12765859
Ref: 3af212765859
Ref: library/mailbox mailbox MaildirMessage get_flags12766031
Ref: 3ab712766031
Ref: library/mailbox mailbox MaildirMessage set_flags12766504
Ref: 3ab812766504
Ref: library/mailbox mailbox MaildirMessage add_flag12766609
Ref: 3ab912766609
Ref: library/mailbox mailbox MaildirMessage remove_flag12766960
Ref: 3aba12766960
Ref: library/mailbox mailbox MaildirMessage get_date12767316
Ref: 3af312767316
Ref: library/mailbox mailbox MaildirMessage set_date12767473
Ref: 3af412767473
Ref: library/mailbox mailbox MaildirMessage get_info12767639
Ref: 3abc12767639
Ref: library/mailbox mailbox MaildirMessage set_info12767863
Ref: 3abd12767863
Node: mboxMessage objects12770661
Ref: library/mailbox mailbox-mboxmessage12770789
Ref: 3af512770789
Ref: library/mailbox mboxmessage-objects12770789
Ref: 3af612770789
Ref: library/mailbox mailbox mboxMessage12770856
Ref: 395312770856
Ref: library/mailbox mailbox mboxMessage get_from12772654
Ref: 3af712772654
Ref: library/mailbox mailbox mboxMessage set_from12772886
Ref: 3af812772886
Ref: library/mailbox mailbox mboxMessage get_flags12773425
Ref: 3af912773425
Ref: library/mailbox mailbox mboxMessage set_flags12773774
Ref: 3afa12773774
Ref: library/mailbox mailbox mboxMessage add_flag12774066
Ref: 3afb12774066
Ref: library/mailbox mailbox mboxMessage remove_flag12774287
Ref: 3afc12774287
Node: MHMessage objects12777266
Ref: library/mailbox mailbox-mhmessage12777392
Ref: 3afd12777392
Ref: library/mailbox mhmessage-objects12777392
Ref: 3afe12777392
Ref: library/mailbox mailbox MHMessage12777457
Ref: 3ace12777457
Ref: library/mailbox mailbox MHMessage get_sequences12778419
Ref: 3aff12778419
Ref: library/mailbox mailbox MHMessage set_sequences12778543
Ref: 3b0012778543
Ref: library/mailbox mailbox MHMessage add_sequence12778652
Ref: 3b0112778652
Ref: library/mailbox mailbox MHMessage remove_sequence12778783
Ref: 3b0212778783
Node: BabylMessage objects12780649
Ref: library/mailbox babylmessage-objects12780775
Ref: 3b0312780775
Ref: library/mailbox mailbox-babylmessage12780775
Ref: 3b0412780775
Ref: library/mailbox mailbox BabylMessage12780846
Ref: 3ae112780846
Ref: library/mailbox mailbox BabylMessage get_labels12782203
Ref: 3b0512782203
Ref: library/mailbox mailbox BabylMessage set_labels12782287
Ref: 3b0612782287
Ref: library/mailbox mailbox BabylMessage add_label12782388
Ref: 3b0712782388
Ref: library/mailbox mailbox BabylMessage remove_label12782486
Ref: 3b0812782486
Ref: library/mailbox mailbox BabylMessage get_visible12782592
Ref: 3b0912782592
Ref: library/mailbox mailbox BabylMessage set_visible12782761
Ref: 3b0a12782761
Ref: library/mailbox mailbox BabylMessage update_visible12783113
Ref: 3b0b12783113
Node: MMDFMessage objects12785554
Ref: library/mailbox mailbox-mmdfmessage12785654
Ref: 3b0c12785654
Ref: library/mailbox mmdfmessage-objects12785654
Ref: 3b0d12785654
Ref: library/mailbox mailbox MMDFMessage12785723
Ref: 3ae812785723
Ref: library/mailbox mailbox MMDFMessage get_from12787405
Ref: 3b0e12787405
Ref: library/mailbox mailbox MMDFMessage set_from12787637
Ref: 3b0f12787637
Ref: library/mailbox mailbox MMDFMessage get_flags12788176
Ref: 3b1012788176
Ref: library/mailbox mailbox MMDFMessage set_flags12788525
Ref: 3b1112788525
Ref: library/mailbox mailbox MMDFMessage add_flag12788817
Ref: 3b1212788817
Ref: library/mailbox mailbox MMDFMessage remove_flag12789038
Ref: 3b1312789038
Node: Exceções<21>12792018
Ref: library/mailbox exceptions12792165
Ref: 3b1412792165
Ref: library/mailbox mailbox Error12792280
Ref: 3b1512792280
Ref: library/mailbox mailbox NoSuchMailboxError12792374
Ref: 3ab212792374
Ref: library/mailbox mailbox NotEmptyError12792681
Ref: 3ab512792681
Ref: library/mailbox mailbox ExternalClashError12792843
Ref: 3aaa12792843
Ref: library/mailbox mailbox FormatError12793156
Ref: 3b1612793156
Node: Exemplos<24>12793353
Ref: library/mailbox examples12793476
Ref: 3b1712793476
Ref: library/mailbox mailbox-examples12793476
Ref: 3b1812793476
Node: mimetypes — Mapeia nomes de arquivos para tipos MIME12795754
Ref: library/mimetypes doc12795996
Ref: 3b1912795996
Ref: library/mimetypes mimetypes-map-filenames-to-mime-types12795996
Ref: 3b1a12795996
Ref: library/mimetypes module-mimetypes12795996
Ref: 9312795996
Ref: library/mimetypes no-color12795996
Ref: 3b1b12795996
Ref: library/mimetypes mimetypes guess_type12796949
Ref: 51112796949
Ref: library/mimetypes mimetypes guess_file_type12798971
Ref: 51012798971
Ref: library/mimetypes mimetypes guess_all_extensions12799339
Ref: 1b3912799339
Ref: library/mimetypes mimetypes guess_extension12799987
Ref: 3b1d12799987
Ref: library/mimetypes mimetypes init12800781
Ref: 3b1c12800781
Ref: library/mimetypes mimetypes read_mime_types12801905
Ref: 1be612801905
Ref: library/mimetypes mimetypes add_type12802334
Ref: 3b1f12802334
Ref: library/mimetypes mimetypes inited12802797
Ref: 3b2012802797
Ref: library/mimetypes mimetypes knownfiles12802984
Ref: 3b1e12802984
Ref: library/mimetypes mimetypes suffix_map12803223
Ref: 3b2112803223
Ref: library/mimetypes mimetypes encodings_map12803645
Ref: 3b2212803645
Ref: library/mimetypes mimetypes types_map12803774
Ref: 3b2312803774
Ref: library/mimetypes mimetypes common_types12803879
Ref: 3b2412803879
Ref: mimetypes — Mapeia nomes de arquivos para tipos MIME-Footnote-112804565
Ref: mimetypes — Mapeia nomes de arquivos para tipos MIME-Footnote-212804634
Node: Objetos MimeTypes12804705
Ref: library/mimetypes id112804848
Ref: 3b2512804848
Ref: library/mimetypes mimetypes-objects12804848
Ref: 3b2612804848
Ref: library/mimetypes mimetypes MimeTypes12805098
Ref: 16e912805098
Ref: library/mimetypes mimetypes MimeTypes suffix_map12805785
Ref: 3b2912805785
Ref: library/mimetypes mimetypes MimeTypes encodings_map12806266
Ref: 3b2a12806266
Ref: library/mimetypes mimetypes MimeTypes types_map12806478
Ref: 3b2b12806478
Ref: library/mimetypes mimetypes MimeTypes types_map_inv12806813
Ref: 3b2c12806813
Ref: library/mimetypes mimetypes MimeTypes guess_extension12807162
Ref: 3b2d12807162
Ref: library/mimetypes mimetypes MimeTypes guess_type12807341
Ref: 1ccf12807341
Ref: library/mimetypes mimetypes MimeTypes guess_file_type12807508
Ref: 3b2e12807508
Ref: library/mimetypes mimetypes MimeTypes guess_all_extensions12807728
Ref: 3b2f12807728
Ref: library/mimetypes mimetypes MimeTypes read12807917
Ref: 3b2712807917
Ref: library/mimetypes mimetypes MimeTypes readfp12808231
Ref: 3b2812808231
Ref: library/mimetypes mimetypes MimeTypes read_windows_registry12808588
Ref: 3b3012808588
Ref: library/mimetypes mimetypes MimeTypes add_type12808965
Ref: 31712808965
Node: Uso na linha de comando<4>12809697
Ref: library/mimetypes command-line-usage12809880
Ref: 3b3112809880
Ref: library/mimetypes mimetypes-cli12809880
Ref: 24612809880
Ref: library/mimetypes cmdoption-mimetypes-h12810120
Ref: 3b3212810120
Ref: library/mimetypes cmdoption-mimetypes-help12810148
Ref: 3b3312810148
Ref: library/mimetypes cmdoption-mimetypes-e12810221
Ref: 3b3412810221
Ref: library/mimetypes cmdoption-mimetypes-extension12810249
Ref: 3b3512810249
Ref: library/mimetypes cmdoption-mimetypes-l12810326
Ref: 3b3612810326
Ref: library/mimetypes cmdoption-mimetypes-lenient12810354
Ref: 3b3712810354
Node: Exemplos na linha de comando<2>12810820
Ref: library/mimetypes command-line-example12810977
Ref: 3b3812810977
Node: base64 — Base16 Base32 Base64 Base85 Data Encodings12812611
Ref: library/base64 doc12812846
Ref: 3b3912812846
Ref: library/base64 base64-base16-base32-base64-base85-data-encodings12812846
Ref: 3b3a12812846
Ref: library/base64 module-base6412812846
Ref: f12812846
Ref: library/base64 no-color12812846
Ref: 3b3b12812846
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-112814688
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-212814754
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-312814813
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-412814872
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-512814931
Node: RFC 4648 Encodings12814990
Ref: library/base64 base64-rfc-464812815123
Ref: 3b3c12815123
Ref: library/base64 rfc-4648-encodings12815123
Ref: 3b3f12815123
Ref: library/base64 base64 b64encode12815353
Ref: 3b4012815353
Ref: library/base64 base64 b64decode12816045
Ref: 1c4712816045
Ref: library/base64 base64 standard_b64encode12817059
Ref: 3b4112817059
Ref: library/base64 base64 standard_b64decode12817232
Ref: 3b4212817232
Ref: library/base64 base64 urlsafe_b64encode12817421
Ref: 3b4312817421
Ref: library/base64 base64 urlsafe_b64decode12817761
Ref: 3b4412817761
Ref: library/base64 base64 b32encode12818078
Ref: 3b4512818078
Ref: library/base64 base64 b32decode12818224
Ref: 121b12818224
Ref: library/base64 base64 b32hexencode12819228
Ref: 9da12819228
Ref: library/base64 base64 b32hexdecode12819411
Ref: 9db12819411
Ref: library/base64 base64 b16encode12819865
Ref: 3b4612819865
Ref: library/base64 base64 b16decode12820011
Ref: 2d212820011
Ref: RFC 4648 Encodings-Footnote-112820544
Ref: RFC 4648 Encodings-Footnote-212820603
Ref: RFC 4648 Encodings-Footnote-312820662
Ref: RFC 4648 Encodings-Footnote-412820721
Node: Base85 Encodings12820780
Ref: library/base64 base64-base-8512820938
Ref: 3b3d12820938
Ref: library/base64 base85-encodings12820938
Ref: 3b4712820938
Ref: library/base64 base64 a85encode12821715
Ref: 111612821715
Ref: library/base64 base64 a85decode12822722
Ref: 111712822722
Ref: library/base64 base64 b85encode12823582
Ref: 111812823582
Ref: library/base64 base64 b85decode12823941
Ref: 111912823941
Ref: library/base64 base64 z85encode12824189
Ref: 47412824189
Ref: library/base64 base64 z85decode12824439
Ref: 47512824439
Ref: Base85 Encodings-Footnote-112824723
Ref: Base85 Encodings-Footnote-212824763
Node: Legacy Interface12824803
Ref: library/base64 base64-legacy12824975
Ref: 3b3e12824975
Ref: library/base64 legacy-interface12824975
Ref: 3b4812824975
Ref: library/base64 base64 decode12825028
Ref: 3b4912825028
Ref: library/base64 base64 decodebytes12825337
Ref: b4312825337
Ref: library/base64 base64 encode12825572
Ref: 3b4a12825572
Ref: library/base64 base64 encodebytes12826092
Ref: b4212826092
Ref: Legacy Interface-Footnote-112826767
Ref: Legacy Interface-Footnote-212826826
Node: Considerações de Segurança<2>12826885
Ref: library/base64 base64-security12827032
Ref: 3b4b12827032
Ref: library/base64 security-considerations12827032
Ref: 3b4c12827032
Ref: Considerações de Segurança<2>-Footnote-112827717
Ref: Considerações de Segurança<2>-Footnote-212827776
Node: binascii — Converte entre binário e ASCII12827835
Ref: library/binascii doc12828082
Ref: 3b4d12828082
Ref: library/binascii binascii-convert-between-binary-and-ascii12828082
Ref: 3b4e12828082
Ref: library/binascii module-binascii12828082
Ref: 1112828082
Ref: library/binascii no-color12828082
Ref: 3b4f12828082
Ref: library/binascii binascii a2b_uu12829144
Ref: 3b5012829144
Ref: library/binascii binascii b2a_uu12829442
Ref: d0a12829442
Ref: library/binascii binascii a2b_base6412829866
Ref: 18e812829866
Ref: library/binascii binascii b2a_base6412830607
Ref: e6f12830607
Ref: library/binascii binascii a2b_qp12831010
Ref: 3b5112831010
Ref: library/binascii binascii b2a_qp12831307
Ref: 3b5212831307
Ref: library/binascii binascii crc_hqx12832075
Ref: 93212832075
Ref: library/binascii binascii crc3212832380
Ref: 194d12832380
Ref: library/binascii binascii b2a_hex12833058
Ref: 271812833058
Ref: library/binascii binascii hexlify12833122
Ref: 3b5312833122
Ref: library/binascii binascii a2b_hex12834320
Ref: 271912834320
Ref: library/binascii binascii unhexlify12834360
Ref: 1cdd12834360
Ref: library/binascii binascii Error12834889
Ref: 121c12834889
Ref: library/binascii binascii Incomplete12834993
Ref: 3b5412834993
Ref: binascii — Converte entre binário e ASCII-Footnote-112835465
Ref: binascii — Converte entre binário e ASCII-Footnote-212835524
Ref: binascii — Converte entre binário e ASCII-Footnote-312835583
Node: quopri — Codifica e decodifica dados MIME imprimidos entre aspas12835642
Ref: library/quopri doc12835827
Ref: 3b5512835827
Ref: library/quopri module-quopri12835827
Ref: bc12835827
Ref: library/quopri no-color12835827
Ref: 3b5612835827
Ref: library/quopri quopri-encode-and-decode-mime-quoted-printable-data12835827
Ref: 3b5712835827
Ref: library/quopri quopri decode12836649
Ref: 271b12836649
Ref: library/quopri quopri encode12837255
Ref: 271a12837255
Ref: library/quopri quopri decodestring12838011
Ref: 3b5812838011
Ref: library/quopri quopri encodestring12838222
Ref: 3b5912838222
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-112838694
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-212838760
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-312838819
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-412838878
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-512838937
Node: Ferramentas de Processamento de Markup Estruturado12838996
Ref: library/markup doc12839192
Ref: 3b5a12839192
Ref: library/markup markup12839192
Ref: 3b5b12839192
Ref: library/markup no-color12839192
Ref: 3b5c12839192
Ref: library/markup structured-markup-processing-tools12839192
Ref: 3b5d12839192
Node: html — Suporte HTML HyperText Markup Language12840887
Ref: library/html doc12841074
Ref: 3b5e12841074
Ref: library/html html-hypertext-markup-language-support12841074
Ref: 3b5f12841074
Ref: library/html module-html12841074
Ref: 6f12841074
Ref: library/html html escape12841360
Ref: 120412841360
Ref: library/html html unescape12841961
Ref: b4612841961
Ref: html — Suporte HTML HyperText Markup Language-Footnote-112842717
Node: html parser — Simple HTML and XHTML parser12842790
Ref: library/html parser doc12843044
Ref: 3b6012843044
Ref: library/html parser html-parser-simple-html-and-xhtml-parser12843044
Ref: 3b6112843044
Ref: library/html parser module-html parser12843044
Ref: 7112843044
Ref: library/html parser no-color12843044
Ref: 3b6212843044
Ref: library/html parser html parser HTMLParser12843422
Ref: a6d12843422
Ref: html parser — Simple HTML and XHTML parser-Footnote-112844543
Node: Example HTML Parser Application12844614
Ref: library/html parser example-html-parser-application12844753
Ref: 3b6312844753
Node: HTMLParser Methods12845959
Ref: library/html parser htmlparser-methods12846119
Ref: 3b6412846119
Ref: library/html parser html parser HTMLParser feed12846246
Ref: 3b6512846246
Ref: library/html parser html parser HTMLParser close12846514
Ref: 17a912846514
Ref: library/html parser html parser HTMLParser reset12846876
Ref: 3b6612846876
Ref: library/html parser html parser HTMLParser getpos12847020
Ref: 3b6712847020
Ref: library/html parser html parser HTMLParser get_starttag_text12847100
Ref: 3b6812847100
Ref: library/html parser html parser HTMLParser handle_starttag12847672
Ref: 3b6a12847672
Ref: library/html parser html parser HTMLParser handle_endtag12848477
Ref: 3b6b12848477
Ref: library/html parser html parser HTMLParser handle_startendtag12848685
Ref: 3b6912848685
Ref: library/html parser html parser HTMLParser handle_data12849099
Ref: 3b6c12849099
Ref: library/html parser html parser HTMLParser handle_entityref12849302
Ref: 3b6d12849302
Ref: library/html parser html parser HTMLParser handle_charref12849607
Ref: 3b6e12849607
Ref: library/html parser html parser HTMLParser handle_comment12850054
Ref: 3b6f12850054
Ref: library/html parser html parser HTMLParser handle_decl12850581
Ref: 3b7012850581
Ref: library/html parser html parser HTMLParser handle_pi12850866
Ref: 3b7112850866
Ref: library/html parser html parser HTMLParser unknown_decl12851557
Ref: 3b7212851557
Node: Exemplos<25>12851920
Ref: library/html parser examples12852040
Ref: 3b7312852040
Ref: library/html parser htmlparser-examples12852040
Ref: 3b7412852040
Node: html entities — Definições de entidades gerais de HTML12855596
Ref: library/html entities doc12855835
Ref: 3b7512855835
Ref: library/html entities html-entities-definitions-of-html-general-entities12855835
Ref: 3b7612855835
Ref: library/html entities module-html entities12855835
Ref: 7012855835
Ref: library/html entities no-color12855835
Ref: 3b7712855835
Ref: library/html entities html entities html512856225
Ref: 12ce12856225
Ref: library/html entities html entities entitydefs12856763
Ref: 3b7a12856763
Ref: library/html entities html entities name2codepoint12856916
Ref: 3b7812856916
Ref: library/html entities html entities codepoint2name12857053
Ref: 3b7912857053
Ref: html entities — Definições de entidades gerais de HTML-Footnote-112857223
Ref: html entities — Definições de entidades gerais de HTML-Footnote-212857296
Node: Módulos de Processamento de XML12857403
Ref: library/xml doc12857645
Ref: 3b7b12857645
Ref: library/xml module-xml12857645
Ref: 12612857645
Ref: library/xml no-color12857645
Ref: 3b7c12857645
Ref: library/xml xml12857645
Ref: 3b7d12857645
Ref: library/xml xml-processing-modules12857645
Ref: 3b7e12857645
Ref: library/xml xml-security12858986
Ref: 3b7f12858986
Ref: Módulos de Processamento de XML-Footnote-112859054
Node: Segurança no XML12859115
Ref: library/xml id112859201
Ref: 3b8012859201
Ref: library/xml xml-vulnerabilities12859201
Ref: 3b8112859201
Ref: Segurança no XML-Footnote-112861645
Ref: Segurança no XML-Footnote-212861698
Ref: Segurança no XML-Footnote-312861751
Ref: Segurança no XML-Footnote-412861798
Node: xml etree ElementTree — A API XML ElementTree12861854
Ref: library/xml etree elementtree doc12862079
Ref: 3b8212862079
Ref: library/xml etree elementtree module-xml etree ElementTree12862079
Ref: 12b12862079
Ref: library/xml etree elementtree no-color12862079
Ref: 3b8312862079
Ref: library/xml etree elementtree xml-etree-elementtree-the-elementtree-xml-api12862079
Ref: 3b8412862079
Ref: xml etree ElementTree — A API XML ElementTree-Footnote-112862935
Node: Tutorial<3>12863017
Ref: library/xml etree elementtree tutorial12863136
Ref: 3b8512863136
Node: Árvore e elementos XML12863607
Ref: library/xml etree elementtree xml-tree-and-elements12863701
Ref: 3b8612863701
Node: Analisando XML12864317
Ref: library/xml etree elementtree elementtree-parsing-xml12864460
Ref: 3b8712864460
Ref: library/xml etree elementtree parsing-xml12864460
Ref: 3b8812864460
Node: A API de pull para análise sem bloqueio12867111
Ref: library/xml etree elementtree elementtree-pull-parsing12867266
Ref: 11ea12867266
Ref: library/xml etree elementtree pull-api-for-non-blocking-parsing12867266
Ref: 3b8a12867266
Node: Encontrando elementos interessantes12869611
Ref: library/xml etree elementtree finding-interesting-elements12869778
Ref: 3b8d12869778
Node: Modificando um arquivo XML12871057
Ref: library/xml etree elementtree modifying-an-xml-file12871210
Ref: 3b9012871210
Node: Construindo documentos XML12874283
Ref: library/xml etree elementtree building-xml-documents12874437
Ref: 3b9312874437
Node: Analisando XML com espaços de nomes12874831
Ref: library/xml etree elementtree parsing-xml-with-namespaces12874950
Ref: 3b9512874950
Ref: Analisando XML com espaços de nomes-Footnote-112877352
Ref: Analisando XML com espaços de nomes-Footnote-212877404
Node: Suporte a XPath12877456
Ref: library/xml etree elementtree elementtree-xpath12877598
Ref: d9a12877598
Ref: library/xml etree elementtree xpath-support12877598
Ref: 3b9612877598
Ref: Suporte a XPath-Footnote-112877991
Node: Exemplo<8>12878027
Ref: library/xml etree elementtree example12878120
Ref: 3b9712878120
Node: Supported XPath syntax12879139
Ref: library/xml etree elementtree supported-xpath-syntax12879232
Ref: 3b9812879232
Node: Referência<5>12884240
Ref: library/xml etree elementtree reference12884389
Ref: 3b9912884389
Node: Funções<9>12884470
Ref: library/xml etree elementtree elementtree-functions12884533
Ref: 3b9a12884533
Ref: library/xml etree elementtree functions12884533
Ref: 3b9b12884533
Ref: library/xml etree elementtree xml etree ElementTree canonicalize12884572
Ref: c3d12884572
Ref: library/xml etree elementtree xml etree ElementTree Comment12886967
Ref: 3b9c12886967
Ref: library/xml etree elementtree xml etree ElementTree dump12887652
Ref: 3b9d12887652
Ref: library/xml etree elementtree xml etree ElementTree fromstring12888127
Ref: 3b8912888127
Ref: library/xml etree elementtree xml etree ElementTree fromstringlist12888486
Ref: 13cd12888486
Ref: library/xml etree elementtree xml etree ElementTree indent12888901
Ref: 3b9f12888901
Ref: library/xml etree elementtree xml etree ElementTree iselement12889434
Ref: 3ba012889434
Ref: library/xml etree elementtree xml etree ElementTree iterparse12889648
Ref: 57312889648
Ref: library/xml etree elementtree xml etree ElementTree parse12891828
Ref: 3ba112891828
Ref: library/xml etree elementtree xml etree ElementTree ProcessingInstruction12892172
Ref: 3ba212892172
Ref: library/xml etree elementtree xml etree ElementTree register_namespace12892900
Ref: 13ce12892900
Ref: library/xml etree elementtree xml etree ElementTree SubElement12893336
Ref: 3b9412893336
Ref: library/xml etree elementtree xml etree ElementTree tostring12893906
Ref: 11eb12893906
Ref: library/xml etree elementtree xml etree ElementTree tostringlist12895022
Ref: 11ec12895022
Ref: library/xml etree elementtree xml etree ElementTree XML12896315
Ref: 3b9e12896315
Ref: library/xml etree elementtree xml etree ElementTree XMLID12896709
Ref: 3ba312896709
Ref: Funções<9>-Footnote-112897184
Ref: Funções<9>-Footnote-212897225
Ref: Funções<9>-Footnote-312897534
Node: Suporte a XInclude12897843
Ref: library/xml etree elementtree elementtree-xinclude12897991
Ref: 3ba412897991
Ref: library/xml etree elementtree xinclude-support12897991
Ref: 3ba512897991
Ref: Suporte a XInclude-Footnote-112898360
Node: Exemplo<9>12898400
Ref: library/xml etree elementtree id312898465
Ref: 3ba612898465
Node: Referência<6>12900279
Ref: library/xml etree elementtree id412900404
Ref: 3ba712900404
Node: Funções<10>12900650
Ref: library/xml etree elementtree elementinclude-functions12900738
Ref: 3ba812900738
Ref: library/xml etree elementtree id512900738
Ref: 3ba912900738
Ref: library/xml etree elementtree module-xml etree ElementInclude12900777
Ref: 12a12900777
Ref: library/xml etree elementtree xml etree ElementInclude default_loader12900777
Ref: 3baa12900777
Ref: library/xml etree elementtree xml etree ElementInclude include12901372
Ref: 3bab12901372
Node: Element Objects12902257
Ref: library/xml etree elementtree element-objects12902373
Ref: 3bac12902373
Ref: library/xml etree elementtree elementtree-element-objects12902373
Ref: 3bad12902373
Ref: library/xml etree elementtree xml etree ElementTree Element12902426
Ref: 36012902426
Ref: library/xml etree elementtree xml etree ElementTree Element tag12902909
Ref: 154812902909
Ref: library/xml etree elementtree xml etree ElementTree Element text12903053
Ref: 3b8e12903053
Ref: library/xml etree elementtree xml etree ElementTree Element tail12903077
Ref: 3bae12903077
Ref: library/xml etree elementtree xml etree ElementTree Element attrib12904192
Ref: 3baf12904192
Ref: library/xml etree elementtree xml etree ElementTree Element clear12904735
Ref: 3bb012904735
Ref: library/xml etree elementtree xml etree ElementTree Element get12904929
Ref: 3b8f12904929
Ref: library/xml etree elementtree xml etree ElementTree Element items12905118
Ref: 3bb112905118
Ref: library/xml etree elementtree xml etree ElementTree Element keys12905288
Ref: 3bb212905288
Ref: library/xml etree elementtree xml etree ElementTree Element set12905431
Ref: 3b9112905431
Ref: library/xml etree elementtree xml etree ElementTree Element append12905610
Ref: 3b9212905610
Ref: library/xml etree elementtree xml etree ElementTree Element extend12905847
Ref: 13cf12905847
Ref: library/xml etree elementtree xml etree ElementTree Element find12906084
Ref: 17e012906084
Ref: library/xml etree elementtree xml etree ElementTree Element findall12906507
Ref: 17e212906507
Ref: library/xml etree elementtree xml etree ElementTree Element findtext12906927
Ref: 17e112906927
Ref: library/xml etree elementtree xml etree ElementTree Element insert12907532
Ref: 3bb312907532
Ref: library/xml etree elementtree xml etree ElementTree Element iter12907744
Ref: 154912907744
Ref: library/xml etree elementtree xml etree ElementTree Element iterfind12908242
Ref: 13d012908242
Ref: library/xml etree elementtree xml etree ElementTree Element itertext12908582
Ref: 13d112908582
Ref: library/xml etree elementtree xml etree ElementTree Element makeelement12908813
Ref: 3bb412908813
Ref: library/xml etree elementtree xml etree ElementTree Element remove12909037
Ref: 17dc12909037
Ref: Element Objects-Footnote-112911790
Node: ElementTree Objects12911833
Ref: library/xml etree elementtree elementtree-elementtree-objects12911949
Ref: 3bb512911949
Ref: library/xml etree elementtree elementtree-objects12911949
Ref: 3bb612911949
Ref: library/xml etree elementtree xml etree ElementTree ElementTree12912010
Ref: b3d12912010
Ref: library/xml etree elementtree xml etree ElementTree ElementTree _setroot12912363
Ref: 3bb712912363
Ref: library/xml etree elementtree xml etree ElementTree ElementTree find12912613
Ref: 3bb812912613
Ref: library/xml etree elementtree xml etree ElementTree ElementTree findall12912753
Ref: 3bb912912753
Ref: library/xml etree elementtree xml etree ElementTree ElementTree findtext12912899
Ref: 3bba12912899
Ref: library/xml etree elementtree xml etree ElementTree ElementTree getroot12913061
Ref: 3bbb12913061
Ref: library/xml etree elementtree xml etree ElementTree ElementTree iter12913142
Ref: 3bbc12913142
Ref: library/xml etree elementtree xml etree ElementTree ElementTree iterfind12913413
Ref: 3bbd12913413
Ref: library/xml etree elementtree xml etree ElementTree ElementTree parse12913599
Ref: 3bbe12913599
Ref: library/xml etree elementtree xml etree ElementTree ElementTree write12913946
Ref: c7f12913946
Ref: ElementTree Objects-Footnote-112916757
Node: QName Objects12917066
Ref: library/xml etree elementtree elementtree-qname-objects12917186
Ref: 3bbf12917186
Ref: library/xml etree elementtree qname-objects12917186
Ref: 3bc012917186
Ref: library/xml etree elementtree xml etree ElementTree QName12917235
Ref: 3bc112917235
Node: TreeBuilder Objects12917749
Ref: library/xml etree elementtree elementtree-treebuilder-objects12917867
Ref: 3bc212917867
Ref: library/xml etree elementtree treebuilder-objects12917867
Ref: 3bc312917867
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder12917928
Ref: c3f12917928
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder close12919047
Ref: 3bc412919047
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder data12919210
Ref: 3bc512919210
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder end12919375
Ref: 13d212919375
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder start12919509
Ref: 1c2312919509
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder comment12919712
Ref: 3bc612919712
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder pi12919916
Ref: 3bc712919916
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder doctype12920257
Ref: c8112920257
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder start_ns12920589
Ref: 3bc812920589
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder end_ns12920991
Ref: 3bc912920991
Ref: library/xml etree elementtree xml etree ElementTree C14NWriterTarget12921246
Ref: 3bca12921246
Ref: TreeBuilder Objects-Footnote-112921801
Node: Objetos XMLParser12921842
Ref: library/xml etree elementtree elementtree-xmlparser-objects12921968
Ref: 3bcb12921968
Ref: library/xml etree elementtree xmlparser-objects12921968
Ref: 3bcc12921968
Ref: library/xml etree elementtree xml etree ElementTree XMLParser12922025
Ref: c3e12922025
Ref: library/xml etree elementtree xml etree ElementTree XMLParser close12922742
Ref: 3bce12922742
Ref: library/xml etree elementtree xml etree ElementTree XMLParser feed12922999
Ref: 3bcd12922999
Ref: library/xml etree elementtree xml etree ElementTree XMLParser flush12923092
Ref: 56f12923092
Ref: Objetos XMLParser-Footnote-112925736
Node: XMLPullParser Objects12926045
Ref: library/xml etree elementtree elementtree-xmlpullparser-objects12926166
Ref: 3bcf12926166
Ref: library/xml etree elementtree xmlpullparser-objects12926166
Ref: 3bd012926166
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser12926231
Ref: 11e912926231
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser feed12926925
Ref: 3b8b12926925
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser flush12927008
Ref: 57012927008
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser close12927873
Ref: 3bd112927873
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser read_events12928185
Ref: 3b8c12928185
Node: Exceções<22>12929935
Ref: library/xml etree elementtree exceptions12930030
Ref: 3bd212930030
Ref: library/xml etree elementtree xml etree ElementTree ParseError12930071
Ref: 147312930071
Ref: library/xml etree elementtree xml etree ElementTree ParseError code12930400
Ref: 3bd312930400
Ref: library/xml etree elementtree xml etree ElementTree ParseError position12930604
Ref: 3bd412930604
Node: xml dom — The Document Object Model API12930728
Ref: library/xml dom doc12930967
Ref: 3bd512930967
Ref: library/xml dom module-xml dom12930967
Ref: 12712930967
Ref: library/xml dom no-color12930967
Ref: 3bd612930967
Ref: library/xml dom xml-dom-the-document-object-model-api12930967
Ref: 3bd712930967
Ref: xml dom — The Document Object Model API-Footnote-112934458
Ref: xml dom — The Document Object Model API-Footnote-212934535
Ref: xml dom — The Document Object Model API-Footnote-312934601
Ref: xml dom — The Document Object Model API-Footnote-412934648
Node: Conteúdo do módulo<6>12934694
Ref: library/xml dom module-contents12934822
Ref: 3bda12934822
Ref: library/xml dom xml dom registerDOMImplementation12934940
Ref: 3bdb12934940
Ref: library/xml dom xml dom getDOMImplementation12935388
Ref: 3bd812935388
Ref: library/xml dom xml dom EMPTY_NAMESPACE12936297
Ref: 3bdc12936297
Ref: library/xml dom xml dom XML_NAMESPACE12936570
Ref: 3bdd12936570
Ref: library/xml dom xml dom XMLNS_NAMESPACE12936727
Ref: 3bde12936727
Ref: library/xml dom xml dom XHTML_NAMESPACE12936913
Ref: 3bdf12936913
Ref: Conteúdo do módulo<6>-Footnote-112937648
Ref: Conteúdo do módulo<6>-Footnote-212937693
Ref: Conteúdo do módulo<6>-Footnote-312937750
Node: Objects in the DOM12937788
Ref: library/xml dom dom-objects12937936
Ref: 3be012937936
Ref: library/xml dom objects-in-the-dom12937936
Ref: 3be112937936
Node: DOMImplementation Objects12942476
Ref: library/xml dom dom-implementation-objects12942577
Ref: 3be212942577
Ref: library/xml dom domimplementation-objects12942577
Ref: 3beb12942577
Ref: library/xml dom xml dom DOMImplementation hasFeature12942933
Ref: 3bec12942933
Ref: library/xml dom xml dom DOMImplementation createDocument12943113
Ref: 3bed12943113
Ref: library/xml dom xml dom DOMImplementation createDocumentType12943634
Ref: 3bee12943634
Node: Objetos Node12943943
Ref: library/xml dom dom-node-objects12944069
Ref: 3be312944069
Ref: library/xml dom node-objects12944069
Ref: 3bef12944069
Ref: library/xml dom xml dom Node nodeType12944186
Ref: 3bf012944186
Ref: library/xml dom xml dom Node parentNode12944608
Ref: 3bf112944608
Ref: library/xml dom xml dom Node attributes12945016
Ref: 3bf212945016
Ref: library/xml dom xml dom Node previousSibling12945228
Ref: 3bf312945228
Ref: library/xml dom xml dom Node nextSibling12945713
Ref: 3bf412945713
Ref: library/xml dom xml dom Node childNodes12945978
Ref: 3bf512945978
Ref: library/xml dom xml dom Node firstChild12946096
Ref: 3bf612946096
Ref: library/xml dom xml dom Node lastChild12946232
Ref: 3bf712946232
Ref: library/xml dom xml dom Node localName12946366
Ref: 3bf812946366
Ref: library/xml dom xml dom Node prefix12946529
Ref: 3bf912946529
Ref: library/xml dom xml dom Node namespaceURI12946696
Ref: 3bfa12946696
Ref: library/xml dom xml dom Node nodeName12946858
Ref: 3bfb12946858
Ref: library/xml dom xml dom Node nodeValue12947294
Ref: 3bfc12947294
Ref: library/xml dom xml dom Node hasAttributes12947527
Ref: 3bfd12947527
Ref: library/xml dom xml dom Node hasChildNodes12947619
Ref: 3bfe12947619
Ref: library/xml dom xml dom Node isSameNode12947712
Ref: 3bff12947712
Ref: library/xml dom xml dom Node appendChild12948342
Ref: 3c0012948342
Ref: library/xml dom xml dom Node insertBefore12948551
Ref: 3c0112948551
Ref: library/xml dom xml dom Node removeChild12948893
Ref: 3c0212948893
Ref: library/xml dom xml dom Node replaceChild12949182
Ref: 3c0312949182
Ref: library/xml dom xml dom Node normalize12949397
Ref: 3c0412949397
Ref: library/xml dom xml dom Node cloneNode12949615
Ref: 3c0512949615
Node: Objetos NodeList12949760
Ref: library/xml dom dom-nodelist-objects12949881
Ref: 224112949881
Ref: library/xml dom nodelist-objects12949881
Ref: 3c0612949881
Ref: library/xml dom xml dom NodeList item12950362
Ref: 3c0712950362
Ref: library/xml dom xml dom NodeList length12950593
Ref: 3c0812950593
Node: DocumentType Objects12951262
Ref: library/xml dom documenttype-objects12951387
Ref: 3c0912951387
Ref: library/xml dom dom-documenttype-objects12951387
Ref: 3be412951387
Ref: library/xml dom xml dom DocumentType publicId12952020
Ref: 3c0a12952020
Ref: library/xml dom xml dom DocumentType systemId12952185
Ref: 3c0b12952185
Ref: library/xml dom xml dom DocumentType internalSubset12952360
Ref: 3c0c12952360
Ref: library/xml dom xml dom DocumentType name12952612
Ref: 3c0d12952612
Ref: library/xml dom xml dom DocumentType entities12952740
Ref: 3c0e12952740
Ref: library/xml dom xml dom DocumentType notations12953122
Ref: 3c0f12953122
Node: Document Objects12953500
Ref: library/xml dom document-objects12953627
Ref: 3c1012953627
Ref: library/xml dom dom-document-objects12953627
Ref: 3be512953627
Ref: library/xml dom xml dom Document documentElement12953874
Ref: 3c1112953874
Ref: library/xml dom xml dom Document createElement12953967
Ref: 3c1212953967
Ref: library/xml dom xml dom Document createElementNS12954257
Ref: 3c1312954257
Ref: library/xml dom xml dom Document createTextNode12954609
Ref: 3c1412954609
Ref: library/xml dom xml dom Document createComment12954829
Ref: 3c1512954829
Ref: library/xml dom xml dom Document createProcessingInstruction12955051
Ref: 3c1612955051
Ref: library/xml dom xml dom Document createAttribute12955324
Ref: 3c1712955324
Ref: library/xml dom xml dom Document createAttributeNS12955632
Ref: 3c1812955632
Ref: library/xml dom xml dom Document getElementsByTagName12956021
Ref: 3c1912956021
Ref: library/xml dom xml dom Document getElementsByTagNameNS12956198
Ref: 3c1a12956198
Node: Element Objects<2>12956470
Ref: library/xml dom dom-element-objects12956589
Ref: 3be612956589
Ref: library/xml dom element-objects12956589
Ref: 3c1b12956589
Ref: library/xml dom xml dom Element tagName12956730
Ref: 3c1c12956730
Ref: library/xml dom xml dom Element getElementsByTagName12956876
Ref: 3c1d12956876
Ref: library/xml dom xml dom Element getElementsByTagNameNS12956990
Ref: 3c1e12956990
Ref: library/xml dom xml dom Element hasAttribute12957122
Ref: 3c1f12957122
Ref: library/xml dom xml dom Element hasAttributeNS12957237
Ref: 3c2012957237
Ref: library/xml dom xml dom Element getAttribute12957402
Ref: 3c2112957402
Ref: library/xml dom xml dom Element getAttributeNode12957616
Ref: 3c2212957616
Ref: library/xml dom xml dom Element getAttributeNS12957738
Ref: 3c2312957738
Ref: library/xml dom xml dom Element getAttributeNodeNS12957997
Ref: 3c2412957997
Ref: library/xml dom xml dom Element removeAttribute12958152
Ref: 3c2512958152
Ref: library/xml dom xml dom Element removeAttributeNode12958311
Ref: 3c2712958311
Ref: library/xml dom xml dom Element removeAttributeNS12958504
Ref: 3c2812958504
Ref: library/xml dom xml dom Element setAttribute12958714
Ref: 3c2912958714
Ref: library/xml dom xml dom Element setAttributeNode12958807
Ref: 3c2a12958807
Ref: library/xml dom xml dom Element setAttributeNodeNS12959152
Ref: 3c2c12959152
Ref: library/xml dom xml dom Element setAttributeNS12959526
Ref: 3c2d12959526
Node: Attr Objects12959763
Ref: library/xml dom attr-objects12959886
Ref: 3c2e12959886
Ref: library/xml dom dom-attr-objects12959886
Ref: 3be712959886
Ref: library/xml dom xml dom Attr name12960001
Ref: 3c2f12960001
Ref: library/xml dom xml dom Attr localName12960112
Ref: 3c3012960112
Ref: library/xml dom xml dom Attr prefix12960265
Ref: 3c3112960265
Ref: library/xml dom xml dom Attr value12960384
Ref: 3c3212960384
Node: NamedNodeMap Objects12960508
Ref: library/xml dom dom-attributelist-objects12960628
Ref: 3c3312960628
Ref: library/xml dom namednodemap-objects12960628
Ref: 3c3412960628
Ref: library/xml dom xml dom NamedNodeMap length12960747
Ref: 3c3512960747
Ref: library/xml dom xml dom NamedNodeMap item12960822
Ref: 3c3612960822
Node: Comment Objects12961304
Ref: library/xml dom comment-objects12961441
Ref: 3c3712961441
Ref: library/xml dom dom-comment-objects12961441
Ref: 3be812961441
Ref: library/xml dom xml dom Comment data12961613
Ref: 3c3812961613
Node: Text and CDATASection Objects12961830
Ref: library/xml dom dom-text-objects12961976
Ref: 3be912961976
Ref: library/xml dom text-and-cdatasection-objects12961976
Ref: 3c3912961976
Ref: library/xml dom xml dom Text data12962472
Ref: 3c3a12962472
Node: Objetos ProcessingInstruction12962964
Ref: library/xml dom dom-pi-objects12963109
Ref: 3bea12963109
Ref: library/xml dom processinginstruction-objects12963109
Ref: 3c3b12963109
Ref: library/xml dom xml dom ProcessingInstruction target12963321
Ref: 3c3c12963321
Ref: library/xml dom xml dom ProcessingInstruction data12963488
Ref: 3c3d12963488
Node: Exceções<23>12963625
Ref: library/xml dom dom-exceptions12963732
Ref: 3c3e12963732
Ref: library/xml dom exceptions12963732
Ref: 3c3f12963732
Ref: library/xml dom xml dom DOMException12964409
Ref: 3c4012964409
Ref: library/xml dom xml dom DomstringSizeErr12964571
Ref: 3c4112964571
Ref: library/xml dom xml dom HierarchyRequestErr12964826
Ref: 3c4212964826
Ref: library/xml dom xml dom IndexSizeErr12964965
Ref: 3c4312964965
Ref: library/xml dom xml dom InuseAttributeErr12965107
Ref: 3c2b12965107
Ref: library/xml dom xml dom InvalidAccessErr12965271
Ref: 3c4412965271
Ref: library/xml dom xml dom InvalidCharacterErr12965404
Ref: 3c4512965404
Ref: library/xml dom xml dom InvalidModificationErr12965764
Ref: 3c4612965764
Ref: library/xml dom xml dom InvalidStateErr12965878
Ref: 3c4712965878
Ref: library/xml dom xml dom NamespaceErr12966021
Ref: 3c4812966021
Ref: library/xml dom xml dom NotFoundErr12966230
Ref: 3c2612966230
Ref: library/xml dom xml dom NotSupportedErr12966461
Ref: 3c4912966461
Ref: library/xml dom xml dom NoDataAllowedErr12966603
Ref: 3c4a12966603
Ref: library/xml dom xml dom NoModificationAllowedErr12966731
Ref: 3c4b12966731
Ref: library/xml dom xml dom SyntaxErr12966897
Ref: 3c4c12966897
Ref: library/xml dom xml dom WrongDocumentErr12966992
Ref: 3c4d12966992
Ref: Exceções<23>-Footnote-112970033
Node: Conformance12970078
Ref: library/xml dom conformance12970194
Ref: 3c4e12970194
Ref: library/xml dom dom-conformance12970194
Ref: 3bd912970194
Node: Type Mapping12970451
Ref: library/xml dom dom-type-mapping12970536
Ref: 3c4f12970536
Ref: library/xml dom type-mapping12970536
Ref: 3c5012970536
Node: Accessor Methods12971364
Ref: library/xml dom accessor-methods12971449
Ref: 3c5112971449
Ref: library/xml dom dom-accessor-methods12971449
Ref: 3c5212971449
Node: xml dom minidom — Minimal DOM implementation12973325
Ref: library/xml dom minidom doc12973584
Ref: 3c5312973584
Ref: library/xml dom minidom module-xml dom minidom12973584
Ref: 12812973584
Ref: library/xml dom minidom no-color12973584
Ref: 3c5412973584
Ref: library/xml dom minidom xml-dom-minidom-minimal-dom-implementation12973584
Ref: 3c5512973584
Ref: library/xml dom minidom xml dom minidom parse12974844
Ref: 3c5612974844
Ref: library/xml dom minidom xml dom minidom parseString12975409
Ref: 3c5712975409
Ref: xml dom minidom — Minimal DOM implementation-Footnote-112977984
Ref: xml dom minidom — Minimal DOM implementation-Footnote-212978060
Node: Objetos DOM12978107
Ref: library/xml dom minidom dom-objects12978221
Ref: 3c5812978221
Ref: library/xml dom minidom minidom-objects12978221
Ref: 3c5912978221
Ref: library/xml dom minidom xml dom minidom Node unlink12978456
Ref: 3c5a12978456
Ref: library/xml dom minidom xml dom minidom Node writexml12979233
Ref: c7c12979233
Ref: library/xml dom minidom xml dom minidom Node toxml12980475
Ref: c7d12980475
Ref: library/xml dom minidom xml dom minidom Node toprettyxml12981285
Ref: c7e12981285
Ref: Objetos DOM-Footnote-112982026
Node: DOM Example12982429
Ref: library/xml dom minidom dom-example12982575
Ref: 3c5b12982575
Ref: library/xml dom minidom id212982575
Ref: 3c5c12982575
Node: minidom e o padrão DOM12984607
Ref: library/xml dom minidom minidom-and-dom12984733
Ref: 3c5d12984733
Ref: library/xml dom minidom minidom-and-the-dom-standard12984733
Ref: 3c5e12984733
Node: xml dom pulldom — Suporte para construir árvores parciais de DOM12987363
Ref: library/xml dom pulldom doc12987617
Ref: 3c5f12987617
Ref: library/xml dom pulldom module-xml dom pulldom12987617
Ref: 12912987617
Ref: library/xml dom pulldom no-color12987617
Ref: 3c6012987617
Ref: library/xml dom pulldom xml-dom-pulldom-support-for-building-partial-dom-trees12987617
Ref: 3c6112987617
Ref: library/xml dom pulldom xml dom pulldom PullDom12990491
Ref: 3c6312990491
Ref: library/xml dom pulldom xml dom pulldom SAX2DOM12990614
Ref: 3c6512990614
Ref: library/xml dom pulldom xml dom pulldom parse12990737
Ref: 3c6612990737
Ref: library/xml dom pulldom xml dom pulldom parseString12991403
Ref: 3c6812991403
Ref: library/xml dom pulldom xml dom pulldom default_bufsize12991554
Ref: 3c6912991554
Ref: xml dom pulldom — Suporte para construir árvores parciais de DOM-Footnote-112991868
Node: Objetos DOMEventStream12991944
Ref: library/xml dom pulldom domeventstream-objects12992070
Ref: 3c6a12992070
Ref: library/xml dom pulldom id112992070
Ref: 3c6b12992070
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream12992135
Ref: 93312992135
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream getEvent12992306
Ref: 3c6c12992306
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream expandNode12992830
Ref: 3c6212992830
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream reset12993555
Ref: 3c6d12993555
Node: xml sax — Support for SAX2 parsers12993583
Ref: library/xml sax doc12993840
Ref: 3c6e12993840
Ref: library/xml sax module-xml sax12993840
Ref: 12f12993840
Ref: library/xml sax no-color12993840
Ref: 3c6f12993840
Ref: library/xml sax xml-sax-support-for-sax2-parsers12993840
Ref: 3c7012993840
Ref: library/xml sax xml sax make_parser12994867
Ref: 1cd212994867
Ref: library/xml sax xml sax parse12995366
Ref: 1c9d12995366
Ref: library/xml sax xml sax parseString12995961
Ref: 109212995961
Ref: library/xml sax xml sax SAXException12997889
Ref: 3c7612997889
Ref: library/xml sax xml sax SAXParseException12998761
Ref: 3c7412998761
Ref: library/xml sax xml sax SAXNotRecognizedException12999172
Ref: 3c7712999172
Ref: library/xml sax xml sax SAXNotSupportedException12999474
Ref: 3c7812999474
Ref: xml sax — Support for SAX2 parsers-Footnote-113000493
Ref: xml sax — Support for SAX2 parsers-Footnote-213000570
Node: SAXException Objects13000605
Ref: library/xml sax sax-exception-objects13000698
Ref: 3c7913000698
Ref: library/xml sax saxexception-objects13000698
Ref: 3c7a13000698
Ref: library/xml sax xml sax SAXException getMessage13000838
Ref: 3c7b13000838
Ref: library/xml sax xml sax SAXException getException13000949
Ref: 3c7c13000949
Node: xml sax handler — Base classes for SAX handlers13001054
Ref: library/xml sax handler doc13001284
Ref: 3c7d13001284
Ref: library/xml sax handler module-xml sax handler13001284
Ref: 13013001284
Ref: library/xml sax handler no-color13001284
Ref: 3c7e13001284
Ref: library/xml sax handler xml-sax-handler-base-classes-for-sax-handlers13001284
Ref: 3c7f13001284
Ref: library/xml sax handler xml sax handler ContentHandler13001989
Ref: 3c6413001989
Ref: library/xml sax handler xml sax handler DTDHandler13002230
Ref: 3c8013002230
Ref: library/xml sax handler xml sax handler EntityResolver13002420
Ref: 3c8113002420
Ref: library/xml sax handler xml sax handler ErrorHandler13002703
Ref: 3c7313002703
Ref: library/xml sax handler xml sax handler LexicalHandler13002978
Ref: a5213002978
Ref: library/xml sax handler xml sax handler feature_namespaces13003270
Ref: 3c8213003270
Ref: library/xml sax handler xml sax handler feature_namespace_prefixes13003609
Ref: 3c8313003609
Ref: library/xml sax handler xml sax handler feature_string_interning13004038
Ref: 3c8413004038
Ref: library/xml sax handler xml sax handler feature_validation13004453
Ref: 3c8513004453
Ref: library/xml sax handler xml sax handler feature_external_ges13004792
Ref: 3c7213004792
Ref: library/xml sax handler xml sax handler feature_external_pes13005105
Ref: 3c8613005105
Ref: library/xml sax handler xml sax handler all_features13005486
Ref: 3c8713005486
Ref: library/xml sax handler xml sax handler property_lexical_handler13005560
Ref: 3c8813005560
Ref: library/xml sax handler xml sax handler property_declaration_handler13005899
Ref: 3c8913005899
Ref: library/xml sax handler xml sax handler property_dom_node13006265
Ref: 3c8a13006265
Ref: library/xml sax handler xml sax handler property_xml_string13006655
Ref: 3c8b13006655
Ref: library/xml sax handler xml sax handler all_properties13006929
Ref: 3c8c13006929
Ref: xml sax handler — Base classes for SAX handlers-Footnote-113007186
Node: ContentHandler Objects13007262
Ref: library/xml sax handler content-handler-objects13007397
Ref: 3c8d13007397
Ref: library/xml sax handler contenthandler-objects13007397
Ref: 3c8e13007397
Ref: library/xml sax handler xml sax handler ContentHandler setDocumentLocator13007651
Ref: 3c8f13007651
Ref: library/xml sax handler xml sax handler ContentHandler startDocument13008727
Ref: 3c9013008727
Ref: library/xml sax handler xml sax handler ContentHandler endDocument13009006
Ref: 3c9113009006
Ref: library/xml sax handler xml sax handler ContentHandler startPrefixMapping13009375
Ref: 3c9213009375
Ref: library/xml sax handler xml sax handler ContentHandler endPrefixMapping13010578
Ref: 3c9313010578
Ref: library/xml sax handler xml sax handler ContentHandler startElement13010922
Ref: 173113010922
Ref: library/xml sax handler xml sax handler ContentHandler endElement13011522
Ref: 173213011522
Ref: library/xml sax handler xml sax handler ContentHandler startElementNS13011751
Ref: 3c9513011751
Ref: library/xml sax handler xml sax handler ContentHandler endElementNS13012696
Ref: 3c9713012696
Ref: library/xml sax handler xml sax handler ContentHandler characters13012968
Ref: 173313012968
Ref: library/xml sax handler xml sax handler ContentHandler ignorableWhitespace13013996
Ref: 3c9813013996
Ref: library/xml sax handler xml sax handler ContentHandler processingInstruction13014664
Ref: 3c9913014664
Ref: library/xml sax handler xml sax handler ContentHandler skippedEntity13015125
Ref: 3c9a13015125
Node: DTDHandler Objects13015626
Ref: library/xml sax handler dtd-handler-objects13015792
Ref: 3c9b13015792
Ref: library/xml sax handler dtdhandler-objects13015792
Ref: 3c9c13015792
Ref: library/xml sax handler xml sax handler DTDHandler notationDecl13015923
Ref: 3c9d13015923
Ref: library/xml sax handler xml sax handler DTDHandler unparsedEntityDecl13016031
Ref: 3c9e13016031
Node: EntityResolver Objects13016170
Ref: library/xml sax handler entity-resolver-objects13016334
Ref: 3c9f13016334
Ref: library/xml sax handler entityresolver-objects13016334
Ref: 3ca013016334
Ref: library/xml sax handler xml sax handler EntityResolver resolveEntity13016401
Ref: 3ca113016401
Node: ErrorHandler Objects13016670
Ref: library/xml sax handler errorhandler-objects13016838
Ref: 3ca213016838
Ref: library/xml sax handler sax-error-handler13016838
Ref: 3ca313016838
Ref: library/xml sax handler xml sax handler ErrorHandler error13017493
Ref: 3ca413017493
Ref: library/xml sax handler xml sax handler ErrorHandler fatalError13017863
Ref: 3ca513017863
Ref: library/xml sax handler xml sax handler ErrorHandler warning13018050
Ref: 3ca613018050
Node: LexicalHandler Objects13018396
Ref: library/xml sax handler lexical-handler-objects13018533
Ref: 3ca713018533
Ref: library/xml sax handler lexicalhandler-objects13018533
Ref: 3ca813018533
Ref: library/xml sax handler xml sax handler LexicalHandler comment13019138
Ref: 3ca913019138
Ref: library/xml sax handler xml sax handler LexicalHandler startDTD13019293
Ref: 3caa13019293
Ref: library/xml sax handler xml sax handler LexicalHandler endDTD13019452
Ref: 3cab13019452
Ref: library/xml sax handler xml sax handler LexicalHandler startCDATA13019533
Ref: 3cac13019533
Ref: library/xml sax handler xml sax handler LexicalHandler endCDATA13019728
Ref: 3cad13019728
Node: xml sax saxutils — Utilitários de SAX13019818
Ref: library/xml sax utils doc13020059
Ref: 3cae13020059
Ref: library/xml sax utils module-xml sax saxutils13020059
Ref: 13113020059
Ref: library/xml sax utils no-color13020059
Ref: 3caf13020059
Ref: library/xml sax utils xml-sax-saxutils-sax-utilities13020059
Ref: 3cb013020059
Ref: library/xml sax utils xml sax saxutils escape13020452
Ref: 3cb113020452
Ref: library/xml sax utils xml sax saxutils unescape13021133
Ref: 3cb213021133
Ref: library/xml sax utils xml sax saxutils quoteattr13021646
Ref: 3cb313021646
Ref: library/xml sax utils xml sax saxutils XMLGenerator13022625
Ref: 3cb413022625
Ref: library/xml sax utils xml sax saxutils XMLFilterBase13023542
Ref: 3cb513023542
Ref: library/xml sax utils xml sax saxutils prepare_input_source13024023
Ref: 3cb613024023
Ref: xml sax saxutils — Utilitários de SAX-Footnote-113024569
Node: xml sax xmlreader — Interface for XML parsers13024646
Ref: library/xml sax reader doc13024888
Ref: 3cb813024888
Ref: library/xml sax reader module-xml sax xmlreader13024888
Ref: 13213024888
Ref: library/xml sax reader no-color13024888
Ref: 3cb913024888
Ref: library/xml sax reader xml-sax-xmlreader-interface-for-xml-parsers13024888
Ref: 3cba13024888
Ref: library/xml sax reader xml sax xmlreader XMLReader13025390
Ref: 3c6713025390
Ref: library/xml sax reader xml sax xmlreader IncrementalParser13025487
Ref: 3cbb13025487
Ref: library/xml sax reader xml sax xmlreader Locator13026615
Ref: 3c7513026615
Ref: library/xml sax reader xml sax xmlreader InputSource13026949
Ref: 109113026949
Ref: library/xml sax reader xml sax xmlreader AttributesImpl13027720
Ref: 3cbc13027720
Ref: library/xml sax reader xml sax xmlreader AttributesNSImpl13028320
Ref: 3cbd13028320
Ref: xml sax xmlreader — Interface for XML parsers-Footnote-113029078
Node: XMLReader Objects13029156
Ref: library/xml sax reader id113029291
Ref: 3cbe13029291
Ref: library/xml sax reader xmlreader-objects13029291
Ref: 3cbf13029291
Ref: library/xml sax reader xml sax xmlreader XMLReader parse13029418
Ref: 3cb713029418
Ref: library/xml sax reader xml sax xmlreader XMLReader getContentHandler13030012
Ref: 3cc013030012
Ref: library/xml sax reader xml sax xmlreader XMLReader setContentHandler13030110
Ref: 3cc113030110
Ref: library/xml sax reader xml sax xmlreader XMLReader getDTDHandler13030294
Ref: 3cc213030294
Ref: library/xml sax reader xml sax xmlreader XMLReader setDTDHandler13030384
Ref: 3cc313030384
Ref: library/xml sax reader xml sax xmlreader XMLReader getEntityResolver13030552
Ref: 3cc413030552
Ref: library/xml sax reader xml sax xmlreader XMLReader setEntityResolver13030650
Ref: 3cc513030650
Ref: library/xml sax reader xml sax xmlreader XMLReader getErrorHandler13030943
Ref: 3cc613030943
Ref: library/xml sax reader xml sax xmlreader XMLReader setErrorHandler13031037
Ref: 3cc713031037
Ref: library/xml sax reader xml sax xmlreader XMLReader setLocale13031242
Ref: 3cc813031242
Ref: library/xml sax reader xml sax xmlreader XMLReader getFeature13031609
Ref: 3cc913031609
Ref: library/xml sax reader xml sax xmlreader XMLReader setFeature13031892
Ref: 3c7113031892
Ref: library/xml sax reader xml sax xmlreader XMLReader getProperty13032182
Ref: 3cca13032182
Ref: library/xml sax reader xml sax xmlreader XMLReader setProperty13032474
Ref: 3ccb13032474
Node: IncrementalParser Objects13032769
Ref: library/xml sax reader incremental-parser-objects13032928
Ref: 3ccc13032928
Ref: library/xml sax reader incrementalparser-objects13032928
Ref: 3ccd13032928
Ref: library/xml sax reader xml sax xmlreader IncrementalParser feed13033086
Ref: 3cce13033086
Ref: library/xml sax reader xml sax xmlreader IncrementalParser close13033163
Ref: 3ccf13033163
Ref: library/xml sax reader xml sax xmlreader IncrementalParser reset13033403
Ref: 3cd013033403
Node: Locator Objects13033666
Ref: library/xml sax reader id213033827
Ref: 3cd113033827
Ref: library/xml sax reader locator-objects13033827
Ref: 3cd213033827
Ref: library/xml sax reader xml sax xmlreader Locator getColumnNumber13033938
Ref: 3cd313033938
Ref: library/xml sax reader xml sax xmlreader Locator getLineNumber13034042
Ref: 3cd413034042
Ref: library/xml sax reader xml sax xmlreader Locator getPublicId13034142
Ref: 3cd513034142
Ref: library/xml sax reader xml sax xmlreader Locator getSystemId13034237
Ref: 3cd613034237
Node: InputSource Objects13034332
Ref: library/xml sax reader input-source-objects13034492
Ref: 3cd713034492
Ref: library/xml sax reader inputsource-objects13034492
Ref: 3cd813034492
Ref: library/xml sax reader xml sax xmlreader InputSource setPublicId13034553
Ref: 3cd913034553
Ref: library/xml sax reader xml sax xmlreader InputSource getPublicId13034662
Ref: 3cda13034662
Ref: library/xml sax reader xml sax xmlreader InputSource setSystemId13034772
Ref: 3cdb13034772
Ref: library/xml sax reader xml sax xmlreader InputSource getSystemId13034881
Ref: 3cdc13034881
Ref: library/xml sax reader xml sax xmlreader InputSource setEncoding13034991
Ref: 3cdd13034991
Ref: library/xml sax reader xml sax xmlreader InputSource getEncoding13035381
Ref: 3cde13035381
Ref: library/xml sax reader xml sax xmlreader InputSource setByteStream13035484
Ref: 3cdf13035484
Ref: library/xml sax reader xml sax xmlreader InputSource getByteStream13035918
Ref: 3ce013035918
Ref: library/xml sax reader xml sax xmlreader InputSource setCharacterStream13036127
Ref: 3ce113036127
Ref: library/xml sax reader xml sax xmlreader InputSource getCharacterStream13036442
Ref: 3ce213036442
Node: The Attributes Interface13036544
Ref: library/xml sax reader attributes-objects13036715
Ref: 3c9413036715
Ref: library/xml sax reader the-attributes-interface13036715
Ref: 3ce313036715
Ref: library/xml sax reader xml sax xmlreader Attributes getLength13037045
Ref: 3ce413037045
Ref: library/xml sax reader xml sax xmlreader Attributes getNames13037122
Ref: 3ce513037122
Ref: library/xml sax reader xml sax xmlreader Attributes getType13037201
Ref: 3ce613037201
Ref: library/xml sax reader xml sax xmlreader Attributes getValue13037327
Ref: 3ce713037327
Node: The AttributesNS Interface13037412
Ref: library/xml sax reader attributes-ns-objects13037555
Ref: 3c9613037555
Ref: library/xml sax reader the-attributesns-interface13037555
Ref: 3ce813037555
Ref: library/xml sax reader xml sax xmlreader AttributesNS getValueByQName13037888
Ref: 3ce913037888
Ref: library/xml sax reader xml sax xmlreader AttributesNS getNameByQName13037983
Ref: 3cea13037983
Ref: library/xml sax reader xml sax xmlreader AttributesNS getQNameByName13038107
Ref: 3ceb13038107
Ref: library/xml sax reader xml sax xmlreader AttributesNS getQNames13038229
Ref: 3cec13038229
Node: xml parsers expat — Fast XML parsing using Expat13038321
Ref: library/pyexpat doc13038514
Ref: 3ced13038514
Ref: library/pyexpat module-xml parsers expat13038514
Ref: 12c13038514
Ref: library/pyexpat no-color13038514
Ref: 3cee13038514
Ref: library/pyexpat xml-parsers-expat-fast-xml-parsing-using-expat13038514
Ref: 3cef13038514
Ref: library/pyexpat xml parsers expat ExpatError13039560
Ref: 147413039560
Ref: library/pyexpat xml parsers expat error13039788
Ref: 3cf113039788
Ref: library/pyexpat xml parsers expat XMLParserType13039871
Ref: 3cf213039871
Ref: library/pyexpat xml parsers expat ErrorString13040055
Ref: 3cf413040055
Ref: library/pyexpat xml parsers expat ParserCreate13040195
Ref: 3cf313040195
Ref: xml parsers expat — Fast XML parsing using Expat-Footnote-113042869
Ref: xml parsers expat — Fast XML parsing using Expat-Footnote-213043178
Node: Objetos XMLParser<2>13043211
Ref: library/pyexpat id213043348
Ref: 3cf513043348
Ref: library/pyexpat xmlparser-objects13043348
Ref: 3cf613043348
Ref: library/pyexpat xml parsers expat xmlparser Parse13043458
Ref: 3cf713043458
Ref: library/pyexpat xml parsers expat xmlparser ParseFile13043837
Ref: 3cf813043837
Ref: library/pyexpat xml parsers expat xmlparser SetBase13044058
Ref: 3cf913044058
Ref: library/pyexpat xml parsers expat xmlparser GetBase13044475
Ref: 3cfd13044475
Ref: library/pyexpat xml parsers expat xmlparser GetInputContext13044674
Ref: 3cfe13044674
Ref: library/pyexpat xml parsers expat xmlparser ExternalEntityParserCreate13044958
Ref: 175f13044958
Ref: library/pyexpat xml parsers expat xmlparser SetParamEntityParsing13045476
Ref: 3d0113045476
Ref: library/pyexpat xml parsers expat xmlparser UseForeignDTD13045842
Ref: 3d0213045842
Ref: library/pyexpat xml parsers expat xmlparser SetReparseDeferralEnabled13046830
Ref: 57213046830
Ref: library/pyexpat xml parsers expat xmlparser GetReparseDeferralEnabled13048347
Ref: 57113048347
Ref: library/pyexpat xml parsers expat xmlparser buffer_size13048592
Ref: 3d0513048592
Ref: library/pyexpat xml parsers expat xmlparser buffer_text13048853
Ref: 16b013048853
Ref: library/pyexpat xml parsers expat xmlparser buffer_used13049398
Ref: 3d0713049398
Ref: library/pyexpat xml parsers expat xmlparser ordered_attributes13049670
Ref: 3cff13049670
Ref: library/pyexpat xml parsers expat xmlparser specified_attributes13050161
Ref: 3d0013050161
Ref: library/pyexpat xml parsers expat xmlparser ErrorByteIndex13050967
Ref: 3d0813050967
Ref: library/pyexpat xml parsers expat xmlparser ErrorCode13051052
Ref: 3d0913051052
Ref: library/pyexpat xml parsers expat xmlparser ErrorColumnNumber13051282
Ref: 3d0a13051282
Ref: library/pyexpat xml parsers expat xmlparser ErrorLineNumber13051373
Ref: 3d0b13051373
Ref: library/pyexpat xml parsers expat xmlparser CurrentByteIndex13051865
Ref: 3d0c13051865
Ref: library/pyexpat xml parsers expat xmlparser CurrentColumnNumber13051953
Ref: 3d0d13051953
Ref: library/pyexpat xml parsers expat xmlparser CurrentLineNumber13052047
Ref: 3d0e13052047
Ref: library/pyexpat xml parsers expat xmlparser XmlDeclHandler13052459
Ref: 3d0f13052459
Ref: library/pyexpat xml parsers expat xmlparser StartDoctypeDeclHandler13053073
Ref: 3d0313053073
Ref: library/pyexpat xml parsers expat xmlparser EndDoctypeDeclHandler13053627
Ref: 3d0413053627
Ref: library/pyexpat xml parsers expat xmlparser ElementDeclHandler13053794
Ref: 3d1013053794
Ref: library/pyexpat xml parsers expat xmlparser AttlistDeclHandler13054009
Ref: 3d1113054009
Ref: library/pyexpat xml parsers expat xmlparser StartElementHandler13054913
Ref: 3d1213054913
Ref: library/pyexpat xml parsers expat xmlparser EndElementHandler13055311
Ref: 3d1313055311
Ref: library/pyexpat xml parsers expat xmlparser ProcessingInstructionHandler13055403
Ref: 3d1413055403
Ref: library/pyexpat xml parsers expat xmlparser CharacterDataHandler13055518
Ref: 3d0613055518
Ref: library/pyexpat xml parsers expat xmlparser UnparsedEntityDeclHandler13056184
Ref: 3cfc13056184
Ref: library/pyexpat xml parsers expat xmlparser EntityDeclHandler13056578
Ref: 3d1713056578
Ref: library/pyexpat xml parsers expat xmlparser NotationDeclHandler13057324
Ref: 3cfb13057324
Ref: library/pyexpat xml parsers expat xmlparser StartNamespaceDeclHandler13057616
Ref: 3d1813057616
Ref: library/pyexpat xml parsers expat xmlparser EndNamespaceDeclHandler13057895
Ref: 3d1913057895
Ref: library/pyexpat xml parsers expat xmlparser CommentHandler13058419
Ref: 3d1a13058419
Ref: library/pyexpat xml parsers expat xmlparser StartCdataSectionHandler13058606
Ref: 3d1513058606
Ref: library/pyexpat xml parsers expat xmlparser EndCdataSectionHandler13058844
Ref: 3d1613058844
Ref: library/pyexpat xml parsers expat xmlparser DefaultHandler13058938
Ref: 3d1b13058938
Ref: library/pyexpat xml parsers expat xmlparser DefaultHandlerExpand13059224
Ref: 3d1c13059224
Ref: library/pyexpat xml parsers expat xmlparser NotStandaloneHandler13059465
Ref: 3d1d13059465
Ref: library/pyexpat xml parsers expat xmlparser ExternalEntityRefHandler13059988
Ref: 3cfa13059988
Node: Exceções ExpatError13061045
Ref: library/pyexpat expaterror-exceptions13061202
Ref: 3d1e13061202
Ref: library/pyexpat expaterror-objects13061202
Ref: 3cf013061202
Ref: library/pyexpat xml parsers expat ExpatError code13061342
Ref: 3d1f13061342
Ref: library/pyexpat xml parsers expat ExpatError lineno13061990
Ref: 3d2213061990
Ref: library/pyexpat xml parsers expat ExpatError offset13062116
Ref: 3d2313062116
Node: Exemplo<10>13062256
Ref: library/pyexpat example13062419
Ref: 3d2413062419
Ref: library/pyexpat expat-example13062419
Ref: 3d2513062419
Node: Content Model Descriptions13063517
Ref: library/pyexpat content-model-descriptions13063692
Ref: 3d2613063692
Ref: library/pyexpat expat-content-models13063692
Ref: 3d2713063692
Ref: library/pyexpat module-xml parsers expat model13063692
Ref: 12e13063692
Node: Constantes de erro de expatriados13065531
Ref: library/pyexpat expat-error-constants13065686
Ref: 3d2813065686
Ref: library/pyexpat expat-errors13065686
Ref: 3d2913065686
Ref: library/pyexpat module-xml parsers expat errors13065686
Ref: 12d13065686
Ref: library/pyexpat xml parsers expat errors codes13066300
Ref: 3d2113066300
Ref: library/pyexpat xml parsers expat errors messages13066444
Ref: 3d2013066444
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ASYNC_ENTITY13066604
Ref: 3d2a13066604
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF13066663
Ref: 3d2b13066663
Ref: library/pyexpat xml parsers expat errors XML_ERROR_BAD_CHAR_REF13066864
Ref: 3d2c13066864
Ref: library/pyexpat xml parsers expat errors XML_ERROR_BINARY_ENTITY_REF13067059
Ref: 3d2d13067059
Ref: library/pyexpat xml parsers expat errors XML_ERROR_DUPLICATE_ATTRIBUTE13067233
Ref: 3d2e13067233
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INCORRECT_ENCODING13067358
Ref: 3d2f13067358
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INVALID_TOKEN13067423
Ref: 3d3013067423
Ref: library/pyexpat xml parsers expat errors XML_ERROR_JUNK_AFTER_DOC_ELEMENT13067637
Ref: 3d3113067637
Ref: library/pyexpat xml parsers expat errors XML_ERROR_MISPLACED_XML_PI13067786
Ref: 3d3213067786
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_ELEMENTS13067939
Ref: 3d3313067939
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_MEMORY13068114
Ref: 3d3413068114
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PARAM_ENTITY_REF13068226
Ref: 3d3513068226
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PARTIAL_CHAR13068360
Ref: 3d3613068360
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RECURSIVE_ENTITY_REF13068473
Ref: 3d3713068473
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SYNTAX13068675
Ref: 3d3813068675
Ref: library/pyexpat xml parsers expat errors XML_ERROR_TAG_MISMATCH13068781
Ref: 3d3913068781
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNCLOSED_TOKEN13068901
Ref: 3d3a13068901
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNDEFINED_ENTITY13069085
Ref: 3d3b13069085
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNKNOWN_ENCODING13069211
Ref: 3d3c13069211
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNCLOSED_CDATA_SECTION13069329
Ref: 3d3d13069329
Ref: library/pyexpat xml parsers expat errors XML_ERROR_EXTERNAL_ENTITY_HANDLING13069443
Ref: 3d3e13069443
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NOT_STANDALONE13069514
Ref: 3d3f13069514
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNEXPECTED_STATE13069777
Ref: 3d4013069777
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ENTITY_DECLARED_IN_PE13069840
Ref: 3d4113069840
Ref: library/pyexpat xml parsers expat errors XML_ERROR_FEATURE_REQUIRES_XML_DTD13069908
Ref: 3d4213069908
Ref: library/pyexpat xml parsers expat errors XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING13070214
Ref: 3d4313070214
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNBOUND_PREFIX13070487
Ref: 3d4413070487
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNDECLARING_PREFIX13070629
Ref: 3d4513070629
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INCOMPLETE_PE13070790
Ref: 3d4613070790
Ref: library/pyexpat xml parsers expat errors XML_ERROR_XML_DECL13070904
Ref: 3d4713070904
Ref: library/pyexpat xml parsers expat errors XML_ERROR_TEXT_DECL13071016
Ref: 3d4813071016
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PUBLICID13071152
Ref: 3d4913071152
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SUSPENDED13071274
Ref: 3d4a13071274
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NOT_SUSPENDED13071498
Ref: 3d4b13071498
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ABORTED13071650
Ref: 3d4c13071650
Ref: library/pyexpat xml parsers expat errors XML_ERROR_FINISHED13071762
Ref: 3d4d13071762
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SUSPEND_PE13072008
Ref: 3d4e13072008
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_PREFIX_XML13072065
Ref: 3d4f13072065
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_PREFIX_XMLNS13072251
Ref: 3d5013072251
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_NAMESPACE_URI13072413
Ref: 3d5113072413
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INVALID_ARGUMENT13072623
Ref: 3d5213072623
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_BUFFER13072744
Ref: 3d5313072744
Ref: library/pyexpat xml parsers expat errors XML_ERROR_AMPLIFICATION_LIMIT_BREACH13072858
Ref: 3d5413072858
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NOT_STARTED13073025
Ref: 182f13073025
Node: Protocolos de Internet e Suporte13073190
Ref: library/internet doc13073378
Ref: 3d5513073378
Ref: library/internet internet13073378
Ref: 3d5613073378
Ref: library/internet internet-protocols-and-support13073378
Ref: 3d5713073378
Ref: library/internet no-color13073378
Ref: 3d5813073378
Node: webbrowser — Controlador de navegador web conveniente13075460
Ref: library/webbrowser doc13075655
Ref: 3d5913075655
Ref: library/webbrowser module-webbrowser13075655
Ref: 11b13075655
Ref: library/webbrowser webbrowser-convenient-web-browser-controller13075655
Ref: 3d5a13075655
Ref: library/webbrowser cmdoption-webbrowser-n13078476
Ref: 3d5b13078476
Ref: library/webbrowser cmdoption-webbrowser-new-window13078476
Ref: 3d5c13078476
Ref: library/webbrowser cmdoption-webbrowser-t13078570
Ref: 3d5d13078570
Ref: library/webbrowser cmdoption-webbrowser-new-tab13078570
Ref: 3d5e13078570
Ref: library/webbrowser webbrowser Error13078861
Ref: 3d5f13078861
Ref: library/webbrowser webbrowser open13079010
Ref: 17ed13079010
Ref: library/webbrowser webbrowser open_new13080031
Ref: 3d6013080031
Ref: library/webbrowser webbrowser open_new_tab13080309
Ref: 3d6113080309
Ref: library/webbrowser webbrowser get13080619
Ref: 3d6213080619
Ref: library/webbrowser webbrowser register13080859
Ref: 3d6313080859
Ref: webbrowser — Controlador de navegador web conveniente-Footnote-113087544
Ref: webbrowser — Controlador de navegador web conveniente-Footnote-213087614
Node: Objetos controladores de navegador13087756
Ref: library/webbrowser browser-controller-objects13087882
Ref: 3d6413087882
Ref: library/webbrowser browser-controllers13087882
Ref: 3d6513087882
Ref: library/webbrowser webbrowser controller name13088140
Ref: 59313088140
Ref: library/webbrowser webbrowser controller open13088222
Ref: 3d6613088222
Ref: library/webbrowser webbrowser controller open_new13088540
Ref: 3d6713088540
Ref: library/webbrowser webbrowser controller open_new_tab13088783
Ref: 3d6813088783
Node: wsgiref — Implementação de referência e utilitários WSGI13089015
Ref: library/wsgiref doc13089262
Ref: 3d6913089262
Ref: library/wsgiref module-wsgiref13089262
Ref: 11e13089262
Ref: library/wsgiref no-color13089262
Ref: 3d6a13089262
Ref: library/wsgiref wsgiref-wsgi-utilities-and-reference-implementation13089262
Ref: 3d6b13089262
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-113091564
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-213091628
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-313091670
Node: wsgiref util – Utilidades do ambiente WSGI13091707
Ref: library/wsgiref module-wsgiref util13091921
Ref: 12313091921
Ref: library/wsgiref wsgiref-util-wsgi-environment-utilities13091921
Ref: 3d6c13091921
Ref: library/wsgiref wsgiref util guess_scheme13092522
Ref: 3d6e13092522
Ref: library/wsgiref wsgiref util request_uri13093212
Ref: 3d6f13093212
Ref: library/wsgiref wsgiref util application_uri13093564
Ref: 3d7013093564
Ref: library/wsgiref wsgiref util shift_path_info13093836
Ref: 3d7113093836
Ref: library/wsgiref wsgiref util setup_testing_defaults13095572
Ref: 3d7213095572
Ref: library/wsgiref wsgiref util is_hop_by_hop13097348
Ref: 197913097348
Ref: library/wsgiref wsgiref util FileWrapper13097535
Ref: 93413097535
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-113098833
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-213098875
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-313098917
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-413098959
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-513099001
Node: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI13099060
Ref: library/wsgiref module-wsgiref headers13099338
Ref: 12013099338
Ref: library/wsgiref wsgiref-headers-wsgi-response-header-tools13099338
Ref: 3d7513099338
Ref: library/wsgiref wsgiref headers Headers13099659
Ref: 108e13099659
Ref: library/wsgiref wsgiref headers Headers get_all13102255
Ref: 3d7613102255
Ref: library/wsgiref wsgiref headers Headers add_header13102751
Ref: 3d7713102751
Ref: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI-Footnote-113104051
Node: wsgiref simple_server – um servidor HTTP WSGI simples13104093
Ref: library/wsgiref module-wsgiref simple_server13104380
Ref: 12113104380
Ref: library/wsgiref wsgiref-simple-server-a-simple-wsgi-http-server13104380
Ref: 3d7813104380
Ref: library/wsgiref wsgiref simple_server make_server13105016
Ref: 3d7913105016
Ref: library/wsgiref wsgiref simple_server demo_app13105896
Ref: 3d7313105896
Ref: library/wsgiref wsgiref simple_server WSGIServer13106443
Ref: 3d7b13106443
Ref: library/wsgiref wsgiref simple_server WSGIServer set_app13107243
Ref: 3d7d13107243
Ref: library/wsgiref wsgiref simple_server WSGIServer get_app13107392
Ref: 3d7e13107392
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler13107787
Ref: 3d7f13107787
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler get_environ13108458
Ref: 3d8013108458
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler get_stderr13108994
Ref: 3d8113108994
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler handle13109186
Ref: 3d8213109186
Ref: wsgiref simple_server – um servidor HTTP WSGI simples-Footnote-113109479
Ref: wsgiref simple_server – um servidor HTTP WSGI simples-Footnote-213109521
Node: wsgiref validate — Verificador de conformidade WSGI13109563
Ref: library/wsgiref module-wsgiref validate13109841
Ref: 12413109841
Ref: library/wsgiref wsgiref-validate-wsgi-conformance-checker13109841
Ref: 3d8313109841
Ref: library/wsgiref wsgiref validate validator13110799
Ref: 3d8413110799
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-113113125
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-213113167
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-313113226
Node: wsgiref handlers – classes base de servidor/gateway13113268
Ref: library/wsgiref module-wsgiref handlers13113544
Ref: 11f13113544
Ref: library/wsgiref wsgiref-handlers-server-gateway-base-classes13113544
Ref: 3d8513113544
Ref: library/wsgiref wsgiref handlers CGIHandler13113963
Ref: 3d8613113963
Ref: library/wsgiref wsgiref handlers IISCGIHandler13114631
Ref: 3d8813114631
Ref: library/wsgiref wsgiref handlers BaseCGIHandler13116116
Ref: 3d8713116116
Ref: library/wsgiref wsgiref handlers SimpleHandler13116984
Ref: 3d8913116984
Ref: library/wsgiref wsgiref handlers BaseHandler13117934
Ref: 1c8a13117934
Ref: library/wsgiref wsgiref handlers BaseHandler run13118294
Ref: 3d8f13118294
Ref: library/wsgiref wsgiref handlers BaseHandler _write13118634
Ref: 3d8d13118634
Ref: library/wsgiref wsgiref handlers BaseHandler _flush13118981
Ref: 3d8e13118981
Ref: library/wsgiref wsgiref handlers BaseHandler get_stdin13119191
Ref: 3d8a13119191
Ref: library/wsgiref wsgiref handlers BaseHandler get_stderr13119395
Ref: 3d8b13119395
Ref: library/wsgiref wsgiref handlers BaseHandler add_cgi_vars13119601
Ref: 3d8c13119601
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_multithread13120154
Ref: 3d9213120154
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_multiprocess13120444
Ref: 3d9313120444
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_run_once13120736
Ref: 3d9413120736
Ref: library/wsgiref wsgiref handlers BaseHandler os_environ13120978
Ref: 3d9513120978
Ref: library/wsgiref wsgiref handlers BaseHandler server_software13121483
Ref: 3d9613121483
Ref: library/wsgiref wsgiref handlers BaseHandler get_scheme13122102
Ref: 3d9813122102
Ref: library/wsgiref wsgiref handlers BaseHandler setup_environ13122464
Ref: 3d9913122464
Ref: library/wsgiref wsgiref handlers BaseHandler log_exception13123125
Ref: 3d9b13123125
Ref: library/wsgiref wsgiref handlers BaseHandler traceback_limit13123626
Ref: 3d9c13123626
Ref: library/wsgiref wsgiref handlers BaseHandler error_output13123847
Ref: 3d9d13123847
Ref: library/wsgiref wsgiref handlers BaseHandler error_status13125030
Ref: 3d9e13125030
Ref: library/wsgiref wsgiref handlers BaseHandler error_headers13125234
Ref: 3d9f13125234
Ref: library/wsgiref wsgiref handlers BaseHandler error_body13125525
Ref: 3da013125525
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_file_wrapper13125870
Ref: 3d9a13125870
Ref: library/wsgiref wsgiref handlers BaseHandler sendfile13126142
Ref: 3da113126142
Ref: library/wsgiref wsgiref handlers BaseHandler origin_server13126719
Ref: 3d9713126719
Ref: library/wsgiref wsgiref handlers BaseHandler http_version13127245
Ref: 3da213127245
Ref: library/wsgiref wsgiref handlers read_environ13127466
Ref: 13b513127466
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-113128387
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-213128429
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-313128471
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-413128513
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-513128555
Node: wsgiref types – WSGI types for static type checking13128597
Ref: library/wsgiref module-wsgiref types13128832
Ref: 12213128832
Ref: library/wsgiref wsgiref-types-wsgi-types-for-static-type-checking13128832
Ref: 3da313128832
Ref: library/wsgiref wsgiref types StartResponse13129084
Ref: 3d7a13129084
Ref: library/wsgiref wsgiref types WSGIEnvironment13129223
Ref: 3d6d13129223
Ref: library/wsgiref wsgiref types WSGIApplication13129325
Ref: 3da413129325
Ref: library/wsgiref wsgiref types InputStream13129425
Ref: 3d9013129425
Ref: library/wsgiref wsgiref types ErrorStream13129535
Ref: 3d9113129535
Ref: library/wsgiref wsgiref types FileWrapper13129645
Ref: 3d7413129645
Ref: wsgiref types – WSGI types for static type checking-Footnote-113129886
Ref: wsgiref types – WSGI types for static type checking-Footnote-213129928
Ref: wsgiref types – WSGI types for static type checking-Footnote-313129998
Ref: wsgiref types – WSGI types for static type checking-Footnote-413130040
Ref: wsgiref types – WSGI types for static type checking-Footnote-513130106
Ref: wsgiref types – WSGI types for static type checking-Footnote-613130172
Node: Exemplos<26>13130256
Ref: library/wsgiref examples13130429
Ref: 3da513130429
Node: urllib — Módulos de manipulação de URL13133261
Ref: library/urllib doc13133510
Ref: 3da613133510
Ref: library/urllib module-urllib13133510
Ref: 10e13133510
Ref: library/urllib no-color13133510
Ref: 3da713133510
Ref: library/urllib urllib-url-handling-modules13133510
Ref: 3da813133510
Ref: urllib — Módulos de manipulação de URL-Footnote-113134119
Node: urllib request — Biblioteca extensível para abrir URLs13134183
Ref: library/urllib request doc13134421
Ref: 3da913134421
Ref: library/urllib request module-urllib request13134421
Ref: 11113134421
Ref: library/urllib request no-color13134421
Ref: 3daa13134421
Ref: library/urllib request urllib-request-extensible-library-for-opening-urls13134421
Ref: 3dab13134421
Ref: library/urllib request urllib request urlopen13135611
Ref: 30513135611
Ref: library/urllib request urllib request install_opener13139383
Ref: 3db113139383
Ref: library/urllib request urllib request build_opener13139867
Ref: 30713139867
Ref: library/urllib request urllib request pathname2url13140985
Ref: 2be13140985
Ref: library/urllib request urllib request url2pathname13142099
Ref: 2bc13142099
Ref: library/urllib request urllib request getproxies13143984
Ref: 3dac13143984
Ref: library/urllib request urllib request Request13145135
Ref: 11ce13145135
Ref: library/urllib request urllib request OpenerDirector13149649
Ref: 3daf13149649
Ref: library/urllib request urllib request BaseHandler13149869
Ref: 3db213149869
Ref: library/urllib request urllib request HTTPDefaultErrorHandler13150030
Ref: 3db313150030
Ref: library/urllib request urllib request HTTPRedirectHandler13150224
Ref: 3db413150224
Ref: library/urllib request urllib request HTTPCookieProcessor13150323
Ref: 3db913150323
Ref: library/urllib request urllib request ProxyHandler13150430
Ref: 1c6c13150430
Ref: library/urllib request urllib request HTTPPasswordMgr13151532
Ref: 3dba13151532
Ref: library/urllib request urllib request HTTPPasswordMgrWithDefaultRealm13151650
Ref: 3dbb13151650
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth13151892
Ref: 108a13151892
Ref: library/urllib request urllib request AbstractBasicAuthHandler13152286
Ref: 1b5e13152286
Ref: library/urllib request urllib request HTTPBasicAuthHandler13153636
Ref: 3dbe13153636
Ref: library/urllib request urllib request ProxyBasicAuthHandler13154101
Ref: 3dbf13154101
Ref: library/urllib request urllib request AbstractDigestAuthHandler13154442
Ref: 1c2213154442
Ref: library/urllib request urllib request HTTPDigestAuthHandler13154960
Ref: 3dc013154960
Ref: library/urllib request urllib request ProxyDigestAuthHandler13155824
Ref: 3dc113155824
Ref: library/urllib request urllib request HTTPHandler13156166
Ref: eec13156166
Ref: library/urllib request urllib request HTTPSHandler13156252
Ref: 141f13156252
Ref: library/urllib request urllib request FileHandler13156584
Ref: 3db613156584
Ref: library/urllib request urllib request DataHandler13156652
Ref: 11cd13156652
Ref: library/urllib request urllib request FTPHandler13156752
Ref: 3db513156752
Ref: library/urllib request urllib request CacheFTPHandler13156815
Ref: 19d513156815
Ref: library/urllib request urllib request UnknownHandler13156945
Ref: 3db013156945
Ref: library/urllib request urllib request HTTPErrorProcessor13157036
Ref: 3db713157036
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-113157917
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-213157991
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-313158042
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-413158111
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-513158170
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-613158229
Node: Objeto Request13158288
Ref: library/urllib request id113158427
Ref: 3dc213158427
Ref: library/urllib request request-objects13158427
Ref: 3dc313158427
Ref: library/urllib request urllib request Request full_url13158697
Ref: 11d013158697
Ref: library/urllib request urllib request Request type13158993
Ref: 3dc413158993
Ref: library/urllib request urllib request Request host13159043
Ref: 3dc513159043
Ref: library/urllib request urllib request Request origin_req_host13159169
Ref: 3dc613159169
Ref: library/urllib request urllib request Request selector13159263
Ref: 3dc713159263
Ref: library/urllib request urllib request Request data13159427
Ref: 11d113159427
Ref: library/urllib request urllib request Request unverifiable13159691
Ref: 3dc813159691
Ref: library/urllib request urllib request Request method13159820
Ref: 11cf13159820
Ref: library/urllib request urllib request Request get_method13160537
Ref: 136513160537
Ref: library/urllib request urllib request Request add_header13160964
Ref: 3db813160964
Ref: library/urllib request urllib request Request add_unredirected_header13161645
Ref: 3dc913161645
Ref: library/urllib request urllib request Request has_header13161772
Ref: 3dca13161772
Ref: library/urllib request urllib request Request remove_header13161914
Ref: 11d313161914
Ref: library/urllib request urllib request Request get_full_url13162136
Ref: 3dcb13162136
Ref: library/urllib request urllib request Request set_proxy13162296
Ref: 3dcc13162296
Ref: library/urllib request urllib request Request get_header13162550
Ref: 3dcd13162550
Ref: library/urllib request urllib request Request header_items13162717
Ref: 3dce13162717
Ref: Objeto Request-Footnote-113163078
Node: OpenerDirector Objects13163137
Ref: library/urllib request opener-director-objects13163304
Ref: 3dcf13163304
Ref: library/urllib request openerdirector-objects13163304
Ref: 3dd013163304
Ref: library/urllib request urllib request OpenerDirector add_handler13163436
Ref: 3dd113163436
Ref: library/urllib request urllib request OpenerDirector open13165023
Ref: 11d213165023
Ref: library/urllib request urllib request OpenerDirector error13165707
Ref: 3dd613165707
Node: BaseHandler Objects13167502
Ref: library/urllib request base-handler-objects13167682
Ref: 3dd913167682
Ref: library/urllib request basehandler-objects13167682
Ref: 3dda13167682
Ref: library/urllib request urllib request BaseHandler add_parent13167922
Ref: 3ddb13167922
Ref: library/urllib request urllib request BaseHandler close13168002
Ref: 3ddc13168002
Ref: library/urllib request urllib request BaseHandler parent13168379
Ref: 3ddd13168379
Ref: library/urllib request urllib request BaseHandler default_open13168532
Ref: 3dd713168532
Ref: library/urllib request protocol-open13169226
Ref: 3dd213169226
Ref: library/urllib request urllib request BaseHandler unknown_open13169598
Ref: 3dd813169598
Ref: library/urllib request urllib request BaseHandler http_error_default13170011
Ref: 3dde13170011
Ref: library/urllib request http-error-nnn13170898
Ref: 3dd313170898
Ref: library/urllib request protocol-request13171403
Ref: 3dd413171403
Ref: library/urllib request protocol-response13171820
Ref: 3dd513171820
Node: HTTPRedirectHandler Objects13172412
Ref: library/urllib request http-redirect-handler13172597
Ref: 3ddf13172597
Ref: library/urllib request httpredirecthandler-objects13172597
Ref: 3de013172597
Ref: library/urllib request urllib request HTTPRedirectHandler redirect_request13173103
Ref: 3de113173103
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30113174191
Ref: 3de213174191
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30213174463
Ref: 3de313174463
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30313174643
Ref: 3de413174643
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30713174827
Ref: 3de513174827
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30813175102
Ref: 3de613175102
Ref: HTTPRedirectHandler Objects-Footnote-113175447
Ref: HTTPRedirectHandler Objects-Footnote-213175506
Node: HTTPCookieProcessor Objects13175565
Ref: library/urllib request http-cookie-processor13175751
Ref: 3de713175751
Ref: library/urllib request httpcookieprocessor-objects13175751
Ref: 3de813175751
Ref: library/urllib request urllib request HTTPCookieProcessor cookiejar13175890
Ref: 3de913175890
Node: ProxyHandler Objects13176017
Ref: library/urllib request proxy-handler13176199
Ref: 3deb13176199
Ref: library/urllib request proxyhandler-objects13176199
Ref: 3dec13176199
Node: HTTPPasswordMgr Objects13176678
Ref: library/urllib request http-password-mgr13176869
Ref: 3dbc13176869
Ref: library/urllib request httppasswordmgr-objects13176869
Ref: 3ded13176869
Ref: library/urllib request urllib request HTTPPasswordMgr add_password13177055
Ref: 3dee13177055
Ref: library/urllib request urllib request HTTPPasswordMgr find_user_password13177403
Ref: 1ae313177403
Node: HTTPPasswordMgrWithPriorAuth Objects13177778
Ref: library/urllib request http-password-mgr-with-prior-auth13177981
Ref: 3dbd13177981
Ref: library/urllib request httppasswordmgrwithpriorauth-objects13177981
Ref: 3def13177981
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth add_password13178235
Ref: 3df013178235
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth find_user_password13178650
Ref: 3df113178650
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth update_authenticated13178810
Ref: 3df213178810
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth is_authenticated13179007
Ref: 1ae413179007
Node: AbstractBasicAuthHandler Objects13179184
Ref: library/urllib request abstract-basic-auth-handler13179392
Ref: 3df313179392
Ref: library/urllib request abstractbasicauthhandler-objects13179392
Ref: 3df413179392
Ref: library/urllib request urllib request AbstractBasicAuthHandler http_error_auth_reqed13179477
Ref: 3df513179477
Node: HTTPBasicAuthHandler Objects13180299
Ref: library/urllib request http-basic-auth-handler13180500
Ref: 3df613180500
Ref: library/urllib request httpbasicauthhandler-objects13180500
Ref: 3df713180500
Ref: library/urllib request urllib request HTTPBasicAuthHandler http_error_40113180579
Ref: 3df813180579
Node: ProxyBasicAuthHandler Objects13180737
Ref: library/urllib request proxy-basic-auth-handler13180939
Ref: 3df913180939
Ref: library/urllib request proxybasicauthhandler-objects13180939
Ref: 3dfa13180939
Ref: library/urllib request urllib request ProxyBasicAuthHandler http_error_40713181020
Ref: 3dfb13181020
Node: AbstractDigestAuthHandler Objects13181179
Ref: library/urllib request abstract-digest-auth-handler13181382
Ref: 3dfc13181382
Ref: library/urllib request abstractdigestauthhandler-objects13181382
Ref: 3dfd13181382
Ref: library/urllib request urllib request AbstractDigestAuthHandler http_error_auth_reqed13181471
Ref: 3dfe13181471
Node: HTTPDigestAuthHandler Objects13181850
Ref: library/urllib request http-digest-auth-handler13182054
Ref: 3dff13182054
Ref: library/urllib request httpdigestauthhandler-objects13182054
Ref: 3e0013182054
Ref: library/urllib request urllib request HTTPDigestAuthHandler http_error_40113182135
Ref: 3e0113182135
Node: ProxyDigestAuthHandler Objects13182294
Ref: library/urllib request proxy-digest-auth-handler13182484
Ref: 3e0213182484
Ref: library/urllib request proxydigestauthhandler-objects13182484
Ref: 3e0313182484
Ref: library/urllib request urllib request ProxyDigestAuthHandler http_error_40713182567
Ref: 3e0413182567
Node: HTTPHandler Objects13182727
Ref: library/urllib request http-handler-objects13182908
Ref: 3e0513182908
Ref: library/urllib request httphandler-objects13182908
Ref: 3e0613182908
Ref: library/urllib request urllib request HTTPHandler http_open13182969
Ref: 3e0713182969
Node: Objetos HTTPSHandler13183106
Ref: library/urllib request https-handler-objects13183276
Ref: 3e0813183276
Ref: library/urllib request httpshandler-objects13183276
Ref: 3e0913183276
Ref: library/urllib request urllib request HTTPSHandler https_open13183339
Ref: 3e0a13183339
Node: FileHandler Objects13183479
Ref: library/urllib request file-handler-objects13183649
Ref: 3e0b13183649
Ref: library/urllib request filehandler-objects13183649
Ref: 3e0c13183649
Ref: library/urllib request urllib request FileHandler file_open13183710
Ref: 3e0d13183710
Node: DataHandler Objects13184012
Ref: library/urllib request data-handler-objects13184180
Ref: 3e0e13184180
Ref: library/urllib request datahandler-objects13184180
Ref: 3e0f13184180
Ref: library/urllib request urllib request DataHandler data_open13184241
Ref: 3e1013184241
Ref: DataHandler Objects-Footnote-113184800
Node: FTPHandler Objects13184859
Ref: library/urllib request ftp-handler-objects13185031
Ref: 3e1113185031
Ref: library/urllib request ftphandler-objects13185031
Ref: 3e1213185031
Ref: library/urllib request urllib request FTPHandler ftp_open13185090
Ref: 3e1313185090
Node: CacheFTPHandler Objects13185239
Ref: library/urllib request cacheftp-handler-objects13185414
Ref: 3e1413185414
Ref: library/urllib request cacheftphandler-objects13185414
Ref: 3e1513185414
Ref: library/urllib request urllib request CacheFTPHandler setTimeout13185596
Ref: 3e1613185596
Ref: library/urllib request urllib request CacheFTPHandler setMaxConns13185690
Ref: 3e1713185690
Node: Objetos UnknownHandler13185791
Ref: library/urllib request unknown-handler-objects13185974
Ref: 3e1813185974
Ref: library/urllib request unknownhandler-objects13185974
Ref: 3e1913185974
Ref: library/urllib request urllib request UnknownHandler unknown_open13186041
Ref: 3e1a13186041
Node: HTTPErrorProcessor Objects13186132
Ref: library/urllib request http-error-processor-objects13186304
Ref: 3e1b13186304
Ref: library/urllib request httperrorprocessor-objects13186304
Ref: 3e1c13186304
Ref: library/urllib request urllib request HTTPErrorProcessor http_response13186379
Ref: 3e1d13186379
Ref: library/urllib request urllib request HTTPErrorProcessor https_response13186851
Ref: 3e1e13186851
Node: Exemplos<27>13187015
Ref: library/urllib request examples13187181
Ref: 3e1f13187181
Ref: library/urllib request urllib-request-examples13187181
Ref: 3e2013187181
Ref: library/urllib request urllib-examples13193080
Ref: 3e2213193080
Node: Legacy interface13194627
Ref: library/urllib request legacy-interface13194794
Ref: 3e2313194794
Ref: library/urllib request urllib request urlretrieve13195025
Ref: 30613195025
Ref: library/urllib request urllib request urlcleanup13197694
Ref: 1c7313197694
Node: urllib request Restrictions13197853
Ref: library/urllib request urllib-request-restrictions13197999
Ref: 3e2513197999
Node: urllib response — Response classes used by urllib13200470
Ref: library/urllib request module-urllib response13200711
Ref: 11213200711
Ref: library/urllib request urllib-response-response-classes-used-by-urllib13200711
Ref: 3e2613200711
Ref: library/urllib request urllib response addinfourl13201175
Ref: 3dad13201175
Ref: library/urllib request urllib response addinfourl url13201215
Ref: 184013201215
Ref: library/urllib request urllib response addinfourl headers13201346
Ref: 3e2713201346
Ref: library/urllib request urllib response addinfourl status13201484
Ref: 3e2813201484
Ref: library/urllib request urllib response addinfourl geturl13201592
Ref: 3e2913201592
Ref: library/urllib request urllib response addinfourl info13201717
Ref: 3e2a13201717
Ref: library/urllib request urllib response addinfourl code13201844
Ref: 3e2b13201844
Ref: library/urllib request urllib response addinfourl getcode13201968
Ref: 3e2c13201968
Node: urllib parse — Analisa URLs para componentes13202097
Ref: library/urllib parse doc13202348
Ref: 3e2d13202348
Ref: library/urllib parse module-urllib parse13202348
Ref: 11013202348
Ref: library/urllib parse no-color13202348
Ref: 3e2e13202348
Ref: library/urllib parse urllib-parse-parse-urls-into-components13202348
Ref: 3e2f13202348
Ref: urllib parse — Analisa URLs para componentes-Footnote-113204490
Ref: urllib parse — Analisa URLs para componentes-Footnote-213204562
Ref: urllib parse — Analisa URLs para componentes-Footnote-313204621
Node: Análise de URL13204680
Ref: library/urllib parse url-parsing13204814
Ref: 3e3013204814
Ref: library/urllib parse urllib parse urlparse13205027
Ref: 35f13205027
Ref: library/urllib parse urllib parse parse_qs13213395
Ref: 31d13213395
Ref: library/urllib parse urllib parse parse_qsl13216030
Ref: 31c13216030
Ref: library/urllib parse urllib parse urlunparse13218293
Ref: 189113218293
Ref: library/urllib parse urllib parse urlsplit13218756
Ref: f2e13218756
Ref: library/urllib parse urllib parse urlunsplit13223672
Ref: 189013223672
Ref: library/urllib parse urllib parse urljoin13224172
Ref: 108c13224172
Ref: library/urllib parse urllib parse urldefrag13225936
Ref: 144313225936
Ref: library/urllib parse urllib parse unwrap13227384
Ref: 3e3313227384
Ref: Análise de URL-Footnote-113227772
Ref: Análise de URL-Footnote-213227831
Ref: Análise de URL-Footnote-313227890
Ref: Análise de URL-Footnote-413227949
Ref: Análise de URL-Footnote-513228011
Node: Segurança ao analisar URLs13228070
Ref: library/urllib parse id113228250
Ref: 3e3413228250
Ref: library/urllib parse url-parsing-security13228250
Ref: 3e3213228250
Ref: Segurança ao analisar URLs-Footnote-113229941
Ref: Segurança ao analisar URLs-Footnote-213230003
Node: Analisando bytes codificados em ASCII13230062
Ref: library/urllib parse id213230251
Ref: 3e3513230251
Ref: library/urllib parse parsing-ascii-encoded-bytes13230251
Ref: 144513230251
Node: Structured Parse Results13232593
Ref: library/urllib parse structured-parse-results13232766
Ref: 3e3613232766
Ref: library/urllib parse urlparse-result-object13232766
Ref: 3e3113232766
Ref: library/urllib parse urllib parse urllib parse SplitResult geturl13233183
Ref: 3e3713233183
Ref: library/urllib parse urllib parse DefragResult13234308
Ref: 3e3813234308
Ref: library/urllib parse urllib parse ParseResult13234575
Ref: 3e3a13234575
Ref: library/urllib parse urllib parse SplitResult13234847
Ref: 3e3c13234847
Ref: library/urllib parse urllib parse DefragResultBytes13235253
Ref: 3e3913235253
Ref: library/urllib parse urllib parse ParseResultBytes13235522
Ref: 3e3b13235522
Ref: library/urllib parse urllib parse SplitResultBytes13235829
Ref: 3e3d13235829
Node: URL Quoting13236128
Ref: library/urllib parse url-quoting13236255
Ref: 3e3e13236255
Ref: library/urllib parse urllib parse quote13236658
Ref: d9013236658
Ref: library/urllib parse urllib parse quote_plus13238034
Ref: 144413238034
Ref: library/urllib parse urllib parse quote_from_bytes13238527
Ref: 1a6d13238527
Ref: library/urllib parse urllib parse unquote13238820
Ref: 1a2e13238820
Ref: library/urllib parse urllib parse unquote_plus13239602
Ref: 3e3f13239602
Ref: library/urllib parse urllib parse unquote_to_bytes13239942
Ref: 1a2f13239942
Ref: library/urllib parse urllib parse urlencode13240375
Ref: 108b13240375
Ref: URL Quoting-Footnote-113244441
Ref: URL Quoting-Footnote-213244500
Ref: URL Quoting-Footnote-313244559
Ref: URL Quoting-Footnote-413244596
Ref: URL Quoting-Footnote-513244655
Ref: URL Quoting-Footnote-613244714
Ref: URL Quoting-Footnote-713244773
Ref: URL Quoting-Footnote-813244832
Ref: URL Quoting-Footnote-913244891
Node: urllib error — Classes de exceção levantadas por urllib request13244950
Ref: library/urllib error doc13245208
Ref: 3e4013245208
Ref: library/urllib error module-urllib error13245208
Ref: 10f13245208
Ref: library/urllib error no-color13245208
Ref: 3e4113245208
Ref: library/urllib error urllib-error-exception-classes-raised-by-urllib-request13245208
Ref: 3e4213245208
Ref: library/urllib error urllib error URLError13245740
Ref: 2bd13245740
Ref: library/urllib error urllib error URLError reason13245932
Ref: 3e4313245932
Ref: library/urllib error urllib error HTTPError13246226
Ref: 11d413246226
Ref: library/urllib error urllib error HTTPError url13246636
Ref: 3e4413246636
Ref: library/urllib error urllib error HTTPError code13246754
Ref: 3e4513246754
Ref: library/urllib error urllib error HTTPError reason13247043
Ref: 3e4713247043
Ref: library/urllib error urllib error HTTPError headers13247183
Ref: 11d513247183
Ref: library/urllib error urllib error HTTPError fp13247410
Ref: 3e4813247410
Ref: library/urllib error urllib error ContentTooShortError13247527
Ref: 3e2413247527
Ref: library/urllib error urllib error ContentTooShortError content13247804
Ref: 3e4913247804
Ref: urllib error — Classes de exceção levantadas por urllib request-Footnote-113247925
Ref: urllib error — Classes de exceção levantadas por urllib request-Footnote-213247997
Node: urllib robotparser — Analisador sintático de robots txt13248056
Ref: library/urllib robotparser doc13248289
Ref: 3e4a13248289
Ref: library/urllib robotparser module-urllib robotparser13248289
Ref: 11313248289
Ref: library/urllib robotparser no-color13248289
Ref: 3e4b13248289
Ref: library/urllib robotparser urllib-robotparser-parser-for-robots-txt13248289
Ref: 3e4c13248289
Ref: library/urllib robotparser urllib robotparser RobotFileParser13248876
Ref: eee13248876
Ref: library/urllib robotparser urllib robotparser RobotFileParser set_url13249057
Ref: 3e4d13249057
Ref: library/urllib robotparser urllib robotparser RobotFileParser read13249155
Ref: 182d13249155
Ref: library/urllib robotparser urllib robotparser RobotFileParser parse13249273
Ref: 1d3813249273
Ref: library/urllib robotparser urllib robotparser RobotFileParser can_fetch13249348
Ref: 3e4e13249348
Ref: library/urllib robotparser urllib robotparser RobotFileParser mtime13249570
Ref: 3e4f13249570
Ref: library/urllib robotparser urllib robotparser RobotFileParser modified13249844
Ref: 3e5013249844
Ref: library/urllib robotparser urllib robotparser RobotFileParser crawl_delay13249992
Ref: 3e5113249992
Ref: library/urllib robotparser urllib robotparser RobotFileParser request_rate13250408
Ref: 3e5213250408
Ref: library/urllib robotparser urllib robotparser RobotFileParser site_maps13250881
Ref: 1cd813250881
Ref: urllib robotparser — Analisador sintático de robots txt-Footnote-113251807
Node: http — HTTP modules13251886
Ref: library/http doc13252088
Ref: 3e5313252088
Ref: library/http http-http-modules13252088
Ref: 3e5413252088
Ref: library/http module-http13252088
Ref: 7213252088
Ref: library/http no-color13252088
Ref: 3e5513252088
Ref: library/http http HTTPStatus13252954
Ref: af213252954
Ref: http — HTTP modules-Footnote-113253745
Node: códigos de status HTTP13253818
Ref: library/http http-status-codes13253933
Ref: 3e5613253933
Ref: library/http id113253933
Ref: 3e5713253933
Ref: códigos de status HTTP-Footnote-113268393
Ref: códigos de status HTTP-Footnote-213268477
Ref: códigos de status HTTP-Footnote-313268536
Ref: códigos de status HTTP-Footnote-413268595
Ref: códigos de status HTTP-Footnote-513268654
Ref: códigos de status HTTP-Footnote-613268713
Ref: códigos de status HTTP-Footnote-713268772
Ref: códigos de status HTTP-Footnote-813268831
Ref: códigos de status HTTP-Footnote-913268890
Ref: códigos de status HTTP-Footnote-1013268949
Ref: códigos de status HTTP-Footnote-1113269009
Ref: códigos de status HTTP-Footnote-1213269069
Ref: códigos de status HTTP-Footnote-1313269129
Ref: códigos de status HTTP-Footnote-1413269189
Ref: códigos de status HTTP-Footnote-1513269249
Ref: códigos de status HTTP-Footnote-1613269309
Ref: códigos de status HTTP-Footnote-1713269369
Ref: códigos de status HTTP-Footnote-1813269429
Ref: códigos de status HTTP-Footnote-1913269489
Ref: códigos de status HTTP-Footnote-2013269549
Ref: códigos de status HTTP-Footnote-2113269609
Ref: códigos de status HTTP-Footnote-2213269669
Ref: códigos de status HTTP-Footnote-2313269729
Ref: códigos de status HTTP-Footnote-2413269789
Ref: códigos de status HTTP-Footnote-2513269849
Ref: códigos de status HTTP-Footnote-2613269909
Ref: códigos de status HTTP-Footnote-2713269969
Ref: códigos de status HTTP-Footnote-2813270029
Ref: códigos de status HTTP-Footnote-2913270089
Ref: códigos de status HTTP-Footnote-3013270149
Ref: códigos de status HTTP-Footnote-3113270209
Ref: códigos de status HTTP-Footnote-3213270269
Ref: códigos de status HTTP-Footnote-3313270329
Ref: códigos de status HTTP-Footnote-3413270389
Ref: códigos de status HTTP-Footnote-3513270449
Ref: códigos de status HTTP-Footnote-3613270509
Ref: códigos de status HTTP-Footnote-3713270569
Ref: códigos de status HTTP-Footnote-3813270629
Ref: códigos de status HTTP-Footnote-3913270689
Ref: códigos de status HTTP-Footnote-4013270749
Ref: códigos de status HTTP-Footnote-4113270809
Ref: códigos de status HTTP-Footnote-4213270869
Ref: códigos de status HTTP-Footnote-4313270929
Ref: códigos de status HTTP-Footnote-4413270989
Ref: códigos de status HTTP-Footnote-4513271049
Ref: códigos de status HTTP-Footnote-4613271109
Ref: códigos de status HTTP-Footnote-4713271169
Ref: códigos de status HTTP-Footnote-4813271229
Ref: códigos de status HTTP-Footnote-4913271289
Ref: códigos de status HTTP-Footnote-5013271349
Ref: códigos de status HTTP-Footnote-5113271409
Ref: códigos de status HTTP-Footnote-5213271469
Ref: códigos de status HTTP-Footnote-5313271529
Ref: códigos de status HTTP-Footnote-5413271589
Ref: códigos de status HTTP-Footnote-5513271649
Ref: códigos de status HTTP-Footnote-5613271709
Ref: códigos de status HTTP-Footnote-5713271769
Ref: códigos de status HTTP-Footnote-5813271829
Ref: códigos de status HTTP-Footnote-5913271889
Ref: códigos de status HTTP-Footnote-6013271949
Ref: códigos de status HTTP-Footnote-6113272009
Ref: códigos de status HTTP-Footnote-6213272069
Ref: códigos de status HTTP-Footnote-6313272129
Node: Categorias de HTTP status13272189
Ref: library/http http-status-category13272326
Ref: 3e5813272326
Ref: library/http http HTTPMethod13273952
Ref: 3e5913273952
Ref: Categorias de HTTP status-Footnote-113274784
Ref: Categorias de HTTP status-Footnote-213274843
Ref: Categorias de HTTP status-Footnote-313274902
Ref: Categorias de HTTP status-Footnote-413274961
Ref: Categorias de HTTP status-Footnote-513275020
Node: Métodos HTTP13275079
Ref: library/http http-methods13275184
Ref: 3e5a13275184
Ref: library/http id213275184
Ref: 3e5b13275184
Ref: Métodos HTTP-Footnote-113277566
Ref: Métodos HTTP-Footnote-213277639
Ref: Métodos HTTP-Footnote-313277698
Ref: Métodos HTTP-Footnote-413277757
Ref: Métodos HTTP-Footnote-513277816
Ref: Métodos HTTP-Footnote-613277875
Ref: Métodos HTTP-Footnote-713277934
Ref: Métodos HTTP-Footnote-813277993
Ref: Métodos HTTP-Footnote-913278052
Ref: Métodos HTTP-Footnote-1013278111
Node: http client — HTTP protocol client13278171
Ref: library/http client doc13278345
Ref: 3e5c13278345
Ref: library/http client http-client-http-protocol-client13278345
Ref: 3e5d13278345
Ref: library/http client module-http client13278345
Ref: 7313278345
Ref: library/http client no-color13278345
Ref: 3e5e13278345
Ref: library/http client http client HTTPConnection13279228
Ref: d2913279228
Ref: library/http client http client HTTPSConnection13280826
Ref: d2a13280826
Ref: library/http client http client HTTPResponse13282594
Ref: 12ca13282594
Ref: library/http client http client parse_headers13283011
Ref: 1cdf13283011
Ref: library/http client http client HTTPException13284042
Ref: 3e6213284042
Ref: library/http client http client NotConnected13284189
Ref: 3e6313284189
Ref: library/http client http client InvalidURL13284280
Ref: 3e6413284280
Ref: library/http client http client UnknownProtocol13284445
Ref: 3e6513284445
Ref: library/http client http client UnknownTransferEncoding13284539
Ref: 3e6613284539
Ref: library/http client http client UnimplementedFileMode13284641
Ref: 3e6713284641
Ref: library/http client http client IncompleteRead13284741
Ref: 3e6813284741
Ref: library/http client http client ImproperConnectionState13284834
Ref: 3e6913284834
Ref: library/http client http client CannotSendRequest13284936
Ref: 3e6a13284936
Ref: library/http client http client CannotSendHeader13285042
Ref: 3e6b13285042
Ref: library/http client http client ResponseNotReady13285147
Ref: 3e6c13285147
Ref: library/http client http client BadStatusLine13285252
Ref: 3e6d13285252
Ref: library/http client http client LineTooLong13285437
Ref: 3e6e13285437
Ref: library/http client http client RemoteDisconnected13285622
Ref: fff13285622
Ref: library/http client http client HTTP_PORT13286125
Ref: 3e6f13286125
Ref: library/http client http client HTTPS_PORT13286221
Ref: 3e7013286221
Ref: library/http client http client responses13286320
Ref: 3e7113286320
Ref: http client — HTTP protocol client-Footnote-113286824
Ref: http client — HTTP protocol client-Footnote-213286895
Ref: http client — HTTP protocol client-Footnote-313286946
Node: Objetos de HTTPConnection13287005
Ref: library/http client httpconnection-objects13287132
Ref: 3e7213287132
Ref: library/http client id113287132
Ref: 3e7313287132
Ref: library/http client http client HTTPConnection request13287276
Ref: e9b13287276
Ref: library/http client http client HTTPConnection getresponse13290946
Ref: ffe13290946
Ref: library/http client http client HTTPConnection set_debuglevel13291469
Ref: 3e7413291469
Ref: library/http client http client HTTPConnection set_tunnel13291879
Ref: 142413291879
Ref: library/http client http client HTTPConnection get_proxy_response_headers13293564
Ref: 19b213293564
Ref: library/http client http client HTTPConnection connect13293851
Ref: 3e7513293851
Ref: library/http client http client HTTPConnection close13294217
Ref: 3e7613294217
Ref: library/http client http client HTTPConnection blocksize13294297
Ref: 3e7713294297
Ref: library/http client http client HTTPConnection putrequest13294593
Ref: 3e7813294593
Ref: library/http client http client HTTPConnection putheader13295143
Ref: 3e7913295143
Ref: library/http client http client HTTPConnection endheaders13295479
Ref: e9c13295479
Ref: library/http client http client HTTPConnection send13296852
Ref: 3e7a13296852
Ref: Objetos de HTTPConnection-Footnote-113297231
Ref: Objetos de HTTPConnection-Footnote-213297304
Ref: Objetos de HTTPConnection-Footnote-313297377
Ref: Objetos de HTTPConnection-Footnote-413297450
Ref: Objetos de HTTPConnection-Footnote-513297518
Ref: Objetos de HTTPConnection-Footnote-613297576
Node: Objetos HTTPResponse13297635
Ref: library/http client httpresponse-objects13297783
Ref: 3e7b13297783
Ref: library/http client id213297783
Ref: 3e7c13297783
Ref: library/http client http client HTTPResponse read13298199
Ref: 181013298199
Ref: library/http client http client HTTPResponse readinto13298313
Ref: 12cb13298313
Ref: library/http client http client HTTPResponse getheader13298508
Ref: 3e7d13298508
Ref: library/http client http client HTTPResponse getheaders13298896
Ref: 3e7e13298896
Ref: library/http client http client HTTPResponse fileno13298984
Ref: 3e7f13298984
Ref: library/http client http client HTTPResponse msg13299077
Ref: 3e6013299077
Ref: library/http client http client HTTPResponse version13299295
Ref: 3e8013299295
Ref: library/http client http client HTTPResponse url13299415
Ref: 3e8113299415
Ref: library/http client http client HTTPResponse headers13299544
Ref: 3e8213299544
Ref: library/http client http client HTTPResponse status13299682
Ref: 3e8313299682
Ref: library/http client http client HTTPResponse reason13299755
Ref: 3dae13299755
Ref: library/http client http client HTTPResponse debuglevel13299830
Ref: 3e8413299830
Ref: library/http client http client HTTPResponse closed13300024
Ref: 3e8513300024
Ref: library/http client http client HTTPResponse geturl13300104
Ref: 3e8613300104
Ref: library/http client http client HTTPResponse info13300227
Ref: 3e8713300227
Ref: library/http client http client HTTPResponse getcode13300352
Ref: 3e8813300352
Node: Exemplos<28>13300479
Ref: library/http client examples13300621
Ref: 3e8913300621
Node: HTTPMessage Objects13303509
Ref: library/http client httpmessage-objects13303622
Ref: 3e8a13303622
Ref: library/http client id313303622
Ref: 3e8b13303622
Ref: library/http client http client HTTPMessage13303683
Ref: 3e5f13303683
Node: ftplib — FTP protocol client13303905
Ref: library/ftplib doc13304094
Ref: 3e8c13304094
Ref: library/ftplib ftplib-ftp-protocol-client13304094
Ref: 3e8d13304094
Ref: library/ftplib module-ftplib13304094
Ref: 6213304094
Ref: library/ftplib no-color13304094
Ref: 3e8e13304094
Ref: ftplib — FTP protocol client-Footnote-113305964
Ref: ftplib — FTP protocol client-Footnote-213306030
Ref: ftplib — FTP protocol client-Footnote-313306088
Node: Referência<7>13306147
Ref: library/ftplib ftplib-reference13306228
Ref: 3e8f13306228
Ref: library/ftplib reference13306228
Ref: 3e9013306228
Node: FTP objects13306339
Ref: library/ftplib ftp-objects13306425
Ref: 3e9113306425
Ref: library/ftplib id113306425
Ref: 3e9213306425
Ref: library/ftplib ftplib FTP13306470
Ref: aec13306470
Ref: library/ftplib ftplib FTP set_debuglevel13309366
Ref: 3e9413309366
Ref: library/ftplib ftplib FTP connect13309924
Ref: 3e9313309924
Ref: library/ftplib ftplib FTP getwelcome13311327
Ref: 3e9513311327
Ref: library/ftplib ftplib FTP login13311584
Ref: 3e9613311584
Ref: library/ftplib ftplib FTP abort13312625
Ref: 3e9713312625
Ref: library/ftplib ftplib FTP sendcmd13312775
Ref: 3e9813312775
Ref: library/ftplib ftplib FTP voidcmd13313031
Ref: 3e9913313031
Ref: library/ftplib ftplib FTP retrbinary13313447
Ref: 3e9b13313447
Ref: library/ftplib ftplib FTP retrlines13314508
Ref: 3e9d13314508
Ref: library/ftplib ftplib FTP set_pasv13315246
Ref: 3e9e13315246
Ref: library/ftplib ftplib FTP storbinary13315409
Ref: 150513315409
Ref: library/ftplib ftplib FTP storlines13316586
Ref: 3e9f13316586
Ref: library/ftplib ftplib FTP transfercmd13317085
Ref: 3e9c13317085
Ref: library/ftplib ftplib FTP ntransfercmd13318330
Ref: 3ea013318330
Ref: library/ftplib ftplib FTP mlsd13318707
Ref: 12be13318707
Ref: library/ftplib ftplib FTP nlst13319468
Ref: 12bf13319468
Ref: library/ftplib ftplib FTP dir13319911
Ref: 12c013319911
Ref: library/ftplib ftplib FTP rename13320609
Ref: 3ea113320609
Ref: library/ftplib ftplib FTP delete13320715
Ref: 3ea213320715
Ref: library/ftplib ftplib FTP cwd13321000
Ref: 3ea413321000
Ref: library/ftplib ftplib FTP mkd13321086
Ref: 3ea513321086
Ref: library/ftplib ftplib FTP pwd13321169
Ref: 3ea613321169
Ref: library/ftplib ftplib FTP rmd13321266
Ref: 3ea713321266
Ref: library/ftplib ftplib FTP size13321362
Ref: 3ea813321362
Ref: library/ftplib ftplib FTP quit13321714
Ref: 3ea913321714
Ref: library/ftplib ftplib FTP close13322155
Ref: 3eaa13322155
Ref: FTP objects-Footnote-113322657
Ref: FTP objects-Footnote-213322715
Ref: FTP objects-Footnote-313322774
Ref: FTP objects-Footnote-413322832
Node: FTP_TLS objects13322891
Ref: library/ftplib ftp-tls-objects13323002
Ref: 3eab13323002
Ref: library/ftplib ftplib FTP_TLS13323055
Ref: aed13323055
Ref: library/ftplib ftplib FTP_TLS ssl_version13326775
Ref: 3ead13326775
Ref: library/ftplib ftplib FTP_TLS auth13326899
Ref: 3eae13326899
Ref: library/ftplib ftplib FTP_TLS ccc13327291
Ref: 12bd13327291
Ref: library/ftplib ftplib FTP_TLS prot_p13327556
Ref: 3eac13327556
Ref: library/ftplib ftplib FTP_TLS prot_c13327627
Ref: 3eaf13327627
Ref: FTP_TLS objects-Footnote-113327738
Ref: FTP_TLS objects-Footnote-213327797
Ref: FTP_TLS objects-Footnote-313327855
Node: Module variables13327914
Ref: library/ftplib module-variables13328005
Ref: 3eb013328005
Ref: library/ftplib ftplib error_reply13328060
Ref: 3e9a13328060
Ref: library/ftplib ftplib error_temp13328177
Ref: 3eb113328177
Ref: library/ftplib ftplib error_perm13328340
Ref: 3ea313328340
Ref: library/ftplib ftplib error_proto13328503
Ref: 3eb213328503
Ref: library/ftplib ftplib all_errors13328734
Ref: 3eb313328734
Node: poplib — Cliente de protocolo POP313329321
Ref: library/poplib doc13329507
Ref: 3eb413329507
Ref: library/poplib module-poplib13329507
Ref: b113329507
Ref: library/poplib no-color13329507
Ref: 3eb513329507
Ref: library/poplib poplib-pop3-protocol-client13329507
Ref: 3eb613329507
Ref: library/poplib poplib POP313330881
Ref: b1313330881
Ref: library/poplib poplib POP3_SSL13331863
Ref: b1413331863
Ref: library/poplib poplib error_proto13333531
Ref: 139813333531
Ref: poplib — Cliente de protocolo POP3-Footnote-113334190
Ref: poplib — Cliente de protocolo POP3-Footnote-213334256
Ref: poplib — Cliente de protocolo POP3-Footnote-313334315
Ref: poplib — Cliente de protocolo POP3-Footnote-413334374
Ref: poplib — Cliente de protocolo POP3-Footnote-513334433
Node: Objetos POP313334495
Ref: library/poplib id113334601
Ref: 3eb713334601
Ref: library/poplib pop3-objects13334601
Ref: 3eb813334601
Ref: library/poplib poplib POP3 set_debuglevel13334832
Ref: 3eb913334832
Ref: library/poplib poplib POP3 getwelcome13335298
Ref: 3eba13335298
Ref: library/poplib poplib POP3 capa13335390
Ref: 117213335390
Ref: library/poplib poplib POP3 user13335587
Ref: 3ebb13335587
Ref: library/poplib poplib POP3 pass_13335706
Ref: 3ebc13335706
Ref: library/poplib poplib POP3 apop13335902
Ref: 3ebd13335902
Ref: library/poplib poplib POP3 rpop13336021
Ref: 3ebe13336021
Ref: library/poplib poplib POP3 stat13336141
Ref: 3ebf13336141
Ref: library/poplib poplib POP3 list13336274
Ref: 3ec013336274
Ref: library/poplib poplib POP3 retr13336467
Ref: 3ec113336467
Ref: library/poplib poplib POP3 dele13336631
Ref: 3ec213336631
Ref: library/poplib poplib POP3 rset13336910
Ref: 3ec313336910
Ref: library/poplib poplib POP3 noop13336986
Ref: 3ec413336986
Ref: library/poplib poplib POP3 quit13337063
Ref: 139713337063
Ref: library/poplib poplib POP3 top13337154
Ref: 3ec513337154
Ref: library/poplib poplib POP3 uidl13337692
Ref: 3ec613337692
Ref: library/poplib poplib POP3 utf813337977
Ref: 103e13337977
Ref: library/poplib poplib POP3 stls13338193
Ref: 117313338193
Ref: Objetos POP3-Footnote-113339006
Ref: Objetos POP3-Footnote-213339065
Ref: Objetos POP3-Footnote-313339124
Node: Exemplo POP313339183
Ref: library/poplib id213339289
Ref: 3ec713339289
Ref: library/poplib pop3-example13339289
Ref: 3ec813339289
Node: imaplib — IMAP4 protocol client13339801
Ref: library/imaplib doc13339989
Ref: 3ec913339989
Ref: library/imaplib imaplib-imap4-protocol-client13339989
Ref: 3eca13339989
Ref: library/imaplib module-imaplib13339989
Ref: 7813339989
Ref: library/imaplib no-color13339989
Ref: 3ecb13339989
Ref: library/imaplib imaplib IMAP413340834
Ref: af513340834
Ref: library/imaplib imaplib IMAP4 error13342062
Ref: 176813342062
Ref: library/imaplib imaplib IMAP4 abort13342205
Ref: 3ecc13342205
Ref: library/imaplib imaplib IMAP4 readonly13342467
Ref: 3ecd13342467
Ref: library/imaplib imaplib IMAP4_SSL13342824
Ref: af613342824
Ref: library/imaplib imaplib IMAP4_stream13344290
Ref: af813344290
Ref: library/imaplib imaplib Internaldate2tuple13344561
Ref: 3ece13344561
Ref: library/imaplib imaplib Int2AP13344811
Ref: 3ecf13344811
Ref: library/imaplib imaplib ParseFlags13344959
Ref: 3ed013344959
Ref: library/imaplib imaplib Time2Internaldate13345080
Ref: 3ed113345080
Ref: imaplib — IMAP4 protocol client-Footnote-113346428
Ref: imaplib — IMAP4 protocol client-Footnote-213346495
Ref: imaplib — IMAP4 protocol client-Footnote-313346554
Node: Objetos IMAP413346613
Ref: library/imaplib id113346718
Ref: 3ed213346718
Ref: library/imaplib imap4-objects13346718
Ref: 3ed313346718
Ref: library/imaplib imaplib IMAP4 append13348220
Ref: 3ed413348220
Ref: library/imaplib imaplib IMAP4 authenticate13348325
Ref: 3ed513348325
Ref: library/imaplib imaplib IMAP4 check13349163
Ref: 3ed613349163
Ref: library/imaplib imaplib IMAP4 close13349228
Ref: afa13349228
Ref: library/imaplib imaplib IMAP4 copy13349414
Ref: 3ed713349414
Ref: library/imaplib imaplib IMAP4 create13349527
Ref: 3ed813349527
Ref: library/imaplib imaplib IMAP4 delete13349606
Ref: 3ed913349606
Ref: library/imaplib imaplib IMAP4 deleteacl13349685
Ref: 3eda13349685
Ref: library/imaplib imaplib IMAP4 enable13349796
Ref: 100313349796
Ref: library/imaplib imaplib IMAP4 expunge13350122
Ref: 3edb13350122
Ref: library/imaplib imaplib IMAP4 fetch13350371
Ref: 3edc13350371
Ref: library/imaplib imaplib IMAP4 getacl13350652
Ref: 3edd13350652
Ref: library/imaplib imaplib IMAP4 getannotation13350807
Ref: 3ede13350807
Ref: library/imaplib imaplib IMAP4 getquota13351009
Ref: 3edf13351009
Ref: library/imaplib imaplib IMAP4 getquotaroot13351184
Ref: 3ee013351184
Ref: library/imaplib imaplib IMAP4 idle13351373
Ref: 22c13351373
Ref: library/imaplib imaplib IMAP4 Idler burst13352939
Ref: 3ee213352939
Ref: library/imaplib imaplib IMAP4 list13355095
Ref: 3ee313355095
Ref: library/imaplib imaplib IMAP4 login13355365
Ref: 3ee413355365
Ref: library/imaplib imaplib IMAP4 login_cram_md513355499
Ref: 176713355499
Ref: library/imaplib imaplib IMAP4 logout13355868
Ref: c7813355868
Ref: library/imaplib imaplib IMAP4 lsub13356067
Ref: 3ee513356067
Ref: library/imaplib imaplib IMAP4 myrights13356358
Ref: 3ee613356358
Ref: library/imaplib imaplib IMAP4 namespace13356478
Ref: 3ee713356478
Ref: library/imaplib imaplib IMAP4 noop13356568
Ref: 3ee813356568
Ref: library/imaplib imaplib IMAP4 open13356636
Ref: af713356636
Ref: library/imaplib imaplib IMAP4 partial13357593
Ref: 3eed13357593
Ref: library/imaplib imaplib IMAP4 proxyauth13357771
Ref: 3eee13357771
Ref: library/imaplib imaplib IMAP4 read13357924
Ref: 3ee913357924
Ref: library/imaplib imaplib IMAP4 readline13358041
Ref: 3eea13358041
Ref: library/imaplib imaplib IMAP4 recent13358154
Ref: 3eef13358154
Ref: library/imaplib imaplib IMAP4 rename13358310
Ref: 3ef013358310
Ref: library/imaplib imaplib IMAP4 response13358419
Ref: 3ee113358419
Ref: library/imaplib imaplib IMAP4 search13358578
Ref: 3ef113358578
Ref: library/imaplib imaplib IMAP4 select13359255
Ref: 3ef213359255
Ref: library/imaplib imaplib IMAP4 send13359551
Ref: 3eeb13359551
Ref: library/imaplib imaplib IMAP4 setacl13359775
Ref: 3ef313359775
Ref: library/imaplib imaplib IMAP4 setannotation13359939
Ref: 3ef413359939
Ref: library/imaplib imaplib IMAP4 setquota13360129
Ref: 3ef513360129
Ref: library/imaplib imaplib IMAP4 shutdown13360304
Ref: 3eec13360304
Ref: library/imaplib imaplib IMAP4 socket13360486
Ref: 3ef613360486
Ref: library/imaplib imaplib IMAP4 sort13360573
Ref: 3ef713360573
Ref: library/imaplib imaplib IMAP4 starttls13361518
Ref: 142113361518
Ref: library/imaplib imaplib IMAP4 status13362060
Ref: 3ef813362060
Ref: library/imaplib imaplib IMAP4 store13362157
Ref: 3ef913362157
Ref: library/imaplib imaplib IMAP4 subscribe13363359
Ref: 3efa13363359
Ref: library/imaplib imaplib IMAP4 thread13363431
Ref: 3efb13363431
Ref: library/imaplib imaplib IMAP4 uid13364561
Ref: 3efc13364561
Ref: library/imaplib imaplib IMAP4 unsubscribe13364880
Ref: 3efd13364880
Ref: library/imaplib imaplib IMAP4 unselect13364958
Ref: af913364958
Ref: library/imaplib imaplib IMAP4 xatom13365363
Ref: 3efe13365363
Ref: library/imaplib imaplib IMAP4 PROTOCOL_VERSION13365568
Ref: 3eff13365568
Ref: library/imaplib imaplib IMAP4 debug13365702
Ref: 3f0013365702
Ref: library/imaplib imaplib IMAP4 utf8_enabled13365904
Ref: 100413365904
Ref: Objetos IMAP4-Footnote-113366189
Ref: Objetos IMAP4-Footnote-213366248
Ref: Objetos IMAP4-Footnote-313366307
Ref: Objetos IMAP4-Footnote-413366366
Ref: Objetos IMAP4-Footnote-513366425
Ref: Objetos IMAP4-Footnote-613366484
Ref: Objetos IMAP4-Footnote-713366543
Node: Exemplo IMAP413366602
Ref: library/imaplib id213366707
Ref: 3f0113366707
Ref: library/imaplib imap4-example13366707
Ref: 3f0213366707
Node: smtplib — SMTP protocol client13367213
Ref: library/smtplib doc13367404
Ref: 3f0313367404
Ref: library/smtplib module-smtplib13367404
Ref: cf13367404
Ref: library/smtplib no-color13367404
Ref: 3f0413367404
Ref: library/smtplib smtplib-smtp-protocol-client13367404
Ref: 3f0513367404
Ref: library/smtplib smtplib SMTP13368074
Ref: b1d13368074
Ref: library/smtplib smtplib SMTP_SSL13370703
Ref: b1e13370703
Ref: library/smtplib smtplib LMTP13372240
Ref: b1f13372240
Ref: library/smtplib smtplib SMTPException13373172
Ref: 119713373172
Ref: library/smtplib smtplib SMTPServerDisconnected13373429
Ref: 3f0813373429
Ref: library/smtplib smtplib SMTPResponseException13373657
Ref: 3f0913373657
Ref: library/smtplib smtplib SMTPSenderRefused13374022
Ref: 3f0a13374022
Ref: library/smtplib smtplib SMTPRecipientsRefused13374263
Ref: 3f0b13374263
Ref: library/smtplib smtplib SMTPDataError13374537
Ref: 3f0c13374537
Ref: library/smtplib smtplib SMTPConnectError13374634
Ref: 3f0613374634
Ref: library/smtplib smtplib SMTPHeloError13374741
Ref: 3f0d13374741
Ref: library/smtplib smtplib SMTPNotSupportedError13374829
Ref: 1c6513374829
Ref: library/smtplib smtplib SMTPAuthenticationError13374978
Ref: 3f0e13374978
Ref: smtplib — SMTP protocol client-Footnote-113375706
Ref: smtplib — SMTP protocol client-Footnote-213375773
Ref: smtplib — SMTP protocol client-Footnote-313375831
Ref: smtplib — SMTP protocol client-Footnote-413375890
Ref: smtplib — SMTP protocol client-Footnote-513375949
Ref: smtplib — SMTP protocol client-Footnote-613376007
Node: Objetos SMTP13376066
Ref: library/smtplib id113376168
Ref: 3f0f13376168
Ref: library/smtplib smtp-objects13376168
Ref: 3f1013376168
Ref: library/smtplib smtplib SMTP set_debuglevel13376272
Ref: 104e13376272
Ref: library/smtplib smtplib SMTP docmd13376643
Ref: 3f1113376643
Ref: library/smtplib smtplib SMTP connect13377294
Ref: 1c6613377294
Ref: library/smtplib smtplib SMTP helo13377990
Ref: 3f1213377990
Ref: library/smtplib smtplib SMTP ehlo13378452
Ref: 3f1313378452
Ref: library/smtplib smtplib SMTP ehlo_or_helo_if_needed13379359
Ref: 3f1513379359
Ref: library/smtplib smtplib SMTP has_extn13379702
Ref: 3f1413379702
Ref: library/smtplib smtplib SMTP verify13379898
Ref: 3f1613379898
Ref: library/smtplib smtplib SMTP login13380329
Ref: 3f1713380329
Ref: library/smtplib smtplib SMTP auth13381915
Ref: 104d13381915
Ref: library/smtplib smtplib SMTP starttls13384166
Ref: 133413384166
Ref: library/smtplib smtplib SMTP sendmail13385673
Ref: 104f13385673
Ref: library/smtplib smtplib SMTP send_message13389155
Ref: 105013389155
Ref: library/smtplib smtplib SMTP quit13391248
Ref: 3f0713391248
Ref: Objetos SMTP-Footnote-113391712
Ref: Objetos SMTP-Footnote-213391770
Ref: Objetos SMTP-Footnote-313391829
Ref: Objetos SMTP-Footnote-413391888
Ref: Objetos SMTP-Footnote-513391946
Ref: Objetos SMTP-Footnote-613392004
Node: Exemplo SMTP13392063
Ref: library/smtplib id213392165
Ref: 3f1813392165
Ref: library/smtplib smtp-example13392165
Ref: 3f1913392165
Ref: Exemplo SMTP-Footnote-113393595
Node: uuid — Objetos UUID conforme RFC 956213393653
Ref: library/uuid doc13393864
Ref: 3f1a13393864
Ref: library/uuid module-uuid13393864
Ref: 11613393864
Ref: library/uuid no-color13393864
Ref: 3f1b13393864
Ref: library/uuid uuid-uuid-objects-according-to-rfc-956213393864
Ref: 3f1c13393864
Ref: library/uuid uuid SafeUUID13395236
Ref: 3f1e13395236
Ref: library/uuid uuid SafeUUID safe13395296
Ref: 3f1f13395296
Ref: library/uuid uuid SafeUUID unsafe13395417
Ref: 3f2013395417
Ref: library/uuid uuid SafeUUID unknown13395519
Ref: 3f2113395519
Ref: library/uuid uuid UUID13395659
Ref: c4a13395659
Ref: library/uuid uuid UUID bytes13397751
Ref: 3f2313397751
Ref: library/uuid uuid UUID bytes_le13397888
Ref: 3f2413397888
Ref: library/uuid uuid UUID fields13398045
Ref: 3f2513398045
Ref: library/uuid uuid UUID time_low13398433
Ref: 3f2613398433
Ref: library/uuid uuid UUID time_mid13398720
Ref: 3f2713398720
Ref: library/uuid uuid UUID time_hi_version13399014
Ref: 3f2813399014
Ref: library/uuid uuid UUID clock_seq_hi_variant13399306
Ref: 3f2913399306
Ref: library/uuid uuid UUID clock_seq_low13399591
Ref: 3f2a13399591
Ref: library/uuid uuid UUID node13399874
Ref: 3f2b13399874
Ref: library/uuid uuid UUID time13400160
Ref: 3f2c13400160
Ref: library/uuid uuid UUID clock_seq13400886
Ref: 3f2d13400886
Ref: library/uuid uuid UUID hex13401101
Ref: 17f313401101
Ref: library/uuid uuid UUID int13401200
Ref: 3f2213401200
Ref: library/uuid uuid UUID urn13401266
Ref: 3f2e13401266
Ref: library/uuid uuid UUID variant13401353
Ref: 3f2f13401353
Ref: library/uuid uuid UUID version13401596
Ref: 3f3413401596
Ref: library/uuid uuid UUID is_safe13401810
Ref: d9313401810
Ref: library/uuid uuid getnode13402064
Ref: d9413402064
Ref: library/uuid uuid-factory-functions13403196
Ref: 3f1d13403196
Ref: library/uuid uuid uuid113403196
Ref: d9513403196
Ref: library/uuid uuid uuid313403791
Ref: 2e313403791
Ref: library/uuid uuid uuid413404076
Ref: 2e513404076
Ref: library/uuid uuid uuid513404214
Ref: 2e413404214
Ref: library/uuid uuid uuid613404502
Ref: 2c113404502
Ref: library/uuid uuid uuid713405224
Ref: 2c213405224
Ref: library/uuid uuid uuid813405626
Ref: 2c313405626
Ref: library/uuid uuid NAMESPACE_DNS13406523
Ref: 3f3513406523
Ref: library/uuid uuid NAMESPACE_URL13406673
Ref: 3f3613406673
Ref: library/uuid uuid NAMESPACE_OID13406788
Ref: 3f3713406788
Ref: library/uuid uuid NAMESPACE_X50013406906
Ref: 3f3813406906
Ref: library/uuid uuid RESERVED_NCS13407186
Ref: 3f3013407186
Ref: library/uuid uuid RFC_412213407261
Ref: 3f3113407261
Ref: library/uuid uuid RESERVED_MICROSOFT13407476
Ref: 3f3213407476
Ref: library/uuid uuid RESERVED_FUTURE13407563
Ref: 3f3313407563
Ref: library/uuid uuid NIL13407711
Ref: 2c413407711
Ref: library/uuid uuid MAX13407905
Ref: 2c513407905
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-113408534
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-213408598
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-313408657
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-413408716
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-513408775
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-613408834
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-713408893
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-813408964
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-913409035
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1013409106
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1113409178
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1213409250
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1313409322
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1413409394
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1513409454
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1613409514
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1713409574
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1813409646
Ref: uuid — Objetos UUID conforme RFC 9562-Footnote-1913409719
Node: Uso na linha de comando<5>13409779
Ref: library/uuid command-line-usage13409901
Ref: 3f3913409901
Ref: library/uuid uuid-cli13409901
Ref: 66a13409901
Ref: library/uuid cmdoption-uuid-h13410225
Ref: 3f3a13410225
Ref: library/uuid cmdoption-uuid-help13410225
Ref: 3f3b13410225
Ref: library/uuid cmdoption-uuid-u13410289
Ref: 3f3c13410289
Ref: library/uuid cmdoption-uuid-uuid13410311
Ref: 3f3d13410311
Ref: library/uuid cmdoption-uuid-n13410527
Ref: 3f3e13410527
Ref: library/uuid cmdoption-uuid-namespace13410554
Ref: 3f3f13410554
Ref: library/uuid cmdoption-uuid-N13410888
Ref: 3f4013410888
Ref: library/uuid cmdoption-uuid-name13410910
Ref: 3f4113410910
Ref: library/uuid cmdoption-uuid-C13411069
Ref: 3f4213411069
Ref: library/uuid cmdoption-uuid-count13411090
Ref: 2c613411090
Node: Exemplo<11>13411181
Ref: library/uuid example13411339
Ref: 3f4313411339
Ref: library/uuid uuid-example13411339
Ref: 3f4413411339
Node: Exemplo de linha de comando13413401
Ref: library/uuid command-line-example13413524
Ref: 3f4513413524
Ref: library/uuid uuid-cli-example13413524
Ref: 3f4613413524
Node: socketserver — Um framework para servidores de rede13414001
Ref: library/socketserver doc13414208
Ref: 3f4713414208
Ref: library/socketserver module-socketserver13414208
Ref: d213414208
Ref: library/socketserver no-color13414208
Ref: 3f4813414208
Ref: library/socketserver socketserver-a-framework-for-network-servers13414208
Ref: 3f4913414208
Ref: library/socketserver socketserver TCPServer13414772
Ref: 151b13414772
Ref: library/socketserver socketserver UDPServer13415230
Ref: 3f4c13415230
Ref: library/socketserver socketserver UnixStreamServer13415544
Ref: 3f4d13415544
Ref: library/socketserver socketserver UnixDatagramServer13415658
Ref: 3f4e13415658
Ref: socketserver — Um framework para servidores de rede-Footnote-113418269
Node: Notas sobre criação do servidor13418341
Ref: library/socketserver server-creation-notes13418490
Ref: 3f5113418490
Ref: library/socketserver socketserver ForkingMixIn13419297
Ref: d6513419297
Ref: library/socketserver socketserver ThreadingMixIn13419335
Ref: d2e13419335
Ref: library/socketserver socketserver ThreadingMixIn block_on_close13420029
Ref: d6413420029
Ref: library/socketserver socketserver ThreadingMixIn max_children13420460
Ref: 3f5313420460
Ref: library/socketserver socketserver ThreadingMixIn daemon_threads13420760
Ref: 3f5413420760
Ref: library/socketserver socketserver ForkingTCPServer13421350
Ref: 3f5513421350
Ref: library/socketserver socketserver ForkingUDPServer13421392
Ref: 3f5613421392
Ref: library/socketserver socketserver ThreadingTCPServer13421434
Ref: 3f5713421434
Ref: library/socketserver socketserver ThreadingUDPServer13421478
Ref: 3f5213421478
Ref: library/socketserver socketserver ForkingUnixStreamServer13421522
Ref: 3f5813421522
Ref: library/socketserver socketserver ForkingUnixDatagramServer13421571
Ref: 3f5913421571
Ref: library/socketserver socketserver ThreadingUnixStreamServer13421622
Ref: 3f5a13421622
Ref: library/socketserver socketserver ThreadingUnixDatagramServer13421673
Ref: 3f5b13421673
Node: Objetos Server<2>13424314
Ref: library/socketserver server-objects13424508
Ref: 3f5d13424508
Ref: library/socketserver socketserver BaseServer13424559
Ref: 133913424559
Ref: library/socketserver socketserver BaseServer fileno13424970
Ref: 3f6013424970
Ref: library/socketserver socketserver BaseServer handle_request13425272
Ref: 151e13425272
Ref: library/socketserver socketserver BaseServer serve_forever13425917
Ref: 133b13425917
Ref: library/socketserver socketserver BaseServer service_actions13426631
Ref: 133a13426631
Ref: library/socketserver socketserver BaseServer shutdown13426960
Ref: 1ccc13426960
Ref: library/socketserver socketserver BaseServer server_close13427295
Ref: d6313427295
Ref: library/socketserver socketserver BaseServer address_family13427383
Ref: 3f6413427383
Ref: library/socketserver socketserver BaseServer RequestHandlerClass13427818
Ref: 3f5f13427818
Ref: library/socketserver socketserver BaseServer server_address13428019
Ref: 3f5e13428019
Ref: library/socketserver socketserver BaseServer socket13428453
Ref: 3f6513428453
Ref: library/socketserver socketserver BaseServer allow_reuse_address13428660
Ref: 3f6613428660
Ref: library/socketserver socketserver BaseServer request_queue_size13428882
Ref: 3f6713428882
Ref: library/socketserver socketserver BaseServer socket_type13429429
Ref: 3f6813429429
Ref: library/socketserver socketserver BaseServer timeout13429622
Ref: 151c13429622
Ref: library/socketserver socketserver BaseServer finish_request13430213
Ref: 3f6913430213
Ref: library/socketserver socketserver BaseServer get_request13430432
Ref: 3f6113430432
Ref: library/socketserver socketserver BaseServer handle_error13430681
Ref: f3113430681
Ref: library/socketserver socketserver BaseServer handle_timeout13431148
Ref: 151d13431148
Ref: library/socketserver socketserver BaseServer process_request13431642
Ref: 3f6313431642
Ref: library/socketserver socketserver BaseServer server_activate13432027
Ref: 3f4b13432027
Ref: library/socketserver socketserver BaseServer server_bind13432286
Ref: 3f4a13432286
Ref: library/socketserver socketserver BaseServer verify_request13432448
Ref: 3f6213432448
Node: Objetos manipulador de requisições13433067
Ref: library/socketserver request-handler-objects13433240
Ref: 3f6a13433240
Ref: library/socketserver socketserver BaseRequestHandler13433333
Ref: 3f4f13433333
Ref: library/socketserver socketserver BaseRequestHandler setup13433745
Ref: 3f6b13433745
Ref: library/socketserver socketserver BaseRequestHandler handle13433958
Ref: 3f5013433958
Ref: library/socketserver socketserver BaseRequestHandler finish13434745
Ref: 3f6f13434745
Ref: library/socketserver socketserver BaseRequestHandler request13435042
Ref: 3f6c13435042
Ref: library/socketserver socketserver BaseRequestHandler client_address13435178
Ref: 3f6d13435178
Ref: library/socketserver socketserver BaseRequestHandler server13435307
Ref: 3f6e13435307
Ref: library/socketserver socketserver StreamRequestHandler13435424
Ref: eca13435424
Ref: library/socketserver socketserver DatagramRequestHandler13435470
Ref: 3f5c13435470
Ref: library/socketserver socketserver DatagramRequestHandler rfile13435715
Ref: 3f7013435715
Ref: library/socketserver socketserver DatagramRequestHandler wfile13435898
Ref: ec913435898
Node: Exemplos<29>13436195
Ref: library/socketserver examples13436342
Ref: 3f7113436342
Node: Exemplo de socketserver TCPServer13436553
Ref: library/socketserver socketserver-tcpserver-example13436674
Ref: 3f7213436674
Node: Exemplo socketserver UDPServer13440691
Ref: library/socketserver socketserver-udpserver-example13440840
Ref: 3f7313440840
Node: Mixins assíncronos13442497
Ref: library/socketserver asynchronous-mixins13442604
Ref: 3f7413442604
Node: http server — HTTP servers13445008
Ref: library/http server doc13445214
Ref: 3f7513445214
Ref: library/http server http-server-http-servers13445214
Ref: 3f7613445214
Ref: library/http server module-http server13445214
Ref: 7613445214
Ref: library/http server no-color13445214
Ref: 3f7713445214
Ref: library/http server http server HTTPServer13446201
Ref: 3d7c13446201
Ref: library/http server http server ThreadingHTTPServer13446557
Ref: d2d13446557
Ref: library/http server http server HTTPSServer13446936
Ref: 22713446936
Ref: library/http server http server ThreadingHTTPSServer13448300
Ref: 3f7913448300
Ref: library/http server http server BaseHTTPRequestHandler13449002
Ref: 12c713449002
Ref: library/http server http server BaseHTTPRequestHandler client_address13449993
Ref: 3f7a13449993
Ref: library/http server http server BaseHTTPRequestHandler server13450134
Ref: 3f7b13450134
Ref: library/http server http server BaseHTTPRequestHandler close_connection13450202
Ref: 3f7c13450202
Ref: library/http server http server BaseHTTPRequestHandler requestline13450436
Ref: 3f7e13450436
Ref: library/http server http server BaseHTTPRequestHandler command13450750
Ref: 3f7f13450750
Ref: library/http server http server BaseHTTPRequestHandler path13450853
Ref: 3f8013450853
Ref: library/http server http server BaseHTTPRequestHandler request_version13451126
Ref: 3f8113451126
Ref: library/http server http server BaseHTTPRequestHandler headers13451261
Ref: 3e6113451261
Ref: library/http server http server BaseHTTPRequestHandler rfile13451687
Ref: 3f8313451687
Ref: library/http server http server BaseHTTPRequestHandler wfile13451838
Ref: 3f8413451838
Ref: library/http server http server BaseHTTPRequestHandler server_version13452285
Ref: 3f8513452285
Ref: library/http server http server BaseHTTPRequestHandler sys_version13452571
Ref: 3f8613452571
Ref: library/http server http server BaseHTTPRequestHandler error_message_format13452825
Ref: 114613452825
Ref: library/http server http server BaseHTTPRequestHandler error_content_type13453187
Ref: 3f8813453187
Ref: library/http server http server BaseHTTPRequestHandler protocol_version13453366
Ref: 3f8913453366
Ref: library/http server http server BaseHTTPRequestHandler MessageClass13453961
Ref: 3f8213453961
Ref: library/http server http server BaseHTTPRequestHandler responses13454198
Ref: 3e4613454198
Ref: library/http server http server BaseHTTPRequestHandler handle13454771
Ref: 3f8c13454771
Ref: library/http server http server BaseHTTPRequestHandler handle_one_request13455072
Ref: 3f7d13455072
Ref: library/http server http server BaseHTTPRequestHandler handle_expect_10013455271
Ref: 3f8d13455271
Ref: library/http server http server BaseHTTPRequestHandler send_error13455788
Ref: 114513455788
Ref: library/http server http server BaseHTTPRequestHandler send_response13456918
Ref: 3f8e13456918
Ref: library/http server http server BaseHTTPRequestHandler send_header13457738
Ref: 3f8a13457738
Ref: library/http server http server BaseHTTPRequestHandler send_response_only13458323
Ref: 3f8b13458323
Ref: library/http server http server BaseHTTPRequestHandler end_headers13458751
Ref: 12c813458751
Ref: library/http server http server BaseHTTPRequestHandler flush_headers13459053
Ref: 12c913459053
Ref: library/http server http server BaseHTTPRequestHandler log_request13459233
Ref: 3f9013459233
Ref: library/http server http server BaseHTTPRequestHandler log_error13459531
Ref: 3f9113459531
Ref: library/http server http server BaseHTTPRequestHandler log_message13459777
Ref: 3f9213459777
Ref: library/http server http server BaseHTTPRequestHandler version_string13460267
Ref: 3f8713460267
Ref: library/http server http server BaseHTTPRequestHandler date_time_string13460482
Ref: 3f8f13460482
Ref: library/http server http server BaseHTTPRequestHandler log_date_time_string13460871
Ref: 3f9313460871
Ref: library/http server http server BaseHTTPRequestHandler address_string13460983
Ref: 3f9413460983
Ref: library/http server http server SimpleHTTPRequestHandler13461232
Ref: d2c13461232
Ref: library/http server http server SimpleHTTPRequestHandler server_version13462014
Ref: 3f9713462014
Ref: library/http server http server SimpleHTTPRequestHandler extensions_map13462174
Ref: 3f9813462174
Ref: library/http server http server SimpleHTTPRequestHandler do_HEAD13462676
Ref: 3f9613462676
Ref: library/http server http server SimpleHTTPRequestHandler do_GET13462965
Ref: 3f9513462965
Ref: library/http server http server CGIHTTPRequestHandler13465408
Ref: 32313465408
Ref: library/http server http server CGIHTTPRequestHandler cgi_directories13466598
Ref: 3f9913466598
Ref: library/http server http server CGIHTTPRequestHandler do_POST13466837
Ref: 3f9a13466837
Ref: http server — HTTP servers-Footnote-113467804
Ref: http server — HTTP servers-Footnote-213467875
Ref: http server — HTTP servers-Footnote-313467934
Ref: http server — HTTP servers-Footnote-413467993
Node: Interface de linha de comando<5>13468064
Ref: library/http server command-line-interface13468202
Ref: 3f9b13468202
Ref: library/http server http-server-cli13468202
Ref: 114713468202
Ref: library/http server cmdoption-http server-arg-port13468559
Ref: 3f9c13468559
Ref: library/http server cmdoption-http server-b13468752
Ref: 3f9d13468752
Ref: library/http server cmdoption-http server-bind13468752
Ref: 3f9e13468752
Ref: library/http server cmdoption-http server-d13469198
Ref: 17a713469198
Ref: library/http server cmdoption-http server-directory13469198
Ref: 3f9f13469198
Ref: library/http server cmdoption-http server-p13469506
Ref: 3fa013469506
Ref: library/http server cmdoption-http server-protocol13469506
Ref: 3fa113469506
Ref: library/http server cmdoption-http server-cgi13469832
Ref: 3fa213469832
Ref: library/http server cmdoption-http server-tls-cert13470446
Ref: 22813470446
Ref: library/http server cmdoption-http server-tls-key13470625
Ref: 22913470625
Ref: library/http server cmdoption-http server-tls-password-file13470801
Ref: 22a13470801
Node: Considerações de segurança<3>13471163
Ref: library/http server http-server-security13471301
Ref: 3f7813471301
Ref: library/http server security-considerations13471301
Ref: 3fa313471301
Node: http cookies — HTTP state management13471954
Ref: library/http cookies doc13472158
Ref: 3fa413472158
Ref: library/http cookies http-cookies-http-state-management13472158
Ref: 3fa513472158
Ref: library/http cookies module-http cookies13472158
Ref: 7513472158
Ref: library/http cookies no-color13472158
Ref: 3fa613472158
Ref: library/http cookies http cookies CookieError13473562
Ref: 3fa713473562
Ref: library/http cookies http cookies BaseCookie13473729
Ref: 3fa813473729
Ref: library/http cookies http cookies SimpleCookie13474119
Ref: 1cda13474119
Ref: http cookies — HTTP state management-Footnote-113474985
Ref: http cookies — HTTP state management-Footnote-213475057
Ref: http cookies — HTTP state management-Footnote-313475116
Ref: http cookies — HTTP state management-Footnote-413475175
Ref: http cookies — HTTP state management-Footnote-513475234
Node: Objetos Cookie13475293
Ref: library/http cookies cookie-objects13475405
Ref: 3fac13475405
Ref: library/http cookies id113475405
Ref: 3fad13475405
Ref: library/http cookies http cookies BaseCookie value_decode13475456
Ref: 3faa13475456
Ref: library/http cookies http cookies BaseCookie value_encode13475729
Ref: 3fab13475729
Ref: library/http cookies http cookies BaseCookie output13476182
Ref: 3fae13476182
Ref: library/http cookies http cookies BaseCookie js_output13476551
Ref: 3fb013476551
Ref: library/http cookies http cookies BaseCookie load13476831
Ref: 3fa913476831
Node: Objetos Morsel13477114
Ref: library/http cookies id213477246
Ref: 3fb113477246
Ref: library/http cookies morsel-objects13477246
Ref: 3fb213477246
Ref: library/http cookies http cookies Morsel13477297
Ref: df213477297
Ref: library/http cookies http cookies Morsel expires13477529
Ref: 3fb313477529
Ref: library/http cookies http cookies Morsel path13477561
Ref: 3fb413477561
Ref: library/http cookies http cookies Morsel comment13477590
Ref: 3fb513477590
Ref: library/http cookies http cookies Morsel domain13477622
Ref: 3fb613477622
Ref: library/http cookies http cookies Morsel secure13477686
Ref: 3fb713477686
Ref: library/http cookies http cookies Morsel version13477717
Ref: 3fb813477717
Ref: library/http cookies http cookies Morsel httponly13477749
Ref: 15c113477749
Ref: library/http cookies http cookies Morsel samesite13477782
Ref: 3fb913477782
Ref: library/http cookies http cookies Morsel partitioned13477815
Ref: 3fba13477815
Ref: library/http cookies http cookies Morsel value13479661
Ref: df013479661
Ref: library/http cookies http cookies Morsel coded_value13479714
Ref: df113479714
Ref: library/http cookies http cookies Morsel key13479819
Ref: def13479819
Ref: library/http cookies http cookies Morsel set13479869
Ref: df313479869
Ref: library/http cookies http cookies Morsel isReservedKey13479979
Ref: 3fbb13479979
Ref: library/http cookies http cookies Morsel output13480091
Ref: 3faf13480091
Ref: library/http cookies http cookies Morsel js_output13480432
Ref: 3fbc13480432
Ref: library/http cookies http cookies Morsel OutputString13480707
Ref: 3fbd13480707
Ref: library/http cookies http cookies Morsel update13480920
Ref: 10bf13480920
Ref: library/http cookies http cookies Morsel copy13481222
Ref: 10be13481222
Ref: library/http cookies http cookies Morsel setdefault13481379
Ref: 3fbe13481379
Ref: Objetos Morsel-Footnote-113481596
Ref: Objetos Morsel-Footnote-213481655
Ref: Objetos Morsel-Footnote-313481714
Ref: Objetos Morsel-Footnote-413481777
Ref: Objetos Morsel-Footnote-513481836
Node: Exemplo<12>13481895
Ref: library/http cookies cookie-example13482004
Ref: 3fbf13482004
Ref: library/http cookies example13482004
Ref: 3fc013482004
Node: http cookiejar — Cookie handling for HTTP clients13483656
Ref: library/http cookiejar doc13483880
Ref: 3fc113483880
Ref: library/http cookiejar http-cookiejar-cookie-handling-for-http-clients13483880
Ref: 3fc213483880
Ref: library/http cookiejar module-http cookiejar13483880
Ref: 7413483880
Ref: library/http cookiejar no-color13483880
Ref: 3fc313483880
Ref: library/http cookiejar http cookiejar LoadError13485450
Ref: 3fc413485450
Ref: library/http cookiejar http cookiejar CookieJar13485868
Ref: 3dea13485868
Ref: library/http cookiejar http cookiejar FileCookieJar13486345
Ref: 3fc513486345
Ref: library/http cookiejar http cookiejar CookiePolicy13487185
Ref: 3fc613487185
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy13487346
Ref: 1caa13487346
Ref: library/http cookiejar http cookiejar Cookie13489171
Ref: 3fcb13489171
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-113490873
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-213490947
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-313491006
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-413491065
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-513491124
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-613491183
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-713491242
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-813491301
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-913491360
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1013491419
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1113491479
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1213491539
Node: CookieJar and FileCookieJar Objects13491599
Ref: library/http cookiejar cookie-jar-objects13491790
Ref: 3fcc13491790
Ref: library/http cookiejar cookiejar-and-filecookiejar-objects13491790
Ref: 3fcd13491790
Ref: library/http cookiejar http cookiejar CookieJar add_cookie_header13492066
Ref: 3fce13492066
Ref: library/http cookiejar http cookiejar CookieJar extract_cookies13492986
Ref: 3fcf13492986
Ref: library/http cookiejar http cookiejar CookieJar set_policy13494222
Ref: 3fd113494222
Ref: library/http cookiejar http cookiejar CookieJar make_cookies13494327
Ref: 3fd213494327
Ref: library/http cookiejar http cookiejar CookieJar set_cookie_if_ok13494615
Ref: 3fd313494615
Ref: library/http cookiejar http cookiejar CookieJar set_cookie13494741
Ref: 3fd413494741
Ref: library/http cookiejar http cookiejar CookieJar clear13494891
Ref: 3fd513494891
Ref: library/http cookiejar http cookiejar CookieJar clear_session_cookies13495397
Ref: 3fd613495397
Ref: library/http cookiejar http cookiejar FileCookieJar save13496044
Ref: 3fd713496044
Ref: library/http cookiejar http cookiejar FileCookieJar load13496898
Ref: 3fc713496898
Ref: library/http cookiejar http cookiejar FileCookieJar revert13497482
Ref: 3fc813497482
Ref: library/http cookiejar http cookiejar FileCookieJar filename13497882
Ref: 3fd813497882
Ref: library/http cookiejar http cookiejar FileCookieJar delayload13498018
Ref: 3fd913498018
Node: FileCookieJar subclasses and co-operation with web browsers13498438
Ref: library/http cookiejar file-cookie-jar-classes13498657
Ref: 3fc913498657
Ref: library/http cookiejar filecookiejar-subclasses-and-co-operation-with-web-browsers13498657
Ref: 3fda13498657
Ref: library/http cookiejar http cookiejar MozillaCookieJar13498885
Ref: 3fdb13498885
Ref: library/http cookiejar http cookiejar LWPCookieJar13499695
Ref: 3fdc13499695
Ref: FileCookieJar subclasses and co-operation with web browsers-Footnote-113500180
Node: Objeto CookiePolicy13500239
Ref: library/http cookiejar cookie-policy-objects13500450
Ref: 3fdd13500450
Ref: library/http cookiejar cookiepolicy-objects13500450
Ref: 3fde13500450
Ref: library/http cookiejar http cookiejar CookiePolicy set_ok13500601
Ref: 3fd013500601
Ref: library/http cookiejar http cookiejar CookiePolicy return_ok13500928
Ref: 3fdf13500928
Ref: library/http cookiejar http cookiejar CookiePolicy domain_return_ok13501258
Ref: 3fe013501258
Ref: library/http cookiejar http cookiejar CookiePolicy path_return_ok13502637
Ref: 3fe113502637
Ref: library/http cookiejar http cookiejar CookiePolicy netscape13503090
Ref: 3fe213503090
Ref: library/http cookiejar http cookiejar CookiePolicy rfc296513503162
Ref: 3fe313503162
Ref: library/http cookiejar http cookiejar CookiePolicy hide_cookie213503236
Ref: 3fe413503236
Ref: Objeto CookiePolicy-Footnote-113503786
Ref: Objeto CookiePolicy-Footnote-213503845
Node: DefaultCookiePolicy Objects13503904
Ref: library/http cookiejar default-cookie-policy-objects13504073
Ref: 3fe513504073
Ref: library/http cookiejar defaultcookiepolicy-objects13504073
Ref: 3fe613504073
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy blocked_domains13506392
Ref: 3fe713506392
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy set_blocked_domains13506504
Ref: 3fe813506504
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy is_blocked13506619
Ref: 3fe913506619
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy allowed_domains13506768
Ref: 3fea13506768
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy set_allowed_domains13506905
Ref: 3feb13506905
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy is_not_allowed13507040
Ref: 3fec13507040
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy rfc2109_as_netscape13507381
Ref: 3fca13507381
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_domain13507967
Ref: 3fed13507967
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_rfc2965_unverifiable13508270
Ref: 3fee13508270
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_unverifiable13508647
Ref: 3fef13508647
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_domain13508795
Ref: 3ff013508795
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_set_initial_dollar13508975
Ref: 3ff113508975
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_set_path13509129
Ref: 3ff213509129
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrictNoDots13509459
Ref: 3ff313509459
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrictNonDomain13509703
Ref: 3ff413509703
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainRFC2965Match13510050
Ref: 3ff513510050
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainLiberal13510286
Ref: 3ff613510286
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrict13510433
Ref: 3ff713510433
Ref: DefaultCookiePolicy Objects-Footnote-113510585
Ref: DefaultCookiePolicy Objects-Footnote-213510644
Ref: DefaultCookiePolicy Objects-Footnote-313510703
Ref: DefaultCookiePolicy Objects-Footnote-413510762
Ref: DefaultCookiePolicy Objects-Footnote-513510821
Ref: DefaultCookiePolicy Objects-Footnote-613510880
Ref: DefaultCookiePolicy Objects-Footnote-713510939
Node: Objetos Cookie<2>13510998
Ref: library/http cookiejar cookie-objects13511160
Ref: 3ff813511160
Ref: library/http cookiejar http cookiejar Cookie version13511929
Ref: 3ff913511929
Ref: library/http cookiejar http cookiejar Cookie name13512286
Ref: 3ffa13512286
Ref: library/http cookiejar http cookiejar Cookie value13512343
Ref: 3ffb13512343
Ref: library/http cookiejar http cookiejar Cookie port13512422
Ref: 3ffc13512422
Ref: library/http cookiejar http cookiejar Cookie domain13512560
Ref: 3ffd13512560
Ref: library/http cookiejar http cookiejar Cookie path13512621
Ref: 3ffe13512621
Ref: library/http cookiejar http cookiejar Cookie secure13512715
Ref: 3fff13512715
Ref: library/http cookiejar http cookiejar Cookie expires13512821
Ref: 400013512821
Ref: library/http cookiejar http cookiejar Cookie discard13512973
Ref: 400213512973
Ref: library/http cookiejar http cookiejar Cookie comment13513049
Ref: 400313513049
Ref: library/http cookiejar http cookiejar Cookie comment_url13513181
Ref: 400413513181
Ref: library/http cookiejar http cookiejar Cookie rfc210913513327
Ref: 400513513327
Ref: library/http cookiejar http cookiejar Cookie port_specified13513736
Ref: 400613513736
Ref: library/http cookiejar http cookiejar Cookie domain_specified13513914
Ref: 400713513914
Ref: library/http cookiejar http cookiejar Cookie domain_initial_dot13514022
Ref: 400813514022
Ref: library/http cookiejar http cookiejar Cookie has_nonstandard_attr13514277
Ref: 400913514277
Ref: library/http cookiejar http cookiejar Cookie get_nonstandard_attr13514392
Ref: 400a13514392
Ref: library/http cookiejar http cookiejar Cookie set_nonstandard_attr13514555
Ref: 400b13514555
Ref: library/http cookiejar http cookiejar Cookie is_expired13514728
Ref: 400113514728
Ref: Objetos Cookie<2>-Footnote-113515022
Ref: Objetos Cookie<2>-Footnote-213515081
Ref: Objetos Cookie<2>-Footnote-313515140
Ref: Objetos Cookie<2>-Footnote-413515199
Node: Exemplos<30>13515258
Ref: library/http cookiejar examples13515384
Ref: 400c13515384
Ref: Exemplos<30>-Footnote-113516837
Node: xmlrpc — Módulos de servidor e cliente XMLRPC13516896
Ref: library/xmlrpc doc13517115
Ref: 400d13517115
Ref: library/xmlrpc module-xmlrpc13517115
Ref: 13313517115
Ref: library/xmlrpc no-color13517115
Ref: 400e13517115
Ref: library/xmlrpc xmlrpc-xmlrpc-server-and-client-modules13517115
Ref: 400f13517115
Node: xmlrpc client — Cliente XML-RPC13517667
Ref: library/xmlrpc client doc13517880
Ref: 401013517880
Ref: library/xmlrpc client module-xmlrpc client13517880
Ref: 13413517880
Ref: library/xmlrpc client no-color13517880
Ref: 401113517880
Ref: library/xmlrpc client xmlrpc-client-xml-rpc-client-access13517880
Ref: 401213517880
Ref: library/xmlrpc client xmlrpc client ServerProxy13519060
Ref: c4113519060
Ref: xmlrpc client — Cliente XML-RPC-Footnote-113527485
Ref: xmlrpc client — Cliente XML-RPC-Footnote-213527558
Ref: xmlrpc client — Cliente XML-RPC-Footnote-313527652
Ref: xmlrpc client — Cliente XML-RPC-Footnote-413527708
Ref: xmlrpc client — Cliente XML-RPC-Footnote-513527767
Node: Objetos ServerProxy13527813
Ref: library/xmlrpc client id113527927
Ref: 401613527927
Ref: library/xmlrpc client serverproxy-objects13527927
Ref: 401713527927
Ref: library/xmlrpc client xmlrpc client ServerProxy system listMethods13528583
Ref: 401813528583
Ref: library/xmlrpc client xmlrpc client ServerProxy system methodSignature13528747
Ref: 401913528747
Ref: library/xmlrpc client xmlrpc client ServerProxy system methodHelp13529772
Ref: 401a13529772
Node: Objetos DateTime13530849
Ref: library/xmlrpc client datetime-objects13530989
Ref: 401b13530989
Ref: library/xmlrpc client id213530989
Ref: 401c13530989
Ref: library/xmlrpc client xmlrpc client DateTime13531044
Ref: 15d413531044
Ref: library/xmlrpc client xmlrpc client DateTime decode13531354
Ref: 401d13531354
Ref: library/xmlrpc client xmlrpc client DateTime encode13531452
Ref: 401e13531452
Node: Objetos Binários13532538
Ref: library/xmlrpc client binary-objects13532672
Ref: 401f13532672
Ref: library/xmlrpc client id313532672
Ref: 402013532672
Ref: library/xmlrpc client xmlrpc client Binary13532728
Ref: 401313532728
Ref: library/xmlrpc client xmlrpc client Binary data13532946
Ref: 402113532946
Ref: library/xmlrpc client xmlrpc client Binary decode13533251
Ref: 402213533251
Ref: library/xmlrpc client xmlrpc client Binary encode13533391
Ref: 402313533391
Ref: Objetos Binários-Footnote-113534636
Node: Objetos Fault13534707
Ref: library/xmlrpc client fault-objects13534846
Ref: 402413534846
Ref: library/xmlrpc client id413534846
Ref: 402513534846
Ref: library/xmlrpc client xmlrpc client Fault13534895
Ref: 401413534895
Ref: library/xmlrpc client xmlrpc client Fault faultCode13535063
Ref: 402613535063
Ref: library/xmlrpc client xmlrpc client Fault faultString13535138
Ref: 402713535138
Node: Objetos ProtocolError13536099
Ref: library/xmlrpc client protocol-error-objects13536238
Ref: 402813536238
Ref: library/xmlrpc client protocolerror-objects13536238
Ref: 402913536238
Ref: library/xmlrpc client xmlrpc client ProtocolError13536303
Ref: 401513536303
Ref: library/xmlrpc client xmlrpc client ProtocolError url13536581
Ref: 402a13536581
Ref: library/xmlrpc client xmlrpc client ProtocolError errcode13536657
Ref: 402b13536657
Ref: library/xmlrpc client xmlrpc client ProtocolError errmsg13536715
Ref: 402c13536715
Ref: library/xmlrpc client xmlrpc client ProtocolError headers13536793
Ref: 402d13536793
Node: Objetos MultiCall13537532
Ref: library/xmlrpc client multicall-objects13537679
Ref: 402e13537679
Ref: library/xmlrpc client xmlrpc client MultiCall13537862
Ref: 402f13537862
Ref: Objetos MultiCall-Footnote-113539569
Node: Convenience Functions13539748
Ref: library/xmlrpc client convenience-functions13539899
Ref: 403013539899
Ref: library/xmlrpc client xmlrpc client dumps13539964
Ref: 403113539964
Ref: library/xmlrpc client xmlrpc client loads13540677
Ref: 162613540677
Node: Exemplo de uso do cliente13541561
Ref: library/xmlrpc client example-of-client-usage13541729
Ref: 403213541729
Ref: library/xmlrpc client xmlrpc-client-example13541729
Ref: 403313541729
Node: Example of Client and Server Usage13543040
Ref: library/xmlrpc client example-of-client-and-server-usage13543178
Ref: 403413543178
Node: xmlrpc server — Servidores XML-RPC básicos13543318
Ref: library/xmlrpc server doc13543537
Ref: 403613543537
Ref: library/xmlrpc server module-xmlrpc server13543537
Ref: 13513543537
Ref: library/xmlrpc server no-color13543537
Ref: 403713543537
Ref: library/xmlrpc server xmlrpc-server-basic-xml-rpc-servers13543537
Ref: 403813543537
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer13544459
Ref: 403913544459
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler13546073
Ref: 403a13546073
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCRequestHandler13546761
Ref: 152313546761
Ref: xmlrpc server — Servidores XML-RPC básicos-Footnote-113547304
Node: Objetos de SimpleXMLRPCServer13547377
Ref: library/xmlrpc server simple-xmlrpc-servers13547520
Ref: 403b13547520
Ref: library/xmlrpc server simplexmlrpcserver-objects13547520
Ref: 403c13547520
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_function13547764
Ref: 403d13547764
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_instance13548574
Ref: 403e13548574
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_introspection_functions13550253
Ref: 403f13550253
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_multicall_functions13550463
Ref: 404013550463
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCRequestHandler rpc_paths13550596
Ref: 404113550596
Node: Exemplo de SimpleXMLRPCServer13551069
Ref: library/xmlrpc server id113551164
Ref: 404213551164
Ref: library/xmlrpc server simplexmlrpcserver-example13551164
Ref: 403513551164
Node: CGIXMLRPCRequestHandler13555832
Ref: library/xmlrpc server cgixmlrpcrequesthandler13556012
Ref: 404313556012
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_function13556215
Ref: 404413556215
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_instance13557030
Ref: 404513557030
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_introspection_functions13557938
Ref: 404613557938
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_multicall_functions13558153
Ref: 404713558153
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler handle_request13558297
Ref: 404813558297
Node: Documentando servidor XMLRPC13558902
Ref: library/xmlrpc server documenting-xmlrpc-server13559079
Ref: 404913559079
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer13559430
Ref: 1c5d13559430
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler13559957
Ref: 404a13559957
Ref: library/xmlrpc server xmlrpc server DocXMLRPCRequestHandler13560105
Ref: 404b13560105
Node: Objetos de DocXMLRPCServer13560473
Ref: library/xmlrpc server doc-xmlrpc-servers13560653
Ref: 404c13560653
Ref: library/xmlrpc server docxmlrpcserver-objects13560653
Ref: 404d13560653
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_title13561137
Ref: 404e13561137
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_name13561330
Ref: 404f13561330
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_documentation13561554
Ref: 405013561554
Node: DocCGIXMLRPCRequestHandler13561811
Ref: library/xmlrpc server doccgixmlrpcrequesthandler13561954
Ref: 405113561954
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_title13562439
Ref: 405213562439
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_name13562643
Ref: 405313562643
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_documentation13562878
Ref: 405413562878
Node: ipaddress — Biblioteca de manipulação de IPv4/IPv613563146
Ref: library/ipaddress doc13563323
Ref: 405513563323
Ref: library/ipaddress ipaddress-ipv4-ipv6-manipulation-library13563323
Ref: 405613563323
Ref: library/ipaddress module-ipaddress13563323
Ref: 8413563323
Ref: library/ipaddress no-color13563323
Ref: 405713563323
Ref: ipaddress — Biblioteca de manipulação de IPv4/IPv6-Footnote-113564430
Node: Funções de fábrica de conveniência13564499
Ref: library/ipaddress convenience-factory-functions13564650
Ref: 405913564650
Ref: library/ipaddress ipaddress ip_address13564874
Ref: 405a13564874
Ref: library/ipaddress ipaddress ip_network13565487
Ref: 405b13565487
Ref: library/ipaddress ipaddress ip_interface13566249
Ref: 405c13566249
Node: Endereços IP13567175
Ref: library/ipaddress ip-addresses13567358
Ref: 405d13567358
Node: Objetos de endereço13567509
Ref: library/ipaddress address-objects13567622
Ref: 405e13567622
Ref: library/ipaddress ipaddress IPv4Address13568112
Ref: 50613568112
Ref: library/ipaddress ipaddress IPv4Address version13569515
Ref: 406013569515
Ref: library/ipaddress ipaddress IPv4Address max_prefixlen13569689
Ref: 406113569689
Ref: library/ipaddress ipaddress IPv4Address compressed13570098
Ref: 406213570098
Ref: library/ipaddress ipaddress IPv4Address exploded13570129
Ref: 406313570129
Ref: library/ipaddress ipaddress IPv4Address packed13570647
Ref: 406413570647
Ref: library/ipaddress ipaddress IPv4Address reverse_pointer13570892
Ref: 101513570892
Ref: library/ipaddress ipaddress IPv4Address is_multicast13571454
Ref: 406513571454
Ref: library/ipaddress ipaddress IPv4Address is_private13571633
Ref: 190313571633
Ref: library/ipaddress ipaddress IPv4Address is_global13573343
Ref: 115513573343
Ref: library/ipaddress ipaddress IPv4Address is_unspecified13574306
Ref: 406713574306
Ref: library/ipaddress ipaddress IPv4Address is_reserved13574477
Ref: 406813574477
Ref: library/ipaddress ipaddress IPv4Address is_loopback13575240
Ref: 406a13575240
Ref: library/ipaddress ipaddress IPv4Address is_link_local13575405
Ref: 406b13575405
Ref: library/ipaddress ipaddress IPv4Address ipv6_mapped13575546
Ref: 50513575546
Ref: library/ipaddress ipaddress IPv4Address __format__13575739
Ref: 406c13575739
Ref: library/ipaddress ipaddress IPv6Address13577037
Ref: 50713577037
Ref: library/ipaddress ipaddress IPv6Address compressed13578481
Ref: 406d13578481
Ref: library/ipaddress ipaddress IPv6Address exploded13578809
Ref: 406e13578809
Ref: library/ipaddress ipaddress IPv6Address packed13579107
Ref: 406f13579107
Ref: library/ipaddress ipaddress IPv6Address reverse_pointer13579134
Ref: 188c13579134
Ref: library/ipaddress ipaddress IPv6Address version13579170
Ref: 407013579170
Ref: library/ipaddress ipaddress IPv6Address max_prefixlen13579198
Ref: 407113579198
Ref: library/ipaddress ipaddress IPv6Address is_multicast13579232
Ref: 407213579232
Ref: library/ipaddress ipaddress IPv6Address is_private13579265
Ref: 190413579265
Ref: library/ipaddress ipaddress IPv6Address is_global13579296
Ref: 190513579296
Ref: library/ipaddress ipaddress IPv6Address is_unspecified13579364
Ref: 407313579364
Ref: library/ipaddress ipaddress IPv6Address is_reserved13579399
Ref: 407413579399
Ref: library/ipaddress ipaddress IPv6Address is_loopback13579431
Ref: 18ee13579431
Ref: library/ipaddress ipaddress IPv6Address is_link_local13579463
Ref: 407513579463
Ref: library/ipaddress ipaddress IPv6Address is_site_local13579497
Ref: 406913579497
Ref: library/ipaddress ipaddress IPv6Address ipv4_mapped13579881
Ref: 406613579881
Ref: library/ipaddress ipaddress IPv6Address scope_id13580170
Ref: b0013580170
Ref: library/ipaddress ipaddress IPv6Address sixtofour13580496
Ref: 407613580496
Ref: library/ipaddress ipaddress IPv6Address teredo13580807
Ref: 407713580807
Ref: library/ipaddress ipaddress IPv6Address __format__13581153
Ref: 407813581153
Ref: Objetos de endereço-Footnote-113581355
Ref: Objetos de endereço-Footnote-213581414
Ref: Objetos de endereço-Footnote-313581473
Ref: Objetos de endereço-Footnote-413581575
Ref: Objetos de endereço-Footnote-513581677
Ref: Objetos de endereço-Footnote-613581779
Ref: Objetos de endereço-Footnote-713581881
Ref: Objetos de endereço-Footnote-813581940
Ref: Objetos de endereço-Footnote-913581999
Ref: Objetos de endereço-Footnote-1013582085
Ref: Objetos de endereço-Footnote-1113582188
Ref: Objetos de endereço-Footnote-1213582248
Ref: Objetos de endereço-Footnote-1313582308
Ref: Objetos de endereço-Footnote-1413582368
Ref: Objetos de endereço-Footnote-1513582428
Ref: Objetos de endereço-Footnote-1613582488
Ref: Objetos de endereço-Footnote-1713582548
Ref: Objetos de endereço-Footnote-1813582608
Ref: Objetos de endereço-Footnote-1913582668
Ref: Objetos de endereço-Footnote-2013582728
Ref: Objetos de endereço-Footnote-2113582788
Ref: Objetos de endereço-Footnote-2213582848
Node: Conversão para strings e inteiros13582908
Ref: library/ipaddress conversion-to-strings-and-integers13583043
Ref: 407913583043
Node: Operadores<2>13583696
Ref: library/ipaddress operators13583802
Ref: 407a13583802
Node: Operadores de comparação13584113
Ref: library/ipaddress comparison-operators13584221
Ref: 407b13584221
Node: Operadores aritméticos13584864
Ref: library/ipaddress arithmetic-operators13584972
Ref: 407c13584972
Node: Definições de rede IP13585491
Ref: library/ipaddress ip-network-definitions13585656
Ref: 407d13585656
Node: Prefixo máscara de rede e máscara de host13586420
Ref: library/ipaddress prefix-net-mask-and-host-mask13586547
Ref: 407e13586547
Node: Objetos de rede13587370
Ref: library/ipaddress network-objects13587519
Ref: 407f13587519
Ref: library/ipaddress ipaddress IPv4Network13588024
Ref: 50813588024
Ref: library/ipaddress ipaddress IPv4Network version13590831
Ref: 408113590831
Ref: library/ipaddress ipaddress IPv4Network max_prefixlen13590859
Ref: 408213590859
Ref: library/ipaddress ipaddress IPv4Network is_multicast13590994
Ref: 408313590994
Ref: library/ipaddress ipaddress IPv4Network is_private13591027
Ref: 408413591027
Ref: library/ipaddress ipaddress IPv4Network is_unspecified13591058
Ref: 408513591058
Ref: library/ipaddress ipaddress IPv4Network is_reserved13591093
Ref: 408613591093
Ref: library/ipaddress ipaddress IPv4Network is_loopback13591125
Ref: 408713591125
Ref: library/ipaddress ipaddress IPv4Network is_link_local13591157
Ref: 408813591157
Ref: library/ipaddress ipaddress IPv4Network network_address13591377
Ref: 408913591377
Ref: library/ipaddress ipaddress IPv4Network broadcast_address13591551
Ref: 408a13591551
Ref: library/ipaddress ipaddress IPv4Network hostmask13591753
Ref: 408b13591753
Ref: library/ipaddress ipaddress IPv4Network netmask13591852
Ref: 408c13591852
Ref: library/ipaddress ipaddress IPv4Network with_prefixlen13591950
Ref: 408d13591950
Ref: library/ipaddress ipaddress IPv4Network compressed13591985
Ref: 408e13591985
Ref: library/ipaddress ipaddress IPv4Network exploded13592016
Ref: 408f13592016
Ref: library/ipaddress ipaddress IPv4Network with_netmask13592317
Ref: 409013592317
Ref: library/ipaddress ipaddress IPv4Network with_hostmask13592459
Ref: 409113592459
Ref: library/ipaddress ipaddress IPv4Network num_addresses13592602
Ref: 409213592602
Ref: library/ipaddress ipaddress IPv4Network prefixlen13592686
Ref: 409313592686
Ref: library/ipaddress ipaddress IPv4Network hosts13592768
Ref: 409413592768
Ref: library/ipaddress ipaddress IPv4Network overlaps13593790
Ref: 409513593790
Ref: library/ipaddress ipaddress IPv4Network address_exclude13593970
Ref: 409613593970
Ref: library/ipaddress ipaddress IPv4Network subnets13594575
Ref: 109613594575
Ref: library/ipaddress ipaddress IPv4Network supernet13596151
Ref: 109713596151
Ref: library/ipaddress ipaddress IPv4Network subnet_of13596989
Ref: 409713596989
Ref: library/ipaddress ipaddress IPv4Network supernet_of13597296
Ref: 409813597296
Ref: library/ipaddress ipaddress IPv4Network compare_networks13597609
Ref: 409913597609
Ref: library/ipaddress ipaddress IPv6Network13598316
Ref: 50913598316
Ref: library/ipaddress ipaddress IPv6Network version13600442
Ref: 409a13600442
Ref: library/ipaddress ipaddress IPv6Network max_prefixlen13600470
Ref: 409b13600470
Ref: library/ipaddress ipaddress IPv6Network is_multicast13600504
Ref: 409c13600504
Ref: library/ipaddress ipaddress IPv6Network is_private13600537
Ref: 409d13600537
Ref: library/ipaddress ipaddress IPv6Network is_unspecified13600568
Ref: 409e13600568
Ref: library/ipaddress ipaddress IPv6Network is_reserved13600603
Ref: 409f13600603
Ref: library/ipaddress ipaddress IPv6Network is_loopback13600635
Ref: 40a013600635
Ref: library/ipaddress ipaddress IPv6Network is_link_local13600667
Ref: 40a113600667
Ref: library/ipaddress ipaddress IPv6Network network_address13600701
Ref: 40a213600701
Ref: library/ipaddress ipaddress IPv6Network broadcast_address13600737
Ref: 40a313600737
Ref: library/ipaddress ipaddress IPv6Network hostmask13600775
Ref: 40a413600775
Ref: library/ipaddress ipaddress IPv6Network netmask13600804
Ref: 40a513600804
Ref: library/ipaddress ipaddress IPv6Network with_prefixlen13600832
Ref: 40a613600832
Ref: library/ipaddress ipaddress IPv6Network compressed13600867
Ref: 40a713600867
Ref: library/ipaddress ipaddress IPv6Network exploded13600898
Ref: 40a813600898
Ref: library/ipaddress ipaddress IPv6Network with_netmask13600927
Ref: 40a913600927
Ref: library/ipaddress ipaddress IPv6Network with_hostmask13600960
Ref: 40aa13600960
Ref: library/ipaddress ipaddress IPv6Network num_addresses13600994
Ref: 40ab13600994
Ref: library/ipaddress ipaddress IPv6Network prefixlen13601028
Ref: 40ac13601028
Ref: library/ipaddress ipaddress IPv6Network hosts13601058
Ref: 40ad13601058
Ref: library/ipaddress ipaddress IPv6Network overlaps13601567
Ref: 40ae13601567
Ref: library/ipaddress ipaddress IPv6Network address_exclude13601603
Ref: 40af13601603
Ref: library/ipaddress ipaddress IPv6Network subnets13601648
Ref: 40b013601648
Ref: library/ipaddress ipaddress IPv6Network supernet13601711
Ref: 40b113601711
Ref: library/ipaddress ipaddress IPv6Network subnet_of13601775
Ref: 40b213601775
Ref: library/ipaddress ipaddress IPv6Network supernet_of13601812
Ref: 40b313601812
Ref: library/ipaddress ipaddress IPv6Network compare_networks13601851
Ref: 40b413601851
Ref: library/ipaddress ipaddress IPv6Network is_site_local13601996
Ref: 40b513601996
Node: Operadores<3>13602210
Ref: library/ipaddress id113602307
Ref: 40b613602307
Node: Operadores lógicos13602637
Ref: library/ipaddress logical-operators13602725
Ref: 40b713602725
Node: Iteração13602970
Ref: library/ipaddress iteration13603104
Ref: 40b813603104
Node: Redes como contêineres de endereços13603966
Ref: library/ipaddress networks-as-containers-of-addresses13604072
Ref: 40b913604072
Node: Objetos de interface13604546
Ref: library/ipaddress interface-objects13604735
Ref: 40ba13604735
Ref: library/ipaddress ipaddress IPv4Interface13604909
Ref: 1ab013604909
Ref: library/ipaddress ipaddress IPv4Interface ip13605339
Ref: 40bb13605339
Ref: library/ipaddress ipaddress IPv4Interface network13605572
Ref: 40bc13605572
Ref: library/ipaddress ipaddress IPv4Interface with_prefixlen13605829
Ref: 40bd13605829
Ref: library/ipaddress ipaddress IPv4Interface with_netmask13606104
Ref: 40be13606104
Ref: library/ipaddress ipaddress IPv4Interface with_hostmask13606384
Ref: 40bf13606384
Ref: library/ipaddress ipaddress IPv6Interface13606662
Ref: 1ab113606662
Ref: library/ipaddress ipaddress IPv6Interface ip13607092
Ref: 40c013607092
Ref: library/ipaddress ipaddress IPv6Interface network13607115
Ref: 40c113607115
Ref: library/ipaddress ipaddress IPv6Interface with_prefixlen13607143
Ref: 40c213607143
Ref: library/ipaddress ipaddress IPv6Interface with_netmask13607178
Ref: 40c313607178
Ref: library/ipaddress ipaddress IPv6Interface with_hostmask13607211
Ref: 40c413607211
Node: Operadores<4>13607388
Ref: library/ipaddress id213607458
Ref: 40c513607458
Node: Operadores lógicos<2>13607759
Ref: library/ipaddress id313607831
Ref: 40c613607831
Node: Outras funções de nível de módulo13608545
Ref: library/ipaddress other-module-level-functions13608736
Ref: 40c713608736
Ref: library/ipaddress ipaddress v4_int_to_packed13608903
Ref: 40c813608903
Ref: library/ipaddress ipaddress v6_int_to_packed13609426
Ref: 40c913609426
Ref: library/ipaddress ipaddress summarize_address_range13609784
Ref: 109813609784
Ref: library/ipaddress ipaddress collapse_addresses13610720
Ref: 109913610720
Ref: library/ipaddress ipaddress get_mixed_type_key13611317
Ref: 40ca13611317
Node: Exceções personalizadas13611951
Ref: library/ipaddress custom-exceptions13612113
Ref: 40cb13612113
Ref: library/ipaddress ipaddress AddressValueError13612319
Ref: 405f13612319
Ref: library/ipaddress ipaddress NetmaskValueError13612431
Ref: 408013612431
Node: Serviços Multimídia13612550
Ref: library/mm doc13612709
Ref: 40cc13612709
Ref: library/mm mmedia13612709
Ref: 40cd13612709
Ref: library/mm multimedia-services13612709
Ref: 40ce13612709
Ref: library/mm no-color13612709
Ref: 40cf13612709
Node: wave — Read and write WAV files13613086
Ref: library/wave doc13613234
Ref: 40d013613234
Ref: library/wave module-wave13613234
Ref: 11913613234
Ref: library/wave wave-read-and-write-wav-files13613234
Ref: 40d113613234
Ref: library/wave wave open13613834
Ref: b3b13613834
Ref: library/wave wave Error13614919
Ref: 40d413614919
Ref: wave — Read and write WAV files-Footnote-113615173
Node: Objetos Wave_read13615237
Ref: library/wave id113615351
Ref: 40d513615351
Ref: library/wave wave-read-objects13615351
Ref: 40d613615351
Ref: library/wave wave Wave_read13615406
Ref: 33413615406
Ref: library/wave wave Wave_read close13615549
Ref: 40d213615549
Ref: library/wave wave Wave_read getnchannels13615746
Ref: 40d713615746
Ref: library/wave wave Wave_read getsampwidth13615875
Ref: 40d813615875
Ref: library/wave wave Wave_read getframerate13615960
Ref: 40d913615960
Ref: library/wave wave Wave_read getnframes13616043
Ref: 40da13616043
Ref: library/wave wave Wave_read getcomptype13616127
Ref: 40db13616127
Ref: library/wave wave Wave_read getcompname13616250
Ref: 40dc13616250
Ref: library/wave wave Wave_read getparams13616414
Ref: 11e013616414
Ref: library/wave wave Wave_read readframes13616632
Ref: 40dd13616632
Ref: library/wave wave Wave_read rewind13616765
Ref: 40de13616765
Ref: library/wave wave Wave_read getmarkers13617004
Ref: 33313617004
Ref: library/wave wave Wave_read getmark13617271
Ref: 33213617271
Ref: library/wave wave Wave_read setpos13617670
Ref: 40df13617670
Ref: library/wave wave Wave_read tell13617761
Ref: 40e013617761
Node: Objetos Wave_write13617837
Ref: library/wave id213617951
Ref: 40e113617951
Ref: library/wave wave-write-objects13617951
Ref: 11e113617951
Ref: library/wave wave Wave_write13618008
Ref: 33513618008
Ref: library/wave wave Wave_write close13619044
Ref: 40d313619044
Ref: library/wave wave Wave_write setnchannels13619391
Ref: 40e413619391
Ref: library/wave wave Wave_write setsampwidth13619466
Ref: 40e513619466
Ref: library/wave wave Wave_write setframerate13619548
Ref: 40e613619548
Ref: library/wave wave Wave_write setnframes13619739
Ref: 40e213619739
Ref: library/wave wave Wave_write setcomptype13620009
Ref: 40e713620009
Ref: library/wave wave Wave_write setparams13620203
Ref: 40e313620203
Ref: library/wave wave Wave_write tell13620433
Ref: 40e813620433
Ref: library/wave wave Wave_write writeframesraw13620636
Ref: 11e213620636
Ref: library/wave wave Wave_write writeframes13620843
Ref: 11e313620843
Node: colorsys — Conversões entre sistemas de cores13621502
Ref: library/colorsys doc13621650
Ref: 40e913621650
Ref: library/colorsys colorsys-conversions-between-color-systems13621650
Ref: 40ea13621650
Ref: library/colorsys module-colorsys13621650
Ref: 2013621650
Ref: library/colorsys no-color13621650
Ref: 40eb13621650
Ref: library/colorsys colorsys rgb_to_yiq13622686
Ref: 40ec13622686
Ref: library/colorsys colorsys yiq_to_rgb13622793
Ref: 40ed13622793
Ref: library/colorsys colorsys rgb_to_hls13622900
Ref: 19b113622900
Ref: library/colorsys colorsys hls_to_rgb13623007
Ref: 40ee13623007
Ref: library/colorsys colorsys rgb_to_hsv13623114
Ref: 40ef13623114
Ref: library/colorsys colorsys hsv_to_rgb13623221
Ref: 40f013623221
Ref: colorsys — Conversões entre sistemas de cores-Footnote-113623530
Node: Internacionalização13623598
Ref: library/i18n doc13623764
Ref: 40f113623764
Ref: library/i18n i18n13623764
Ref: 40f213623764
Ref: library/i18n internationalization13623764
Ref: 40f313623764
Ref: library/i18n no-color13623764
Ref: 40f413623764
Node: gettext — Serviços de internacionalização multilíngues13624259
Ref: library/gettext doc13624431
Ref: 40f513624431
Ref: library/gettext gettext-multilingual-internationalization-services13624431
Ref: 40f613624431
Ref: library/gettext module-gettext13624431
Ref: 6713624431
Ref: gettext — Serviços de internacionalização multilíngues-Footnote-113625465
Node: API do GNU gettext13625532
Ref: library/gettext gnu-gettext-api13625677
Ref: 40f713625677
Ref: library/gettext gettext bindtextdomain13626243
Ref: 40f813626243
Ref: library/gettext gettext textdomain13626825
Ref: 40f913626825
Ref: library/gettext gettext gettext13627092
Ref: 165813627092
Ref: library/gettext gettext dgettext13627374
Ref: 40fa13627374
Ref: library/gettext gettext ngettext13627520
Ref: 40fb13627520
Ref: library/gettext gettext dngettext13628292
Ref: 40fc13628292
Ref: library/gettext gettext pgettext13628452
Ref: bde13628452
Ref: library/gettext gettext dpgettext13628503
Ref: 40fd13628503
Ref: library/gettext gettext npgettext13628563
Ref: 40fe13628563
Ref: library/gettext gettext dnpgettext13628627
Ref: 40ff13628627
Ref: API do GNU gettext-Footnote-113629474
Ref: API do GNU gettext-Footnote-213629968
Node: API baseada em classe13630033
Ref: library/gettext class-based-api13630232
Ref: 410013630232
Ref: library/gettext gettext find13630782
Ref: 410213630782
Ref: library/gettext gettext translation13632310
Ref: c6113632310
Ref: library/gettext gettext install13633712
Ref: c6213633712
Ref: API baseada em classe-Footnote-113634791
Node: A classe NullTranslations13634870
Ref: library/gettext the-nulltranslations-class13634986
Ref: 410513634986
Ref: library/gettext gettext NullTranslations13635486
Ref: 410313635486
Ref: library/gettext gettext NullTranslations _parse13635920
Ref: 410713635920
Ref: library/gettext gettext NullTranslations add_fallback13636263
Ref: 410613636263
Ref: library/gettext gettext NullTranslations gettext13636544
Ref: 410813636544
Ref: library/gettext gettext NullTranslations ngettext13636764
Ref: 410913636764
Ref: library/gettext gettext NullTranslations pgettext13637055
Ref: 410a13637055
Ref: library/gettext gettext NullTranslations npgettext13637341
Ref: 410b13637341
Ref: library/gettext gettext NullTranslations info13637642
Ref: 410c13637642
Ref: library/gettext gettext NullTranslations charset13637788
Ref: 410d13637788
Ref: library/gettext gettext NullTranslations install13637891
Ref: 410413637891
Node: A classe GNUTranslations13639165
Ref: library/gettext the-gnutranslations-class13639333
Ref: 410e13639333
Ref: library/gettext gettext GNUTranslations13640994
Ref: 410113640994
Ref: library/gettext gettext GNUTranslations gettext13641127
Ref: 410f13641127
Ref: library/gettext gettext GNUTranslations ngettext13641562
Ref: 411013641562
Ref: library/gettext gettext GNUTranslations pgettext13642573
Ref: 411113642573
Ref: library/gettext gettext GNUTranslations npgettext13643085
Ref: 411213643085
Ref: A classe GNUTranslations-Footnote-113643809
Node: Suporte a catálogo de mensagens do Solaris13643867
Ref: library/gettext solaris-message-catalog-support13644030
Ref: 411313644030
Node: O construtor Catalog13644327
Ref: library/gettext the-catalog-constructor13644457
Ref: 411413644457
Node: Internacionalizando seus programas e módulos13645150
Ref: library/gettext i18n-howto13645349
Ref: 326113645349
Ref: library/gettext internationalizing-your-programs-and-modules13645349
Ref: 411513645349
Ref: Internacionalizando seus programas e módulos-Footnote-113649348
Ref: Internacionalizando seus programas e módulos-Footnote-213649381
Node: Localizando seu módulo13649424
Ref: library/gettext localizing-your-module13649565
Ref: 411613649565
Node: Localizando sua aplicação13650179
Ref: library/gettext localizing-your-application13650363
Ref: 411713650363
Node: Alterando os idiomas durante o uso13651146
Ref: library/gettext changing-languages-on-the-fly13651326
Ref: 411813651326
Node: Traduções adiadas13652036
Ref: library/gettext deferred-translations13652180
Ref: 411913652180
Node: Reconhecimentos<9>13654504
Ref: library/gettext acknowledgements13654673
Ref: 411a13654673
Node: locale — Serviços de internacionalização13655079
Ref: library/locale doc13655251
Ref: 411b13655251
Ref: library/locale locale-internationalization-services13655251
Ref: 411c13655251
Ref: library/locale module-locale13655251
Ref: 8a13655251
Ref: library/locale no-color13655251
Ref: 411d13655251
Ref: library/locale locale Error13656014
Ref: 411e13656014
Ref: library/locale locale setlocale13656152
Ref: 32613656152
Ref: library/locale locale localeconv13657692
Ref: dec13657692
Ref: library/locale locale nl_langinfo13666128
Ref: 45113666128
Ref: library/locale locale CODESET13666722
Ref: 412313666722
Ref: library/locale locale D_T_FMT13666867
Ref: 412413666867
Ref: library/locale locale D_FMT13667102
Ref: 412513667102
Ref: library/locale locale T_FMT13667328
Ref: 412613667328
Ref: library/locale locale T_FMT_AMPM13667554
Ref: 412713667554
Ref: library/locale locale DAY_113667714
Ref: 412813667714
Ref: library/locale locale DAY_213667742
Ref: 412913667742
Ref: library/locale locale DAY_313667770
Ref: 412a13667770
Ref: library/locale locale DAY_413667798
Ref: 412b13667798
Ref: library/locale locale DAY_513667826
Ref: 412c13667826
Ref: library/locale locale DAY_613667854
Ref: 412d13667854
Ref: library/locale locale DAY_713667882
Ref: 412e13667882
Ref: library/locale locale ABDAY_113668177
Ref: 412f13668177
Ref: library/locale locale ABDAY_213668207
Ref: 413013668207
Ref: library/locale locale ABDAY_313668237
Ref: 413113668237
Ref: library/locale locale ABDAY_413668267
Ref: 413213668267
Ref: library/locale locale ABDAY_513668297
Ref: 413313668297
Ref: library/locale locale ABDAY_613668327
Ref: 413413668327
Ref: library/locale locale ABDAY_713668357
Ref: 413513668357
Ref: library/locale locale MON_113668450
Ref: 413613668450
Ref: library/locale locale MON_213668478
Ref: 413713668478
Ref: library/locale locale MON_313668506
Ref: 413813668506
Ref: library/locale locale MON_413668534
Ref: 413913668534
Ref: library/locale locale MON_513668562
Ref: 413a13668562
Ref: library/locale locale MON_613668590
Ref: 413b13668590
Ref: library/locale locale MON_713668618
Ref: 413c13668618
Ref: library/locale locale MON_813668646
Ref: 413d13668646
Ref: library/locale locale MON_913668674
Ref: 413e13668674
Ref: library/locale locale MON_1013668702
Ref: 413f13668702
Ref: library/locale locale MON_1113668731
Ref: 414013668731
Ref: library/locale locale MON_1213668760
Ref: 414113668760
Ref: library/locale locale ABMON_113668840
Ref: 414213668840
Ref: library/locale locale ABMON_213668870
Ref: 414313668870
Ref: library/locale locale ABMON_313668900
Ref: 414413668900
Ref: library/locale locale ABMON_413668930
Ref: 414513668930
Ref: library/locale locale ABMON_513668960
Ref: 414613668960
Ref: library/locale locale ABMON_613668990
Ref: 414713668990
Ref: library/locale locale ABMON_713669020
Ref: 414813669020
Ref: library/locale locale ABMON_813669050
Ref: 414913669050
Ref: library/locale locale ABMON_913669080
Ref: 414a13669080
Ref: library/locale locale ABMON_1013669110
Ref: 414b13669110
Ref: library/locale locale ABMON_1113669141
Ref: 414c13669141
Ref: library/locale locale ABMON_1213669172
Ref: 414d13669172
Ref: library/locale locale RADIXCHAR13669264
Ref: 414e13669264
Ref: library/locale locale THOUSEP13669395
Ref: 414f13669395
Ref: library/locale locale YESEXPR13669518
Ref: 415013669518
Ref: library/locale locale NOEXPR13669713
Ref: 415113669713
Ref: library/locale locale CRNCYSTR13670184
Ref: 415213670184
Ref: library/locale locale ERA13670473
Ref: 415313670473
Ref: library/locale locale ERA_D_T_FMT13671311
Ref: 415413671311
Ref: library/locale locale ERA_D_FMT13671528
Ref: 415513671528
Ref: library/locale locale ERA_T_FMT13671736
Ref: 415613671736
Ref: library/locale locale ALT_DIGITS13671944
Ref: 415713671944
Ref: library/locale locale getdefaultlocale13672717
Ref: 32413672717
Ref: library/locale locale getlocale13674192
Ref: 32513674192
Ref: library/locale locale getpreferredencoding13674818
Ref: 75113674818
Ref: library/locale locale getencoding13676070
Ref: 32713676070
Ref: library/locale locale normalize13676926
Ref: 415b13676926
Ref: library/locale locale strcoll13677411
Ref: 415c13677411
Ref: library/locale locale strxfrm13677740
Ref: 174713677740
Ref: library/locale locale format_string13678125
Ref: 73713678125
Ref: library/locale locale currency13678888
Ref: 415e13678888
Ref: library/locale locale str13679582
Ref: 415f13679582
Ref: library/locale locale delocalize13679776
Ref: 101b13679776
Ref: library/locale locale localize13679974
Ref: 416013679974
Ref: library/locale locale atof13680213
Ref: 416113680213
Ref: library/locale locale atoi13680458
Ref: 416213680458
Ref: library/locale locale LC_CTYPE13680600
Ref: 415913680600
Ref: library/locale locale LC_COLLATE13681397
Ref: 415d13681397
Ref: library/locale locale LC_TIME13681605
Ref: 416313681605
Ref: library/locale locale LC_MONETARY13681762
Ref: 412213681762
Ref: library/locale locale LC_MESSAGES13681957
Ref: 416413681957
Ref: library/locale locale LC_NUMERIC13682481
Ref: 412013682481
Ref: library/locale locale LC_ALL13682832
Ref: 415813682832
Ref: library/locale locale CHAR_MAX13683376
Ref: 412113683376
Ref: locale — Serviços de internacionalização-Footnote-113684336
Ref: locale — Serviços de internacionalização-Footnote-213684402
Ref: locale — Serviços de internacionalização-Footnote-313684500
Ref: locale — Serviços de internacionalização-Footnote-413684542
Node: Histórico detalhes dicas dicas e advertências13684584
Ref: library/locale background-details-hints-tips-and-caveats13684742
Ref: 416513684742
Node: Nomes de localidades13687237
Ref: library/locale locale-name13687466
Ref: 411f13687466
Ref: library/locale locale-names13687466
Ref: 416613687466
Ref: Nomes de localidades-Footnote-113689292
Ref: Nomes de localidades-Footnote-213689442
Ref: Nomes de localidades-Footnote-313689492
Ref: Nomes de localidades-Footnote-413689548
Ref: Nomes de localidades-Footnote-513689728
Ref: Nomes de localidades-Footnote-613689824
Ref: Nomes de localidades-Footnote-713689870
Node: Para escritores de extensão e programas que incorporam Python13689912
Ref: library/locale embedding-locale13690126
Ref: 416713690126
Ref: library/locale for-extension-writers-and-programs-that-embed-python13690126
Ref: 416813690126
Node: Acesso a catálogos de mensagens13691012
Ref: library/locale access-to-message-catalogs13691197
Ref: 416913691197
Ref: library/locale locale-gettext13691197
Ref: 416a13691197
Ref: library/locale locale gettext13691281
Ref: 416b13691281
Ref: library/locale locale dgettext13691317
Ref: 416c13691317
Ref: library/locale locale dcgettext13691362
Ref: 416d13691362
Ref: library/locale locale textdomain13691418
Ref: 416e13691418
Ref: library/locale locale bindtextdomain13691460
Ref: 416f13691460
Ref: library/locale locale bind_textdomain_codeset13691511
Ref: 417013691511
Node: Interfaces gráficas de usuário com Tk13692541
Ref: library/tk doc13692716
Ref: 417113692716
Ref: library/tk graphical-user-interfaces-with-tk13692716
Ref: 417213692716
Ref: library/tk no-color13692716
Ref: 417313692716
Ref: library/tk tkinter13692716
Ref: 417413692716
Ref: Interfaces gráficas de usuário com Tk-Footnote-113694780
Node: tkinter — Interface Python para Tcl/Tk13694832
Ref: library/tkinter doc13695008
Ref: 417513695008
Ref: library/tkinter module-tkinter13695008
Ref: f613695008
Ref: library/tkinter tkinter-python-interface-to-tcl-tk13695008
Ref: 417613695008
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-113698127
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-213698204
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-313698232
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-413698273
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-513698330
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-613698357
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-713698394
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-813698492
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-913698544
Node: Arquitetura13698603
Ref: library/tkinter architecture13698716
Ref: 417713698716
Ref: Arquitetura-Footnote-113701274
Node: Módulos Tkinter13701314
Ref: library/tkinter tkinter-modules13701463
Ref: 417913701463
Ref: library/tkinter tkinter Tk13701819
Ref: 18f013701819
Ref: library/tkinter tkinter Tk tk13704132
Ref: 417b13704132
Ref: library/tkinter tkinter Tk master13704410
Ref: 417c13704410
Ref: library/tkinter tkinter Tk children13704984
Ref: 417d13704984
Ref: library/tkinter tkinter Tcl13705192
Ref: 417a13705192
Ref: library/tkinter module-_tkinter13706887
Ref: 313706887
Node: Preservador de vida Tkinter13707851
Ref: library/tkinter tkinter-life-preserver13708008
Ref: 417e13708008
Node: Um programa Olá Mundo13708883
Ref: library/tkinter a-hello-world-program13709005
Ref: 417f13709005
Node: Conceitos importantes do Tk13710536
Ref: library/tkinter important-tk-concepts13710705
Ref: 418013710705
Node: Entendendo como Tkinter envolve Tcl/Tk13712218
Ref: library/tkinter understanding-how-tkinter-wraps-tcl-tk13712403
Ref: 418113712403
Node: Como é que eu…? Que opção faz…?13714633
Ref: library/tkinter how-do-i-what-option-does13714832
Ref: 418213714832
Node: Navegando no Manual de Referência Tcl/Tk13716750
Ref: library/tkinter navigating-the-tcl-tk-reference-manual13716902
Ref: 418313716902
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-113719224
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-213719281
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-313719340
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-413719393
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-513719449
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-613719508
Node: Modelo de threading13719562
Ref: library/tkinter threading-model13719720
Ref: 417813719720
Node: Referência Útil13723141
Ref: library/tkinter handy-reference13723294
Ref: 418413723294
Node: Opções de Definição13723594
Ref: library/tkinter setting-options13723693
Ref: 418513723693
Ref: library/tkinter tkinter-setting-options13723693
Ref: 418613723693
Ref: Opções de Definição-Footnote-113727251
Node: O Empacotador13727298
Ref: library/tkinter the-packer13727429
Ref: 418713727429
Node: Opções do Empacotador13729251
Ref: library/tkinter packer-options13729390
Ref: 418813729390
Node: Acoplando Variáveis de Widgets13730141
Ref: library/tkinter coupling-widget-variables13730290
Ref: 418913730290
Node: O Gerenciador de Janela13732591
Ref: library/tkinter the-window-manager13732749
Ref: 418a13732749
Node: Opções de Tipos de Dados do Tk13734274
Ref: library/tkinter tk-option-data-types13734421
Ref: 418b13734421
Node: Ligações e Eventos13737778
Ref: library/tkinter bindings-and-events13737920
Ref: 418c13737920
Ref: library/tkinter id213737920
Ref: 418d13737920
Ref: Ligações e Eventos-Footnote-113740942
Node: O Parâmetro index13740988
Ref: library/tkinter the-index-parameter13741105
Ref: 418e13741105
Node: Imagens13743268
Ref: library/tkinter images13743356
Ref: 418f13743356
Ref: Imagens-Footnote-113744797
Node: Tratadores de arquivos13744832
Ref: library/tkinter file-handlers13744957
Ref: 419013744957
Ref: library/tkinter tkinter-file-handlers13744957
Ref: 419113744957
Ref: library/tkinter tkinter Widget tk createfilehandler13746003
Ref: 419213746003
Ref: library/tkinter tkinter Widget tk deletefilehandler13746482
Ref: 419313746482
Ref: library/tkinter tkinter READABLE13746583
Ref: 419413746583
Ref: library/tkinter tkinter WRITABLE13746611
Ref: 419513746611
Ref: library/tkinter tkinter EXCEPTION13746639
Ref: 419613746639
Node: tkinter colorchooser — Diálogo de escolha de cor13746716
Ref: library/tkinter colorchooser doc13746946
Ref: 419713746946
Ref: library/tkinter colorchooser module-tkinter colorchooser13746946
Ref: f713746946
Ref: library/tkinter colorchooser no-color13746946
Ref: 419813746946
Ref: library/tkinter colorchooser tkinter-colorchooser-color-choosing-dialog13746946
Ref: 419913746946
Ref: library/tkinter colorchooser tkinter colorchooser Chooser13747466
Ref: 419a13747466
Ref: library/tkinter colorchooser tkinter colorchooser askcolor13747533
Ref: 419c13747533
Ref: tkinter colorchooser — Diálogo de escolha de cor-Footnote-113747955
Node: tkinter font — Invólucro de fontes Tkinter13748036
Ref: library/tkinter font doc13748243
Ref: 419d13748243
Ref: library/tkinter font module-tkinter font13748243
Ref: fb13748243
Ref: library/tkinter font no-color13748243
Ref: 419e13748243
Ref: library/tkinter font tkinter-font-tkinter-font-wrapper13748243
Ref: 419f13748243
Ref: library/tkinter font tkinter font NORMAL13748639
Ref: 41a013748639
Ref: library/tkinter font tkinter font BOLD13748669
Ref: 41a113748669
Ref: library/tkinter font tkinter font ITALIC13748697
Ref: 41a213748697
Ref: library/tkinter font tkinter font ROMAN13748727
Ref: 41a313748727
Ref: library/tkinter font tkinter font Font13748757
Ref: 1bad13748757
Ref: library/tkinter font tkinter font Font actual13750233
Ref: 41a413750233
Ref: library/tkinter font tkinter font Font cget13750331
Ref: 41a513750331
Ref: library/tkinter font tkinter font Font config13750406
Ref: 41a613750406
Ref: library/tkinter font tkinter font Font copy13750484
Ref: 41a713750484
Ref: library/tkinter font tkinter font Font measure13750566
Ref: 41a813750566
Ref: library/tkinter font tkinter font Font metrics13750881
Ref: 41a913750881
Ref: library/tkinter font tkinter font families13751527
Ref: 41aa13751527
Ref: library/tkinter font tkinter font names13751641
Ref: 41ab13751641
Ref: library/tkinter font tkinter font nametofont13751732
Ref: 1baf13751732
Ref: tkinter font — Invólucro de fontes Tkinter-Footnote-113751976
Node: Diálogos Tkinter13752048
Ref: library/dialog doc13752257
Ref: 41ac13752257
Ref: library/dialog no-color13752257
Ref: 41ad13752257
Ref: library/dialog tkinter-dialogs13752257
Ref: 41ae13752257
Node: tkinter simpledialog — Diálogos de entrada padrão do Tkinter13752701
Ref: library/dialog module-tkinter simpledialog13752893
Ref: fe13752893
Ref: library/dialog tkinter-simpledialog-standard-tkinter-input-dialogs13752893
Ref: 41af13752893
Ref: library/dialog tkinter simpledialog askfloat13753320
Ref: 41b013753320
Ref: library/dialog tkinter simpledialog askinteger13753386
Ref: 1bb013753386
Ref: library/dialog tkinter simpledialog askstring13753454
Ref: 41b113753454
Ref: library/dialog tkinter simpledialog Dialog13753649
Ref: 41b213753649
Ref: library/dialog tkinter simpledialog Dialog body13753762
Ref: 41b313753762
Ref: library/dialog tkinter simpledialog Dialog buttonbox13753921
Ref: 41b413753921
Ref: tkinter simpledialog — Diálogos de entrada padrão do Tkinter-Footnote-113754115
Node: tkinter filedialog — Caixas de diálogo de seleção de arquivo13754196
Ref: library/dialog module-tkinter filedialog13754451
Ref: fa13754451
Ref: library/dialog tkinter-filedialog-file-selection-dialogs13754451
Ref: 41b513754451
Ref: tkinter filedialog — Caixas de diálogo de seleção de arquivo-Footnote-113754954
Node: Caixas de diálogo nativos de carregar/salvar13755033
Ref: library/dialog native-load-save-dialogs13755180
Ref: 41b613755180
Ref: library/dialog tkinter filedialog askopenfile13756363
Ref: 41b713756363
Ref: library/dialog tkinter filedialog askopenfiles13756430
Ref: 41b813756430
Ref: library/dialog tkinter filedialog asksaveasfile13756680
Ref: 41ba13756680
Ref: library/dialog tkinter filedialog askopenfilename13756868
Ref: 41bc13756868
Ref: library/dialog tkinter filedialog askopenfilenames13756929
Ref: 41bd13756929
Ref: library/dialog tkinter filedialog asksaveasfilename13757173
Ref: 41be13757173
Ref: library/dialog tkinter filedialog askdirectory13757336
Ref: 41bf13757336
Ref: library/dialog tkinter filedialog Open13757594
Ref: 41b913757594
Ref: library/dialog tkinter filedialog SaveAs13757655
Ref: 41bb13757655
Ref: library/dialog tkinter filedialog Directory13757991
Ref: 41c013757991
Ref: library/dialog tkinter filedialog FileDialog13758272
Ref: 41c113758272
Ref: library/dialog tkinter filedialog FileDialog cancel_command13758402
Ref: 41c213758402
Ref: library/dialog tkinter filedialog FileDialog dirs_double_event13758505
Ref: 41c313758505
Ref: library/dialog tkinter filedialog FileDialog dirs_select_event13758637
Ref: 41c413758637
Ref: library/dialog tkinter filedialog FileDialog files_double_event13758753
Ref: 41c513758753
Ref: library/dialog tkinter filedialog FileDialog files_select_event13758873
Ref: 41c613758873
Ref: library/dialog tkinter filedialog FileDialog filter_command13758994
Ref: 41c713758994
Ref: library/dialog tkinter filedialog FileDialog get_filter13759087
Ref: 41c813759087
Ref: library/dialog tkinter filedialog FileDialog get_selection13759179
Ref: 41c913759179
Ref: library/dialog tkinter filedialog FileDialog go13759266
Ref: 41ca13759266
Ref: library/dialog tkinter filedialog FileDialog ok_event13759439
Ref: 41cb13759439
Ref: library/dialog tkinter filedialog FileDialog quit13759541
Ref: 41cc13759541
Ref: library/dialog tkinter filedialog FileDialog set_filter13759663
Ref: 41cd13759663
Ref: library/dialog tkinter filedialog FileDialog set_selection13759743
Ref: 41ce13759743
Ref: library/dialog tkinter filedialog LoadFileDialog13759845
Ref: 41cf13759845
Ref: library/dialog tkinter filedialog LoadFileDialog ok_command13760022
Ref: 41d013760022
Ref: library/dialog tkinter filedialog SaveFileDialog13760159
Ref: 41d113760159
Ref: library/dialog tkinter filedialog SaveFileDialog ok_command13760337
Ref: 41d213760337
Node: tkinter commondialog — Modelos de janela de diálogo13760565
Ref: library/dialog module-tkinter commondialog13760747
Ref: f813760747
Ref: library/dialog tkinter-commondialog-dialog-window-templates13760747
Ref: 41d313760747
Ref: library/dialog tkinter commondialog Dialog13761157
Ref: 419b13761157
Ref: library/dialog tkinter commondialog Dialog show13761223
Ref: 41d413761223
Ref: tkinter commondialog — Modelos de janela de diálogo-Footnote-113761445
Node: tkinter messagebox — Prompts de mensagem do Tkinter13761526
Ref: library/tkinter messagebox doc13761740
Ref: 41d513761740
Ref: library/tkinter messagebox module-tkinter messagebox13761740
Ref: fc13761740
Ref: library/tkinter messagebox no-color13761740
Ref: 41d613761740
Ref: library/tkinter messagebox tkinter-messagebox-tkinter-message-prompts13761740
Ref: 41d713761740
Ref: library/tkinter messagebox tkinter messagebox Message13762495
Ref: 41dc13762495
Ref: library/tkinter messagebox tkinter messagebox Message show13764816
Ref: 41e113764816
Ref: library/tkinter messagebox tkinter messagebox showinfo13765148
Ref: 41e213765148
Ref: library/tkinter messagebox tkinter messagebox showwarning13765374
Ref: 41e313765374
Ref: library/tkinter messagebox tkinter messagebox showerror13765566
Ref: 41e413765566
Ref: library/tkinter messagebox tkinter messagebox askquestion13765787
Ref: 41e513765787
Ref: library/tkinter messagebox tkinter messagebox askokcancel13766041
Ref: 41e613766041
Ref: library/tkinter messagebox tkinter messagebox askretrycancel13766328
Ref: 41e713766328
Ref: library/tkinter messagebox tkinter messagebox askyesno13766627
Ref: 41e913766627
Ref: library/tkinter messagebox tkinter messagebox askyesnocancel13766879
Ref: 41ea13766879
Ref: library/tkinter messagebox messagebox-buttons13767182
Ref: 41dd13767182
Ref: library/tkinter messagebox tkinter messagebox ABORT13767214
Ref: 41eb13767214
Ref: library/tkinter messagebox tkinter messagebox RETRY13767260
Ref: 41e813767260
Ref: library/tkinter messagebox tkinter messagebox IGNORE13767306
Ref: 41ec13767306
Ref: library/tkinter messagebox tkinter messagebox OK13767354
Ref: 41d813767354
Ref: library/tkinter messagebox tkinter messagebox CANCEL13767394
Ref: 41d913767394
Ref: library/tkinter messagebox tkinter messagebox YES13767442
Ref: 41da13767442
Ref: library/tkinter messagebox tkinter messagebox NO13767484
Ref: 41db13767484
Ref: library/tkinter messagebox messagebox-types13767523
Ref: 41e013767523
Ref: library/tkinter messagebox tkinter messagebox ABORTRETRYIGNORE13767557
Ref: 41ed13767557
Ref: library/tkinter messagebox tkinter messagebox OKCANCEL13767847
Ref: 41ee13767847
Ref: library/tkinter messagebox tkinter messagebox RETRYCANCEL13767996
Ref: 41ef13767996
Ref: library/tkinter messagebox tkinter messagebox YESNO13768154
Ref: 41f013768154
Ref: library/tkinter messagebox tkinter messagebox YESNOCANCEL13768294
Ref: 41f113768294
Ref: library/tkinter messagebox messagebox-icons13768466
Ref: 41de13768466
Ref: library/tkinter messagebox tkinter messagebox ERROR13768487
Ref: 41f213768487
Ref: library/tkinter messagebox tkinter messagebox INFO13768533
Ref: 41df13768533
Ref: library/tkinter messagebox tkinter messagebox QUESTION13768577
Ref: 41f313768577
Ref: library/tkinter messagebox tkinter messagebox WARNING13768629
Ref: 41f413768629
Ref: tkinter messagebox — Prompts de mensagem do Tkinter-Footnote-113768715
Node: tkinter scrolledtext — Widget de texto de rolado13768794
Ref: library/tkinter scrolledtext doc13769037
Ref: 41f513769037
Ref: library/tkinter scrolledtext module-tkinter scrolledtext13769037
Ref: fd13769037
Ref: library/tkinter scrolledtext no-color13769037
Ref: 41f613769037
Ref: library/tkinter scrolledtext tkinter-scrolledtext-scrolled-text-widget13769037
Ref: 41f713769037
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText13770035
Ref: 41f813770035
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText frame13770102
Ref: 41f913770102
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText vbar13770200
Ref: 41fa13770200
Ref: tkinter scrolledtext — Widget de texto de rolado-Footnote-113770302
Node: tkinter dnd — Suporte para arrastar e soltar13770383
Ref: library/tkinter dnd doc13770613
Ref: 41fb13770613
Ref: library/tkinter dnd module-tkinter dnd13770613
Ref: f913770613
Ref: library/tkinter dnd no-color13770613
Ref: 41fc13770613
Ref: library/tkinter dnd tkinter-dnd-drag-and-drop-support13770613
Ref: 41fd13770613
Ref: library/tkinter dnd tkinter dnd DndHandler13772287
Ref: 41ff13772287
Ref: library/tkinter dnd tkinter dnd DndHandler cancel13772489
Ref: 420013772489
Ref: library/tkinter dnd tkinter dnd DndHandler finish13772580
Ref: 420113772580
Ref: library/tkinter dnd tkinter dnd DndHandler on_motion13772685
Ref: 420213772685
Ref: library/tkinter dnd tkinter dnd DndHandler on_release13772830
Ref: 420313772830
Ref: library/tkinter dnd tkinter dnd dnd_start13772961
Ref: 41fe13772961
Ref: tkinter dnd — Suporte para arrastar e soltar-Footnote-113773172
Node: tkinter ttk — Widgets temáticos do Tk13773243
Ref: library/tkinter ttk doc13773458
Ref: 420413773458
Ref: library/tkinter ttk module-tkinter ttk13773458
Ref: ff13773458
Ref: library/tkinter ttk no-color13773458
Ref: 420513773458
Ref: library/tkinter ttk tkinter-ttk-tk-themed-widgets13773458
Ref: 420613773458
Ref: tkinter ttk — Widgets temáticos do Tk-Footnote-113774461
Ref: tkinter ttk — Widgets temáticos do Tk-Footnote-213774532
Node: Usando Ttk13774585
Ref: library/tkinter ttk using-ttk13774692
Ref: 420713774692
Ref: Usando Ttk-Footnote-113775988
Node: Widgets Ttk13776052
Ref: library/tkinter ttk ttk-widgets13776174
Ref: 420813776174
Node: Widget13777318
Ref: library/tkinter ttk widget13777438
Ref: 420e13777438
Node: Opções padrão13777775
Ref: library/tkinter ttk standard-options13777874
Ref: 420f13777874
Node: Opções de ferramenta rolável13779463
Ref: library/tkinter ttk scrollable-widget-options13779590
Ref: 421013779590
Node: Opções de rótulo13780756
Ref: library/tkinter ttk label-options13780894
Ref: 421113780894
Node: Opções de compatibilidade13783397
Ref: library/tkinter ttk compatibility-options13783521
Ref: 421213783521
Node: Estados de Widget13784024
Ref: library/tkinter ttk widget-states13784139
Ref: 421413784139
Node: ttk Widget13785778
Ref: library/tkinter ttk ttk-widget13785857
Ref: 421513785857
Ref: library/tkinter ttk tkinter ttk Widget13786055
Ref: 420c13786055
Ref: library/tkinter ttk tkinter ttk Widget identify13786087
Ref: 421613786087
Ref: library/tkinter ttk tkinter ttk Widget instate13786329
Ref: 421713786329
Ref: library/tkinter ttk tkinter ttk Widget state13786674
Ref: 421313786674
Node: Combobox13787063
Ref: library/tkinter ttk combobox13787179
Ref: 421813787179
Node: Opções13787885
Ref: library/tkinter ttk options13787963
Ref: 421913787963
Node: Eventos virtuais13790309
Ref: library/tkinter ttk virtual-events13790408
Ref: 421a13790408
Node: ttk Combobox13790592
Ref: library/tkinter ttk ttk-combobox13790674
Ref: 421b13790674
Ref: library/tkinter ttk tkinter ttk Combobox13790721
Ref: 420913790721
Ref: library/tkinter ttk tkinter ttk Combobox current13790755
Ref: 421c13790755
Ref: library/tkinter ttk tkinter ttk Combobox get13791032
Ref: 421d13791032
Ref: library/tkinter ttk tkinter ttk Combobox set13791104
Ref: 421e13791104
Node: Spinbox13791189
Ref: library/tkinter ttk spinbox13791307
Ref: 421f13791307
Node: Opções<2>13792073
Ref: library/tkinter ttk id113792156
Ref: 422013792156
Node: Eventos virtuais<2>13794547
Ref: library/tkinter ttk id213794650
Ref: 422113794650
Node: ttk Spinbox13794862
Ref: library/tkinter ttk ttk-spinbox13794945
Ref: 422213794945
Ref: library/tkinter ttk tkinter ttk Spinbox13794990
Ref: d8113794990
Ref: library/tkinter ttk tkinter ttk Spinbox get13795023
Ref: 422313795023
Ref: library/tkinter ttk tkinter ttk Spinbox set13795102
Ref: 422413795102
Node: Notebook13795186
Ref: library/tkinter ttk notebook13795307
Ref: 422513795307
Node: Opções<3>13795669
Ref: library/tkinter ttk id313795745
Ref: 422613795745
Node: Tab Options13796825
Ref: library/tkinter ttk tab-options13796925
Ref: 422713796925
Node: Tab Identifiers13798812
Ref: library/tkinter ttk tab-identifiers13798915
Ref: 422913798915
Node: Virtual Events13799449
Ref: library/tkinter ttk id413799553
Ref: 422b13799553
Node: ttk Notebook13799697
Ref: library/tkinter ttk ttk-notebook13799777
Ref: 422c13799777
Ref: library/tkinter ttk tkinter ttk Notebook13799824
Ref: 420a13799824
Ref: library/tkinter ttk tkinter ttk Notebook add13799858
Ref: 422d13799858
Ref: library/tkinter ttk tkinter ttk Notebook forget13800144
Ref: 422e13800144
Ref: library/tkinter ttk tkinter ttk Notebook hide13800283
Ref: 422f13800283
Ref: library/tkinter ttk tkinter ttk Notebook identify13800594
Ref: 423013800594
Ref: library/tkinter ttk tkinter ttk Notebook index13800737
Ref: 422a13800737
Ref: library/tkinter ttk tkinter ttk Notebook insert13800917
Ref: 423113800917
Ref: library/tkinter ttk tkinter ttk Notebook select13801303
Ref: 423213801303
Ref: library/tkinter ttk tkinter ttk Notebook tab13801618
Ref: 423313801618
Ref: library/tkinter ttk tkinter ttk Notebook tabs13801965
Ref: 423413801965
Ref: library/tkinter ttk tkinter ttk Notebook enable_traversal13802054
Ref: 422813802054
Node: Progressbar13802906
Ref: library/tkinter ttk progressbar13803029
Ref: 423513803029
Node: Opções<4>13803472
Ref: library/tkinter ttk id513803555
Ref: 423613803555
Node: ttk Progressbar13805260
Ref: library/tkinter ttk ttk-progressbar13805343
Ref: 423713805343
Ref: library/tkinter ttk tkinter ttk Progressbar13805396
Ref: 420b13805396
Ref: library/tkinter ttk tkinter ttk Progressbar start13805433
Ref: 423813805433
Ref: library/tkinter ttk tkinter ttk Progressbar step13805702
Ref: 423913805702
Ref: library/tkinter ttk tkinter ttk Progressbar stop13805850
Ref: 423a13805850
Node: Separator13806036
Ref: library/tkinter ttk separator13806159
Ref: 423b13806159
Node: Opções<5>13806391
Ref: library/tkinter ttk id613806448
Ref: 423c13806448
Node: Sizegrip13806804
Ref: library/tkinter ttk sizegrip13806924
Ref: 423d13806924
Node: Platform-specific notes13807274
Ref: library/tkinter ttk platform-specific-notes13807355
Ref: 423e13807355
Node: Bugs13807611
Ref: library/tkinter ttk bugs13807692
Ref: 423f13807692
Node: Treeview13807965
Ref: library/tkinter ttk treeview13808087
Ref: 424013808087
Node: Opções<6>13809447
Ref: library/tkinter ttk id713809524
Ref: 424413809524
Node: Item Options13811945
Ref: library/tkinter ttk item-options13812042
Ref: 424513812042
Node: Tag Options13813100
Ref: library/tkinter ttk tag-options13813204
Ref: 424613813204
Node: Column Identifiers13813856
Ref: library/tkinter ttk column-identifiers13813965
Ref: 424113813965
Node: Virtual Events<2>13814837
Ref: library/tkinter ttk id813814947
Ref: 424713814947
Node: ttk Treeview13815779
Ref: library/tkinter ttk ttk-treeview13815862
Ref: 424913815862
Ref: library/tkinter ttk tkinter ttk Treeview13815909
Ref: c7a13815909
Ref: library/tkinter ttk tkinter ttk Treeview bbox13815943
Ref: 424a13815943
Ref: library/tkinter ttk tkinter ttk Treeview get_children13816381
Ref: 424b13816381
Ref: library/tkinter ttk tkinter ttk Treeview set_children13816548
Ref: 424c13816548
Ref: library/tkinter ttk tkinter ttk Treeview column13816941
Ref: 424d13816941
Ref: library/tkinter ttk tkinter ttk Treeview delete13818187
Ref: 424e13818187
Ref: library/tkinter ttk tkinter ttk Treeview detach13818334
Ref: 424f13818334
Ref: library/tkinter ttk tkinter ttk Treeview exists13818646
Ref: 425013818646
Ref: library/tkinter ttk tkinter ttk Treeview focus13818757
Ref: 424813818757
Ref: library/tkinter ttk tkinter ttk Treeview heading13818951
Ref: 425113818951
Ref: library/tkinter ttk tkinter ttk Treeview identify13819943
Ref: 425213819943
Ref: library/tkinter ttk tkinter ttk Treeview identify_row13820181
Ref: 425313820181
Ref: library/tkinter ttk tkinter ttk Treeview identify_column13820277
Ref: 425413820277
Ref: library/tkinter ttk tkinter ttk Treeview identify_region13820439
Ref: 425513820439
Ref: library/tkinter ttk tkinter ttk Treeview identify_element13821076
Ref: 425613821076
Ref: library/tkinter ttk tkinter ttk Treeview index13821205
Ref: 425713821205
Ref: library/tkinter ttk tkinter ttk Treeview insert13821334
Ref: 425813821334
Ref: library/tkinter ttk tkinter ttk Treeview item13822233
Ref: 425913822233
Ref: library/tkinter ttk tkinter ttk Treeview move13822612
Ref: 425a13822612
Ref: library/tkinter ttk tkinter ttk Treeview next13823051
Ref: 425b13823051
Ref: library/tkinter ttk tkinter ttk Treeview parent13823207
Ref: 425c13823207
Ref: library/tkinter ttk tkinter ttk Treeview prev13823359
Ref: 425d13823359
Ref: library/tkinter ttk tkinter ttk Treeview reattach13823520
Ref: 425e13823520
Ref: library/tkinter ttk tkinter ttk Treeview see13823623
Ref: 425f13823623
Ref: library/tkinter ttk tkinter ttk Treeview selection13823880
Ref: c7913823880
Ref: library/tkinter ttk tkinter ttk Treeview selection_set13824130
Ref: c7b13824130
Ref: library/tkinter ttk tkinter ttk Treeview selection_add13824337
Ref: 426013824337
Ref: library/tkinter ttk tkinter ttk Treeview selection_remove13824539
Ref: 426113824539
Ref: library/tkinter ttk tkinter ttk Treeview selection_toggle13824749
Ref: 426213824749
Ref: library/tkinter ttk tkinter ttk Treeview set13824976
Ref: 426313824976
Ref: library/tkinter ttk tkinter ttk Treeview tag_bind13825342
Ref: 426413825342
Ref: library/tkinter ttk tkinter ttk Treeview tag_configure13825613
Ref: 426513825613
Ref: library/tkinter ttk tkinter ttk Treeview tag_has13826043
Ref: 426613826043
Ref: library/tkinter ttk tkinter ttk Treeview xview13826329
Ref: 424213826329
Ref: library/tkinter ttk tkinter ttk Treeview yview13826426
Ref: 424313826426
Node: Ttk Styling13826521
Ref: library/tkinter ttk ttk-styling13826626
Ref: 426713826626
Ref: library/tkinter ttk ttkstyling13826626
Ref: 420d13826626
Ref: library/tkinter ttk tkinter ttk Style13827223
Ref: 55913827223
Ref: library/tkinter ttk tkinter ttk Style configure13827313
Ref: 426813827313
Ref: library/tkinter ttk tkinter ttk Style map13828041
Ref: 1bc013828041
Ref: library/tkinter ttk tkinter ttk Style lookup13829307
Ref: 426913829307
Ref: library/tkinter ttk tkinter ttk Style layout13829829
Ref: 426a13829829
Ref: library/tkinter ttk tkinter ttk Style element_create13831142
Ref: 55813831142
Ref: library/tkinter ttk tkinter ttk Style element_names13836517
Ref: 426c13836517
Ref: library/tkinter ttk tkinter ttk Style element_options13836623
Ref: 426d13836623
Ref: library/tkinter ttk tkinter ttk Style theme_create13836730
Ref: 426e13836730
Ref: library/tkinter ttk tkinter ttk Style theme_settings13837144
Ref: 426f13837144
Ref: library/tkinter ttk tkinter ttk Style theme_names13838621
Ref: 427013838621
Ref: library/tkinter ttk tkinter ttk Style theme_use13838702
Ref: 427113838702
Ref: Ttk Styling-Footnote-113839000
Node: Layouts13839062
Ref: library/tkinter ttk layouts13839117
Ref: 426b13839117
Ref: library/tkinter ttk layout13840189
Ref: 427213840189
Node: IDLE — editor e console Python<2>13840190
Ref: library/idle doc13840389
Ref: 427313840389
Ref: library/idle idle13840389
Ref: 120b13840389
Ref: library/idle idle-python-editor-and-shell13840389
Ref: 427413840389
Ref: library/idle no-color13840389
Ref: 427513840389
Ref: IDLE — editor e console Python<2>-Footnote-113841625
Node: Menus13841690
Ref: library/idle menus13841798
Ref: 427613841798
Node: Menu Arquivo Console e Editor13843128
Ref: library/idle file-menu-shell-and-editor13843234
Ref: 427713843234
Node: Edit menu Shell and Editor13845106
Ref: library/idle edit-menu-shell-and-editor13845251
Ref: 427813845251
Node: Format menu Editor window only13847010
Ref: library/idle format-menu13847153
Ref: 427b13847153
Ref: library/idle format-menu-editor-window-only13847153
Ref: 427c13847153
Node: Run menu Editor window only13848522
Ref: library/idle run-menu-editor-window-only13848667
Ref: 427d13848667
Ref: library/idle run-module13848746
Ref: 427e13848746
Ref: library/idle run-custom13849238
Ref: 428013849238
Ref: library/idle check-module13849498
Ref: 427f13849498
Ref: library/idle python-shell13849842
Ref: 428113849842
Node: Shell menu Shell window only13849904
Ref: library/idle shell-menu-shell-window-only13850047
Ref: 428213850047
Node: Debug menu Shell window only13850564
Ref: library/idle debug-menu-shell-window-only13850709
Ref: 428313850709
Node: Options menu Shell and Editor13851665
Ref: library/idle options-menu-shell-and-editor13851810
Ref: 428413851810
Node: Window menu Shell and Editor13853427
Ref: library/idle window-menu-shell-and-editor13853570
Ref: 428713853570
Node: Help menu Shell and Editor13853762
Ref: library/idle help-menu-shell-and-editor13853889
Ref: 428813853889
Node: Context menus13854638
Ref: library/idle context-menus13854728
Ref: 428a13854728
Node: Editing and Navigation13855902
Ref: library/idle editing-and-navigation13856045
Ref: 428b13856045
Ref: library/idle id113856045
Ref: 428c13856045
Node: Editor windows13856294
Ref: library/idle editor-windows13856392
Ref: 428d13856392
Node: Teclas de atalho13857014
Ref: library/idle key-bindings13857142
Ref: 428e13857142
Node: Automatic indentation13858569
Ref: library/idle automatic-indentation13858705
Ref: 428f13858705
Node: Busca e Substituição13859285
Ref: library/idle search-and-replace13859416
Ref: 429013859416
Node: Completions13859756
Ref: library/idle completions13859874
Ref: 427913859874
Ref: library/idle id213859874
Ref: 429113859874
Node: Calltips13862524
Ref: library/idle calltips13862632
Ref: 427a13862632
Ref: library/idle id313862632
Ref: 429213862632
Node: Code Context13864258
Ref: library/idle code-context13864367
Ref: 428613864367
Ref: library/idle id413864367
Ref: 429313864367
Node: Shell window13865255
Ref: library/idle shell-window13865367
Ref: 429413865367
Node: Text colors13867046
Ref: library/idle text-colors13867137
Ref: 429513867137
Node: Startup and Code Execution13868170
Ref: library/idle startup-and-code-execution13868328
Ref: 429613868328
Node: Uso na linha de comando<6>13869491
Ref: library/idle command-line-usage13869604
Ref: 429713869604
Ref: library/idle cmdoption-idle-c13869845
Ref: 429813869845
Ref: library/idle cmdoption-idle-d13870057
Ref: 429913870057
Ref: library/idle cmdoption-idle-e13870126
Ref: 429a13870126
Ref: library/idle cmdoption-idle-h13870171
Ref: 429b13870171
Ref: library/idle cmdoption-idle-i13870259
Ref: 429c13870259
Ref: library/idle cmdoption-idle-r13870302
Ref: 429d13870302
Ref: library/idle cmdoption-idle-s13870375
Ref: 429e13870375
Ref: library/idle cmdoption-idle-t13870550
Ref: 429f13870550
Ref: library/idle cmdoption-idle-013870615
Ref: 42a013870615
Node: Startup failure13871202
Ref: library/idle startup-failure13871341
Ref: 42a113871341
Node: Running user code13874528
Ref: library/idle running-user-code13874661
Ref: 42a213874661
Node: User output in Shell13877445
Ref: library/idle user-output-in-shell13877594
Ref: 42a313877594
Node: Developing tkinter applications13880680
Ref: library/idle developing-tkinter-applications13880840
Ref: 42a413880840
Node: Running without a subprocess13882089
Ref: library/idle running-without-a-subprocess13882220
Ref: 42a513882220
Node: Help and Preferences13883607
Ref: library/idle help-and-preferences13883789
Ref: 42a613883789
Node: Help sources13883936
Ref: library/idle help-sources13884033
Ref: 428913884033
Ref: library/idle id513884033
Ref: 42a713884033
Node: Setting preferences13884903
Ref: library/idle preferences13885022
Ref: 428513885022
Ref: library/idle setting-preferences13885022
Ref: 42a813885022
Node: IDLE on macOS13886031
Ref: library/idle idle-on-macos13886148
Ref: 42a913886148
Node: Extensions13886415
Ref: library/idle extensions13886504
Ref: 42aa13886504
Node: idlelib — implementation of IDLE application13886855
Ref: library/idle idlelib-implementation-of-idle-application13887002
Ref: 42ab13887002
Ref: library/idle module-idlelib13887002
Ref: 7713887002
Ref: idlelib — implementation of IDLE application-Footnote-113887710
Ref: idlelib — implementation of IDLE application-Footnote-213887774
Node: turtle — Gráficos tartaruga13887816
Ref: library/turtle doc13887966
Ref: 42ac13887966
Ref: library/turtle module-turtle13887966
Ref: 10713887966
Ref: library/turtle no-color13887966
Ref: 42ad13887966
Ref: library/turtle turtle-turtle-graphics13887966
Ref: 42ae13887966
Ref: turtle — Gráficos tartaruga-Footnote-113888787
Node: Introdução<12>13888853
Ref: library/turtle introduction13888958
Ref: 42af13888958
Ref: Introdução<12>-Footnote-113889234
Node: Começando<2>13889277
Ref: library/turtle get-started13889402
Ref: 42b013889402
Node: Tutorial<4>13890743
Ref: library/turtle turtle-tutorial13890865
Ref: 42b113890865
Ref: library/turtle tutorial13890865
Ref: 42b213890865
Node: Iniciando um ambiente da tartaruga13891152
Ref: library/turtle starting-a-turtle-environment13891258
Ref: 42b313891258
Node: Desenho básico13891643
Ref: library/turtle basic-drawing13891793
Ref: 42b413891793
Node: Controle da Caneta13892519
Ref: library/turtle pen-control13892622
Ref: 42b513892622
Node: A posição da tartaruga13892981
Ref: library/turtle the-turtle-s-position13893084
Ref: 42b613893084
Node: Criação de padrões algorítmicos13893589
Ref: library/turtle making-algorithmic-patterns13893696
Ref: 42b713893696
Node: Como fazer…13894821
Ref: library/turtle how-to13894964
Ref: 42b813894964
Ref: library/turtle turtle-how-to13894964
Ref: 42b913894964
Node: Comece o mais rápido possível13895388
Ref: library/turtle get-started-as-quickly-as-possible13895526
Ref: 42ba13895526
Ref: library/turtle note13896395
Ref: 42bb13896395
Node: Inicie e encerre o preenchimento automaticamente13896721
Ref: library/turtle automatically-begin-and-end-filling13896908
Ref: 42bc13896908
Node: Use o espaço de nomes do módulo turtle13897534
Ref: library/turtle use-the-turtle-module-namespace13897769
Ref: 42bf13897769
Node: Use o módulo gráfico de tartaruga dentro de um script com código específico13898830
Ref: library/turtle use-turtle-graphics-in-a-script13899073
Ref: 42c013899073
Node: Use o módulo gráficos da tartaruga orientado a objetos13899993
Ref: library/turtle use-object-oriented-turtle-graphics13900187
Ref: 42c113900187
Node: Referência Gráficos de Tartaruga13901568
Ref: library/turtle turtle-graphics-reference13901756
Ref: 42c413901756
Node: Métodos de Turtle13902105
Ref: library/turtle turtle-methods13902234
Ref: 42c513902234
Node: Métodos de TurtleScreen/Screen13905391
Ref: library/turtle methods-of-turtlescreen-screen13905520
Ref: 431013905520
Node: Métodos de RawTurtle/Turtle e funções correspondentes13906948
Ref: library/turtle methods-of-rawturtle-turtle-and-corresponding-functions13907185
Ref: 432f13907185
Node: Movimentos de Turtle13907656
Ref: library/turtle turtle-motion13907801
Ref: 433013907801
Ref: library/turtle turtle forward13907866
Ref: 34a613907866
Ref: library/turtle turtle fd13907906
Ref: 42c613907906
Ref: library/turtle turtle back13908368
Ref: 42c913908368
Ref: library/turtle turtle bk13908405
Ref: 42c813908405
Ref: library/turtle turtle backward13908440
Ref: 42c713908440
Ref: library/turtle turtle right13908833
Ref: 42ca13908833
Ref: library/turtle turtle rt13908868
Ref: 42cb13908868
Ref: library/turtle turtle left13909389
Ref: 42cc13909389
Ref: library/turtle turtle lt13909423
Ref: 42cd13909423
Ref: library/turtle turtle goto13909943
Ref: 42ce13909943
Ref: library/turtle turtle setpos13909981
Ref: 42cf13909981
Ref: library/turtle turtle setposition13910021
Ref: 42d013910021
Ref: library/turtle turtle teleport13910856
Ref: 19d313910856
Ref: library/turtle turtle setx13911997
Ref: 42d113911997
Ref: library/turtle turtle sety13912346
Ref: 42d213912346
Ref: library/turtle turtle setheading13912694
Ref: 42d313912694
Ref: library/turtle turtle seth13912737
Ref: 42d413912737
Ref: library/turtle turtle home13913579
Ref: 42d513913579
Ref: library/turtle turtle circle13914009
Ref: 42d613914009
Ref: library/turtle turtle dot13915481
Ref: 42d713915481
Ref: library/turtle turtle stamp13916075
Ref: 42d813916075
Ref: library/turtle turtle clearstamp13916420
Ref: 42d913916420
Ref: library/turtle turtle clearstamps13916951
Ref: 42da13916951
Ref: library/turtle turtle undo13917508
Ref: 42db13917508
Ref: library/turtle turtle speed13917878
Ref: 42dc13917878
Node: Fala o estado de Turtle13919038
Ref: library/turtle tell-turtle-s-state13919217
Ref: 433213919217
Ref: library/turtle turtle position13919288
Ref: 42dd13919288
Ref: library/turtle turtle pos13919321
Ref: 42de13919321
Ref: library/turtle turtle towards13919499
Ref: 42df13919499
Ref: library/turtle turtle xcor13920093
Ref: 42e013920093
Ref: library/turtle turtle ycor13920374
Ref: 42e113920374
Ref: library/turtle turtle heading13920662
Ref: 42e213920662
Ref: library/turtle turtle distance13920914
Ref: 42e313920914
Node: Configurações de medida13921535
Ref: library/turtle settings-for-measurement13921715
Ref: 433313921715
Ref: library/turtle turtle degrees13921788
Ref: 42e413921788
Ref: library/turtle turtle radians13922487
Ref: 42e513922487
Node: Controle da Caneta<2>13922823
Ref: library/turtle id113922999
Ref: 433413922999
Node: Estado do Desenho13923167
Ref: library/turtle drawing-state13923266
Ref: 433513923266
Ref: library/turtle turtle pendown13923325
Ref: 42e613923325
Ref: library/turtle turtle pd13923357
Ref: 42e713923357
Ref: library/turtle turtle down13923384
Ref: 42e813923384
Ref: library/turtle turtle penup13923458
Ref: 42e913923458
Ref: library/turtle turtle pu13923488
Ref: 42ea13923488
Ref: library/turtle turtle up13923515
Ref: 42eb13923515
Ref: library/turtle turtle pensize13923604
Ref: 42ec13923604
Ref: library/turtle turtle width13923646
Ref: 42ed13923646
Ref: library/turtle turtle pen13924179
Ref: 42ee13924179
Ref: library/turtle turtle isdown13926212
Ref: 42ef13926212
Node: Controle da Cor13926490
Ref: library/turtle color-control13926611
Ref: 433613926611
Ref: library/turtle turtle pencolor13926666
Ref: 42f113926666
Ref: library/turtle turtle fillcolor13928380
Ref: 42f213928380
Ref: library/turtle turtle color13929989
Ref: 42f013929989
Node: Preenchimento13931272
Ref: library/turtle filling13931408
Ref: 433713931408
Ref: library/turtle turtle filling13931459
Ref: 42f313931459
Ref: library/turtle turtle fill13931746
Ref: 2a213931746
Ref: library/turtle turtle begin_fill13932308
Ref: 42bd13932308
Ref: library/turtle turtle end_fill13932413
Ref: 42be13932413
Node: Mais sobre o Controle do Desenho13933009
Ref: library/turtle more-drawing-control13933121
Ref: 433813933121
Ref: library/turtle turtle reset13933210
Ref: 42f413933210
Ref: library/turtle turtle clear13933671
Ref: 42f513933671
Ref: library/turtle turtle write13933888
Ref: 42f613933888
Node: Estado da tartaruga13934680
Ref: library/turtle turtle-state13934849
Ref: 433913934849
Node: Visibilidade13934954
Ref: library/turtle visibility13935041
Ref: 433a13935041
Ref: library/turtle turtle hideturtle13935090
Ref: 42f913935090
Ref: library/turtle turtle ht13935125
Ref: 42fa13935125
Ref: library/turtle turtle showturtle13935374
Ref: 42f713935374
Ref: library/turtle turtle st13935409
Ref: 42f813935409
Ref: library/turtle turtle isvisible13935507
Ref: 42fb13935507
Node: Aparência13935797
Ref: library/turtle appearance13935884
Ref: 433b13935884
Ref: library/turtle turtle shape13935928
Ref: 42fc13935928
Ref: library/turtle turtle resizemode13936716
Ref: 42fd13936716
Ref: library/turtle turtle shapesize13937741
Ref: 42fe13937741
Ref: library/turtle turtle turtlesize13937833
Ref: 42ff13937833
Ref: library/turtle turtle shearfactor13938864
Ref: 430013938864
Ref: library/turtle turtle tilt13939595
Ref: 430113939595
Ref: library/turtle turtle tiltangle13940065
Ref: 92413940065
Ref: library/turtle turtle shapetransform13940856
Ref: 430213940856
Ref: library/turtle turtle get_shapepoly13941965
Ref: 430313941965
Node: Eventos Utilizados13942361
Ref: library/turtle using-events13942540
Ref: 433c13942540
Ref: library/turtle turtle onrelease13943511
Ref: 430513943511
Ref: library/turtle turtle ondrag13944594
Ref: 430613944594
Node: Métodos Especiais da Tartaruga13945563
Ref: library/turtle special-turtle-methods13945739
Ref: 433d13945739
Ref: library/turtle turtle poly13945825
Ref: 2a313945825
Ref: library/turtle turtle begin_poly13946183
Ref: 430713946183
Ref: library/turtle turtle end_poly13946349
Ref: 430813946349
Ref: library/turtle turtle get_poly13946559
Ref: 430913946559
Ref: library/turtle turtle clone13946967
Ref: 430a13946967
Ref: library/turtle turtle getturtle13947181
Ref: 430b13947181
Ref: library/turtle turtle getpen13947215
Ref: 430c13947215
Ref: library/turtle turtle getscreen13947484
Ref: 430d13947484
Ref: library/turtle turtle setundobuffer13947826
Ref: 430e13947826
Ref: library/turtle turtle undobufferentries13948299
Ref: 430f13948299
Node: Formas compostas13948460
Ref: library/turtle compound-shapes13948609
Ref: 433f13948609
Ref: library/turtle compoundshapes13948609
Ref: 434013948609
Node: métodos do TurtleScreen/Screen e as funções correspondentes13949692
Ref: library/turtle methods-of-turtlescreen-screen-and-corresponding-functions13949912
Ref: 434313949912
Node: Controle da Janela13950483
Ref: library/turtle window-control13950631
Ref: 434413950631
Ref: library/turtle turtle bgcolor13950692
Ref: 431113950692
Ref: library/turtle turtle bgpic13951129
Ref: 431213951129
Ref: library/turtle turtle clearscreen13952085
Ref: 431313952085
Ref: library/turtle turtle resetscreen13952616
Ref: 431413952616
Ref: library/turtle turtle screensize13952720
Ref: 431513952720
Ref: library/turtle turtle setworldcoordinates13953705
Ref: 431613953705
Node: Controle da animação13954888
Ref: library/turtle animation-control13955070
Ref: 434513955070
Ref: library/turtle turtle no_animation13955137
Ref: 2a413955137
Ref: library/turtle turtle delay13955568
Ref: 431713955568
Ref: library/turtle turtle tracer13956055
Ref: 431813956055
Ref: library/turtle turtle update13956844
Ref: 431913956844
Node: Usando os eventos de tela13957047
Ref: library/turtle using-screen-events13957230
Ref: 434613957230
Ref: library/turtle turtle listen13957305
Ref: 431a13957305
Ref: library/turtle turtle onkey13957552
Ref: 431b13957552
Ref: library/turtle turtle onkeyrelease13957590
Ref: 431c13957590
Ref: library/turtle turtle onkeypress13958268
Ref: 431d13958268
Ref: library/turtle turtle onclick13958967
Ref: 430413958967
Ref: library/turtle turtle onscreenclick13959019
Ref: 431e13959019
Ref: library/turtle turtle ontimer13960254
Ref: 431f13960254
Ref: library/turtle turtle mainloop13960746
Ref: 432013960746
Ref: library/turtle turtle done13960779
Ref: 432113960779
Node: Métodos de entrada13961151
Ref: library/turtle input-methods13961348
Ref: 434713961348
Ref: library/turtle turtle textinput13961410
Ref: 1b6513961410
Ref: library/turtle turtle numinput13961956
Ref: 1b6613961956
Node: Configurações e métodos especiais13963049
Ref: library/turtle settings-and-special-methods13963301
Ref: 434813963301
Ref: library/turtle turtle mode13963395
Ref: 432213963395
Ref: library/turtle turtle colormode13964718
Ref: 432313964718
Ref: library/turtle turtle getcanvas13965370
Ref: 432413965370
Ref: library/turtle turtle getshapes13965619
Ref: 432513965619
Ref: library/turtle turtle register_shape13965839
Ref: 432613965839
Ref: library/turtle turtle addshape13965894
Ref: 432713965894
Ref: library/turtle turtle turtles13967486
Ref: 432813967486
Ref: library/turtle turtle window_height13967651
Ref: 432913967651
Ref: library/turtle turtle window_width13967789
Ref: 432a13967789
Node: Métodos específico do Screen estes métodos não são herdados do TurtleScreen13967926
Ref: library/turtle methods-specific-to-screen-not-inherited-from-turtlescreen13968150
Ref: 434913968150
Ref: library/turtle screenspecific13968150
Ref: 434a13968150
Ref: library/turtle turtle bye13968332
Ref: 432b13968332
Ref: library/turtle turtle exitonclick13968409
Ref: 432c13968409
Ref: library/turtle turtle save13968908
Ref: 18c113968908
Ref: library/turtle turtle setup13969492
Ref: 432d13969492
Ref: library/turtle turtle title13971004
Ref: 432e13971004
Node: Classes Públicas13971299
Ref: library/turtle public-classes13971478
Ref: 434b13971478
Ref: library/turtle turtle RawTurtle13971536
Ref: 434c13971536
Ref: library/turtle turtle RawPen13971574
Ref: 434d13971574
Ref: library/turtle turtle Turtle13971863
Ref: 434f13971863
Ref: library/turtle turtle TurtleScreen13972076
Ref: 433e13972076
Ref: library/turtle turtle Screen13972283
Ref: 42c313972283
Ref: library/turtle turtle ScrolledCanvas13972393
Ref: 434e13972393
Ref: library/turtle turtle Shape13972730
Ref: 434113972730
Ref: library/turtle turtle Shape addcomponent13973548
Ref: 434213973548
Ref: library/turtle turtle Vec2D13974210
Ref: 433113974210
Node: Explicação<2>13974816
Ref: library/turtle explanation13974955
Ref: 435013974955
Ref: library/turtle turtle-explanation13974955
Ref: 42c213974955
Node: Ajuda e Configuração13976515
Ref: library/turtle help-and-configuration13976677
Ref: 435113976677
Node: Como usar a Ajuda13976866
Ref: library/turtle how-to-use-help13976997
Ref: 435213976997
Node: Tradução de docstrings em diferentes idiomas13979380
Ref: library/turtle translation-of-docstrings-into-different-languages13979554
Ref: 435313979554
Ref: library/turtle turtle write_docstringdict13979839
Ref: 435413979839
Node: Como configurar Screen and Turtles13980941
Ref: library/turtle how-to-configure-screen-and-turtles13981089
Ref: 435513981089
Node: turtledemo — Scripts de Demonstração13984173
Ref: library/turtle module-turtledemo13984364
Ref: 10813984364
Ref: library/turtle turtledemo-demo-scripts13984364
Ref: 435613984364
Node: Modificações desde a versão do Python 2 613990487
Ref: library/turtle changes-since-python-2-613990700
Ref: 435713990700
Node: Modificações desde a versão do Python 3 013991848
Ref: library/turtle changes-since-python-3-013992012
Ref: 435813992012
Node: Ferramentas de Desenvolvimento13993339
Ref: library/development doc13993519
Ref: 435913993519
Ref: library/development development13993519
Ref: 435a13993519
Ref: library/development development-tools13993519
Ref: 435b13993519
Ref: library/development no-color13993519
Ref: 435c13993519
Node: typing — Suporte para dicas de tipo13995569
Ref: library/typing doc13995743
Ref: 435d13995743
Ref: library/typing typing-support-for-type-hints13995743
Ref: 435e13995743
Ref: library/typing module-typing13995840
Ref: 10a13995840
Ref: typing — Suporte para dicas de tipo-Footnote-113998305
Ref: typing — Suporte para dicas de tipo-Footnote-213998371
Ref: typing — Suporte para dicas de tipo-Footnote-313998423
Ref: typing — Suporte para dicas de tipo-Footnote-413998490
Ref: typing — Suporte para dicas de tipo-Footnote-513998547
Node: Especificação para o sistema de tipos do Python13998592
Ref: library/typing relevant-peps13998740
Ref: 435f13998740
Ref: library/typing specification-for-the-python-type-system13998740
Ref: 436013998740
Ref: Especificação para o sistema de tipos do Python-Footnote-113999030
Node: Apelidos de tipo13999090
Ref: library/typing id213999254
Ref: 436113999254
Ref: library/typing type-aliases13999254
Ref: 67813999254
Node: NewType14000883
Ref: library/typing distinct14001031
Ref: 436214001031
Ref: library/typing newtype14001031
Ref: 436314001031
Ref: NewType-Footnote-114004426
Node: Anotações de objetos chamáveis14004468
Ref: library/typing annotating-callable-objects14004610
Ref: 436414004610
Ref: library/typing annotating-callables14004610
Ref: 256014004610
Ref: Anotações de objetos chamáveis-Footnote-114007866
Node: Genéricos14007908
Ref: library/typing generics14008058
Ref: 226014008058
Ref: library/typing id314008058
Ref: 436614008058
Node: Anotando tuplas14009447
Ref: library/typing annotating-tuples14009591
Ref: 256114009591
Ref: library/typing id414009591
Ref: 436714009591
Node: O tipo de objetos de classe14012100
Ref: library/typing the-type-of-class-objects14012265
Ref: 436814012265
Ref: library/typing type-of-class-objects14012265
Ref: 436914012265
Node: Anotando geradores e corrotinas14014002
Ref: library/typing annotating-generators-and-coroutines14014192
Ref: 283814014192
Ref: library/typing id514014192
Ref: 436b14014192
Node: Tipos genéricos definidos pelo usuário14016816
Ref: library/typing user-defined-generic-types14016989
Ref: 436c14016989
Ref: library/typing user-defined-generics14016989
Ref: 6eb14016989
Ref: Tipos genéricos definidos pelo usuário-Footnote-114023351
Node: O tipo Any14023393
Ref: library/typing the-any-type14023567
Ref: 436e14023567
Node: Subtipagem nominal vs estrutural14026487
Ref: library/typing nominal-vs-structural-subtyping14026644
Ref: 436f14026644
Ref: Subtipagem nominal vs estrutural-Footnote-114028509
Ref: Subtipagem nominal vs estrutural-Footnote-214028551
Ref: Subtipagem nominal vs estrutural-Footnote-314028593
Node: Conteúdo do módulo<7>14028635
Ref: library/typing module-contents14028836
Ref: 437014028836
Node: Tipos primitivos especiais14029193
Ref: library/typing special-typing-primitives14029301
Ref: 437114029301
Node: Tipos especiais14029506
Ref: library/typing special-types14029609
Ref: 437214029609
Ref: library/typing typing Any14029772
Ref: 8b014029772
Ref: library/typing typing AnyStr14030213
Ref: 5a514030213
Ref: library/typing typing LiteralString14032088
Ref: 7db14032088
Ref: library/typing typing Never14033379
Ref: 8ac14033379
Ref: library/typing typing NoReturn14033402
Ref: 437414033402
Ref: library/typing typing Self14034706
Ref: 7d814034706
Ref: library/typing typing TypeAlias14036661
Ref: 9c214036661
Ref: Tipos especiais-Footnote-114038405
Ref: Tipos especiais-Footnote-214038447
Ref: Tipos especiais-Footnote-314038489
Ref: Tipos especiais-Footnote-414038539
Ref: Tipos especiais-Footnote-514038581
Node: Formas especiais14038623
Ref: library/typing special-forms14038778
Ref: 437514038778
Ref: library/typing typing Union14038980
Ref: 2a714038980
Ref: library/typing typing Optional14040988
Ref: 8b714040988
Ref: library/typing typing Concatenate14041793
Ref: 9bd14041793
Ref: library/typing typing Literal14044270
Ref: a4b14044270
Ref: library/typing typing ClassVar14046525
Ref: 56614046525
Ref: library/typing typing Final14047891
Ref: 56714047891
Ref: library/typing typing Required14048751
Ref: 7d514048751
Ref: library/typing typing NotRequired14049071
Ref: 7d614049071
Ref: library/typing typing ReadOnly14049331
Ref: 48414049331
Ref: library/typing typing Annotated14049938
Ref: b2d14049938
Ref: library/typing typing TypeIs14056091
Ref: 48514056091
Ref: library/typing typing TypeGuard14060256
Ref: 48614060256
Ref: library/typing typing Unpack14062889
Ref: 18ea14062889
Ref: Formas especiais-Footnote-114064732
Ref: Formas especiais-Footnote-214064774
Ref: Formas especiais-Footnote-314064816
Ref: Formas especiais-Footnote-414064858
Ref: Formas especiais-Footnote-514064900
Ref: Formas especiais-Footnote-614064942
Ref: Formas especiais-Footnote-714064984
Ref: Formas especiais-Footnote-814065026
Ref: Formas especiais-Footnote-914065068
Ref: Formas especiais-Footnote-1014065110
Ref: Formas especiais-Footnote-1114065153
Node: Criando tipos genéricos e apelidos de tipo14065196
Ref: library/typing building-generic-types-and-type-aliases14065362
Ref: 437714065362
Ref: library/typing typing Generic14065913
Ref: 18ad14065913
Ref: library/typing typevar14067188
Ref: 436d14067188
Ref: library/typing typing TypeVar14067188
Ref: 48014067188
Ref: library/typing typing-constrained-typevar14071039
Ref: 437314071039
Ref: library/typing typing TypeVar __name__14071685
Ref: 437814071685
Ref: library/typing typing TypeVar __covariant__14071751
Ref: 437914071751
Ref: library/typing typing TypeVar __contravariant__14071860
Ref: 437a14071860
Ref: library/typing typing TypeVar __infer_variance__14071987
Ref: 437b14071987
Ref: library/typing typing TypeVar __bound__14072165
Ref: 437c14072165
Ref: library/typing typing TypeVar evaluate_bound14072563
Ref: 437d14072563
Ref: library/typing typing TypeVar __constraints__14073109
Ref: 438014073109
Ref: library/typing typing TypeVar evaluate_constraints14073534
Ref: 438114073534
Ref: library/typing typing TypeVar __default__14074108
Ref: 438214074108
Ref: library/typing typing TypeVar evaluate_default14074294
Ref: 438314074294
Ref: library/typing typing TypeVar has_default14074846
Ref: 438414074846
Ref: library/typing typevartuple14075529
Ref: 437614075529
Ref: library/typing typing TypeVarTuple14075529
Ref: 48214075529
Ref: library/typing typing TypeVarTuple __name__14080133
Ref: 438514080133
Ref: library/typing typing TypeVarTuple __default__14080210
Ref: 438614080210
Ref: library/typing typing TypeVarTuple evaluate_default14080405
Ref: 438714080405
Ref: library/typing typing TypeVarTuple has_default14080957
Ref: 438814080957
Ref: library/typing typing ParamSpec14081646
Ref: 48114081646
Ref: library/typing typing ParamSpec args14084455
Ref: 438a14084455
Ref: library/typing typing ParamSpec kwargs14084480
Ref: 438b14084480
Ref: library/typing typing ParamSpec __name__14085316
Ref: 438c14085316
Ref: library/typing typing ParamSpec __default__14085398
Ref: 438d14085398
Ref: library/typing typing ParamSpec evaluate_default14085595
Ref: 438e14085595
Ref: library/typing typing ParamSpec has_default14086147
Ref: 438f14086147
Ref: library/typing typing ParamSpecArgs14087625
Ref: 9bf14087625
Ref: library/typing typing ParamSpecKwargs14087656
Ref: 9c014087656
Ref: library/typing typing TypeAliasType14088437
Ref: 2ad14088437
Ref: library/typing typing TypeAliasType __name__14088727
Ref: 439014088727
Ref: library/typing typing TypeAliasType __module__14088888
Ref: 439114088888
Ref: library/typing typing TypeAliasType __type_params__14089089
Ref: 439214089089
Ref: library/typing typing TypeAliasType __value__14089468
Ref: 439314089468
Ref: library/typing typing TypeAliasType evaluate_value14090063
Ref: 439414090063
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-114091641
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-214091683
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-314091725
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-414091767
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-514091809
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-614091851
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-714091893
Node: Outras diretivas especiais14091935
Ref: library/typing other-special-directives14092076
Ref: 439514092076
Ref: library/typing typing NamedTuple14092306
Ref: 32f14092306
Ref: library/typing typing NewType14095881
Ref: ee514095881
Ref: library/typing typing NewType __module__14096370
Ref: 439614096370
Ref: library/typing typing NewType __name__14096469
Ref: 439714096469
Ref: library/typing typing NewType __supertype__14096530
Ref: 439814096530
Ref: library/typing typing Protocol14096744
Ref: 56414096744
Ref: library/typing typing runtime_checkable14098306
Ref: 66914098306
Ref: library/typing typing TypedDict14101356
Ref: 33014101356
Ref: library/typing typing TypedDict __total__14106420
Ref: 439914106420
Ref: library/typing typing TypedDict __required_keys__14107471
Ref: 439a14107471
Ref: library/typing typing TypedDict __optional_keys__14107547
Ref: 439b14107547
Ref: library/typing typing TypedDict __readonly_keys__14109437
Ref: 439c14109437
Ref: library/typing typing TypedDict __mutable_keys__14109713
Ref: 439d14109713
Ref: Outras diretivas especiais-Footnote-114111169
Ref: Outras diretivas especiais-Footnote-214111211
Ref: Outras diretivas especiais-Footnote-314111253
Ref: Outras diretivas especiais-Footnote-414111327
Node: Protocolos<4>14111369
Ref: library/typing protocols14111526
Ref: 439e14111526
Ref: library/typing typing SupportsAbs14111690
Ref: 439f14111690
Ref: library/typing typing SupportsBytes14111820
Ref: 7f514111820
Ref: library/typing typing SupportsComplex14111908
Ref: 7f414111908
Ref: library/typing typing SupportsFloat14112000
Ref: 43a014112000
Ref: library/typing typing SupportsIndex14112088
Ref: c2f14112088
Ref: library/typing typing SupportsInt14112209
Ref: c2e14112209
Ref: library/typing typing SupportsRound14112293
Ref: 43a114112293
Node: ABCs e protocolos para trabalhar com E/S14112428
Ref: library/typing abcs-and-protocols-for-working-with-i-o14112582
Ref: 43a214112582
Ref: library/typing typing-io14112582
Ref: 2fba14112582
Ref: library/typing typing IO14112685
Ref: 23714112685
Ref: library/typing typing TextIO14112716
Ref: 23814112716
Ref: library/typing typing BinaryIO14112751
Ref: 23914112751
Node: Funções e decoradores14113627
Ref: library/typing functions-and-decorators14113796
Ref: 43a314113796
Ref: library/typing typing cast14113863
Ref: 438914113863
Ref: library/typing typing assert_type14114195
Ref: 8af14114195
Ref: library/typing typing assert_never14115373
Ref: 8ab14115373
Ref: library/typing typing reveal_type14116902
Ref: 8ae14116902
Ref: library/typing typing dataclass_transform14118242
Ref: 6f014118242
Ref: library/typing overload14124406
Ref: 436514124406
Ref: library/typing typing overload14124406
Ref: 43a414124406
Ref: library/typing typing get_overloads14126077
Ref: 8b214126077
Ref: library/typing typing clear_overloads14126793
Ref: 8b314126793
Ref: library/typing typing final14127007
Ref: 8b114127007
Ref: library/typing typing no_type_check14128329
Ref: 8b814128329
Ref: library/typing typing no_type_check_decorator14128869
Ref: 33114128869
Ref: library/typing typing override14129352
Ref: 67114129352
Ref: library/typing typing type_check_only14130759
Ref: 43a514130759
Ref: Funções e decoradores-Footnote-114131556
Ref: Funções e decoradores-Footnote-214131625
Ref: Funções e decoradores-Footnote-314131667
Ref: Funções e decoradores-Footnote-414131709
Ref: Funções e decoradores-Footnote-514131751
Node: Auxiliares de introspecção14131793
Ref: library/typing introspection-helpers14131931
Ref: 43a614131931
Ref: library/typing typing get_type_hints14132008
Ref: 8b514132008
Ref: library/typing typing get_origin14134965
Ref: 2aa14134965
Ref: library/typing typing get_args14135876
Ref: 2ab14135876
Ref: library/typing typing get_protocol_members14136597
Ref: 56314136597
Ref: library/typing typing is_protocol14137078
Ref: 56514137078
Ref: library/typing typing is_typeddict14137391
Ref: a4c14137391
Ref: library/typing typing ForwardRef14137868
Ref: 1ae714137868
Ref: library/typing typing evaluate_forward_ref14138853
Ref: 178314138853
Ref: library/typing typing NoDefault14139811
Ref: 56214139811
Ref: Auxiliares de introspecção-Footnote-114140219
Ref: Auxiliares de introspecção-Footnote-214140261
Node: Constante14140303
Ref: library/typing constant14140441
Ref: 43a814140441
Ref: library/typing typing TYPE_CHECKING14140482
Ref: ee414140482
Ref: library/typing generic-concrete-collections14142026
Ref: 43a914142026
Ref: Constante-Footnote-114142062
Node: Apelidos descontinuados14142104
Ref: library/typing deprecated-aliases14142205
Ref: 43aa14142205
Ref: library/typing id614142205
Ref: 43ab14142205
Ref: Apelidos descontinuados-Footnote-114143955
Node: Apelidos de tipos embutidos14143997
Ref: library/typing aliases-to-built-in-types14144127
Ref: 43ac14144127
Ref: library/typing corresponding-to-built-in-types14144127
Ref: 43ad14144127
Ref: library/typing typing Dict14144204
Ref: 43ae14144204
Ref: library/typing typing List14144658
Ref: 43af14144658
Ref: library/typing typing Set14145140
Ref: 43b014145140
Ref: library/typing typing FrozenSet14145607
Ref: 43b114145607
Ref: library/typing typing Tuple14145915
Ref: 43b214145915
Ref: library/typing typing Type14146325
Ref: 436a14146325
Ref: Apelidos de tipos embutidos-Footnote-114146831
Ref: Apelidos de tipos embutidos-Footnote-214146873
Ref: Apelidos de tipos embutidos-Footnote-314146915
Ref: Apelidos de tipos embutidos-Footnote-414146957
Ref: Apelidos de tipos embutidos-Footnote-514146999
Ref: Apelidos de tipos embutidos-Footnote-614147041
Node: Apelidos para tipos em collections14147083
Ref: library/typing aliases-to-types-in-collections14147256
Ref: 43b314147256
Ref: library/typing corresponding-to-types-in-collections14147256
Ref: 43b414147256
Ref: library/typing typing DefaultDict14147355
Ref: 43b514147355
Ref: library/typing typing OrderedDict14147741
Ref: 43b614147741
Ref: library/typing typing ChainMap14148125
Ref: 43b714148125
Ref: library/typing typing Counter14148497
Ref: 43b814148497
Ref: library/typing typing Deque14148847
Ref: 43b914148847
Ref: Apelidos para tipos em collections-Footnote-114149217
Ref: Apelidos para tipos em collections-Footnote-214149259
Ref: Apelidos para tipos em collections-Footnote-314149301
Ref: Apelidos para tipos em collections-Footnote-414149343
Ref: Apelidos para tipos em collections-Footnote-514149385
Node: Apelidos de outros tipos concretos14149427
Ref: library/typing aliases-to-other-concrete-types14149620
Ref: 43ba14149620
Ref: library/typing other-concrete-types14149620
Ref: 43bb14149620
Ref: library/typing typing Pattern14149711
Ref: 92a14149711
Ref: library/typing typing Match14149738
Ref: 43bc14149738
Ref: library/typing typing Text14150343
Ref: 35d14150343
Ref: library/typing abstract-base-classes14151214
Ref: 43bd14151214
Ref: Apelidos de outros tipos concretos-Footnote-114151250
Node: Apelidos de contêineres ABC em collections abc14151292
Ref: library/typing aliases-to-container-abcs-in-collections-abc14151501
Ref: 43be14151501
Ref: library/typing corresponding-to-collections-in-collections-abc14151501
Ref: 43bf14151501
Ref: library/typing typing AbstractSet14151627
Ref: 43c014151627
Ref: library/typing typing ByteString14151929
Ref: 34314151929
Ref: library/typing typing Collection14153054
Ref: ee314153054
Ref: library/typing typing Container14153422
Ref: 43c114153422
Ref: library/typing typing ItemsView14153731
Ref: 43c214153731
Ref: library/typing typing KeysView14154082
Ref: 43c314154082
Ref: library/typing typing Mapping14154406
Ref: 43c414154406
Ref: library/typing typing MappingView14154728
Ref: 43c514154728
Ref: library/typing typing MutableMapping14155040
Ref: 43c614155040
Ref: library/typing typing MutableSequence14155376
Ref: 43c714155376
Ref: library/typing typing MutableSet14155710
Ref: 43c814155710
Ref: library/typing typing Sequence14156024
Ref: 43c914156024
Ref: library/typing typing ValuesView14156352
Ref: 43ca14156352
Ref: Apelidos de contêineres ABC em collections abc-Footnote-114156719
Ref: Apelidos de contêineres ABC em collections abc-Footnote-214156761
Ref: Apelidos de contêineres ABC em collections abc-Footnote-314156819
Ref: Apelidos de contêineres ABC em collections abc-Footnote-414156861
Ref: Apelidos de contêineres ABC em collections abc-Footnote-514156903
Ref: Apelidos de contêineres ABC em collections abc-Footnote-614156945
Ref: Apelidos de contêineres ABC em collections abc-Footnote-714156987
Ref: Apelidos de contêineres ABC em collections abc-Footnote-814157029
Ref: Apelidos de contêineres ABC em collections abc-Footnote-914157071
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1014157113
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1114157156
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1214157199
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1314157242
Node: Apelidos para ABCs assíncronas em collections abc14157285
Ref: library/typing aliases-to-asynchronous-abcs-in-collections-abc14157504
Ref: 43cb14157504
Ref: library/typing asynchronous-programming14157504
Ref: 43cc14157504
Ref: library/typing typing Coroutine14157634
Ref: 1bed14157634
Ref: library/typing typing AsyncGenerator14158230
Ref: 18e714158230
Ref: library/typing typing AsyncIterable14158940
Ref: 43cd14158940
Ref: library/typing typing AsyncIterator14159299
Ref: 43ce14159299
Ref: library/typing typing Awaitable14159664
Ref: 43cf14159664
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-114160042
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-214160084
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-314160126
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-414160168
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-514160210
Node: Apelidos para outros ABCs em collections abc14160252
Ref: library/typing aliases-to-other-abcs-in-collections-abc14160454
Ref: 43d014160454
Ref: library/typing corresponding-to-other-types-in-collections-abc14160454
Ref: 43d114160454
Ref: library/typing typing Iterable14160575
Ref: 43d214160575
Ref: library/typing typing Iterator14160881
Ref: 43d314160881
Ref: library/typing typing Callable14161188
Ref: 9be14161188
Ref: library/typing typing Generator14161823
Ref: 18e614161823
Ref: library/typing typing Hashable14162478
Ref: 70c14162478
Ref: library/typing typing Reversible14162676
Ref: 43d414162676
Ref: library/typing typing Sized14162987
Ref: 70d14162987
Ref: Apelidos para outros ABCs em collections abc-Footnote-114163212
Ref: Apelidos para outros ABCs em collections abc-Footnote-214163254
Ref: Apelidos para outros ABCs em collections abc-Footnote-314163296
Ref: Apelidos para outros ABCs em collections abc-Footnote-414163338
Ref: Apelidos para outros ABCs em collections abc-Footnote-514163380
Ref: Apelidos para outros ABCs em collections abc-Footnote-614163422
Node: Apelidos de ABCs da contextlib14163464
Ref: library/typing aliases-to-contextlib-abcs14163607
Ref: 43d514163607
Ref: library/typing context-manager-types14163607
Ref: 43d614163607
Ref: library/typing typing ContextManager14163698
Ref: e7f14163698
Ref: library/typing typing AsyncContextManager14164473
Ref: 18e414164473
Ref: Apelidos de ABCs da contextlib-Footnote-114165305
Ref: Apelidos de ABCs da contextlib-Footnote-214165347
Node: Cronograma de descontinuação dos principais recursos14165389
Ref: library/typing deprecation-timeline-of-major-features14165549
Ref: 43d714165549
Ref: Cronograma de descontinuação dos principais recursos-Footnote-114168368
Ref: Cronograma de descontinuação dos principais recursos-Footnote-214168410
Ref: Cronograma de descontinuação dos principais recursos-Footnote-314168465
Ref: Cronograma de descontinuação dos principais recursos-Footnote-414168520
Ref: Cronograma de descontinuação dos principais recursos-Footnote-514168575
Ref: Cronograma de descontinuação dos principais recursos-Footnote-614168617
Ref: Cronograma de descontinuação dos principais recursos-Footnote-714168673
Node: pydoc — Gerador de documentação e sistema de ajuda online14168729
Ref: library/pydoc doc14168945
Ref: 43d814168945
Ref: library/pydoc module-pydoc14168945
Ref: ba14168945
Ref: library/pydoc no-color14168945
Ref: 43d914168945
Ref: library/pydoc pydoc-documentation-generator-and-online-help-system14168945
Ref: 43da14168945
Ref: pydoc — Gerador de documentação e sistema de ajuda online-Footnote-114174437
Node: Modo de Desenvolvimento do Python14174502
Ref: library/devmode doc14174729
Ref: 43db14174729
Ref: library/devmode devmode14174729
Ref: 50214174729
Ref: library/devmode no-color14174729
Ref: 43dc14174729
Ref: library/devmode python-development-mode14174729
Ref: 43dd14174729
Node: Efeitos do Modo de Desenvolvimento do Python14175502
Ref: library/devmode effects-of-the-python-development-mode14175651
Ref: 43de14175651
Node: Exemplo de ResourceWarning14179809
Ref: library/devmode resourcewarning-example14180016
Ref: 43df14180016
Node: Exemplo de erro de descritor de arquivo inválido14181991
Ref: library/devmode bad-file-descriptor-error-example14182145
Ref: 43e014182145
Ref: Exemplo de erro de descritor de arquivo inválido-Footnote-114183769
Node: doctest — Teste exemplos interativos de Python14183834
Ref: library/doctest doc14184035
Ref: 43e114184035
Ref: library/doctest doctest-test-interactive-python-examples14184035
Ref: 43e214184035
Ref: library/doctest module-doctest14184035
Ref: 3e14184035
Ref: library/doctest no-color14184035
Ref: 43e314184035
Ref: doctest — Teste exemplos interativos de Python-Footnote-114188614
Node: Uso simples verificando exemplos em Docstrings14188681
Ref: library/doctest doctest-simple-testmod14188880
Ref: 43e414188880
Ref: library/doctest simple-usage-checking-examples-in-docstrings14188880
Ref: 43e514188880
Node: Utilização comum Verificando exemplos em um arquivo texto14190408
Ref: library/doctest doctest-simple-testfile14190642
Ref: 43e814190642
Ref: library/doctest simple-usage-checking-examples-in-a-text-file14190642
Ref: 43e914190642
Node: Uso na linha de comando<7>14192800
Ref: library/doctest command-line-usage14193005
Ref: 43eb14193005
Ref: library/doctest doctest-cli14193005
Ref: 43e614193005
Ref: library/doctest cmdoption-doctest-v14193225
Ref: 43ec14193225
Ref: library/doctest cmdoption-doctest-verbose14193225
Ref: 43ed14193225
Ref: library/doctest cmdoption-doctest-o14193864
Ref: 43ee14193864
Ref: library/doctest cmdoption-doctest-option14193864
Ref: 43ef14193864
Ref: library/doctest cmdoption-doctest-f14194080
Ref: 43f014194080
Ref: library/doctest cmdoption-doctest-fail-fast14194080
Ref: 43f114194080
Node: Como ele funciona14194191
Ref: library/doctest doctest-how-it-works14194346
Ref: 43f214194346
Ref: library/doctest how-it-works14194346
Ref: 43f314194346
Node: Quais docstrings são examinadas?14195099
Ref: library/doctest doctest-which-docstrings14195244
Ref: 43f414195244
Ref: library/doctest which-docstrings-are-examined14195244
Ref: 43f514195244
Ref: library/doctest module __test__14195488
Ref: 43f614195488
Node: Como os exemplos de docstrings são reconhecidos?14197215
Ref: library/doctest doctest-finding-examples14197402
Ref: 43f714197402
Ref: library/doctest how-are-docstring-examples-recognized14197402
Ref: 43f814197402
Node: Qual é o contexto de execução?14200848
Ref: library/doctest doctest-execution-context14201026
Ref: 43fc14201026
Ref: library/doctest what-s-the-execution-context14201026
Ref: 43fd14201026
Node: E quanto às exceções?14201855
Ref: library/doctest doctest-exceptions14201999
Ref: 43fe14201999
Ref: library/doctest what-about-exceptions14201999
Ref: 43ff14201999
Ref: library/doctest option-flags-and-directives14206615
Ref: 440014206615
Ref: E quanto às exceções?-Footnote-114206652
Node: Flags opcionais14206852
Ref: library/doctest doctest-options14206973
Ref: 112914206973
Ref: library/doctest option-flags14206973
Ref: 440114206973
Ref: library/doctest doctest DONT_ACCEPT_TRUE_FOR_114207542
Ref: 440214207542
Ref: library/doctest doctest DONT_ACCEPT_BLANKLINE14208170
Ref: 440314208170
Ref: library/doctest doctest NORMALIZE_WHITESPACE14208623
Ref: 43f914208623
Ref: library/doctest doctest ELLIPSIS14209113
Ref: 165d14209113
Ref: library/doctest doctest IGNORE_EXCEPTION_DETAIL14209549
Ref: 150414209549
Ref: library/doctest doctest SKIP14211014
Ref: 440414211014
Ref: library/doctest doctest COMPARISON_FLAGS14211528
Ref: 440514211528
Ref: library/doctest doctest REPORT_UDIFF14211700
Ref: 165e14211700
Ref: library/doctest doctest REPORT_CDIFF14211856
Ref: 165f14211856
Ref: library/doctest doctest REPORT_NDIFF14212016
Ref: 166014212016
Ref: library/doctest doctest REPORT_ONLY_FIRST_FAILURE14212480
Ref: 440614212480
Ref: library/doctest doctest FAIL_FAST14213059
Ref: 112a14213059
Ref: library/doctest doctest REPORTING_FLAGS14213397
Ref: 440714213397
Ref: library/doctest doctest register_optionflag14213654
Ref: 440814213654
Node: Directives14214144
Ref: library/doctest directives14214250
Ref: 440b14214250
Ref: library/doctest doctest-directives14214250
Ref: 43fa14214250
Ref: library/doctest grammar-token-doctest-directive14214478
Ref: 440c14214478
Ref: library/doctest grammar-token-doctest-directive_options14214552
Ref: 440d14214552
Ref: library/doctest grammar-token-doctest-directive_option14214647
Ref: 440e14214647
Ref: library/doctest grammar-token-doctest-on_or_off14214733
Ref: 440f14214733
Ref: library/doctest grammar-token-doctest-directive_option_name14214771
Ref: 441014214771
Node: Avisos<2>14216875
Ref: library/doctest doctest-warnings14216957
Ref: 441114216957
Ref: library/doctest warnings14216957
Ref: 441214216957
Node: Basic API14218705
Ref: library/doctest basic-api14218849
Ref: 441314218849
Ref: library/doctest doctest-basic-api14218849
Ref: 43e714218849
Ref: library/doctest doctest testfile14219249
Ref: 43ea14219249
Ref: library/doctest doctest testmod14223198
Ref: 165c14223198
Ref: library/doctest doctest run_docstring_examples14224922
Ref: 441514224922
Node: API do Unittest14225900
Ref: library/doctest doctest-unittest-api14226039
Ref: 441614226039
Ref: library/doctest unittest-api14226039
Ref: 441714226039
Ref: library/doctest doctest DocFileSuite14226820
Ref: 441914226820
Ref: library/doctest doctest DocTestSuite14230691
Ref: fe914230691
Ref: library/doctest doctest set_unittest_reportflags14234024
Ref: 441c14234024
Node: Advanced API14235202
Ref: library/doctest advanced-api14235343
Ref: 441d14235343
Ref: library/doctest doctest-advanced-api14235343
Ref: 441e14235343
Node: DocTest Objects14237508
Ref: library/doctest doctest-doctest14237596
Ref: 442014237596
Ref: library/doctest doctest-objects14237596
Ref: 442114237596
Ref: library/doctest doctest DocTest14237649
Ref: 196714237649
Ref: library/doctest doctest DocTest examples14238066
Ref: 442214238066
Ref: library/doctest doctest DocTest globs14238240
Ref: 441b14238240
Ref: library/doctest doctest DocTest name14238574
Ref: 442314238574
Ref: library/doctest doctest DocTest filename14238766
Ref: 442414238766
Ref: library/doctest doctest DocTest lineno14238995
Ref: 175014238995
Ref: library/doctest doctest DocTest docstring14239272
Ref: 442514239272
Node: Example Objects14239470
Ref: library/doctest doctest-example14239588
Ref: 442614239588
Ref: library/doctest example-objects14239588
Ref: 442714239588
Ref: library/doctest doctest Example14239641
Ref: 441f14239641
Ref: library/doctest doctest Example source14240081
Ref: 442814240081
Ref: library/doctest doctest Example want14240324
Ref: 442914240324
Ref: library/doctest doctest Example exc_msg14240674
Ref: 442a14240674
Ref: library/doctest doctest Example lineno14241157
Ref: 442b14241157
Ref: library/doctest doctest Example indent14241387
Ref: 442c14241387
Ref: library/doctest doctest Example options14241579
Ref: 442d14241579
Node: DocTestFinder objects14241991
Ref: library/doctest doctest-doctestfinder14242115
Ref: 442e14242115
Ref: library/doctest doctestfinder-objects14242115
Ref: 442f14242115
Ref: library/doctest doctest DocTestFinder14242180
Ref: 18ec14242180
Ref: library/doctest doctest DocTestFinder find14243320
Ref: 19ae14243320
Node: DocTestParser objects14245445
Ref: library/doctest doctest-doctestparser14245573
Ref: 443014245573
Ref: library/doctest doctestparser-objects14245573
Ref: 443114245573
Ref: library/doctest doctest DocTestParser14245638
Ref: 43fb14245638
Ref: library/doctest doctest DocTestParser get_doctest14245873
Ref: 443214245873
Ref: library/doctest doctest DocTestParser get_examples14246262
Ref: 443314246262
Ref: library/doctest doctest DocTestParser parse14246601
Ref: 443414246601
Node: TestResults objects14246990
Ref: library/doctest testresults-objects14247118
Ref: 443514247118
Ref: library/doctest doctest TestResults14247179
Ref: 443614247179
Ref: library/doctest doctest TestResults failed14247232
Ref: 443714247232
Ref: library/doctest doctest TestResults attempted14247294
Ref: 443814247294
Ref: library/doctest doctest TestResults skipped14247362
Ref: 4ea14247362
Node: DocTestRunner objects14247465
Ref: library/doctest doctest-doctestrunner14247593
Ref: 443914247593
Ref: library/doctest doctestrunner-objects14247593
Ref: 443a14247593
Ref: library/doctest doctest DocTestRunner14247658
Ref: 440a14247658
Ref: library/doctest doctest DocTestRunner report_start14250099
Ref: 443b14250099
Ref: library/doctest doctest DocTestRunner report_success14250598
Ref: 443c14250598
Ref: library/doctest doctest DocTestRunner report_failure14251131
Ref: 443e14251131
Ref: library/doctest doctest DocTestRunner report_unexpected_exception14251654
Ref: 443d14251654
Ref: library/doctest doctest DocTestRunner run14252329
Ref: 4e814252329
Ref: library/doctest doctest DocTestRunner summarize14253400
Ref: 441414253400
Ref: library/doctest doctest DocTestRunner tries14253862
Ref: 443f14253862
Ref: library/doctest doctest DocTestRunner failures14253929
Ref: 444014253929
Ref: library/doctest doctest DocTestRunner skips14253996
Ref: 4e914253996
Node: OutputChecker objects14254100
Ref: library/doctest doctest-outputchecker14254200
Ref: 444114254200
Ref: library/doctest outputchecker-objects14254200
Ref: 444214254200
Ref: library/doctest doctest OutputChecker14254265
Ref: 440914254265
Ref: library/doctest doctest OutputChecker check_output14254761
Ref: 444314254761
Ref: library/doctest doctest OutputChecker output_difference14255253
Ref: 444414255253
Node: Depuração14255569
Ref: library/doctest debugging14255702
Ref: 444514255702
Ref: library/doctest doctest-debugging14255702
Ref: 444614255702
Ref: library/doctest doctest script_from_examples14257803
Ref: 444914257803
Ref: library/doctest doctest testsource14258790
Ref: 444a14258790
Ref: library/doctest doctest debug14259587
Ref: 444814259587
Ref: library/doctest doctest debug_src14260678
Ref: 444c14260678
Ref: library/doctest doctest DebugRunner14261552
Ref: 444714261552
Ref: library/doctest doctest DocTestFailure14262330
Ref: 444e14262330
Ref: library/doctest doctest DocTestFailure test14262693
Ref: 444f14262693
Ref: library/doctest doctest DocTestFailure example14262815
Ref: 445014262815
Ref: library/doctest doctest DocTestFailure got14262897
Ref: 445114262897
Ref: library/doctest doctest UnexpectedException14262968
Ref: 444d14262968
Ref: library/doctest doctest UnexpectedException test14263318
Ref: 445214263318
Ref: library/doctest doctest UnexpectedException example14263445
Ref: 445314263445
Ref: library/doctest doctest UnexpectedException exc_info14263532
Ref: 445414263532
Node: Soapbox14263692
Ref: library/doctest doctest-soapbox14263804
Ref: 445514263804
Ref: library/doctest soapbox14263804
Ref: 445614263804
Node: unittest — Unit testing framework14267645
Ref: library/unittest doc14267850
Ref: 445714267850
Ref: library/unittest module-unittest14267850
Ref: 10c14267850
Ref: library/unittest no-color14267850
Ref: 445814267850
Ref: library/unittest unittest-unit-testing-framework14267850
Ref: 445914267850
Ref: unittest — Unit testing framework-Footnote-114271418
Ref: unittest — Unit testing framework-Footnote-214271496
Ref: unittest — Unit testing framework-Footnote-314271589
Ref: unittest — Unit testing framework-Footnote-414271622
Ref: unittest — Unit testing framework-Footnote-514271686
Ref: unittest — Unit testing framework-Footnote-614271744
Ref: unittest — Unit testing framework-Footnote-714271774
Ref: unittest — Unit testing framework-Footnote-814271806
Ref: unittest — Unit testing framework-Footnote-914271850
Node: Exemplo Básico14271884
Ref: library/unittest basic-example14272012
Ref: 445b14272012
Ref: library/unittest unittest-minimal-example14272012
Ref: 445c14272012
Node: Interface de Linha de Comando<3>14275274
Ref: library/unittest command-line-interface14275425
Ref: 445e14275425
Ref: library/unittest unittest-command-line-interface14275425
Ref: 445f14275425
Node: Opções de linha de comando<4>14277175
Ref: library/unittest command-line-options14277275
Ref: 446114277275
Ref: library/unittest cmdoption-unittest-b14277417
Ref: 152c14277417
Ref: library/unittest cmdoption-unittest-buffer14277417
Ref: 446214277417
Ref: library/unittest cmdoption-unittest-c14277700
Ref: 152d14277700
Ref: library/unittest cmdoption-unittest-catch14277700
Ref: 446314277700
Ref: library/unittest cmdoption-unittest-f14278088
Ref: 152f14278088
Ref: library/unittest cmdoption-unittest-failfast14278088
Ref: 446514278088
Ref: library/unittest cmdoption-unittest-k14278177
Ref: 446614278177
Ref: library/unittest cmdoption-unittest-locals14278994
Ref: 446714278994
Ref: library/unittest cmdoption-unittest-durations14279061
Ref: 446814279061
Node: Test Discovery14279601
Ref: library/unittest test-discovery14279762
Ref: 446914279762
Ref: library/unittest unittest-test-discovery14279762
Ref: 446014279762
Ref: library/unittest cmdoption-unittest-discover-v14280681
Ref: 446a14280681
Ref: library/unittest cmdoption-unittest-discover-verbose14280681
Ref: 446b14280681
Ref: library/unittest cmdoption-unittest-discover-s14280729
Ref: 446c14280729
Ref: library/unittest cmdoption-unittest-discover-start-directory14280729
Ref: 446d14280729
Ref: library/unittest cmdoption-unittest-discover-p14280847
Ref: 446e14280847
Ref: library/unittest cmdoption-unittest-discover-pattern14280847
Ref: 446f14280847
Ref: library/unittest cmdoption-unittest-discover-t14280978
Ref: 447014280978
Ref: library/unittest cmdoption-unittest-discover-top-level-directory14280978
Ref: 447114280978
Node: Organizando código teste14283443
Ref: library/unittest organizing-test-code14283610
Ref: 447314283610
Ref: library/unittest organizing-tests14283610
Ref: 445d14283610
Node: Reutilizando códigos de teste antigos14288923
Ref: library/unittest legacy-unit-tests14289111
Ref: 447414289111
Ref: library/unittest re-using-old-test-code14289111
Ref: 447514289111
Node: Ignorando testes e falhas esperadas14290880
Ref: library/unittest skipping-tests-and-expected-failures14291097
Ref: 447614291097
Ref: library/unittest unittest-skipping14291097
Ref: 447714291097
Ref: library/unittest unittest skip14294342
Ref: 1c7514294342
Ref: library/unittest unittest skipIf14294510
Ref: 447a14294510
Ref: library/unittest unittest skipUnless14294623
Ref: 447b14294623
Ref: library/unittest unittest expectedFailure14294753
Ref: 447914294753
Ref: library/unittest unittest SkipTest14295097
Ref: 11da14295097
Node: Distinguindo iterações de teste utilizando subtestes14295696
Ref: library/unittest distinguishing-test-iterations-using-subtests14295894
Ref: 447c14295894
Ref: library/unittest subtests14295894
Ref: 11d814295894
Node: Classes e funções14298525
Ref: library/unittest classes-and-functions14298733
Ref: 447d14298733
Ref: library/unittest unittest-contents14298733
Ref: 447e14298733
Node: Casos de teste14298957
Ref: library/unittest test-cases14299050
Ref: 447f14299050
Ref: library/unittest testcase-objects14299050
Ref: 448014299050
Ref: library/unittest unittest TestCase14299101
Ref: 2b214299101
Ref: library/unittest unittest TestCase setUp14300538
Ref: 153414300538
Ref: library/unittest unittest TestCase tearDown14300963
Ref: 153514300963
Ref: library/unittest unittest TestCase setUpClass14301827
Ref: c3814301827
Ref: library/unittest unittest TestCase tearDownClass14302351
Ref: 153214302351
Ref: library/unittest unittest TestCase run14302885
Ref: 136214302885
Ref: library/unittest unittest TestCase skipTest14303589
Ref: 447814303589
Ref: library/unittest unittest TestCase subTest14303870
Ref: 11d714303870
Ref: library/unittest unittest TestCase debug14304491
Ref: 1b3814304491
Ref: library/unittest assert-methods14304713
Ref: 445a14304713
Ref: library/unittest unittest TestCase assertEqual14309168
Ref: 74114309168
Ref: library/unittest unittest TestCase assertNotEqual14310095
Ref: 74214310095
Ref: library/unittest unittest TestCase assertTrue14310294
Ref: 73f14310294
Ref: library/unittest unittest TestCase assertFalse14310340
Ref: 74014310340
Ref: library/unittest unittest TestCase assertIs14310891
Ref: 153614310891
Ref: library/unittest unittest TestCase assertIsNot14310944
Ref: 153714310944
Ref: library/unittest unittest TestCase assertIsNone14311115
Ref: 148614311115
Ref: library/unittest unittest TestCase assertIsNotNone14311163
Ref: 148714311163
Ref: library/unittest unittest TestCase assertIn14311308
Ref: 153f14311308
Ref: library/unittest unittest TestCase assertNotIn14311365
Ref: 154014311365
Ref: library/unittest unittest TestCase assertIsInstance14311531
Ref: 153814311531
Ref: library/unittest unittest TestCase assertNotIsInstance14311587
Ref: 153914311587
Ref: library/unittest unittest TestCase assertIsSubclass14311959
Ref: 2b514311959
Ref: library/unittest unittest TestCase assertNotIsSubclass14312022
Ref: 2b614312022
Ref: library/unittest unittest TestCase assertRaises14315558
Ref: 74514315558
Ref: library/unittest unittest TestCase assertRaisesRegex14317312
Ref: 74714317312
Ref: library/unittest unittest TestCase assertWarns14318383
Ref: 136014318383
Ref: library/unittest unittest TestCase assertWarnsRegex14320303
Ref: 136114320303
Ref: library/unittest unittest TestCase assertLogs14321287
Ref: a4f14321287
Ref: library/unittest unittest TestCase records14322483
Ref: 448414322483
Ref: library/unittest unittest TestCase output14322679
Ref: 448514322679
Ref: library/unittest unittest TestCase assertNoLogs14323294
Ref: a4e14323294
Ref: library/unittest unittest TestCase assertAlmostEqual14328608
Ref: 74314328608
Ref: library/unittest unittest TestCase assertNotAlmostEqual14328707
Ref: 74414328707
Ref: library/unittest unittest TestCase assertGreater14329928
Ref: 153a14329928
Ref: library/unittest unittest TestCase assertGreaterEqual14329986
Ref: 153b14329986
Ref: library/unittest unittest TestCase assertLess14330049
Ref: 153c14330049
Ref: library/unittest unittest TestCase assertLessEqual14330104
Ref: 153d14330104
Ref: library/unittest unittest TestCase assertRegex14330497
Ref: 74614330497
Ref: library/unittest unittest TestCase assertNotRegex14330551
Ref: 74814330551
Ref: library/unittest unittest TestCase assertCountEqual14331339
Ref: 142614331339
Ref: library/unittest unittest TestCase assertStartsWith14332023
Ref: 2b714332023
Ref: library/unittest unittest TestCase assertNotStartsWith14332081
Ref: 2b814332081
Ref: library/unittest unittest TestCase assertEndsWith14332346
Ref: 2b914332346
Ref: library/unittest unittest TestCase assertNotEndsWith14332402
Ref: 2ba14332402
Ref: library/unittest unittest TestCase assertHasAttr14332661
Ref: 2b314332661
Ref: library/unittest unittest TestCase assertNotHasAttr14332716
Ref: 2b414332716
Ref: library/unittest type-specific-methods14332899
Ref: 448314332899
Ref: library/unittest unittest TestCase addTypeEqualityFunc14333218
Ref: 154314333218
Ref: library/unittest unittest TestCase assertMultiLineEqual14335974
Ref: 153e14335974
Ref: library/unittest unittest TestCase assertSequenceEqual14336397
Ref: 148514336397
Ref: library/unittest unittest TestCase assertListEqual14337032
Ref: 148314337032
Ref: library/unittest unittest TestCase assertTupleEqual14337092
Ref: 148414337092
Ref: library/unittest unittest TestCase assertSetEqual14337548
Ref: 148114337548
Ref: library/unittest unittest TestCase assertDictEqual14338008
Ref: 148214338008
Ref: library/unittest other-methods-and-attrs14338374
Ref: 448614338374
Ref: library/unittest unittest TestCase fail14338465
Ref: 448714338465
Ref: library/unittest unittest TestCase failureException14338609
Ref: 441a14338609
Ref: library/unittest unittest TestCase longMessage14339023
Ref: 153014339023
Ref: library/unittest unittest TestCase maxDiff14339767
Ref: 142714339767
Ref: library/unittest unittest TestCase countTestCases14340477
Ref: 448814340477
Ref: library/unittest unittest TestCase defaultTestResult14340664
Ref: 448214340664
Ref: library/unittest unittest TestCase id14341097
Ref: 448914341097
Ref: library/unittest unittest TestCase shortDescription14341306
Ref: 448a14341306
Ref: library/unittest unittest TestCase addCleanup14341928
Ref: c6814341928
Ref: library/unittest unittest TestCase enterContext14342542
Ref: 8bd14342542
Ref: library/unittest unittest TestCase doCleanups14342877
Ref: 153314342877
Ref: library/unittest unittest TestCase addClassCleanup14343539
Ref: c3614343539
Ref: library/unittest unittest TestCase enterClassContext14344221
Ref: 8be14344221
Ref: library/unittest unittest TestCase doClassCleanups14344578
Ref: 448b14344578
Ref: library/unittest unittest IsolatedAsyncioTestCase14345290
Ref: 35e14345290
Ref: library/unittest unittest IsolatedAsyncioTestCase loop_factory14345509
Ref: 448c14345509
Ref: library/unittest unittest IsolatedAsyncioTestCase asyncSetUp14345769
Ref: 448d14345769
Ref: library/unittest unittest IsolatedAsyncioTestCase asyncTearDown14346206
Ref: 448e14346206
Ref: library/unittest unittest IsolatedAsyncioTestCase addAsyncCleanup14347049
Ref: 448f14347049
Ref: library/unittest unittest IsolatedAsyncioTestCase enterAsyncContext14347208
Ref: 8bf14347208
Ref: library/unittest unittest IsolatedAsyncioTestCase run14347575
Ref: 449014347575
Ref: library/unittest unittest FunctionTestCase14349314
Ref: 19b814349314
Node: Grouping tests14349793
Ref: library/unittest grouping-tests14349925
Ref: 449114349925
Ref: library/unittest testsuite-objects14349925
Ref: 449214349925
Ref: library/unittest unittest TestSuite14349976
Ref: fea14349976
Ref: library/unittest unittest TestSuite addTest14350924
Ref: 449314350924
Ref: library/unittest unittest TestSuite addTests14351045
Ref: 449414351045
Ref: library/unittest unittest TestSuite run14351422
Ref: 449514351422
Ref: library/unittest unittest TestSuite debug14351726
Ref: 449614351726
Ref: library/unittest unittest TestSuite countTestCases14352000
Ref: 449714352000
Ref: library/unittest unittest TestSuite __iter__14352165
Ref: 121f14352165
Node: Carregando e executando testes14353613
Ref: library/unittest loading-and-running-tests14353722
Ref: 449814353722
Ref: library/unittest unittest TestLoader14353805
Ref: 58c14353805
Ref: library/unittest unittest TestLoader errors14354316
Ref: 108214354316
Ref: library/unittest unittest TestLoader loadTestsFromTestCase14354807
Ref: 58e14354807
Ref: library/unittest unittest TestLoader loadTestsFromModule14355357
Ref: 58d14355357
Ref: library/unittest unittest TestLoader loadTestsFromName14356757
Ref: 154114356757
Ref: library/unittest unittest TestLoader loadTestsFromNames14358558
Ref: 449a14358558
Ref: library/unittest unittest TestLoader getTestCaseNames14358845
Ref: 58f14358845
Ref: library/unittest unittest TestLoader discover14359049
Ref: 11db14359049
Ref: library/unittest unittest TestLoader testMethodPrefix14362388
Ref: 449b14362388
Ref: library/unittest unittest TestLoader sortTestMethodsUsing14362673
Ref: 449c14362673
Ref: library/unittest unittest TestLoader suiteClass14362883
Ref: 154214362883
Ref: library/unittest unittest TestLoader testNamePatterns14363177
Ref: 449d14363177
Ref: library/unittest unittest TestResult14363895
Ref: 136314363895
Ref: library/unittest unittest TestResult errors14364762
Ref: 449e14364762
Ref: library/unittest unittest TestResult failures14364991
Ref: 449f14364991
Ref: library/unittest unittest TestResult skipped14365274
Ref: 44a014365274
Ref: library/unittest unittest TestResult expectedFailures14365476
Ref: 44a114365476
Ref: library/unittest unittest TestResult unexpectedSuccesses14365717
Ref: 44a214365717
Ref: library/unittest unittest TestResult collectedDurations14365881
Ref: 19bb14365881
Ref: library/unittest unittest TestResult shouldStop14366095
Ref: 44a314366095
Ref: library/unittest unittest TestResult testsRun14366228
Ref: 44a514366228
Ref: library/unittest unittest TestResult buffer14366306
Ref: 44a614366306
Ref: library/unittest unittest TestResult failfast14366761
Ref: 44a914366761
Ref: library/unittest unittest TestResult tb_locals14366992
Ref: 44aa14366992
Ref: library/unittest unittest TestResult wasSuccessful14367146
Ref: 44ab14367146
Ref: library/unittest unittest TestResult stop14367485
Ref: 44a414367485
Ref: library/unittest unittest TestResult startTest14368446
Ref: 44a714368446
Ref: library/unittest unittest TestResult stopTest14368546
Ref: 44a814368546
Ref: library/unittest unittest TestResult startTestRun14368682
Ref: 154414368682
Ref: library/unittest unittest TestResult stopTestRun14368809
Ref: 154514368809
Ref: library/unittest unittest TestResult addError14368934
Ref: 1b3b14368934
Ref: library/unittest unittest TestResult addFailure14369402
Ref: 1b3a14369402
Ref: library/unittest unittest TestResult addSuccess14369861
Ref: 44ac14369861
Ref: library/unittest unittest TestResult addSkip14370004
Ref: 1b3c14370004
Ref: library/unittest unittest TestResult addExpectedFailure14370301
Ref: 44ad14370301
Ref: library/unittest unittest TestResult addUnexpectedSuccess14370728
Ref: 44ae14370728
Ref: library/unittest unittest TestResult addSubTest14371035
Ref: 1b3d14371035
Ref: library/unittest unittest TestResult addDuration14371715
Ref: 19ef14371715
Ref: library/unittest unittest TextTestResult14371967
Ref: 74914371967
Ref: library/unittest unittest defaultTestLoader14372373
Ref: 449914372373
Ref: library/unittest unittest TextTestRunner14372628
Ref: 19ee14372628
Ref: library/unittest unittest TextTestRunner _makeResult14374046
Ref: 44b014374046
Ref: library/unittest unittest TextTestRunner run14374698
Ref: 44b114374698
Ref: library/unittest unittest main14375061
Ref: 11d914375061
Node: load_tests Protocol14378038
Ref: library/unittest id114378124
Ref: 447214378124
Ref: library/unittest load-tests-protocol14378124
Ref: 441814378124
Node: Classes e Módulos de Definição de Contexto14380805
Ref: library/unittest class-and-module-fixtures14380978
Ref: 448114380978
Node: setUpClass and tearDownClass14382984
Ref: library/unittest setupclass-and-teardownclass14383133
Ref: 44b214383133
Node: setUpModule and tearDownModule14384048
Ref: library/unittest setupmodule-and-teardownmodule14384197
Ref: 44b314384197
Ref: library/unittest unittest setUpModule14384280
Ref: c3714384280
Ref: library/unittest unittest addModuleCleanup14384811
Ref: c3514384811
Ref: library/unittest unittest enterModuleContext14385421
Ref: 8c014385421
Ref: library/unittest unittest doModuleCleanups14385748
Ref: 1ae014385748
Node: Tratamento de sinal14386403
Ref: library/unittest signal-handling14386548
Ref: 446414386548
Ref: library/unittest unittest installHandler14387796
Ref: 44b414387796
Ref: library/unittest unittest registerResult14388040
Ref: 44b514388040
Ref: library/unittest unittest removeResult14388536
Ref: 44b614388536
Ref: library/unittest unittest removeHandler14388762
Ref: 152e14388762
Node: unittest mock — mock object library14389152
Ref: library/unittest mock doc14389343
Ref: 44b714389343
Ref: library/unittest mock module-unittest mock14389343
Ref: 10d14389343
Ref: library/unittest mock no-color14389343
Ref: 44b814389343
Ref: library/unittest mock unittest-mock-mock-object-library14389343
Ref: 44b914389343
Ref: unittest mock — mock object library-Footnote-114391108
Ref: unittest mock — mock object library-Footnote-214391181
Node: Guia Rápido14391220
Ref: library/unittest mock quick-guide14391328
Ref: 44ba14391328
Node: A classe Mock14397043
Ref: library/unittest mock the-mock-class14397183
Ref: 44bf14397183
Ref: library/unittest mock unittest mock Mock14398270
Ref: c3414398270
Ref: library/unittest mock unittest mock Mock assert_called14401760
Ref: ee814401760
Ref: library/unittest mock unittest mock Mock assert_called_once14402062
Ref: ee914402062
Ref: library/unittest mock unittest mock Mock assert_called_with14402710
Ref: 1cb914402710
Ref: library/unittest mock unittest mock Mock assert_called_once_with14403095
Ref: 44c514403095
Ref: library/unittest mock unittest mock Mock assert_any_call14403777
Ref: 44c614403777
Ref: library/unittest mock unittest mock Mock assert_has_calls14404444
Ref: 195f14404444
Ref: library/unittest mock unittest mock Mock assert_not_called14405290
Ref: 108414405290
Ref: library/unittest mock unittest mock Mock reset_mock14405768
Ref: eea14405768
Ref: library/unittest mock unittest mock Mock mock_add_spec14407396
Ref: 44c814407396
Ref: library/unittest mock unittest mock Mock attach_mock14407722
Ref: 18a814407722
Ref: library/unittest mock unittest mock Mock configure_mock14408016
Ref: 44c414408016
Ref: library/unittest mock unittest mock Mock __dir__14409255
Ref: 44ca14409255
Ref: library/unittest mock unittest mock Mock _get_child_mock14409589
Ref: 44cc14409589
Ref: library/unittest mock unittest mock Mock called14409990
Ref: 44cd14409990
Ref: library/unittest mock unittest mock Mock call_count14410289
Ref: 44ce14410289
Ref: library/unittest mock unittest mock Mock return_value14410619
Ref: 44c314410619
Ref: library/unittest mock unittest mock Mock side_effect14411439
Ref: 44bb14411439
Ref: library/unittest mock unittest mock Mock call_args14413940
Ref: 1c2014413940
Ref: library/unittest mock unittest mock Mock call_args_list14415786
Ref: 44cf14415786
Ref: library/unittest mock unittest mock Mock method_calls14416828
Ref: 44c914416828
Ref: library/unittest mock unittest mock Mock mock_calls14417565
Ref: 44c714417565
Ref: library/unittest mock unittest mock Mock __class__14419102
Ref: 44d114419102
Ref: library/unittest mock unittest mock NonCallableMock14419860
Ref: 44c014419860
Ref: library/unittest mock unittest mock PropertyMock14422418
Ref: 44d214422418
Ref: library/unittest mock unittest mock AsyncMock14424319
Ref: c3314424319
Ref: library/unittest mock unittest mock AsyncMock assert_awaited14427193
Ref: 44d314427193
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_once14427929
Ref: 44d414427929
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_with14428493
Ref: 44d514428493
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_once_with14429164
Ref: 44d614429164
Ref: library/unittest mock unittest mock AsyncMock assert_any_await14429890
Ref: 44d714429890
Ref: library/unittest mock unittest mock AsyncMock assert_has_awaits14430534
Ref: 44d814430534
Ref: library/unittest mock unittest mock AsyncMock assert_not_awaited14431630
Ref: 44d914431630
Ref: library/unittest mock unittest mock AsyncMock reset_mock14431805
Ref: 44da14431805
Ref: library/unittest mock unittest mock AsyncMock await_count14432037
Ref: 44db14432037
Ref: library/unittest mock unittest mock AsyncMock await_args14432482
Ref: 44dc14432482
Ref: library/unittest mock unittest mock AsyncMock await_args_list14433100
Ref: 1c1f14433100
Ref: library/unittest mock unittest mock ThreadingMock14433811
Ref: 44dd14433811
Ref: library/unittest mock unittest mock ThreadingMock wait_until_called14434520
Ref: 44df14434520
Ref: library/unittest mock unittest mock ThreadingMock wait_until_any_call_with14435074
Ref: 44e014435074
Ref: library/unittest mock unittest mock ThreadingMock DEFAULT_TIMEOUT14435674
Ref: 44de14435674
Ref: A classe Mock-Footnote-114436010
Node: Fazendo chamadas14436432
Ref: library/unittest mock calling14436526
Ref: 44e114436526
Node: Deletando Atributos14439814
Ref: library/unittest mock deleting-attributes14439948
Ref: 44e214439948
Ref: library/unittest mock id214439948
Ref: 44e314439948
Node: Nomes de Mock e o atributo name14440725
Ref: library/unittest mock mock-names-and-the-name-attribute14440872
Ref: 44e414440872
Node: Anexando Mocks como Atributos14441462
Ref: library/unittest mock attaching-mocks-as-attributes14441581
Ref: 44e514441581
Node: Os criadores de patches14443446
Ref: library/unittest mock the-patchers14443608
Ref: 44e614443608
Node: patch14444258
Ref: library/unittest mock patch14444344
Ref: 44e714444344
Ref: library/unittest mock unittest mock patch14444491
Ref: 108814444491
Node: patch object14453487
Ref: library/unittest mock patch-object14453592
Ref: 44e914453592
Ref: library/unittest mock unittest mock patch object14453637
Ref: 185c14453637
Node: patch dict14455119
Ref: library/unittest mock patch-dict14455233
Ref: 44ea14455233
Ref: library/unittest mock unittest mock patch dict14455276
Ref: 18bb14455276
Node: patch multiple14459500
Ref: library/unittest mock patch-multiple14459632
Ref: 44ec14459632
Ref: library/unittest mock unittest mock patch multiple14459683
Ref: 44ed14459683
Node: métodos do patch start e stop14462393
Ref: library/unittest mock patch-methods-start-and-stop14462533
Ref: 44ee14462533
Ref: library/unittest mock start-and-stop14462533
Ref: 44ef14462533
Ref: library/unittest mock unittest mock patch stopall14465289
Ref: 44f014465289
Node: patch de embutidos14465398
Ref: library/unittest mock id414465535
Ref: 44f114465535
Ref: library/unittest mock patch-builtins14465535
Ref: 44f214465535
Node: TEST_PREFIX14465864
Ref: library/unittest mock id514465998
Ref: 44f314465998
Ref: library/unittest mock test-prefix14465998
Ref: 44eb14465998
Node: Aninhando Decoradores Patch14466881
Ref: library/unittest mock nesting-patch-decorators14467013
Ref: 44f414467013
Node: Onde fazer patch14467936
Ref: library/unittest mock id614468095
Ref: 44e814468095
Ref: library/unittest mock where-to-patch14468095
Ref: 44bc14468095
Node: Patching Descriptors and Proxy Objects14469868
Ref: library/unittest mock patching-descriptors-and-proxy-objects14469991
Ref: 44f514469991
Ref: Patching Descriptors and Proxy Objects-Footnote-114470432
Node: MagicMock and magic method support14470557
Ref: library/unittest mock magicmock-and-magic-method-support14470715
Ref: 44f614470715
Node: Simulando Métodos Mágicos14470863
Ref: library/unittest mock magic-methods14470980
Ref: 44bd14470980
Ref: library/unittest mock mocking-magic-methods14470980
Ref: 44f714470980
Ref: Simulando Métodos Mágicos-Footnote-114474909
Ref: Simulando Métodos Mágicos-Footnote-214475148
Node: Magic Mock14475269
Ref: library/unittest mock magic-mock14475386
Ref: 44f914475386
Ref: library/unittest mock unittest mock MagicMock14475532
Ref: 108514475532
Ref: library/unittest mock unittest mock NonCallableMagicMock14476017
Ref: 44c114476017
Node: Ajudantes14479359
Ref: library/unittest mock helpers14479551
Ref: 44fa14479551
Node: sentinel14479746
Ref: library/unittest mock sentinel14479816
Ref: 44fb14479816
Ref: library/unittest mock unittest mock sentinel14479855
Ref: d8d14479855
Node: DEFAULT14481017
Ref: library/unittest mock default14481103
Ref: 44fc14481103
Ref: library/unittest mock unittest mock DEFAULT14481140
Ref: 44c214481140
Node: chamada14481393
Ref: library/unittest mock call14481486
Ref: 44fd14481486
Ref: library/unittest mock unittest mock call14481523
Ref: 1c6a14481523
Ref: library/unittest mock unittest mock call call_list14482064
Ref: 44fe14482064
Ref: library/unittest mock calls-as-tuples14483017
Ref: 44d014483017
Node: create_autospec14484643
Ref: library/unittest mock create-autospec14484732
Ref: 44ff14484732
Ref: library/unittest mock unittest mock create_autospec14484785
Ref: 188614484785
Node: ANY14486102
Ref: library/unittest mock any14486194
Ref: 450014486194
Ref: library/unittest mock unittest mock ANY14486223
Ref: 1c6814486223
Node: FILTER_DIR14487385
Ref: library/unittest mock filter-dir14487471
Ref: 450114487471
Ref: library/unittest mock unittest mock FILTER_DIR14487514
Ref: 44cb14487514
Node: mock_open14489530
Ref: library/unittest mock mock-open14489640
Ref: 450214489640
Ref: library/unittest mock unittest mock mock_open14489681
Ref: 11dd14489681
Ref: mock_open-Footnote-114492534
Node: Especificação automática14492559
Ref: library/unittest mock auto-speccing14492672
Ref: 44be14492672
Ref: library/unittest mock autospeccing14492672
Ref: 450314492672
Ref: Especificação automática-Footnote-114501424
Node: Vedando mocks14501665
Ref: library/unittest mock sealing-mocks14501760
Ref: 450414501760
Ref: library/unittest mock unittest mock seal14501809
Ref: d8e14501809
Node: Order of precedence of side_effect return_value and wraps14502628
Ref: library/unittest mock order-of-precedence-of-side-effect-return-value-and-wraps14502777
Ref: 450514502777
Node: unittest mock — primeiros passos14506860
Ref: library/unittest mock-examples doc14507065
Ref: 450614507065
Ref: library/unittest mock-examples no-color14507065
Ref: 450714507065
Ref: library/unittest mock-examples unittest-mock-getting-started14507065
Ref: 450814507065
Ref: library/unittest mock-examples getting-started14507184
Ref: 450914507184
Node: Usando Mock14507252
Ref: library/unittest mock-examples using-mock14507359
Ref: 450a14507359
Node: Métodos de aplicação de patches em Mock14507864
Ref: library/unittest mock-examples mock-patching-methods14508004
Ref: 450b14508004
Node: Mock de chamadas de métodos em um objeto14509665
Ref: library/unittest mock-examples mock-for-method-calls-on-an-object14509829
Ref: 450c14509829
Node: Mocking Classes14510986
Ref: library/unittest mock-examples mocking-classes14511125
Ref: 450d14511125
Node: Nomeando os mocks14512123
Ref: library/unittest mock-examples naming-your-mocks14512249
Ref: 450e14512249
Node: Rastreando todas as chamadas14512681
Ref: library/unittest mock-examples tracking-all-calls14512828
Ref: 450f14512828
Node: Setting Return Values and Attributes14514270
Ref: library/unittest mock-examples setting-return-values-and-attributes14514429
Ref: 451014514429
Node: Raising exceptions with mocks14515940
Ref: library/unittest mock-examples raising-exceptions-with-mocks14516106
Ref: 451114516106
Node: Side effect functions and iterables14516486
Ref: library/unittest mock-examples side-effect-functions-and-iterables14516646
Ref: 451214516646
Node: Mocking asynchronous iterators14517686
Ref: library/unittest mock-examples mocking-asynchronous-iterators14517853
Ref: 451314517853
Node: Mocking asynchronous context manager14518427
Ref: library/unittest mock-examples mocking-asynchronous-context-manager14518598
Ref: 451414518598
Node: Creating a Mock from an Existing Object14519508
Ref: library/unittest mock-examples creating-a-mock-from-an-existing-object14519693
Ref: 451514519693
Node: Using side_effect to return per file content14521539
Ref: library/unittest mock-examples using-side-effect-to-return-per-file-content14521679
Ref: 451614521679
Node: Patch Decorators14522530
Ref: library/unittest mock-examples patch-decorators14522662
Ref: 451714522662
Node: Further Examples14527973
Ref: library/unittest mock-examples further-examples14528085
Ref: 451814528085
Ref: library/unittest mock-examples id114528085
Ref: 451914528085
Node: Mocking chained calls14528713
Ref: library/unittest mock-examples mocking-chained-calls14528811
Ref: 451a14528811
Node: Partial mocking14531926
Ref: library/unittest mock-examples partial-mocking14532059
Ref: 451b14532059
Ref: Partial mocking-Footnote-114534098
Node: Mocking a Generator Method14534199
Ref: library/unittest mock-examples mocking-a-generator-method14534355
Ref: 451c14534355
Ref: Mocking a Generator Method-Footnote-114535490
Node: Applying the same patch to every test method14535810
Ref: library/unittest mock-examples applying-the-same-patch-to-every-test-method14535974
Ref: 451d14535974
Node: Mocking Unbound Methods14538275
Ref: library/unittest mock-examples mocking-unbound-methods14538446
Ref: 451e14538446
Node: Checking multiple calls with mock14540215
Ref: library/unittest mock-examples checking-multiple-calls-with-mock14540371
Ref: 451f14540371
Node: Coping with mutable arguments14541987
Ref: library/unittest mock-examples coping-with-mutable-arguments14542135
Ref: 452014542135
Node: Nesting Patches14546320
Ref: library/unittest mock-examples nesting-patches14546470
Ref: 452114546470
Node: Mocking a dictionary with MagicMock14548279
Ref: library/unittest mock-examples mocking-a-dictionary-with-magicmock14548436
Ref: 452214548436
Node: Mock subclasses and their attributes14551084
Ref: library/unittest mock-examples mock-subclasses-and-their-attributes14551257
Ref: 452314551257
Ref: Mock subclasses and their attributes-Footnote-114553393
Ref: Mock subclasses and their attributes-Footnote-214553563
Ref: Mock subclasses and their attributes-Footnote-314553621
Node: Mocking imports with patch dict14553702
Ref: library/unittest mock-examples mocking-imports-with-patch-dict14553896
Ref: 452414553896
Node: Tracking order of calls and less verbose call assertions14556544
Ref: library/unittest mock-examples tracking-order-of-calls-and-less-verbose-call-assertions14556732
Ref: 452514556732
Node: More complex argument matching14560071
Ref: library/unittest mock-examples more-complex-argument-matching14560219
Ref: 452614560219
Ref: More complex argument matching-Footnote-114563291
Ref: More complex argument matching-Footnote-214563334
Node: test — Pacote de Testes de Regressão do Python14563456
Ref: library/test doc14563688
Ref: 452714563688
Ref: library/test module-test14563688
Ref: e814563688
Ref: library/test no-color14563688
Ref: 452814563688
Ref: library/test test-regression-tests-package-for-python14563688
Ref: 452914563688
Node: Escrever testes unitários para o pacote test14565266
Ref: library/test writing-tests14565462
Ref: 452a14565462
Ref: library/test writing-unit-tests-for-the-test-package14565462
Ref: 452b14565462
Node: Executando testes usando a interface de linha de comando14570522
Ref: library/test module-test regrtest14570718
Ref: e914570718
Ref: library/test regrtest14570718
Ref: 11ff14570718
Ref: library/test running-tests-using-the-command-line-interface14570718
Ref: 452c14570718
Node: test support — Utilitários para o conjunto de teste do Python14573006
Ref: library/test module-test support14573261
Ref: ea14573261
Ref: library/test test-support-utilities-for-the-python-test-suite14573261
Ref: 452d14573261
Ref: library/test test support TestFailed14573798
Ref: 452e14573798
Ref: library/test test support ResourceDenied14574038
Ref: 452f14574038
Ref: library/test test support verbose14574339
Ref: 453114574339
Ref: library/test test support is_jython14574602
Ref: 453214574602
Ref: library/test test support is_android14574698
Ref: 453314574698
Ref: library/test test support is_emscripten14574790
Ref: 453414574790
Ref: library/test test support is_wasi14574888
Ref: 453514574888
Ref: library/test test support is_apple_mobile14574974
Ref: 453614574974
Ref: library/test test support is_apple14575097
Ref: 453714575097
Ref: library/test test support unix_shell14575230
Ref: 453814575230
Ref: library/test test support LOOPBACK_TIMEOUT14575353
Ref: 1c5314575353
Ref: library/test test support INTERNET_TIMEOUT14576002
Ref: 1c5414576002
Ref: library/test test support SHORT_TIMEOUT14576554
Ref: 1b5214576554
Ref: library/test test support LONG_TIMEOUT14576979
Ref: 1c5514576979
Ref: library/test test support PGO14577541
Ref: 453a14577541
Ref: library/test test support PIPE_MAX_SIZE14577660
Ref: 453b14577660
Ref: library/test test support Py_DEBUG14577858
Ref: 453c14577858
Ref: library/test test support SOCK_MAX_SIZE14578086
Ref: 453d14578086
Ref: library/test test support TEST_SUPPORT_DIR14578286
Ref: 453e14578286
Ref: library/test test support TEST_HOME_DIR14578414
Ref: 453f14578414
Ref: library/test test support TEST_DATA_DIR14578522
Ref: 454014578522
Ref: library/test test support MAX_Py_ssize_t14578627
Ref: 454114578627
Ref: library/test test support max_memuse14578737
Ref: 454214578737
Ref: library/test test support real_max_memuse14578900
Ref: 454414578900
Ref: library/test test support MISSING_C_DOCSTRINGS14579072
Ref: 454514579072
Ref: library/test test support HAVE_DOCSTRINGS14579359
Ref: 454614579359
Ref: library/test test support TEST_HTTP_URL14579634
Ref: 454714579634
Ref: library/test test support ALWAYS_EQ14579743
Ref: 454814579743
Ref: library/test test support NEVER_EQ14579859
Ref: 454914579859
Ref: library/test test support LARGEST14580011
Ref: 454a14580011
Ref: library/test test support SMALLEST14580145
Ref: 454b14580145
Ref: library/test test support busy_retry14580343
Ref: 454c14580343
Ref: library/test test support sleeping_retry14580985
Ref: 454d14580985
Ref: library/test test support is_resource_enabled14581869
Ref: 454e14581869
Ref: library/test test support python_is_optimized14582101
Ref: 454f14582101
Ref: library/test test support with_pymalloc14582229
Ref: 455014582229
Ref: library/test test support requires14582318
Ref: 453014582318
Ref: library/test test support sortdict14582689
Ref: 455114582689
Ref: library/test test support findfile14582781
Ref: 455214582781
Ref: library/test test support get_pagesize14583153
Ref: 455314583153
Ref: library/test test support setswitchinterval14583266
Ref: 455414583266
Ref: library/test test support check_impl_detail14583492
Ref: 455514583492
Ref: library/test test support set_memlimit14584010
Ref: 454314584010
Ref: library/test test support record_original_stdout14584181
Ref: 455614584181
Ref: library/test test support get_original_stdout14584351
Ref: 455714584351
Ref: library/test test support args_from_interpreter_flags14584541
Ref: 455814584541
Ref: library/test test support optim_args_from_interpreter_flags14584739
Ref: 455914584739
Ref: library/test test support captured_stdin14584940
Ref: 455a14584940
Ref: library/test test support captured_stdout14584985
Ref: 455b14584985
Ref: library/test test support captured_stderr14585031
Ref: 1c8f14585031
Ref: library/test test support disable_faulthandler14585777
Ref: 455c14585777
Ref: library/test test support gc_collect14585920
Ref: 455d14585920
Ref: library/test test support disable_gc14586308
Ref: 455e14586308
Ref: library/test test support swap_attr14586489
Ref: 455f14586489
Ref: library/test test support swap_item14587073
Ref: 456014587073
Ref: library/test test support flush_std_streams14587655
Ref: 456114587655
Ref: library/test test support print_warning14587936
Ref: 456214587936
Ref: library/test test support wait_process14588215
Ref: 1c1414588215
Ref: library/test test support calcobjsize14588739
Ref: 456414588739
Ref: library/test test support calcvobjsize14588972
Ref: 456514588972
Ref: library/test test support checksizeof14589210
Ref: 456714589210
Ref: library/test test support anticipate_failure14589381
Ref: 456814589381
Ref: library/test test support system_must_validate_cert14589643
Ref: 456914589643
Ref: library/test test support run_with_locale14589796
Ref: 456a14589796
Ref: library/test test support run_with_tz14590156
Ref: 456b14590156
Ref: library/test test support requires_freebsd_version14590318
Ref: 456c14590318
Ref: library/test test support requires_linux_version14590532
Ref: 456d14590532
Ref: library/test test support requires_mac_version14590741
Ref: 456e14590741
Ref: library/test test support requires_gil_enabled14590947
Ref: 456f14590947
Ref: library/test test support requires_IEEE_75414591140
Ref: 457014591140
Ref: library/test test support requires_zlib14591249
Ref: 457114591249
Ref: library/test test support requires_gzip14591364
Ref: 457214591364
Ref: library/test test support requires_bz214591478
Ref: 457314591478
Ref: library/test test support requires_lzma14591590
Ref: 457414591590
Ref: library/test test support requires_resource14591704
Ref: 457514591704
Ref: library/test test support requires_docstrings14591829
Ref: 457614591829
Ref: library/test test support requires_limited_api14591952
Ref: 457714591952
Ref: library/test test support cpython_only14592092
Ref: 457814592092
Ref: library/test test support impl_detail14592188
Ref: 457914592188
Ref: library/test test support thread_unsafe14592418
Ref: 457a14592418
Ref: library/test test support no_tracing14592618
Ref: 457b14592618
Ref: library/test test support refcount_test14592741
Ref: 457c14592741
Ref: library/test test support bigmemtest14593045
Ref: 457d14593045
Ref: library/test test support bigaddrspacetest14593792
Ref: 457e14593792
Ref: library/test test support linked_to_musl14593903
Ref: 457f14593903
Ref: library/test test support check_syntax_error14594358
Ref: 458014594358
Ref: library/test test support open_urlresource14594912
Ref: 458114594912
Ref: library/test test support reap_children14595047
Ref: 458214595047
Ref: library/test test support get_attribute14595321
Ref: 458314595321
Ref: library/test test support catch_unraisable_exception14595484
Ref: 1c7414595484
Ref: library/test test support load_package_tests14596375
Ref: 458414596375
Ref: library/test test support detect_api_mismatch14597005
Ref: 458514597005
Ref: library/test test support patch14597481
Ref: 458614597481
Ref: library/test test support run_in_subinterp14597817
Ref: 458714597817
Ref: library/test test support check_free_after_iterating14597987
Ref: 458814597987
Ref: library/test test support missing_compiler_executable14598144
Ref: 458914598144
Ref: library/test test support check__all__14598466
Ref: 1bef14598466
Ref: library/test test support skip_if_broken_multiprocessing_synchronize14600294
Ref: 1bf014600294
Ref: library/test test support check_disallow_instantiation14600592
Ref: 458a14600592
Ref: library/test test support adjust_int_max_str_digits14600805
Ref: 458b14600805
Ref: library/test test support SuppressCrashReport14601281
Ref: 458c14601281
Ref: library/test test support SaveSignals14601886
Ref: 458e14601886
Ref: library/test test support SaveSignals save14602018
Ref: 458f14602018
Ref: library/test test support SaveSignals restore14602165
Ref: 459014602165
Ref: library/test test support Matcher14602305
Ref: 459114602305
Ref: library/test test support Matcher matches14602339
Ref: 459214602339
Ref: library/test test support Matcher match_value14602478
Ref: 459314602478
Node: test support socket_helper — Utilities for socket tests14602626
Ref: library/test module-test support socket_helper14602903
Ref: ef14602903
Ref: library/test test-support-socket-helper-utilities-for-socket-tests14602903
Ref: 459414602903
Ref: library/test test support socket_helper IPV6_ENABLED14603155
Ref: 459514603155
Ref: library/test test support socket_helper find_unused_port14603286
Ref: 459614603286
Ref: library/test test support socket_helper bind_port14604609
Ref: 459714604609
Ref: library/test test support socket_helper bind_unix_socket14605554
Ref: 459814605554
Ref: library/test test support socket_helper skip_unless_bind_unix_socket14605738
Ref: 459914605738
Ref: library/test test support socket_helper transient_internet14605908
Ref: 453914605908
Node: test support script_helper — Utilities for the Python execution tests14606181
Ref: library/test module-test support script_helper14606493
Ref: ee14606493
Ref: library/test test-support-script-helper-utilities-for-the-python-execution-tests14606493
Ref: 459a14606493
Ref: library/test test support script_helper interpreter_requires_environment14606766
Ref: 459b14606766
Ref: library/test test support script_helper run_python_until_end14607742
Ref: 459c14607742
Ref: library/test test support script_helper assert_python_ok14608121
Ref: 459d14608121
Ref: library/test test support script_helper assert_python_failure14608755
Ref: 459e14608755
Ref: library/test test support script_helper spawn_python14609190
Ref: 459f14609190
Ref: library/test test support script_helper kill_python14609503
Ref: 45a014609503
Ref: library/test test support script_helper make_script14609659
Ref: 45a114609659
Ref: library/test test support script_helper make_zip_script14609974
Ref: 45a214609974
Ref: library/test test support script_helper make_pkg14610347
Ref: 45a314610347
Ref: library/test test support script_helper make_zip_pkg14610557
Ref: 45a414610557
Node: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode14611087
Ref: library/test module-test support bytecode_helper14611405
Ref: eb14611405
Ref: library/test test-support-bytecode-helper-support-tools-for-testing-correct-bytecode-generation14611405
Ref: 45a514611405
Ref: library/test test support bytecode_helper BytecodeTestCase14611808
Ref: 45a614611808
Ref: library/test test support bytecode_helper BytecodeTestCase get_disassembly_as_string14611968
Ref: 45a714611968
Ref: library/test test support bytecode_helper BytecodeTestCase assertInBytecode14612078
Ref: 45a814612078
Ref: library/test test support bytecode_helper BytecodeTestCase assertNotInBytecode14612259
Ref: 45a914612259
Node: test support threading_helper — Utilities for threading tests14612415
Ref: library/test module-test support threading_helper14612711
Ref: f014612711
Ref: library/test test-support-threading-helper-utilities-for-threading-tests14612711
Ref: 45aa14612711
Ref: library/test test support threading_helper join_thread14612982
Ref: 45ab14612982
Ref: library/test test support threading_helper reap_threads14613204
Ref: 45ac14613204
Ref: library/test test support threading_helper start_threads14613345
Ref: 45ad14613345
Ref: library/test test support threading_helper threading_cleanup14613753
Ref: 45ae14613753
Ref: library/test test support threading_helper threading_setup14613991
Ref: 45af14613991
Ref: library/test test support threading_helper wait_threads_exit14614119
Ref: 45b014614119
Ref: library/test test support threading_helper catch_threading_exception14614302
Ref: 45b114614302
Ref: library/test test support threading_helper run_concurrently14615266
Ref: 45b214615266
Node: test support os_helper — Utilities for os tests14615538
Ref: library/test module-test support os_helper14615792
Ref: ed14615792
Ref: library/test test-support-os-helper-utilities-for-os-tests14615792
Ref: 45b314615792
Ref: library/test test support os_helper FS_NONASCII14616021
Ref: 45b414616021
Ref: library/test test support os_helper SAVEDCWD14616134
Ref: 45b514616134
Ref: library/test test support os_helper TESTFN14616215
Ref: 45b614616215
Ref: library/test test support os_helper TESTFN_NONASCII14616415
Ref: 45b714616415
Ref: library/test test support os_helper TESTFN_UNENCODABLE14616800
Ref: 45b814616800
Ref: library/test test support os_helper TESTFN_UNDECODABLE14617071
Ref: 45b914617071
Ref: library/test test support os_helper TESTFN_UNICODE14617346
Ref: 45ba14617346
Ref: library/test test support os_helper EnvironmentVarGuard14617455
Ref: 15d314617455
Ref: library/test test support os_helper FakePath14617940
Ref: 45bb14617940
Ref: library/test test support os_helper EnvironmentVarGuard set14618203
Ref: 45bc14618203
Ref: library/test test support os_helper EnvironmentVarGuard unset14618354
Ref: 17d814618354
Ref: library/test test support os_helper can_symlink14618557
Ref: 45bd14618557
Ref: library/test test support os_helper can_xattr14618692
Ref: 45be14618692
Ref: library/test test support os_helper change_cwd14618816
Ref: 45bf14618816
Ref: library/test test support os_helper create_empty_file14619185
Ref: 45c014619185
Ref: library/test test support os_helper fd_count14619337
Ref: 45c114619337
Ref: library/test test support os_helper fs_is_case_insensitive14619445
Ref: 45c214619445
Ref: library/test test support os_helper make_bad_fd14619603
Ref: 45c314619603
Ref: library/test test support os_helper rmdir14619776
Ref: 45c414619776
Ref: library/test test support os_helper rmtree14620084
Ref: 45c514620084
Ref: library/test test support os_helper skip_unless_symlink14620427
Ref: 45c614620427
Ref: library/test test support os_helper skip_unless_xattr14620576
Ref: 45c714620576
Ref: library/test test support os_helper temp_cwd14620716
Ref: 45c814620716
Ref: library/test test support os_helper temp_dir14621384
Ref: 45c914621384
Ref: library/test test support os_helper temp_umask14621842
Ref: 45ca14621842
Ref: library/test test support os_helper unlink14621985
Ref: 45cb14621985
Node: test support import_helper — Utilities for import tests14622230
Ref: library/test module-test support import_helper14622482
Ref: ec14622482
Ref: library/test test-support-import-helper-utilities-for-import-tests14622482
Ref: 45cc14622482
Ref: library/test test support import_helper forget14622735
Ref: 45cd14622735
Ref: library/test test support import_helper import_fresh_module14622920
Ref: 1b5114622920
Ref: library/test test support import_helper import_module14624545
Ref: 45ce14624545
Ref: library/test test support import_helper modules_setup14625172
Ref: 45cf14625172
Ref: library/test test support import_helper modules_cleanup14625282
Ref: 45d014625282
Ref: library/test test support import_helper unload14625460
Ref: 45d114625460
Ref: library/test test support import_helper make_legacy_pyc14625560
Ref: 45d214625560
Ref: library/test test support import_helper CleanImport14625909
Ref: 45d314625909
Ref: library/test test support import_helper DirsOnSysPath14626300
Ref: 45d414626300
Ref: test support import_helper — Utilities for import tests-Footnote-114626858
Ref: test support import_helper — Utilities for import tests-Footnote-214626900
Node: test support warnings_helper — Utilities for warnings tests14626942
Ref: library/test module-test support warnings_helper14627136
Ref: f114627136
Ref: library/test test-support-warnings-helper-utilities-for-warnings-tests14627136
Ref: 45d514627136
Ref: library/test test support warnings_helper ignore_warnings14627401
Ref: 45d614627401
Ref: library/test test support warnings_helper check_no_resource_warning14627919
Ref: 45d714627919
Ref: library/test test support warnings_helper check_syntax_warning14628209
Ref: 45d814628209
Ref: library/test test support warnings_helper check_warnings14629033
Ref: 45d914629033
Ref: library/test test support warnings_helper WarningsRecorder14632158
Ref: 45da14632158
Node: Depuração e perfilamento14632350
Ref: library/debug doc14632533
Ref: 45db14632533
Ref: library/debug debugging-and-profiling14632533
Ref: 45dc14632533
Ref: library/debug no-color14632533
Ref: 45dd14632533
Ref: library/audit_events audit-events14633081
Ref: 1b1414633081
Node: Tabela de eventos de auditoria14633459
Ref: library/audit_events doc14633591
Ref: 45de14633591
Ref: library/audit_events audit-events-table14633591
Ref: 45df14633591
Ref: Tabela de eventos de auditoria-Footnote-114694093
Node: bdb — Framework do depurador14694135
Ref: library/bdb doc14694318
Ref: 460214694318
Ref: library/bdb bdb-debugger-framework14694318
Ref: 460314694318
Ref: library/bdb module-bdb14694318
Ref: 1014694318
Ref: library/bdb no-color14694318
Ref: 460414694318
Ref: library/bdb bdb BdbQuit14694690
Ref: 27714694690
Ref: library/bdb bdb Breakpoint14694856
Ref: 460514694856
Ref: library/bdb bdb Breakpoint deleteMe14695811
Ref: 460c14695811
Ref: library/bdb bdb Breakpoint enable14696028
Ref: 460d14696028
Ref: library/bdb bdb Breakpoint disable14696100
Ref: 460e14696100
Ref: library/bdb bdb Breakpoint bpformat14696174
Ref: 460f14696174
Ref: library/bdb bdb Breakpoint bpprint14696581
Ref: 461014696581
Ref: library/bdb bdb Breakpoint file14696818
Ref: 460814696818
Ref: library/bdb bdb Breakpoint line14696897
Ref: 461114696897
Ref: library/bdb bdb Breakpoint temporary14697011
Ref: 461214697011
Ref: library/bdb bdb Breakpoint cond14697132
Ref: 460b14697132
Ref: library/bdb bdb Breakpoint funcname14697246
Ref: 460914697246
Ref: library/bdb bdb Breakpoint enabled14697392
Ref: 461314697392
Ref: library/bdb bdb Breakpoint bpbynumber14697481
Ref: 460614697481
Ref: library/bdb bdb Breakpoint bplist14697598
Ref: 460714697598
Ref: library/bdb bdb Breakpoint ignore14697751
Ref: 461414697751
Ref: library/bdb bdb Breakpoint hits14697841
Ref: 460a14697841
Ref: library/bdb bdb Bdb14697956
Ref: 2d414697956
Ref: library/bdb bdb Bdb canonic14699490
Ref: 461514699490
Ref: library/bdb bdb Bdb start_trace14699870
Ref: 461614699870
Ref: library/bdb bdb Bdb stop_trace14700083
Ref: 461714700083
Ref: library/bdb bdb Bdb reset14700279
Ref: 461814700279
Ref: library/bdb bdb Bdb trace_dispatch14700472
Ref: 461a14700472
Ref: library/bdb bdb Bdb dispatch_line14701893
Ref: 461b14701893
Ref: library/bdb bdb Bdb dispatch_call14702370
Ref: 461d14702370
Ref: library/bdb bdb Bdb dispatch_return14702854
Ref: 461f14702854
Ref: library/bdb bdb Bdb dispatch_exception14703346
Ref: 462114703346
Ref: library/bdb bdb Bdb is_skipped_line14704005
Ref: 462314704005
Ref: library/bdb bdb Bdb stop_here14704126
Ref: 462414704126
Ref: library/bdb bdb Bdb break_here14704255
Ref: 462514704255
Ref: library/bdb bdb Bdb break_anywhere14704564
Ref: 462714704564
Ref: library/bdb bdb Bdb user_call14704784
Ref: 461e14704784
Ref: library/bdb bdb Bdb user_line14705086
Ref: 461c14705086
Ref: library/bdb bdb Bdb user_return14705281
Ref: 462014705281
Ref: library/bdb bdb Bdb user_exception14705448
Ref: 462214705448
Ref: library/bdb bdb Bdb do_clear14705617
Ref: 462814705617
Ref: library/bdb bdb Bdb set_step14705903
Ref: 462914705903
Ref: library/bdb bdb Bdb set_next14705974
Ref: 462a14705974
Ref: library/bdb bdb Bdb set_return14706072
Ref: 462b14706072
Ref: library/bdb bdb Bdb set_until14706163
Ref: 462c14706163
Ref: library/bdb bdb Bdb set_trace14706349
Ref: 462d14706349
Ref: library/bdb bdb Bdb set_continue14706684
Ref: 462f14706684
Ref: library/bdb bdb Bdb set_quit14706858
Ref: 461914706858
Ref: library/bdb bdb Bdb set_break14707276
Ref: 463014707276
Ref: library/bdb bdb Bdb clear_break14707642
Ref: 463114707642
Ref: library/bdb bdb Bdb clear_bpbynumber14707808
Ref: 463214707808
Ref: library/bdb bdb Bdb clear_all_file_breaks14708038
Ref: 463314708038
Ref: library/bdb bdb Bdb clear_all_breaks14708193
Ref: 463414708193
Ref: library/bdb bdb Bdb get_bpbynumber14708330
Ref: 463514708330
Ref: library/bdb bdb Bdb get_break14708687
Ref: 463614708687
Ref: library/bdb bdb Bdb get_breaks14708827
Ref: 463714708827
Ref: library/bdb bdb Bdb get_file_breaks14708982
Ref: 463814708982
Ref: library/bdb bdb Bdb get_all_breaks14709121
Ref: 463914709121
Ref: library/bdb bdb Bdb disable_current_event14709410
Ref: 463a14709410
Ref: library/bdb bdb Bdb restart_events14709685
Ref: 463b14709685
Ref: library/bdb bdb Bdb get_stack14710193
Ref: 463c14710193
Ref: library/bdb bdb Bdb format_stack_entry14710485
Ref: 463d14710485
Ref: library/bdb bdb Bdb run14711105
Ref: 463e14711105
Ref: library/bdb bdb Bdb runeval14711336
Ref: 463f14711336
Ref: library/bdb bdb Bdb runctx14711565
Ref: 464014711565
Ref: library/bdb bdb Bdb runcall14711702
Ref: c6514711702
Ref: library/bdb bdb checkfuncname14711872
Ref: 464114711872
Ref: library/bdb bdb effective14712325
Ref: 462614712325
Ref: library/bdb bdb set_trace14713093
Ref: 462e14713093
Ref: bdb — Framework do depurador-Footnote-114713243
Node: faulthandler — Dump the Python traceback14713306
Ref: library/faulthandler doc14713488
Ref: 464214713488
Ref: library/faulthandler faulthandler-dump-the-python-traceback14713488
Ref: 464314713488
Ref: library/faulthandler module-faulthandler14713488
Ref: 5c14713488
Ref: library/faulthandler no-color14713488
Ref: 464414713488
Node: Dumping the traceback14715938
Ref: library/faulthandler dumping-the-traceback14716066
Ref: 464514716066
Ref: library/faulthandler faulthandler dump_traceback14716129
Ref: ff414716129
Node: Dumping the C stack14716563
Ref: library/faulthandler dumping-the-c-stack14716719
Ref: 464614716719
Ref: library/faulthandler faulthandler dump_c_stack14716807
Ref: 20d14716807
Node: C Stack Compatibility14717134
Ref: library/faulthandler c-stack-compatibility14717211
Ref: 20c14717211
Ref: library/faulthandler id114717211
Ref: 464714717211
Ref: C Stack Compatibility-Footnote-114717830
Ref: C Stack Compatibility-Footnote-214717879
Node: Fault handler state14717926
Ref: library/faulthandler fault-handler-state14718099
Ref: 464814718099
Ref: library/faulthandler faulthandler enable14718158
Ref: 20e14718158
Ref: library/faulthandler faulthandler disable14719497
Ref: 464a14719497
Ref: library/faulthandler faulthandler is_enabled14719638
Ref: 464b14719638
Node: Dumping the tracebacks after a timeout14719725
Ref: library/faulthandler dumping-the-tracebacks-after-a-timeout14719917
Ref: 464c14719917
Ref: library/faulthandler faulthandler dump_traceback_later14720014
Ref: ff514720014
Ref: library/faulthandler faulthandler cancel_dump_traceback_later14721048
Ref: 464d14721048
Node: Dumping the traceback on a user signal14721172
Ref: library/faulthandler dumping-the-traceback-on-a-user-signal14721372
Ref: 464e14721372
Ref: library/faulthandler faulthandler register14721469
Ref: ff314721469
Ref: library/faulthandler faulthandler unregister14722104
Ref: 464f14722104
Node: Issue with file descriptors14722382
Ref: library/faulthandler faulthandler-fd14722555
Ref: 464914722555
Ref: library/faulthandler issue-with-file-descriptors14722555
Ref: 465014722555
Node: Exemplo<13>14723023
Ref: library/faulthandler example14723149
Ref: 465114723149
Node: pdb — O depurador do Python14726410
Ref: library/pdb doc14726584
Ref: 465214726584
Ref: library/pdb debugger14726584
Ref: 465314726584
Ref: library/pdb module-pdb14726584
Ref: aa14726584
Ref: library/pdb no-color14726584
Ref: 465414726584
Ref: library/pdb pdb-the-python-debugger14726584
Ref: 465514726584
Ref: library/pdb pdb-cli14728928
Ref: 2e114728928
Ref: library/pdb cmdoption-pdb-c14729571
Ref: 465714729571
Ref: library/pdb cmdoption-pdb-command14729571
Ref: 465814729571
Ref: library/pdb cmdoption-pdb-m14729795
Ref: 465a14729795
Ref: library/pdb cmdoption-pdb-p14730061
Ref: 26f14730061
Ref: library/pdb cmdoption-pdb-pid14730061
Ref: 465b14730061
Ref: library/pdb pdb run14731505
Ref: 444b14731505
Ref: library/pdb pdb runeval14732255
Ref: 465e14732255
Ref: library/pdb pdb runcall14732596
Ref: 465f14732596
Ref: library/pdb pdb set_trace14732950
Ref: 27114732950
Ref: library/pdb pdb set_trace_async14733786
Ref: 27814733786
Ref: library/pdb pdb post_mortem14734216
Ref: 15cb14734216
Ref: library/pdb pdb pm14734570
Ref: 53914734570
Ref: library/pdb pdb set_default_backend14734690
Ref: 466014734690
Ref: library/pdb pdb get_default_backend14735289
Ref: 466114735289
Ref: library/pdb pdb Pdb14735626
Ref: 27214735626
Ref: library/pdb pdb Pdb run14738524
Ref: 466214738524
Ref: library/pdb pdb Pdb runeval14738585
Ref: 466314738585
Ref: library/pdb pdb Pdb runcall14738651
Ref: 466414738651
Ref: library/pdb pdb Pdb set_trace14738703
Ref: 27314738703
Ref: pdb — O depurador do Python-Footnote-114738882
Ref: pdb — O depurador do Python-Footnote-214738945
Ref: pdb — O depurador do Python-Footnote-314738987
Node: Comandos de depuração14739119
Ref: library/pdb debugger-commands14739208
Ref: 465914739208
Ref: library/pdb id214739208
Ref: 466514739208
Ref: library/pdb pdbcommand-help14743302
Ref: 466814743302
Ref: library/pdb pdbcommand-where14743707
Ref: 466914743707
Ref: library/pdb pdbcommand-down14744221
Ref: 466a14744221
Ref: library/pdb pdbcommand-up14744373
Ref: 466b14744373
Ref: library/pdb pdbcommand-break14744524
Ref: 466c14744524
Ref: library/pdb pdbcommand-tbreak14745857
Ref: 466d14745857
Ref: library/pdb pdbcommand-clear14746108
Ref: 466e14746108
Ref: library/pdb pdbcommand-disable14746468
Ref: 466f14746468
Ref: library/pdb pdbcommand-enable14746906
Ref: 467014746906
Ref: library/pdb pdbcommand-ignore14747005
Ref: 467114747005
Ref: library/pdb pdbcommand-condition14747533
Ref: 467214747533
Ref: library/pdb pdbcommand-commands14747906
Ref: 27514747906
Ref: library/pdb pdbcommand-step14749770
Ref: 465c14749770
Ref: library/pdb pdbcommand-next14749936
Ref: 465d14749936
Ref: library/pdb pdbcommand-until14750346
Ref: 467414750346
Ref: library/pdb pdbcommand-return14750774
Ref: 467314750774
Ref: library/pdb pdbcommand-continue14750863
Ref: 465614750863
Ref: library/pdb pdbcommand-jump14750994
Ref: 467514750994
Ref: library/pdb pdbcommand-list14751451
Ref: 466614751451
Ref: library/pdb pdbcommand-ll14752219
Ref: 467714752219
Ref: library/pdb pdbcommand-args14752419
Ref: 467814752419
Ref: library/pdb pdbcommand-p14752512
Ref: 116c14752512
Ref: library/pdb pdbcommand-pp14752766
Ref: 467914752766
Ref: library/pdb pdbcommand-whatis14752929
Ref: 467a14752929
Ref: library/pdb pdbcommand-source14753000
Ref: 467b14753000
Ref: library/pdb pdbcommand-display14753129
Ref: 27414753129
Ref: library/pdb pdbcommand-undisplay14754663
Ref: 467c14754663
Ref: library/pdb pdbcommand-interact14754872
Ref: 467d14754872
Ref: library/pdb debugger-aliases14755866
Ref: 466714755866
Ref: library/pdb pdbcommand-alias14755866
Ref: 467e14755866
Ref: library/pdb pdbcommand-unalias14757097
Ref: 467f14757097
Ref: library/pdb pdbcommand-014757170
Ref: 468014757170
Ref: library/pdb pdbcommand-run14757739
Ref: 468114757739
Ref: library/pdb pdbcommand-restart14757770
Ref: 468214757770
Ref: library/pdb pdbcommand-quit14758303
Ref: 467614758303
Ref: library/pdb pdbcommand-debug14758953
Ref: 468314758953
Ref: library/pdb pdbcommand-retval14759135
Ref: 468414759135
Ref: library/pdb pdbcommand-exceptions14759234
Ref: 53a14759234
Node: Os Profilers do Python14760571
Ref: library/profile doc14760771
Ref: 468514760771
Ref: library/profile no-color14760771
Ref: 468614760771
Ref: library/profile profile14760771
Ref: 468714760771
Ref: library/profile the-python-profilers14760771
Ref: 468814760771
Ref: Os Profilers do Python-Footnote-114761218
Ref: Os Profilers do Python-Footnote-214761285
Node: Introdução aos profilers14761351
Ref: library/profile introduction-to-the-profilers14761468
Ref: 468914761468
Ref: library/profile profiler-introduction14761468
Ref: 468a14761468
Node: Instant User’s Manual14762950
Ref: library/profile instant-user-s-manual14763113
Ref: 468b14763113
Ref: library/profile profile-instant14763113
Ref: 468c14763113
Ref: library/profile profile-cli14766017
Ref: 468e14766017
Ref: library/profile cmdoption-cProfile-o14766230
Ref: 468f14766230
Ref: library/profile cmdoption-cProfile-s14766325
Ref: 469014766325
Ref: library/profile cmdoption-cProfile-m14766509
Ref: 469214766509
Node: profile and cProfile Module Reference14769464
Ref: library/profile module-cProfile14769615
Ref: 2b14769615
Ref: library/profile profile-and-cprofile-module-reference14769615
Ref: 469514769615
Ref: library/profile module-profile14769726
Ref: b414769726
Ref: library/profile profile run14769820
Ref: 469614769820
Ref: library/profile profile runctx14770455
Ref: 469714770455
Ref: library/profile profile Profile14770852
Ref: bcc14770852
Ref: library/profile profile Profile enable14772457
Ref: 469814772457
Ref: library/profile profile Profile disable14772578
Ref: 469914772578
Ref: library/profile profile Profile create_stats14772697
Ref: 469a14772697
Ref: library/profile profile Profile print_stats14772842
Ref: 469b14772842
Ref: library/profile profile Profile dump_stats14773335
Ref: 469c14773335
Ref: library/profile profile Profile run14773443
Ref: 469d14773443
Ref: library/profile profile Profile runctx14773522
Ref: 469e14773522
Ref: library/profile profile Profile runcall14773680
Ref: c6414773680
Node: A classe Stats14774025
Ref: library/profile profile-stats14774185
Ref: 469f14774185
Ref: library/profile the-stats-class14774185
Ref: 46a014774185
Ref: library/profile module-pstats14774317
Ref: b514774317
Ref: library/profile pstats Stats14774317
Ref: 468d14774317
Ref: library/profile pstats Stats strip_dirs14775586
Ref: 469314775586
Ref: library/profile pstats Stats add14776409
Ref: 46a114776409
Ref: library/profile pstats Stats dump_stats14776903
Ref: 46a214776903
Ref: library/profile pstats Stats sort_stats14777285
Ref: 469114777285
Ref: library/profile pstats Stats reverse_order14782654
Ref: 46a314782654
Ref: library/profile pstats Stats print_stats14782941
Ref: 469414782941
Ref: library/profile pstats Stats print_callers14784389
Ref: 46a414784389
Ref: library/profile pstats Stats print_callees14785506
Ref: 46a514785506
Ref: library/profile pstats Stats get_stats_profile14785888
Ref: 46a614785888
Node: What Is Deterministic Profiling?14786441
Ref: library/profile deterministic-profiling14786576
Ref: 46a714786576
Ref: library/profile what-is-deterministic-profiling14786576
Ref: 46a814786576
Node: Limitações14788374
Ref: library/profile limitations14788506
Ref: 46a914788506
Ref: library/profile profile-limitations14788506
Ref: 46aa14788506
Node: Calibration14790389
Ref: library/profile calibration14790509
Ref: 46ab14790509
Ref: library/profile profile-calibration14790509
Ref: 46ac14790509
Node: Using a custom timer14792202
Ref: library/profile profile-timers14792301
Ref: 46ad14792301
Ref: library/profile using-a-custom-timer14792301
Ref: 46ae14792301
Node: timeit — Mede o tempo de execução de pequenos trechos de código14794752
Ref: library/timeit doc14794990
Ref: 46af14794990
Ref: library/timeit module-timeit14794990
Ref: f514794990
Ref: library/timeit no-color14794990
Ref: 46b014794990
Ref: library/timeit timeit-measure-execution-time-of-small-code-snippets14794990
Ref: 46b114794990
Ref: timeit — Mede o tempo de execução de pequenos trechos de código-Footnote-114795851
Node: Exemplos básicos<2>14795917
Ref: library/timeit basic-examples14796070
Ref: 46b414796070
Node: Interface em Python14797404
Ref: library/timeit id114797598
Ref: 46b614797598
Ref: library/timeit python-interface14797598
Ref: 46b314797598
Ref: library/timeit timeit timeit14797717
Ref: 107414797717
Ref: library/timeit timeit repeat14798237
Ref: 46b714798237
Ref: library/timeit timeit default_timer14798903
Ref: 46b914798903
Ref: library/timeit timeit Timer14799231
Ref: 16b614799231
Ref: library/timeit timeit Timer timeit14800850
Ref: edd14800850
Ref: library/timeit timeit Timer autorange14802088
Ref: edc14802088
Ref: library/timeit timeit Timer repeat14802863
Ref: 46b814802863
Ref: library/timeit timeit Timer print_exc14804248
Ref: 46ba14804248
Node: Interface de Linha de Comando<4>14804862
Ref: library/timeit command-line-interface14805048
Ref: 46bb14805048
Ref: library/timeit timeit-command-line-interface14805048
Ref: 46b214805048
Ref: library/timeit cmdoption-timeit-n14805356
Ref: 46bc14805356
Ref: library/timeit cmdoption-timeit-number14805356
Ref: 46bd14805356
Ref: library/timeit cmdoption-timeit-r14805436
Ref: 46be14805436
Ref: library/timeit cmdoption-timeit-repeat14805436
Ref: 46bf14805436
Ref: library/timeit cmdoption-timeit-s14805542
Ref: 46c014805542
Ref: library/timeit cmdoption-timeit-setup14805542
Ref: 46c114805542
Ref: library/timeit cmdoption-timeit-p14805665
Ref: 46c214805665
Ref: library/timeit cmdoption-timeit-process14805665
Ref: 46c314805665
Ref: library/timeit cmdoption-timeit-u14805913
Ref: 46c414805913
Ref: library/timeit cmdoption-timeit-unit14805913
Ref: 46c514805913
Ref: library/timeit cmdoption-timeit-v14806111
Ref: 46c614806111
Ref: library/timeit cmdoption-timeit-verbose14806111
Ref: 46c714806111
Ref: library/timeit cmdoption-timeit-h14806231
Ref: 46c814806231
Ref: library/timeit cmdoption-timeit-help14806231
Ref: 46c914806231
Node: Exemplos<31>14807559
Ref: library/timeit examples14807717
Ref: 46ca14807717
Ref: library/timeit timeit-examples14807717
Ref: 46b514807717
Node: trace — Rastreia ou acompanha a execução de instruções Python14811479
Ref: library/trace doc14811735
Ref: 46cb14811735
Ref: library/trace module-trace14811735
Ref: 10314811735
Ref: library/trace no-color14811735
Ref: 46cc14811735
Ref: library/trace trace-trace-or-track-python-statement-execution14811735
Ref: 46cd14811735
Ref: trace — Rastreia ou acompanha a execução de instruções Python-Footnote-114812613
Ref: trace — Rastreia ou acompanha a execução de instruções Python-Footnote-214812678
Node: Uso na linha de comando<8>14812719
Ref: library/trace command-line-usage14812881
Ref: 46ce14812881
Ref: library/trace trace-cli14812881
Ref: 46cf14812881
Ref: library/trace cmdoption-trace-help14813275
Ref: 46d014813275
Ref: library/trace cmdoption-trace-version14813328
Ref: 46d114813328
Node: Opções principais14813564
Ref: library/trace main-options14813668
Ref: 46d214813668
Ref: library/trace cmdoption-trace-c14814053
Ref: 46d514814053
Ref: library/trace cmdoption-trace-count14814053
Ref: 46d614814053
Ref: library/trace cmdoption-trace-t14814327
Ref: 46d414814327
Ref: library/trace cmdoption-trace-trace14814327
Ref: 46da14814327
Ref: library/trace cmdoption-trace-l14814398
Ref: 46d314814398
Ref: library/trace cmdoption-trace-listfuncs14814398
Ref: 46db14814398
Ref: library/trace cmdoption-trace-r14814486
Ref: 46dc14814486
Ref: library/trace cmdoption-trace-report14814486
Ref: 46dd14814486
Ref: library/trace cmdoption-trace-T14814688
Ref: 46de14814688
Ref: library/trace cmdoption-trace-trackcalls14814688
Ref: 46df14814688
Node: Modificadores14814798
Ref: library/trace modifiers14814918
Ref: 46e014814918
Ref: library/trace cmdoption-trace-f14814965
Ref: 46d814814965
Ref: library/trace cmdoption-trace-file14814965
Ref: 46e114814965
Ref: library/trace cmdoption-trace-C14815140
Ref: 46d714815140
Ref: library/trace cmdoption-trace-coverdir14815140
Ref: 46e214815140
Ref: library/trace cmdoption-trace-m14815356
Ref: 46e314815356
Ref: library/trace cmdoption-trace-missing14815356
Ref: 46e414815356
Ref: library/trace cmdoption-trace-s14815483
Ref: 46e514815483
Ref: library/trace cmdoption-trace-summary14815483
Ref: 46e614815483
Ref: library/trace cmdoption-trace-R14815637
Ref: 46d914815637
Ref: library/trace cmdoption-trace-no-report14815637
Ref: 46e714815637
Ref: library/trace cmdoption-trace-g14815864
Ref: 46e814815864
Ref: library/trace cmdoption-trace-timing14815864
Ref: 46e914815864
Node: Filtros14815999
Ref: library/trace filters14816091
Ref: 46ea14816091
Ref: library/trace cmdoption-trace-ignore-module14816177
Ref: 46eb14816177
Ref: library/trace cmdoption-trace-ignore-dir14816383
Ref: 46ec14816383
Node: Interface programática14816592
Ref: library/trace programmatic-interface14816754
Ref: 46ed14816754
Ref: library/trace trace-api14816754
Ref: 46ee14816754
Ref: library/trace trace Trace14816820
Ref: 46ef14816820
Ref: library/trace trace Trace run14817872
Ref: 46f014817872
Ref: library/trace trace Trace runctx14818121
Ref: 46f114818121
Ref: library/trace trace Trace runfunc14818442
Ref: c6614818442
Ref: library/trace trace Trace results14818652
Ref: 46f214818652
Ref: library/trace trace CoverageResults14819000
Ref: 46f314819000
Ref: library/trace trace CoverageResults update14819184
Ref: 46f414819184
Ref: library/trace trace CoverageResults write_results14819287
Ref: 46f514819287
Node: tracemalloc — Trace memory allocations14820802
Ref: library/tracemalloc doc14820981
Ref: 46f614820981
Ref: library/tracemalloc module-tracemalloc14820981
Ref: 10514820981
Ref: library/tracemalloc no-color14820981
Ref: 46f714820981
Ref: library/tracemalloc tracemalloc-trace-memory-allocations14820981
Ref: 46f814820981
Ref: tracemalloc — Trace memory allocations-Footnote-114822375
Node: Exemplos<32>14822446
Ref: library/tracemalloc examples14822547
Ref: 46f914822547
Node: Exibe o top 1014822692
Ref: library/tracemalloc display-the-top-1014822783
Ref: 46fa14822783
Node: Compute differences14824259
Ref: library/tracemalloc compute-differences14824394
Ref: 46fc14824394
Node: Get the traceback of a memory block14826584
Ref: library/tracemalloc get-the-traceback-of-a-memory-block14826715
Ref: 46ff14826715
Node: Pretty top14829347
Ref: library/tracemalloc pretty-top14829450
Ref: 470014829450
Node: Record the current and peak size of all traced memory blocks14831912
Ref: library/tracemalloc record-the-current-and-peak-size-of-all-traced-memory-blocks14832019
Ref: 470114832019
Node: API14833711
Ref: library/tracemalloc api14833812
Ref: 470314833812
Node: Funções<11>14833984
Ref: library/tracemalloc functions14834058
Ref: 470414834058
Ref: library/tracemalloc tracemalloc clear_traces14834095
Ref: 470514834095
Ref: library/tracemalloc tracemalloc get_object_traceback14834230
Ref: 1dee14834230
Ref: library/tracemalloc tracemalloc get_traceback_limit14834637
Ref: 470614834637
Ref: library/tracemalloc tracemalloc get_traced_memory14834961
Ref: 470214834961
Ref: library/tracemalloc tracemalloc reset_peak14835167
Ref: b2b14835167
Ref: library/tracemalloc tracemalloc get_tracemalloc_memory14835806
Ref: 470814835806
Ref: library/tracemalloc tracemalloc is_tracing14836004
Ref: 470914836004
Ref: library/tracemalloc tracemalloc start14836237
Ref: 1fd914836237
Ref: library/tracemalloc tracemalloc stop14837603
Ref: 180e14837603
Ref: library/tracemalloc tracemalloc take_snapshot14838037
Ref: 470714838037
Node: DomainFilter14838737
Ref: library/tracemalloc domainfilter14838826
Ref: 470d14838826
Ref: library/tracemalloc tracemalloc DomainFilter14838871
Ref: ee114838871
Ref: library/tracemalloc tracemalloc DomainFilter inclusive14839043
Ref: 470e14839043
Ref: library/tracemalloc tracemalloc DomainFilter domain14839342
Ref: 470f14839342
Node: Filter14839446
Ref: library/tracemalloc filter14839527
Ref: 471014839527
Ref: library/tracemalloc tracemalloc Filter14839562
Ref: 471114839562
Ref: library/tracemalloc tracemalloc Filter domain14840428
Ref: 471214840428
Ref: library/tracemalloc tracemalloc Filter inclusive14840698
Ref: 471314840698
Ref: library/tracemalloc tracemalloc Filter lineno14841129
Ref: 471514841129
Ref: library/tracemalloc tracemalloc Filter filename_pattern14841280
Ref: 471414841280
Ref: library/tracemalloc tracemalloc Filter all_frames14841393
Ref: 471614841393
Node: Frame14841799
Ref: library/tracemalloc frame14841876
Ref: 471814841876
Ref: library/tracemalloc tracemalloc Frame14841909
Ref: 471914841909
Ref: library/tracemalloc tracemalloc Frame filename14842058
Ref: 471a14842058
Ref: library/tracemalloc tracemalloc Frame lineno14842120
Ref: 471b14842120
Node: Snapshot14842188
Ref: library/tracemalloc snapshot14842268
Ref: 471c14842268
Ref: library/tracemalloc tracemalloc Snapshot14842307
Ref: 470c14842307
Ref: library/tracemalloc tracemalloc Snapshot compare_to14842486
Ref: 470b14842486
Ref: library/tracemalloc tracemalloc Snapshot dump14843215
Ref: 46fd14843215
Ref: library/tracemalloc tracemalloc Snapshot filter_traces14843352
Ref: 472314843352
Ref: library/tracemalloc tracemalloc Snapshot load14844031
Ref: 46fe14844031
Ref: library/tracemalloc tracemalloc Snapshot statistics14844158
Ref: 46fb14844158
Ref: library/tracemalloc tracemalloc Snapshot traceback_limit14845360
Ref: 471714845360
Ref: library/tracemalloc tracemalloc Snapshot traces14845578
Ref: 472414845578
Node: Statistic14845872
Ref: library/tracemalloc statistic14845960
Ref: 472914845960
Ref: library/tracemalloc tracemalloc Statistic14846001
Ref: 472514846001
Ref: library/tracemalloc tracemalloc Statistic count14846226
Ref: 472114846226
Ref: library/tracemalloc tracemalloc Statistic size14846300
Ref: 472614846300
Ref: library/tracemalloc tracemalloc Statistic traceback14846386
Ref: 472714846386
Node: StatisticDiff14846517
Ref: library/tracemalloc statisticdiff14846602
Ref: 472a14846602
Ref: library/tracemalloc tracemalloc StatisticDiff14846651
Ref: 471d14846651
Ref: library/tracemalloc tracemalloc StatisticDiff count14846952
Ref: 472b14846952
Ref: library/tracemalloc tracemalloc StatisticDiff count_diff14847125
Ref: 472014847125
Ref: library/tracemalloc tracemalloc StatisticDiff size14847346
Ref: 471f14847346
Ref: library/tracemalloc tracemalloc StatisticDiff size_diff14847541
Ref: 471e14847541
Ref: library/tracemalloc tracemalloc StatisticDiff traceback14847774
Ref: 472214847774
Node: Trace14847907
Ref: library/tracemalloc trace14847992
Ref: 472c14847992
Ref: library/tracemalloc tracemalloc Trace14848025
Ref: 472814848025
Ref: library/tracemalloc tracemalloc Trace domain14848260
Ref: 472d14848260
Ref: library/tracemalloc tracemalloc Trace size14848537
Ref: 472e14848537
Ref: library/tracemalloc tracemalloc Trace traceback14848620
Ref: 472f14848620
Node: Traceback14848751
Ref: library/tracemalloc traceback14848814
Ref: 473014848814
Ref: library/tracemalloc tracemalloc Traceback14848855
Ref: d8314848855
Ref: library/tracemalloc tracemalloc Traceback total_nframe14849784
Ref: 470a14849784
Ref: library/tracemalloc tracemalloc Traceback format14850093
Ref: d8414850093
Node: Empacotamento e Distribuição de Software14851162
Ref: library/distribution doc14851354
Ref: 473214851354
Ref: library/distribution no-color14851354
Ref: 473314851354
Ref: library/distribution software-packaging-and-distribution14851354
Ref: 473414851354
Ref: Empacotamento e Distribuição de Software-Footnote-114851934
Node: ensurepip — Inicialização do instalador do pip14851959
Ref: library/ensurepip doc14852137
Ref: 473514852137
Ref: library/ensurepip ensurepip-bootstrapping-the-pip-installer14852137
Ref: 473614852137
Ref: library/ensurepip module-ensurepip14852137
Ref: 5914852137
Ref: ensurepip — Inicialização do instalador do pip-Footnote-114853912
Ref: ensurepip — Inicialização do instalador do pip-Footnote-214853978
Node: Interface de linha de comando<6>14854020
Ref: library/ensurepip command-line-interface14854162
Ref: 473714854162
Ref: library/ensurepip cmdoption-ensurepip-root14854965
Ref: 473814854965
Ref: library/ensurepip cmdoption-ensurepip-user14855183
Ref: 473914855183
Ref: library/ensurepip cmdoption-ensurepip-altinstall14855660
Ref: 473a14855660
Ref: library/ensurepip cmdoption-ensurepip-default-pip14855789
Ref: 473b14855789
Node: API do módulo14856025
Ref: library/ensurepip module-api14856167
Ref: 473c14856167
Ref: library/ensurepip ensurepip version14856285
Ref: 473d14856285
Ref: library/ensurepip ensurepip bootstrap14856443
Ref: 45eb14856443
Node: venv — Criação de ambientes virtuais14858275
Ref: library/venv doc14858517
Ref: 473e14858517
Ref: library/venv module-venv14858517
Ref: 11714858517
Ref: library/venv no-color14858517
Ref: 473f14858517
Ref: library/venv venv-creation-of-virtual-environments14858517
Ref: 474014858517
Ref: library/venv venv-def14858745
Ref: 3e514858745
Ref: library/venv venv-intro14858745
Ref: 474114858745
Ref: venv — Criação de ambientes virtuais-Footnote-114861023
Ref: venv — Criação de ambientes virtuais-Footnote-214861085
Ref: venv — Criação de ambientes virtuais-Footnote-314861123
Ref: venv — Criação de ambientes virtuais-Footnote-414861165
Node: Criando ambientes virtuais<2>14861306
Ref: library/venv creating-virtual-environments14861444
Ref: 474414861444
Ref: library/venv venv-cli14863284
Ref: 474514863284
Ref: library/venv cmdoption-venv-arg-ENV_DIR14863284
Ref: 474614863284
Ref: library/venv cmdoption-venv-system-site-packages14863393
Ref: 474714863393
Ref: library/venv cmdoption-venv-symlinks14863515
Ref: 474814863515
Ref: library/venv cmdoption-venv-copies14863663
Ref: 474914863663
Ref: library/venv cmdoption-venv-clear14863813
Ref: 474a14863813
Ref: library/venv cmdoption-venv-upgrade14863943
Ref: 474b14863943
Ref: library/venv cmdoption-venv-without-pip14864098
Ref: 474c14864098
Ref: library/venv cmdoption-venv-prompt14864239
Ref: 474d14864239
Ref: library/venv cmdoption-venv-upgrade-deps14864337
Ref: 474e14864337
Ref: library/venv cmdoption-venv-without-scm-ignore-files14864456
Ref: 474f14864456
Ref: Criando ambientes virtuais<2>-Footnote-114866530
Node: Como funcionam os venvs14866585
Ref: library/venv how-venvs-work14866738
Ref: 475014866738
Ref: library/venv venv-explanation14866738
Ref: 67214866738
Node: API<2>14871336
Ref: library/venv api14871497
Ref: 475114871497
Ref: library/venv venv-api14871497
Ref: 10eb14871497
Ref: library/venv venv EnvBuilder14871768
Ref: 56a14871768
Ref: library/venv venv EnvBuilder create14874186
Ref: 475314874186
Ref: library/venv venv EnvBuilder ensure_directories14875442
Ref: 475414875442
Ref: library/venv venv EnvBuilder create_configuration14878216
Ref: 475514878216
Ref: library/venv venv EnvBuilder setup_python14878340
Ref: 475614878340
Ref: library/venv venv EnvBuilder setup_scripts14878735
Ref: 475714878735
Ref: library/venv venv EnvBuilder upgrade_dependencies14878880
Ref: 475a14878880
Ref: library/venv venv EnvBuilder post_setup14879275
Ref: 475814879275
Ref: library/venv venv EnvBuilder install_scripts14879526
Ref: 475914879526
Ref: library/venv venv EnvBuilder create_git_ignore_file14880989
Ref: 475214880989
Ref: library/venv venv create14881913
Ref: 56b14881913
Ref: API<2>-Footnote-114882607
Ref: API<2>-Footnote-214882645
Node: Um exemplo de extensão de EnvBuilder14882690
Ref: library/venv an-example-of-extending-envbuilder14882819
Ref: 475b14882819
Ref: Um exemplo de extensão de EnvBuilder-Footnote-114892967
Node: zipapp — Gerencia arquivos zip executáveis do Python14893014
Ref: library/zipapp doc14893197
Ref: 475c14893197
Ref: library/zipapp module-zipapp14893197
Ref: 13614893197
Ref: library/zipapp no-color14893197
Ref: 475d14893197
Ref: library/zipapp zipapp-manage-executable-python-zip-archives14893197
Ref: 475e14893197
Ref: zipapp — Gerencia arquivos zip executáveis do Python-Footnote-114894044
Node: Exemplo básico14894110
Ref: library/zipapp basic-example14894258
Ref: 476114894258
Node: Interface de linha de comando<7>14894678
Ref: library/zipapp command-line-interface14894848
Ref: 476214894848
Ref: library/zipapp zipapp-command-line-interface14894848
Ref: 475f14894848
Ref: library/zipapp cmdoption-zipapp-o14895396
Ref: 476314895396
Ref: library/zipapp cmdoption-zipapp-output14895396
Ref: 476414895396
Ref: library/zipapp cmdoption-zipapp-p14895963
Ref: 476514895963
Ref: library/zipapp cmdoption-zipapp-python14895963
Ref: 476614895963
Ref: library/zipapp cmdoption-zipapp-m14896278
Ref: 476714896278
Ref: library/zipapp cmdoption-zipapp-main14896278
Ref: 476814896278
Ref: library/zipapp cmdoption-zipapp-c14896700
Ref: 476914896700
Ref: library/zipapp cmdoption-zipapp-compress14896700
Ref: 476a14896700
Ref: library/zipapp cmdoption-zipapp-info14896997
Ref: 476b14896997
Ref: library/zipapp cmdoption-zipapp-h14897210
Ref: 476c14897210
Ref: library/zipapp cmdoption-zipapp-help14897210
Ref: 476d14897210
Node: API do Python14897278
Ref: library/zipapp python-api14897445
Ref: 476e14897445
Ref: library/zipapp zipapp-python-api14897445
Ref: 476014897445
Ref: library/zipapp zipapp create_archive14897543
Ref: d9d14897543
Ref: library/zipapp zipapp get_interpreter14901518
Ref: 476f14901518
Node: Exemplos<33>14901897
Ref: library/zipapp examples14902061
Ref: 477014902061
Ref: library/zipapp zipapp-examples14902061
Ref: 477114902061
Node: Especificando o interpretador14903483
Ref: library/zipapp specifying-the-interpreter14903676
Ref: 477214903676
Ref: library/zipapp zipapp-specifying-the-interpreter14903676
Ref: 477314903676
Node: Criando aplicações autônomas com zipapp14905010
Ref: library/zipapp creating-standalone-applications-with-zipapp14905237
Ref: 477414905237
Node: Advertência14907060
Ref: library/zipapp caveats14907151
Ref: 477514907151
Node: O formato de arquivo da aplicação zip Python14908031
Ref: library/zipapp the-python-zip-application-archive-format14908220
Ref: 477614908220
Node: Serviços de Tempo de Execução Python14910325
Ref: library/python doc14910528
Ref: 477714910528
Ref: library/python no-color14910528
Ref: 477814910528
Ref: library/python python14910528
Ref: 477914910528
Ref: library/python python-runtime-services14910528
Ref: 477a14910528
Node: sys — Parâmetros e funções específicas do sistema14911683
Ref: library/sys doc14911880
Ref: 477b14911880
Ref: library/sys module-sys14911880
Ref: df14911880
Ref: library/sys sys-system-specific-parameters-and-functions14911880
Ref: 477c14911880
Ref: library/sys sys abiflags14912338
Ref: c4d14912338
Ref: library/sys sys addaudithook14912752
Ref: 45e014912752
Ref: library/sys sys argv14915250
Ref: 146014915250
Ref: library/sys auditing14916317
Ref: 1b5d14916317
Ref: library/sys sys audit14916317
Ref: 186e14916317
Ref: library/sys sys base_exec_prefix14917865
Ref: 3e714917865
Ref: library/sys sys base_prefix14918356
Ref: 3e314918356
Ref: library/sys sys byteorder14918824
Ref: 248d14918824
Ref: library/sys sys builtin_module_names14919085
Ref: 1efc14919085
Ref: library/sys sys call_tracing14919436
Ref: 1ad614919436
Ref: library/sys sys copyright14920043
Ref: 477d14920043
Ref: library/sys sys _clear_type_cache14920158
Ref: 29114920158
Ref: library/sys sys _clear_internal_caches14920653
Ref: 36114920653
Ref: library/sys sys _current_frames14920927
Ref: 162414920927
Ref: library/sys sys _current_exceptions14921898
Ref: 6de14921898
Ref: library/sys sys breakpointhook14922714
Ref: cc414922714
Ref: library/sys sys _debugmallocstats14924773
Ref: 477e14924773
Ref: library/sys sys dllhandle14925280
Ref: 477f14925280
Ref: library/sys sys displayhook14925421
Ref: 170d14925421
Ref: library/sys sys dont_write_bytecode14927023
Ref: 478014927023
Ref: library/sys sys _emscripten_info14927465
Ref: 1aa514927465
Ref: library/sys sys _emscripten_info emscripten_version14927673
Ref: 478114927673
Ref: library/sys sys _emscripten_info runtime14927840
Ref: 478214927840
Ref: library/sys sys _emscripten_info pthreads14928021
Ref: 478314928021
Ref: library/sys sys _emscripten_info shared_memory14928163
Ref: 478414928163
Ref: library/sys sys pycache_prefix14928392
Ref: b9214928392
Ref: library/sys sys excepthook14929471
Ref: a0214929471
Ref: library/sys sys __breakpointhook__14930998
Ref: 478514930998
Ref: library/sys sys __displayhook__14931031
Ref: 478614931031
Ref: library/sys sys __excepthook__14931061
Ref: 478714931061
Ref: library/sys sys __unraisablehook__14931090
Ref: 478814931090
Ref: library/sys sys exception14931600
Ref: 89014931600
Ref: library/sys sys exc_info14932147
Ref: 88f14932147
Ref: library/sys sys exec_prefix14933214
Ref: 3e814933214
Ref: library/sys sys executable14934743
Ref: 3ea14934743
Ref: library/sys sys exit14935065
Ref: 27614935065
Ref: library/sys sys flags14936926
Ref: 89114936926
Ref: library/sys sys flags debug14937202
Ref: 478914937202
Ref: library/sys sys flags inspect14937402
Ref: 478a14937402
Ref: library/sys sys flags interactive14937604
Ref: 478b14937604
Ref: library/sys sys flags isolated14937799
Ref: 478c14937799
Ref: library/sys sys flags optimize14937996
Ref: 478d14937996
Ref: library/sys sys flags dont_write_bytecode14938223
Ref: 478e14938223
Ref: library/sys sys flags no_user_site14938414
Ref: 478f14938414
Ref: library/sys sys flags no_site14938607
Ref: 479014938607
Ref: library/sys sys flags ignore_environment14938816
Ref: 479114938816
Ref: library/sys sys flags verbose14939002
Ref: 479214939002
Ref: library/sys sys flags bytes_warning14939206
Ref: 479314939206
Ref: library/sys sys flags quiet14939395
Ref: 479414939395
Ref: library/sys sys flags hash_randomization14939606
Ref: 479514939606
Ref: library/sys sys flags dev_mode14939794
Ref: 1d3714939794
Ref: library/sys sys flags utf8_mode14940104
Ref: 479614940104
Ref: library/sys sys flags safe_path14940306
Ref: 53814940306
Ref: library/sys sys flags int_max_str_digits14940512
Ref: 256c14940512
Ref: library/sys sys flags warn_default_encoding14940869
Ref: 479714940869
Ref: library/sys sys flags gil14941070
Ref: 479814941070
Ref: library/sys sys flags thread_inherit_context14941315
Ref: 17514941315
Ref: library/sys sys flags context_aware_warnings14941640
Ref: 18a14941640
Ref: library/sys sys float_info14943056
Ref: 1c8614943056
Ref: library/sys sys float_info epsilon14944073
Ref: 479a14944073
Ref: library/sys sys float_info dig14944773
Ref: 479b14944773
Ref: library/sys sys float_info mant_dig14945383
Ref: 479c14945383
Ref: library/sys sys float_info max14945981
Ref: 479d14945981
Ref: library/sys sys float_info max_exp14946373
Ref: 479e14946373
Ref: library/sys sys float_info max_10_exp14946889
Ref: 479f14946889
Ref: library/sys sys float_info min14947486
Ref: 47a014947486
Ref: library/sys sys float_info min_exp14948398
Ref: 47a114948398
Ref: library/sys sys float_info min_10_exp14948904
Ref: 47a214948904
Ref: library/sys sys float_info radix14949395
Ref: 47a314949395
Ref: library/sys sys float_info rounds14949765
Ref: 47a414949765
Ref: library/sys sys float_repr_style14953147
Ref: 14f614953147
Ref: library/sys sys getallocatedblocks14953719
Ref: 11bd14953719
Ref: library/sys sys getunicodeinternedsize14954438
Ref: 47a514954438
Ref: library/sys sys getandroidapilevel14954586
Ref: d7714954586
Ref: library/sys sys getdefaultencoding14955020
Ref: 47a614955020
Ref: library/sys sys getdlopenflags14955195
Ref: 16fc14955195
Ref: library/sys sys getfilesystemencoding14955549
Ref: e4714955549
Ref: library/sys sys getfilesystemencodeerrors14957167
Ref: ed614957167
Ref: library/sys sys get_int_max_str_digits14958040
Ref: 178614958040
Ref: library/sys sys getrefcount14958292
Ref: 2cd14958292
Ref: library/sys sys getrecursionlimit14959262
Ref: 6e014959262
Ref: library/sys sys getsizeof14959571
Ref: 1a1314959571
Ref: library/sys sys getswitchinterval14960618
Ref: b3914960618
Ref: library/sys sys _getframe14960814
Ref: 8e514960814
Ref: library/sys sys _getframemodulename14961480
Ref: 1a1714961480
Ref: library/sys sys getobjects14962227
Ref: 28d14962227
Ref: library/sys sys getprofile14963420
Ref: 15d114963420
Ref: library/sys sys gettrace14963551
Ref: 15d214963551
Ref: library/sys sys getwindowsversion14964001
Ref: ed714964001
Ref: library/sys sys get_asyncgen_hooks14966783
Ref: 1ad714966783
Ref: library/sys sys get_coroutine_origin_tracking_depth14967383
Ref: d7814967383
Ref: library/sys sys hash_info14967792
Ref: 11f514967792
Ref: library/sys sys hash_info width14968025
Ref: 47a914968025
Ref: library/sys sys hash_info modulus14968123
Ref: 249514968123
Ref: library/sys sys hash_info inf14968227
Ref: 47aa14968227
Ref: library/sys sys hash_info nan14968324
Ref: 47ab14968324
Ref: library/sys sys hash_info imag14968404
Ref: 47ac14968404
Ref: library/sys sys hash_info algorithm14968530
Ref: 47ad14968530
Ref: library/sys sys hash_info hash_bits14968638
Ref: 47ae14968638
Ref: library/sys sys hash_info seed_bits14968738
Ref: 47af14968738
Ref: library/sys sys hexversion14968953
Ref: 47b014968953
Ref: library/sys sys implementation14969913
Ref: 73014969913
Ref: library/sys sys int_info14972767
Ref: 148f14972767
Ref: library/sys sys int_info bits_per_digit14972954
Ref: 47b214972954
Ref: library/sys sys int_info sizeof_digit14973168
Ref: 47b314973168
Ref: library/sys sys int_info default_max_str_digits14973285
Ref: 256d14973285
Ref: library/sys sys int_info str_digits_check_threshold14973469
Ref: 47b414973469
Ref: library/sys sys __interactivehook__14973879
Ref: 11be14973879
Ref: library/sys sys intern14974465
Ref: 14d714974465
Ref: library/sys sys _is_gil_enabled14975392
Ref: 47b514975392
Ref: library/sys sys is_finalizing14975654
Ref: c7414975654
Ref: library/sys sys _jit14975942
Ref: 29214975942
Ref: library/sys sys _jit is_available14976321
Ref: 44c14976321
Ref: library/sys sys _jit is_enabled14976708
Ref: 44d14976708
Ref: library/sys sys _jit is_active14977190
Ref: 17cc14977190
Ref: library/sys sys last_exc14978580
Ref: 6da14978580
Ref: library/sys sys _is_immortal14979193
Ref: 28e14979193
Ref: library/sys sys _is_interned14979762
Ref: 55214979762
Ref: library/sys sys last_type14980033
Ref: 6db14980033
Ref: library/sys sys last_value14980057
Ref: 6dc14980057
Ref: library/sys sys last_traceback14980082
Ref: 6dd14980082
Ref: library/sys sys maxsize14980331
Ref: 13c114980331
Ref: library/sys sys maxunicode14980585
Ref: 124314980585
Ref: library/sys sys meta_path14980999
Ref: f1b14980999
Ref: library/sys sys modules14982366
Ref: 17ab14982366
Ref: library/sys sys orig_argv14983037
Ref: a3714983037
Ref: library/sys sys path14983545
Ref: 3e114983545
Ref: library/sys sys path_hooks14984992
Ref: 121a14984992
Ref: library/sys sys path_importer_cache14985330
Ref: 7ef14985330
Ref: library/sys sys platform14985820
Ref: 29014985820
Ref: library/sys sys platlibdir14988549
Ref: b2814988549
Ref: library/sys sys prefix14989616
Ref: 3e414989616
Ref: library/sys sys ps114990815
Ref: 1fe214990815
Ref: library/sys sys ps214990833
Ref: 1fe314990833
Ref: library/sys sys setdlopenflags14991339
Ref: 131b14991339
Ref: library/sys sys set_int_max_str_digits14992031
Ref: 184914992031
Ref: library/sys sys setprofile14992302
Ref: 16ec14992302
Ref: library/sys sys setrecursionlimit14994933
Ref: 6df14994933
Ref: library/sys sys setswitchinterval14995800
Ref: b3a14995800
Ref: library/sys sys settrace14996414
Ref: 2e014996414
Ref: library/sys sys set_asyncgen_hooks15001718
Ref: 18e115001718
Ref: library/sys sys set_coroutine_origin_tracking_depth15002875
Ref: d7915002875
Ref: library/sys sys activate_stack_trampoline15003784
Ref: 68f15003784
Ref: library/sys sys deactivate_stack_trampoline15004262
Ref: 69015004262
Ref: library/sys sys is_stack_trampoline_active15004545
Ref: 69115004545
Ref: library/sys sys remote_exec15004755
Ref: 16d15004755
Ref: library/sys sys _enablelegacywindowsfsencoding15006327
Ref: 33c15006327
Ref: library/sys sys stdin15007400
Ref: 75415007400
Ref: library/sys sys stdout15007420
Ref: cc015007420
Ref: library/sys sys stderr15007441
Ref: b2915007441
Ref: library/sys sys __stdin__15011025
Ref: 47b715011025
Ref: library/sys sys __stdout__15011049
Ref: 2b9e15011049
Ref: library/sys sys __stderr__15011074
Ref: 456315011074
Ref: library/sys sys stdlib_module_names15012089
Ref: a3815012089
Ref: library/sys sys thread_info15012906
Ref: 134c15012906
Ref: library/sys sys thread_info name15013033
Ref: 47b815013033
Ref: library/sys sys thread_info lock15013403
Ref: 47b915013403
Ref: library/sys sys thread_info version15013718
Ref: 47ba15013718
Ref: library/sys sys tracebacklimit15013926
Ref: 189715013926
Ref: library/sys sys unraisablehook15014342
Ref: 50115014342
Ref: library/sys sys version15016359
Ref: 49615016359
Ref: library/sys sys api_version15016780
Ref: 47bb15016780
Ref: library/sys sys version_info15017091
Ref: 8a415017091
Ref: library/sys sys warnoptions15017757
Ref: 3f215017757
Ref: library/sys sys winver15017989
Ref: 47bd15017989
Ref: library/sys sys _xoptions15018695
Ref: 1fde15018695
Ref: library/sys c9915019519
Ref: 479915019519
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-115019737
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-215019779
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-315019821
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-415019863
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-515019968
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-615020010
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-715020052
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-815020094
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-915020136
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1015020178
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1115020221
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1215020264
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1315020307
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1415020350
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1515020393
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1615020436
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1715020479
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1815020560
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1915020603
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-2015020646
Node: sys monitoring — Monitoramento de eventos de execução15020689
Ref: library/sys monitoring doc15020969
Ref: 47be15020969
Ref: library/sys monitoring module-sys monitoring15020969
Ref: e015020969
Ref: library/sys monitoring no-color15020969
Ref: 47bf15020969
Ref: library/sys monitoring sys-monitoring-execution-event-monitoring15020969
Ref: 47c015020969
Node: Identificadores de ferramenta15022208
Ref: library/sys monitoring tool-identifiers15022347
Ref: 47c115022347
Node: Registro e uso de ferramentas15023037
Ref: library/sys monitoring registering-and-using-tools15023132
Ref: 47c415023132
Ref: library/sys monitoring sys monitoring use_tool_id15023211
Ref: 47c515023211
Ref: library/sys monitoring sys monitoring clear_tool_id15023490
Ref: 188015023490
Ref: library/sys monitoring sys monitoring free_tool_id15023668
Ref: 47c615023668
Ref: library/sys monitoring sys monitoring get_tool15023892
Ref: 47c715023892
Node: Eventos15024445
Ref: library/sys monitoring events15024630
Ref: 47c215024630
Ref: library/sys monitoring monitoring-event-BRANCH_LEFT15024704
Ref: 29415024704
Ref: library/sys monitoring monitoring-event-BRANCH_RIGHT15025068
Ref: 29515025068
Ref: library/sys monitoring monitoring-event-CALL15025182
Ref: 18ff15025182
Ref: library/sys monitoring monitoring-event-C_RAISE15025304
Ref: 47c815025304
Ref: library/sys monitoring monitoring-event-C_RETURN15025474
Ref: 47c915025474
Ref: library/sys monitoring monitoring-event-EXCEPTION_HANDLED15025633
Ref: 47ca15025633
Ref: library/sys monitoring monitoring-event-INSTRUCTION15025728
Ref: 47cb15025728
Ref: library/sys monitoring monitoring-event-JUMP15025841
Ref: 47cc15025841
Ref: library/sys monitoring monitoring-event-LINE15025963
Ref: 47cd15025963
Ref: library/sys monitoring monitoring-event-PY_RESUME15026133
Ref: 47ce15026133
Ref: library/sys monitoring monitoring-event-PY_RETURN15026310
Ref: 47cf15026310
Ref: library/sys monitoring monitoring-event-PY_START15026487
Ref: 47d015026487
Ref: library/sys monitoring monitoring-event-PY_THROW15026672
Ref: 17bf15026672
Ref: library/sys monitoring monitoring-event-PY_UNWIND15026795
Ref: 47d115026795
Ref: library/sys monitoring monitoring-event-PY_YIELD15027034
Ref: 47d215027034
Ref: library/sys monitoring monitoring-event-RAISE15027207
Ref: 18c415027207
Ref: library/sys monitoring monitoring-event-RERAISE15027361
Ref: 47d415027361
Ref: library/sys monitoring monitoring-event-STOP_ITERATION15027517
Ref: 47d315027517
Ref: library/sys monitoring monitoring-event-NO_EVENTS15028138
Ref: 47d615028138
Node: Eventos locais15028542
Ref: library/sys monitoring local-events15028629
Ref: 47d715028629
Ref: library/sys monitoring monitoring-event-local15028629
Ref: 47d815028629
Node: Evento descontinuado15029175
Ref: library/sys monitoring deprecated-event15029289
Ref: 47d915029289
Node: Eventos auxiliares15029586
Ref: library/sys monitoring ancillary-events15029700
Ref: 47da15029700
Node: Outros eventos15030167
Ref: library/sys monitoring other-events15030284
Ref: 47db15030284
Node: O evento STOP_ITERATION15030639
Ref: library/sys monitoring the-stop-iteration-event15030729
Ref: 47d515030729
Ref: O evento STOP_ITERATION-Footnote-115031822
Node: Ativação e desativação de eventos15031903
Ref: library/sys monitoring turning-events-on-and-off15032102
Ref: 47dc15032102
Node: Definir eventos globalmente15032606
Ref: library/sys monitoring setting-events-globally15032742
Ref: 47dd15032742
Ref: library/sys monitoring sys monitoring get_events15032930
Ref: 47de15032930
Ref: library/sys monitoring sys monitoring set_events15033072
Ref: 47df15033072
Node: Eventos por objeto código15033334
Ref: library/sys monitoring per-code-object-events15033503
Ref: 47e015033503
Ref: library/sys monitoring sys monitoring get_local_events15033859
Ref: 47e115033859
Ref: library/sys monitoring sys monitoring set_local_events15034007
Ref: 47e215034007
Node: Desativação de eventos15034285
Ref: library/sys monitoring disabling-events15034418
Ref: 47e315034418
Ref: library/sys monitoring sys monitoring DISABLE15034487
Ref: 47e415034487
Ref: library/sys monitoring sys monitoring restart_events15035209
Ref: 47e515035209
Node: Registro de funções de retorno de chamada15035393
Ref: library/sys monitoring callbacks15035576
Ref: 47c315035576
Ref: library/sys monitoring registering-callback-functions15035576
Ref: 47e615035576
Ref: library/sys monitoring sys monitoring register_callback15035683
Ref: 45f015035683
Node: Argumentos da função de retorno de chamada15036780
Ref: library/sys monitoring callback-function-arguments15036904
Ref: 47e715036904
Ref: library/sys monitoring sys monitoring MISSING15037013
Ref: 47e815037013
Node: sysconfig — Fornece acesso às informações de configuração do Python15039120
Ref: library/sysconfig doc15039375
Ref: 47e915039375
Ref: library/sysconfig module-sysconfig15039375
Ref: e115039375
Ref: library/sysconfig no-color15039375
Ref: 47ea15039375
Ref: library/sysconfig sysconfig-provide-access-to-python-s-configuration-information15039375
Ref: 47eb15039375
Ref: sysconfig — Fornece acesso às informações de configuração do Python-Footnote-115040189
Node: Variáveis de configuração15040255
Ref: library/sysconfig configuration-variables15040427
Ref: 47ec15040427
Ref: library/sysconfig sysconfig get_config_vars15040965
Ref: 29715040965
Ref: library/sysconfig sysconfig get_config_var15041371
Ref: 17415041371
Node: Caminhos de instalação15041822
Ref: library/sysconfig id115042022
Ref: 47ed15042022
Ref: library/sysconfig installation-paths15042022
Ref: 44615042022
Node: Esquema de usuário15044673
Ref: library/sysconfig sysconfig-user-scheme15044860
Ref: 1fe515044860
Ref: library/sysconfig user-scheme15044860
Ref: 47ee15044860
Node: posix_user15045433
Ref: library/sysconfig posix-user15045515
Ref: 47ef15045515
Node: nt_user15046363
Ref: library/sysconfig nt-user15046472
Ref: 47f015046472
Node: osx_framework_user15047308
Ref: library/sysconfig osx-framework-user15047398
Ref: 47f115047398
Node: Esquema de home15048242
Ref: library/sysconfig home-scheme15048423
Ref: 47f215048423
Ref: library/sysconfig sysconfig-home-scheme15048423
Ref: 47f315048423
Node: posix_home15048950
Ref: library/sysconfig posix-home15049012
Ref: 47f415049012
Node: Esquema de prefixo15049866
Ref: library/sysconfig prefix-scheme15050064
Ref: 47f515050064
Ref: library/sysconfig sysconfig-prefix-scheme15050064
Ref: 47f615050064
Node: posix_prefix15051531
Ref: library/sysconfig posix-prefix15051609
Ref: 47f715051609
Node: nt15052542
Ref: library/sysconfig nt15052620
Ref: 47f815052620
Node: Funções de caminho de instalação15053465
Ref: library/sysconfig installation-path-functions15053667
Ref: 47f915053667
Ref: library/sysconfig sysconfig get_scheme_names15053854
Ref: 47fa15053854
Ref: library/sysconfig sysconfig get_default_scheme15054001
Ref: 1ac715054001
Ref: library/sysconfig sysconfig get_preferred_scheme15054375
Ref: 89415054375
Ref: library/sysconfig sysconfig _get_preferred_schemes15055003
Ref: 47fb15055003
Ref: library/sysconfig sysconfig get_path_names15055733
Ref: 47fc15055733
Ref: library/sysconfig sysconfig get_path15055887
Ref: 152815055887
Ref: library/sysconfig sysconfig get_paths15057202
Ref: 33e15057202
Node: Outras funções<3>15057880
Ref: library/sysconfig other-functions15058090
Ref: 47fd15058090
Ref: library/sysconfig sysconfig get_python_version15058143
Ref: 143f15058143
Ref: library/sysconfig sysconfig get_platform15058323
Ref: 143e15058323
Ref: library/sysconfig sysconfig is_python_build15059476
Ref: 32b15059476
Ref: library/sysconfig sysconfig parse_config_h15059837
Ref: 47fe15059837
Ref: library/sysconfig sysconfig get_config_h_filename15060275
Ref: 47ff15060275
Ref: library/sysconfig sysconfig get_makefile_filename15060370
Ref: 480015060370
Ref: library/sysconfig sysconfig-cli15060462
Ref: 480115060462
Node: Uso na linha de comando<9>15060463
Ref: library/sysconfig command-line-usage15060628
Ref: 480215060628
Ref: library/sysconfig using-sysconfig-as-a-script15060628
Ref: 480315060628
Node: builtins — Objetos embutidos15061698
Ref: library/builtins doc15061938
Ref: 480415061938
Ref: library/builtins builtins-built-in-objects15061938
Ref: 480515061938
Ref: library/builtins module-builtins15061938
Ref: 1315061938
Ref: library/builtins no-color15061938
Ref: 480615061938
Node: __main__ — Ambiente de código principal15063613
Ref: library/__main__ doc15063810
Ref: 480715063810
Ref: library/__main__ main-top-level-code-environment15063810
Ref: 480815063810
Ref: library/__main__ module-__main__15063810
Ref: 115063810
Ref: library/__main__ no-color15063810
Ref: 480915063810
Node: __name__ == '__main__'15064651
Ref: library/__main__ name-equals-main15064790
Ref: 480a15064790
Ref: library/__main__ name-main15064790
Ref: 480b15064790
Node: O que é o “ambiente de código principal”?15065588
Ref: library/__main__ what-is-the-top-level-code-environment15065718
Ref: 480c15065718
Node: Uso idiomático15067964
Ref: library/__main__ idiomatic-usage15068132
Ref: 480d15068132
Node: Considerações sobre pacotes15070288
Ref: library/__main__ packaging-considerations15070400
Ref: 480e15070400
Ref: Considerações sobre pacotes-Footnote-115072046
Ref: Considerações sobre pacotes-Footnote-215072075
Node: __main__ py em pacotes Python15072113
Ref: library/__main__ main-py-in-python-packages15072276
Ref: 480f15072276
Node: Uso idiomático<2>15073752
Ref: library/__main__ id115073836
Ref: 481015073836
Node: import __main__15075328
Ref: library/__main__ import-main15075460
Ref: 481115075460
Node: warnings — Controle de avisos15078473
Ref: library/warnings doc15078668
Ref: 481215078668
Ref: library/warnings module-warnings15078668
Ref: 11815078668
Ref: library/warnings no-color15078668
Ref: 481315078668
Ref: library/warnings warnings-warning-control15078668
Ref: 481415078668
Ref: warnings — Controle de avisos-Footnote-115081208
Node: Categorias de avisos15081276
Ref: library/warnings id115081391
Ref: 481815081391
Ref: library/warnings warning-categories15081391
Ref: 25a415081391
Node: O filtro de avisos15085765
Ref: library/warnings the-warnings-filter15085921
Ref: 481915085921
Ref: library/warnings warning-filter15085921
Ref: 1b115085921
Node: Critérios de supressão de avisos repetidos15089584
Ref: library/warnings id215089720
Ref: 481a15089720
Ref: library/warnings repeated-warning-suppression-criteria15089720
Ref: 481b15089720
Node: Descrevendo filtros de aviso15090411
Ref: library/warnings describing-warning-filters15090580
Ref: 1fd715090580
Ref: library/warnings id315090580
Ref: 481c15090580
Node: Filtro de avisos padrão15092308
Ref: library/warnings default-warning-filter15092462
Ref: 481d15092462
Ref: library/warnings id415092462
Ref: 481e15092462
Node: Overriding the default filter15093568
Ref: library/warnings overriding-the-default-filter15093685
Ref: 481f15093685
Ref: library/warnings warning-disable15093685
Ref: 482015093685
Node: Temporarily Suppressing Warnings15095120
Ref: library/warnings temporarily-suppressing-warnings15095272
Ref: 482115095272
Ref: library/warnings warning-suppress15095272
Ref: 482215095272
Node: Testing Warnings15096354
Ref: library/warnings testing-warnings15096534
Ref: 482415096534
Ref: library/warnings warning-testing15096534
Ref: 482515096534
Node: Updating Code For New Versions of Dependencies15098567
Ref: library/warnings updating-code-for-new-versions-of-dependencies15098737
Ref: 482615098737
Ref: library/warnings warning-ignored15098737
Ref: 44af15098737
Node: Funções disponíveis15100127
Ref: library/warnings available-functions15100319
Ref: 482715100319
Ref: library/warnings warning-functions15100319
Ref: 482815100319
Ref: library/warnings warnings warn15100383
Ref: 170715100383
Ref: library/warnings warnings warn_explicit15102969
Ref: ef115102969
Ref: library/warnings warnings showwarning15104153
Ref: 481715104153
Ref: library/warnings warnings formatwarning15104791
Ref: 1cae15104791
Ref: library/warnings warnings filterwarnings15105223
Ref: 169715105223
Ref: library/warnings warnings simplefilter15105899
Ref: 8c515105899
Ref: library/warnings warnings resetwarnings15106335
Ref: 481615106335
Ref: library/warnings warnings deprecated15106603
Ref: 48315106603
Ref: Funções disponíveis-Footnote-115108475
Node: Gerenciadores de contexto disponíveis15108517
Ref: library/warnings available-context-managers15108700
Ref: 482915108700
Ref: library/warnings warnings catch_warnings15108798
Ref: 17915108798
Node: Concurrent safety of Context Managers15110432
Ref: library/warnings concurrent-safety-of-context-managers15110584
Ref: 482a15110584
Ref: library/warnings warning-concurrent-safe15110584
Ref: 482315110584
Node: dataclasses — Data Classes15113660
Ref: library/dataclasses doc15113875
Ref: 482b15113875
Ref: library/dataclasses dataclasses-data-classes15113875
Ref: 482c15113875
Ref: library/dataclasses module-dataclasses15113875
Ref: 3315113875
Ref: library/dataclasses no-color15113875
Ref: 482d15113875
Ref: dataclasses — Data Classes-Footnote-115115675
Ref: dataclasses — Data Classes-Footnote-215115746
Ref: dataclasses — Data Classes-Footnote-315115788
Node: Conteúdo do módulo<8>15115830
Ref: library/dataclasses module-contents15115961
Ref: 482e15115961
Ref: library/dataclasses dataclasses dataclass15116020
Ref: 4db15116020
Ref: library/dataclasses dataclasses field15126112
Ref: 18ae15126112
Ref: library/dataclasses dataclasses Field15131004
Ref: 18af15131004
Ref: library/dataclasses dataclasses InitVar15131769
Ref: 1ac615131769
Ref: library/dataclasses dataclasses fields15132177
Ref: 188715132177
Ref: library/dataclasses dataclasses asdict15132585
Ref: 19d115132585
Ref: library/dataclasses dataclasses astuple15133645
Ref: 19da15133645
Ref: library/dataclasses dataclasses make_dataclass15134406
Ref: 17c715134406
Ref: library/dataclasses dataclasses replace15136576
Ref: 19a915136576
Ref: library/dataclasses dataclasses is_dataclass15138076
Ref: 1b1615138076
Ref: library/dataclasses dataclasses MISSING15138570
Ref: 483115138570
Ref: library/dataclasses dataclasses KW_ONLY15138673
Ref: 483015138673
Ref: library/dataclasses dataclasses FrozenInstanceError15139621
Ref: 483415139621
Ref: Conteúdo do módulo<8>-Footnote-115139932
Node: Processamento pós-inicialização15139987
Ref: library/dataclasses id115140147
Ref: 483515140147
Ref: library/dataclasses post-init-processing15140147
Ref: 483615140147
Ref: library/dataclasses dataclasses __post_init__15140233
Ref: 483315140233
Node: Variáveis de classe15141994
Ref: library/dataclasses class-variables15142167
Ref: 483715142167
Ref: library/dataclasses dataclasses-class-variables15142167
Ref: 483815142167
Ref: Variáveis de classe-Footnote-115142734
Node: Variáveis de inicialização apenas15142776
Ref: library/dataclasses dataclasses-init-only-variables15142931
Ref: 483215142931
Ref: library/dataclasses init-only-variables15142931
Ref: 483915142931
Node: Frozen instances15144191
Ref: library/dataclasses dataclasses-frozen15144337
Ref: 482f15144337
Ref: library/dataclasses frozen-instances15144337
Ref: 483a15144337
Node: Herança<2>15144934
Ref: library/dataclasses dataclasses-inheritance15145094
Ref: 483b15145094
Ref: library/dataclasses inheritance15145094
Ref: 483c15145094
Node: Re-ordering of keyword-only parameters in __init__15146143
Ref: library/dataclasses re-ordering-of-keyword-only-parameters-in-init15146316
Ref: 483d15146316
Node: Funções padrão de fábrica15147571
Ref: library/dataclasses default-factory-functions15147758
Ref: 483e15147758
Node: Valores padrão mutáveis15148380
Ref: library/dataclasses mutable-default-values15148540
Ref: 483f15148540
Node: Descriptor-typed fields15150570
Ref: library/dataclasses descriptor-typed-fields15150692
Ref: 484015150692
Node: contextlib — Utilitários para contextos da instrução with15152670
Ref: library/contextlib doc15152884
Ref: 484115152884
Ref: library/contextlib contextlib-utilities-for-with-statement-contexts15152884
Ref: 484215152884
Ref: library/contextlib module-contextlib15152884
Ref: 2715152884
Ref: library/contextlib no-color15152884
Ref: 484315152884
Ref: contextlib — Utilitários para contextos da instrução with-Footnote-115153603
Node: Utilitários15153673
Ref: library/contextlib utilities15153815
Ref: 484415153815
Ref: library/contextlib contextlib AbstractContextManager15153892
Ref: e7e15153892
Ref: library/contextlib contextlib AbstractAsyncContextManager15154414
Ref: d1415154414
Ref: library/contextlib contextlib contextmanager15154957
Ref: 13fe15154957
Ref: library/contextlib contextlib asynccontextmanager15158172
Ref: d1315158172
Ref: library/contextlib contextlib closing15160340
Ref: 157b15160340
Ref: library/contextlib contextlib aclosing15161646
Ref: 9e415161646
Ref: library/contextlib simplifying-support-for-single-optional-context-managers15162868
Ref: 484515162868
Ref: library/contextlib contextlib nullcontext15162868
Ref: 9e515162868
Ref: library/contextlib contextlib suppress15164705
Ref: 111e15164705
Ref: library/contextlib contextlib redirect_stdout15166365
Ref: fdc15166365
Ref: library/contextlib contextlib redirect_stderr15167851
Ref: fdb15167851
Ref: library/contextlib contextlib chdir15168126
Ref: 81515168126
Ref: library/contextlib contextlib ContextDecorator15168868
Ref: 13fd15168868
Ref: library/contextlib contextlib AsyncContextDecorator15171315
Ref: 9e615171315
Ref: library/contextlib contextlib ExitStack15172413
Ref: d1215172413
Ref: library/contextlib contextlib ExitStack enter_context15174416
Ref: 7e315174416
Ref: library/contextlib contextlib ExitStack push15175008
Ref: 484715175008
Ref: library/contextlib contextlib ExitStack callback15175901
Ref: c6a15175901
Ref: library/contextlib contextlib ExitStack pop_all15176358
Ref: 484815176358
Ref: library/contextlib contextlib ExitStack close15177411
Ref: 484915177411
Ref: library/contextlib contextlib AsyncExitStack15177700
Ref: d1515177700
Ref: library/contextlib contextlib AsyncExitStack enter_async_context15178068
Ref: 7e415178068
Ref: library/contextlib contextlib AsyncExitStack push_async_exit15178405
Ref: 484b15178405
Ref: library/contextlib contextlib AsyncExitStack push_async_callback15178585
Ref: c6b15178585
Ref: library/contextlib contextlib AsyncExitStack aclose15178752
Ref: 484a15178752
Node: Exemplos e receitas<3>15179367
Ref: library/contextlib examples-and-recipes15179568
Ref: 484c15179568
Node: Supporting a variable number of context managers15180014
Ref: library/contextlib supporting-a-variable-number-of-context-managers15180172
Ref: 484d15180172
Node: Catching exceptions from __enter__ methods15181214
Ref: library/contextlib catching-exceptions-from-enter-methods15181423
Ref: 484e15181423
Node: Cleaning up in an __enter__ implementation15182571
Ref: library/contextlib cleaning-up-in-an-enter-implementation15182783
Ref: 484f15182783
Node: Replacing any use of try-finally and flag variables15184686
Ref: library/contextlib replacing-any-use-of-try-finally-and-flag-variables15184903
Ref: 485015184903
Node: Using a context manager as a function decorator15187476
Ref: library/contextlib using-a-context-manager-as-a-function-decorator15187642
Ref: 485115187642
Ref: Using a context manager as a function decorator-Footnote-115189485
Node: Single use reusable and reentrant context managers15189527
Ref: library/contextlib single-use-reusable-and-reentrant-cms15189707
Ref: 112015189707
Ref: library/contextlib single-use-reusable-and-reentrant-context-managers15189707
Ref: 485215189707
Node: Reentrant context managers15191260
Ref: library/contextlib reentrant-cms15191422
Ref: 484615191422
Ref: library/contextlib reentrant-context-managers15191422
Ref: 485315191422
Node: Gerenciadores de contexto reutilizáveis15192960
Ref: library/contextlib reusable-cms15193122
Ref: 485415193122
Ref: library/contextlib reusable-context-managers15193122
Ref: 485515193122
Node: abc — Classes base abstratas15195829
Ref: library/abc doc15196049
Ref: 485615196049
Ref: library/abc abc-abstract-base-classes15196049
Ref: 485715196049
Ref: library/abc module-abc15196049
Ref: 415196049
Ref: library/abc no-color15196049
Ref: 485815196049
Ref: library/abc abc ABC15197141
Ref: 111015197141
Ref: library/abc abc ABCMeta15198009
Ref: 111115198009
Ref: library/abc abc ABCMeta register15198833
Ref: 128415198833
Ref: library/abc abc ABCMeta __subclasshook__15199557
Ref: 283615199557
Ref: library/abc abc abstractmethod15202550
Ref: 128115202550
Ref: library/abc abc abstractclassmethod15205799
Ref: 128215205799
Ref: library/abc abc abstractstaticmethod15206563
Ref: 128315206563
Ref: library/abc abc abstractproperty15207332
Ref: 128015207332
Ref: library/abc abc get_cache_token15208828
Ref: 110f15208828
Ref: library/abc abc update_abstractmethods15209212
Ref: 485915209212
Ref: abc — Classes base abstratas-Footnote-115209929
Ref: abc — Classes base abstratas-Footnote-215209992
Ref: abc — Classes base abstratas-Footnote-315210034
Ref: abc — Classes base abstratas-Footnote-415210076
Node: atexit — Manipuladores de saída15210192
Ref: library/atexit doc15210405
Ref: 485a15210405
Ref: library/atexit atexit-exit-handlers15210405
Ref: 485b15210405
Ref: library/atexit module-atexit15210405
Ref: d15210405
Ref: library/atexit no-color15210405
Ref: 485c15210405
Ref: library/atexit atexit register15211555
Ref: a7415211555
Ref: library/atexit atexit unregister15213383
Ref: 485d15213383
Node: Exemplo do atexit15214164
Ref: library/atexit atexit-example15214252
Ref: 485e15214252
Ref: library/atexit id115214252
Ref: 485f15214252
Node: traceback — Imprime ou recupera um traceback da pilha15215663
Ref: library/traceback doc15215896
Ref: 486015215896
Ref: library/traceback module-traceback15215896
Ref: 10415215896
Ref: library/traceback no-color15215896
Ref: 486115215896
Ref: library/traceback traceback-print-or-retrieve-a-stack-traceback15215896
Ref: 486215215896
Ref: traceback — Imprime ou recupera um traceback da pilha-Footnote-115218109
Node: Funções de nível de módulo15218178
Ref: library/traceback module-level-functions15218335
Ref: 486315218335
Ref: library/traceback traceback print_tb15218414
Ref: 107b15218414
Ref: library/traceback traceback print_exception15219362
Ref: a4515219362
Ref: library/traceback traceback print_exc15220887
Ref: 1b2315220887
Ref: library/traceback traceback print_last15221070
Ref: 486415221070
Ref: library/traceback traceback print_stack15221376
Ref: 107c15221376
Ref: library/traceback traceback extract_tb15221940
Ref: 486515221940
Ref: library/traceback traceback extract_stack15222592
Ref: 486a15222592
Ref: library/traceback traceback print_list15222906
Ref: 184715222906
Ref: library/traceback traceback format_list15223209
Ref: 486b15223209
Ref: library/traceback traceback format_exception_only15223719
Ref: a4415223719
Ref: library/traceback traceback format_exception15225105
Ref: a4315225105
Ref: library/traceback traceback format_exc15225847
Ref: 486c15225847
Ref: library/traceback traceback format_tb15226007
Ref: 473115226007
Ref: library/traceback traceback format_stack15226123
Ref: 486d15226123
Ref: library/traceback traceback clear_frames15226248
Ref: 11ca15226248
Ref: library/traceback traceback walk_stack15226498
Ref: 107715226498
Ref: library/traceback traceback walk_tb15227053
Ref: 107815227053
Node: TracebackException Objects15227300
Ref: library/traceback tracebackexception-objects15227486
Ref: 486f15227486
Ref: library/traceback traceback TracebackException15227974
Ref: 55c15227974
Ref: library/traceback traceback TracebackException __cause__15229288
Ref: 487115229288
Ref: library/traceback traceback TracebackException __context__15229395
Ref: 487015229395
Ref: library/traceback traceback TracebackException exceptions15229516
Ref: 487315229516
Ref: library/traceback traceback TracebackException __suppress_context__15229799
Ref: 487215229799
Ref: library/traceback traceback TracebackException __notes__15229934
Ref: 487415229934
Ref: library/traceback traceback TracebackException stack15230248
Ref: 487515230248
Ref: library/traceback traceback TracebackException exc_type15230341
Ref: 55d15230341
Ref: library/traceback traceback TracebackException exc_type_str15230465
Ref: 55b15230465
Ref: library/traceback traceback TracebackException filename15230603
Ref: 487615230603
Ref: library/traceback traceback TracebackException lineno15230703
Ref: 487715230703
Ref: library/traceback traceback TracebackException end_lineno15230803
Ref: 487815230803
Ref: library/traceback traceback TracebackException text15230995
Ref: 487915230995
Ref: library/traceback traceback TracebackException offset15231086
Ref: 487a15231086
Ref: library/traceback traceback TracebackException end_offset15231205
Ref: 487b15231205
Ref: library/traceback traceback TracebackException msg15231406
Ref: 487c15231406
Ref: library/traceback traceback TracebackException from_exception15231489
Ref: 487d15231489
Ref: library/traceback traceback TracebackException print15231874
Ref: 8a815231874
Ref: library/traceback traceback TracebackException format15232088
Ref: 487e15232088
Ref: library/traceback traceback TracebackException format_exception_only15232540
Ref: 55e15232540
Node: StackSummary Objects15233581
Ref: library/traceback stacksummary-objects15233757
Ref: 487f15233757
Ref: library/traceback traceback StackSummary15233929
Ref: 107915233929
Ref: library/traceback traceback StackSummary extract15233965
Ref: 486e15233965
Ref: library/traceback traceback StackSummary from_list15234962
Ref: 488015234962
Ref: library/traceback traceback StackSummary format15235268
Ref: 488115235268
Ref: library/traceback traceback StackSummary format_frame_summary15235902
Ref: 8a715235902
Node: FrameSummary Objects15236313
Ref: library/traceback framesummary-objects15236507
Ref: 488215236507
Ref: library/traceback traceback FrameSummary15236700
Ref: 107a15236700
Ref: library/traceback traceback FrameSummary filename15237619
Ref: 486615237619
Ref: library/traceback traceback FrameSummary lineno15237821
Ref: 486715237821
Ref: library/traceback traceback FrameSummary name15237910
Ref: 486815237910
Ref: library/traceback traceback FrameSummary line15238045
Ref: 486915238045
Ref: library/traceback traceback FrameSummary end_lineno15238253
Ref: 488315238253
Ref: library/traceback traceback FrameSummary colno15238536
Ref: 488415238536
Ref: library/traceback traceback FrameSummary end_colno15238696
Ref: 488515238696
Node: Examples of Using the Module-Level Functions15238865
Ref: library/traceback examples-of-using-the-module-level-functions15239075
Ref: 488615239075
Ref: library/traceback traceback-example15239075
Ref: 488715239075
Node: Examples of Using TracebackException15244520
Ref: library/traceback examples-of-using-tracebackexception15244701
Ref: 488815244701
Node: __future__ — Definições de instruções future15247357
Ref: library/__future__ doc15247595
Ref: 488915247595
Ref: library/__future__ future-future-statement-definitions15247595
Ref: 488a15247595
Ref: library/__future__ module-__future__15247595
Ref: 015247595
Ref: library/__future__ no-color15247595
Ref: 488b15247595
Ref: __future__ — Definições de instruções future-Footnote-115249325
Node: Conteúdo do módulo<9>15249395
Ref: library/__future__ module-contents15249505
Ref: 488c15249505
Ref: library/__future__ future__ nested_scopes15250179
Ref: 488d15250179
Ref: library/__future__ future__ generators15250580
Ref: 488e15250580
Ref: library/__future__ future__ division15250974
Ref: 488f15250974
Ref: library/__future__ future__ absolute_import15251381
Ref: 489015251381
Ref: library/__future__ future__ with_statement15251889
Ref: 489115251889
Ref: library/__future__ future__ print_function15252290
Ref: 489215252290
Ref: library/__future__ future__ unicode_literals15252689
Ref: 489315252689
Ref: library/__future__ future__ generator_stop15253096
Ref: 489415253096
Ref: library/__future__ future__ annotations15253513
Ref: 489515253513
Ref: library/__future__ future-classes15254166
Ref: 489615254166
Ref: library/__future__ future__ _Feature15254166
Ref: 245615254166
Ref: library/__future__ future__ _Feature getOptionalRelease15254823
Ref: 489715254823
Ref: library/__future__ future__ _Feature getMandatoryRelease15254959
Ref: 489815254959
Ref: library/__future__ future__ _Feature compiler_flag15255605
Ref: 222915255605
Ref: Conteúdo do módulo<9>-Footnote-115256228
Ref: Conteúdo do módulo<9>-Footnote-215256270
Ref: Conteúdo do módulo<9>-Footnote-315256312
Ref: Conteúdo do módulo<9>-Footnote-415256354
Ref: Conteúdo do módulo<9>-Footnote-515256396
Ref: Conteúdo do módulo<9>-Footnote-615256438
Ref: Conteúdo do módulo<9>-Footnote-715256480
Ref: Conteúdo do módulo<9>-Footnote-815256522
Ref: Conteúdo do módulo<9>-Footnote-915256564
Ref: Conteúdo do módulo<9>-Footnote-1015256884
Ref: Conteúdo do módulo<9>-Footnote-1115256927
Ref: Conteúdo do módulo<9>-Footnote-1215256970
Node: gc — Interface para o coletor de lixo15257013
Ref: library/gc doc15257232
Ref: 489915257232
Ref: library/gc gc-garbage-collector-interface15257232
Ref: 489a15257232
Ref: library/gc module-gc15257232
Ref: 6415257232
Ref: library/gc no-color15257232
Ref: 489b15257232
Ref: library/gc gc enable15258252
Ref: 489c15258252
Ref: library/gc gc disable15258325
Ref: 489d15258325
Ref: library/gc gc isenabled15258401
Ref: 489e15258401
Ref: library/gc gc collect15258501
Ref: 1b315258501
Ref: library/gc gc set_debug15259682
Ref: 489f15259682
Ref: library/gc gc get_debug15260003
Ref: 48a015260003
Ref: library/gc gc get_objects15260102
Ref: 9fa15260102
Ref: library/gc gc get_stats15260749
Ref: 2db15260749
Ref: library/gc gc set_threshold15261445
Ref: 2d915261445
Ref: library/gc gc get_count15263058
Ref: 2da15263058
Ref: library/gc gc get_threshold15263187
Ref: 2d815263187
Ref: library/gc gc get_referrers15263330
Ref: 9fb15263330
Ref: library/gc gc get_referents15264436
Ref: 9fc15264436
Ref: library/gc gc is_tracked15265264
Ref: 150915265264
Ref: library/gc gc is_finalized15266107
Ref: aef15266107
Ref: library/gc gc freeze15266624
Ref: d2215266624
Ref: library/gc gc unfreeze15267509
Ref: d2315267509
Ref: library/gc gc get_freeze_count15267675
Ref: d2415267675
Ref: library/gc gc garbage15267938
Ref: 13bd15267938
Ref: library/gc gc callbacks15268889
Ref: 12c315268889
Ref: library/gc gc DEBUG_STATS15270340
Ref: 48a215270340
Ref: library/gc gc DEBUG_COLLECTABLE15270491
Ref: 48a315270491
Ref: library/gc gc DEBUG_UNCOLLECTABLE15270594
Ref: 13be15270594
Ref: library/gc gc DEBUG_SAVEALL15271016
Ref: 48a115271016
Ref: library/gc gc DEBUG_LEAK15271234
Ref: 48a415271234
Ref: gc — Interface para o coletor de lixo-Footnote-115271499
Ref: gc — Interface para o coletor de lixo-Footnote-215271586
Node: inspect — Inspecione objetos vivos15271628
Ref: library/inspect doc15271864
Ref: 48a515271864
Ref: library/inspect inspect-inspect-live-objects15271864
Ref: 48a615271864
Ref: library/inspect no-color15271864
Ref: 48a715271864
Ref: library/inspect module-inspect15271961
Ref: 8215271961
Ref: inspect — Inspecione objetos vivos-Footnote-115273231
Node: Tipos e membros15273298
Ref: library/inspect inspect-types15273417
Ref: 1c4915273417
Ref: library/inspect types-and-members15273417
Ref: 48a815273417
Ref: library/inspect inspect getmembers15293492
Ref: 1af915293492
Ref: library/inspect inspect getmembers_static15294105
Ref: 84e15294105
Ref: library/inspect inspect getmodulename15294849
Ref: f2815294849
Ref: library/inspect inspect ismodule15295527
Ref: 48aa15295527
Ref: library/inspect inspect isclass15295619
Ref: 48ab15295619
Ref: library/inspect inspect ismethod15295758
Ref: 48ac15295758
Ref: library/inspect inspect ispackage15295874
Ref: 23115295874
Ref: library/inspect inspect isfunction15296013
Ref: 48ad15296013
Ref: library/inspect inspect isgeneratorfunction15296191
Ref: 1a7715296191
Ref: library/inspect inspect isgenerator15296664
Ref: 48ae15296664
Ref: library/inspect inspect iscoroutinefunction15296762
Ref: 30b15296762
Ref: library/inspect inspect markcoroutinefunction15297620
Ref: 6ad15297620
Ref: library/inspect inspect iscoroutine15298217
Ref: 100c15298217
Ref: library/inspect inspect isawaitable15298410
Ref: 100d15298410
Ref: library/inspect inspect isasyncgenfunction15298891
Ref: 1a7815298891
Ref: library/inspect inspect isasyncgen15299593
Ref: 48af15299593
Ref: library/inspect inspect istraceback15299828
Ref: 48b015299828
Ref: library/inspect inspect isframe15299926
Ref: 48b115299926
Ref: library/inspect inspect iscode15300016
Ref: 48b215300016
Ref: library/inspect inspect isbuiltin15300104
Ref: 48b315300104
Ref: library/inspect inspect ismethodwrapper15300240
Ref: 84f15300240
Ref: library/inspect inspect isroutine15300550
Ref: 1aea15300550
Ref: library/inspect inspect isabstract15300685
Ref: 48b415300685
Ref: library/inspect inspect ismethoddescriptor15300793
Ref: 18a115300793
Ref: library/inspect inspect isdatadescriptor15302003
Ref: 48b515302003
Ref: library/inspect inspect isgetsetdescriptor15302633
Ref: 48b615302633
Ref: library/inspect inspect ismemberdescriptor15302993
Ref: 48b715302993
Node: Retrieving source code15303364
Ref: library/inspect inspect-source15303541
Ref: 48b815303541
Ref: library/inspect retrieving-source-code15303541
Ref: 48b915303541
Ref: library/inspect inspect getdoc15303608
Ref: be315303608
Ref: library/inspect inspect getcomments15304133
Ref: 188a15304133
Ref: library/inspect inspect getfile15304557
Ref: 1d3a15304557
Ref: library/inspect inspect getmodule15304793
Ref: 1a8915304793
Ref: library/inspect inspect getsourcefile15304953
Ref: 1a8a15304953
Ref: library/inspect inspect getsourcelines15305254
Ref: 174515305254
Ref: library/inspect inspect getsource15305971
Ref: 174c15305971
Ref: library/inspect inspect cleandoc15306524
Ref: 196a15306524
Node: Introspecting callables with the Signature object15306935
Ref: library/inspect inspect-signature-object15307119
Ref: 48ba15307119
Ref: library/inspect introspecting-callables-with-the-signature-object15307119
Ref: 48bb15307119
Ref: library/inspect inspect signature15307455
Ref: 22e15307455
Ref: library/inspect inspect Signature15310504
Ref: 4dd15310504
Ref: library/inspect inspect Signature empty15311621
Ref: 48be15311621
Ref: library/inspect inspect Signature parameters15311740
Ref: 48bc15311740
Ref: library/inspect inspect Signature return_annotation15312235
Ref: 48bf15312235
Ref: library/inspect inspect Signature bind15312453
Ref: 17f615312453
Ref: library/inspect inspect Signature bind_partial15312732
Ref: 48c015312732
Ref: library/inspect inspect Signature replace15313110
Ref: 48bd15313110
Ref: library/inspect inspect Signature format15313985
Ref: 23015313985
Ref: library/inspect inspect Signature from_callable15314893
Ref: 93715314893
Ref: library/inspect inspect Parameter15315616
Ref: 4de15315616
Ref: library/inspect inspect Parameter empty15316060
Ref: 48c215316060
Ref: library/inspect inspect Parameter name15316208
Ref: 48c315316208
Ref: library/inspect inspect Parameter default15316654
Ref: 48c415316654
Ref: library/inspect inspect Parameter annotation15316854
Ref: 48c515316854
Ref: library/inspect inspect Parameter kind15317051
Ref: 48c615317051
Ref: library/inspect inspect Parameter kind description15320081
Ref: 48c715320081
Ref: library/inspect inspect Parameter replace15320648
Ref: 48c115320648
Ref: library/inspect inspect BoundArguments15321827
Ref: 125f15321827
Ref: library/inspect inspect BoundArguments arguments15322032
Ref: afe15322032
Ref: library/inspect inspect BoundArguments args15322882
Ref: 48c815322882
Ref: library/inspect inspect BoundArguments kwargs15323032
Ref: 48c915323032
Ref: library/inspect inspect BoundArguments signature15323276
Ref: 48ca15323276
Ref: library/inspect inspect BoundArguments apply_defaults15323373
Ref: 100b15323373
Ref: Introspecting callables with the Signature object-Footnote-115324363
Node: Classes e funções<2>15324405
Ref: library/inspect classes-and-functions15324591
Ref: 48cb15324591
Ref: library/inspect inspect-classes-functions15324591
Ref: 48cc15324591
Ref: library/inspect inspect getclasstree15324650
Ref: 48cd15324650
Ref: library/inspect inspect getfullargspec15325229
Ref: 93615325229
Ref: library/inspect inspect getargvalues15327600
Ref: 10b515327600
Ref: library/inspect inspect formatargvalues15328105
Ref: 10b615328105
Ref: library/inspect inspect getmro15328576
Ref: 48ce15328576
Ref: library/inspect inspect getcallargs15328940
Ref: 10b415328940
Ref: library/inspect inspect getclosurevars15330315
Ref: 12d115330315
Ref: library/inspect inspect unwrap15331038
Ref: 115215331038
Ref: library/inspect inspect get_annotations15331779
Ref: a0a15331779
Node: A pilha to interpretador15332551
Ref: library/inspect inspect-stack15332718
Ref: 48cf15332718
Ref: library/inspect the-interpreter-stack15332718
Ref: 48d015332718
Ref: library/inspect inspect FrameInfo15333046
Ref: 85115333046
Ref: library/inspect inspect FrameInfo frame15333077
Ref: 48d115333077
Ref: library/inspect inspect FrameInfo filename15333175
Ref: 48d215333175
Ref: library/inspect inspect FrameInfo lineno15333320
Ref: 48d315333320
Ref: library/inspect inspect FrameInfo function15333485
Ref: 48d415333485
Ref: library/inspect inspect FrameInfo code_context15333617
Ref: 48d515333617
Ref: library/inspect inspect FrameInfo index15333784
Ref: 48d615333784
Ref: library/inspect inspect FrameInfo positions15333915
Ref: 48d715333915
Ref: library/inspect inspect Traceback15334455
Ref: 85215334455
Ref: library/inspect inspect Traceback filename15334486
Ref: 48d815334486
Ref: library/inspect inspect Traceback lineno15334634
Ref: 48d915334634
Ref: library/inspect inspect Traceback function15334802
Ref: 48da15334802
Ref: library/inspect inspect Traceback code_context15334937
Ref: 48db15334937
Ref: library/inspect inspect Traceback index15335107
Ref: 48dc15335107
Ref: library/inspect inspect Traceback positions15335238
Ref: 48dd15335238
Ref: library/inspect inspect getframeinfo15337169
Ref: 85415337169
Ref: library/inspect inspect getouterframes15337437
Ref: 85515337437
Ref: library/inspect inspect getinnerframes15338046
Ref: 85615338046
Ref: library/inspect inspect currentframe15338651
Ref: 8e615338651
Ref: library/inspect inspect stack15339061
Ref: 85715339061
Ref: library/inspect inspect trace15339562
Ref: 85815339562
Node: Fetching attributes statically15340152
Ref: library/inspect fetching-attributes-statically15340363
Ref: 48de15340363
Ref: library/inspect inspect getattr_static15340945
Ref: 6b115340945
Node: Current State of Generators Coroutines and Asynchronous Generators15342757
Ref: library/inspect current-state-of-generators-coroutines-and-asynchronous-generators15342966
Ref: 48df15342966
Ref: library/inspect inspect getgeneratorstate15343448
Ref: 143215343448
Ref: library/inspect inspect getcoroutinestate15343848
Ref: 100f15343848
Ref: library/inspect inspect getasyncgenstate15344469
Ref: 6af15344469
Ref: library/inspect inspect getgeneratorlocals15345346
Ref: 12d215345346
Ref: library/inspect inspect getcoroutinelocals15346237
Ref: 100e15346237
Ref: library/inspect inspect getasyncgenlocals15346480
Ref: 6b015346480
Node: Code Objects Bit Flags15346773
Ref: library/inspect code-objects-bit-flags15346964
Ref: 48e015346964
Ref: library/inspect inspect-module-co-flags15346964
Ref: 222815346964
Ref: library/inspect inspect CO_OPTIMIZED15347134
Ref: 48e115347134
Ref: library/inspect inspect CO_NEWLOCALS15347221
Ref: 48e215347221
Ref: library/inspect inspect CO_VARARGS15347372
Ref: 48e315347372
Ref: library/inspect inspect CO_VARKEYWORDS15347480
Ref: 48e415347480
Ref: library/inspect inspect CO_NESTED15347592
Ref: 48e515347592
Ref: library/inspect inspect CO_GENERATOR15347686
Ref: 48e615347686
Ref: library/inspect inspect CO_COROUTINE15347861
Ref: 48e715347861
Ref: library/inspect inspect CO_ITERABLE_COROUTINE15348103
Ref: 48e815348103
Ref: library/inspect inspect CO_ASYNC_GENERATOR15348423
Ref: 48e915348423
Ref: library/inspect inspect CO_HAS_DOCSTRING15348699
Ref: 222a15348699
Ref: library/inspect inspect CO_METHOD15348928
Ref: 48ea15348928
Ref: Code Objects Bit Flags-Footnote-115349453
Ref: Code Objects Bit Flags-Footnote-215349495
Ref: Code Objects Bit Flags-Footnote-315349537
Node: Buffer flags15349579
Ref: library/inspect buffer-flags15349736
Ref: 48eb15349736
Ref: library/inspect inspect BufferFlags15349783
Ref: 68215349783
Ref: library/inspect inspect BufferFlags SIMPLE15350106
Ref: 48ed15350106
Ref: library/inspect inspect BufferFlags WRITABLE15350133
Ref: 48ee15350133
Ref: library/inspect inspect BufferFlags FORMAT15350162
Ref: 48ef15350162
Ref: library/inspect inspect BufferFlags ND15350189
Ref: 48f015350189
Ref: library/inspect inspect BufferFlags STRIDES15350212
Ref: 48f115350212
Ref: library/inspect inspect BufferFlags C_CONTIGUOUS15350240
Ref: 48f215350240
Ref: library/inspect inspect BufferFlags F_CONTIGUOUS15350273
Ref: 48f315350273
Ref: library/inspect inspect BufferFlags ANY_CONTIGUOUS15350306
Ref: 48f415350306
Ref: library/inspect inspect BufferFlags INDIRECT15350341
Ref: 48f515350341
Ref: library/inspect inspect BufferFlags CONTIG15350370
Ref: 48f615350370
Ref: library/inspect inspect BufferFlags CONTIG_RO15350397
Ref: 48f715350397
Ref: library/inspect inspect BufferFlags STRIDED15350427
Ref: 48f815350427
Ref: library/inspect inspect BufferFlags STRIDED_RO15350455
Ref: 48f915350455
Ref: library/inspect inspect BufferFlags RECORDS15350486
Ref: 48fa15350486
Ref: library/inspect inspect BufferFlags RECORDS_RO15350514
Ref: 48fb15350514
Ref: library/inspect inspect BufferFlags FULL15350545
Ref: 48fc15350545
Ref: library/inspect inspect BufferFlags FULL_RO15350570
Ref: 48fd15350570
Ref: library/inspect inspect BufferFlags READ15350598
Ref: 184b15350598
Ref: library/inspect inspect BufferFlags WRITE15350623
Ref: 184c15350623
Node: Interface de linha de comando<8>15350683
Ref: library/inspect command-line-interface15350809
Ref: 48fe15350809
Ref: library/inspect inspect-module-cli15350809
Ref: 115115350809
Ref: library/inspect cmdoption-inspect-details15351200
Ref: 48ff15351200
Node: annotationlib — Funcionalidade para introspecção de anotações15351307
Ref: library/annotationlib doc15351557
Ref: 490015351557
Ref: library/annotationlib annotationlib-functionality-for-introspecting-annotations15351557
Ref: 490115351557
Ref: library/annotationlib module-annotationlib15351557
Ref: 615351557
Ref: library/annotationlib no-color15351557
Ref: 490215351557
Ref: annotationlib — Funcionalidade para introspecção de anotações-Footnote-115354715
Ref: annotationlib — Funcionalidade para introspecção de anotações-Footnote-215354788
Ref: annotationlib — Funcionalidade para introspecção de anotações-Footnote-315354830
Ref: annotationlib — Funcionalidade para introspecção de anotações-Footnote-415354872
Ref: annotationlib — Funcionalidade para introspecção de anotações-Footnote-515354914
Node: Semânticas de anotação15354966
Ref: library/annotationlib annotation-semantics15355114
Ref: 490415355114
Ref: Semânticas de anotação-Footnote-115358025
Ref: Semânticas de anotação-Footnote-215358067
Ref: Semânticas de anotação-Footnote-315358109
Ref: Semânticas de anotação-Footnote-415358151
Ref: Semânticas de anotação-Footnote-515358193
Ref: Semânticas de anotação-Footnote-615358235
Ref: Semânticas de anotação-Footnote-715358277
Ref: Semânticas de anotação-Footnote-815358319
Ref: Semânticas de anotação-Footnote-915358361
Node: Classes<5>15358403
Ref: library/annotationlib classes15358573
Ref: 490515358573
Ref: library/annotationlib annotationlib Format15358610
Ref: 22f15358610
Ref: library/annotationlib annotationlib Format VALUE15358969
Ref: 15e15358969
Ref: library/annotationlib annotationlib Format VALUE_WITH_FAKE_GLOBALS15359094
Ref: 490615359094
Ref: library/annotationlib annotationlib Format FORWARDREF15359686
Ref: 15f15359686
Ref: library/annotationlib annotationlib Format STRING15360023
Ref: 16015360023
Ref: library/annotationlib annotationlib ForwardRef15360440
Ref: 17c315360440
Ref: library/annotationlib annotationlib ForwardRef __forward_arg__15360865
Ref: 490715360865
Ref: library/annotationlib annotationlib ForwardRef evaluate15361083
Ref: 177015361083
Node: Funções<12>15364338
Ref: library/annotationlib functions15364494
Ref: 490815364494
Ref: library/annotationlib annotationlib annotations_to_string15364533
Ref: 490915364533
Ref: library/annotationlib annotationlib call_annotate_function15365453
Ref: 490315365453
Ref: library/annotationlib annotationlib call_evaluate_function15366774
Ref: 437f15366774
Ref: library/annotationlib annotationlib get_annotate_from_class_namespace15368775
Ref: 45815368775
Ref: library/annotationlib annotationlib get_annotations15369392
Ref: 45615369392
Ref: library/annotationlib annotationlib type_repr15374049
Ref: 17c015374049
Ref: Funções<12>-Footnote-115374797
Node: Receitas<3>15374888
Ref: library/annotationlib recipes15375064
Ref: 490b15375064
Node: Usando anotações em uma metaclasse15375154
Ref: library/annotationlib annotationlib-metaclass15375238
Ref: 490a15375238
Ref: library/annotationlib using-annotations-in-a-metaclass15375238
Ref: 490c15375238
Node: Limitações do formato STRING15378458
Ref: library/annotationlib limitations-of-the-string-format15378655
Ref: 490d15378655
Node: Limitações do formato FORWARDREF15382743
Ref: library/annotationlib limitations-of-the-forwardref-format15382979
Ref: 493215382979
Node: Security implications of introspecting annotations15384115
Ref: library/annotationlib annotationlib-security15384312
Ref: 43a715384312
Ref: library/annotationlib security-implications-of-introspecting-annotations15384312
Ref: 493315384312
Node: site — Gancho de configuração específico do site15385536
Ref: library/site doc15385741
Ref: 493415385741
Ref: library/site module-site15385741
Ref: cc15385741
Ref: library/site no-color15385741
Ref: 493515385741
Ref: library/site site-site-specific-configuration-hook15385741
Ref: 493615385741
Ref: library/site site-virtual-environments-configuration15388310
Ref: 474315388310
Ref: site — Gancho de configuração específico do site-Footnote-115391496
Node: sitecustomize15391560
Ref: library/site module-sitecustomize15391685
Ref: cd15391685
Ref: library/site sitecustomize15391685
Ref: 493715391685
Node: usercustomize15392526
Ref: library/site module-usercustomize15392683
Ref: 11415392683
Ref: library/site usercustomize15392683
Ref: 493815392683
Node: Configuração Readline15393576
Ref: library/site readline-configuration15393744
Ref: 493a15393744
Ref: library/site rlcompleter-config15393744
Ref: 11bf15393744
Node: Conteúdo do módulo<10>15394465
Ref: library/site module-contents15394652
Ref: 493b15394652
Ref: library/site site PREFIXES15394713
Ref: 493c15394713
Ref: library/site site ENABLE_USER_SITE15394797
Ref: 493915394797
Ref: library/site site USER_SITE15395319
Ref: 1fe415395319
Ref: library/site site USER_BASE15395993
Ref: 151815395993
Ref: library/site site main15396624
Ref: 1fd415396624
Ref: library/site site addsitedir15397025
Ref: 211d15397025
Ref: library/site site getsitepackages15397260
Ref: 143a15397260
Ref: library/site site getuserbase15397420
Ref: 143b15397420
Ref: library/site site getusersitepackages15397689
Ref: 143c15397689
Node: Interface de linha de comando<9>15398131
Ref: library/site command-line-interface15398286
Ref: 493d15398286
Ref: library/site site-commandline15398286
Ref: 493e15398286
Ref: library/site cmdoption-site-user-base15398847
Ref: 493f15398847
Ref: library/site cmdoption-site-user-site15398930
Ref: 494015398930
Ref: Interface de linha de comando<9>-Footnote-115399902
Node: Interpretadores Python Personalizados15399944
Ref: library/custominterp doc15400124
Ref: 494115400124
Ref: library/custominterp custom-python-interpreters15400124
Ref: 494215400124
Ref: library/custominterp custominterp15400124
Ref: 494315400124
Ref: library/custominterp no-color15400124
Ref: 494415400124
Node: code — Classes bases do interpretador15400784
Ref: library/code doc15400939
Ref: 494515400939
Ref: library/code code-interpreter-base-classes15400939
Ref: 494615400939
Ref: library/code module-code15400939
Ref: 1b15400939
Ref: library/code code InteractiveInterpreter15401412
Ref: 189615401412
Ref: library/code code InteractiveConsole15402292
Ref: 26a015402292
Ref: library/code code interact15402888
Ref: 17f415402888
Ref: library/code code compile_command15403923
Ref: 494915403923
Ref: code — Classes bases do interpretador-Footnote-115405285
Node: Objetos de interpretador interativo15405349
Ref: library/code interactive-interpreter-objects15405498
Ref: 494a15405498
Ref: library/code interpreter-objects15405498
Ref: 494b15405498
Ref: library/code code InteractiveInterpreter runsource15405589
Ref: 494c15405589
Ref: library/code code InteractiveInterpreter runcode15406921
Ref: 494e15406921
Ref: library/code code InteractiveInterpreter showsyntaxerror15407422
Ref: 494d15407422
Ref: library/code code InteractiveInterpreter showtraceback15407941
Ref: fc215407941
Ref: library/code code InteractiveInterpreter write15408329
Ref: 494f15408329
Node: Objetos de console Interativo15408573
Ref: library/code console-objects15408722
Ref: 495015408722
Ref: library/code interactive-console-objects15408722
Ref: 495115408722
Ref: library/code code InteractiveConsole interact15409000
Ref: 494815409000
Ref: library/code code InteractiveConsole push15409934
Ref: 495215409934
Ref: library/code code InteractiveConsole resetbuffer15410668
Ref: 495315410668
Ref: library/code code InteractiveConsole raw_input15410785
Ref: 494715410785
Node: codeop — Compila código Python15411184
Ref: library/codeop doc15411339
Ref: 495415411339
Ref: library/codeop codeop-compile-python-code15411339
Ref: 495515411339
Ref: library/codeop module-codeop15411339
Ref: 1d15411339
Ref: library/codeop no-color15411339
Ref: 495615411339
Ref: library/codeop codeop compile_command15412405
Ref: 1a6f15412405
Ref: library/codeop codeop Compile15413931
Ref: 495715413931
Ref: library/codeop codeop CommandCompiler15414347
Ref: 495815414347
Ref: codeop — Compila código Python-Footnote-115414789
Node: Importando módulos15414855
Ref: library/modules doc15415025
Ref: 495915415025
Ref: library/modules importing-modules15415025
Ref: 495a15415025
Ref: library/modules modules15415025
Ref: 495b15415025
Ref: library/modules no-color15415025
Ref: 495c15415025
Node: zipimport - Importa módulos de arquivos Zip15416078
Ref: library/zipimport doc15416233
Ref: 495d15416233
Ref: library/zipimport module-zipimport15416233
Ref: 13815416233
Ref: library/zipimport zipimport-import-modules-from-zip-archives15416233
Ref: 495e15416233
Ref: library/zipimport zipimport ZipImportError15418645
Ref: 495f15418645
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-115418954
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-215419023
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-315419091
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-415419133
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-515419175
Node: Objetos zipimporter15419217
Ref: library/zipimport id115419338
Ref: 496015419338
Ref: library/zipimport zipimporter-objects15419338
Ref: 496115419338
Ref: library/zipimport zipimport zipimporter15419463
Ref: 496215419463
Ref: library/zipimport zipimport zipimporter create_module15420149
Ref: a5515420149
Ref: library/zipimport zipimport zipimporter exec_module15420408
Ref: 33715420408
Ref: library/zipimport zipimport zipimporter find_spec15420574
Ref: a5415420574
Ref: library/zipimport zipimport zipimporter get_code15420764
Ref: 496315420764
Ref: library/zipimport zipimport zipimporter get_data15420964
Ref: 496415420964
Ref: library/zipimport zipimport zipimporter get_filename15421270
Ref: 496515421270
Ref: library/zipimport zipimport zipimporter get_source15421551
Ref: 496615421551
Ref: library/zipimport zipimport zipimporter is_package15421860
Ref: 496715421860
Ref: library/zipimport zipimport zipimporter load_module15422082
Ref: 33615422082
Ref: library/zipimport zipimport zipimporter invalidate_caches15422493
Ref: a5615422493
Ref: library/zipimport zipimport zipimporter archive15422675
Ref: 496815422675
Ref: library/zipimport zipimport zipimporter prefix15422800
Ref: 496915422800
Node: Exemplos<34>15423222
Ref: library/zipimport examples15423343
Ref: 496a15423343
Ref: library/zipimport zipimport-examples15423343
Ref: 496b15423343
Node: pkgutil — Utilitário de extensão de pacote15424032
Ref: library/pkgutil doc15424250
Ref: 496c15424250
Ref: library/pkgutil module-pkgutil15424250
Ref: ae15424250
Ref: library/pkgutil no-color15424250
Ref: 496d15424250
Ref: library/pkgutil pkgutil-package-extension-utility15424250
Ref: 496e15424250
Ref: library/pkgutil pkgutil ModuleInfo15424567
Ref: f3c15424567
Ref: library/pkgutil pkgutil extend_path15424747
Ref: 187615424747
Ref: library/pkgutil pkgutil get_importer15426661
Ref: 496f15426661
Ref: library/pkgutil pkgutil iter_importers15427260
Ref: 139515427260
Ref: library/pkgutil pkgutil iter_modules15428112
Ref: f3b15428112
Ref: library/pkgutil pkgutil walk_packages15429034
Ref: ded15429034
Ref: library/pkgutil pkgutil get_data15430760
Ref: 497015430760
Ref: library/pkgutil pkgutil resolve_name15431946
Ref: 497215431946
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-115433950
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-215434017
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-315434059
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-415434101
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-515434143
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-615434185
Node: modulefinder — Procura módulos usados por um script15434250
Ref: library/modulefinder doc15434474
Ref: 497315434474
Ref: library/modulefinder module-modulefinder15434474
Ref: 9515434474
Ref: library/modulefinder modulefinder-find-modules-used-by-a-script15434474
Ref: 497415434474
Ref: library/modulefinder no-color15434474
Ref: 497515434474
Ref: library/modulefinder modulefinder AddPackagePath15435060
Ref: 497615435060
Ref: library/modulefinder modulefinder ReplacePackage15435226
Ref: 497715435226
Ref: library/modulefinder modulefinder ModuleFinder15435390
Ref: 1c9c15435390
Ref: library/modulefinder modulefinder ModuleFinder report15436130
Ref: 497915436130
Ref: library/modulefinder modulefinder ModuleFinder run_script15436360
Ref: 497815436360
Ref: library/modulefinder modulefinder ModuleFinder modules15436499
Ref: 497a15436499
Ref: modulefinder — Procura módulos usados por um script-Footnote-115436741
Node: Exemplo de uso de ModuleFinder15436813
Ref: library/modulefinder example-usage-of-modulefinder15436934
Ref: 497c15436934
Ref: library/modulefinder modulefinder-example15436934
Ref: 497b15436934
Node: runpy — Localizando e executando módulos Python15438304
Ref: library/runpy doc15438523
Ref: 497d15438523
Ref: library/runpy module-runpy15438523
Ref: c315438523
Ref: library/runpy no-color15438523
Ref: 497e15438523
Ref: library/runpy runpy-locating-and-executing-python-modules15438523
Ref: 497f15438523
Ref: library/runpy runpy run_module15439668
Ref: 1aae15439668
Ref: library/runpy runpy run_path15443425
Ref: 49e15443425
Ref: runpy — Localizando e executando módulos Python-Footnote-115448356
Ref: runpy — Localizando e executando módulos Python-Footnote-215448421
Ref: runpy — Localizando e executando módulos Python-Footnote-315448463
Ref: runpy — Localizando e executando módulos Python-Footnote-415448505
Ref: runpy — Localizando e executando módulos Python-Footnote-515448547
Ref: runpy — Localizando e executando módulos Python-Footnote-615448589
Ref: runpy — Localizando e executando módulos Python-Footnote-715448631
Ref: runpy — Localizando e executando módulos Python-Footnote-815448673
Node: importlib — A implementação de import15448715
Ref: library/importlib doc15448951
Ref: 498015448951
Ref: library/importlib importlib-the-implementation-of-import15448951
Ref: 498115448951
Ref: library/importlib module-importlib15448951
Ref: 7b15448951
Ref: library/importlib no-color15448951
Ref: 498215448951
Ref: importlib — A implementação de import-Footnote-115449697
Node: Introdução<13>15449776
Ref: library/importlib introduction15449892
Ref: 498315449892
Ref: Introdução<13>-Footnote-115452426
Ref: Introdução<13>-Footnote-215452478
Ref: Introdução<13>-Footnote-315452520
Ref: Introdução<13>-Footnote-415452562
Ref: Introdução<13>-Footnote-515452604
Ref: Introdução<13>-Footnote-615452646
Ref: Introdução<13>-Footnote-715452688
Ref: Introdução<13>-Footnote-815452730
Ref: Introdução<13>-Footnote-915452772
Ref: Introdução<13>-Footnote-1015452814
Ref: Introdução<13>-Footnote-1115452857
Ref: Introdução<13>-Footnote-1215452900
Ref: Introdução<13>-Footnote-1315452943
Node: Funções<13>15452986
Ref: library/importlib functions15453179
Ref: 498415453179
Ref: library/importlib importlib __import__15453216
Ref: 126315453216
Ref: library/importlib importlib import_module15453519
Ref: 73115453519
Ref: library/importlib importlib invalidate_caches15454949
Ref: dfe15454949
Ref: library/importlib importlib reload15455659
Ref: 73215455659
Node: importlib abc – classes base abstratas relacionadas a importação15459472
Ref: library/importlib importlib-abc-abstract-base-classes-related-to-import15459706
Ref: 498515459706
Ref: library/importlib module-importlib abc15459706
Ref: 7c15459706
Ref: library/importlib importlib abc MetaPathFinder15460557
Ref: a6415460557
Ref: library/importlib importlib abc MetaPathFinder find_spec15460802
Ref: a5e15460802
Ref: library/importlib importlib abc MetaPathFinder invalidate_caches15461615
Ref: 498615461615
Ref: library/importlib importlib abc PathEntryFinder15462047
Ref: a6515462047
Ref: library/importlib importlib abc PathEntryFinder find_spec15462539
Ref: a6215462539
Ref: library/importlib importlib abc PathEntryFinder invalidate_caches15463256
Ref: 498715463256
Ref: library/importlib importlib abc Loader15463573
Ref: 10bd15463573
Ref: library/importlib importlib abc Loader create_module15464051
Ref: ea015464051
Ref: library/importlib importlib abc Loader exec_module15464489
Ref: a6015464489
Ref: library/importlib importlib abc Loader load_module15464995
Ref: a5f15464995
Ref: library/importlib importlib abc ResourceLoader15467211
Ref: dd615467211
Ref: library/importlib importlib abc ResourceLoader get_data15467799
Ref: 497115467799
Ref: library/importlib importlib abc InspectLoader15468705
Ref: 114a15468705
Ref: library/importlib importlib abc InspectLoader get_code15468913
Ref: 114b15468913
Ref: library/importlib importlib abc InspectLoader get_source15469548
Ref: 114e15469548
Ref: library/importlib importlib abc InspectLoader is_package15470263
Ref: 498915470263
Ref: library/importlib importlib abc InspectLoader source_to_code15470678
Ref: 100715470678
Ref: library/importlib importlib abc InspectLoader exec_module15471398
Ref: 120815471398
Ref: library/importlib importlib abc InspectLoader load_module15471539
Ref: 498a15471539
Ref: library/importlib importlib abc ExecutionLoader15471759
Ref: 498b15471759
Ref: library/importlib importlib abc ExecutionLoader get_filename15472013
Ref: 498c15472013
Ref: library/importlib importlib abc FileLoader15472673
Ref: 126915472673
Ref: library/importlib importlib abc FileLoader name15473179
Ref: 498d15473179
Ref: library/importlib importlib abc FileLoader path15473266
Ref: 498e15473266
Ref: library/importlib importlib abc FileLoader load_module15473336
Ref: 498f15473336
Ref: library/importlib importlib abc FileLoader get_filename15473546
Ref: 499015473546
Ref: library/importlib importlib abc FileLoader get_data15473641
Ref: 499115473641
Ref: library/importlib importlib abc SourceLoader15473766
Ref: 499215473766
Ref: library/importlib importlib abc SourceLoader path_stats15474975
Ref: 138615474975
Ref: library/importlib importlib abc SourceLoader path_mtime15475795
Ref: 138515475795
Ref: library/importlib importlib abc SourceLoader set_data15476382
Ref: 499315476382
Ref: library/importlib importlib abc SourceLoader get_code15476930
Ref: 499415476930
Ref: library/importlib importlib abc SourceLoader exec_module15477056
Ref: 120915477056
Ref: library/importlib importlib abc SourceLoader load_module15477206
Ref: 499515477206
Ref: library/importlib importlib abc SourceLoader get_source15477435
Ref: 121715477435
Ref: library/importlib importlib abc SourceLoader is_package15477565
Ref: 499615477565
Ref: library/importlib importlib abc ResourceReader15478014
Ref: ce815478014
Ref: library/importlib importlib abc ResourceReader open_resource15480006
Ref: 499715480006
Ref: library/importlib importlib abc ResourceReader resource_path15480305
Ref: 499815480305
Ref: library/importlib importlib abc ResourceReader is_resource15480571
Ref: 499915480571
Ref: library/importlib importlib abc ResourceReader contents15480805
Ref: 1cdb15480805
Ref: library/importlib importlib abc Traversable15481823
Ref: 1b2815481823
Ref: library/importlib importlib abc Traversable name15482265
Ref: 499a15482265
Ref: library/importlib importlib abc Traversable iterdir15482376
Ref: 499b15482376
Ref: library/importlib importlib abc Traversable is_dir15482480
Ref: 499c15482480
Ref: library/importlib importlib abc Traversable is_file15482587
Ref: 499d15482587
Ref: library/importlib importlib abc Traversable joinpath15482692
Ref: 499e15482692
Ref: library/importlib importlib abc Traversable __truediv__15482797
Ref: 499f15482797
Ref: library/importlib importlib abc Traversable open15482911
Ref: 49a015482911
Ref: library/importlib importlib abc Traversable read_bytes15483298
Ref: 49a115483298
Ref: library/importlib importlib abc Traversable read_text15483384
Ref: 49a215483384
Ref: library/importlib importlib abc TraversableResources15483482
Ref: 1b2615483482
Ref: library/importlib importlib abc TraversableResources files15484269
Ref: 49a315484269
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-115484460
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-215484533
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-315484575
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-415484617
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-515484659
Node: importlib machinery – Importadores e ganchos de caminho15484701
Ref: library/importlib importlib-machinery-importers-and-path-hooks15484967
Ref: 49a415484967
Ref: library/importlib module-importlib machinery15484967
Ref: 7d15484967
Ref: library/importlib importlib machinery SOURCE_SUFFIXES15485327
Ref: 72d15485327
Ref: library/importlib importlib machinery DEBUG_BYTECODE_SUFFIXES15485520
Ref: 181115485520
Ref: library/importlib importlib machinery OPTIMIZED_BYTECODE_SUFFIXES15485807
Ref: 181215485807
Ref: library/importlib importlib machinery BYTECODE_SUFFIXES15486093
Ref: 72f15486093
Ref: library/importlib importlib machinery EXTENSION_SUFFIXES15486398
Ref: 72e15486398
Ref: library/importlib importlib machinery all_suffixes15486590
Ref: 48a915486590
Ref: library/importlib importlib machinery BuiltinImporter15487096
Ref: ea115487096
Ref: library/importlib importlib machinery FrozenImporter15487715
Ref: 121515487715
Ref: library/importlib importlib machinery WindowsRegistryFinder15488163
Ref: f1a15488163
Ref: library/importlib importlib machinery PathFinder15488711
Ref: 121915488711
Ref: library/importlib importlib machinery PathFinder find_spec15489046
Ref: 120715489046
Ref: library/importlib importlib machinery PathFinder invalidate_caches15490370
Ref: dfd15490370
Ref: library/importlib importlib machinery FileFinder15491041
Ref: 126815491041
Ref: library/importlib importlib machinery FileFinder path15492536
Ref: 49a515492536
Ref: library/importlib importlib machinery FileFinder find_spec15492615
Ref: 10bc15492615
Ref: library/importlib importlib machinery FileFinder invalidate_caches15492804
Ref: 49a615492804
Ref: library/importlib importlib machinery FileFinder path_hook15492878
Ref: 49a715492878
Ref: library/importlib importlib machinery SourceFileLoader15493354
Ref: 126a15493354
Ref: library/importlib importlib machinery SourceFileLoader name15493665
Ref: 49a815493665
Ref: library/importlib importlib machinery SourceFileLoader path15493755
Ref: 49a915493755
Ref: library/importlib importlib machinery SourceFileLoader is_package15493823
Ref: 49aa15493823
Ref: library/importlib importlib machinery SourceFileLoader path_stats15493953
Ref: 49ab15493953
Ref: library/importlib importlib machinery SourceFileLoader set_data15494092
Ref: 49ac15494092
Ref: library/importlib importlib machinery SourceFileLoader load_module15494233
Ref: f1815494233
Ref: library/importlib importlib machinery SourcelessFileLoader15494585
Ref: 126b15494585
Ref: library/importlib importlib machinery SourcelessFileLoader name15495131
Ref: 49ad15495131
Ref: library/importlib importlib machinery SourcelessFileLoader path15495217
Ref: 49ae15495217
Ref: library/importlib importlib machinery SourcelessFileLoader is_package15495291
Ref: 49af15495291
Ref: library/importlib importlib machinery SourcelessFileLoader get_code15495408
Ref: 49b015495408
Ref: library/importlib importlib machinery SourcelessFileLoader get_source15495553
Ref: 49b115495553
Ref: library/importlib importlib machinery SourcelessFileLoader load_module15495721
Ref: f1915495721
Ref: library/importlib importlib machinery ExtensionFileLoader15496048
Ref: ea215496048
Ref: library/importlib importlib machinery ExtensionFileLoader name15496806
Ref: 49b215496806
Ref: library/importlib importlib machinery ExtensionFileLoader path15496892
Ref: 49b315496892
Ref: library/importlib importlib machinery ExtensionFileLoader create_module15496965
Ref: 49b415496965
Ref: library/importlib importlib machinery ExtensionFileLoader exec_module15497155
Ref: 49b515497155
Ref: library/importlib importlib machinery ExtensionFileLoader is_package15497323
Ref: 49b615497323
Ref: library/importlib importlib machinery ExtensionFileLoader get_code15497507
Ref: 49b715497507
Ref: library/importlib importlib machinery ExtensionFileLoader get_source15497649
Ref: 49b815497649
Ref: library/importlib importlib machinery ExtensionFileLoader get_filename15497788
Ref: 114f15497788
Ref: library/importlib importlib machinery NamespaceLoader15497906
Ref: 114c15497906
Ref: library/importlib importlib machinery ModuleSpec15498605
Ref: 211715498605
Ref: library/importlib importlib machinery ModuleSpec name15499412
Ref: 21fe15499412
Ref: library/importlib importlib machinery ModuleSpec loader15499621
Ref: 33a15499621
Ref: library/importlib importlib machinery ModuleSpec origin15499823
Ref: 49b915499823
Ref: library/importlib importlib machinery ModuleSpec submodule_search_locations15500324
Ref: 220115500324
Ref: library/importlib importlib machinery ModuleSpec loader_state15500973
Ref: 49ba15500973
Ref: library/importlib importlib machinery ModuleSpec cached15501216
Ref: 32015501216
Ref: library/importlib importlib machinery ModuleSpec parent15501513
Ref: 32215501513
Ref: library/importlib importlib machinery ModuleSpec has_location15501803
Ref: 49bb15501803
Ref: library/importlib importlib machinery AppleFrameworkLoader15502089
Ref: 211615502089
Ref: library/importlib importlib machinery AppleFrameworkLoader name15505416
Ref: 49bc15505416
Ref: library/importlib importlib machinery AppleFrameworkLoader path15505502
Ref: 49bd15505502
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-115505630
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-215505710
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-315505752
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-415505794
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-515505836
Node: importlib util – Utility code for importers15505878
Ref: library/importlib importlib-util-utility-code-for-importers15506088
Ref: 49be15506088
Ref: library/importlib module-importlib util15506088
Ref: 8115506088
Ref: library/importlib importlib util MAGIC_NUMBER15506414
Ref: 72c15506414
Ref: library/importlib importlib util cache_from_source15506659
Ref: 35015506659
Ref: library/importlib importlib util source_from_cache15508591
Ref: 73315508591
Ref: library/importlib importlib util decode_source15509238
Ref: 114d15509238
Ref: library/importlib importlib util resolve_name15509516
Ref: afc15509516
Ref: library/importlib importlib util find_spec15510424
Ref: 5a815510424
Ref: library/importlib importlib util module_from_spec15511383
Ref: 100815511383
Ref: library/importlib importlib util spec_from_loader15512024
Ref: a6315512024
Ref: library/importlib importlib util spec_from_file_location15512484
Ref: ea315512484
Ref: library/importlib importlib util source_hash15512987
Ref: d3215512987
Ref: library/importlib importlib util _incompatible_extension_module_restrictions15513265
Ref: 49bf15513265
Ref: library/importlib importlib util LazyLoader15514387
Ref: e9f15514387
Ref: library/importlib importlib util LazyLoader factory15515878
Ref: 49c015515878
Ref: importlib util – Utility code for importers-Footnote-115516442
Ref: importlib util – Utility code for importers-Footnote-215516516
Ref: importlib util – Utility code for importers-Footnote-315516558
Ref: importlib util – Utility code for importers-Footnote-415516600
Ref: importlib util – Utility code for importers-Footnote-515516642
Ref: importlib util – Utility code for importers-Footnote-615516684
Ref: importlib util – Utility code for importers-Footnote-715516726
Node: Exemplos<35>15516768
Ref: library/importlib examples15516912
Ref: 49c115516912
Ref: library/importlib importlib-examples15516912
Ref: 49c215516912
Node: Importing programmatically15517218
Ref: library/importlib importing-programmatically15517342
Ref: 49c315517342
Node: Checando se o módulo pode ser importado15517573
Ref: library/importlib checking-if-a-module-can-be-imported15517745
Ref: 49c415517745
Node: Importa o arquivo de origem diretamente15518665
Ref: library/importlib importing-a-source-file-directly15518836
Ref: 49c515518836
Node: Implementing lazy imports15520018
Ref: library/importlib implementing-lazy-imports15520171
Ref: 49c615520171
Node: Setting up an importer15520890
Ref: library/importlib setting-up-an-importer15521041
Ref: 49c715521041
Node: Approximating importlib import_module15522618
Ref: library/importlib approximating-importlib-import-module15522735
Ref: 49c815522735
Node: importlib resources – Leitura abertura e acesso a recursos de pacotes15524235
Ref: library/importlib resources doc15524485
Ref: 49c915524485
Ref: library/importlib resources importlib-resources-package-resource-reading-opening-and-access15524485
Ref: 49ca15524485
Ref: library/importlib resources module-importlib resources15524485
Ref: 7f15524485
Ref: library/importlib resources no-color15524485
Ref: 49cb15524485
Ref: library/importlib resources importlib resources Anchor15526676
Ref: 49cc15526676
Ref: library/importlib resources importlib resources files15526890
Ref: 6ab15526890
Ref: library/importlib resources importlib resources as_file15528043
Ref: 6aa15528043
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-115528964
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-215529053
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-315529147
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-415529218
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-515529290
Node: API funcional15529367
Ref: library/importlib resources functional-api15529488
Ref: 49cd15529488
Ref: library/importlib resources importlib-resources-functional15529488
Ref: 49ce15529488
Ref: library/importlib resources importlib resources open_binary15530906
Ref: 4f815530906
Ref: library/importlib resources importlib resources open_text15531408
Ref: 4f915531408
Ref: library/importlib resources importlib resources read_binary15532435
Ref: 4fb15532435
Ref: library/importlib resources importlib resources read_text15532849
Ref: 4fc15532849
Ref: library/importlib resources importlib resources path15533785
Ref: 4fa15533785
Ref: library/importlib resources importlib resources is_resource15534866
Ref: 4f715534866
Ref: library/importlib resources importlib resources contents15535345
Ref: 4fd15535345
Node: importlib resources abc – Classes base abstratas para recursos15536098
Ref: library/importlib resources abc doc15536359
Ref: 49cf15536359
Ref: library/importlib resources abc importlib-resources-abc-abstract-base-classes-for-resources15536359
Ref: 49d015536359
Ref: library/importlib resources abc module-importlib resources abc15536359
Ref: 8015536359
Ref: library/importlib resources abc no-color15536359
Ref: 49d115536359
Ref: library/importlib resources abc importlib resources abc ResourceReader15536659
Ref: 498815536659
Ref: library/importlib resources abc importlib resources abc ResourceReader open_resource15538608
Ref: 49d215538608
Ref: library/importlib resources abc importlib resources abc ResourceReader resource_path15538887
Ref: 49d315538887
Ref: library/importlib resources abc importlib resources abc ResourceReader is_resource15539138
Ref: 49d415539138
Ref: library/importlib resources abc importlib resources abc ResourceReader contents15539356
Ref: 49d515539356
Ref: library/importlib resources abc importlib resources abc Traversable15540304
Ref: 2f815540304
Ref: library/importlib resources abc importlib resources abc Traversable name15540604
Ref: 49d615540604
Ref: library/importlib resources abc importlib resources abc Traversable iterdir15540715
Ref: 49d715540715
Ref: library/importlib resources abc importlib resources abc Traversable is_dir15540807
Ref: 49d815540807
Ref: library/importlib resources abc importlib resources abc Traversable is_file15540908
Ref: 49d915540908
Ref: library/importlib resources abc importlib resources abc Traversable joinpath15541007
Ref: 49da15541007
Ref: library/importlib resources abc importlib resources abc Traversable __truediv__15542172
Ref: 49db15542172
Ref: library/importlib resources abc importlib resources abc Traversable open15542327
Ref: 49dc15542327
Ref: library/importlib resources abc importlib resources abc Traversable read_bytes15542714
Ref: 49dd15542714
Ref: library/importlib resources abc importlib resources abc Traversable read_text15542794
Ref: 49de15542794
Ref: library/importlib resources abc importlib resources abc TraversableResources15542886
Ref: 2f715542886
Ref: library/importlib resources abc importlib resources abc TraversableResources files15543458
Ref: 49df15543458
Ref: importlib resources abc – Classes base abstratas para recursos-Footnote-115543649
Node: importlib metadata – Acessando metadados do pacote15543733
Ref: library/importlib metadata doc15543984
Ref: 49e015543984
Ref: library/importlib metadata importlib-metadata-accessing-package-metadata15543984
Ref: 49e115543984
Ref: library/importlib metadata module-importlib metadata15543984
Ref: 7e15543984
Ref: library/importlib metadata no-color15543984
Ref: 49e215543984
Ref: library/importlib metadata using15543984
Ref: 49e315543984
Ref: importlib metadata – Acessando metadados do pacote-Footnote-115546573
Ref: importlib metadata – Acessando metadados do pacote-Footnote-215546661
Ref: importlib metadata – Acessando metadados do pacote-Footnote-315546742
Ref: importlib metadata – Acessando metadados do pacote-Footnote-415546823
Ref: importlib metadata – Acessando metadados do pacote-Footnote-515546908
Ref: importlib metadata – Acessando metadados do pacote-Footnote-615546993
Ref: importlib metadata – Acessando metadados do pacote-Footnote-715547031
Ref: importlib metadata – Acessando metadados do pacote-Footnote-815547126
Ref: importlib metadata – Acessando metadados do pacote-Footnote-915547195
Node: Visão Geral<3>15547271
Ref: library/importlib metadata overview15547400
Ref: 49e415547400
Ref: library/importlib metadata importlib metadata PackageNotFoundError15548976
Ref: 49e915548976
Ref: Visão Geral<3>-Footnote-115549279
Node: API funcional<2>15549366
Ref: library/importlib metadata functional-api15549519
Ref: 49ea15549519
Node: Pontos de entrada15549858
Ref: library/importlib metadata entry-points15549964
Ref: 58215549964
Ref: library/importlib metadata id215549964
Ref: 49eb15549964
Ref: library/importlib metadata importlib metadata entry_points15550019
Ref: 49ec15550019
Ref: library/importlib metadata importlib metadata EntryPoints15550648
Ref: 49ed15550648
Ref: library/importlib metadata importlib metadata EntryPoint15550966
Ref: 49ee15550966
Ref: Pontos de entrada-Footnote-115553898
Ref: Pontos de entrada-Footnote-215553970
Node: Metadados de distribuição15554038
Ref: library/importlib metadata distribution-metadata15554179
Ref: 49ef15554179
Ref: library/importlib metadata metadata15554179
Ref: 49e515554179
Ref: library/importlib metadata importlib metadata metadata15554252
Ref: 49f015554252
Ref: library/importlib metadata importlib metadata PackageMetadata15554619
Ref: 49f115554619
Ref: Metadados de distribuição-Footnote-115555972
Ref: Metadados de distribuição-Footnote-215556077
Ref: Metadados de distribuição-Footnote-315556164
Ref: Metadados de distribuição-Footnote-415556206
Node: Versões de distribuição15556301
Ref: library/importlib metadata distribution-versions15556451
Ref: 49f215556451
Ref: library/importlib metadata version15556451
Ref: 49e615556451
Ref: library/importlib metadata importlib metadata version15556521
Ref: 18ba15556521
Ref: Versões de distribuição-Footnote-115557052
Ref: Versões de distribuição-Footnote-215557141
Node: Arquivos de distribuição15557228
Ref: library/importlib metadata distribution-files15557379
Ref: 49f315557379
Ref: library/importlib metadata files15557379
Ref: 49e715557379
Ref: library/importlib metadata importlib metadata files15557450
Ref: 49f415557450
Ref: library/importlib metadata importlib metadata PackagePath15557963
Ref: 49f515557963
Ref: Arquivos de distribuição-Footnote-115559653
Ref: Arquivos de distribuição-Footnote-215559740
Node: Requisitos de distribuição15559837
Ref: library/importlib metadata distribution-requirements15560013
Ref: 49f615560013
Ref: library/importlib metadata requirements15560013
Ref: 49e815560013
Ref: library/importlib metadata importlib metadata requires15560088
Ref: 49f715560088
Ref: library/importlib metadata package-distributions15560621
Ref: a0715560621
Ref: Requisitos de distribuição-Footnote-115560658
Node: Mapeando importação pra pacotes de distribuição15560745
Ref: library/importlib metadata import-distribution-package-mapping15560886
Ref: 49f815560886
Ref: library/importlib metadata mapping-import-to-distribution-packages15560886
Ref: 49f915560886
Ref: library/importlib metadata importlib metadata packages_distributions15561005
Ref: 49fa15561005
Ref: Mapeando importação pra pacotes de distribuição-Footnote-115562189
Ref: Mapeando importação pra pacotes de distribuição-Footnote-215562276
Ref: Mapeando importação pra pacotes de distribuição-Footnote-315562357
Node: Distribuições15562419
Ref: library/importlib metadata distributions15562585
Ref: a0815562585
Ref: library/importlib metadata id915562585
Ref: 49fb15562585
Ref: library/importlib metadata importlib metadata distribution15562634
Ref: 49fc15562634
Ref: library/importlib metadata importlib metadata Distribution15562957
Ref: 49fd15562957
Ref: Distribuições-Footnote-115564760
Ref: Distribuições-Footnote-215564847
Ref: Distribuições-Footnote-315564889
Node: Descoberta de distribuição15564984
Ref: library/importlib metadata distribution-discovery15565173
Ref: 49fe15565173
Ref: Descoberta de distribuição-Footnote-115565911
Node: Implementando provedores personalizados15565998
Ref: library/importlib metadata implementing-custom-providers15566163
Ref: 49ff15566163
Ref: Implementando provedores personalizados-Footnote-115568648
Node: Exemplo<14>15568735
Ref: library/importlib metadata example15568822
Ref: 4a0015568822
Node: A inicialização do caminho de pesquisa de módulos sys path15572268
Ref: library/sys_path_init doc15572446
Ref: 4a0115572446
Ref: library/sys_path_init no-color15572446
Ref: 4a0215572446
Ref: library/sys_path_init sys-path-init15572446
Ref: 183415572446
Ref: library/sys_path_init the-initialization-of-the-sys-path-module-search-path15572446
Ref: 4a0315572446
Node: Ambientes virtuais<2>15577058
Ref: library/sys_path_init sys-path-init-virtual-environments15577199
Ref: 474215577199
Ref: library/sys_path_init virtual-environments15577199
Ref: 4a0415577199
Node: Arquivos _pth15578288
Ref: library/sys_path_init pth-files15578454
Ref: 4a0515578454
Node: Python embarcado15579773
Ref: library/sys_path_init embedded-python15579909
Ref: 4a0615579909
Node: Serviços da Linguagem Python15580424
Ref: library/language doc15580593
Ref: 4a0715580593
Ref: library/language language15580593
Ref: 4a0815580593
Ref: library/language no-color15580593
Ref: 4a0915580593
Ref: library/language python-language-services15580593
Ref: 4a0a15580593
Node: ast — Árvores de sintaxe abstrata15581514
Ref: library/ast doc15581680
Ref: 4a0b15581680
Ref: library/ast ast-abstract-syntax-trees15581680
Ref: 4a0c15581680
Ref: library/ast module-ast15581680
Ref: 915581680
Ref: ast — Árvores de sintaxe abstrata-Footnote-115582807
Node: Gramática abstrata15582870
Ref: library/ast abstract-grammar15582986
Ref: 4a0e15582986
Ref: library/ast id115582986
Ref: 4a0f15582986
Node: Classes de nós15590550
Ref: library/ast node-classes15590692
Ref: 4a1015590692
Ref: library/ast ast AST15590742
Ref: 4bd15590742
Ref: library/ast ast AST _fields15591573
Ref: 186715591573
Ref: library/ast ast AST _field_types15592436
Ref: 4be15592436
Ref: library/ast ast AST lineno15592846
Ref: 4a1115592846
Ref: library/ast ast AST col_offset15592872
Ref: 4a1215592872
Ref: library/ast ast AST end_lineno15592902
Ref: 4a1315592902
Ref: library/ast ast AST end_col_offset15592932
Ref: 4a1415592932
Ref: Classes de nós-Footnote-115596977
Node: Nós raízes15597035
Ref: library/ast ast-root-nodes15597119
Ref: 4a1515597119
Ref: library/ast root-nodes15597119
Ref: 4a1615597119
Ref: library/ast ast Module15597162
Ref: 4a1715597162
Ref: library/ast ast Expression15597855
Ref: 4a1915597855
Ref: library/ast ast Interactive15598243
Ref: 17df15598243
Ref: library/ast ast FunctionType15598980
Ref: 4a1b15598980
Ref: Nós raízes-Footnote-115600073
Node: Literais<3>15600115
Ref: library/ast literals15600218
Ref: 4a1c15600218
Ref: library/ast ast Constant15600255
Ref: 2ed15600255
Ref: library/ast ast FormattedValue15600778
Ref: 492615600778
Ref: library/ast ast JoinedStr15601787
Ref: 199a15601787
Ref: library/ast ast TemplateStr15602765
Ref: 4a1d15602765
Ref: library/ast ast Interpolation15603822
Ref: 4a1e15603822
Ref: library/ast ast List15604997
Ref: 492315604997
Ref: library/ast ast Tuple15605030
Ref: 492415605030
Ref: library/ast ast Set15605933
Ref: 491315605933
Ref: library/ast ast Dict15606339
Ref: 1c0015606339
Node: Variáveis15607172
Ref: library/ast variables15607277
Ref: 4a2015607277
Ref: library/ast ast Name15607317
Ref: 1be215607317
Ref: library/ast ast Load15607462
Ref: 4bc15607462
Ref: library/ast ast Store15607483
Ref: 4a1f15607483
Ref: library/ast ast Del15607505
Ref: 4a2115607505
Ref: library/ast ast Starred15608417
Ref: 492215608417
Node: Expressões<2>15609227
Ref: library/ast ast-expressions15609333
Ref: 4a1a15609333
Ref: library/ast expressions15609333
Ref: 4a2215609333
Ref: library/ast ast Expr15609375
Ref: 4a2315609375
Ref: library/ast ast UnaryOp15610050
Ref: 490e15610050
Ref: library/ast ast UAdd15610192
Ref: 491015610192
Ref: library/ast ast USub15610213
Ref: 491115610213
Ref: library/ast ast Not15610234
Ref: 491215610234
Ref: library/ast ast Invert15610254
Ref: 490f15610254
Ref: library/ast ast BinOp15610617
Ref: 1c6915610617
Ref: library/ast ast Add15611059
Ref: 4a2415611059
Ref: library/ast ast Sub15611079
Ref: 4a2515611079
Ref: library/ast ast Mult15611099
Ref: 4a2615611099
Ref: library/ast ast Div15611120
Ref: 4a2715611120
Ref: library/ast ast FloorDiv15611140
Ref: 4a2815611140
Ref: library/ast ast Mod15611165
Ref: 4a2915611165
Ref: library/ast ast Pow15611185
Ref: 4a2a15611185
Ref: library/ast ast LShift15611205
Ref: 4a2b15611205
Ref: library/ast ast RShift15611228
Ref: 4a2c15611228
Ref: library/ast ast BitOr15611251
Ref: 4a2d15611251
Ref: library/ast ast BitXor15611273
Ref: 4a2e15611273
Ref: library/ast ast BitAnd15611296
Ref: 4a2f15611296
Ref: library/ast ast MatMult15611319
Ref: 4a3015611319
Ref: library/ast ast BoolOp15611379
Ref: 492715611379
Ref: library/ast ast And15612036
Ref: 4a3215612036
Ref: library/ast ast Or15612056
Ref: 4a3115612056
Ref: library/ast ast Compare15612111
Ref: 491415612111
Ref: library/ast ast Eq15612760
Ref: 491515612760
Ref: library/ast ast NotEq15612779
Ref: 491615612779
Ref: library/ast ast Lt15612801
Ref: 491715612801
Ref: library/ast ast LtE15612820
Ref: 491815612820
Ref: library/ast ast Gt15612840
Ref: 491915612840
Ref: library/ast ast GtE15612859
Ref: 491a15612859
Ref: library/ast ast Is15612879
Ref: 491b15612879
Ref: library/ast ast IsNot15612898
Ref: 491c15612898
Ref: library/ast ast In15612920
Ref: 491d15612920
Ref: library/ast ast NotIn15612939
Ref: 491e15612939
Ref: library/ast ast Call15613004
Ref: 491f15613004
Ref: library/ast ast keyword15614153
Ref: 4a3315614153
Ref: library/ast ast IfExp15614372
Ref: 492815614372
Ref: library/ast ast Attribute15614862
Ref: 492015614862
Ref: library/ast ast NamedExpr15615478
Ref: 492e15615478
Node: Subscrição15616154
Ref: library/ast subscripting15616239
Ref: 4a3515616239
Ref: library/ast ast Subscript15616282
Ref: 492115616282
Ref: library/ast ast Slice15617185
Ref: 492515617185
Node: Compreensões15617786
Ref: library/ast comprehensions15617871
Ref: 4a3615617871
Ref: library/ast ast ListComp15617917
Ref: 492a15617917
Ref: library/ast ast SetComp15617960
Ref: 492b15617960
Ref: library/ast ast GeneratorExp15618002
Ref: 492d15618002
Ref: library/ast ast DictComp15618049
Ref: 492c15618049
Ref: library/ast ast comprehension15619975
Ref: 4a3715619975
Node: Instruções15623055
Ref: library/ast ast-statements15623168
Ref: 4a1815623168
Ref: library/ast statements15623168
Ref: 4a3815623168
Ref: library/ast ast Assign15623211
Ref: 4a3415623211
Ref: library/ast ast Assign type_comment15623577
Ref: 4a3915623577
Ref: library/ast ast AnnAssign15624522
Ref: 4a3a15624522
Ref: library/ast ast AugAssign15626791
Ref: 4a3b15626791
Ref: library/ast ast Raise15627518
Ref: 4a3c15627518
Ref: library/ast ast Assert15628073
Ref: 4a3d15628073
Ref: library/ast ast Delete15628481
Ref: 4a3e15628481
Ref: library/ast ast Pass15629001
Ref: 4a3f15629001
Ref: library/ast ast TypeAlias15629183
Ref: 199315629183
Node: Importações15629915
Ref: library/ast imports15629977
Ref: 4a4115629977
Ref: library/ast ast Import15630024
Ref: 4a4215630024
Ref: library/ast ast ImportFrom15630451
Ref: 4a4315630451
Ref: library/ast ast alias15631193
Ref: 1b6115631193
Node: Fluxo de controle15631714
Ref: library/ast control-flow15631841
Ref: 4a4415631841
Ref: library/ast ast If15632019
Ref: 4a4515632019
Ref: library/ast ast For15633290
Ref: 4a4615633290
Ref: library/ast ast For type_comment15633863
Ref: 4a4715633863
Ref: library/ast ast While15634592
Ref: 4a4815634592
Ref: library/ast ast Break15635270
Ref: 4a4915635270
Ref: library/ast ast Continue15635292
Ref: 4a4a15635292
Ref: library/ast ast Try15636299
Ref: 4a4b15636299
Ref: library/ast ast TryStar15637892
Ref: 4a4d15637892
Ref: library/ast ast ExceptHandler15638904
Ref: 4a4c15638904
Ref: library/ast ast With15640064
Ref: 4a4e15640064
Ref: library/ast ast With type_comment15640305
Ref: 4a5015640305
Ref: library/ast ast withitem15640444
Ref: 4a4f15640444
Node: Correspondência de padrões15641760
Ref: library/ast pattern-matching15641895
Ref: 4a5115641895
Ref: library/ast ast Match15641972
Ref: 4a5215641972
Ref: library/ast ast match_case15642294
Ref: 4a5315642294
Ref: library/ast ast MatchValue15644309
Ref: 4a5415644309
Ref: library/ast ast MatchSingleton15645355
Ref: 4a5515645355
Ref: library/ast ast MatchSequence15646257
Ref: 4a5615646257
Ref: library/ast ast MatchStar15647521
Ref: 4a5715647521
Ref: library/ast ast MatchMapping15649193
Ref: 4a5815649193
Ref: library/ast ast MatchClass15651275
Ref: 4a5915651275
Ref: library/ast ast MatchAs15654443
Ref: 4a5a15654443
Ref: library/ast ast MatchOr15656096
Ref: 4a5b15656096
Node: Anotações de tipos15657415
Ref: library/ast type-annotations15657552
Ref: 4a5c15657552
Ref: library/ast ast TypeIgnore15657613
Ref: 1a3f15657613
Node: Parâmetros de tipo15658901
Ref: library/ast ast-type-params15659043
Ref: 4a4015659043
Ref: library/ast type-parameters15659043
Ref: 4a5d15659043
Ref: library/ast ast TypeVar15659192
Ref: 4a5e15659192
Ref: library/ast ast ParamSpec15660415
Ref: 4a5f15660415
Ref: library/ast ast TypeVarTuple15661804
Ref: 4a6015661804
Node: Definições de função e classe15663026
Ref: library/ast function-and-class-definitions15663161
Ref: 4a6115663161
Ref: library/ast ast FunctionDef15663246
Ref: 19b715663246
Ref: library/ast ast FunctionDef type_comment15663894
Ref: 4a6315663894
Ref: library/ast ast Lambda15664095
Ref: 492915664095
Ref: library/ast ast arguments15664729
Ref: 4a6215664729
Ref: library/ast ast arg15665508
Ref: 4a6415665508
Ref: library/ast ast arg type_comment15665730
Ref: 4a6515665730
Ref: library/ast ast Return15667302
Ref: 4a6615667302
Ref: library/ast ast Yield15667548
Ref: 493015667548
Ref: library/ast ast YieldFrom15667578
Ref: 493115667578
Ref: library/ast ast Global15668251
Ref: 4a6715668251
Ref: library/ast ast Nonlocal15668282
Ref: 4a6815668282
Ref: library/ast ast ClassDef15668938
Ref: 19b515668938
Ref: Definições de função e classe-Footnote-115670688
Node: Async e await15670730
Ref: library/ast async-and-await15670837
Ref: 4a6915670837
Ref: library/ast ast AsyncFunctionDef15670886
Ref: 19b615670886
Ref: library/ast ast Await15671173
Ref: 492f15671173
Ref: library/ast ast AsyncFor15671791
Ref: 4a6a15671791
Ref: library/ast ast AsyncWith15671859
Ref: 4a6b15671859
Node: Auxiliares de ast15672542
Ref: library/ast ast-helpers15672695
Ref: 4a6c15672695
Ref: library/ast ast parse15672903
Ref: 1c215672903
Ref: library/ast ast unparse15676237
Ref: ad815676237
Ref: library/ast ast literal_eval15676891
Ref: e0615676891
Ref: library/ast ast get_docstring15678897
Ref: 1cf015678897
Ref: library/ast ast get_source_segment15679350
Ref: bc115679350
Ref: library/ast ast fix_missing_locations15679884
Ref: 4a6e15679884
Ref: library/ast ast increment_lineno15680376
Ref: 1a3e15680376
Ref: library/ast ast copy_location15680629
Ref: 4a6f15680629
Ref: library/ast ast iter_fields15680902
Ref: 4a7015680902
Ref: library/ast ast iter_child_nodes15681065
Ref: 4a7115681065
Ref: library/ast ast walk15681262
Ref: 4a7215681262
Ref: library/ast ast NodeVisitor15681554
Ref: 2ee15681554
Ref: library/ast ast NodeVisitor visit15681929
Ref: 4a7315681929
Ref: library/ast ast NodeVisitor generic_visit15682208
Ref: 4a7415682208
Ref: library/ast ast NodeVisitor visit_Constant15682576
Ref: c5715682576
Ref: library/ast ast NodeTransformer15683228
Ref: 4a7515683228
Ref: library/ast ast dump15685199
Ref: ad715685199
Ref: Auxiliares de ast-Footnote-115687651
Ref: Auxiliares de ast-Footnote-215687693
Ref: Auxiliares de ast-Footnote-315687735
Node: Sinalizadores do compilador<2>15687777
Ref: library/ast ast-compiler-flags15687942
Ref: 245515687942
Ref: library/ast compiler-flags15687942
Ref: 4a7615687942
Ref: library/ast ast PyCF_ALLOW_TOP_LEVEL_AWAIT15688149
Ref: 4a7715688149
Ref: library/ast ast PyCF_ONLY_AST15688353
Ref: 4a0d15688353
Ref: library/ast ast PyCF_OPTIMIZED_AST15688491
Ref: 4a7815688491
Ref: library/ast ast PyCF_TYPE_COMMENTS15688688
Ref: 4a6d15688688
Ref: library/ast ast compare15688887
Ref: 1bf15688887
Ref: Sinalizadores do compilador<2>-Footnote-115689503
Ref: Sinalizadores do compilador<2>-Footnote-215689545
Node: Uso na linha de comando<10>15689587
Ref: library/ast ast-cli15689726
Ref: 4a7915689726
Ref: library/ast command-line-usage15689726
Ref: 4a7a15689726
Ref: library/ast cmdoption-ast-h15690011
Ref: 4a7b15690011
Ref: library/ast cmdoption-ast-help15690011
Ref: 4a7c15690011
Ref: library/ast cmdoption-ast-m15690075
Ref: 4a7d15690075
Ref: library/ast cmdoption-ast-mode15690097
Ref: 4a7e15690097
Ref: library/ast cmdoption-ast-no-type-comments15690233
Ref: 4a7f15690233
Ref: library/ast cmdoption-ast-a15690306
Ref: 4a8015690306
Ref: library/ast cmdoption-ast-include-attributes15690306
Ref: 4a8115690306
Ref: library/ast cmdoption-ast-i15690418
Ref: 4a8215690418
Ref: library/ast cmdoption-ast-indent15690442
Ref: 4a8315690442
Ref: library/ast cmdoption-ast-feature-version15690530
Ref: 1c315690530
Ref: library/ast cmdoption-ast-O15690718
Ref: 4a8415690718
Ref: library/ast cmdoption-ast-optimize15690741
Ref: 1c415690741
Ref: library/ast cmdoption-ast-show-empty15690883
Ref: 1c515690883
Ref: Uso na linha de comando<10>-Footnote-115692200
Ref: Uso na linha de comando<10>-Footnote-215692248
Ref: Uso na linha de comando<10>-Footnote-315692315
Ref: Uso na linha de comando<10>-Footnote-415692389
Ref: Uso na linha de comando<10>-Footnote-515692428
Node: symtable — Acesso a tabela de símbolos do compilador15692465
Ref: library/symtable doc15692703
Ref: 4a8515692703
Ref: library/symtable module-symtable15692703
Ref: de15692703
Ref: library/symtable no-color15692703
Ref: 4a8615692703
Ref: library/symtable symtable-access-to-the-compiler-s-symbol-tables15692703
Ref: 4a8715692703
Ref: symtable — Acesso a tabela de símbolos do compilador-Footnote-115693348
Node: Generating Symbol Tables15693416
Ref: library/symtable generating-symbol-tables15693564
Ref: 4a8815693564
Ref: library/symtable symtable symtable15693633
Ref: 1c8815693633
Node: Examining Symbol Tables15693913
Ref: library/symtable examining-symbol-tables15694097
Ref: 4a8a15694097
Ref: library/symtable symtable SymbolTableType15694164
Ref: 18a515694164
Ref: library/symtable symtable SymbolTableType MODULE15694286
Ref: 4a8b15694286
Ref: library/symtable symtable SymbolTableType FUNCTION15694374
Ref: 4a8c15694374
Ref: library/symtable symtable SymbolTableType CLASS15694468
Ref: 4a8d15694468
Ref: library/symtable symtable SymbolTableType ANNOTATION15694646
Ref: 4a8e15694646
Ref: library/symtable symtable SymbolTableType TYPE_ALIAS15694789
Ref: 4a8f15694789
Ref: library/symtable symtable SymbolTableType TYPE_PARAMETERS15694907
Ref: 4a9015694907
Ref: library/symtable symtable SymbolTableType TYPE_VARIABLE15695074
Ref: 4a9115695074
Ref: library/symtable symtable SymbolTable15695447
Ref: 4a8915695447
Ref: library/symtable symtable SymbolTable get_type15695550
Ref: 18a615695550
Ref: library/symtable symtable SymbolTable get_id15696219
Ref: 4a9215696219
Ref: library/symtable symtable SymbolTable get_name15696292
Ref: 4a9315696292
Ref: library/symtable symtable SymbolTable get_lineno15696939
Ref: 4a9415696939
Ref: library/symtable symtable SymbolTable is_optimized15697065
Ref: 4a9515697065
Ref: library/symtable symtable SymbolTable is_nested15697175
Ref: 4a9615697175
Ref: library/symtable symtable SymbolTable has_children15697280
Ref: 4a9715697280
Ref: library/symtable symtable SymbolTable get_identifiers15697455
Ref: 4a9915697455
Ref: library/symtable symtable SymbolTable lookup15697633
Ref: 4a9a15697633
Ref: library/symtable symtable SymbolTable get_symbols15697756
Ref: 4a9b15697756
Ref: library/symtable symtable SymbolTable get_children15697881
Ref: 4a9815697881
Ref: library/symtable symtable Function15697970
Ref: 4a9c15697970
Ref: library/symtable symtable Function get_parameters15698101
Ref: 4a9d15698101
Ref: library/symtable symtable Function get_locals15698223
Ref: 4a9e15698223
Ref: library/symtable symtable Function get_globals15698327
Ref: 4a9f15698327
Ref: library/symtable symtable Function get_nonlocals15698433
Ref: 4aa015698433
Ref: library/symtable symtable Function get_frees15698573
Ref: 4aa115698573
Ref: library/symtable symtable Class15698717
Ref: 4aa215698717
Ref: library/symtable symtable Class get_methods15698831
Ref: 31b15698831
Ref: library/symtable symtable Symbol15700153
Ref: 28815700153
Ref: library/symtable symtable Symbol get_name15700310
Ref: 4aa315700310
Ref: library/symtable symtable Symbol is_referenced15700380
Ref: 4aa415700380
Ref: library/symtable symtable Symbol is_imported15700481
Ref: 4aa515700481
Ref: library/symtable symtable Symbol is_parameter15700605
Ref: 4aa615700605
Ref: library/symtable symtable Symbol is_type_parameter15700699
Ref: 18a715700699
Ref: library/symtable symtable Symbol is_global15700842
Ref: 4aa715700842
Ref: library/symtable symtable Symbol is_nonlocal15700928
Ref: 1cc315700928
Ref: library/symtable symtable Symbol is_declared_global15701018
Ref: 152115701018
Ref: library/symtable symtable Symbol is_local15701156
Ref: 4aa815701156
Ref: library/symtable symtable Symbol is_annotated15701253
Ref: 4aa915701253
Ref: library/symtable symtable Symbol is_free15701383
Ref: 4aaa15701383
Ref: library/symtable symtable Symbol is_free_class15701515
Ref: 28b15701515
Ref: library/symtable symtable Symbol is_assigned15702165
Ref: 4aab15702165
Ref: library/symtable symtable Symbol is_comp_iter15702271
Ref: 28a15702271
Ref: library/symtable symtable Symbol is_comp_cell15702437
Ref: 28915702437
Ref: library/symtable symtable Symbol is_namespace15702603
Ref: 4aac15702603
Ref: library/symtable symtable Symbol get_namespaces15703246
Ref: 4aad15703246
Ref: library/symtable symtable Symbol get_namespace15703342
Ref: 4aae15703342
Node: Uso na linha de comando<11>15703543
Ref: library/symtable command-line-usage15703694
Ref: 4aaf15703694
Ref: library/symtable symtable-cli15703694
Ref: 4ab015703694
Node: token — Constantes usadas com árvores de análises do Python15704065
Ref: library/token doc15704317
Ref: 4ab115704317
Ref: library/token module-token15704317
Ref: 10015704317
Ref: library/token no-color15704317
Ref: 4ab215704317
Ref: library/token token-constants-used-with-python-parse-trees15704317
Ref: 4ab315704317
Ref: library/token token tok_name15705379
Ref: 4ab615705379
Ref: library/token token ISTERMINAL15705623
Ref: 4ab715705623
Ref: library/token token ISNONTERMINAL15705718
Ref: 4ab815705718
Ref: library/token token ISEOF15705821
Ref: 4ab915705821
Ref: library/token token NAME15705961
Ref: 216315705961
Ref: library/token token NUMBER15706153
Ref: 216415706153
Ref: library/token token STRING15706243
Ref: 216515706243
Ref: library/token token OP15706592
Ref: 213515706592
Ref: library/token token COMMENT15706877
Ref: 4aba15706877
Ref: library/token token NEWLINE15707017
Ref: 213f15707017
Ref: library/token token NL15707114
Ref: 4abb15707114
Ref: library/token token INDENT15707383
Ref: 1faa15707383
Ref: library/token token DEDENT15707542
Ref: 215d15707542
Ref: library/token token FSTRING_START15707697
Ref: 4abc15707697
Ref: library/token token FSTRING_MIDDLE15707921
Ref: 4abd15707921
Ref: library/token token FSTRING_END15708345
Ref: 4ac215708345
Ref: library/token token TSTRING_START15708519
Ref: 4ac315708519
Ref: library/token token TSTRING_MIDDLE15708773
Ref: 4ac415708773
Ref: library/token token TSTRING_END15709227
Ref: 4ac515709227
Ref: library/token token ENDMARKER15709431
Ref: 216015709431
Ref: library/token token ENCODING15709576
Ref: 4ac615709576
Ref: library/token token TYPE_IGNORE15710087
Ref: 4ac715710087
Ref: library/token token TYPE_COMMENT15710352
Ref: 4ac815710352
Ref: library/token token SOFT_KEYWORD15710601
Ref: 4ab515710601
Ref: library/token token ERRORTOKEN15710903
Ref: 4aca15710903
Ref: library/token token-operators-delimiters15711251
Ref: 21ba15711251
Ref: library/token token LPAR15711807
Ref: 4acb15711807
Ref: library/token token RPAR15711984
Ref: 4acc15711984
Ref: library/token token LSQB15712161
Ref: 4acd15712161
Ref: library/token token RSQB15712338
Ref: 4ace15712338
Ref: library/token token COLON15712516
Ref: 4ac115712516
Ref: library/token token COMMA15712693
Ref: 4acf15712693
Ref: library/token token SEMI15712869
Ref: 4ad015712869
Ref: library/token token PLUS15713046
Ref: 4ab415713046
Ref: library/token token MINUS15713224
Ref: 4ad115713224
Ref: library/token token STAR15713400
Ref: 4ad215713400
Ref: library/token token SLASH15713578
Ref: 4ad315713578
Ref: library/token token VBAR15713754
Ref: 4ad415713754
Ref: library/token token AMPER15713932
Ref: 4ad515713932
Ref: library/token token LESS15714108
Ref: 4ad615714108
Ref: library/token token GREATER15714288
Ref: 4ad715714288
Ref: library/token token EQUAL15714463
Ref: 4ad815714463
Ref: library/token token DOT15714638
Ref: 4ad915714638
Ref: library/token token PERCENT15714819
Ref: 4ada15714819
Ref: library/token token LBRACE15714995
Ref: 4abe15714995
Ref: library/token token RBRACE15715172
Ref: 4abf15715172
Ref: library/token token EQEQUAL15715350
Ref: 4adb15715350
Ref: library/token token NOTEQUAL15715529
Ref: 4adc15715529
Ref: library/token token LESSEQUAL15715708
Ref: 4add15715708
Ref: library/token token GREATEREQUAL15715889
Ref: 4ade15715889
Ref: library/token token TILDE15716060
Ref: 4adf15716060
Ref: library/token token CIRCUMFLEX15716242
Ref: 4ae015716242
Ref: library/token token LEFTSHIFT15716418
Ref: 4ae115716418
Ref: library/token token RIGHTSHIFT15716597
Ref: 4ae215716597
Ref: library/token token DOUBLESTAR15716775
Ref: 4ae315716775
Ref: library/token token PLUSEQUAL15716952
Ref: 4ae415716952
Ref: library/token token MINEQUAL15717129
Ref: 4ae515717129
Ref: library/token token STAREQUAL15717308
Ref: 4ae615717308
Ref: library/token token SLASHEQUAL15717487
Ref: 4ae715717487
Ref: library/token token PERCENTEQUAL15717667
Ref: 4ae815717667
Ref: library/token token AMPEREQUAL15717843
Ref: 4ae915717843
Ref: library/token token VBAREQUAL15718020
Ref: 4aea15718020
Ref: library/token token CIRCUMFLEXEQUAL15718204
Ref: 4aeb15718204
Ref: library/token token LEFTSHIFTEQUAL15718381
Ref: 4aec15718381
Ref: library/token token RIGHTSHIFTEQUAL15718561
Ref: 4aed15718561
Ref: library/token token DOUBLESTAREQUAL15718740
Ref: 4aee15718740
Ref: library/token token DOUBLESLASH15718915
Ref: 4aef15718915
Ref: library/token token DOUBLESLASHEQUAL15719098
Ref: 4af015719098
Ref: library/token token AT15719263
Ref: 4af115719263
Ref: library/token token ATEQUAL15719445
Ref: 4af215719445
Ref: library/token token RARROW15719622
Ref: 4af315719622
Ref: library/token token ELLIPSIS15719802
Ref: 4af415719802
Ref: library/token token COLONEQUAL15719983
Ref: 4af515719983
Ref: library/token token EXCLAMATION15720162
Ref: 4ac015720162
Ref: library/token token N_TOKENS15720311
Ref: 4af615720311
Ref: library/token token EXACT_TOKEN_TYPES15720396
Ref: 183f15720396
Ref: token — Constantes usadas com árvores de análises do Python-Footnote-115721423
Node: keyword — Testando palavras reservadas do Python15721488
Ref: library/keyword doc15721735
Ref: 4af715721735
Ref: library/keyword keyword-testing-for-python-keywords15721735
Ref: 4af815721735
Ref: library/keyword module-keyword15721735
Ref: 8815721735
Ref: library/keyword no-color15721735
Ref: 4af915721735
Ref: library/keyword keyword iskeyword15722112
Ref: 24e315722112
Ref: library/keyword keyword kwlist15722236
Ref: 4afa15722236
Ref: library/keyword keyword issoftkeyword15722555
Ref: 4ac915722555
Ref: library/keyword keyword softkwlist15722726
Ref: 4afb15722726
Ref: keyword — Testando palavras reservadas do Python-Footnote-115723127
Node: tokenize — Tokenizador para código-fonte Python15723194
Ref: library/tokenize doc15723426
Ref: 4afc15723426
Ref: library/tokenize module-tokenize15723426
Ref: 10115723426
Ref: library/tokenize no-color15723426
Ref: 4afd15723426
Ref: library/tokenize tokenize-tokenizer-for-python-source15723426
Ref: 4afe15723426
Ref: tokenize — Tokenizador para código-fonte Python-Footnote-115724814
Node: Tokenizando entradas15724882
Ref: library/tokenize tokenizing-input15725025
Ref: 4aff15725025
Ref: library/tokenize tokenize tokenize15725144
Ref: 6f515725144
Ref: library/tokenize tokenize generate_tokens15726690
Ref: 6f615726690
Ref: library/tokenize tokenize untokenize15727504
Ref: 181415727504
Ref: library/tokenize tokenize detect_encoding15728533
Ref: 2b8215728533
Ref: library/tokenize tokenize open15729663
Ref: 2b8115729663
Ref: library/tokenize tokenize TokenError15729855
Ref: 75915729855
Ref: Tokenizando entradas-Footnote-115730185
Ref: Tokenizando entradas-Footnote-215730227
Node: Uso na linha de comando<12>15730269
Ref: library/tokenize command-line-usage15730433
Ref: 4b0015730433
Ref: library/tokenize tokenize-cli15730433
Ref: 4b0115730433
Ref: library/tokenize cmdoption-tokenize-h15730737
Ref: 4b0215730737
Ref: library/tokenize cmdoption-tokenize-help15730737
Ref: 4b0315730737
Ref: library/tokenize cmdoption-tokenize-e15730803
Ref: 4b0415730803
Ref: library/tokenize cmdoption-tokenize-exact15730803
Ref: 4b0515730803
Node: Exemplos<36>15731027
Ref: library/tokenize examples15731162
Ref: 4b0615731162
Node: tabnanny — Detecção de indentação ambígua15735687
Ref: library/tabnanny doc15735921
Ref: 4b0715735921
Ref: library/tabnanny module-tabnanny15735921
Ref: e315735921
Ref: library/tabnanny no-color15735921
Ref: 4b0815735921
Ref: library/tabnanny tabnanny-detection-of-ambiguous-indentation15735921
Ref: 4b0915735921
Ref: library/tabnanny tabnanny check15736474
Ref: 4b0a15736474
Ref: library/tabnanny tabnanny verbose15736982
Ref: 4b0b15736982
Ref: library/tabnanny tabnanny filename_only15737167
Ref: 4b0c15737167
Ref: library/tabnanny tabnanny NannyNag15737417
Ref: 4b0d15737417
Ref: library/tabnanny tabnanny process_tokens15737585
Ref: 4b0e15737585
Ref: tabnanny — Detecção de indentação ambígua-Footnote-115737898
Node: pyclbr — Suporte a navegador de módulos do Python15737966
Ref: library/pyclbr doc15738197
Ref: 4b0f15738197
Ref: library/pyclbr module-pyclbr15738197
Ref: b915738197
Ref: library/pyclbr no-color15738197
Ref: 4b1015738197
Ref: library/pyclbr pyclbr-python-module-browser-support15738197
Ref: 4b1115738197
Ref: library/pyclbr pyclbr readmodule15738971
Ref: a2215738971
Ref: library/pyclbr pyclbr readmodule_ex15739657
Ref: a2315739657
Ref: pyclbr — Suporte a navegador de módulos do Python-Footnote-115740804
Node: Objetos Function15740870
Ref: library/pyclbr function-objects15740997
Ref: 4b1215740997
Ref: library/pyclbr pyclbr-function-objects15740997
Ref: 4b1315740997
Ref: library/pyclbr pyclbr Function15741050
Ref: 4b1415741050
Ref: library/pyclbr pyclbr Function file15741214
Ref: 4b1515741214
Ref: library/pyclbr pyclbr Function module15741301
Ref: 4b1615741301
Ref: library/pyclbr pyclbr Function name15741389
Ref: 4b1715741389
Ref: library/pyclbr pyclbr Function lineno15741445
Ref: 4b1815741445
Ref: library/pyclbr pyclbr Function parent15741547
Ref: 4b1915741547
Ref: library/pyclbr pyclbr Function children15741714
Ref: 4b1a15741714
Ref: library/pyclbr pyclbr Function is_async15741899
Ref: 4b1b15741899
Node: Objetos Class15742096
Ref: library/pyclbr class-objects15742223
Ref: 4b1c15742223
Ref: library/pyclbr pyclbr-class-objects15742223
Ref: 4b1d15742223
Ref: library/pyclbr pyclbr Class15742270
Ref: 4b1e15742270
Ref: library/pyclbr pyclbr Class file15742469
Ref: 4b1f15742469
Ref: library/pyclbr pyclbr Class module15742554
Ref: 4b2015742554
Ref: library/pyclbr pyclbr Class name15742640
Ref: 4b2115742640
Ref: library/pyclbr pyclbr Class lineno15742694
Ref: 4b2215742694
Ref: library/pyclbr pyclbr Class parent15742796
Ref: 4b2315742796
Ref: library/pyclbr pyclbr Class children15742959
Ref: 4b2415742959
Ref: library/pyclbr pyclbr Class super15743132
Ref: 4b2515743132
Ref: library/pyclbr pyclbr Class methods15743511
Ref: 4b2615743511
Node: py_compile — Compila arquivos fonte do Python15743779
Ref: library/py_compile doc15744021
Ref: 4b2715744021
Ref: library/py_compile module-py_compile15744021
Ref: b815744021
Ref: library/py_compile no-color15744021
Ref: 4b2815744021
Ref: library/py_compile py-compile-compile-python-source-files15744021
Ref: 4b2915744021
Ref: library/py_compile py_compile PyCompileError15744705
Ref: 4b2a15744705
Ref: library/py_compile py_compile compile15744830
Ref: c1015744830
Ref: library/py_compile py_compile PycInvalidationMode15749061
Ref: 4b2b15749061
Ref: library/py_compile py_compile PycInvalidationMode TIMESTAMP15749557
Ref: 4b2d15749557
Ref: library/py_compile py_compile PycInvalidationMode CHECKED_HASH15749862
Ref: 4b2c15749862
Ref: library/py_compile py_compile PycInvalidationMode UNCHECKED_HASH15750135
Ref: 4b2e15750135
Ref: py_compile — Compila arquivos fonte do Python-Footnote-115750727
Ref: py_compile — Compila arquivos fonte do Python-Footnote-215750797
Ref: py_compile — Compila arquivos fonte do Python-Footnote-315750839
Ref: py_compile — Compila arquivos fonte do Python-Footnote-415750881
Ref: py_compile — Compila arquivos fonte do Python-Footnote-515750923
Node: Interface de Linha de Comando<5>15750965
Ref: library/py_compile command-line-interface15751081
Ref: 4b2f15751081
Ref: library/py_compile py-compile-cli15751081
Ref: 4b3015751081
Ref: library/py_compile cmdoption-python-m-py_compile-arg-file15751598
Ref: 4b3115751598
Ref: library/py_compile cmdoption-python-m-py_compile15751629
Ref: 4b3215751629
Ref: library/py_compile cmdoption-python-m-py_compile-q15751797
Ref: 4b3315751797
Ref: library/py_compile cmdoption-python-m-py_compile-quiet15751797
Ref: 4b3415751797
Node: compileall — Compilar bibliotecas do Python para bytecode15752131
Ref: library/compileall doc15752363
Ref: 4b3515752363
Ref: library/compileall compileall-byte-compile-python-libraries15752363
Ref: 4b3615752363
Ref: library/compileall module-compileall15752363
Ref: 2115752363
Ref: library/compileall no-color15752363
Ref: 4b3715752363
Ref: compileall — Compilar bibliotecas do Python para bytecode-Footnote-115753347
Node: Uso na linha de comando<13>15753417
Ref: library/compileall command-line-use15753568
Ref: 4b3815753568
Ref: library/compileall compileall-cli15753568
Ref: 4b3915753568
Ref: library/compileall cmdoption-compileall-arg-directory15753747
Ref: 4b3a15753747
Ref: library/compileall cmdoption-compileall-arg-file15753773
Ref: 4b3b15753773
Ref: library/compileall cmdoption-compileall-l15754064
Ref: 4b3c15754064
Ref: library/compileall cmdoption-compileall-f15754243
Ref: 4b3d15754243
Ref: library/compileall cmdoption-compileall-q15754353
Ref: 4b3e15754353
Ref: library/compileall cmdoption-compileall-d15754560
Ref: 4b3f15754560
Ref: library/compileall cmdoption-compileall-s15754944
Ref: 4b4015754944
Ref: library/compileall cmdoption-compileall-p15755178
Ref: 4b4115755178
Ref: library/compileall cmdoption-compileall-x15755421
Ref: 4b4215755421
Ref: library/compileall cmdoption-compileall-i15755660
Ref: 4b4315755660
Ref: library/compileall cmdoption-compileall-b15755873
Ref: 4b4415755873
Ref: library/compileall cmdoption-compileall-r15756209
Ref: 4b4515756209
Ref: library/compileall cmdoption-compileall-j15756488
Ref: 4b4615756488
Ref: library/compileall cmdoption-compileall-invalidation-mode15756685
Ref: 4b4715756685
Ref: library/compileall cmdoption-compileall-o15757636
Ref: 4b4815757636
Ref: library/compileall cmdoption-compileall-e15757838
Ref: 4b4915757838
Ref: library/compileall cmdoption-compileall-hardlink-dupes15757944
Ref: 4b4a15757944
Ref: Uso na linha de comando<13>-Footnote-115759343
Node: Funções públicas15759385
Ref: library/compileall public-functions15759536
Ref: 4b4b15759536
Ref: library/compileall compileall compile_dir15759592
Ref: d0f15759592
Ref: library/compileall compileall compile_file15764126
Ref: fd515764126
Ref: library/compileall compileall compile_path15767410
Ref: fd615767410
Ref: Funções públicas-Footnote-115769318
Ref: Funções públicas-Footnote-215769360
Node: dis — Disassembler de bytecode do Python15769402
Ref: library/dis doc15769642
Ref: 4b4c15769642
Ref: library/dis dis-disassembler-for-python-bytecode15769642
Ref: 4b4d15769642
Ref: library/dis module-dis15769642
Ref: 3c15769642
Ref: library/dis no-color15769642
Ref: 4b4e15769642
Ref: dis — Disassembler de bytecode do Python-Footnote-115772722
Node: Interface de linha de comando<10>15772785
Ref: library/dis command-line-interface15772926
Ref: 4b4f15772926
Ref: library/dis dis-cli15772926
Ref: 4b5015772926
Ref: library/dis cmdoption-dis-h15773178
Ref: 4b5115773178
Ref: library/dis cmdoption-dis-help15773178
Ref: 4b5215773178
Ref: library/dis cmdoption-dis-C15773235
Ref: 4b5315773235
Ref: library/dis cmdoption-dis-show-caches15773235
Ref: 4b5415773235
Ref: library/dis cmdoption-dis-O15773329
Ref: 4e515773329
Ref: library/dis cmdoption-dis-show-offsets15773329
Ref: 4b5515773329
Ref: library/dis cmdoption-dis-P15773442
Ref: 20715773442
Ref: library/dis cmdoption-dis-show-positions15773442
Ref: 4b5615773442
Ref: library/dis cmdoption-dis-S15773568
Ref: 20815773568
Ref: library/dis cmdoption-dis-specialized15773568
Ref: 4b5715773568
Node: Análise de bytecode15773848
Ref: library/dis bytecode-analysis15774019
Ref: 4b5815774019
Ref: library/dis dis Bytecode15774287
Ref: 20315774287
Ref: library/dis dis Bytecode from_traceback15776129
Ref: 112615776129
Ref: library/dis dis Bytecode codeobj15776400
Ref: 4b5915776400
Ref: library/dis dis Bytecode first_line15776466
Ref: 4b5a15776466
Ref: library/dis dis Bytecode dis15776589
Ref: 112515776589
Ref: library/dis dis Bytecode info15776814
Ref: 4b5b15776814
Node: Funções de análise15777558
Ref: library/dis analysis-functions15777730
Ref: 4b5c15777730
Ref: library/dis dis code_info15778055
Ref: 143515778055
Ref: library/dis dis show_code15778695
Ref: 112415778695
Ref: library/dis dis dis15779209
Ref: 20415779209
Ref: library/dis dis distb15781501
Ref: 20515781501
Ref: library/dis dis disassemble15782277
Ref: 20615782277
Ref: library/dis dis disco15782435
Ref: 4b5d15782435
Ref: library/dis dis get_instructions15783938
Ref: 4e615783938
Ref: library/dis dis findlinestarts15785158
Ref: 4b5e15785158
Ref: library/dis dis findlabels15785916
Ref: 4b5f15785916
Ref: library/dis dis stack_effect15786089
Ref: 112715786089
Ref: Funções de análise-Footnote-115787088
Node: Instruções em bytecode do Python15787130
Ref: library/dis bytecodes15787300
Ref: 7c415787300
Ref: library/dis python-bytecode-instructions15787300
Ref: 4b6015787300
Ref: library/dis dis Instruction15787555
Ref: 20215787555
Ref: library/dis dis Instruction opcode15787629
Ref: 4b6115787629
Ref: library/dis dis Instruction opname15787835
Ref: 4b6315787835
Ref: library/dis dis Instruction baseopcode15787913
Ref: 4b6415787913
Ref: library/dis dis Instruction baseopname15788086
Ref: 4b6515788086
Ref: library/dis dis Instruction arg15788277
Ref: 4b6715788277
Ref: library/dis dis Instruction oparg15788396
Ref: 4b6815788396
Ref: library/dis dis Instruction argval15788459
Ref: 4b6915788459
Ref: library/dis dis Instruction argrepr15788572
Ref: 4b6a15788572
Ref: library/dis dis Instruction offset15788724
Ref: 4b6b15788724
Ref: library/dis dis Instruction start_offset15788825
Ref: 4b6c15788825
Ref: library/dis dis Instruction cache_offset15789073
Ref: 4b6d15789073
Ref: library/dis dis Instruction end_offset15789178
Ref: 4b6e15789178
Ref: library/dis dis Instruction starts_line15789277
Ref: 4b6f15789277
Ref: library/dis dis Instruction line_number15789388
Ref: 4b7015789388
Ref: library/dis dis Instruction is_jump_target15789515
Ref: 4b7115789515
Ref: library/dis dis Instruction jump_target15789625
Ref: 4b7215789625
Ref: library/dis dis Instruction positions15789780
Ref: 4b7315789780
Ref: library/dis dis Instruction cache_info15789928
Ref: 4b7415789928
Ref: library/dis dis Positions15790657
Ref: 189215790657
Ref: library/dis dis Positions lineno15790776
Ref: 4b7515790776
Ref: library/dis dis Positions end_lineno15790799
Ref: 4b7615790799
Ref: library/dis dis Positions col_offset15790826
Ref: 4b7715790826
Ref: library/dis dis Positions end_col_offset15790853
Ref: 4b7815790853
Ref: library/dis opcode-NOP15791229
Ref: 4b7915791229
Ref: library/dis opcode-NOT_TAKEN15791398
Ref: 37315791398
Ref: library/dis opcode-POP_ITER15791625
Ref: 36d15791625
Ref: library/dis opcode-POP_TOP15791723
Ref: 4b7a15791723
Ref: library/dis opcode-END_FOR15791805
Ref: 4b7b15791805
Ref: library/dis opcode-END_SEND15791995
Ref: 4b7c15791995
Ref: library/dis opcode-COPY15792141
Ref: 90c15792141
Ref: library/dis opcode-SWAP15792348
Ref: 90d15792348
Ref: library/dis opcode-CACHE15792521
Ref: 8fd15792521
Ref: library/dis opcode-UNARY_NEGATIVE15793433
Ref: 4b7d15793433
Ref: library/dis opcode-UNARY_NOT15793508
Ref: 199f15793508
Ref: library/dis opcode-UNARY_INVERT15793704
Ref: 4b7e15793704
Ref: library/dis opcode-GET_ITER15793777
Ref: 4b7f15793777
Ref: library/dis opcode-GET_YIELD_FROM_ITER15793851
Ref: 4b8015793851
Ref: library/dis opcode-TO_BOOL15794102
Ref: 199c15794102
Ref: library/dis opcode-BINARY_OP15794655
Ref: 36315794655
Ref: library/dis opcode-STORE_SUBSCR15795028
Ref: 1abd15795028
Ref: library/dis opcode-DELETE_SUBSCR15795198
Ref: 4b8115795198
Ref: library/dis opcode-BINARY_SLICE15795335
Ref: 6fa15795335
Ref: library/dis opcode-STORE_SLICE15795551
Ref: 6fb15795551
Ref: library/dis opcode-GET_AWAITABLE15795818
Ref: 1ada15795818
Ref: library/dis opcode-GET_AITER15796461
Ref: 4b8215796461
Ref: library/dis opcode-GET_ANEXT15796685
Ref: 4b8315796685
Ref: library/dis opcode-END_ASYNC_FOR15796889
Ref: c9315796889
Ref: library/dis opcode-CLEANUP_THROW15797396
Ref: 6fe15797396
Ref: library/dis opcode-SET_ADD15797812
Ref: 4b8415797812
Ref: library/dis opcode-LIST_APPEND15797977
Ref: 4b8515797977
Ref: library/dis opcode-MAP_ADD15798146
Ref: c9515798146
Ref: library/dis opcode-RETURN_VALUE15798786
Ref: 1a5015798786
Ref: library/dis opcode-YIELD_VALUE15798871
Ref: 5b115798871
Ref: library/dis opcode-SETUP_ANNOTATIONS15799330
Ref: f4415799330
Ref: library/dis opcode-POP_EXCEPT15799673
Ref: 4b8615799673
Ref: library/dis opcode-RERAISE15799919
Ref: 4b8715799919
Ref: library/dis opcode-PUSH_EXC_INFO15800297
Ref: 90715800297
Ref: library/dis opcode-CHECK_EXC_MATCH15800557
Ref: 90e15800557
Ref: library/dis opcode-CHECK_EG_MATCH15800870
Ref: 90615800870
Ref: library/dis opcode-WITH_EXCEPT_START15801449
Ref: 4b8815801449
Ref: library/dis opcode-LOAD_COMMON_CONSTANT15801987
Ref: 36715801987
Ref: library/dis opcode-LOAD_BUILD_CLASS15802292
Ref: 4b8915802292
Ref: library/dis opcode-GET_LEN15802461
Ref: 4b8a15802461
Ref: library/dis opcode-MATCH_MAPPING15802680
Ref: 4b8b15802680
Ref: library/dis opcode-MATCH_SEQUENCE15803033
Ref: 4b8c15803033
Ref: library/dis opcode-MATCH_KEYS15803487
Ref: 91515803487
Ref: library/dis opcode-STORE_NAME15804032
Ref: 4b8d15804032
Ref: library/dis opcode-DELETE_NAME15804313
Ref: 4b8f15804313
Ref: library/dis opcode-UNPACK_SEQUENCE15804477
Ref: 1adc15804477
Ref: library/dis opcode-UNPACK_EX15804786
Ref: 4b9015804786
Ref: library/dis opcode-STORE_ATTR15805796
Ref: 1adb15805796
Ref: library/dis opcode-DELETE_ATTR15806035
Ref: 4b9115806035
Ref: library/dis opcode-STORE_GLOBAL15806241
Ref: 4b8e15806241
Ref: library/dis opcode-DELETE_GLOBAL15806371
Ref: 4b9215806371
Ref: library/dis opcode-LOAD_CONST15806480
Ref: 4b9315806480
Ref: library/dis opcode-LOAD_SMALL_INT15806566
Ref: 36b15806566
Ref: library/dis opcode-LOAD_NAME15806713
Ref: 4b9415806713
Ref: library/dis opcode-LOAD_LOCALS15806890
Ref: 70315806890
Ref: library/dis opcode-LOAD_FROM_DICT_OR_GLOBALS15807170
Ref: 70215807170
Ref: library/dis opcode-BUILD_TEMPLATE15807610
Ref: 36515807610
Ref: library/dis opcode-BUILD_INTERPOLATION15807982
Ref: 36415807982
Ref: library/dis opcode-BUILD_TUPLE15809034
Ref: 4b9515809034
Ref: library/dis opcode-BUILD_LIST15809360
Ref: 4b9615809360
Ref: library/dis opcode-BUILD_SET15809452
Ref: 4b9715809452
Ref: library/dis opcode-BUILD_MAP15809542
Ref: 36615809542
Ref: library/dis opcode-BUILD_STRING15809924
Ref: f4115809924
Ref: library/dis opcode-LIST_EXTEND15810094
Ref: 4b9815810094
Ref: library/dis opcode-SET_UPDATE15810268
Ref: 4b9915810268
Ref: library/dis opcode-DICT_UPDATE15810439
Ref: 4b9a15810439
Ref: library/dis opcode-DICT_MERGE15810613
Ref: 4b9b15810613
Ref: library/dis opcode-LOAD_ATTR15810759
Ref: 6f915810759
Ref: library/dis opcode-LOAD_SUPER_ATTR15811696
Ref: 6f715811696
Ref: library/dis opcode-COMPARE_OP15812772
Ref: b5715812772
Ref: library/dis opcode-IS_OP15813152
Ref: 188e15813152
Ref: library/dis opcode-CONTAINS_OP15813287
Ref: 188d15813287
Ref: library/dis opcode-IMPORT_NAME15813428
Ref: 4b9c15813428
Ref: library/dis opcode-IMPORT_FROM15813848
Ref: 4b9d15813848
Ref: library/dis opcode-JUMP_FORWARD15814097
Ref: 18c215814097
Ref: library/dis opcode-JUMP_BACKWARD15814177
Ref: 90f15814177
Ref: library/dis opcode-JUMP_BACKWARD_NO_INTERRUPT15814316
Ref: 90315814316
Ref: library/dis opcode-POP_JUMP_IF_TRUE15814481
Ref: 199d15814481
Ref: library/dis opcode-POP_JUMP_IF_FALSE15815047
Ref: 199e15815047
Ref: library/dis opcode-POP_JUMP_IF_NOT_NONE15815616
Ref: 1a9c15815616
Ref: library/dis opcode-POP_JUMP_IF_NONE15815885
Ref: 1a9b15815885
Ref: library/dis opcode-FOR_ITER15816146
Ref: 19fa15816146
Ref: library/dis opcode-LOAD_GLOBAL15816560
Ref: 199815816560
Ref: library/dis opcode-LOAD_FAST15816807
Ref: 4b9e15816807
Ref: library/dis opcode-LOAD_FAST_BORROW15817117
Ref: 36915817117
Ref: library/dis opcode-LOAD_FAST_LOAD_FAST15817286
Ref: 4b9f15817286
Ref: library/dis opcode-LOAD_FAST_BORROW_LOAD_FAST_BORROW15817482
Ref: 36a15817482
Ref: library/dis opcode-LOAD_FAST_CHECK15817701
Ref: 70015817701
Ref: library/dis opcode-LOAD_FAST_AND_CLEAR15817955
Ref: 6ff15817955
Ref: library/dis opcode-STORE_FAST15818258
Ref: 19a115818258
Ref: library/dis opcode-STORE_FAST_STORE_FAST15818366
Ref: 4ba015818366
Ref: library/dis opcode-STORE_FAST_LOAD_FAST15818577
Ref: 4ba115818577
Ref: library/dis opcode-DELETE_FAST15818830
Ref: 4ba215818830
Ref: library/dis opcode-MAKE_CELL15818913
Ref: 90415818913
Ref: library/dis opcode-LOAD_DEREF15819092
Ref: 4ba315819092
Ref: library/dis opcode-LOAD_FROM_DICT_OR_DEREF15819378
Ref: 70115819378
Ref: library/dis opcode-STORE_DEREF15819914
Ref: 4ba415819914
Ref: library/dis opcode-DELETE_DEREF15820160
Ref: 4ba515820160
Ref: library/dis opcode-COPY_FREE_VARS15820459
Ref: 90215820459
Ref: library/dis opcode-RAISE_VARARGS15820714
Ref: 4ba615820714
Ref: library/dis opcode-CALL15821183
Ref: 90a15821183
Ref: library/dis opcode-CALL_KW15821961
Ref: 36f15821961
Ref: library/dis opcode-CALL_FUNCTION_EX15822798
Ref: f4315822798
Ref: library/dis opcode-PUSH_NULL15823485
Ref: 90b15823485
Ref: library/dis opcode-MAKE_FUNCTION15823688
Ref: f4215823688
Ref: library/dis opcode-SET_FUNCTION_ATTRIBUTE15824168
Ref: 4ba715824168
Ref: library/dis opcode-BUILD_SLICE15824888
Ref: 4ba815824888
Ref: library/dis opcode-EXTENDED_ARG15825357
Ref: 1a4e15825357
Ref: library/dis opcode-CONVERT_VALUE15825694
Ref: 4ba915825694
Ref: library/dis opcode-FORMAT_SIMPLE15826175
Ref: 4baa15826175
Ref: library/dis opcode-FORMAT_WITH_SPEC15826446
Ref: 4bab15826446
Ref: library/dis opcode-MATCH_CLASS15826768
Ref: 91415826768
Ref: library/dis opcode-RESUME15827512
Ref: 5b215827512
Ref: library/dis opcode-RETURN_GENERATOR15828267
Ref: 90015828267
Ref: library/dis opcode-SEND15828566
Ref: 90115828566
Ref: library/dis opcode-HAVE_ARGUMENT15828938
Ref: 6a615828938
Ref: library/dis opcode-CALL_INTRINSIC_115829806
Ref: 6fc15829806
Ref: library/dis opcode-CALL_INTRINSIC_215833090
Ref: 6fd15833090
Ref: library/dis opcode-LOAD_SPECIAL15834961
Ref: 36c15834961
Ref: library/dis opcode-SETUP_FINALLY15835484
Ref: 4bac15835484
Ref: library/dis opcode-SETUP_CLEANUP15835748
Ref: 4bad15835748
Ref: library/dis opcode-SETUP_WITH15836153
Ref: 4bae15836153
Ref: library/dis opcode-POP_BLOCK15836585
Ref: 4baf15836585
Ref: library/dis opcode-LOAD_CONST_IMMORTAL15836738
Ref: 37215836738
Ref: library/dis opcode-JUMP15836874
Ref: 4bb015836874
Ref: library/dis opcode-JUMP_NO_INTERRUPT15836891
Ref: 1abb15836891
Ref: library/dis opcode-JUMP_IF_TRUE15837058
Ref: 37015837058
Ref: library/dis opcode-JUMP_IF_FALSE15837083
Ref: 37115837083
Ref: library/dis opcode-LOAD_CLOSURE15837255
Ref: 199b15837255
Node: Opcode collections15837551
Ref: library/dis id115837691
Ref: 4bb115837691
Ref: library/dis opcode-collections15837691
Ref: 4b6215837691
Ref: library/dis dis opname15838046
Ref: 4b6615838046
Ref: library/dis dis opmap15838133
Ref: 4bb215838133
Ref: library/dis dis cmp_op15838209
Ref: 4bb315838209
Ref: library/dis dis hasarg15838278
Ref: 59815838278
Ref: library/dis dis hasconst15838387
Ref: 4bb415838387
Ref: library/dis dis hasfree15838463
Ref: 4bb515838463
Ref: library/dis dis hasname15838811
Ref: 4bb615838811
Ref: library/dis dis hasjump15838896
Ref: 4bb715838896
Ref: library/dis dis haslocal15839036
Ref: 4bb815839036
Ref: library/dis dis hascompare15839118
Ref: 4bb915839118
Ref: library/dis dis hasexc15839195
Ref: 6a715839195
Ref: library/dis dis hasjrel15839310
Ref: 4bba15839310
Ref: library/dis dis hasjabs15839496
Ref: 4bbb15839496
Node: pickletools — Ferramentas para desenvolvedores pickle15839677
Ref: library/pickletools doc15839849
Ref: 4bbc15839849
Ref: library/pickletools module-pickletools15839849
Ref: ac15839849
Ref: library/pickletools no-color15839849
Ref: 4bbd15839849
Ref: library/pickletools pickletools-tools-for-pickle-developers15839849
Ref: 4bbe15839849
Ref: pickletools — Ferramentas para desenvolvedores pickle-Footnote-115840704
Node: Uso na linha de comando<14>15840775
Ref: library/pickletools command-line-usage15840929
Ref: 4bbf15840929
Ref: library/pickletools pickletools-cli15840929
Ref: 2bd215840929
Node: Opções de linha de comando<5>15841964
Ref: library/pickletools command-line-options15842059
Ref: 4bc015842059
Ref: library/pickletools cmdoption-pickletools-a15842136
Ref: 4bc115842136
Ref: library/pickletools cmdoption-pickletools-annotate15842136
Ref: 4bc215842136
Ref: library/pickletools cmdoption-pickletools-o15842239
Ref: 4bc315842239
Ref: library/pickletools cmdoption-pickletools-output15842239
Ref: 4bc415842239
Ref: library/pickletools cmdoption-pickletools-l15842332
Ref: 4bc515842332
Ref: library/pickletools cmdoption-pickletools-indentlevel15842332
Ref: 4bc615842332
Ref: library/pickletools cmdoption-pickletools-m15842442
Ref: 4bc715842442
Ref: library/pickletools cmdoption-pickletools-memo15842442
Ref: 4bc815842442
Ref: library/pickletools cmdoption-pickletools-p15842555
Ref: 4bc915842555
Ref: library/pickletools cmdoption-pickletools-preamble15842555
Ref: 4bca15842555
Ref: library/pickletools cmdoption-pickletools-arg-pickle_file15842728
Ref: 4bcb15842728
Node: Interface programática<2>15842860
Ref: library/pickletools programmatic-interface15843014
Ref: 4bcc15843014
Ref: library/pickletools pickletools dis15843082
Ref: eb215843082
Ref: library/pickletools pickletools genops15844031
Ref: 4bcd15844031
Ref: library/pickletools pickletools optimize15844551
Ref: 2bb915844551
Node: Serviços Específicos do MS Windows15844880
Ref: library/windows doc15845060
Ref: 4bce15845060
Ref: library/windows ms-windows-specific-services15845060
Ref: 4bcf15845060
Ref: library/windows mswin-specific-services15845060
Ref: 20cb15845060
Ref: library/windows no-color15845060
Ref: 4bd015845060
Node: msvcrt — Rotinas úteis do runtime MS VC++15845407
Ref: library/msvcrt doc15845575
Ref: 4bd115845575
Ref: library/msvcrt module-msvcrt15845575
Ref: 9715845575
Ref: library/msvcrt msvcrt-useful-routines-from-the-ms-vc-runtime15845575
Ref: 4bd215845575
Node: Operações com arquivos15846654
Ref: library/msvcrt file-operations15846782
Ref: 4bd315846782
Ref: library/msvcrt msvcrt-files15846782
Ref: 4bd415846782
Ref: library/msvcrt msvcrt locking15846849
Ref: 45ee15846849
Ref: library/msvcrt msvcrt LK_LOCK15847574
Ref: 4bd515847574
Ref: library/msvcrt msvcrt LK_RLCK15847599
Ref: 4bd615847599
Ref: library/msvcrt msvcrt LK_NBLCK15847869
Ref: 4bd715847869
Ref: library/msvcrt msvcrt LK_NBRLCK15847895
Ref: 4bd815847895
Ref: library/msvcrt msvcrt LK_UNLCK15848052
Ref: 4bd915848052
Ref: library/msvcrt msvcrt setmode15848166
Ref: 4bda15848166
Ref: library/msvcrt msvcrt open_osfhandle15848437
Ref: 45ef15848437
Ref: library/msvcrt msvcrt get_osfhandle15849174
Ref: 45ed15849174
Node: E/S de console15849462
Ref: library/msvcrt console-i-o15849618
Ref: 4bdb15849618
Ref: library/msvcrt msvcrt-console15849618
Ref: 4bdc15849618
Ref: library/msvcrt msvcrt kbhit15849667
Ref: 4bdd15849667
Ref: library/msvcrt msvcrt getch15849791
Ref: 4bde15849791
Ref: library/msvcrt msvcrt getwch15850278
Ref: 15e615850278
Ref: library/msvcrt msvcrt getche15850403
Ref: 4bdf15850403
Ref: library/msvcrt msvcrt getwche15850550
Ref: 15e715850550
Ref: library/msvcrt msvcrt putch15850677
Ref: 4be015850677
Ref: library/msvcrt msvcrt putwch15850792
Ref: 15e815850792
Ref: library/msvcrt msvcrt ungetch15850929
Ref: 4be115850929
Ref: library/msvcrt msvcrt ungetwch15851148
Ref: 4be215851148
Node: Outras funções<4>15851289
Ref: library/msvcrt msvcrt-other15851412
Ref: 4be315851412
Ref: library/msvcrt other-functions15851412
Ref: 4be415851412
Ref: library/msvcrt msvcrt heapmin15851463
Ref: 4be515851463
Ref: library/msvcrt msvcrt set_error_mode15851667
Ref: 4be615851667
Ref: library/msvcrt msvcrt OUT_TO_DEFAULT15852039
Ref: 4be815852039
Ref: library/msvcrt msvcrt OUT_TO_STDERR15852182
Ref: 4be915852182
Ref: library/msvcrt msvcrt OUT_TO_MSGBOX15852310
Ref: 4bea15852310
Ref: library/msvcrt msvcrt REPORT_ERRMODE15852435
Ref: 4be715852435
Ref: library/msvcrt msvcrt CrtSetReportMode15852569
Ref: 4beb15852569
Ref: library/msvcrt msvcrt CrtSetReportFile15852957
Ref: 4bec15852957
Ref: library/msvcrt msvcrt CRT_WARN15853354
Ref: 4bee15853354
Ref: library/msvcrt msvcrt CRT_ERROR15853469
Ref: 4bef15853469
Ref: library/msvcrt msvcrt CRT_ASSERT15853585
Ref: 4bf015853585
Ref: library/msvcrt msvcrt CRTDBG_MODE_DEBUG15853640
Ref: 4bf115853640
Ref: library/msvcrt msvcrt CRTDBG_MODE_FILE15853736
Ref: 4bed15853736
Ref: library/msvcrt msvcrt CRTDBG_MODE_WNDW15853953
Ref: 4bf215853953
Ref: library/msvcrt msvcrt CRTDBG_REPORT_MODE15854111
Ref: 4bf315854111
Ref: library/msvcrt msvcrt CRT_ASSEMBLY_VERSION15854203
Ref: 155115854203
Ref: library/msvcrt msvcrt VC_ASSEMBLY_PUBLICKEYTOKEN15854318
Ref: 155215854318
Ref: library/msvcrt msvcrt LIBRARIES_ASSEMBLY_NAME_PREFIX15854459
Ref: 155315854459
Node: winreg — Acesso aos registros do Windows15854603
Ref: library/winreg doc15854840
Ref: 4bf415854840
Ref: library/winreg module-winreg15854840
Ref: 11c15854840
Ref: library/winreg no-color15854840
Ref: 4bf515854840
Ref: library/winreg winreg-windows-registry-access15854840
Ref: 4bf615854840
Ref: library/winreg exception-changed15855303
Ref: 4bf815855303
Node: Funções<14>15855567
Ref: library/winreg functions15855682
Ref: 4bf915855682
Ref: library/winreg id115855682
Ref: 4bfa15855682
Ref: library/winreg winreg CloseKey15855765
Ref: 4bfb15855765
Ref: library/winreg winreg ConnectRegistry15856116
Ref: 45f415856116
Ref: library/winreg winreg CreateKey15856852
Ref: 45f515856852
Ref: library/winreg winreg CreateKeyEx15857877
Ref: 155415857877
Ref: library/winreg winreg DeleteKey15859312
Ref: 45f615859312
Ref: library/winreg winreg DeleteKeyEx15860113
Ref: 155515860113
Ref: library/winreg winreg DeleteValue15861494
Ref: 45f715861494
Ref: library/winreg winreg EnumKey15861883
Ref: 45f815861883
Ref: library/winreg winreg EnumValue15862606
Ref: 45f915862606
Ref: library/winreg winreg ExpandEnvironmentStrings15863944
Ref: 15e915863944
Ref: library/winreg winreg FlushKey15864331
Ref: 4c0215864331
Ref: library/winreg winreg LoadKey15865241
Ref: 45fa15865241
Ref: library/winreg winreg OpenKey15866539
Ref: 45fb15866539
Ref: library/winreg winreg OpenKeyEx15866612
Ref: 4c0515866612
Ref: library/winreg winreg QueryInfoKey15867777
Ref: 45fd15867777
Ref: library/winreg winreg QueryValue15868789
Ref: 45fe15868789
Ref: library/winreg winreg QueryValueEx15869706
Ref: 45ff15869706
Ref: library/winreg winreg SaveKey15870653
Ref: 460015870653
Ref: library/winreg winreg SetValue15871788
Ref: 460115871788
Ref: library/winreg winreg SetValueEx15873033
Ref: 1a3615873033
Ref: library/winreg winreg DisableReflectionKey15874391
Ref: 155615874391
Ref: library/winreg winreg EnableReflectionKey15875094
Ref: 155715875094
Ref: library/winreg winreg QueryReflectionKey15875643
Ref: 155815875643
Ref: Funções<14>-Footnote-115876180
Ref: Funções<14>-Footnote-215876257
Node: Constantes<10>15876334
Ref: library/winreg constants15876491
Ref: 4c0a15876491
Ref: library/winreg id215876491
Ref: 4c0b15876491
Node: Constantes HKEY_*15876696
Ref: library/winreg hkey-constants15876791
Ref: 4bfd15876791
Ref: library/winreg id315876791
Ref: 4c0c15876791
Ref: library/winreg winreg HKEY_CLASSES_ROOT15876846
Ref: 4c0d15876846
Ref: library/winreg winreg HKEY_CURRENT_USER15877114
Ref: 4c0e15877114
Ref: library/winreg winreg HKEY_LOCAL_MACHINE15877449
Ref: 4c0415877449
Ref: library/winreg winreg HKEY_USERS15877690
Ref: 4c0315877690
Ref: library/winreg winreg HKEY_PERFORMANCE_DATA15877925
Ref: 4c0f15877925
Ref: library/winreg winreg HKEY_CURRENT_CONFIG15878204
Ref: 4c1015878204
Ref: library/winreg winreg HKEY_DYN_DATA15878340
Ref: 4c1115878340
Node: Direitos de acesso15878445
Ref: library/winreg access-rights15878565
Ref: 4bff15878565
Ref: library/winreg id415878565
Ref: 4c1215878565
Ref: library/winreg winreg KEY_ALL_ACCESS15878708
Ref: 4c1315878708
Ref: library/winreg winreg KEY_WRITE15878997
Ref: 4bfe15878997
Ref: library/winreg winreg KEY_READ15879150
Ref: 4c0615879150
Ref: library/winreg winreg KEY_EXECUTE15879320
Ref: 4c1915879320
Ref: library/winreg winreg KEY_QUERY_VALUE15879392
Ref: 4c1415879392
Ref: library/winreg winreg KEY_SET_VALUE15879496
Ref: 4c0815879496
Ref: library/winreg winreg KEY_CREATE_SUB_KEY15879599
Ref: 4c1515879599
Ref: library/winreg winreg KEY_ENUMERATE_SUB_KEYS15879704
Ref: 4c1615879704
Ref: library/winreg winreg KEY_NOTIFY15879816
Ref: 4c1715879816
Ref: library/winreg winreg KEY_CREATE_LINK15879984
Ref: 4c1815879984
Ref: Direitos de acesso-Footnote-115880130
Node: Específico de 64 bits15880207
Ref: library/winreg bit-access-rights15880284
Ref: 4c1a15880284
Ref: library/winreg bit-specific15880284
Ref: 4c1b15880284
Ref: library/winreg winreg KEY_WOW64_64KEY15880442
Ref: 4c0015880442
Ref: library/winreg winreg KEY_WOW64_32KEY15880644
Ref: 4c1c15880644
Ref: Específico de 64 bits-Footnote-115880882
Node: Tipos de valores15880954
Ref: library/winreg id515881048
Ref: 4c1d15881048
Ref: library/winreg value-types15881048
Ref: 4c0915881048
Ref: library/winreg winreg REG_BINARY15881173
Ref: 4c1e15881173
Ref: library/winreg winreg REG_DWORD15881245
Ref: 4c1f15881245
Ref: library/winreg winreg REG_DWORD_LITTLE_ENDIAN15881299
Ref: 4c2015881299
Ref: library/winreg winreg REG_DWORD_BIG_ENDIAN15881438
Ref: 4c2115881438
Ref: library/winreg winreg REG_EXPAND_SZ15881528
Ref: 4c0115881528
Ref: library/winreg winreg REG_LINK15881659
Ref: 4c2215881659
Ref: library/winreg winreg REG_MULTI_SZ15881720
Ref: 1c7a15881720
Ref: library/winreg winreg REG_NONE15881907
Ref: 4c2315881907
Ref: library/winreg winreg REG_QWORD15881971
Ref: ef315881971
Ref: library/winreg winreg REG_QWORD_LITTLE_ENDIAN15882061
Ref: 4c2415882061
Ref: library/winreg winreg REG_RESOURCE_LIST15882232
Ref: 4c2515882232
Ref: library/winreg winreg REG_FULL_RESOURCE_DESCRIPTOR15882322
Ref: 4c2615882322
Ref: library/winreg winreg REG_RESOURCE_REQUIREMENTS_LIST15882407
Ref: 4c2715882407
Ref: library/winreg winreg REG_SZ15882497
Ref: 4c0715882497
Ref: Tipos de valores-Footnote-115882594
Node: Objetos identificador de registro15882671
Ref: library/winreg handle-object15882806
Ref: 4bf715882806
Ref: library/winreg registry-handle-objects15882806
Ref: 4c2815882806
Ref: library/winreg winreg PyHKEY Close15884169
Ref: 4bfc15884169
Ref: library/winreg winreg PyHKEY Detach15884325
Ref: 45fc15884325
Ref: library/winreg winreg PyHKEY __enter__15884969
Ref: 4c2915884969
Ref: library/winreg winreg PyHKEY __exit__15885002
Ref: 4c2a15885002
Node: winsound — Interface de reprodução de som para o Windows15885426
Ref: library/winsound doc15885610
Ref: 4c2b15885610
Ref: library/winsound module-winsound15885610
Ref: 11d15885610
Ref: library/winsound no-color15885610
Ref: 4c2c15885610
Ref: library/winsound winsound-sound-playing-interface-for-windows15885610
Ref: 4c2d15885610
Ref: library/winsound winsound Beep15885987
Ref: ef515885987
Ref: library/winsound winsound PlaySound15886401
Ref: ef715886401
Ref: library/winsound winsound MessageBeep15887029
Ref: ef615887029
Ref: library/winsound winsound SND_FILENAME15887661
Ref: 4c2e15887661
Ref: library/winsound winsound SND_ALIAS15887791
Ref: 4c2f15887791
Ref: library/winsound winsound SND_LOOP15889569
Ref: 4c3115889569
Ref: library/winsound winsound SND_MEMORY15889776
Ref: 4c3315889776
Ref: library/winsound winsound SND_PURGE15890213
Ref: 4c3415890213
Ref: library/winsound winsound SND_ASYNC15890406
Ref: 4c3215890406
Ref: library/winsound winsound SND_NODEFAULT15890534
Ref: 4c3015890534
Ref: library/winsound winsound SND_NOSTOP15890671
Ref: 4c3515890671
Ref: library/winsound winsound SND_NOWAIT15890763
Ref: 4c3615890763
Ref: library/winsound winsound SND_APPLICATION15890954
Ref: 4c3715890954
Ref: library/winsound winsound SND_SENTRY15891226
Ref: 4c3815891226
Ref: library/winsound winsound SND_SYNC15891355
Ref: 4c3915891355
Ref: library/winsound winsound SND_SYSTEM15891507
Ref: 4c3a15891507
Ref: library/winsound winsound MB_ICONASTERISK15891657
Ref: 4c3b15891657
Ref: library/winsound winsound MB_ICONEXCLAMATION15891735
Ref: 4c3c15891735
Ref: library/winsound winsound MB_ICONHAND15891820
Ref: 4c3d15891820
Ref: library/winsound winsound MB_ICONQUESTION15891891
Ref: 4c3e15891891
Ref: library/winsound winsound MB_OK15891970
Ref: 4c3f15891970
Ref: library/winsound winsound MB_ICONERROR15892038
Ref: 4c4015892038
Ref: library/winsound winsound MB_ICONINFORMATION15892144
Ref: 4c4115892144
Ref: library/winsound winsound MB_ICONSTOP15892259
Ref: 4c4215892259
Ref: library/winsound winsound MB_ICONWARNING15892364
Ref: 4c4315892364
Node: Serviços específicos do Unix15892479
Ref: library/unix doc15892675
Ref: 4c4415892675
Ref: library/unix no-color15892675
Ref: 4c4515892675
Ref: library/unix unix15892675
Ref: 4c4615892675
Ref: library/unix unix-specific-services15892675
Ref: 4c4715892675
Node: shlex — Simple lexical analysis15893434
Ref: library/shlex doc15893596
Ref: 4c4815893596
Ref: library/shlex module-shlex15893596
Ref: c915893596
Ref: library/shlex shlex-simple-lexical-analysis15893596
Ref: 4c4915893596
Ref: library/shlex shlex split15894119
Ref: 75315894119
Ref: library/shlex shlex join15894717
Ref: c1215894717
Ref: library/shlex shlex quote15895180
Ref: 57b15895180
Ref: library/shlex shlex-quote-warning15895408
Ref: 35eb15895408
Ref: library/shlex shlex shlex15897036
Ref: ebc15897036
Ref: shlex — Simple lexical analysis-Footnote-115899294
Node: shlex Objects15899359
Ref: library/shlex id115899469
Ref: 4c4d15899469
Ref: library/shlex shlex-objects15899469
Ref: 4c4e15899469
Ref: library/shlex shlex shlex get_token15899573
Ref: 4c4f15899573
Ref: library/shlex shlex shlex push_token15899937
Ref: 4c5015899937
Ref: library/shlex shlex shlex read_token15900020
Ref: 4c5215900020
Ref: library/shlex shlex shlex sourcehook15900260
Ref: 4c5315900260
Ref: library/shlex shlex shlex push_source15901800
Ref: 4c5515901800
Ref: library/shlex shlex shlex pop_source15902104
Ref: 4c5615902104
Ref: library/shlex shlex shlex error_leader15902304
Ref: 4c5715902304
Ref: library/shlex shlex shlex commenters15903034
Ref: 4c4a15903034
Ref: library/shlex shlex shlex wordchars15903255
Ref: 4c4c15903255
Ref: library/shlex shlex shlex whitespace15903950
Ref: 4c5915903950
Ref: library/shlex shlex shlex escape15904147
Ref: 4c5a15904147
Ref: library/shlex shlex shlex quotes15904311
Ref: 4c5b15904311
Ref: library/shlex shlex shlex escapedquotes15904595
Ref: 4c5c15904595
Ref: library/shlex shlex shlex whitespace_split15904823
Ref: 4c5815904823
Ref: library/shlex shlex shlex infile15905361
Ref: 4c4b15905361
Ref: library/shlex shlex shlex instream15905591
Ref: 4c5d15905591
Ref: library/shlex shlex shlex source15905715
Ref: 4c5415905715
Ref: library/shlex shlex shlex debug15906303
Ref: 4c5e15906303
Ref: library/shlex shlex shlex lineno15906566
Ref: 4c5f15906566
Ref: library/shlex shlex shlex token15906661
Ref: 4c6015906661
Ref: library/shlex shlex shlex eof15906777
Ref: 4c5115906777
Ref: library/shlex shlex shlex punctuation_chars15906952
Ref: 1c6d15906952
Node: Regras de análise15907367
Ref: library/shlex parsing-rules15907520
Ref: 4c6115907520
Ref: library/shlex shlex-parsing-rules15907520
Ref: 4c6215907520
Node: Improved Compatibility with Shells15909550
Ref: library/shlex improved-compatibility-with-shells15909681
Ref: 4c6315909681
Ref: library/shlex improved-shell-compatibility15909681
Ref: ebd15909681
Node: posix — As chamadas de sistema mais comuns do POSIX15912521
Ref: library/posix doc15912725
Ref: 4c6415912725
Ref: library/posix module-posix15912725
Ref: b215912725
Ref: library/posix no-color15912725
Ref: 4c6515912725
Ref: library/posix posix-the-most-common-posix-system-calls15912725
Ref: 4c6615912725
Node: Suporte a arquivos grandes15914057
Ref: library/posix large-file-support15914211
Ref: 4c6715914211
Ref: library/posix posix-large-files15914211
Ref: 4c6815914211
Node: Conteúdo notável do módulo15915268
Ref: library/posix notable-module-contents15915422
Ref: 4c6915915422
Ref: library/posix posix-contents15915422
Ref: 4c6a15915422
Ref: library/posix posix environ15915628
Ref: 4c6b15915628
Node: pwd — A senha do banco de dados15916865
Ref: library/pwd doc15917070
Ref: 4c6c15917070
Ref: library/pwd module-pwd15917070
Ref: b715917070
Ref: library/pwd no-color15917070
Ref: 4c6d15917070
Ref: library/pwd pwd-the-password-database15917070
Ref: 4c6e15917070
Ref: library/pwd pwd getpwuid15919494
Ref: 1cc815919494
Ref: library/pwd pwd getpwnam15919613
Ref: 35db15919613
Ref: library/pwd pwd getpwall15919735
Ref: 4c6f15919735
Node: grp — O banco de dados de grupos15920000
Ref: library/grp doc15920195
Ref: 4c7015920195
Ref: library/grp grp-the-group-database15920195
Ref: 4c7115920195
Ref: library/grp module-grp15920195
Ref: 6a15920195
Ref: library/grp no-color15920195
Ref: 4c7215920195
Ref: library/grp grp getgrgid15921985
Ref: f1615921985
Ref: library/grp grp getgrnam15922344
Ref: 35da15922344
Ref: library/grp grp getgrall15922559
Ref: 184115922559
Node: termios — Controle de tty no estilo POSIX15922808
Ref: library/termios doc15923011
Ref: 4c7315923011
Ref: library/termios module-termios15923011
Ref: e715923011
Ref: library/termios no-color15923011
Ref: 4c7415923011
Ref: library/termios termios-posix-style-tty-control15923011
Ref: 4c7515923011
Ref: library/termios termios tcgetattr15924154
Ref: 192f15924154
Ref: library/termios termios tcsetattr15924782
Ref: 19a815924782
Ref: library/termios termios TCSANOW15925072
Ref: 4c7615925072
Ref: library/termios termios TCSADRAIN15925150
Ref: 4c7715925150
Ref: library/termios termios TCSAFLUSH15925277
Ref: 4c7815925277
Ref: library/termios termios tcsendbreak15925447
Ref: 4c7915925447
Ref: library/termios termios tcdrain15925737
Ref: 4c7a15925737
Ref: library/termios termios tcflush15925870
Ref: 4c7b15925870
Ref: library/termios termios tcflow15926138
Ref: 4c7c15926138
Ref: library/termios termios tcgetwinsize15926455
Ref: 4c7d15926455
Ref: library/termios termios tcsetwinsize15926723
Ref: 4c7e15926723
Ref: termios — Controle de tty no estilo POSIX-Footnote-115927390
Node: Exemplo<15>15927437
Ref: library/termios example15927528
Ref: 4c7f15927528
Ref: library/termios termios-example15927528
Ref: 4c8015927528
Node: tty — Funções de controle de terminal15928304
Ref: library/tty doc15928511
Ref: 4c8115928511
Ref: library/tty module-tty15928511
Ref: 10615928511
Ref: library/tty no-color15928511
Ref: 4c8215928511
Ref: library/tty tty-terminal-control-functions15928511
Ref: 4c8315928511
Ref: library/tty tty cfmakeraw15928990
Ref: 198015928990
Ref: library/tty tty cfmakecbreak15929222
Ref: 193215929222
Ref: library/tty tty setraw15929827
Ref: 197f15929827
Ref: library/tty tty setcbreak15930323
Ref: 193115930323
Ref: tty — Funções de controle de terminal-Footnote-115931399
Node: pty — Utilitários de pseudoterminal15931462
Ref: library/pty doc15931672
Ref: 4c8415931672
Ref: library/pty module-pty15931672
Ref: b615931672
Ref: library/pty no-color15931672
Ref: 4c8515931672
Ref: library/pty pty-pseudo-terminal-utilities15931672
Ref: 4c8615931672
Ref: library/pty pty fork15932379
Ref: 1a0115932379
Ref: library/pty pty openpty15932994
Ref: 2ff15932994
Ref: library/pty pty spawn15933304
Ref: 117815933304
Ref: pty — Utilitários de pseudoterminal-Footnote-115935691
Node: Exemplo<16>15935754
Ref: library/pty example15935840
Ref: 4c8715935840
Ref: Exemplo<16>-Footnote-115937077
Node: fcntl — as chamadas de sistema fcntl e ioctl15937123
Ref: library/fcntl doc15937336
Ref: 4c8815937336
Ref: library/fcntl fcntl-the-fcntl-and-ioctl-system-calls15937336
Ref: 4c8915937336
Ref: library/fcntl module-fcntl15937336
Ref: 5d15937336
Ref: library/fcntl no-color15937336
Ref: 4c8a15937336
Ref: library/fcntl fcntl fcntl15941136
Ref: 17bb15941136
Ref: library/fcntl fcntl ioctl15943358
Ref: 166915943358
Ref: library/fcntl fcntl flock15946313
Ref: 45ec15946313
Ref: library/fcntl fcntl lockf15946894
Ref: 15dd15946894
Ref: library/fcntl fcntl LOCK_UN15947266
Ref: 4c8b15947266
Ref: library/fcntl fcntl LOCK_SH15947335
Ref: 4c8c15947335
Ref: library/fcntl fcntl LOCK_EX15947409
Ref: 4c8d15947409
Ref: library/fcntl fcntl LOCK_NB15947479
Ref: 4c8e15947479
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-115949857
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-215949902
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-315949947
Node: resource — Informação de uso de recursos15949992
Ref: library/resource doc15950214
Ref: 4c8f15950214
Ref: library/resource module-resource15950214
Ref: c115950214
Ref: library/resource no-color15950214
Ref: 4c9015950214
Ref: library/resource resource-resource-usage-information15950214
Ref: 4c9115950214
Ref: library/resource resource error15950801
Ref: 4c9215950801
Ref: resource — Informação de uso de recursos-Footnote-115951102
Node: Limites de recursos15951144
Ref: library/resource resource-limits15951268
Ref: 4c9315951268
Ref: library/resource resource RLIM_INFINITY15952223
Ref: 174e15952223
Ref: library/resource resource getrlimit15952330
Ref: 174d15952330
Ref: library/resource resource setrlimit15952641
Ref: 174f15952641
Ref: library/resource resource prlimit15953822
Ref: 118015953822
Ref: library/resource resource RLIMIT_CORE15955509
Ref: 458d15955509
Ref: library/resource resource RLIMIT_CPU15955806
Ref: 4c9515955806
Ref: library/resource resource RLIMIT_FSIZE15956194
Ref: 4c9615956194
Ref: library/resource resource RLIMIT_DATA15956292
Ref: 4c9715956292
Ref: library/resource resource RLIMIT_STACK15956380
Ref: 4c9815956380
Ref: library/resource resource RLIMIT_RSS15956577
Ref: 4c9915956577
Ref: library/resource resource RLIMIT_NPROC15956709
Ref: 4c9a15956709
Ref: library/resource resource RLIMIT_NOFILE15956812
Ref: 4c9415956812
Ref: library/resource resource RLIMIT_OFILE15956932
Ref: 4c9b15956932
Ref: library/resource resource RLIMIT_MEMLOCK15957014
Ref: 4c9c15957014
Ref: library/resource resource RLIMIT_VMEM15957120
Ref: 4c9d15957120
Ref: library/resource resource RLIMIT_AS15957332
Ref: 4c9e15957332
Ref: library/resource resource RLIMIT_MSGQUEUE15957460
Ref: 118115957460
Ref: library/resource resource RLIMIT_NICE15957665
Ref: 118215957665
Ref: library/resource resource RLIMIT_RTPRIO15957870
Ref: 118315957870
Ref: library/resource resource RLIMIT_RTTIME15958032
Ref: 118415958032
Ref: library/resource resource RLIMIT_SIGPENDING15958326
Ref: 118515958326
Ref: library/resource resource RLIMIT_SBSIZE15958507
Ref: 118615958507
Ref: library/resource resource RLIMIT_SWAP15958859
Ref: 118715958859
Ref: library/resource resource RLIMIT_NPTS15959281
Ref: 118815959281
Ref: library/resource resource RLIMIT_KQUEUES15959472
Ref: 1b8b15959472
Ref: Limites de recursos-Footnote-115959719
Ref: Limites de recursos-Footnote-215959768
Ref: Limites de recursos-Footnote-315959817
Node: Uso de recursos15959884
Ref: library/resource resource-usage15960008
Ref: 4c9f15960008
Ref: library/resource resource getrusage15960137
Ref: 162215960137
Ref: library/resource resource getpagesize15965033
Ref: 4ca015965033
Ref: library/resource resource RUSAGE_SELF15965369
Ref: 4ca115965369
Ref: library/resource resource RUSAGE_CHILDREN15965582
Ref: 4ca215965582
Ref: library/resource resource RUSAGE_BOTH15965784
Ref: 4ca315965784
Ref: library/resource resource RUSAGE_THREAD15966000
Ref: 4ca415966000
Ref: Uso de recursos-Footnote-115966260
Node: syslog — Rotinas da biblioteca syslog do Unix15966309
Ref: library/syslog doc15966476
Ref: 4ca515966476
Ref: library/syslog module-syslog15966476
Ref: e215966476
Ref: library/syslog no-color15966476
Ref: 4ca615966476
Ref: library/syslog syslog-unix-syslog-library-routines15966476
Ref: 4ca715966476
Ref: library/syslog syslog syslog15967185
Ref: 75715967185
Ref: library/syslog syslog openlog15968739
Ref: 75515968739
Ref: library/syslog syslog closelog15970201
Ref: 75615970201
Ref: library/syslog syslog setlogmask15971122
Ref: 45f215971122
Ref: library/syslog syslog LOG_EMERG15971781
Ref: 4caa15971781
Ref: library/syslog syslog LOG_ALERT15971808
Ref: 4cab15971808
Ref: library/syslog syslog LOG_CRIT15971835
Ref: 4cac15971835
Ref: library/syslog syslog LOG_ERR15971861
Ref: 4cad15971861
Ref: library/syslog syslog LOG_WARNING15971886
Ref: 4cae15971886
Ref: library/syslog syslog LOG_NOTICE15971915
Ref: 4caf15971915
Ref: library/syslog syslog LOG_INFO15971943
Ref: 4ca815971943
Ref: library/syslog syslog LOG_DEBUG15971969
Ref: 4cb015971969
Ref: library/syslog syslog LOG_AUTH15972041
Ref: 4cb115972041
Ref: library/syslog syslog LOG_AUTHPRIV15972067
Ref: 4cb215972067
Ref: library/syslog syslog LOG_CRON15972097
Ref: 4cb315972097
Ref: library/syslog syslog LOG_DAEMON15972123
Ref: 4cb415972123
Ref: library/syslog syslog LOG_FTP15972151
Ref: 4cb515972151
Ref: library/syslog syslog LOG_INSTALL15972176
Ref: 4cb615972176
Ref: library/syslog syslog LOG_KERN15972205
Ref: 4cb715972205
Ref: library/syslog syslog LOG_LAUNCHD15972231
Ref: 4cb815972231
Ref: library/syslog syslog LOG_LPR15972260
Ref: 4cb915972260
Ref: library/syslog syslog LOG_MAIL15972285
Ref: 4cba15972285
Ref: library/syslog syslog LOG_NETINFO15972311
Ref: 4cbb15972311
Ref: library/syslog syslog LOG_NEWS15972340
Ref: 4cbc15972340
Ref: library/syslog syslog LOG_RAS15972366
Ref: 4cbd15972366
Ref: library/syslog syslog LOG_REMOTEAUTH15972391
Ref: 4cbe15972391
Ref: library/syslog syslog LOG_SYSLOG15972423
Ref: 4cbf15972423
Ref: library/syslog syslog LOG_USER15972451
Ref: 4ca915972451
Ref: library/syslog syslog LOG_UUCP15972477
Ref: 4cc015972477
Ref: library/syslog syslog LOG_LOCAL015972503
Ref: 4cc115972503
Ref: library/syslog syslog LOG_LOCAL115972531
Ref: 4cc215972531
Ref: library/syslog syslog LOG_LOCAL215972559
Ref: 4cc315972559
Ref: library/syslog syslog LOG_LOCAL315972587
Ref: 4cc415972587
Ref: library/syslog syslog LOG_LOCAL415972615
Ref: 4cc515972615
Ref: library/syslog syslog LOG_LOCAL515972643
Ref: 4cc615972643
Ref: library/syslog syslog LOG_LOCAL615972671
Ref: 4cc715972671
Ref: library/syslog syslog LOG_LOCAL715972699
Ref: 4cc815972699
Ref: library/syslog syslog LOG_PID15973166
Ref: 4cc915973166
Ref: library/syslog syslog LOG_CONS15973191
Ref: 4cca15973191
Ref: library/syslog syslog LOG_NDELAY15973217
Ref: 4ccb15973217
Ref: library/syslog syslog LOG_ODELAY15973245
Ref: 4ccc15973245
Ref: library/syslog syslog LOG_NOWAIT15973273
Ref: 4ccd15973273
Ref: library/syslog syslog LOG_PERROR15973301
Ref: 4cce15973301
Node: Exemplos<37>15973528
Ref: library/syslog examples15973624
Ref: 4ccf15973624
Node: Exemplo simples15973693
Ref: library/syslog simple-example15973757
Ref: 4cd015973757
Node: Interface de linha de comando CLI de módulos15974301
Ref: library/cmdline doc15974483
Ref: 4cd115974483
Ref: library/cmdline library-cmdline15974483
Ref: 4cd215974483
Ref: library/cmdline modules-command-line-interface-cli15974483
Ref: 4cd315974483
Ref: library/cmdline no-color15974483
Ref: 4cd415974483
Node: Módulos substituídos15976036
Ref: library/superseded doc15976206
Ref: 4cd515976206
Ref: library/superseded no-color15976206
Ref: 4cd615976206
Ref: library/superseded superseded15976206
Ref: 4cd715976206
Ref: library/superseded superseded-modules15976206
Ref: 4cd815976206
Ref: Módulos substituídos-Footnote-115977439
Node: getopt — Analisador sintático no estilo C para opções de linha de comando15977481
Ref: library/getopt doc15977618
Ref: 4cd915977618
Ref: library/getopt getopt-c-style-parser-for-command-line-options15977618
Ref: 4cda15977618
Ref: library/getopt module-getopt15977618
Ref: 6515977618
Ref: library/getopt getopt getopt15979213
Ref: 16a915979213
Ref: library/getopt getopt gnu_getopt15981913
Ref: 16a815981913
Ref: library/getopt getopt GetoptError15983112
Ref: 184215983112
Ref: library/getopt getopt error15983736
Ref: 4cdb15983736
Ref: getopt — Analisador sintático no estilo C para opções de linha de comando-Footnote-115987865
Node: Módulos removidos15987931
Ref: library/removed doc15988088
Ref: 4cdc15988088
Ref: library/removed no-color15988088
Ref: 4cdd15988088
Ref: library/removed removed15988088
Ref: 4cde15988088
Ref: library/removed removed-modules15988088
Ref: 4cdf15988088
Node: aifc — Lê e escreve arquivos AIFF e AIFC15989584
Ref: library/aifc doc15989757
Ref: 4ce015989757
Ref: library/aifc aifc-read-and-write-aiff-and-aifc-files15989757
Ref: 4ce115989757
Ref: library/aifc module-aifc15989757
Ref: 515989757
Ref: aifc — Lê e escreve arquivos AIFF e AIFC-Footnote-115990236
Ref: aifc — Lê e escreve arquivos AIFF e AIFC-Footnote-215990278
Node: asynchat — Manipulador de comando/resposta de socket assíncrono15990333
Ref: library/asynchat doc15990561
Ref: 4ce215990561
Ref: library/asynchat asynchat-asynchronous-socket-command-response-handler15990561
Ref: 4ce315990561
Ref: library/asynchat module-asynchat15990561
Ref: a15990561
Ref: library/asynchat no-color15990561
Ref: 4ce415990561
Ref: asynchat — Manipulador de comando/resposta de socket assíncrono-Footnote-115991158
Ref: asynchat — Manipulador de comando/resposta de socket assíncrono-Footnote-215991200
Node: asyncore — Manipulador de socket assíncrono15991259
Ref: library/asyncore doc15991492
Ref: 4ce515991492
Ref: library/asyncore asyncore-asynchronous-socket-handler15991492
Ref: 4ce615991492
Ref: library/asyncore module-asyncore15991492
Ref: c15991492
Ref: library/asyncore no-color15991492
Ref: 4ce715991492
Ref: asyncore — Manipulador de socket assíncrono-Footnote-115992049
Ref: asyncore — Manipulador de socket assíncrono-Footnote-215992091
Node: audioop — Manipulando dados de áudio original15992150
Ref: library/audioop doc15992359
Ref: 4ce815992359
Ref: library/audioop audioop-manipulate-raw-audio-data15992359
Ref: 4ce915992359
Ref: library/audioop module-audioop15992359
Ref: e15992359
Ref: library/audioop no-color15992359
Ref: 4cea15992359
Ref: audioop — Manipulando dados de áudio original-Footnote-115992851
Ref: audioop — Manipulando dados de áudio original-Footnote-215992893
Node: cgi — Suporte a Common Gateway Interface15992951
Ref: library/cgi doc15993168
Ref: 4ceb15993168
Ref: library/cgi cgi-common-gateway-interface-support15993168
Ref: 4cec15993168
Ref: library/cgi module-cgi15993168
Ref: 1615993168
Ref: library/cgi no-color15993168
Ref: 4ced15993168
Ref: cgi — Suporte a Common Gateway Interface-Footnote-115993811
Ref: cgi — Suporte a Common Gateway Interface-Footnote-215993853
Ref: cgi — Suporte a Common Gateway Interface-Footnote-315993898
Node: cgitb — Gerenciador de traceback para scripts de CGI15993952
Ref: library/cgitb doc15994154
Ref: 4cee15994154
Ref: library/cgitb cgitb-traceback-manager-for-cgi-scripts15994154
Ref: 4cef15994154
Ref: library/cgitb module-cgitb15994154
Ref: 1715994154
Ref: library/cgitb no-color15994154
Ref: 4cf015994154
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-115994830
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-215994872
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-315994917
Node: chunk — Lê dados em blocos IFF15994973
Ref: library/chunk doc15995178
Ref: 4cf115995178
Ref: library/chunk chunk-read-iff-chunked-data15995178
Ref: 4cf215995178
Ref: library/chunk module-chunk15995178
Ref: 1815995178
Ref: library/chunk no-color15995178
Ref: 4cf315995178
Ref: chunk — Lê dados em blocos IFF-Footnote-115995638
Ref: chunk — Lê dados em blocos IFF-Footnote-215995680
Node: crypt — Função para verificar senhas Unix15995736
Ref: library/crypt doc15995947
Ref: 4cf415995947
Ref: library/crypt crypt-function-to-check-unix-passwords15995947
Ref: 4cf515995947
Ref: library/crypt module-crypt15995947
Ref: 2c15995947
Ref: library/crypt no-color15995947
Ref: 4cf615995947
Ref: crypt — Função para verificar senhas Unix-Footnote-115996685
Ref: crypt — Função para verificar senhas Unix-Footnote-215996727
Ref: crypt — Função para verificar senhas Unix-Footnote-315996773
Ref: crypt — Função para verificar senhas Unix-Footnote-415996814
Ref: crypt — Função para verificar senhas Unix-Footnote-515996860
Node: distutils — Criação e instalação de módulos do Python15996916
Ref: library/distutils doc15997135
Ref: 4cf715997135
Ref: library/distutils distutils-building-and-installing-python-modules15997135
Ref: 4cf815997135
Ref: library/distutils module-distutils15997135
Ref: 3d15997135
Ref: library/distutils no-color15997135
Ref: 4cf915997135
Ref: distutils — Criação e instalação de módulos do Python-Footnote-115997690
Ref: distutils — Criação e instalação de módulos do Python-Footnote-215997732
Ref: distutils — Criação e instalação de módulos do Python-Footnote-315997791
Node: imghdr — Determina o tipo de uma imagem15997851
Ref: library/imghdr doc15998079
Ref: 4cfa15998079
Ref: library/imghdr imghdr-determine-the-type-of-an-image15998079
Ref: 4cfb15998079
Ref: library/imghdr module-imghdr15998079
Ref: 7915998079
Ref: library/imghdr no-color15998079
Ref: 4cfc15998079
Ref: imghdr — Determina o tipo de uma imagem-Footnote-115998744
Ref: imghdr — Determina o tipo de uma imagem-Footnote-215998786
Ref: imghdr — Determina o tipo de uma imagem-Footnote-315998829
Ref: imghdr — Determina o tipo de uma imagem-Footnote-415998873
Ref: imghdr — Determina o tipo de uma imagem-Footnote-515998920
Node: imp — Acessa os componentes internos de importação15998977
Ref: library/imp doc15999189
Ref: 4cfd15999189
Ref: library/imp imp-access-the-import-internals15999189
Ref: 4cfe15999189
Ref: library/imp module-imp15999189
Ref: 7a15999189
Ref: library/imp no-color15999189
Ref: 4cff15999189
Ref: imp — Acessa os componentes internos de importação-Footnote-115999760
Node: mailcap — Manipulação de arquivo Mailcap15999814
Ref: library/mailcap doc16000041
Ref: 4d0016000041
Ref: library/mailcap mailcap-mailcap-file-handling16000041
Ref: 4d0116000041
Ref: library/mailcap module-mailcap16000041
Ref: 9016000041
Ref: library/mailcap no-color16000041
Ref: 4d0216000041
Ref: mailcap — Manipulação de arquivo Mailcap-Footnote-116000526
Ref: mailcap — Manipulação de arquivo Mailcap-Footnote-216000568
Node: msilib — Lê e escreve arquivos do Microsoft Installer16000626
Ref: library/msilib doc16000845
Ref: 4d0316000845
Ref: library/msilib module-msilib16000845
Ref: 9616000845
Ref: library/msilib msilib-read-and-write-microsoft-installer-files16000845
Ref: 4d0416000845
Ref: library/msilib no-color16000845
Ref: 4d0516000845
Ref: msilib — Lê e escreve arquivos do Microsoft Installer-Footnote-116001354
Ref: msilib — Lê e escreve arquivos do Microsoft Installer-Footnote-216001396
Node: nis — Interface para NIS da Sun Yellow Pages16001453
Ref: library/nis doc16001665
Ref: 4d0616001665
Ref: library/nis module-nis16001665
Ref: a016001665
Ref: library/nis nis-interface-to-suns-nis-yellow-pages16001665
Ref: 4d0716001665
Ref: library/nis no-color16001665
Ref: 4d0816001665
Ref: nis — Interface para NIS da Sun Yellow Pages-Footnote-116002156
Ref: nis — Interface para NIS da Sun Yellow Pages-Footnote-216002198
Node: nntplib — Cliente de protocolo NNTP16002252
Ref: library/nntplib doc16002476
Ref: 4d0916002476
Ref: library/nntplib module-nntplib16002476
Ref: a116002476
Ref: library/nntplib nntplib-nntp-protocol-client16002476
Ref: 4d0a16002476
Ref: library/nntplib no-color16002476
Ref: 4d0b16002476
Ref: nntplib — Cliente de protocolo NNTP-Footnote-116002949
Ref: nntplib — Cliente de protocolo NNTP-Footnote-216002991
Node: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS16003049
Ref: library/ossaudiodev doc16003270
Ref: 4d0c16003270
Ref: library/ossaudiodev module-ossaudiodev16003270
Ref: a716003270
Ref: library/ossaudiodev no-color16003270
Ref: 4d0d16003270
Ref: library/ossaudiodev ossaudiodev-access-to-oss-compatible-audio-devices16003270
Ref: 4d0e16003270
Ref: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS-Footnote-116003807
Ref: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS-Footnote-216003849
Node: pipes — Interface para pipelines do shell16003911
Ref: library/pipes doc16004119
Ref: 4d0f16004119
Ref: library/pipes module-pipes16004119
Ref: ad16004119
Ref: library/pipes no-color16004119
Ref: 4d1016004119
Ref: library/pipes pipes-interface-to-shell-pipelines16004119
Ref: 4d1116004119
Ref: pipes — Interface para pipelines do shell-Footnote-116004676
Ref: pipes — Interface para pipelines do shell-Footnote-216004718
Node: smtpd — Serviços SMTP16004774
Ref: library/smtpd doc16004960
Ref: 4d1216004960
Ref: library/smtpd module-smtpd16004960
Ref: ce16004960
Ref: library/smtpd no-color16004960
Ref: 4d1316004960
Ref: library/smtpd smtpd-smtp-server16004960
Ref: 4d1416004960
Ref: smtpd — Serviços SMTP-Footnote-116005553
Ref: smtpd — Serviços SMTP-Footnote-216005595
Ref: smtpd — Serviços SMTP-Footnote-316005638
Node: sndhdr — Determina o tipo de arquivos de som16005694
Ref: library/sndhdr doc16005879
Ref: 4d1516005879
Ref: library/sndhdr module-sndhdr16005879
Ref: d016005879
Ref: library/sndhdr no-color16005879
Ref: 4d1616005879
Ref: library/sndhdr sndhdr-determine-type-of-sound-file16005879
Ref: 4d1716005879
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-116006551
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-216006593
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-316006636
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-416006680
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-516006727
Node: spwd — O banco de dados de senhas shadow16006784
Ref: library/spwd doc16006987
Ref: 4d1816006987
Ref: library/spwd module-spwd16006987
Ref: d316006987
Ref: library/spwd no-color16006987
Ref: 4d1916006987
Ref: library/spwd spwd-the-shadow-password-database16006987
Ref: 4d1a16006987
Ref: spwd — O banco de dados de senhas shadow-Footnote-116007619
Ref: spwd — O banco de dados de senhas shadow-Footnote-216007661
Ref: spwd — O banco de dados de senhas shadow-Footnote-316007706
Node: sunau — Lê e escreve arquivos AU da Sun16007761
Ref: library/sunau doc16007946
Ref: 4d1b16007946
Ref: library/sunau module-sunau16007946
Ref: dd16007946
Ref: library/sunau no-color16007946
Ref: 4d1c16007946
Ref: library/sunau sunau-read-and-write-sun-au-files16007946
Ref: 4d1d16007946
Ref: sunau — Lê e escreve arquivos AU da Sun-Footnote-116008426
Ref: sunau — Lê e escreve arquivos AU da Sun-Footnote-216008468
Node: telnetlib — cliente Telnet16008524
Ref: library/telnetlib doc16008713
Ref: 4d1e16008713
Ref: library/telnetlib module-telnetlib16008713
Ref: e516008713
Ref: library/telnetlib no-color16008713
Ref: 4d1f16008713
Ref: library/telnetlib telnetlib-telnet-client16008713
Ref: 4d2016008713
Ref: telnetlib — cliente Telnet-Footnote-116009339
Ref: telnetlib — cliente Telnet-Footnote-216009381
Ref: telnetlib — cliente Telnet-Footnote-316009426
Ref: telnetlib — cliente Telnet-Footnote-416009469
Node: uu — Codifica e decodifica arquivos uuencode16009529
Ref: library/uu doc16009718
Ref: 4d2116009718
Ref: library/uu module-uu16009718
Ref: 11516009718
Ref: library/uu no-color16009718
Ref: 4d2216009718
Ref: library/uu uu-encode-and-decode-uuencode-files16009718
Ref: 4d2316009718
Ref: uu — Codifica e decodifica arquivos uuencode-Footnote-116010204
Ref: uu — Codifica e decodifica arquivos uuencode-Footnote-216010246
Node: xdrlib — Codifica e decodifica dados XDR16010299
Ref: library/xdrlib doc16010451
Ref: 4d2416010451
Ref: library/xdrlib module-xdrlib16010451
Ref: 12516010451
Ref: library/xdrlib no-color16010451
Ref: 4d2516010451
Ref: library/xdrlib xdrlib-encode-and-decode-xdr-data16010451
Ref: 4d2616010451
Ref: library/security_warnings security-warnings16010897
Ref: 4d2716010897
Ref: xdrlib — Codifica e decodifica dados XDR-Footnote-116010933
Ref: xdrlib — Codifica e decodifica dados XDR-Footnote-216010975
Node: Considerações de segurança<4>16011032
Ref: library/security_warnings doc16011158
Ref: 4d2816011158
Ref: library/security_warnings no-color16011158
Ref: 4d2916011158
Ref: library/security_warnings security-considerations16011158
Ref: 4d2a16011158
Ref: Considerações de segurança<4>-Footnote-116013141
Node: Estendendo e incorporando o interpretador Python16013200
Ref: extending/index doc16013373
Ref: 4d2b16013373
Ref: extending/index extending-and-embedding-the-python-interpreter16013373
Ref: 4d2c16013373
Ref: extending/index extending-index16013373
Ref: 1e7216013373
Ref: extending/index no-color16013373
Ref: 4d2d16013373
Node: Ferramentas de terceiros recomendadas16014897
Ref: extending/index recommended-third-party-tools16015075
Ref: 4d2e16015075
Node: Criando extensões sem ferramentas de terceiros16015443
Ref: extending/index creating-extensions-without-third-party-tools16015700
Ref: 4d3016015700
Ref: Criando extensões sem ferramentas de terceiros-Footnote-116016467
Node: Estendendo Python com C ou C++16016509
Ref: extending/extending doc16016669
Ref: 4d3116016669
Ref: extending/extending extending-intro16016669
Ref: 4d3216016669
Ref: extending/extending extending-python-with-c-or-c16016669
Ref: 4d3316016669
Ref: Estendendo Python com C ou C++-Footnote-116018891
Node: Um Exemplo Simples16018928
Ref: extending/extending a-simple-example16019051
Ref: 4d3416019051
Ref: extending/extending extending-simpleexample16019051
Ref: 4d3516019051
Ref: Um Exemplo Simples-Footnote-116023708
Node: Intermezzo erros e exceções16023849
Ref: extending/extending extending-errors16024000
Ref: 4d3616024000
Ref: extending/extending intermezzo-errors-and-exceptions16024000
Ref: 4d3716024000
Node: De volta ao exemplo16032094
Ref: extending/extending back-to-the-example16032290
Ref: 4d3e16032290
Ref: extending/extending backtoexample16032290
Ref: 4d3f16032290
Node: A tabela de métodos e a função de inicialização do módulo16033946
Ref: extending/extending methodtable16034140
Ref: 4d4116034140
Ref: extending/extending the-module-s-method-table-and-initialization-function16034140
Ref: 4d4216034140
Node: Compilação e vinculação16039157
Ref: extending/extending compilation16039362
Ref: 4d4616039362
Ref: extending/extending compilation-and-linkage16039362
Ref: 4d4716039362
Node: Chamando funções Python de C16040887
Ref: extending/extending calling-python-functions-from-c16041076
Ref: 4d4916041076
Ref: extending/extending callingpython16041076
Ref: 4d4a16041076
Node: Extraindo parâmetros em funções de extensão16047877
Ref: extending/extending extracting-parameters-in-extension-functions16048087
Ref: 4d4e16048087
Ref: extending/extending parsetuple16048087
Ref: 4d4b16048087
Node: Parâmetros nomeados para funções de extensão16050790
Ref: extending/extending keyword-parameters-for-extension-functions16051002
Ref: 4d4f16051002
Ref: extending/extending parsetupleandkeywords16051002
Ref: 4d5016051002
Node: Construindo valores arbitrários16053731
Ref: extending/extending building-arbitrary-values16053921
Ref: 4d5116053921
Ref: extending/extending buildvalue16053921
Ref: 4d5216053921
Node: Contagens de referências16056020
Ref: extending/extending refcounts16056190
Ref: 4d4c16056190
Ref: extending/extending reference-counts16056190
Ref: 4d5316056190
Node: Contagem de referências no Python16060914
Ref: extending/extending refcountsinpython16061040
Ref: 4d5416061040
Ref: extending/extending reference-counting-in-python16061040
Ref: 4d5516061040
Ref: Contagem de referências no Python-Footnote-116063428
Ref: Contagem de referências no Python-Footnote-216063574
Node: Regras de propriedade16063745
Ref: extending/extending ownership-rules16063889
Ref: 4d5616063889
Ref: extending/extending ownershiprules16063889
Ref: 4d5716063889
Node: Gelo fino16066391
Ref: extending/extending thin-ice16066515
Ref: 4d5b16066515
Ref: extending/extending thinice16066515
Ref: 4d5c16066515
Ref: Gelo fino-Footnote-116070265
Node: Ponteiros NULL16070307
Ref: extending/extending null-pointers16070401
Ref: 4d5f16070401
Ref: extending/extending nullpointers16070401
Ref: 4d6016070401
Ref: Ponteiros NULL-Footnote-116072028
Node: Escrevendo extensões em C++16072165
Ref: extending/extending cplusplus16072352
Ref: 4d6116072352
Ref: extending/extending writing-extensions-in-c16072352
Ref: 4d6216072352
Node: Fornecendo uma API C para um módulo de extensão16073158
Ref: extending/extending providing-a-c-api-for-an-extension-module16073311
Ref: 4d6316073311
Ref: extending/extending using-capsules16073311
Ref: 154f16073311
Node: Definindo Tipos de Extensão Tutorial16082240
Ref: extending/newtypes_tutorial doc16082449
Ref: 1ace16082449
Ref: extending/newtypes_tutorial defining-extension-types-tutorial16082449
Ref: 4d6516082449
Ref: extending/newtypes_tutorial defining-new-types16082449
Ref: 4d6616082449
Ref: extending/newtypes_tutorial no-color16082449
Ref: 4d6716082449
Node: O básico<2>16083162
Ref: extending/newtypes_tutorial dnt-basics16083304
Ref: 4d6816083304
Ref: extending/newtypes_tutorial the-basics16083304
Ref: 4d6916083304
Node: Adicionando dados e métodos ao exemplo básico16092855
Ref: extending/newtypes_tutorial adding-data-and-methods-to-the-basic-example16093063
Ref: 4d6f16093063
Ref: Adicionando dados e métodos ao exemplo básico-Footnote-116110250
Ref: Adicionando dados e métodos ao exemplo básico-Footnote-216110351
Node: Fornecendo controle mais preciso sobre atributos de dados16110488
Ref: extending/newtypes_tutorial providing-finer-control-over-data-attributes16110718
Ref: 4d7716110718
Ref: Fornecendo controle mais preciso sobre atributos de dados-Footnote-116120876
Node: Apoiando a coleta de lixo cíclica16121317
Ref: extending/newtypes_tutorial supporting-cyclic-garbage-collection16121534
Ref: 4d7916121534
Ref: Apoiando a coleta de lixo cíclica-Footnote-116132499
Node: Criando subclasses de outros tipos16132700
Ref: extending/newtypes_tutorial subclassing-other-types16132851
Ref: 4d7b16132851
Node: Defining Extension Types Assorted Topics16138213
Ref: extending/newtypes doc16138422
Ref: 4d7e16138422
Ref: extending/newtypes defining-extension-types-assorted-topics16138422
Ref: 4d7f16138422
Ref: extending/newtypes new-types-topics16138422
Ref: 4d8016138422
Ref: extending/newtypes no-color16138422
Ref: 4d8116138422
Ref: extending/newtypes dnt-type-methods16138519
Ref: 4d8216138519
Node: Finalization and De-allocation16143750
Ref: extending/newtypes finalization-and-de-allocation16143885
Ref: 4d8316143885
Ref: Finalization and De-allocation-Footnote-116147494
Node: Object Presentation16147536
Ref: extending/newtypes object-presentation16147700
Ref: 4d8516147700
Node: Attribute Management16149457
Ref: extending/newtypes attribute-management16149608
Ref: 4d8816149608
Node: Generic Attribute Management16151157
Ref: extending/newtypes generic-attribute-management16151285
Ref: 4d7416151285
Ref: extending/newtypes id116151285
Ref: 4d8916151285
Node: Type-specific Attribute Management16154857
Ref: extending/newtypes type-specific-attribute-management16154985
Ref: 4d8e16154985
Node: Object Comparison16156790
Ref: extending/newtypes object-comparison16156947
Ref: 4d9116156947
Node: Abstract Protocol Support16158817
Ref: extending/newtypes abstract-protocol-support16158976
Ref: 4d9416158976
Node: Weak Reference Support16164798
Ref: extending/newtypes weak-reference-support16164956
Ref: 4d9916164956
Ref: extending/newtypes weakref-support16164956
Ref: 286a16164956
Node: More Suggestions16166213
Ref: extending/newtypes more-suggestions16166337
Ref: 4d9a16166337
Node: Construindo extensões C e C++16167311
Ref: extending/building doc16167524
Ref: 4d9b16167524
Ref: extending/building building16167524
Ref: 4d4816167524
Ref: extending/building building-c-and-c-extensions16167524
Ref: 4d9c16167524
Ref: extending/building no-color16167524
Ref: 4d9d16167524
Ref: extending/building install-index16167840
Ref: 10ef16167840
Node: Construindo extensões C e C ++ com setuptools16167902
Ref: extending/building building-c-and-c-extensions-with-setuptools16168015
Ref: 4d9f16168015
Ref: extending/building setuptools-index16168015
Ref: 10f016168015
Node: Construindo Extensões C e C++ no Windows16168578
Ref: extending/windows doc16168742
Ref: 4da016168742
Ref: extending/windows building-c-and-c-extensions-on-windows16168742
Ref: 4da116168742
Ref: extending/windows building-on-windows16168742
Ref: 20cf16168742
Ref: extending/windows no-color16168742
Ref: 4da216168742
Node: Uma abordagem de livro de receitas16170111
Ref: extending/windows a-cookbook-approach16170268
Ref: 4da316170268
Ref: extending/windows win-cookbook16170268
Ref: 4da416170268
Ref: Uma abordagem de livro de receitas-Footnote-116170999
Node: Diferenças entre o Unix e o Windows16171077
Ref: extending/windows differences-between-unix-and-windows16171266
Ref: 4da516171266
Ref: extending/windows dynamic-linking16171266
Ref: 4da616171266
Ref: extending/windows c Py_NO_LINK_LIB16174581
Ref: 44116174581
Node: Usando DLLs na prática16174798
Ref: extending/windows using-dlls-in-practice16174944
Ref: 4da716174944
Ref: extending/windows win-dlls16174944
Ref: 4da816174944
Node: Incorporando o tempo de execução do CPython em uma aplicação maior16177867
Ref: extending/index embedding-the-cpython-runtime-in-a-larger-application16178078
Ref: 4daa16178078
Node: Incorporando o Python numa Outra Aplicação16178568
Ref: extending/embedding doc16178719
Ref: 4dab16178719
Ref: extending/embedding embedding16178719
Ref: 210616178719
Ref: extending/embedding embedding-python-in-another-application16178719
Ref: 4dac16178719
Node: Very High Level Embedding16181175
Ref: extending/embedding high-level-embedding16181334
Ref: 4daf16181334
Ref: extending/embedding very-high-level-embedding16181334
Ref: 4db016181334
Node: Beyond Very High Level Embedding An overview16183664
Ref: extending/embedding beyond-very-high-level-embedding-an-overview16183846
Ref: 4db116183846
Ref: extending/embedding lower-level-embedding16183846
Ref: 4db216183846
Node: Pure Embedding16185565
Ref: extending/embedding id116185747
Ref: 4db316185747
Ref: extending/embedding pure-embedding16185747
Ref: 4db416185747
Node: Extending Embedded Python16190372
Ref: extending/embedding extending-embedded-python16190533
Ref: 4db616190533
Ref: extending/embedding extending-with-embedding16190533
Ref: 4db716190533
Node: Embedding Python in C++16192568
Ref: extending/embedding embedding-python-in-c16192760
Ref: 4db816192760
Ref: extending/embedding embeddingincplusplus16192760
Ref: 4db916192760
Node: Compiling and Linking under Unix-like systems16193132
Ref: extending/embedding compiling16193290
Ref: 4db516193290
Ref: extending/embedding compiling-and-linking-under-unix-like-systems16193290
Ref: 4dba16193290
Node: Manual de referência da API Python/C16195487
Ref: c-api/index doc16195656
Ref: 4dbc16195656
Ref: c-api/index c-api-index16195656
Ref: 1e7316195656
Ref: c-api/index no-color16195656
Ref: 4dbd16195656
Ref: c-api/index python-c-api-reference-manual16195656
Ref: 4dbe16195656
Node: Introdução<14>16196649
Ref: c-api/intro doc16196769
Ref: 4dbf16196769
Ref: c-api/intro api-intro16196769
Ref: 4dc016196769
Ref: c-api/intro introduction16196769
Ref: 4dc116196769
Node: Compatibilidade com a versão da linguagem16198671
Ref: c-api/intro language-version-compatibility16198800
Ref: 4dc216198800
Node: Padrões de codificação16199132
Ref: c-api/intro coding-standards16199291
Ref: 4dc316199291
Ref: Padrões de codificação-Footnote-116199794
Node: Arquivos de inclusão16199836
Ref: c-api/intro api-includes16199966
Ref: 97c16199966
Ref: c-api/intro include-files16199966
Ref: 4dc416199966
Node: Macros úteis16202785
Ref: c-api/intro useful-macros16202931
Ref: 4dc516202931
Ref: c-api/intro c Py_ABS16203280
Ref: 4dc616203280
Ref: c-api/intro c Py_ALWAYS_INLINE16203381
Ref: 1b5a16203381
Ref: c-api/intro c Py_CHARMASK16204514
Ref: 4dc716204514
Ref: c-api/intro c Py_DEPRECATED16204720
Ref: c8e16204720
Ref: c-api/intro c Py_GETENV16205012
Ref: 4dc816205012
Ref: c-api/intro c Py_MAX16205206
Ref: 4dc916205206
Ref: c-api/intro c Py_MEMBER_SIZE16205322
Ref: 4dca16205322
Ref: c-api/intro c Py_MIN16205479
Ref: 4dcb16205479
Ref: c-api/intro c Py_NO_INLINE16205595
Ref: 177416205595
Ref: c-api/intro c Py_STRINGIFY16205948
Ref: 4dcc16205948
Ref: c-api/intro c Py_UNREACHABLE16206117
Ref: da216206117
Ref: c-api/intro c Py_UNUSED16207395
Ref: 19c916207395
Ref: c-api/intro c PyDoc_STRVAR16207644
Ref: 1c1216207644
Ref: c-api/intro c PyDoc_STR16208266
Ref: 1aad16208266
Ref: Macros úteis-Footnote-116208860
Ref: Macros úteis-Footnote-216208925
Ref: Macros úteis-Footnote-316208967
Node: Objetos tipos e contagens de referências16209009
Ref: c-api/intro api-objects16209148
Ref: 4dcd16209148
Ref: c-api/intro objects-types-and-reference-counts16209148
Ref: 4dce16209148
Node: Contagens de referências<2>16210723
Ref: c-api/intro api-refcounts16210846
Ref: 4dcf16210846
Ref: c-api/intro reference-counts16210846
Ref: 4dd016210846
Node: Detalhes da contagem de referências16215150
Ref: c-api/intro api-refcountdetails16215251
Ref: 4dd116215251
Ref: c-api/intro reference-count-details16215251
Ref: 4dd216215251
Node: Tipos<2>16222952
Ref: c-api/intro api-types16223075
Ref: 4dd616223075
Ref: c-api/intro types16223075
Ref: 4dd716223075
Ref: c-api/intro c Py_ssize_t16223573
Ref: c4916223573
Ref: Tipos<2>-Footnote-116223978
Node: Exceções<24>16224020
Ref: c-api/intro api-exceptions16224168
Ref: 4dd816224168
Ref: c-api/intro exceptions16224168
Ref: 4dd916224168
Node: Incorporando Python<2>16230805
Ref: c-api/intro api-embedding16230940
Ref: 4ddb16230940
Ref: c-api/intro embedding-python16230940
Ref: 4ddc16230940
Node: Compilações de depuração16234408
Ref: c-api/intro api-debugging16234569
Ref: 4dde16234569
Ref: c-api/intro debugging-builds16234569
Ref: 4ddf16234569
Ref: c-api/intro c Py_DEBUG16235379
Ref: 179c16235379
Node: Ferramentas de terceiros recomendadas<2>16236637
Ref: c-api/intro c-api-tools16236767
Ref: 4d2f16236767
Ref: c-api/intro recommended-third-party-tools16236767
Ref: 4de016236767
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-116238397
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-216238425
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-316238461
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-416238493
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-516238536
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-616238570
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-716238611
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-816238636
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-916238665
Node: Estabilidade da API C16238738
Ref: c-api/stable doc16238896
Ref: 4de116238896
Ref: c-api/stable c-api-stability16238896
Ref: 4de216238896
Ref: c-api/stable no-color16238896
Ref: 4de316238896
Ref: c-api/stable stable16238896
Ref: 76a16238896
Ref: Estabilidade da API C-Footnote-116240720
Ref: Estabilidade da API C-Footnote-216240762
Node: API C Instável16240817
Ref: c-api/stable id116240941
Ref: 4de516240941
Ref: c-api/stable unstable-c-api16240941
Ref: 75e16240941
Node: Interface Binária de Aplicação Estável16241520
Ref: c-api/stable id216241682
Ref: 4de616241682
Ref: c-api/stable stable-application-binary-interface16241682
Ref: 4da916241682
Node: API C Limitada16242079
Ref: c-api/stable id316242193
Ref: 4de716242193
Ref: c-api/stable limited-c-api16242193
Ref: 62b16242193
Ref: c-api/stable c Py_LIMITED_API16242501
Ref: 65416242501
Node: ABI Estável16243435
Ref: c-api/stable id416243593
Ref: 4de816243593
Ref: c-api/stable stable-abi16243593
Ref: 4de916243593
Ref: ABI Estável-Footnote-116245241
Node: Escopo e Desempenho da API Limitada16245283
Ref: c-api/stable limited-api-scope-and-performance16245455
Ref: 4dea16245455
Node: Limitações da API Limitada16246731
Ref: c-api/stable limited-api-caveats16246882
Ref: 4dec16246882
Node: Considerações da plataforma16248736
Ref: c-api/stable platform-considerations16248908
Ref: 4ded16248908
Ref: c-api/stable stable-abi-platform16248908
Ref: 4de416248908
Node: Conteúdo da API Limitada16249638
Ref: c-api/stable contents-of-limited-api16249759
Ref: 4dee16249759
Ref: c-api/stable limited-api-list16249759
Ref: 99216249759
Node: A camada de nível muito alto16286714
Ref: c-api/veryhigh doc16286880
Ref: 4f9616286880
Ref: c-api/veryhigh no-color16286880
Ref: 4f9716286880
Ref: c-api/veryhigh the-very-high-level-layer16286880
Ref: 4f9816286880
Ref: c-api/veryhigh veryhigh16286880
Ref: 4f9916286880
Ref: c-api/veryhigh c PyRun_AnyFile16287990
Ref: 4f9d16287990
Ref: c-api/veryhigh c PyRun_AnyFileFlags16288235
Ref: 4f9f16288235
Ref: c-api/veryhigh c PyRun_AnyFileEx16288496
Ref: 4fa016288496
Ref: c-api/veryhigh c PyRun_AnyFileExFlags16288744
Ref: 4f9e16288744
Ref: c-api/veryhigh c PyRun_SimpleString16289468
Ref: 4dad16289468
Ref: c-api/veryhigh c PyRun_SimpleStringFlags16289709
Ref: 4fa216289709
Ref: c-api/veryhigh c PyRun_SimpleFile16290413
Ref: 4dae16290413
Ref: c-api/veryhigh c PyRun_SimpleFileEx16290664
Ref: 4fa316290664
Ref: c-api/veryhigh c PyRun_SimpleFileExFlags16290908
Ref: 1bab16290908
Ref: c-api/veryhigh c PyRun_InteractiveOne16291678
Ref: 4fa416291678
Ref: c-api/veryhigh c PyRun_InteractiveOneFlags16291901
Ref: 4fa516291901
Ref: c-api/veryhigh c PyRun_InteractiveLoop16292712
Ref: 4fa116292712
Ref: c-api/veryhigh c PyRun_InteractiveLoopFlags16292937
Ref: 4fa616292937
Ref: c-api/veryhigh c PyOS_InputHook16293428
Ref: 79916293428
Ref: c-api/veryhigh c PyOS_ReadlineFunctionPointer16294107
Ref: 79a16294107
Ref: c-api/veryhigh c PyRun_String16295295
Ref: 1c7716295295
Ref: c-api/veryhigh c PyRun_StringFlags16295598
Ref: 4fa716295598
Ref: c-api/veryhigh c PyRun_File16296406
Ref: 4fa816296406
Ref: c-api/veryhigh c PyRun_FileEx16296756
Ref: 4faa16296756
Ref: c-api/veryhigh c PyRun_FileFlags16297097
Ref: 4fab16297097
Ref: c-api/veryhigh c PyRun_FileExFlags16297451
Ref: 4fa916297451
Ref: c-api/veryhigh c Py_CompileString16298081
Ref: a7b16298081
Ref: c-api/veryhigh c Py_CompileStringFlags16298419
Ref: 4fac16298419
Ref: c-api/veryhigh c Py_CompileStringObject16298742
Ref: 4fae16298742
Ref: c-api/veryhigh c Py_CompileStringExFlags16300022
Ref: 4fad16300022
Ref: c-api/veryhigh c PyEval_EvalCode16300458
Ref: a7c16300458
Ref: c-api/veryhigh c PyEval_EvalCodeEx16300854
Ref: 1a1216300854
Ref: c-api/veryhigh c PyEval_EvalFrame16301617
Ref: 4e4216301617
Ref: c-api/veryhigh c PyEval_EvalFrameEx16301919
Ref: 122416301919
Ref: c-api/veryhigh c PyEval_MergeCompilerFlags16302747
Ref: 4faf16302747
Ref: c-api/veryhigh c Py_eval_input16302962
Ref: 4f9a16302962
Ref: c-api/veryhigh c Py_file_input16303120
Ref: 4f9b16303120
Ref: c-api/veryhigh c Py_single_input16303430
Ref: 4f9c16303430
Ref: c-api/veryhigh c PyCompilerFlags16303669
Ref: c8b16303669
Ref: c-api/veryhigh c PyCompilerFlags cf_flags16304265
Ref: 4fb016304265
Ref: c-api/veryhigh c PyCompilerFlags cf_feature_version16304338
Ref: 4fb116304338
Ref: c-api/veryhigh c PyCF_ALLOW_TOP_LEVEL_AWAIT16304835
Ref: 4fb216304835
Ref: c-api/veryhigh c PyCF_ONLY_AST16304880
Ref: 4fb316304880
Ref: c-api/veryhigh c PyCF_OPTIMIZED_AST16304912
Ref: 4fb416304912
Ref: c-api/veryhigh c PyCF_TYPE_COMMENTS16304949
Ref: 4fb516304949
Node: Contagem de referências16305506
Ref: c-api/refcounting doc16305675
Ref: 4fb816305675
Ref: c-api/refcounting countingrefs16305675
Ref: 4fb916305675
Ref: c-api/refcounting no-color16305675
Ref: 4fba16305675
Ref: c-api/refcounting reference-counting16305675
Ref: 4fbb16305675
Ref: c-api/refcounting c Py_REFCNT16305850
Ref: 2ce16305850
Ref: c-api/refcounting c Py_SET_REFCNT16307122
Ref: a9e16307122
Ref: c-api/refcounting c Py_INCREF16307607
Ref: 78416307607
Ref: c-api/refcounting c Py_XINCREF16308528
Ref: c4e16308528
Ref: c-api/refcounting c Py_NewRef16308739
Ref: a9016308739
Ref: c-api/refcounting c Py_XNewRef16309456
Ref: a9116309456
Ref: c-api/refcounting c Py_DECREF16309772
Ref: 78516309772
Ref: c-api/refcounting c Py_XDECREF16311402
Ref: 98716311402
Ref: c-api/refcounting c Py_CLEAR16311641
Ref: 78d16311641
Ref: c-api/refcounting c Py_IncRef16312473
Ref: 4f7216312473
Ref: c-api/refcounting c Py_DecRef16312748
Ref: 4f6b16312748
Ref: c-api/refcounting c Py_SETREF16313011
Ref: 78e16313011
Ref: c-api/refcounting c Py_XSETREF16313773
Ref: 78f16313773
Ref: Contagem de referências-Footnote-116314155
Ref: Contagem de referências-Footnote-216314197
Node: Tratamento de Exceções16314239
Ref: c-api/exceptions doc16314410
Ref: 4fbc16314410
Ref: c-api/exceptions exception-handling16314410
Ref: 4fbd16314410
Ref: c-api/exceptions exceptionhandling16314410
Ref: 481516314410
Ref: c-api/exceptions no-color16314410
Ref: 4fbe16314410
Node: Impressão e limpeza16316846
Ref: c-api/exceptions printing-and-clearing16316956
Ref: 4fbf16316956
Ref: c-api/exceptions c PyErr_Clear16317010
Ref: 122716317010
Ref: c-api/exceptions c PyErr_PrintEx16317190
Ref: 4e3616317190
Ref: c-api/exceptions c PyErr_Print16318162
Ref: 1be816318162
Ref: c-api/exceptions c PyErr_WriteUnraisable16318284
Ref: 5e616318284
Ref: c-api/exceptions c PyErr_FormatUnraisable16319321
Ref: 5e516319321
Ref: c-api/exceptions c PyErr_DisplayException16319840
Ref: 43216319840
Node: Lançando exceções16320121
Ref: c-api/exceptions raising-exceptions16320262
Ref: 4fc016320262
Ref: c-api/exceptions c PyErr_SetString16320501
Ref: 79116320501
Ref: c-api/exceptions c PyErr_SetObject16321015
Ref: 79016321015
Ref: c-api/exceptions c PyErr_Format16321281
Ref: 10a716321281
Ref: c-api/exceptions c PyErr_FormatV16321784
Ref: 10a616321784
Ref: c-api/exceptions c PyErr_SetNone16322164
Ref: 4e3e16322164
Ref: c-api/exceptions c PyErr_BadArgument16322333
Ref: 4e3316322333
Ref: c-api/exceptions c PyErr_NoMemory16322628
Ref: 4d3a16322628
Ref: c-api/exceptions c PyErr_SetFromErrno16322987
Ref: 4d3916322987
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilenameObject16323915
Ref: 4e3a16323915
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilenameObjects16324448
Ref: 4e3b16324448
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilename16324927
Ref: 19c416324927
Ref: c-api/exceptions c PyErr_SetFromWindowsErr16325318
Ref: 4e3c16325318
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErr16326230
Ref: 4e3716326230
Ref: c-api/exceptions c PyErr_SetFromWindowsErrWithFilename16326620
Ref: 19c616326620
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilenameObject16327256
Ref: 4e3816327256
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilenameObjects16327854
Ref: 4e3916327854
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilename16328336
Ref: 19c516328336
Ref: c-api/exceptions c PyErr_SetImportError16328785
Ref: f2d16328785
Ref: c-api/exceptions c PyErr_SetImportErrorSubclass16329323
Ref: f0616329323
Ref: c-api/exceptions c PyErr_SyntaxLocationObject16329780
Ref: 4fc116329780
Ref: c-api/exceptions c PyErr_SyntaxLocationEx16330195
Ref: 4e4016330195
Ref: c-api/exceptions c PyErr_SyntaxLocation16330554
Ref: 4e3f16330554
Ref: c-api/exceptions c PyErr_BadInternalCall16330781
Ref: 4e3416330781
Node: Emitindo advertências16331121
Ref: c-api/exceptions issuing-warnings16331273
Ref: 4fc216331273
Ref: c-api/exceptions c PyErr_WarnEx16332180
Ref: 163b16332180
Ref: c-api/exceptions c PyErr_WarnExplicitObject16333383
Ref: 4fc416333383
Ref: c-api/exceptions c PyErr_WarnExplicit16333932
Ref: 19cc16333932
Ref: c-api/exceptions c PyErr_WarnFormat16334364
Ref: 4e4116334364
Ref: c-api/exceptions c PyErr_ResourceWarning16334728
Ref: f0716334728
Node: Consultando o indicador de erro16335116
Ref: c-api/exceptions querying-the-error-indicator16335270
Ref: 4fc516335270
Ref: c-api/exceptions c PyErr_Occurred16335347
Ref: 1b9416335347
Ref: c-api/exceptions c PyErr_ExceptionMatches16336259
Ref: 4dda16336259
Ref: c-api/exceptions c PyErr_GivenExceptionMatches16336582
Ref: 4e3516336582
Ref: c-api/exceptions c PyErr_GetRaisedException16337018
Ref: 42616337018
Ref: c-api/exceptions c PyErr_SetRaisedException16337877
Ref: 42916337877
Ref: c-api/exceptions c PyErr_Fetch16338247
Ref: 42516338247
Ref: c-api/exceptions c PyErr_Restore16339311
Ref: 42816339311
Ref: c-api/exceptions c PyErr_NormalizeException16340481
Ref: 42716340481
Ref: c-api/exceptions c PyErr_GetHandledException16341548
Ref: 96816341548
Ref: c-api/exceptions c PyErr_SetHandledException16342359
Ref: 96916342359
Ref: c-api/exceptions c PyErr_GetExcInfo16343038
Ref: 96b16343038
Ref: c-api/exceptions c PyErr_SetExcInfo16344013
Ref: 96a16344013
Node: Tratamento de sinal<2>16345197
Ref: c-api/exceptions signal-handling16345349
Ref: 4fc616345349
Ref: c-api/exceptions c PyErr_CheckSignals16345402
Ref: 68816345402
Ref: c-api/exceptions c PyErr_SetInterrupt16346661
Ref: 4e3d16346661
Ref: c-api/exceptions c PyErr_SetInterruptEx16347038
Ref: a9416347038
Ref: c-api/exceptions c PySignal_SetWakeupFd16348151
Ref: 15cc16348151
Node: Classes de exceção16348846
Ref: c-api/exceptions exception-classes16348983
Ref: 4fc716348983
Ref: c-api/exceptions c PyErr_NewException16349036
Ref: 146516349036
Ref: c-api/exceptions c PyErr_NewExceptionWithDoc16350045
Ref: 146416350045
Ref: c-api/exceptions c PyExceptionClass_Check16350516
Ref: 4fc816350516
Ref: c-api/exceptions c PyExceptionClass_Name16350680
Ref: c4f16350680
Node: Objeto Exceção16350872
Ref: c-api/exceptions exception-objects16351015
Ref: 4fc916351015
Ref: c-api/exceptions c PyException_GetTraceback16351060
Ref: 4e8816351060
Ref: c-api/exceptions c PyException_SetTraceback16351457
Ref: 1c8516351457
Ref: c-api/exceptions c PyException_GetContext16351717
Ref: 4e8716351717
Ref: c-api/exceptions c PyException_SetContext16352178
Ref: 4e8a16352178
Ref: c-api/exceptions c PyException_GetCause16352505
Ref: 4e8616352505
Ref: c-api/exceptions c PyException_SetCause16352896
Ref: 4e8916352896
Ref: c-api/exceptions c PyException_GetArgs16353357
Ref: 78016353357
Ref: c-api/exceptions c PyException_SetArgs16353584
Ref: 78116353584
Ref: c-api/exceptions c PyUnstable_Exc_PrepReraiseStar16353777
Ref: 4fca16353777
Node: Objetos de exceção Unicode16354723
Ref: c-api/exceptions unicode-exception-objects16354867
Ref: 4fcb16354867
Ref: c-api/exceptions unicodeexceptions16354867
Ref: 45e16354867
Ref: c-api/exceptions c PyUnicodeDecodeError_Create16355020
Ref: 4f2716355020
Ref: c-api/exceptions c PyUnicodeDecodeError_GetEncoding16355496
Ref: 4f2816355496
Ref: c-api/exceptions c PyUnicodeEncodeError_GetEncoding16355593
Ref: 4f3016355593
Ref: c-api/exceptions c PyUnicodeDecodeError_GetObject16355834
Ref: 4f2a16355834
Ref: c-api/exceptions c PyUnicodeEncodeError_GetObject16355929
Ref: 4f3116355929
Ref: c-api/exceptions c PyUnicodeTranslateError_GetObject16356024
Ref: 4f3816356024
Ref: c-api/exceptions c PyUnicodeDecodeError_GetStart16356263
Ref: 4f2c16356263
Ref: c-api/exceptions c PyUnicodeEncodeError_GetStart16356358
Ref: 185416356358
Ref: c-api/exceptions c PyUnicodeTranslateError_GetStart16356453
Ref: 4f3a16356453
Ref: c-api/exceptions c PyUnicodeDecodeError_SetStart16357011
Ref: 4f2f16357011
Ref: c-api/exceptions c PyUnicodeEncodeError_SetStart16357105
Ref: 4f3516357105
Ref: c-api/exceptions c PyUnicodeTranslateError_SetStart16357199
Ref: 4f3d16357199
Ref: c-api/exceptions c PyUnicodeDecodeError_GetEnd16357635
Ref: 4f2916357635
Ref: c-api/exceptions c PyUnicodeEncodeError_GetEnd16357726
Ref: 185116357726
Ref: c-api/exceptions c PyUnicodeTranslateError_GetEnd16357817
Ref: 4f3716357817
Ref: c-api/exceptions c PyUnicodeDecodeError_SetEnd16358313
Ref: 4f2d16358313
Ref: c-api/exceptions c PyUnicodeEncodeError_SetEnd16358403
Ref: 4f3316358403
Ref: c-api/exceptions c PyUnicodeTranslateError_SetEnd16358493
Ref: 4f3b16358493
Ref: c-api/exceptions c PyUnicodeDecodeError_GetReason16358823
Ref: 4f2b16358823
Ref: c-api/exceptions c PyUnicodeEncodeError_GetReason16358918
Ref: 4f3216358918
Ref: c-api/exceptions c PyUnicodeTranslateError_GetReason16359013
Ref: 4f3916359013
Ref: c-api/exceptions c PyUnicodeDecodeError_SetReason16359252
Ref: 4f2e16359252
Ref: c-api/exceptions c PyUnicodeEncodeError_SetReason16359349
Ref: 4f3416359349
Ref: c-api/exceptions c PyUnicodeTranslateError_SetReason16359446
Ref: 4f3c16359446
Node: Controle de recursão16359719
Ref: c-api/exceptions recursion16359874
Ref: 4fcc16359874
Ref: c-api/exceptions recursion-control16359874
Ref: 4fcd16359874
Ref: c-api/exceptions c Py_EnterRecursiveCall16360313
Ref: 3cf16360313
Ref: c-api/exceptions c Py_LeaveRecursiveCall16361021
Ref: b6116361021
Ref: c-api/exceptions c Py_ReprEnter16361734
Ref: 4f7416361734
Ref: c-api/exceptions c Py_ReprLeave16362552
Ref: 4f7516362552
Node: Exception and warning types16362790
Ref: c-api/exceptions exception-and-warning-types16362908
Ref: 4fce16362908
Ref: c-api/exceptions standardexceptions16362908
Ref: 4fcf16362908
Node: Exception types16363323
Ref: c-api/exceptions exception-types16363426
Ref: 4fd016363426
Ref: c-api/exceptions c PyExc_BaseException16363804
Ref: 4e4916363804
Ref: c-api/exceptions c PyExc_BaseExceptionGroup16363985
Ref: 4e4a16363985
Ref: c-api/exceptions c PyExc_Exception16364198
Ref: 4e5816364198
Ref: c-api/exceptions c PyExc_ArithmeticError16364375
Ref: 4e4616364375
Ref: c-api/exceptions c PyExc_AssertionError16364559
Ref: 4e4716364559
Ref: c-api/exceptions c PyExc_AttributeError16364741
Ref: 4e4816364741
Ref: c-api/exceptions c PyExc_BlockingIOError16364923
Ref: 4e4b16364923
Ref: c-api/exceptions c PyExc_BrokenPipeError16365132
Ref: 4e4c16365132
Ref: c-api/exceptions c PyExc_BufferError16365342
Ref: 4e4d16365342
Ref: c-api/exceptions c PyExc_ChildProcessError16365522
Ref: 4e4f16365522
Ref: c-api/exceptions c PyExc_ConnectionAbortedError16365734
Ref: 4e5016365734
Ref: c-api/exceptions c PyExc_ConnectionError16365951
Ref: 4e5116365951
Ref: c-api/exceptions c PyExc_ConnectionRefusedError16366161
Ref: 4e5216366161
Ref: c-api/exceptions c PyExc_ConnectionResetError16366378
Ref: 4e5316366378
Ref: c-api/exceptions c PyExc_EOFError16366609
Ref: 4e5516366609
Ref: c-api/exceptions c PyExc_FileExistsError16366729
Ref: 4e5916366729
Ref: c-api/exceptions c PyExc_FileNotFoundError16366939
Ref: 4e5a16366939
Ref: c-api/exceptions c PyExc_FloatingPointError16367150
Ref: 4e5b16367150
Ref: c-api/exceptions c PyExc_GeneratorExit16367337
Ref: 4e5d16367337
Ref: c-api/exceptions c PyExc_ImportError16367519
Ref: 4e5f16367519
Ref: c-api/exceptions c PyExc_IndentationError16367698
Ref: 4e6116367698
Ref: c-api/exceptions c PyExc_IndexError16367882
Ref: 4e6216367882
Ref: c-api/exceptions c PyExc_InterruptedError16368061
Ref: 4e6316368061
Ref: c-api/exceptions c PyExc_IsADirectoryError16368271
Ref: 4e6416368271
Ref: c-api/exceptions c PyExc_KeyError16368499
Ref: 4e6516368499
Ref: c-api/exceptions c PyExc_KeyboardInterrupt16368618
Ref: 4e6616368618
Ref: c-api/exceptions c PyExc_LookupError16368803
Ref: 4e6716368803
Ref: c-api/exceptions c PyExc_MemoryError16368983
Ref: 4e6816368983
Ref: c-api/exceptions c PyExc_ModuleNotFoundError16369163
Ref: 4e6916369163
Ref: c-api/exceptions c PyExc_NameError16369376
Ref: 4e6a16369376
Ref: c-api/exceptions c PyExc_NotADirectoryError16369553
Ref: 4e6b16369553
Ref: c-api/exceptions c PyExc_NotImplementedError16369766
Ref: 4e6c16369766
Ref: c-api/exceptions c PyExc_OSError16369968
Ref: 4d3c16369968
Ref: c-api/exceptions c PyExc_OverflowError16370087
Ref: 4e6d16370087
Ref: c-api/exceptions c PyExc_PermissionError16370268
Ref: 4e6f16370268
Ref: c-api/exceptions c PyExc_ProcessLookupError16370477
Ref: 4e7016370477
Ref: c-api/exceptions c PyExc_PythonFinalizationError16370690
Ref: 4fd116370690
Ref: c-api/exceptions c PyExc_RecursionError16370839
Ref: 10a816370839
Ref: c-api/exceptions c PyExc_ReferenceError16371047
Ref: 4e7116371047
Ref: c-api/exceptions c PyExc_RuntimeError16371230
Ref: 4e7316371230
Ref: c-api/exceptions c PyExc_StopAsyncIteration16371410
Ref: 4e7516371410
Ref: c-api/exceptions c PyExc_StopIteration16371623
Ref: 4e7616371623
Ref: c-api/exceptions c PyExc_SyntaxError16371804
Ref: 4e7716371804
Ref: c-api/exceptions c PyExc_SystemError16371983
Ref: 4e7916371983
Ref: c-api/exceptions c PyExc_SystemExit16372162
Ref: 4e7a16372162
Ref: c-api/exceptions c PyExc_TabError16372356
Ref: 4e7b16372356
Ref: c-api/exceptions c PyExc_TimeoutError16372475
Ref: 4e7c16372475
Ref: c-api/exceptions c PyExc_TypeError16372681
Ref: 4d3b16372681
Ref: c-api/exceptions c PyExc_UnboundLocalError16372858
Ref: 4e7d16372858
Ref: c-api/exceptions c PyExc_UnicodeDecodeError16373044
Ref: 4e7e16373044
Ref: c-api/exceptions c PyExc_UnicodeEncodeError16373230
Ref: 4e7f16373230
Ref: c-api/exceptions c PyExc_UnicodeError16373416
Ref: 4e8016373416
Ref: c-api/exceptions c PyExc_UnicodeTranslateError16373596
Ref: 4e8116373596
Ref: c-api/exceptions c PyExc_ValueError16373786
Ref: 4d3d16373786
Ref: c-api/exceptions c PyExc_ZeroDivisionError16373964
Ref: 4d3816373964
Ref: Exception types-Footnote-116375011
Node: OSError aliases16375053
Ref: c-api/exceptions oserror-aliases16375178
Ref: 4fd216375178
Ref: c-api/exceptions c PyExc_EnvironmentError16375754
Ref: 4e5716375754
Ref: c-api/exceptions c PyExc_IOError16375934
Ref: 4e5e16375934
Ref: c-api/exceptions c PyExc_WindowsError16376105
Ref: 4e8516376105
Ref: c-api/exceptions win16376385
Ref: 4fd316376385
Node: Warning types16376541
Ref: c-api/exceptions standardwarningcategories16376642
Ref: 4fc316376642
Ref: c-api/exceptions warning-types16376642
Ref: 4fd416376642
Ref: c-api/exceptions c PyExc_Warning16377031
Ref: 4e8416377031
Ref: c-api/exceptions c PyExc_BytesWarning16377151
Ref: 4e4e16377151
Ref: c-api/exceptions c PyExc_DeprecationWarning16377331
Ref: 4e5416377331
Ref: c-api/exceptions c PyExc_EncodingWarning16377517
Ref: 4e5616377517
Ref: c-api/exceptions c PyExc_FutureWarning16377728
Ref: 4e5c16377728
Ref: c-api/exceptions c PyExc_ImportWarning16377909
Ref: 4e6016377909
Ref: c-api/exceptions c PyExc_PendingDeprecationWarning16378090
Ref: 4e6e16378090
Ref: c-api/exceptions c PyExc_ResourceWarning16378283
Ref: 4e7216378283
Ref: c-api/exceptions c PyExc_RuntimeWarning16378492
Ref: 4e7416378492
Ref: c-api/exceptions c PyExc_SyntaxWarning16378674
Ref: 4e7816378674
Ref: c-api/exceptions c PyExc_UnicodeWarning16378855
Ref: 4e8216378855
Ref: c-api/exceptions c PyExc_UserWarning16379038
Ref: 4e8316379038
Node: Definindo módulos de extensão16379308
Ref: c-api/extension-modules doc16379470
Ref: 4fd516379470
Ref: c-api/extension-modules defining-extension-modules16379470
Ref: 4fd616379470
Ref: c-api/extension-modules extension-modules16379470
Ref: 4d9e16379470
Ref: c-api/extension-modules no-color16379470
Ref: 4fd716379470
Ref: Definindo módulos de extensão-Footnote-116381903
Node: Várias instâncias de módulo16381945
Ref: c-api/extension-modules multiple-module-instances16382079
Ref: 4fda16382079
Node: Função de inicialização16383747
Ref: c-api/extension-modules extension-export-hook16383918
Ref: 4fd816383918
Ref: c-api/extension-modules initialization-function16383918
Ref: 4fdd16383918
Ref: c-api/extension-modules c PyInit_modulename16384078
Ref: 4fde16384078
Ref: c-api/extension-modules c PyMODINIT_FUNC16385010
Ref: 16c116385010
Ref: Função de inicialização-Footnote-116386211
Ref: Função de inicialização-Footnote-216386285
Node: Inicialização multifásica16386327
Ref: c-api/extension-modules id116386502
Ref: 4fe016386502
Ref: c-api/extension-modules multi-phase-initialization16386502
Ref: 4fdf16386502
Ref: c-api/extension-modules c PyModuleDef_Init16386851
Ref: 4d4416386851
Node: Inicialização monofásica legada16387660
Ref: c-api/extension-modules legacy-single-phase-initialization16387799
Ref: 4fe216387799
Ref: c-api/extension-modules single-phase-initialization16387799
Ref: 4fd916387799
Ref: Inicialização monofásica legada-Footnote-116390426
Node: Utilitários<2>16390565
Ref: c-api/utilities doc16390730
Ref: 4fe416390730
Ref: c-api/utilities id116390730
Ref: 4fe516390730
Ref: c-api/utilities no-color16390730
Ref: 4fe616390730
Ref: c-api/utilities utilities16390730
Ref: 4fe716390730
Node: Utilitários do sistema operacional16391428
Ref: c-api/sys doc16391540
Ref: 4fe816391540
Ref: c-api/sys operating-system-utilities16391540
Ref: 4fe916391540
Ref: c-api/sys os16391540
Ref: 4fea16391540
Ref: c-api/sys c PyOS_FSPath16391624
Ref: f0816391624
Ref: c-api/sys c Py_FdIsInteractive16392292
Ref: 4feb16392292
Ref: c-api/sys c PyOS_BeforeFork16392868
Ref: dac16392868
Ref: c-api/sys c PyOS_AfterFork_Parent16393522
Ref: dad16393522
Ref: c-api/sys c PyOS_AfterFork_Child16394299
Ref: 42d16394299
Ref: c-api/sys c PyOS_AfterFork16395382
Ref: 42c16395382
Ref: c-api/sys c PyOS_CheckStack16395895
Ref: 1ab816395895
Ref: c-api/sys c PyOS_sighandler_t16396442
Ref: 4ee116396442
Ref: c-api/sys c PyOS_getsig16396536
Ref: 172c16396536
Ref: c-api/sys c PyOS_setsig16396830
Ref: 172d16396830
Ref: c-api/sys c Py_DecodeLocale16397200
Ref: db416397200
Ref: c-api/sys c Py_EncodeLocale16399765
Ref: db516399765
Ref: c-api/sys c Py_fopen16401590
Ref: 39016401590
Ref: c-api/sys c Py_fclose16402249
Ref: 39116402249
Ref: Utilitários do sistema operacional-Footnote-116402680
Node: System Functions16402722
Ref: c-api/sys system-functions16402858
Ref: 4fed16402858
Ref: c-api/sys systemfunctions16402858
Ref: 4fee16402858
Ref: c-api/sys c PySys_GetObject16403157
Ref: 61e16403157
Ref: c-api/sys c PySys_SetObject16403452
Ref: 4f1816403452
Ref: c-api/sys c PySys_ResetWarnOptions16403753
Ref: 3f116403753
Ref: c-api/sys c PySys_WriteStdout16404117
Ref: 4f1a16404117
Ref: c-api/sys c PySys_WriteStderr16405030
Ref: 4f1916405030
Ref: c-api/sys c PySys_FormatStdout16405237
Ref: 4f1616405237
Ref: c-api/sys c PySys_FormatStderr16405557
Ref: 4f1516405557
Ref: c-api/sys c PySys_GetXOptions16405799
Ref: 4f1716405799
Ref: c-api/sys c PySys_Audit16406167
Ref: 60716406167
Ref: c-api/sys c PySys_AuditTuple16407509
Ref: 60616407509
Ref: c-api/sys c PySys_AddAuditHook16407853
Ref: 45e116407853
Ref: c-api/sys c Py_AuditHookFunction16409542
Ref: 4fef16409542
Ref: System Functions-Footnote-116410052
Node: Process Control16410094
Ref: c-api/sys process-control16410217
Ref: 4ff116410217
Ref: c-api/sys processcontrol16410217
Ref: 4ff216410217
Ref: c-api/sys c Py_FatalError16410262
Ref: b7016410262
Ref: c-api/sys c Py_Exit16411037
Ref: f3f16411037
Ref: c-api/sys c Py_AtExit16411434
Ref: 4f6916411434
Node: Importando módulos<2>16412245
Ref: c-api/import doc16412382
Ref: 4ff316412382
Ref: c-api/import importing16412382
Ref: 4ff416412382
Ref: c-api/import importing-modules16412382
Ref: 4ff516412382
Ref: c-api/import no-color16412382
Ref: 4ff616412382
Ref: c-api/import c PyImport_ImportModule16412434
Ref: 3d916412434
Ref: c-api/import c PyImport_ImportModuleNoBlock16412750
Ref: 3d816412750
Ref: c-api/import c PyImport_ImportModuleEx16413474
Ref: 13a116413474
Ref: c-api/import c PyImport_ImportModuleLevelObject16414305
Ref: 4e9e16414305
Ref: c-api/import c PyImport_ImportModuleLevel16415217
Ref: 13a016415217
Ref: c-api/import c PyImport_Import16415705
Ref: 15ed16415705
Ref: c-api/import c PyImport_ReloadModule16416311
Ref: 4e9f16416311
Ref: c-api/import c PyImport_AddModuleRef16416654
Ref: 5ef16416654
Ref: c-api/import c PyImport_AddModuleObject16417663
Ref: 4e9516417663
Ref: c-api/import c PyImport_AddModule16418045
Ref: 5f016418045
Ref: c-api/import c PyImport_ExecCodeModule16418317
Ref: 4e9616418317
Ref: c-api/import c PyImport_ExecCodeModuleEx16420374
Ref: 4e9716420374
Ref: c-api/import c PyImport_ExecCodeModuleObject16420819
Ref: 4e9816420819
Ref: c-api/import c PyImport_ExecCodeModuleWithPathnames16421476
Ref: 4e9916421476
Ref: c-api/import c PyImport_GetMagicNumber16422271
Ref: 139f16422271
Ref: c-api/import c PyImport_GetMagicTag16422718
Ref: 4e9a16422718
Ref: c-api/import c PyImport_GetModuleDict16423085
Ref: 4e9b16423085
Ref: c-api/import c PyImport_GetModule16423409
Ref: da016423409
Ref: c-api/import c PyImport_GetImporter16423834
Ref: 19c316423834
Ref: c-api/import c PyImport_ImportFrozenModuleObject16424565
Ref: 4e9d16424565
Ref: c-api/import c PyImport_ImportFrozenModule16425257
Ref: 4e9c16425257
Ref: c-api/import c _frozen16425514
Ref: 96e16425514
Ref: c-api/import c PyImport_FrozenModules16426176
Ref: 31ae16426176
Ref: c-api/import c PyImport_AppendInittab16426637
Ref: 1a4c16426637
Ref: c-api/import c _inittab16427239
Ref: 4ff716427239
Ref: c-api/import c _inittab name16427569
Ref: 4ff816427569
Ref: c-api/import c _inittab initfunc16427662
Ref: 4ff916427662
Ref: c-api/import c PyImport_ExtendInittab16427808
Ref: 1a4d16427808
Ref: c-api/import c PyImport_ImportModuleAttr16428593
Ref: 39316428593
Ref: c-api/import c PyImport_ImportModuleAttrString16429163
Ref: 39416429163
Ref: Importando módulos<2>-Footnote-116429541
Node: Suporte a marshalling de dados16429583
Ref: c-api/marshal doc16429753
Ref: 4ffa16429753
Ref: c-api/marshal data-marshalling-support16429753
Ref: 4ffb16429753
Ref: c-api/marshal marshalling-utils16429753
Ref: 4ffc16429753
Ref: c-api/marshal no-color16429753
Ref: 4ffd16429753
Ref: c-api/marshal c Py_MARSHAL_VERSION16430423
Ref: 4ffe16430423
Ref: c-api/marshal c PyMarshal_WriteLongToFile16430525
Ref: 98e16430525
Ref: c-api/marshal c PyMarshal_WriteObjectToFile16430995
Ref: 98f16430995
Ref: c-api/marshal c PyMarshal_WriteObjectToString16431345
Ref: 99116431345
Ref: c-api/marshal c PyMarshal_ReadLongFromFile16431724
Ref: 4fff16431724
Ref: c-api/marshal c PyMarshal_ReadShortFromFile16432083
Ref: 500016432083
Ref: c-api/marshal c PyMarshal_ReadObjectFromFile16432444
Ref: 500116432444
Ref: c-api/marshal c PyMarshal_ReadLastObjectFromFile16432809
Ref: 500216432809
Ref: c-api/marshal c PyMarshal_ReadObjectFromString16433627
Ref: 99016433627
Node: Análise de argumentos e construção de valores16434053
Ref: c-api/arg doc16434235
Ref: 500316434235
Ref: c-api/arg arg-parsing16434235
Ref: 3d216434235
Ref: c-api/arg no-color16434235
Ref: 500416434235
Ref: c-api/arg parsing-arguments-and-building-values16434235
Ref: 500516434235
Node: Análise de argumentos<2>16434953
Ref: c-api/arg parsing-arguments16435091
Ref: 500616435091
Node: Strings e buffers16435901
Ref: c-api/arg arg-parsing-string-and-buffers16436000
Ref: 62016436000
Ref: c-api/arg strings-and-buffers16436000
Ref: 500716436000
Ref: c-api/arg c-arg-borrowed-buffer16437459
Ref: 3d316437459
Node: Números<2>16447642
Ref: c-api/arg numbers16447764
Ref: 500816447764
Node: Outros objetos16450911
Ref: c-api/arg other-objects16451032
Ref: 500a16451032
Ref: c-api/arg o-ampersand16451885
Ref: 500b16451885
Ref: c-api/arg c Py_CLEANUP_SUPPORTED16452694
Ref: 500c16452694
Node: Funções da API16457416
Ref: c-api/arg api-functions16457517
Ref: 500d16457517
Ref: c-api/arg c PyArg_ParseTuple16457566
Ref: 3be16457566
Ref: c-api/arg c PyArg_VaParse16457923
Ref: 4df016457923
Ref: c-api/arg c PyArg_ParseTupleAndKeywords16458195
Ref: 61816458195
Ref: c-api/arg c PyArg_VaParseTupleAndKeywords16459412
Ref: 61916459412
Ref: c-api/arg c PyArg_ValidateKeywordArguments16459758
Ref: 4df116459758
Ref: c-api/arg c PyArg_Parse16460126
Ref: 177c16460126
Ref: c-api/arg c PyArg_UnpackTuple16460848
Ref: 16f416460848
Ref: c-api/arg c PY_CXX_CONST16462919
Ref: 61a16462919
Node: Construindo valores16463363
Ref: c-api/arg building-values16463501
Ref: 500e16463501
Ref: c-api/arg c Py_BuildValue16463558
Ref: 3bf16463558
Ref: c-api/arg capi-py-buildvalue-format-k16468818
Ref: 17d116468818
Ref: c-api/arg c Py_VaBuildValue16472461
Ref: 4f7716472461
Node: Conversão e formação de strings16472769
Ref: c-api/conversion doc16472934
Ref: 500f16472934
Ref: c-api/conversion no-color16472934
Ref: 501016472934
Ref: c-api/conversion string-conversion16472934
Ref: 501116472934
Ref: c-api/conversion string-conversion-and-formatting16472934
Ref: 501216472934
Ref: c-api/conversion c PyOS_snprintf16473084
Ref: 16f716473084
Ref: c-api/conversion c PyOS_vsnprintf16473396
Ref: 16f816473396
Ref: c-api/conversion c PyOS_strtoul16475200
Ref: 4ee316475200
Ref: c-api/conversion c PyOS_strtol16476342
Ref: 4ee216476342
Ref: c-api/conversion c PyOS_string_to_double16476871
Ref: 149116476871
Ref: c-api/conversion c PyOS_double_to_string16478773
Ref: 4ee016478773
Ref: c-api/conversion c PyOS_stricmp16480513
Ref: 501316480513
Ref: c-api/conversion c PyOS_strnicmp16480794
Ref: 501416480794
Ref: Conversão e formação de strings-Footnote-116481140
Ref: Conversão e formação de strings-Footnote-216481188
Ref: Conversão e formação de strings-Footnote-316481237
Ref: Conversão e formação de strings-Footnote-416481284
Node: API do PyHash16481330
Ref: c-api/hash doc16481456
Ref: 501516481456
Ref: c-api/hash no-color16481456
Ref: 501616481456
Ref: c-api/hash pyhash-api16481456
Ref: 501716481456
Ref: c-api/hash c Py_hash_t16481597
Ref: 145f16481597
Ref: c-api/hash c Py_uhash_t16481706
Ref: 501816481706
Ref: c-api/hash c PyHASH_MODULUS16481816
Ref: 192416481816
Ref: c-api/hash c PyHASH_BITS16481970
Ref: 192516481970
Ref: c-api/hash c PyHASH_MULTIPLIER16482097
Ref: 18da16482097
Ref: c-api/hash c PyHASH_INF16482234
Ref: 192616482234
Ref: c-api/hash c PyHASH_IMAG16482352
Ref: 192716482352
Ref: c-api/hash c PyHash_FuncDef16482494
Ref: 501916482494
Ref: c-api/hash c PyHash_FuncDef hash16482613
Ref: 501b16482613
Ref: c-api/hash c PyHash_FuncDef name16482751
Ref: 501c16482751
Ref: c-api/hash c PyHash_FuncDef hash_bits16482851
Ref: 501d16482851
Ref: c-api/hash c PyHash_FuncDef seed_bits16482944
Ref: 501e16482944
Ref: c-api/hash c PyHash_GetFuncDef16483064
Ref: 501a16483064
Ref: c-api/hash c Py_HashPointer16483317
Ref: 42216483317
Ref: c-api/hash c Py_HashBuffer16483668
Ref: 39216483668
Ref: c-api/hash c PyObject_GenericHash16484324
Ref: 60016484324
Ref: API do PyHash-Footnote-116484709
Ref: API do PyHash-Footnote-216484765
Node: Reflexão16484807
Ref: c-api/reflection doc16484939
Ref: 501f16484939
Ref: c-api/reflection id116484939
Ref: 502016484939
Ref: c-api/reflection no-color16484939
Ref: 502116484939
Ref: c-api/reflection reflection16484939
Ref: 502216484939
Ref: c-api/reflection c PyEval_GetBuiltins16484971
Ref: 5e816484971
Ref: c-api/reflection c PyEval_GetLocals16485399
Ref: 5ec16485399
Ref: c-api/reflection c PyEval_GetGlobals16487035
Ref: 5ea16487035
Ref: c-api/reflection c PyEval_GetFrame16487434
Ref: 1a6516487434
Ref: c-api/reflection c PyEval_GetFrameBuiltins16487778
Ref: 5e716487778
Ref: c-api/reflection c PyEval_GetFrameLocals16488167
Ref: 5eb16488167
Ref: c-api/reflection c PyEval_GetFrameGlobals16488818
Ref: 5e916488818
Ref: c-api/reflection c PyEval_GetFuncName16489248
Ref: 4e4416489248
Ref: c-api/reflection c PyEval_GetFuncDesc16489477
Ref: 4e4316489477
Ref: Reflexão-Footnote-116489961
Node: Registro de codec e funções de suporte16490003
Ref: c-api/codec doc16490134
Ref: 502316490134
Ref: c-api/codec codec-registry16490134
Ref: f2416490134
Ref: c-api/codec codec-registry-and-support-functions16490134
Ref: 502416490134
Ref: c-api/codec no-color16490134
Ref: 502516490134
Ref: c-api/codec c PyCodec_Register16490229
Ref: 4e1916490229
Ref: c-api/codec c PyCodec_Unregister16490598
Ref: a8d16490598
Ref: c-api/codec c PyCodec_KnownEncoding16491004
Ref: 4e1716491004
Ref: c-api/codec c PyCodec_Encode16491265
Ref: 3df16491265
Ref: c-api/codec c PyCodec_Decode16491902
Ref: 3de16491902
Node: API de pesquisa de codec16492660
Ref: c-api/codec codec-lookup-api16492836
Ref: 502616492836
Ref: c-api/codec c PyCodec_Encoder16493243
Ref: 4e1316493243
Ref: c-api/codec c PyCodec_Decoder16493475
Ref: 4e1216493475
Ref: c-api/codec c PyCodec_IncrementalEncoder16493709
Ref: 4e1616493709
Ref: c-api/codec c PyCodec_IncrementalDecoder16493989
Ref: 4e1516493989
Ref: c-api/codec c PyCodec_StreamReader16494269
Ref: 4e1c16494269
Ref: c-api/codec c PyCodec_StreamWriter16494570
Ref: 4e1d16494570
Node: API de registro de tratamentos de erros de decodificação Unicode16494871
Ref: c-api/codec registry-api-for-unicode-encoding-error-handlers16495047
Ref: 502716495047
Ref: c-api/codec c PyCodec_RegisterError16495198
Ref: 4e1a16495198
Ref: c-api/codec c PyCodec_LookupError16496443
Ref: 4e1816496443
Ref: c-api/codec c PyCodec_StrictErrors16496859
Ref: 4e1e16496859
Ref: c-api/codec c PyCodec_IgnoreErrors16497045
Ref: 4e1416497045
Ref: c-api/codec c PyCodec_ReplaceErrors16497274
Ref: 4e1b16497274
Ref: c-api/codec c PyCodec_XMLCharRefReplaceErrors16497501
Ref: 4e1f16497501
Ref: c-api/codec c PyCodec_BackslashReplaceErrors16497749
Ref: 4e1116497749
Ref: c-api/codec c PyCodec_NameReplaceErrors16498025
Ref: 10a516498025
Node: API C PyTime16498329
Ref: c-api/time doc16498474
Ref: 47d16498474
Ref: c-api/time c-api-time16498474
Ref: 502816498474
Ref: c-api/time no-color16498474
Ref: 502916498474
Ref: c-api/time pytime-c-api16498474
Ref: 502a16498474
Node: Tipos<3>16498864
Ref: c-api/time types16498951
Ref: 502c16498951
Ref: c-api/time c PyTime_t16498982
Ref: 5c916498982
Ref: c-api/time c PyTime_MIN16499595
Ref: 5ca16499595
Ref: c-api/time c PyTime_MAX16499689
Ref: 5cb16499689
Node: Funções de relógio16499783
Ref: c-api/time clock-functions16499907
Ref: 502d16499907
Ref: c-api/time c PyTime_Monotonic16500752
Ref: 5cd16500752
Ref: c-api/time c PyTime_PerfCounter16500928
Ref: 5cf16500928
Ref: c-api/time c PyTime_Time16501113
Ref: 5d116501113
Node: Funções de relógio brutas16501285
Ref: c-api/time raw-clock-functions16501424
Ref: 502e16501424
Ref: c-api/time c PyTime_MonotonicRaw16502050
Ref: 5ce16502050
Ref: c-api/time c PyTime_PerfCounterRaw16502268
Ref: 5d016502268
Ref: c-api/time c PyTime_TimeRaw16502490
Ref: 5d216502490
Node: Funções de conversão16502693
Ref: c-api/time conversion-functions16502802
Ref: 502f16502802
Ref: c-api/time c PyTime_AsSecondsDouble16502866
Ref: 5cc16502866
Node: Suporte a Mapas do Perf16503126
Ref: c-api/perfmaps doc16503222
Ref: 503016503222
Ref: c-api/perfmaps no-color16503222
Ref: 503116503222
Ref: c-api/perfmaps perfmaps16503222
Ref: 503216503222
Ref: c-api/perfmaps support-for-perf-maps16503222
Ref: 503316503222
Ref: c-api/perfmaps c PyUnstable_PerfMapState_Init16504018
Ref: 19e616504018
Ref: c-api/perfmaps c PyUnstable_WritePerfMapEntry16504974
Ref: 19e516504974
Ref: c-api/perfmaps c PyUnstable_PerfMapState_Fini16505855
Ref: 19e716505855
Ref: Suporte a Mapas do Perf-Footnote-116506479
Ref: Suporte a Mapas do Perf-Footnote-216506536
Node: Camada de Objetos Abstratos16506660
Ref: c-api/abstract doc16506821
Ref: 503416506821
Ref: c-api/abstract abstract16506821
Ref: 4d9516506821
Ref: c-api/abstract abstract-objects-layer16506821
Ref: 503516506821
Ref: c-api/abstract no-color16506821
Ref: 503616506821
Node: Protocolo de objeto16507627
Ref: c-api/object doc16507739
Ref: 503716507739
Ref: c-api/object object16507739
Ref: 503816507739
Ref: c-api/object object-protocol16507739
Ref: 503916507739
Ref: c-api/object c Py_GetConstant16507792
Ref: 5ed16507792
Ref: c-api/object c Py_CONSTANT_NONE16508485
Ref: 503a16508485
Ref: c-api/object c Py_CONSTANT_FALSE16508689
Ref: 503b16508689
Ref: c-api/object c Py_CONSTANT_TRUE16508892
Ref: 503c16508892
Ref: c-api/object c Py_CONSTANT_ELLIPSIS16509099
Ref: 503d16509099
Ref: c-api/object c Py_CONSTANT_NOT_IMPLEMENTED16509314
Ref: 503e16509314
Ref: c-api/object c Py_CONSTANT_ZERO16509516
Ref: 503f16509516
Ref: c-api/object c Py_CONSTANT_ONE16509709
Ref: 504016509709
Ref: c-api/object c Py_CONSTANT_EMPTY_STR16509909
Ref: 504116509909
Ref: c-api/object c Py_CONSTANT_EMPTY_BYTES16510106
Ref: 504216510106
Ref: c-api/object c Py_CONSTANT_EMPTY_TUPLE16510302
Ref: 504316510302
Ref: c-api/object c Py_GetConstantBorrowed16510612
Ref: 5ee16510612
Ref: c-api/object c Py_NotImplemented16511188
Ref: 504416511188
Ref: c-api/object c Py_RETURN_NOTIMPLEMENTED16511392
Ref: 504516511392
Ref: c-api/object c Py_PRINT_RAW16511642
Ref: 504616511642
Ref: c-api/object c PyObject_Print16511925
Ref: 18d216511925
Ref: c-api/object c PyObject_HasAttrWithError16512307
Ref: 60f16512307
Ref: c-api/object c PyObject_HasAttrStringWithError16512694
Ref: 61116512694
Ref: c-api/object c PyObject_HasAttr16513079
Ref: 61016513079
Ref: c-api/object c PyObject_HasAttrString16513727
Ref: 61216513727
Ref: c-api/object c PyObject_GetAttr16514471
Ref: 5e016514471
Ref: c-api/object c PyObject_GetAttrString16514988
Ref: 5e116514988
Ref: c-api/object c PyObject_GetOptionalAttr16515490
Ref: 5e216515490
Ref: c-api/object c PyObject_GetOptionalAttrString16516216
Ref: 5e316516216
Ref: c-api/object c PyObject_GenericGetAttr16516621
Ref: 4eec16516621
Ref: c-api/object c PyObject_SetAttr16517304
Ref: 4ef516517304
Ref: c-api/object c PyObject_SetAttrString16517884
Ref: 18d516517884
Ref: c-api/object c PyObject_GenericSetAttr16518814
Ref: 4eed16518814
Ref: c-api/object c PyObject_DelAttr16519514
Ref: 179916519514
Ref: c-api/object c PyObject_DelAttrString16519820
Ref: 179a16519820
Ref: c-api/object c PyObject_GenericGetDict16520623
Ref: 1bdd16520623
Ref: c-api/object c PyObject_GenericSetDict16521380
Ref: 4eee16521380
Ref: c-api/object c _PyObject_GetDictPtr16521726
Ref: 504716521726
Ref: c-api/object c PyObject_RichCompare16522154
Ref: 4d9316522154
Ref: c-api/object c PyObject_RichCompareBool16522883
Ref: 1c4316522883
Ref: c-api/object c PyObject_Format16523421
Ref: 4eeb16523421
Ref: c-api/object c PyObject_Repr16523862
Ref: 122516523862
Ref: c-api/object c PyObject_ASCII16524446
Ref: 4ee416524446
Ref: c-api/object c PyObject_Str16524992
Ref: 122616524992
Ref: c-api/object c PyObject_Bytes16525626
Ref: 4ee616525626
Ref: c-api/object c PyObject_IsSubclass16526115
Ref: 109d16526115
Ref: c-api/object c PyObject_IsInstance16527136
Ref: 109c16527136
Ref: c-api/object c PyObject_Hash16528157
Ref: 43316528157
Ref: c-api/object c PyObject_HashNotImplemented16528565
Ref: 15b816528565
Ref: c-api/object c PyObject_IsTrue16528989
Ref: 4ef116528989
Ref: c-api/object c PyObject_Not16529268
Ref: 4ef316529268
Ref: c-api/object c PyObject_Type16529540
Ref: 4ef716529540
Ref: c-api/object c PyObject_TypeCheck16530248
Ref: 1b9a16530248
Ref: c-api/object c PyObject_Size16530473
Ref: 4ef616530473
Ref: c-api/object c PyObject_Length16530540
Ref: 4ef216530540
Ref: c-api/object c PyObject_LengthHint16530906
Ref: 11fa16530906
Ref: c-api/object c PyObject_GetItem16531373
Ref: 4dd516531373
Ref: c-api/object c PyObject_SetItem16531706
Ref: 4dd316531706
Ref: c-api/object c PyObject_DelItem16532090
Ref: 4ee816532090
Ref: c-api/object c PyObject_DelItemString16532362
Ref: 4ee916532362
Ref: c-api/object c PyObject_Dir16532662
Ref: 4eea16532662
Ref: c-api/object c PyObject_GetIter16533257
Ref: 4ef016533257
Ref: c-api/object c PyObject_SelfIter16533687
Ref: 4ef416533687
Ref: c-api/object c PyObject_GetAIter16534034
Ref: 4eef16534034
Ref: c-api/object c PyObject_GetTypeData16534602
Ref: 76016534602
Ref: c-api/object c PyType_GetTypeDataSize16535080
Ref: 76116535080
Ref: c-api/object c PyObject_GetItemData16535767
Ref: 76316535767
Ref: c-api/object c PyObject_VisitManagedDict16536115
Ref: 60116536115
Ref: c-api/object c PyObject_ClearManagedDict16536435
Ref: 60216536435
Ref: c-api/object c PyUnstable_Object_EnableDeferredRefcount16536718
Ref: 3c216536718
Ref: c-api/object c PyUnstable_Object_IsUniqueReferencedTemporary16538256
Ref: 3c416538256
Ref: c-api/object c PyUnstable_IsImmortal16539836
Ref: 3c116539836
Ref: c-api/object c PyUnstable_TryIncRef16540390
Ref: 182516540390
Ref: c-api/object c PyUnstable_EnableTryIncRef16543083
Ref: 182616543083
Ref: c-api/object c PyUnstable_Object_IsUniquelyReferenced16543545
Ref: 3c316543545
Ref: Protocolo de objeto-Footnote-116544529
Ref: Protocolo de objeto-Footnote-216544571
Ref: Protocolo de objeto-Footnote-316544613
Node: Protocolo de chamada16544683
Ref: c-api/call doc16544824
Ref: 504f16544824
Ref: c-api/call call16544824
Ref: 79816544824
Ref: c-api/call call-protocol16544824
Ref: 505016544824
Ref: c-api/call no-color16544824
Ref: 505116544824
Node: O protocolo tp_call16545071
Ref: c-api/call the-tp-call-protocol16545178
Ref: 505216545178
Node: O protocolo vectorcall16545957
Ref: c-api/call the-vectorcall-protocol16546098
Ref: 505416546098
Ref: c-api/call vectorcall16546098
Ref: 76916546098
Ref: c-api/call c vectorcallfunc16548011
Ref: 76e16548011
Ref: c-api/call c PY_VECTORCALL_ARGUMENTS_OFFSET16549122
Ref: 77516549122
Ref: O protocolo vectorcall-Footnote-116550375
Node: Controle de recursão<2>16550417
Ref: c-api/call recursion-control16550545
Ref: 505616550545
Node: API de suporte à chamada de vetores16551005
Ref: c-api/call vectorcall-support-api16551133
Ref: 505716551133
Ref: c-api/call c PyVectorcall_NARGS16551223
Ref: 76c16551223
Ref: c-api/call c PyVectorcall_Function16551698
Ref: 505816551698
Ref: c-api/call c PyVectorcall_Call16552242
Ref: 76d16552242
Node: API de chamada de objetos16552874
Ref: c-api/call capi-call16553021
Ref: 505316553021
Ref: c-api/call object-calling-api16553021
Ref: 505916553021
Ref: c-api/call c PyObject_Call16557709
Ref: 63116557709
Ref: c-api/call c PyObject_CallNoArgs16558433
Ref: 63016558433
Ref: c-api/call c PyObject_CallOneArg16558930
Ref: b6516558930
Ref: c-api/call c PyObject_CallObject16559352
Ref: 4d4d16559352
Ref: c-api/call c PyObject_CallFunction16559886
Ref: 63316559886
Ref: c-api/call c PyObject_CallMethod16560784
Ref: 63416560784
Ref: c-api/call c PyObject_CallFunctionObjArgs16561749
Ref: 4ee716561749
Ref: c-api/call c PyObject_CallMethodObjArgs16562357
Ref: 1c9616562357
Ref: c-api/call c PyObject_CallMethodNoArgs16562967
Ref: 505a16562967
Ref: c-api/call c PyObject_CallMethodOneArg16563367
Ref: 505b16563367
Ref: c-api/call c PyObject_Vectorcall16563806
Ref: 77316563806
Ref: c-api/call c PyObject_VectorcallDict16564428
Ref: 505c16564428
Ref: c-api/call c PyObject_VectorcallMethod16565185
Ref: 77416565185
Node: API de suporte a chamadas16566338
Ref: c-api/call call-support-api16566454
Ref: 505e16566454
Ref: c-api/call c PyCallable_Check16566523
Ref: 4e0716566523
Node: Protocolo de número16566770
Ref: c-api/number doc16566915
Ref: 505f16566915
Ref: c-api/number no-color16566915
Ref: 506016566915
Ref: c-api/number number16566915
Ref: 506116566915
Ref: c-api/number number-protocol16566915
Ref: 506216566915
Ref: c-api/number c PyNumber_Check16566969
Ref: c5016566969
Ref: c-api/number c PyNumber_Add16567296
Ref: 4ec316567296
Ref: c-api/number c PyNumber_Subtract16567614
Ref: 4edd16567614
Ref: c-api/number c PyNumber_Multiply16567947
Ref: 4ed616567947
Ref: c-api/number c PyNumber_MatrixMultiply16568282
Ref: 10ac16568282
Ref: c-api/number c PyNumber_FloorDivide16568687
Ref: 4ec716568687
Ref: c-api/number c PyNumber_TrueDivide16569012
Ref: 4ede16569012
Ref: c-api/number c PyNumber_Remainder16569630
Ref: 4edb16569630
Ref: c-api/number c PyNumber_Divmod16569958
Ref: 4ec616569958
Ref: c-api/number c PyNumber_Power16570300
Ref: 4eda16570300
Ref: c-api/number c PyNumber_Negative16570821
Ref: 4ed716570821
Ref: c-api/number c PyNumber_Positive16571105
Ref: 4ed916571105
Ref: c-api/number c PyNumber_Absolute16571373
Ref: 4ec216571373
Ref: c-api/number c PyNumber_Invert16571661
Ref: 4ed416571661
Ref: c-api/number c PyNumber_Lshift16571951
Ref: 4ed516571951
Ref: c-api/number c PyNumber_Rshift16572290
Ref: 4edc16572290
Ref: c-api/number c PyNumber_And16572630
Ref: 4ec416572630
Ref: c-api/number c PyNumber_Xor16572963
Ref: 4edf16572963
Ref: c-api/number c PyNumber_Or16573304
Ref: 4ed816573304
Ref: c-api/number c PyNumber_InPlaceAdd16573635
Ref: 4ec816573635
Ref: c-api/number c PyNumber_InPlaceSubtract16574016
Ref: 4ed116574016
Ref: c-api/number c PyNumber_InPlaceMultiply16574409
Ref: 4ecc16574409
Ref: c-api/number c PyNumber_InPlaceMatrixMultiply16574801
Ref: 10ad16574801
Ref: c-api/number c PyNumber_InPlaceFloorDivide16575271
Ref: 4eca16575271
Ref: c-api/number c PyNumber_InPlaceTrueDivide16575680
Ref: 4ed216575680
Ref: c-api/number c PyNumber_InPlaceRemainder16576367
Ref: 4ecf16576367
Ref: c-api/number c PyNumber_InPlacePower16576758
Ref: 4ece16576758
Ref: c-api/number c PyNumber_InPlaceLshift16577411
Ref: 4ecb16577411
Ref: c-api/number c PyNumber_InPlaceRshift16577819
Ref: 4ed016577819
Ref: c-api/number c PyNumber_InPlaceAnd16578228
Ref: 4ec916578228
Ref: c-api/number c PyNumber_InPlaceXor16578630
Ref: 4ed316578630
Ref: c-api/number c PyNumber_InPlaceOr16579040
Ref: 4ecd16579040
Ref: c-api/number c PyNumber_Long16579440
Ref: c5116579440
Ref: c-api/number c PyNumber_Float16579753
Ref: c5216579753
Ref: c-api/number c PyNumber_Index16580066
Ref: a8916580066
Ref: c-api/number c PyNumber_ToBase16580532
Ref: 1a8f16580532
Ref: c-api/number c PyNumber_AsSsize_t16581060
Ref: 4ec516581060
Ref: c-api/number c PyIndex_Check16581868
Ref: b7716581868
Node: Protocolo de sequência16582171
Ref: c-api/sequence doc16582319
Ref: 506316582319
Ref: c-api/sequence no-color16582319
Ref: 506416582319
Ref: c-api/sequence sequence16582319
Ref: 506516582319
Ref: c-api/sequence sequence-protocol16582319
Ref: 506616582319
Ref: c-api/sequence c PySequence_Check16582379
Ref: 4efb16582379
Ref: c-api/sequence c PySequence_Size16582851
Ref: 1ce816582851
Ref: c-api/sequence c PySequence_Length16582920
Ref: 4f0316582920
Ref: c-api/sequence c PySequence_Concat16583187
Ref: 4efc16583187
Ref: c-api/sequence c PySequence_Repeat16583508
Ref: 4f0516583508
Ref: c-api/sequence c PySequence_InPlaceConcat16583854
Ref: 4f0016583854
Ref: c-api/sequence c PySequence_InPlaceRepeat16584242
Ref: 4f0116584242
Ref: c-api/sequence c PySequence_GetItem16584654
Ref: 1ce916584654
Ref: c-api/sequence c PySequence_GetSlice16584942
Ref: 4eff16584942
Ref: c-api/sequence c PySequence_SetItem16585287
Ref: 1cea16585287
Ref: c-api/sequence c PySequence_DelItem16585823
Ref: 1ceb16585823
Ref: c-api/sequence c PySequence_SetSlice16586065
Ref: 4f0616586065
Ref: c-api/sequence c PySequence_DelSlice16586360
Ref: 4efe16586360
Ref: c-api/sequence c PySequence_Count16586651
Ref: 4efd16586651
Ref: c-api/sequence c PySequence_Contains16587020
Ref: 3d616587020
Ref: c-api/sequence c PySequence_In16587351
Ref: 3d516587351
Ref: c-api/sequence c PySequence_Index16587675
Ref: 4f0216587675
Ref: c-api/sequence c PySequence_List16587975
Ref: 4f0416587975
Ref: c-api/sequence c PySequence_Tuple16588339
Ref: 4f0716588339
Ref: c-api/sequence c PySequence_Fast16588786
Ref: 180216588786
Ref: c-api/sequence c PySequence_Fast_GET_SIZE16589578
Ref: 3c716589578
Ref: c-api/sequence c PySequence_Fast_GET_ITEM16590007
Ref: 3c816590007
Ref: c-api/sequence c PySequence_Fast_ITEMS16590320
Ref: 3c916590320
Ref: c-api/sequence c PySequence_ITEM16590768
Ref: 506816590768
Node: Protocolo de mapeamento16591157
Ref: c-api/mapping doc16591303
Ref: 506916591303
Ref: c-api/mapping mapping16591303
Ref: 506a16591303
Ref: c-api/mapping mapping-protocol16591303
Ref: 506b16591303
Ref: c-api/mapping no-color16591303
Ref: 506c16591303
Ref: c-api/mapping c PyMapping_Check16591476
Ref: 4eb216591476
Ref: c-api/mapping c PyMapping_Size16591920
Ref: 1cec16591920
Ref: c-api/mapping c PyMapping_Length16591988
Ref: 4eb416591988
Ref: c-api/mapping c PyMapping_GetItemString16592258
Ref: 4eb316592258
Ref: c-api/mapping c PyMapping_GetOptionalItem16592622
Ref: 5de16592622
Ref: c-api/mapping c PyMapping_GetOptionalItemString16593353
Ref: 5df16593353
Ref: c-api/mapping c PyMapping_SetItemString16593757
Ref: 4eb516593757
Ref: c-api/mapping c PyMapping_DelItem16594081
Ref: 506d16594081
Ref: c-api/mapping c PyMapping_DelItemString16594209
Ref: 506e16594209
Ref: c-api/mapping c PyMapping_HasKeyWithError16594468
Ref: 61316594468
Ref: c-api/mapping c PyMapping_HasKeyStringWithError16594842
Ref: 61516594842
Ref: c-api/mapping c PyMapping_HasKey16595225
Ref: 61416595225
Ref: c-api/mapping c PyMapping_HasKeyString16595880
Ref: 61616595880
Ref: c-api/mapping c PyMapping_Keys16596605
Ref: da916596605
Ref: c-api/mapping c PyMapping_Values16596956
Ref: daa16596956
Ref: c-api/mapping c PyMapping_Items16597310
Ref: dab16597310
Node: Protocolo Iterador16597727
Ref: c-api/iter doc16597869
Ref: 506f16597869
Ref: c-api/iter iterator16597869
Ref: 507016597869
Ref: c-api/iter iterator-protocol16597869
Ref: 507116597869
Ref: c-api/iter no-color16597869
Ref: 507216597869
Ref: c-api/iter c PyIter_Check16597987
Ref: 1b9716597987
Ref: c-api/iter c PyAIter_Check16598291
Ref: 4def16598291
Ref: c-api/iter c PyIter_NextItem16598609
Ref: 39516598609
Ref: c-api/iter c PyIter_Next16599104
Ref: 39616599104
Ref: c-api/iter c PySendResult16599747
Ref: 507316599747
Ref: c-api/iter c PyIter_Send16599913
Ref: a8e16599913
Node: Protocolo de buffer16600530
Ref: c-api/buffer doc16600640
Ref: 507416600640
Ref: c-api/buffer buffer-protocol16600640
Ref: 507516600640
Ref: c-api/buffer bufferobjects16600640
Ref: 25f16600640
Ref: c-api/buffer no-color16600640
Ref: 507616600640
Node: Estrutura de Buffer16603683
Ref: c-api/buffer buffer-structure16603799
Ref: 507816603799
Ref: c-api/buffer id116603799
Ref: 507916603799
Ref: c-api/buffer c Py_buffer16605037
Ref: 95116605037
Ref: c-api/buffer c Py_buffer buf16605161
Ref: 507b16605161
Ref: c-api/buffer c Py_buffer obj16605630
Ref: 507d16605630
Ref: c-api/buffer c Py_buffer len16606332
Ref: 507e16606332
Ref: c-api/buffer c Py_buffer readonly16606961
Ref: 508016606961
Ref: c-api/buffer c Py_buffer itemsize16607134
Ref: 508116607134
Ref: c-api/buffer c Py_buffer format16608105
Ref: 508216608105
Ref: c-api/buffer c Py_buffer ndim16608449
Ref: 508516608449
Ref: c-api/buffer c Py_buffer shape16608882
Ref: 508416608882
Ref: c-api/buffer c Py_buffer strides16609499
Ref: 507c16609499
Ref: c-api/buffer c Py_buffer suboffsets16610096
Ref: 508616610096
Ref: c-api/buffer c Py_buffer internal16611115
Ref: 508916611115
Ref: c-api/buffer c PyBUF_MAX_NDIM16611538
Ref: 508716611538
Node: Tipos de solicitação do buffer16611830
Ref: c-api/buffer buffer-request-types16611972
Ref: 48ec16611972
Ref: c-api/buffer id216611972
Ref: 508a16611972
Node: campos independentes do pedido16612660
Ref: c-api/buffer request-independent-fields16612785
Ref: 508b16612785
Node: apenas em formato16613068
Ref: c-api/buffer readonly-format16613227
Ref: 508c16613227
Ref: c-api/buffer c PyBUF_WRITABLE16613280
Ref: 15a716613280
Ref: c-api/buffer c PyBUF_FORMAT16613802
Ref: 508316613802
Node: forma avanços suboffsets16614522
Ref: c-api/buffer shape-strides-suboffsets16614675
Ref: 508d16614675
Ref: c-api/buffer c PyBUF_INDIRECT16615235
Ref: 508e16615235
Ref: c-api/buffer c PyBUF_STRIDES16615431
Ref: 508f16615431
Ref: c-api/buffer c PyBUF_ND16615613
Ref: 509016615613
Ref: c-api/buffer c PyBUF_SIMPLE16615804
Ref: 507f16615804
Node: requisições contíguas16615906
Ref: c-api/buffer contiguity-requests16616065
Ref: 509116616065
Ref: c-api/buffer c PyBUF_C_CONTIGUOUS16616694
Ref: 15a816616694
Ref: c-api/buffer c PyBUF_F_CONTIGUOUS16616947
Ref: 15a916616947
Ref: c-api/buffer c PyBUF_ANY_CONTIGUOUS16617202
Ref: 509216617202
Node: requisições compostas16617597
Ref: c-api/buffer compound-requests16617722
Ref: 509316617722
Ref: c-api/buffer c PyBUF_FULL16618662
Ref: 509416618662
Ref: c-api/buffer c PyBUF_FULL_RO16618993
Ref: 509516618993
Ref: c-api/buffer c PyBUF_RECORDS16619321
Ref: 509616619321
Ref: c-api/buffer c PyBUF_RECORDS_RO16619651
Ref: 509716619651
Ref: c-api/buffer c PyBUF_STRIDED16619975
Ref: 509816619975
Ref: c-api/buffer c PyBUF_STRIDED_RO16620306
Ref: 509916620306
Ref: c-api/buffer c PyBUF_CONTIG16620630
Ref: 509a16620630
Ref: c-api/buffer c PyBUF_CONTIG_RO16620961
Ref: 509b16620961
Node: Vetores Complexos16621154
Ref: c-api/buffer complex-arrays16621309
Ref: 508816621309
Node: Estilo NumPy forma e avanços16621521
Ref: c-api/buffer numpy-style-shape-and-strides16621651
Ref: 509c16621651
Node: Estilo-PIL forma avanços e suboffsets16623592
Ref: c-api/buffer pil-style-shape-strides-and-suboffsets16623722
Ref: 509d16623722
Node: Funções relacionadas ao Buffer16624991
Ref: c-api/buffer buffer-related-functions16625105
Ref: 509e16625105
Ref: c-api/buffer c PyObject_CheckBuffer16625188
Ref: 62d16625188
Ref: c-api/buffer c PyObject_GetBuffer16625557
Ref: 62e16625557
Ref: c-api/buffer c PyBuffer_Release16626681
Ref: 62f16626681
Ref: c-api/buffer c PyBuffer_SizeFromFormat16627237
Ref: 95316627237
Ref: c-api/buffer c PyBuffer_IsContiguous16627552
Ref: 95716627552
Ref: c-api/buffer c PyBuffer_GetPointer16627996
Ref: 95216627996
Ref: c-api/buffer c PyBuffer_FromContiguous16628317
Ref: 95516628317
Ref: c-api/buffer c PyBuffer_ToContiguous16628722
Ref: 95416628722
Ref: c-api/buffer c PyObject_CopyData16629221
Ref: 95616629221
Ref: c-api/buffer c PyBuffer_FillContiguousStrides16629556
Ref: 95816629556
Ref: c-api/buffer c PyBuffer_FillInfo16629990
Ref: 95916629990
Node: Camada de Objetos Concretos16631157
Ref: c-api/concrete doc16631342
Ref: 509f16631342
Ref: c-api/concrete concrete16631342
Ref: 50a016631342
Ref: c-api/concrete concrete-objects-layer16631342
Ref: 50a116631342
Ref: c-api/concrete no-color16631342
Ref: 50a216631342
Node: Objetos Fundamentais16632361
Ref: c-api/concrete fundamental16632472
Ref: 50a416632472
Ref: c-api/concrete fundamental-objects16632472
Ref: 50a516632472
Node: Objetos tipo<2>16632670
Ref: c-api/type doc16632764
Ref: 50a616632764
Ref: c-api/type type-objects16632764
Ref: 50a716632764
Ref: c-api/type typeobjects16632764
Ref: 50a816632764
Ref: c-api/type c PyTypeObject16632807
Ref: c8f16632807
Ref: c-api/type c PyType_Type16632979
Ref: 76416632979
Ref: c-api/type c PyType_Check16633188
Ref: 1c3e16633188
Ref: c-api/type c PyType_CheckExact16633461
Ref: 1c3f16633461
Ref: c-api/type c PyType_ClearCache16633714
Ref: 4f2416633714
Ref: c-api/type c PyType_GetFlags16633888
Ref: 1bf716633888
Ref: c-api/type c PyType_GetDict16634446
Ref: 19ca16634446
Ref: c-api/type c PyType_Modified16635184
Ref: 1a9716635184
Ref: c-api/type c PyType_AddWatcher16635484
Ref: 77a16635484
Ref: c-api/type c PyType_ClearWatcher16636007
Ref: 50a916636007
Ref: c-api/type c PyType_Watch16636483
Ref: 77b16636483
Ref: c-api/type c PyType_WatchCallback16637191
Ref: 50aa16637191
Ref: c-api/type c PyType_HasFeature16637551
Ref: 1bf616637551
Ref: c-api/type c PyType_IS_GC16637787
Ref: 50ab16637787
Ref: c-api/type c PyType_IsSubtype16637978
Ref: 4f2516637978
Ref: c-api/type c PyType_GenericAlloc16638390
Ref: c5516638390
Ref: c-api/type c PyType_GenericNew16639629
Ref: 4d6d16639629
Ref: c-api/type c PyType_Ready16640012
Ref: 97516640012
Ref: c-api/type c PyType_GetName16640936
Ref: 94d16640936
Ref: c-api/type c PyType_GetQualName16641250
Ref: 94e16641250
Ref: c-api/type c PyType_GetFullyQualifiedName16641596
Ref: 60a16641596
Ref: c-api/type c PyType_GetModuleName16642033
Ref: 60c16642033
Ref: c-api/type c PyType_GetSlot16642332
Ref: a9216642332
Ref: c-api/type c PyType_GetModule16643041
Ref: b5c16643041
Ref: c-api/type c PyType_GetModuleState16644009
Ref: b5d16644009
Ref: c-api/type c PyType_GetModuleByDef16644617
Ref: 62916644617
Ref: c-api/type c PyType_GetBaseByToken16645616
Ref: 3ad16645616
Ref: c-api/type c PyUnstable_Type_AssignVersionTag16646442
Ref: 50ae16646442
Node: Creating Heap-Allocated Types16646978
Ref: c-api/type creating-heap-allocated-types16647059
Ref: 50af16647059
Ref: c-api/type c PyType_FromMetaclass16647215
Ref: 76716647215
Ref: c-api/type c PyType_FromModuleAndSpec16649379
Ref: 76816649379
Ref: c-api/type c PyType_FromSpecWithBases16650369
Ref: 79316650369
Ref: c-api/type c PyType_FromSpec16651196
Ref: 79216651196
Ref: c-api/type c PyType_Freeze16651962
Ref: 3ac16651962
Ref: c-api/type c PyType_Spec16652492
Ref: 19c816652492
Ref: c-api/type c PyType_Spec name16652639
Ref: 50b016652639
Ref: c-api/type c PyType_Spec basicsize16652761
Ref: 75f16652761
Ref: c-api/type c PyType_Spec itemsize16653528
Ref: 50b116653528
Ref: c-api/type c PyType_Spec flags16654651
Ref: 50b216654651
Ref: c-api/type c PyType_Spec slots16654893
Ref: 50b316654893
Ref: c-api/type c PyType_Slot16655125
Ref: 4f2616655125
Ref: c-api/type c PyType_Slot slot16655332
Ref: 50ac16655332
Ref: c-api/type c PyType_Slot pfunc16657796
Ref: 50bc16657796
Ref: c-api/type c Py_tp_token16658180
Ref: 3ae16658180
Ref: c-api/type c Py_TP_USE_SPEC16659220
Ref: 50bd16659220
Node: O Objeto None16659442
Ref: c-api/none doc16659536
Ref: 50be16659536
Ref: c-api/none no-color16659536
Ref: 50bf16659536
Ref: c-api/none noneobject16659536
Ref: 50c016659536
Ref: c-api/none the-none-object16659536
Ref: 50c116659536
Ref: c-api/none c Py_None16659862
Ref: 4d4016659862
Ref: c-api/none c Py_RETURN_NONE16660107
Ref: 166216660107
Node: Objetos Numéricos16660188
Ref: c-api/concrete numeric-objects16660326
Ref: 50c216660326
Ref: c-api/concrete numericobjects16660326
Ref: 50c316660326
Node: Objetos Inteiros16660491
Ref: c-api/long doc16660588
Ref: 50c416660588
Ref: c-api/long integer-objects16660588
Ref: 50c516660588
Ref: c-api/long longobjects16660588
Ref: 50c616660588
Ref: c-api/long c PyLongObject16660922
Ref: 39b16660922
Ref: c-api/long c PyLong_Type16661107
Ref: 4eb116661107
Ref: c-api/long c PyLong_Check16661355
Ref: 50c716661355
Ref: c-api/long c PyLong_CheckExact16661557
Ref: 50c816661557
Ref: c-api/long c PyLong_FromLong16661770
Ref: 1add16661770
Ref: c-api/long c PyLong_FromUnsignedLong16662264
Ref: 181c16662264
Ref: c-api/long c PyLong_FromSsize_t16662545
Ref: 180016662545
Ref: c-api/long c PyLong_FromSize_t16662817
Ref: 181e16662817
Ref: c-api/long c PyLong_FromLongLong16663074
Ref: 1ade16663074
Ref: c-api/long c PyLong_FromInt3216663333
Ref: 3a016663333
Ref: c-api/long c PyLong_FromInt6416663404
Ref: 3a116663404
Ref: c-api/long c PyLong_FromUnsignedLongLong16663730
Ref: 181d16663730
Ref: c-api/long c PyLong_FromUInt3216664025
Ref: 3a216664025
Ref: c-api/long c PyLong_FromUInt6416664098
Ref: 3a316664098
Ref: c-api/long c PyLong_FromDouble16664428
Ref: b3216664428
Ref: c-api/long c PyLong_FromString16664688
Ref: 4eae16664688
Ref: c-api/long c PyLong_FromUnicodeObject16666073
Ref: aad16666073
Ref: c-api/long c PyLong_FromVoidPtr16666338
Ref: 4eaf16666338
Ref: c-api/long c PyLong_FromNativeBytes16666648
Ref: 5fb16666648
Ref: c-api/long c PyLong_FromUnsignedNativeBytes16667392
Ref: 5fc16667392
Ref: c-api/long c PyLong_AsLong16668001
Ref: 5f916668001
Ref: c-api/long c PyLong_AS_LONG16668675
Ref: 50c916668675
Ref: c-api/long c PyLong_AsInt16669030
Ref: 5f816669030
Ref: c-api/long c PyLong_AsLongAndOverflow16669281
Ref: 146216669281
Ref: c-api/long c PyLong_AsLongLong16670198
Ref: 4ea816670198
Ref: c-api/long c PyLong_AsLongLongAndOverflow16670891
Ref: 146116670891
Ref: c-api/long c PyLong_AsSsize_t16671857
Ref: 4eaa16671857
Ref: c-api/long c PyLong_AsUnsignedLong16672337
Ref: 4eab16672337
Ref: c-api/long c PyLong_AsSize_t16672791
Ref: 4ea916672791
Ref: c-api/long c PyLong_AsUnsignedLongLong16673242
Ref: 149016673242
Ref: c-api/long c PyLong_AsUnsignedLongMask16673855
Ref: 4eac16673855
Ref: c-api/long c PyLong_AsUnsignedLongLongMask16674610
Ref: 1c8116674610
Ref: c-api/long c PyLong_AsInt3216675400
Ref: 39c16675400
Ref: c-api/long c PyLong_AsInt6416675467
Ref: 39d16675467
Ref: c-api/long c PyLong_AsUInt3216676108
Ref: 39e16676108
Ref: c-api/long c PyLong_AsUInt6416676177
Ref: 39f16676177
Ref: c-api/long c PyLong_AsDouble16676904
Ref: 18c516676904
Ref: c-api/long c PyLong_AsVoidPtr16677318
Ref: 4ead16677318
Ref: c-api/long c PyLong_AsNativeBytes16677787
Ref: 5fa16677787
Ref: c-api/long c Py_ASNATIVEBYTES_DEFAULTS16681990
Ref: 50ca16681990
Ref: c-api/long c Py_ASNATIVEBYTES_BIG_ENDIAN16682168
Ref: 50cb16682168
Ref: c-api/long c Py_ASNATIVEBYTES_LITTLE_ENDIAN16682346
Ref: 50cc16682346
Ref: c-api/long c Py_ASNATIVEBYTES_NATIVE_ENDIAN16682521
Ref: 50cd16682521
Ref: c-api/long c Py_ASNATIVEBYTES_UNSIGNED_BUFFER16682698
Ref: 50ce16682698
Ref: c-api/long c Py_ASNATIVEBYTES_REJECT_NEGATIVE16682873
Ref: 50cf16682873
Ref: c-api/long c Py_ASNATIVEBYTES_ALLOW_INDEX16683044
Ref: 50d016683044
Ref: c-api/long c PyLong_GetSign16684993
Ref: 39716684993
Ref: c-api/long c PyLong_IsPositive16685416
Ref: 39816685416
Ref: c-api/long c PyLong_IsNegative16685761
Ref: 39916685761
Ref: c-api/long c PyLong_IsZero16686106
Ref: 39a16686106
Ref: c-api/long c PyLong_GetInfo16686423
Ref: 4eb016686423
Ref: c-api/long c PyUnstable_Long_IsCompact16686847
Ref: 79b16686847
Ref: c-api/long c PyUnstable_Long_CompactValue16687669
Ref: 79c16687669
Node: Export API16688200
Ref: c-api/long export-api16688288
Ref: 50d116688288
Ref: c-api/long c PyLongLayout16688356
Ref: 50d216688356
Ref: c-api/long c PyLongLayout bits_per_digit16688817
Ref: 50d316688817
Ref: c-api/long c PyLongLayout digit_size16688979
Ref: 50d416688979
Ref: c-api/long c PyLongLayout digits_order16689120
Ref: 50d516689120
Ref: c-api/long c PyLongLayout digit_endianness16689301
Ref: 50d616689301
Ref: c-api/long c PyLong_GetNativeLayout16689517
Ref: 3a416689517
Ref: c-api/long c PyLongExport16689986
Ref: 50d716689986
Ref: c-api/long c PyLongExport value16690339
Ref: 50d916690339
Ref: c-api/long c PyLongExport negative16690509
Ref: 50da16690509
Ref: c-api/long c PyLongExport ndigits16690675
Ref: 50db16690675
Ref: c-api/long c PyLongExport digits16690848
Ref: 50d816690848
Ref: c-api/long c PyLong_Export16690954
Ref: 3a516690954
Ref: c-api/long c PyLong_FreeExport16691590
Ref: 3a616691590
Node: PyLongWriter API16691891
Ref: c-api/long pylongwriter-api16691979
Ref: 50dc16691979
Ref: c-api/long c PyLongWriter16692128
Ref: 50dd16692128
Ref: c-api/long c PyLongWriter_Create16692328
Ref: 3a716692328
Ref: c-api/long c PyLongWriter_Finish16693452
Ref: 3a816693452
Ref: c-api/long c PyLongWriter_Discard16693983
Ref: 3a916693983
Node: Objetos Booleanos16694283
Ref: c-api/bool doc16694415
Ref: 50de16694415
Ref: c-api/bool boolean-objects16694415
Ref: 50df16694415
Ref: c-api/bool boolobjects16694415
Ref: 50e016694415
Ref: c-api/bool no-color16694415
Ref: 50e116694415
Ref: c-api/bool c PyBool_Type16694760
Ref: 4df416694760
Ref: c-api/bool c PyBool_Check16695007
Ref: 50e416695007
Ref: c-api/bool c Py_False16695163
Ref: 50e216695163
Ref: c-api/bool c Py_True16695390
Ref: 50e316695390
Ref: c-api/bool c Py_RETURN_FALSE16695609
Ref: 166416695609
Ref: c-api/bool c Py_RETURN_TRUE16695692
Ref: 166316695692
Ref: c-api/bool c PyBool_FromLong16695773
Ref: 4df316695773
Node: Objetos de ponto flutuante16696015
Ref: c-api/float doc16696157
Ref: 50e516696157
Ref: c-api/float floating-point-objects16696157
Ref: 50e616696157
Ref: c-api/float floatobjects16696157
Ref: 50e716696157
Ref: c-api/float no-color16696157
Ref: 50e816696157
Ref: c-api/float c PyFloatObject16696228
Ref: 50e916696228
Ref: c-api/float c PyFloat_Type16696359
Ref: 4e9116696359
Ref: c-api/float c PyFloat_Check16696622
Ref: 50ea16696622
Ref: c-api/float c PyFloat_CheckExact16696829
Ref: 50eb16696829
Ref: c-api/float c PyFloat_FromString16697042
Ref: 4e9016697042
Ref: c-api/float c PyFloat_FromDouble16697311
Ref: 4e8f16697311
Ref: c-api/float c PyFloat_AsDouble16697541
Ref: c5316697541
Ref: c-api/float c PyFloat_AS_DOUBLE16698221
Ref: 50ec16698221
Ref: c-api/float c PyFloat_GetInfo16698389
Ref: 15e116698389
Ref: c-api/float c PyFloat_GetMax16698748
Ref: 15df16698748
Ref: c-api/float c PyFloat_GetMin16698922
Ref: 15e016698922
Node: As funções Pack e Unpack16699136
Ref: c-api/float pack-and-unpack-functions16699225
Ref: 50ed16699225
Node: Funções Pack16700919
Ref: c-api/float pack-functions16701024
Ref: 50ee16701024
Ref: c-api/float c PyFloat_Pack216701883
Ref: 95e16701883
Ref: c-api/float c PyFloat_Pack416702031
Ref: 95f16702031
Ref: c-api/float c PyFloat_Pack816702182
Ref: 96016702182
Node: Funções de Unpack16702332
Ref: c-api/float unpack-functions16702437
Ref: 50ef16702437
Ref: c-api/float c PyFloat_Unpack216703290
Ref: 96116703290
Ref: c-api/float c PyFloat_Unpack416703441
Ref: 96216703441
Ref: c-api/float c PyFloat_Unpack816703595
Ref: 96316703595
Node: Objetos números complexos16703747
Ref: c-api/complex doc16703863
Ref: 50f016703863
Ref: c-api/complex complex-number-objects16703863
Ref: 50f116703863
Ref: c-api/complex complexobjects16703863
Ref: 50f216703863
Ref: c-api/complex no-color16703863
Ref: 50f316703863
Node: Números complexos como estruturas C16704361
Ref: c-api/complex complex-numbers-as-c-structures16704507
Ref: 50f416704507
Ref: c-api/complex c Py_complex16704811
Ref: 500916704811
Ref: c-api/complex c Py_complex real16705102
Ref: 50f516705102
Ref: c-api/complex c Py_complex imag16705133
Ref: 50f616705133
Ref: c-api/complex c _Py_c_sum16705307
Ref: 50f716705307
Ref: c-api/complex c _Py_c_diff16705513
Ref: 50f816705513
Ref: c-api/complex c _Py_c_neg16705729
Ref: 50f916705729
Ref: c-api/complex c _Py_c_prod16705910
Ref: 50fa16705910
Ref: c-api/complex c _Py_c_quot16706120
Ref: 50fb16706120
Ref: c-api/complex c _Py_c_pow16706435
Ref: 184a16706435
Node: Números complexos como objetos Python16706841
Ref: c-api/complex complex-numbers-as-python-objects16706987
Ref: 50fc16706987
Ref: c-api/complex c PyComplexObject16707083
Ref: 50fd16707083
Ref: c-api/complex c PyComplex_Type16707214
Ref: 4e2116707214
Ref: c-api/complex c PyComplex_Check16707476
Ref: 50fe16707476
Ref: c-api/complex c PyComplex_CheckExact16707689
Ref: 50ff16707689
Ref: c-api/complex c PyComplex_FromCComplex16707913
Ref: 510016707913
Ref: c-api/complex c PyComplex_FromDoubles16708211
Ref: 4e2016708211
Ref: c-api/complex c PyComplex_RealAsDouble16708541
Ref: 194e16708541
Ref: c-api/complex c PyComplex_ImagAsDouble16709300
Ref: 194f16709300
Ref: c-api/complex c PyComplex_AsCComplex16710081
Ref: 15e216710081
Node: Objetos Sequência16710963
Ref: c-api/concrete sequence-objects16711091
Ref: 510116711091
Ref: c-api/concrete sequenceobjects16711091
Ref: 510216711091
Node: Objetos Bytes16711488
Ref: c-api/bytes doc16711583
Ref: 510316711583
Ref: c-api/bytes bytes-objects16711583
Ref: 510416711583
Ref: c-api/bytes bytesobjects16711583
Ref: 510516711583
Ref: c-api/bytes c PyBytesObject16711766
Ref: 98a16711766
Ref: c-api/bytes c PyBytes_Type16711896
Ref: 4e0116711896
Ref: c-api/bytes c PyBytes_Check16712145
Ref: 159116712145
Ref: c-api/bytes c PyBytes_CheckExact16712354
Ref: 510616712354
Ref: c-api/bytes c PyBytes_FromString16712568
Ref: 4dff16712568
Ref: c-api/bytes c PyBytes_FromStringAndSize16712930
Ref: 159216712930
Ref: c-api/bytes c PyBytes_FromFormat16713354
Ref: 1cc116713354
Ref: c-api/bytes c PyBytes_FromFormatV16717400
Ref: 4dfd16717400
Ref: c-api/bytes c PyBytes_FromObject16717689
Ref: 4dfe16717689
Ref: c-api/bytes c PyBytes_Size16717936
Ref: 4e0016717936
Ref: c-api/bytes c PyBytes_GET_SIZE16718104
Ref: 510716718104
Ref: c-api/bytes c PyBytes_AsString16718250
Ref: a7d16718250
Ref: c-api/bytes c PyBytes_AS_STRING16718899
Ref: 510816718899
Ref: c-api/bytes c PyBytes_AsStringAndSize16719042
Ref: 4dfa16719042
Ref: c-api/bytes c PyBytes_Concat16720165
Ref: 4dfb16720165
Ref: c-api/bytes c PyBytes_ConcatAndDel16720706
Ref: 4dfc16720706
Ref: c-api/bytes c PyBytes_Join16721094
Ref: 38016721094
Ref: c-api/bytes c _PyBytes_Resize16721776
Ref: 190e16721776
Ref: Objetos Bytes-Footnote-116722604
Ref: Objetos Bytes-Footnote-216722764
Ref: Objetos Bytes-Footnote-316722924
Ref: Objetos Bytes-Footnote-416723084
Ref: Objetos Bytes-Footnote-516723244
Ref: Objetos Bytes-Footnote-616723404
Ref: Objetos Bytes-Footnote-716723564
Ref: Objetos Bytes-Footnote-816723724
Node: Objetos byte array16723884
Ref: c-api/bytearray doc16724012
Ref: 510916724012
Ref: c-api/bytearray byte-array-objects16724012
Ref: 510a16724012
Ref: c-api/bytearray bytearrayobjects16724012
Ref: 510b16724012
Ref: c-api/bytearray no-color16724012
Ref: 510c16724012
Ref: c-api/bytearray c PyByteArrayObject16724067
Ref: 510d16724067
Ref: c-api/bytearray c PyByteArray_Type16724190
Ref: 4df916724190
Node: Macros para verificação de tipo16724536
Ref: c-api/bytearray type-check-macros16724657
Ref: 510e16724657
Ref: c-api/bytearray c PyByteArray_Check16724740
Ref: 510f16724740
Ref: c-api/bytearray c PyByteArray_CheckExact16724961
Ref: 511016724961
Node: Funções diretas da API16725187
Ref: c-api/bytearray direct-api-functions16725323
Ref: 511116725323
Ref: c-api/bytearray c PyByteArray_FromObject16725388
Ref: 159a16725388
Ref: c-api/bytearray c PyByteArray_FromStringAndSize16725711
Ref: 159b16725711
Ref: c-api/bytearray c PyByteArray_Concat16726063
Ref: 4df616726063
Ref: c-api/bytearray c PyByteArray_Size16726396
Ref: 4df816726396
Ref: c-api/bytearray c PyByteArray_AsString16726613
Ref: 4df516726613
Ref: c-api/bytearray c PyByteArray_Resize16726905
Ref: 4df716726905
Node: Macros16727298
Ref: c-api/bytearray macros16727392
Ref: 511216727392
Ref: c-api/bytearray c PyByteArray_AS_STRING16727501
Ref: 511316727501
Ref: c-api/bytearray c PyByteArray_GET_SIZE16727656
Ref: 511416727656
Node: Objetos Unicode e Codecs16727833
Ref: c-api/unicode doc16727960
Ref: 139c16727960
Ref: c-api/unicode no-color16727960
Ref: 511516727960
Ref: c-api/unicode unicode-objects-and-codecs16727960
Ref: 511616727960
Ref: c-api/unicode unicodeobjects16727960
Ref: 511716727960
Node: Objetos Unicode16728147
Ref: c-api/unicode unicode-objects16728247
Ref: 511816728247
Ref: Objetos Unicode-Footnote-116729215
Ref: Objetos Unicode-Footnote-216729257
Node: Tipo Unicode16729299
Ref: c-api/unicode unicode-type16729405
Ref: 511916729405
Ref: c-api/unicode c PyUnicode_Type16729546
Ref: 4f6516729546
Ref: c-api/unicode c PyUnicodeIter_Type16729784
Ref: 4f3616729784
Ref: c-api/unicode c Py_UCS416730041
Ref: 33b16730041
Ref: c-api/unicode c Py_UCS216730066
Ref: 137016730066
Ref: c-api/unicode c Py_UCS116730091
Ref: 136f16730091
Ref: c-api/unicode c PyASCIIObject16730433
Ref: 137116730433
Ref: c-api/unicode c PyCompactUnicodeObject16730464
Ref: 137216730464
Ref: c-api/unicode c PyUnicodeObject16730504
Ref: 98c16730504
Ref: c-api/unicode c PyUnicode_Check16731006
Ref: 511a16731006
Ref: c-api/unicode c PyUnicode_CheckExact16731205
Ref: 511b16731205
Ref: c-api/unicode c PyUnicode_GET_LENGTH16731408
Ref: aa716731408
Ref: c-api/unicode c PyUnicode_1BYTE_DATA16731699
Ref: 137616731699
Ref: c-api/unicode c PyUnicode_2BYTE_DATA16731788
Ref: 137716731788
Ref: c-api/unicode c PyUnicode_4BYTE_DATA16731877
Ref: 137816731877
Ref: c-api/unicode c PyUnicode_1BYTE_KIND16732336
Ref: 137a16732336
Ref: c-api/unicode c PyUnicode_2BYTE_KIND16732370
Ref: 137b16732370
Ref: c-api/unicode c PyUnicode_4BYTE_KIND16732404
Ref: 137c16732404
Ref: c-api/unicode c PyUnicode_KIND16732609
Ref: 137916732609
Ref: c-api/unicode c PyUnicode_DATA16732960
Ref: 137516732960
Ref: c-api/unicode c PyUnicode_WRITE16733211
Ref: 137f16733211
Ref: c-api/unicode c PyUnicode_READ16733874
Ref: 137d16733874
Ref: c-api/unicode c PyUnicode_READ_CHAR16734198
Ref: 137e16734198
Ref: c-api/unicode c PyUnicode_MAX_CHAR_VALUE16734560
Ref: 138016734560
Ref: c-api/unicode c PyUnicode_IsIdentifier16734933
Ref: 1c3d16734933
Ref: c-api/unicode c PyUnicode_IS_ASCII16735372
Ref: 511c16735372
Node: Propriedade de caracteres Unicode16735583
Ref: c-api/unicode unicode-character-properties16735736
Ref: 511d16735736
Ref: c-api/unicode c Py_UNICODE_ISSPACE16736043
Ref: 1ba816736043
Ref: c-api/unicode c Py_UNICODE_ISLOWER16736191
Ref: 511e16736191
Ref: c-api/unicode c Py_UNICODE_ISUPPER16736324
Ref: 511f16736324
Ref: c-api/unicode c Py_UNICODE_ISTITLE16736457
Ref: 512016736457
Ref: c-api/unicode c Py_UNICODE_ISLINEBREAK16736592
Ref: 512116736592
Ref: c-api/unicode c Py_UNICODE_ISDECIMAL16736742
Ref: 512216736742
Ref: c-api/unicode c Py_UNICODE_ISDIGIT16736874
Ref: 512316736874
Ref: c-api/unicode c Py_UNICODE_ISNUMERIC16737007
Ref: 512416737007
Ref: c-api/unicode c Py_UNICODE_ISALPHA16737141
Ref: 512516737141
Ref: c-api/unicode c Py_UNICODE_ISALNUM16737275
Ref: 512616737275
Ref: c-api/unicode c Py_UNICODE_ISPRINTABLE16737411
Ref: 512716737411
Ref: c-api/unicode c Py_UNICODE_TOLOWER16737661
Ref: 512816737661
Ref: c-api/unicode c Py_UNICODE_TOUPPER16737787
Ref: 512916737787
Ref: c-api/unicode c Py_UNICODE_TOTITLE16737913
Ref: 512a16737913
Ref: c-api/unicode c Py_UNICODE_TODECIMAL16738039
Ref: 512b16738039
Ref: c-api/unicode c Py_UNICODE_TODIGIT16738260
Ref: 512c16738260
Ref: c-api/unicode c Py_UNICODE_TONUMERIC16738475
Ref: 512d16738475
Ref: c-api/unicode c Py_UNICODE_IS_SURROGATE16738728
Ref: 512e16738728
Ref: c-api/unicode c Py_UNICODE_IS_HIGH_SURROGATE16738853
Ref: 512f16738853
Ref: c-api/unicode c Py_UNICODE_IS_LOW_SURROGATE16738988
Ref: 513016738988
Ref: c-api/unicode c Py_UNICODE_JOIN_SURROGATES16739121
Ref: 513116739121
Node: Creating and accessing Unicode strings16739514
Ref: c-api/unicode creating-and-accessing-unicode-strings16739670
Ref: 513216739670
Ref: c-api/unicode c PyUnicode_New16739854
Ref: a9f16739854
Ref: c-api/unicode c PyUnicode_FromKindAndData16741300
Ref: 137316741300
Ref: c-api/unicode c PyUnicode_FromStringAndSize16742154
Ref: 4f5d16742154
Ref: c-api/unicode c PyUnicode_FromString16742828
Ref: 4f5c16742828
Ref: c-api/unicode c PyUnicode_FromFormat16743084
Ref: 61f16743084
Ref: c-api/unicode c PyUnicode_FromFormatV16756116
Ref: 78916756116
Ref: c-api/unicode c PyUnicode_FromObject16756403
Ref: 4f5a16756403
Ref: c-api/unicode c PyUnicode_FromOrdinal16756864
Ref: 4f5b16756864
Ref: c-api/unicode c PyUnicode_FromEncodedObject16757212
Ref: 4f5916757212
Ref: c-api/unicode c PyUnicode_Append16758027
Ref: 4f3e16758027
Ref: c-api/unicode c PyUnicode_AppendAndDel16758491
Ref: 4f3f16758491
Ref: c-api/unicode c PyUnicode_BuildEncodingMap16758784
Ref: 19a016758784
Ref: c-api/unicode c PyUnicode_GetDefaultEncoding16759359
Ref: 4f5e16759359
Ref: c-api/unicode c PyUnicode_GetLength16759682
Ref: aa616759682
Ref: c-api/unicode c PyUnicode_CopyCharacters16759985
Ref: aa816759985
Ref: c-api/unicode c PyUnicode_Resize16760584
Ref: 4f6016760584
Ref: c-api/unicode c PyUnicode_Fill16761265
Ref: 138916761265
Ref: c-api/unicode c PyUnicode_WriteChar16761866
Ref: 136e16761866
Ref: c-api/unicode c PyUnicode_ReadChar16762594
Ref: 136d16762594
Ref: c-api/unicode c PyUnicode_Substring16763100
Ref: aa916763100
Ref: c-api/unicode c PyUnicode_AsUCS416763573
Ref: 137416763573
Ref: c-api/unicode c PyUnicode_AsUCS4Copy16764104
Ref: aae16764104
Node: Locale Encoding16764553
Ref: c-api/unicode locale-encoding16764696
Ref: 513416764696
Ref: c-api/unicode c PyUnicode_DecodeLocaleAndSize16764830
Ref: db616764830
Ref: c-api/unicode c PyUnicode_DecodeLocale16766083
Ref: 4f4b16766083
Ref: c-api/unicode c PyUnicode_EncodeLocale16766447
Ref: db716766447
Ref: Locale Encoding-Footnote-116767712
Ref: Locale Encoding-Footnote-216767754
Node: File System Encoding16767796
Ref: c-api/unicode file-system-encoding16767916
Ref: 513516767916
Ref: c-api/unicode c PyUnicode_FSConverter16768277
Ref: f0916768277
Ref: c-api/unicode c PyUnicode_FSDecoder16769551
Ref: 78c16769551
Ref: c-api/unicode c PyUnicode_DecodeFSDefaultAndSize16770670
Ref: 4f4916770670
Ref: c-api/unicode c PyUnicode_DecodeFSDefault16771248
Ref: 19c716771248
Ref: c-api/unicode c PyUnicode_EncodeFSDefault16771704
Ref: 1ce716771704
Ref: File System Encoding-Footnote-116772434
Ref: File System Encoding-Footnote-216772476
Node: wchar_t Support16772518
Ref: c-api/unicode wchar-t-support16772614
Ref: 513616772614
Ref: c-api/unicode c PyUnicode_FromWideChar16772720
Ref: 138816772720
Ref: c-api/unicode c PyUnicode_AsWideChar16773156
Ref: 1ced16773156
Ref: c-api/unicode c PyUnicode_AsWideCharString16774149
Ref: aaf16774149
Node: Built-in Codecs16775287
Ref: c-api/unicode built-in-codecs16775422
Ref: 513716775422
Ref: c-api/unicode builtincodecs16775422
Ref: 513316775422
Node: Generic Codecs16776645
Ref: c-api/unicode generic-codecs16776732
Ref: 513816776732
Ref: c-api/unicode c Py_UNICODE_REPLACEMENT_CHARACTER16776815
Ref: 513916776815
Ref: c-api/unicode c PyUnicode_Decode16777101
Ref: 1c7e16777101
Ref: c-api/unicode c PyUnicode_AsEncodedString16777684
Ref: 4f4116777684
Node: UTF-8 Codecs16778248
Ref: c-api/unicode utf-8-codecs16778357
Ref: 513a16778357
Ref: c-api/unicode c PyUnicode_DecodeUTF816778435
Ref: 4f5516778435
Ref: c-api/unicode c PyUnicode_DecodeUTF8Stateful16778797
Ref: 1a4816778797
Ref: c-api/unicode c PyUnicode_AsUTF8String16779360
Ref: 138a16779360
Ref: c-api/unicode c PyUnicode_AsUTF8AndSize16779826
Ref: a8f16779826
Ref: c-api/unicode c PyUnicode_AsUTF816781145
Ref: 42116781145
Ref: UTF-8 Codecs-Footnote-116781913
Node: UTF-32 Codecs16781966
Ref: c-api/unicode utf-32-codecs16782074
Ref: 513b16782074
Ref: c-api/unicode c PyUnicode_DecodeUTF3216782155
Ref: 4f5116782155
Ref: c-api/unicode c PyUnicode_DecodeUTF32Stateful16783361
Ref: 4f5216783361
Ref: c-api/unicode c PyUnicode_AsUTF32String16784043
Ref: 4f4316784043
Node: UTF-16 Codecs16784445
Ref: c-api/unicode utf-16-codecs16784553
Ref: 513c16784553
Ref: c-api/unicode c PyUnicode_DecodeUTF1616784634
Ref: 4f4f16784634
Ref: c-api/unicode c PyUnicode_DecodeUTF16Stateful16785924
Ref: 4f5016785924
Ref: c-api/unicode c PyUnicode_AsUTF16String16786615
Ref: 4f4216786615
Node: UTF-7 Codecs16787017
Ref: c-api/unicode utf-7-codecs16787133
Ref: 513d16787133
Ref: c-api/unicode c PyUnicode_DecodeUTF716787211
Ref: 4f5316787211
Ref: c-api/unicode c PyUnicode_DecodeUTF7Stateful16787573
Ref: 4f5416787573
Node: Unicode-Escape Codecs16788138
Ref: c-api/unicode unicode-escape-codecs16788266
Ref: 513e16788266
Ref: c-api/unicode c PyUnicode_DecodeUnicodeEscape16788377
Ref: 4f5616788377
Ref: c-api/unicode c PyUnicode_AsUnicodeEscapeString16788757
Ref: 138b16788757
Node: Raw-Unicode-Escape Codecs16789130
Ref: c-api/unicode raw-unicode-escape-codecs16789260
Ref: 513f16789260
Ref: c-api/unicode c PyUnicode_DecodeRawUnicodeEscape16789383
Ref: 4f4e16789383
Ref: c-api/unicode c PyUnicode_AsRawUnicodeEscapeString16789770
Ref: 138c16789770
Node: Latin-1 Codecs16790150
Ref: c-api/unicode latin-1-codecs16790271
Ref: 514016790271
Ref: c-api/unicode c PyUnicode_DecodeLatin116790468
Ref: 4f4a16790468
Ref: c-api/unicode c PyUnicode_AsLatin1String16790834
Ref: 138d16790834
Node: ASCII Codecs16791198
Ref: c-api/unicode ascii-codecs16791314
Ref: 514116791314
Ref: c-api/unicode c PyUnicode_DecodeASCII16791462
Ref: 4f4616791462
Ref: c-api/unicode c PyUnicode_AsASCIIString16791825
Ref: 138e16791825
Node: Character Map Codecs16792186
Ref: c-api/unicode character-map-codecs16792311
Ref: 514216792311
Ref: c-api/unicode c PyUnicode_DecodeCharmap16792791
Ref: 4f4716792791
Ref: c-api/unicode c PyUnicode_AsCharmapString16793686
Ref: 4f4016793686
Ref: c-api/unicode c PyUnicode_Translate16794468
Ref: 4f6416794468
Node: MBCS codecs for Windows16795369
Ref: c-api/unicode mbcs-codecs-for-windows16795473
Ref: 514316795473
Ref: c-api/unicode c PyUnicode_DecodeMBCS16795833
Ref: 4f4c16795833
Ref: c-api/unicode c PyUnicode_DecodeMBCSStateful16796226
Ref: 4f4d16796226
Ref: c-api/unicode c PyUnicode_DecodeCodePageStateful16796793
Ref: 4f4816796793
Ref: c-api/unicode c PyUnicode_AsMBCSString16797209
Ref: 138f16797209
Ref: c-api/unicode c PyUnicode_EncodeCodePage16797605
Ref: 139016797605
Node: Methods and Slot Functions16798099
Ref: c-api/unicode methods-and-slot-functions16798234
Ref: 514416798234
Ref: c-api/unicode unicodemethodsandslots16798234
Ref: 514516798234
Ref: c-api/unicode c PyUnicode_Concat16798557
Ref: 139d16798557
Ref: c-api/unicode c PyUnicode_Split16798788
Ref: 4f6216798788
Ref: c-api/unicode c PyUnicode_RSplit16799413
Ref: 17fb16799413
Ref: c-api/unicode c PyUnicode_Splitlines16799831
Ref: 4f6316799831
Ref: c-api/unicode c PyUnicode_Partition16800247
Ref: 17fc16800247
Ref: c-api/unicode c PyUnicode_RPartition16800877
Ref: 17fd16800877
Ref: c-api/unicode c PyUnicode_Join16801434
Ref: 139e16801434
Ref: c-api/unicode c PyUnicode_Tailmatch16801719
Ref: aab16801719
Ref: c-api/unicode c PyUnicode_Find16802177
Ref: 4f5716802177
Ref: c-api/unicode c PyUnicode_FindChar16802787
Ref: aac16802787
Ref: c-api/unicode c PyUnicode_Count16803571
Ref: 4f4516803571
Ref: c-api/unicode c PyUnicode_Replace16803890
Ref: 4f5f16803890
Ref: c-api/unicode c PyUnicode_Compare16804312
Ref: aaa16804312
Ref: c-api/unicode c PyUnicode_Equal16804760
Ref: 3af16804760
Ref: c-api/unicode c PyUnicode_EqualToUTF8AndSize16805470
Ref: 60d16805470
Ref: c-api/unicode c PyUnicode_EqualToUTF816806079
Ref: 60e16806079
Ref: c-api/unicode c PyUnicode_CompareWithASCIIString16806468
Ref: 146316806468
Ref: c-api/unicode c PyUnicode_RichCompare16806969
Ref: 4f6116806969
Ref: c-api/unicode c PyUnicode_Format16807639
Ref: 4f5816807639
Ref: c-api/unicode c PyUnicode_Contains16807923
Ref: 4f4416807923
Ref: c-api/unicode c PyUnicode_InternInPlace16808258
Ref: aa416808258
Ref: c-api/unicode c PyUnicode_InternFromString16809634
Ref: 18d316809634
Ref: c-api/unicode c PyUnicode_CHECK_INTERNED16810484
Ref: 514616810484
Node: PyUnicodeWriter16811016
Ref: c-api/unicode pyunicodewriter16811150
Ref: 514716811150
Ref: c-api/unicode c PyUnicodeWriter16811322
Ref: 3b016811322
Ref: c-api/unicode c PyUnicodeWriter_Create16811534
Ref: 3b116811534
Ref: c-api/unicode c PyUnicodeWriter_Finish16811888
Ref: 3b416811888
Ref: c-api/unicode c PyUnicodeWriter_Discard16812186
Ref: 3b316812186
Ref: c-api/unicode c PyUnicodeWriter_WriteChar16812452
Ref: 3b716812452
Ref: c-api/unicode c PyUnicodeWriter_WriteUTF816812725
Ref: 3bc16812725
Ref: c-api/unicode c PyUnicodeWriter_WriteASCII16813251
Ref: 3b616813251
Ref: c-api/unicode c PyUnicodeWriter_WriteWideChar16813821
Ref: 3bd16813821
Ref: c-api/unicode c PyUnicodeWriter_WriteUCS416814243
Ref: 3bb16814243
Ref: c-api/unicode c PyUnicodeWriter_WriteStr16814569
Ref: 3b916814569
Ref: c-api/unicode c PyUnicodeWriter_WriteRepr16814872
Ref: 3b816814872
Ref: c-api/unicode c PyUnicodeWriter_WriteSubstring16815177
Ref: 3ba16815177
Ref: c-api/unicode c PyUnicodeWriter_Format16815683
Ref: 3b516815683
Ref: c-api/unicode c PyUnicodeWriter_DecodeUTF8Stateful16816007
Ref: 3b216816007
Node: Deprecated API16816943
Ref: c-api/unicode deprecated-api16817042
Ref: 514816817042
Ref: c-api/unicode c Py_UNICODE16817125
Ref: 3dd16817125
Ref: c-api/unicode c PyUnicode_READY16817613
Ref: 43116817613
Ref: c-api/unicode c PyUnicode_IS_READY16818050
Ref: 514916818050
Node: Objeto tupla16818465
Ref: c-api/tuple doc16818605
Ref: 514a16818605
Ref: c-api/tuple no-color16818605
Ref: 514b16818605
Ref: c-api/tuple tuple-objects16818605
Ref: 514c16818605
Ref: c-api/tuple tupleobjects16818605
Ref: 514d16818605
Ref: c-api/tuple c PyTupleObject16818650
Ref: 4ff016818650
Ref: c-api/tuple c PyTuple_Type16818768
Ref: 4f2316818768
Ref: c-api/tuple c PyTuple_Check16819014
Ref: 514e16819014
Ref: c-api/tuple c PyTuple_CheckExact16819201
Ref: 514f16819201
Ref: c-api/tuple c PyTuple_New16819400
Ref: 63216819400
Ref: c-api/tuple c PyTuple_Pack16819662
Ref: 4f2116819662
Ref: c-api/tuple c PyTuple_Size16820123
Ref: 4f2216820123
Ref: c-api/tuple c PyTuple_GET_SIZE16820371
Ref: 515016820371
Ref: c-api/tuple c PyTuple_GetItem16820512
Ref: 4d5816820512
Ref: c-api/tuple c PyTuple_GET_ITEM16821155
Ref: 515116821155
Ref: c-api/tuple c PyTuple_GetSlice16821394
Ref: 4f2016821394
Ref: c-api/tuple c PyTuple_SetItem16821843
Ref: 4d5916821843
Ref: c-api/tuple c PyTuple_SET_ITEM16822358
Ref: 62216822358
Ref: c-api/tuple c _PyTuple_Resize16823305
Ref: 16f916823305
Node: Objetos sequência de estrutura16824252
Ref: c-api/tuple id116824379
Ref: 515216824379
Ref: c-api/tuple struct-sequence-objects16824379
Ref: 13bb16824379
Ref: c-api/tuple c PyStructSequence_NewType16824755
Ref: 4f1316824755
Ref: c-api/tuple c PyStructSequence_InitType16825208
Ref: 11f916825208
Ref: c-api/tuple c PyStructSequence_InitType216825400
Ref: 11f816825400
Ref: c-api/tuple c PyStructSequence_Desc16825693
Ref: da816825693
Ref: c-api/tuple c PyStructSequence_Desc name16825896
Ref: 515316825896
Ref: c-api/tuple c PyStructSequence_Desc doc16826069
Ref: 515416826069
Ref: c-api/tuple c PyStructSequence_Desc fields16826178
Ref: 515516826178
Ref: c-api/tuple c PyStructSequence_Desc n_in_sequence16826342
Ref: 515616826342
Ref: c-api/tuple c PyStructSequence_Field16826470
Ref: da716826470
Ref: c-api/tuple c PyStructSequence_Field name16826917
Ref: 515716826917
Ref: c-api/tuple c PyStructSequence_Field doc16827133
Ref: 515816827133
Ref: c-api/tuple c PyStructSequence_UnnamedField16827223
Ref: b6f16827223
Ref: c-api/tuple c PyStructSequence_New16827489
Ref: 4f1216827489
Ref: c-api/tuple c PyStructSequence_GetItem16827832
Ref: 4f1116827832
Ref: c-api/tuple c PyStructSequence_GET_ITEM16828281
Ref: 515916828281
Ref: c-api/tuple c PyStructSequence_SetItem16828608
Ref: 4f1416828608
Ref: c-api/tuple c PyStructSequence_SET_ITEM16829178
Ref: 515a16829178
Node: Objeto List16829456
Ref: c-api/list doc16829562
Ref: 515b16829562
Ref: c-api/list list-objects16829562
Ref: 515c16829562
Ref: c-api/list listobjects16829562
Ref: 515d16829562
Ref: c-api/list no-color16829562
Ref: 515e16829562
Ref: c-api/list c PyListObject16829605
Ref: 506716829605
Ref: c-api/list c PyList_Type16829722
Ref: 4d7d16829722
Ref: c-api/list c PyList_Check16829972
Ref: 515f16829972
Ref: c-api/list c PyList_CheckExact16830158
Ref: 516016830158
Ref: c-api/list c PyList_New16830356
Ref: 4dd416830356
Ref: c-api/list c PyList_Size16831191
Ref: 160b16831191
Ref: c-api/list c PyList_GET_SIZE16831423
Ref: 516116831423
Ref: c-api/list c PyList_GetItemRef16831570
Ref: 5f216831570
Ref: c-api/list c PyList_GetItem16832118
Ref: 5f316832118
Ref: c-api/list c PyList_GET_ITEM16832448
Ref: 4deb16832448
Ref: c-api/list c PyList_SetItem16832666
Ref: 181b16832666
Ref: c-api/list c PyList_SET_ITEM16833193
Ref: 62316833193
Ref: c-api/list c PyList_Insert16833915
Ref: 181a16833915
Ref: c-api/list c PyList_Append16834274
Ref: 4ea216834274
Ref: c-api/list c PyList_GetSlice16834588
Ref: 4ea416834588
Ref: c-api/list c PyList_SetSlice16835031
Ref: 4ea616835031
Ref: c-api/list c PyList_Extend16835554
Ref: 5f416835554
Ref: c-api/list c PyList_Clear16836010
Ref: 5f516836010
Ref: c-api/list c PyList_Sort16836402
Ref: 4ea716836402
Ref: c-api/list c PyList_Reverse16836658
Ref: 4ea516836658
Ref: c-api/list c PyList_AsTuple16836921
Ref: 4ea316836921
Node: Coleções16837178
Ref: c-api/concrete container-objects16837304
Ref: 516216837304
Ref: c-api/concrete mapobjects16837304
Ref: 516316837304
Node: Objetos dicionários16837387
Ref: c-api/dict doc16837473
Ref: 516416837473
Ref: c-api/dict dictionary-objects16837473
Ref: 516516837473
Ref: c-api/dict dictobjects16837473
Ref: 516616837473
Ref: c-api/dict c PyDictObject16837531
Ref: 64316837531
Ref: c-api/dict c PyDict_Type16837651
Ref: 4e2f16837651
Ref: c-api/dict c PyDict_Check16837906
Ref: 50a316837906
Ref: c-api/dict c PyDict_CheckExact16838104
Ref: 516716838104
Ref: c-api/dict c PyDict_New16838319
Ref: 4e2d16838319
Ref: c-api/dict c PyDictProxy_New16838521
Ref: 4e2516838521
Ref: c-api/dict c PyDict_Clear16838943
Ref: 4e2616838943
Ref: c-api/dict c PyDict_Contains16839104
Ref: 5d416839104
Ref: c-api/dict c PyDict_ContainsString16839461
Ref: 5d316839461
Ref: c-api/dict c PyDict_Copy16839750
Ref: 65616839750
Ref: c-api/dict c PyDict_SetItem16839973
Ref: 4d5a16839973
Ref: c-api/dict c PyDict_SetItemString16840388
Ref: 18d416840388
Ref: c-api/dict c PyDict_DelItem16840709
Ref: 4e2716840709
Ref: c-api/dict c PyDict_DelItemString16841121
Ref: 4e2816841121
Ref: c-api/dict c PyDict_GetItemRef16841417
Ref: 5d616841417
Ref: c-api/dict c PyDict_GetItem16842104
Ref: 61c16842104
Ref: c-api/dict c PyDict_GetItemWithError16842909
Ref: 5d716842909
Ref: c-api/dict c PyDict_GetItemString16843347
Ref: 61d16843347
Ref: c-api/dict c PyDict_GetItemStringRef16844102
Ref: 41e16844102
Ref: c-api/dict c PyDict_SetDefault16844483
Ref: 5da16844483
Ref: c-api/dict c PyDict_SetDefaultRef16845103
Ref: 5d916845103
Ref: c-api/dict c PyDict_Pop16846273
Ref: 41f16846273
Ref: c-api/dict c PyDict_PopString16847054
Ref: 5db16847054
Ref: c-api/dict c PyDict_Items16847357
Ref: 4e2916847357
Ref: c-api/dict c PyDict_Keys16847588
Ref: 4e2a16847588
Ref: c-api/dict c PyDict_Values16847819
Ref: 4e3116847819
Ref: c-api/dict c PyDict_Size16848057
Ref: 4e2e16848057
Ref: c-api/dict c PyDict_Next16848274
Ref: 18d616848274
Ref: c-api/dict c PyDict_Merge16851248
Ref: 4e2b16851248
Ref: c-api/dict c PyDict_Update16851934
Ref: 4e3016851934
Ref: c-api/dict c PyDict_MergeFromSeq216852407
Ref: 4e2c16852407
Ref: c-api/dict c PyDict_AddWatcher16853204
Ref: 3cd16853204
Ref: c-api/dict c PyDict_ClearWatcher16853618
Ref: 516916853618
Ref: c-api/dict c PyDict_Watch16853966
Ref: 77916853966
Ref: c-api/dict c PyDict_Unwatch16854338
Ref: 516a16854338
Ref: c-api/dict c PyDict_WatchEvent16854806
Ref: 516b16854806
Ref: c-api/dict c PyDict_WatchCallback16855134
Ref: 516c16855134
Node: Objeto Set16857729
Ref: c-api/set doc16857815
Ref: 516d16857815
Ref: c-api/set no-color16857815
Ref: 516e16857815
Ref: c-api/set set-objects16857815
Ref: 516f16857815
Ref: c-api/set setobjects16857815
Ref: 517016857815
Ref: c-api/set c PySetObject16858597
Ref: 517116858597
Ref: c-api/set c PySet_Type16859311
Ref: 4f0a16859311
Ref: c-api/set c PyFrozenSet_Type16859508
Ref: 4e9216859508
Ref: c-api/set c PySet_Check16859910
Ref: 517216859910
Ref: c-api/set c PyFrozenSet_Check16860092
Ref: 517316860092
Ref: c-api/set c PyAnySet_Check16860286
Ref: 517416860286
Ref: c-api/set c PySet_CheckExact16860508
Ref: a9316860508
Ref: c-api/set c PyAnySet_CheckExact16860735
Ref: 517516860735
Ref: c-api/set c PyFrozenSet_CheckExact16860970
Ref: 517616860970
Ref: c-api/set c PySet_New16861175
Ref: 163516861175
Ref: c-api/set c PyFrozenSet_New16861734
Ref: 163616861734
Ref: c-api/set c PySet_Size16862375
Ref: 163a16862375
Ref: c-api/set c PySet_GET_SIZE16862749
Ref: 517716862749
Ref: c-api/set c PySet_Contains16862898
Ref: 163916862898
Ref: c-api/set c PySet_Add16863488
Ref: 163716863488
Ref: c-api/set c PySet_Discard16864393
Ref: 163816864393
Ref: c-api/set c PySet_Pop16865055
Ref: 4f0916865055
Ref: c-api/set c PySet_Clear16865514
Ref: 4f0816865514
Node: Objetos Função16865831
Ref: c-api/concrete function-objects16865953
Ref: 517816865953
Ref: c-api/concrete otherobjects16865953
Ref: 517916865953
Node: Objetos Função<2>16866247
Ref: c-api/function doc16866360
Ref: 517a16866360
Ref: c-api/function function-objects16866360
Ref: 517b16866360
Ref: c-api/function id116866360
Ref: 517c16866360
Ref: c-api/function c PyFunctionObject16866478
Ref: 77816866478
Ref: c-api/function c PyFunction_Type16866555
Ref: 517d16866555
Ref: c-api/function c PyFunction_Check16866790
Ref: 517e16866790
Ref: c-api/function c PyFunction_New16867026
Ref: 517f16867026
Ref: c-api/function c PyFunction_NewWithQualName16867720
Ref: 518016867720
Ref: c-api/function c PyFunction_GetCode16868259
Ref: 518116868259
Ref: c-api/function c PyFunction_GetGlobals16868444
Ref: 518216868444
Ref: c-api/function c PyFunction_GetModule16868636
Ref: 518316868636
Ref: c-api/function c PyFunction_GetDefaults16869071
Ref: 518416869071
Ref: c-api/function c PyFunction_SetDefaults16869330
Ref: 518516869330
Ref: c-api/function c PyFunction_SetVectorcall16869619
Ref: 77716869619
Ref: c-api/function c PyFunction_GetKwDefaults16869960
Ref: 518616869960
Ref: c-api/function c PyFunction_GetClosure16870243
Ref: 518716870243
Ref: c-api/function c PyFunction_SetClosure16870486
Ref: 518816870486
Ref: c-api/function c PyFunction_GetAnnotations16870784
Ref: 1a6316870784
Ref: c-api/function c PyFunction_SetAnnotations16871028
Ref: 518916871028
Ref: c-api/function c PyFunction_GET_CODE16871317
Ref: 518a16871317
Ref: c-api/function c PyFunction_GET_GLOBALS16871390
Ref: 518b16871390
Ref: c-api/function c PyFunction_GET_MODULE16871476
Ref: 518c16871476
Ref: c-api/function c PyFunction_GET_DEFAULTS16871551
Ref: 518d16871551
Ref: c-api/function c PyFunction_GET_KW_DEFAULTS16871638
Ref: 518e16871638
Ref: c-api/function c PyFunction_GET_CLOSURE16871728
Ref: 518f16871728
Ref: c-api/function c PyFunction_GET_ANNOTATIONS16871814
Ref: 519016871814
Ref: c-api/function c PyFunction_AddWatcher16872208
Ref: 519116872208
Ref: c-api/function c PyFunction_ClearWatcher16872631
Ref: 519216872631
Ref: c-api/function c PyFunction_WatchEvent16873039
Ref: 519316873039
Ref: c-api/function c PyFunction_WatchCallback16873443
Ref: 519416873443
Node: Objetos de Método de Instância16875906
Ref: c-api/method doc16876046
Ref: 519516876046
Ref: c-api/method instance-method-objects16876046
Ref: 519616876046
Ref: c-api/method instancemethod-objects16876046
Ref: 519716876046
Ref: c-api/method no-color16876046
Ref: 519816876046
Ref: c-api/method c PyInstanceMethod_Type16876353
Ref: 519916876353
Ref: c-api/method c PyInstanceMethod_Check16876561
Ref: 519a16876561
Ref: c-api/method c PyInstanceMethod_New16876821
Ref: 519b16876821
Ref: c-api/method c PyInstanceMethod_Function16877136
Ref: 519c16877136
Ref: c-api/method c PyInstanceMethod_GET_FUNCTION16877345
Ref: 519d16877345
Node: Objetos método<2>16877590
Ref: c-api/method id116877725
Ref: 519e16877725
Ref: c-api/method method-objects16877725
Ref: 519f16877725
Ref: c-api/method c PyMethod_Type16878009
Ref: 51a016878009
Ref: c-api/method c PyMethod_Check16878228
Ref: 51a116878228
Ref: c-api/method c PyMethod_New16878458
Ref: 51a216878458
Ref: c-api/method c PyMethod_Function16878856
Ref: 51a316878856
Ref: c-api/method c PyMethod_GET_FUNCTION16879037
Ref: 51a416879037
Ref: c-api/method c PyMethod_Self16879263
Ref: 51a516879263
Ref: c-api/method c PyMethod_GET_SELF16879438
Ref: 51a616879438
Node: Objeto célula16879646
Ref: c-api/cell doc16879767
Ref: 51a716879767
Ref: c-api/cell cell-objects16879767
Ref: 90516879767
Ref: c-api/cell id116879767
Ref: 51a816879767
Ref: c-api/cell no-color16879767
Ref: 51a916879767
Ref: c-api/cell c PyCellObject16880467
Ref: 51aa16880467
Ref: c-api/cell c PyCell_Type16880546
Ref: 51ab16880546
Ref: c-api/cell c PyCell_Check16880660
Ref: 51ac16880660
Ref: c-api/cell c PyCell_New16880836
Ref: 51ad16880836
Ref: c-api/cell c PyCell_Get16881043
Ref: 51ae16881043
Ref: c-api/cell c PyCell_GET16881314
Ref: 51af16881314
Ref: c-api/cell c PyCell_Set16881545
Ref: 51b016881545
Ref: c-api/cell c PyCell_SET16881946
Ref: aa116881946
Node: Objetos código<3>16882253
Ref: c-api/code doc16882388
Ref: 51b116882388
Ref: c-api/code code-objects16882388
Ref: 51b216882388
Ref: c-api/code codeobjects16882388
Ref: 7c716882388
Ref: c-api/code no-color16882388
Ref: 51b316882388
Ref: c-api/code c PyCodeObject16882618
Ref: 97016882618
Ref: c-api/code c PyCode_Type16882798
Ref: 51b416882798
Ref: c-api/code c PyCode_Check16882966
Ref: 51b516882966
Ref: c-api/code c PyCode_GetNumFree16883122
Ref: 51b616883122
Ref: c-api/code c PyUnstable_Code_GetFirstFree16883308
Ref: 61b16883308
Ref: c-api/code c PyUnstable_Code_New16883906
Ref: 51b716883906
Ref: c-api/code c PyUnstable_Code_NewWithPosOnlyArgs16885422
Ref: 51b816885422
Ref: c-api/code c PyCode_NewEmpty16886707
Ref: 154b16886707
Ref: c-api/code c PyCode_Addr2Line16887091
Ref: a7f16887091
Ref: c-api/code c PyCode_Addr2Location16887509
Ref: 7c616887509
Ref: c-api/code c PyCode_GetCode16888048
Ref: 97116888048
Ref: c-api/code c PyCode_GetVarnames16888673
Ref: 97216888673
Ref: c-api/code c PyCode_GetCellvars16889054
Ref: 97316889054
Ref: c-api/code c PyCode_GetFreevars16889473
Ref: 97416889473
Ref: c-api/code c PyCode_AddWatcher16889880
Ref: 77c16889880
Ref: c-api/code c PyCode_ClearWatcher16890287
Ref: 77d16890287
Ref: c-api/code c PyCodeEvent16890682
Ref: 51b916890682
Ref: c-api/code c PyCode_WatchCallback16890883
Ref: 51ba16890883
Ref: Objetos código<3>-Footnote-116892969
Node: Sinalizadores de objetos código16893051
Ref: c-api/code c-codeobject-flags16893194
Ref: 4fb716893194
Ref: c-api/code code-object-flags16893194
Ref: 51bb16893194
Ref: c-api/code c CO_OPTIMIZED16894390
Ref: 51bc16894390
Ref: c-api/code c CO_NEWLOCALS16894591
Ref: 51bd16894591
Ref: c-api/code c CO_VARARGS16894790
Ref: 51be16894790
Ref: c-api/code c CO_VARKEYWORDS16894993
Ref: 51bf16894993
Ref: c-api/code c CO_NESTED16895191
Ref: 51c016895191
Ref: c-api/code c CO_GENERATOR16895392
Ref: 51c116895392
Ref: c-api/code c CO_COROUTINE16895593
Ref: 51c216895593
Ref: c-api/code c CO_ITERABLE_COROUTINE16895803
Ref: 51c316895803
Ref: c-api/code c CO_ASYNC_GENERATOR16896010
Ref: 51c416896010
Ref: c-api/code c CO_HAS_DOCSTRING16896215
Ref: 51c516896215
Ref: c-api/code c CO_METHOD16896413
Ref: 51c616896413
Ref: c-api/code c CO_FUTURE_DIVISION16896620
Ref: 51c716896620
Ref: c-api/code c CO_FUTURE_ABSOLUTE_IMPORT16896840
Ref: 51c816896840
Ref: c-api/code c CO_FUTURE_WITH_STATEMENT16897059
Ref: 51c916897059
Ref: c-api/code c CO_FUTURE_PRINT_FUNCTION16897278
Ref: 51ca16897278
Ref: c-api/code c CO_FUTURE_UNICODE_LITERALS16897499
Ref: 51cb16897499
Ref: c-api/code c CO_FUTURE_GENERATOR_STOP16897773
Ref: 51cc16897773
Ref: c-api/code c CO_FUTURE_ANNOTATIONS16897989
Ref: 4fb616897989
Node: Informação adicional16898103
Ref: c-api/code extra-information16898219
Ref: 51cd16898219
Ref: c-api/code c PyUnstable_Eval_RequestCodeExtraIndex16898650
Ref: 51ce16898650
Ref: c-api/code c PyUnstable_Code_GetExtra16899777
Ref: 51cf16899777
Ref: c-api/code c PyUnstable_Code_SetExtra16900625
Ref: 51d016900625
Node: Outros Objetos16901328
Ref: c-api/concrete other-objects16901431
Ref: 51d116901431
Node: Objetos arquivos16901986
Ref: c-api/file doc16902080
Ref: 51d216902080
Ref: c-api/file file-objects16902080
Ref: 51d316902080
Ref: c-api/file fileobjects16902080
Ref: 51d416902080
Ref: c-api/file c PyFile_FromFd16902725
Ref: 4e8b16902725
Ref: c-api/file c PyObject_AsFileDescriptor16903835
Ref: 4ee516903835
Ref: c-api/file c PyFile_GetLine16904316
Ref: 4e8c16904316
Ref: c-api/file c PyFile_SetOpenCodeHook16905197
Ref: 19d616905197
Ref: c-api/file c Py_OpenCodeHookFunction16905465
Ref: 51d516905465
Ref: c-api/file c PyFile_WriteObject16906692
Ref: 4e8d16906692
Ref: c-api/file c PyFile_WriteString16907159
Ref: 4e8e16907159
Node: Objetos do Módulo16907430
Ref: c-api/module doc16907551
Ref: 51d616907551
Ref: c-api/module module-objects16907551
Ref: 51d716907551
Ref: c-api/module moduleobjects16907551
Ref: 51d816907551
Ref: c-api/module no-color16907551
Ref: 51d916907551
Ref: c-api/module c PyModule_Type16907605
Ref: 4ec116907605
Ref: c-api/module c PyModule_Check16907866
Ref: 51da16907866
Ref: c-api/module c PyModule_CheckExact16908050
Ref: 51db16908050
Ref: c-api/module c PyModule_NewObject16908251
Ref: 4ebf16908251
Ref: c-api/module c PyModule_New16909042
Ref: 4ebe16909042
Ref: c-api/module c PyModule_GetDict16909322
Ref: 4ebb16909322
Ref: c-api/module c PyModule_GetNameObject16909993
Ref: 4ebd16909993
Ref: c-api/module c PyModule_GetName16910410
Ref: 4ebc16910410
Ref: c-api/module c PyModule_GetState16910626
Ref: b6d16910626
Ref: c-api/module c PyModule_GetDef16910915
Ref: 4eba16910915
Ref: c-api/module c PyModule_GetFilenameObject16911209
Ref: 42b16911209
Ref: c-api/module c PyModule_GetFilename16911735
Ref: 42a16911735
Node: Module definitions16912193
Ref: c-api/module module-definitions16912336
Ref: 51dc16912336
Ref: c-api/module pymoduledef16912336
Ref: 51dd16912336
Ref: c-api/module c PyModuleDef16913184
Ref: b6a16913184
Ref: c-api/module c PyModuleDef m_base16913607
Ref: 51df16913607
Ref: c-api/module c PyModuleDef m_name16913726
Ref: 51e016913726
Ref: c-api/module c PyModuleDef m_doc16913802
Ref: 51e116913802
Ref: c-api/module c PyModuleDef m_size16913969
Ref: b6c16913969
Ref: c-api/module c PyModuleDef m_methods16915086
Ref: 51e216915086
Ref: c-api/module c PyModuleDef m_slots16915342
Ref: 4fe116915342
Ref: c-api/module c PyModuleDef m_slots m_reload16915747
Ref: 51e416915747
Ref: c-api/module c PyModuleDef m_traverse16915807
Ref: b6716915807
Ref: c-api/module c PyModuleDef m_clear16916603
Ref: b6816916603
Ref: c-api/module c PyModuleDef m_free16917771
Ref: b6916917771
Ref: Module definitions-Footnote-116918612
Node: Module slots16918654
Ref: c-api/module module-slots16918721
Ref: 51e616918721
Ref: c-api/module c PyModuleDef_Slot16918764
Ref: 51e316918764
Ref: c-api/module c PyModuleDef_Slot slot16918799
Ref: 51e716918799
Ref: c-api/module c PyModuleDef_Slot value16918926
Ref: 51e816918926
Ref: c-api/module c Py_mod_create16919094
Ref: 51e916919094
Ref: c-api/module c Py_mod_create create_module16919287
Ref: 51ea16919287
Ref: c-api/module c Py_mod_exec16920735
Ref: b6b16920735
Ref: c-api/module c Py_mod_exec exec_module16921007
Ref: 51eb16921007
Ref: c-api/module c Py_mod_multiple_interpreters16921200
Ref: 4fdc16921200
Ref: c-api/module c Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED16921288
Ref: 4d4516921288
Ref: c-api/module c Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED16921424
Ref: 51ec16921424
Ref: c-api/module c Py_MOD_PER_INTERPRETER_GIL_SUPPORTED16921672
Ref: 51ed16921672
Ref: c-api/module c Py_mod_gil16922286
Ref: 47c16922286
Ref: c-api/module c Py_MOD_GIL_USED16922356
Ref: 51ee16922356
Ref: c-api/module c Py_MOD_GIL_NOT_USED16922548
Ref: 51ef16922548
Ref: Module slots-Footnote-116923193
Node: Creating extension modules dynamically16923235
Ref: c-api/module creating-extension-modules-dynamically16923377
Ref: 51f016923377
Ref: c-api/module moduledef-dynamic16923377
Ref: 51de16923377
Ref: c-api/module c PyModule_Create16923657
Ref: 4fe316923657
Ref: c-api/module c PyModule_Create216924051
Ref: 4eb916924051
Ref: c-api/module c PyModule_FromDefAndSpec16924825
Ref: 10a916924825
Ref: c-api/module c PyModule_FromDefAndSpec216925219
Ref: 10aa16925219
Ref: c-api/module c PyModule_ExecDef16926193
Ref: 10ab16926193
Ref: c-api/module c PYTHON_API_VERSION16926440
Ref: 47bc16926440
Ref: c-api/module c PYTHON_ABI_VERSION16926697
Ref: 51f116926697
Node: Support functions16926945
Ref: c-api/module support-functions16927087
Ref: 51f216927087
Ref: c-api/module c PyModule_AddObjectRef16927413
Ref: 5fe16927413
Ref: c-api/module c PyModule_Add16929347
Ref: 5fd16929347
Ref: c-api/module c PyModule_AddObject16929934
Ref: 5ff16929934
Ref: c-api/module c PyModule_AddIntConstant16931377
Ref: 172a16931377
Ref: c-api/module c PyModule_AddStringConstant16931906
Ref: 172b16931906
Ref: c-api/module c PyModule_AddIntMacro16932510
Ref: 15e416932510
Ref: c-api/module c PyModule_AddStringMacro16932867
Ref: 15e316932867
Ref: c-api/module c PyModule_AddType16932962
Ref: b6216932962
Ref: c-api/module c PyModule_AddFunctions16933442
Ref: 4eb816933442
Ref: c-api/module c PyModule_SetDocString16934424
Ref: 4ec016934424
Ref: c-api/module c PyUnstable_Module_SetGIL16934888
Ref: 49716934888
Node: Module lookup single-phase initialization16935913
Ref: c-api/module module-lookup-single-phase-initialization16936008
Ref: 51f316936008
Ref: c-api/module c PyState_FindModule16936533
Ref: 4f0f16936533
Ref: c-api/module c PyState_AddModule16937087
Ref: 4f0e16937087
Ref: c-api/module c PyState_RemoveModule16938338
Ref: 4f1016938338
Node: Objetos Iteradores16938712
Ref: c-api/iterator doc16938835
Ref: 51f416938835
Ref: c-api/iterator id116938835
Ref: 51f516938835
Ref: c-api/iterator iterator-objects16938835
Ref: 51f616938835
Ref: c-api/iterator no-color16938835
Ref: 51f716938835
Ref: c-api/iterator c PySeqIter_Type16939268
Ref: 4efa16939268
Ref: c-api/iterator c PySeqIter_Check16939572
Ref: 51f816939572
Ref: c-api/iterator c PySeqIter_New16939736
Ref: 4ef916939736
Ref: c-api/iterator c PyCallIter_Type16940080
Ref: 4e0616940080
Ref: c-api/iterator c PyCallIter_Check16940345
Ref: 51f916940345
Ref: c-api/iterator c PyCallIter_New16940511
Ref: 4e0516940511
Node: Objetos Descritores16941009
Ref: c-api/descriptor doc16941128
Ref: 51fa16941128
Ref: c-api/descriptor descriptor-objects16941128
Ref: 51fb16941128
Ref: c-api/descriptor id116941128
Ref: 51fc16941128
Ref: c-api/descriptor no-color16941128
Ref: 51fd16941128
Ref: c-api/descriptor c PyProperty_Type16941317
Ref: 4ef816941317
Ref: c-api/descriptor c PyDescr_NewGetSet16941481
Ref: 4e2316941481
Ref: c-api/descriptor c PyDescr_NewMember16941679
Ref: 4e2416941679
Ref: c-api/descriptor c PyDescr_NewMethod16941875
Ref: 1c2c16941875
Ref: c-api/descriptor c PyDescr_NewWrapper16942071
Ref: 51fe16942071
Ref: c-api/descriptor c PyDescr_NewClassMethod16942244
Ref: 4e2216942244
Ref: c-api/descriptor c PyDescr_IsData16942440
Ref: 1b9816942440
Ref: c-api/descriptor c PyWrapper_New16942711
Ref: 4f6816942711
Node: Objetos Slice16942869
Ref: c-api/slice doc16942988
Ref: 51ff16942988
Ref: c-api/slice id116942988
Ref: 520016942988
Ref: c-api/slice no-color16942988
Ref: 520116942988
Ref: c-api/slice slice-objects16942988
Ref: 520216942988
Ref: c-api/slice c PySlice_Type16943035
Ref: 4f0d16943035
Ref: c-api/slice c PySlice_Check16943231
Ref: 520316943231
Ref: c-api/slice c PySlice_New16943399
Ref: 4f0c16943399
Ref: c-api/slice c PySlice_GetIndices16944000
Ref: 4f0b16944000
Ref: c-api/slice c PySlice_GetIndicesEx16944821
Ref: 42e16944821
Ref: c-api/slice c PySlice_Unpack16946964
Ref: 42f16946964
Ref: c-api/slice c PySlice_AdjustIndices16947740
Ref: 43016947740
Node: Objeto Ellipsis16948323
Ref: c-api/slice ellipsis-object16948388
Ref: 520416948388
Ref: c-api/slice c PyEllipsis_Type16948439
Ref: 4e3216948439
Ref: c-api/slice c Py_Ellipsis16948659
Ref: 520516948659
Ref: c-api/memoryview memoryview-objects16948925
Ref: 507a16948925
Node: Objetos MemoryView16948925
Ref: c-api/memoryview doc16949053
Ref: 520616949053
Ref: c-api/memoryview id116949053
Ref: 520716949053
Ref: c-api/memoryview no-color16949053
Ref: 520816949053
Ref: c-api/memoryview c PyMemoryView_FromObject16949270
Ref: 4eb616949270
Ref: c-api/memoryview c PyBUF_READ16949751
Ref: 194716949751
Ref: c-api/memoryview c PyBUF_WRITE16949839
Ref: 194816949839
Ref: c-api/memoryview c PyMemoryView_FromMemory16949919
Ref: 136c16949919
Ref: c-api/memoryview c PyMemoryView_FromBuffer16950331
Ref: 95a16950331
Ref: c-api/memoryview c PyMemoryView_GetContiguous16950724
Ref: 4eb716950724
Ref: c-api/memoryview c PyMemoryView_Check16951429
Ref: 520916951429
Ref: c-api/memoryview c PyMemoryView_GET_BUFFER16951666
Ref: 520a16951666
Ref: c-api/memoryview c PyMemoryView_GET_BASE16951993
Ref: 520b16951993
Node: Objetos referência fraca<2>16952386
Ref: c-api/weakref doc16952512
Ref: 520c16952512
Ref: c-api/weakref no-color16952512
Ref: 520d16952512
Ref: c-api/weakref weak-reference-objects16952512
Ref: 520e16952512
Ref: c-api/weakref weakrefobjects16952512
Ref: 504e16952512
Ref: c-api/weakref c PyWeakref_Check16952889
Ref: 520f16952889
Ref: c-api/weakref c PyWeakref_CheckRef16953068
Ref: 521016953068
Ref: c-api/weakref c PyWeakref_CheckProxy16953222
Ref: 521116953222
Ref: c-api/weakref c PyWeakref_NewRef16953381
Ref: 1af316953381
Ref: c-api/weakref c PyWeakref_NewProxy16954277
Ref: 4f6716954277
Ref: c-api/weakref c PyWeakref_GetRef16955171
Ref: 3dc16955171
Ref: c-api/weakref c PyWeakref_GetObject16955777
Ref: 3da16955777
Ref: c-api/weakref c PyWeakref_GET_OBJECT16956563
Ref: 3db16956563
Ref: c-api/weakref c PyWeakref_IsDead16956873
Ref: 183716956873
Ref: c-api/weakref c PyObject_ClearWeakRefs16957164
Ref: 78b16957164
Ref: c-api/weakref c PyUnstable_Object_ClearWeakRefsNoCallbacks16957569
Ref: 18db16957569
Node: Capsules<2>16958605
Ref: c-api/capsule doc16958726
Ref: 521216958726
Ref: c-api/capsule capsules16958726
Ref: 288e16958726
Ref: c-api/capsule id116958726
Ref: 521316958726
Ref: c-api/capsule no-color16958726
Ref: 521416958726
Ref: c-api/capsule c PyCapsule16958922
Ref: 146e16958922
Ref: c-api/capsule c PyCapsule_Destructor16959437
Ref: 4e0816959437
Ref: c-api/capsule c PyCapsule_CheckExact16959772
Ref: 521516959772
Ref: c-api/capsule c PyCapsule_New16959933
Ref: 4d6416959933
Ref: c-api/capsule c PyCapsule_GetPointer16960928
Ref: 4e0c16960928
Ref: c-api/capsule c PyCapsule_GetDestructor16961456
Ref: 4e0a16961456
Ref: c-api/capsule c PyCapsule_GetContext16961957
Ref: 4e0916961957
Ref: c-api/capsule c PyCapsule_GetName16962413
Ref: 4e0b16962413
Ref: c-api/capsule c PyCapsule_Import16962859
Ref: 1b1116962859
Ref: c-api/capsule c PyCapsule_IsValid16963944
Ref: 154e16963944
Ref: c-api/capsule c PyCapsule_SetContext16964886
Ref: 4e0d16964886
Ref: c-api/capsule c PyCapsule_SetDestructor16965202
Ref: 4e0e16965202
Ref: c-api/capsule c PyCapsule_SetName16965531
Ref: 4e0f16965531
Ref: c-api/capsule c PyCapsule_SetPointer16966012
Ref: 4e1016966012
Node: Objetos Frame16966359
Ref: c-api/frame doc16966469
Ref: 521616966469
Ref: c-api/frame frame-objects16966469
Ref: 521716966469
Ref: c-api/frame no-color16966469
Ref: 521816966469
Ref: c-api/frame c PyFrameObject16966516
Ref: 98116966516
Ref: c-api/frame c PyFrame_Type16967076
Ref: 97f16967076
Ref: c-api/frame c PyFrame_Check16967360
Ref: 97d16967360
Ref: c-api/frame c PyFrame_GetBack16967597
Ref: 97e16967597
Ref: c-api/frame c PyFrame_GetBuiltins16967919
Ref: 96416967919
Ref: c-api/frame c PyFrame_GetCode16968238
Ref: 98216968238
Ref: c-api/frame c PyFrame_GetGenerator16968608
Ref: 96516968608
Ref: c-api/frame c PyFrame_GetGlobals16969051
Ref: 96616969051
Ref: c-api/frame c PyFrame_GetLasti16969368
Ref: 96716969368
Ref: c-api/frame c PyFrame_GetVar16969575
Ref: 77e16969575
Ref: c-api/frame c PyFrame_GetVarString16970096
Ref: 77f16970096
Ref: c-api/frame c PyFrame_GetLocals16970386
Ref: 65516970386
Ref: c-api/frame c PyFrame_GetLineNumber16971112
Ref: 98316971112
Ref: Objetos Frame-Footnote-116971403
Node: Frame Locals Proxies16971445
Ref: c-api/frame frame-locals-proxies16971539
Ref: 521a16971539
Ref: c-api/frame c PyFrameLocalsProxy_Type16972008
Ref: 521916972008
Ref: c-api/frame c PyFrameLocalsProxy_Check16972135
Ref: 521b16972135
Ref: Frame Locals Proxies-Footnote-116972303
Node: Internal Frames16972345
Ref: c-api/frame internal-frames16972439
Ref: 521c16972439
Ref: c-api/frame c _PyInterpreterFrame16972540
Ref: 18c016972540
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetCode16972673
Ref: 521d16972673
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetLasti16973115
Ref: 521e16973115
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetLine16973512
Ref: 521f16973512
Ref: Internal Frames-Footnote-116973968
Node: Objetos Geradores16974010
Ref: c-api/gen doc16974129
Ref: 522016974129
Ref: c-api/gen gen-objects16974129
Ref: 522116974129
Ref: c-api/gen generator-objects16974129
Ref: 522216974129
Ref: c-api/gen no-color16974129
Ref: 522316974129
Ref: c-api/gen c PyGenObject16974449
Ref: 522616974449
Ref: c-api/gen c PyGen_Type16974529
Ref: 522716974529
Ref: c-api/gen c PyGen_Check16974642
Ref: 522816974642
Ref: c-api/gen c PyGen_CheckExact16974817
Ref: 522916974817
Ref: c-api/gen c PyGen_New16975012
Ref: 522416975012
Ref: c-api/gen c PyGen_NewWithQualName16975298
Ref: 522516975298
Node: Objetos corrotina<2>16975730
Ref: c-api/coro doc16975869
Ref: 522a16975869
Ref: c-api/coro coro-objects16975869
Ref: 10c616975869
Ref: c-api/coro coroutine-objects16975869
Ref: 522b16975869
Ref: c-api/coro no-color16975869
Ref: 522c16975869
Ref: c-api/coro c PyCoroObject16976053
Ref: 522d16976053
Ref: c-api/coro c PyCoro_Type16976139
Ref: 522e16976139
Ref: c-api/coro c PyCoro_CheckExact16976253
Ref: 522f16976253
Ref: c-api/coro c PyCoro_New16976444
Ref: 523016976444
Node: Objetos de variáveis de contexto16976874
Ref: c-api/contextvars doc16977015
Ref: 523116977015
Ref: c-api/contextvars context-variables-objects16977015
Ref: 523216977015
Ref: c-api/contextvars contextvarsobjects16977015
Ref: ce316977015
Ref: c-api/contextvars no-color16977015
Ref: 523316977015
Ref: c-api/contextvars contextvarsobjects-pointertype-change16977101
Ref: e1316977101
Ref: c-api/contextvars c PyContext16977676
Ref: 523416977676
Ref: c-api/contextvars c PyContextVar16977794
Ref: 523516977794
Ref: c-api/contextvars c PyContextToken16977919
Ref: 523616977919
Ref: c-api/contextvars c PyContext_Type16978040
Ref: 523716978040
Ref: c-api/contextvars c PyContextVar_Type16978158
Ref: 523816978158
Ref: c-api/contextvars c PyContextToken_Type16978292
Ref: 523916978292
Ref: c-api/contextvars c PyContext_CheckExact16978476
Ref: 523a16978476
Ref: c-api/contextvars c PyContextVar_CheckExact16978674
Ref: 523b16978674
Ref: c-api/contextvars c PyContextToken_CheckExact16978879
Ref: 523c16978879
Ref: c-api/contextvars c PyContext_New16979140
Ref: 523d16979140
Ref: c-api/contextvars c PyContext_Copy16979325
Ref: 523e16979325
Ref: c-api/contextvars c PyContext_CopyCurrent16979539
Ref: 523f16979539
Ref: c-api/contextvars c PyContext_Enter16979743
Ref: 524016979743
Ref: c-api/contextvars c PyContext_Exit16979927
Ref: 524116979927
Ref: c-api/contextvars c PyContext_AddWatcher16980159
Ref: 18d816980159
Ref: c-api/contextvars c PyContext_ClearWatcher16980587
Ref: 18d916980587
Ref: c-api/contextvars c PyContextEvent16980989
Ref: 524216980989
Ref: c-api/contextvars c PyContext_WatchCallback16981453
Ref: 524316981453
Ref: c-api/contextvars c PyContextVar_New16982555
Ref: 524416982555
Ref: c-api/contextvars c PyContextVar_Get16982995
Ref: 524516982995
Ref: c-api/contextvars c PyContextVar_Set16983666
Ref: 524616983666
Ref: c-api/contextvars c PyContextVar_Reset16983959
Ref: 524716983959
Ref: Objetos de variáveis de contexto-Footnote-116984313
Node: Objetos DateTime<2>16984378
Ref: c-api/datetime doc16984530
Ref: 524816984530
Ref: c-api/datetime datetime-objects16984530
Ref: 524916984530
Ref: c-api/datetime datetimeobjects16984530
Ref: 502b16984530
Ref: c-api/datetime no-color16984530
Ref: 524a16984530
Ref: c-api/datetime c PyDateTime_Date16985083
Ref: 524b16985083
Ref: c-api/datetime c PyDateTime_DateTime16985214
Ref: 524c16985214
Ref: c-api/datetime c PyDateTime_Time16985353
Ref: 524d16985353
Ref: c-api/datetime c PyDateTime_Delta16985484
Ref: 524e16985484
Ref: c-api/datetime c PyDateTime_DateType16985636
Ref: 524f16985636
Ref: c-api/datetime c PyDateTime_DateTimeType16985862
Ref: 525016985862
Ref: c-api/datetime c PyDateTime_TimeType16986100
Ref: 525116986100
Ref: c-api/datetime c PyDateTime_DeltaType16986326
Ref: 525216986326
Ref: c-api/datetime c PyDateTime_TZInfoType16986599
Ref: 525316986599
Ref: c-api/datetime c PyDateTime_TimeZone_UTC16986875
Ref: db016986875
Ref: c-api/datetime c PyDate_Check16987129
Ref: 525416987129
Ref: c-api/datetime c PyDate_CheckExact16987377
Ref: 525516987377
Ref: c-api/datetime c PyDateTime_Check16987581
Ref: 525616987581
Ref: c-api/datetime c PyDateTime_CheckExact16987840
Ref: 525716987840
Ref: c-api/datetime c PyTime_Check16988057
Ref: 525816988057
Ref: c-api/datetime c PyTime_CheckExact16988304
Ref: 525916988304
Ref: c-api/datetime c PyDelta_Check16988508
Ref: 525a16988508
Ref: c-api/datetime c PyDelta_CheckExact16988759
Ref: 525b16988759
Ref: c-api/datetime c PyTZInfo_Check16988965
Ref: 525c16988965
Ref: c-api/datetime c PyTZInfo_CheckExact16989219
Ref: 525d16989219
Ref: c-api/datetime c PyDate_FromDate16989455
Ref: 525e16989455
Ref: c-api/datetime c PyDateTime_FromDateAndTime16989678
Ref: 525f16989678
Ref: c-api/datetime c PyDateTime_FromDateAndTimeAndFold16990015
Ref: 526016990015
Ref: c-api/datetime c PyTime_FromTime16990412
Ref: 526116990412
Ref: c-api/datetime c PyTime_FromTimeAndFold16990679
Ref: 526216990679
Ref: c-api/datetime c PyDelta_FromDSU16991005
Ref: 526316991005
Ref: c-api/datetime c PyTimeZone_FromOffset16991468
Ref: dae16991468
Ref: c-api/datetime c PyTimeZone_FromOffsetAndName16991763
Ref: daf16991763
Ref: c-api/datetime c PyDateTime_GET_YEAR16992338
Ref: 526416992338
Ref: c-api/datetime c PyDateTime_GET_MONTH16992447
Ref: 526516992447
Ref: c-api/datetime c PyDateTime_GET_DAY16992559
Ref: 526616992559
Ref: c-api/datetime c PyDateTime_DATE_GET_HOUR16992881
Ref: 526716992881
Ref: c-api/datetime c PyDateTime_DATE_GET_MINUTE16993001
Ref: 526816993001
Ref: c-api/datetime c PyDateTime_DATE_GET_SECOND16993125
Ref: 526916993125
Ref: c-api/datetime c PyDateTime_DATE_GET_MICROSECOND16993250
Ref: 526a16993250
Ref: c-api/datetime c PyDateTime_DATE_GET_FOLD16993400
Ref: 526b16993400
Ref: c-api/datetime c PyDateTime_DATE_GET_TZINFO16993553
Ref: a8b16993553
Ref: c-api/datetime c PyDateTime_TIME_GET_HOUR16993944
Ref: 526c16993944
Ref: c-api/datetime c PyDateTime_TIME_GET_MINUTE16994060
Ref: 526d16994060
Ref: c-api/datetime c PyDateTime_TIME_GET_SECOND16994180
Ref: 526e16994180
Ref: c-api/datetime c PyDateTime_TIME_GET_MICROSECOND16994301
Ref: 526f16994301
Ref: c-api/datetime c PyDateTime_TIME_GET_FOLD16994437
Ref: 527016994437
Ref: c-api/datetime c PyDateTime_TIME_GET_TZINFO16994586
Ref: a8c16994586
Ref: c-api/datetime c PyDateTime_DELTA_GET_DAYS16994979
Ref: 527116994979
Ref: c-api/datetime c PyDateTime_DELTA_GET_SECONDS16995162
Ref: 527216995162
Ref: c-api/datetime c PyDateTime_DELTA_GET_MICROSECONDS16995334
Ref: 527316995334
Ref: c-api/datetime c PyDateTime_FromTimestamp16995596
Ref: 527416995596
Ref: c-api/datetime c PyDate_FromTimestamp16995911
Ref: 1ca716995911
Node: Objetos de indicação de tipos16996209
Ref: c-api/typehints doc16996319
Ref: 527516996319
Ref: c-api/typehints no-color16996319
Ref: 527616996319
Ref: c-api/typehints objects-for-type-hinting16996319
Ref: 527716996319
Ref: c-api/typehints typehintobjects16996319
Ref: 527816996319
Ref: c-api/typehints c Py_GenericAlias16996592
Ref: 4f6c16996592
Ref: c-api/typehints c Py_GenericAliasType16998070
Ref: 4f6d16998070
Node: Inicialização finalização e threads16998361
Ref: c-api/init doc16998562
Ref: 527916998562
Ref: c-api/init initialization16998562
Ref: 527a16998562
Ref: c-api/init initialization-finalization-and-threads16998562
Ref: 527b16998562
Ref: c-api/init no-color16998562
Ref: 527c16998562
Node: Antes da inicialização do Python16999242
Ref: c-api/init before-python-initialization16999396
Ref: 527d16999396
Ref: c-api/init pre-init-safe16999396
Ref: db216999396
Node: Variáveis de configuração global17002196
Ref: c-api/init global-conf-vars17002401
Ref: 527e17002401
Ref: c-api/init global-configuration-variables17002401
Ref: 528217002401
Ref: c-api/init c Py_BytesWarningFlag17002943
Ref: 40317002943
Ref: c-api/init c Py_DebugFlag17003525
Ref: 3f517003525
Ref: c-api/init c Py_DontWriteBytecodeFlag17004101
Ref: 40917004101
Ref: c-api/init c Py_FrozenFlag17004701
Ref: 40517004701
Ref: c-api/init c Py_HashRandomizationFlag17005250
Ref: 40f17005250
Ref: c-api/init c Py_IgnoreEnvironmentFlag17005925
Ref: 40717005925
Ref: c-api/init c Py_InspectFlag17006497
Ref: 3fd17006497
Ref: c-api/init c Py_InteractiveFlag17007169
Ref: 3fb17007169
Ref: c-api/init c Py_IsolatedFlag17007550
Ref: 41217007550
Ref: c-api/init c Py_LegacyWindowsFSEncodingFlag17008136
Ref: 41417008136
Ref: c-api/init c Py_LegacyWindowsStdioFlag17009073
Ref: 41617009073
Ref: c-api/init c Py_NoSiteFlag17009817
Ref: 40117009817
Ref: c-api/init c Py_NoUserSiteDirectory17010529
Ref: 40b17010529
Ref: c-api/init c Py_OptimizeFlag17011103
Ref: 3ff17011103
Ref: c-api/init c Py_QuietFlag17011554
Ref: 3f917011554
Ref: c-api/init c Py_UnbufferedStdioFlag17012053
Ref: 40d17012053
Ref: c-api/init c Py_VerboseFlag17012585
Ref: 3f717012585
Ref: Variáveis de configuração global-Footnote-117013408
Ref: Variáveis de configuração global-Footnote-217013450
Node: Inicializando e encerrando o interpretador17013492
Ref: c-api/init initializing-and-finalizing-the-interpreter17013686
Ref: 528317013686
Ref: c-api/init c Py_Initialize17013787
Ref: 45d17013787
Ref: c-api/init c Py_InitializeEx17014992
Ref: 4f7317014992
Ref: c-api/init c Py_InitializeFromConfig17015504
Ref: 3f317015504
Ref: c-api/init c Py_IsInitialized17016001
Ref: 4ddd17016001
Ref: c-api/init c Py_IsFinalizing17016331
Ref: 5f117016331
Ref: c-api/init c Py_FinalizeEx17016635
Ref: f0517016635
Ref: c-api/init c Py_Finalize17020243
Ref: 45c17020243
Ref: c-api/init c Py_BytesMain17020458
Ref: bae17020458
Ref: c-api/init c Py_Main17020825
Ref: e1217020825
Ref: c-api/init c Py_RunMain17023344
Ref: bb217023344
Ref: c-api/init c PyUnstable_AtExit17024917
Ref: 185017024917
Node: Process-wide parameters17025532
Ref: c-api/init process-wide-parameters17025741
Ref: 528917025741
Ref: c-api/init c Py_SetProgramName17025804
Ref: 18f817025804
Ref: c-api/init c Py_GetProgramName17027027
Ref: 3eb17027027
Ref: c-api/init c Py_GetPrefix17027687
Ref: 3e217027687
Ref: c-api/init c Py_GetExecPrefix17029025
Ref: 3e617029025
Ref: c-api/init c Py_GetProgramFullPath17031780
Ref: 3e917031780
Ref: c-api/init c Py_GetPath17032638
Ref: 3e017032638
Ref: c-api/init c Py_GetVersion17033769
Ref: 4f7117033769
Ref: c-api/init c Py_GetPlatform17034406
Ref: 4f7017034406
Ref: c-api/init c Py_GetCopyright17035038
Ref: 4f6f17035038
Ref: c-api/init c Py_GetCompiler17035468
Ref: 4f6e17035468
Ref: c-api/init c Py_GetBuildInfo17035894
Ref: 162317035894
Ref: c-api/init c PySys_SetArgvEx17036361
Ref: 18f917036361
Ref: c-api/init c PySys_SetArgv17038846
Ref: 18fa17038846
Ref: c-api/init c Py_SetPythonHome17039731
Ref: 18f717039731
Ref: c-api/init c Py_GetPythonHome17040602
Ref: 3ec17040602
Ref: Process-wide parameters-Footnote-117041297
Node: Estado de thread e a trava global do interpretador17041352
Ref: c-api/init thread-state-and-the-global-interpreter-lock17041542
Ref: 528a17041542
Ref: c-api/init threads17041542
Ref: 528b17041542
Node: Desvinculação do estado de thread do código de extensão17044358
Ref: c-api/init detaching-the-thread-state-from-extension-code17044539
Ref: 528c17044539
Node: Non-Python created threads17047226
Ref: c-api/init gilstate17047464
Ref: 528d17047464
Ref: c-api/init non-python-created-threads17047464
Ref: 528e17047464
Node: Supporting subinterpreters in non-Python threads17049380
Ref: c-api/init supporting-subinterpreters-in-non-python-threads17049585
Ref: 528f17049585
Node: Cuidados com o uso de fork17050663
Ref: c-api/init cautions-about-fork17050881
Ref: 529017050881
Ref: c-api/init fork-and-threads17050881
Ref: 4fec17050881
Node: Cautions regarding runtime finalization17052834
Ref: c-api/init cautions-regarding-runtime-finalization17053018
Ref: 529117053018
Ref: c-api/init id117053018
Ref: 529217053018
Node: High-level API17054593
Ref: c-api/init high-level-api17054764
Ref: 529317054764
Ref: c-api/init c PyInterpreterState17054956
Ref: ab017054956
Ref: c-api/init c PyThreadState17055762
Ref: 98517055762
Ref: c-api/init c PyThreadState interp17055968
Ref: 529517055968
Ref: c-api/init c PyEval_InitThreads17056073
Ref: 18fb17056073
Ref: c-api/init c PyEval_SaveThread17056669
Ref: 63b17056669
Ref: c-api/init c PyEval_RestoreThread17056915
Ref: 63c17056915
Ref: c-api/init c PyThreadState_Get17057676
Ref: 60917057676
Ref: c-api/init c PyThreadState_GetUnchecked17058103
Ref: 42017058103
Ref: c-api/init c PyThreadState_Swap17058494
Ref: 4f1d17058494
Ref: c-api/init c PyGILState_STATE17059260
Ref: 4e9417059260
Ref: c-api/init c PyGILState_STATE PyGILState_LOCKED17059461
Ref: 529617059461
Ref: c-api/init c PyGILState_STATE PyGILState_UNLOCKED17059609
Ref: 529717059609
Ref: c-api/init c PyGILState_Ensure17059755
Ref: 63e17059755
Ref: c-api/init c PyGILState_Release17061650
Ref: 63f17061650
Ref: c-api/init c PyGILState_GetThisThreadState17062174
Ref: 4e9317062174
Ref: c-api/init c PyGILState_Check17062953
Ref: 529817062953
Ref: c-api/init c Py_BEGIN_ALLOW_THREADS17063946
Ref: 4d5e17063946
Ref: c-api/init c Py_END_ALLOW_THREADS17064320
Ref: c7317064320
Ref: c-api/init c Py_BLOCK_THREADS17064678
Ref: 4f6a17064678
Ref: c-api/init c Py_UNBLOCK_THREADS17064902
Ref: 4f7617064902
Ref: High-level API-Footnote-117065198
Node: Low-level API17065240
Ref: c-api/init low-level-api17065363
Ref: 529917065363
Ref: c-api/init c PyInterpreterState_New17065628
Ref: 45e417065628
Ref: c-api/init c PyInterpreterState_Clear17066043
Ref: 45e317066043
Ref: c-api/init c PyInterpreterState_Delete17066410
Ref: 4ea017066410
Ref: c-api/init c PyThreadState_New17066794
Ref: 4f1c17066794
Ref: c-api/init c PyThreadState_Clear17067078
Ref: 18d717067078
Ref: c-api/init c PyThreadState_Delete17067566
Ref: 1c4017067566
Ref: c-api/init c PyThreadState_DeleteCurrent17067886
Ref: 1c6f17067886
Ref: c-api/init c PyThreadState_GetFrame17068200
Ref: 98617068200
Ref: c-api/init c PyThreadState_GetID17068686
Ref: b6017068686
Ref: c-api/init c PyThreadState_GetInterpreter17069026
Ref: b5f17069026
Ref: c-api/init c PyThreadState_EnterTracing17069371
Ref: 94f17069371
Ref: c-api/init c PyThreadState_LeaveTracing17069635
Ref: 95017069635
Ref: c-api/init c PyInterpreterState_Get17069984
Ref: 64017069984
Ref: c-api/init c PyInterpreterState_GetID17070305
Ref: db317070305
Ref: c-api/init c PyInterpreterState_GetDict17070686
Ref: 4ea117070686
Ref: c-api/init c _PyFrameEvalFunction17071426
Ref: 96f17071426
Ref: c-api/init c _PyInterpreterState_GetEvalFrameFunc17071983
Ref: 1c2e17071983
Ref: c-api/init c _PyInterpreterState_SetEvalFrameFunc17072266
Ref: 1c2f17072266
Ref: c-api/init c PyThreadState_GetDict17072544
Ref: 4f1b17072544
Ref: c-api/init c PyThreadState_SetAsyncExc17073111
Ref: db117073111
Ref: c-api/init c PyEval_AcquireThread17073961
Ref: 63d17073961
Ref: c-api/init c PyEval_ReleaseThread17075128
Ref: 4e4517075128
Ref: Low-level API-Footnote-117075658
Ref: Low-level API-Footnote-217075700
Node: Sub-interpreter support17075742
Ref: c-api/init id217075936
Ref: 529a17075936
Ref: c-api/init sub-interpreter-support17075936
Ref: 16317075936
Ref: c-api/init c PyInterpreterConfig17076869
Ref: 78317076869
Ref: c-api/init c PyInterpreterConfig use_main_obmalloc17077164
Ref: 47a717077164
Ref: c-api/init c PyInterpreterConfig allow_fork17077606
Ref: 529f17077606
Ref: c-api/init c PyInterpreterConfig allow_exec17077940
Ref: 52a017077940
Ref: c-api/init c PyInterpreterConfig allow_threads17078334
Ref: 52a117078334
Ref: c-api/init c PyInterpreterConfig allow_daemon_threads17078525
Ref: 52a217078525
Ref: c-api/init c PyInterpreterConfig check_multi_interp_extensions17078809
Ref: 529c17078809
Ref: c-api/init c PyInterpreterConfig gil17079332
Ref: 529d17079332
Ref: c-api/init c PyInterpreterConfig_DEFAULT_GIL17079480
Ref: 52a317079480
Ref: c-api/init c PyInterpreterConfig_SHARED_GIL17079640
Ref: 52a417079640
Ref: c-api/init c PyInterpreterConfig_OWN_GIL17079753
Ref: 529e17079753
Ref: c-api/init c Py_NewInterpreterFromConfig17080004
Ref: 67e17080004
Ref: c-api/init c Py_NewInterpreter17084597
Ref: 1a5f17084597
Ref: c-api/init c Py_EndInterpreter17085072
Ref: 17ae17085072
Ref: Sub-interpreter support-Footnote-117085703
Node: A Per-Interpreter GIL17085745
Ref: c-api/init a-per-interpreter-gil17085851
Ref: 52a617085851
Ref: c-api/init per-interpreter-gil17085851
Ref: 529417085851
Ref: A Per-Interpreter GIL-Footnote-117087944
Ref: A Per-Interpreter GIL-Footnote-217087986
Node: Bugs and caveats17088028
Ref: c-api/init bugs-and-caveats17088134
Ref: 52a517088134
Node: Notificações assíncronas17089742
Ref: c-api/init asynchronous-notifications17089907
Ref: 52a717089907
Ref: c-api/init c Py_AddPendingCall17090153
Ref: b6e17090153
Node: Profiling and Tracing17092422
Ref: c-api/init profiling17092581
Ref: 52a817092581
Ref: c-api/init profiling-and-tracing17092581
Ref: 52a917092581
Ref: c-api/init c Py_tracefunc17093262
Ref: 52aa17093262
Ref: c-api/init c PyTrace_CALL17095611
Ref: 52ab17095611
Ref: c-api/init c PyTrace_EXCEPTION17096002
Ref: 52ac17096002
Ref: c-api/init c PyTrace_LINE17096613
Ref: 52ad17096613
Ref: c-api/init c PyTrace_RETURN17096916
Ref: 52ae17096916
Ref: c-api/init c PyTrace_C_CALL17097070
Ref: 52af17097070
Ref: c-api/init c PyTrace_C_EXCEPTION17097233
Ref: 52b017097233
Ref: c-api/init c PyTrace_C_RETURN17097403
Ref: 52b117097403
Ref: c-api/init c PyTrace_OPCODE17097559
Ref: 52b217097559
Ref: c-api/init c PyEval_SetProfile17097900
Ref: 16eb17097900
Ref: c-api/init c PyEval_SetProfileAllThreads17098598
Ref: 77617098598
Ref: c-api/init c PyEval_SetTrace17099133
Ref: 65717099133
Ref: c-api/init c PyEval_SetTraceAllThreads17099830
Ref: 65817099830
Node: Reference tracing17100350
Ref: c-api/init reference-tracing17100507
Ref: 52b317100507
Ref: c-api/init c PyRefTracer17100587
Ref: 52b417100587
Ref: c-api/init c PyRefTracer_CREATE17101154
Ref: 52b517101154
Ref: c-api/init c PyRefTracer_DESTROY17101319
Ref: 52b617101319
Ref: c-api/init c PyRefTracer_SetTracer17101487
Ref: 60417101487
Ref: c-api/init c PyRefTracer_GetTracer17102339
Ref: 60517102339
Node: Advanced Debugger Support17102833
Ref: c-api/init advanced-debugger-support17102997
Ref: 52b717102997
Ref: c-api/init advanced-debugging17102997
Ref: 52b817102997
Ref: c-api/init c PyInterpreterState_Head17103141
Ref: 16ed17103141
Ref: c-api/init c PyInterpreterState_Main17103309
Ref: 529b17103309
Ref: c-api/init c PyInterpreterState_Next17103433
Ref: 16ee17103433
Ref: c-api/init c PyInterpreterState_ThreadHead17103647
Ref: 16ef17103647
Ref: c-api/init c PyThreadState_Next17103901
Ref: 16f017103901
Node: Thread Local Storage Support17104160
Ref: c-api/init thread-local-storage17104336
Ref: 52b917104336
Ref: c-api/init thread-local-storage-support17104336
Ref: 52ba17104336
Node: Thread Specific Storage TSS API17105483
Ref: c-api/init thread-specific-storage-api17105616
Ref: cc817105616
Ref: c-api/init thread-specific-storage-tss-api17105616
Ref: 52bb17105616
Ref: c-api/init c Py_tss_t17106014
Ref: cc917106014
Ref: c-api/init c Py_tss_NEEDS_INIT17106468
Ref: 52bc17106468
Ref: Thread Specific Storage TSS API-Footnote-117106759
Node: Alocação dinâmica17106801
Ref: c-api/init dynamic-allocation17106909
Ref: 52bd17106909
Ref: c-api/init c PyThread_tss_alloc17107192
Ref: 43517107192
Ref: c-api/init c PyThread_tss_free17107487
Ref: 43717107487
Node: Métodos<2>17107971
Ref: c-api/init methods17108079
Ref: 52be17108079
Ref: c-api/init c PyThread_tss_is_created17108386
Ref: 4f1f17108386
Ref: c-api/init c PyThread_tss_create17108638
Ref: 4f1e17108638
Ref: c-api/init c PyThread_tss_delete17109145
Ref: 43d17109145
Ref: c-api/init c PyThread_tss_set17109640
Ref: 43917109640
Ref: c-api/init c PyThread_tss_get17109960
Ref: 43b17109960
Node: Thread Local Storage TLS API17110254
Ref: c-api/init thread-local-storage-api17110387
Ref: cc717110387
Ref: c-api/init thread-local-storage-tls-api17110387
Ref: 52bf17110387
Ref: c-api/init c PyThread_create_key17111017
Ref: 43417111017
Ref: c-api/init c PyThread_delete_key17111103
Ref: 43617111103
Ref: c-api/init c PyThread_set_key_value17111197
Ref: 43817111197
Ref: c-api/init c PyThread_get_key_value17111306
Ref: 43a17111306
Ref: c-api/init c PyThread_delete_key_value17111404
Ref: 43c17111404
Ref: c-api/init c PyThread_ReInitTLS17111504
Ref: 43e17111504
Node: Synchronization Primitives<2>17111590
Ref: c-api/init synchronization-primitives17111732
Ref: 52c017111732
Ref: c-api/init c PyMutex17111854
Ref: 47e17111854
Ref: c-api/init c PyMutex_Lock17112481
Ref: 5c717112481
Ref: c-api/init c PyMutex_Unlock17112797
Ref: 5c817112797
Ref: c-api/init c PyMutex_IsLocked17112990
Ref: 46017112990
Node: Python Critical Section API17113433
Ref: c-api/init id317113526
Ref: 52c117113526
Ref: c-api/init python-critical-section-api17113526
Ref: 52c217113526
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION17116397
Ref: 516817116397
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION_MUTEX17116800
Ref: 52c417116800
Ref: c-api/init c Py_END_CRITICAL_SECTION17117330
Ref: 52c517117330
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION217117646
Ref: 52c317117646
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION2_MUTEX17118189
Ref: 52c617118189
Ref: c-api/init c Py_END_CRITICAL_SECTION217118749
Ref: 52c717118749
Node: Configuração de Inicialização do Python17119069
Ref: c-api/init_config doc17119268
Ref: 52c817119268
Ref: c-api/init_config init-config17119268
Ref: 63a17119268
Ref: c-api/init_config no-color17119268
Ref: 52c917119268
Ref: c-api/init_config python-initialization-configuration17119268
Ref: 52ca17119268
Node: PyInitConfig C API17119549
Ref: c-api/init_config pyinitconfig-api17119677
Ref: 37617119677
Ref: c-api/init_config pyinitconfig-c-api17119677
Ref: 52cb17119677
Ref: PyInitConfig C API-Footnote-117120271
Node: Exemplo<17>17120313
Ref: c-api/init_config example17120401
Ref: 52cc17120401
Node: Create Config17121588
Ref: c-api/init_config create-config17121707
Ref: 52cd17121707
Ref: c-api/init_config c PyInitConfig17121754
Ref: 52ce17121754
Ref: c-api/init_config c PyInitConfig_Create17121852
Ref: 38417121852
Ref: c-api/init_config c PyInitConfig_Free17122146
Ref: 38517122146
Node: Tratamento de erros<2>17122333
Ref: c-api/init_config error-handling17122452
Ref: 52d017122452
Ref: c-api/init_config c PyInitConfig_GetError17122511
Ref: 38717122511
Ref: c-api/init_config c PyInitConfig_GetExitCode17123085
Ref: 38817123085
Node: Get Options17123679
Ref: c-api/init_config get-options17123796
Ref: 52d117123796
Ref: c-api/init_config c PyInitConfig_HasOption17123979
Ref: 38c17123979
Ref: c-api/init_config c PyInitConfig_GetInt17124207
Ref: 38917124207
Ref: c-api/init_config c PyInitConfig_GetStr17124480
Ref: 38a17124480
Ref: c-api/init_config c PyInitConfig_GetStrList17125002
Ref: 38b17125002
Ref: c-api/init_config c PyInitConfig_FreeStrList17125477
Ref: 38617125477
Node: Set Options17125648
Ref: c-api/init_config set-options17125749
Ref: 52d317125749
Ref: c-api/init_config c PyInitConfig_SetInt17126210
Ref: 38d17126210
Ref: c-api/init_config c PyInitConfig_SetStr17126464
Ref: 38e17126464
Ref: c-api/init_config c PyInitConfig_SetStrList17126792
Ref: 38f17126792
Node: Module17127161
Ref: c-api/init_config module17127268
Ref: 52d417127268
Ref: c-api/init_config c PyInitConfig_AddModule17127301
Ref: 37817127301
Node: Initialize Python17127968
Ref: c-api/init_config initialize-python17128055
Ref: 52d517128055
Ref: c-api/init_config c Py_InitializeFromInitConfig17128110
Ref: 38317128110
Node: Configuration Options17128511
Ref: c-api/init_config configuration-options17128680
Ref: 52d617128680
Ref: c-api/init_config pyinitconfig-opts17128680
Ref: 52d217128680
Node: Runtime Python configuration API17149487
Ref: c-api/init_config runtime-python-configuration-api17149652
Ref: 52f517149652
Ref: c-api/init_config c PyConfig_Get17150146
Ref: 37917150146
Ref: c-api/init_config c PyConfig_GetInt17150804
Ref: 38117150804
Ref: c-api/init_config c PyConfig_Names17151076
Ref: 38217151076
Ref: c-api/init_config c PyConfig_Set17151506
Ref: 37a17151506
Node: PyConfig C API17152284
Ref: c-api/init_config pyconfig-api17152442
Ref: 37717152442
Ref: c-api/init_config pyconfig-c-api17152442
Ref: 52f617152442
Ref: PyConfig C API-Footnote-117153864
Node: Exemplo<18>17153906
Ref: c-api/init_config id117153993
Ref: 52f717153993
Node: PyWideStringList17155019
Ref: c-api/init_config pywidestringlist17155123
Ref: 52f817155123
Ref: c-api/init_config c PyWideStringList17155176
Ref: b9b17155176
Ref: c-api/init_config c PyWideStringList_Append17155407
Ref: bac17155407
Ref: c-api/init_config c PyWideStringList_Insert17155662
Ref: bad17155662
Ref: c-api/init_config c PyWideStringList length17156160
Ref: 52f917156160
Ref: c-api/init_config c PyWideStringList items17156243
Ref: 52fa17156243
Node: PyStatus17156306
Ref: c-api/init_config pystatus17156410
Ref: 52fb17156410
Ref: c-api/init_config c PyStatus17156447
Ref: b9a17156447
Ref: c-api/init_config c PyStatus exitcode17156690
Ref: 52fc17156690
Ref: c-api/init_config c PyStatus err_msg17156791
Ref: 52fd17156791
Ref: c-api/init_config c PyStatus func17156860
Ref: 52fe17156860
Ref: c-api/init_config c PyStatus_Ok17157004
Ref: bab17157004
Ref: c-api/init_config c PyStatus_Error17157086
Ref: ba517157086
Ref: c-api/init_config c PyStatus_NoMemory17157281
Ref: baa17157281
Ref: c-api/init_config c PyStatus_Exit17157408
Ref: ba717157408
Ref: c-api/init_config c PyStatus_Exception17157585
Ref: ba617157585
Ref: c-api/init_config c PyStatus_IsError17157819
Ref: ba817157819
Ref: c-api/init_config c PyStatus_IsExit17157915
Ref: ba917157915
Ref: c-api/init_config c Py_ExitStatusException17158013
Ref: baf17158013
Node: PyPreConfig17159000
Ref: c-api/init_config pypreconfig17159127
Ref: 52ff17159127
Ref: c-api/init_config c PyPreConfig17159170
Ref: b9917159170
Ref: c-api/init_config c PyPreConfig_InitPythonConfig17159313
Ref: ba417159313
Ref: c-api/init_config c PyPreConfig_InitIsolatedConfig17159505
Ref: ba317159505
Ref: c-api/init_config c PyPreConfig allocator17159724
Ref: 52d717159724
Ref: c-api/init_config c PyPreConfig configure_locale17161660
Ref: 52e017161660
Ref: c-api/init_config c PyPreConfig coerce_c_locale17162090
Ref: 52dd17162090
Ref: c-api/init_config c PyPreConfig coerce_c_locale_warn17162456
Ref: 52de17162456
Ref: c-api/init_config c PyPreConfig dev_mode17162694
Ref: 530117162694
Ref: c-api/init_config c PyPreConfig isolated17162904
Ref: 530217162904
Ref: c-api/init_config c PyPreConfig legacy_windows_fs_encoding17163069
Ref: 41517163069
Ref: c-api/init_config c PyPreConfig parse_argv17163691
Ref: 530317163691
Ref: c-api/init_config c PyPreConfig use_environment17164145
Ref: 530417164145
Ref: c-api/init_config c PyPreConfig utf8_mode17164393
Ref: 41a17164393
Node: Pré-inicializar Python com PyPreConfig17164862
Ref: c-api/init_config c-preinit17164989
Ref: 415a17164989
Ref: c-api/init_config preinitialize-python-with-pypreconfig17164989
Ref: 530517164989
Ref: c-api/init_config c Py_PreInitialize17165524
Ref: 41b17165524
Ref: c-api/init_config c Py_PreInitializeFromBytesArgs17165741
Ref: bb117165741
Ref: c-api/init_config c Py_PreInitializeFromArgs17166141
Ref: bb017166141
Node: PyConfig17168246
Ref: c-api/init_config pyconfig17168390
Ref: 530617168390
Ref: c-api/init_config c PyConfig17168427
Ref: 3f417168427
Ref: c-api/init_config c PyConfig_InitPythonConfig17168683
Ref: b9e17168683
Ref: c-api/init_config c PyConfig_InitIsolatedConfig17168844
Ref: b9d17168844
Ref: c-api/init_config c PyConfig_SetString17169009
Ref: ba217169009
Ref: c-api/init_config c PyConfig_SetBytesString17169281
Ref: ba117169281
Ref: c-api/init_config c PyConfig_SetArgv17169611
Ref: b9f17169611
Ref: c-api/init_config c PyConfig_SetBytesArgv17169927
Ref: ba017169927
Ref: c-api/init_config c PyConfig_SetWideStringList17170296
Ref: 1c8017170296
Ref: c-api/init_config c PyConfig_Read17170603
Ref: 98817170603
Ref: c-api/init_config c PyConfig_Clear17171960
Ref: b9c17171960
Ref: c-api/init_config c PyConfig argv17173087
Ref: 3ee17173087
Ref: c-api/init_config c PyConfig safe_path17174101
Ref: 96c17174101
Ref: c-api/init_config c PyConfig base_exec_prefix17174984
Ref: 52d817174984
Ref: c-api/init_config c PyConfig base_executable17175229
Ref: 52d917175229
Ref: c-api/init_config c PyConfig base_prefix17175627
Ref: 52da17175627
Ref: c-api/init_config c PyConfig buffered_stdio17175857
Ref: 40e17175857
Ref: c-api/init_config c PyConfig bytes_warning17176270
Ref: 40417176270
Ref: c-api/init_config c PyConfig warn_default_encoding17176715
Ref: 52f317176715
Ref: c-api/init_config c PyConfig code_debug_ranges17177032
Ref: 52dc17177032
Ref: c-api/init_config c PyConfig check_hash_pycs_mode17177510
Ref: 52db17177510
Ref: c-api/init_config c PyConfig configure_c_stdio17178186
Ref: 52df17178186
Ref: c-api/init_config c PyConfig dev_mode17178763
Ref: 52e217178763
Ref: c-api/init_config c PyConfig dump_refs17179065
Ref: 52e317179065
Ref: c-api/init_config c PyConfig dump_refs_file17179478
Ref: 52e417179478
Ref: c-api/init_config c PyConfig exec_prefix17179732
Ref: 52e517179732
Ref: c-api/init_config c PyConfig executable17180084
Ref: 63917180084
Ref: c-api/init_config c PyConfig faulthandler17180402
Ref: 52e617180402
Ref: c-api/init_config c PyConfig filesystem_encoding17180758
Ref: 41817180758
Ref: c-api/init_config c PyConfig filesystem_errors17181985
Ref: 41917181985
Ref: c-api/init_config c PyConfig use_frozen_modules17182654
Ref: 52f217182654
Ref: c-api/init_config c PyConfig hash_seed17182927
Ref: 41117182927
Ref: c-api/init_config c PyConfig use_hash_seed17182971
Ref: 41017182971
Ref: c-api/init_config c PyConfig home17183378
Ref: 3f017183378
Ref: c-api/init_config c PyConfig import_time17183730
Ref: 52e717183730
Ref: c-api/init_config c PyConfig inspect17184200
Ref: 3fe17184200
Ref: c-api/init_config c PyConfig install_signal_handlers17184788
Ref: ab117184788
Ref: c-api/init_config c PyConfig interactive17184949
Ref: 3fc17184949
Ref: c-api/init_config c PyConfig int_max_str_digits17185153
Ref: 52e817185153
Ref: c-api/init_config c PyConfig cpu_count17186047
Ref: 52e117186047
Ref: c-api/init_config c PyConfig isolated17186540
Ref: 41317186540
Ref: c-api/init_config c PyConfig legacy_windows_stdio17187543
Ref: 41717187543
Ref: c-api/init_config c PyConfig malloc_stats17188190
Ref: 52e917188190
Ref: c-api/init_config c PyConfig platlibdir17188574
Ref: 1be117188574
Ref: c-api/init_config c PyConfig pythonpath_env17189391
Ref: 530717189391
Ref: c-api/init_config c PyConfig module_search_paths17189731
Ref: 63717189731
Ref: c-api/init_config c PyConfig module_search_paths_set17189800
Ref: 7fa17189800
Ref: c-api/init_config c PyConfig optimization_level17190325
Ref: 40017190325
Ref: c-api/init_config c PyConfig orig_argv17190820
Ref: a8a17190820
Ref: c-api/init_config c PyConfig parse_argv17191498
Ref: 1bcb17191498
Ref: c-api/init_config c PyConfig parser_debug17192398
Ref: 3f617192398
Ref: c-api/init_config c PyConfig pathconfig_warnings17192874
Ref: 40617192874
Ref: c-api/init_config c PyConfig prefix17193294
Ref: 52eb17193294
Ref: c-api/init_config c PyConfig program_name17193623
Ref: 3ef17193623
Ref: c-api/init_config c PyConfig pycache_prefix17194355
Ref: 52ec17194355
Ref: c-api/init_config c PyConfig quiet17194817
Ref: 3fa17194817
Ref: c-api/init_config c PyConfig run_command17195083
Ref: 528517195083
Ref: c-api/init_config c PyConfig run_filename17195260
Ref: 528617195260
Ref: c-api/init_config c PyConfig run_module17195727
Ref: 528717195727
Ref: c-api/init_config c PyConfig run_presite17195903
Ref: 52ed17195903
Ref: c-api/init_config c PyConfig show_ref_count17196394
Ref: 52ee17196394
Ref: c-api/init_config c PyConfig site_import17196749
Ref: 40217196749
Ref: c-api/init_config c PyConfig skip_source_first_line17197402
Ref: 52ef17197402
Ref: c-api/init_config c PyConfig stdio_encoding17197775
Ref: 63817197775
Ref: c-api/init_config c PyConfig stdio_errors17197819
Ref: 47b617197819
Ref: c-api/init_config c PyConfig tracemalloc17198736
Ref: 52f117198736
Ref: c-api/init_config c PyConfig perf_profiling17199091
Ref: 52ea17199091
Ref: c-api/init_config c PyConfig stdlib_dir17199916
Ref: 52f017199916
Ref: c-api/init_config c PyConfig use_environment17200080
Ref: 40817200080
Ref: c-api/init_config c PyConfig use_system_logger17200428
Ref: 211c17200428
Ref: c-api/init_config c PyConfig user_site_directory17200789
Ref: 40c17200789
Ref: c-api/init_config c PyConfig verbose17201184
Ref: 3f817201184
Ref: c-api/init_config c PyConfig warnoptions17201792
Ref: 63517201792
Ref: c-api/init_config c PyConfig write_bytecode17202635
Ref: 40a17202635
Ref: c-api/init_config c PyConfig xoptions17203094
Ref: 63617203094
Ref: c-api/init_config c PyConfig _pystats17203284
Ref: 52f417203284
Ref: PyConfig-Footnote-117203955
Ref: PyConfig-Footnote-217203997
Node: Initialization with PyConfig17204039
Ref: c-api/init_config init-from-config17204166
Ref: 528417204166
Ref: c-api/init_config initialization-with-pyconfig17204166
Ref: 530817204166
Node: Isolated Configuration17207870
Ref: c-api/init_config init-isolated-conf17208013
Ref: 52cf17208013
Ref: c-api/init_config isolated-configuration17208013
Ref: 530917208013
Node: Configuração do Python17208784
Ref: c-api/init_config init-python-config17208924
Ref: 528817208924
Ref: c-api/init_config python-configuration17208924
Ref: 530a17208924
Ref: Configuração do Python-Footnote-117209566
Ref: Configuração do Python-Footnote-217209608
Node: Python Path Configuration17209650
Ref: c-api/init_config init-path-config17209759
Ref: aa017209759
Ref: c-api/init_config python-path-configuration17209759
Ref: 530b17209759
Node: Py_GetArgcArgv17214108
Ref: c-api/init_config py-getargcargv17214264
Ref: 530c17214264
Ref: c-api/init_config c Py_GetArgcArgv17214313
Ref: 1bf917214313
Node: Delaying main module execution17214514
Ref: c-api/init_config delaying-main-module-execution17214647
Ref: 530d17214647
Node: Gerenciamento de Memória17215153
Ref: c-api/memory doc17215349
Ref: 530e17215349
Ref: c-api/memory memory17215349
Ref: 530017215349
Ref: c-api/memory memory-management17215349
Ref: 530f17215349
Ref: c-api/memory no-color17215349
Ref: 531017215349
Node: Visão Geral<4>17215764
Ref: c-api/memory memoryoverview17215867
Ref: 531117215867
Ref: c-api/memory overview17215867
Ref: 531217215867
Node: Allocator Domains17219958
Ref: c-api/memory allocator-domains17220090
Ref: 531317220090
Ref: c-api/memory id117220141
Ref: 531417220141
Node: Raw Memory Interface17222169
Ref: c-api/memory raw-memory-interface17222307
Ref: 531a17222307
Ref: c-api/memory raw-memoryinterface17222307
Ref: 531617222307
Ref: c-api/memory c PyMem_RawMalloc17222782
Ref: 62517222782
Ref: c-api/memory c PyMem_RawCalloc17223228
Ref: 62617223228
Ref: c-api/memory c PyMem_RawRealloc17223794
Ref: 62717223794
Ref: c-api/memory c PyMem_RawFree17224602
Ref: 62817224602
Node: Interface da Memória17225072
Ref: c-api/memory memory-interface17225213
Ref: 531b17225213
Ref: c-api/memory memoryinterface17225213
Ref: 531717225213
Ref: c-api/memory c PyMem_Malloc17225746
Ref: e5417225746
Ref: c-api/memory c PyMem_Calloc17226164
Ref: 10a317226164
Ref: c-api/memory c PyMem_Realloc17226723
Ref: 122817226723
Ref: c-api/memory c PyMem_Free17227494
Ref: 163317227494
Ref: c-api/memory c PyMem_New17228031
Ref: 171217228031
Ref: c-api/memory c PyMem_Resize17228266
Ref: 531c17228266
Ref: c-api/memory c PyMem_Del17228714
Ref: 171317228714
Node: Alocadores de objeto17229328
Ref: c-api/memory object-allocators17229479
Ref: 531d17229479
Ref: c-api/memory objectinterface17229479
Ref: 531817229479
Ref: c-api/memory c PyObject_Malloc17230191
Ref: e5617230191
Ref: c-api/memory c PyObject_Calloc17230615
Ref: 10a417230615
Ref: c-api/memory c PyObject_Realloc17231180
Ref: 163417231180
Ref: c-api/memory c PyObject_Free17231969
Ref: e5317231969
Node: Alocadores de memória padrão17233170
Ref: c-api/memory default-memory-allocators17233322
Ref: 1fe917233322
Ref: c-api/memory id217233322
Ref: 531f17233322
Node: Alocadores de memória17235838
Ref: c-api/memory customize-memory-allocators17236013
Ref: 531e17236013
Ref: c-api/memory id317236013
Ref: 532017236013
Ref: c-api/memory c PyMemAllocatorEx17236101
Ref: 10c417236101
Ref: c-api/memory c PyMemAllocatorDomain17237946
Ref: 531517237946
Ref: c-api/memory c PYMEM_DOMAIN_RAW17238044
Ref: 1fea17238044
Ref: c-api/memory c PYMEM_DOMAIN_MEM17238285
Ref: e5717238285
Ref: c-api/memory c PYMEM_DOMAIN_OBJ17238517
Ref: e5517238517
Ref: c-api/memory c PyMem_GetAllocator17238760
Ref: 528017238760
Ref: c-api/memory c PyMem_SetAllocator17238932
Ref: 79d17238932
Ref: c-api/memory c PyMem_SetupDebugHooks17240914
Ref: e5817240914
Node: Debug hooks on the Python memory allocators17241064
Ref: c-api/memory debug-hooks-on-the-python-memory-allocators17241231
Ref: 532117241231
Ref: c-api/memory pymem-debug-hooks17241231
Ref: 1fec17241231
Node: The pymalloc allocator17246552
Ref: c-api/memory pymalloc17246719
Ref: eff17246719
Ref: c-api/memory the-pymalloc-allocator17246719
Ref: 532217246719
Node: Customize pymalloc Arena Allocator17248036
Ref: c-api/memory customize-pymalloc-arena-allocator17248129
Ref: 532317248129
Ref: c-api/memory c PyObjectArenaAllocator17248246
Ref: 532417248246
Ref: c-api/memory c PyObject_GetArenaAllocator17249259
Ref: 528117249259
Ref: c-api/memory c PyObject_SetArenaAllocator17249385
Ref: 527f17249385
Node: The mimalloc allocator17249511
Ref: c-api/memory mimalloc17249652
Ref: 1feb17249652
Ref: c-api/memory the-mimalloc-allocator17249652
Ref: 532517249652
Node: tracemalloc C API17250018
Ref: c-api/memory tracemalloc-c-api17250149
Ref: 532617250149
Ref: c-api/memory c PyTraceMalloc_Track17250230
Ref: da317250230
Ref: c-api/memory c PyTraceMalloc_Untrack17250643
Ref: da417250643
Node: Exemplos<38>17250935
Ref: c-api/memory examples17251035
Ref: 532717251035
Ref: c-api/memory memoryexamples17251035
Ref: 532817251035
Node: Suporte a implementação de Objetos17252953
Ref: c-api/objimpl doc17253132
Ref: 532917253132
Ref: c-api/objimpl newtypes17253132
Ref: 532a17253132
Ref: c-api/objimpl no-color17253132
Ref: 532b17253132
Ref: c-api/objimpl object-implementation-support17253132
Ref: 532c17253132
Node: Alocando objetos na heap17253475
Ref: c-api/allocation doc17253604
Ref: 532d17253604
Ref: c-api/allocation allocating-objects17253604
Ref: 532e17253604
Ref: c-api/allocation allocating-objects-on-the-heap17253604
Ref: 532f17253604
Ref: c-api/allocation c _PyObject_New17253669
Ref: 533017253669
Ref: c-api/allocation c _PyObject_NewVar17253783
Ref: 533117253783
Ref: c-api/allocation c PyObject_Init17253931
Ref: c5417253931
Ref: c-api/allocation c PyObject_InitVar17254938
Ref: 1bf817254938
Ref: c-api/allocation c PyObject_New17255413
Ref: b7217255413
Ref: c-api/allocation c PyObject_NewVar17257339
Ref: b7317257339
Ref: c-api/allocation c PyObject_Del17259375
Ref: 16bf17259375
Ref: c-api/allocation c _Py_NoneStruct17259465
Ref: 533217259465
Node: Ciclo de vida do objeto17259807
Ref: c-api/lifecycle doc17259973
Ref: 533317259973
Ref: c-api/lifecycle life-cycle17259973
Ref: 533417259973
Ref: c-api/lifecycle no-color17259973
Ref: 533517259973
Ref: c-api/lifecycle object-life-cycle17259973
Ref: 533617259973
Node: Eventos de vida17260450
Ref: c-api/lifecycle life-events17260566
Ref: 533717260566
Node: Destruição de isolado cíclico17266185
Ref: c-api/lifecycle cyclic-isolate-destruction17266323
Ref: 533a17266323
Ref: Destruição de isolado cíclico-Footnote-117272185
Node: Funções<15>17272227
Ref: c-api/lifecycle functions17272341
Ref: 533b17272341
Ref: c-api/lifecycle c PyObject_CallFinalizer17272458
Ref: 533c17272458
Ref: c-api/lifecycle c PyObject_CallFinalizerFromDealloc17273026
Ref: 533817273026
Node: Estruturas comuns de objetos17273608
Ref: c-api/structures doc17273772
Ref: 533d17273772
Ref: c-api/structures common-object-structures17273772
Ref: 533e17273772
Ref: c-api/structures common-structs17273772
Ref: 533f17273772
Ref: c-api/structures no-color17273772
Ref: 534017273772
Node: Base object types and macros17274128
Ref: c-api/structures base-object-types-and-macros17274264
Ref: 534117274264
Ref: c-api/structures c PyObject17274796
Ref: 5d517274796
Ref: c-api/structures c PyObject ob_refcnt17275500
Ref: a9517275500
Ref: c-api/structures c PyObject ob_type17275977
Ref: 4d6e17275977
Ref: c-api/structures c PyVarObject17276216
Ref: 456617276216
Ref: c-api/structures c PyVarObject ob_size17276678
Ref: 4f6617276678
Ref: c-api/structures c PyObject_HEAD17277424
Ref: 14d917277424
Ref: c-api/structures c PyObject_VAR_HEAD17277692
Ref: 534217277692
Ref: c-api/structures c PyBaseObject_Type17277997
Ref: 4df217277997
Ref: c-api/structures c Py_Is17278185
Ref: a9617278185
Ref: c-api/structures c Py_IsNone17278418
Ref: a9717278418
Ref: c-api/structures c Py_IsTrue17278658
Ref: a9817278658
Ref: c-api/structures c Py_IsFalse17278898
Ref: a9917278898
Ref: c-api/structures c Py_TYPE17279141
Ref: 3c617279141
Ref: c-api/structures c Py_IS_TYPE17279656
Ref: 1ab717279656
Ref: c-api/structures c Py_SET_TYPE17279882
Ref: 97917279882
Ref: c-api/structures c Py_SIZE17280538
Ref: 97a17280538
Ref: c-api/structures c Py_SET_SIZE17280823
Ref: 97b17280823
Ref: c-api/structures c PyObject_HEAD_INIT17280983
Ref: 534317280983
Ref: c-api/structures c PyVarObject_HEAD_INIT17281201
Ref: 534417281201
Node: Implementing functions and methods17281485
Ref: c-api/structures implementing-functions-and-methods17281669
Ref: 534517281669
Ref: c-api/structures c PyCFunction17281758
Ref: 166617281758
Ref: c-api/structures c PyCFunctionWithKeywords17282377
Ref: 4e0417282377
Ref: c-api/structures c PyCFunctionFast17282803
Ref: 4e0217282803
Ref: c-api/structures c PyCFunctionFastWithKeywords17283211
Ref: 4e0317283211
Ref: c-api/structures c PyCMethod17283755
Ref: 95d17283755
Ref: c-api/structures c PyMethodDef17284250
Ref: 16c517284250
Ref: c-api/structures c PyMethodDef ml_name17284453
Ref: 4d8b17284453
Ref: c-api/structures c PyMethodDef ml_meth17284521
Ref: 534817284521
Ref: c-api/structures c PyMethodDef ml_flags17284618
Ref: 534917284618
Ref: c-api/structures c PyMethodDef ml_doc17284720
Ref: 534a17284720
Ref: c-api/structures c METH_VARARGS17285451
Ref: 16f617285451
Ref: c-api/structures c METH_KEYWORDS17285965
Ref: 4d4317285965
Ref: c-api/structures meth-varargs-meth-keywords17286218
Ref: 534617286218
Ref: c-api/structures c METH_FASTCALL17286655
Ref: 18e217286655
Ref: c-api/structures meth-fastcall-meth-keywords17287161
Ref: 534717287161
Ref: c-api/structures c METH_METHOD17287834
Ref: b5e17287834
Ref: c-api/structures meth-method-meth-fastcall-meth-keywords17287981
Ref: 194517287981
Ref: c-api/structures c METH_NOARGS17288511
Ref: 16c217288511
Ref: c-api/structures c METH_O17289074
Ref: 16f517289074
Ref: c-api/structures c METH_CLASS17289668
Ref: 16c317289668
Ref: c-api/structures c METH_STATIC17289944
Ref: 16c417289944
Ref: c-api/structures c METH_COEXIST17290332
Ref: 166517290332
Ref: c-api/structures c PyCMethod_New17291002
Ref: 1b9017291002
Ref: c-api/structures c PyCFunction_NewEx17292159
Ref: 1c2d17292159
Ref: c-api/structures c PyCFunction_New17292420
Ref: 1b9617292420
Node: Accessing attributes of extension types17292685
Ref: c-api/structures accessing-attributes-of-extension-types17292832
Ref: 534b17292832
Ref: c-api/structures c PyMemberDef17292931
Ref: 76617292931
Ref: c-api/structures c PyMemberDef name17293278
Ref: 534c17293278
Ref: c-api/structures c PyMemberDef type17293479
Ref: 4d8c17293479
Ref: c-api/structures c PyMemberDef offset17293625
Ref: 534d17293625
Ref: c-api/structures c PyMemberDef flags17293774
Ref: 4d8d17293774
Ref: c-api/structures c PyMemberDef doc17293898
Ref: 534f17293898
Ref: c-api/structures pymemberdef-offsets17294438
Ref: 50b717294438
Ref: c-api/structures c PyMember_GetOne17295803
Ref: 79f17295803
Ref: c-api/structures c PyMember_SetOne17296253
Ref: 7a017296253
Node: Member flags17296829
Ref: c-api/structures member-flags17296938
Ref: 535117296938
Ref: c-api/structures pymemberdef-flags17296938
Ref: 534e17296938
Ref: c-api/structures c Py_READONLY17297053
Ref: 7a317297053
Ref: c-api/structures c Py_AUDIT_READ17297099
Ref: 7a417297099
Ref: c-api/structures c Py_RELATIVE_OFFSET17297212
Ref: 76517297212
Node: Member types17298452
Ref: c-api/structures member-types17298598
Ref: 535217298598
Ref: c-api/structures pymemberdef-types17298598
Ref: 192c17298598
Ref: c-api/structures c Py_T_BYTE17299483
Ref: 535317299483
Ref: c-api/structures c Py_T_SHORT17299715
Ref: 535417299715
Ref: c-api/structures c Py_T_INT17299944
Ref: 7a117299944
Ref: c-api/structures c Py_T_LONG17300176
Ref: 535517300176
Ref: c-api/structures c Py_T_LONGLONG17300411
Ref: 535617300411
Ref: c-api/structures c Py_T_UBYTE17300639
Ref: 535717300639
Ref: c-api/structures c Py_T_UINT17300869
Ref: 535817300869
Ref: c-api/structures c Py_T_USHORT17301102
Ref: 535917301102
Ref: c-api/structures c Py_T_ULONG17301332
Ref: 535a17301332
Ref: c-api/structures c Py_T_ULONGLONG17301567
Ref: 535b17301567
Ref: c-api/structures c Py_T_PYSSIZET17301797
Ref: 535c17301797
Ref: c-api/structures c Py_T_FLOAT17302025
Ref: 535d17302025
Ref: c-api/structures c Py_T_DOUBLE17302259
Ref: 7a217302259
Ref: c-api/structures c Py_T_BOOL17302490
Ref: 535e17302490
Ref: c-api/structures c Py_T_STRING17302724
Ref: 535017302724
Ref: c-api/structures c Py_T_STRING_INPLACE17302968
Ref: 535f17302968
Ref: c-api/structures c Py_T_CHAR17303194
Ref: 536017303194
Ref: c-api/structures c Py_T_OBJECT_EX17303435
Ref: 7a617303435
Ref: c-api/structures c T_OBJECT17304332
Ref: 7a517304332
Ref: c-api/structures c T_NONE17304547
Ref: 7a717304547
Node: Defining Getters and Setters17304637
Ref: c-api/structures defining-getters-and-setters17304762
Ref: 536117304762
Ref: c-api/structures c PyGetSetDef17304839
Ref: da617304839
Ref: c-api/structures c PyGetSetDef name17305075
Ref: 536217305075
Ref: c-api/structures c PyGetSetDef get17305138
Ref: 536317305138
Ref: c-api/structures c PyGetSetDef set17305226
Ref: 536417305226
Ref: c-api/structures c PyGetSetDef doc17305387
Ref: 536517305387
Ref: c-api/structures c PyGetSetDef closure17305453
Ref: 536617305453
Ref: c-api/structures c getter17305585
Ref: 4f8117305585
Ref: c-api/structures c setter17305969
Ref: 4f8f17305969
Node: Type Object Structures17306448
Ref: c-api/typeobj doc17306622
Ref: 536717306622
Ref: c-api/typeobj no-color17306622
Ref: 536817306622
Ref: c-api/typeobj type-object-structures17306622
Ref: 536917306622
Ref: c-api/typeobj type-structs17306622
Ref: b7a17306622
Node: Referências rápidas17308106
Ref: c-api/typeobj quick-reference17308218
Ref: 536b17308218
Node: “slots tp”17308340
Ref: c-api/typeobj tp-slots17308430
Ref: 536c17308430
Ref: c-api/typeobj tp-slots-table17308430
Ref: 536d17308430
Ref: “slots tp”-Footnote-117321684
Ref: “slots tp”-Footnote-217321996
Node: sub-slots17322791
Ref: c-api/typeobj id317322903
Ref: 537817322903
Ref: c-api/typeobj sub-slots17322903
Ref: 536f17322903
Node: slot typedefs17333311
Ref: c-api/typeobj slot-typedefs17333400
Ref: 53a817333400
Ref: c-api/typeobj slot-typedefs-table17333400
Ref: 536e17333400
Node: PyTypeObject Definition17341263
Ref: c-api/typeobj pytypeobject-definition17341398
Ref: 53aa17341398
Node: PyObject Slots17345017
Ref: c-api/typeobj pyobject-slots17345148
Ref: 53ab17345148
Node: PyVarObject Slots17347175
Ref: c-api/typeobj pyvarobject-slots17347301
Ref: 53ac17347301
Node: PyTypeObject Slots17347735
Ref: c-api/typeobj pytypeobject-slots17347859
Ref: 53ad17347859
Ref: c-api/typeobj c PyTypeObject tp_name17348217
Ref: 1b9517348217
Ref: c-api/typeobj c PyTypeObject tp_basicsize17349976
Ref: b7417349976
Ref: c-api/typeobj c PyTypeObject tp_itemsize17350060
Ref: 225217350060
Ref: c-api/typeobj c PyTypeObject tp_dealloc17354209
Ref: 4d5d17354209
Ref: c-api/typeobj c PyTypeObject tp_vectorcall_offset17359601
Ref: 505517359601
Ref: c-api/typeobj c PyTypeObject tp_getattr17361530
Ref: 4d8f17361530
Ref: c-api/typeobj c PyTypeObject tp_setattr17362298
Ref: 4d9017362298
Ref: c-api/typeobj c PyTypeObject tp_as_async17363086
Ref: 10c517363086
Ref: c-api/typeobj c PyTypeObject tp_repr17363669
Ref: 4d8617363669
Ref: c-api/typeobj c PyTypeObject tp_as_number17364643
Ref: b7817364643
Ref: c-api/typeobj c PyTypeObject tp_as_sequence17365077
Ref: 537017365077
Ref: c-api/typeobj c PyTypeObject tp_as_mapping17365522
Ref: 537117365522
Ref: c-api/typeobj c PyTypeObject tp_hash17365962
Ref: 4d9817365962
Ref: c-api/typeobj c PyTypeObject tp_call17367696
Ref: 77017367696
Ref: c-api/typeobj c PyTypeObject tp_str17368119
Ref: 4d8717368119
Ref: c-api/typeobj c PyTypeObject tp_getattro17369095
Ref: 19a217369095
Ref: c-api/typeobj c PyTypeObject tp_setattro17370016
Ref: 4d8a17370016
Ref: c-api/typeobj c PyTypeObject tp_as_buffer17371063
Ref: b7617371063
Ref: c-api/typeobj c PyTypeObject tp_flags17371496
Ref: 1b6017371496
Ref: c-api/typeobj c Py_TPFLAGS_HEAPTYPE17373400
Ref: aa217373400
Ref: c-api/typeobj c Py_TPFLAGS_BASETYPE17374214
Ref: 4d7617374214
Ref: c-api/typeobj c Py_TPFLAGS_READY17374494
Ref: 53b317374494
Ref: c-api/typeobj c Py_TPFLAGS_READYING17374686
Ref: 53b417374686
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_GC17374887
Ref: 97617374887
Ref: c-api/typeobj c Py_TPFLAGS_DEFAULT17375891
Ref: 4d6b17375891
Ref: c-api/typeobj c Py_TPFLAGS_METHOD_DESCRIPTOR17376229
Ref: 505d17376229
Ref: c-api/typeobj c Py_TPFLAGS_MANAGED_DICT17377167
Ref: 60317377167
Ref: c-api/typeobj c Py_TPFLAGS_MANAGED_WEAKREF17377838
Ref: 77117377838
Ref: c-api/typeobj c Py_TPFLAGS_ITEMS_AT_END17378164
Ref: 76217378164
Ref: c-api/typeobj c Py_TPFLAGS_LONG_SUBCLASS17378838
Ref: 53b517378838
Ref: c-api/typeobj c Py_TPFLAGS_LIST_SUBCLASS17378882
Ref: 53b617378882
Ref: c-api/typeobj c Py_TPFLAGS_TUPLE_SUBCLASS17378926
Ref: 53b717378926
Ref: c-api/typeobj c Py_TPFLAGS_BYTES_SUBCLASS17378971
Ref: 53b817378971
Ref: c-api/typeobj c Py_TPFLAGS_UNICODE_SUBCLASS17379016
Ref: 53b917379016
Ref: c-api/typeobj c Py_TPFLAGS_DICT_SUBCLASS17379063
Ref: 53ba17379063
Ref: c-api/typeobj c Py_TPFLAGS_BASE_EXC_SUBCLASS17379107
Ref: 53bb17379107
Ref: c-api/typeobj c Py_TPFLAGS_TYPE_SUBCLASS17379155
Ref: 53bc17379155
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_FINALIZE17379717
Ref: 42417379717
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_VECTORCALL17380112
Ref: 76b17380112
Ref: c-api/typeobj c Py_TPFLAGS_IMMUTABLETYPE17380679
Ref: 3cc17380679
Ref: c-api/typeobj c Py_TPFLAGS_DISALLOW_INSTANTIATION17381052
Ref: 79717381052
Ref: c-api/typeobj c Py_TPFLAGS_MAPPING17382186
Ref: 1b4717382186
Ref: c-api/typeobj c Py_TPFLAGS_SEQUENCE17383047
Ref: 1b4817383047
Ref: c-api/typeobj c Py_TPFLAGS_VALID_VERSION_TAG17383909
Ref: 53bd17383909
Ref: c-api/typeobj c PyTypeObject tp_doc17384256
Ref: 4d6c17384256
Ref: c-api/typeobj c PyTypeObject tp_traverse17384586
Ref: 97717384586
Ref: c-api/typeobj c PyTypeObject tp_clear17388888
Ref: 4d8417388888
Ref: c-api/typeobj c PyTypeObject tp_richcompare17396443
Ref: 4d9217396443
Ref: c-api/typeobj c Py_LT17397428
Ref: 504817397428
Ref: c-api/typeobj c Py_LE17397528
Ref: 504917397528
Ref: c-api/typeobj c Py_EQ17397629
Ref: 504a17397629
Ref: c-api/typeobj c Py_NE17397730
Ref: 504b17397730
Ref: c-api/typeobj c Py_GT17397831
Ref: 504c17397831
Ref: c-api/typeobj c Py_GE17397931
Ref: 504d17397931
Ref: c-api/typeobj c Py_RETURN_RICHCOMPARE17398064
Ref: da117398064
Ref: c-api/typeobj c PyTypeObject tp_weaklistoffset17399340
Ref: b7517399340
Ref: c-api/typeobj c PyTypeObject tp_iter17400870
Ref: 16dd17400870
Ref: c-api/typeobj c PyTypeObject tp_iternext17401393
Ref: 16de17401393
Ref: c-api/typeobj c PyTypeObject tp_methods17402230
Ref: 4d7517402230
Ref: c-api/typeobj c PyTypeObject tp_members17402761
Ref: 4d7317402761
Ref: c-api/typeobj c PyTypeObject tp_getset17403326
Ref: 4d7817403326
Ref: c-api/typeobj c PyTypeObject tp_base17403883
Ref: 4d7c17403883
Ref: c-api/typeobj c PyTypeObject tp_dict17405205
Ref: 19cb17405205
Ref: c-api/typeobj c PyTypeObject tp_descr_get17406723
Ref: 537217406723
Ref: c-api/typeobj c PyTypeObject tp_descr_set17407055
Ref: 1b9917407055
Ref: c-api/typeobj c PyTypeObject tp_dictoffset17407482
Ref: 50b617407482
Ref: c-api/typeobj c PyTypeObject tp_init17409374
Ref: 79617409374
Ref: c-api/typeobj c PyTypeObject tp_alloc17410841
Ref: 4d7117410841
Ref: c-api/typeobj c PyTypeObject tp_new17411461
Ref: 79417411461
Ref: c-api/typeobj c PyTypeObject tp_free17413198
Ref: 4d7017413198
Ref: c-api/typeobj c PyTypeObject tp_is_gc17414236
Ref: 537317414236
Ref: c-api/typeobj c PyTypeObject tp_bases17415419
Ref: 537417415419
Ref: c-api/typeobj c PyTypeObject tp_mro17416168
Ref: 50b817416168
Ref: c-api/typeobj c PyTypeObject tp_cache17416648
Ref: 50b917416648
Ref: c-api/typeobj c PyTypeObject tp_subclasses17416808
Ref: 78717416808
Ref: c-api/typeobj c PyTypeObject tp_weaklist17417265
Ref: 50ba17417265
Ref: c-api/typeobj c PyTypeObject tp_del17417842
Ref: 537517417842
Ref: c-api/typeobj c PyTypeObject tp_version_tag17417982
Ref: 537617417982
Ref: c-api/typeobj c PyTypeObject tp_finalize17418168
Ref: c9017418168
Ref: c-api/typeobj c PyTypeObject tp_vectorcall17425722
Ref: 18d117425722
Ref: c-api/typeobj c PyTypeObject tp_watched17427375
Ref: 537717427375
Ref: PyTypeObject Slots-Footnote-117427538
Ref: PyTypeObject Slots-Footnote-217427580
Ref: PyTypeObject Slots-Footnote-317427622
Ref: PyTypeObject Slots-Footnote-417427665
Node: Static Types17427707
Ref: c-api/typeobj id417427827
Ref: 53be17427827
Ref: c-api/typeobj static-types17427827
Ref: 97817427827
Node: Tipos no heap17428734
Ref: c-api/typeobj heap-types17428860
Ref: b5417428860
Ref: c-api/typeobj id517428860
Ref: 53bf17428860
Node: Number Object Structures17429371
Ref: c-api/typeobj number-object-structures17429510
Ref: 53c017429510
Ref: c-api/typeobj number-structs17429510
Ref: 53af17429510
Ref: c-api/typeobj c PyNumberMethods17429581
Ref: 160f17429581
Ref: c-api/typeobj c PyNumberMethods nb_add17432034
Ref: 50ad17432034
Ref: c-api/typeobj c PyNumberMethods nb_subtract17432108
Ref: 537f17432108
Ref: c-api/typeobj c PyNumberMethods nb_multiply17432197
Ref: 538117432197
Ref: c-api/typeobj c PyNumberMethods nb_remainder17432286
Ref: 538317432286
Ref: c-api/typeobj c PyNumberMethods nb_divmod17432376
Ref: 538517432376
Ref: c-api/typeobj c PyNumberMethods nb_power17432463
Ref: 538617432463
Ref: c-api/typeobj c PyNumberMethods nb_negative17432550
Ref: 538817432550
Ref: c-api/typeobj c PyNumberMethods nb_positive17432638
Ref: 538917432638
Ref: c-api/typeobj c PyNumberMethods nb_absolute17432726
Ref: 538a17432726
Ref: c-api/typeobj c PyNumberMethods nb_bool17432814
Ref: 538b17432814
Ref: c-api/typeobj c PyNumberMethods nb_invert17432886
Ref: 538c17432886
Ref: c-api/typeobj c PyNumberMethods nb_lshift17432972
Ref: 538d17432972
Ref: c-api/typeobj c PyNumberMethods nb_rshift17433059
Ref: 538f17433059
Ref: c-api/typeobj c PyNumberMethods nb_and17433146
Ref: 539117433146
Ref: c-api/typeobj c PyNumberMethods nb_xor17433220
Ref: 539317433220
Ref: c-api/typeobj c PyNumberMethods nb_or17433294
Ref: 539517433294
Ref: c-api/typeobj c PyNumberMethods nb_int17433367
Ref: 539717433367
Ref: c-api/typeobj c PyNumberMethods nb_reserved17433440
Ref: 539817433440
Ref: c-api/typeobj c PyNumberMethods nb_float17433501
Ref: 539917433501
Ref: c-api/typeobj c PyNumberMethods nb_inplace_add17433586
Ref: 537e17433586
Ref: c-api/typeobj c PyNumberMethods nb_inplace_subtract17433678
Ref: 538017433678
Ref: c-api/typeobj c PyNumberMethods nb_inplace_multiply17433775
Ref: 538217433775
Ref: c-api/typeobj c PyNumberMethods nb_inplace_remainder17433872
Ref: 538417433872
Ref: c-api/typeobj c PyNumberMethods nb_inplace_power17433970
Ref: 538717433970
Ref: c-api/typeobj c PyNumberMethods nb_inplace_lshift17434065
Ref: 538e17434065
Ref: c-api/typeobj c PyNumberMethods nb_inplace_rshift17434160
Ref: 539017434160
Ref: c-api/typeobj c PyNumberMethods nb_inplace_and17434255
Ref: 539217434255
Ref: c-api/typeobj c PyNumberMethods nb_inplace_xor17434347
Ref: 539417434347
Ref: c-api/typeobj c PyNumberMethods nb_inplace_or17434439
Ref: 539617434439
Ref: c-api/typeobj c PyNumberMethods nb_floor_divide17434530
Ref: 539a17434530
Ref: c-api/typeobj c PyNumberMethods nb_true_divide17434623
Ref: 539c17434623
Ref: c-api/typeobj c PyNumberMethods nb_inplace_floor_divide17434715
Ref: 539b17434715
Ref: c-api/typeobj c PyNumberMethods nb_inplace_true_divide17434816
Ref: 539d17434816
Ref: c-api/typeobj c PyNumberMethods nb_index17434916
Ref: 160e17434916
Ref: c-api/typeobj c PyNumberMethods nb_matrix_multiply17435001
Ref: 539e17435001
Ref: c-api/typeobj c PyNumberMethods nb_inplace_matrix_multiply17435097
Ref: 539f17435097
Node: Mapping Object Structures17435201
Ref: c-api/typeobj mapping-object-structures17435353
Ref: 53c117435353
Ref: c-api/typeobj mapping-structs17435353
Ref: 53b117435353
Ref: c-api/typeobj c PyMappingMethods17435426
Ref: 4d9717435426
Ref: c-api/typeobj c PyMappingMethods mp_length17435598
Ref: 53a017435598
Ref: c-api/typeobj c PyMappingMethods mp_subscript17435888
Ref: 1bd017435888
Ref: c-api/typeobj c PyMappingMethods mp_ass_subscript17436282
Ref: 53a117436282
Node: Sequence Object Structures17436774
Ref: c-api/typeobj sequence-object-structures17436926
Ref: 53c217436926
Ref: c-api/typeobj sequence-structs17436926
Ref: 53b017436926
Ref: c-api/typeobj c PySequenceMethods17437001
Ref: 4d9617437001
Ref: c-api/typeobj c PySequenceMethods sq_length17437152
Ref: 50b517437152
Ref: c-api/typeobj c PySequenceMethods sq_concat17437492
Ref: 53a217437492
Ref: c-api/typeobj c PySequenceMethods sq_repeat17437793
Ref: 53a317437793
Ref: c-api/typeobj c PySequenceMethods sq_item17438108
Ref: 1bcf17438108
Ref: c-api/typeobj c PySequenceMethods sq_ass_item17438866
Ref: 53a417438866
Ref: c-api/typeobj c PySequenceMethods sq_contains17439355
Ref: 53a517439355
Ref: c-api/typeobj c PySequenceMethods sq_inplace_concat17439691
Ref: 53a617439691
Ref: c-api/typeobj c PySequenceMethods sq_inplace_repeat17440240
Ref: 53a717440240
Node: Buffer Object Structures17440802
Ref: c-api/typeobj buffer-object-structures17440952
Ref: 53c317440952
Ref: c-api/typeobj buffer-structs17440952
Ref: 507717440952
Ref: c-api/typeobj c PyBufferProcs17441023
Ref: 50bb17441023
Ref: c-api/typeobj c PyBufferProcs bf_getbuffer17441257
Ref: 95b17441257
Ref: c-api/typeobj c PyBufferProcs bf_releasebuffer17443144
Ref: 95c17443144
Node: Async Object Structures17444284
Ref: c-api/typeobj async-object-structures17444426
Ref: 53c417444426
Ref: c-api/typeobj async-structs17444426
Ref: 53ae17444426
Ref: c-api/typeobj c PyAsyncMethods17444523
Ref: 50b417444523
Ref: c-api/typeobj c PyAsyncMethods am_await17444940
Ref: 537917444940
Ref: c-api/typeobj c PyAsyncMethods am_aiter17445318
Ref: 537a17445318
Ref: c-api/typeobj c PyAsyncMethods am_anext17445702
Ref: 537b17445702
Ref: c-api/typeobj c PyAsyncMethods am_send17446000
Ref: 537c17446000
Node: Slot Type typedefs17446321
Ref: c-api/typeobj id617446451
Ref: 53a917446451
Ref: c-api/typeobj slot-type-typedefs17446451
Ref: 53c517446451
Ref: c-api/typeobj c allocfunc17446510
Ref: 4f7817446510
Ref: c-api/typeobj c destructor17447580
Ref: 4f7c17447580
Ref: c-api/typeobj c freefunc17447685
Ref: 51e517447685
Ref: c-api/typeobj c newfunc17447761
Ref: 4f8717447761
Ref: c-api/typeobj c initproc17447964
Ref: 4f8317447964
Ref: c-api/typeobj c reprfunc17448147
Ref: 4f8b17448147
Ref: c-api/typeobj c getattrfunc17448303
Ref: 4f7d17448303
Ref: c-api/typeobj c setattrfunc17448515
Ref: 4f8d17448515
Ref: c-api/typeobj c getattrofunc17448806
Ref: 4f7e17448806
Ref: c-api/typeobj c setattrofunc17449070
Ref: 4f8e17449070
Ref: c-api/typeobj c descrgetfunc17449413
Ref: 4f7a17449413
Ref: c-api/typeobj c descrsetfunc17449624
Ref: 4f7b17449624
Ref: c-api/typeobj c hashfunc17449817
Ref: 4f8217449817
Ref: c-api/typeobj c richcmpfunc17449974
Ref: 4f8c17449974
Ref: c-api/typeobj c getiterfunc17450173
Ref: 4f8017450173
Ref: c-api/typeobj c iternextfunc17450332
Ref: 4f8517450332
Ref: c-api/typeobj c lenfunc17450496
Ref: 4f8617450496
Ref: c-api/typeobj c getbufferproc17450626
Ref: 4f7f17450626
Ref: c-api/typeobj c releasebufferproc17450794
Ref: 4f8a17450794
Ref: c-api/typeobj c unaryfunc17450962
Ref: 4f9417450962
Ref: c-api/typeobj c binaryfunc17451093
Ref: 4f7917451093
Ref: c-api/typeobj c sendfunc17451248
Ref: 537d17451248
Ref: c-api/typeobj c ternaryfunc17451428
Ref: 4f9217451428
Ref: c-api/typeobj c ssizeargfunc17451607
Ref: 4f9017451607
Ref: c-api/typeobj c ssizeobjargproc17451765
Ref: 4f9117451765
Ref: c-api/typeobj c objobjproc17451930
Ref: 4f8917451930
Ref: c-api/typeobj c objobjargproc17452067
Ref: 4f8817452067
Node: Exemplos<39>17452230
Ref: c-api/typeobj examples17452328
Ref: 53c617452328
Ref: c-api/typeobj typedef-examples17452328
Ref: 536a17452328
Node: Suporte a Coleta Cíclica de Lixo17457707
Ref: c-api/gcsupport doc17457844
Ref: 53c717457844
Ref: c-api/gcsupport no-color17457844
Ref: 53c817457844
Ref: c-api/gcsupport supporting-cycle-detection17457844
Ref: 53b217457844
Ref: c-api/gcsupport supporting-cyclic-garbage-collection17457844
Ref: 53c917457844
Ref: c-api/gcsupport c PyObject_GC_New17460315
Ref: c8c17460315
Ref: c-api/gcsupport c PyObject_GC_NewVar17461144
Ref: c8d17461144
Ref: c-api/gcsupport c PyUnstable_Object_GC_NewWithExtraData17461988
Ref: 19e417461988
Ref: c-api/gcsupport c PyObject_GC_Resize17463179
Ref: 19e917463179
Ref: c-api/gcsupport c PyObject_GC_Track17463562
Ref: 16f217463562
Ref: c-api/gcsupport c PyObject_IS_GC17463999
Ref: b7117463999
Ref: c-api/gcsupport c PyObject_GC_IsTracked17464250
Ref: b6317464250
Ref: c-api/gcsupport c PyObject_GC_IsFinalized17464638
Ref: b6417464638
Ref: c-api/gcsupport c PyObject_GC_Del17465029
Ref: 16f117465029
Ref: c-api/gcsupport c PyObject_GC_UnTrack17465825
Ref: 16f317465825
Ref: c-api/gcsupport c visitproc17466545
Ref: 4f9517466545
Ref: c-api/gcsupport c traverseproc17467159
Ref: 4f9317467159
Ref: c-api/gcsupport c Py_VISIT17467969
Ref: 4d7a17467969
Ref: c-api/gcsupport c inquiry17468565
Ref: 4f8417468565
Node: Controlando o estado do coletor de lixo17469186
Ref: c-api/gcsupport controlling-the-garbage-collector-state17469336
Ref: 53ca17469336
Ref: c-api/gcsupport c PyGC_Collect17469520
Ref: b7b17469520
Ref: c-api/gcsupport c PyGC_Enable17470086
Ref: a9a17470086
Ref: c-api/gcsupport c PyGC_Disable17470364
Ref: a9b17470364
Ref: c-api/gcsupport c PyGC_IsEnabled17470644
Ref: a9c17470644
Node: Querying Garbage Collector State17470939
Ref: c-api/gcsupport querying-garbage-collector-state17471089
Ref: 53cb17471089
Ref: c-api/gcsupport c PyUnstable_GC_VisitObjects17471272
Ref: 53cc17471272
Ref: c-api/gcsupport c gcvisitobjects_t17472074
Ref: 53cd17472074
Node: API e Versionamento de ABI17472566
Ref: c-api/apiabiversion doc17472742
Ref: 53ce17472742
Ref: c-api/apiabiversion api-and-abi-versioning17472742
Ref: 53cf17472742
Ref: c-api/apiabiversion apiabiversion17472742
Ref: 47b117472742
Ref: c-api/apiabiversion no-color17472742
Ref: 53d017472742
Node: Constantes de versão de tempo de construção17472939
Ref: c-api/apiabiversion build-time-version-constants17473087
Ref: 53d117473087
Ref: c-api/apiabiversion c PY_MAJOR_VERSION17473526
Ref: 53d217473526
Ref: c-api/apiabiversion c PY_MINOR_VERSION17473591
Ref: 53d317473591
Ref: c-api/apiabiversion c PY_MICRO_VERSION17473656
Ref: 53d417473656
Ref: c-api/apiabiversion c PY_RELEASE_LEVEL17473721
Ref: 53d517473721
Ref: c-api/apiabiversion c PY_RELEASE_SERIAL17473914
Ref: 53d617473914
Ref: c-api/apiabiversion c PY_VERSION_HEX17474015
Ref: 37f17474015
Node: Versão de tempo de execução17474313
Ref: c-api/apiabiversion run-time-version17474501
Ref: 53d717474501
Ref: c-api/apiabiversion c Py_Version17474575
Ref: 37e17474575
Node: Macros de empacotamento de bits17475086
Ref: c-api/apiabiversion bit-packing-macros17475219
Ref: 53d817475219
Ref: c-api/apiabiversion c Py_PACK_FULL_VERSION17475298
Ref: 37d17475298
Ref: c-api/apiabiversion c Py_PACK_VERSION17479042
Ref: 37c17479042
Node: API C de monitoramento17479386
Ref: c-api/monitoring doc17479555
Ref: 53d917479555
Ref: c-api/monitoring c-api-monitoring17479555
Ref: 47f17479555
Ref: c-api/monitoring monitoring-c-api17479555
Ref: 53da17479555
Ref: c-api/monitoring no-color17479555
Ref: 53db17479555
Node: Gerando eventos de execução17479864
Ref: c-api/monitoring generating-execution-events17479998
Ref: 53dc17479998
Ref: c-api/monitoring c PyMonitoringState17481063
Ref: 5b517481063
Ref: c-api/monitoring c PyMonitoring_FirePyStartEvent17481456
Ref: 5b617481456
Ref: c-api/monitoring c PyMonitoring_FirePyResumeEvent17481620
Ref: 5b717481620
Ref: c-api/monitoring c PyMonitoring_FirePyReturnEvent17481786
Ref: 5b817481786
Ref: c-api/monitoring c PyMonitoring_FirePyYieldEvent17481970
Ref: 5b917481970
Ref: c-api/monitoring c PyMonitoring_FireCallEvent17482152
Ref: 5ba17482152
Ref: c-api/monitoring c PyMonitoring_FireLineEvent17482355
Ref: 5bb17482355
Ref: c-api/monitoring c PyMonitoring_FireJumpEvent17482524
Ref: 5bc17482524
Ref: c-api/monitoring c PyMonitoring_FireBranchLeftEvent17482706
Ref: 3aa17482706
Ref: c-api/monitoring c PyMonitoring_FireBranchRightEvent17482911
Ref: 3ab17482911
Ref: c-api/monitoring c PyMonitoring_FireCReturnEvent17483118
Ref: 5bd17483118
Ref: c-api/monitoring c PyMonitoring_FirePyThrowEvent17483300
Ref: 5be17483300
Ref: c-api/monitoring c PyMonitoring_FireRaiseEvent17483555
Ref: 5bf17483555
Ref: c-api/monitoring c PyMonitoring_FireCRaiseEvent17483805
Ref: 5c017483805
Ref: c-api/monitoring c PyMonitoring_FireReraiseEvent17484058
Ref: 5c117484058
Ref: c-api/monitoring c PyMonitoring_FireExceptionHandledEvent17484312
Ref: 5c217484312
Ref: c-api/monitoring c PyMonitoring_FirePyUnwindEvent17484585
Ref: 5c317484585
Ref: c-api/monitoring c PyMonitoring_FireStopIterationEvent17484842
Ref: 5c417484842
Node: Gerenciando o Estado de um Monitoramento17485294
Ref: c-api/monitoring managing-the-monitoring-state17485400
Ref: 53dd17485400
Ref: c-api/monitoring c PyMonitoring_EnterScope17485646
Ref: 5c517485646
Ref: c-api/monitoring c PY_MONITORING_EVENT_BRANCH_LEFT17487792
Ref: 53de17487792
Ref: c-api/monitoring c PY_MONITORING_EVENT_BRANCH_RIGHT17487999
Ref: 53df17487999
Ref: c-api/monitoring c PY_MONITORING_EVENT_CALL17488198
Ref: 53e017488198
Ref: c-api/monitoring c PY_MONITORING_EVENT_C_RAISE17488401
Ref: 53e117488401
Ref: c-api/monitoring c PY_MONITORING_EVENT_C_RETURN17488605
Ref: 53e217488605
Ref: c-api/monitoring c PY_MONITORING_EVENT_EXCEPTION_HANDLED17488818
Ref: 53e317488818
Ref: c-api/monitoring c PY_MONITORING_EVENT_INSTRUCTION17489025
Ref: 53e417489025
Ref: c-api/monitoring c PY_MONITORING_EVENT_JUMP17489225
Ref: 53e517489225
Ref: c-api/monitoring c PY_MONITORING_EVENT_LINE17489425
Ref: 53e617489425
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_RESUME17489630
Ref: 53e717489630
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_RETURN17489835
Ref: 53e817489835
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_START17490039
Ref: 53e917490039
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_THROW17490243
Ref: 53ea17490243
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_UNWIND17490448
Ref: 53eb17490448
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_YIELD17490652
Ref: 53ec17490652
Ref: c-api/monitoring c PY_MONITORING_EVENT_RAISE17490853
Ref: 53ed17490853
Ref: c-api/monitoring c PY_MONITORING_EVENT_RERAISE17491056
Ref: 53ee17491056
Ref: c-api/monitoring c PY_MONITORING_EVENT_STOP_ITERATION17491266
Ref: 53ef17491266
Ref: c-api/monitoring c PyMonitoring_ExitScope17491364
Ref: 5c617491364
Ref: c-api/monitoring c PY_MONITORING_IS_INSTRUMENTED_EVENT17491503
Ref: 53f017491503
Node: Instalando módulos Python17491822
Ref: installing/index doc17491956
Ref: 53f117491956
Ref: installing/index installing-index17491956
Ref: 10ee17491956
Ref: installing/index installing-python-modules17491956
Ref: 53f217491956
Ref: installing/index no-color17491956
Ref: 53f317491956
Ref: Instalando módulos Python-Footnote-117493318
Node: Termos chave17493396
Ref: installing/index key-terms17493494
Ref: 53f417493494
Ref: Termos chave-Footnote-117495753
Ref: Termos chave-Footnote-217495778
Ref: Termos chave-Footnote-317495807
Ref: Termos chave-Footnote-417495839
Node: Uso básico<5>17495951
Ref: installing/index basic-usage17496070
Ref: 53f517496070
Ref: Uso básico<5>-Footnote-117497811
Ref: Uso básico<5>-Footnote-217497848
Node: Como eu …?17497930
Ref: installing/index how-do-i17498069
Ref: 53f617498069
Node: … instalo pip em versões do Python anteriores ao Python 3 4?17498487
Ref: installing/index install-pip-in-versions-of-python-prior-to-python-3-417498657
Ref: 53f717498657
Ref: … instalo pip em versões do Python anteriores ao Python 3 4?-Footnote-117499111
Node: … instalo pacotes apenas para o usuário atual?17499230
Ref: installing/index install-packages-just-for-the-current-user17499452
Ref: 53f817499452
Node: … instalo pacotes científicos do Python?17499729
Ref: installing/index install-scientific-python-packages17499955
Ref: 53f917499955
Ref: … instalo pacotes científicos do Python?-Footnote-117500507
Ref: … instalo pacotes científicos do Python?-Footnote-217500553
Node: … trabalho com várias versões do Python instaladas em paralelo?17500644
Ref: installing/index work-with-multiple-versions-of-python-installed-in-parallel17500812
Ref: 53fa17500812
Node: Problemas comuns de instalação17501812
Ref: installing/index common-installation-issues17501928
Ref: 53fb17501928
Node: Instalando no sistema Python no Linux17502112
Ref: installing/index installing-into-the-system-python-on-linux17502245
Ref: 53fc17502245
Node: Pip não instalado17502809
Ref: installing/index pip-not-installed17502982
Ref: 53fd17502982
Ref: Pip não instalado-Footnote-117503259
Node: Instalando extensões binárias17503385
Ref: installing/index installing-binary-extensions17503512
Ref: 53fe17503512
Ref: Instalando extensões binárias-Footnote-117504526
Ref: Instalando extensões binárias-Footnote-217504572
Node: Python HOWTOs17504659
Ref: howto/index doc17504789
Ref: 53ff17504789
Ref: howto/index how-tos17504789
Ref: 540017504789
Ref: howto/index no-color17504789
Ref: 540117504789
Ref: howto/index python-howtos17504789
Ref: 540217504789
Node: Uma visão geral conceitual de asyncio17506299
Ref: howto/a-conceptual-overview-of-asyncio doc17506442
Ref: 540317506442
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-of-asyncio17506442
Ref: 364d17506442
Ref: howto/a-conceptual-overview-of-asyncio id117506442
Ref: 540417506442
Ref: Uma visão geral conceitual de asyncio-Footnote-117507981
Ref: Uma visão geral conceitual de asyncio-Footnote-217508062
Ref: Uma visão geral conceitual de asyncio-Footnote-317508155
Node: Uma visão geral conceitual parte 1 o alto nível17508236
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-part-1-the-high-level17508416
Ref: 540517508416
Node: Laço de eventos17508817
Ref: howto/a-conceptual-overview-of-asyncio event-loop17508963
Ref: 540617508963
Node: Funções assíncronas e corrotinas17510781
Ref: howto/a-conceptual-overview-of-asyncio asynchronous-functions-and-coroutines17510946
Ref: 540717510946
Node: Tarefas<2>17514044
Ref: howto/a-conceptual-overview-of-asyncio tasks17514198
Ref: 540817514198
Node: await17517285
Ref: howto/a-conceptual-overview-of-asyncio await17517395
Ref: 540917517395
Node: Uma visão geral conceitual parte 2 os detalhes17521897
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-part-2-the-nuts-and-bolts17522077
Ref: 540a17522077
Node: O funcionamento interno das corrotinas17522569
Ref: howto/a-conceptual-overview-of-asyncio the-inner-workings-of-coroutines17522710
Ref: 540b17522710
Node: Futuros<2>17526416
Ref: howto/a-conceptual-overview-of-asyncio futures17526590
Ref: 540c17526590
Node: Um asyncio sleep caseiro17527864
Ref: howto/a-conceptual-overview-of-asyncio a-homemade-asyncio-sleep17527991
Ref: 540d17527991
Node: Portando módulos de extensão para o Python 317532631
Ref: howto/cporting doc17532817
Ref: 540e17532817
Ref: howto/cporting cporting-howto17532817
Ref: 14dc17532817
Ref: howto/cporting no-color17532817
Ref: 540f17532817
Ref: howto/cporting porting-extension-modules-to-python-317532817
Ref: 541017532817
Ref: Portando módulos de extensão para o Python 3-Footnote-117533656
Ref: Portando módulos de extensão para o Python 3-Footnote-217533707
Node: Programação em Curses com Python17533764
Ref: howto/curses doc17533931
Ref: 541117533931
Ref: howto/curses curses-howto17533931
Ref: 32f517533931
Ref: howto/curses curses-programming-with-python17533931
Ref: 541217533931
Ref: howto/curses no-color17533931
Ref: 541317533931
Node: O que é curses?17534373
Ref: howto/curses what-is-curses17534515
Ref: 541417534515
Ref: O que é curses?-Footnote-117537304
Ref: O que é curses?-Footnote-217537344
Node: O módulo curses de Python17537388
Ref: howto/curses the-python-curses-module17537467
Ref: 541517537467
Node: Começando e terminando uma aplicação curses17538284
Ref: howto/curses starting-and-ending-a-curses-application17538449
Ref: 541617538449
Node: Janelas e Pads17541936
Ref: howto/curses windows-and-pads17542099
Ref: 541717542099
Node: Exibindo texto17546838
Ref: howto/curses displaying-text17546974
Ref: 541817546974
Node: Atributos e Cor17550893
Ref: howto/curses attributes-and-color17550959
Ref: 541917550959
Node: Entrada de usuário17555878
Ref: howto/curses user-input17556023
Ref: 541a17556023
Ref: Entrada de usuário-Footnote-117560178
Node: Para mais informações17560218
Ref: howto/curses for-more-information17560340
Ref: 541b17560340
Ref: Para mais informações-Footnote-117561996
Ref: Para mais informações-Footnote-217562033
Ref: Para mais informações-Footnote-317562097
Ref: Para mais informações-Footnote-417562141
Ref: Para mais informações-Footnote-517562203
Ref: Para mais informações-Footnote-617562255
Node: Guia de descritores17562326
Ref: howto/descriptor doc17562506
Ref: 541c17562506
Ref: howto/descriptor descriptor-guide17562506
Ref: 541d17562506
Ref: howto/descriptor descriptorhowto17562506
Ref: 16db17562506
Ref: howto/descriptor no-color17562506
Ref: 541e17562506
Node: Introdução<15>17563820
Ref: howto/descriptor primer17563931
Ref: 541f17563931
Node: Exemplo simples um descritor que retorna uma constante17564316
Ref: howto/descriptor simple-example-a-descriptor-that-returns-a-constant17564452
Ref: 542017564452
Node: Pesquisas dinâmicas17565988
Ref: howto/descriptor dynamic-lookups17566154
Ref: 542117566154
Node: Atributos gerenciados17567625
Ref: howto/descriptor managed-attributes17567757
Ref: 542217567757
Node: Nomes personalizados17570499
Ref: howto/descriptor customized-names17570629
Ref: 542317570629
Node: Pensamentos finais17573035
Ref: howto/descriptor closing-thoughts17573135
Ref: 542417573135
Node: Exemplo completamente prático17574675
Ref: howto/descriptor complete-practical-example17574812
Ref: 542517574812
Node: Classe Validator17575113
Ref: howto/descriptor validator-class17575231
Ref: 542617575231
Node: Validadores personalizados17576324
Ref: howto/descriptor custom-validators17576471
Ref: 542717576471
Ref: Validadores personalizados-Footnote-117579149
Node: Aplicação prática17579219
Ref: howto/descriptor practical-application17579341
Ref: 542817579341
Node: Tutorial técnico17580785
Ref: howto/descriptor technical-tutorial17580933
Ref: 542917580933
Node: Resumo17581397
Ref: howto/descriptor abstract17581492
Ref: 542a17581492
Node: Definição e introdução17581854
Ref: howto/descriptor definition-and-introduction17581978
Ref: 542b17581978
Node: Protocolo Descriptor17583268
Ref: howto/descriptor descriptor-protocol17583426
Ref: 542c17583426
Node: Visão geral da invocação do descritor17584826
Ref: howto/descriptor overview-of-descriptor-invocation17584987
Ref: 542d17584987
Node: Invocação de uma instância17585660
Ref: howto/descriptor invocation-from-an-instance17585826
Ref: 542e17585826
Node: Invocação de uma classe17588459
Ref: howto/descriptor invocation-from-a-class17588605
Ref: 542f17588605
Ref: Invocação de uma classe-Footnote-117589230
Node: Invocação de super17589303
Ref: howto/descriptor invocation-from-super17589452
Ref: 543017589452
Ref: Invocação de super-Footnote-117590131
Ref: Invocação de super-Footnote-217590204
Node: Resumo da lógica de invocação17590284
Ref: howto/descriptor summary-of-invocation-logic17590441
Ref: 543117590441
Node: Notificação automática de nome17591512
Ref: howto/descriptor automatic-name-notification17591663
Ref: 543217591663
Ref: Notificação automática de nome-Footnote-117592607
Node: Exemplo de ORM17592680
Ref: howto/descriptor orm-example17592790
Ref: 543317592790
Ref: Exemplo de ORM-Footnote-117594917
Ref: Exemplo de ORM-Footnote-217594984
Node: Equivalentes de Python puro17595037
Ref: howto/descriptor pure-python-equivalents17595146
Ref: 543417595146
Node: Propriedades17595666
Ref: howto/descriptor properties17595771
Ref: 543517595771
Node: Funções e métodos17598697
Ref: howto/descriptor functions-and-methods17598828
Ref: 543617598828
Node: Tipos de métodos17602298
Ref: howto/descriptor kinds-of-methods17602436
Ref: 543717602436
Node: Métodos estáticos17603754
Ref: howto/descriptor static-methods17603890
Ref: 543817603890
Node: Métodos de classe17606087
Ref: howto/descriptor class-methods17606234
Ref: 543917606234
Node: Member objects and __slots__17608299
Ref: howto/descriptor member-objects-and-slots17608418
Ref: 543a17608418
Ref: Member objects and __slots__-Footnote-117616041
Node: Depurando extensões de API C e internos do CPython com GDB17616097
Ref: howto/gdb_helpers doc17616247
Ref: 543b17616247
Ref: howto/gdb_helpers debugging-c-api-extensions-and-cpython-internals-with-gdb17616247
Ref: 543c17616247
Ref: howto/gdb_helpers gdb17616247
Ref: 543d17616247
Ref: howto/gdb_helpers no-color17616247
Ref: 543e17616247
Ref: Depurando extensões de API C e internos do CPython com GDB-Footnote-117617746
Ref: Depurando extensões de API C e internos do CPython com GDB-Footnote-217617782
Node: Pré-requisitos17617836
Ref: howto/gdb_helpers prerequisites17618020
Ref: 543f17618020
Node: Configuração com Python construído a partir do código-fonte17618799
Ref: howto/gdb_helpers setup-with-python-built-from-source17618986
Ref: 544017618986
Node: Configuração para Python a partir de uma distribuição Linux17619909
Ref: howto/gdb_helpers setup-for-python-from-a-linux-distro17620096
Ref: 544117620096
Node: Usando a compilação de depuração e o modo de desenvolvimento17620856
Ref: howto/gdb_helpers using-the-debug-build-and-development-mode17621078
Ref: 544217621078
Node: Usando a extensão python-gdb17621821
Ref: howto/gdb_helpers using-the-python-gdb-extension17622051
Ref: 544317622051
Node: Pretty-printers17622372
Ref: howto/gdb_helpers pretty-printers17622469
Ref: 544417622469
Node: py-list17627130
Ref: howto/gdb_helpers py-list17627251
Ref: 544517627251
Node: py-up e py-down17628164
Ref: howto/gdb_helpers py-up-and-py-down17628275
Ref: 544617628275
Node: py-bt17633092
Ref: howto/gdb_helpers py-bt17633204
Ref: 544717633204
Node: py-print17635457
Ref: howto/gdb_helpers py-print17635563
Ref: 544817635563
Node: py-locals17636315
Ref: howto/gdb_helpers py-locals17636407
Ref: 544917636407
Node: Uso com comandos do GDB17637312
Ref: howto/gdb_helpers use-with-gdb-commands17637469
Ref: 544a17637469
Node: Enum17643553
Ref: howto/enum doc17643707
Ref: 544b17643707
Ref: howto/enum enum-howto17643707
Ref: 544c17643707
Ref: howto/enum id117643707
Ref: 544d17643707
Ref: howto/enum no-color17643707
Ref: 544e17643707
Ref: howto/enum enum-basic-tutorial17643726
Ref: 28c217643726
Node: Acesso programático aos membros da enumeração e seus atributos17650228
Ref: howto/enum enum-advanced-tutorial17650380
Ref: 28c317650380
Ref: howto/enum programmatic-access-to-enumeration-members-and-their-attributes17650380
Ref: 544f17650380
Node: Membros e valores duplicados em enums17651226
Ref: howto/enum duplicating-enum-members-and-values17651429
Ref: 545017651429
Node: Garantindo valores únicos na enumeração17652701
Ref: howto/enum ensuring-unique-enumeration-values17652866
Ref: 545117652866
Node: Usando valores automáticos17653453
Ref: howto/enum using-automatic-values17653594
Ref: 545217653594
Node: Iteração<2>17654559
Ref: howto/enum iteration17654674
Ref: 545317654674
Node: Comparações<3>17656060
Ref: howto/enum comparisons17656195
Ref: 545417656195
Node: Membros e atributos permitidos em enumerações17657364
Ref: howto/enum allowed-members-and-attributes-of-enumerations17657513
Ref: 545617657513
Node: Restricted Enum subclassing17659688
Ref: howto/enum restricted-enum-subclassing17659840
Ref: 545a17659840
Node: Suporte a dataclass17660983
Ref: howto/enum dataclass-support17661096
Ref: 545c17661096
Ref: howto/enum enum-dataclass-support17661096
Ref: 1a2c17661096
Node: Pickling17662471
Ref: howto/enum pickling17662573
Ref: 545d17662573
Node: API funcional<3>17663512
Ref: howto/enum functional-api17663615
Ref: 545717663615
Node: Derived Enumerations17667004
Ref: howto/enum derived-enumerations17667130
Ref: 545e17667130
Node: IntEnum17667270
Ref: howto/enum intenum17667350
Ref: 545517667350
Node: StrEnum17668475
Ref: howto/enum strenum17668571
Ref: 545f17668571
Node: IntFlag17668883
Ref: howto/enum intflag17668983
Ref: 546017668983
Node: Sinalizador17671370
Ref: howto/enum flag17671472
Ref: 546117671472
Node: Outros<2>17673788
Ref: howto/enum others17673874
Ref: 546217673874
Node: When to use __new__ vs __init__17675918
Ref: howto/enum new-vs-init17676062
Ref: 545917676062
Ref: howto/enum when-to-use-new-vs-init17676062
Ref: 546317676062
Node: Finer Points17677359
Ref: howto/enum finer-points17677439
Ref: 546417677439
Node: Nomes __dunder__ suportados<2>17677850
Ref: howto/enum supported-dunder-names17677966
Ref: 546517677966
Node: Nomes _sunder_ suportados<2>17678403
Ref: howto/enum supported-sunder-names17678543
Ref: 546617678543
Node: _Private__names17680658
Ref: howto/enum private-names17680784
Ref: 546817680784
Node: Enum member type17680955
Ref: howto/enum enum-member-type17681106
Ref: 546917681106
Node: Creating members that are mixed with other data types17681590
Ref: howto/enum creating-members-that-are-mixed-with-other-data-types17681767
Ref: 546a17681767
Node: Boolean value of Enum classes and members17682302
Ref: howto/enum boolean-value-of-enum-classes-and-members17682488
Ref: 546b17682488
Node: Enum classes with methods17683053
Ref: howto/enum enum-classes-with-methods17683211
Ref: 546c17683211
Node: Combining members of Flag17683751
Ref: howto/enum combining-members-of-flag17683892
Ref: 546d17683892
Node: Flag and IntFlag minutia17684454
Ref: howto/enum flag-and-intflag-minutia17684561
Ref: 546e17684561
Node: How are Enums and Flags different?17687097
Ref: howto/enum enum-class-differences17687234
Ref: 28c517687234
Ref: howto/enum how-are-enums-and-flags-different17687234
Ref: 546f17687234
Node: Enum Classes17687569
Ref: howto/enum enum-classes17687673
Ref: 547017687673
Node: Flag Classes17688263
Ref: howto/enum flag-classes17688402
Ref: 547117688402
Node: Enum Members aka instances17688768
Ref: howto/enum enum-members-aka-instances17688907
Ref: 547217688907
Node: Flag Members17689295
Ref: howto/enum flag-members17689413
Ref: 547317689413
Node: Enum Cookbook17690048
Ref: howto/enum enum-cookbook17690174
Ref: 28c417690174
Ref: howto/enum id217690174
Ref: 547417690174
Node: Omitting values17690639
Ref: howto/enum omitting-values17690724
Ref: 547517690724
Node: Using auto17691518
Ref: howto/enum using-auto17691601
Ref: 547617691601
Node: Using object17691853
Ref: howto/enum using-object17691971
Ref: 547717691971
Node: Using a descriptive string17692624
Ref: howto/enum using-a-descriptive-string17692754
Ref: 547817692754
Node: Using a custom __new__17693041
Ref: howto/enum using-a-custom-new17693150
Ref: 547917693150
Node: OrderedEnum17695022
Ref: howto/enum orderedenum17695133
Ref: 545b17695133
Node: DuplicateFreeEnum17696313
Ref: howto/enum duplicatefreeenum17696423
Ref: 547a17696423
Node: MultiValueEnum17697503
Ref: howto/enum multivalueenum17697608
Ref: 546717697608
Node: Planet17698191
Ref: howto/enum planet17698289
Ref: 545817698289
Node: TimePeriod17699350
Ref: howto/enum enum-time-period17699425
Ref: 28db17699425
Ref: howto/enum timeperiod17699425
Ref: 547b17699425
Node: Subclassing EnumType17700047
Ref: howto/enum enumtype-examples17700130
Ref: 28cb17700130
Ref: howto/enum subclassing-enumtype17700130
Ref: 547c17700130
Node: Programação Funcional17700394
Ref: howto/functional doc17700496
Ref: 547d17700496
Ref: howto/functional functional-howto17700496
Ref: 547e17700496
Ref: howto/functional functional-programming-howto17700496
Ref: 547f17700496
Ref: howto/functional no-color17700496
Ref: 548017700496
Node: Introdução<16>17701333
Ref: howto/functional introduction17701431
Ref: 548117701431
Node: Probabilidade formal17706643
Ref: howto/functional formal-provability17706737
Ref: 548317706737
Node: Modularidade17708769
Ref: howto/functional modularity17708898
Ref: 548417708898
Node: Fácil de depurar e testar17709338
Ref: howto/functional ease-of-debugging-and-testing17709462
Ref: 548517709462
Node: Componibilidade17710271
Ref: howto/functional composability17710374
Ref: 548617710374
Node: Iteradores<2>17711183
Ref: howto/functional functional-howto-iterators17711337
Ref: 548217711337
Ref: howto/functional iterators17711337
Ref: 548717711337
Node: Tipos de Dados que Suportam Iteradores17714852
Ref: howto/functional data-types-that-support-iterators17714940
Ref: 548817714940
Node: Expressões do gerador e compreensões de lista17717028
Ref: howto/functional generator-expressions-and-list-comprehensions17717178
Ref: 548917717178
Node: Geradores<2>17722016
Ref: howto/functional generators17722175
Ref: 548a17722175
Ref: Geradores<2>-Footnote-117726281
Node: Passando valores para um gerador17726362
Ref: howto/functional passing-values-into-a-generator17726443
Ref: 548b17726443
Ref: Passando valores para um gerador-Footnote-117730514
Node: Funções embutidas<4>17730556
Ref: howto/functional built-in-functions17730687
Ref: 548c17730687
Ref: Funções embutidas<4>-Footnote-117734781
Node: O módulo itertools17734835
Ref: howto/functional the-itertools-module17734973
Ref: 548d17734973
Node: Criando novos iteradores17735738
Ref: howto/functional creating-new-iterators17735856
Ref: 548e17735856
Node: Calling functions on elements17738544
Ref: howto/functional calling-functions-on-elements17738693
Ref: 548f17738693
Node: Selecionando elementos17739506
Ref: howto/functional selecting-elements17739653
Ref: 549017739653
Node: Combinatoric functions17741152
Ref: howto/functional combinatoric-functions17741289
Ref: 549117741289
Node: Agrupando elementos17743622
Ref: howto/functional grouping-elements17743728
Ref: 549217743728
Node: O módulo functools17745282
Ref: howto/functional the-functools-module17745440
Ref: 549317745440
Node: O módulo operator17749054
Ref: howto/functional the-operator-module17749128
Ref: 549417749128
Node: Pequenas funções e as expressões lambda17749939
Ref: howto/functional small-functions-and-the-lambda-expression17750118
Ref: 549517750118
Node: Histórico de Revisão e Reconhecimentos17753113
Ref: howto/functional revision-history-and-acknowledgements17753288
Ref: 549617753288
Node: Referências<2>17754172
Ref: howto/functional references17754296
Ref: 549717754296
Node: Geral17754405
Ref: howto/functional general17754486
Ref: 549817754486
Node: Python-specific17755563
Ref: howto/functional python-specific17755677
Ref: 549917755677
Ref: Python-specific-Footnote-117756151
Ref: Python-specific-Footnote-217756202
Ref: Python-specific-Footnote-317756255
Node: Documentação do Python17756308
Ref: howto/functional python-documentation17756408
Ref: 549a17756408
Ref: Documentação do Python-Footnote-117756815
Ref: Documentação do Python-Footnote-217756857
Node: Logging17756899
Ref: howto/logging doc17757025
Ref: 549b17757025
Ref: howto/logging id117757025
Ref: 549c17757025
Ref: howto/logging logging-howto17757025
Ref: 549d17757025
Ref: howto/logging no-color17757025
Ref: 549e17757025
Ref: howto/logging logging-basic-tutorial17757105
Ref: 13f117757105
Node: Tutorial Básico de Logging17757571
Ref: howto/logging basic-logging-tutorial17757680
Ref: 54a017757680
Node: Quando usar logging17758498
Ref: howto/logging when-to-use-logging17758608
Ref: 54a117758608
Node: Um exemplo simples17763132
Ref: howto/logging a-simple-example17763272
Ref: 54a217763272
Ref: howto/logging howto-minimal-example17763272
Ref: 54a317763272
Node: Logging em um arquivo17764506
Ref: howto/logging logging-to-a-file17764659
Ref: 54a417764659
Node: Logging de variáveis dinâmicas17768076
Ref: howto/logging logging-variable-data17768251
Ref: 54a517768251
Node: Alterar o formato das mensagens exibidas17769123
Ref: howto/logging changing-the-format-of-displayed-messages17769308
Ref: 54a617769308
Node: Exibindo data/hora em mensagens17770308
Ref: howto/logging displaying-the-date-time-in-messages17770477
Ref: 54a717770477
Ref: Exibindo data/hora em mensagens-Footnote-117771533
Node: Próximos Passos17771592
Ref: howto/logging next-steps17771712
Ref: 54a817771712
Ref: Próximos Passos-Footnote-117772651
Node: Tutorial Avançado do Logging17772695
Ref: howto/logging advanced-logging-tutorial17772834
Ref: 54a917772834
Ref: howto/logging logging-advanced-tutorial17772834
Ref: 13f217772834
Node: Fluxo de Logging17776692
Ref: howto/logging logging-flow17776796
Ref: 54aa17776796
Node: Registradores17776989
Ref: howto/logging loggers17777115
Ref: 54ab17777115
Node: Manipuladores17781817
Ref: howto/logging handler-basic17781939
Ref: 54ac17781939
Ref: howto/logging handlers17781939
Ref: 54ad17781939
Node: Formatadores17784315
Ref: howto/logging formatters17784444
Ref: 54af17784444
Ref: howto/logging logging logging Formatter __init__17784962
Ref: 54b017784962
Node: Configurando Logging17786907
Ref: howto/logging configuring-logging17787076
Ref: 54b117787076
Node: O que acontece se nenhuma configuração é fornecida17794380
Ref: howto/logging what-happens-if-no-configuration-is-provided17794577
Ref: 54b217794577
Node: Configurando logging para uma biblioteca17796053
Ref: howto/logging configuring-logging-for-a-library17796221
Ref: 54b317796221
Ref: howto/logging library-config17796221
Ref: 306d17796221
Node: Níveis de Logging<2>17799555
Ref: howto/logging logging-levels17799682
Ref: 54b417799682
Node: Níveis personalizados17802791
Ref: howto/logging custom-levels17802871
Ref: 303517802871
Ref: howto/logging id217802871
Ref: 54b517802871
Node: Handlers úteis17803572
Ref: howto/logging id317803707
Ref: 54b617803707
Ref: howto/logging useful-handlers17803707
Ref: 54ae17803707
Node: Exceções levantadas durante logging17808439
Ref: howto/logging exceptions-raised-during-logging17808595
Ref: 54b717808595
Ref: howto/logging logging-exceptions17808595
Ref: 54b817808595
Node: Usando objetos arbitrários como mensagens17809908
Ref: howto/logging arbitrary-object-messages17810062
Ref: 302117810062
Ref: howto/logging using-arbitrary-objects-as-messages17810062
Ref: 54b917810062
Node: Optimização17810723
Ref: howto/logging optimization17810858
Ref: 54ba17810858
Node: Outros recursos<2>17814750
Ref: howto/logging other-resources17814834
Ref: 54bb17814834
Ref: howto/logging tutorial-ref-links17814834
Ref: 549f17814834
Node: Livro de receitas do logging17815211
Ref: howto/logging-cookbook doc17815335
Ref: 54bc17815335
Ref: howto/logging-cookbook id117815335
Ref: 54bd17815335
Ref: howto/logging-cookbook logging-cookbook17815335
Ref: 13f317815335
Ref: howto/logging-cookbook no-color17815335
Ref: 54be17815335
Node: Usando logging em vários módulos17817545
Ref: howto/logging-cookbook using-logging-in-multiple-modules17817691
Ref: 54c017817691
Node: Registro de eventos de várias threads17821368
Ref: howto/logging-cookbook logging-from-multiple-threads17821562
Ref: 54c117821562
Node: Múltiplos manipuladores e formatadores17823376
Ref: howto/logging-cookbook multiple-handlers-and-formatters17823568
Ref: 54c217823568
Node: Logging to multiple destinations17825962
Ref: howto/logging-cookbook logging-to-multiple-destinations17826141
Ref: 54c317826141
Ref: howto/logging-cookbook multiple-destinations17826141
Ref: 54c417826141
Node: Custom handling of levels17829310
Ref: howto/logging-cookbook custom-handling-of-levels17829478
Ref: 54c517829478
Ref: howto/logging-cookbook custom-level-handling17829478
Ref: 54c617829478
Node: Configuration server example17835350
Ref: howto/logging-cookbook configuration-server-example17835518
Ref: 54c717835518
Node: Dealing with handlers that block17837078
Ref: howto/logging-cookbook blocking-handlers17837274
Ref: 37d517837274
Ref: howto/logging-cookbook dealing-with-handlers-that-block17837274
Ref: 54c817837274
Node: Sending and receiving logging events across a network17841853
Ref: howto/logging-cookbook network-logging17842073
Ref: 54c917842073
Ref: howto/logging-cookbook sending-and-receiving-logging-events-across-a-network17842073
Ref: 54ca17842073
Node: Running a logging socket listener in production17847609
Ref: howto/logging-cookbook running-a-logging-socket-listener-in-production17847746
Ref: 54cb17847746
Ref: Running a logging socket listener in production-Footnote-117851860
Ref: Running a logging socket listener in production-Footnote-217851892
Ref: Running a logging socket listener in production-Footnote-317851964
Ref: Running a logging socket listener in production-Footnote-417851994
Node: Adding contextual information to your logging output17852066
Ref: howto/logging-cookbook adding-contextual-information-to-your-logging-output17852272
Ref: 54cc17852272
Ref: howto/logging-cookbook context-info17852272
Ref: 302817852272
Node: Using LoggerAdapters to impart contextual information17853371
Ref: howto/logging-cookbook using-loggeradapters-to-impart-contextual-information17853568
Ref: 54cd17853568
Node: Using objects other than dicts to pass contextual information17856846
Ref: howto/logging-cookbook using-objects-other-than-dicts-to-pass-contextual-information17856997
Ref: 54ce17856997
Node: Using Filters to impart contextual information17857461
Ref: howto/logging-cookbook filters-contextual17857658
Ref: 301d17857658
Ref: howto/logging-cookbook using-filters-to-impart-contextual-information17857658
Ref: 54cf17857658
Node: Use of contextvars17861473
Ref: howto/logging-cookbook use-of-contextvars17861670
Ref: 54d017861670
Node: Imparting contextual information in handlers17871248
Ref: howto/logging-cookbook imparting-contextual-information-in-handlers17871441
Ref: 54d117871441
Node: Logging to a single file from multiple processes17872388
Ref: howto/logging-cookbook logging-to-a-single-file-from-multiple-processes17872582
Ref: 54d217872582
Ref: howto/logging-cookbook multiple-processes17872582
Ref: 54d317872582
Node: Using concurrent futures ProcessPoolExecutor17882861
Ref: howto/logging-cookbook using-concurrent-futures-processpoolexecutor17883050
Ref: 54d417883050
Node: Deploying Web applications using Gunicorn and uWSGI17884056
Ref: howto/logging-cookbook deploying-web-applications-using-gunicorn-and-uwsgi17884245
Ref: 54d517884245
Ref: Deploying Web applications using Gunicorn and uWSGI-Footnote-117884906
Ref: Deploying Web applications using Gunicorn and uWSGI-Footnote-217884936
Node: Using file rotation17884989
Ref: howto/logging-cookbook using-file-rotation17885175
Ref: 54d617885175
Node: Use of alternative formatting styles17887078
Ref: howto/logging-cookbook format-styles17887242
Ref: 54d717887242
Ref: howto/logging-cookbook use-of-alternative-formatting-styles17887242
Ref: 54d817887242
Node: Personalizando o LogRecord17894395
Ref: howto/logging-cookbook custom-logrecord17894600
Ref: 54d917894600
Ref: howto/logging-cookbook customizing-logrecord17894600
Ref: 54da17894600
Node: Subclassing QueueHandler and QueueListener- a ZeroMQ example17898534
Ref: howto/logging-cookbook subclassing-queuehandler-and-queuelistener-a-zeromq-example17898762
Ref: 54db17898762
Ref: howto/logging-cookbook zeromq-handlers17898762
Ref: 54dc17898762
Node: Subclass QueueHandler17898962
Ref: howto/logging-cookbook subclass-queuehandler17899111
Ref: 54dd17899111
Node: Subclass QueueListener17900420
Ref: howto/logging-cookbook subclass-queuelistener17900569
Ref: 54de17900569
Node: Subclassing QueueHandler and QueueListener- a pynng example17901314
Ref: howto/logging-cookbook pynng-handlers17901557
Ref: 54df17901557
Ref: howto/logging-cookbook subclassing-queuehandler-and-queuelistener-a-pynng-example17901557
Ref: 54e017901557
Ref: Subclassing QueueHandler and QueueListener- a pynng example-Footnote-117902183
Ref: Subclassing QueueHandler and QueueListener- a pynng example-Footnote-217902223
Node: Subclass QueueListener<2>17902256
Ref: howto/logging-cookbook id317902410
Ref: 54e117902410
Node: Subclass QueueHandler<2>17904386
Ref: howto/logging-cookbook id417904540
Ref: 54e217904540
Node: An example dictionary-based configuration17908254
Ref: howto/logging-cookbook an-example-dictionary-based-configuration17908499
Ref: 54e317908499
Ref: An example dictionary-based configuration-Footnote-117910433
Ref: An example dictionary-based configuration-Footnote-217910519
Node: Using a rotator and namer to customize log rotation processing17910605
Ref: howto/logging-cookbook cookbook-rotator-namer17910831
Ref: 307a17910831
Ref: howto/logging-cookbook using-a-rotator-and-namer-to-customize-log-rotation-processing17910831
Ref: 54e417910831
Node: A more elaborate multiprocessing example17912232
Ref: howto/logging-cookbook a-more-elaborate-multiprocessing-example17912470
Ref: 54e517912470
Node: Inserting a BOM into messages sent to a SysLogHandler17922096
Ref: howto/logging-cookbook inserting-a-bom-into-messages-sent-to-a-sysloghandler17922303
Ref: 54e617922303
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-117924468
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-217924527
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-317924596
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-417924655
Node: Implementing structured logging17924714
Ref: howto/logging-cookbook implementing-structured-logging17924917
Ref: 54e717924917
Node: Customizing handlers with dictConfig17927451
Ref: howto/logging-cookbook custom-handlers17927663
Ref: 54e817927663
Ref: howto/logging-cookbook customizing-handlers-with-dictconfig17927663
Ref: 54e917927663
Node: Using particular formatting styles throughout your application17932859
Ref: howto/logging-cookbook formatting-styles17933075
Ref: 301117933075
Ref: howto/logging-cookbook using-particular-formatting-styles-throughout-your-application17933075
Ref: 54ea17933075
Node: Using LogRecord factories17935078
Ref: howto/logging-cookbook using-logrecord-factories17935239
Ref: 54eb17935239
Node: Using custom message objects17936216
Ref: howto/logging-cookbook using-custom-message-objects17936377
Ref: 54ec17936377
Node: Configuring filters with dictConfig17939092
Ref: howto/logging-cookbook configuring-filters-with-dictconfig17939303
Ref: 54ed17939303
Ref: howto/logging-cookbook filters-dictconfig17939303
Ref: 54ee17939303
Node: Customized exception formatting17942270
Ref: howto/logging-cookbook custom-format-exception17942444
Ref: 54ef17942444
Ref: howto/logging-cookbook customized-exception-formatting17942444
Ref: 54f017942444
Node: Speaking logging messages17944474
Ref: howto/logging-cookbook speaking-logging-messages17944673
Ref: 54f117944673
Ref: howto/logging-cookbook spoken-messages17944673
Ref: 54f217944673
Node: Buffering logging messages and outputting them conditionally17946839
Ref: howto/logging-cookbook buffered-logging17947055
Ref: 54f317947055
Ref: howto/logging-cookbook buffering-logging-messages-and-outputting-them-conditionally17947055
Ref: 54f417947055
Node: Sending logging messages to email with buffering17952631
Ref: howto/logging-cookbook buffered-smtp17952870
Ref: 54f517952870
Ref: howto/logging-cookbook sending-logging-messages-to-email-with-buffering17952870
Ref: 54f617952870
Node: Formatting times using UTC GMT via configuration17956436
Ref: howto/logging-cookbook formatting-times-using-utc-gmt-via-configuration17956660
Ref: 54f717956660
Ref: howto/logging-cookbook utc-formatting17956660
Ref: 54f817956660
Node: Using a context manager for selective logging17958561
Ref: howto/logging-cookbook context-manager17958771
Ref: 54f917958771
Ref: howto/logging-cookbook using-a-context-manager-for-selective-logging17958771
Ref: 54fa17958771
Node: A CLI application starter template17963351
Ref: howto/logging-cookbook a-cli-application-starter-template17963533
Ref: 54fb17963533
Ref: howto/logging-cookbook starter-template17963533
Ref: 54fc17963533
Node: A Qt GUI for logging17969514
Ref: howto/logging-cookbook a-qt-gui-for-logging17969689
Ref: 54fd17969689
Ref: howto/logging-cookbook qt-gui17969689
Ref: 54fe17969689
Ref: A Qt GUI for logging-Footnote-117979992
Ref: A Qt GUI for logging-Footnote-217980019
Ref: A Qt GUI for logging-Footnote-317980061
Node: Logging to syslog with RFC5424 support17980101
Ref: howto/logging-cookbook logging-to-syslog-with-rfc5424-support17980285
Ref: 54ff17980285
Ref: Logging to syslog with RFC5424 support-Footnote-117984015
Ref: Logging to syslog with RFC5424 support-Footnote-217984074
Node: How to treat a logger like an output stream17984133
Ref: howto/logging-cookbook how-to-treat-a-logger-like-an-output-stream17984347
Ref: 550017984347
Node: How to uniformly handle newlines in logging output17989023
Ref: howto/logging-cookbook how-to-uniformly-handle-newlines-in-logging-output17989216
Ref: 550117989216
Ref: How to uniformly handle newlines in logging output-Footnote-117992746
Node: Patterns to avoid17992808
Ref: howto/logging-cookbook patterns-to-avoid17992976
Ref: 550217992976
Node: Opening the same log file multiple times17993528
Ref: howto/logging-cookbook opening-the-same-log-file-multiple-times17993699
Ref: 550317993699
Node: Using loggers as attributes in a class or passing them as parameters17995622
Ref: howto/logging-cookbook using-loggers-as-attributes-in-a-class-or-passing-them-as-parameters17995865
Ref: 550417995865
Node: Adding handlers other than NullHandler to a logger in a library17996551
Ref: howto/logging-cookbook adding-handlers-other-than-nullhandler-to-a-logger-in-a-library17996779
Ref: 550517996779
Node: Creating a lot of loggers17997219
Ref: howto/logging-cookbook creating-a-lot-of-loggers17997370
Ref: 550617997370
Node: Outros recursos<3>17997925
Ref: howto/logging-cookbook cookbook-ref-links17998034
Ref: 54bf17998034
Ref: howto/logging-cookbook other-resources17998034
Ref: 550717998034
Node: Expressões Regulares17998431
Ref: howto/regex doc17998573
Ref: 550817998573
Ref: howto/regex no-color17998573
Ref: 550917998573
Ref: howto/regex regex-howto17998573
Ref: 25f717998573
Ref: howto/regex regular-expression-howto17998573
Ref: 550a17998573
Node: Introdução<17>17999098
Ref: howto/regex introduction17999197
Ref: 550b17999197
Node: Padrões simples18001011
Ref: howto/regex simple-patterns18001147
Ref: 550c18001147
Node: Correspondendo caracteres18001721
Ref: howto/regex matching-characters18001824
Ref: 550d18001824
Node: Repetindo coisas18007085
Ref: howto/regex repeating-things18007188
Ref: 550e18007188
Node: Usando expressões regulares18012725
Ref: howto/regex using-regular-expressions18012868
Ref: 550f18012868
Node: Compilando expressões regulares18013422
Ref: howto/regex compiling-regular-expressions18013550
Ref: 551018013550
Node: A praga da contrabarra18014899
Ref: howto/regex id118015064
Ref: 551118015064
Ref: howto/regex the-backslash-plague18015064
Ref: 551218015064
Node: Executando correspondências18018302
Ref: howto/regex performing-matches18018468
Ref: 551318018468
Node: Funções de nível de módulo<2>18024668
Ref: howto/regex module-level-functions18024841
Ref: 551418024841
Node: Sinalizadores de compilação18026174
Ref: howto/regex compilation-flags18026310
Ref: 551518026310
Node: Mais poder dos padrões18034581
Ref: howto/regex more-pattern-power18034727
Ref: 551718034727
Node: Mais metacaracteres18035115
Ref: howto/regex id218035214
Ref: 551818035214
Ref: howto/regex more-metacharacters18035214
Ref: 551618035214
Node: Agrupamento18040492
Ref: howto/regex grouping18040630
Ref: 551918040630
Node: Não captura e grupos nomeados18044502
Ref: howto/regex non-capturing-and-named-groups18044642
Ref: 551a18044642
Node: Asserções lookahead18050186
Ref: howto/regex lookahead-assertions18050306
Ref: 551b18050306
Node: Modificando strings18054182
Ref: howto/regex modifying-strings18054316
Ref: 551c18054316
Node: Dividindo as strings18055397
Ref: howto/regex splitting-strings18055504
Ref: 551d18055504
Node: Busca e substituição18058029
Ref: howto/regex search-and-replace18058136
Ref: 551e18058136
Node: Problemas comuns18062987
Ref: howto/regex common-problems18063113
Ref: 551f18063113
Node: Usando métodos de string18063610
Ref: howto/regex use-string-methods18063716
Ref: 552018063716
Node: match versus search18065614
Ref: howto/regex match-versus-search18065756
Ref: 552118065756
Node: Gulosos versus não-gulosos18067572
Ref: howto/regex greedy-versus-non-greedy18067706
Ref: 552218067706
Node: Usando re VERBOSE18069764
Ref: howto/regex using-re-verbose18069870
Ref: 552318069870
Node: Comentários<2>18071612
Ref: howto/regex feedback18071710
Ref: 552418071710
Node: Programação de Soquetes18072563
Ref: howto/sockets doc18072701
Ref: 552518072701
Ref: howto/sockets no-color18072701
Ref: 552618072701
Ref: howto/sockets socket-howto18072701
Ref: 383818072701
Ref: howto/sockets socket-programming-howto18072701
Ref: 552718072701
Node: Soquetes18073326
Ref: howto/sockets sockets18073423
Ref: 552818073423
Node: História18074765
Ref: howto/sockets history18074819
Ref: 552918074819
Node: Criando um Soquete18075437
Ref: howto/sockets creating-a-socket18075560
Ref: 552a18075560
Node: IPC18079344
Ref: howto/sockets ipc18079402
Ref: 552b18079402
Node: Usando um Soquete18079935
Ref: howto/sockets using-a-socket18080063
Ref: 552c18080063
Node: Dados Binários18086381
Ref: howto/sockets binary-data18086450
Ref: 552d18086450
Ref: Dados Binários-Footnote-118087744
Node: Desconectando18087804
Ref: howto/sockets disconnecting18087939
Ref: 552e18087939
Node: Quando o Soquete Morre18089421
Ref: howto/sockets when-sockets-die18089493
Ref: 552f18089493
Node: Soquetes não-bloqueantes18090384
Ref: howto/sockets non-blocking-sockets18090493
Ref: 553018090493
Node: Técnicas de ordenação18094356
Ref: howto/sorting doc18094483
Ref: 553118094483
Ref: howto/sorting no-color18094483
Ref: 553218094483
Ref: howto/sorting sorting-techniques18094483
Ref: 553318094483
Ref: howto/sorting sortinghowto18094483
Ref: 246f18094483
Node: Básico de ordenação18095287
Ref: howto/sorting sorting-basics18095394
Ref: 553418095394
Node: Funções chave18096318
Ref: howto/sorting key-functions18096491
Ref: 553518096491
Node: Operator Module Functions and Partial Function Evaluation18098678
Ref: howto/sorting operator-module-functions-and-partial-function-evaluation18098853
Ref: 553618098853
Ref: Operator Module Functions and Partial Function Evaluation-Footnote-118100734
Node: Ascendente e descendente18100778
Ref: howto/sorting ascending-and-descending18100990
Ref: 553718100990
Node: Estabilidade de Ordenação e Ordenações Complexas18101589
Ref: howto/sorting sort-stability-and-complex-sorts18101768
Ref: 553818101768
Ref: Estabilidade de Ordenação e Ordenações Complexas-Footnote-118103601
Ref: Estabilidade de Ordenação e Ordenações Complexas-Footnote-218103667
Node: Decorate-Sort-Undecorate18103713
Ref: howto/sorting decorate-sort-undecorate18103893
Ref: 553918103893
Ref: Decorate-Sort-Undecorate-Footnote-118105747
Node: Funções de comparação18105807
Ref: howto/sorting comparison-functions18105978
Ref: 553a18105978
Ref: Funções de comparação-Footnote-118106955
Node: Strategies For Unorderable Types and Values18107042
Ref: howto/sorting strategies-for-unorderable-types-and-values18107218
Ref: 553b18107218
Ref: Strategies For Unorderable Types and Values-Footnote-118108957
Node: Curiosidades e conclusões<2>18109004
Ref: howto/sorting odds-and-ends18109176
Ref: 553c18109176
Ref: Curiosidades e conclusões<2>-Footnote-118111586
Node: Ordenações parciais18111628
Ref: howto/sorting partial-sorts18111748
Ref: 553d18111748
Node: Unicode<3>18112849
Ref: howto/unicode doc18113006
Ref: 553e18113006
Ref: howto/unicode id118113006
Ref: 553f18113006
Ref: howto/unicode no-color18113006
Ref: 554018113006
Ref: howto/unicode unicode-howto18113006
Ref: 14a018113006
Node: Introdução ao Unicode18113411
Ref: howto/unicode introduction-to-unicode18113517
Ref: 554118113517
Node: Definições18113657
Ref: howto/unicode definitions18113752
Ref: 554218113752
Ref: Definições-Footnote-118116943
Node: Codificações18117000
Ref: howto/unicode encodings18117119
Ref: 554318117119
Node: Referências<3>18120917
Ref: howto/unicode references18121015
Ref: 554418121015
Ref: Referências<3>-Footnote-118121893
Ref: Referências<3>-Footnote-218121925
Ref: Referências<3>-Footnote-318121966
Ref: Referências<3>-Footnote-418122018
Ref: Referências<3>-Footnote-518122065
Ref: Referências<3>-Footnote-618122239
Ref: Referências<3>-Footnote-718122296
Node: Suporte a Unicode no Python18122340
Ref: howto/unicode python-s-unicode-support18122487
Ref: 554518122487
Node: O Tipo String18122868
Ref: howto/unicode the-string-type18122976
Ref: 554618122976
Node: Convertendo para Bytes18126082
Ref: howto/unicode converting-to-bytes18126237
Ref: 554718126237
Node: Unicode Literals in Python Source Code18128087
Ref: howto/unicode unicode-literals-in-python-source-code18128249
Ref: 554818128249
Ref: Unicode Literals in Python Source Code-Footnote-118130354
Node: Propriedades Unicode18130396
Ref: howto/unicode unicode-properties18130554
Ref: 554918130554
Ref: Propriedades Unicode-Footnote-118132331
Node: Comparando Strings18132401
Ref: howto/unicode comparing-strings18132550
Ref: 554a18132550
Node: Expressões Regulares Unicode18135406
Ref: howto/unicode unicode-regular-expressions18135550
Ref: 554b18135550
Node: Referências<4>18136692
Ref: howto/unicode id218136809
Ref: 554c18136809
Ref: Referências<4>-Footnote-118137604
Ref: Referências<4>-Footnote-218137700
Ref: Referências<4>-Footnote-318137752
Node: Reading and Writing Unicode Data18137821
Ref: howto/unicode reading-and-writing-unicode-data18137964
Ref: 554d18137964
Node: Nomes de arquivos Unicode18141684
Ref: howto/unicode unicode-filenames18141826
Ref: 554e18141826
Node: Tips for Writing Unicode-aware Programs18144305
Ref: howto/unicode tips-for-writing-unicode-aware-programs18144471
Ref: 554f18144471
Node: Converting Between File Encodings18145834
Ref: howto/unicode converting-between-file-encodings18145980
Ref: 555018145980
Node: Files in an Unknown Encoding18146749
Ref: howto/unicode files-in-an-unknown-encoding18146895
Ref: 555118146895
Node: Referências<5>18147796
Ref: howto/unicode id318147928
Ref: 555218147928
Ref: Referências<5>-Footnote-118148537
Ref: Referências<5>-Footnote-218148609
Ref: Referências<5>-Footnote-318148714
Node: Reconhecimentos<10>18148783
Ref: howto/unicode acknowledgements18148890
Ref: 555318148890
Node: Como buscar recursos da Internet usando o pacote urllib18149412
Ref: howto/urllib2 doc18149582
Ref: 555418149582
Ref: howto/urllib2 howto-fetch-internet-resources-using-the-urllib-package18149582
Ref: 555518149582
Ref: howto/urllib2 no-color18149582
Ref: 555618149582
Ref: howto/urllib2 urllib-howto18149582
Ref: 3e2118149582
Ref: Como buscar recursos da Internet usando o pacote urllib-Footnote-118150014
Node: Introdução<18>18150053
Ref: howto/urllib2 introduction18150184
Ref: 555718150184
Ref: Introdução<18>-Footnote-118151927
Ref: Introdução<18>-Footnote-218152044
Node: Acessando URLs18152103
Ref: howto/urllib2 fetching-urls18152270
Ref: 555818152270
Node: Dados18154696
Ref: howto/urllib2 data18154772
Ref: 555918154772
Ref: Dados-Footnote-118157612
Node: Cabeçalhos18157681
Ref: howto/urllib2 headers18157757
Ref: 555a18157757
Ref: Cabeçalhos-Footnote-118159346
Ref: Cabeçalhos-Footnote-218159375
Ref: Cabeçalhos-Footnote-318159610
Ref: Cabeçalhos-Footnote-418159730
Node: Tratamento de exceções<2>18159868
Ref: howto/urllib2 handling-exceptions18160032
Ref: 555d18160032
Node: URLError18160562
Ref: howto/urllib2 urlerror18160652
Ref: 555e18160652
Node: HTTPError18161227
Ref: howto/urllib2 httperror18161335
Ref: 555f18161335
Ref: HTTPError-Footnote-118162303
Node: Códigos de erro18162362
Ref: howto/urllib2 error-codes18162424
Ref: 556018162424
Ref: Códigos de erro-Footnote-118164658
Node: Resumindo18164717
Ref: howto/urllib2 wrapping-it-up18164808
Ref: 556118164808
Node: Número 118165033
Ref: howto/urllib2 number-118165106
Ref: 556218165106
Node: Número 218165736
Ref: howto/urllib2 number-218165809
Ref: 556318165809
Node: info e geturl18166334
Ref: howto/urllib2 info-and-geturl18166506
Ref: 555c18166506
Node: Abridores e tratadores18167526
Ref: howto/urllib2 openers-and-handlers18167693
Ref: 556418167693
Node: Autenticação básica18169486
Ref: howto/urllib2 id518169647
Ref: 556518169647
Ref: Autenticação básica-Footnote-118173349
Node: Proxies18173466
Ref: howto/urllib2 proxies18173622
Ref: 556618173622
Ref: Proxies-Footnote-118174757
Ref: Proxies-Footnote-218175072
Ref: Proxies-Footnote-318175189
Node: Socekts e camadas18175372
Ref: howto/urllib2 sockets-and-layers18175522
Ref: 556718175522
Node: Notas de rodapé18176635
Ref: howto/urllib2 footnotes18176769
Ref: 556818176769
Node: Uma introdução ao módulo ipaddress18176871
Ref: howto/ipaddress doc18177078
Ref: 556918177078
Ref: howto/ipaddress an-introduction-to-the-ipaddress-module18177078
Ref: 556a18177078
Ref: howto/ipaddress ipaddress-howto18177078
Ref: 405818177078
Ref: howto/ipaddress no-color18177078
Ref: 556b18177078
Node: Criando objetos de Endereço/Rede/Interface18177894
Ref: howto/ipaddress creating-address-network-interface-objects18178066
Ref: 556c18178066
Node: Uma observação sobre versões do IP18178528
Ref: howto/ipaddress a-note-on-ip-versions18178675
Ref: 556d18178675
Node: Endereços IP de host18179526
Ref: howto/ipaddress ip-host-addresses18179697
Ref: 556e18179697
Node: Definindo redes18180973
Ref: howto/ipaddress defining-networks18181125
Ref: 556f18181125
Node: Interfaces do host18183627
Ref: howto/ipaddress host-interfaces18183749
Ref: 557018183749
Node: Inspecionando objetos endereço/rede/interface18184814
Ref: howto/ipaddress inspecting-address-network-interface-objects18185025
Ref: 557118185025
Node: Redes como listas de Addresses18187450
Ref: howto/ipaddress networks-as-lists-of-addresses18187634
Ref: 557218187634
Node: Comparações<4>18188447
Ref: howto/ipaddress comparisons18188625
Ref: 557318188625
Node: Usando endereços IP com outros módulos18188999
Ref: howto/ipaddress using-ip-addresses-with-other-modules18189207
Ref: 557418189207
Node: Obtendo mais detalhes quando a criação da instância falha18189650
Ref: howto/ipaddress getting-more-detail-when-instance-creation-fails18189833
Ref: 557518189833
Node: Instrumentando o CPython com DTrace e SystemTap18191983
Ref: howto/instrumentation doc18192180
Ref: 557618192180
Ref: howto/instrumentation instrumentation18192180
Ref: e5a18192180
Ref: howto/instrumentation instrumenting-cpython-with-dtrace-and-systemtap18192180
Ref: 557718192180
Ref: howto/instrumentation no-color18192180
Ref: 557818192180
Node: Habilitando os marcadores estáticos18193505
Ref: howto/instrumentation enabling-the-static-markers18193662
Ref: 557918193662
Node: Sondas estáticas do DTtrace18198037
Ref: howto/instrumentation static-dtrace-probes18198237
Ref: 557a18198237
Node: Marcadores estáticos do SystemTap18200730
Ref: howto/instrumentation static-systemtap-markers18200928
Ref: 557b18200928
Node: Marcadores estáticos disponíveis18203086
Ref: howto/instrumentation available-static-markers18203276
Ref: 557c18203276
Ref: howto/instrumentation static-markers18203276
Ref: da518203276
Node: Tapsets de SystemTap18205990
Ref: howto/instrumentation systemtap-tapsets18206158
Ref: 557d18206158
Node: Exemplos<40>18207885
Ref: howto/instrumentation examples18208010
Ref: 557e18208010
Node: Suporte do Python ao perfilador perf do Linux18209339
Ref: howto/perf_profiling doc18209530
Ref: 19e818209530
Ref: howto/perf_profiling no-color18209530
Ref: 557f18209530
Ref: howto/perf_profiling perf-profiling18209530
Ref: 4a818209530
Ref: howto/perf_profiling python-support-for-the-linux-perf-profiler18209530
Ref: 558018209530
Ref: Suporte do Python ao perfilador perf do Linux-Footnote-118217620
Node: Como habilitar o suporte a perfilação com perf18217657
Ref: howto/perf_profiling how-to-enable-perf-profiling-support18217829
Ref: 558118217829
Node: Como obter os melhores resultados18219003
Ref: howto/perf_profiling how-to-obtain-the-best-results18219222
Ref: 558218219222
Node: Como trabalhar sem ponteiros de quadro18220124
Ref: howto/perf_profiling how-to-work-without-frame-pointers18220286
Ref: 558318220286
Node: Boas práticas para anotações18224413
Ref: howto/annotations doc18224587
Ref: 558418224587
Ref: howto/annotations annotations-best-practices18224587
Ref: 558518224587
Ref: howto/annotations annotations-howto18224587
Ref: 9cf18224587
Ref: howto/annotations no-color18224587
Ref: 558618224587
Node: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes18226175
Ref: howto/annotations accessing-the-annotations-dict-of-an-object-in-python-3-10-and-newer18226440
Ref: 558718226440
Node: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas18228485
Ref: howto/annotations accessing-the-annotations-dict-of-an-object-in-python-3-9-and-older18228819
Ref: 558818228819
Node: Recuperando manualmente anotações transformadas em strings18231498
Ref: howto/annotations manually-un-stringizing-stringized-annotations18231803
Ref: 558918231803
Ref: Recuperando manualmente anotações transformadas em strings-Footnote-118234234
Node: Melhores práticas para __annotations__ em qualquer versão Python18234276
Ref: howto/annotations best-practices-for-annotations-in-any-python-version18234521
Ref: 558a18234521
Node: Peculiaridades de __annotations__18235469
Ref: howto/annotations annotations-quirks18235645
Ref: 558b18235645
Ref: Peculiaridades de __annotations__-Footnote-118238468
Node: Isolando módulos de extensão18238529
Ref: howto/isolating-extensions doc18238694
Ref: 558c18238694
Ref: howto/isolating-extensions isolating-extension-modules18238694
Ref: 558d18238694
Ref: howto/isolating-extensions isolating-extensions-howto18238694
Ref: 16618238694
Ref: howto/isolating-extensions no-color18238694
Ref: 558e18238694
Node: Quem deveria ler isto18239532
Ref: howto/isolating-extensions who-should-read-this18239655
Ref: 558f18239655
Node: Informações preliminares18239911
Ref: howto/isolating-extensions background18240098
Ref: 559018240098
Node: Entra o estado por módulo18241985
Ref: howto/isolating-extensions enter-per-module-state18242110
Ref: 559118242110
Node: Objetos de módulo isolados18243461
Ref: howto/isolating-extensions isolated-module-objects18243628
Ref: 559218243628
Node: Casos particulares surpreendentes18244797
Ref: howto/isolating-extensions surprising-edge-cases18244929
Ref: 559418244929
Node: Fazendo módulos seguros com múltiplos interpretadores18246070
Ref: howto/isolating-extensions making-modules-safe-with-multiple-interpreters18246252
Ref: 559518246252
Node: Gerenciando estado global18246647
Ref: howto/isolating-extensions managing-global-state18246803
Ref: 559318246803
Node: Gerenciando estado por módulo18247862
Ref: howto/isolating-extensions managing-per-module-state18248094
Ref: 559618248094
Ref: Gerenciando estado por módulo-Footnote-118250009
Node: Exclusão voluntária limitando a um objeto de módulo por processo18250083
Ref: howto/isolating-extensions isolating-extensions-optout18250339
Ref: 4fdb18250339
Ref: howto/isolating-extensions opt-out-limiting-to-one-module-object-per-process18250339
Ref: 559718250339
Node: Acesso ao estado de módulo a partir de funções18251842
Ref: howto/isolating-extensions module-state-access-from-functions18252059
Ref: 559818252059
Node: Tipos no heap<2>18252907
Ref: howto/isolating-extensions heap-types18253082
Ref: 559918253082
Node: Mudando tipos estáticos para tipos no heap18255016
Ref: howto/isolating-extensions changing-static-types-to-heap-types18255144
Ref: 559a18255144
Node: Definindo tipos no heap18256279
Ref: howto/isolating-extensions defining-heap-types18256449
Ref: 559b18256449
Node: Protocolo de recolhimento de lixo18257167
Ref: howto/isolating-extensions garbage-collection-protocol18257343
Ref: 559c18257343
Node: tp_traverse no Python 3 8 e anteriores18258567
Ref: howto/isolating-extensions tp-traverse-in-python-3-8-and-lower18258716
Ref: 559d18258716
Node: Delegando a função tp_traverse18259542
Ref: howto/isolating-extensions delegating-tp-traverse18259720
Ref: 559e18259720
Node: Definindo tp_dealloc18260584
Ref: howto/isolating-extensions defining-tp-dealloc18260749
Ref: 559f18260749
Node: Evitar substituir tp_free18261548
Ref: howto/isolating-extensions not-overriding-tp-free18261700
Ref: 55a018261700
Node: Evitar PyObject_New18261905
Ref: howto/isolating-extensions avoiding-pyobject-new18262028
Ref: 55a118262028
Node: Acessando o estado do módulo a partir de classes18262872
Ref: howto/isolating-extensions module-state-access-from-classes18263083
Ref: 55a218263083
Node: Acesso ao estado do módulo a partir de métodos regulares18263708
Ref: howto/isolating-extensions module-state-access-from-regular-methods18263957
Ref: 55a318263957
Node: Acesso ao estado do módulo a partir de métodos slot getters e setters18266649
Ref: howto/isolating-extensions module-state-access-from-slot-methods-getters-and-setters18266883
Ref: 55a418266883
Node: Tempo de vida do estado do módulo18268463
Ref: howto/isolating-extensions lifetime-of-the-module-state18268630
Ref: 55a518268630
Node: Problemas em aberto18269288
Ref: howto/isolating-extensions open-issues18269399
Ref: 55a618269399
Ref: Problemas em aberto-Footnote-118269777
Node: Escopo por classe18269832
Ref: howto/isolating-extensions per-class-scope18269954
Ref: 55a718269954
Node: Conversão sem perdas para tipos no heap18270276
Ref: howto/isolating-extensions lossless-conversion-to-heap-types18270398
Ref: 55a818270398
Node: Descritor de arquivo de temporizador18270677
Ref: howto/timerfd doc18270859
Ref: 55a918270859
Ref: howto/timerfd no-color18270859
Ref: 55aa18270859
Ref: howto/timerfd timer-file-descriptor-howto18270859
Ref: 55ab18270859
Ref: howto/timerfd timerfd-howto18270859
Ref: 55ac18270859
Node: Exemplos<41>18271094
Ref: howto/timerfd examples18271179
Ref: 55ad18271179
Node: A Ordem de Resolução de Métodos do Python 2 318280612
Ref: howto/mro doc18280801
Ref: 55ae18280801
Ref: howto/mro no-color18280801
Ref: 55af18280801
Ref: howto/mro python-2-3-mro18280801
Ref: 169818280801
Ref: howto/mro the-python-2-3-method-resolution-order18280801
Ref: 55b018280801
Ref: A Ordem de Resolução de Métodos do Python 2 3-Footnote-118282513
Node: O início18282560
Ref: howto/mro the-beginning18282700
Ref: 55b118282700
Ref: O início-Footnote-118287505
Ref: O início-Footnote-218287643
Node: A ordem de resolução de métodos C318287777
Ref: howto/mro the-c3-method-resolution-order18287938
Ref: 55b218287938
Node: Exemplos<42>18290266
Ref: howto/mro examples18290457
Ref: 55b318290457
Node: Ordens de resolução de métodos ruins18296033
Ref: howto/mro bad-method-resolution-orders18296192
Ref: 55b418296192
Ref: Ordens de resolução de métodos ruins-Footnote-118302693
Node: O fim18302891
Ref: howto/mro the-end18303049
Ref: 55b518303049
Node: Recursos<3>18306366
Ref: howto/mro resources18306476
Ref: 55b618306476
Node: Suporte do Python para threads livres18306509
Ref: howto/free-threading-python doc18306711
Ref: 55b718306711
Ref: howto/free-threading-python freethreading-python-howto18306711
Ref: 55b818306711
Ref: howto/free-threading-python no-color18306711
Ref: 55b918306711
Ref: howto/free-threading-python python-support-for-free-threading18306711
Ref: 55ba18306711
Ref: Suporte do Python para threads livres-Footnote-118308466
Node: Instalação<2>18308508
Ref: howto/free-threading-python installation18308648
Ref: 55bc18308648
Ref: Instalação<2>-Footnote-118309333
Node: Identificando um Python com threads livres18309397
Ref: howto/free-threading-python identifying-free-threaded-python18309606
Ref: 55bd18309606
Node: A trava global do interpretador no Python com threads livres18310358
Ref: howto/free-threading-python the-global-interpreter-lock-in-free-threaded-python18310574
Ref: 55be18310574
Node: Segurança nas threads18311419
Ref: howto/free-threading-python thread-safety18311616
Ref: 55bf18311616
Node: Limitações conhecidas18312508
Ref: howto/free-threading-python known-limitations18312670
Ref: 55c018312670
Node: Imortalização18312956
Ref: howto/free-threading-python immortalization18313057
Ref: 55c118313057
Node: Objetos quadro<2>18314259
Ref: howto/free-threading-python frame-objects18314382
Ref: 55c218314382
Node: Iteradores<3>18314862
Ref: howto/free-threading-python iterators18314998
Ref: 55c318314998
Node: Desempenho com thread única18315218
Ref: howto/free-threading-python single-threaded-performance18315328
Ref: 55c418315328
Ref: Desempenho com thread única-Footnote-118316214
Ref: Desempenho com thread única-Footnote-218316260
Node: Mudanças comportamentais18316302
Ref: howto/free-threading-python behavioral-changes18316433
Ref: 55c518316433
Node: Variáveis de contexto<2>18316685
Ref: howto/free-threading-python context-variables18316797
Ref: 55c618316797
Node: Filtros de aviso18317289
Ref: howto/free-threading-python warning-filters18317401
Ref: 55c718317401
Node: Suporte a extensões da API C para threads livres18318011
Ref: howto/free-threading-extensions doc18318210
Ref: 55c818318210
Ref: howto/free-threading-extensions c-api-extension-support-for-free-threading18318210
Ref: 55c918318210
Ref: howto/free-threading-extensions freethreading-extensions-howto18318210
Ref: 55bb18318210
Ref: howto/free-threading-extensions no-color18318210
Ref: 55ca18318210
Node: Identificando a construção com threads livres em C18318968
Ref: howto/free-threading-extensions identifying-the-free-threaded-build-in-c18319141
Ref: 55cb18319141
Node: Inicialização de módulo18319947
Ref: howto/free-threading-extensions module-initialization18320153
Ref: 55cc18320153
Node: Inicialização multifásica<2>18320721
Ref: howto/free-threading-extensions multi-phase-initialization18320851
Ref: 55cd18320851
Node: Inicialização monofásica18321560
Ref: howto/free-threading-extensions single-phase-initialization18321690
Ref: 55ce18321690
Node: Diretrizes gerais de API18322563
Ref: howto/free-threading-extensions general-api-guidelines18322741
Ref: 55cf18322741
Node: Segurança de threads de contêineres18323812
Ref: howto/free-threading-extensions container-thread-safety18323910
Ref: 55d118323910
Node: PyDict_Next18324277
Ref: howto/free-threading-extensions id118324362
Ref: 55d218324362
Ref: howto/free-threading-extensions pydict-next18324362
Ref: 55d318324362
Node: Referências emprestadas18324858
Ref: howto/free-threading-extensions borrowed-references18325040
Ref: 55d418325040
Ref: howto/free-threading-extensions id218325104
Ref: 55d018325104
Ref: Referências emprestadas-Footnote-118328240
Node: APIs de alocação de memória18328292
Ref: howto/free-threading-extensions free-threaded-memory-allocation18328484
Ref: 531918328484
Ref: howto/free-threading-extensions memory-allocation-apis18328484
Ref: 55d518328484
Node: APIs da GIL e de estado de threads18329282
Ref: howto/free-threading-extensions thread-state-and-gil-apis18329492
Ref: 55d618329492
Node: Protegendo o estado interno das extensões18330542
Ref: howto/free-threading-extensions protecting-internal-extension-state18330740
Ref: 55d718330740
Ref: Protegendo o estado interno das extensões-Footnote-118331593
Node: Seções críticas18331659
Ref: howto/free-threading-extensions critical-sections18331884
Ref: 55d818331884
Ref: howto/free-threading-extensions id318331934
Ref: 55d918331934
Node: O que são seções críticas?18332584
Ref: howto/free-threading-extensions what-are-critical-sections18332703
Ref: 55da18332703
Node: Usando seções críticas18333228
Ref: howto/free-threading-extensions using-critical-sections18333389
Ref: 55db18333389
Node: Como seções críticas funcionam18334715
Ref: howto/free-threading-extensions how-critical-sections-work18334869
Ref: 55dc18334869
Node: Prevenção de impasses18335869
Ref: howto/free-threading-extensions deadlock-avoidance18336025
Ref: 55dd18336025
Node: Considerações importantes18337278
Ref: howto/free-threading-extensions important-considerations18337392
Ref: 55de18337392
Node: Construindo extensões para a construção com threads livres18339548
Ref: howto/free-threading-extensions building-extensions-for-the-free-threaded-build18339722
Ref: 55df18339722
Ref: Construindo extensões para a construção com threads livres-Footnote-118340425
Ref: Construindo extensões para a construção com threads livres-Footnote-218340467
Ref: Construindo extensões para a construção com threads livres-Footnote-318340512
Node: API C limitada e ABI estável18340575
Ref: howto/free-threading-extensions limited-c-api-and-stable-abi18340722
Ref: 55e018340722
Ref: API C limitada e ABI estável-Footnote-118341489
Node: Windows<82>18341550
Ref: howto/free-threading-extensions windows18341697
Ref: 55e118341697
Ref: Windows<82>-Footnote-118342129
Node: Protocolo de anexação de depuração remota18342182
Ref: howto/remote_debugging doc18342368
Ref: 55e218342368
Ref: howto/remote_debugging no-color18342368
Ref: 55e318342368
Ref: howto/remote_debugging remote-debugging18342368
Ref: 55e418342368
Ref: howto/remote_debugging remote-debugging-attachment-protocol18342368
Ref: 55e518342368
Node: Requisitos de permissão18342700
Ref: howto/remote_debugging id118342873
Ref: 55e618342873
Ref: howto/remote_debugging permission-requirements18342873
Ref: 55e718342873
Node: Localizando a estrutura de PyRuntime18347113
Ref: howto/remote_debugging locating-the-pyruntime-structure18347263
Ref: 55e818347263
Ref: Localizando a estrutura de PyRuntime-Footnote-118358283
Ref: Localizando a estrutura de PyRuntime-Footnote-218358352
Ref: Localizando a estrutura de PyRuntime-Footnote-318358459
Ref: Localizando a estrutura de PyRuntime-Footnote-418358555
Node: Lendo _Py_DebugOffsets18358650
Ref: howto/remote_debugging reading-py-debugoffsets18358825
Ref: 55e918358825
Node: Localizando o estado de thread e do interpretador18363015
Ref: howto/remote_debugging locating-the-interpreter-and-thread-state18363190
Ref: 55ea18363190
Node: Escrevendo informações de controle18368161
Ref: howto/remote_debugging writing-control-information18368323
Ref: 55eb18368323
Node: Resumo<2>18372320
Ref: howto/remote_debugging summary18372424
Ref: 55ec18372424
Node: Perguntas Frequentes Sobre Python18374472
Ref: faq/index doc18374593
Ref: 55ed18374593
Ref: faq/index faq-index18374593
Ref: 1fa218374593
Ref: faq/index no-color18374593
Ref: 55ee18374593
Ref: faq/index python-frequently-asked-questions18374593
Ref: 55ef18374593
Node: Python Geral18374965
Ref: faq/general doc18375079
Ref: 55f018375079
Ref: faq/general general-python-faq18375079
Ref: 55f118375079
Node: Informações gerais18375176
Ref: faq/general general-information18375274
Ref: 55f218375274
Node: O que é Python?18376456
Ref: faq/general what-is-python18376576
Ref: 55f318376576
Ref: O que é Python?-Footnote-118377698
Node: O que é a Python Software Foundation?18377750
Ref: faq/general what-is-the-python-software-foundation18377943
Ref: 55f418377943
Ref: O que é a Python Software Foundation?-Footnote-118378641
Node: Existem restrições de direitos autorais sobre o uso de Python?18378687
Ref: faq/general are-there-copyright-restrictions-on-the-use-of-python18378916
Ref: 55f518378916
Ref: Existem restrições de direitos autorais sobre o uso de Python?-Footnote-118379929
Ref: Existem restrições de direitos autorais sobre o uso de Python?-Footnote-218379976
Node: Em primeiro lugar por que o Python foi desenvolvido?18380023
Ref: faq/general why-was-python-created-in-the-first-place18380245
Ref: 55f618380245
Node: Para o que Python é excelente?18382783
Ref: faq/general what-is-python-good-for18383002
Ref: 55f718383002
Ref: Para o que Python é excelente?-Footnote-118383959
Node: Como funciona o esquema de numeração de versões do Python?18383984
Ref: faq/general faq-version-numbering-scheme18384204
Ref: 55f818384204
Ref: faq/general how-does-the-python-version-numbering-scheme-work18384204
Ref: 55f918384204
Ref: Como funciona o esquema de numeração de versões do Python?-Footnote-118386652
Ref: Como funciona o esquema de numeração de versões do Python?-Footnote-218386726
Node: Como faço para obter uma cópia dos fonte do Python?18386768
Ref: faq/general how-do-i-obtain-a-copy-of-the-python-source18387006
Ref: 55fa18387006
Ref: Como faço para obter uma cópia dos fonte do Python?-Footnote-118387896
Node: Como faço para obter a documentação do Python?18387939
Ref: faq/general how-do-i-get-documentation-on-python18388178
Ref: 55fb18388178
Ref: Como faço para obter a documentação do Python?-Footnote-118388791
Node: Eu nunca programei antes Existe um tutorial básico do Python?18388827
Ref: faq/general i-ve-never-programmed-before-is-there-a-python-tutorial18389085
Ref: 55fc18389085
Ref: Eu nunca programei antes Existe um tutorial básico do Python?-Footnote-118389541
Node: Existe um grupo de discussão ou lista de discussão dedicada ao Python?18389593
Ref: faq/general is-there-a-newsgroup-or-mailing-list-devoted-to-python18389860
Ref: 55fd18389860
Ref: Existe um grupo de discussão ou lista de discussão dedicada ao Python?-Footnote-118390900
Ref: Existe um grupo de discussão ou lista de discussão dedicada ao Python?-Footnote-218390961
Node: Como faço para obter uma versão de teste beta do Python?18391042
Ref: faq/general how-do-i-get-a-beta-test-version-of-python18391312
Ref: 55fe18391312
Ref: Como faço para obter uma versão de teste beta do Python?-Footnote-118391930
Node: Como eu envio um relatório de erros e correções para o Python?18391967
Ref: faq/general how-do-i-submit-bug-reports-and-patches-for-python18392250
Ref: 55ff18392250
Ref: Como eu envio um relatório de erros e correções para o Python?-Footnote-118392664
Node: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?18392701
Ref: faq/general are-there-any-published-articles-about-python-that-i-can-reference18392963
Ref: 560018392963
Ref: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?-Footnote-118393582
Node: Existem alguns livros sobre o Python?18393618
Ref: faq/general are-there-any-books-on-python18393859
Ref: 560118393859
Node: Onde está armazenado o site www python org?18394315
Ref: faq/general where-in-the-world-is-www-python-org-located18394493
Ref: 560218394493
Ref: Onde está armazenado o site www python org?-Footnote-118394784
Node: Por que o nome Python?18394813
Ref: faq/general why-is-it-called-python18395014
Ref: 560318395014
Ref: Por que o nome Python?-Footnote-118395451
Node: Eu tenho que gostar de “Monty Python’s Flying Circus”?18395502
Ref: faq/general do-i-have-to-like-monty-python-s-flying-circus18395650
Ref: 560418395650
Node: Python no mundo real18395814
Ref: faq/general python-in-the-real-world18395912
Ref: 560518395912
Node: Quão estável é o Python?18396326
Ref: faq/general how-stable-is-python18396449
Ref: 560618396449
Ref: Quão estável é o Python?-Footnote-118397562
Ref: Quão estável é o Python?-Footnote-218397604
Ref: Quão estável é o Python?-Footnote-318397646
Node: Quantas pessoas usam o Python?18397688
Ref: faq/general how-many-people-are-using-python18397871
Ref: 560718397871
Node: Existe algum projeto significativo feito em Python?18398496
Ref: faq/general have-any-significant-projects-been-done-in-python18398723
Ref: 560818398723
Ref: Existe algum projeto significativo feito em Python?-Footnote-118399501
Ref: Existe algum projeto significativo feito em Python?-Footnote-218399553
Ref: Existe algum projeto significativo feito em Python?-Footnote-318399582
Ref: Existe algum projeto significativo feito em Python?-Footnote-418399611
Node: Quais são os novos desenvolvimentos esperados para o Python no futuro?18399642
Ref: faq/general what-new-developments-are-expected-for-python-in-the-future18399897
Ref: 560918399897
Ref: Quais são os novos desenvolvimentos esperados para o Python no futuro?-Footnote-118400575
Node: É razoável propor mudanças incompatíveis com o Python?18400645
Ref: faq/general is-it-reasonable-to-propose-incompatible-changes-to-python18400929
Ref: 560a18400929
Ref: É razoável propor mudanças incompatíveis com o Python?-Footnote-118401815
Node: O Python é uma boa linguagem para quem está começando na programação agora?18401857
Ref: faq/general is-python-a-good-language-for-beginning-programmers18402061
Ref: 560b18402061
Ref: O Python é uma boa linguagem para quem está começando na programação agora?-Footnote-118406410
Ref: O Python é uma boa linguagem para quem está começando na programação agora?-Footnote-218406461
Node: FAQ sobre programação18406523
Ref: faq/programming doc18406675
Ref: 560c18406675
Ref: faq/programming no-color18406675
Ref: 560d18406675
Ref: faq/programming programming-faq18406675
Ref: 560e18406675
Node: Perguntas gerais18406933
Ref: faq/programming general-questions18407038
Ref: 560f18407038
Node: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?18407604
Ref: faq/programming is-there-a-source-code-level-debugger-with-breakpoints-single-stepping-etc18407871
Ref: 561018407871
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-118409579
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-218409651
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-318409695
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-418409748
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-518409794
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-618409843
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-718409882
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-818409912
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-918409969
Node: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?18410012
Ref: faq/programming are-there-tools-to-help-find-bugs-or-perform-static-analysis18410359
Ref: 561118410359
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-118410829
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-218410883
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-318410925
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-418410956
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-518410988
Node: Como posso criar um binário independente a partir de um script Python?18411029
Ref: faq/programming faq-create-standalone-binary18411354
Ref: 561218411354
Ref: faq/programming how-can-i-create-a-stand-alone-binary-from-a-python-script18411354
Ref: 561318411354
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-118413264
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-218413329
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-318413357
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-418413390
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-518413443
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-618413495
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-718413544
Node: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?18413576
Ref: faq/programming are-there-coding-standards-or-a-style-guide-for-python-programs18413801
Ref: 561418413801
Ref: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?-Footnote-118414184
Node: Núcleo da linguagem18414226
Ref: faq/programming core-language18414358
Ref: 561518414358
Node: Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?18415891
Ref: faq/programming faq-unboundlocalerror18416105
Ref: 22c018416105
Ref: faq/programming why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value18416105
Ref: 561618416105
Node: Quais são as regras para variáveis locais e globais em Python?18418134
Ref: faq/programming what-are-the-rules-for-local-and-global-variables-in-python18418448
Ref: 561718418448
Node: Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?18419477
Ref: faq/programming why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result18419758
Ref: 561818419758
Node: Como definir variáveis globais dentro de módulos?18421786
Ref: faq/programming how-do-i-share-global-variables-across-modules18422089
Ref: 561918422089
Node: Quais são as “melhores práticas” quando fazemos uso da importação de módulos?18422960
Ref: faq/programming what-are-the-best-practices-for-using-import-in-a-module18423233
Ref: 561a18423233
Node: Por que os valores padrão são compartilhados entre objetos?18426611
Ref: faq/programming why-are-default-values-shared-between-objects18426917
Ref: 561b18426917
Node: Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?18429613
Ref: faq/programming how-can-i-pass-optional-or-keyword-parameters-from-one-function-to-another18429882
Ref: 561c18429882
Node: Qual a diferença entre argumentos e parâmetros?18430512
Ref: faq/programming faq-argument-vs-parameter18430786
Ref: 561d18430786
Ref: faq/programming what-is-the-difference-between-arguments-and-parameters18430786
Ref: 561e18430786
Node: Por que ao alterar a lista ‘y’ também altera a lista ‘x’?18431553
Ref: faq/programming why-did-changing-list-y-also-change-list-x18431820
Ref: 561f18431820
Node: Como escrevo uma função com parâmetros de saída chamada por referência ?18435515
Ref: faq/programming how-do-i-write-a-function-with-output-parameters-call-by-reference18435785
Ref: 562018435785
Node: Como fazer uma função de ordem superior em Python?18438394
Ref: faq/programming how-do-you-make-a-higher-order-function-in-python18438641
Ref: 562118438641
Node: Como faço para copiar um objeto no Python?18440285
Ref: faq/programming how-do-i-copy-an-object-in-python18440514
Ref: 562218440514
Node: Como posso encontrar os métodos ou atributos de um objeto?18441042
Ref: faq/programming how-can-i-find-the-methods-or-attributes-of-an-object18441277
Ref: 562318441277
Node: Como que o meu código pode descobrir o nome de um objeto?18441647
Ref: faq/programming how-can-my-code-discover-the-name-of-an-object18441889
Ref: 562418441889
Node: O que há com a precedência do operador vírgula?18443661
Ref: faq/programming what-s-up-with-the-comma-operator-s-precedence18443902
Ref: 562518443902
Node: Existe um equivalente ao operador ternário “? ” do C?18444525
Ref: faq/programming is-there-an-equivalent-of-c-s-ternary-operator18444780
Ref: 562618444780
Node: É possível escrever instruções de uma só linha ofuscadas em Python?18445438
Ref: faq/programming is-it-possible-to-write-obfuscated-one-liners-in-python18445709
Ref: 562718445709
Node: O que a barra / na lista de parâmetros de uma função significa?18447266
Ref: faq/programming faq-positional-only-arguments18447470
Ref: 246518447470
Ref: faq/programming what-does-the-slash-in-the-parameter-list-of-a-function-mean18447470
Ref: 562818447470
Node: Números e strings18448631
Ref: faq/programming numbers-and-strings18448760
Ref: 562918448760
Node: Como faço para especificar números inteiros hexadecimais e octais?18449672
Ref: faq/programming how-do-i-specify-hexadecimal-and-octal-integers18449833
Ref: 562a18449833
Node: Por que -22 // 10 retorna -3?18450589
Ref: faq/programming why-does-22-10-return-318450824
Ref: 562b18450824
Node: Como obtenho um atributo de um literal int em vez de SyntaxError?18451656
Ref: faq/programming how-do-i-get-int-literal-attribute-instead-of-syntaxerror18451874
Ref: 562c18451874
Node: Como faço para converter uma string em um número?18452456
Ref: faq/programming how-do-i-convert-a-string-to-a-number18452696
Ref: 562d18452696
Node: Como faço para converter um número em uma string?18454166
Ref: faq/programming how-do-i-convert-a-number-to-a-string18454391
Ref: 562e18454391
Node: Como faço para modificar uma string internamente?18455019
Ref: faq/programming how-do-i-modify-a-string-in-place18455256
Ref: 562f18455256
Node: Como faço para invocar funções/métodos através de strings?18456204
Ref: faq/programming how-do-i-use-strings-to-call-functions-methods18456472
Ref: 563018456472
Node: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?18457963
Ref: faq/programming is-there-an-equivalent-to-perl-s-chomp-for-removing-trailing-newlines-from-strings18458237
Ref: 563118458237
Node: Existe uma função scanf ou sscanf ou algo equivalente?18459027
Ref: faq/programming is-there-a-scanf-or-sscanf-equivalent18459302
Ref: 563218459302
Node: O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?18460119
Ref: faq/programming what-does-unicodedecodeerror-or-unicodeencodeerror-error-mean18460382
Ref: 563318460382
Node: Posso terminar uma string bruta com um número ímpar de contrabarras?18460580
Ref: faq/programming can-i-end-a-raw-string-with-an-odd-number-of-backslashes18460778
Ref: 563418460778
Ref: faq/programming faq-programming-raw-string-backslash18460778
Ref: 1e9418460778
Node: Desempenho<4>18462152
Ref: faq/programming performance18462285
Ref: 563518462285
Node: Meu programa está muito lento Como faço para melhorar o desempenho?18462544
Ref: faq/programming my-program-is-too-slow-how-do-i-speed-it-up18462734
Ref: 563618462734
Ref: Meu programa está muito lento Como faço para melhorar o desempenho?-Footnote-118466034
Ref: Meu programa está muito lento Como faço para melhorar o desempenho?-Footnote-218466061
Node: Qual é a maneira mais eficiente de concatenar muitas strings?18466126
Ref: faq/programming efficient-string-concatenation18466316
Ref: 563718466316
Ref: faq/programming what-is-the-most-efficient-way-to-concatenate-many-strings-together18466316
Ref: 563818466316
Node: Sequencias Tuplas/Listas18467304
Ref: faq/programming sequences-tuples-lists18467426
Ref: 563918467426
Node: Como faço para converter tuplas em listas?18468259
Ref: faq/programming how-do-i-convert-between-tuples-and-lists18468401
Ref: 563a18468401
Node: O que é um índice negativo?18469301
Ref: faq/programming what-s-a-negative-index18469502
Ref: 563b18469502
Node: Como que eu itero uma sequência na ordem inversa?18470188
Ref: faq/programming how-do-i-iterate-over-a-sequence-in-reverse-order18470392
Ref: 563c18470392
Node: Como que removo itens duplicados de uma lista?18470754
Ref: faq/programming how-do-you-remove-duplicates-from-a-list18470972
Ref: 563d18470972
Node: Como remover múltiplos itens de uma lista?18471901
Ref: faq/programming how-do-you-remove-multiple-items-from-a-list18472099
Ref: 563e18472099
Node: Como fazer um vetor em Python?18472705
Ref: faq/programming how-do-you-make-an-array-in-python18472906
Ref: 563f18472906
Ref: Como fazer um vetor em Python?-Footnote-118474011
Node: Como faço para criar uma lista multidimensional?18474038
Ref: faq/programming faq-multidimensional-list18474265
Ref: 249e18474265
Ref: faq/programming how-do-i-create-a-multidimensional-list18474265
Ref: 564018474265
Ref: Como faço para criar uma lista multidimensional?-Footnote-118475581
Node: Como eu aplico um método ou função para uma sequência de objetos?18475608
Ref: faq/programming how-do-i-apply-a-method-or-function-to-a-sequence-of-objects18475890
Ref: 564118475890
Node: Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?18476508
Ref: faq/programming faq-augmented-assignment-tuple-error18476837
Ref: 229618476837
Ref: faq/programming why-does-a-tuple-i-item-raise-an-exception-when-the-addition-works18476837
Ref: 564218476837
Node: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?18480205
Ref: faq/programming i-want-to-do-a-complicated-sort-can-you-do-a-schwartzian-transform-in-python18480526
Ref: 564318480526
Node: Como eu posso ordenar uma lista pelos valores de outra lista?18481052
Ref: faq/programming how-can-i-sort-one-list-by-values-from-another-list18481279
Ref: 564418481279
Node: Objetos18481918
Ref: faq/programming objects18482038
Ref: 564518482038
Node: O que é uma classe?18483408
Ref: faq/programming what-is-a-class18483501
Ref: 564618483501
Node: O que é um método?18484276
Ref: faq/programming what-is-a-method18484394
Ref: 564718484394
Node: O que é o self?18484728
Ref: faq/programming what-is-self18484918
Ref: 564818484918
Node: Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?18485400
Ref: faq/programming how-do-i-check-if-an-object-is-an-instance-of-a-given-class-or-of-a-subclass-of-it18485591
Ref: 564a18485591
Node: O que é delegação?18488089
Ref: faq/programming what-is-delegation18488363
Ref: 564b18488363
Node: Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?18490639
Ref: faq/programming how-do-i-call-a-method-defined-in-a-base-class-from-a-derived-class-that-extends-it18490895
Ref: 564c18490895
Node: Como eu posso organizar meu código para facilitar a troca da classe base?18491546
Ref: faq/programming how-can-i-organize-my-code-to-make-it-easier-to-change-the-base-class18491862
Ref: 564d18491862
Node: Como faço para criar dados de classe estáticos e métodos de classe estáticos?18492442
Ref: faq/programming how-do-i-create-static-class-data-and-static-class-methods18492722
Ref: 564e18492722
Node: Como eu posso sobrecarregar construtores ou métodos em Python?18494528
Ref: faq/programming how-can-i-overload-constructors-or-methods-in-python18494799
Ref: 564f18494799
Node: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam18495823
Ref: faq/programming i-try-to-use-spam-and-i-get-an-error-about-someclassname-spam18496094
Ref: 565018496094
Node: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto18497400
Ref: faq/programming my-class-defines-del-but-it-is-not-called-when-i-delete-the-object18497683
Ref: 565118497683
Node: Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?18499814
Ref: faq/programming how-do-i-get-a-list-of-all-instances-of-a-given-class18500083
Ref: 565218500083
Node: Por que o resultado de id aparenta não ser único?18500508
Ref: faq/programming why-does-the-result-of-id-appear-to-be-not-unique18500764
Ref: 565318500764
Node: Quando eu posso depender dos testes de identidade com o operador is?18501696
Ref: faq/programming when-can-i-rely-on-identity-tests-with-the-is-operator18501968
Ref: 565418501968
Ref: Quando eu posso depender dos testes de identidade com o operador is?-Footnote-118505582
Node: Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?18505624
Ref: faq/programming how-can-a-subclass-control-what-data-is-stored-in-an-immutable-instance18505906
Ref: 565518505906
Node: Como faço para armazenar em cache as chamadas de um método?18507469
Ref: faq/programming faq-cache-method-calls18507674
Ref: 2a5018507674
Ref: faq/programming how-do-i-cache-method-calls18507674
Ref: 565618507674
Node: Módulos<5>18510928
Ref: faq/programming modules18511015
Ref: 565718511015
Node: Como faço para criar um arquivo pyc?18511600
Ref: faq/programming how-do-i-create-a-pyc-file18511732
Ref: 565818511732
Ref: Como faço para criar um arquivo pyc?-Footnote-118514572
Node: Como encontro o nome do módulo atual?18514614
Ref: faq/programming how-do-i-find-the-current-module-name18514806
Ref: 565918514806
Node: Como posso ter módulos que se importam mutuamente?18515414
Ref: faq/programming how-can-i-have-modules-that-mutually-import-each-other18515643
Ref: 565a18515643
Node: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?18517822
Ref: faq/programming import-x-y-z-returns-module-x-how-do-i-get-z18518113
Ref: 565b18518113
Node: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?18518423
Ref: faq/programming when-i-edit-an-imported-module-and-reimport-it-the-changes-don-t-show-up-why-does-this-happen18518654
Ref: 565c18518654
Node: FAQ sobre design e histórico18520162
Ref: faq/design doc18520333
Ref: 565d18520333
Ref: faq/design design-and-history-faq18520333
Ref: 565e18520333
Ref: faq/design no-color18520333
Ref: 565f18520333
Node: Por que o Python usa indentação para agrupamento de instruções?18522820
Ref: faq/design why-does-python-use-indentation-for-grouping-of-statements18523047
Ref: 566018523047
Node: Por que eu estou recebendo resultados estranhos com simples operações aritméticas?18525007
Ref: faq/design why-am-i-getting-strange-results-with-simple-arithmetic-operations18525304
Ref: 566118525304
Node: Por que o cálculo de pontos flutuantes são tão imprecisos?18525515
Ref: faq/design why-are-floating-point-calculations-so-inaccurate18525787
Ref: 566218525787
Node: Por que strings do Python são imutáveis?18527474
Ref: faq/design why-are-python-strings-immutable18527750
Ref: 566318527750
Node: Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?18528396
Ref: faq/design why-must-self-be-used-explicitly-in-method-definitions-and-calls18528670
Ref: 566418528670
Ref: faq/design why-self18528670
Ref: 564918528670
Node: Por que não posso usar uma atribuição em uma expressão?18531452
Ref: faq/design id118531798
Ref: 566518531798
Ref: faq/design why-can-t-i-use-an-assignment-in-an-expression18531798
Ref: 1eed18531798
Ref: Por que não posso usar uma atribuição em uma expressão?-Footnote-118532204
Node: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?18532246
Ref: faq/design why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list18532585
Ref: 566618532585
Node: Por que o join é um método de string em vez de ser um método de lista ou tupla?18534003
Ref: faq/design why-is-join-a-string-method-instead-of-a-list-or-tuple-method18534317
Ref: 566718534317
Node: Quão rápidas são as exceções?18536289
Ref: faq/design how-fast-are-exceptions18536553
Ref: 566818536553
Node: Por que não existe uma instrução de switch ou case no Python?18537475
Ref: faq/design why-isn-t-there-a-switch-or-case-statement-in-python18537791
Ref: 566918537791
Node: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?18539475
Ref: faq/design can-t-you-emulate-threads-in-the-interpreter-instead-of-relying-on-an-os-specific-thread-implementation18539815
Ref: 566a18539815
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-118540552
Node: Por que expressões lambda não podem conter instruções?18540608
Ref: faq/design why-can-t-lambda-expressions-contain-statements18540967
Ref: 566b18540967
Node: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?18541950
Ref: faq/design can-python-be-compiled-to-machine-code-c-or-some-other-language18542207
Ref: 566c18542207
Ref: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?-Footnote-118542654
Ref: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?-Footnote-218542682
Node: Como o Python gerencia memória?18542710
Ref: faq/design how-does-python-manage-memory18542992
Ref: 566d18542992
Ref: Como o Python gerencia memória?-Footnote-118544824
Ref: Como o Python gerencia memória?-Footnote-218544855
Node: Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?18544880
Ref: faq/design why-doesn-t-cpython-use-a-more-traditional-garbage-collection-scheme18545141
Ref: 566e18545141
Node: Por que toda memória não é liberada quando o CPython fecha?18546191
Ref: faq/design why-isn-t-all-memory-freed-when-cpython-exits18546482
Ref: 566f18546482
Node: Por que existem tipos de dados separados para tuplas e listas?18547249
Ref: faq/design why-are-there-separate-tuple-and-list-data-types18547502
Ref: 567018547502
Node: Como as listas são implementadas no CPython?18548897
Ref: faq/design how-are-lists-implemented-in-cpython18549139
Ref: 567118549139
Node: Como são os dicionários implementados no CPython?18549988
Ref: faq/design how-are-dictionaries-implemented-in-cpython18550219
Ref: 567218550219
Node: Por que chaves de dicionário devem ser imutáveis?18551307
Ref: faq/design why-must-dictionary-keys-be-immutable18551542
Ref: 567318551542
Node: Por que lista sort não retorna a lista ordenada?18556153
Ref: faq/design why-doesn-t-list-sort-return-the-sorted-list18556399
Ref: 567418556399
Node: Como você especifica e aplica um spec de interface no Python?18557292
Ref: faq/design how-do-you-specify-and-enforce-an-interface-spec-in-python18557509
Ref: 567518557509
Node: Por que não há goto?18560096
Ref: faq/design why-is-there-no-goto18560337
Ref: 567618560337
Node: Por que strings brutas r-strings não podem terminar com uma contrabarra?18561564
Ref: faq/design why-can-t-raw-strings-r-strings-end-with-a-backslash18561827
Ref: 567718561827
Node: Por que o Python não tem uma instrução “with” para atribuição de atributos?18563175
Ref: faq/design why-doesn-t-python-have-a-with-statement-for-attribute-assignments18563470
Ref: 567818563470
Node: Por que os geradores não suportam a instrução with?18566126
Ref: faq/design why-don-t-generators-support-the-with-statement18566429
Ref: 567918566429
Node: Por que dois pontos são necessários para as instruções de if/while/def/class?18566902
Ref: faq/design why-are-colons-required-for-the-if-while-def-class-statements18567184
Ref: 567a18567184
Node: Por que o Python permite vírgulas ao final de listas e tuplas?18568015
Ref: faq/design why-does-python-allow-commas-at-the-end-of-lists-and-tuples18568234
Ref: 567b18568234
Node: FAQ de Bibliotecas e Extensões18569411
Ref: faq/library doc18569593
Ref: 567c18569593
Ref: faq/library library-and-extension-faq18569593
Ref: 567d18569593
Ref: faq/library no-color18569593
Ref: 567e18569593
Node: Questões gerais sobre bibliotecas18569870
Ref: faq/library general-library-questions18569995
Ref: 567f18569995
Node: Como encontrar um módulo ou aplicação para realizar uma tarefa X?18570568
Ref: faq/library how-do-i-find-a-module-or-application-to-perform-task-x18570778
Ref: 568018570778
Ref: Como encontrar um módulo ou aplicação para realizar uma tarefa X?-Footnote-118571419
Ref: Como encontrar um módulo ou aplicação para realizar uma tarefa X?-Footnote-218571444
Node: Onde está o código-fonte do math py socket py regex py etc ?18571475
Ref: faq/library where-is-the-math-py-socket-py-regex-py-etc-source-file18571743
Ref: 568118571743
Node: Como tornar um script Python executável no Unix?18572601
Ref: faq/library how-do-i-make-a-python-script-executable-on-unix18572848
Ref: 568218572848
Node: Existe um pacote de curses/termcap para Python?18574361
Ref: faq/library is-there-a-curses-termcap-package-for-python18574598
Ref: 568318574598
Ref: Existe um pacote de curses/termcap para Python?-Footnote-118575449
Node: Existe a função onexit equivalente ao C no Python?18575509
Ref: faq/library is-there-an-equivalent-to-c-s-onexit-in-python18575746
Ref: 568418575746
Node: Por que o meu manipulador de sinal não funciona?18575966
Ref: faq/library why-don-t-my-signal-handlers-work18576147
Ref: 568518576147
Node: Tarefas comuns18576537
Ref: faq/library common-tasks18576678
Ref: 568618576678
Node: Como testar um programa ou componente Python?18576898
Ref: faq/library how-do-i-test-a-python-program-or-component18577059
Ref: 568718577059
Node: Como faço para criar uma documentação de doc strings?18579208
Ref: faq/library how-do-i-create-documentation-from-doc-strings18579427
Ref: 568818579427
Ref: Como faço para criar uma documentação de doc strings?-Footnote-118579850
Ref: Como faço para criar uma documentação de doc strings?-Footnote-218579890
Node: Como faço para pressionar uma tecla de cada vez?18579925
Ref: faq/library how-do-i-get-a-single-keypress-at-a-time18580090
Ref: 568918580090
Node: Threads18580355
Ref: faq/library threads18580481
Ref: 568a18580481
Node: Como faço para programar usando threads?18580872
Ref: faq/library how-do-i-program-using-threads18581017
Ref: 568b18581017
Node: Nenhuma de minhas threads parece funcionar por que?18581354
Ref: faq/library none-of-my-threads-seem-to-run-why18581568
Ref: 568c18581568
Node: Como distribuo o trabalho entre várias threads de trabalho?18583253
Ref: faq/library how-do-i-parcel-out-work-among-a-bunch-of-worker-threads18583493
Ref: 568d18583493
Node: Que tipos de variáveis globais mutáveis são seguras para thread?18586176
Ref: faq/library what-kinds-of-global-value-mutation-are-thread-safe18586418
Ref: 568e18586418
Node: Não podemos remover a Trava Global do interpretador?18588115
Ref: faq/library can-t-we-get-rid-of-the-global-interpreter-lock18588288
Ref: 568f18588288
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-118591593
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-218591635
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-318591678
Node: Entrada e Saída<2>18591738
Ref: faq/library input-and-output18591879
Ref: 569018591879
Node: Como faço para excluir um arquivo? E outras perguntas sobre arquivos18592512
Ref: faq/library how-do-i-delete-a-file-and-other-file-questions18592671
Ref: 569118592671
Node: Como eu copio um arquivo?18594044
Ref: faq/library how-do-i-copy-a-file18594249
Ref: 569218594249
Ref: Como eu copio um arquivo?-Footnote-118594768
Ref: Como eu copio um arquivo?-Footnote-218594839
Node: Como leio ou escrevo dados binários?18594891
Ref: faq/library how-do-i-read-or-write-binary-data18595094
Ref: 569318595094
Node: Por que não consigo usar os read em um encadeamento com os popen ?18596324
Ref: faq/library i-can-t-seem-to-use-os-read-on-a-pipe-created-with-os-popen-why18596536
Ref: 569418596536
Node: Como acesso a porta serial RS232 ?18597076
Ref: faq/library how-do-i-access-the-serial-rs232-port18597296
Ref: 569518597296
Ref: Como acesso a porta serial RS232 ?-Footnote-118597623
Node: Por que o sys stdout stdin stderr não fecha?18597666
Ref: faq/library why-doesn-t-closing-sys-stdout-stdin-stderr-really-close-it18597810
Ref: 569618597810
Node: Programação Rede / Internet18599123
Ref: faq/library network-internet-programming18599270
Ref: 569718599270
Node: Quais ferramentas para WWW existem no Python?18599630
Ref: faq/library what-www-tools-are-there-for-python18599806
Ref: 569818599806
Node: Qual módulo devo usar para ajudar na geração do HTML?18600323
Ref: faq/library what-module-should-i-use-to-help-with-generating-html18600549
Ref: 569918600549
Ref: Qual módulo devo usar para ajudar na geração do HTML?-Footnote-118600802
Node: Como envio um e-mail de um script Python?18600854
Ref: faq/library how-do-i-send-mail-from-a-python-script18601091
Ref: 569a18601091
Node: Como evito um bloqueio no método connect de um soquete?18602488
Ref: faq/library how-do-i-avoid-blocking-in-the-connect-method-of-a-socket18602660
Ref: 569b18602660
Ref: Como evito um bloqueio no método connect de um soquete?-Footnote-118604103
Node: Base de Dados18604132
Ref: faq/library databases18604285
Ref: 569c18604285
Node: Existem interfaces para banco de dados em Python?18604450
Ref: faq/library are-there-any-interfaces-to-database-packages-in-python18604611
Ref: 569d18604611
Ref: Existem interfaces para banco de dados em Python?-Footnote-118605157
Node: Como você implementa objetos persistentes no Python?18605214
Ref: faq/library how-do-you-implement-persistent-objects-in-python18605375
Ref: 569e18605375
Node: Matemáticos e Numéricos18605815
Ref: faq/library mathematics-and-numerics18605930
Ref: 569f18605930
Node: Como gero número aleatórios no Python?18606050
Ref: faq/library how-do-i-generate-random-numbers-in-python18606152
Ref: 56a018606152
Node: FAQ sobre Extensão/Incorporação18607246
Ref: faq/extending doc18607416
Ref: 56a118607416
Ref: faq/extending extending-embedding-faq18607416
Ref: 56a218607416
Ref: faq/extending no-color18607416
Ref: 56a318607416
Node: Posso criar minhas próprias funções em C?18609202
Ref: faq/extending can-i-create-my-own-functions-in-c18609372
Ref: 56a418609372
Node: Posso criar minhas próprias funções em C++?18609781
Ref: faq/extending id118610007
Ref: 56a518610007
Node: Escrever C é difícil; há alguma alternativa?18610445
Ref: faq/extending c-wrapper-software18610697
Ref: 56a618610697
Ref: faq/extending writing-c-is-hard-are-there-any-alternatives18610697
Ref: 56a718610697
Node: Como posso executar instruções arbitrárias de Python a partir de C?18611069
Ref: faq/extending how-can-i-execute-arbitrary-python-statements-from-c18611366
Ref: 56a818611366
Node: Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?18611950
Ref: faq/extending how-can-i-evaluate-an-arbitrary-python-expression-from-c18612255
Ref: 56a918612255
Node: Como extraio valores em C a partir de um objeto Python?18612666
Ref: faq/extending how-do-i-extract-c-values-from-a-python-object18612983
Ref: 56aa18612983
Node: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?18614309
Ref: faq/extending how-do-i-use-py-buildvalue-to-create-a-tuple-of-arbitrary-length18614587
Ref: 56ab18614587
Node: Como eu chamo um método de um objeto a partir do C?18614846
Ref: faq/extending how-do-i-call-an-object-s-method-from-c18615178
Ref: 56ac18615178
Node: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?18616535
Ref: faq/extending how-do-i-catch-the-output-from-pyerr-print-or-anything-that-prints-to-stdout-stderr18616852
Ref: 56ad18616852
Node: Como faço para acessar a partir do C um módulo escrito em Python?18618140
Ref: faq/extending how-do-i-access-a-module-written-in-python-from-c18618461
Ref: 56ae18618461
Node: Como posso interagir com objetos C++ a partir do Python?18619393
Ref: faq/extending how-do-i-interface-to-c-objects-from-python18619677
Ref: 56af18619677
Node: Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?18620304
Ref: faq/extending i-added-a-module-using-the-setup-file-and-the-make-fails-why18620550
Ref: 56b018620550
Node: Como eu depuro uma extensão?18620970
Ref: faq/extending how-do-i-debug-an-extension18621259
Ref: 56b118621259
Node: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?18621861
Ref: faq/extending i-want-to-compile-a-python-module-on-my-linux-system-but-some-files-are-missing-why18622152
Ref: 56b218622152
Node: Como posso distinguir “entrada incompleta” de “entrada inválida”?18622632
Ref: faq/extending how-do-i-tell-incomplete-input-from-invalid-input18622975
Ref: 56b318622975
Node: Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?18624037
Ref: faq/extending how-do-i-find-undefined-g-symbols-builtin-new-or-pure-virtual18624399
Ref: 56b418624399
Node: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?18624889
Ref: faq/extending can-i-create-an-object-class-with-some-methods-implemented-in-c-and-others-in-python-e-g-through-inheritance18625168
Ref: 56b518625168
Node: Python no Windows18625756
Ref: faq/windows doc18625932
Ref: 56b618625932
Ref: faq/windows no-color18625932
Ref: 56b718625932
Ref: faq/windows python-on-windows-faq18625932
Ref: 56b818625932
Ref: faq/windows windows-faq18625932
Ref: 56b918625932
Node: Como faço para executar um programa Python no Windows?18626681
Ref: faq/windows faq-run-program-under-windows18626854
Ref: 56ba18626854
Ref: faq/windows how-do-i-run-a-python-program-under-windows18626854
Ref: 56bb18626854
Node: Como eu faço para criar programas Python executáveis?18630642
Ref: faq/windows how-do-i-make-python-scripts-executable18630875
Ref: 56bc18630875
Node: Por que Python às vezes demora tanto para iniciar?18631476
Ref: faq/windows why-does-python-sometimes-take-so-long-to-start18631724
Ref: 56bd18631724
Node: Como eu faço para criar um executável a partir de um código Python?18632677
Ref: faq/windows how-do-i-make-an-executable-from-a-python-script18632909
Ref: 56be18632909
Node: Um arquivo * pyd é o mesmo que um DLL?18633233
Ref: faq/windows is-a-pyd-file-the-same-as-a-dll18633480
Ref: 56bf18633480
Node: Como eu posso embutir Python dentro de uma aplicação do Windows?18634566
Ref: faq/windows how-can-i-embed-python-into-a-windows-application18634822
Ref: 56c018634822
Node: Como eu impeço editores de adicionarem tabulações na minha source do Python?18639770
Ref: faq/windows how-do-i-keep-editors-from-inserting-tabs-into-my-python-source18640048
Ref: 56c118640048
Node: Como faço para verificar uma tecla pressionada sem bloquear?18641074
Ref: faq/windows how-do-i-check-for-a-keypress-without-blocking18641351
Ref: 56c218641351
Node: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?18641732
Ref: faq/windows how-do-i-solve-the-missing-api-ms-win-crt-runtime-l1-1-0-dll-error18641921
Ref: 56c318641921
Ref: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?-Footnote-118642498
Node: FAQ da Interface Gráfica do Usuário18642556
Ref: faq/gui doc18642762
Ref: 56c418642762
Ref: faq/gui graphic-user-interface-faq18642762
Ref: 56c518642762
Ref: faq/gui no-color18642762
Ref: 56c618642762
Node: Perguntas Gerais sobre a GUI18642964
Ref: faq/gui general-gui-questions18643119
Ref: 56c718643119
Node: Quais toolkits de GUI existem para o Python?18643192
Ref: faq/gui what-gui-toolkits-exist-for-python18643376
Ref: 56c818643376
Ref: Quais toolkits de GUI existem para o Python?-Footnote-118644225
Ref: Quais toolkits de GUI existem para o Python?-Footnote-218644267
Ref: Quais toolkits de GUI existem para o Python?-Footnote-318644294
Ref: Quais toolkits de GUI existem para o Python?-Footnote-418644373
Node: Perguntas do Tkinter18644455
Ref: faq/gui tkinter-questions18644602
Ref: 56c918644602
Node: Como eu congelo as aplicações Tkinter?18644931
Ref: faq/gui how-do-i-freeze-tkinter-applications18645096
Ref: 56ca18645096
Node: Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?18645715
Ref: faq/gui can-i-have-tk-events-handled-while-waiting-for-i-o18645962
Ref: 56cb18645962
Node: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?18646532
Ref: faq/gui i-can-t-get-key-bindings-to-work-in-tkinter-why18646730
Ref: 56cc18646730
Node: FAD de “Por que o Python está instalado em meu computador?”18647373
Ref: faq/installed doc18647553
Ref: 56cd18647553
Ref: faq/installed no-color18647553
Ref: 56ce18647553
Ref: faq/installed why-is-python-installed-on-my-computer-faq18647553
Ref: 56cf18647553
Node: O que é Python?<2>18647823
Ref: faq/installed what-is-python18648000
Ref: 56d018648000
Ref: O que é Python?<2>-Footnote-118648498
Node: Porque Python está instalado em minha máquina?18648550
Ref: faq/installed why-is-python-installed-on-my-machine18648761
Ref: 56d118648761
Node: Eu posso apagar o Python?18649966
Ref: faq/installed can-i-delete-python18650149
Ref: 56d218650149
Node: Descontinuações18650967
Ref: deprecations/index doc18651085
Ref: 56d318651085
Ref: deprecations/index deprecations18651085
Ref: 56d418651085
Ref: deprecations/index no-color18651085
Ref: 56d518651085
Node: Remoção pendente no Python 3 15<7>18651552
Ref: deprecations/index pending-removal-in-python-3-1518651687
Ref: 56d618651687
Ref: Remoção pendente no Python 3 15<7>-Footnote-118656504
Ref: Remoção pendente no Python 3 15<7>-Footnote-218656559
Ref: Remoção pendente no Python 3 15<7>-Footnote-318656614
Ref: Remoção pendente no Python 3 15<7>-Footnote-418656669
Ref: Remoção pendente no Python 3 15<7>-Footnote-518656725
Ref: Remoção pendente no Python 3 15<7>-Footnote-618656767
Ref: Remoção pendente no Python 3 15<7>-Footnote-718656823
Node: Remoção pendente no Python 3 16<7>18656879
Ref: deprecations/index pending-removal-in-python-3-1618657059
Ref: 56d718657059
Ref: Remoção pendente no Python 3 16<7>-Footnote-118661534
Ref: Remoção pendente no Python 3 16<7>-Footnote-218661590
Ref: Remoção pendente no Python 3 16<7>-Footnote-318661646
Ref: Remoção pendente no Python 3 16<7>-Footnote-418661702
Node: Remoção pendente no Python 3 17<4>18661757
Ref: deprecations/index pending-removal-in-python-3-1718661937
Ref: 56d818661937
Ref: Remoção pendente no Python 3 17<4>-Footnote-118665072
Ref: Remoção pendente no Python 3 17<4>-Footnote-218665130
Ref: Remoção pendente no Python 3 17<4>-Footnote-318665185
Ref: Remoção pendente no Python 3 17<4>-Footnote-418665243
Node: Remoção pendente no Python 3 19<2>18665298
Ref: deprecations/index pending-removal-in-python-3-1918665483
Ref: 56d918665483
Node: Remoção pendente em versões futuras<7>18665769
Ref: deprecations/index pending-removal-in-future-versions18665944
Ref: 56da18665944
Ref: Remoção pendente em versões futuras<7>-Footnote-118673612
Ref: Remoção pendente em versões futuras<7>-Footnote-218673667
Ref: Remoção pendente em versões futuras<7>-Footnote-318673723
Ref: Remoção pendente em versões futuras<7>-Footnote-418673779
Ref: Remoção pendente em versões futuras<7>-Footnote-518673835
Ref: Remoção pendente em versões futuras<7>-Footnote-618673890
Ref: Remoção pendente em versões futuras<7>-Footnote-718673945
Node: Descontinuações na API C18674001
Ref: deprecations/index c-api-deprecations18674131
Ref: 56db18674131
Node: Remoção pendente no Python 3 15<8>18674439
Ref: deprecations/index id118674583
Ref: 56dc18674583
Ref: Remoção pendente no Python 3 15<8>-Footnote-118680978
Ref: Remoção pendente no Python 3 15<8>-Footnote-218681031
Node: Remoção pendente no Python 3 18<3>18681084
Ref: deprecations/index pending-removal-in-python-3-1818681278
Ref: 56dd18681278
Ref: Remoção pendente no Python 3 18<3>-Footnote-118683994
Ref: Remoção pendente no Python 3 18<3>-Footnote-218684047
Node: Remoção pendente em versões futuras<8>18684103
Ref: deprecations/index id218684252
Ref: 56de18684252
Node: Glossário18686004
Ref: glossary doc18686114
Ref: 56df18686114
Ref: glossary glossary18686114
Ref: 1e7418686114
Ref: glossary id118686114
Ref: 56e018686114
Ref: glossary no-color18686114
Ref: 56e118686114
Ref: glossary term-018686142
Ref: 48c18686142
Ref: glossary term-18686329
Ref: 48d18686329
Ref: glossary term-abstract-base-class18686785
Ref: 13b218686785
Ref: glossary term-annotate-function18687707
Ref: 15d18687707
Ref: glossary term-annotation18688033
Ref: 15c18688033
Ref: glossary term-argument18688841
Ref: 66f18688841
Ref: glossary term-asynchronous-context-manager18690392
Ref: 7e518690392
Ref: glossary term-asynchronous-generator18690652
Ref: 232718690652
Ref: glossary term-asynchronous-generator-iterator18691410
Ref: 47a818691410
Ref: glossary term-asynchronous-iterable18692151
Ref: f6818692151
Ref: glossary term-asynchronous-iterator18692378
Ref: 4c118692378
Ref: glossary term-attached-thread-state18692812
Ref: 4d7218692812
Ref: glossary term-attribute18694068
Ref: 27a718694068
Ref: glossary term-awaitable18694668
Ref: 4c318694668
Ref: glossary term-BDFL18694878
Ref: 56e318694878
Ref: glossary term-binary-file18695092
Ref: 1f2318695092
Ref: glossary term-borrowed-reference18695594
Ref: 3d418695594
Ref: glossary term-bytes-like-object18696318
Ref: 19318696318
Ref: glossary term-bytecode18697432
Ref: 4a418697432
Ref: glossary term-callable18698291
Ref: 2c1e18698291
Ref: glossary term-callback18698722
Ref: 2c3f18698722
Ref: glossary term-class18698890
Ref: 1bd518698890
Ref: glossary term-class-variable18699082
Ref: 56e418699082
Ref: glossary term-closure-variable18699257
Ref: 17f718699257
Ref: glossary term-complex-number18700482
Ref: 56e518700482
Ref: glossary term-context18701347
Ref: 18b718701347
Ref: glossary term-context-management-protocol18702001
Ref: 18b918702001
Ref: glossary term-context-manager18702175
Ref: 1e018702175
Ref: glossary term-context-variable18702380
Ref: 56e618702380
Ref: glossary term-contiguous18702708
Ref: 251b18702708
Ref: glossary term-coroutine18703283
Ref: 6ae18703283
Ref: glossary term-coroutine-function18703625
Ref: f6718703625
Ref: glossary term-CPython18703962
Ref: 8fa18703962
Ref: glossary term-current-context18704220
Ref: 18b818704220
Ref: glossary term-cyclic-isolate18704714
Ref: 533918704714
Ref: glossary term-decorator18705058
Ref: 92f18705058
Ref: glossary term-descriptor18705845
Ref: 17e718705845
Ref: glossary term-dictionary18706785
Ref: 226c18706785
Ref: glossary term-dictionary-comprehension18707038
Ref: 56e718707038
Ref: glossary term-dictionary-view18707420
Ref: 282a18707420
Ref: glossary term-docstring18707925
Ref: 241418707925
Ref: glossary term-duck-typing18708430
Ref: 56e218708430
Ref: glossary term-dunder18709280
Ref: 56e818709280
Ref: glossary term-EAFP18709537
Ref: 2f0718709537
Ref: glossary term-evaluate-function18710107
Ref: 437e18710107
Ref: glossary term-expression18710325
Ref: 226618710325
Ref: glossary term-extension-module18710931
Ref: 20fc18710931
Ref: glossary term-f-string18711085
Ref: 65f18711085
Ref: glossary term-f-strings18711095
Ref: 56ea18711095
Ref: glossary term-file-object18711316
Ref: 13bf18711316
Ref: glossary term-file-like-object18712186
Ref: 289a18712186
Ref: glossary term-filesystem-encoding-and-error-handler18712269
Ref: 75218712269
Ref: glossary term-finder18713312
Ref: 220318713312
Ref: glossary term-floor-division18713771
Ref: b3418713771
Ref: glossary term-free-threading18714201
Ref: 1f318714201
Ref: glossary term-free-variable18714515
Ref: 22bd18714515
Ref: glossary term-function18715010
Ref: 234218715010
Ref: glossary term-function-annotation18715330
Ref: 1ed018715330
Ref: glossary term-__future__18716102
Ref: fa118716102
Ref: glossary term-garbage-collection18716743
Ref: 1bbc18716743
Ref: glossary term-generator18717149
Ref: 125718717149
Ref: glossary term-generator-iterator18717724
Ref: dcd18717724
Ref: glossary term-generator-expression18718175
Ref: 56eb18718175
Ref: glossary term-generic-function18718605
Ref: bda18718605
Ref: glossary term-generic-type18718989
Ref: 1a118718989
Ref: glossary term-GIL18719374
Ref: 16418719374
Ref: glossary term-global-interpreter-lock18719432
Ref: 46d18719432
Ref: glossary term-hash-based-pyc18721073
Ref: 56ec18721073
Ref: glossary term-hashable18721333
Ref: 81918721333
Ref: glossary term-IDLE18722412
Ref: 56ed18722412
Ref: glossary term-immortal18722656
Ref: 28f18722656
Ref: glossary term-immutable18723177
Ref: 1e9518723177
Ref: glossary term-import-path18723582
Ref: 22dd18723582
Ref: glossary term-importing18723985
Ref: 22d018723985
Ref: glossary term-importer18724121
Ref: 22dc18724121
Ref: glossary term-interactive18724258
Ref: 1b518724258
Ref: glossary term-interpreted18724864
Ref: 56ee18724864
Ref: glossary term-interpreter-shutdown18725462
Ref: 47318725462
Ref: glossary term-iterable18726312
Ref: 142318726312
Ref: glossary term-iterator18727599
Ref: 4c218727599
Ref: glossary term-key-function18729179
Ref: ffb18729179
Ref: glossary term-keyword-argument18730514
Ref: f0218730514
Ref: glossary term-lambda18730566
Ref: 2a5418730566
Ref: glossary term-LBYL18730805
Ref: 56e918730805
Ref: glossary term-lexical-analyzer18731593
Ref: 213d18731593
Ref: glossary term-list18731677
Ref: 56ef18731677
Ref: glossary term-list-comprehension18731894
Ref: 8d218731894
Ref: glossary term-loader18732343
Ref: 196518732343
Ref: glossary term-locale-encoding18732742
Ref: 54418732742
Ref: glossary term-magic-method18733287
Ref: 44f818733287
Ref: glossary term-mapping18733370
Ref: 13b718733370
Ref: glossary term-meta-path-finder18733787
Ref: 126618733787
Ref: glossary term-metaclass18734156
Ref: 226718734156
Ref: glossary term-method18735071
Ref: 17cd18735071
Ref: glossary term-method-resolution-order18735412
Ref: 247118735412
Ref: glossary term-module18735733
Ref: 191a18735733
Ref: glossary term-module-spec18736039
Ref: 21fc18736039
Ref: glossary term-MRO18736306
Ref: 183518736306
Ref: glossary term-mutable18736368
Ref: 1e9a18736368
Ref: glossary term-named-tuple18736515
Ref: 85318736515
Ref: glossary term-namespace18737845
Ref: 1ef418737845
Ref: glossary term-namespace-package18738668
Ref: 2b118738668
Ref: glossary term-nested-scope18739309
Ref: 222318739309
Ref: glossary term-new-style-class18739865
Ref: 2bad18739865
Ref: glossary term-object18740243
Ref: 56f018740243
Ref: glossary term-optimized-scope18740434
Ref: 49b18740434
Ref: glossary term-package18741072
Ref: 23218741072
Ref: glossary term-parameter18741360
Ref: 21e418741360
Ref: glossary positional-only-parameter18741891
Ref: c6c18741891
Ref: glossary keyword-only-parameter18742313
Ref: 59e18742313
Ref: glossary term-path-entry18743915
Ref: 22eb18743915
Ref: glossary term-path-entry-finder18744110
Ref: 126718744110
Ref: glossary term-path-entry-hook18744504
Ref: 22ed18744504
Ref: glossary term-path-based-finder18744754
Ref: 22e018744754
Ref: glossary term-path-like-object18744923
Ref: 59a18744923
Ref: glossary term-PEP18745630
Ref: 56f118745630
Ref: glossary term-portion18746370
Ref: 22d718746370
Ref: glossary term-positional-argument18746574
Ref: f0318746574
Ref: glossary term-provisional-API18746629
Ref: 3ce18746629
Ref: glossary term-provisional-package18747788
Ref: 123818747788
Ref: glossary term-Python-300018747847
Ref: 56f218747847
Ref: glossary term-Pythonic18748097
Ref: 56f318748097
Ref: glossary term-qualified-name18748810
Ref: 1be418748810
Ref: glossary term-reference-count18749780
Ref: 4d6a18749780
Ref: glossary term-regular-package18750668
Ref: 22d418750668
Ref: glossary term-REPL18750846
Ref: 48b18750846
Ref: glossary term-__slots__18750980
Ref: 7ec18750980
Ref: glossary term-sequence18751397
Ref: 70b18751397
Ref: glossary term-set-comprehension18752586
Ref: 56f418752586
Ref: glossary term-single-dispatch18752939
Ref: glossary term-slice18753100
Ref: 246e18753100
Ref: glossary term-soft-deprecated18753438
Ref: 23c18753438
Ref: glossary term-special-method18753844
Ref: 1b4f18753844
Ref: glossary term-standard-library18754171
Ref: 56f518754171
Ref: glossary term-statement18754756
Ref: 2a9d18754756
Ref: glossary term-static-type-checker18755029
Ref: 56d18755029
Ref: glossary term-stdlib18755259
Ref: 56f618755259
Ref: glossary term-strong-reference18755371
Ref: 5d818755371
Ref: glossary term-t-string18756065
Ref: 56f718756065
Ref: glossary term-t-strings18756075
Ref: 56f818756075
Ref: glossary term-text-encoding18756269
Ref: 246b18756269
Ref: glossary term-text-file18756894
Ref: 1f2218756894
Ref: glossary term-thread-state18757473
Ref: 17af18757473
Ref: glossary term-token18758679
Ref: 213318758679
Ref: glossary term-triple-quoted-string18759094
Ref: 56f918759094
Ref: glossary term-type18759640
Ref: 1bd618759640
Ref: glossary term-type-alias18759873
Ref: 66218759873
Ref: glossary term-type-hint18760489
Ref: 226218760489
Ref: glossary term-universal-newlines18761151
Ref: f2918761151
Ref: glossary term-variable-annotation18761557
Ref: f4518761557
Ref: glossary term-virtual-environment18762397
Ref: 1f9b18762397
Ref: glossary term-virtual-machine18762684
Ref: 38f218762684
Ref: glossary term-walrus-operator18762865
Ref: 56fa18762865
Ref: glossary term-Zen-of-Python18763070
Ref: 56fb18763070
Ref: Glossário-Footnote-118763334
Ref: Glossário-Footnote-218763376
Ref: Glossário-Footnote-318763418
Ref: Glossário-Footnote-418763460
Ref: Glossário-Footnote-518763502
Ref: Glossário-Footnote-618763544
Ref: Glossário-Footnote-718763586
Ref: Glossário-Footnote-818763628
Ref: Glossário-Footnote-918763670
Ref: Glossário-Footnote-1018763712
Ref: Glossário-Footnote-1118763755
Ref: Glossário-Footnote-1218763794
Ref: Glossário-Footnote-1318763837
Ref: Glossário-Footnote-1418763880
Ref: Glossário-Footnote-1518763923
Ref: Glossário-Footnote-1618763966
Ref: Glossário-Footnote-1718763998
Ref: Glossário-Footnote-1818764041
Ref: Glossário-Footnote-1918764084
Ref: Glossário-Footnote-2018764127
Ref: Glossário-Footnote-2118764170
Ref: Glossário-Footnote-2218764213
Ref: Glossário-Footnote-2318764256
Ref: Glossário-Footnote-2418764299
Ref: Glossário-Footnote-2518764342
Ref: Glossário-Footnote-2618764385
Ref: Glossário-Footnote-2718764428
Ref: Glossário-Footnote-2818764471
Ref: Glossário-Footnote-2918764514
Ref: Glossário-Footnote-3018764557
Ref: Glossário-Footnote-3118764600
Ref: Glossário-Footnote-3218764643
Ref: Glossário-Footnote-3318764686
Ref: Glossário-Footnote-3418764729
Ref: Glossário-Footnote-3518764772
Ref: Glossário-Footnote-3618764832
Ref: Glossário-Footnote-3718764875
Ref: Glossário-Footnote-3818764918
Ref: Glossário-Footnote-3918764961
Ref: Glossário-Footnote-4018765004
Ref: Glossário-Footnote-4118765047
Node: Sobre esta documentação18765090
Ref: about doc18765199
Ref: 56fc18765199
Ref: about about-this-documentation18765199
Ref: 56fd18765199
Ref: about no-color18765199
Ref: 56fe18765199
Ref: Sobre esta documentação-Footnote-118766213
Ref: Sobre esta documentação-Footnote-218766262
Ref: Sobre esta documentação-Footnote-318766298
Node: Contribuidores da documentação do Python18766339
Ref: about contributors-to-the-python-documentation18766443
Ref: 56ff18766443
Ref: Contribuidores da documentação do Python-Footnote-118766935
Node: Lidando com bugs18766997
Ref: bugs doc18767113
Ref: 570018767113
Ref: bugs dealing-with-bugs18767113
Ref: 570118767113
Ref: bugs no-color18767113
Ref: 570218767113
Ref: bugs reporting-bugs18767113
Ref: 4dbb18767113
Node: Bugs na documentação18767733
Ref: bugs documentation-bugs18767859
Ref: 570418767859
Ref: Bugs na documentação-Footnote-118769012
Ref: Bugs na documentação-Footnote-218769066
Ref: Bugs na documentação-Footnote-318769118
Ref: Bugs na documentação-Footnote-418769163
Ref: Bugs na documentação-Footnote-518769239
Node: Usando o rastreador de problemas do Python18769302
Ref: bugs using-the-python-issue-tracker18769492
Ref: 570518769492
Ref: bugs using-the-tracker18769492
Ref: 55018769492
Ref: Usando o rastreador de problemas do Python-Footnote-118771953
Ref: Usando o rastreador de problemas do Python-Footnote-218772016
Node: Começando a contribuir com o Python por conta própria18772082
Ref: bugs contributing-to-python18772241
Ref: 570318772241
Ref: bugs getting-started-contributing-to-python-yourself18772241
Ref: 570618772241
Ref: Começando a contribuir com o Python por conta própria-Footnote-118772847
Ref: Começando a contribuir com o Python por conta própria-Footnote-218772884
Node: Direitos autorais18772960
Ref: copyright doc18773071
Ref: 570718773071
Ref: copyright copyright18773071
Ref: 570818773071
Ref: copyright no-color18773071
Ref: 570918773071
Node: História e Licença18773641
Ref: license doc18773762
Ref: 570b18773762
Ref: license history-and-license18773762
Ref: 570a18773762
Ref: license id118773762
Ref: 570c18773762
Ref: license no-color18773762
Ref: 570d18773762
Node: História do software18773956
Ref: license history-of-the-software18774091
Ref: 570e18774091
Node: Termos e condições para acessar ou usar Python18779152
Ref: license terms-and-conditions-for-accessing-or-otherwise-using-python18779349
Ref: 570f18779349
Node: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 218780456
Ref: license psf-license18780647
Ref: 571218780647
Ref: license python-software-foundation-license-version-218780647
Ref: 571318780647
Node: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 018783264
Ref: license beopen-com-license-agreement-for-python-2-018783512
Ref: 571418783512
Node: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 118786256
Ref: license cnri-license-agreement-for-python-1-6-118786509
Ref: 571518786509
Node: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 218790704
Ref: license cwi-license-agreement-for-python-0-9-0-through-1-218790964
Ref: 571618790964
Node: ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION18792231
Ref: license bsd018792434
Ref: 571018792434
Ref: license zero-clause-bsd-license-for-code-in-the-python-documentation18792434
Ref: 571718792434
Node: Licenças e Reconhecimentos para Software Incorporado18793224
Ref: license licenses-and-acknowledgements-for-incorporated-software18793391
Ref: 571818793391
Ref: license otherlicenses18793391
Ref: 571118793391
Node: Mersenne Twister18794213
Ref: license mersenne-twister18794339
Ref: 571918794339
Node: Soquetes<2>18796656
Ref: license sockets18796823
Ref: 571a18796823
Node: Serviços de soquete assíncrono18798657
Ref: license asynchronous-socket-services18798832
Ref: 571b18798832
Node: Gerenciamento de cookies18800070
Ref: license cookie-management18800260
Ref: 571c18800260
Node: Rastreamento de execução18801485
Ref: license execution-tracing18801672
Ref: 571d18801672
Node: Funções UUencode e UUdecode18802942
Ref: license uuencode-and-uudecode-functions18803140
Ref: 571e18803140
Node: Chamadas de procedimento remoto XML18804702
Ref: license xml-remote-procedure-calls18804884
Ref: 571f18804884
Node: test_epoll18806421
Ref: license test-epoll18806593
Ref: 572018806593
Node: kqueue de seleção18807852
Ref: license select-kqueue18807998
Ref: 572118807998
Node: SipHash2418809556
Ref: license siphash2418809705
Ref: 572218809705
Node: strtod e dtoa18810883
Ref: license strtod-and-dtoa18811023
Ref: 572318811023
Node: OpenSSL<2>18812443
Ref: license openssl18812579
Ref: 572418812579
Node: expat18823547
Ref: license expat18823676
Ref: 572518823676
Node: libffi18825112
Ref: license libffi18825238
Ref: 572618825238
Node: zlib<4>18826647
Ref: license zlib18826775
Ref: 572718826775
Node: cfuhash18828028
Ref: license cfuhash18828158
Ref: 572818828158
Node: libmpdec18829971
Ref: license libmpdec18830124
Ref: 572918830124
Node: Conjunto de testes C14N do W3C18831762
Ref: license w3c-c14n-test-suite18831916
Ref: 572a18831916
Node: mimalloc18833839
Ref: license mimalloc18833996
Ref: 572b18833996
Ref: license mimalloc-license18833996
Ref: 64a18833996
Node: asyncio<15>18835210
Ref: license asyncio18835367
Ref: 572c18835367
Ref: asyncio<15>-Footnote-118836717
Node: Global Unbounded Sequences GUS18836775
Ref: license global-unbounded-sequences-gus18836944
Ref: 572d18836944
Ref: Global Unbounded Sequences GUS-Footnote-118838643
Node: Ligações Zstandard18838721
Ref: license zstandard-bindings18838870
Ref: 572e18838870
Ref: Ligações Zstandard-Footnote-118840844
Node: Índice de Módulos Python18840887
Node: Índice18860592
Ref: 199921174690
Ref: library/stdtypes list insert21174691
Ref: library/stdtypes list remove21174693
Ref: using/cmdline audit_event_cpython_run_file_021174695
Ref: 45e821174697
Ref: library/stdtypes list clear21174699
Ref: library/unittest unittest tearDownModule21174701
Ref: 45ea21174703
Ref: 5f721174705
Ref: library/asyncio audit_event_cpython_run_stdin_221174707
Ref: howto/urllib2 quick-reference-to-http-headers21174709
Ref: library/sys script_path21174711
Ref: 45e521174713
Ref: library/sys audit_event_cpython_remote_debugger_script_021174715
Ref: 18c621174717
Ref: using/cmdline audit_event_cpython_run_stdin_021174719
Ref: 8d121174721
Ref: 15b421174723
Ref: 15b521174725
Ref: 45e921174727
Ref: library/_thread start_new_thread21174729
Ref: library/stdtypes list pop21174731
Ref: 45e721174733
Ref: 153121174735
Ref: 45e621174737
Ref: 1edb21174739
Ref: library/stdtypes list append21174741
Ref: library/ctypes audit_event_ctypes_memoryview_at_021174743
Ref: library/stdtypes range index21174745
Ref: 45f121174747
Ref: library/stdtypes list extend21174749
Ref: library/stdtypes tuple count21174751
Ref: 555b21174753
Ref: using/cmdline audit_event_cpython_run_stdin_121174755
Ref: 45f321174757
Ref: 45e221174759
Ref: library/time audit_event_time_sleep_021174761
Ref: library/stdtypes tuple index21174763
Ref: 139421174765
Ref: 5f621174767

End Tag Table


Local Variables:
coding: utf-8
End:
